Mercurial > repos > fubar > jbrowse2
view x/static/js/3614.af493134.chunk.js.map @ 125:49f3d3878413 draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit 5ea1f9c1eef1de76232e69aa6d34cda77d90d566
author | fubar |
---|---|
date | Sat, 05 Oct 2024 23:58:05 +0000 |
parents | |
children |
line wrap: on
line source
{"version":3,"file":"static/js/3614.af493134.chunk.js","mappings":"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","sources":["../../../plugins/config/src/ConfigurationEditorWidget/components/StringArrayEditor.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/CallbackEditor.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/ColorEditor.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/StringArrayMapEditor.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/ConfigurationTextField.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/NumberEditor.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/NumberMapEditor.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/BooleanEditor.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/useSlotEditorStyles.ts","../../../plugins/config/src/ConfigurationEditorWidget/components/SlotEditor.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/TypeSelector.tsx","../../../plugins/config/src/ConfigurationEditorWidget/components/ConfigurationEditor.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { observer } from 'mobx-react'\n\nimport {\n Button,\n FormHelperText,\n IconButton,\n InputAdornment,\n InputLabel,\n List,\n ListItem,\n TextField,\n} from '@mui/material'\n\n// icons\nimport DeleteIcon from '@mui/icons-material/Delete'\n\nconst StringArrayEditor = observer(function ({\n slot,\n}: {\n slot: {\n name: string\n value: string[]\n setAtIndex: (arg: number, arg2: string) => void\n removeAtIndex: (arg: number) => void\n add: (arg: string) => void\n description: string\n }\n}) {\n const [value, setValue] = useState('')\n const [addNew, setAddNew] = useState(false)\n return (\n <>\n {slot.name ? <InputLabel>{slot.name}</InputLabel> : null}\n <List disablePadding>\n {slot.value.map((val, idx) => (\n <ListItem key={`${JSON.stringify(val)}-${idx}`} disableGutters>\n <TextField\n value={val}\n onChange={evt => {\n slot.setAtIndex(idx, evt.target.value)\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => {\n slot.removeAtIndex(idx)\n }}\n >\n <DeleteIcon />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n </ListItem>\n ))}\n\n {addNew ? (\n <ListItem disableGutters>\n <TextField\n value={value}\n placeholder=\"add new\"\n onChange={event => {\n setValue(event.target.value)\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <>\n <Button\n color=\"primary\"\n variant=\"contained\"\n style={{ margin: 2 }}\n data-testid={`stringArrayAdd-${slot.name}`}\n onClick={() => {\n setAddNew(false)\n slot.add(value)\n setValue('')\n }}\n >\n OK\n </Button>\n <Button\n color=\"primary\"\n variant=\"contained\"\n style={{ margin: 2 }}\n onClick={() => {\n setAddNew(false)\n setValue('')\n }}\n >\n Cancel\n </Button>\n </>\n </InputAdornment>\n ),\n }}\n />\n </ListItem>\n ) : null}\n <Button\n color=\"primary\"\n variant=\"contained\"\n style={{ margin: 4 }}\n disabled={addNew}\n onClick={() => {\n setAddNew(true)\n }}\n >\n Add item\n </Button>\n </List>\n <FormHelperText>{slot.description}</FormHelperText>\n </>\n )\n})\n\nexport default StringArrayEditor\n","import React, { useEffect, useState } from 'react'\nimport { Tooltip, IconButton, TextField } from '@mui/material'\nimport { useDebounce } from '@jbrowse/core/util'\nimport { stringToJexlExpression } from '@jbrowse/core/util/jexlStrings'\nimport { getEnv } from 'mobx-state-tree'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\n// icons\nimport HelpIcon from '@mui/icons-material/Help'\n\n// Optimize by using system default fonts:\n// https://css-tricks.com/snippets/css/font-stacks/\nconst fontFamily =\n 'Consolas, \"Andale Mono WT\", \"Andale Mono\", \"Lucida Console\", \"Lucida Sans Typewriter\", \"DejaVu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Liberation Mono\", \"Nimbus Mono L\", Monaco, \"Courier New\", Courier, monospace'\n\nconst useStyles = makeStyles()(theme => ({\n callbackEditor: {\n marginTop: '16px',\n borderBottom: `1px solid ${theme.palette.divider}`,\n width: '100%',\n fontFamily,\n },\n textAreaFont: {\n fontFamily,\n },\n callbackContainer: {\n width: '100%',\n overflowX: 'auto',\n },\n\n error: {\n color: 'red',\n fontSize: '0.8em',\n },\n}))\n\nconst CallbackEditor = observer(function ({\n slot,\n}: {\n slot: {\n set: (arg: string) => void\n description: string\n name: string\n value: string\n contextVariable: string\n }\n}) {\n const { classes } = useStyles()\n\n const [code, setCode] = useState(slot.value)\n const [error, setCodeError] = useState<unknown>()\n const debouncedCode = useDebounce(code, 400)\n\n useEffect(() => {\n try {\n const jexlDebouncedCode = debouncedCode.startsWith('jexl:')\n ? debouncedCode\n : `jexl:${debouncedCode}`\n\n if (jexlDebouncedCode === 'jexl:') {\n throw new Error('Empty jexl expression is not valid')\n }\n stringToJexlExpression(\n jexlDebouncedCode,\n getEnv(slot).pluginManager?.jexl,\n )\n slot.set(jexlDebouncedCode)\n setCodeError(undefined)\n } catch (e) {\n console.error({ e })\n setCodeError(e)\n }\n }, [debouncedCode, slot])\n\n // if default value is a callback, will have to remove jexl:\n // do this last\n return (\n <>\n {error ? <p className={classes.error}>{`${error}`}</p> : null}\n <div className={classes.callbackContainer}>\n <TextField\n multiline\n className={classes.callbackEditor}\n value={code.startsWith('jexl:') ? code.split('jexl:')[1] : code}\n onChange={event => {\n setCode(event.target.value)\n }}\n style={{ background: error ? '#fdd' : undefined }}\n InputProps={{\n classes: {\n input: classes.textAreaFont,\n },\n }}\n />\n\n <p>{slot.description}</p>\n <Tooltip\n title={\n <div>\n Callbacks are written in Jexl format. Click to learn more.\n <br /> Names of available context items: {slot.contextVariable}\n </div>\n }\n arrow\n >\n <IconButton\n color=\"primary\"\n onClick={() => {\n const newWindow = window.open(\n 'https://github.com/TomFrost/Jexl',\n '_blank',\n 'noopener,noreferrer',\n )\n if (newWindow) {\n newWindow.opener = null\n }\n }}\n >\n <HelpIcon />\n </IconButton>\n </Tooltip>\n </div>\n </>\n )\n})\n\nexport default CallbackEditor\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react'\nimport { TextField } from '@mui/material'\nimport ColorPicker from '@jbrowse/core/ui/ColorPicker'\n\nexport const ColorSlot = (props: {\n value: string\n label?: string\n TextFieldProps?: {\n helperText: string\n fullWidth: boolean\n }\n onChange: (arg: string) => void\n}) => {\n const { value = '#000', label = '', TextFieldProps = {}, onChange } = props\n const [displayed, setDisplayed] = useState(false)\n\n return (\n <div style={{ display: 'flex' }}>\n <TextField\n value={value}\n label={label}\n onClick={() => {\n setDisplayed(!displayed)\n }}\n onChange={event => {\n onChange(event.target.value)\n }}\n {...TextFieldProps}\n />\n <div style={{ marginTop: 10 }}>\n <React.Suspense fallback={null}>\n <ColorPicker\n color={value}\n onChange={event => {\n onChange(event)\n }}\n />\n </React.Suspense>\n </div>\n </div>\n )\n}\n\nconst ColorEditor = observer(function (props: {\n slot: {\n name: string\n value: string\n description: string\n set: (arg: string) => void\n }\n}) {\n const { slot } = props\n return (\n <ColorSlot\n label={slot.name}\n value={slot.value}\n onChange={color => {\n slot.set(color)\n }}\n TextFieldProps={{\n helperText: slot.description,\n fullWidth: true,\n }}\n />\n )\n})\n\nexport default ColorEditor\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react'\n\nimport {\n Card,\n CardContent,\n CardHeader,\n FormHelperText,\n IconButton,\n InputAdornment,\n InputLabel,\n TextField,\n} from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\n\n// icons\nimport DeleteIcon from '@mui/icons-material/Delete'\nimport AddIcon from '@mui/icons-material/Add'\n\n// locals\nimport StringArrayEditor from './StringArrayEditor'\n\nconst useStyles = makeStyles()(theme => ({\n card: {\n marginTop: theme.spacing(1),\n },\n}))\n\nconst StringArrayMapEditor = observer(function ({\n slot,\n}: {\n slot: {\n name: string\n value: Map<string, string[]>\n remove: (key: string) => void\n add: (key: string, val: string[]) => void\n description: string\n setAtKeyIndex: (key: string, idx: number, val: string) => void\n removeAtKeyIndex: (key: string, idx: number) => void\n addToKey: (key: string, val: string) => void\n }\n}) {\n const { classes } = useStyles()\n const [value, setValue] = useState('')\n return (\n <>\n <InputLabel>{slot.name}</InputLabel>\n {[...slot.value].map(([key, val]) => (\n <Card raised key={key} className={classes.card}>\n <CardHeader\n title={key}\n action={\n <IconButton\n onClick={() => {\n slot.remove(key)\n }}\n >\n <DeleteIcon />\n </IconButton>\n }\n />\n <CardContent>\n <StringArrayEditor\n slot={{\n name: slot.name,\n value: val,\n description: `Values associated with entry ${key}`,\n setAtIndex: (idx: number, val: string) => {\n slot.setAtKeyIndex(key, idx, val)\n },\n removeAtIndex: (idx: number) => {\n slot.removeAtKeyIndex(key, idx)\n },\n add: (val: string) => {\n slot.addToKey(key, val)\n },\n }}\n />\n </CardContent>\n </Card>\n ))}\n <Card raised className={classes.card}>\n <CardHeader\n disableTypography\n title={\n <TextField\n fullWidth\n value={value}\n placeholder=\"add new\"\n onChange={event => {\n setValue(event.target.value)\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n disabled={value === ''}\n onClick={() => {\n slot.add(value, [])\n setValue('')\n }}\n >\n <AddIcon />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n }\n />\n </Card>\n <FormHelperText>{slot.description}</FormHelperText>\n </>\n )\n})\n\nexport default StringArrayMapEditor\n","import React from 'react'\nimport { TextField, TextFieldProps } from '@mui/material'\nimport { SanitizedHTML } from '@jbrowse/core/ui'\n\n// adds ability to have html in helperText. note that FormHelperTextProps is\n// div because the default is p which does not like div children\nexport default function ConfigurationTextField(\n props: { helperText?: string } & TextFieldProps,\n) {\n const { helperText } = props\n return (\n <TextField\n {...props}\n helperText={<SanitizedHTML html={helperText || ''} />}\n FormHelperTextProps={{\n component: 'div',\n }}\n fullWidth\n />\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { observer } from 'mobx-react'\nimport ConfigurationTextField from './ConfigurationTextField'\n\nconst NumberEditor = observer(function ({\n slot,\n}: {\n slot: {\n name?: string\n value: string\n description?: string\n set: (val: number) => void\n reset?: () => void\n }\n}) {\n const [val, setVal] = useState(slot.value)\n useEffect(() => {\n const num = Number.parseFloat(val)\n if (Number.isNaN(num)) {\n slot.reset?.()\n } else {\n slot.set(num)\n }\n }, [slot, val])\n return (\n <ConfigurationTextField\n label={slot.name}\n helperText={slot.description}\n value={val}\n type=\"number\"\n onChange={evt => {\n setVal(evt.target.value)\n }}\n />\n )\n})\n\nexport default NumberEditor\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react'\n\nimport {\n Card,\n CardContent,\n CardHeader,\n FormHelperText,\n IconButton,\n InputAdornment,\n InputLabel,\n TextField,\n} from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\n\n// icons\nimport DeleteIcon from '@mui/icons-material/Delete'\nimport AddIcon from '@mui/icons-material/Add'\nimport NumberEditor from './NumberEditor'\n\nconst useStyles = makeStyles()(theme => ({\n card: {\n marginTop: theme.spacing(1),\n },\n}))\n\nconst NumberMapEditor = observer(function ({\n slot,\n}: {\n slot: {\n name: string\n value: Map<string, string>\n remove: (key: string) => void\n add: (key: string, val: number) => void\n description: string\n }\n}) {\n const { classes } = useStyles()\n const [value, setValue] = useState('')\n return (\n <>\n <InputLabel>{slot.name}</InputLabel>\n {[...slot.value].map(([key, val]) => (\n <Card raised key={key} className={classes.card}>\n <CardHeader\n title={key}\n action={\n <IconButton\n onClick={() => {\n slot.remove(key)\n }}\n >\n <DeleteIcon />\n </IconButton>\n }\n />\n <CardContent>\n <NumberEditor\n slot={{\n value: val,\n set: (val: number) => {\n slot.add(key, val)\n },\n }}\n />\n </CardContent>\n </Card>\n ))}\n <Card raised className={classes.card}>\n <CardHeader\n disableTypography\n title={\n <TextField\n fullWidth\n value={value}\n placeholder=\"add new\"\n onChange={event => {\n setValue(event.target.value)\n }}\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton\n disabled={value === ''}\n onClick={() => {\n slot.add(value, 0)\n setValue('')\n }}\n >\n <AddIcon />\n </IconButton>\n </InputAdornment>\n ),\n }}\n />\n }\n />\n </Card>\n <FormHelperText>{slot.description}</FormHelperText>\n </>\n )\n})\n\nexport default NumberMapEditor\n","import React from 'react'\nimport { observer } from 'mobx-react'\n\nimport {\n Checkbox,\n FormControl,\n FormControlLabel,\n FormHelperText,\n} from '@mui/material'\n\nconst BooleanEditor = observer(function ({\n slot,\n}: {\n slot: {\n name: string\n value: boolean\n set: (arg: boolean) => void\n description: string\n }\n}) {\n return (\n <FormControl>\n <FormControlLabel\n label={slot.name}\n control={\n <Checkbox\n checked={slot.value}\n onChange={evt => {\n slot.set(evt.target.checked)\n }}\n />\n }\n />\n <FormHelperText>{slot.description}</FormHelperText>\n </FormControl>\n )\n})\n\nexport default BooleanEditor\n","import { makeStyles } from 'tss-react/mui'\n\nexport const useSlotEditorStyles = makeStyles()(theme => ({\n paper: {\n display: 'flex',\n marginBottom: theme.spacing(2),\n position: 'relative',\n },\n paperContent: {\n width: '100%',\n },\n slotModeSwitch: {\n width: 24,\n background: theme.palette.secondary.light,\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n}))\n","import React, { useEffect, useState } from 'react'\nimport { observer } from 'mobx-react'\nimport { getPropertyMembers, IAnyType } from 'mobx-state-tree'\nimport { getEnv, FileLocation } from '@jbrowse/core/util'\nimport { FileSelector } from '@jbrowse/core/ui'\nimport {\n getSubType,\n getUnionSubTypes,\n ILiteralType,\n} from '@jbrowse/core/util/mst-reflection'\nimport { IconButton, MenuItem, Paper, SvgIcon, TextField } from '@mui/material'\n\n// icons\nimport RadioButtonUncheckedIcon from '@mui/icons-material/RadioButtonUnchecked'\n\n// locals\nimport StringArrayEditor from './StringArrayEditor'\nimport CallbackEditor from './CallbackEditor'\nimport ColorEditor from './ColorEditor'\nimport JsonEditor from './JsonEditor'\nimport StringArrayMapEditor from './StringArrayMapEditor'\nimport ConfigurationTextField from './ConfigurationTextField'\nimport NumberMapEditor from './NumberMapEditor'\nimport NumberEditor from './NumberEditor'\nimport BooleanEditor from './BooleanEditor'\nimport {\n AnyConfigurationSlot,\n AnyConfigurationSlotType,\n} from '@jbrowse/core/configuration'\nimport { useSlotEditorStyles } from './useSlotEditorStyles'\n\nconst StringEditor = observer(function ({\n slot,\n}: {\n slot: {\n name: string\n description: string\n value: string\n set: (arg: string) => void\n }\n}) {\n return (\n <ConfigurationTextField\n label={slot.name}\n helperText={slot.description}\n value={slot.value}\n onChange={evt => {\n slot.set(evt.target.value)\n }}\n />\n )\n})\n\nconst TextEditor = observer(function ({\n slot,\n}: {\n slot: {\n name: string\n description: string\n value: string\n set: (arg: string) => void\n }\n}) {\n return (\n <TextField\n label={slot.name}\n helperText={slot.description}\n multiline\n value={slot.value}\n onChange={evt => {\n slot.set(evt.target.value)\n }}\n />\n )\n})\n\n// checked checkbox, looks like a styled (x)\nconst SvgCheckbox = () => (\n <SvgIcon>\n <path d=\"M20.41,3C21.8,5.71 22.35,8.84 22,12C21.8,15.16 20.7,18.29 18.83,21L17.3,20C18.91,17.57 19.85,14.8 20,12C20.34,9.2 19.89,6.43 18.7,4L20.41,3M5.17,3L6.7,4C5.09,6.43 4.15,9.2 4,12C3.66,14.8 4.12,17.57 5.3,20L3.61,21C2.21,18.29 1.65,15.17 2,12C2.2,8.84 3.3,5.71 5.17,3M12.08,10.68L14.4,7.45H16.93L13.15,12.45L15.35,17.37H13.09L11.71,14L9.28,17.33H6.76L10.66,12.21L8.53,7.45H10.8L12.08,10.68Z\" />\n </SvgIcon>\n)\n\nconst IntegerEditor = observer(function ({\n slot,\n}: {\n slot: {\n name: string\n value: string\n description: string\n set: (num: number) => void\n }\n}) {\n const [val, setVal] = useState(slot.value)\n useEffect(() => {\n const num = Number.parseInt(val, 10)\n if (!Number.isNaN(num)) {\n slot.set(num)\n }\n }, [slot, val])\n return (\n <ConfigurationTextField\n label={slot.name}\n helperText={slot.description}\n value={val}\n type=\"number\"\n onChange={evt => {\n setVal(evt.target.value)\n }}\n />\n )\n})\n\nconst StringEnumEditor = observer(function ({\n slot,\n slotSchema,\n}: {\n slot: AnyConfigurationSlot\n slotSchema: AnyConfigurationSlotType\n}) {\n const p = getPropertyMembers(getSubType(slotSchema))\n const choices = getUnionSubTypes(\n getUnionSubTypes(getSubType(p.properties.value!))[1]!,\n ).map(t => (t as ILiteralType<string>).value)\n\n return (\n <ConfigurationTextField\n value={slot.value}\n label={slot.name}\n select\n helperText={slot.description}\n onChange={evt => {\n slot.set(evt.target.value)\n }}\n >\n {choices.map(str => (\n <MenuItem key={str} value={str}>\n {str}\n </MenuItem>\n ))}\n </ConfigurationTextField>\n )\n})\n\nconst FileSelectorWrapper = observer(function ({\n slot,\n}: {\n slot: {\n name: string\n value: FileLocation\n set: (arg: FileLocation) => void\n description: string\n }\n}) {\n return (\n <FileSelector\n location={slot.value}\n setLocation={location => {\n slot.set(location)\n }}\n name={slot.name}\n description={slot.description}\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n rootModel={getEnv(slot).pluginManager?.rootModel}\n />\n )\n})\n\nconst valueComponents = {\n string: StringEditor,\n text: TextEditor,\n fileLocation: FileSelectorWrapper,\n stringArray: StringArrayEditor,\n stringArrayMap: StringArrayMapEditor,\n numberMap: NumberMapEditor,\n number: NumberEditor,\n integer: IntegerEditor,\n color: ColorEditor,\n stringEnum: StringEnumEditor,\n boolean: BooleanEditor,\n frozen: JsonEditor,\n configRelationships: JsonEditor,\n}\n\nconst SlotEditor = observer(function ({\n slot,\n slotSchema,\n}: {\n slot: any\n slotSchema: IAnyType\n}) {\n const { classes } = useSlotEditorStyles()\n const { type } = slot\n let ValueComponent = slot.isCallback\n ? CallbackEditor\n : // @ts-expect-error\n valueComponents[type]\n if (!ValueComponent) {\n console.warn(`no slot editor defined for ${type}, editing as string`)\n ValueComponent = StringEditor\n }\n if (!(type in valueComponents)) {\n console.warn(`SlotEditor needs to implement ${type}`)\n }\n return (\n <Paper className={classes.paper}>\n <div className={classes.paperContent}>\n <ValueComponent slot={slot} slotSchema={slotSchema} />\n </div>\n <div className={classes.slotModeSwitch}>\n {slot.contextVariable.length ? (\n <IconButton\n onClick={() =>\n slot.isCallback ? slot.convertToValue() : slot.convertToCallback()\n }\n title={`convert to ${\n slot.isCallback ? 'regular value' : 'callback'\n }`}\n >\n {slot.isCallback ? <SvgCheckbox /> : <RadioButtonUncheckedIcon />}\n </IconButton>\n ) : null}\n </div>\n </Paper>\n )\n})\n\nexport default SlotEditor\n","import React from 'react'\nimport { MenuItem, Paper, TextField } from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { AnyConfigurationModel } from '@jbrowse/core/configuration'\nimport { useSlotEditorStyles } from './useSlotEditorStyles'\n\nconst TypeSelector = observer(function ({\n typeNameChoices,\n slot,\n slotName,\n onChange,\n}: {\n typeNameChoices: string[]\n slot: AnyConfigurationModel\n slotName: string\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void\n}) {\n const { classes } = useSlotEditorStyles()\n return (\n <Paper className={classes.paper}>\n <div className={classes.paperContent}>\n <TextField\n value={slot.type}\n label=\"Type\"\n select\n helperText={`Type of ${slotName} to use`}\n fullWidth\n onChange={onChange}\n >\n {typeNameChoices.map(str => (\n <MenuItem key={str} value={str}>\n {str}\n </MenuItem>\n ))}\n </TextField>\n </div>\n </Paper>\n )\n})\n\nexport default TypeSelector\n","import React from 'react'\n\nimport {\n FormGroup,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Typography,\n} from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\nimport { observer } from 'mobx-react'\nimport { getMembers, IAnyType } from 'mobx-state-tree'\nimport { singular } from 'pluralize'\n\n// jbrowse\nimport { AbstractSessionModel } from '@jbrowse/core/util'\nimport SanitizedHTML from '@jbrowse/core/ui/SanitizedHTML'\nimport {\n readConfObject,\n getTypeNamesFromExplicitlyTypedUnion,\n isConfigurationSchemaType,\n isConfigurationSlotType,\n AnyConfigurationModel,\n} from '@jbrowse/core/configuration'\n\n// icons\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\n\n// locals\nimport SlotEditor from './SlotEditor'\nimport TypeSelector from './TypeSelector'\n\nconst useStyles = makeStyles()(theme => ({\n icon: {\n color: theme.palette.tertiary.contrastText || '#fff',\n },\n expansionPanelDetails: {\n display: 'block',\n padding: theme.spacing(1),\n },\n accordion: {\n border: `1px solid ${theme.palette.text.primary}`,\n },\n noOverflow: {\n width: '100%',\n overflowX: 'auto',\n },\n}))\n\nconst Member = observer(function (props: {\n slotName: string\n slotSchema: IAnyType\n schema: AnyConfigurationModel\n slot?: AnyConfigurationModel | AnyConfigurationModel[]\n path?: string[]\n}) {\n const { classes } = useStyles()\n const {\n slotName,\n slotSchema,\n schema,\n slot = schema[slotName],\n path = [],\n } = props\n if (isConfigurationSchemaType(slotSchema)) {\n if (slot.length) {\n return slot.map((subslot: AnyConfigurationModel, slotIndex: number) => {\n const key = subslot.type\n ? `${singular(slotName)} ${subslot.type}`\n : `${singular(slotName)} ${slotIndex + 1}`\n return <Member key={key} {...props} slot={subslot} slotName={key} />\n })\n }\n // if this is an explicitly typed schema, make a type-selecting dropdown\n // that can be used to change its type\n const typeNameChoices = getTypeNamesFromExplicitlyTypedUnion(slotSchema)\n return (\n <Accordion defaultExpanded className={classes.accordion}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon className={classes.icon} />}\n >\n <Typography>{[...path, slotName].join('➔')}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.expansionPanelDetails}>\n {typeNameChoices.length ? (\n <TypeSelector\n typeNameChoices={typeNameChoices}\n slotName={slotName}\n slot={slot}\n onChange={evt => {\n if (evt.target.value !== slot.type) {\n schema.setSubschema(slotName, { type: evt.target.value })\n }\n }}\n />\n ) : null}\n <FormGroup className={classes.noOverflow}>\n <Schema schema={slot} path={[...path, slotName]} />\n </FormGroup>\n </AccordionDetails>\n </Accordion>\n )\n } else if (isConfigurationSlotType(slotSchema)) {\n return <SlotEditor key={slotName} slot={slot} slotSchema={slotSchema} />\n } else {\n return null\n }\n})\n\nconst Schema = observer(function ({\n schema,\n path = [],\n}: {\n schema: AnyConfigurationModel\n path?: string[]\n}) {\n const properties = getMembers(schema).properties\n return (\n <>\n {Object.entries(properties).map(([slotName, slotSchema]) => (\n <Member\n key={slotName}\n slotName={slotName}\n slotSchema={slotSchema}\n path={path}\n schema={schema}\n />\n ))}\n </>\n )\n})\n\nconst ConfigurationEditor = observer(function ({\n model,\n}: {\n model: { target: AnyConfigurationModel }\n session?: AbstractSessionModel\n}) {\n const { classes } = useStyles()\n // key forces a re-render, otherwise the same field can end up being used for\n // different tracks since only the backing model changes for example see pr\n // #804\n const { target } = model\n const key = readConfObject(target, 'trackId')\n const name = readConfObject(target, 'name')\n return (\n <Accordion key={key} defaultExpanded className={classes.accordion}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon className={classes.icon} />}\n >\n <Typography>\n <SanitizedHTML html={name ?? 'Configuration'} />\n </Typography>\n </AccordionSummary>\n <AccordionDetails\n className={classes.expansionPanelDetails}\n data-testid=\"configEditor\"\n >\n <Schema schema={target} />\n </AccordionDetails>\n </Accordion>\n )\n})\n\nexport default ConfigurationEditor\n"],"names":["observer","slot","value","setValue","useState","addNew","setAddNew","React","name","InputLabel","List","disablePadding","map","val","idx","ListItem","key","JSON","stringify","disableGutters","TextField","onChange","evt","setAtIndex","target","InputProps","endAdornment","InputAdornment","position","IconButton","onClick","removeAtIndex","DeleteIcon","placeholder","event","Button","color","variant","style","margin","add","disabled","FormHelperText","description","fontFamily","useStyles","makeStyles","theme","callbackEditor","marginTop","borderBottom","palette","divider","width","textAreaFont","callbackContainer","overflowX","error","fontSize","classes","code","setCode","setCodeError","debouncedCode","useDebounce","useEffect","jexlDebouncedCode","startsWith","Error","stringToJexlExpression","getEnv","pluginManager","jexl","set","undefined","e","console","className","multiline","split","background","input","Tooltip","title","contextVariable","arrow","newWindow","window","open","opener","HelpIcon","ColorSlot","props","label","TextFieldProps","displayed","setDisplayed","display","_extends","fallback","ColorPicker","helperText","fullWidth","card","spacing","Card","raised","CardHeader","action","remove","CardContent","StringArrayEditor","setAtKeyIndex","removeAtKeyIndex","addToKey","disableTypography","AddIcon","ConfigurationTextField","SanitizedHTML","html","FormHelperTextProps","component","setVal","num","Number","parseFloat","isNaN","reset","type","NumberEditor","FormControl","FormControlLabel","control","Checkbox","checked","useSlotEditorStyles","paper","marginBottom","paperContent","slotModeSwitch","secondary","light","justifyContent","alignItems","StringEditor","TextEditor","SvgCheckbox","SvgIcon","d","IntegerEditor","parseInt","StringEnumEditor","slotSchema","p","getPropertyMembers","getSubType","choices","getUnionSubTypes","properties","t","select","str","MenuItem","FileSelectorWrapper","FileSelector","location","setLocation","rootModel","valueComponents","string","text","fileLocation","stringArray","stringArrayMap","StringArrayMapEditor","numberMap","NumberMapEditor","number","integer","ColorEditor","stringEnum","boolean","BooleanEditor","frozen","JsonEditor","configRelationships","ValueComponent","isCallback","CallbackEditor","warn","Paper","length","convertToValue","convertToCallback","RadioButtonUncheckedIcon","typeNameChoices","slotName","icon","tertiary","contrastText","expansionPanelDetails","padding","accordion","border","primary","noOverflow","Member","schema","path","isConfigurationSchemaType","subslot","slotIndex","singular","getTypeNamesFromExplicitlyTypedUnion","Accordion","defaultExpanded","AccordionSummary","expandIcon","ExpandMoreIcon","Typography","join","AccordionDetails","TypeSelector","setSubschema","FormGroup","Schema","isConfigurationSlotType","SlotEditor","getMembers","Object","entries","model","readConfObject"],"sourceRoot":""}