@openmrs/esm-implementer-tools-app 3.2.1-pre.1012 → 3.2.1-pre.1018
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/307.js +1 -1
- package/dist/307.js.map +1 -1
- package/dist/319.js +1 -1
- package/dist/371.js +2 -0
- package/dist/371.js.map +1 -0
- package/dist/494.js +2 -0
- package/dist/494.js.map +1 -0
- package/dist/574.js +1 -1
- package/dist/597.js +1 -1
- package/dist/597.js.map +1 -1
- package/dist/620.js +2 -0
- package/dist/620.js.map +1 -0
- package/dist/652.js +2 -0
- package/dist/652.js.map +1 -0
- package/dist/683.js +2 -0
- package/dist/683.js.map +1 -0
- package/dist/707.js +2 -0
- package/dist/707.js.map +1 -0
- package/dist/839.js +1 -1
- package/dist/839.js.map +1 -1
- package/dist/95.js +2 -0
- package/dist/95.js.map +1 -0
- package/dist/openmrs-esm-implementer-tools-app.js +1 -1
- package/dist/openmrs-esm-implementer-tools-app.js.buildmanifest.json +168 -70
- package/dist/openmrs-esm-implementer-tools-app.js.map +1 -1
- package/dist/openmrs-esm-implementer-tools-app.old +1 -1
- package/package.json +6 -4
- package/src/configuration/configuration.component.tsx +41 -22
- package/src/configuration/configuration.styles.scss +0 -12
- package/src/configuration/configuration.test.tsx +4 -4
- package/src/configuration/{config-subtree.component.tsx → interactive-editor/config-subtree.component.tsx} +1 -1
- package/src/configuration/{config-tree-for-module.component.tsx → interactive-editor/config-tree-for-module.component.tsx} +0 -0
- package/src/configuration/{config-tree.component.tsx → interactive-editor/config-tree.component.tsx} +2 -2
- package/src/configuration/interactive-editor/config-tree.styles.scss +3 -0
- package/src/configuration/{description.component.tsx → interactive-editor/description.component.tsx} +1 -1
- package/src/configuration/{description.styles.scss → interactive-editor/description.styles.scss} +1 -1
- package/src/configuration/interactive-editor/display-value.scss +5 -0
- package/src/configuration/{display-value.tsx → interactive-editor/display-value.tsx} +1 -1
- package/src/configuration/{editable-value.component.tsx → interactive-editor/editable-value.component.tsx} +1 -1
- package/src/configuration/{editable-value.styles.scss → interactive-editor/editable-value.styles.scss} +1 -1
- package/src/configuration/{extension-configure-tree.tsx → interactive-editor/extension-configure-tree.tsx} +0 -0
- package/src/configuration/{extension-slots-config-tree.tsx → interactive-editor/extension-slots-config-tree.tsx} +1 -1
- package/src/configuration/{layout → interactive-editor/layout}/layout.styles.css +0 -0
- package/src/configuration/{layout → interactive-editor/layout}/subtree.component.tsx +0 -0
- package/src/configuration/{layout → interactive-editor/layout}/tree-container.component.tsx +0 -0
- package/src/configuration/interactive-editor/value-editor.scss +5 -0
- package/src/configuration/{value-editor.tsx → interactive-editor/value-editor.tsx} +1 -1
- package/src/configuration/{value-editors → interactive-editor/value-editors}/array-editor.styles.css +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/array-editor.tsx +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/concept-search.resource.tsx +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/concept-search.styles.scss +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/concept-search.tsx +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/extension-slot-add.tsx +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/extension-slot-order.tsx +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/extension-slot-remove.tsx +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/object-editor.styles.css +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/object-editor.tsx +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/person-attribute-search.resource.tsx +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/person-attribute-search.tsx +0 -0
- package/src/configuration/{value-editors → interactive-editor/value-editors}/uuid-search.scss +1 -1
- package/src/configuration/{value-editors → interactive-editor/value-editors}/value-editor-field.tsx +0 -0
- package/src/configuration/json-editor/json-editor.component.tsx +67 -0
- package/src/configuration/json-editor/json-editor.scss +11 -0
- package/src/implementer-tools.component.tsx +4 -2
- package/src/store.ts +19 -0
- package/src/ui-editor/ui-editor.tsx +1 -1
- package/translations/en.json +3 -2
- package/translations/es.json +14 -7
- package/dist/237.js +0 -2
- package/dist/237.js.map +0 -1
- package/dist/664.js +0 -2
- package/dist/664.js.map +0 -1
- package/dist/865.js +0 -2
- package/dist/865.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register("@openmrs/esm-implementer-tools-app",[],(function(e,r){return{execute:function(){e((()=>{var e,t,n,o,a,i,s,l,u,p,f,c,d,h,m={6585:(e,r,t)=>{(0,t(7968).s)(1)},7968:(e,r,t)=>{const n=t(1577).R;r.s=function(e){if(e||(e=1),!t.y.meta||!t.y.meta.url)throw console.error("__system_context__",t.y),Error("systemjs-webpack-interop was provided an unknown SystemJS context. Expected context.meta.url, but none was provided");t.p=n(t.y.meta.url,e)}},8331:(e,r,t)=>{t(6585)},1577:(e,r,t)=>{r.R=function(e,r){var t=document.createElement("a");t.href=e;for(var n="/"===t.pathname[0]?t.pathname:"/"+t.pathname,o=0,a=n.length;o!==r&&a>=0;)"/"===n[--a]&&o++;if(o!==r)throw Error("systemjs-webpack-interop: rootDirectoryLevel ("+r+") is greater than the number of directories ("+o+") in the URL path "+e);var i=n.slice(0,a+1);return t.protocol+"//"+t.host+i};Number.isInteger},3055:(e,r,t)=>{"use strict";var n={app:()=>Promise.all([t.e(983),t.e(307)]).then((()=>()=>t(5307)))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),a=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>a})}},v={};function b(e){var r=v[e];if(void 0!==r)return r.exports;var t=v[e]={id:e,loaded:!1,exports:{}};return m[e].call(t.exports,t,t.exports,b),t.loaded=!0,t.exports}return b.m=m,b.c=v,b.y=r,b.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return b.d(r,{a:r}),r},b.d=(e,r)=>{for(var t in r)b.o(r,t)&&!b.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((r,t)=>(b.f[t](e,r),r)),[])),b.u=e=>e+".js",b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},t="@openmrs/esm-implementer-tools-app:",b.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var i,s;if(void 0!==o)for(var l=document.getElementsByTagName("script"),u=0;u<l.length;u++){var p=l[u];if(p.getAttribute("src")==r||p.getAttribute("data-webpack")==t+o){i=p;break}}i||(s=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,b.nc&&i.setAttribute("nonce",b.nc),i.setAttribute("data-webpack",t+o),i.src=r),e[r]=[n];var f=(t,n)=>{i.onerror=i.onload=null,clearTimeout(c);var o=e[r];if(delete e[r],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach((e=>e(n))),t)return t(n)},c=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),s&&document.head.appendChild(i)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{b.S={};var e={},r={};b.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];b.o(b.S,t)||(b.S[t]={});var a=b.S[t],i="@openmrs/esm-implementer-tools-app",s=(e,r,t,n)=>{var o=a[e]=a[e]||{},s=o[r];(!s||!s.loaded&&(!n!=!s.eager?n:i>s.from))&&(o[r]={get:t,from:i,eager:!!n})},l=[];return"default"===t&&(s("@openmrs/esm-framework","3.2.1-pre.
|
|
1
|
+
System.register("@openmrs/esm-implementer-tools-app",[],(function(e,r){return{execute:function(){e((()=>{var e,t,n,o,a,i,s,l,u,p,f,c,d,h,m={6585:(e,r,t)=>{(0,t(7968).s)(1)},7968:(e,r,t)=>{const n=t(1577).R;r.s=function(e){if(e||(e=1),!t.y.meta||!t.y.meta.url)throw console.error("__system_context__",t.y),Error("systemjs-webpack-interop was provided an unknown SystemJS context. Expected context.meta.url, but none was provided");t.p=n(t.y.meta.url,e)}},8331:(e,r,t)=>{t(6585)},1577:(e,r,t)=>{r.R=function(e,r){var t=document.createElement("a");t.href=e;for(var n="/"===t.pathname[0]?t.pathname:"/"+t.pathname,o=0,a=n.length;o!==r&&a>=0;)"/"===n[--a]&&o++;if(o!==r)throw Error("systemjs-webpack-interop: rootDirectoryLevel ("+r+") is greater than the number of directories ("+o+") in the URL path "+e);var i=n.slice(0,a+1);return t.protocol+"//"+t.host+i};Number.isInteger},3055:(e,r,t)=>{"use strict";var n={app:()=>Promise.all([t.e(983),t.e(307)]).then((()=>()=>t(5307)))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),a=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>a})}},v={};function b(e){var r=v[e];if(void 0!==r)return r.exports;var t=v[e]={id:e,loaded:!1,exports:{}};return m[e].call(t.exports,t,t.exports,b),t.loaded=!0,t.exports}return b.m=m,b.c=v,b.y=r,b.amdD=function(){throw new Error("define cannot be used indirect")},b.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return b.d(r,{a:r}),r},b.d=(e,r)=>{for(var t in r)b.o(r,t)&&!b.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},b.f={},b.e=e=>Promise.all(Object.keys(b.f).reduce(((r,t)=>(b.f[t](e,r),r)),[])),b.u=e=>e+".js",b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},t="@openmrs/esm-implementer-tools-app:",b.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var i,s;if(void 0!==o)for(var l=document.getElementsByTagName("script"),u=0;u<l.length;u++){var p=l[u];if(p.getAttribute("src")==r||p.getAttribute("data-webpack")==t+o){i=p;break}}i||(s=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,b.nc&&i.setAttribute("nonce",b.nc),i.setAttribute("data-webpack",t+o),i.src=r),e[r]=[n];var f=(t,n)=>{i.onerror=i.onload=null,clearTimeout(c);var o=e[r];if(delete e[r],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach((e=>e(n))),t)return t(n)},c=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),s&&document.head.appendChild(i)}},b.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{b.S={};var e={},r={};b.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];b.o(b.S,t)||(b.S[t]={});var a=b.S[t],i="@openmrs/esm-implementer-tools-app",s=(e,r,t,n)=>{var o=a[e]=a[e]||{},s=o[r];(!s||!s.loaded&&(!n!=!s.eager?n:i>s.from))&&(o[r]={get:t,from:i,eager:!!n})},l=[];return"default"===t&&(s("@openmrs/esm-framework","3.2.1-pre.1018",(()=>b.e(217).then((()=>()=>b(7217))))),s("carbon-components-react","7.31.0",(()=>Promise.all([b.e(652),b.e(597),b.e(983),b.e(412),b.e(199)]).then((()=>()=>b(9597))))),s("carbon-components","10.31.0",(()=>Promise.all([b.e(25),b.e(1)]).then((()=>()=>b(25))))),s("carbon-icons","7.0.7",(()=>b.e(860).then((()=>()=>b(4860))))),s("react-dom","16.14.0",(()=>Promise.all([b.e(788),b.e(983)]).then((()=>()=>b(2788))))),s("react-i18next","11.15.4",(()=>Promise.all([b.e(743),b.e(983)]).then((()=>()=>b(5743))))),s("react","16.14.0",(()=>b.e(735).then((()=>()=>b(2735)))))),e[t]=l.length?Promise.all(l).then((()=>e[t]=1)):1}}})(),b.p="",n=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},o=(e,r)=>{e=n(e),r=n(r);for(var t=0;;){if(t>=e.length)return t<r.length&&"u"!=(typeof r[t])[0];var o=e[t],a=(typeof o)[0];if(t>=r.length)return"u"==a;var i=r[t],s=(typeof i)[0];if(a!=s)return"o"==a&&"n"==s||"s"==s||"u"==a;if("o"!=a&&"u"!=a&&o!=i)return o<i;t++}},a=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,o=1;o<e.length;o++)n--,t+="u"==(typeof(s=e[o]))[0]?"-":(n>0?".":"")+(n=2,s);return t}var i=[];for(o=1;o<e.length;o++){var s=e[o];i.push(0===s?"not("+l()+")":1===s?"("+l()+" || "+l()+")":2===s?i.pop()+" "+i.pop():a(s))}return l();function l(){return i.pop().replace(/^\((.+)\)$/,"$1")}},i=(e,r)=>{if(0 in e){r=n(r);var t=e[0],o=t<0;o&&(t=-t-1);for(var a=0,s=1,l=!0;;s++,a++){var u,p,f=s<e.length?(typeof e[s])[0]:"";if(a>=r.length||"o"==(p=(typeof(u=r[a]))[0]))return!l||("u"==f?s>t&&!o:""==f!=o);if("u"==p){if(!l||"u"!=f)return!1}else if(l)if(f==p)if(s<=t){if(u!=e[s])return!1}else{if(o?u>e[s]:u<e[s])return!1;u!=e[s]&&(l=!1)}else if("s"!=f&&"n"!=f){if(o||s<=t)return!1;l=!1,s--}else{if(s<=t||p<f!=o)return!1;l=!1}else"s"!=f&&"n"!=f&&(l=!1,s--)}}var c=[],d=c.pop.bind(c);for(a=1;a<e.length;a++){var h=e[a];c.push(1==h?d()|d():2==h?d()&d():h?i(h,r):!d())}return!!d()},s=(e,r)=>{var t=e[r];return Object.keys(t).reduce(((e,r)=>!e||!t[e].loaded&&o(e,r)?r:e),0)},l=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+a(n)+")",u=(e,r,t,n)=>{var o=s(e,t);return i(n,o)||"undefined"!=typeof console&&console.warn&&console.warn(l(e,t,o,n)),p(e[t][o])},p=e=>(e.loaded=1,e.get()),f=(e=>function(r,t,n,o){var a=b.I(r);return a&&a.then?a.then(e.bind(e,r,b.S[r],t,n,o)):e(0,b.S[r],t,n,o)})(((e,r,t,n,o)=>r&&b.o(r,t)?u(r,0,t,n):o())),c={},d={6983:()=>f("default","react",[1,16],(()=>b.e(735).then((()=>()=>b(2735))))),2680:()=>f("default","react-i18next",[1,11],(()=>b.e(743).then((()=>()=>b(5743))))),7657:()=>f("default","@openmrs/esm-framework",[0,3,1,14,,"pre"],(()=>b.e(217).then((()=>()=>b(7217))))),5412:()=>f("default","react-dom",[1,16],(()=>b.e(788).then((()=>()=>b(2788))))),6240:()=>f("default","carbon-icons",[1,7],(()=>b.e(860).then((()=>()=>b(4860))))),7569:()=>f("default","carbon-components",[1,10],(()=>b.e(25).then((()=>()=>b(25))))),9784:()=>f("default","carbon-components-react",[1,7],(()=>Promise.all([b.e(652),b.e(597),b.e(412),b.e(199)]).then((()=>()=>b(9597)))))},h={199:[6240,7569],307:[2680,7657],412:[5412],784:[9784],983:[6983]},b.f.consumes=(e,r)=>{b.o(h,e)&&h[e].forEach((e=>{if(b.o(c,e))return r.push(c[e]);var t=r=>{c[e]=0,b.m[e]=t=>{delete b.c[e],t.exports=r()}},n=r=>{delete c[e],b.m[e]=t=>{throw delete b.c[e],r}};try{var o=d[e]();o.then?r.push(c[e]=o.then(t).catch(n)):t(o)}catch(e){n(e)}}))},(()=>{var e={346:0};b.f.j=(r,t)=>{var n=b.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else if(/^(199|412|784|983)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>n=e[r]=[t,o]));t.push(n[2]=o);var a=b.p+b.u(r),i=new Error;b.l(a,(t=>{if(b.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var n,o,[a,i,s]=t,l=0;if(a.some((r=>0!==e[r]))){for(n in i)b.o(i,n)&&(b.m[n]=i[n]);s&&s(b)}for(r&&r(t);l<a.length;l++)o=a[l],b.o(e,o)&&e[o]&&e[o][0](),e[o]=0},t=self.webpackChunk_openmrs_esm_implementer_tools_app=self.webpackChunk_openmrs_esm_implementer_tools_app||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),b(8331),b(3055)})())}}}));
|
|
2
2
|
//# sourceMappingURL=openmrs-esm-implementer-tools-app.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmrs/esm-implementer-tools-app",
|
|
3
|
-
"version": "3.2.1-pre.
|
|
3
|
+
"version": "3.2.1-pre.1018",
|
|
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,13 +51,15 @@
|
|
|
51
51
|
"rxjs": "6.x"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@openmrs/esm-framework": "^3.2.1-pre.
|
|
55
|
-
"@openmrs/webpack-config": "^3.2.1-pre.
|
|
54
|
+
"@openmrs/esm-framework": "^3.2.1-pre.1018",
|
|
55
|
+
"@openmrs/webpack-config": "^3.2.1-pre.1018",
|
|
56
56
|
"@types/carbon-components-react": "^7.24.0",
|
|
57
|
+
"ace-builds": "^1.4.14",
|
|
57
58
|
"jest": "^26.6.3",
|
|
58
59
|
"react": "^16.13.1",
|
|
60
|
+
"react-ace": "^9.5.0",
|
|
59
61
|
"react-dom": "^16.13.1",
|
|
60
62
|
"rxjs": "^6.5.3"
|
|
61
63
|
},
|
|
62
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "b174fc788f6f124ce4d8b65f64882bdb7099a3ce"
|
|
63
65
|
}
|
|
@@ -22,12 +22,16 @@ import {
|
|
|
22
22
|
} from "carbon-components-react";
|
|
23
23
|
import { useTranslation } from "react-i18next";
|
|
24
24
|
import { implementerToolsStore, ImplementerToolsStore } from "../store";
|
|
25
|
-
import { ConfigTree } from "./config-tree.component";
|
|
26
|
-
import { Description } from "./description.component";
|
|
25
|
+
import { ConfigTree } from "./interactive-editor/config-tree.component";
|
|
26
|
+
import { Description } from "./interactive-editor/description.component";
|
|
27
27
|
import cloneDeep from "lodash-es/cloneDeep";
|
|
28
28
|
import isEmpty from "lodash-es/isEmpty";
|
|
29
29
|
import styles from "./configuration.styles.scss";
|
|
30
30
|
|
|
31
|
+
const JsonEditor = React.lazy(
|
|
32
|
+
() => import("./json-editor/json-editor.component")
|
|
33
|
+
);
|
|
34
|
+
|
|
31
35
|
function isLeaf(configNode: Config) {
|
|
32
36
|
return (
|
|
33
37
|
configNode.hasOwnProperty("_default") ||
|
|
@@ -44,6 +48,9 @@ const actions = {
|
|
|
44
48
|
toggleIsToolbarOpen({ isConfigToolbarOpen }: ImplementerToolsStore) {
|
|
45
49
|
return { isConfigToolbarOpen: !isConfigToolbarOpen };
|
|
46
50
|
},
|
|
51
|
+
toggleIsJsonModeEnabled({ isJsonModeEnabled }: ImplementerToolsStore) {
|
|
52
|
+
return { isJsonModeEnabled: !isJsonModeEnabled };
|
|
53
|
+
},
|
|
47
54
|
};
|
|
48
55
|
|
|
49
56
|
const configActions = {
|
|
@@ -78,6 +85,8 @@ export const Configuration: React.FC<ConfigurationProps> = () => {
|
|
|
78
85
|
const {
|
|
79
86
|
isUIEditorEnabled,
|
|
80
87
|
toggleIsUIEditorEnabled,
|
|
88
|
+
isJsonModeEnabled,
|
|
89
|
+
toggleIsJsonModeEnabled,
|
|
81
90
|
isConfigToolbarOpen,
|
|
82
91
|
toggleIsToolbarOpen,
|
|
83
92
|
} = useStore(implementerToolsStore, actions);
|
|
@@ -134,6 +143,9 @@ export const Configuration: React.FC<ConfigurationProps> = () => {
|
|
|
134
143
|
: combinedConfig;
|
|
135
144
|
}, [filterText, combinedConfig]);
|
|
136
145
|
|
|
146
|
+
const mainContentHeight = isConfigToolbarOpen
|
|
147
|
+
? "calc(50vh - 7rem)"
|
|
148
|
+
: "calc(50vh - 2rem)";
|
|
137
149
|
return (
|
|
138
150
|
<>
|
|
139
151
|
<div className={styles.tools}>
|
|
@@ -153,6 +165,14 @@ export const Configuration: React.FC<ConfigurationProps> = () => {
|
|
|
153
165
|
onChange={(e) => setFilterText(e.target.value)}
|
|
154
166
|
/>
|
|
155
167
|
</Column>
|
|
168
|
+
<Column sm={1} md={1}>
|
|
169
|
+
<Toggle
|
|
170
|
+
id="jsonModeSwitch"
|
|
171
|
+
labelText={t("jsonEditor", "JSON Editor")}
|
|
172
|
+
onToggle={toggleIsJsonModeEnabled}
|
|
173
|
+
toggled={isJsonModeEnabled}
|
|
174
|
+
/>
|
|
175
|
+
</Column>
|
|
156
176
|
<Column sm={1} md={1}>
|
|
157
177
|
<Toggle
|
|
158
178
|
id="devConfigSwitch"
|
|
@@ -169,22 +189,22 @@ export const Configuration: React.FC<ConfigurationProps> = () => {
|
|
|
169
189
|
onToggle={toggleIsUIEditorEnabled}
|
|
170
190
|
/>
|
|
171
191
|
</Column>
|
|
172
|
-
<Column sm={1} md={
|
|
192
|
+
<Column sm={1} md={1} className={styles.actionButton}>
|
|
173
193
|
<Button
|
|
174
194
|
kind="danger"
|
|
175
|
-
iconDescription="Clear
|
|
195
|
+
iconDescription="Clear local config"
|
|
176
196
|
renderIcon={TrashCan16}
|
|
177
197
|
onClick={() => {
|
|
178
198
|
temporaryConfigStore.setState({ config: {} });
|
|
179
199
|
}}
|
|
180
200
|
>
|
|
181
|
-
{t("
|
|
201
|
+
{t("clearConfig", "Clear Local Config")}
|
|
182
202
|
</Button>
|
|
183
203
|
</Column>
|
|
184
|
-
<Column sm={1} md={
|
|
204
|
+
<Column sm={1} md={1} className={styles.actionButton}>
|
|
185
205
|
<Button
|
|
186
206
|
kind="secondary"
|
|
187
|
-
iconDescription="Download
|
|
207
|
+
iconDescription="Download config"
|
|
188
208
|
renderIcon={Download16}
|
|
189
209
|
>
|
|
190
210
|
<a
|
|
@@ -192,7 +212,7 @@ export const Configuration: React.FC<ConfigurationProps> = () => {
|
|
|
192
212
|
download="temporary_config.json"
|
|
193
213
|
href={window.URL.createObjectURL(tempConfigObjUrl)}
|
|
194
214
|
>
|
|
195
|
-
{t("
|
|
215
|
+
{t("downloadConfig", "Download Config")}
|
|
196
216
|
</a>
|
|
197
217
|
</Button>
|
|
198
218
|
</Column>
|
|
@@ -200,20 +220,19 @@ export const Configuration: React.FC<ConfigurationProps> = () => {
|
|
|
200
220
|
</Grid>
|
|
201
221
|
) : null}
|
|
202
222
|
</div>
|
|
203
|
-
<div
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
</div>
|
|
223
|
+
<div className={styles.mainContent} style={{ height: mainContentHeight }}>
|
|
224
|
+
{isJsonModeEnabled ? (
|
|
225
|
+
<JsonEditor height={mainContentHeight} />
|
|
226
|
+
) : (
|
|
227
|
+
<>
|
|
228
|
+
<div className={styles.configTreePane}>
|
|
229
|
+
<ConfigTree config={filteredConfig} />
|
|
230
|
+
</div>
|
|
231
|
+
<div className={styles.descriptionPane}>
|
|
232
|
+
<Description />
|
|
233
|
+
</div>
|
|
234
|
+
</>
|
|
235
|
+
)}
|
|
217
236
|
</div>
|
|
218
237
|
</>
|
|
219
238
|
);
|
|
@@ -51,20 +51,8 @@
|
|
|
51
51
|
min-width: 8em;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
.fullWidthAccordion :global(.bx--accordion__content) {
|
|
55
|
-
padding-right: 0;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
54
|
.toggleToolbarButton {
|
|
59
55
|
width: 100%;
|
|
60
56
|
display: flex;
|
|
61
57
|
justify-content: flex-end;
|
|
62
58
|
}
|
|
63
|
-
|
|
64
|
-
.valueEditorButtons {
|
|
65
|
-
margin-top: $spacing-03;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.smallListCell {
|
|
69
|
-
padding: $spacing-03;
|
|
70
|
-
}
|
|
@@ -11,11 +11,11 @@ import { Configuration } from "./configuration.component";
|
|
|
11
11
|
import {
|
|
12
12
|
performConceptSearch,
|
|
13
13
|
fetchConceptByUuid,
|
|
14
|
-
} from "./value-editors/concept-search.resource";
|
|
14
|
+
} from "./interactive-editor/value-editors/concept-search.resource";
|
|
15
15
|
|
|
16
16
|
const mockPerformConceptSearch = performConceptSearch as jest.Mock;
|
|
17
17
|
const mockFetchConceptByUuid = fetchConceptByUuid as jest.Mock;
|
|
18
|
-
jest.mock("./value-editors/concept-search.resource", () => ({
|
|
18
|
+
jest.mock("./interactive-editor/value-editors/concept-search.resource", () => ({
|
|
19
19
|
fetchConceptByUuid: jest.fn(),
|
|
20
20
|
performConceptSearch: jest.fn(),
|
|
21
21
|
}));
|
|
@@ -106,8 +106,8 @@ describe(`<Configuration />`, () => {
|
|
|
106
106
|
renderConfiguration();
|
|
107
107
|
await screen.findByText("Dev Config");
|
|
108
108
|
screen.getByText("UI Editor");
|
|
109
|
-
screen.getByText("Clear
|
|
110
|
-
screen.getByText("Download
|
|
109
|
+
screen.getByText("Clear Local Config");
|
|
110
|
+
screen.getByText("Download Config");
|
|
111
111
|
});
|
|
112
112
|
|
|
113
113
|
it("displays correct boolean value and editor", async () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import EditableValue from "./editable-value.component";
|
|
3
|
-
import { implementerToolsStore } from "
|
|
3
|
+
import { implementerToolsStore } from "../../store";
|
|
4
4
|
import isEqual from "lodash-es/isEqual";
|
|
5
5
|
import { Subtree } from "./layout/subtree.component";
|
|
6
6
|
|
|
File without changes
|
package/src/configuration/{config-tree.component.tsx → interactive-editor/config-tree.component.tsx}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import styles from "./
|
|
2
|
+
import styles from "./config-tree.styles.scss";
|
|
3
3
|
import { Accordion, AccordionItem } from "carbon-components-react";
|
|
4
4
|
import { ConfigTreeForModule } from "./config-tree-for-module.component";
|
|
5
5
|
|
|
@@ -17,7 +17,7 @@ export function ConfigTree({ config }: ConfigTreeProps) {
|
|
|
17
17
|
const moduleConfig = config[moduleName];
|
|
18
18
|
return Object.keys(moduleConfig).length ? (
|
|
19
19
|
<AccordionItem
|
|
20
|
-
title={<h6
|
|
20
|
+
title={<h6>{moduleName}</h6>}
|
|
21
21
|
className={styles.fullWidthAccordion}
|
|
22
22
|
key={`accordion-${moduleName}`}
|
|
23
23
|
>
|
package/src/configuration/{description.component.tsx → interactive-editor/description.component.tsx}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import styles from "./description.styles.scss";
|
|
3
3
|
import { useStore } from "@openmrs/esm-framework";
|
|
4
|
-
import { implementerToolsStore } from "
|
|
4
|
+
import { implementerToolsStore } from "../../store";
|
|
5
5
|
import { useTranslation } from "react-i18next";
|
|
6
6
|
|
|
7
7
|
export function Description() {
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
temporaryConfigStore,
|
|
15
15
|
} from "@openmrs/esm-framework";
|
|
16
16
|
import { ValueEditor, CustomValueType } from "./value-editor";
|
|
17
|
-
import { implementerToolsStore, ImplementerToolsStore } from "
|
|
17
|
+
import { implementerToolsStore, ImplementerToolsStore } from "../../store";
|
|
18
18
|
import { DisplayValue } from "./display-value";
|
|
19
19
|
import { useTranslation } from "react-i18next";
|
|
20
20
|
|
|
File without changes
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
} from "@openmrs/esm-framework";
|
|
8
8
|
import { ExtensionConfigureTree } from "./extension-configure-tree";
|
|
9
9
|
import { Subtree } from "./layout/subtree.component";
|
|
10
|
-
import { implementerToolsStore } from "
|
|
10
|
+
import { implementerToolsStore } from "../../store";
|
|
11
11
|
|
|
12
12
|
interface ExtensionSlotsConfigTreeProps {
|
|
13
13
|
extensionsConfig: { [key: string]: any };
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -5,7 +5,7 @@ import { Button } from "carbon-components-react";
|
|
|
5
5
|
import { Type } from "@openmrs/esm-framework";
|
|
6
6
|
import { ConfigValueDescriptor } from "./editable-value.component";
|
|
7
7
|
import { ValueEditorField } from "./value-editors/value-editor-field";
|
|
8
|
-
import styles from "./
|
|
8
|
+
import styles from "./value-editor.scss";
|
|
9
9
|
import { useTranslation } from "react-i18next";
|
|
10
10
|
|
|
11
11
|
export type CustomValueType = "add" | "remove" | "order" | "configure";
|
package/src/configuration/{value-editors → interactive-editor/value-editors}/array-editor.styles.css
RENAMED
|
File without changes
|
package/src/configuration/{value-editors → interactive-editor/value-editors}/array-editor.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/configuration/{value-editors → interactive-editor/value-editors}/concept-search.tsx
RENAMED
|
File without changes
|
package/src/configuration/{value-editors → interactive-editor/value-editors}/extension-slot-add.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/configuration/{value-editors → interactive-editor/value-editors}/object-editor.tsx
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/src/configuration/{value-editors → interactive-editor/value-editors}/value-editor-field.tsx
RENAMED
|
File without changes
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { temporaryConfigStore, useStore } from "@openmrs/esm-framework";
|
|
3
|
+
import AceEditor from "react-ace";
|
|
4
|
+
import style from "./json-editor.scss";
|
|
5
|
+
|
|
6
|
+
import "ace-builds/src-noconflict/mode-java";
|
|
7
|
+
import "ace-builds/src-noconflict/theme-github";
|
|
8
|
+
import { Button } from "carbon-components-react";
|
|
9
|
+
|
|
10
|
+
export interface JsonEditorProps {
|
|
11
|
+
/** A CSS value */
|
|
12
|
+
height: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default function JsonEditor({ height }: JsonEditorProps) {
|
|
16
|
+
const temporaryConfig = useStore(temporaryConfigStore);
|
|
17
|
+
const [editorValue, setEditorValue] = useState("");
|
|
18
|
+
const [error, setError] = useState("");
|
|
19
|
+
const [key, setKey] = useState(`ace-editor`);
|
|
20
|
+
|
|
21
|
+
const updateTemporaryConfig = useCallback(() => {
|
|
22
|
+
let config;
|
|
23
|
+
try {
|
|
24
|
+
config = JSON.parse(editorValue);
|
|
25
|
+
} catch (e) {
|
|
26
|
+
setError(e.message);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
setError("");
|
|
30
|
+
temporaryConfigStore.setState({ config });
|
|
31
|
+
}, [editorValue, temporaryConfigStore]);
|
|
32
|
+
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (editorValue != JSON.stringify(temporaryConfig.config, null, 2)) {
|
|
35
|
+
setKey((k) => `${k}+`); // just keep appendingplus signs
|
|
36
|
+
}
|
|
37
|
+
}, [temporaryConfig.config]);
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<div>
|
|
41
|
+
<AceEditor
|
|
42
|
+
key={key}
|
|
43
|
+
mode="json"
|
|
44
|
+
theme="github"
|
|
45
|
+
defaultValue={JSON.stringify(temporaryConfig.config, null, 2)}
|
|
46
|
+
tabSize={2}
|
|
47
|
+
fontSize="12pt"
|
|
48
|
+
width="100vw"
|
|
49
|
+
height={`calc(${height} - 3rem)`}
|
|
50
|
+
onChange={(v) => {
|
|
51
|
+
setEditorValue(v);
|
|
52
|
+
}}
|
|
53
|
+
/>
|
|
54
|
+
<div className={style.toolbar}>
|
|
55
|
+
<Button type="submit" onClick={updateTemporaryConfig}>
|
|
56
|
+
Update
|
|
57
|
+
</Button>
|
|
58
|
+
<div
|
|
59
|
+
className={style.alert}
|
|
60
|
+
style={{ backgroundColor: error ? "#d03030" : "inherit" }}
|
|
61
|
+
>
|
|
62
|
+
{error}
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React, { useState, useEffect } from "react";
|
|
2
|
-
import Popup from "./popup/popup.component";
|
|
3
2
|
import { NotificationActionButton } from "carbon-components-react";
|
|
4
3
|
import {
|
|
5
4
|
showNotification,
|
|
@@ -11,11 +10,14 @@ import {
|
|
|
11
10
|
showModuleDiagnostics,
|
|
12
11
|
togglePopup,
|
|
13
12
|
} from "./store";
|
|
14
|
-
|
|
13
|
+
|
|
15
14
|
import { useBackendDependencies } from "./backend-dependencies/useBackendDependencies";
|
|
16
15
|
import { hasInvalidDependencies } from "./backend-dependencies/openmrs-backend-dependencies";
|
|
17
16
|
import { useTranslation } from "react-i18next";
|
|
18
17
|
|
|
18
|
+
const Popup = React.lazy(() => import("./popup/popup.component"));
|
|
19
|
+
const UiEditor = React.lazy(() => import("./ui-editor/ui-editor"));
|
|
20
|
+
|
|
19
21
|
function PopupHandler() {
|
|
20
22
|
const frontendModules = useBackendDependencies();
|
|
21
23
|
const [shouldShowNotification, setShouldShowNotification] = useState(false);
|
package/src/store.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface ImplementerToolsStore {
|
|
|
9
9
|
openTabIndex: number;
|
|
10
10
|
isConfigToolbarOpen: boolean;
|
|
11
11
|
isUIEditorEnabled: boolean;
|
|
12
|
+
isJsonModeEnabled: boolean;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export interface ActiveItemDescription {
|
|
@@ -27,6 +28,7 @@ export const implementerToolsStore: Store<ImplementerToolsStore> =
|
|
|
27
28
|
openTabIndex: 0,
|
|
28
29
|
isConfigToolbarOpen: getIsConfigToolbarOpen(),
|
|
29
30
|
isUIEditorEnabled: getIsUIEditorEnabled(),
|
|
31
|
+
isJsonModeEnabled: getIsJsonModeEnabled(),
|
|
30
32
|
});
|
|
31
33
|
|
|
32
34
|
export const setHasAlert = implementerToolsStore.action(
|
|
@@ -52,6 +54,7 @@ export const showModuleDiagnostics = implementerToolsStore.action((state) => ({
|
|
|
52
54
|
let lastValueOfIsOpen = getIsImplementerToolsOpen();
|
|
53
55
|
let lastValueOfConfigToolbarOpen = getIsConfigToolbarOpen();
|
|
54
56
|
let lastValueOfIsUiEditorEnabled = getIsUIEditorEnabled();
|
|
57
|
+
let lastValueOfIsJsonModeEnabled = getIsJsonModeEnabled();
|
|
55
58
|
|
|
56
59
|
implementerToolsStore.subscribe((state) => {
|
|
57
60
|
if (state.isOpen != lastValueOfIsOpen) {
|
|
@@ -66,6 +69,10 @@ implementerToolsStore.subscribe((state) => {
|
|
|
66
69
|
setIsConfigToolbarOpen(state.isConfigToolbarOpen);
|
|
67
70
|
lastValueOfConfigToolbarOpen = state.isConfigToolbarOpen;
|
|
68
71
|
}
|
|
72
|
+
if (state.isJsonModeEnabled != lastValueOfIsJsonModeEnabled) {
|
|
73
|
+
setIsJsonModeEnabled(state.isJsonModeEnabled);
|
|
74
|
+
lastValueOfIsJsonModeEnabled = state.isJsonModeEnabled;
|
|
75
|
+
}
|
|
69
76
|
});
|
|
70
77
|
|
|
71
78
|
function getIsImplementerToolsOpen(): boolean {
|
|
@@ -109,3 +116,15 @@ function getIsUIEditorEnabled(): boolean {
|
|
|
109
116
|
function setIsUIEditorEnabled(enabled: boolean) {
|
|
110
117
|
localStorage.setItem("openmrs:isUIEditorEnabled", JSON.stringify(enabled));
|
|
111
118
|
}
|
|
119
|
+
|
|
120
|
+
function getIsJsonModeEnabled(): boolean {
|
|
121
|
+
return (
|
|
122
|
+
JSON.parse(
|
|
123
|
+
localStorage.getItem("openmrs:getIsJsonModeEnabled") || "false"
|
|
124
|
+
) ?? false
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function setIsJsonModeEnabled(enabled: boolean) {
|
|
129
|
+
localStorage.setItem("openmrs:getIsJsonModeEnabled", JSON.stringify(enabled));
|
|
130
|
+
}
|
|
@@ -7,7 +7,7 @@ import { Portal } from "./portal";
|
|
|
7
7
|
import { ExtensionOverlay } from "./extension-overlay.component";
|
|
8
8
|
import { ImplementerToolsStore, implementerToolsStore } from "../store";
|
|
9
9
|
|
|
10
|
-
export function UiEditor() {
|
|
10
|
+
export default function UiEditor() {
|
|
11
11
|
const { slots, extensions } = useExtensionInternalStore();
|
|
12
12
|
const { isOpen: implementerToolsIsOpen } = useStore(implementerToolsStore);
|
|
13
13
|
|
package/translations/en.json
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"activeItemSourceText": "The current value comes from ",
|
|
3
3
|
"backendModules": "Backend Modules",
|
|
4
|
-
"
|
|
4
|
+
"clearConfig": "Clear Local Config",
|
|
5
5
|
"configuration": "Configuration",
|
|
6
6
|
"devConfig": "Dev Config",
|
|
7
|
-
"
|
|
7
|
+
"downloadConfig": "Download Config",
|
|
8
8
|
"edit": "Edit",
|
|
9
9
|
"editValueButtonText": "Edit",
|
|
10
10
|
"installedVersion": "Installed Version",
|
|
11
11
|
"itemDescriptionSourceDefaultText": "The current value is the default.",
|
|
12
|
+
"jsonEditor": "JSON Editor",
|
|
12
13
|
"missing": "Missing",
|
|
13
14
|
"moduleName": "Module Name",
|
|
14
15
|
"requiredVersion": "Required Version",
|
package/translations/es.json
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
2
|
+
"activeItemSourceText": "El valor coriente viene de ",
|
|
3
|
+
"backendModules": "Modulos backend",
|
|
4
|
+
"clearConfig": "Borrar config",
|
|
4
5
|
"configuration": "Configuración",
|
|
5
|
-
"devConfig": "
|
|
6
|
-
"
|
|
6
|
+
"devConfig": "Valores defectos experimentales",
|
|
7
|
+
"downloadConfig": "Descargar config",
|
|
7
8
|
"edit": "Editar",
|
|
9
|
+
"editValueButtonText": "Editar",
|
|
8
10
|
"installedVersion": "Versión instalada",
|
|
9
|
-
"
|
|
11
|
+
"itemDescriptionSourceDefaultText": "El valor coriente es lo predeterminado.",
|
|
12
|
+
"jsonEditor": "Editar como JSON",
|
|
13
|
+
"missing": "Falta",
|
|
14
|
+
"moduleName": "Nombre de modulo",
|
|
10
15
|
"requiredVersion": "Versión requerida",
|
|
11
|
-
"
|
|
12
|
-
"
|
|
16
|
+
"resetToDefaultValueButtonText": "Volver al valor predeterminado",
|
|
17
|
+
"uiEditor": "Editór visual",
|
|
18
|
+
"value": "Valor",
|
|
19
|
+
"view": "Vista"
|
|
13
20
|
}
|
package/dist/237.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_openmrs_esm_implementer_tools_app=self.webpackChunk_openmrs_esm_implementer_tools_app||[]).push([[237],{7024:(e,t,r)=>{"use strict";function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?n(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}r.d(t,{u9:()=>l});var c=["width","height","viewBox"],p=["tabindex"],s={focusable:"false",preserveAspectRatio:"xMidYMid meet"};function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.width,r=e.height,n=e.viewBox,i=void 0===n?"0 0 ".concat(t," ").concat(r):n,l=a(e,c),u=l.tabindex,b=a(l,p),f=o(o(o({},s),b),{},{width:t,height:r,viewBox:i});return f["aria-label"]||f["aria-labelledby"]||f.title?(f.role="img",null!=u&&(f.focusable="true",f.tabindex=u)):f["aria-hidden"]=!0,f}},459:(e,t,r)=>{"use strict";var n=r(5704);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function e(e,t,r,o,i,a){if(a!==n){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function t(){return e}e.isRequired=e;var r={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:o};return r.PropTypes=r,r}},216:(e,t,r)=>{e.exports=r(459)()},5704:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"}}]);
|
|
2
|
-
//# sourceMappingURL=237.js.map
|