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":""}