@openmrs/esm-implementer-tools-app 3.2.1-pre.950 → 3.2.1-pre.958

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.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"728.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":["\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./popup.styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./popup.styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./configuration.styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./configuration.styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./editable-value.styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./editable-value.styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./array-editor.styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./array-editor.styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","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","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./concept-search.styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./concept-search.styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","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 { useAssignedExtensionIds } from \"@openmrs/esm-framework\";\n\nexport function ExtensionSlotRemove({\n slotName,\n slotModuleName,\n value,\n setValue,\n}) {\n const assignedIds = useAssignedExtensionIds(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","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./object-editor.styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./object-editor.styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","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(), [\n \"config\",\n ...path,\n ]) as any\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","\n import API from \"!../../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./layout.styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./layout.styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","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","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./description.styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./description.styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","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","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./styles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./styles.css\";\n export default content && content.locals ? content.locals : undefined;\n","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___PmLfn {\\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___PmLfn > div {\\n flex: 0 1 auto;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__actionButton___bw4UK {\\n display: inline-flex;\\n align-items: center;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__downloadLink___AsiGA {\\n text-decoration: none;\\n color: inherit;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__mainContent___XP8jz {\\n background-color: #f0f0f0;\\n width: 100%;\\n display: flex;\\n overflow-y: auto;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__configTreePane___MS5lK {\\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___PSynV {\\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___MS5lK .bx--text-input-wrapper {\\n min-width: 8em;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__fullWidthAccordion___fgSQK .bx--accordion__content {\\n padding-right: 0;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__toggleToolbarButton___HVoZR {\\n position: absolute;\\n left: 97vw;\\n top: -2px;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__valueEditorInput___m4kpB {\\n width: 25em;\\n}\\n\\n.-esm-implementer-tools__configuration-styles__valueEditorButtons___YEmTK {\\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___PmLfn\",\n\t\"actionButton\": \"-esm-implementer-tools__configuration-styles__actionButton___bw4UK\",\n\t\"downloadLink\": \"-esm-implementer-tools__configuration-styles__downloadLink___AsiGA\",\n\t\"mainContent\": \"-esm-implementer-tools__configuration-styles__mainContent___XP8jz\",\n\t\"configTreePane\": \"-esm-implementer-tools__configuration-styles__configTreePane___MS5lK\",\n\t\"descriptionPane\": \"-esm-implementer-tools__configuration-styles__descriptionPane___PSynV\",\n\t\"fullWidthAccordion\": \"-esm-implementer-tools__configuration-styles__fullWidthAccordion___fgSQK\",\n\t\"toggleToolbarButton\": \"-esm-implementer-tools__configuration-styles__toggleToolbarButton___HVoZR\",\n\t\"valueEditorInput\": \"-esm-implementer-tools__configuration-styles__valueEditorInput___m4kpB\",\n\t\"valueEditorButtons\": \"-esm-implementer-tools__configuration-styles__valueEditorButtons___YEmTK\"\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___vFSux {\\n color: #303030;\\n margin-bottom: 1em;\\n}\\n\\n.-esm-implementer-tools__description-styles__description___tImhE {\\n margin-bottom: 0.5em;\\n}\\n\\n.-esm-implementer-tools__description-styles__source___izWkc {\\n font-style: italic;\\n margin-bottom: 0.5em;\\n}\\n\\n.-esm-implementer-tools__description-styles__value___j27KM {\\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___vFSux\",\n\t\"description\": \"-esm-implementer-tools__description-styles__description___tImhE\",\n\t\"source\": \"-esm-implementer-tools__description-styles__source___izWkc\",\n\t\"value\": \"-esm-implementer-tools__description-styles__value___j27KM\"\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___UJlL7 {\\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___LRtgO {\\n margin-left: 1em;\\n color: orange;\\n font-size: 11pt;\\n}\\n\\n.-esm-implementer-tools__editable-value-styles__overriddenValue___icPiK {\\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___UJlL7\",\n\t\"error\": \"-esm-implementer-tools__editable-value-styles__error___LRtgO\",\n\t\"overriddenValue\": \"-esm-implementer-tools__editable-value-styles__overriddenValue___icPiK\"\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___k5-Bh {\\n width: 12em;\\n}\\n\\n.-esm-implementer-tools__layout-styles__structuredList___CVvQe {\\n margin-bottom: 1em;\\n}\\n\\n.-esm-implementer-tools__layout-styles__structuredListRow___TmRkf {\\n border-left: 2px solid #c0c0c0;\\n}\\n\\n.-esm-implementer-tools__layout-styles__subtreeCell___cPsz3 {\\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___k5-Bh\",\n\t\"structuredList\": \"-esm-implementer-tools__layout-styles__structuredList___CVvQe\",\n\t\"structuredListRow\": \"-esm-implementer-tools__layout-styles__structuredListRow___TmRkf\",\n\t\"subtreeCell\": \"-esm-implementer-tools__layout-styles__subtreeCell___cPsz3\"\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___Yf1Ug .bx--structured-list-td {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.-esm-implementer-tools__array-editor-styles__arrayEditor___Yf1Ug .bx--structured-list {\\n margin-bottom: 0.25rem;\\n}\\n\\n.-esm-implementer-tools__array-editor-styles__buttonCell___jX-Z0 {\\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___Yf1Ug\",\n\t\"buttonCell\": \"-esm-implementer-tools__array-editor-styles__buttonCell___jX-Z0\"\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___IUw7H,\\n.-esm-implementer-tools__concept-search-styles__autocomplete___IUw7H > [role=\\\"combobox\\\"] {\\n display: flex;\\n position: relative;\\n width: 20em;\\n}\\n\\n.-esm-implementer-tools__concept-search-styles__autocomplete___IUw7H [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___IUw7H 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___IUw7H [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___IUw7H\"\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___cQoQ3 .bx--structured-list-td {\\n padding: 0.25rem 3rem 0.25rem 1rem;\\n}\\n\\n.-esm-implementer-tools__object-editor-styles__objectEditor___cQoQ3 .bx--structured-list {\\n margin-bottom: 0.25rem;\\n}\\n\\n.-esm-implementer-tools__object-editor-styles__buttonCell___RaMes {\\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___cQoQ3\",\n\t\"buttonCell\": \"-esm-implementer-tools__object-editor-styles__buttonCell___RaMes\"\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___KhcvE {\\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___AAcub {\\n margin-top: 40px;\\n width: 100%;\\n}\\n\\n.-esm-implementer-tools__popup-styles__tabs___lwUVZ {\\n width: 30em;\\n}\\n\\n.-esm-implementer-tools__popup-styles__topBar___YJXDa {\\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___7tyXg {\\n min-height: 3em;\\n padding: 0 1em;\\n}\\n\\n.-esm-implementer-tools__popup-styles__topBar___YJXDa .bx--content-switcher-btn:first-child,\\n.-esm-implementer-tools__popup-styles__topBar___YJXDa .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___KhcvE\",\n\t\"content\": \"-esm-implementer-tools__popup-styles__content___AAcub\",\n\t\"tabs\": \"-esm-implementer-tools__popup-styles__tabs___lwUVZ\",\n\t\"topBar\": \"-esm-implementer-tools__popup-styles__topBar___YJXDa\",\n\t\"closeButton\": \"-esm-implementer-tools__popup-styles__closeButton___7tyXg\"\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___0dSua {\\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___gwNsi {\\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___EKzCd {\\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___EKzCd: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___EKzCd:focus .-esm-implementer-tools__styles__extensionTooltip___QVban,\\n.-esm-implementer-tools__styles__extensionOverlay___EKzCd:hover .-esm-implementer-tools__styles__extensionTooltip___QVban {\\n visibility: visible;\\n opacity: 1;\\n}\\n\\n.-esm-implementer-tools__styles__extensionTooltip___QVban {\\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___VWj92 {\\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___0dSua\",\n\t\"slotName\": \"-esm-implementer-tools__styles__slotName___gwNsi\",\n\t\"extensionOverlay\": \"-esm-implementer-tools__styles__extensionOverlay___EKzCd\",\n\t\"extensionTooltip\": \"-esm-implementer-tools__styles__extensionTooltip___QVban\",\n\t\"exitButton\": \"-esm-implementer-tools__styles__exitButton___VWj92\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","undefined","ArrayEditor","element","valueArray","setValue","arrayKey","useMemo","uniqueId","Tile","className","styles","StructuredListWrapper","StructuredListBody","map","value","i","StructuredListRow","key","StructuredListCell","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","useAssignedExtensionIds","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","moduleName","config","_default","Subtree","leaf","children","onMouseEnter","onMouseLeave","ExtensionSlotsConfigTree","extensionsConfig","ExtensionSlotConfigTree","assignedExtensions","setAssignedExtensions","removeActiveItemDescriptionOnMouseLeave","thisPath","slots","instances","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","useExtensionStore","tempConfigStore","filterText","setFilterText","tempConfig","tempConfigObjUrl","Blob","combinedConfig","slot","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","NotificationActionButton","showModuleDiagnostics","openTabIndex","togglePopup","visibleTabIndex","ImplementerTools","UserHasAccess","privilege","___CSS_LOADER_EXPORT___","locals"],"sourceRoot":""}
@@ -1,10 +0,0 @@
1
- .popupTriggerButton {
2
- height: 25px !important;
3
- width: 25px !important;
4
- position: relative;
5
- border-radius: 2px;
6
- }
7
-
8
- .toolStyles {
9
- background-color: transparent;
10
- }