Mercurial > repos > fubar > jbrowse2
view x/static/js/8984.1a816123.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/8984.1a816123.chunk.js","mappings":"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","sources":["../../../packages/core/BaseFeatureWidget/BaseFeatureDetail/BasicValue.tsx","../../../packages/core/BaseFeatureWidget/BaseFeatureDetail/FieldName.tsx","../../../packages/core/BaseFeatureWidget/BaseFeatureDetail/SimpleField.tsx","../../../packages/core/BaseFeatureWidget/SequenceFeatureDetails/SequenceFeaturePanel.tsx","../../../packages/core/BaseFeatureWidget/BaseFeatureDetail/util.ts","../../../packages/core/BaseFeatureWidget/BaseFeatureDetail/DataGridDetails.tsx","../../../packages/core/BaseFeatureWidget/BaseFeatureDetail/ArrayValue.tsx","../../../packages/core/BaseFeatureWidget/BaseFeatureDetail/UriField.tsx","../../../packages/core/BaseFeatureWidget/BaseFeatureDetail/Attributes.tsx","../../../packages/core/BaseFeatureWidget/BaseFeatureDetail/index.tsx","../../../packages/core/BaseFeatureWidget/util.tsx"],"sourcesContent":["import React from 'react'\nimport { makeStyles } from 'tss-react/mui'\nimport isObject from 'is-object'\nimport { Link } from '@mui/material'\n\n// locals\nimport { SanitizedHTML } from '../../ui'\n\nconst useStyles = makeStyles()(theme => ({\n fieldValue: {\n wordBreak: 'break-word',\n maxHeight: 300,\n fontSize: 12,\n padding: theme.spacing(0.5),\n overflow: 'auto',\n },\n}))\n\nexport default function BasicValue({ value }: { value: unknown }) {\n const { classes } = useStyles()\n const isLink = /^https?:\\/\\//.exec(`${value}`)\n return (\n <div className={classes.fieldValue}>\n {React.isValidElement(value) ? (\n value\n ) : isLink ? (\n <Link href={`${value}`}>{`${value}`}</Link>\n ) : (\n <SanitizedHTML\n html={isObject(value) ? JSON.stringify(value) : String(value)}\n />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { Tooltip } from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\n\nconst useStyles = makeStyles()(theme => ({\n fieldDescription: {\n '&:hover': {\n background: theme.palette.mode === 'dark' ? '#e65100' : 'yellow',\n },\n },\n fieldName: {\n wordBreak: 'break-all',\n minWidth: 90,\n borderBottom: '1px solid #0003',\n fontSize: 12,\n background: theme.palette.action.disabledBackground,\n marginRight: theme.spacing(1),\n padding: theme.spacing(0.5),\n },\n}))\n\nexport default function FieldName({\n description,\n name,\n width,\n prefix = [],\n}: {\n description?: React.ReactNode\n name: string\n prefix?: string[]\n width?: number\n}) {\n const { classes, cx } = useStyles()\n const val = [...prefix, name].join('.')\n return description ? (\n <Tooltip title={description} placement=\"left\">\n <div className={cx(classes.fieldDescription, classes.fieldName)}>\n {val}\n </div>\n </Tooltip>\n ) : (\n <div className={classes.fieldName} style={{ width: width }}>\n {val}\n </div>\n )\n}\n","import React from 'react'\nimport { makeStyles } from 'tss-react/mui'\nimport FieldName from './FieldName'\nimport BasicValue from './BasicValue'\n\nconst useStyles = makeStyles()({\n field: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n})\n\nexport default function SimpleField({\n name,\n value,\n description,\n prefix,\n width,\n}: {\n description?: React.ReactNode\n name: string\n value: unknown\n prefix?: string[]\n width?: number\n}) {\n const { classes } = useStyles()\n return value !== null && value !== undefined ? (\n <div className={classes.field}>\n <FieldName\n prefix={prefix}\n description={description}\n name={name}\n width={width}\n />\n <BasicValue value={value} />\n </div>\n ) : null\n}\n","import React, { lazy, useState, Suspense } from 'react'\nimport { Button, FormControl, IconButton } from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\n// locals\nimport { LoadingEllipses } from '../../ui'\nimport { BaseFeatureWidgetModel } from '../stateModelFactory'\nimport { SimpleFeatureSerialized, getSession } from '../../util'\n\n// icons\nimport Help from '@mui/icons-material/Help'\n\n// lazies\nconst SequenceFeatureDetails = lazy(() => import('./SequenceFeatureDetails'))\nconst HelpDialog = lazy(() => import('./dialogs/HelpDialog'))\n\nconst useStyles = makeStyles()(theme => ({\n formControl: {\n margin: 0,\n },\n\n container: {\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(4),\n },\n}))\n\n// display the stitched-together sequence of a gene's CDS, cDNA, or protein\n// sequence. this is a best effort and weird genomic phenomena could lead these\n// to not be 100% accurate\nconst SequenceFeaturePanel = observer(function ({\n model,\n feature,\n}: {\n model: BaseFeatureWidgetModel\n feature: SimpleFeatureSerialized\n}) {\n const { classes } = useStyles()\n const [shown, setShown] = useState(false)\n\n return (\n <div className={classes.container}>\n <FormControl className={classes.formControl}>\n <Button\n variant=\"contained\"\n onClick={() => {\n setShown(!shown)\n }}\n >\n {shown ? 'Hide feature sequence' : 'Show feature sequence'}\n </Button>\n </FormControl>\n\n <IconButton\n onClick={() => {\n getSession(model).queueDialog(handleClose => [\n HelpDialog,\n { handleClose },\n ])\n }}\n >\n <Help />\n </IconButton>\n {shown ? (\n <Suspense fallback={<LoadingEllipses />}>\n <SequenceFeatureDetails\n key={feature.uniqueId}\n model={model}\n feature={feature}\n />\n </Suspense>\n ) : null}\n </div>\n )\n})\n\nexport default SequenceFeaturePanel\n","import isObject from 'is-object'\nimport { max, measureText } from '../../util'\nimport { ellipses } from '../util'\n\nexport function isEmpty(obj: Record<string, unknown>) {\n return Object.keys(obj).length === 0\n}\n\nexport function generateTitle(name: unknown, id: unknown, type: unknown) {\n return [ellipses(`${name || id || ''}`), `${type}`]\n .filter(f => !!f)\n .join(' - ')\n}\n\nexport function generateMaxWidth(array: unknown[][], prefix: string[]) {\n return (\n Math.ceil(\n max(array.map(key => measureText([...prefix, key[0]].join('.'), 12))),\n ) + 10\n )\n}\n\n// pick using a path from an object, similar to _.get from lodash with special\n// logic for Descriptions from e.g. VCF headers\n//\n// @param arr example ['a','b'], obj = {a:{b:'hello}}\n// @returns hello (with special addition to grab description also)\nexport function accessNested(arr: string[], obj: Record<string, unknown> = {}) {\n let obj2: unknown = obj\n arr.forEach(elt => {\n if (isObject(obj2)) {\n obj2 = obj2[elt]\n }\n })\n return typeof obj2 === 'string'\n ? obj2\n : isObject(obj2) && typeof obj2.Description === 'string'\n ? obj2.Description\n : undefined\n}\n","import React, { useState } from 'react'\nimport { makeStyles } from 'tss-react/mui'\nimport { DataGrid, GridColDef, GridToolbar } from '@mui/x-data-grid'\nimport { Checkbox, FormControlLabel, Typography } from '@mui/material'\n\n// locals\nimport { measureGridWidth, getStr } from '../../util'\nimport FieldName from './FieldName'\nimport { SanitizedHTML } from '../../ui'\n\nconst useStyles = makeStyles()(theme => ({\n margin: {\n marginBottom: theme.spacing(4),\n },\n\n cell: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n}))\n\ninterface Entry {\n id: string\n [key: string]: string\n}\n\nexport default function DataGridDetails({\n value,\n prefix,\n name,\n}: {\n name: string\n prefix?: string[]\n value: Record<string, unknown>[]\n}) {\n const { classes } = useStyles()\n const [checked, setChecked] = useState(false)\n const keys = Object.keys(value[0]!).sort()\n const unionKeys = new Set(keys)\n\n // avoids key 'id' from being used in row data\n const rows = Object.entries(value).map(([k, val]) => {\n const { id, ...rest } = val\n return {\n id: k, // used by material UI\n identifier: id, // renamed from id to identifier\n ...rest,\n } as Entry\n })\n\n for (const val of value) {\n for (const k of Object.keys(val)) {\n unionKeys.add(k)\n }\n }\n // avoids key 'id' from being used in column names, and tries\n // to make it at the start of the colNames array\n let colNames: string[]\n if (unionKeys.has('id')) {\n unionKeys.delete('id')\n colNames = ['identifier', ...unionKeys]\n } else {\n colNames = [...unionKeys]\n }\n const widths = colNames.map(e => measureGridWidth(rows.map(r => r[e])))\n if (unionKeys.size < keys.length + 5) {\n return (\n <div className={classes.margin}>\n <FieldName prefix={prefix} name={name} />\n <FormControlLabel\n control={\n <Checkbox\n checked={checked}\n onChange={event => {\n setChecked(event.target.checked)\n }}\n />\n }\n label={<Typography variant=\"body2\">Show options</Typography>}\n />\n <DataGrid\n autoHeight\n disableRowSelectionOnClick\n rows={rows}\n rowHeight={20}\n columnHeaderHeight={35}\n hideFooter={rows.length < 25}\n slots={{\n toolbar: checked ? GridToolbar : null,\n }}\n slotProps={{\n toolbar: {\n printOptions: {\n disableToolbarButton: true,\n },\n },\n }}\n columns={colNames.map(\n (val, index) =>\n ({\n field: val,\n renderCell: params => {\n const value = params.value as string\n return (\n <div className={classes.cell}>\n <SanitizedHTML html={getStr(value || '')} />\n </div>\n )\n },\n width: widths[index],\n }) satisfies GridColDef<(typeof rows)[0]>,\n )}\n />\n </div>\n )\n }\n return null\n}\n","import React from 'react'\nimport isObject from 'is-object'\nimport { makeStyles } from 'tss-react/mui'\n\n// locals\nimport Attributes from './Attributes'\nimport FieldName from './FieldName'\nimport BasicValue from './BasicValue'\n\nconst useStyles = makeStyles()(theme => ({\n field: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n\n fieldSubvalue: {\n wordBreak: 'break-word',\n maxHeight: 300,\n padding: theme.spacing(0.5),\n border: `1px solid ${theme.palette.action.selected}`,\n boxSizing: 'border-box',\n overflow: 'auto',\n },\n}))\n\nexport default function ArrayValue({\n name,\n value,\n description,\n prefix = [],\n}: {\n description?: React.ReactNode\n name: string\n value: unknown[]\n prefix?: string[]\n}) {\n const { classes } = useStyles()\n if (value.length === 1) {\n return isObject(value[0]) ? (\n <Attributes attributes={value[0]} prefix={[...prefix, name]} />\n ) : (\n <div className={classes.field}>\n <FieldName prefix={prefix} description={description} name={name} />\n <BasicValue value={value[0]} />\n </div>\n )\n } else if (value.every(val => isObject(val))) {\n return (\n <>\n {value.map((val, i) => (\n <Attributes\n key={`${JSON.stringify(val)}-${i}`}\n attributes={val as Record<string, unknown>}\n prefix={[...prefix, `${name}-${i}`]}\n />\n ))}\n </>\n )\n } else {\n return (\n <div className={classes.field}>\n <FieldName prefix={prefix} description={description} name={name} />\n {value.map((val, i) => (\n <div\n key={`${JSON.stringify(val)}-${i}`}\n className={classes.fieldSubvalue}\n >\n <BasicValue value={val} />\n </div>\n ))}\n </div>\n )\n }\n}\n","import React from 'react'\nimport FieldName from './FieldName'\nimport { makeStyles } from 'tss-react/mui'\nimport BasicValue from './BasicValue'\n\nconst useStyles = makeStyles()({\n field: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n})\n\nexport default function UriField({\n value,\n prefix,\n name,\n}: {\n value: { uri: string; baseUri?: string }\n name: string\n prefix: string[]\n}) {\n const { classes } = useStyles()\n const { uri, baseUri = '' } = value\n let href: string\n try {\n href = new URL(uri, baseUri).href\n } catch (e) {\n href = uri\n }\n return (\n <div className={classes.field}>\n <FieldName prefix={prefix} name={name} />\n <BasicValue value={href} />\n </div>\n )\n}\n","import React from 'react'\nimport isObject from 'is-object'\n\n// locals\nimport { accessNested, generateMaxWidth } from './util'\nimport { isUriLocation } from '../../util'\nimport DataGridDetails from './DataGridDetails'\nimport ArrayValue from './ArrayValue'\nimport UriAttribute from './UriField'\nimport SimpleField from './SimpleField'\n\nconst MAX_FIELD_NAME_WIDTH = 170\n\n// these are always omitted as too detailed\nconst globalOmit = [\n '__jbrowsefmt',\n 'length',\n 'position',\n 'subfeatures',\n 'uniqueId',\n 'exonFrames',\n 'parentId',\n 'thickStart',\n 'thickEnd',\n]\n\nexport default function Attributes(props: {\n attributes: {\n [key: string]: unknown\n __jbrowsefmt?: Record<string, unknown>\n }\n omit?: string[]\n omitSingleLevel?: string[]\n formatter?: (val: unknown, key: string) => React.ReactNode\n descriptions?: Record<string, React.ReactNode>\n prefix?: string[]\n hideUris?: boolean\n}) {\n const {\n attributes,\n omit = [],\n omitSingleLevel = [],\n descriptions,\n formatter = val => val,\n hideUris,\n prefix = [],\n } = props\n\n const omits = new Set([...omit, ...globalOmit, ...omitSingleLevel])\n const { __jbrowsefmt, ...rest } = attributes\n const formattedAttributes = { ...rest, ...__jbrowsefmt }\n\n const maxLabelWidth = generateMaxWidth(\n Object.entries(formattedAttributes).filter(\n ([k, v]) => v !== undefined && !omits.has(k),\n ),\n prefix,\n )\n\n return (\n <>\n {Object.entries(formattedAttributes)\n .filter(([k, v]) => v !== undefined && !omits.has(k))\n .map(([key, value]) => {\n const description = accessNested([...prefix, key], descriptions)\n if (Array.isArray(value)) {\n // check if it looks like an array of objects, which could be used\n // in data grid\n return value.length > 1 && value.every(val => isObject(val)) ? (\n <DataGridDetails\n key={key}\n name={key}\n prefix={prefix}\n value={value}\n />\n ) : (\n <ArrayValue\n key={key}\n name={key}\n value={value}\n description={description}\n prefix={prefix}\n />\n )\n } else if (isObject(value)) {\n const { omitSingleLevel, ...rest } = props\n return isUriLocation(value) ? (\n hideUris ? null : (\n <UriAttribute\n key={key}\n name={key}\n prefix={prefix}\n value={value}\n />\n )\n ) : (\n <Attributes\n key={key}\n {...rest}\n attributes={value}\n descriptions={descriptions}\n prefix={[...prefix, key]}\n />\n )\n } else {\n return (\n <SimpleField\n key={key}\n name={key}\n value={formatter(value, key)}\n description={description}\n prefix={prefix}\n width={Math.min(maxLabelWidth, MAX_FIELD_NAME_WIDTH)}\n />\n )\n }\n })}\n </>\n )\n}\n","import React from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Divider,\n Typography,\n} from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\nimport { observer } from 'mobx-react'\nimport { IAnyStateTreeNode } from 'mobx-state-tree'\n\n// icons\nimport ExpandMore from '@mui/icons-material/ExpandMore'\n\n// locals\nimport {\n getEnv,\n getSession,\n assembleLocString,\n toLocale,\n SimpleFeatureSerialized,\n} from '../../util'\nimport { ErrorMessage } from '../../ui'\nimport SequenceFeatureDetails from '../SequenceFeatureDetails'\nimport { BaseCardProps, BaseProps } from '../types'\nimport SimpleField from './SimpleField'\nimport Attributes from './Attributes'\nimport { generateTitle, isEmpty } from './util'\n\n// coreDetails are omitted in some circumstances\nconst coreDetails = [\n 'name',\n 'start',\n 'end',\n 'strand',\n 'refName',\n 'description',\n 'type',\n]\n\nconst useStyles = makeStyles()(theme => ({\n expansionPanelDetails: {\n display: 'block',\n padding: theme.spacing(1),\n },\n icon: {\n color: theme.palette.tertiary.contrastText || '#fff',\n },\n}))\n\nexport function BaseCard({\n children,\n title,\n defaultExpanded = true,\n}: BaseCardProps) {\n const { classes } = useStyles()\n return (\n <Accordion defaultExpanded={defaultExpanded}>\n <AccordionSummary expandIcon={<ExpandMore className={classes.icon} />}>\n <Typography variant=\"button\">{title}</Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.expansionPanelDetails}>\n {children}\n </AccordionDetails>\n </Accordion>\n )\n}\n\nfunction Position(props: BaseProps) {\n const { feature } = props\n const strand = feature.strand as number\n const strandMap: Record<string, string> = {\n '-1': '-',\n '0': '',\n '1': '+',\n }\n const str = strandMap[strand] ? `(${strandMap[strand]})` : ''\n const loc = assembleLocString(feature)\n return <>{`${loc} ${str}`}</>\n}\n\nfunction CoreDetails(props: BaseProps) {\n const { feature } = props\n const obj = feature as SimpleFeatureSerialized & {\n start: number\n end: number\n assemblyName?: string\n strand: number\n refName: string\n __jbrowsefmt: {\n start?: number\n assemblyName?: string\n end?: number\n refName?: string\n name?: string\n }\n }\n\n const formattedFeat = { ...obj, ...obj.__jbrowsefmt }\n const { start, end } = formattedFeat\n\n const displayedDetails: Record<string, any> = {\n ...formattedFeat,\n length: toLocale(end - start),\n }\n\n const coreRenderedDetails = {\n description: 'Description',\n name: 'Name',\n length: 'Length',\n type: 'Type',\n }\n return (\n <>\n <SimpleField\n name=\"Position\"\n value={<Position {...props} feature={formattedFeat} />}\n />\n {Object.entries(coreRenderedDetails)\n .map(([key, name]) => [name, displayedDetails[key]])\n .filter(([, value]) => value != null)\n .map(([name, value]) => (\n <SimpleField key={name} name={name} value={value} />\n ))}\n </>\n )\n}\n\nexport const BaseCoreDetails = (props: BaseProps) => {\n const { title = 'Primary data' } = props\n return (\n <BaseCard {...props} title={title}>\n <CoreDetails {...props} />\n </BaseCard>\n )\n}\n\nexport const BaseAttributes = (props: BaseProps) => {\n const { feature } = props\n return (\n <BaseCard {...props} title=\"Attributes\">\n <Attributes {...props} attributes={feature} />\n </BaseCard>\n )\n}\n\nexport interface BaseInputProps extends BaseCardProps {\n omit?: string[]\n model: any\n descriptions?: Record<string, React.ReactNode>\n formatter?: (val: unknown, key: string) => React.ReactNode\n}\n\ninterface PanelDescriptor {\n name: string\n Component: React.FC<any>\n}\n\nexport function FeatureDetails(props: {\n model: IAnyStateTreeNode\n feature: SimpleFeatureSerialized\n depth?: number\n omit?: string[]\n descriptions?: Record<string, React.ReactNode>\n formatter?: (val: unknown, key: string) => React.ReactNode\n}) {\n const { omit = [], model, feature, depth = 0 } = props\n const { maxDepth } = model\n const { mate, name = '', id = '', type = '', subfeatures, uniqueId } = feature\n const pm = getEnv(model).pluginManager\n const session = getSession(model)\n\n const ExtraPanel = pm.evaluateExtensionPoint('Core-extraFeaturePanel', null, {\n session,\n feature,\n model,\n }) as PanelDescriptor | undefined\n const m = mate as { start: number; end: number; refName: string } | undefined\n return (\n <BaseCard title={generateTitle(name, id, type)}>\n <Typography>Core details</Typography>\n <CoreDetails {...props} />\n {m ? (\n <>\n <Divider />\n <Typography>Mate details</Typography>\n <CoreDetails\n {...props}\n feature={{\n ...m,\n start: m.start,\n end: m.end,\n refName: m.refName,\n uniqueId: `${uniqueId}-mate`,\n }}\n />\n </>\n ) : null}\n\n <Divider />\n <Typography>Attributes</Typography>\n <Attributes\n attributes={feature}\n {...props}\n omit={omit}\n omitSingleLevel={coreDetails}\n />\n\n <ErrorBoundary FallbackComponent={e => <ErrorMessage error={e.error} />}>\n <SequenceFeatureDetails {...props} />\n </ErrorBoundary>\n\n {ExtraPanel ? (\n <>\n <Divider />\n <BaseCard title={ExtraPanel.name}>\n <ExtraPanel.Component {...props} />\n </BaseCard>\n </>\n ) : null}\n\n {depth < maxDepth && subfeatures?.length ? (\n <BaseCard title=\"Subfeatures\" defaultExpanded={depth < 1}>\n {subfeatures.map((sub, idx) => (\n <FeatureDetails\n key={JSON.stringify(sub)}\n feature={{\n ...sub,\n uniqueId: `${uniqueId}_${idx}`,\n }}\n model={model}\n depth={depth + 1}\n />\n ))}\n </BaseCard>\n ) : null}\n </BaseCard>\n )\n}\n\nconst BaseFeatureDetail = observer(function ({ model }: BaseInputProps) {\n const { error, featureData } = model\n\n if (error) {\n return <ErrorMessage error={error} />\n }\n if (!featureData) {\n return null\n }\n\n // replacing undefined with null helps with allowing fields to be hidden,\n // setting null is not allowed by jexl so we set it to undefined to hide. see\n // config guide. this replacement happens both here and when snapshotting the\n // featureData\n const g = JSON.parse(\n JSON.stringify(featureData, (_, v) => (v === undefined ? null : v)),\n )\n return isEmpty(g) ? null : <FeatureDetails model={model} feature={g} />\n})\n\nexport default BaseFeatureDetail\n\nexport { default as Attributes } from './Attributes'\n","export interface Feat {\n start: number\n end: number\n type?: string\n name?: string\n id?: string\n}\nexport interface ParentFeat extends Feat {\n uniqueId: string\n strand?: number\n refName: string\n subfeatures?: Feat[]\n parentId?: string\n}\nexport interface SeqState {\n seq: string\n upstream?: string\n downstream?: string\n}\n\nexport interface ErrorState {\n error: string\n}\n\nexport function stitch(subfeats: Feat[], sequence: string) {\n return subfeats.map(sub => sequence.slice(sub.start, sub.end)).join('')\n}\n\n// filter items if they have the same \"ID\" or location\nfunction getItemId(feat: Feat) {\n return `${feat.start}-${feat.end}`\n}\n\n// filters if successive elements share same start/end\nexport function dedupe(list: Feat[]) {\n return list.filter(\n (item, pos, ary) => !pos || getItemId(item) !== getItemId(ary[pos - 1]!),\n )\n}\n\nexport function revlist(list: Feat[], seqlen: number) {\n return list\n .map(sub => ({\n ...sub,\n start: seqlen - sub.end,\n end: seqlen - sub.start,\n }))\n .sort((a, b) => a.start - b.start)\n}\n\nexport function calculateUTRs(cds: Feat[], exons: Feat[]) {\n // checking length ensures the .at below are valid\n if (!cds.length) {\n return []\n }\n\n const firstCds = cds.at(0)!\n\n const lastCds = cds.at(-1)!\n const firstCdsIdx = exons.findIndex(\n exon => exon.end >= firstCds.start && exon.start <= firstCds.start,\n )\n const lastCdsIdx = exons.findIndex(\n exon => exon.end >= lastCds.end && exon.start <= lastCds.end,\n )\n const lastCdsExon = exons[lastCdsIdx]!\n const firstCdsExon = exons[firstCdsIdx]!\n\n const fiveUTRs = [\n ...exons.slice(0, firstCdsIdx),\n { start: firstCdsExon.start, end: firstCds.start },\n ].map(elt => ({ ...elt, type: 'five_prime_UTR' }))\n\n const threeUTRs = [\n { start: lastCds.end, end: lastCdsExon.end },\n ...exons.slice(lastCdsIdx + 1),\n ].map(elt => ({ ...elt, type: 'three_prime_UTR' }))\n\n return [...fiveUTRs, ...threeUTRs]\n}\n\n// calculates UTRs using impliedUTRs logic, but there are no exon subfeatures\nexport function calculateUTRs2(cds: Feat[], parentFeat: Feat) {\n if (!cds.length) {\n return []\n }\n\n const firstCds = cds.at(0)!\n\n const lastCds = cds.at(-1)!\n\n const fiveUTRs = [{ start: parentFeat.start, end: firstCds.start }].map(\n elt => ({ ...elt, type: 'five_prime_UTR' }),\n )\n\n const threeUTRs = [{ start: lastCds.end, end: parentFeat.end }].map(elt => ({\n ...elt,\n type: 'three_prime_UTR',\n }))\n\n return [...fiveUTRs, ...threeUTRs]\n}\n\nexport function ellipses(slug: string) {\n return slug.length > 20 ? `${slug.slice(0, 20)}...` : slug\n}\n"],"names":["useStyles","makeStyles","theme","fieldValue","wordBreak","maxHeight","fontSize","padding","spacing","overflow","BasicValue","value","classes","isLink","exec","React","className","Link","href","SanitizedHTML","html","isObject","JSON","stringify","String","fieldDescription","background","palette","mode","fieldName","minWidth","borderBottom","action","disabledBackground","marginRight","FieldName","description","name","width","prefix","cx","val","join","Tooltip","title","placement","style","field","display","flexWrap","SimpleField","SequenceFeatureDetails","lazy","HelpDialog","formControl","margin","container","marginTop","marginBottom","observer","model","feature","shown","setShown","useState","FormControl","Button","variant","onClick","IconButton","getSession","queueDialog","handleClose","Help","Suspense","fallback","LoadingEllipses","key","uniqueId","generateTitle","id","type","ellipses","filter","f","cell","whiteSpace","textOverflow","DataGridDetails","checked","setChecked","keys","Object","sort","unionKeys","Set","rows","entries","map","k","rest","identifier","add","colNames","has","delete","widths","e","measureGridWidth","r","size","length","FormControlLabel","control","Checkbox","onChange","event","target","label","Typography","DataGrid","autoHeight","disableRowSelectionOnClick","rowHeight","columnHeaderHeight","hideFooter","slots","toolbar","GridToolbar","slotProps","printOptions","disableToolbarButton","columns","index","renderCell","params","getStr","fieldSubvalue","border","selected","boxSizing","ArrayValue","Attributes","attributes","every","i","UriField","uri","baseUri","URL","MAX_FIELD_NAME_WIDTH","globalOmit","props","omit","omitSingleLevel","descriptions","formatter","hideUris","omits","__jbrowsefmt","formattedAttributes","maxLabelWidth","array","Math","ceil","max","measureText","generateMaxWidth","v","undefined","arr","obj","obj2","forEach","elt","Description","accessNested","Array","isArray","isUriLocation","UriAttribute","_extends","min","coreDetails","expansionPanelDetails","icon","color","tertiary","contrastText","BaseCard","children","defaultExpanded","Accordion","AccordionSummary","expandIcon","ExpandMore","AccordionDetails","Position","strand","strandMap","str","loc","assembleLocString","CoreDetails","formattedFeat","start","end","displayedDetails","toLocale","BaseCoreDetails","BaseAttributes","FeatureDetails","depth","maxDepth","mate","subfeatures","pm","getEnv","pluginManager","session","ExtraPanel","evaluateExtensionPoint","m","Divider","refName","ErrorBoundary","FallbackComponent","ErrorMessage","error","Component","sub","idx","featureData","g","parse","_","stitch","subfeats","sequence","slice","getItemId","feat","dedupe","list","item","pos","ary","revlist","seqlen","a","b","calculateUTRs","cds","exons","firstCds","at","lastCds","firstCdsIdx","findIndex","exon","lastCdsIdx","lastCdsExon","firstCdsExon","calculateUTRs2","parentFeat","slug"],"sourceRoot":""}