@openmrs/esm-implementer-tools-app 3.1.10-pre.545 → 3.1.10-pre.546
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/dist/728.openmrs-esm-implementer-tools-app.js +1 -1
- package/dist/728.openmrs-esm-implementer-tools-app.js.map +1 -1
- package/dist/openmrs-esm-implementer-tools-app.js +1 -1
- package/dist/openmrs-esm-implementer-tools-app.js.buildmanifest.json +2 -2
- package/package.json +3 -3
- package/src/popup/popup.component.tsx +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_openmrs_esm_implementer_tools_app=self.webpackChunk_openmrs_esm_implementer_tools_app||[]).push([[728],{7728:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Qe});var o=n(9297),l=n(4790),a=n(6288),s=n(3569),r=n(4990),i=n(487),c=n.n(i),u=n(9131);c()(u.Z,{insert:"head",singleton:!1});const d=u.Z.locals||{};var m=n(7789),A=n(2626),_=n(1890),p=n(2562),f=n(4946),E=n(6512),g=n(2100),b=n(2661),y=n(9390),C=n(796),v=n(3435),h=n(7704),B=n(5281);c()(B.Z,{insert:"head",singleton:!1});const x=B.Z.locals||{};var k=n(150),w=n(6315),Z=n(988),T=n(323),S=n(5259),N=n(2015),O=n(5555);c()(O.Z,{insert:"head",singleton:!1});const I=O.Z.locals||{};var j=n(9963),P=n(7474),D=n(9258),W=n(4421),F=n(7555),M=n(1436);c()(M.Z,{insert:"head",singleton:!1});const L=M.Z.locals||{};var V=n(9553),U=n(8112);function z({element:e,valueArray:t,setValue:n}){const l=(0,o.useMemo)((()=>(0,P.Z)("array-editor-")),[]);return o.default.createElement(V.n9,{className:L.arrayEditor},o.default.createElement(U.x4,null,o.default.createElement(U.Fx,null,t.map(((a,s)=>{var i,c;return o.default.createElement(U.s1,{key:`${l}-${s}`},o.default.createElement(U.ag,null,o.default.createElement(te,{element:{...e._elements,_value:a,_source:e._source},valueType:null!==(i=null===(c=e._elements)||void 0===c?void 0:c._type)&&void 0!==i?i:E.Type.Object,value:a,onChange:e=>{const o=(0,S.Z)(t);o[s]=e,n(o)}})),o.default.createElement(U.ag,{className:L.buttonCell},o.default.createElement(r.Z,{renderIcon:f.Z,size:"sm",kind:"secondary",iconDescription:"Remove",hasIconOnly:!0,onClick:()=>{const e=(0,S.Z)(t);e.splice(s,1),n(e)}})))})),o.default.createElement(U.s1,null,o.default.createElement(U.ag,null),o.default.createElement(U.ag,{className:L.buttonCell},o.default.createElement(r.Z,{renderIcon:F.Z,size:"sm",iconDescription:"Add",hasIconOnly:!0,onClick:()=>{var o,l;const a=(0,S.Z)(t),s=(null!==(o=null===(l=e._elements)||void 0===l?void 0:l._type)&&void 0!==o?o:E.Type.Object)==E.Type.Object?{}:null;a.push(s),n(a)}}))))))}var R=n(753),$=n(3810);c()($.Z,{insert:"head",singleton:!1});const Y=$.Z.locals||{};function q({setConcept:e}){const[t,n]=(0,o.useState)(""),[l,a]=(0,o.useState)([]),[s,r]=(0,o.useState)(""),i=(0,o.useMemo)((()=>(0,P.Z)()),[]),c=(0,R.Z)((e=>{n(e)}),300);return(0,o.useEffect)((()=>{const e=new AbortController;var n;return t&&t.length>=2?(n=t,(0,E.openmrsFetch)(`/ws/rest/v1/concept/?q=${n}`,{method:"GET"})).then((({data:{results:e}})=>{a(e.slice(0,9))})):a([]),()=>e.abort()}),[t]),o.default.createElement("div",{className:Y.autocomplete},o.default.createElement("input",{type:"text",autoComplete:"off",autoCapitalize:"off","aria-autocomplete":"list",role:"combobox","aria-label":"Look up concept by name","aria-controls":`searchbox-${i}`,"aria-expanded":l.length>0,placeholder:"Look up concept by name",autoFocus:!0,onChange:e=>{c(e.target.value)}}),o.default.createElement("div",{id:`searchbox-${i}`},o.default.createElement("ul",{role:"listbox"},!!l.length&&l.map((t=>o.default.createElement("li",{key:t.uuid,role:"option",style:{padding:"5px"},onClick:()=>{(t=>{r(t.uuid),n(""),a([]),e(t)})(t)},"aria-selected":"true"},t.display))),t&&l&&!l.length&&o.default.createElement("li",null,"No matching results found."))))}var J=n(553);function K({value:e,setValue:t}){const[n,l]=(0,o.useState)([]);return(0,o.useEffect)((()=>{function e(e){l(Object.keys(e.extensions))}return e(E.extensionStore.getState()),E.extensionStore.subscribe(e)}),[]),o.default.createElement(J.Z.Filterable,{id:"add-select",items:n.map((e=>({id:e,label:e}))),placeholder:"Select extensions",onChange:e=>t(e.selectedItems.map((e=>e.id))),initialSelectedItems:e})}function X({slotName:e,slotModuleName:t,value:n,setValue:l}){const a=function(e,t,n){const o=e.slots[n],l=o.instances[t];return(0,E.getAssignedIds)(l,o.attachedIds)}((0,E.useExtensionStore)(),t,e);return o.default.createElement(J.Z.Filterable,{id:"add-select",items:a.map((e=>({id:e,label:e}))),placeholder:"Select extensions",onChange:e=>l(e.selectedItems.map((e=>e.id))),initialSelectedItems:n})}var Q=n(8147);c()(Q.Z,{insert:"head",singleton:!1});const G=Q.Z.locals||{};function H({element:e,valueObject:t,setValue:n}){return o.default.createElement(V.n9,{className:G.objectEditor},o.default.createElement(U.x4,null,o.default.createElement(U.Fx,null,Object.entries(e).map((([l,a])=>l.startsWith("_")?null:o.default.createElement(U.s1,{key:l},o.default.createElement(U.ag,null,o.default.createElement(te,{element:{_value:l,_source:e._source},valueType:E.Type.String,value:l,onChange:e=>{const o=(0,S.Z)(t);o[e]=(0,S.Z)(t[l]),delete o[l],n(o)}})),o.default.createElement(U.ag,null,o.default.createElement(te,{element:{...a,_value:t[l],_source:e._source},valueType:a._type,value:t[l],onChange:e=>{const o=(0,S.Z)(t);o[l]=e,n(o)}}))))))))}function ee({slotName:e,slotModuleName:t,value:n,setValue:l}){return o.default.createElement("div",null,"Todo: compose array with extension lookup")}function te({element:e,path:t,valueType:n,value:l,onChange:a}){const[s]=(0,o.useState)((0,P.Z)("value-editor-"));if("remove"===n&&!t)throw new Error("Programming error: ValueEditorField initialized for a 'remove' field, but no 'path' is available");return n===E.Type.Array?o.default.createElement(z,{element:e,valueArray:l,setValue:a}):n===E.Type.Boolean?o.default.createElement(D.Z,{id:s,checked:l,hideLabel:!0,labelText:"",onChange:a}):n===E.Type.ConceptUuid?o.default.createElement(q,{setConcept:e=>a(e.uuid)}):n===E.Type.Number?o.default.createElement(W.ZP,{id:s,value:l,onChange:e=>a(Number(e.imaginaryTarget.value))}):n===E.Type.String||n===E.Type.UUID?o.default.createElement(C.Z,{id:s,value:l,labelText:"",onChange:e=>a(e.target.value)}):"add"===n?o.default.createElement(K,{value:null!=l?l:e._value,setValue:a}):"remove"===n&&t?o.default.createElement(X,{slotName:t[2],slotModuleName:t[0],value:null!=l?l:e._value,setValue:a}):"order"===n&&t?o.default.createElement(ee,{slotName:t[2],slotModuleName:t[0],value:null!=l?l:e._value,setValue:a}):"configure"===n&&t?o.default.createElement(o.default.Fragment,null,"Todo"):o.default.createElement(H,{element:e,valueObject:l,setValue:a})}function ne({element:e,customType:t,path:n,handleSave:a,handleClose:s}){const i=(0,o.useRef)(null),[c,u]=(0,o.useState)(e._value),d=null!=t?t:e._type,m=e=>{"Escape"===e.key?s():"Enter"===e.key&&a(JSON.stringify(c))};return(0,o.useEffect)((()=>(document.addEventListener("keyup",m),()=>{document.removeEventListener("keyup",m)})),[c]),o.default.createElement("div",{ref:i,style:{display:"inherit"}},o.default.createElement(te,{element:e,path:n,value:c,onChange:u,valueType:d}),o.default.createElement("div",{className:x.valueEditorButtons},o.default.createElement(r.Z,{renderIcon:j.Z,size:"sm",kind:"primary",iconDescription:"Save",hasIconOnly:!0,onClick:()=>a(JSON.stringify(c))}),o.default.createElement(r.Z,{renderIcon:l.Z,size:"sm",kind:"secondary",iconDescription:"Cancel",hasIconOnly:!0,onClick:s})))}function oe({value:e}){return o.default.createElement(o.default.Fragment,null,Array.isArray(e)?"object"==typeof e[0]?e.map(((e,t)=>o.default.createElement("div",{key:`${e}-${t}`,style:{marginBottom:"1em"}},o.default.createElement(oe,{value:e})))):e.join(", "):"object"==typeof e&&null!==e?Object.entries(e).map((([e,t],n)=>o.default.createElement("div",{key:`${e}-${n}`},e,": ",o.default.createElement(oe,{value:t})))):"string"==typeof e||"number"==typeof e?e:null==e?"none":JSON.stringify(e))}function le({path:e,element:t,customType:n}){const[l,a]=(0,o.useState)(),[s,i]=(0,o.useState)(!1),[c,u]=(0,o.useState)(null),d=(0,o.useRef)(null),m=()=>{i(!1),u(null)};return(0,o.useEffect)((()=>{const t=t=>{t.configPathBeingEdited&&(0,Z.Z)(t.configPathBeingEdited,e)&&d&&d.current&&(i(!0),d.current.focus())};return t(h.wT.getState()),h.wT.subscribe(t)}),[]),(0,o.useEffect)((()=>{const n=h.wT.getState();s&&!(0,Z.Z)(n.configPathBeingEdited,e)&&h.wT.setState({configPathBeingEdited:e,activeItemDescription:{path:e,source:t._source,description:t._description,value:l}}),!s&&(0,Z.Z)(n.configPathBeingEdited,e)&&h.wT.setState({configPathBeingEdited:null})}),[s]),o.default.createElement(o.default.Fragment,null,o.default.createElement("div",{className:I.line},s?o.default.createElement(o.default.Fragment,null,o.default.createElement(ne,{element:t,customType:n,path:e,handleClose:m,handleSave:t=>{try{const n=JSON.parse(t),o=ae((0,S.Z)(E.temporaryConfigStore.getState()),["config",...e],n);E.temporaryConfigStore.setState(o),a(t),m()}catch(e){console.warn(e),u("That's not formatted quite right. Try again.")}}})):o.default.createElement(o.default.Fragment,null,o.default.createElement("button",{className:`${I.secretButton} ${"temporary config"==t._source?I.overriddenValue:""}`,onClick:()=>i(!0),ref:d},o.default.createElement(oe,{value:t._value})),"temporary config"==t._source?o.default.createElement(r.Z,{style:{marginLeft:"1em"},renderIcon:N.Z,size:"sm",kind:"tertiary",iconDescription:"Reset to default",hasIconOnly:!0,onClick:()=>{E.temporaryConfigStore.setState((0,T.Z)(E.temporaryConfigStore.getState(),["config",...e]))}}):null),c&&o.default.createElement("div",{className:I.error},c)))}function ae(e,t,n){var o;return t.length>1?e[t[0]]=ae(null!==(o=e[t[0]])&&void 0!==o?o:{},t.slice(1),n):e[t[0]]=n,e}function se({moduleName:e,slotName:t,config:n}){return o.default.createElement(le,{path:[e,t,"configure"],element:n&&Object.keys(n).length?{_value:n,_source:"",_default:{}}:{_value:void 0,_source:"default",_default:{}},customType:"configure"})}var re=n(5336);c()(re.Z,{insert:"head",singleton:!1});const ie=re.Z.locals||{};function ce({leaf:e,label:t,children:n,onMouseEnter:l,onMouseLeave:a}){return e?o.default.createElement(U.s1,{className:ie.structuredListRow,onMouseEnter:l,onMouseLeave:a},o.default.createElement(U.ag,{className:ie.labelCell},t),o.default.createElement(U.ag,null,n)):o.default.createElement(o.default.Fragment,null,o.default.createElement(U.s1,{className:ie.structuredListRow,onMouseEnter:l,onMouseLeave:a},o.default.createElement(U.ag,{className:ie.labelCell},t),o.default.createElement(U.ag,null)),o.default.createElement(U.s1,{className:ie.structuredListRow},o.default.createElement(U.ag,null),o.default.createElement(U.ag,{className:ie.subtreeCell},o.default.createElement(U.x4,{className:ie.structuredList},o.default.createElement(U.Fx,null,n)))))}function ue({extensionsConfig:e,moduleName:t}){return e&&Object.keys(e).length?o.default.createElement(ce,{label:"extension slots",leaf:!1},Object.keys(e).map((n=>o.default.createElement(de,{key:n,config:null==e?void 0:e[n],path:[t,"extensions",n]})))):null}function de({config:e,path:t}){const[n,l]=(0,o.useState)([]),a=t[0],s=t[2];function r(e){var t;const n=h.wT.getState();(0,Z.Z)(null===(t=n.activeItemDescription)||void 0===t?void 0:t.path,e)&&!(0,Z.Z)(n.configPathBeingEdited,e)&&h.wT.setState({activeItemDescription:void 0})}return(0,o.useEffect)((()=>{function e(e){var t,n,o;l(null===(t=e.slots[s])||void 0===t||null===(n=t.instances)||void 0===n||null===(o=n[a])||void 0===o?void 0:o.assignedIds)}return e(E.extensionStore.getState()),E.extensionStore.subscribe(e)}),[]),o.default.createElement(ce,{label:s,leaf:!1,onMouseEnter:()=>function(e,t){h.wT.getState().configPathBeingEdited||h.wT.setState({activeItemDescription:{path:[e,t],value:n}})}(a,s),onMouseLeave:()=>r([a,s])},["add","remove","order","configure"].map((n=>{var l,i;return o.default.createElement(ce,{label:n,key:t.join(".")+n,leaf:!0,onMouseEnter:()=>function(e,t,n,o){h.wT.getState().configPathBeingEdited||h.wT.setState({activeItemDescription:{path:[e,t,n],source:null==o?void 0:o._source,description:{add:"Add an extension to this slot.",remove:"Remove an extension from this slot.",order:"Reorder the extensions in this slot.",configure:"Pass a configuration object directly to one of the extensions in this slot."}[n],value:JSON.stringify(null==o?void 0:o._value)}})}(a,s,n,null==e?void 0:e[n]),onMouseLeave:()=>r([a,s,n])},"configure"===n?o.default.createElement(se,{moduleName:a,slotName:s,config:null==e||null===(l=e.configure)||void 0===l?void 0:l._value}):o.default.createElement(le,{path:t.concat([n]),element:null!==(i=null==e?void 0:e[n])&&void 0!==i?i:{_value:void 0,_source:"default",_default:[]},customType:n}))})))}function me({config:e,path:t=[]}){return o.default.createElement(o.default.Fragment,null,Object.entries(e).map((([e,n],l)=>{const a=t.concat([e]),s=n.hasOwnProperty("_value")||n.hasOwnProperty("_type");return o.default.createElement(ce,{label:e,leaf:s,onMouseEnter:()=>function(e,t,n){h.wT.getState().configPathBeingEdited||h.wT.setState({activeItemDescription:{path:e,source:n._source,description:n._description,value:JSON.stringify(n._value)}})}(a,0,n),onMouseLeave:()=>function(e){var t;const n=h.wT.getState();(0,Z.Z)(null===(t=n.activeItemDescription)||void 0===t?void 0:t.path,e)&&!(0,Z.Z)(n.configPathBeingEdited,e)&&h.wT.setState({activeItemDescription:void 0})}(a),key:`subtree-${a.join(".")}`},s?o.default.createElement(le,{path:a,element:n}):o.default.createElement(me,{config:n,path:a}))})))}var Ae=n(8180);function _e({children:e}){return o.default.createElement(U.x4,{className:ie.structuredList},o.default.createElement(U.Fx,null,e))}function pe({config:e,moduleName:t}){return o.default.createElement(_e,null,o.default.createElement(ue,{extensionsConfig:e.extensions,moduleName:t}),o.default.createElement(me,{config:(0,Ae.Z)(e,((e,t)=>"extensions"!==t)),path:[t]}))}function fe({config:e}){return o.default.createElement("div",null,o.default.createElement(k.ZP,{align:"start"},e&&Object.keys(e).sort().map((t=>{const n=e[t];return Object.keys(n).length?o.default.createElement(w.Z,{title:o.default.createElement("h6",{className:x.moduleName},t),className:x.fullWidthAccordion,key:`accordion-${t}`},o.default.createElement("div",{key:`${t}-config`},o.default.createElement(pe,{config:n,moduleName:t}))):null}))))}var Ee=n(7970);c()(Ee.Z,{insert:"head",singleton:!1});const ge=Ee.Z.locals||{};function be(){const{activeItemDescription:e}=(0,E.useStore)(h.wT);return o.default.createElement("div",null,e?o.default.createElement(o.default.Fragment,null,o.default.createElement("p",{className:ge.path},e.path.slice(1).join(" → ")),o.default.createElement("p",{className:ge.description},e.description),o.default.createElement("p",{className:ge.source},"default"===e.source?o.default.createElement(o.default.Fragment,null,"The current value is the default."):e.source?o.default.createElement(o.default.Fragment,null,"The current value comes from ",e.source,"."):null),e.value?o.default.createElement("p",null,"Value:"):null,o.default.createElement("p",{className:ge.value},Array.isArray(e.value)?e.value.map(((e,t)=>o.default.createElement("p",{key:`${e}-${t}`},e))):e.value)):null)}var ye=n(8403);const Ce={toggleIsUIEditorEnabled:({isUIEditorEnabled:e})=>({isUIEditorEnabled:!e}),toggleIsToolbarOpen:({isConfigToolbarOpen:e})=>({isConfigToolbarOpen:!e})},ve={toggleDevDefaults:({devDefaultsAreOn:e})=>({devDefaultsAreOn:!e})},he=({isConfigToolbarOpen:e,toggleIsToolbarOpen:t})=>o.default.createElement(r.Z,{hasIconOnly:!0,renderIcon:e?_.Z:A.Z,onClick:t,kind:"ghost",size:"small",iconDescription:(e?"Hide":"Show")+" toolbar"}),Be=()=>{const{t:e}=(0,m.useTranslation)(),{isUIEditorEnabled:t,toggleIsUIEditorEnabled:n,isConfigToolbarOpen:l,toggleIsToolbarOpen:a}=(0,E.useStore)(h.wT,Ce),{devDefaultsAreOn:s,toggleDevDefaults:i}=(0,E.useStore)(E.configInternalStore,ve),{config:c}=(0,E.useStore)(E.implementerToolsConfigStore),u=(0,E.useExtensionStore)(),d=(0,E.useStore)(E.temporaryConfigStore),[A,_]=(0,o.useState)(""),B=d.config,k=new Blob([JSON.stringify(B,void 0,2)],{type:"application/json"}),w=(0,o.useMemo)((()=>{const e=(0,S.Z)(c);for(let t of Object.values(u.slots))for(let n of Object.keys(t.instances))e[n].extensions||(e[n].extensions={}),e[n].extensions[t.name]||(e[n].extensions[t.name]={});return e}),[c,u]),Z=(0,o.useMemo)((()=>A?function e(t,n){const o={};for(let a of Object.keys(t))if(a.includes(n))o[a]=(0,S.Z)(t[a]);else if(!((l=t[a]).hasOwnProperty("_default")||l._type||l.hasOwnProperty("_value")||l.hasOwnProperty("_source"))){const l=e(t[a],n);(0,ye.Z)(l)||(o[a]=l)}var l;return o}(w,A):w),[A,w]);return o.default.createElement(o.default.Fragment,null,o.default.createElement("div",{className:x.tools},l?o.default.createElement(g.Z,{style:{margin:"0.25rem",padding:"0.5em 1.5em"}},o.default.createElement(b.Z,null,o.default.createElement(y.Z,{sm:1,md:2},o.default.createElement(C.Z,{id:"extensionSearch",labelText:"Search configuration",onChange:e=>_(e.target.value)})),o.default.createElement(y.Z,{sm:1,md:1},o.default.createElement(v.Z,{id:"devConfigSwitch",labelText:e("devConfig","Dev Config"),onToggle:i,toggled:s})),o.default.createElement(y.Z,{sm:1,md:1,className:x.actionButton},o.default.createElement(v.Z,{id:"uiEditorSwitch",labelText:e("uiEditor","UI Editor"),toggled:t,onToggle:n})),o.default.createElement(y.Z,{sm:1,md:2,className:x.actionButton},o.default.createElement(r.Z,{kind:"danger",iconDescription:"Clear temporary config",renderIcon:f.Z,onClick:()=>{E.temporaryConfigStore.setState({config:{}})}},e("clearTemporaryConfig","Clear Temporary Config"))),o.default.createElement(y.Z,{sm:1,md:2,className:x.actionButton},o.default.createElement(r.Z,{kind:"secondary",iconDescription:"Download temporary config",renderIcon:p.Z},o.default.createElement("a",{className:x.downloadLink,download:"temporary_config.json",href:window.URL.createObjectURL(k)},e("downloadTemporaryConfig","Download Temporary Config")))))):null,o.default.createElement("div",{className:x.toggleToolbarButton},o.default.createElement(he,{isConfigToolbarOpen:l,toggleIsToolbarOpen:a}))),o.default.createElement("div",{className:x.mainContent,style:{marginTop:l?"72px":"25px",height:l?"calc(50vh - 114px)":"calc(50vh - 68px)"}},o.default.createElement("div",{className:x.configTreePane},o.default.createElement(fe,{config:Z})),o.default.createElement("div",{className:x.descriptionPane},o.default.createElement(be,null))))};var xe=n(6761),ke=n(6574),we=n(5795),Ze=n(3412),Te=n(4685),Se=n(1855),Ne=n(9918),Oe=n(7172);const Ie=({frontendModules:e})=>{const{t}=(0,m.useTranslation)(),n=(0,o.useMemo)((()=>[{key:"name",header:t("moduleName","Module Name")},{key:"installedVersion",header:t("installedVersion","Installed Version")},{key:"requiredVersion",header:t("requiredVersion","Required Version")}]),[t]);return o.default.createElement("div",null,o.default.createElement(xe.ZP,{rows:[],headers:n},(({headers:n,getTableProps:l,getHeaderProps:a})=>o.default.createElement(ke.Z,{title:""},o.default.createElement(we.Z,l(),o.default.createElement(Ze.Z,null,o.default.createElement(Te.Z,null,n.map((e=>o.default.createElement(Se.Z,a({header:e}),e.header))))),o.default.createElement(Ne.Z,null,e.map((e=>o.default.createElement(o.Fragment,{key:e.name},o.default.createElement(Te.Z,null,o.default.createElement(Oe.Z,null,o.default.createElement("strong",null,e.name)),o.default.createElement(Oe.Z,null),o.default.createElement(Oe.Z,null)),e.dependencies.map((e=>o.default.createElement(Te.Z,{key:e.name},o.default.createElement(Oe.Z,null,e.name),o.default.createElement(Oe.Z,null,"missing"===e.type?o.default.createElement("span",{style:{color:"red"}},t("missing","Missing")):"version-mismatch"===e.type?o.default.createElement("span",{style:{color:"red"}},e.installedVersion):o.default.createElement("span",{style:{color:"green"}},e.installedVersion)),o.default.createElement(Oe.Z,null,e.requiredVersion)))))))))))))};function je(e){const{t}=(0,m.useTranslation)(),[n,i]=(0,o.useState)(0);return o.default.createElement("div",{className:d.popup},o.default.createElement("div",{className:d.topBar},o.default.createElement("div",{className:d.tabs},o.default.createElement(a.Z,{onChange:e=>{i(e.index)}},o.default.createElement(s.Z,{name:"configuration-tab",text:t("configuration","Configuration"),onClick:()=>{},onKeyDown:()=>{}}),o.default.createElement(s.Z,{name:"backend-modules-tab",text:t("backendModules","Backend Modules"),onClick:()=>{},onKeyDown:()=>{}}))),o.default.createElement("div",null,o.default.createElement(r.Z,{className:d.closeButton,kind:"secondary",renderIcon:l.Z,iconDescription:"Close",onClick:e.close,hasIconOnly:!0}))),o.default.createElement("div",{className:d.content},0==n?o.default.createElement(Be,null):o.default.createElement(Ie,{frontendModules:e.frontendModules})))}var Pe=n(1300),De=n(3539);c()(De.Z,{insert:"head",singleton:!1});const We=De.Z.locals||{};var Fe=n(2268);function Me({el:e,children:t}){return e?(0,Fe.createPortal)(t,e):null}function Le({extensionName:e,slotModuleName:t,slotName:n,domElement:l}){const[a,s]=(0,o.useState)();return(0,o.useEffect)((()=>{if(l){var e;const t=document.createElement("div");null===(e=l.parentElement)||void 0===e||e.appendChild(t),s(t)}}),[l]),a?o.default.createElement(Me,{key:`extension-overlay-${t}-${n}-${e}`,el:a},o.default.createElement(Ve,{extensionId:e})):null}function Ve({extensionId:e}){return o.default.createElement("button",{className:We.extensionOverlay},o.default.createElement("span",{className:We.extensionTooltip},e))}function Ue(){const{slots:e,extensions:t}=(0,E.useExtensionStore)(),{isOpen:n}=(0,E.useStore)(h.wT);return o.default.createElement(o.default.Fragment,null,n?null:o.default.createElement($e,null),e?Object.entries(e).map((([e,t])=>Object.keys(t.instances).map((t=>o.default.createElement(Me,{key:`slot-overlay-${t}-${e}`,el:document.querySelector(`*[data-extension-slot-name="${e}"][data-extension-slot-module-name="${t}"]`)},o.default.createElement(ze,{slotName:e})))))):null,t?Object.entries(t).map((([e,t])=>Object.entries(t.instances).map((([t,n])=>Object.entries(n).map((([n,l])=>o.default.createElement(Le,{key:n,extensionName:e,slotModuleName:t,slotName:n,domElement:document.querySelector(`*[data-extension-slot-name="${n}"][data-extension-slot-module-name="${t}"] *[data-extension-id="${l.id}"]`)}))))))):null)}function ze({slotName:e}){return o.default.createElement(o.default.Fragment,null,o.default.createElement("div",{className:We.slotOverlay}),o.default.createElement("div",{className:We.slotName},e))}const Re={toggleIsUIEditorEnabled:({isUIEditorEnabled:e})=>({isUIEditorEnabled:!e})};function $e(){const{toggleIsUIEditorEnabled:e}=(0,E.useStore)(h.wT,Re);return o.default.createElement(r.Z,{className:We.exitButton,kind:"danger",size:"sm",renderIcon:l.Z,iconDescription:"Exit UI Editor",tooltipPosition:"left",onClick:e,hasIconOnly:!0})}var Ye=n(3114);let qe;function Je(e,t){return(0,E.isVersionSatisfied)(e,t)?"okay":"version-mismatch"}function Ke(){const[e,t]=(0,o.useState)([]);return(0,o.useEffect)((()=>{(async function(){if(!qe){var e;const t=(null!==(e=window.installedModules)&&void 0!==e?e:[]).filter((e=>e[1].backendDependencies)).map((e=>({backendDependencies:e[1].backendDependencies,moduleName:e[0]}))),n=await async function(){try{return(await(0,E.openmrsFetch)("/ws/rest/v1/module?v=custom:(uuid,version)",{method:"GET"})).data.results}catch(e){console.error(e)}return[]}();qe=t.map((e=>function(e,t){const n=[],o=function(e,t){const n=Object.keys(e),o=t.map((e=>e.uuid));return(0,Ye.Z)(n,o).map((t=>({uuid:t,version:e[t]})))}(e.backendDependencies,t),l=function(e,t){return Object.keys(e).map((t=>({uuid:t,version:e[t]}))).filter((e=>t.find((t=>e.uuid===t.uuid))))}(e.backendDependencies,t);return n.push(...o.map((e=>({name:e.uuid,requiredVersion:e.version,type:"missing"}))),...l.map((e=>{const n=e.version,o=function(e,t){var n,o;const l=e.uuid;return null!==(n=null===(o=t.find((e=>e.uuid==l)))||void 0===o?void 0:o.version)&&void 0!==n?n:""}(e,t);return{name:e.uuid,requiredVersion:n,installedVersion:o,type:Je(n,o)}}))),{name:e.moduleName,dependencies:n}}(e,n)))}return qe})().then(t)}),[]),e}function Xe(){const e=Ke(),[t,n]=(0,o.useState)(!1);(0,o.useEffect)((()=>{n((t=>t||function(e){return e.some((e=>e.dependencies.some((e=>"okay"!==e.type))))}(e)))}),[e]),(0,o.useEffect)((()=>{t&&(0,E.showNotification)({description:"Found modules with unresolved backend dependencies.",action:o.default.createElement(Pe.xh,{onClick:h.XE},"View"),kind:"error"})}),[t]);const{isOpen:l,isUIEditorEnabled:a,openTabIndex:s}=(0,E.useStore)(h.wT);return o.default.createElement(o.default.Fragment,null,l?o.default.createElement(je,{close:h.zI,frontendModules:e,visibleTabIndex:s}):null,a?o.default.createElement(Ue,null):null)}function Qe(){return o.default.createElement(E.UserHasAccess,{privilege:"coreapps.systemAdministration"},o.default.createElement(Xe,null))}},5281:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__configuration-styles__tools___3AGqJ {\n position: fixed;\n width: 100%;\n background-color: #e0e0e0;\n border-bottom: 1px solid #a0a0a0;\n border-top: 1px solid #c0c0c0;\n z-index: 2;\n}\n\n.-esm-implementer-tools__configuration-styles__tools___3AGqJ > div {\n flex: 0 1 auto;\n}\n\n.-esm-implementer-tools__configuration-styles__actionButton___2Uppy {\n display: inline-flex;\n align-items: center;\n}\n\n.-esm-implementer-tools__configuration-styles__downloadLink___3Acrx {\n text-decoration: none;\n color: inherit;\n}\n\n.-esm-implementer-tools__configuration-styles__mainContent___2sxQa {\n background-color: #f0f0f0;\n width: 100%;\n display: flex;\n overflow-y: auto;\n}\n\n.-esm-implementer-tools__configuration-styles__configTreePane___33WF1 {\n width: 55%;\n overflow-wrap: break-word;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n\n.-esm-implementer-tools__configuration-styles__descriptionPane___2K_Kr {\n width: 45%;\n background-color: #e0e0e0;\n color: #424242;\n padding: 1em 2em;\n font-size: 12pt;\n overflow-wrap: break-word;\n overflow-y: scroll;\n}\n\n.-esm-implementer-tools__configuration-styles__configTreePane___33WF1 .bx--text-input-wrapper {\n min-width: 8em;\n}\n\n.-esm-implementer-tools__configuration-styles__fullWidthAccordion___kPYfh .bx--accordion__content {\n padding-right: 0;\n}\n\n.-esm-implementer-tools__configuration-styles__toggleToolbarButton___2HZdY {\n position: absolute;\n left: 97vw;\n top: -2px;\n}\n\n.-esm-implementer-tools__configuration-styles__valueEditorInput___DWOa3 {\n width: 25em;\n}\n\n.-esm-implementer-tools__configuration-styles__valueEditorButtons___1uqDN {\n height: 2.5rem;\n min-width: 5em;\n margin-left: 1em;\n}\n","",{version:3,sources:["webpack://./src/configuration/configuration.styles.css"],names:[],mappings:"AAAA;EACE,eAAe;EACf,WAAW;EACX,yBAAyB;EACzB,gCAAgC;EAChC,6BAA6B;EAC7B,UAAU;AACZ;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,yBAAyB;EACzB,WAAW;EACX,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,yBAAyB;EACzB,kBAAkB;EAClB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,yBAAyB;EACzB,cAAc;EACd,gBAAgB;EAChB,eAAe;EACf,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,SAAS;AACX;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,cAAc;EACd,cAAc;EACd,gBAAgB;AAClB",sourcesContent:[".tools {\n position: fixed;\n width: 100%;\n background-color: #e0e0e0;\n border-bottom: 1px solid #a0a0a0;\n border-top: 1px solid #c0c0c0;\n z-index: 2;\n}\n\n.tools > div {\n flex: 0 1 auto;\n}\n\n.actionButton {\n display: inline-flex;\n align-items: center;\n}\n\n.downloadLink {\n text-decoration: none;\n color: inherit;\n}\n\n.mainContent {\n background-color: #f0f0f0;\n width: 100%;\n display: flex;\n overflow-y: auto;\n}\n\n.configTreePane {\n width: 55%;\n overflow-wrap: break-word;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n\n.descriptionPane {\n width: 45%;\n background-color: #e0e0e0;\n color: #424242;\n padding: 1em 2em;\n font-size: 12pt;\n overflow-wrap: break-word;\n overflow-y: scroll;\n}\n\n.configTreePane :global(.bx--text-input-wrapper) {\n min-width: 8em;\n}\n\n.fullWidthAccordion :global(.bx--accordion__content) {\n padding-right: 0;\n}\n\n.toggleToolbarButton {\n position: absolute;\n left: 97vw;\n top: -2px;\n}\n\n.valueEditorInput {\n width: 25em;\n}\n\n.valueEditorButtons {\n height: 2.5rem;\n min-width: 5em;\n margin-left: 1em;\n}\n"],sourceRoot:""}]),s.locals={tools:"-esm-implementer-tools__configuration-styles__tools___3AGqJ",actionButton:"-esm-implementer-tools__configuration-styles__actionButton___2Uppy",downloadLink:"-esm-implementer-tools__configuration-styles__downloadLink___3Acrx",mainContent:"-esm-implementer-tools__configuration-styles__mainContent___2sxQa",configTreePane:"-esm-implementer-tools__configuration-styles__configTreePane___33WF1",descriptionPane:"-esm-implementer-tools__configuration-styles__descriptionPane___2K_Kr",fullWidthAccordion:"-esm-implementer-tools__configuration-styles__fullWidthAccordion___kPYfh",toggleToolbarButton:"-esm-implementer-tools__configuration-styles__toggleToolbarButton___2HZdY",valueEditorInput:"-esm-implementer-tools__configuration-styles__valueEditorInput___DWOa3",valueEditorButtons:"-esm-implementer-tools__configuration-styles__valueEditorButtons___1uqDN"};const r=s},7970:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__description-styles__path___xbL6R {\n color: #303030;\n margin-bottom: 1em;\n}\n\n.-esm-implementer-tools__description-styles__description___3w8EM {\n margin-bottom: 0.5em;\n}\n\n.-esm-implementer-tools__description-styles__source___2Y3IA {\n font-style: italic;\n margin-bottom: 0.5em;\n}\n\n.-esm-implementer-tools__description-styles__value___2m1CN {\n font-family: monospace;\n margin-top: 0.5em;\n margin-left: 0.5em;\n}\n","",{version:3,sources:["webpack://./src/configuration/description.styles.css"],names:[],mappings:"AAAA;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,oBAAoB;AACtB;;AAEA;EACE,sBAAsB;EACtB,iBAAiB;EACjB,kBAAkB;AACpB",sourcesContent:[".path {\n color: #303030;\n margin-bottom: 1em;\n}\n\n.description {\n margin-bottom: 0.5em;\n}\n\n.source {\n font-style: italic;\n margin-bottom: 0.5em;\n}\n\n.value {\n font-family: monospace;\n margin-top: 0.5em;\n margin-left: 0.5em;\n}\n"],sourceRoot:""}]),s.locals={path:"-esm-implementer-tools__description-styles__path___xbL6R",description:"-esm-implementer-tools__description-styles__description___3w8EM",source:"-esm-implementer-tools__description-styles__source___2Y3IA",value:"-esm-implementer-tools__description-styles__value___2m1CN"};const r=s},5555:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__editable-value-styles__secretButton___lSFNq {\n background: none;\n color: #474b6b;\n border: none;\n font: inherit;\n text-align: left;\n}\n\n.-esm-implementer-tools__editable-value-styles__error___2-dxM {\n margin-left: 1em;\n color: orange;\n font-size: 11pt;\n}\n\n.-esm-implementer-tools__editable-value-styles__overriddenValue___4bCrT {\n color: #2020a0;\n}\n","",{version:3,sources:["webpack://./src/configuration/editable-value.styles.css"],names:[],mappings:"AAAA;EACE,gBAAgB;EAChB,cAAc;EACd,YAAY;EACZ,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,cAAc;AAChB",sourcesContent:[".secretButton {\n background: none;\n color: #474b6b;\n border: none;\n font: inherit;\n text-align: left;\n}\n\n.error {\n margin-left: 1em;\n color: orange;\n font-size: 11pt;\n}\n\n.overriddenValue {\n color: #2020a0;\n}\n"],sourceRoot:""}]),s.locals={secretButton:"-esm-implementer-tools__editable-value-styles__secretButton___lSFNq",error:"-esm-implementer-tools__editable-value-styles__error___2-dxM",overriddenValue:"-esm-implementer-tools__editable-value-styles__overriddenValue___4bCrT"};const r=s},5336:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__layout-styles__labelCell___1FQD9 {\n width: 12em;\n}\n\n.-esm-implementer-tools__layout-styles__structuredList___1WZZj {\n margin-bottom: 1em;\n}\n\n.-esm-implementer-tools__layout-styles__structuredListRow___32y33 {\n border-left: 2px solid #c0c0c0;\n}\n\n.-esm-implementer-tools__layout-styles__subtreeCell___3ood- {\n left: -6em;\n}\n","",{version:3,sources:["webpack://./src/configuration/layout/layout.styles.css"],names:[],mappings:"AAAA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,UAAU;AACZ",sourcesContent:[".labelCell {\n width: 12em;\n}\n\n.structuredList {\n margin-bottom: 1em;\n}\n\n.structuredListRow {\n border-left: 2px solid #c0c0c0;\n}\n\n.subtreeCell {\n left: -6em;\n}\n"],sourceRoot:""}]),s.locals={labelCell:"-esm-implementer-tools__layout-styles__labelCell___1FQD9",structuredList:"-esm-implementer-tools__layout-styles__structuredList___1WZZj",structuredListRow:"-esm-implementer-tools__layout-styles__structuredListRow___32y33",subtreeCell:"-esm-implementer-tools__layout-styles__subtreeCell___3ood-"};const r=s},1436:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF .bx--structured-list-td {\n padding: 0.25rem 3rem 0.25rem 1rem;\n}\n\n.-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF .bx--structured-list {\n margin-bottom: 0.25rem;\n}\n\n.-esm-implementer-tools__array-editor-styles__buttonCell___2k5Vb {\n text-align: right;\n}\n\n/* .valueCell {\n display: inline-flex;\n} */\n","",{version:3,sources:["webpack://./src/configuration/value-editors/array-editor.styles.css"],names:[],mappings:"AAAA;EACE,kCAAkC;AACpC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;GAEG",sourcesContent:[".arrayEditor :global(.bx--structured-list-td) {\n padding: 0.25rem 3rem 0.25rem 1rem;\n}\n\n.arrayEditor :global(.bx--structured-list) {\n margin-bottom: 0.25rem;\n}\n\n.buttonCell {\n text-align: right;\n}\n\n/* .valueCell {\n display: inline-flex;\n} */\n"],sourceRoot:""}]),s.locals={arrayEditor:"-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF",buttonCell:"-esm-implementer-tools__array-editor-styles__buttonCell___2k5Vb"};const r=s},3810:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,'.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL,\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL > [role="combobox"] {\n display: flex;\n position: relative;\n width: 20em;\n}\n\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL [role="listbox"] {\n margin: 0;\n padding: 0;\n display: flex;\n flex-flow: column wrap;\n background-color: whitesmoke;\n color: #fff;\n}\n\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL li {\n line-height: 0.75rem;\n padding: 0.5em;\n display: block;\n border-bottom: 0.125rem solid #718096;\n outline: 0;\n margin: 0;\n color: #000;\n}\n\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL [role="option"]:hover {\n background-color: #38a169;\n border-color: #38a169;\n color: #f7fafc;\n}\n',"",{version:3,sources:["webpack://./src/configuration/value-editors/concept-search.styles.css"],names:[],mappings:"AAAA;;EAEE,aAAa;EACb,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,sBAAsB;EACtB,4BAA4B;EAC5B,WAAW;AACb;;AAEA;EACE,oBAAoB;EACpB,cAAc;EACd,cAAc;EACd,qCAAqC;EACrC,UAAU;EACV,SAAS;EACT,WAAW;AACb;;AAEA;EACE,yBAAyB;EACzB,qBAAqB;EACrB,cAAc;AAChB",sourcesContent:['.autocomplete,\n.autocomplete > [role="combobox"] {\n display: flex;\n position: relative;\n width: 20em;\n}\n\n.autocomplete [role="listbox"] {\n margin: 0;\n padding: 0;\n display: flex;\n flex-flow: column wrap;\n background-color: whitesmoke;\n color: #fff;\n}\n\n.autocomplete li {\n line-height: 0.75rem;\n padding: 0.5em;\n display: block;\n border-bottom: 0.125rem solid #718096;\n outline: 0;\n margin: 0;\n color: #000;\n}\n\n.autocomplete [role="option"]:hover {\n background-color: #38a169;\n border-color: #38a169;\n color: #f7fafc;\n}\n'],sourceRoot:""}]),s.locals={autocomplete:"-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL"};const r=s},8147:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY .bx--structured-list-td {\n padding: 0.25rem 3rem 0.25rem 1rem;\n}\n\n.-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY .bx--structured-list {\n margin-bottom: 0.25rem;\n}\n\n.-esm-implementer-tools__object-editor-styles__buttonCell___3ONI- {\n text-align: right;\n}\n\n/* .valueCell {\n display: inline-flex;\n} */\n","",{version:3,sources:["webpack://./src/configuration/value-editors/object-editor.styles.css"],names:[],mappings:"AAAA;EACE,kCAAkC;AACpC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;GAEG",sourcesContent:[".objectEditor :global(.bx--structured-list-td) {\n padding: 0.25rem 3rem 0.25rem 1rem;\n}\n\n.objectEditor :global(.bx--structured-list) {\n margin-bottom: 0.25rem;\n}\n\n.buttonCell {\n text-align: right;\n}\n\n/* .valueCell {\n display: inline-flex;\n} */\n"],sourceRoot:""}]),s.locals={objectEditor:"-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY",buttonCell:"-esm-implementer-tools__object-editor-styles__buttonCell___3ONI-"};const r=s},9131:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__popup-styles__popup___vyld6 {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 50%;\n z-index: 100000;\n background-color: #d0d0d0;\n border-top: 2px solid #404050;\n color: #222;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n box-sizing: border-box;\n overflow-y: auto;\n}\n\n.-esm-implementer-tools__popup-styles__content___fQRAl {\n margin-top: 40px;\n width: 100%;\n}\n\n.-esm-implementer-tools__popup-styles__tabs___2HYJP {\n width: 30em;\n}\n\n.-esm-implementer-tools__popup-styles__topBar___2dsNF {\n position: fixed;\n width: 100%;\n height: 42px;\n display: flex;\n justify-content: space-between;\n border-bottom: 1px solid #a0a0a0;\n z-index: 2;\n background: #e0e0e0;\n}\n\n.-esm-implementer-tools__popup-styles__closeButton___2tyDP {\n min-height: 3em;\n padding: 0 1em;\n}\n\n.-esm-implementer-tools__popup-styles__topBar___2dsNF .bx--content-switcher-btn:first-child,\n.-esm-implementer-tools__popup-styles__topBar___2dsNF .bx--content-switcher-btn:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n","",{version:3,sources:["webpack://./src/popup/popup.styles.css"],names:[],mappings:"AAAA;EACE,eAAe;EACf,SAAS;EACT,OAAO;EACP,WAAW;EACX,WAAW;EACX,eAAe;EACf,yBAAyB;EACzB,6BAA6B;EAC7B,WAAW;EACX,aAAa;EACb,sBAAsB;EACtB,8BAA8B;EAC9B,uBAAuB;EACvB,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,aAAa;EACb,8BAA8B;EAC9B,gCAAgC;EAChC,UAAU;EACV,mBAAmB;AACrB;;AAEA;EACE,eAAe;EACf,cAAc;AAChB;;AAEA;;EAEE,yBAAyB;EACzB,4BAA4B;EAC5B,0BAA0B;EAC1B,6BAA6B;AAC/B",sourcesContent:[".popup {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 50%;\n z-index: 100000;\n background-color: #d0d0d0;\n border-top: 2px solid #404050;\n color: #222;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n box-sizing: border-box;\n overflow-y: auto;\n}\n\n.content {\n margin-top: 40px;\n width: 100%;\n}\n\n.tabs {\n width: 30em;\n}\n\n.topBar {\n position: fixed;\n width: 100%;\n height: 42px;\n display: flex;\n justify-content: space-between;\n border-bottom: 1px solid #a0a0a0;\n z-index: 2;\n background: #e0e0e0;\n}\n\n.closeButton {\n min-height: 3em;\n padding: 0 1em;\n}\n\n.topBar :global(.bx--content-switcher-btn:first-child),\n.topBar :global(.bx--content-switcher-btn:last-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n"],sourceRoot:""}]),s.locals={popup:"-esm-implementer-tools__popup-styles__popup___vyld6",content:"-esm-implementer-tools__popup-styles__content___fQRAl",tabs:"-esm-implementer-tools__popup-styles__tabs___2HYJP",topBar:"-esm-implementer-tools__popup-styles__topBar___2dsNF",closeButton:"-esm-implementer-tools__popup-styles__closeButton___2tyDP"};const r=s},3539:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__styles__slotOverlay___342ll {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(43, 43, 185, 0.1);\n border: 1px solid rgba(43, 43, 185, 0.4);\n pointer-events: none;\n}\n\n.-esm-implementer-tools__styles__slotName___1bIs0 {\n background-color: rgb(255, 255, 255, 0.85);\n border: 1px solid rgba(43, 43, 185, 0.4);\n color: #393939;\n position: absolute;\n bottom: 0;\n right: 0;\n padding: 0.5em 0.5em 0.5em 0.5em;\n pointer-events: none;\n}\n\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: none;\n border: none;\n}\n\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:hover {\n background-color: rgba(43, 43, 185, 0.1);\n}\n\n/* Show the tooltip text when you mouse over the tooltip container */\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:focus .-esm-implementer-tools__styles__extensionTooltip___1sJtS,\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:hover .-esm-implementer-tools__styles__extensionTooltip___1sJtS {\n visibility: visible;\n opacity: 1;\n}\n\n.-esm-implementer-tools__styles__extensionTooltip___1sJtS {\n visibility: hidden;\n width: auto;\n background-color: rgb(255, 255, 255, 0.85);\n text-align: center;\n padding: 0.5em 0.5em 0.5em 0.5em;\n border: 1px solid rgba(43, 43, 185, 0.4);\n\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.-esm-implementer-tools__styles__exitButton___2xev8 {\n position: fixed !important;\n bottom: 0;\n right: 0;\n z-index: 999999;\n}\n","",{version:3,sources:["webpack://./src/ui-editor/styles.css"],names:[],mappings:"AAAA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,wCAAwC;EACxC,wCAAwC;EACxC,oBAAoB;AACtB;;AAEA;EACE,0CAA0C;EAC1C,wCAAwC;EACxC,cAAc;EACd,kBAAkB;EAClB,SAAS;EACT,QAAQ;EACR,gCAAgC;EAChC,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,wCAAwC;AAC1C;;AAEA,oEAAoE;AACpE;;EAEE,mBAAmB;EACnB,UAAU;AACZ;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,0CAA0C;EAC1C,kBAAkB;EAClB,gCAAgC;EAChC,wCAAwC;;EAExC,kBAAkB;EAClB,MAAM;EACN,OAAO;AACT;;AAEA;EACE,0BAA0B;EAC1B,SAAS;EACT,QAAQ;EACR,eAAe;AACjB",sourcesContent:[".slotOverlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(43, 43, 185, 0.1);\n border: 1px solid rgba(43, 43, 185, 0.4);\n pointer-events: none;\n}\n\n.slotName {\n background-color: rgb(255, 255, 255, 0.85);\n border: 1px solid rgba(43, 43, 185, 0.4);\n color: #393939;\n position: absolute;\n bottom: 0;\n right: 0;\n padding: 0.5em 0.5em 0.5em 0.5em;\n pointer-events: none;\n}\n\n.extensionOverlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: none;\n border: none;\n}\n\n.extensionOverlay:hover {\n background-color: rgba(43, 43, 185, 0.1);\n}\n\n/* Show the tooltip text when you mouse over the tooltip container */\n.extensionOverlay:focus .extensionTooltip,\n.extensionOverlay:hover .extensionTooltip {\n visibility: visible;\n opacity: 1;\n}\n\n.extensionTooltip {\n visibility: hidden;\n width: auto;\n background-color: rgb(255, 255, 255, 0.85);\n text-align: center;\n padding: 0.5em 0.5em 0.5em 0.5em;\n border: 1px solid rgba(43, 43, 185, 0.4);\n\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.exitButton {\n position: fixed !important;\n bottom: 0;\n right: 0;\n z-index: 999999;\n}\n"],sourceRoot:""}]),s.locals={slotOverlay:"-esm-implementer-tools__styles__slotOverlay___342ll",slotName:"-esm-implementer-tools__styles__slotName___1bIs0",extensionOverlay:"-esm-implementer-tools__styles__extensionOverlay___n5KTZ",extensionTooltip:"-esm-implementer-tools__styles__extensionTooltip___1sJtS",exitButton:"-esm-implementer-tools__styles__exitButton___2xev8"};const r=s}}]);
|
|
1
|
+
"use strict";(self.webpackChunk_openmrs_esm_implementer_tools_app=self.webpackChunk_openmrs_esm_implementer_tools_app||[]).push([[728],{7728:(e,t,n)=>{n.r(t),n.d(t,{default:()=>Qe});var o=n(9297),l=n(4790),a=n(487),s=n.n(a),r=n(9131);s()(r.Z,{insert:"head",singleton:!1});const i=r.Z.locals||{};var c=n(6288),u=n(3569),d=n(4990),m=n(7789),A=n(2626),_=n(1890),p=n(2562),f=n(4946),E=n(6512),g=n(2100),b=n(2661),y=n(9390),C=n(796),v=n(3435),h=n(7704),B=n(5281);s()(B.Z,{insert:"head",singleton:!1});const x=B.Z.locals||{};var k=n(150),w=n(6315),Z=n(988),T=n(323),S=n(5259),N=n(2015),O=n(5555);s()(O.Z,{insert:"head",singleton:!1});const I=O.Z.locals||{};var j=n(9963),P=n(7474),D=n(9258),W=n(4421),F=n(7555),M=n(1436);s()(M.Z,{insert:"head",singleton:!1});const L=M.Z.locals||{};var V=n(9553),U=n(8112);function z({element:e,valueArray:t,setValue:n}){const l=(0,o.useMemo)((()=>(0,P.Z)("array-editor-")),[]);return o.default.createElement(V.n9,{className:L.arrayEditor},o.default.createElement(U.x4,null,o.default.createElement(U.Fx,null,t.map(((a,s)=>{var r,i;return o.default.createElement(U.s1,{key:`${l}-${s}`},o.default.createElement(U.ag,null,o.default.createElement(te,{element:{...e._elements,_value:a,_source:e._source},valueType:null!==(r=null===(i=e._elements)||void 0===i?void 0:i._type)&&void 0!==r?r:E.Type.Object,value:a,onChange:e=>{const o=(0,S.Z)(t);o[s]=e,n(o)}})),o.default.createElement(U.ag,{className:L.buttonCell},o.default.createElement(d.Z,{renderIcon:f.Z,size:"sm",kind:"secondary",iconDescription:"Remove",hasIconOnly:!0,onClick:()=>{const e=(0,S.Z)(t);e.splice(s,1),n(e)}})))})),o.default.createElement(U.s1,null,o.default.createElement(U.ag,null),o.default.createElement(U.ag,{className:L.buttonCell},o.default.createElement(d.Z,{renderIcon:F.Z,size:"sm",iconDescription:"Add",hasIconOnly:!0,onClick:()=>{var o,l;const a=(0,S.Z)(t),s=(null!==(o=null===(l=e._elements)||void 0===l?void 0:l._type)&&void 0!==o?o:E.Type.Object)==E.Type.Object?{}:null;a.push(s),n(a)}}))))))}var R=n(753),$=n(3810);s()($.Z,{insert:"head",singleton:!1});const Y=$.Z.locals||{};function q({setConcept:e}){const[t,n]=(0,o.useState)(""),[l,a]=(0,o.useState)([]),[s,r]=(0,o.useState)(""),i=(0,o.useMemo)((()=>(0,P.Z)()),[]),c=(0,R.Z)((e=>{n(e)}),300);return(0,o.useEffect)((()=>{const e=new AbortController;var n;return t&&t.length>=2?(n=t,(0,E.openmrsFetch)(`/ws/rest/v1/concept/?q=${n}`,{method:"GET"})).then((({data:{results:e}})=>{a(e.slice(0,9))})):a([]),()=>e.abort()}),[t]),o.default.createElement("div",{className:Y.autocomplete},o.default.createElement("input",{type:"text",autoComplete:"off",autoCapitalize:"off","aria-autocomplete":"list",role:"combobox","aria-label":"Look up concept by name","aria-controls":`searchbox-${i}`,"aria-expanded":l.length>0,placeholder:"Look up concept by name",autoFocus:!0,onChange:e=>{c(e.target.value)}}),o.default.createElement("div",{id:`searchbox-${i}`},o.default.createElement("ul",{role:"listbox"},!!l.length&&l.map((t=>o.default.createElement("li",{key:t.uuid,role:"option",style:{padding:"5px"},onClick:()=>{(t=>{r(t.uuid),n(""),a([]),e(t)})(t)},"aria-selected":"true"},t.display))),t&&l&&!l.length&&o.default.createElement("li",null,"No matching results found."))))}var J=n(553);function K({value:e,setValue:t}){const[n,l]=(0,o.useState)([]);return(0,o.useEffect)((()=>{function e(e){l(Object.keys(e.extensions))}return e(E.extensionStore.getState()),E.extensionStore.subscribe(e)}),[]),o.default.createElement(J.Z.Filterable,{id:"add-select",items:n.map((e=>({id:e,label:e}))),placeholder:"Select extensions",onChange:e=>t(e.selectedItems.map((e=>e.id))),initialSelectedItems:e})}function X({slotName:e,slotModuleName:t,value:n,setValue:l}){const a=function(e,t,n){const o=e.slots[n],l=o.instances[t];return(0,E.getAssignedIds)(l,o.attachedIds)}((0,E.useExtensionStore)(),t,e);return o.default.createElement(J.Z.Filterable,{id:"add-select",items:a.map((e=>({id:e,label:e}))),placeholder:"Select extensions",onChange:e=>l(e.selectedItems.map((e=>e.id))),initialSelectedItems:n})}var Q=n(8147);s()(Q.Z,{insert:"head",singleton:!1});const G=Q.Z.locals||{};function H({element:e,valueObject:t,setValue:n}){return o.default.createElement(V.n9,{className:G.objectEditor},o.default.createElement(U.x4,null,o.default.createElement(U.Fx,null,Object.entries(e).map((([l,a])=>l.startsWith("_")?null:o.default.createElement(U.s1,{key:l},o.default.createElement(U.ag,null,o.default.createElement(te,{element:{_value:l,_source:e._source},valueType:E.Type.String,value:l,onChange:e=>{const o=(0,S.Z)(t);o[e]=(0,S.Z)(t[l]),delete o[l],n(o)}})),o.default.createElement(U.ag,null,o.default.createElement(te,{element:{...a,_value:t[l],_source:e._source},valueType:a._type,value:t[l],onChange:e=>{const o=(0,S.Z)(t);o[l]=e,n(o)}}))))))))}function ee({slotName:e,slotModuleName:t,value:n,setValue:l}){return o.default.createElement("div",null,"Todo: compose array with extension lookup")}function te({element:e,path:t,valueType:n,value:l,onChange:a}){const[s]=(0,o.useState)((0,P.Z)("value-editor-"));if("remove"===n&&!t)throw new Error("Programming error: ValueEditorField initialized for a 'remove' field, but no 'path' is available");return n===E.Type.Array?o.default.createElement(z,{element:e,valueArray:l,setValue:a}):n===E.Type.Boolean?o.default.createElement(D.Z,{id:s,checked:l,hideLabel:!0,labelText:"",onChange:a}):n===E.Type.ConceptUuid?o.default.createElement(q,{setConcept:e=>a(e.uuid)}):n===E.Type.Number?o.default.createElement(W.ZP,{id:s,value:l,onChange:e=>a(Number(e.imaginaryTarget.value))}):n===E.Type.String||n===E.Type.UUID?o.default.createElement(C.Z,{id:s,value:l,labelText:"",onChange:e=>a(e.target.value)}):"add"===n?o.default.createElement(K,{value:null!=l?l:e._value,setValue:a}):"remove"===n&&t?o.default.createElement(X,{slotName:t[2],slotModuleName:t[0],value:null!=l?l:e._value,setValue:a}):"order"===n&&t?o.default.createElement(ee,{slotName:t[2],slotModuleName:t[0],value:null!=l?l:e._value,setValue:a}):"configure"===n&&t?o.default.createElement(o.default.Fragment,null,"Todo"):o.default.createElement(H,{element:e,valueObject:l,setValue:a})}function ne({element:e,customType:t,path:n,handleSave:a,handleClose:s}){const r=(0,o.useRef)(null),[i,c]=(0,o.useState)(e._value),u=null!=t?t:e._type,m=e=>{"Escape"===e.key?s():"Enter"===e.key&&a(JSON.stringify(i))};return(0,o.useEffect)((()=>(document.addEventListener("keyup",m),()=>{document.removeEventListener("keyup",m)})),[i]),o.default.createElement("div",{ref:r,style:{display:"inherit"}},o.default.createElement(te,{element:e,path:n,value:i,onChange:c,valueType:u}),o.default.createElement("div",{className:x.valueEditorButtons},o.default.createElement(d.Z,{renderIcon:j.Z,size:"sm",kind:"primary",iconDescription:"Save",hasIconOnly:!0,onClick:()=>a(JSON.stringify(i))}),o.default.createElement(d.Z,{renderIcon:l.Z,size:"sm",kind:"secondary",iconDescription:"Cancel",hasIconOnly:!0,onClick:s})))}function oe({value:e}){return o.default.createElement(o.default.Fragment,null,Array.isArray(e)?"object"==typeof e[0]?e.map(((e,t)=>o.default.createElement("div",{key:`${e}-${t}`,style:{marginBottom:"1em"}},o.default.createElement(oe,{value:e})))):e.join(", "):"object"==typeof e&&null!==e?Object.entries(e).map((([e,t],n)=>o.default.createElement("div",{key:`${e}-${n}`},e,": ",o.default.createElement(oe,{value:t})))):"string"==typeof e||"number"==typeof e?e:null==e?"none":JSON.stringify(e))}function le({path:e,element:t,customType:n}){const[l,a]=(0,o.useState)(),[s,r]=(0,o.useState)(!1),[i,c]=(0,o.useState)(null),u=(0,o.useRef)(null),m=()=>{r(!1),c(null)};return(0,o.useEffect)((()=>{const t=t=>{t.configPathBeingEdited&&(0,Z.Z)(t.configPathBeingEdited,e)&&u&&u.current&&(r(!0),u.current.focus())};return t(h.wT.getState()),h.wT.subscribe(t)}),[]),(0,o.useEffect)((()=>{const n=h.wT.getState();s&&!(0,Z.Z)(n.configPathBeingEdited,e)&&h.wT.setState({configPathBeingEdited:e,activeItemDescription:{path:e,source:t._source,description:t._description,value:l}}),!s&&(0,Z.Z)(n.configPathBeingEdited,e)&&h.wT.setState({configPathBeingEdited:null})}),[s]),o.default.createElement(o.default.Fragment,null,o.default.createElement("div",{className:I.line},s?o.default.createElement(o.default.Fragment,null,o.default.createElement(ne,{element:t,customType:n,path:e,handleClose:m,handleSave:t=>{try{const n=JSON.parse(t),o=ae((0,S.Z)(E.temporaryConfigStore.getState()),["config",...e],n);E.temporaryConfigStore.setState(o),a(t),m()}catch(e){console.warn(e),c("That's not formatted quite right. Try again.")}}})):o.default.createElement(o.default.Fragment,null,o.default.createElement("button",{className:`${I.secretButton} ${"temporary config"==t._source?I.overriddenValue:""}`,onClick:()=>r(!0),ref:u},o.default.createElement(oe,{value:t._value})),"temporary config"==t._source?o.default.createElement(d.Z,{style:{marginLeft:"1em"},renderIcon:N.Z,size:"sm",kind:"tertiary",iconDescription:"Reset to default",hasIconOnly:!0,onClick:()=>{E.temporaryConfigStore.setState((0,T.Z)(E.temporaryConfigStore.getState(),["config",...e]))}}):null),i&&o.default.createElement("div",{className:I.error},i)))}function ae(e,t,n){var o;return t.length>1?e[t[0]]=ae(null!==(o=e[t[0]])&&void 0!==o?o:{},t.slice(1),n):e[t[0]]=n,e}function se({moduleName:e,slotName:t,config:n}){return o.default.createElement(le,{path:[e,t,"configure"],element:n&&Object.keys(n).length?{_value:n,_source:"",_default:{}}:{_value:void 0,_source:"default",_default:{}},customType:"configure"})}var re=n(5336);s()(re.Z,{insert:"head",singleton:!1});const ie=re.Z.locals||{};function ce({leaf:e,label:t,children:n,onMouseEnter:l,onMouseLeave:a}){return e?o.default.createElement(U.s1,{className:ie.structuredListRow,onMouseEnter:l,onMouseLeave:a},o.default.createElement(U.ag,{className:ie.labelCell},t),o.default.createElement(U.ag,null,n)):o.default.createElement(o.default.Fragment,null,o.default.createElement(U.s1,{className:ie.structuredListRow,onMouseEnter:l,onMouseLeave:a},o.default.createElement(U.ag,{className:ie.labelCell},t),o.default.createElement(U.ag,null)),o.default.createElement(U.s1,{className:ie.structuredListRow},o.default.createElement(U.ag,null),o.default.createElement(U.ag,{className:ie.subtreeCell},o.default.createElement(U.x4,{className:ie.structuredList},o.default.createElement(U.Fx,null,n)))))}function ue({extensionsConfig:e,moduleName:t}){return e&&Object.keys(e).length?o.default.createElement(ce,{label:"extension slots",leaf:!1},Object.keys(e).map((n=>o.default.createElement(de,{key:n,config:null==e?void 0:e[n],path:[t,"extensions",n]})))):null}function de({config:e,path:t}){const[n,l]=(0,o.useState)([]),a=t[0],s=t[2];function r(e){var t;const n=h.wT.getState();(0,Z.Z)(null===(t=n.activeItemDescription)||void 0===t?void 0:t.path,e)&&!(0,Z.Z)(n.configPathBeingEdited,e)&&h.wT.setState({activeItemDescription:void 0})}return(0,o.useEffect)((()=>{function e(e){var t,n,o;l(null===(t=e.slots[s])||void 0===t||null===(n=t.instances)||void 0===n||null===(o=n[a])||void 0===o?void 0:o.assignedIds)}return e(E.extensionStore.getState()),E.extensionStore.subscribe(e)}),[]),o.default.createElement(ce,{label:s,leaf:!1,onMouseEnter:()=>function(e,t){h.wT.getState().configPathBeingEdited||h.wT.setState({activeItemDescription:{path:[e,t],value:n}})}(a,s),onMouseLeave:()=>r([a,s])},["add","remove","order","configure"].map((n=>{var l,i;return o.default.createElement(ce,{label:n,key:t.join(".")+n,leaf:!0,onMouseEnter:()=>function(e,t,n,o){h.wT.getState().configPathBeingEdited||h.wT.setState({activeItemDescription:{path:[e,t,n],source:null==o?void 0:o._source,description:{add:"Add an extension to this slot.",remove:"Remove an extension from this slot.",order:"Reorder the extensions in this slot.",configure:"Pass a configuration object directly to one of the extensions in this slot."}[n],value:JSON.stringify(null==o?void 0:o._value)}})}(a,s,n,null==e?void 0:e[n]),onMouseLeave:()=>r([a,s,n])},"configure"===n?o.default.createElement(se,{moduleName:a,slotName:s,config:null==e||null===(l=e.configure)||void 0===l?void 0:l._value}):o.default.createElement(le,{path:t.concat([n]),element:null!==(i=null==e?void 0:e[n])&&void 0!==i?i:{_value:void 0,_source:"default",_default:[]},customType:n}))})))}function me({config:e,path:t=[]}){return o.default.createElement(o.default.Fragment,null,Object.entries(e).map((([e,n],l)=>{const a=t.concat([e]),s=n.hasOwnProperty("_value")||n.hasOwnProperty("_type");return o.default.createElement(ce,{label:e,leaf:s,onMouseEnter:()=>function(e,t,n){h.wT.getState().configPathBeingEdited||h.wT.setState({activeItemDescription:{path:e,source:n._source,description:n._description,value:JSON.stringify(n._value)}})}(a,0,n),onMouseLeave:()=>function(e){var t;const n=h.wT.getState();(0,Z.Z)(null===(t=n.activeItemDescription)||void 0===t?void 0:t.path,e)&&!(0,Z.Z)(n.configPathBeingEdited,e)&&h.wT.setState({activeItemDescription:void 0})}(a),key:`subtree-${a.join(".")}`},s?o.default.createElement(le,{path:a,element:n}):o.default.createElement(me,{config:n,path:a}))})))}var Ae=n(8180);function _e({children:e}){return o.default.createElement(U.x4,{className:ie.structuredList},o.default.createElement(U.Fx,null,e))}function pe({config:e,moduleName:t}){return o.default.createElement(_e,null,o.default.createElement(ue,{extensionsConfig:e.extensions,moduleName:t}),o.default.createElement(me,{config:(0,Ae.Z)(e,((e,t)=>"extensions"!==t)),path:[t]}))}function fe({config:e}){return o.default.createElement("div",null,o.default.createElement(k.ZP,{align:"start"},e&&Object.keys(e).sort().map((t=>{const n=e[t];return Object.keys(n).length?o.default.createElement(w.Z,{title:o.default.createElement("h6",{className:x.moduleName},t),className:x.fullWidthAccordion,key:`accordion-${t}`},o.default.createElement("div",{key:`${t}-config`},o.default.createElement(pe,{config:n,moduleName:t}))):null}))))}var Ee=n(7970);s()(Ee.Z,{insert:"head",singleton:!1});const ge=Ee.Z.locals||{};function be(){const{activeItemDescription:e}=(0,E.useStore)(h.wT);return o.default.createElement("div",null,e?o.default.createElement(o.default.Fragment,null,o.default.createElement("p",{className:ge.path},e.path.slice(1).join(" → ")),o.default.createElement("p",{className:ge.description},e.description),o.default.createElement("p",{className:ge.source},"default"===e.source?o.default.createElement(o.default.Fragment,null,"The current value is the default."):e.source?o.default.createElement(o.default.Fragment,null,"The current value comes from ",e.source,"."):null),e.value?o.default.createElement("p",null,"Value:"):null,o.default.createElement("p",{className:ge.value},Array.isArray(e.value)?e.value.map(((e,t)=>o.default.createElement("p",{key:`${e}-${t}`},e))):e.value)):null)}var ye=n(8403);const Ce={toggleIsUIEditorEnabled:({isUIEditorEnabled:e})=>({isUIEditorEnabled:!e}),toggleIsToolbarOpen:({isConfigToolbarOpen:e})=>({isConfigToolbarOpen:!e})},ve={toggleDevDefaults:({devDefaultsAreOn:e})=>({devDefaultsAreOn:!e})},he=({isConfigToolbarOpen:e,toggleIsToolbarOpen:t})=>o.default.createElement(d.Z,{hasIconOnly:!0,renderIcon:e?_.Z:A.Z,onClick:t,kind:"ghost",size:"small",iconDescription:(e?"Hide":"Show")+" toolbar"}),Be=()=>{const{t:e}=(0,m.useTranslation)(),{isUIEditorEnabled:t,toggleIsUIEditorEnabled:n,isConfigToolbarOpen:l,toggleIsToolbarOpen:a}=(0,E.useStore)(h.wT,Ce),{devDefaultsAreOn:s,toggleDevDefaults:r}=(0,E.useStore)(E.configInternalStore,ve),{config:i}=(0,E.useStore)(E.implementerToolsConfigStore),c=(0,E.useExtensionStore)(),u=(0,E.useStore)(E.temporaryConfigStore),[A,_]=(0,o.useState)(""),B=u.config,k=new Blob([JSON.stringify(B,void 0,2)],{type:"application/json"}),w=(0,o.useMemo)((()=>{const e=(0,S.Z)(i);for(let t of Object.values(c.slots))for(let n of Object.keys(t.instances))e[n].extensions||(e[n].extensions={}),e[n].extensions[t.name]||(e[n].extensions[t.name]={});return e}),[i,c]),Z=(0,o.useMemo)((()=>A?function e(t,n){const o={};for(let a of Object.keys(t))if(a.includes(n))o[a]=(0,S.Z)(t[a]);else if(!((l=t[a]).hasOwnProperty("_default")||l._type||l.hasOwnProperty("_value")||l.hasOwnProperty("_source"))){const l=e(t[a],n);(0,ye.Z)(l)||(o[a]=l)}var l;return o}(w,A):w),[A,w]);return o.default.createElement(o.default.Fragment,null,o.default.createElement("div",{className:x.tools},l?o.default.createElement(g.Z,{style:{margin:"0.25rem",padding:"0.5em 1.5em"}},o.default.createElement(b.Z,null,o.default.createElement(y.Z,{sm:1,md:2},o.default.createElement(C.Z,{id:"extensionSearch",labelText:"Search configuration",onChange:e=>_(e.target.value)})),o.default.createElement(y.Z,{sm:1,md:1},o.default.createElement(v.Z,{id:"devConfigSwitch",labelText:e("devConfig","Dev Config"),onToggle:r,toggled:s})),o.default.createElement(y.Z,{sm:1,md:1,className:x.actionButton},o.default.createElement(v.Z,{id:"uiEditorSwitch",labelText:e("uiEditor","UI Editor"),toggled:t,onToggle:n})),o.default.createElement(y.Z,{sm:1,md:2,className:x.actionButton},o.default.createElement(d.Z,{kind:"danger",iconDescription:"Clear temporary config",renderIcon:f.Z,onClick:()=>{E.temporaryConfigStore.setState({config:{}})}},e("clearTemporaryConfig","Clear Temporary Config"))),o.default.createElement(y.Z,{sm:1,md:2,className:x.actionButton},o.default.createElement(d.Z,{kind:"secondary",iconDescription:"Download temporary config",renderIcon:p.Z},o.default.createElement("a",{className:x.downloadLink,download:"temporary_config.json",href:window.URL.createObjectURL(k)},e("downloadTemporaryConfig","Download Temporary Config")))))):null,o.default.createElement("div",{className:x.toggleToolbarButton},o.default.createElement(he,{isConfigToolbarOpen:l,toggleIsToolbarOpen:a}))),o.default.createElement("div",{className:x.mainContent,style:{marginTop:l?"72px":"25px",height:l?"calc(50vh - 114px)":"calc(50vh - 68px)"}},o.default.createElement("div",{className:x.configTreePane},o.default.createElement(fe,{config:Z})),o.default.createElement("div",{className:x.descriptionPane},o.default.createElement(be,null))))};var xe=n(6761),ke=n(6574),we=n(5795),Ze=n(3412),Te=n(4685),Se=n(1855),Ne=n(9918),Oe=n(7172);const Ie=({frontendModules:e})=>{const{t}=(0,m.useTranslation)(),n=(0,o.useMemo)((()=>[{key:"name",header:t("moduleName","Module Name")},{key:"installedVersion",header:t("installedVersion","Installed Version")},{key:"requiredVersion",header:t("requiredVersion","Required Version")}]),[t]);return o.default.createElement("div",null,o.default.createElement(xe.ZP,{rows:[],headers:n},(({headers:n,getTableProps:l,getHeaderProps:a})=>o.default.createElement(ke.Z,{title:""},o.default.createElement(we.Z,l(),o.default.createElement(Ze.Z,null,o.default.createElement(Te.Z,null,n.map((e=>o.default.createElement(Se.Z,a({header:e}),e.header))))),o.default.createElement(Ne.Z,null,e.map((e=>o.default.createElement(o.Fragment,{key:e.name},o.default.createElement(Te.Z,null,o.default.createElement(Oe.Z,null,o.default.createElement("strong",null,e.name)),o.default.createElement(Oe.Z,null),o.default.createElement(Oe.Z,null)),e.dependencies.map((e=>o.default.createElement(Te.Z,{key:e.name},o.default.createElement(Oe.Z,null,e.name),o.default.createElement(Oe.Z,null,"missing"===e.type?o.default.createElement("span",{style:{color:"red"}},t("missing","Missing")):"version-mismatch"===e.type?o.default.createElement("span",{style:{color:"red"}},e.installedVersion):o.default.createElement("span",{style:{color:"green"}},e.installedVersion)),o.default.createElement(Oe.Z,null,e.requiredVersion)))))))))))))};function je(e){const{t}=(0,m.useTranslation)(),[n,a]=(0,o.useState)(0);return o.default.createElement("div",{className:i.popup},o.default.createElement("div",{className:i.topBar},o.default.createElement("div",{className:i.tabs},o.default.createElement(c.Z,{onChange:e=>{a(e.index)}},o.default.createElement(u.Z,{name:"configuration-tab",text:t("configuration","Configuration"),onClick:()=>{},onKeyDown:()=>{}}),o.default.createElement(u.Z,{name:"backend-modules-tab",text:t("backendModules","Backend Modules"),onClick:()=>{},onKeyDown:()=>{}}))),o.default.createElement("div",null,o.default.createElement(d.Z,{className:i.closeButton,kind:"secondary",renderIcon:l.Z,iconDescription:"Close",onClick:e.close,hasIconOnly:!0}))),o.default.createElement("div",{className:i.content},0==n?o.default.createElement(Be,null):o.default.createElement(Ie,{frontendModules:e.frontendModules})))}var Pe=n(1300),De=n(3539);s()(De.Z,{insert:"head",singleton:!1});const We=De.Z.locals||{};var Fe=n(2268);function Me({el:e,children:t}){return e?(0,Fe.createPortal)(t,e):null}function Le({extensionName:e,slotModuleName:t,slotName:n,domElement:l}){const[a,s]=(0,o.useState)();return(0,o.useEffect)((()=>{if(l){var e;const t=document.createElement("div");null===(e=l.parentElement)||void 0===e||e.appendChild(t),s(t)}}),[l]),a?o.default.createElement(Me,{key:`extension-overlay-${t}-${n}-${e}`,el:a},o.default.createElement(Ve,{extensionId:e})):null}function Ve({extensionId:e}){return o.default.createElement("button",{className:We.extensionOverlay},o.default.createElement("span",{className:We.extensionTooltip},e))}function Ue(){const{slots:e,extensions:t}=(0,E.useExtensionStore)(),{isOpen:n}=(0,E.useStore)(h.wT);return o.default.createElement(o.default.Fragment,null,n?null:o.default.createElement($e,null),e?Object.entries(e).map((([e,t])=>Object.keys(t.instances).map((t=>o.default.createElement(Me,{key:`slot-overlay-${t}-${e}`,el:document.querySelector(`*[data-extension-slot-name="${e}"][data-extension-slot-module-name="${t}"]`)},o.default.createElement(ze,{slotName:e})))))):null,t?Object.entries(t).map((([e,t])=>Object.entries(t.instances).map((([t,n])=>Object.entries(n).map((([n,l])=>o.default.createElement(Le,{key:n,extensionName:e,slotModuleName:t,slotName:n,domElement:document.querySelector(`*[data-extension-slot-name="${n}"][data-extension-slot-module-name="${t}"] *[data-extension-id="${l.id}"]`)}))))))):null)}function ze({slotName:e}){return o.default.createElement(o.default.Fragment,null,o.default.createElement("div",{className:We.slotOverlay}),o.default.createElement("div",{className:We.slotName},e))}const Re={toggleIsUIEditorEnabled:({isUIEditorEnabled:e})=>({isUIEditorEnabled:!e})};function $e(){const{toggleIsUIEditorEnabled:e}=(0,E.useStore)(h.wT,Re);return o.default.createElement(d.Z,{className:We.exitButton,kind:"danger",size:"sm",renderIcon:l.Z,iconDescription:"Exit UI Editor",tooltipPosition:"left",onClick:e,hasIconOnly:!0})}var Ye=n(3114);let qe;function Je(e,t){return(0,E.isVersionSatisfied)(e,t)?"okay":"version-mismatch"}function Ke(){const[e,t]=(0,o.useState)([]);return(0,o.useEffect)((()=>{(async function(){if(!qe){var e;const t=(null!==(e=window.installedModules)&&void 0!==e?e:[]).filter((e=>e[1].backendDependencies)).map((e=>({backendDependencies:e[1].backendDependencies,moduleName:e[0]}))),n=await async function(){try{return(await(0,E.openmrsFetch)("/ws/rest/v1/module?v=custom:(uuid,version)",{method:"GET"})).data.results}catch(e){console.error(e)}return[]}();qe=t.map((e=>function(e,t){const n=[],o=function(e,t){const n=Object.keys(e),o=t.map((e=>e.uuid));return(0,Ye.Z)(n,o).map((t=>({uuid:t,version:e[t]})))}(e.backendDependencies,t),l=function(e,t){return Object.keys(e).map((t=>({uuid:t,version:e[t]}))).filter((e=>t.find((t=>e.uuid===t.uuid))))}(e.backendDependencies,t);return n.push(...o.map((e=>({name:e.uuid,requiredVersion:e.version,type:"missing"}))),...l.map((e=>{const n=e.version,o=function(e,t){var n,o;const l=e.uuid;return null!==(n=null===(o=t.find((e=>e.uuid==l)))||void 0===o?void 0:o.version)&&void 0!==n?n:""}(e,t);return{name:e.uuid,requiredVersion:n,installedVersion:o,type:Je(n,o)}}))),{name:e.moduleName,dependencies:n}}(e,n)))}return qe})().then(t)}),[]),e}function Xe(){const e=Ke(),[t,n]=(0,o.useState)(!1);(0,o.useEffect)((()=>{n((t=>t||function(e){return e.some((e=>e.dependencies.some((e=>"okay"!==e.type))))}(e)))}),[e]),(0,o.useEffect)((()=>{t&&(0,E.showNotification)({description:"Found modules with unresolved backend dependencies.",action:o.default.createElement(Pe.xh,{onClick:h.XE},"View"),kind:"error"})}),[t]);const{isOpen:l,isUIEditorEnabled:a,openTabIndex:s}=(0,E.useStore)(h.wT);return o.default.createElement(o.default.Fragment,null,l?o.default.createElement(je,{close:h.zI,frontendModules:e,visibleTabIndex:s}):null,a?o.default.createElement(Ue,null):null)}function Qe(){return o.default.createElement(E.UserHasAccess,{privilege:"coreapps.systemAdministration"},o.default.createElement(Xe,null))}},5281:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__configuration-styles__tools___3AGqJ {\n position: fixed;\n width: 100%;\n background-color: #e0e0e0;\n border-bottom: 1px solid #a0a0a0;\n border-top: 1px solid #c0c0c0;\n z-index: 2;\n}\n\n.-esm-implementer-tools__configuration-styles__tools___3AGqJ > div {\n flex: 0 1 auto;\n}\n\n.-esm-implementer-tools__configuration-styles__actionButton___2Uppy {\n display: inline-flex;\n align-items: center;\n}\n\n.-esm-implementer-tools__configuration-styles__downloadLink___3Acrx {\n text-decoration: none;\n color: inherit;\n}\n\n.-esm-implementer-tools__configuration-styles__mainContent___2sxQa {\n background-color: #f0f0f0;\n width: 100%;\n display: flex;\n overflow-y: auto;\n}\n\n.-esm-implementer-tools__configuration-styles__configTreePane___33WF1 {\n width: 55%;\n overflow-wrap: break-word;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n\n.-esm-implementer-tools__configuration-styles__descriptionPane___2K_Kr {\n width: 45%;\n background-color: #e0e0e0;\n color: #424242;\n padding: 1em 2em;\n font-size: 12pt;\n overflow-wrap: break-word;\n overflow-y: scroll;\n}\n\n.-esm-implementer-tools__configuration-styles__configTreePane___33WF1 .bx--text-input-wrapper {\n min-width: 8em;\n}\n\n.-esm-implementer-tools__configuration-styles__fullWidthAccordion___kPYfh .bx--accordion__content {\n padding-right: 0;\n}\n\n.-esm-implementer-tools__configuration-styles__toggleToolbarButton___2HZdY {\n position: absolute;\n left: 97vw;\n top: -2px;\n}\n\n.-esm-implementer-tools__configuration-styles__valueEditorInput___DWOa3 {\n width: 25em;\n}\n\n.-esm-implementer-tools__configuration-styles__valueEditorButtons___1uqDN {\n height: 2.5rem;\n min-width: 5em;\n margin-left: 1em;\n}\n","",{version:3,sources:["webpack://./src/configuration/configuration.styles.css"],names:[],mappings:"AAAA;EACE,eAAe;EACf,WAAW;EACX,yBAAyB;EACzB,gCAAgC;EAChC,6BAA6B;EAC7B,UAAU;AACZ;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,yBAAyB;EACzB,WAAW;EACX,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,yBAAyB;EACzB,kBAAkB;EAClB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,yBAAyB;EACzB,cAAc;EACd,gBAAgB;EAChB,eAAe;EACf,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,SAAS;AACX;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,cAAc;EACd,cAAc;EACd,gBAAgB;AAClB",sourcesContent:[".tools {\n position: fixed;\n width: 100%;\n background-color: #e0e0e0;\n border-bottom: 1px solid #a0a0a0;\n border-top: 1px solid #c0c0c0;\n z-index: 2;\n}\n\n.tools > div {\n flex: 0 1 auto;\n}\n\n.actionButton {\n display: inline-flex;\n align-items: center;\n}\n\n.downloadLink {\n text-decoration: none;\n color: inherit;\n}\n\n.mainContent {\n background-color: #f0f0f0;\n width: 100%;\n display: flex;\n overflow-y: auto;\n}\n\n.configTreePane {\n width: 55%;\n overflow-wrap: break-word;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n\n.descriptionPane {\n width: 45%;\n background-color: #e0e0e0;\n color: #424242;\n padding: 1em 2em;\n font-size: 12pt;\n overflow-wrap: break-word;\n overflow-y: scroll;\n}\n\n.configTreePane :global(.bx--text-input-wrapper) {\n min-width: 8em;\n}\n\n.fullWidthAccordion :global(.bx--accordion__content) {\n padding-right: 0;\n}\n\n.toggleToolbarButton {\n position: absolute;\n left: 97vw;\n top: -2px;\n}\n\n.valueEditorInput {\n width: 25em;\n}\n\n.valueEditorButtons {\n height: 2.5rem;\n min-width: 5em;\n margin-left: 1em;\n}\n"],sourceRoot:""}]),s.locals={tools:"-esm-implementer-tools__configuration-styles__tools___3AGqJ",actionButton:"-esm-implementer-tools__configuration-styles__actionButton___2Uppy",downloadLink:"-esm-implementer-tools__configuration-styles__downloadLink___3Acrx",mainContent:"-esm-implementer-tools__configuration-styles__mainContent___2sxQa",configTreePane:"-esm-implementer-tools__configuration-styles__configTreePane___33WF1",descriptionPane:"-esm-implementer-tools__configuration-styles__descriptionPane___2K_Kr",fullWidthAccordion:"-esm-implementer-tools__configuration-styles__fullWidthAccordion___kPYfh",toggleToolbarButton:"-esm-implementer-tools__configuration-styles__toggleToolbarButton___2HZdY",valueEditorInput:"-esm-implementer-tools__configuration-styles__valueEditorInput___DWOa3",valueEditorButtons:"-esm-implementer-tools__configuration-styles__valueEditorButtons___1uqDN"};const r=s},7970:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__description-styles__path___xbL6R {\n color: #303030;\n margin-bottom: 1em;\n}\n\n.-esm-implementer-tools__description-styles__description___3w8EM {\n margin-bottom: 0.5em;\n}\n\n.-esm-implementer-tools__description-styles__source___2Y3IA {\n font-style: italic;\n margin-bottom: 0.5em;\n}\n\n.-esm-implementer-tools__description-styles__value___2m1CN {\n font-family: monospace;\n margin-top: 0.5em;\n margin-left: 0.5em;\n}\n","",{version:3,sources:["webpack://./src/configuration/description.styles.css"],names:[],mappings:"AAAA;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,oBAAoB;AACtB;;AAEA;EACE,sBAAsB;EACtB,iBAAiB;EACjB,kBAAkB;AACpB",sourcesContent:[".path {\n color: #303030;\n margin-bottom: 1em;\n}\n\n.description {\n margin-bottom: 0.5em;\n}\n\n.source {\n font-style: italic;\n margin-bottom: 0.5em;\n}\n\n.value {\n font-family: monospace;\n margin-top: 0.5em;\n margin-left: 0.5em;\n}\n"],sourceRoot:""}]),s.locals={path:"-esm-implementer-tools__description-styles__path___xbL6R",description:"-esm-implementer-tools__description-styles__description___3w8EM",source:"-esm-implementer-tools__description-styles__source___2Y3IA",value:"-esm-implementer-tools__description-styles__value___2m1CN"};const r=s},5555:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__editable-value-styles__secretButton___lSFNq {\n background: none;\n color: #474b6b;\n border: none;\n font: inherit;\n text-align: left;\n}\n\n.-esm-implementer-tools__editable-value-styles__error___2-dxM {\n margin-left: 1em;\n color: orange;\n font-size: 11pt;\n}\n\n.-esm-implementer-tools__editable-value-styles__overriddenValue___4bCrT {\n color: #2020a0;\n}\n","",{version:3,sources:["webpack://./src/configuration/editable-value.styles.css"],names:[],mappings:"AAAA;EACE,gBAAgB;EAChB,cAAc;EACd,YAAY;EACZ,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,cAAc;AAChB",sourcesContent:[".secretButton {\n background: none;\n color: #474b6b;\n border: none;\n font: inherit;\n text-align: left;\n}\n\n.error {\n margin-left: 1em;\n color: orange;\n font-size: 11pt;\n}\n\n.overriddenValue {\n color: #2020a0;\n}\n"],sourceRoot:""}]),s.locals={secretButton:"-esm-implementer-tools__editable-value-styles__secretButton___lSFNq",error:"-esm-implementer-tools__editable-value-styles__error___2-dxM",overriddenValue:"-esm-implementer-tools__editable-value-styles__overriddenValue___4bCrT"};const r=s},5336:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__layout-styles__labelCell___1FQD9 {\n width: 12em;\n}\n\n.-esm-implementer-tools__layout-styles__structuredList___1WZZj {\n margin-bottom: 1em;\n}\n\n.-esm-implementer-tools__layout-styles__structuredListRow___32y33 {\n border-left: 2px solid #c0c0c0;\n}\n\n.-esm-implementer-tools__layout-styles__subtreeCell___3ood- {\n left: -6em;\n}\n","",{version:3,sources:["webpack://./src/configuration/layout/layout.styles.css"],names:[],mappings:"AAAA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,UAAU;AACZ",sourcesContent:[".labelCell {\n width: 12em;\n}\n\n.structuredList {\n margin-bottom: 1em;\n}\n\n.structuredListRow {\n border-left: 2px solid #c0c0c0;\n}\n\n.subtreeCell {\n left: -6em;\n}\n"],sourceRoot:""}]),s.locals={labelCell:"-esm-implementer-tools__layout-styles__labelCell___1FQD9",structuredList:"-esm-implementer-tools__layout-styles__structuredList___1WZZj",structuredListRow:"-esm-implementer-tools__layout-styles__structuredListRow___32y33",subtreeCell:"-esm-implementer-tools__layout-styles__subtreeCell___3ood-"};const r=s},1436:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF .bx--structured-list-td {\n padding: 0.25rem 3rem 0.25rem 1rem;\n}\n\n.-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF .bx--structured-list {\n margin-bottom: 0.25rem;\n}\n\n.-esm-implementer-tools__array-editor-styles__buttonCell___2k5Vb {\n text-align: right;\n}\n\n/* .valueCell {\n display: inline-flex;\n} */\n","",{version:3,sources:["webpack://./src/configuration/value-editors/array-editor.styles.css"],names:[],mappings:"AAAA;EACE,kCAAkC;AACpC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;GAEG",sourcesContent:[".arrayEditor :global(.bx--structured-list-td) {\n padding: 0.25rem 3rem 0.25rem 1rem;\n}\n\n.arrayEditor :global(.bx--structured-list) {\n margin-bottom: 0.25rem;\n}\n\n.buttonCell {\n text-align: right;\n}\n\n/* .valueCell {\n display: inline-flex;\n} */\n"],sourceRoot:""}]),s.locals={arrayEditor:"-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF",buttonCell:"-esm-implementer-tools__array-editor-styles__buttonCell___2k5Vb"};const r=s},3810:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,'.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL,\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL > [role="combobox"] {\n display: flex;\n position: relative;\n width: 20em;\n}\n\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL [role="listbox"] {\n margin: 0;\n padding: 0;\n display: flex;\n flex-flow: column wrap;\n background-color: whitesmoke;\n color: #fff;\n}\n\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL li {\n line-height: 0.75rem;\n padding: 0.5em;\n display: block;\n border-bottom: 0.125rem solid #718096;\n outline: 0;\n margin: 0;\n color: #000;\n}\n\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL [role="option"]:hover {\n background-color: #38a169;\n border-color: #38a169;\n color: #f7fafc;\n}\n',"",{version:3,sources:["webpack://./src/configuration/value-editors/concept-search.styles.css"],names:[],mappings:"AAAA;;EAEE,aAAa;EACb,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,sBAAsB;EACtB,4BAA4B;EAC5B,WAAW;AACb;;AAEA;EACE,oBAAoB;EACpB,cAAc;EACd,cAAc;EACd,qCAAqC;EACrC,UAAU;EACV,SAAS;EACT,WAAW;AACb;;AAEA;EACE,yBAAyB;EACzB,qBAAqB;EACrB,cAAc;AAChB",sourcesContent:['.autocomplete,\n.autocomplete > [role="combobox"] {\n display: flex;\n position: relative;\n width: 20em;\n}\n\n.autocomplete [role="listbox"] {\n margin: 0;\n padding: 0;\n display: flex;\n flex-flow: column wrap;\n background-color: whitesmoke;\n color: #fff;\n}\n\n.autocomplete li {\n line-height: 0.75rem;\n padding: 0.5em;\n display: block;\n border-bottom: 0.125rem solid #718096;\n outline: 0;\n margin: 0;\n color: #000;\n}\n\n.autocomplete [role="option"]:hover {\n background-color: #38a169;\n border-color: #38a169;\n color: #f7fafc;\n}\n'],sourceRoot:""}]),s.locals={autocomplete:"-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL"};const r=s},8147:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY .bx--structured-list-td {\n padding: 0.25rem 3rem 0.25rem 1rem;\n}\n\n.-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY .bx--structured-list {\n margin-bottom: 0.25rem;\n}\n\n.-esm-implementer-tools__object-editor-styles__buttonCell___3ONI- {\n text-align: right;\n}\n\n/* .valueCell {\n display: inline-flex;\n} */\n","",{version:3,sources:["webpack://./src/configuration/value-editors/object-editor.styles.css"],names:[],mappings:"AAAA;EACE,kCAAkC;AACpC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;GAEG",sourcesContent:[".objectEditor :global(.bx--structured-list-td) {\n padding: 0.25rem 3rem 0.25rem 1rem;\n}\n\n.objectEditor :global(.bx--structured-list) {\n margin-bottom: 0.25rem;\n}\n\n.buttonCell {\n text-align: right;\n}\n\n/* .valueCell {\n display: inline-flex;\n} */\n"],sourceRoot:""}]),s.locals={objectEditor:"-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY",buttonCell:"-esm-implementer-tools__object-editor-styles__buttonCell___3ONI-"};const r=s},9131:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__popup-styles__popup___vyld6 {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 50%;\n z-index: 100000;\n background-color: #d0d0d0;\n border-top: 2px solid #404050;\n color: #222;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n box-sizing: border-box;\n overflow-y: auto;\n}\n\n.-esm-implementer-tools__popup-styles__content___fQRAl {\n margin-top: 40px;\n width: 100%;\n}\n\n.-esm-implementer-tools__popup-styles__tabs___2HYJP {\n width: 30em;\n}\n\n.-esm-implementer-tools__popup-styles__topBar___2dsNF {\n position: fixed;\n width: 100%;\n height: 42px;\n display: flex;\n justify-content: space-between;\n border-bottom: 1px solid #a0a0a0;\n z-index: 2;\n background: #e0e0e0;\n}\n\n.-esm-implementer-tools__popup-styles__closeButton___2tyDP {\n min-height: 3em;\n padding: 0 1em;\n}\n\n.-esm-implementer-tools__popup-styles__topBar___2dsNF .bx--content-switcher-btn:first-child,\n.-esm-implementer-tools__popup-styles__topBar___2dsNF .bx--content-switcher-btn:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n","",{version:3,sources:["webpack://./src/popup/popup.styles.css"],names:[],mappings:"AAAA;EACE,eAAe;EACf,SAAS;EACT,OAAO;EACP,WAAW;EACX,WAAW;EACX,eAAe;EACf,yBAAyB;EACzB,6BAA6B;EAC7B,WAAW;EACX,aAAa;EACb,sBAAsB;EACtB,8BAA8B;EAC9B,uBAAuB;EACvB,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,aAAa;EACb,8BAA8B;EAC9B,gCAAgC;EAChC,UAAU;EACV,mBAAmB;AACrB;;AAEA;EACE,eAAe;EACf,cAAc;AAChB;;AAEA;;EAEE,yBAAyB;EACzB,4BAA4B;EAC5B,0BAA0B;EAC1B,6BAA6B;AAC/B",sourcesContent:[".popup {\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 50%;\n z-index: 100000;\n background-color: #d0d0d0;\n border-top: 2px solid #404050;\n color: #222;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n box-sizing: border-box;\n overflow-y: auto;\n}\n\n.content {\n margin-top: 40px;\n width: 100%;\n}\n\n.tabs {\n width: 30em;\n}\n\n.topBar {\n position: fixed;\n width: 100%;\n height: 42px;\n display: flex;\n justify-content: space-between;\n border-bottom: 1px solid #a0a0a0;\n z-index: 2;\n background: #e0e0e0;\n}\n\n.closeButton {\n min-height: 3em;\n padding: 0 1em;\n}\n\n.topBar :global(.bx--content-switcher-btn:first-child),\n.topBar :global(.bx--content-switcher-btn:last-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n"],sourceRoot:""}]),s.locals={popup:"-esm-implementer-tools__popup-styles__popup___vyld6",content:"-esm-implementer-tools__popup-styles__content___fQRAl",tabs:"-esm-implementer-tools__popup-styles__tabs___2HYJP",topBar:"-esm-implementer-tools__popup-styles__topBar___2dsNF",closeButton:"-esm-implementer-tools__popup-styles__closeButton___2tyDP"};const r=s},3539:(e,t,n)=>{n.d(t,{Z:()=>r});var o=n(9233),l=n.n(o),a=n(361),s=n.n(a)()(l());s.push([e.id,".-esm-implementer-tools__styles__slotOverlay___342ll {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(43, 43, 185, 0.1);\n border: 1px solid rgba(43, 43, 185, 0.4);\n pointer-events: none;\n}\n\n.-esm-implementer-tools__styles__slotName___1bIs0 {\n background-color: rgb(255, 255, 255, 0.85);\n border: 1px solid rgba(43, 43, 185, 0.4);\n color: #393939;\n position: absolute;\n bottom: 0;\n right: 0;\n padding: 0.5em 0.5em 0.5em 0.5em;\n pointer-events: none;\n}\n\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: none;\n border: none;\n}\n\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:hover {\n background-color: rgba(43, 43, 185, 0.1);\n}\n\n/* Show the tooltip text when you mouse over the tooltip container */\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:focus .-esm-implementer-tools__styles__extensionTooltip___1sJtS,\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:hover .-esm-implementer-tools__styles__extensionTooltip___1sJtS {\n visibility: visible;\n opacity: 1;\n}\n\n.-esm-implementer-tools__styles__extensionTooltip___1sJtS {\n visibility: hidden;\n width: auto;\n background-color: rgb(255, 255, 255, 0.85);\n text-align: center;\n padding: 0.5em 0.5em 0.5em 0.5em;\n border: 1px solid rgba(43, 43, 185, 0.4);\n\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.-esm-implementer-tools__styles__exitButton___2xev8 {\n position: fixed !important;\n bottom: 0;\n right: 0;\n z-index: 999999;\n}\n","",{version:3,sources:["webpack://./src/ui-editor/styles.css"],names:[],mappings:"AAAA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,wCAAwC;EACxC,wCAAwC;EACxC,oBAAoB;AACtB;;AAEA;EACE,0CAA0C;EAC1C,wCAAwC;EACxC,cAAc;EACd,kBAAkB;EAClB,SAAS;EACT,QAAQ;EACR,gCAAgC;EAChC,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,wCAAwC;AAC1C;;AAEA,oEAAoE;AACpE;;EAEE,mBAAmB;EACnB,UAAU;AACZ;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,0CAA0C;EAC1C,kBAAkB;EAClB,gCAAgC;EAChC,wCAAwC;;EAExC,kBAAkB;EAClB,MAAM;EACN,OAAO;AACT;;AAEA;EACE,0BAA0B;EAC1B,SAAS;EACT,QAAQ;EACR,eAAe;AACjB",sourcesContent:[".slotOverlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(43, 43, 185, 0.1);\n border: 1px solid rgba(43, 43, 185, 0.4);\n pointer-events: none;\n}\n\n.slotName {\n background-color: rgb(255, 255, 255, 0.85);\n border: 1px solid rgba(43, 43, 185, 0.4);\n color: #393939;\n position: absolute;\n bottom: 0;\n right: 0;\n padding: 0.5em 0.5em 0.5em 0.5em;\n pointer-events: none;\n}\n\n.extensionOverlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: none;\n border: none;\n}\n\n.extensionOverlay:hover {\n background-color: rgba(43, 43, 185, 0.1);\n}\n\n/* Show the tooltip text when you mouse over the tooltip container */\n.extensionOverlay:focus .extensionTooltip,\n.extensionOverlay:hover .extensionTooltip {\n visibility: visible;\n opacity: 1;\n}\n\n.extensionTooltip {\n visibility: hidden;\n width: auto;\n background-color: rgb(255, 255, 255, 0.85);\n text-align: center;\n padding: 0.5em 0.5em 0.5em 0.5em;\n border: 1px solid rgba(43, 43, 185, 0.4);\n\n position: absolute;\n top: 0;\n left: 0;\n}\n\n.exitButton {\n position: fixed !important;\n bottom: 0;\n right: 0;\n z-index: 999999;\n}\n"],sourceRoot:""}]),s.locals={slotOverlay:"-esm-implementer-tools__styles__slotOverlay___342ll",slotName:"-esm-implementer-tools__styles__slotName___1bIs0",extensionOverlay:"-esm-implementer-tools__styles__extensionOverlay___n5KTZ",extensionTooltip:"-esm-implementer-tools__styles__extensionTooltip___1sJtS",exitButton:"-esm-implementer-tools__styles__exitButton___2xev8"};const r=s}}]);
|
|
2
2
|
//# sourceMappingURL=728.openmrs-esm-implementer-tools-app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"728.openmrs-esm-implementer-tools-app.js","mappings":"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","sources":["webpack://@openmrs/esm-implementer-tools-app/./src/popup/popup.styles.css?b429","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/configuration.styles.css?0d79","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/editable-value.styles.css?80bf","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/array-editor.styles.css?c997","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/array-editor.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/concept-search.styles.css?bbd5","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/concept-search.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/concept-search.resource.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/extension-slot-add.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/extension-slot-remove.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/object-editor.styles.css?0e93","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/object-editor.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/extension-slot-order.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/value-editor-field.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editor.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/display-value.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/editable-value.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/extension-configure-tree.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/layout/layout.styles.css?5fee","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/layout/subtree.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/extension-slots-config-tree.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/config-subtree.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/layout/tree-container.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/config-tree-for-module.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/config-tree.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/description.styles.css?e45d","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/description.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/configuration.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/backend-dependencies.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/popup/popup.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/styles.css?a044","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/portal.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/extension-overlay.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/ui-editor.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/openmrs-backend-dependencies.ts","webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/useBackendDependencies.ts","webpack://@openmrs/esm-implementer-tools-app/./src/implementer-tools.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/configuration.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/description.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/editable-value.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/layout/layout.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/array-editor.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/concept-search.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/object-editor.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/popup/popup.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/styles.css"],"sourcesContent":["import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./popup.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./configuration.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./editable-value.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./array-editor.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, { useMemo } from \"react\";\nimport cloneDeep from \"lodash-es/cloneDeep\";\nimport uniqueId from \"lodash-es/uniqueId\";\nimport Add16 from \"@carbon/icons-react/es/add/16\";\nimport TrashCan16 from \"@carbon/icons-react/es/trash-can/16\";\nimport styles from \"./array-editor.styles.css\";\nimport { Type } from \"@openmrs/esm-framework\";\nimport {\n Button,\n Tile,\n StructuredListBody,\n StructuredListCell,\n StructuredListRow,\n StructuredListWrapper,\n} from \"carbon-components-react\";\nimport { ValueEditorField } from \"./value-editor-field\";\nimport { ConfigValueDescriptor } from \"../editable-value.component\";\n\ninterface ArrayEditorProps {\n element: ConfigValueDescriptor;\n valueArray: Array<any>;\n setValue: (value: Array<any>) => void;\n}\n\nexport function ArrayEditor({\n element,\n valueArray,\n setValue,\n}: ArrayEditorProps) {\n const arrayKey = useMemo(() => uniqueId(\"array-editor-\"), []);\n return (\n <Tile className={styles.arrayEditor}>\n <StructuredListWrapper>\n <StructuredListBody>\n {valueArray.map((value, i) => (\n <StructuredListRow key={`${arrayKey}-${i}`}>\n <StructuredListCell>\n <ValueEditorField\n element={{\n ...element._elements,\n _value: value,\n _source: element._source,\n }}\n valueType={(element._elements?._type as Type) ?? Type.Object}\n value={value}\n onChange={(newValue) => {\n const newValueArray = cloneDeep(valueArray);\n newValueArray[i] = newValue;\n setValue(newValueArray);\n }}\n />\n </StructuredListCell>\n <StructuredListCell className={styles.buttonCell}>\n <Button\n renderIcon={TrashCan16}\n size=\"sm\"\n kind=\"secondary\"\n iconDescription=\"Remove\"\n hasIconOnly\n onClick={() => {\n const newValueArray = cloneDeep(valueArray);\n newValueArray.splice(i, 1);\n setValue(newValueArray);\n }}\n />\n </StructuredListCell>\n </StructuredListRow>\n ))}\n <StructuredListRow>\n <StructuredListCell></StructuredListCell>\n <StructuredListCell className={styles.buttonCell}>\n <Button\n renderIcon={Add16}\n size=\"sm\"\n iconDescription=\"Add\"\n hasIconOnly\n onClick={() => {\n const newValueArray = cloneDeep(valueArray);\n const newValue =\n (element._elements?._type ?? Type.Object) == Type.Object\n ? {}\n : null;\n newValueArray.push(newValue);\n setValue(newValueArray);\n }}\n />\n </StructuredListCell>\n </StructuredListRow>\n </StructuredListBody>\n </StructuredListWrapper>\n </Tile>\n );\n}\n","import api from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./concept-search.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, { useState, useEffect, useMemo } from \"react\";\nimport debounce from \"lodash-es/debounce\";\nimport uniqueId from \"lodash-es/uniqueId\";\nimport {\n fetchConceptByUuid,\n performConceptSearch,\n} from \"./concept-search.resource\";\nimport styles from \"./concept-search.styles.css\";\n\ninterface ConceptSearchBoxProps {\n setConcept: (concept) => void;\n}\n\nexport function ConceptSearchBox({ setConcept }: ConceptSearchBoxProps) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [searchResults, setSearchResults] = useState([]);\n const [activeConceptUuid, setActiveConceptUuid] = useState<any>(\"\");\n const searchTimeoutInMs = 300;\n\n const id = useMemo(() => uniqueId(), []);\n\n const handleUuidChange = (concept) => {\n setActiveConceptUuid(concept.uuid);\n resetSearch();\n setConcept(concept);\n };\n\n const resetSearch = () => {\n setSearchTerm(\"\");\n setSearchResults([]);\n };\n\n const handleSearchTermChange = debounce((searchTerm) => {\n setSearchTerm(searchTerm);\n }, searchTimeoutInMs);\n\n useEffect(() => {\n const ac = new AbortController();\n\n if (searchTerm && searchTerm.length >= 2) {\n performConceptSearch(searchTerm).then(({ data: { results } }) => {\n setSearchResults(results.slice(0, 9));\n });\n } else {\n setSearchResults([]);\n }\n return () => ac.abort();\n }, [searchTerm]);\n\n return (\n <div className={styles.autocomplete}>\n <input\n type=\"text\"\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n aria-autocomplete=\"list\"\n role=\"combobox\"\n aria-label=\"Look up concept by name\"\n aria-controls={`searchbox-${id}`}\n aria-expanded={searchResults.length > 0}\n placeholder=\"Look up concept by name\"\n autoFocus\n onChange={($event) => {\n handleSearchTermChange($event.target.value);\n }}\n />\n <div id={`searchbox-${id}`}>\n <ul role=\"listbox\">\n {!!searchResults.length &&\n searchResults.map((concept: any) => (\n <li\n key={concept.uuid}\n role=\"option\"\n style={{ padding: \"5px\" }}\n onClick={() => {\n handleUuidChange(concept);\n }}\n aria-selected=\"true\"\n >\n {concept.display}\n </li>\n ))}\n {searchTerm && searchResults && !searchResults.length && (\n <li>No matching results found.</li>\n )}\n </ul>\n </div>\n </div>\n );\n}\n","import { openmrsFetch } from \"@openmrs/esm-framework\";\n\nexport function fetchConceptByUuid(conceptUuid: string) {\n return openmrsFetch(`/ws/rest/v1/concept/${conceptUuid}`, {\n method: \"GET\",\n });\n}\n\nexport function performConceptSearch(query: string) {\n return openmrsFetch(`/ws/rest/v1/concept/?q=${query}`, {\n method: \"GET\",\n });\n}\n","import React, { useState, useEffect } from \"react\";\nimport { MultiSelect } from \"carbon-components-react\";\nimport { ExtensionStore, extensionStore } from \"@openmrs/esm-framework\";\n\nexport function ExtensionSlotAdd({ value, setValue }) {\n const [availableExtensions, setAvailableExtensions] = useState<Array<string>>(\n []\n );\n\n useEffect(() => {\n function update(state: ExtensionStore) {\n setAvailableExtensions(Object.keys(state.extensions));\n }\n update(extensionStore.getState());\n return extensionStore.subscribe(update);\n }, []);\n\n return (\n <MultiSelect.Filterable\n id={`add-select`}\n items={availableExtensions.map((name) => ({ id: name, label: name }))}\n placeholder=\"Select extensions\"\n onChange={(value) => setValue(value.selectedItems.map((v) => v.id))}\n initialSelectedItems={value}\n />\n );\n}\n","import React from \"react\";\nimport { MultiSelect } from \"carbon-components-react\";\nimport {\n ExtensionStore,\n getAssignedIds,\n useExtensionStore,\n} from \"@openmrs/esm-framework\";\n\nfunction getExtensionIds(\n store: ExtensionStore,\n moduleName: string,\n slotName: string\n) {\n const slot = store.slots[slotName];\n const instance = slot.instances[moduleName];\n return getAssignedIds(instance, slot.attachedIds);\n}\n\nexport function ExtensionSlotRemove({\n slotName,\n slotModuleName,\n value,\n setValue,\n}) {\n const store = useExtensionStore();\n const assignedIds = getExtensionIds(store, slotModuleName, slotName);\n\n return (\n <MultiSelect.Filterable\n id={`add-select`}\n items={assignedIds.map((id) => ({ id, label: id }))}\n placeholder=\"Select extensions\"\n onChange={(value) => setValue(value.selectedItems.map((v) => v.id))}\n initialSelectedItems={value}\n />\n );\n}\n","import api from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./object-editor.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from \"react\";\nimport {\n StructuredListBody,\n StructuredListCell,\n StructuredListRow,\n StructuredListWrapper,\n Tile,\n} from \"carbon-components-react\";\nimport { ValueEditorField } from \"./value-editor-field\";\nimport { ConfigValueDescriptor } from \"../editable-value.component\";\nimport { Type } from \"@openmrs/esm-framework\";\nimport cloneDeep from \"lodash-es/cloneDeep\";\nimport styles from \"./object-editor.styles.css\";\n\ninterface ObjectEditorProps {\n element: ConfigValueDescriptor;\n valueObject: Object;\n setValue: (value: Object) => void;\n}\n\nexport function ObjectEditor({\n element,\n valueObject,\n setValue,\n}: ObjectEditorProps) {\n return (\n <Tile className={styles.objectEditor}>\n <StructuredListWrapper>\n <StructuredListBody>\n {Object.entries(element).map(([key, schema]) =>\n !key.startsWith(\"_\") ? (\n <StructuredListRow key={key}>\n <StructuredListCell>\n <ValueEditorField\n element={{ _value: key, _source: element._source }}\n valueType={Type.String}\n value={key}\n onChange={(newKey) => {\n const newValueObject = cloneDeep(valueObject);\n newValueObject[newKey] = cloneDeep(valueObject[key]);\n delete newValueObject[key];\n setValue(newValueObject);\n }}\n />\n </StructuredListCell>\n <StructuredListCell>\n <ValueEditorField\n element={{\n ...schema,\n _value: valueObject[key],\n _source: element._source,\n }}\n valueType={schema._type}\n value={valueObject[key]}\n onChange={(newValue) => {\n const newValueObject = cloneDeep(valueObject);\n newValueObject[key] = newValue;\n setValue(newValueObject);\n }}\n />\n </StructuredListCell>\n </StructuredListRow>\n ) : null\n )}\n </StructuredListBody>\n </StructuredListWrapper>\n </Tile>\n );\n}\n","import React from \"react\";\n\nexport function ExtensionSlotOrder({\n slotName,\n slotModuleName,\n value,\n setValue,\n}) {\n return <div>Todo: compose array with extension lookup</div>;\n}\n","import React, { useState } from \"react\";\nimport uniqueId from \"lodash-es/uniqueId\";\nimport { Checkbox, NumberInput, TextInput } from \"carbon-components-react\";\nimport { Type } from \"@openmrs/esm-framework\";\nimport { ConfigValueDescriptor } from \"../editable-value.component\";\nimport { ValueType } from \"../value-editor\";\nimport { ArrayEditor } from \"./array-editor\";\nimport { ConceptSearchBox } from \"./concept-search\";\nimport { ExtensionSlotAdd } from \"./extension-slot-add\";\nimport { ExtensionSlotRemove } from \"./extension-slot-remove\";\nimport { ObjectEditor } from \"./object-editor\";\nimport { ExtensionSlotOrder } from \"./extension-slot-order\";\n\nexport interface ValueEditorFieldProps {\n element: ConfigValueDescriptor;\n path?: Array<string>;\n valueType?: ValueType;\n value: any;\n onChange: (value: any) => void;\n}\n\nexport function ValueEditorField({\n element,\n path,\n valueType,\n value,\n onChange,\n}: ValueEditorFieldProps) {\n const [id] = useState(uniqueId(\"value-editor-\"));\n\n if (valueType === \"remove\" && !path) {\n throw new Error(\n \"Programming error: ValueEditorField initialized for a 'remove' field, but no 'path' is available\"\n );\n }\n\n return valueType === Type.Array ? (\n <ArrayEditor element={element} valueArray={value} setValue={onChange} />\n ) : valueType === Type.Boolean ? (\n <Checkbox\n id={id}\n checked={value}\n hideLabel\n labelText=\"\"\n onChange={onChange}\n ></Checkbox>\n ) : valueType === Type.ConceptUuid ? (\n <ConceptSearchBox setConcept={(concept) => onChange(concept.uuid)} />\n ) : valueType === Type.Number ? (\n <NumberInput\n id={id}\n value={value}\n onChange={\n // e.target.value not working properly right now: https://github.com/carbon-design-system/carbon/issues/7457\n (e) => onChange(Number((e as any).imaginaryTarget.value))\n }\n ></NumberInput>\n ) : valueType === Type.String || valueType === Type.UUID ? (\n <TextInput\n id={id}\n value={value}\n labelText=\"\"\n onChange={(e) => onChange(e.target.value)}\n ></TextInput>\n ) : valueType === \"add\" ? (\n <ExtensionSlotAdd value={value ?? element._value} setValue={onChange} />\n ) : valueType === \"remove\" && path ? (\n <ExtensionSlotRemove\n slotName={path[2]}\n slotModuleName={path[0]}\n value={value ?? element._value}\n setValue={onChange}\n />\n ) : valueType === \"order\" && path ? (\n <ExtensionSlotOrder\n slotName={path[2]}\n slotModuleName={path[0]}\n value={value ?? element._value}\n setValue={onChange}\n />\n ) : valueType === \"configure\" && path ? (\n <>Todo</>\n ) : (\n <ObjectEditor element={element} valueObject={value} setValue={onChange} />\n );\n}\n","import React, { useEffect, useState, useRef } from \"react\";\nimport Close16 from \"@carbon/icons-react/es/close/16\";\nimport Save16 from \"@carbon/icons-react/es/save/16\";\nimport { Button } from \"carbon-components-react\";\nimport { Type } from \"@openmrs/esm-framework\";\nimport { ConfigValueDescriptor } from \"./editable-value.component\";\nimport { ValueEditorField } from \"./value-editors/value-editor-field\";\nimport styles from \"./configuration.styles.css\";\n\nexport type CustomValueType = \"add\" | \"remove\" | \"order\" | \"configure\";\n\nexport type ValueType = CustomValueType | Type;\n\ninterface ValueEditorProps {\n element: ConfigValueDescriptor;\n customType?: CustomValueType;\n path: Array<string>;\n handleSave: (val: string) => void;\n handleClose: () => void;\n}\n\nexport function ValueEditor({\n element,\n customType,\n path,\n handleSave,\n handleClose,\n}: ValueEditorProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [tmpValue, setTmpValue] = useState(element._value);\n\n const valueType = customType ?? element._type;\n\n const keyListener = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n handleClose();\n } else if (e.key === \"Enter\") {\n handleSave(JSON.stringify(tmpValue));\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"keyup\", keyListener);\n return () => {\n document.removeEventListener(\"keyup\", keyListener);\n };\n }, [tmpValue]);\n\n return (\n <div ref={ref} style={{ display: \"inherit\" }}>\n <ValueEditorField\n element={element}\n path={path}\n value={tmpValue}\n onChange={setTmpValue}\n valueType={valueType}\n />\n <div className={styles.valueEditorButtons}>\n <Button\n renderIcon={Save16}\n size=\"sm\"\n kind=\"primary\"\n iconDescription=\"Save\"\n hasIconOnly\n onClick={() => handleSave(JSON.stringify(tmpValue))}\n />\n <Button\n renderIcon={Close16}\n size=\"sm\"\n kind=\"secondary\"\n iconDescription=\"Cancel\"\n hasIconOnly\n onClick={handleClose}\n />\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface DisplayValueProps {\n value: any;\n}\n\nexport function DisplayValue({ value }: DisplayValueProps) {\n // TODO: Make this show the concept name for ConceptUUID type values\n return (\n <>\n {Array.isArray(value)\n ? typeof value[0] === \"object\"\n ? value.map((v, i) => (\n <div key={`${v}-${i}`} style={{ marginBottom: \"1em\" }}>\n <DisplayValue value={v} />\n </div>\n ))\n : value.join(\", \")\n : typeof value === \"object\" && value !== null\n ? Object.entries(value).map(([k, v], i) => (\n <div key={`${k}-${i}`}>\n {k}: <DisplayValue value={v} />\n </div>\n ))\n : typeof value === \"string\" || typeof value === \"number\"\n ? value\n : value == null\n ? \"none\"\n : JSON.stringify(value)}\n </>\n );\n}\n","import React, { useState, useEffect, useRef } from \"react\";\nimport isEqual from \"lodash-es/isEqual\";\nimport unset from \"lodash-es/unset\";\nimport cloneDeep from \"lodash-es/cloneDeep\";\nimport Reset16 from \"@carbon/icons-react/es/reset/16\";\nimport styles from \"./editable-value.styles.css\";\nimport { Button } from \"carbon-components-react\";\nimport {\n ConfigValue,\n Validator,\n Type,\n Config,\n temporaryConfigStore,\n} from \"@openmrs/esm-framework\";\nimport { ValueEditor, CustomValueType } from \"./value-editor\";\nimport { implementerToolsStore, ImplementerToolsStore } from \"../store\";\nimport { DisplayValue } from \"./display-value\";\n\nexport interface EditableValueProps {\n path: Array<string>;\n element: ConfigValueDescriptor;\n customType?: CustomValueType;\n}\n\nexport interface ConfigValueDescriptor {\n _value: ConfigValue;\n _source: string;\n _default?: ConfigValue;\n _description?: string;\n _elements?: Config | ConfigValueDescriptor;\n _validators?: Array<Validator>;\n _type?: Type;\n}\n\nexport default function EditableValue({\n path,\n element,\n customType,\n}: EditableValueProps) {\n const [valueString, setValueString] = useState<string>();\n const [editing, setEditing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const activeConfigRef = useRef<HTMLButtonElement>(null);\n\n const closeEditor = () => {\n setEditing(false);\n setError(null);\n };\n\n const focusOnConfigPathBeingEdited = () => {\n if (activeConfigRef && activeConfigRef.current) {\n setEditing(true);\n activeConfigRef.current.focus();\n }\n };\n\n useEffect(() => {\n const update = (state: ImplementerToolsStore) => {\n if (\n state.configPathBeingEdited &&\n isEqual(state.configPathBeingEdited, path)\n ) {\n focusOnConfigPathBeingEdited();\n }\n };\n update(implementerToolsStore.getState());\n return implementerToolsStore.subscribe(update);\n }, []);\n\n useEffect(() => {\n const state = implementerToolsStore.getState();\n if (editing && !isEqual(state.configPathBeingEdited, path)) {\n implementerToolsStore.setState({\n configPathBeingEdited: path,\n activeItemDescription: {\n path: path,\n source: element._source,\n description: element._description,\n value: valueString,\n },\n });\n }\n if (!editing && isEqual(state.configPathBeingEdited, path)) {\n implementerToolsStore.setState({ configPathBeingEdited: null });\n }\n }, [editing]);\n\n return (\n <>\n <div className={styles.line}>\n {editing ? (\n <>\n <ValueEditor\n element={element}\n customType={customType}\n path={path}\n handleClose={closeEditor}\n handleSave={(val) => {\n try {\n const result = JSON.parse(val);\n const tempConfigUpdate = set(\n cloneDeep(temporaryConfigStore.getState()),\n [\"config\", ...path],\n result\n );\n temporaryConfigStore.setState(tempConfigUpdate);\n setValueString(val);\n closeEditor();\n } catch (e) {\n console.warn(e);\n setError(\"That's not formatted quite right. Try again.\");\n }\n }}\n />\n </>\n ) : (\n <>\n <button\n className={`${styles.secretButton} ${\n element._source == \"temporary config\"\n ? styles.overriddenValue\n : \"\"\n }`}\n onClick={() => setEditing(true)}\n ref={activeConfigRef}\n >\n <DisplayValue value={element._value} />\n </button>\n {element._source == \"temporary config\" ? (\n <Button\n style={{ marginLeft: \"1em\" }}\n renderIcon={Reset16}\n size=\"sm\"\n kind=\"tertiary\"\n iconDescription=\"Reset to default\"\n hasIconOnly\n onClick={() => {\n temporaryConfigStore.setState(\n unset(temporaryConfigStore.getState(), [\"config\", ...path])\n );\n }}\n />\n ) : null}\n </>\n )}\n {error && <div className={styles.error}>{error}</div>}\n </div>\n </>\n );\n}\n\n// A substitute for the lodash.set function, which seems to be broken,\n// at least within Jest.\nfunction set<T>(obj: T, path: Array<string>, value: any): T {\n if (path.length > 1) {\n obj[path[0]] = set(obj[path[0]] ?? {}, path.slice(1), value);\n } else {\n obj[path[0]] = value;\n }\n return obj;\n}\n","import React from \"react\";\nimport EditableValue from \"./editable-value.component\";\nimport { ExtensionSlotConfigureValueObject } from \"@openmrs/esm-framework\";\n\nexport interface ExtensionConfigureTreeProps {\n moduleName: string;\n slotName: string;\n config?: ExtensionSlotConfigureValueObject;\n}\n\nexport function ExtensionConfigureTree({\n moduleName,\n slotName,\n config,\n}: ExtensionConfigureTreeProps) {\n return (\n <EditableValue\n path={[moduleName, slotName, \"configure\"]}\n element={\n config && Object.keys(config).length\n ? { _value: config, _source: \"\", _default: {} }\n : { _value: undefined, _source: \"default\", _default: {} }\n }\n customType=\"configure\"\n />\n );\n}\n","import api from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./layout.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from \"react\";\nimport {\n StructuredListBody,\n StructuredListCell,\n StructuredListRow,\n StructuredListWrapper,\n} from \"carbon-components-react\";\nimport styles from \"./layout.styles.css\";\n\nexport interface SubtreeProps {\n leaf: boolean;\n label: string;\n children: React.ReactNode;\n onMouseEnter?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n onMouseLeave?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n}\n\nexport function Subtree({\n leaf,\n label,\n children,\n onMouseEnter,\n onMouseLeave,\n}: SubtreeProps) {\n return leaf ? (\n <StructuredListRow\n className={styles.structuredListRow}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <StructuredListCell className={styles.labelCell}>\n {label}\n </StructuredListCell>\n <StructuredListCell>{children}</StructuredListCell>\n </StructuredListRow>\n ) : (\n <>\n <StructuredListRow\n className={styles.structuredListRow}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <StructuredListCell className={styles.labelCell}>\n {label}\n </StructuredListCell>\n <StructuredListCell />\n </StructuredListRow>\n <StructuredListRow className={styles.structuredListRow}>\n <StructuredListCell />\n <StructuredListCell className={styles.subtreeCell}>\n <StructuredListWrapper className={styles.structuredList}>\n <StructuredListBody>{children}</StructuredListBody>\n </StructuredListWrapper>\n </StructuredListCell>\n </StructuredListRow>\n </>\n );\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport EditableValue from \"./editable-value.component\";\nimport isEqual from \"lodash-es/isEqual\";\nimport {\n extensionStore,\n ExtensionSlotConfigureValueObject,\n useExtensionStore,\n ExtensionStore,\n} from \"@openmrs/esm-framework\";\nimport { ExtensionConfigureTree } from \"./extension-configure-tree\";\nimport { Subtree } from \"./layout/subtree.component\";\nimport { implementerToolsStore } from \"../store\";\n\ninterface ExtensionSlotsConfigTreeProps {\n extensionsConfig: { [key: string]: any };\n moduleName: string;\n}\n\ninterface ExtensionSlotImplementerToolsConfig {\n add?: ExtensionSlotConfigValueDescriptor;\n remove?: ExtensionSlotConfigValueDescriptor;\n order?: ExtensionSlotConfigValueDescriptor;\n configure?: ExtensionConfigureDescriptor;\n}\n\ninterface ExtensionSlotConfigValueDescriptor {\n _value: Array<string>;\n _source: string;\n}\n\ninterface ExtensionConfigureDescriptor {\n _value: ExtensionSlotConfigureValueObject;\n _source: string;\n}\n\nexport function ExtensionSlotsConfigTree({\n extensionsConfig,\n moduleName,\n}: ExtensionSlotsConfigTreeProps) {\n return extensionsConfig && Object.keys(extensionsConfig).length ? (\n <Subtree label=\"extension slots\" leaf={false}>\n {Object.keys(extensionsConfig).map((slotName) => (\n <ExtensionSlotConfigTree\n key={slotName}\n config={extensionsConfig?.[slotName]}\n path={[moduleName, \"extensions\", slotName]}\n />\n ))}\n </Subtree>\n ) : null;\n}\n\ninterface ExtensionSlotConfigProps {\n config: ExtensionSlotImplementerToolsConfig;\n path: string[];\n}\n\nfunction ExtensionSlotConfigTree({ config, path }: ExtensionSlotConfigProps) {\n const [assignedExtensions, setAssignedExtensions] = useState<Array<string>>(\n []\n );\n const moduleName = path[0];\n const slotName = path[2];\n\n useEffect(() => {\n function update(state) {\n setAssignedExtensions(\n state.slots[slotName]?.instances?.[moduleName]?.assignedIds\n );\n }\n update(extensionStore.getState());\n return extensionStore.subscribe(update);\n }, []);\n\n function setActiveExtensionSlotOnMouseEnter(moduleName, slotName) {\n if (!implementerToolsStore.getState().configPathBeingEdited) {\n implementerToolsStore.setState({\n activeItemDescription: {\n path: [moduleName, slotName],\n value: assignedExtensions,\n },\n });\n }\n }\n\n function setActiveItemDescriptionOnMouseEnter(\n moduleName,\n slotName,\n key,\n value\n ) {\n if (!implementerToolsStore.getState().configPathBeingEdited) {\n implementerToolsStore.setState({\n activeItemDescription: {\n path: [moduleName, slotName, key],\n source: value?._source,\n description: {\n add: \"Add an extension to this slot.\",\n remove: \"Remove an extension from this slot.\",\n order: \"Reorder the extensions in this slot.\",\n configure:\n \"Pass a configuration object directly to one of the extensions in this slot.\",\n }[key],\n value: JSON.stringify(value?._value),\n },\n });\n }\n }\n\n function removeActiveItemDescriptionOnMouseLeave(thisPath) {\n const state = implementerToolsStore.getState();\n if (\n isEqual(state.activeItemDescription?.path, thisPath) &&\n !isEqual(state.configPathBeingEdited, thisPath)\n ) {\n implementerToolsStore.setState({ activeItemDescription: undefined });\n }\n }\n\n return (\n <Subtree\n label={slotName}\n leaf={false}\n onMouseEnter={() =>\n setActiveExtensionSlotOnMouseEnter(moduleName, slotName)\n }\n onMouseLeave={() =>\n removeActiveItemDescriptionOnMouseLeave([moduleName, slotName])\n }\n >\n {([\"add\", \"remove\", \"order\", \"configure\"] as const).map((key) => (\n <Subtree\n label={key}\n key={path.join(\".\") + key}\n leaf={true}\n onMouseEnter={() =>\n setActiveItemDescriptionOnMouseEnter(\n moduleName,\n slotName,\n key,\n config?.[key]\n )\n }\n onMouseLeave={() =>\n removeActiveItemDescriptionOnMouseLeave([moduleName, slotName, key])\n }\n >\n {key === \"configure\" ? (\n <ExtensionConfigureTree\n moduleName={moduleName}\n slotName={slotName}\n config={config?.configure?._value}\n />\n ) : (\n <EditableValue\n path={path.concat([key])}\n element={\n config?.[key] ?? {\n _value: undefined,\n _source: \"default\",\n _default: [],\n }\n }\n customType={key}\n />\n )}\n </Subtree>\n ))}\n </Subtree>\n );\n}\n","import React from \"react\";\nimport EditableValue from \"./editable-value.component\";\nimport { implementerToolsStore } from \"../store\";\nimport isEqual from \"lodash-es/isEqual\";\nimport { Subtree } from \"./layout/subtree.component\";\n\nexport interface ConfigSubtreeProps {\n config: Record<string, any>;\n path?: Array<string>;\n}\n\nexport function ConfigSubtree({ config, path = [] }: ConfigSubtreeProps) {\n function setActiveItemDescriptionOnMouseEnter(thisPath, key, value) {\n if (!implementerToolsStore.getState().configPathBeingEdited) {\n implementerToolsStore.setState({\n activeItemDescription: {\n path: thisPath,\n source: value._source,\n description: value._description,\n value: JSON.stringify(value._value),\n },\n });\n }\n }\n\n function removeActiveItemDescriptionOnMouseLeave(thisPath) {\n const state = implementerToolsStore.getState();\n if (\n isEqual(state.activeItemDescription?.path, thisPath) &&\n !isEqual(state.configPathBeingEdited, thisPath)\n ) {\n implementerToolsStore.setState({ activeItemDescription: undefined });\n }\n }\n\n return (\n <>\n {Object.entries(config).map(([key, value], i) => {\n const thisPath = path.concat([key]);\n const isLeaf =\n value.hasOwnProperty(\"_value\") || value.hasOwnProperty(\"_type\");\n return (\n <Subtree\n label={key}\n leaf={isLeaf}\n onMouseEnter={() =>\n setActiveItemDescriptionOnMouseEnter(thisPath, key, value)\n }\n onMouseLeave={() =>\n removeActiveItemDescriptionOnMouseLeave(thisPath)\n }\n key={`subtree-${thisPath.join(\".\")}`}\n >\n {isLeaf ? (\n <EditableValue path={thisPath} element={value} />\n ) : (\n <ConfigSubtree config={value} path={thisPath} />\n )}\n </Subtree>\n );\n })}\n </>\n );\n}\n","import React, { ReactNode } from \"react\";\nimport {\n StructuredListBody,\n StructuredListWrapper,\n} from \"carbon-components-react\";\nimport styles from \"./layout.styles.css\";\n\nexport interface TreeContainerProps {\n children: ReactNode;\n}\n\nexport function TreeContainer({ children }: TreeContainerProps) {\n return (\n <StructuredListWrapper className={styles.structuredList}>\n <StructuredListBody>{children}</StructuredListBody>\n </StructuredListWrapper>\n );\n}\n","import React from \"react\";\nimport { ExtensionSlotsConfigTree } from \"./extension-slots-config-tree\";\nimport { ConfigSubtree } from \"./config-subtree.component\";\nimport pickBy from \"lodash-es/pickBy\";\nimport { TreeContainer } from \"./layout/tree-container.component\";\n\nexport interface ConfigTreeForModuleProps {\n config: Record<string, any>;\n moduleName: string;\n}\n\nexport function ConfigTreeForModule({\n config,\n moduleName,\n}: ConfigTreeForModuleProps) {\n return (\n <TreeContainer>\n <ExtensionSlotsConfigTree\n extensionsConfig={config.extensions}\n moduleName={moduleName}\n />\n <ConfigSubtree\n config={pickBy(config, (v, key) => key !== \"extensions\")}\n path={[moduleName]}\n />\n </TreeContainer>\n );\n}\n","import React from \"react\";\nimport styles from \"./configuration.styles.css\";\nimport { Accordion, AccordionItem } from \"carbon-components-react\";\nimport { ConfigTreeForModule } from \"./config-tree-for-module.component\";\n\nexport interface ConfigTreeProps {\n config: Record<string, any>;\n}\n\nexport function ConfigTree({ config }: ConfigTreeProps) {\n return (\n <div>\n <Accordion align=\"start\">\n {config &&\n Object.keys(config)\n .sort()\n .map((moduleName) => {\n const moduleConfig = config[moduleName];\n return Object.keys(moduleConfig).length ? (\n <AccordionItem\n title={<h6 className={styles.moduleName}>{moduleName}</h6>}\n className={styles.fullWidthAccordion}\n key={`accordion-${moduleName}`}\n >\n <div key={`${moduleName}-config`}>\n <ConfigTreeForModule\n config={moduleConfig}\n moduleName={moduleName}\n />\n </div>\n </AccordionItem>\n ) : null;\n })}\n </Accordion>\n </div>\n );\n}\n","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./description.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from \"react\";\nimport styles from \"./description.styles.css\";\nimport { useStore } from \"@openmrs/esm-framework\";\nimport { implementerToolsStore } from \"../store\";\n\nexport function Description() {\n const { activeItemDescription } = useStore(implementerToolsStore);\n return (\n <div>\n {activeItemDescription ? (\n <>\n <p className={styles.path}>\n {activeItemDescription.path.slice(1).join(\" → \")}\n </p>\n <p className={styles.description}>\n {activeItemDescription.description}\n </p>\n <p className={styles.source}>\n {activeItemDescription.source === \"default\" ? (\n <>The current value is the default.</>\n ) : activeItemDescription.source ? (\n <>The current value comes from {activeItemDescription.source}.</>\n ) : null}\n </p>\n {activeItemDescription.value ? <p>Value:</p> : null}\n <p className={styles.value}>\n {Array.isArray(activeItemDescription.value)\n ? activeItemDescription.value.map((v, i) => (\n <p key={`${v}-${i}`}>{v}</p>\n ))\n : activeItemDescription.value}\n </p>\n </>\n ) : null}\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport ChevronDown16 from \"@carbon/icons-react/es/chevron--down/16\";\nimport ChevronUp16 from \"@carbon/icons-react/es/chevron--up/16\";\nimport Download16 from \"@carbon/icons-react/es/download/16\";\nimport TrashCan16 from \"@carbon/icons-react/es/trash-can/16\";\nimport {\n Config,\n ConfigInternalStore,\n configInternalStore,\n implementerToolsConfigStore,\n temporaryConfigStore,\n useExtensionStore,\n useStore,\n} from \"@openmrs/esm-framework\";\nimport {\n Button,\n Column,\n Grid,\n Row,\n TextInput,\n Toggle,\n} from \"carbon-components-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { implementerToolsStore, ImplementerToolsStore } from \"../store\";\nimport { ConfigTree } from \"./config-tree.component\";\nimport { Description } from \"./description.component\";\nimport cloneDeep from \"lodash-es/cloneDeep\";\nimport isEmpty from \"lodash-es/isEmpty\";\nimport styles from \"./configuration.styles.css\";\n\nfunction isLeaf(configNode: Config) {\n return (\n configNode.hasOwnProperty(\"_default\") ||\n configNode[\"_type\"] ||\n configNode.hasOwnProperty(\"_value\") ||\n configNode.hasOwnProperty(\"_source\")\n );\n}\n\nconst actions = {\n toggleIsUIEditorEnabled({ isUIEditorEnabled }: ImplementerToolsStore) {\n return { isUIEditorEnabled: !isUIEditorEnabled };\n },\n toggleIsToolbarOpen({ isConfigToolbarOpen }: ImplementerToolsStore) {\n return { isConfigToolbarOpen: !isConfigToolbarOpen };\n },\n};\n\nconst configActions = {\n toggleDevDefaults({ devDefaultsAreOn }: ConfigInternalStore) {\n return { devDefaultsAreOn: !devDefaultsAreOn };\n },\n};\n\ninterface OpenOrCloseButtonProps {\n isConfigToolbarOpen: boolean;\n toggleIsToolbarOpen(): void;\n}\n\nconst OpenOrCloseButton: React.FC<OpenOrCloseButtonProps> = ({\n isConfigToolbarOpen,\n toggleIsToolbarOpen,\n}) => (\n <Button\n hasIconOnly\n renderIcon={isConfigToolbarOpen ? ChevronUp16 : ChevronDown16}\n onClick={toggleIsToolbarOpen}\n kind=\"ghost\"\n size=\"small\"\n iconDescription={`${isConfigToolbarOpen ? \"Hide\" : \"Show\"} toolbar`}\n />\n);\n\nexport interface ConfigurationProps {}\n\nexport const Configuration: React.FC<ConfigurationProps> = () => {\n const { t } = useTranslation();\n const {\n isUIEditorEnabled,\n toggleIsUIEditorEnabled,\n isConfigToolbarOpen,\n toggleIsToolbarOpen,\n } = useStore(implementerToolsStore, actions);\n const { devDefaultsAreOn, toggleDevDefaults } = useStore(\n configInternalStore,\n configActions\n );\n const { config } = useStore(implementerToolsConfigStore);\n const extensionStore = useExtensionStore();\n const tempConfigStore = useStore(temporaryConfigStore);\n const [filterText, setFilterText] = useState(\"\");\n const tempConfig = tempConfigStore.config;\n const tempConfigObjUrl = new Blob(\n [JSON.stringify(tempConfig, undefined, 2)],\n {\n type: \"application/json\",\n }\n );\n\n const combinedConfig = useMemo(() => {\n const result = cloneDeep(config);\n for (let slot of Object.values(extensionStore.slots)) {\n for (let moduleName of Object.keys(slot.instances)) {\n if (!result[moduleName].extensions) {\n result[moduleName].extensions = {};\n }\n if (!result[moduleName].extensions[slot.name]) {\n result[moduleName].extensions[slot.name] = {};\n }\n }\n }\n return result;\n }, [config, extensionStore]);\n\n const filteredConfig = useMemo(() => {\n function getRelatedBranches(inputTree: Config, filterText: string) {\n const result = {};\n for (let k of Object.keys(inputTree)) {\n if (k.includes(filterText)) {\n result[k] = cloneDeep(inputTree[k]);\n } else {\n if (!isLeaf(inputTree[k])) {\n const kSubtreeResult = getRelatedBranches(inputTree[k], filterText);\n if (!isEmpty(kSubtreeResult)) {\n result[k] = kSubtreeResult;\n }\n }\n }\n }\n return result;\n }\n return filterText\n ? getRelatedBranches(combinedConfig, filterText)\n : combinedConfig;\n }, [filterText, combinedConfig]);\n\n return (\n <>\n <div className={styles.tools}>\n {isConfigToolbarOpen ? (\n <Grid style={{ margin: \"0.25rem\", padding: \"0.5em 1.5em\" }}>\n <Row>\n <Column sm={1} md={2}>\n <TextInput\n id=\"extensionSearch\"\n labelText=\"Search configuration\"\n onChange={(e) => setFilterText(e.target.value)}\n />\n </Column>\n <Column sm={1} md={1}>\n <Toggle\n id=\"devConfigSwitch\"\n labelText={t(\"devConfig\", \"Dev Config\")}\n onToggle={toggleDevDefaults}\n toggled={devDefaultsAreOn}\n />\n </Column>\n <Column sm={1} md={1} className={styles.actionButton}>\n <Toggle\n id=\"uiEditorSwitch\"\n labelText={t(\"uiEditor\", \"UI Editor\")}\n toggled={isUIEditorEnabled}\n onToggle={toggleIsUIEditorEnabled}\n />\n </Column>\n <Column sm={1} md={2} className={styles.actionButton}>\n <Button\n kind=\"danger\"\n iconDescription=\"Clear temporary config\"\n renderIcon={TrashCan16}\n onClick={() => {\n temporaryConfigStore.setState({ config: {} });\n }}\n >\n {t(\"clearTemporaryConfig\", \"Clear Temporary Config\")}\n </Button>\n </Column>\n <Column sm={1} md={2} className={styles.actionButton}>\n <Button\n kind=\"secondary\"\n iconDescription=\"Download temporary config\"\n renderIcon={Download16}\n >\n <a\n className={styles.downloadLink}\n download=\"temporary_config.json\"\n href={window.URL.createObjectURL(tempConfigObjUrl)}\n >\n {t(\"downloadTemporaryConfig\", \"Download Temporary Config\")}\n </a>\n </Button>\n </Column>\n </Row>\n </Grid>\n ) : null}\n <div className={styles.toggleToolbarButton}>\n <OpenOrCloseButton\n isConfigToolbarOpen={isConfigToolbarOpen}\n toggleIsToolbarOpen={toggleIsToolbarOpen}\n />\n </div>\n </div>\n <div\n className={styles.mainContent}\n style={{\n marginTop: isConfigToolbarOpen ? \"72px\" : \"25px\",\n height: isConfigToolbarOpen\n ? \"calc(50vh - 114px)\"\n : \"calc(50vh - 68px)\",\n }}\n >\n <div className={styles.configTreePane}>\n <ConfigTree config={filteredConfig} />\n </div>\n <div className={styles.descriptionPane}>\n <Description />\n </div>\n </div>\n </>\n );\n};\n","import React, { Fragment, useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n DataTable,\n Table,\n TableHead,\n TableRow,\n TableHeader,\n TableBody,\n TableCell,\n TableContainer,\n} from \"carbon-components-react\";\nimport { FrontendModule } from \"./openmrs-backend-dependencies\";\n\nexport interface ModuleDiagnosticsProps {\n frontendModules: Array<FrontendModule>;\n}\n\nexport const ModuleDiagnostics: React.FC<ModuleDiagnosticsProps> = ({\n frontendModules,\n}) => {\n const { t } = useTranslation();\n\n const headers = useMemo(\n () => [\n {\n key: \"name\",\n header: t(\"moduleName\", \"Module Name\"),\n },\n {\n key: \"installedVersion\",\n header: t(\"installedVersion\", \"Installed Version\"),\n },\n {\n key: \"requiredVersion\",\n header: t(\"requiredVersion\", \"Required Version\"),\n },\n ],\n [t]\n );\n\n return (\n <div>\n <DataTable rows={[]} headers={headers}>\n {({ headers, getTableProps, getHeaderProps }) => (\n <TableContainer title=\"\">\n <Table {...getTableProps()}>\n <TableHead>\n <TableRow>\n {headers.map((header) => (\n <TableHeader {...getHeaderProps({ header })}>\n {header.header}\n </TableHeader>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {frontendModules.map((esm) => (\n <Fragment key={esm.name}>\n <TableRow>\n <TableCell>\n <strong>{esm.name}</strong>\n </TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n </TableRow>\n {esm.dependencies.map((dep) => (\n <TableRow key={dep.name}>\n <TableCell>{dep.name}</TableCell>\n <TableCell>\n {dep.type === \"missing\" ? (\n <span style={{ color: \"red\" }}>\n {t(\"missing\", \"Missing\")}\n </span>\n ) : dep.type === \"version-mismatch\" ? (\n <span style={{ color: \"red\" }}>\n {dep.installedVersion}\n </span>\n ) : (\n <span style={{ color: \"green\" }}>\n {dep.installedVersion}\n </span>\n )}\n </TableCell>\n <TableCell>{dep.requiredVersion}</TableCell>\n </TableRow>\n ))}\n </Fragment>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n </DataTable>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport Close16 from \"@carbon/icons-react/es/close/16\";\nimport { Button, ContentSwitcher, Switch } from \"carbon-components-react\";\nimport styles from \"./popup.styles.css\";\nimport { useTranslation } from \"react-i18next\";\nimport { Configuration } from \"../configuration/configuration.component\";\nimport { ModuleDiagnostics } from \"../backend-dependencies/backend-dependencies.component\";\nimport { FrontendModule } from \"../backend-dependencies/openmrs-backend-dependencies\";\n\ninterface DevToolsPopupProps {\n close(): void;\n frontendModules: Array<FrontendModule>;\n visibleTabIndex?: number;\n}\n\nexport default function Popup(props: DevToolsPopupProps) {\n const { t } = useTranslation();\n const [activeTab, setActiveTab] = useState(0);\n\n return (\n <div className={styles.popup}>\n <div className={styles.topBar}>\n <div className={styles.tabs}>\n <ContentSwitcher\n onChange={(c) => {\n setActiveTab((c as any).index);\n }}\n >\n <Switch\n name=\"configuration-tab\"\n text={t(\"configuration\", \"Configuration\")}\n onClick={() => {}}\n onKeyDown={() => {}}\n />\n <Switch\n name=\"backend-modules-tab\"\n text={t(\"backendModules\", \"Backend Modules\")}\n onClick={() => {}}\n onKeyDown={() => {}}\n />\n </ContentSwitcher>\n </div>\n <div>\n <Button\n className={styles.closeButton}\n kind=\"secondary\"\n renderIcon={Close16}\n iconDescription=\"Close\"\n onClick={props.close}\n hasIconOnly\n />\n </div>\n </div>\n <div className={styles.content}>\n {activeTab == 0 ? (\n <Configuration />\n ) : (\n <ModuleDiagnostics frontendModules={props.frontendModules} />\n )}\n </div>\n </div>\n );\n}\n","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { createPortal } from \"react-dom\";\n\nexport function Portal({ el, children }) {\n return el ? createPortal(children, el) : null;\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Portal } from \"./portal\";\nimport styles from \"./styles.css\";\n\nexport interface ExtensionOverlayProps {\n extensionName: string;\n slotModuleName: string;\n slotName: string;\n domElement: HTMLElement | null;\n}\n\nexport function ExtensionOverlay({\n extensionName,\n slotModuleName,\n slotName,\n domElement,\n}: ExtensionOverlayProps) {\n const [overlayDomElement, setOverlayDomElement] = useState<HTMLElement>();\n\n useEffect(() => {\n if (domElement) {\n const newOverlayDomElement = document.createElement(\"div\");\n domElement.parentElement?.appendChild(newOverlayDomElement);\n setOverlayDomElement(newOverlayDomElement);\n }\n }, [domElement]);\n\n return overlayDomElement ? (\n <Portal\n key={`extension-overlay-${slotModuleName}-${slotName}-${extensionName}`}\n el={overlayDomElement}\n >\n <Content extensionId={extensionName} />\n </Portal>\n ) : null;\n}\n\nfunction Content({ extensionId }) {\n return (\n <button className={styles.extensionOverlay}>\n <span className={styles.extensionTooltip}>{extensionId}</span>\n </button>\n );\n}\n","import React from \"react\";\nimport styles from \"./styles.css\";\nimport Close16 from \"@carbon/icons-react/es/close/16\";\nimport { useExtensionStore, useStore } from \"@openmrs/esm-framework\";\nimport { Button } from \"carbon-components-react\";\nimport { Portal } from \"./portal\";\nimport { ExtensionOverlay } from \"./extension-overlay.component\";\nimport { ImplementerToolsStore, implementerToolsStore } from \"../store\";\n\nexport function UiEditor() {\n const { slots, extensions } = useExtensionStore();\n const { isOpen: implementerToolsIsOpen } = useStore(implementerToolsStore);\n\n return (\n <>\n {implementerToolsIsOpen ? null : <ExitButton />}\n {slots\n ? Object.entries(slots).map(([slotName, slotInfo]) =>\n Object.keys(slotInfo.instances).map((slotModuleName) => (\n <Portal\n key={`slot-overlay-${slotModuleName}-${slotName}`}\n el={document.querySelector(\n `*[data-extension-slot-name=\"${slotName}\"][data-extension-slot-module-name=\"${slotModuleName}\"]`\n )}\n >\n <SlotOverlay slotName={slotName} />\n </Portal>\n ))\n )\n : null}\n {extensions\n ? Object.entries(extensions).map(([extensionName, extensionInfo]) =>\n Object.entries(extensionInfo.instances).map(\n ([slotModuleName, bySlotName]) =>\n Object.entries(bySlotName).map(\n ([slotName, extensionInstance]) => (\n <ExtensionOverlay\n key={slotName}\n extensionName={extensionName}\n slotModuleName={slotModuleName}\n slotName={slotName}\n domElement={document.querySelector(\n `*[data-extension-slot-name=\"${slotName}\"][data-extension-slot-module-name=\"${slotModuleName}\"] *[data-extension-id=\"${extensionInstance.id}\"]`\n )}\n />\n )\n )\n )\n )\n : null}\n </>\n );\n}\n\nexport function SlotOverlay({ slotName }) {\n return (\n <>\n <div className={styles.slotOverlay}></div>\n <div className={styles.slotName}>{slotName}</div>\n </>\n );\n}\n\nconst actions = {\n toggleIsUIEditorEnabled({ isUIEditorEnabled }: ImplementerToolsStore) {\n return { isUIEditorEnabled: !isUIEditorEnabled };\n },\n};\n\nexport function ExitButton() {\n const { toggleIsUIEditorEnabled } = useStore(implementerToolsStore, actions);\n return (\n <Button\n className={styles.exitButton}\n kind=\"danger\"\n size=\"sm\"\n renderIcon={Close16}\n iconDescription=\"Exit UI Editor\"\n tooltipPosition=\"left\"\n onClick={toggleIsUIEditorEnabled}\n hasIconOnly\n />\n );\n}\n","import { isVersionSatisfied, openmrsFetch } from \"@openmrs/esm-framework\";\nimport difference from \"lodash-es/difference\";\n\nexport type ResolvedBackendModuleType = \"missing\" | \"version-mismatch\" | \"okay\";\n\nexport interface ResolvedBackendModule {\n name: string;\n requiredVersion: string;\n installedVersion?: string;\n type: ResolvedBackendModuleType;\n}\n\nexport interface FrontendModule {\n name: string;\n dependencies: Array<ResolvedBackendModule>;\n}\n\ninterface Module {\n moduleName: string;\n backendDependencies: Record<string, string>;\n}\n\ninterface BackendModule {\n uuid: string;\n version: string;\n}\n\nlet cachedFrontendModules: Array<FrontendModule>;\n\nasync function initInstalledBackendModules(): Promise<Array<BackendModule>> {\n try {\n const response = await fetchInstalledBackendModules();\n return response.data.results;\n } catch (err) {\n console.error(err);\n }\n\n return [];\n}\n\nfunction checkIfModulesAreInstalled(\n module: Module,\n installedBackendModules: Array<BackendModule>\n): FrontendModule {\n const dependencies: Array<ResolvedBackendModule> = [];\n\n const missingBackendModule = getMissingBackendModules(\n module.backendDependencies,\n installedBackendModules\n );\n\n const installedAndRequiredModules = getInstalledAndRequiredBackendModules(\n module.backendDependencies,\n installedBackendModules\n );\n\n dependencies.push(\n ...missingBackendModule.map((m) => ({\n name: m.uuid,\n requiredVersion: m.version,\n type: \"missing\" as ResolvedBackendModuleType,\n })),\n ...installedAndRequiredModules.map((m) => {\n const requiredVersion = m.version;\n const installedVersion = getInstalledVersion(m, installedBackendModules);\n return {\n name: m.uuid,\n requiredVersion,\n installedVersion,\n type: getResolvedModuleType(requiredVersion, installedVersion),\n };\n })\n );\n\n return {\n name: module.moduleName,\n dependencies,\n };\n}\n\nfunction fetchInstalledBackendModules() {\n return openmrsFetch(`/ws/rest/v1/module?v=custom:(uuid,version)`, {\n method: \"GET\",\n });\n}\n\nfunction getMissingBackendModules(\n requiredBackendModules: Record<string, string>,\n installedBackendModules: Array<BackendModule>\n): Array<BackendModule> {\n const requiredBackendModulesUuids = Object.keys(requiredBackendModules);\n const installedBackendModuleUuids = installedBackendModules.map(\n (res) => res.uuid\n );\n\n const missingModules = difference(\n requiredBackendModulesUuids,\n installedBackendModuleUuids\n );\n\n return missingModules.map((key) => ({\n uuid: key,\n version: requiredBackendModules[key],\n }));\n}\n\nfunction getInstalledAndRequiredBackendModules(\n requiredBackendModules: Record<string, string>,\n installedBackendModules: Array<BackendModule>\n): Array<BackendModule> {\n const requiredModules = Object.keys(requiredBackendModules).map((key) => ({\n uuid: key,\n version: requiredBackendModules[key],\n }));\n\n return requiredModules.filter((requiredModule) => {\n return installedBackendModules.find((installedModule) => {\n return requiredModule.uuid === installedModule.uuid;\n });\n });\n}\n\nfunction getInstalledVersion(\n installedAndRequiredBackendModule: BackendModule,\n installedBackendModules: Array<BackendModule>\n) {\n const moduleName = installedAndRequiredBackendModule.uuid;\n return (\n installedBackendModules.find((mod) => mod.uuid == moduleName)?.version ?? \"\"\n );\n}\n\nfunction getResolvedModuleType(\n requiredVersion: string,\n installedVersion: string\n): ResolvedBackendModuleType {\n if (!isVersionSatisfied(requiredVersion, installedVersion)) {\n return \"version-mismatch\";\n }\n\n return \"okay\";\n}\n\nexport async function checkModules(): Promise<Array<FrontendModule>> {\n if (!cachedFrontendModules) {\n const modules = (window.installedModules ?? [])\n .filter((module) => module[1].backendDependencies)\n .map((module) => ({\n backendDependencies: module[1].backendDependencies,\n moduleName: module[0],\n }));\n\n const installedBackendModules = await initInstalledBackendModules();\n cachedFrontendModules = modules.map((m) =>\n checkIfModulesAreInstalled(m, installedBackendModules)\n );\n }\n\n return cachedFrontendModules;\n}\n\nexport function hasInvalidDependencies(frontendModules: Array<FrontendModule>) {\n return frontendModules.some((m) =>\n m.dependencies.some((n) => n.type !== \"okay\")\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { checkModules, FrontendModule } from \"./openmrs-backend-dependencies\";\n\nexport function useBackendDependencies() {\n const [\n modulesWithMissingBackendModules,\n setModulesWithMissingBackendModules,\n ] = useState<Array<FrontendModule>>([]);\n\n useEffect(() => {\n // loading missing modules\n checkModules().then(setModulesWithMissingBackendModules);\n }, []);\n\n return modulesWithMissingBackendModules;\n}\n","import React, { useState, useEffect } from \"react\";\nimport Popup from \"./popup/popup.component\";\nimport { NotificationActionButton } from \"carbon-components-react\";\nimport {\n showNotification,\n UserHasAccess,\n useStore,\n} from \"@openmrs/esm-framework\";\nimport {\n implementerToolsStore,\n showModuleDiagnostics,\n togglePopup,\n} from \"./store\";\nimport { UiEditor } from \"./ui-editor/ui-editor\";\nimport { useBackendDependencies } from \"./backend-dependencies/useBackendDependencies\";\nimport { hasInvalidDependencies } from \"./backend-dependencies/openmrs-backend-dependencies\";\n\nfunction PopupHandler() {\n const frontendModules = useBackendDependencies();\n const [shouldShowNotification, setShouldShowNotification] = useState(false);\n\n useEffect(() => {\n // displaying toast if modules are missing\n setShouldShowNotification(\n (alreadyShowing) =>\n alreadyShowing || hasInvalidDependencies(frontendModules)\n );\n }, [frontendModules]);\n\n useEffect(() => {\n // only show notification max. 1 time\n if (shouldShowNotification) {\n showNotification({\n description: \"Found modules with unresolved backend dependencies.\",\n action: (\n <NotificationActionButton onClick={showModuleDiagnostics}>\n View\n </NotificationActionButton>\n ),\n kind: \"error\",\n });\n }\n }, [shouldShowNotification]);\n\n const { isOpen, isUIEditorEnabled, openTabIndex } = useStore(\n implementerToolsStore\n );\n return (\n <>\n {isOpen ? (\n <Popup\n close={togglePopup}\n frontendModules={frontendModules}\n visibleTabIndex={openTabIndex}\n />\n ) : null}\n {isUIEditorEnabled ? <UiEditor /> : null}\n </>\n );\n}\n\nexport default function ImplementerTools() {\n return (\n <UserHasAccess privilege=\"coreapps.systemAdministration\">\n <PopupHandler />\n </UserHasAccess>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__configuration-styles__tools___3AGqJ {\\n position: fixed;\\n width: 100%;\\n background-color: #e0e0e0;\\n border-bottom: 1px solid #a0a0a0;\\n border-top: 1px solid #c0c0c0;\\n z-index: 2;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__tools___3AGqJ > div {\\n flex: 0 1 auto;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__actionButton___2Uppy {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__downloadLink___3Acrx {\\n text-decoration: none;\\n color: inherit;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__mainContent___2sxQa {\\n background-color: #f0f0f0;\\n width: 100%;\\n display: flex;\\n overflow-y: auto;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__configTreePane___33WF1 {\\n width: 55%;\\n overflow-wrap: break-word;\\n overflow-x: hidden;\\n overflow-y: scroll;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__descriptionPane___2K_Kr {\\n width: 45%;\\n background-color: #e0e0e0;\\n color: #424242;\\n padding: 1em 2em;\\n font-size: 12pt;\\n overflow-wrap: break-word;\\n overflow-y: scroll;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__configTreePane___33WF1 .bx--text-input-wrapper {\\n min-width: 8em;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__fullWidthAccordion___kPYfh .bx--accordion__content {\\n padding-right: 0;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__toggleToolbarButton___2HZdY {\\n position: absolute;\\n left: 97vw;\\n top: -2px;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__valueEditorInput___DWOa3 {\\n width: 25em;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__valueEditorButtons___1uqDN {\\n height: 2.5rem;\\n min-width: 5em;\\n margin-left: 1em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/configuration.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,eAAe;EACf,WAAW;EACX,yBAAyB;EACzB,gCAAgC;EAChC,6BAA6B;EAC7B,UAAU;AACZ;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,yBAAyB;EACzB,WAAW;EACX,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,yBAAyB;EACzB,kBAAkB;EAClB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,yBAAyB;EACzB,cAAc;EACd,gBAAgB;EAChB,eAAe;EACf,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,SAAS;AACX;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,cAAc;EACd,cAAc;EACd,gBAAgB;AAClB\",\"sourcesContent\":[\".tools {\\n position: fixed;\\n width: 100%;\\n background-color: #e0e0e0;\\n border-bottom: 1px solid #a0a0a0;\\n border-top: 1px solid #c0c0c0;\\n z-index: 2;\\n}\\n\\n.tools > div {\\n flex: 0 1 auto;\\n}\\n\\n.actionButton {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.downloadLink {\\n text-decoration: none;\\n color: inherit;\\n}\\n\\n.mainContent {\\n background-color: #f0f0f0;\\n width: 100%;\\n display: flex;\\n overflow-y: auto;\\n}\\n\\n.configTreePane {\\n width: 55%;\\n overflow-wrap: break-word;\\n overflow-x: hidden;\\n overflow-y: scroll;\\n}\\n\\n.descriptionPane {\\n width: 45%;\\n background-color: #e0e0e0;\\n color: #424242;\\n padding: 1em 2em;\\n font-size: 12pt;\\n overflow-wrap: break-word;\\n overflow-y: scroll;\\n}\\n\\n.configTreePane :global(.bx--text-input-wrapper) {\\n min-width: 8em;\\n}\\n\\n.fullWidthAccordion :global(.bx--accordion__content) {\\n padding-right: 0;\\n}\\n\\n.toggleToolbarButton {\\n position: absolute;\\n left: 97vw;\\n top: -2px;\\n}\\n\\n.valueEditorInput {\\n width: 25em;\\n}\\n\\n.valueEditorButtons {\\n height: 2.5rem;\\n min-width: 5em;\\n margin-left: 1em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"tools\": \"-esm-implementer-tools__configuration-styles__tools___3AGqJ\",\n\t\"actionButton\": \"-esm-implementer-tools__configuration-styles__actionButton___2Uppy\",\n\t\"downloadLink\": \"-esm-implementer-tools__configuration-styles__downloadLink___3Acrx\",\n\t\"mainContent\": \"-esm-implementer-tools__configuration-styles__mainContent___2sxQa\",\n\t\"configTreePane\": \"-esm-implementer-tools__configuration-styles__configTreePane___33WF1\",\n\t\"descriptionPane\": \"-esm-implementer-tools__configuration-styles__descriptionPane___2K_Kr\",\n\t\"fullWidthAccordion\": \"-esm-implementer-tools__configuration-styles__fullWidthAccordion___kPYfh\",\n\t\"toggleToolbarButton\": \"-esm-implementer-tools__configuration-styles__toggleToolbarButton___2HZdY\",\n\t\"valueEditorInput\": \"-esm-implementer-tools__configuration-styles__valueEditorInput___DWOa3\",\n\t\"valueEditorButtons\": \"-esm-implementer-tools__configuration-styles__valueEditorButtons___1uqDN\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__description-styles__path___xbL6R {\\n color: #303030;\\n margin-bottom: 1em;\\n}\\n\\n.-esm-implementer-tools__description-styles__description___3w8EM {\\n margin-bottom: 0.5em;\\n}\\n\\n.-esm-implementer-tools__description-styles__source___2Y3IA {\\n font-style: italic;\\n margin-bottom: 0.5em;\\n}\\n\\n.-esm-implementer-tools__description-styles__value___2m1CN {\\n font-family: monospace;\\n margin-top: 0.5em;\\n margin-left: 0.5em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/description.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,oBAAoB;AACtB;;AAEA;EACE,sBAAsB;EACtB,iBAAiB;EACjB,kBAAkB;AACpB\",\"sourcesContent\":[\".path {\\n color: #303030;\\n margin-bottom: 1em;\\n}\\n\\n.description {\\n margin-bottom: 0.5em;\\n}\\n\\n.source {\\n font-style: italic;\\n margin-bottom: 0.5em;\\n}\\n\\n.value {\\n font-family: monospace;\\n margin-top: 0.5em;\\n margin-left: 0.5em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"path\": \"-esm-implementer-tools__description-styles__path___xbL6R\",\n\t\"description\": \"-esm-implementer-tools__description-styles__description___3w8EM\",\n\t\"source\": \"-esm-implementer-tools__description-styles__source___2Y3IA\",\n\t\"value\": \"-esm-implementer-tools__description-styles__value___2m1CN\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__editable-value-styles__secretButton___lSFNq {\\n background: none;\\n color: #474b6b;\\n border: none;\\n font: inherit;\\n text-align: left;\\n}\\n\\n.-esm-implementer-tools__editable-value-styles__error___2-dxM {\\n margin-left: 1em;\\n color: orange;\\n font-size: 11pt;\\n}\\n\\n.-esm-implementer-tools__editable-value-styles__overriddenValue___4bCrT {\\n color: #2020a0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/editable-value.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,gBAAgB;EAChB,cAAc;EACd,YAAY;EACZ,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,cAAc;AAChB\",\"sourcesContent\":[\".secretButton {\\n background: none;\\n color: #474b6b;\\n border: none;\\n font: inherit;\\n text-align: left;\\n}\\n\\n.error {\\n margin-left: 1em;\\n color: orange;\\n font-size: 11pt;\\n}\\n\\n.overriddenValue {\\n color: #2020a0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"secretButton\": \"-esm-implementer-tools__editable-value-styles__secretButton___lSFNq\",\n\t\"error\": \"-esm-implementer-tools__editable-value-styles__error___2-dxM\",\n\t\"overriddenValue\": \"-esm-implementer-tools__editable-value-styles__overriddenValue___4bCrT\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__layout-styles__labelCell___1FQD9 {\\n width: 12em;\\n}\\n\\n.-esm-implementer-tools__layout-styles__structuredList___1WZZj {\\n margin-bottom: 1em;\\n}\\n\\n.-esm-implementer-tools__layout-styles__structuredListRow___32y33 {\\n border-left: 2px solid #c0c0c0;\\n}\\n\\n.-esm-implementer-tools__layout-styles__subtreeCell___3ood- {\\n left: -6em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/layout/layout.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,UAAU;AACZ\",\"sourcesContent\":[\".labelCell {\\n width: 12em;\\n}\\n\\n.structuredList {\\n margin-bottom: 1em;\\n}\\n\\n.structuredListRow {\\n border-left: 2px solid #c0c0c0;\\n}\\n\\n.subtreeCell {\\n left: -6em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"labelCell\": \"-esm-implementer-tools__layout-styles__labelCell___1FQD9\",\n\t\"structuredList\": \"-esm-implementer-tools__layout-styles__structuredList___1WZZj\",\n\t\"structuredListRow\": \"-esm-implementer-tools__layout-styles__structuredListRow___32y33\",\n\t\"subtreeCell\": \"-esm-implementer-tools__layout-styles__subtreeCell___3ood-\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF .bx--structured-list-td {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF .bx--structured-list {\\n margin-bottom: 0.25rem;\\n}\\n\\n.-esm-implementer-tools__array-editor-styles__buttonCell___2k5Vb {\\n text-align: right;\\n}\\n\\n/* .valueCell {\\n display: inline-flex;\\n} */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/value-editors/array-editor.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kCAAkC;AACpC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;GAEG\",\"sourcesContent\":[\".arrayEditor :global(.bx--structured-list-td) {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.arrayEditor :global(.bx--structured-list) {\\n margin-bottom: 0.25rem;\\n}\\n\\n.buttonCell {\\n text-align: right;\\n}\\n\\n/* .valueCell {\\n display: inline-flex;\\n} */\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"arrayEditor\": \"-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF\",\n\t\"buttonCell\": \"-esm-implementer-tools__array-editor-styles__buttonCell___2k5Vb\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL,\\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL > [role=\\\"combobox\\\"] {\\n display: flex;\\n position: relative;\\n width: 20em;\\n}\\n\\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL [role=\\\"listbox\\\"] {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex-flow: column wrap;\\n background-color: whitesmoke;\\n color: #fff;\\n}\\n\\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL li {\\n line-height: 0.75rem;\\n padding: 0.5em;\\n display: block;\\n border-bottom: 0.125rem solid #718096;\\n outline: 0;\\n margin: 0;\\n color: #000;\\n}\\n\\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL [role=\\\"option\\\"]:hover {\\n background-color: #38a169;\\n border-color: #38a169;\\n color: #f7fafc;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/value-editors/concept-search.styles.css\"],\"names\":[],\"mappings\":\"AAAA;;EAEE,aAAa;EACb,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,sBAAsB;EACtB,4BAA4B;EAC5B,WAAW;AACb;;AAEA;EACE,oBAAoB;EACpB,cAAc;EACd,cAAc;EACd,qCAAqC;EACrC,UAAU;EACV,SAAS;EACT,WAAW;AACb;;AAEA;EACE,yBAAyB;EACzB,qBAAqB;EACrB,cAAc;AAChB\",\"sourcesContent\":[\".autocomplete,\\n.autocomplete > [role=\\\"combobox\\\"] {\\n display: flex;\\n position: relative;\\n width: 20em;\\n}\\n\\n.autocomplete [role=\\\"listbox\\\"] {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex-flow: column wrap;\\n background-color: whitesmoke;\\n color: #fff;\\n}\\n\\n.autocomplete li {\\n line-height: 0.75rem;\\n padding: 0.5em;\\n display: block;\\n border-bottom: 0.125rem solid #718096;\\n outline: 0;\\n margin: 0;\\n color: #000;\\n}\\n\\n.autocomplete [role=\\\"option\\\"]:hover {\\n background-color: #38a169;\\n border-color: #38a169;\\n color: #f7fafc;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"autocomplete\": \"-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY .bx--structured-list-td {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY .bx--structured-list {\\n margin-bottom: 0.25rem;\\n}\\n\\n.-esm-implementer-tools__object-editor-styles__buttonCell___3ONI- {\\n text-align: right;\\n}\\n\\n/* .valueCell {\\n display: inline-flex;\\n} */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/value-editors/object-editor.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kCAAkC;AACpC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;GAEG\",\"sourcesContent\":[\".objectEditor :global(.bx--structured-list-td) {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.objectEditor :global(.bx--structured-list) {\\n margin-bottom: 0.25rem;\\n}\\n\\n.buttonCell {\\n text-align: right;\\n}\\n\\n/* .valueCell {\\n display: inline-flex;\\n} */\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"objectEditor\": \"-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY\",\n\t\"buttonCell\": \"-esm-implementer-tools__object-editor-styles__buttonCell___3ONI-\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__popup-styles__popup___vyld6 {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n width: 100%;\\n height: 50%;\\n z-index: 100000;\\n background-color: #d0d0d0;\\n border-top: 2px solid #404050;\\n color: #222;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n align-items: flex-start;\\n box-sizing: border-box;\\n overflow-y: auto;\\n}\\n\\n.-esm-implementer-tools__popup-styles__content___fQRAl {\\n margin-top: 40px;\\n width: 100%;\\n}\\n\\n.-esm-implementer-tools__popup-styles__tabs___2HYJP {\\n width: 30em;\\n}\\n\\n.-esm-implementer-tools__popup-styles__topBar___2dsNF {\\n position: fixed;\\n width: 100%;\\n height: 42px;\\n display: flex;\\n justify-content: space-between;\\n border-bottom: 1px solid #a0a0a0;\\n z-index: 2;\\n background: #e0e0e0;\\n}\\n\\n.-esm-implementer-tools__popup-styles__closeButton___2tyDP {\\n min-height: 3em;\\n padding: 0 1em;\\n}\\n\\n.-esm-implementer-tools__popup-styles__topBar___2dsNF .bx--content-switcher-btn:first-child,\\n.-esm-implementer-tools__popup-styles__topBar___2dsNF .bx--content-switcher-btn:last-child {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/popup/popup.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,eAAe;EACf,SAAS;EACT,OAAO;EACP,WAAW;EACX,WAAW;EACX,eAAe;EACf,yBAAyB;EACzB,6BAA6B;EAC7B,WAAW;EACX,aAAa;EACb,sBAAsB;EACtB,8BAA8B;EAC9B,uBAAuB;EACvB,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,aAAa;EACb,8BAA8B;EAC9B,gCAAgC;EAChC,UAAU;EACV,mBAAmB;AACrB;;AAEA;EACE,eAAe;EACf,cAAc;AAChB;;AAEA;;EAEE,yBAAyB;EACzB,4BAA4B;EAC5B,0BAA0B;EAC1B,6BAA6B;AAC/B\",\"sourcesContent\":[\".popup {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n width: 100%;\\n height: 50%;\\n z-index: 100000;\\n background-color: #d0d0d0;\\n border-top: 2px solid #404050;\\n color: #222;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n align-items: flex-start;\\n box-sizing: border-box;\\n overflow-y: auto;\\n}\\n\\n.content {\\n margin-top: 40px;\\n width: 100%;\\n}\\n\\n.tabs {\\n width: 30em;\\n}\\n\\n.topBar {\\n position: fixed;\\n width: 100%;\\n height: 42px;\\n display: flex;\\n justify-content: space-between;\\n border-bottom: 1px solid #a0a0a0;\\n z-index: 2;\\n background: #e0e0e0;\\n}\\n\\n.closeButton {\\n min-height: 3em;\\n padding: 0 1em;\\n}\\n\\n.topBar :global(.bx--content-switcher-btn:first-child),\\n.topBar :global(.bx--content-switcher-btn:last-child) {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"popup\": \"-esm-implementer-tools__popup-styles__popup___vyld6\",\n\t\"content\": \"-esm-implementer-tools__popup-styles__content___fQRAl\",\n\t\"tabs\": \"-esm-implementer-tools__popup-styles__tabs___2HYJP\",\n\t\"topBar\": \"-esm-implementer-tools__popup-styles__topBar___2dsNF\",\n\t\"closeButton\": \"-esm-implementer-tools__popup-styles__closeButton___2tyDP\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__styles__slotOverlay___342ll {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background-color: rgba(43, 43, 185, 0.1);\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n pointer-events: none;\\n}\\n\\n.-esm-implementer-tools__styles__slotName___1bIs0 {\\n background-color: rgb(255, 255, 255, 0.85);\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n color: #393939;\\n position: absolute;\\n bottom: 0;\\n right: 0;\\n padding: 0.5em 0.5em 0.5em 0.5em;\\n pointer-events: none;\\n}\\n\\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background: none;\\n border: none;\\n}\\n\\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:hover {\\n background-color: rgba(43, 43, 185, 0.1);\\n}\\n\\n/* Show the tooltip text when you mouse over the tooltip container */\\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:focus .-esm-implementer-tools__styles__extensionTooltip___1sJtS,\\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:hover .-esm-implementer-tools__styles__extensionTooltip___1sJtS {\\n visibility: visible;\\n opacity: 1;\\n}\\n\\n.-esm-implementer-tools__styles__extensionTooltip___1sJtS {\\n visibility: hidden;\\n width: auto;\\n background-color: rgb(255, 255, 255, 0.85);\\n text-align: center;\\n padding: 0.5em 0.5em 0.5em 0.5em;\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.-esm-implementer-tools__styles__exitButton___2xev8 {\\n position: fixed !important;\\n bottom: 0;\\n right: 0;\\n z-index: 999999;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/ui-editor/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,wCAAwC;EACxC,wCAAwC;EACxC,oBAAoB;AACtB;;AAEA;EACE,0CAA0C;EAC1C,wCAAwC;EACxC,cAAc;EACd,kBAAkB;EAClB,SAAS;EACT,QAAQ;EACR,gCAAgC;EAChC,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,wCAAwC;AAC1C;;AAEA,oEAAoE;AACpE;;EAEE,mBAAmB;EACnB,UAAU;AACZ;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,0CAA0C;EAC1C,kBAAkB;EAClB,gCAAgC;EAChC,wCAAwC;;EAExC,kBAAkB;EAClB,MAAM;EACN,OAAO;AACT;;AAEA;EACE,0BAA0B;EAC1B,SAAS;EACT,QAAQ;EACR,eAAe;AACjB\",\"sourcesContent\":[\".slotOverlay {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background-color: rgba(43, 43, 185, 0.1);\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n pointer-events: none;\\n}\\n\\n.slotName {\\n background-color: rgb(255, 255, 255, 0.85);\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n color: #393939;\\n position: absolute;\\n bottom: 0;\\n right: 0;\\n padding: 0.5em 0.5em 0.5em 0.5em;\\n pointer-events: none;\\n}\\n\\n.extensionOverlay {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background: none;\\n border: none;\\n}\\n\\n.extensionOverlay:hover {\\n background-color: rgba(43, 43, 185, 0.1);\\n}\\n\\n/* Show the tooltip text when you mouse over the tooltip container */\\n.extensionOverlay:focus .extensionTooltip,\\n.extensionOverlay:hover .extensionTooltip {\\n visibility: visible;\\n opacity: 1;\\n}\\n\\n.extensionTooltip {\\n visibility: hidden;\\n width: auto;\\n background-color: rgb(255, 255, 255, 0.85);\\n text-align: center;\\n padding: 0.5em 0.5em 0.5em 0.5em;\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.exitButton {\\n position: fixed !important;\\n bottom: 0;\\n right: 0;\\n z-index: 999999;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"slotOverlay\": \"-esm-implementer-tools__styles__slotOverlay___342ll\",\n\t\"slotName\": \"-esm-implementer-tools__styles__slotName___1bIs0\",\n\t\"extensionOverlay\": \"-esm-implementer-tools__styles__extensionOverlay___n5KTZ\",\n\t\"extensionTooltip\": \"-esm-implementer-tools__styles__extensionTooltip___1sJtS\",\n\t\"exitButton\": \"-esm-implementer-tools__styles__exitButton___2xev8\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["ArrayEditor","element","valueArray","setValue","arrayKey","useMemo","uniqueId","Tile","className","styles","StructuredList","map","value","i","key","ValueEditorField","_elements","_value","_source","valueType","_type","Type","onChange","newValue","newValueArray","cloneDeep","Button","renderIcon","TrashCan16","size","kind","iconDescription","hasIconOnly","onClick","splice","Add16","push","ConceptSearchBox","setConcept","searchTerm","setSearchTerm","useState","searchResults","setSearchResults","activeConceptUuid","setActiveConceptUuid","id","handleSearchTermChange","debounce","useEffect","ac","AbortController","query","length","openmrsFetch","method","then","data","results","slice","abort","type","autoComplete","autoCapitalize","role","placeholder","autoFocus","$event","target","concept","uuid","style","padding","handleUuidChange","display","ExtensionSlotAdd","availableExtensions","setAvailableExtensions","update","state","Object","keys","extensions","extensionStore","MultiSelect","items","name","label","selectedItems","v","initialSelectedItems","ExtensionSlotRemove","slotName","slotModuleName","assignedIds","store","moduleName","slot","slots","instance","instances","getAssignedIds","attachedIds","getExtensionIds","useExtensionStore","ObjectEditor","valueObject","entries","schema","startsWith","newKey","newValueObject","ExtensionSlotOrder","path","Error","Checkbox","checked","hideLabel","labelText","NumberInput","e","Number","imaginaryTarget","TextInput","ValueEditor","customType","handleSave","handleClose","ref","useRef","tmpValue","setTmpValue","keyListener","JSON","stringify","document","addEventListener","removeEventListener","Save16","Close16","DisplayValue","Array","isArray","marginBottom","join","k","EditableValue","valueString","setValueString","editing","setEditing","error","setError","activeConfigRef","closeEditor","configPathBeingEdited","isEqual","current","focus","implementerToolsStore","activeItemDescription","source","description","_description","val","result","parse","tempConfigUpdate","set","temporaryConfigStore","console","warn","marginLeft","Reset16","unset","obj","ExtensionConfigureTree","config","_default","undefined","Subtree","leaf","children","onMouseEnter","onMouseLeave","ExtensionSlotsConfigTree","extensionsConfig","ExtensionSlotConfigTree","assignedExtensions","setAssignedExtensions","removeActiveItemDescriptionOnMouseLeave","thisPath","setActiveExtensionSlotOnMouseEnter","add","remove","order","configure","setActiveItemDescriptionOnMouseEnter","concat","ConfigSubtree","isLeaf","hasOwnProperty","TreeContainer","ConfigTreeForModule","pickBy","ConfigTree","Accordion","align","sort","moduleConfig","AccordionItem","title","Description","useStore","actions","toggleIsUIEditorEnabled","isUIEditorEnabled","toggleIsToolbarOpen","isConfigToolbarOpen","configActions","toggleDevDefaults","devDefaultsAreOn","OpenOrCloseButton","ChevronUp16","ChevronDown16","Configuration","t","useTranslation","configInternalStore","implementerToolsConfigStore","tempConfigStore","filterText","setFilterText","tempConfig","tempConfigObjUrl","Blob","combinedConfig","values","filteredConfig","getRelatedBranches","inputTree","includes","configNode","kSubtreeResult","isEmpty","Grid","margin","Row","Column","sm","md","Toggle","onToggle","toggled","Download16","download","href","window","URL","createObjectURL","marginTop","height","ModuleDiagnostics","frontendModules","headers","header","DataTable","rows","getTableProps","getHeaderProps","TableContainer","Table","TableHead","TableRow","TableHeader","TableBody","esm","Fragment","TableCell","dependencies","dep","color","installedVersion","requiredVersion","Popup","props","activeTab","setActiveTab","ContentSwitcher","c","index","Switch","text","onKeyDown","close","Portal","el","createPortal","ExtensionOverlay","extensionName","domElement","overlayDomElement","setOverlayDomElement","newOverlayDomElement","createElement","parentElement","appendChild","Content","extensionId","UiEditor","isOpen","implementerToolsIsOpen","ExitButton","slotInfo","querySelector","SlotOverlay","extensionInfo","bySlotName","extensionInstance","tooltipPosition","cachedFrontendModules","getResolvedModuleType","isVersionSatisfied","useBackendDependencies","modulesWithMissingBackendModules","setModulesWithMissingBackendModules","async","modules","installedModules","filter","module","backendDependencies","installedBackendModules","err","initInstalledBackendModules","m","missingBackendModule","requiredBackendModules","requiredBackendModulesUuids","installedBackendModuleUuids","res","difference","version","getMissingBackendModules","installedAndRequiredModules","requiredModule","find","installedModule","getInstalledAndRequiredBackendModules","installedAndRequiredBackendModule","mod","getInstalledVersion","checkIfModulesAreInstalled","checkModules","PopupHandler","shouldShowNotification","setShouldShowNotification","alreadyShowing","some","n","hasInvalidDependencies","showNotification","action","Notification","showModuleDiagnostics","openTabIndex","togglePopup","visibleTabIndex","ImplementerTools","UserHasAccess","privilege","___CSS_LOADER_EXPORT___","locals"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"728.openmrs-esm-implementer-tools-app.js","mappings":"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","sources":["webpack://@openmrs/esm-implementer-tools-app/./src/popup/popup.styles.css?b429","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/configuration.styles.css?0d79","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/editable-value.styles.css?80bf","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/array-editor.styles.css?c997","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/array-editor.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/concept-search.styles.css?bbd5","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/concept-search.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/concept-search.resource.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/extension-slot-add.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/extension-slot-remove.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/object-editor.styles.css?0e93","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/object-editor.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/extension-slot-order.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/value-editor-field.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editor.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/display-value.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/editable-value.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/extension-configure-tree.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/layout/layout.styles.css?5fee","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/layout/subtree.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/extension-slots-config-tree.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/config-subtree.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/layout/tree-container.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/config-tree-for-module.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/config-tree.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/description.styles.css?e45d","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/description.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/configuration.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/backend-dependencies.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/popup/popup.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/styles.css?a044","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/portal.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/extension-overlay.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/ui-editor.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/openmrs-backend-dependencies.ts","webpack://@openmrs/esm-implementer-tools-app/./src/backend-dependencies/useBackendDependencies.ts","webpack://@openmrs/esm-implementer-tools-app/./src/implementer-tools.component.tsx","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/configuration.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/description.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/editable-value.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/layout/layout.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/array-editor.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/concept-search.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/configuration/value-editors/object-editor.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/popup/popup.styles.css","webpack://@openmrs/esm-implementer-tools-app/./src/ui-editor/styles.css"],"sourcesContent":["import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./popup.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./configuration.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./editable-value.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./array-editor.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, { useMemo } from \"react\";\nimport cloneDeep from \"lodash-es/cloneDeep\";\nimport uniqueId from \"lodash-es/uniqueId\";\nimport Add16 from \"@carbon/icons-react/es/add/16\";\nimport TrashCan16 from \"@carbon/icons-react/es/trash-can/16\";\nimport styles from \"./array-editor.styles.css\";\nimport { Type } from \"@openmrs/esm-framework\";\nimport {\n Button,\n Tile,\n StructuredListBody,\n StructuredListCell,\n StructuredListRow,\n StructuredListWrapper,\n} from \"carbon-components-react\";\nimport { ValueEditorField } from \"./value-editor-field\";\nimport { ConfigValueDescriptor } from \"../editable-value.component\";\n\ninterface ArrayEditorProps {\n element: ConfigValueDescriptor;\n valueArray: Array<any>;\n setValue: (value: Array<any>) => void;\n}\n\nexport function ArrayEditor({\n element,\n valueArray,\n setValue,\n}: ArrayEditorProps) {\n const arrayKey = useMemo(() => uniqueId(\"array-editor-\"), []);\n return (\n <Tile className={styles.arrayEditor}>\n <StructuredListWrapper>\n <StructuredListBody>\n {valueArray.map((value, i) => (\n <StructuredListRow key={`${arrayKey}-${i}`}>\n <StructuredListCell>\n <ValueEditorField\n element={{\n ...element._elements,\n _value: value,\n _source: element._source,\n }}\n valueType={(element._elements?._type as Type) ?? Type.Object}\n value={value}\n onChange={(newValue) => {\n const newValueArray = cloneDeep(valueArray);\n newValueArray[i] = newValue;\n setValue(newValueArray);\n }}\n />\n </StructuredListCell>\n <StructuredListCell className={styles.buttonCell}>\n <Button\n renderIcon={TrashCan16}\n size=\"sm\"\n kind=\"secondary\"\n iconDescription=\"Remove\"\n hasIconOnly\n onClick={() => {\n const newValueArray = cloneDeep(valueArray);\n newValueArray.splice(i, 1);\n setValue(newValueArray);\n }}\n />\n </StructuredListCell>\n </StructuredListRow>\n ))}\n <StructuredListRow>\n <StructuredListCell></StructuredListCell>\n <StructuredListCell className={styles.buttonCell}>\n <Button\n renderIcon={Add16}\n size=\"sm\"\n iconDescription=\"Add\"\n hasIconOnly\n onClick={() => {\n const newValueArray = cloneDeep(valueArray);\n const newValue =\n (element._elements?._type ?? Type.Object) == Type.Object\n ? {}\n : null;\n newValueArray.push(newValue);\n setValue(newValueArray);\n }}\n />\n </StructuredListCell>\n </StructuredListRow>\n </StructuredListBody>\n </StructuredListWrapper>\n </Tile>\n );\n}\n","import api from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./concept-search.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React, { useState, useEffect, useMemo } from \"react\";\nimport debounce from \"lodash-es/debounce\";\nimport uniqueId from \"lodash-es/uniqueId\";\nimport {\n fetchConceptByUuid,\n performConceptSearch,\n} from \"./concept-search.resource\";\nimport styles from \"./concept-search.styles.css\";\n\ninterface ConceptSearchBoxProps {\n setConcept: (concept) => void;\n}\n\nexport function ConceptSearchBox({ setConcept }: ConceptSearchBoxProps) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [searchResults, setSearchResults] = useState([]);\n const [activeConceptUuid, setActiveConceptUuid] = useState<any>(\"\");\n const searchTimeoutInMs = 300;\n\n const id = useMemo(() => uniqueId(), []);\n\n const handleUuidChange = (concept) => {\n setActiveConceptUuid(concept.uuid);\n resetSearch();\n setConcept(concept);\n };\n\n const resetSearch = () => {\n setSearchTerm(\"\");\n setSearchResults([]);\n };\n\n const handleSearchTermChange = debounce((searchTerm) => {\n setSearchTerm(searchTerm);\n }, searchTimeoutInMs);\n\n useEffect(() => {\n const ac = new AbortController();\n\n if (searchTerm && searchTerm.length >= 2) {\n performConceptSearch(searchTerm).then(({ data: { results } }) => {\n setSearchResults(results.slice(0, 9));\n });\n } else {\n setSearchResults([]);\n }\n return () => ac.abort();\n }, [searchTerm]);\n\n return (\n <div className={styles.autocomplete}>\n <input\n type=\"text\"\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n aria-autocomplete=\"list\"\n role=\"combobox\"\n aria-label=\"Look up concept by name\"\n aria-controls={`searchbox-${id}`}\n aria-expanded={searchResults.length > 0}\n placeholder=\"Look up concept by name\"\n autoFocus\n onChange={($event) => {\n handleSearchTermChange($event.target.value);\n }}\n />\n <div id={`searchbox-${id}`}>\n <ul role=\"listbox\">\n {!!searchResults.length &&\n searchResults.map((concept: any) => (\n <li\n key={concept.uuid}\n role=\"option\"\n style={{ padding: \"5px\" }}\n onClick={() => {\n handleUuidChange(concept);\n }}\n aria-selected=\"true\"\n >\n {concept.display}\n </li>\n ))}\n {searchTerm && searchResults && !searchResults.length && (\n <li>No matching results found.</li>\n )}\n </ul>\n </div>\n </div>\n );\n}\n","import { openmrsFetch } from \"@openmrs/esm-framework\";\n\nexport function fetchConceptByUuid(conceptUuid: string) {\n return openmrsFetch(`/ws/rest/v1/concept/${conceptUuid}`, {\n method: \"GET\",\n });\n}\n\nexport function performConceptSearch(query: string) {\n return openmrsFetch(`/ws/rest/v1/concept/?q=${query}`, {\n method: \"GET\",\n });\n}\n","import React, { useState, useEffect } from \"react\";\nimport { MultiSelect } from \"carbon-components-react\";\nimport { ExtensionStore, extensionStore } from \"@openmrs/esm-framework\";\n\nexport function ExtensionSlotAdd({ value, setValue }) {\n const [availableExtensions, setAvailableExtensions] = useState<Array<string>>(\n []\n );\n\n useEffect(() => {\n function update(state: ExtensionStore) {\n setAvailableExtensions(Object.keys(state.extensions));\n }\n update(extensionStore.getState());\n return extensionStore.subscribe(update);\n }, []);\n\n return (\n <MultiSelect.Filterable\n id={`add-select`}\n items={availableExtensions.map((name) => ({ id: name, label: name }))}\n placeholder=\"Select extensions\"\n onChange={(value) => setValue(value.selectedItems.map((v) => v.id))}\n initialSelectedItems={value}\n />\n );\n}\n","import React from \"react\";\nimport { MultiSelect } from \"carbon-components-react\";\nimport {\n ExtensionStore,\n getAssignedIds,\n useExtensionStore,\n} from \"@openmrs/esm-framework\";\n\nfunction getExtensionIds(\n store: ExtensionStore,\n moduleName: string,\n slotName: string\n) {\n const slot = store.slots[slotName];\n const instance = slot.instances[moduleName];\n return getAssignedIds(instance, slot.attachedIds);\n}\n\nexport function ExtensionSlotRemove({\n slotName,\n slotModuleName,\n value,\n setValue,\n}) {\n const store = useExtensionStore();\n const assignedIds = getExtensionIds(store, slotModuleName, slotName);\n\n return (\n <MultiSelect.Filterable\n id={`add-select`}\n items={assignedIds.map((id) => ({ id, label: id }))}\n placeholder=\"Select extensions\"\n onChange={(value) => setValue(value.selectedItems.map((v) => v.id))}\n initialSelectedItems={value}\n />\n );\n}\n","import api from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./object-editor.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from \"react\";\nimport {\n StructuredListBody,\n StructuredListCell,\n StructuredListRow,\n StructuredListWrapper,\n Tile,\n} from \"carbon-components-react\";\nimport { ValueEditorField } from \"./value-editor-field\";\nimport { ConfigValueDescriptor } from \"../editable-value.component\";\nimport { Type } from \"@openmrs/esm-framework\";\nimport cloneDeep from \"lodash-es/cloneDeep\";\nimport styles from \"./object-editor.styles.css\";\n\ninterface ObjectEditorProps {\n element: ConfigValueDescriptor;\n valueObject: Object;\n setValue: (value: Object) => void;\n}\n\nexport function ObjectEditor({\n element,\n valueObject,\n setValue,\n}: ObjectEditorProps) {\n return (\n <Tile className={styles.objectEditor}>\n <StructuredListWrapper>\n <StructuredListBody>\n {Object.entries(element).map(([key, schema]) =>\n !key.startsWith(\"_\") ? (\n <StructuredListRow key={key}>\n <StructuredListCell>\n <ValueEditorField\n element={{ _value: key, _source: element._source }}\n valueType={Type.String}\n value={key}\n onChange={(newKey) => {\n const newValueObject = cloneDeep(valueObject);\n newValueObject[newKey] = cloneDeep(valueObject[key]);\n delete newValueObject[key];\n setValue(newValueObject);\n }}\n />\n </StructuredListCell>\n <StructuredListCell>\n <ValueEditorField\n element={{\n ...schema,\n _value: valueObject[key],\n _source: element._source,\n }}\n valueType={schema._type}\n value={valueObject[key]}\n onChange={(newValue) => {\n const newValueObject = cloneDeep(valueObject);\n newValueObject[key] = newValue;\n setValue(newValueObject);\n }}\n />\n </StructuredListCell>\n </StructuredListRow>\n ) : null\n )}\n </StructuredListBody>\n </StructuredListWrapper>\n </Tile>\n );\n}\n","import React from \"react\";\n\nexport function ExtensionSlotOrder({\n slotName,\n slotModuleName,\n value,\n setValue,\n}) {\n return <div>Todo: compose array with extension lookup</div>;\n}\n","import React, { useState } from \"react\";\nimport uniqueId from \"lodash-es/uniqueId\";\nimport { Checkbox, NumberInput, TextInput } from \"carbon-components-react\";\nimport { Type } from \"@openmrs/esm-framework\";\nimport { ConfigValueDescriptor } from \"../editable-value.component\";\nimport { ValueType } from \"../value-editor\";\nimport { ArrayEditor } from \"./array-editor\";\nimport { ConceptSearchBox } from \"./concept-search\";\nimport { ExtensionSlotAdd } from \"./extension-slot-add\";\nimport { ExtensionSlotRemove } from \"./extension-slot-remove\";\nimport { ObjectEditor } from \"./object-editor\";\nimport { ExtensionSlotOrder } from \"./extension-slot-order\";\n\nexport interface ValueEditorFieldProps {\n element: ConfigValueDescriptor;\n path?: Array<string>;\n valueType?: ValueType;\n value: any;\n onChange: (value: any) => void;\n}\n\nexport function ValueEditorField({\n element,\n path,\n valueType,\n value,\n onChange,\n}: ValueEditorFieldProps) {\n const [id] = useState(uniqueId(\"value-editor-\"));\n\n if (valueType === \"remove\" && !path) {\n throw new Error(\n \"Programming error: ValueEditorField initialized for a 'remove' field, but no 'path' is available\"\n );\n }\n\n return valueType === Type.Array ? (\n <ArrayEditor element={element} valueArray={value} setValue={onChange} />\n ) : valueType === Type.Boolean ? (\n <Checkbox\n id={id}\n checked={value}\n hideLabel\n labelText=\"\"\n onChange={onChange}\n ></Checkbox>\n ) : valueType === Type.ConceptUuid ? (\n <ConceptSearchBox setConcept={(concept) => onChange(concept.uuid)} />\n ) : valueType === Type.Number ? (\n <NumberInput\n id={id}\n value={value}\n onChange={\n // e.target.value not working properly right now: https://github.com/carbon-design-system/carbon/issues/7457\n (e) => onChange(Number((e as any).imaginaryTarget.value))\n }\n ></NumberInput>\n ) : valueType === Type.String || valueType === Type.UUID ? (\n <TextInput\n id={id}\n value={value}\n labelText=\"\"\n onChange={(e) => onChange(e.target.value)}\n ></TextInput>\n ) : valueType === \"add\" ? (\n <ExtensionSlotAdd value={value ?? element._value} setValue={onChange} />\n ) : valueType === \"remove\" && path ? (\n <ExtensionSlotRemove\n slotName={path[2]}\n slotModuleName={path[0]}\n value={value ?? element._value}\n setValue={onChange}\n />\n ) : valueType === \"order\" && path ? (\n <ExtensionSlotOrder\n slotName={path[2]}\n slotModuleName={path[0]}\n value={value ?? element._value}\n setValue={onChange}\n />\n ) : valueType === \"configure\" && path ? (\n <>Todo</>\n ) : (\n <ObjectEditor element={element} valueObject={value} setValue={onChange} />\n );\n}\n","import React, { useEffect, useState, useRef } from \"react\";\nimport Close16 from \"@carbon/icons-react/es/close/16\";\nimport Save16 from \"@carbon/icons-react/es/save/16\";\nimport { Button } from \"carbon-components-react\";\nimport { Type } from \"@openmrs/esm-framework\";\nimport { ConfigValueDescriptor } from \"./editable-value.component\";\nimport { ValueEditorField } from \"./value-editors/value-editor-field\";\nimport styles from \"./configuration.styles.css\";\n\nexport type CustomValueType = \"add\" | \"remove\" | \"order\" | \"configure\";\n\nexport type ValueType = CustomValueType | Type;\n\ninterface ValueEditorProps {\n element: ConfigValueDescriptor;\n customType?: CustomValueType;\n path: Array<string>;\n handleSave: (val: string) => void;\n handleClose: () => void;\n}\n\nexport function ValueEditor({\n element,\n customType,\n path,\n handleSave,\n handleClose,\n}: ValueEditorProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [tmpValue, setTmpValue] = useState(element._value);\n\n const valueType = customType ?? element._type;\n\n const keyListener = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n handleClose();\n } else if (e.key === \"Enter\") {\n handleSave(JSON.stringify(tmpValue));\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"keyup\", keyListener);\n return () => {\n document.removeEventListener(\"keyup\", keyListener);\n };\n }, [tmpValue]);\n\n return (\n <div ref={ref} style={{ display: \"inherit\" }}>\n <ValueEditorField\n element={element}\n path={path}\n value={tmpValue}\n onChange={setTmpValue}\n valueType={valueType}\n />\n <div className={styles.valueEditorButtons}>\n <Button\n renderIcon={Save16}\n size=\"sm\"\n kind=\"primary\"\n iconDescription=\"Save\"\n hasIconOnly\n onClick={() => handleSave(JSON.stringify(tmpValue))}\n />\n <Button\n renderIcon={Close16}\n size=\"sm\"\n kind=\"secondary\"\n iconDescription=\"Cancel\"\n hasIconOnly\n onClick={handleClose}\n />\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface DisplayValueProps {\n value: any;\n}\n\nexport function DisplayValue({ value }: DisplayValueProps) {\n // TODO: Make this show the concept name for ConceptUUID type values\n return (\n <>\n {Array.isArray(value)\n ? typeof value[0] === \"object\"\n ? value.map((v, i) => (\n <div key={`${v}-${i}`} style={{ marginBottom: \"1em\" }}>\n <DisplayValue value={v} />\n </div>\n ))\n : value.join(\", \")\n : typeof value === \"object\" && value !== null\n ? Object.entries(value).map(([k, v], i) => (\n <div key={`${k}-${i}`}>\n {k}: <DisplayValue value={v} />\n </div>\n ))\n : typeof value === \"string\" || typeof value === \"number\"\n ? value\n : value == null\n ? \"none\"\n : JSON.stringify(value)}\n </>\n );\n}\n","import React, { useState, useEffect, useRef } from \"react\";\nimport isEqual from \"lodash-es/isEqual\";\nimport unset from \"lodash-es/unset\";\nimport cloneDeep from \"lodash-es/cloneDeep\";\nimport Reset16 from \"@carbon/icons-react/es/reset/16\";\nimport styles from \"./editable-value.styles.css\";\nimport { Button } from \"carbon-components-react\";\nimport {\n ConfigValue,\n Validator,\n Type,\n Config,\n temporaryConfigStore,\n} from \"@openmrs/esm-framework\";\nimport { ValueEditor, CustomValueType } from \"./value-editor\";\nimport { implementerToolsStore, ImplementerToolsStore } from \"../store\";\nimport { DisplayValue } from \"./display-value\";\n\nexport interface EditableValueProps {\n path: Array<string>;\n element: ConfigValueDescriptor;\n customType?: CustomValueType;\n}\n\nexport interface ConfigValueDescriptor {\n _value: ConfigValue;\n _source: string;\n _default?: ConfigValue;\n _description?: string;\n _elements?: Config | ConfigValueDescriptor;\n _validators?: Array<Validator>;\n _type?: Type;\n}\n\nexport default function EditableValue({\n path,\n element,\n customType,\n}: EditableValueProps) {\n const [valueString, setValueString] = useState<string>();\n const [editing, setEditing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const activeConfigRef = useRef<HTMLButtonElement>(null);\n\n const closeEditor = () => {\n setEditing(false);\n setError(null);\n };\n\n const focusOnConfigPathBeingEdited = () => {\n if (activeConfigRef && activeConfigRef.current) {\n setEditing(true);\n activeConfigRef.current.focus();\n }\n };\n\n useEffect(() => {\n const update = (state: ImplementerToolsStore) => {\n if (\n state.configPathBeingEdited &&\n isEqual(state.configPathBeingEdited, path)\n ) {\n focusOnConfigPathBeingEdited();\n }\n };\n update(implementerToolsStore.getState());\n return implementerToolsStore.subscribe(update);\n }, []);\n\n useEffect(() => {\n const state = implementerToolsStore.getState();\n if (editing && !isEqual(state.configPathBeingEdited, path)) {\n implementerToolsStore.setState({\n configPathBeingEdited: path,\n activeItemDescription: {\n path: path,\n source: element._source,\n description: element._description,\n value: valueString,\n },\n });\n }\n if (!editing && isEqual(state.configPathBeingEdited, path)) {\n implementerToolsStore.setState({ configPathBeingEdited: null });\n }\n }, [editing]);\n\n return (\n <>\n <div className={styles.line}>\n {editing ? (\n <>\n <ValueEditor\n element={element}\n customType={customType}\n path={path}\n handleClose={closeEditor}\n handleSave={(val) => {\n try {\n const result = JSON.parse(val);\n const tempConfigUpdate = set(\n cloneDeep(temporaryConfigStore.getState()),\n [\"config\", ...path],\n result\n );\n temporaryConfigStore.setState(tempConfigUpdate);\n setValueString(val);\n closeEditor();\n } catch (e) {\n console.warn(e);\n setError(\"That's not formatted quite right. Try again.\");\n }\n }}\n />\n </>\n ) : (\n <>\n <button\n className={`${styles.secretButton} ${\n element._source == \"temporary config\"\n ? styles.overriddenValue\n : \"\"\n }`}\n onClick={() => setEditing(true)}\n ref={activeConfigRef}\n >\n <DisplayValue value={element._value} />\n </button>\n {element._source == \"temporary config\" ? (\n <Button\n style={{ marginLeft: \"1em\" }}\n renderIcon={Reset16}\n size=\"sm\"\n kind=\"tertiary\"\n iconDescription=\"Reset to default\"\n hasIconOnly\n onClick={() => {\n temporaryConfigStore.setState(\n unset(temporaryConfigStore.getState(), [\"config\", ...path])\n );\n }}\n />\n ) : null}\n </>\n )}\n {error && <div className={styles.error}>{error}</div>}\n </div>\n </>\n );\n}\n\n// A substitute for the lodash.set function, which seems to be broken,\n// at least within Jest.\nfunction set<T>(obj: T, path: Array<string>, value: any): T {\n if (path.length > 1) {\n obj[path[0]] = set(obj[path[0]] ?? {}, path.slice(1), value);\n } else {\n obj[path[0]] = value;\n }\n return obj;\n}\n","import React from \"react\";\nimport EditableValue from \"./editable-value.component\";\nimport { ExtensionSlotConfigureValueObject } from \"@openmrs/esm-framework\";\n\nexport interface ExtensionConfigureTreeProps {\n moduleName: string;\n slotName: string;\n config?: ExtensionSlotConfigureValueObject;\n}\n\nexport function ExtensionConfigureTree({\n moduleName,\n slotName,\n config,\n}: ExtensionConfigureTreeProps) {\n return (\n <EditableValue\n path={[moduleName, slotName, \"configure\"]}\n element={\n config && Object.keys(config).length\n ? { _value: config, _source: \"\", _default: {} }\n : { _value: undefined, _source: \"default\", _default: {} }\n }\n customType=\"configure\"\n />\n );\n}\n","import api from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./layout.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from \"react\";\nimport {\n StructuredListBody,\n StructuredListCell,\n StructuredListRow,\n StructuredListWrapper,\n} from \"carbon-components-react\";\nimport styles from \"./layout.styles.css\";\n\nexport interface SubtreeProps {\n leaf: boolean;\n label: string;\n children: React.ReactNode;\n onMouseEnter?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n onMouseLeave?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;\n}\n\nexport function Subtree({\n leaf,\n label,\n children,\n onMouseEnter,\n onMouseLeave,\n}: SubtreeProps) {\n return leaf ? (\n <StructuredListRow\n className={styles.structuredListRow}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <StructuredListCell className={styles.labelCell}>\n {label}\n </StructuredListCell>\n <StructuredListCell>{children}</StructuredListCell>\n </StructuredListRow>\n ) : (\n <>\n <StructuredListRow\n className={styles.structuredListRow}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <StructuredListCell className={styles.labelCell}>\n {label}\n </StructuredListCell>\n <StructuredListCell />\n </StructuredListRow>\n <StructuredListRow className={styles.structuredListRow}>\n <StructuredListCell />\n <StructuredListCell className={styles.subtreeCell}>\n <StructuredListWrapper className={styles.structuredList}>\n <StructuredListBody>{children}</StructuredListBody>\n </StructuredListWrapper>\n </StructuredListCell>\n </StructuredListRow>\n </>\n );\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport EditableValue from \"./editable-value.component\";\nimport isEqual from \"lodash-es/isEqual\";\nimport {\n extensionStore,\n ExtensionSlotConfigureValueObject,\n useExtensionStore,\n ExtensionStore,\n} from \"@openmrs/esm-framework\";\nimport { ExtensionConfigureTree } from \"./extension-configure-tree\";\nimport { Subtree } from \"./layout/subtree.component\";\nimport { implementerToolsStore } from \"../store\";\n\ninterface ExtensionSlotsConfigTreeProps {\n extensionsConfig: { [key: string]: any };\n moduleName: string;\n}\n\ninterface ExtensionSlotImplementerToolsConfig {\n add?: ExtensionSlotConfigValueDescriptor;\n remove?: ExtensionSlotConfigValueDescriptor;\n order?: ExtensionSlotConfigValueDescriptor;\n configure?: ExtensionConfigureDescriptor;\n}\n\ninterface ExtensionSlotConfigValueDescriptor {\n _value: Array<string>;\n _source: string;\n}\n\ninterface ExtensionConfigureDescriptor {\n _value: ExtensionSlotConfigureValueObject;\n _source: string;\n}\n\nexport function ExtensionSlotsConfigTree({\n extensionsConfig,\n moduleName,\n}: ExtensionSlotsConfigTreeProps) {\n return extensionsConfig && Object.keys(extensionsConfig).length ? (\n <Subtree label=\"extension slots\" leaf={false}>\n {Object.keys(extensionsConfig).map((slotName) => (\n <ExtensionSlotConfigTree\n key={slotName}\n config={extensionsConfig?.[slotName]}\n path={[moduleName, \"extensions\", slotName]}\n />\n ))}\n </Subtree>\n ) : null;\n}\n\ninterface ExtensionSlotConfigProps {\n config: ExtensionSlotImplementerToolsConfig;\n path: string[];\n}\n\nfunction ExtensionSlotConfigTree({ config, path }: ExtensionSlotConfigProps) {\n const [assignedExtensions, setAssignedExtensions] = useState<Array<string>>(\n []\n );\n const moduleName = path[0];\n const slotName = path[2];\n\n useEffect(() => {\n function update(state) {\n setAssignedExtensions(\n state.slots[slotName]?.instances?.[moduleName]?.assignedIds\n );\n }\n update(extensionStore.getState());\n return extensionStore.subscribe(update);\n }, []);\n\n function setActiveExtensionSlotOnMouseEnter(moduleName, slotName) {\n if (!implementerToolsStore.getState().configPathBeingEdited) {\n implementerToolsStore.setState({\n activeItemDescription: {\n path: [moduleName, slotName],\n value: assignedExtensions,\n },\n });\n }\n }\n\n function setActiveItemDescriptionOnMouseEnter(\n moduleName,\n slotName,\n key,\n value\n ) {\n if (!implementerToolsStore.getState().configPathBeingEdited) {\n implementerToolsStore.setState({\n activeItemDescription: {\n path: [moduleName, slotName, key],\n source: value?._source,\n description: {\n add: \"Add an extension to this slot.\",\n remove: \"Remove an extension from this slot.\",\n order: \"Reorder the extensions in this slot.\",\n configure:\n \"Pass a configuration object directly to one of the extensions in this slot.\",\n }[key],\n value: JSON.stringify(value?._value),\n },\n });\n }\n }\n\n function removeActiveItemDescriptionOnMouseLeave(thisPath) {\n const state = implementerToolsStore.getState();\n if (\n isEqual(state.activeItemDescription?.path, thisPath) &&\n !isEqual(state.configPathBeingEdited, thisPath)\n ) {\n implementerToolsStore.setState({ activeItemDescription: undefined });\n }\n }\n\n return (\n <Subtree\n label={slotName}\n leaf={false}\n onMouseEnter={() =>\n setActiveExtensionSlotOnMouseEnter(moduleName, slotName)\n }\n onMouseLeave={() =>\n removeActiveItemDescriptionOnMouseLeave([moduleName, slotName])\n }\n >\n {([\"add\", \"remove\", \"order\", \"configure\"] as const).map((key) => (\n <Subtree\n label={key}\n key={path.join(\".\") + key}\n leaf={true}\n onMouseEnter={() =>\n setActiveItemDescriptionOnMouseEnter(\n moduleName,\n slotName,\n key,\n config?.[key]\n )\n }\n onMouseLeave={() =>\n removeActiveItemDescriptionOnMouseLeave([moduleName, slotName, key])\n }\n >\n {key === \"configure\" ? (\n <ExtensionConfigureTree\n moduleName={moduleName}\n slotName={slotName}\n config={config?.configure?._value}\n />\n ) : (\n <EditableValue\n path={path.concat([key])}\n element={\n config?.[key] ?? {\n _value: undefined,\n _source: \"default\",\n _default: [],\n }\n }\n customType={key}\n />\n )}\n </Subtree>\n ))}\n </Subtree>\n );\n}\n","import React from \"react\";\nimport EditableValue from \"./editable-value.component\";\nimport { implementerToolsStore } from \"../store\";\nimport isEqual from \"lodash-es/isEqual\";\nimport { Subtree } from \"./layout/subtree.component\";\n\nexport interface ConfigSubtreeProps {\n config: Record<string, any>;\n path?: Array<string>;\n}\n\nexport function ConfigSubtree({ config, path = [] }: ConfigSubtreeProps) {\n function setActiveItemDescriptionOnMouseEnter(thisPath, key, value) {\n if (!implementerToolsStore.getState().configPathBeingEdited) {\n implementerToolsStore.setState({\n activeItemDescription: {\n path: thisPath,\n source: value._source,\n description: value._description,\n value: JSON.stringify(value._value),\n },\n });\n }\n }\n\n function removeActiveItemDescriptionOnMouseLeave(thisPath) {\n const state = implementerToolsStore.getState();\n if (\n isEqual(state.activeItemDescription?.path, thisPath) &&\n !isEqual(state.configPathBeingEdited, thisPath)\n ) {\n implementerToolsStore.setState({ activeItemDescription: undefined });\n }\n }\n\n return (\n <>\n {Object.entries(config).map(([key, value], i) => {\n const thisPath = path.concat([key]);\n const isLeaf =\n value.hasOwnProperty(\"_value\") || value.hasOwnProperty(\"_type\");\n return (\n <Subtree\n label={key}\n leaf={isLeaf}\n onMouseEnter={() =>\n setActiveItemDescriptionOnMouseEnter(thisPath, key, value)\n }\n onMouseLeave={() =>\n removeActiveItemDescriptionOnMouseLeave(thisPath)\n }\n key={`subtree-${thisPath.join(\".\")}`}\n >\n {isLeaf ? (\n <EditableValue path={thisPath} element={value} />\n ) : (\n <ConfigSubtree config={value} path={thisPath} />\n )}\n </Subtree>\n );\n })}\n </>\n );\n}\n","import React, { ReactNode } from \"react\";\nimport {\n StructuredListBody,\n StructuredListWrapper,\n} from \"carbon-components-react\";\nimport styles from \"./layout.styles.css\";\n\nexport interface TreeContainerProps {\n children: ReactNode;\n}\n\nexport function TreeContainer({ children }: TreeContainerProps) {\n return (\n <StructuredListWrapper className={styles.structuredList}>\n <StructuredListBody>{children}</StructuredListBody>\n </StructuredListWrapper>\n );\n}\n","import React from \"react\";\nimport { ExtensionSlotsConfigTree } from \"./extension-slots-config-tree\";\nimport { ConfigSubtree } from \"./config-subtree.component\";\nimport pickBy from \"lodash-es/pickBy\";\nimport { TreeContainer } from \"./layout/tree-container.component\";\n\nexport interface ConfigTreeForModuleProps {\n config: Record<string, any>;\n moduleName: string;\n}\n\nexport function ConfigTreeForModule({\n config,\n moduleName,\n}: ConfigTreeForModuleProps) {\n return (\n <TreeContainer>\n <ExtensionSlotsConfigTree\n extensionsConfig={config.extensions}\n moduleName={moduleName}\n />\n <ConfigSubtree\n config={pickBy(config, (v, key) => key !== \"extensions\")}\n path={[moduleName]}\n />\n </TreeContainer>\n );\n}\n","import React from \"react\";\nimport styles from \"./configuration.styles.css\";\nimport { Accordion, AccordionItem } from \"carbon-components-react\";\nimport { ConfigTreeForModule } from \"./config-tree-for-module.component\";\n\nexport interface ConfigTreeProps {\n config: Record<string, any>;\n}\n\nexport function ConfigTree({ config }: ConfigTreeProps) {\n return (\n <div>\n <Accordion align=\"start\">\n {config &&\n Object.keys(config)\n .sort()\n .map((moduleName) => {\n const moduleConfig = config[moduleName];\n return Object.keys(moduleConfig).length ? (\n <AccordionItem\n title={<h6 className={styles.moduleName}>{moduleName}</h6>}\n className={styles.fullWidthAccordion}\n key={`accordion-${moduleName}`}\n >\n <div key={`${moduleName}-config`}>\n <ConfigTreeForModule\n config={moduleConfig}\n moduleName={moduleName}\n />\n </div>\n </AccordionItem>\n ) : null;\n })}\n </Accordion>\n </div>\n );\n}\n","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./description.styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import React from \"react\";\nimport styles from \"./description.styles.css\";\nimport { useStore } from \"@openmrs/esm-framework\";\nimport { implementerToolsStore } from \"../store\";\n\nexport function Description() {\n const { activeItemDescription } = useStore(implementerToolsStore);\n return (\n <div>\n {activeItemDescription ? (\n <>\n <p className={styles.path}>\n {activeItemDescription.path.slice(1).join(\" → \")}\n </p>\n <p className={styles.description}>\n {activeItemDescription.description}\n </p>\n <p className={styles.source}>\n {activeItemDescription.source === \"default\" ? (\n <>The current value is the default.</>\n ) : activeItemDescription.source ? (\n <>The current value comes from {activeItemDescription.source}.</>\n ) : null}\n </p>\n {activeItemDescription.value ? <p>Value:</p> : null}\n <p className={styles.value}>\n {Array.isArray(activeItemDescription.value)\n ? activeItemDescription.value.map((v, i) => (\n <p key={`${v}-${i}`}>{v}</p>\n ))\n : activeItemDescription.value}\n </p>\n </>\n ) : null}\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport ChevronDown16 from \"@carbon/icons-react/es/chevron--down/16\";\nimport ChevronUp16 from \"@carbon/icons-react/es/chevron--up/16\";\nimport Download16 from \"@carbon/icons-react/es/download/16\";\nimport TrashCan16 from \"@carbon/icons-react/es/trash-can/16\";\nimport {\n Config,\n ConfigInternalStore,\n configInternalStore,\n implementerToolsConfigStore,\n temporaryConfigStore,\n useExtensionStore,\n useStore,\n} from \"@openmrs/esm-framework\";\nimport {\n Button,\n Column,\n Grid,\n Row,\n TextInput,\n Toggle,\n} from \"carbon-components-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { implementerToolsStore, ImplementerToolsStore } from \"../store\";\nimport { ConfigTree } from \"./config-tree.component\";\nimport { Description } from \"./description.component\";\nimport cloneDeep from \"lodash-es/cloneDeep\";\nimport isEmpty from \"lodash-es/isEmpty\";\nimport styles from \"./configuration.styles.css\";\n\nfunction isLeaf(configNode: Config) {\n return (\n configNode.hasOwnProperty(\"_default\") ||\n configNode[\"_type\"] ||\n configNode.hasOwnProperty(\"_value\") ||\n configNode.hasOwnProperty(\"_source\")\n );\n}\n\nconst actions = {\n toggleIsUIEditorEnabled({ isUIEditorEnabled }: ImplementerToolsStore) {\n return { isUIEditorEnabled: !isUIEditorEnabled };\n },\n toggleIsToolbarOpen({ isConfigToolbarOpen }: ImplementerToolsStore) {\n return { isConfigToolbarOpen: !isConfigToolbarOpen };\n },\n};\n\nconst configActions = {\n toggleDevDefaults({ devDefaultsAreOn }: ConfigInternalStore) {\n return { devDefaultsAreOn: !devDefaultsAreOn };\n },\n};\n\ninterface OpenOrCloseButtonProps {\n isConfigToolbarOpen: boolean;\n toggleIsToolbarOpen(): void;\n}\n\nconst OpenOrCloseButton: React.FC<OpenOrCloseButtonProps> = ({\n isConfigToolbarOpen,\n toggleIsToolbarOpen,\n}) => (\n <Button\n hasIconOnly\n renderIcon={isConfigToolbarOpen ? ChevronUp16 : ChevronDown16}\n onClick={toggleIsToolbarOpen}\n kind=\"ghost\"\n size=\"small\"\n iconDescription={`${isConfigToolbarOpen ? \"Hide\" : \"Show\"} toolbar`}\n />\n);\n\nexport interface ConfigurationProps {}\n\nexport const Configuration: React.FC<ConfigurationProps> = () => {\n const { t } = useTranslation();\n const {\n isUIEditorEnabled,\n toggleIsUIEditorEnabled,\n isConfigToolbarOpen,\n toggleIsToolbarOpen,\n } = useStore(implementerToolsStore, actions);\n const { devDefaultsAreOn, toggleDevDefaults } = useStore(\n configInternalStore,\n configActions\n );\n const { config } = useStore(implementerToolsConfigStore);\n const extensionStore = useExtensionStore();\n const tempConfigStore = useStore(temporaryConfigStore);\n const [filterText, setFilterText] = useState(\"\");\n const tempConfig = tempConfigStore.config;\n const tempConfigObjUrl = new Blob(\n [JSON.stringify(tempConfig, undefined, 2)],\n {\n type: \"application/json\",\n }\n );\n\n const combinedConfig = useMemo(() => {\n const result = cloneDeep(config);\n for (let slot of Object.values(extensionStore.slots)) {\n for (let moduleName of Object.keys(slot.instances)) {\n if (!result[moduleName].extensions) {\n result[moduleName].extensions = {};\n }\n if (!result[moduleName].extensions[slot.name]) {\n result[moduleName].extensions[slot.name] = {};\n }\n }\n }\n return result;\n }, [config, extensionStore]);\n\n const filteredConfig = useMemo(() => {\n function getRelatedBranches(inputTree: Config, filterText: string) {\n const result = {};\n for (let k of Object.keys(inputTree)) {\n if (k.includes(filterText)) {\n result[k] = cloneDeep(inputTree[k]);\n } else {\n if (!isLeaf(inputTree[k])) {\n const kSubtreeResult = getRelatedBranches(inputTree[k], filterText);\n if (!isEmpty(kSubtreeResult)) {\n result[k] = kSubtreeResult;\n }\n }\n }\n }\n return result;\n }\n return filterText\n ? getRelatedBranches(combinedConfig, filterText)\n : combinedConfig;\n }, [filterText, combinedConfig]);\n\n return (\n <>\n <div className={styles.tools}>\n {isConfigToolbarOpen ? (\n <Grid style={{ margin: \"0.25rem\", padding: \"0.5em 1.5em\" }}>\n <Row>\n <Column sm={1} md={2}>\n <TextInput\n id=\"extensionSearch\"\n labelText=\"Search configuration\"\n onChange={(e) => setFilterText(e.target.value)}\n />\n </Column>\n <Column sm={1} md={1}>\n <Toggle\n id=\"devConfigSwitch\"\n labelText={t(\"devConfig\", \"Dev Config\")}\n onToggle={toggleDevDefaults}\n toggled={devDefaultsAreOn}\n />\n </Column>\n <Column sm={1} md={1} className={styles.actionButton}>\n <Toggle\n id=\"uiEditorSwitch\"\n labelText={t(\"uiEditor\", \"UI Editor\")}\n toggled={isUIEditorEnabled}\n onToggle={toggleIsUIEditorEnabled}\n />\n </Column>\n <Column sm={1} md={2} className={styles.actionButton}>\n <Button\n kind=\"danger\"\n iconDescription=\"Clear temporary config\"\n renderIcon={TrashCan16}\n onClick={() => {\n temporaryConfigStore.setState({ config: {} });\n }}\n >\n {t(\"clearTemporaryConfig\", \"Clear Temporary Config\")}\n </Button>\n </Column>\n <Column sm={1} md={2} className={styles.actionButton}>\n <Button\n kind=\"secondary\"\n iconDescription=\"Download temporary config\"\n renderIcon={Download16}\n >\n <a\n className={styles.downloadLink}\n download=\"temporary_config.json\"\n href={window.URL.createObjectURL(tempConfigObjUrl)}\n >\n {t(\"downloadTemporaryConfig\", \"Download Temporary Config\")}\n </a>\n </Button>\n </Column>\n </Row>\n </Grid>\n ) : null}\n <div className={styles.toggleToolbarButton}>\n <OpenOrCloseButton\n isConfigToolbarOpen={isConfigToolbarOpen}\n toggleIsToolbarOpen={toggleIsToolbarOpen}\n />\n </div>\n </div>\n <div\n className={styles.mainContent}\n style={{\n marginTop: isConfigToolbarOpen ? \"72px\" : \"25px\",\n height: isConfigToolbarOpen\n ? \"calc(50vh - 114px)\"\n : \"calc(50vh - 68px)\",\n }}\n >\n <div className={styles.configTreePane}>\n <ConfigTree config={filteredConfig} />\n </div>\n <div className={styles.descriptionPane}>\n <Description />\n </div>\n </div>\n </>\n );\n};\n","import React, { Fragment, useMemo } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n DataTable,\n Table,\n TableHead,\n TableRow,\n TableHeader,\n TableBody,\n TableCell,\n TableContainer,\n} from \"carbon-components-react\";\nimport { FrontendModule } from \"./openmrs-backend-dependencies\";\n\nexport interface ModuleDiagnosticsProps {\n frontendModules: Array<FrontendModule>;\n}\n\nexport const ModuleDiagnostics: React.FC<ModuleDiagnosticsProps> = ({\n frontendModules,\n}) => {\n const { t } = useTranslation();\n\n const headers = useMemo(\n () => [\n {\n key: \"name\",\n header: t(\"moduleName\", \"Module Name\"),\n },\n {\n key: \"installedVersion\",\n header: t(\"installedVersion\", \"Installed Version\"),\n },\n {\n key: \"requiredVersion\",\n header: t(\"requiredVersion\", \"Required Version\"),\n },\n ],\n [t]\n );\n\n return (\n <div>\n <DataTable rows={[]} headers={headers}>\n {({ headers, getTableProps, getHeaderProps }) => (\n <TableContainer title=\"\">\n <Table {...getTableProps()}>\n <TableHead>\n <TableRow>\n {headers.map((header) => (\n <TableHeader {...getHeaderProps({ header })}>\n {header.header}\n </TableHeader>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {frontendModules.map((esm) => (\n <Fragment key={esm.name}>\n <TableRow>\n <TableCell>\n <strong>{esm.name}</strong>\n </TableCell>\n <TableCell></TableCell>\n <TableCell></TableCell>\n </TableRow>\n {esm.dependencies.map((dep) => (\n <TableRow key={dep.name}>\n <TableCell>{dep.name}</TableCell>\n <TableCell>\n {dep.type === \"missing\" ? (\n <span style={{ color: \"red\" }}>\n {t(\"missing\", \"Missing\")}\n </span>\n ) : dep.type === \"version-mismatch\" ? (\n <span style={{ color: \"red\" }}>\n {dep.installedVersion}\n </span>\n ) : (\n <span style={{ color: \"green\" }}>\n {dep.installedVersion}\n </span>\n )}\n </TableCell>\n <TableCell>{dep.requiredVersion}</TableCell>\n </TableRow>\n ))}\n </Fragment>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n </DataTable>\n </div>\n );\n};\n","import React, { useState } from \"react\";\nimport Close16 from \"@carbon/icons-react/es/close/16\";\nimport styles from \"./popup.styles.css\";\nimport { Button, ContentSwitcher, Switch } from \"carbon-components-react\";\nimport { useTranslation } from \"react-i18next\";\nimport { Configuration } from \"../configuration/configuration.component\";\nimport { ModuleDiagnostics } from \"../backend-dependencies/backend-dependencies.component\";\nimport { FrontendModule } from \"../backend-dependencies/openmrs-backend-dependencies\";\n\ninterface DevToolsPopupProps {\n close(): void;\n frontendModules: Array<FrontendModule>;\n visibleTabIndex?: number;\n}\n\nexport default function Popup(props: DevToolsPopupProps) {\n const { t } = useTranslation();\n const [activeTab, setActiveTab] = useState(0);\n\n return (\n <div className={styles.popup}>\n <div className={styles.topBar}>\n <div className={styles.tabs}>\n <ContentSwitcher\n onChange={(c) => {\n setActiveTab((c as any).index);\n }}\n >\n <Switch\n name=\"configuration-tab\"\n text={t(\"configuration\", \"Configuration\")}\n onClick={() => {}}\n onKeyDown={() => {}}\n />\n <Switch\n name=\"backend-modules-tab\"\n text={t(\"backendModules\", \"Backend Modules\")}\n onClick={() => {}}\n onKeyDown={() => {}}\n />\n </ContentSwitcher>\n </div>\n <div>\n <Button\n className={styles.closeButton}\n kind=\"secondary\"\n renderIcon={Close16}\n iconDescription=\"Close\"\n onClick={props.close}\n hasIconOnly\n />\n </div>\n </div>\n <div className={styles.content}>\n {activeTab == 0 ? (\n <Configuration />\n ) : (\n <ModuleDiagnostics frontendModules={props.frontendModules} />\n )}\n </div>\n </div>\n );\n}\n","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./styles.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { createPortal } from \"react-dom\";\n\nexport function Portal({ el, children }) {\n return el ? createPortal(children, el) : null;\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Portal } from \"./portal\";\nimport styles from \"./styles.css\";\n\nexport interface ExtensionOverlayProps {\n extensionName: string;\n slotModuleName: string;\n slotName: string;\n domElement: HTMLElement | null;\n}\n\nexport function ExtensionOverlay({\n extensionName,\n slotModuleName,\n slotName,\n domElement,\n}: ExtensionOverlayProps) {\n const [overlayDomElement, setOverlayDomElement] = useState<HTMLElement>();\n\n useEffect(() => {\n if (domElement) {\n const newOverlayDomElement = document.createElement(\"div\");\n domElement.parentElement?.appendChild(newOverlayDomElement);\n setOverlayDomElement(newOverlayDomElement);\n }\n }, [domElement]);\n\n return overlayDomElement ? (\n <Portal\n key={`extension-overlay-${slotModuleName}-${slotName}-${extensionName}`}\n el={overlayDomElement}\n >\n <Content extensionId={extensionName} />\n </Portal>\n ) : null;\n}\n\nfunction Content({ extensionId }) {\n return (\n <button className={styles.extensionOverlay}>\n <span className={styles.extensionTooltip}>{extensionId}</span>\n </button>\n );\n}\n","import React from \"react\";\nimport styles from \"./styles.css\";\nimport Close16 from \"@carbon/icons-react/es/close/16\";\nimport { useExtensionStore, useStore } from \"@openmrs/esm-framework\";\nimport { Button } from \"carbon-components-react\";\nimport { Portal } from \"./portal\";\nimport { ExtensionOverlay } from \"./extension-overlay.component\";\nimport { ImplementerToolsStore, implementerToolsStore } from \"../store\";\n\nexport function UiEditor() {\n const { slots, extensions } = useExtensionStore();\n const { isOpen: implementerToolsIsOpen } = useStore(implementerToolsStore);\n\n return (\n <>\n {implementerToolsIsOpen ? null : <ExitButton />}\n {slots\n ? Object.entries(slots).map(([slotName, slotInfo]) =>\n Object.keys(slotInfo.instances).map((slotModuleName) => (\n <Portal\n key={`slot-overlay-${slotModuleName}-${slotName}`}\n el={document.querySelector(\n `*[data-extension-slot-name=\"${slotName}\"][data-extension-slot-module-name=\"${slotModuleName}\"]`\n )}\n >\n <SlotOverlay slotName={slotName} />\n </Portal>\n ))\n )\n : null}\n {extensions\n ? Object.entries(extensions).map(([extensionName, extensionInfo]) =>\n Object.entries(extensionInfo.instances).map(\n ([slotModuleName, bySlotName]) =>\n Object.entries(bySlotName).map(\n ([slotName, extensionInstance]) => (\n <ExtensionOverlay\n key={slotName}\n extensionName={extensionName}\n slotModuleName={slotModuleName}\n slotName={slotName}\n domElement={document.querySelector(\n `*[data-extension-slot-name=\"${slotName}\"][data-extension-slot-module-name=\"${slotModuleName}\"] *[data-extension-id=\"${extensionInstance.id}\"]`\n )}\n />\n )\n )\n )\n )\n : null}\n </>\n );\n}\n\nexport function SlotOverlay({ slotName }) {\n return (\n <>\n <div className={styles.slotOverlay}></div>\n <div className={styles.slotName}>{slotName}</div>\n </>\n );\n}\n\nconst actions = {\n toggleIsUIEditorEnabled({ isUIEditorEnabled }: ImplementerToolsStore) {\n return { isUIEditorEnabled: !isUIEditorEnabled };\n },\n};\n\nexport function ExitButton() {\n const { toggleIsUIEditorEnabled } = useStore(implementerToolsStore, actions);\n return (\n <Button\n className={styles.exitButton}\n kind=\"danger\"\n size=\"sm\"\n renderIcon={Close16}\n iconDescription=\"Exit UI Editor\"\n tooltipPosition=\"left\"\n onClick={toggleIsUIEditorEnabled}\n hasIconOnly\n />\n );\n}\n","import { isVersionSatisfied, openmrsFetch } from \"@openmrs/esm-framework\";\nimport difference from \"lodash-es/difference\";\n\nexport type ResolvedBackendModuleType = \"missing\" | \"version-mismatch\" | \"okay\";\n\nexport interface ResolvedBackendModule {\n name: string;\n requiredVersion: string;\n installedVersion?: string;\n type: ResolvedBackendModuleType;\n}\n\nexport interface FrontendModule {\n name: string;\n dependencies: Array<ResolvedBackendModule>;\n}\n\ninterface Module {\n moduleName: string;\n backendDependencies: Record<string, string>;\n}\n\ninterface BackendModule {\n uuid: string;\n version: string;\n}\n\nlet cachedFrontendModules: Array<FrontendModule>;\n\nasync function initInstalledBackendModules(): Promise<Array<BackendModule>> {\n try {\n const response = await fetchInstalledBackendModules();\n return response.data.results;\n } catch (err) {\n console.error(err);\n }\n\n return [];\n}\n\nfunction checkIfModulesAreInstalled(\n module: Module,\n installedBackendModules: Array<BackendModule>\n): FrontendModule {\n const dependencies: Array<ResolvedBackendModule> = [];\n\n const missingBackendModule = getMissingBackendModules(\n module.backendDependencies,\n installedBackendModules\n );\n\n const installedAndRequiredModules = getInstalledAndRequiredBackendModules(\n module.backendDependencies,\n installedBackendModules\n );\n\n dependencies.push(\n ...missingBackendModule.map((m) => ({\n name: m.uuid,\n requiredVersion: m.version,\n type: \"missing\" as ResolvedBackendModuleType,\n })),\n ...installedAndRequiredModules.map((m) => {\n const requiredVersion = m.version;\n const installedVersion = getInstalledVersion(m, installedBackendModules);\n return {\n name: m.uuid,\n requiredVersion,\n installedVersion,\n type: getResolvedModuleType(requiredVersion, installedVersion),\n };\n })\n );\n\n return {\n name: module.moduleName,\n dependencies,\n };\n}\n\nfunction fetchInstalledBackendModules() {\n return openmrsFetch(`/ws/rest/v1/module?v=custom:(uuid,version)`, {\n method: \"GET\",\n });\n}\n\nfunction getMissingBackendModules(\n requiredBackendModules: Record<string, string>,\n installedBackendModules: Array<BackendModule>\n): Array<BackendModule> {\n const requiredBackendModulesUuids = Object.keys(requiredBackendModules);\n const installedBackendModuleUuids = installedBackendModules.map(\n (res) => res.uuid\n );\n\n const missingModules = difference(\n requiredBackendModulesUuids,\n installedBackendModuleUuids\n );\n\n return missingModules.map((key) => ({\n uuid: key,\n version: requiredBackendModules[key],\n }));\n}\n\nfunction getInstalledAndRequiredBackendModules(\n requiredBackendModules: Record<string, string>,\n installedBackendModules: Array<BackendModule>\n): Array<BackendModule> {\n const requiredModules = Object.keys(requiredBackendModules).map((key) => ({\n uuid: key,\n version: requiredBackendModules[key],\n }));\n\n return requiredModules.filter((requiredModule) => {\n return installedBackendModules.find((installedModule) => {\n return requiredModule.uuid === installedModule.uuid;\n });\n });\n}\n\nfunction getInstalledVersion(\n installedAndRequiredBackendModule: BackendModule,\n installedBackendModules: Array<BackendModule>\n) {\n const moduleName = installedAndRequiredBackendModule.uuid;\n return (\n installedBackendModules.find((mod) => mod.uuid == moduleName)?.version ?? \"\"\n );\n}\n\nfunction getResolvedModuleType(\n requiredVersion: string,\n installedVersion: string\n): ResolvedBackendModuleType {\n if (!isVersionSatisfied(requiredVersion, installedVersion)) {\n return \"version-mismatch\";\n }\n\n return \"okay\";\n}\n\nexport async function checkModules(): Promise<Array<FrontendModule>> {\n if (!cachedFrontendModules) {\n const modules = (window.installedModules ?? [])\n .filter((module) => module[1].backendDependencies)\n .map((module) => ({\n backendDependencies: module[1].backendDependencies,\n moduleName: module[0],\n }));\n\n const installedBackendModules = await initInstalledBackendModules();\n cachedFrontendModules = modules.map((m) =>\n checkIfModulesAreInstalled(m, installedBackendModules)\n );\n }\n\n return cachedFrontendModules;\n}\n\nexport function hasInvalidDependencies(frontendModules: Array<FrontendModule>) {\n return frontendModules.some((m) =>\n m.dependencies.some((n) => n.type !== \"okay\")\n );\n}\n","import { useEffect, useState } from \"react\";\nimport { checkModules, FrontendModule } from \"./openmrs-backend-dependencies\";\n\nexport function useBackendDependencies() {\n const [\n modulesWithMissingBackendModules,\n setModulesWithMissingBackendModules,\n ] = useState<Array<FrontendModule>>([]);\n\n useEffect(() => {\n // loading missing modules\n checkModules().then(setModulesWithMissingBackendModules);\n }, []);\n\n return modulesWithMissingBackendModules;\n}\n","import React, { useState, useEffect } from \"react\";\nimport Popup from \"./popup/popup.component\";\nimport { NotificationActionButton } from \"carbon-components-react\";\nimport {\n showNotification,\n UserHasAccess,\n useStore,\n} from \"@openmrs/esm-framework\";\nimport {\n implementerToolsStore,\n showModuleDiagnostics,\n togglePopup,\n} from \"./store\";\nimport { UiEditor } from \"./ui-editor/ui-editor\";\nimport { useBackendDependencies } from \"./backend-dependencies/useBackendDependencies\";\nimport { hasInvalidDependencies } from \"./backend-dependencies/openmrs-backend-dependencies\";\n\nfunction PopupHandler() {\n const frontendModules = useBackendDependencies();\n const [shouldShowNotification, setShouldShowNotification] = useState(false);\n\n useEffect(() => {\n // displaying toast if modules are missing\n setShouldShowNotification(\n (alreadyShowing) =>\n alreadyShowing || hasInvalidDependencies(frontendModules)\n );\n }, [frontendModules]);\n\n useEffect(() => {\n // only show notification max. 1 time\n if (shouldShowNotification) {\n showNotification({\n description: \"Found modules with unresolved backend dependencies.\",\n action: (\n <NotificationActionButton onClick={showModuleDiagnostics}>\n View\n </NotificationActionButton>\n ),\n kind: \"error\",\n });\n }\n }, [shouldShowNotification]);\n\n const { isOpen, isUIEditorEnabled, openTabIndex } = useStore(\n implementerToolsStore\n );\n return (\n <>\n {isOpen ? (\n <Popup\n close={togglePopup}\n frontendModules={frontendModules}\n visibleTabIndex={openTabIndex}\n />\n ) : null}\n {isUIEditorEnabled ? <UiEditor /> : null}\n </>\n );\n}\n\nexport default function ImplementerTools() {\n return (\n <UserHasAccess privilege=\"coreapps.systemAdministration\">\n <PopupHandler />\n </UserHasAccess>\n );\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__configuration-styles__tools___3AGqJ {\\n position: fixed;\\n width: 100%;\\n background-color: #e0e0e0;\\n border-bottom: 1px solid #a0a0a0;\\n border-top: 1px solid #c0c0c0;\\n z-index: 2;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__tools___3AGqJ > div {\\n flex: 0 1 auto;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__actionButton___2Uppy {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__downloadLink___3Acrx {\\n text-decoration: none;\\n color: inherit;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__mainContent___2sxQa {\\n background-color: #f0f0f0;\\n width: 100%;\\n display: flex;\\n overflow-y: auto;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__configTreePane___33WF1 {\\n width: 55%;\\n overflow-wrap: break-word;\\n overflow-x: hidden;\\n overflow-y: scroll;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__descriptionPane___2K_Kr {\\n width: 45%;\\n background-color: #e0e0e0;\\n color: #424242;\\n padding: 1em 2em;\\n font-size: 12pt;\\n overflow-wrap: break-word;\\n overflow-y: scroll;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__configTreePane___33WF1 .bx--text-input-wrapper {\\n min-width: 8em;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__fullWidthAccordion___kPYfh .bx--accordion__content {\\n padding-right: 0;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__toggleToolbarButton___2HZdY {\\n position: absolute;\\n left: 97vw;\\n top: -2px;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__valueEditorInput___DWOa3 {\\n width: 25em;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__valueEditorButtons___1uqDN {\\n height: 2.5rem;\\n min-width: 5em;\\n margin-left: 1em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/configuration.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,eAAe;EACf,WAAW;EACX,yBAAyB;EACzB,gCAAgC;EAChC,6BAA6B;EAC7B,UAAU;AACZ;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,oBAAoB;EACpB,mBAAmB;AACrB;;AAEA;EACE,qBAAqB;EACrB,cAAc;AAChB;;AAEA;EACE,yBAAyB;EACzB,WAAW;EACX,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,UAAU;EACV,yBAAyB;EACzB,kBAAkB;EAClB,kBAAkB;AACpB;;AAEA;EACE,UAAU;EACV,yBAAyB;EACzB,cAAc;EACd,gBAAgB;EAChB,eAAe;EACf,yBAAyB;EACzB,kBAAkB;AACpB;;AAEA;EACE,cAAc;AAChB;;AAEA;EACE,gBAAgB;AAClB;;AAEA;EACE,kBAAkB;EAClB,UAAU;EACV,SAAS;AACX;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,cAAc;EACd,cAAc;EACd,gBAAgB;AAClB\",\"sourcesContent\":[\".tools {\\n position: fixed;\\n width: 100%;\\n background-color: #e0e0e0;\\n border-bottom: 1px solid #a0a0a0;\\n border-top: 1px solid #c0c0c0;\\n z-index: 2;\\n}\\n\\n.tools > div {\\n flex: 0 1 auto;\\n}\\n\\n.actionButton {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.downloadLink {\\n text-decoration: none;\\n color: inherit;\\n}\\n\\n.mainContent {\\n background-color: #f0f0f0;\\n width: 100%;\\n display: flex;\\n overflow-y: auto;\\n}\\n\\n.configTreePane {\\n width: 55%;\\n overflow-wrap: break-word;\\n overflow-x: hidden;\\n overflow-y: scroll;\\n}\\n\\n.descriptionPane {\\n width: 45%;\\n background-color: #e0e0e0;\\n color: #424242;\\n padding: 1em 2em;\\n font-size: 12pt;\\n overflow-wrap: break-word;\\n overflow-y: scroll;\\n}\\n\\n.configTreePane :global(.bx--text-input-wrapper) {\\n min-width: 8em;\\n}\\n\\n.fullWidthAccordion :global(.bx--accordion__content) {\\n padding-right: 0;\\n}\\n\\n.toggleToolbarButton {\\n position: absolute;\\n left: 97vw;\\n top: -2px;\\n}\\n\\n.valueEditorInput {\\n width: 25em;\\n}\\n\\n.valueEditorButtons {\\n height: 2.5rem;\\n min-width: 5em;\\n margin-left: 1em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"tools\": \"-esm-implementer-tools__configuration-styles__tools___3AGqJ\",\n\t\"actionButton\": \"-esm-implementer-tools__configuration-styles__actionButton___2Uppy\",\n\t\"downloadLink\": \"-esm-implementer-tools__configuration-styles__downloadLink___3Acrx\",\n\t\"mainContent\": \"-esm-implementer-tools__configuration-styles__mainContent___2sxQa\",\n\t\"configTreePane\": \"-esm-implementer-tools__configuration-styles__configTreePane___33WF1\",\n\t\"descriptionPane\": \"-esm-implementer-tools__configuration-styles__descriptionPane___2K_Kr\",\n\t\"fullWidthAccordion\": \"-esm-implementer-tools__configuration-styles__fullWidthAccordion___kPYfh\",\n\t\"toggleToolbarButton\": \"-esm-implementer-tools__configuration-styles__toggleToolbarButton___2HZdY\",\n\t\"valueEditorInput\": \"-esm-implementer-tools__configuration-styles__valueEditorInput___DWOa3\",\n\t\"valueEditorButtons\": \"-esm-implementer-tools__configuration-styles__valueEditorButtons___1uqDN\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__description-styles__path___xbL6R {\\n color: #303030;\\n margin-bottom: 1em;\\n}\\n\\n.-esm-implementer-tools__description-styles__description___3w8EM {\\n margin-bottom: 0.5em;\\n}\\n\\n.-esm-implementer-tools__description-styles__source___2Y3IA {\\n font-style: italic;\\n margin-bottom: 0.5em;\\n}\\n\\n.-esm-implementer-tools__description-styles__value___2m1CN {\\n font-family: monospace;\\n margin-top: 0.5em;\\n margin-left: 0.5em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/description.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,cAAc;EACd,kBAAkB;AACpB;;AAEA;EACE,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,oBAAoB;AACtB;;AAEA;EACE,sBAAsB;EACtB,iBAAiB;EACjB,kBAAkB;AACpB\",\"sourcesContent\":[\".path {\\n color: #303030;\\n margin-bottom: 1em;\\n}\\n\\n.description {\\n margin-bottom: 0.5em;\\n}\\n\\n.source {\\n font-style: italic;\\n margin-bottom: 0.5em;\\n}\\n\\n.value {\\n font-family: monospace;\\n margin-top: 0.5em;\\n margin-left: 0.5em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"path\": \"-esm-implementer-tools__description-styles__path___xbL6R\",\n\t\"description\": \"-esm-implementer-tools__description-styles__description___3w8EM\",\n\t\"source\": \"-esm-implementer-tools__description-styles__source___2Y3IA\",\n\t\"value\": \"-esm-implementer-tools__description-styles__value___2m1CN\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__editable-value-styles__secretButton___lSFNq {\\n background: none;\\n color: #474b6b;\\n border: none;\\n font: inherit;\\n text-align: left;\\n}\\n\\n.-esm-implementer-tools__editable-value-styles__error___2-dxM {\\n margin-left: 1em;\\n color: orange;\\n font-size: 11pt;\\n}\\n\\n.-esm-implementer-tools__editable-value-styles__overriddenValue___4bCrT {\\n color: #2020a0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/editable-value.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,gBAAgB;EAChB,cAAc;EACd,YAAY;EACZ,aAAa;EACb,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,aAAa;EACb,eAAe;AACjB;;AAEA;EACE,cAAc;AAChB\",\"sourcesContent\":[\".secretButton {\\n background: none;\\n color: #474b6b;\\n border: none;\\n font: inherit;\\n text-align: left;\\n}\\n\\n.error {\\n margin-left: 1em;\\n color: orange;\\n font-size: 11pt;\\n}\\n\\n.overriddenValue {\\n color: #2020a0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"secretButton\": \"-esm-implementer-tools__editable-value-styles__secretButton___lSFNq\",\n\t\"error\": \"-esm-implementer-tools__editable-value-styles__error___2-dxM\",\n\t\"overriddenValue\": \"-esm-implementer-tools__editable-value-styles__overriddenValue___4bCrT\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__layout-styles__labelCell___1FQD9 {\\n width: 12em;\\n}\\n\\n.-esm-implementer-tools__layout-styles__structuredList___1WZZj {\\n margin-bottom: 1em;\\n}\\n\\n.-esm-implementer-tools__layout-styles__structuredListRow___32y33 {\\n border-left: 2px solid #c0c0c0;\\n}\\n\\n.-esm-implementer-tools__layout-styles__subtreeCell___3ood- {\\n left: -6em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/layout/layout.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,WAAW;AACb;;AAEA;EACE,kBAAkB;AACpB;;AAEA;EACE,8BAA8B;AAChC;;AAEA;EACE,UAAU;AACZ\",\"sourcesContent\":[\".labelCell {\\n width: 12em;\\n}\\n\\n.structuredList {\\n margin-bottom: 1em;\\n}\\n\\n.structuredListRow {\\n border-left: 2px solid #c0c0c0;\\n}\\n\\n.subtreeCell {\\n left: -6em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"labelCell\": \"-esm-implementer-tools__layout-styles__labelCell___1FQD9\",\n\t\"structuredList\": \"-esm-implementer-tools__layout-styles__structuredList___1WZZj\",\n\t\"structuredListRow\": \"-esm-implementer-tools__layout-styles__structuredListRow___32y33\",\n\t\"subtreeCell\": \"-esm-implementer-tools__layout-styles__subtreeCell___3ood-\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF .bx--structured-list-td {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF .bx--structured-list {\\n margin-bottom: 0.25rem;\\n}\\n\\n.-esm-implementer-tools__array-editor-styles__buttonCell___2k5Vb {\\n text-align: right;\\n}\\n\\n/* .valueCell {\\n display: inline-flex;\\n} */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/value-editors/array-editor.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kCAAkC;AACpC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;GAEG\",\"sourcesContent\":[\".arrayEditor :global(.bx--structured-list-td) {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.arrayEditor :global(.bx--structured-list) {\\n margin-bottom: 0.25rem;\\n}\\n\\n.buttonCell {\\n text-align: right;\\n}\\n\\n/* .valueCell {\\n display: inline-flex;\\n} */\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"arrayEditor\": \"-esm-implementer-tools__array-editor-styles__arrayEditor___ieFcF\",\n\t\"buttonCell\": \"-esm-implementer-tools__array-editor-styles__buttonCell___2k5Vb\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL,\\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL > [role=\\\"combobox\\\"] {\\n display: flex;\\n position: relative;\\n width: 20em;\\n}\\n\\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL [role=\\\"listbox\\\"] {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex-flow: column wrap;\\n background-color: whitesmoke;\\n color: #fff;\\n}\\n\\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL li {\\n line-height: 0.75rem;\\n padding: 0.5em;\\n display: block;\\n border-bottom: 0.125rem solid #718096;\\n outline: 0;\\n margin: 0;\\n color: #000;\\n}\\n\\n.-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL [role=\\\"option\\\"]:hover {\\n background-color: #38a169;\\n border-color: #38a169;\\n color: #f7fafc;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/value-editors/concept-search.styles.css\"],\"names\":[],\"mappings\":\"AAAA;;EAEE,aAAa;EACb,kBAAkB;EAClB,WAAW;AACb;;AAEA;EACE,SAAS;EACT,UAAU;EACV,aAAa;EACb,sBAAsB;EACtB,4BAA4B;EAC5B,WAAW;AACb;;AAEA;EACE,oBAAoB;EACpB,cAAc;EACd,cAAc;EACd,qCAAqC;EACrC,UAAU;EACV,SAAS;EACT,WAAW;AACb;;AAEA;EACE,yBAAyB;EACzB,qBAAqB;EACrB,cAAc;AAChB\",\"sourcesContent\":[\".autocomplete,\\n.autocomplete > [role=\\\"combobox\\\"] {\\n display: flex;\\n position: relative;\\n width: 20em;\\n}\\n\\n.autocomplete [role=\\\"listbox\\\"] {\\n margin: 0;\\n padding: 0;\\n display: flex;\\n flex-flow: column wrap;\\n background-color: whitesmoke;\\n color: #fff;\\n}\\n\\n.autocomplete li {\\n line-height: 0.75rem;\\n padding: 0.5em;\\n display: block;\\n border-bottom: 0.125rem solid #718096;\\n outline: 0;\\n margin: 0;\\n color: #000;\\n}\\n\\n.autocomplete [role=\\\"option\\\"]:hover {\\n background-color: #38a169;\\n border-color: #38a169;\\n color: #f7fafc;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"autocomplete\": \"-esm-implementer-tools__concept-search-styles__autocomplete___2nxSL\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY .bx--structured-list-td {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY .bx--structured-list {\\n margin-bottom: 0.25rem;\\n}\\n\\n.-esm-implementer-tools__object-editor-styles__buttonCell___3ONI- {\\n text-align: right;\\n}\\n\\n/* .valueCell {\\n display: inline-flex;\\n} */\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/configuration/value-editors/object-editor.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kCAAkC;AACpC;;AAEA;EACE,sBAAsB;AACxB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;;GAEG\",\"sourcesContent\":[\".objectEditor :global(.bx--structured-list-td) {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.objectEditor :global(.bx--structured-list) {\\n margin-bottom: 0.25rem;\\n}\\n\\n.buttonCell {\\n text-align: right;\\n}\\n\\n/* .valueCell {\\n display: inline-flex;\\n} */\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"objectEditor\": \"-esm-implementer-tools__object-editor-styles__objectEditor___KvYzY\",\n\t\"buttonCell\": \"-esm-implementer-tools__object-editor-styles__buttonCell___3ONI-\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__popup-styles__popup___vyld6 {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n width: 100%;\\n height: 50%;\\n z-index: 100000;\\n background-color: #d0d0d0;\\n border-top: 2px solid #404050;\\n color: #222;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n align-items: flex-start;\\n box-sizing: border-box;\\n overflow-y: auto;\\n}\\n\\n.-esm-implementer-tools__popup-styles__content___fQRAl {\\n margin-top: 40px;\\n width: 100%;\\n}\\n\\n.-esm-implementer-tools__popup-styles__tabs___2HYJP {\\n width: 30em;\\n}\\n\\n.-esm-implementer-tools__popup-styles__topBar___2dsNF {\\n position: fixed;\\n width: 100%;\\n height: 42px;\\n display: flex;\\n justify-content: space-between;\\n border-bottom: 1px solid #a0a0a0;\\n z-index: 2;\\n background: #e0e0e0;\\n}\\n\\n.-esm-implementer-tools__popup-styles__closeButton___2tyDP {\\n min-height: 3em;\\n padding: 0 1em;\\n}\\n\\n.-esm-implementer-tools__popup-styles__topBar___2dsNF .bx--content-switcher-btn:first-child,\\n.-esm-implementer-tools__popup-styles__topBar___2dsNF .bx--content-switcher-btn:last-child {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/popup/popup.styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,eAAe;EACf,SAAS;EACT,OAAO;EACP,WAAW;EACX,WAAW;EACX,eAAe;EACf,yBAAyB;EACzB,6BAA6B;EAC7B,WAAW;EACX,aAAa;EACb,sBAAsB;EACtB,8BAA8B;EAC9B,uBAAuB;EACvB,sBAAsB;EACtB,gBAAgB;AAClB;;AAEA;EACE,gBAAgB;EAChB,WAAW;AACb;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,eAAe;EACf,WAAW;EACX,YAAY;EACZ,aAAa;EACb,8BAA8B;EAC9B,gCAAgC;EAChC,UAAU;EACV,mBAAmB;AACrB;;AAEA;EACE,eAAe;EACf,cAAc;AAChB;;AAEA;;EAEE,yBAAyB;EACzB,4BAA4B;EAC5B,0BAA0B;EAC1B,6BAA6B;AAC/B\",\"sourcesContent\":[\".popup {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n width: 100%;\\n height: 50%;\\n z-index: 100000;\\n background-color: #d0d0d0;\\n border-top: 2px solid #404050;\\n color: #222;\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n align-items: flex-start;\\n box-sizing: border-box;\\n overflow-y: auto;\\n}\\n\\n.content {\\n margin-top: 40px;\\n width: 100%;\\n}\\n\\n.tabs {\\n width: 30em;\\n}\\n\\n.topBar {\\n position: fixed;\\n width: 100%;\\n height: 42px;\\n display: flex;\\n justify-content: space-between;\\n border-bottom: 1px solid #a0a0a0;\\n z-index: 2;\\n background: #e0e0e0;\\n}\\n\\n.closeButton {\\n min-height: 3em;\\n padding: 0 1em;\\n}\\n\\n.topBar :global(.bx--content-switcher-btn:first-child),\\n.topBar :global(.bx--content-switcher-btn:last-child) {\\n border-top-left-radius: 0;\\n border-bottom-left-radius: 0;\\n border-top-right-radius: 0;\\n border-bottom-right-radius: 0;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"popup\": \"-esm-implementer-tools__popup-styles__popup___vyld6\",\n\t\"content\": \"-esm-implementer-tools__popup-styles__content___fQRAl\",\n\t\"tabs\": \"-esm-implementer-tools__popup-styles__tabs___2HYJP\",\n\t\"topBar\": \"-esm-implementer-tools__popup-styles__topBar___2dsNF\",\n\t\"closeButton\": \"-esm-implementer-tools__popup-styles__closeButton___2tyDP\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-implementer-tools__styles__slotOverlay___342ll {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background-color: rgba(43, 43, 185, 0.1);\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n pointer-events: none;\\n}\\n\\n.-esm-implementer-tools__styles__slotName___1bIs0 {\\n background-color: rgb(255, 255, 255, 0.85);\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n color: #393939;\\n position: absolute;\\n bottom: 0;\\n right: 0;\\n padding: 0.5em 0.5em 0.5em 0.5em;\\n pointer-events: none;\\n}\\n\\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background: none;\\n border: none;\\n}\\n\\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:hover {\\n background-color: rgba(43, 43, 185, 0.1);\\n}\\n\\n/* Show the tooltip text when you mouse over the tooltip container */\\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:focus .-esm-implementer-tools__styles__extensionTooltip___1sJtS,\\n.-esm-implementer-tools__styles__extensionOverlay___n5KTZ:hover .-esm-implementer-tools__styles__extensionTooltip___1sJtS {\\n visibility: visible;\\n opacity: 1;\\n}\\n\\n.-esm-implementer-tools__styles__extensionTooltip___1sJtS {\\n visibility: hidden;\\n width: auto;\\n background-color: rgb(255, 255, 255, 0.85);\\n text-align: center;\\n padding: 0.5em 0.5em 0.5em 0.5em;\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.-esm-implementer-tools__styles__exitButton___2xev8 {\\n position: fixed !important;\\n bottom: 0;\\n right: 0;\\n z-index: 999999;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/ui-editor/styles.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,wCAAwC;EACxC,wCAAwC;EACxC,oBAAoB;AACtB;;AAEA;EACE,0CAA0C;EAC1C,wCAAwC;EACxC,cAAc;EACd,kBAAkB;EAClB,SAAS;EACT,QAAQ;EACR,gCAAgC;EAChC,oBAAoB;AACtB;;AAEA;EACE,kBAAkB;EAClB,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,gBAAgB;EAChB,YAAY;AACd;;AAEA;EACE,wCAAwC;AAC1C;;AAEA,oEAAoE;AACpE;;EAEE,mBAAmB;EACnB,UAAU;AACZ;;AAEA;EACE,kBAAkB;EAClB,WAAW;EACX,0CAA0C;EAC1C,kBAAkB;EAClB,gCAAgC;EAChC,wCAAwC;;EAExC,kBAAkB;EAClB,MAAM;EACN,OAAO;AACT;;AAEA;EACE,0BAA0B;EAC1B,SAAS;EACT,QAAQ;EACR,eAAe;AACjB\",\"sourcesContent\":[\".slotOverlay {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background-color: rgba(43, 43, 185, 0.1);\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n pointer-events: none;\\n}\\n\\n.slotName {\\n background-color: rgb(255, 255, 255, 0.85);\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n color: #393939;\\n position: absolute;\\n bottom: 0;\\n right: 0;\\n padding: 0.5em 0.5em 0.5em 0.5em;\\n pointer-events: none;\\n}\\n\\n.extensionOverlay {\\n position: absolute;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background: none;\\n border: none;\\n}\\n\\n.extensionOverlay:hover {\\n background-color: rgba(43, 43, 185, 0.1);\\n}\\n\\n/* Show the tooltip text when you mouse over the tooltip container */\\n.extensionOverlay:focus .extensionTooltip,\\n.extensionOverlay:hover .extensionTooltip {\\n visibility: visible;\\n opacity: 1;\\n}\\n\\n.extensionTooltip {\\n visibility: hidden;\\n width: auto;\\n background-color: rgb(255, 255, 255, 0.85);\\n text-align: center;\\n padding: 0.5em 0.5em 0.5em 0.5em;\\n border: 1px solid rgba(43, 43, 185, 0.4);\\n\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n\\n.exitButton {\\n position: fixed !important;\\n bottom: 0;\\n right: 0;\\n z-index: 999999;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"slotOverlay\": \"-esm-implementer-tools__styles__slotOverlay___342ll\",\n\t\"slotName\": \"-esm-implementer-tools__styles__slotName___1bIs0\",\n\t\"extensionOverlay\": \"-esm-implementer-tools__styles__extensionOverlay___n5KTZ\",\n\t\"extensionTooltip\": \"-esm-implementer-tools__styles__extensionTooltip___1sJtS\",\n\t\"exitButton\": \"-esm-implementer-tools__styles__exitButton___2xev8\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["ArrayEditor","element","valueArray","setValue","arrayKey","useMemo","uniqueId","Tile","className","styles","StructuredList","map","value","i","key","ValueEditorField","_elements","_value","_source","valueType","_type","Type","onChange","newValue","newValueArray","cloneDeep","Button","renderIcon","TrashCan16","size","kind","iconDescription","hasIconOnly","onClick","splice","Add16","push","ConceptSearchBox","setConcept","searchTerm","setSearchTerm","useState","searchResults","setSearchResults","activeConceptUuid","setActiveConceptUuid","id","handleSearchTermChange","debounce","useEffect","ac","AbortController","query","length","openmrsFetch","method","then","data","results","slice","abort","type","autoComplete","autoCapitalize","role","placeholder","autoFocus","$event","target","concept","uuid","style","padding","handleUuidChange","display","ExtensionSlotAdd","availableExtensions","setAvailableExtensions","update","state","Object","keys","extensions","extensionStore","MultiSelect","items","name","label","selectedItems","v","initialSelectedItems","ExtensionSlotRemove","slotName","slotModuleName","assignedIds","store","moduleName","slot","slots","instance","instances","getAssignedIds","attachedIds","getExtensionIds","useExtensionStore","ObjectEditor","valueObject","entries","schema","startsWith","newKey","newValueObject","ExtensionSlotOrder","path","Error","Checkbox","checked","hideLabel","labelText","NumberInput","e","Number","imaginaryTarget","TextInput","ValueEditor","customType","handleSave","handleClose","ref","useRef","tmpValue","setTmpValue","keyListener","JSON","stringify","document","addEventListener","removeEventListener","Save16","Close16","DisplayValue","Array","isArray","marginBottom","join","k","EditableValue","valueString","setValueString","editing","setEditing","error","setError","activeConfigRef","closeEditor","configPathBeingEdited","isEqual","current","focus","implementerToolsStore","activeItemDescription","source","description","_description","val","result","parse","tempConfigUpdate","set","temporaryConfigStore","console","warn","marginLeft","Reset16","unset","obj","ExtensionConfigureTree","config","_default","undefined","Subtree","leaf","children","onMouseEnter","onMouseLeave","ExtensionSlotsConfigTree","extensionsConfig","ExtensionSlotConfigTree","assignedExtensions","setAssignedExtensions","removeActiveItemDescriptionOnMouseLeave","thisPath","setActiveExtensionSlotOnMouseEnter","add","remove","order","configure","setActiveItemDescriptionOnMouseEnter","concat","ConfigSubtree","isLeaf","hasOwnProperty","TreeContainer","ConfigTreeForModule","pickBy","ConfigTree","Accordion","align","sort","moduleConfig","AccordionItem","title","Description","useStore","actions","toggleIsUIEditorEnabled","isUIEditorEnabled","toggleIsToolbarOpen","isConfigToolbarOpen","configActions","toggleDevDefaults","devDefaultsAreOn","OpenOrCloseButton","ChevronUp16","ChevronDown16","Configuration","t","useTranslation","configInternalStore","implementerToolsConfigStore","tempConfigStore","filterText","setFilterText","tempConfig","tempConfigObjUrl","Blob","combinedConfig","values","filteredConfig","getRelatedBranches","inputTree","includes","configNode","kSubtreeResult","isEmpty","Grid","margin","Row","Column","sm","md","Toggle","onToggle","toggled","Download16","download","href","window","URL","createObjectURL","marginTop","height","ModuleDiagnostics","frontendModules","headers","header","DataTable","rows","getTableProps","getHeaderProps","TableContainer","Table","TableHead","TableRow","TableHeader","TableBody","esm","Fragment","TableCell","dependencies","dep","color","installedVersion","requiredVersion","Popup","props","activeTab","setActiveTab","ContentSwitcher","c","index","Switch","text","onKeyDown","close","Portal","el","createPortal","ExtensionOverlay","extensionName","domElement","overlayDomElement","setOverlayDomElement","newOverlayDomElement","createElement","parentElement","appendChild","Content","extensionId","UiEditor","isOpen","implementerToolsIsOpen","ExitButton","slotInfo","querySelector","SlotOverlay","extensionInfo","bySlotName","extensionInstance","tooltipPosition","cachedFrontendModules","getResolvedModuleType","isVersionSatisfied","useBackendDependencies","modulesWithMissingBackendModules","setModulesWithMissingBackendModules","async","modules","installedModules","filter","module","backendDependencies","installedBackendModules","err","initInstalledBackendModules","m","missingBackendModule","requiredBackendModules","requiredBackendModulesUuids","installedBackendModuleUuids","res","difference","version","getMissingBackendModules","installedAndRequiredModules","requiredModule","find","installedModule","getInstalledAndRequiredBackendModules","installedAndRequiredBackendModule","mod","getInstalledVersion","checkIfModulesAreInstalled","checkModules","PopupHandler","shouldShowNotification","setShouldShowNotification","alreadyShowing","some","n","hasInvalidDependencies","showNotification","action","Notification","showModuleDiagnostics","openTabIndex","togglePopup","visibleTabIndex","ImplementerTools","UserHasAccess","privilege","___CSS_LOADER_EXPORT___","locals"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["@openmrs/esm-framework","react","react-i18next","react-dom","carbon-components"],(function(e,t){var o={},n={},r={},s={},i={};return{setters:[function(e){o.Type=e.Type,o.UserHasAccess=e.UserHasAccess,o.configInternalStore=e.configInternalStore,o.createGlobalStore=e.createGlobalStore,o.extensionStore=e.extensionStore,o.getAssignedIds=e.getAssignedIds,o.getAsyncLifecycle=e.getAsyncLifecycle,o.implementerToolsConfigStore=e.implementerToolsConfigStore,o.isVersionSatisfied=e.isVersionSatisfied,o.openmrsFetch=e.openmrsFetch,o.showNotification=e.showNotification,o.temporaryConfigStore=e.temporaryConfigStore,o.useExtensionStore=e.useExtensionStore,o.useStore=e.useStore},function(e){n.Component=e.Component,n.Fragment=e.Fragment,n.cloneElement=e.cloneElement,n.createContext=e.createContext,n.default=e.default,n.useCallback=e.useCallback,n.useContext=e.useContext,n.useEffect=e.useEffect,n.useLayoutEffect=e.useLayoutEffect,n.useMemo=e.useMemo,n.useRef=e.useRef,n.useState=e.useState},function(e){r.useTranslation=e.useTranslation},function(e){s.createPortal=e.createPortal,s.default=e.default},function(e){i.settings=e.settings}],execute:function(){e((()=>{var e,a,l={7704:(e,t,o)=>{"use strict";o.d(t,{wT:()=>n,zI:()=>r,XE:()=>s});const n=(0,o(6512).createGlobalStore)("implementer-tools",{activeItemDescription:void 0,configPathBeingEdited:null,isOpen:c(),hasAlert:!1,openTabIndex:0,isConfigToolbarOpen:u(),isUIEditorEnabled:p()}),r=(n.action(((e,t)=>({...e,hasAlert:t}))),n.action((e=>({...e,isOpen:!e.isOpen})))),s=n.action((e=>({...e,isOpen:!0,openTabIndex:1})));let i=c(),a=u(),l=p();function c(){var e;return null!==(e=JSON.parse(localStorage.getItem("openmrs:openmrsImplementerToolsAreOpen")||"false"))&&void 0!==e&&e}function u(){var e;return null===(e=JSON.parse(localStorage.getItem("openmrs:openmrsImplementerToolsConfigOpen")||"true"))||void 0===e||e}function p(){var e;return null!==(e=JSON.parse(localStorage.getItem("openmrs:isUIEditorEnabled")||"false"))&&void 0!==e&&e}n.subscribe((e=>{var t,o;e.isOpen!=i&&(t=e.isOpen,localStorage.setItem("openmrs:openmrsImplementerToolsAreOpen",JSON.stringify(t)),i=e.isOpen),e.isUIEditorEnabled!=l&&(o=e.isUIEditorEnabled,localStorage.setItem("openmrs:isUIEditorEnabled",JSON.stringify(o)),l=e.isUIEditorEnabled),e.isConfigToolbarOpen!=a&&(function(e){localStorage.setItem("openmrs:openmrsImplementerToolsConfigOpen",JSON.stringify(e))}(e.isConfigToolbarOpen),a=e.isConfigToolbarOpen)}))},7968:(e,t,o)=>{const n=o(1577).R;t.s=function(e){if(e||(e=1),!o.y.meta||!o.y.meta.url)throw console.error("__system_context__",o.y),Error("systemjs-webpack-interop was provided an unknown SystemJS context. Expected context.meta.url, but none was provided");o.p=n(o.y.meta.url,e)}},1577:(e,t,o)=>{t.R=function(e,t){var o=document.createElement("a");o.href=e;for(var n="/"===o.pathname[0]?o.pathname:"/"+o.pathname,r=0,s=n.length;r!==t&&s>=0;)"/"===n[--s]&&r++;if(r!==t)throw Error("systemjs-webpack-interop: rootDirectoryLevel ("+t+") is greater than the number of directories ("+r+") in the URL path "+e);var i=n.slice(0,s+1);return o.protocol+"//"+o.host+i};Number.isInteger},3979:(e,t,o)=>{var n={"./en.json":[3574,574],"./es.json":[8319,319]};function r(e){if(!o.o(n,e))return Promise.resolve().then((()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=n[e],r=t[0];return o.e(t[1]).then((()=>o(r)))}r.keys=()=>Object.keys(n),r.id=3979,e.exports=r},6512:e=>{"use strict";e.exports=o},5670:e=>{"use strict";e.exports=i},9297:e=>{"use strict";e.exports=n},2268:e=>{"use strict";e.exports=s},7789:e=>{"use strict";e.exports=r}},c={};function u(e){var t=c[e];if(void 0!==t)return t.exports;var o=c[e]={id:e,loaded:!1,exports:{}};return l[e].call(o.exports,o,o.exports,u),o.loaded=!0,o.exports}u.m=l,u.y=t,u.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return u.d(t,{a:t}),t},u.d=(e,t)=>{for(var o in t)u.o(t,o)&&!u.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},u.f={},u.e=e=>Promise.all(Object.keys(u.f).reduce(((t,o)=>(u.f[o](e,t),t)),[])),u.u=e=>e+".openmrs-esm-implementer-tools-app.js",u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},a="@openmrs/esm-implementer-tools-app:",u.l=(t,o,n,r)=>{if(e[t])e[t].push(o);else{var s,i;if(void 0!==n)for(var l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var p=l[c];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==a+n){s=p;break}}s||(i=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,u.nc&&s.setAttribute("nonce",u.nc),s.setAttribute("data-webpack",a+n),s.src=t),e[t]=[o];var m=(o,n)=>{s.onerror=s.onload=null,clearTimeout(d);var r=e[t];if(delete e[t],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((e=>e(n))),o)return o(n)},d=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),i&&document.head.appendChild(s)}},u.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),u.p="",(()=>{var e={179:0};u.f.j=(t,o)=>{var n=u.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else{var r=new Promise(((o,r)=>n=e[t]=[o,r]));o.push(n[2]=r);var s=u.p+u.u(t),i=new Error;u.l(s,(o=>{if(u.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var r=o&&("load"===o.type?"missing":o.type),s=o&&o.target&&o.target.src;i.message="Loading chunk "+t+" failed.\n("+r+": "+s+")",i.name="ChunkLoadError",i.type=r,i.request=s,n[1](i)}}),"chunk-"+t,t)}};var t=(t,o)=>{var n,r,[s,i,a]=o,l=0;if(s.some((t=>0!==e[t]))){for(n in i)u.o(i,n)&&(u.m[n]=i[n]);a&&a(u)}for(t&&t(o);l<s.length;l++)r=s[l],u.o(e,r)&&e[r]&&e[r][0](),e[s[l]]=0},o=self.webpackChunk_openmrs_esm_implementer_tools_app=self.webpackChunk_openmrs_esm_implementer_tools_app||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})();var p={};return(0,u(7968).s)(1),(()=>{"use strict";u.r(p),u.d(p,{ConfigEditButton:()=>r,frontendDependencies:()=>s,importTranslation:()=>a,setupOpenMRS:()=>i});var e=u(6512),t=u(9297),o=u(7704),n=u(7789);function r({configPath:e}){const{t:r}=(0,n.useTranslation)();return t.default.createElement("button",{onClick:()=>{o.wT.setState({configPathBeingEdited:e})}},r("edit","Edit"))}const s={"@openmrs/esm-framework":"^3.1.10-pre.
|
|
1
|
+
System.register(["@openmrs/esm-framework","react","react-i18next","react-dom","carbon-components"],(function(e,t){var o={},n={},r={},s={},i={};return{setters:[function(e){o.Type=e.Type,o.UserHasAccess=e.UserHasAccess,o.configInternalStore=e.configInternalStore,o.createGlobalStore=e.createGlobalStore,o.extensionStore=e.extensionStore,o.getAssignedIds=e.getAssignedIds,o.getAsyncLifecycle=e.getAsyncLifecycle,o.implementerToolsConfigStore=e.implementerToolsConfigStore,o.isVersionSatisfied=e.isVersionSatisfied,o.openmrsFetch=e.openmrsFetch,o.showNotification=e.showNotification,o.temporaryConfigStore=e.temporaryConfigStore,o.useExtensionStore=e.useExtensionStore,o.useStore=e.useStore},function(e){n.Component=e.Component,n.Fragment=e.Fragment,n.cloneElement=e.cloneElement,n.createContext=e.createContext,n.default=e.default,n.useCallback=e.useCallback,n.useContext=e.useContext,n.useEffect=e.useEffect,n.useLayoutEffect=e.useLayoutEffect,n.useMemo=e.useMemo,n.useRef=e.useRef,n.useState=e.useState},function(e){r.useTranslation=e.useTranslation},function(e){s.createPortal=e.createPortal,s.default=e.default},function(e){i.settings=e.settings}],execute:function(){e((()=>{var e,a,l={7704:(e,t,o)=>{"use strict";o.d(t,{wT:()=>n,zI:()=>r,XE:()=>s});const n=(0,o(6512).createGlobalStore)("implementer-tools",{activeItemDescription:void 0,configPathBeingEdited:null,isOpen:c(),hasAlert:!1,openTabIndex:0,isConfigToolbarOpen:u(),isUIEditorEnabled:p()}),r=(n.action(((e,t)=>({...e,hasAlert:t}))),n.action((e=>({...e,isOpen:!e.isOpen})))),s=n.action((e=>({...e,isOpen:!0,openTabIndex:1})));let i=c(),a=u(),l=p();function c(){var e;return null!==(e=JSON.parse(localStorage.getItem("openmrs:openmrsImplementerToolsAreOpen")||"false"))&&void 0!==e&&e}function u(){var e;return null===(e=JSON.parse(localStorage.getItem("openmrs:openmrsImplementerToolsConfigOpen")||"true"))||void 0===e||e}function p(){var e;return null!==(e=JSON.parse(localStorage.getItem("openmrs:isUIEditorEnabled")||"false"))&&void 0!==e&&e}n.subscribe((e=>{var t,o;e.isOpen!=i&&(t=e.isOpen,localStorage.setItem("openmrs:openmrsImplementerToolsAreOpen",JSON.stringify(t)),i=e.isOpen),e.isUIEditorEnabled!=l&&(o=e.isUIEditorEnabled,localStorage.setItem("openmrs:isUIEditorEnabled",JSON.stringify(o)),l=e.isUIEditorEnabled),e.isConfigToolbarOpen!=a&&(function(e){localStorage.setItem("openmrs:openmrsImplementerToolsConfigOpen",JSON.stringify(e))}(e.isConfigToolbarOpen),a=e.isConfigToolbarOpen)}))},7968:(e,t,o)=>{const n=o(1577).R;t.s=function(e){if(e||(e=1),!o.y.meta||!o.y.meta.url)throw console.error("__system_context__",o.y),Error("systemjs-webpack-interop was provided an unknown SystemJS context. Expected context.meta.url, but none was provided");o.p=n(o.y.meta.url,e)}},1577:(e,t,o)=>{t.R=function(e,t){var o=document.createElement("a");o.href=e;for(var n="/"===o.pathname[0]?o.pathname:"/"+o.pathname,r=0,s=n.length;r!==t&&s>=0;)"/"===n[--s]&&r++;if(r!==t)throw Error("systemjs-webpack-interop: rootDirectoryLevel ("+t+") is greater than the number of directories ("+r+") in the URL path "+e);var i=n.slice(0,s+1);return o.protocol+"//"+o.host+i};Number.isInteger},3979:(e,t,o)=>{var n={"./en.json":[3574,574],"./es.json":[8319,319]};function r(e){if(!o.o(n,e))return Promise.resolve().then((()=>{var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}));var t=n[e],r=t[0];return o.e(t[1]).then((()=>o(r)))}r.keys=()=>Object.keys(n),r.id=3979,e.exports=r},6512:e=>{"use strict";e.exports=o},5670:e=>{"use strict";e.exports=i},9297:e=>{"use strict";e.exports=n},2268:e=>{"use strict";e.exports=s},7789:e=>{"use strict";e.exports=r}},c={};function u(e){var t=c[e];if(void 0!==t)return t.exports;var o=c[e]={id:e,loaded:!1,exports:{}};return l[e].call(o.exports,o,o.exports,u),o.loaded=!0,o.exports}u.m=l,u.y=t,u.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return u.d(t,{a:t}),t},u.d=(e,t)=>{for(var o in t)u.o(t,o)&&!u.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},u.f={},u.e=e=>Promise.all(Object.keys(u.f).reduce(((t,o)=>(u.f[o](e,t),t)),[])),u.u=e=>e+".openmrs-esm-implementer-tools-app.js",u.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),u.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},a="@openmrs/esm-implementer-tools-app:",u.l=(t,o,n,r)=>{if(e[t])e[t].push(o);else{var s,i;if(void 0!==n)for(var l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var p=l[c];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==a+n){s=p;break}}s||(i=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,u.nc&&s.setAttribute("nonce",u.nc),s.setAttribute("data-webpack",a+n),s.src=t),e[t]=[o];var m=(o,n)=>{s.onerror=s.onload=null,clearTimeout(d);var r=e[t];if(delete e[t],s.parentNode&&s.parentNode.removeChild(s),r&&r.forEach((e=>e(n))),o)return o(n)},d=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),i&&document.head.appendChild(s)}},u.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),u.p="",(()=>{var e={179:0};u.f.j=(t,o)=>{var n=u.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else{var r=new Promise(((o,r)=>n=e[t]=[o,r]));o.push(n[2]=r);var s=u.p+u.u(t),i=new Error;u.l(s,(o=>{if(u.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var r=o&&("load"===o.type?"missing":o.type),s=o&&o.target&&o.target.src;i.message="Loading chunk "+t+" failed.\n("+r+": "+s+")",i.name="ChunkLoadError",i.type=r,i.request=s,n[1](i)}}),"chunk-"+t,t)}};var t=(t,o)=>{var n,r,[s,i,a]=o,l=0;if(s.some((t=>0!==e[t]))){for(n in i)u.o(i,n)&&(u.m[n]=i[n]);a&&a(u)}for(t&&t(o);l<s.length;l++)r=s[l],u.o(e,r)&&e[r]&&e[r][0](),e[s[l]]=0},o=self.webpackChunk_openmrs_esm_implementer_tools_app=self.webpackChunk_openmrs_esm_implementer_tools_app||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})();var p={};return(0,u(7968).s)(1),(()=>{"use strict";u.r(p),u.d(p,{ConfigEditButton:()=>r,frontendDependencies:()=>s,importTranslation:()=>a,setupOpenMRS:()=>i});var e=u(6512),t=u(9297),o=u(7704),n=u(7789);function r({configPath:e}){const{t:r}=(0,n.useTranslation)();return t.default.createElement("button",{onClick:()=>{o.wT.setState({configPathBeingEdited:e})}},r("edit","Edit"))}const s={"@openmrs/esm-framework":"^3.1.10-pre.546"};function i(){const t={featureName:"Implementer Tools",moduleName:"@openmrs/esm-implementer-tools-app"};return{pages:[{route:()=>!0,load:(0,e.getAsyncLifecycle)((()=>Promise.all([u.e(965),u.e(266),u.e(728)]).then(u.bind(u,7728))),t)}],extensions:[{id:"implementer-tools-button",slot:"top-nav-actions-slot",load:(0,e.getAsyncLifecycle)((()=>Promise.all([u.e(965),u.e(472)]).then(u.bind(u,7472))),t)}]}}const a=u(3979)})(),p})())}}}));
|
|
2
2
|
//# sourceMappingURL=openmrs-esm-implementer-tools-app.js.map
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"auxiliaryFiles": [
|
|
24
24
|
"openmrs-esm-implementer-tools-app.js.map"
|
|
25
25
|
],
|
|
26
|
-
"hash": "
|
|
26
|
+
"hash": "39113637249629063f4f",
|
|
27
27
|
"childrenByOrder": {}
|
|
28
28
|
},
|
|
29
29
|
{
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
"auxiliaryFiles": [
|
|
138
138
|
"728.openmrs-esm-implementer-tools-app.js.map"
|
|
139
139
|
],
|
|
140
|
-
"hash": "
|
|
140
|
+
"hash": "f6754cb4eb3e655131b3",
|
|
141
141
|
"childrenByOrder": {}
|
|
142
142
|
},
|
|
143
143
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmrs/esm-implementer-tools-app",
|
|
3
|
-
"version": "3.1.10-pre.
|
|
3
|
+
"version": "3.1.10-pre.546",
|
|
4
4
|
"license": "MPL-2.0",
|
|
5
5
|
"description": "The admin interface for OpenMRS Frontend",
|
|
6
6
|
"browser": "dist/openmrs-esm-implementer-tools-app.js",
|
|
@@ -51,12 +51,12 @@
|
|
|
51
51
|
"rxjs": "6.x"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@openmrs/esm-framework": "^3.1.10-pre.
|
|
54
|
+
"@openmrs/esm-framework": "^3.1.10-pre.546",
|
|
55
55
|
"@types/carbon-components-react": "^7.24.0",
|
|
56
56
|
"jest": "^26.6.3",
|
|
57
57
|
"react": "^16.13.1",
|
|
58
58
|
"react-dom": "^16.13.1",
|
|
59
59
|
"rxjs": "^6.5.3"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "e3974fa3a769bce5c2808507fc93367bbf8bf339"
|
|
62
62
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useState } from "react";
|
|
2
2
|
import Close16 from "@carbon/icons-react/es/close/16";
|
|
3
|
-
import { Button, ContentSwitcher, Switch } from "carbon-components-react";
|
|
4
3
|
import styles from "./popup.styles.css";
|
|
4
|
+
import { Button, ContentSwitcher, Switch } from "carbon-components-react";
|
|
5
5
|
import { useTranslation } from "react-i18next";
|
|
6
6
|
import { Configuration } from "../configuration/configuration.component";
|
|
7
7
|
import { ModuleDiagnostics } from "../backend-dependencies/backend-dependencies.component";
|