view x/static/js/5331.28d667f0.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/5331.28d667f0.chunk.js","mappings":"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","sources":["../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/HierarchicalFab.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/util.ts","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/TrackCategory.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/TrackLabel.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/TrackListNode.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalTree.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/HamburgerMenu.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/DropdownTrackSelector.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/FavoriteTracks.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/RecentlyUsedTracks.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/HierarchicalHeader.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/HierarchicalTrackSelector.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/ShoppingCart.tsx","../../../plugins/data-management/src/HierarchicalTrackSelectorWidget/components/tree/TrackLabelMenu.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { Fab, Menu, MenuItem } from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\nimport {\n  getSession,\n  isSessionModelWithWidgets,\n  isSessionModelWithConnections,\n  isSessionWithAddTracks,\n} from '@jbrowse/core/util'\nimport { observer } from 'mobx-react'\n\n// icons\nimport AddIcon from '@mui/icons-material/Add'\n\n// locals\nimport { HierarchicalTrackSelectorModel } from '../model'\n\nconst useStyles = makeStyles()(theme => ({\n  fab: {\n    position: 'absolute',\n    bottom: theme.spacing(6),\n    right: theme.spacing(6),\n  },\n}))\n\nconst HierarchicalFab = observer(function ({\n  model,\n}: {\n  model: HierarchicalTrackSelectorModel\n}) {\n  const { classes } = useStyles()\n  const session = getSession(model)\n  const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null)\n\n  function handleFabClose() {\n    setAnchorEl(null)\n  }\n  const hasConnections = isSessionModelWithConnections(session)\n  const hasAddTrack = isSessionWithAddTracks(session)\n  return hasAddTrack || hasConnections ? (\n    <>\n      <Fab\n        color=\"secondary\"\n        className={classes.fab}\n        onClick={event => {\n          setAnchorEl(event.currentTarget)\n        }}\n      >\n        <AddIcon />\n      </Fab>\n      <Menu\n        anchorEl={anchorEl}\n        open={Boolean(anchorEl)}\n        onClose={() => {\n          setAnchorEl(null)\n        }}\n      >\n        {hasConnections ? (\n          <MenuItem\n            onClick={() => {\n              handleFabClose()\n              if (isSessionModelWithWidgets(session)) {\n                session.showWidget(\n                  session.addWidget(\n                    'AddConnectionWidget',\n                    'addConnectionWidget',\n                  ),\n                )\n              }\n            }}\n          >\n            Add connection\n          </MenuItem>\n        ) : null}\n        {hasAddTrack ? (\n          <MenuItem\n            onClick={() => {\n              handleFabClose()\n              if (isSessionModelWithWidgets(session)) {\n                session.showWidget(\n                  session.addWidget('AddTrackWidget', 'addTrackWidget', {\n                    view: model.view.id,\n                  }),\n                )\n              }\n            }}\n          >\n            Add track\n          </MenuItem>\n        ) : null}\n      </Menu>\n    </>\n  ) : null\n})\n\nexport default HierarchicalFab\n","import { AnyConfigurationModel } from '@jbrowse/core/configuration'\nimport { HierarchicalTrackSelectorModel } from '../model'\nimport { TreeNode } from '../generateHierarchy'\nimport { MenuItem } from '@jbrowse/core/ui'\n\nexport interface NodeData {\n  nestingLevel: number\n  checked: boolean\n  conf: AnyConfigurationModel\n  drawerPosition: unknown\n  id: string\n  trackId: string\n  isLeaf: boolean\n  name: string\n  onChange: (trackId: string) => void\n  toggleCollapse: (arg: string) => void\n  tree: TreeNode\n  selected: boolean\n  menuItems?: MenuItem[]\n  model: HierarchicalTrackSelectorModel\n}\n\nexport function getAllChildren(subtree?: TreeNode): AnyConfigurationModel[] {\n  // @ts-expect-error\n  return subtree?.type === 'category'\n    ? subtree.children\n        .map(t => (t.type === 'category' ? getAllChildren(t) : t.conf))\n        .flat(Number.POSITIVE_INFINITY)\n    : []\n}\n\nexport function treeToMap(tree: TreeNode, map = new Map<string, TreeNode>()) {\n  if (tree.id && tree.children.length) {\n    map.set(tree.id, tree)\n  }\n  for (const node of tree.children) {\n    treeToMap(node, map)\n  }\n  return map\n}\n\nexport function isUnsupported(name = '') {\n  return name.endsWith('(Unsupported)') || name.endsWith('(Unknown)')\n}\n","import React, { useState } from 'react'\nimport { IconButton, Typography } from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\nimport JBrowseMenu from '@jbrowse/core/ui/Menu'\n\n// icons\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown'\nimport ArrowRightIcon from '@mui/icons-material/ArrowRight'\nimport MoreHorizIcon from '@mui/icons-material/MoreHoriz'\n\n// locals\nimport { getAllChildren, treeToMap, NodeData } from '../util'\n\nconst useStyles = makeStyles()(theme => ({\n  contrastColor: {\n    color: theme.palette.tertiary.contrastText,\n  },\n\n  // margin:auto 0 to center text vertically\n  accordionText: {\n    margin: 'auto 0',\n    // width 100 so you can click anywhere on the category bar\n    width: '100%',\n  },\n}))\n\nexport default function Category({\n  isOpen,\n  setOpen,\n  data,\n}: {\n  isOpen: boolean\n  setOpen: (arg: boolean) => void\n  data: NodeData\n}) {\n  const { classes } = useStyles()\n  const [menuEl, setMenuEl] = useState<HTMLElement | null>(null)\n  const { menuItems = [], name, model, id, tree } = data\n\n  return (\n    <div\n      className={classes.accordionText}\n      onClick={() => {\n        if (!menuEl) {\n          data.toggleCollapse(id)\n          setOpen(!isOpen)\n        }\n      }}\n    >\n      <Typography data-testid={`htsCategory-${name}`}>\n        {isOpen ? <ArrowDropDownIcon /> : <ArrowRightIcon />}\n        {name}\n        <IconButton\n          onClick={event => {\n            setMenuEl(event.currentTarget)\n            event.stopPropagation()\n          }}\n          className={classes.contrastColor}\n        >\n          <MoreHorizIcon />\n        </IconButton>\n      </Typography>\n      {menuEl ? (\n        <JBrowseMenu\n          anchorEl={menuEl}\n          menuItems={[\n            {\n              label: 'Add to selection',\n              onClick: () => {\n                const r = treeToMap(tree).get(id)\n                model.addToSelection(getAllChildren(r))\n              },\n            },\n            {\n              label: 'Remove from selection',\n              onClick: () => {\n                const r = treeToMap(tree).get(id)\n                model.removeFromSelection(getAllChildren(r))\n              },\n            },\n            {\n              label: 'Show all tracks',\n              onClick: () => {\n                for (const entry of treeToMap(tree).get(id)?.children || []) {\n                  if (entry.type === 'track') {\n                    model.view.showTrack(entry.trackId)\n                  }\n                }\n              },\n            },\n            {\n              label: 'Hide all tracks',\n              onClick: () => {\n                for (const entry of treeToMap(tree).get(id)?.children || []) {\n                  if (entry.type === 'track') {\n                    model.view.hideTrack(entry.trackId)\n                  }\n                }\n              },\n            },\n            ...menuItems,\n          ]}\n          onMenuItemClick={(_event, callback) => {\n            callback()\n            setMenuEl(null)\n          }}\n          open={Boolean(menuEl)}\n          onClose={() => {\n            setMenuEl(null)\n          }}\n        />\n      ) : null}\n    </div>\n  )\n}\n","import React from 'react'\nimport { Checkbox, FormControlLabel, Tooltip } from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\nimport SanitizedHTML from '@jbrowse/core/ui/SanitizedHTML'\nimport {\n  AnyConfigurationModel,\n  readConfObject,\n} from '@jbrowse/core/configuration'\n// locals\nimport { isUnsupported, NodeData } from '../util'\nimport TrackLabelMenu from './TrackLabelMenu'\n\nconst useStyles = makeStyles()(theme => ({\n  compactCheckbox: {\n    padding: 0,\n  },\n\n  checkboxLabel: {\n    marginRight: 0,\n    '&:hover': {\n      backgroundColor: theme.palette.action.selected,\n    },\n  },\n  selected: {\n    background: '#cccc',\n  },\n}))\n\nexport interface InfoArgs {\n  target: HTMLElement\n  id: string\n  conf: AnyConfigurationModel\n}\n\nexport default function TrackLabel({ data }: { data: NodeData }) {\n  const { classes } = useStyles()\n  const {\n    checked,\n    conf,\n    model,\n    drawerPosition,\n    id,\n    trackId,\n    name,\n    onChange,\n    selected,\n  } = data\n  const description = readConfObject(conf, 'description')\n  return (\n    <>\n      <Tooltip\n        title={description + (selected ? ' (in selection)' : '')}\n        placement={drawerPosition === 'left' ? 'right' : 'left'}\n      >\n        <FormControlLabel\n          className={classes.checkboxLabel}\n          control={\n            <Checkbox\n              className={classes.compactCheckbox}\n              checked={checked}\n              onChange={() => {\n                onChange(trackId)\n              }}\n              disabled={isUnsupported(name)}\n              inputProps={{\n                // @ts-expect-error\n                'data-testid': `htsTrackEntry-${id}`,\n              }}\n            />\n          }\n          label={\n            <div\n              data-testid={`htsTrackLabel-${id}`}\n              style={{ background: selected ? '#cccc' : undefined }}\n            >\n              <SanitizedHTML html={name} />\n            </div>\n          }\n        />\n      </Tooltip>\n      <TrackLabelMenu model={model} trackId={trackId} id={id} conf={conf} />\n    </>\n  )\n}\n","import React from 'react'\nimport { makeStyles } from 'tss-react/mui'\n\n// locals\nimport Category from './TrackCategory'\nimport TrackLabel from './TrackLabel'\nimport { NodeData } from '../util'\n\nconst useStyles = makeStyles()(theme => ({\n  // this accordionBase element's small padding is used to give a margin to\n  // accordionColor it a \"margin\" because the virtualized elements can't really\n  // use margin in a conventional way (it doesn't affect layout)\n  accordionBase: {\n    display: 'flex',\n  },\n\n  accordionCard: {\n    padding: 3,\n    cursor: 'pointer',\n    display: 'flex',\n  },\n\n  nestingLevelMarker: {\n    position: 'absolute',\n    borderLeft: '1.5px solid #555',\n  },\n  // accordionColor set's display:flex so that the child accordionText use\n  // vertically centered text\n  accordionColor: {\n    background: theme.palette.tertiary.main,\n    color: theme.palette.tertiary.contrastText,\n    width: '100%',\n    display: 'flex',\n    paddingLeft: 5,\n  },\n}))\n\n// An individual node in the track selector. Note: manually sets cursor:\n// pointer improves usability for what can be clicked\nexport default function Node({\n  data,\n  isOpen,\n  style,\n  setOpen,\n}: {\n  data: NodeData\n  isOpen: boolean\n  style?: { height: number }\n  setOpen: (arg: boolean) => void\n}) {\n  const { isLeaf, nestingLevel } = data\n\n  const { classes } = useStyles()\n  const width = 10\n  const marginLeft = nestingLevel * width + (isLeaf ? width : 0)\n\n  return (\n    <div style={style} className={!isLeaf ? classes.accordionBase : undefined}>\n      {new Array(nestingLevel).fill(0).map((_, idx) => (\n        <div\n          /* biome-ignore lint/suspicious/noArrayIndexKey: */\n          key={`mark-${idx}`}\n          style={{ left: idx * width + 4, height: style?.height }}\n          className={classes.nestingLevelMarker}\n        />\n      ))}\n      <div\n        className={!isLeaf ? classes.accordionCard : undefined}\n        style={{\n          marginLeft,\n          whiteSpace: 'nowrap',\n          width: '100%',\n        }}\n      >\n        <div className={!isLeaf ? classes.accordionColor : undefined}>\n          {!isLeaf ? (\n            <Category isOpen={isOpen} data={data} setOpen={setOpen} />\n          ) : (\n            <TrackLabel data={data} />\n          )}\n        </div>\n      </div>\n    </div>\n  )\n}\n","import React, { useCallback, useMemo, useRef, useEffect } from 'react'\nimport { observer } from 'mobx-react'\nimport { VariableSizeTree } from 'react-vtree'\nimport { getSession } from '@jbrowse/core/util'\n// locals\nimport { TreeNode } from '../../generateHierarchy'\nimport { HierarchicalTrackSelectorModel } from '../../model'\nimport Node from './TrackListNode'\n\nfunction getNodeData(\n  node: TreeNode,\n  nestingLevel: number,\n  extra: Record<string, unknown>,\n  selection: Record<string, unknown>,\n) {\n  const isLeaf = node.type === 'track'\n  const selected = isLeaf ? selection[node.trackId] : false\n  return {\n    data: {\n      defaultHeight: isLeaf ? 22 : 40,\n      isLeaf,\n      isOpenByDefault: true,\n      nestingLevel,\n      selected,\n      ...node,\n      ...extra,\n    },\n    nestingLevel,\n    node,\n  }\n}\n\ntype NodeData = ReturnType<typeof getNodeData>\n\n// this is the main tree component for the hierarchical track selector in note:\n// in jbrowse-web the toolbar is position=\"sticky\" which means the autosizer\n// includes the height of the toolbar, so we subtract the given offsets\nconst HierarchicalTree = observer(function HierarchicalTree({\n  height,\n  tree,\n  model,\n}: {\n  height: number\n  tree: TreeNode\n  model: HierarchicalTrackSelectorModel\n}) {\n  const { filterText, selection, view } = model\n  const treeRef = useRef<NodeData>(null)\n  const session = getSession(model)\n  const { drawerPosition } = session\n  const obj = useMemo(\n    () => Object.fromEntries(selection.map(s => [s.trackId, s])),\n    [selection],\n  )\n\n  const extra = useMemo(\n    () => ({\n      onChange: (trackId: string) => {\n        const trackTurnedOn = view.toggleTrack(trackId)\n        if (trackTurnedOn) {\n          model.addToRecentlyUsed(trackId)\n        }\n      },\n      toggleCollapse: (pathName: string) => {\n        model.toggleCategory(pathName)\n      },\n      tree,\n      model,\n      drawerPosition,\n    }),\n    [view, model, drawerPosition, tree],\n  )\n\n  // doing this properly without ts-expect-error is tricky, react-vtree has\n  // some typescript examples that could help\n  const treeWalker = useCallback(\n    // @ts-expect-error\n    function* treeWalker() {\n      for (const child of tree.children) {\n        yield getNodeData(child, 0, extra, obj)\n      }\n\n      // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n      while (true) {\n        // @ts-expect-error\n        const parentMeta = yield\n\n        // @ts-expect-error\n        for (const curr of parentMeta.node.children) {\n          yield getNodeData(curr, parentMeta.nestingLevel + 1, extra, obj)\n        }\n      }\n    },\n    [tree, extra, obj],\n  )\n\n  /* biome-ignore lint/correctness/useExhaustiveDependencies: */\n  useEffect(() => {\n    // @ts-expect-error\n    treeRef.current.recomputeTree({\n      refreshNodes: true,\n      useDefaultHeight: true,\n    })\n  }, [tree, filterText])\n  return (\n    <>\n      {/* @ts-expect-error */}\n      <VariableSizeTree ref={treeRef} treeWalker={treeWalker} height={height}>\n        {/* @ts-expect-error */}\n        {Node}\n      </VariableSizeTree>\n    </>\n  )\n})\n\nexport default HierarchicalTree\n","import React, { Suspense, lazy, useState } from 'react'\nimport { observer } from 'mobx-react'\nimport {\n  getSession,\n  isSessionModelWithConnectionEditing,\n  isSessionModelWithConnections,\n  isSessionModelWithWidgets,\n  isSessionWithAddTracks,\n} from '@jbrowse/core/util'\nimport {\n  AnyConfigurationModel,\n  readConfObject,\n} from '@jbrowse/core/configuration'\nimport CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'\n\n// icons\nimport MenuIcon from '@mui/icons-material/Menu'\n\n// locals\nimport { HierarchicalTrackSelectorModel } from '../../model'\n\n// lazies\nconst FacetedDialog = lazy(() => import('../faceted/FacetedDialog'))\n\n// lazy components\nconst CloseConnectionDialog = lazy(\n  () => import('../dialogs/CloseConnectionDialog'),\n)\nconst DeleteConnectionDialog = lazy(\n  () => import('../dialogs/DeleteConnectionDialog'),\n)\nconst ManageConnectionsDialog = lazy(\n  () => import('../dialogs/ManageConnectionsDialog'),\n)\nconst ToggleConnectionsDialog = lazy(\n  () => import('../dialogs/ToggleConnectionsDialog'),\n)\n\ninterface ModalArgs {\n  connectionConf: AnyConfigurationModel\n  safelyBreakConnection: () => void\n  dereferenceTypeCount: Record<string, number>\n  name: string\n}\n\ninterface DialogDetails {\n  name: string\n  connectionConf: AnyConfigurationModel\n}\n\nconst HamburgerMenu = observer(function ({\n  model,\n}: {\n  model: HierarchicalTrackSelectorModel\n}) {\n  const session = getSession(model)\n  const [modalInfo, setModalInfo] = useState<ModalArgs>()\n  const [deleteDialogDetails, setDeleteDialogDetails] =\n    useState<DialogDetails>()\n  const [connectionToggleOpen, setConnectionToggleOpen] = useState(false)\n  const [connectionManagerOpen, setConnectionManagerOpen] = useState(false)\n  const [facetedOpen, setFacetedOpen] = useState(false)\n\n  function breakConnection(\n    connectionConf: AnyConfigurationModel,\n    deletingConnection?: boolean,\n  ) {\n    const name = readConfObject(connectionConf, 'name')\n    const result = session.prepareToBreakConnection?.(connectionConf)\n    if (result) {\n      const [safelyBreakConnection, dereferenceTypeCount] = result\n      if (Object.keys(dereferenceTypeCount).length > 0) {\n        setModalInfo({\n          connectionConf,\n          safelyBreakConnection,\n          dereferenceTypeCount,\n          name,\n        })\n      } else {\n        safelyBreakConnection()\n      }\n    }\n    if (deletingConnection) {\n      setDeleteDialogDetails({ name, connectionConf })\n    }\n  }\n\n  return (\n    <>\n      <CascadingMenuButton\n        menuItems={[\n          {\n            label: 'Open faceted track selector',\n            onClick: () => {\n              setFacetedOpen(true)\n            },\n          },\n          ...(isSessionWithAddTracks(session)\n            ? [\n                {\n                  label: 'Add track...',\n                  onClick: () => {\n                    if (isSessionModelWithWidgets(session)) {\n                      session.showWidget(\n                        session.addWidget('AddTrackWidget', 'addTrackWidget', {\n                          view: model.view.id,\n                        }),\n                      )\n                    }\n                  },\n                },\n              ]\n            : []),\n          {\n            label: 'Connections...',\n            subMenu: [\n              ...(isSessionModelWithConnections(session)\n                ? [\n                    {\n                      label: 'Turn on/off connections...',\n                      onClick: () => {\n                        setConnectionToggleOpen(true)\n                      },\n                    },\n                  ]\n                : []),\n              ...(isSessionModelWithConnectionEditing(session)\n                ? [\n                    {\n                      label: 'Add connection...',\n                      onClick: () => {\n                        if (isSessionModelWithWidgets(session)) {\n                          session.showWidget(\n                            session.addWidget(\n                              'AddConnectionWidget',\n                              'addConnectionWidget',\n                            ),\n                          )\n                        }\n                      },\n                    },\n                    {\n                      label: 'Delete connections...',\n                      onClick: () => {\n                        setConnectionManagerOpen(true)\n                      },\n                    },\n                  ]\n                : []),\n            ],\n          },\n          {\n            label: 'Sort...',\n            type: 'subMenu',\n            subMenu: [\n              {\n                label: 'Sort tracks by name',\n                type: 'checkbox',\n                checked: model.activeSortTrackNames,\n                onClick: () => {\n                  model.setSortTrackNames(!model.activeSortTrackNames)\n                },\n              },\n              {\n                label: 'Sort categories by name',\n                type: 'checkbox',\n                checked: model.activeSortCategories,\n                onClick: () => {\n                  model.setSortCategories(!model.activeSortCategories)\n                },\n              },\n            ],\n          },\n          {\n            label: 'Collapse...',\n            type: 'subMenu',\n            subMenu: [\n              ...(model.hasAnySubcategories\n                ? [\n                    {\n                      label: 'Collapse subcategories',\n                      onClick: () => {\n                        model.collapseSubCategories()\n                      },\n                    },\n                  ]\n                : []),\n              {\n                label: 'Collapse top-level categories',\n                onClick: () => {\n                  model.collapseTopLevelCategories()\n                },\n              },\n              {\n                label: 'Expand all categories',\n                onClick: () => {\n                  model.expandAllCategories()\n                },\n              },\n            ],\n          },\n        ]}\n      >\n        <MenuIcon />\n      </CascadingMenuButton>\n      <Suspense fallback={null}>\n        {modalInfo ? (\n          <CloseConnectionDialog\n            modalInfo={modalInfo}\n            onClose={() => {\n              setModalInfo(undefined)\n            }}\n          />\n        ) : null}\n        {deleteDialogDetails ? (\n          <DeleteConnectionDialog\n            handleClose={() => {\n              setDeleteDialogDetails(undefined)\n            }}\n            deleteDialogDetails={deleteDialogDetails}\n            session={session}\n          />\n        ) : null}\n        {connectionManagerOpen ? (\n          <ManageConnectionsDialog\n            handleClose={() => {\n              setConnectionManagerOpen(false)\n            }}\n            breakConnection={breakConnection}\n            session={session}\n          />\n        ) : null}\n        {connectionToggleOpen ? (\n          <ToggleConnectionsDialog\n            handleClose={() => {\n              setConnectionToggleOpen(false)\n            }}\n            session={session}\n            breakConnection={breakConnection}\n          />\n        ) : null}\n\n        {facetedOpen ? (\n          <FacetedDialog\n            handleClose={() => {\n              setFacetedOpen(false)\n            }}\n            model={model}\n          />\n        ) : null}\n      </Suspense>\n    </>\n  )\n})\n\nexport default HamburgerMenu\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react'\nimport CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'\nimport { AnyConfigurationModel } from '@jbrowse/core/configuration'\nimport { MenuItem } from '@jbrowse/core/ui/Menu'\nimport SanitizedHTML from '@jbrowse/core/ui/SanitizedHTML'\nimport { getTrackName } from '@jbrowse/core/util/tracks'\nimport { getSession } from '@jbrowse/core/util'\n\n// locals\nimport { HierarchicalTrackSelectorModel } from '../../model'\nimport TrackLabelMenu from './TrackLabelMenu'\n\nconst DropdownTrackSelector = observer(function ({\n  model,\n  tracks,\n  extraMenuItems,\n  children,\n  onClick,\n}: {\n  model: HierarchicalTrackSelectorModel\n  tracks: AnyConfigurationModel[]\n  extraMenuItems: MenuItem[]\n  onClick?: () => void\n  children: React.ReactElement\n}) {\n  const { view } = model\n  const [open, setOpen] = useState(false)\n  const session = getSession(model)\n  return view ? (\n    <CascadingMenuButton\n      closeAfterItemClick={false}\n      onClick={onClick}\n      menuItems={[\n        ...tracks.map(t => ({\n          type: 'checkbox' as const,\n          label: (\n            <>\n              <SanitizedHTML html={getTrackName(t, session)} />{' '}\n              <TrackLabelMenu\n                id={t.trackId}\n                trackId={t.trackId}\n                model={model}\n                conf={t}\n                setOpen={setOpen}\n                stopPropagation\n              />\n            </>\n          ),\n          checked: view.tracks.some(\n            (f: { configuration: AnyConfigurationModel }) =>\n              f.configuration === t,\n          ),\n          onClick: () => {\n            if (!open) {\n              if (model.view.toggleTrack(t.trackId)) {\n                model.addToRecentlyUsed(t.trackId)\n              }\n            }\n          },\n        })),\n        ...extraMenuItems,\n      ]}\n    >\n      {children}\n    </CascadingMenuButton>\n  ) : null\n})\n\nexport default DropdownTrackSelector\n","import React from 'react'\nimport { Badge, Tooltip } from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { makeStyles } from 'tss-react/mui'\n\n// icons\nimport GradeIcon from '@mui/icons-material/Grade'\n\n// locals\nimport { HierarchicalTrackSelectorModel } from '../../model'\nimport DropdownTrackSelector from './DropdownTrackSelector'\n\nconst useStyles = makeStyles()({\n  smallBadge: {\n    height: 14,\n  },\n  margin: {\n    marginRight: 10,\n  },\n})\nconst FavoriteTracks = observer(function ({\n  model,\n}: {\n  model: HierarchicalTrackSelectorModel\n}) {\n  const { classes } = useStyles()\n  const { view, favoriteTracks } = model\n  return view ? (\n    <DropdownTrackSelector\n      onClick={() => {\n        model.setFavoritesCounter(0)\n      }}\n      tracks={favoriteTracks}\n      model={model}\n      extraMenuItems={\n        favoriteTracks.length\n          ? [\n              { type: 'divider' as const },\n              {\n                label: 'Clear favorites',\n                onClick: () => {\n                  model.clearFavorites()\n                },\n              },\n            ]\n          : [\n              {\n                label: 'No favorite tracks yet',\n                onClick: () => {},\n              },\n            ]\n      }\n    >\n      <Tooltip title=\"Favorite tracks\">\n        <Badge\n          classes={{ badge: classes.smallBadge }}\n          color=\"secondary\"\n          anchorOrigin={{\n            vertical: 'bottom',\n            horizontal: 'right',\n          }}\n          className={classes.margin}\n          badgeContent={model.favoritesCounter}\n        >\n          <GradeIcon />\n        </Badge>\n      </Tooltip>\n    </DropdownTrackSelector>\n  ) : null\n})\n\nexport default FavoriteTracks\n","import React from 'react'\nimport { Badge, Tooltip } from '@mui/material'\nimport { observer } from 'mobx-react'\n\n// icons\nimport HistoryIcon from '@mui/icons-material/History'\n\n// locals\nimport { HierarchicalTrackSelectorModel } from '../../model'\nimport DropdownTrackSelector from './DropdownTrackSelector'\nimport { makeStyles } from 'tss-react/mui'\n\nconst useStyles = makeStyles()({\n  smallBadge: {\n    height: 14,\n  },\n})\n\nconst RecentlyUsedTracks = observer(function ({\n  model,\n}: {\n  model: HierarchicalTrackSelectorModel\n}) {\n  const { classes } = useStyles()\n  const { view, recentlyUsedCounter, recentlyUsedTracks } = model\n  return view ? (\n    <DropdownTrackSelector\n      onClick={() => {\n        model.setRecentlyUsedCounter(0)\n      }}\n      model={model}\n      tracks={recentlyUsedTracks}\n      extraMenuItems={\n        recentlyUsedTracks.length\n          ? [\n              { type: 'divider' as const },\n              {\n                label: 'Clear recently used',\n                onClick: () => {\n                  model.clearRecentlyUsed()\n                },\n              },\n            ]\n          : [\n              {\n                label: 'No recently used',\n                onClick: () => {},\n              },\n            ]\n      }\n    >\n      <Tooltip title=\"Recently used tracks\">\n        <Badge\n          classes={{ badge: classes.smallBadge }}\n          anchorOrigin={{\n            vertical: 'bottom',\n            horizontal: 'right',\n          }}\n          color=\"secondary\"\n          badgeContent={recentlyUsedCounter}\n        >\n          <HistoryIcon />\n        </Badge>\n      </Tooltip>\n    </DropdownTrackSelector>\n  ) : null\n})\n\nexport default RecentlyUsedTracks\n","import React from 'react'\nimport { IconButton, InputAdornment, TextField } from '@mui/material'\nimport { makeStyles } from 'tss-react/mui'\nimport { observer } from 'mobx-react'\n\n// icons\nimport ClearIcon from '@mui/icons-material/Clear'\n\n// locals\nimport { HierarchicalTrackSelectorModel } from '../../model'\nimport HamburgerMenu from './HamburgerMenu'\nimport ShoppingCart from '../ShoppingCart'\nimport FavoriteTracks from './FavoriteTracks'\nimport RecentlyUsedTracks from './RecentlyUsedTracks'\n\nconst useStyles = makeStyles()(theme => ({\n  searchBox: {\n    margin: theme.spacing(2),\n  },\n}))\n\nconst SearchTracksTextField = observer(function ({\n  model,\n}: {\n  model: HierarchicalTrackSelectorModel\n}) {\n  const { filterText } = model\n  const { classes } = useStyles()\n  return (\n    <TextField\n      className={classes.searchBox}\n      label=\"Filter tracks\"\n      value={filterText}\n      onChange={event => {\n        model.setFilterText(event.target.value)\n      }}\n      fullWidth\n      InputProps={{\n        endAdornment: (\n          <InputAdornment position=\"end\">\n            <IconButton\n              onClick={() => {\n                model.clearFilterText()\n              }}\n            >\n              <ClearIcon />\n            </IconButton>\n          </InputAdornment>\n        ),\n      }}\n    />\n  )\n})\n\nconst HierarchicalTrackSelectorHeader = observer(function ({\n  model,\n  setHeaderHeight,\n}: {\n  model: HierarchicalTrackSelectorModel\n  setHeaderHeight: (n: number) => void\n}) {\n  return (\n    <div\n      ref={ref => {\n        setHeaderHeight(ref?.getBoundingClientRect().height || 0)\n      }}\n      data-testid=\"hierarchical_track_selector\"\n    >\n      <div style={{ display: 'flex' }}>\n        <HamburgerMenu model={model} />\n        <ShoppingCart model={model} />\n        <SearchTracksTextField model={model} />\n        <RecentlyUsedTracks model={model} />\n        <FavoriteTracks model={model} />\n      </div>\n    </div>\n  )\n})\n\nexport default HierarchicalTrackSelectorHeader\n","import React, { useState } from 'react'\nimport { observer } from 'mobx-react'\nimport AutoSizer from 'react-virtualized-auto-sizer'\n\n// locals\nimport { HierarchicalTrackSelectorModel } from '../model'\nimport { TreeNode } from '../generateHierarchy'\nimport HierarchicalFab from './HierarchicalFab'\nimport HierarchicalTree from './tree/HierarchicalTree'\nimport HierarchicalHeader from './tree/HierarchicalHeader'\n\n// Don't use autosizer in jest and instead hardcode a height, otherwise fails\n// jest tests\nconst AutoSizedHierarchicalTree = ({\n  tree,\n  model,\n  offset,\n}: {\n  tree: TreeNode\n  model: HierarchicalTrackSelectorModel\n  offset: number\n}) => {\n  return typeof jest === 'undefined' ? (\n    <AutoSizer disableWidth>\n      {args => (\n        <HierarchicalTree\n          height={(args.height || offset) - offset}\n          model={model}\n          tree={tree}\n        />\n      )}\n    </AutoSizer>\n  ) : (\n    <HierarchicalTree height={9000} model={model} tree={tree} />\n  )\n}\n\nconst Wrapper = ({\n  overrideDimensions,\n  children,\n}: {\n  overrideDimensions?: { width: number; height: number }\n  children: React.ReactNode\n}) => {\n  return overrideDimensions ? (\n    <div style={{ ...overrideDimensions }}>{children}</div>\n  ) : (\n    children\n  )\n}\nconst HierarchicalTrackSelectorContainer = observer(function ({\n  model,\n  toolbarHeight,\n  overrideDimensions,\n}: {\n  model: HierarchicalTrackSelectorModel\n  toolbarHeight: number\n  overrideDimensions?: { width: number; height: number }\n}) {\n  return (\n    <Wrapper overrideDimensions={overrideDimensions}>\n      <HierarchicalTrackSelector model={model} toolbarHeight={toolbarHeight} />\n      <HierarchicalFab model={model} />\n    </Wrapper>\n  )\n})\n\nconst HierarchicalTrackSelector = observer(function ({\n  model,\n  toolbarHeight = 0,\n}: {\n  model: HierarchicalTrackSelectorModel\n  toolbarHeight?: number\n}) {\n  const [headerHeight, setHeaderHeight] = useState(0)\n  return (\n    <>\n      <HierarchicalHeader model={model} setHeaderHeight={setHeaderHeight} />\n      <AutoSizedHierarchicalTree\n        tree={model.hierarchy}\n        model={model}\n        offset={toolbarHeight + headerHeight}\n      />\n    </>\n  )\n})\n\nexport default HierarchicalTrackSelectorContainer\n","import React from 'react'\nimport { Badge } from '@mui/material'\nimport { observer } from 'mobx-react'\nimport { MenuItem } from '@jbrowse/core/ui/Menu'\nimport { getSession, getEnv } from '@jbrowse/core/util'\n\n// icons\nimport ShoppingCartIcon from '@mui/icons-material/ShoppingCart'\n\n// locals\nimport { HierarchicalTrackSelectorModel } from '../model'\nimport CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'\n\nconst ShoppingCart = observer(function ({\n  model,\n}: {\n  model: HierarchicalTrackSelectorModel\n}) {\n  const { selection } = model\n  const { pluginManager } = getEnv(model)\n  const session = getSession(model)\n  const items = pluginManager.evaluateExtensionPoint(\n    'TrackSelector-multiTrackMenuItems',\n    [],\n    { session },\n  ) as MenuItem[]\n\n  return selection.length ? (\n    <CascadingMenuButton\n      menuItems={[\n        {\n          label: 'Clear',\n          onClick: () => {\n            model.clearSelection()\n          },\n        },\n        ...items.map(item => ({\n          ...item,\n          ...('onClick' in item\n            ? {\n                onClick: () => {\n                  item.onClick(model)\n                },\n              }\n            : {}),\n        })),\n      ]}\n    >\n      <Badge badgeContent={selection.length} color=\"primary\">\n        <ShoppingCartIcon />\n      </Badge>\n    </CascadingMenuButton>\n  ) : null\n})\n\nexport default ShoppingCart\n","import React from 'react'\nimport { makeStyles } from 'tss-react/mui'\nimport { getSession } from '@jbrowse/core/util'\nimport { AnyConfigurationModel } from '@jbrowse/core/configuration'\nimport CascadingMenuButton from '@jbrowse/core/ui/CascadingMenuButton'\n\n// icons\nimport MoreHorizIcon from '@mui/icons-material/MoreHoriz'\nimport StarIcon from '@mui/icons-material/StarBorderOutlined'\nimport FilledStarIcon from '@mui/icons-material/Star'\n\n// locals\nimport { HierarchicalTrackSelectorModel } from '../../model'\n\nconst useStyles = makeStyles()({\n  cascadingStyle: {\n    padding: 0,\n  },\n})\n\nconst TrackLabelMenu = function ({\n  id,\n  trackId,\n  stopPropagation,\n  model,\n  setOpen,\n  conf,\n}: {\n  id: string\n  trackId: string\n  stopPropagation?: boolean\n  conf: AnyConfigurationModel\n  setOpen?: (arg: boolean) => void\n  model: HierarchicalTrackSelectorModel\n}) {\n  const { classes } = useStyles()\n  return (\n    <CascadingMenuButton\n      className={classes.cascadingStyle}\n      stopPropagation={stopPropagation}\n      setOpen={setOpen}\n      data-testid={`htsTrackEntryMenu-${id}`}\n      menuItems={[\n        ...(getSession(model).getTrackActionMenuItems?.(conf) || []),\n        model.isFavorite(trackId)\n          ? {\n              label: 'Remove from favorites',\n              onClick: () => {\n                model.removeFromFavorites(trackId)\n              },\n              icon: StarIcon,\n            }\n          : {\n              label: 'Add to favorites',\n              onClick: () => {\n                model.addToFavorites(trackId)\n              },\n              icon: FilledStarIcon,\n            },\n        {\n          label: 'Add to selection',\n          onClick: () => {\n            model.addToSelection([conf])\n          },\n        },\n        ...(model.isSelected(conf)\n          ? [\n              {\n                label: 'Remove from selection',\n                onClick: () => {\n                  model.removeFromSelection([conf])\n                },\n              },\n            ]\n          : []),\n      ]}\n    >\n      <MoreHorizIcon />\n    </CascadingMenuButton>\n  )\n}\n\nexport default TrackLabelMenu\n"],"names":["useStyles","makeStyles","theme","fab","position","bottom","spacing","right","observer","model","classes","session","getSession","anchorEl","setAnchorEl","useState","handleFabClose","hasConnections","isSessionModelWithConnections","hasAddTrack","isSessionWithAddTracks","React","Fab","color","className","onClick","event","currentTarget","AddIcon","Menu","open","Boolean","onClose","MenuItem","isSessionModelWithWidgets","showWidget","addWidget","view","id","getAllChildren","subtree","type","children","map","t","conf","flat","Number","POSITIVE_INFINITY","treeToMap","tree","Map","length","set","node","isUnsupported","name","endsWith","contrastColor","palette","tertiary","contrastText","accordionText","margin","width","Category","isOpen","setOpen","data","menuEl","setMenuEl","menuItems","toggleCollapse","Typography","ArrowDropDownIcon","ArrowRightIcon","IconButton","stopPropagation","MoreHorizIcon","JBrowseMenu","label","r","get","addToSelection","removeFromSelection","entry","showTrack","trackId","hideTrack","onMenuItemClick","_event","callback","compactCheckbox","padding","checkboxLabel","marginRight","backgroundColor","action","selected","background","TrackLabel","checked","drawerPosition","onChange","description","readConfObject","Tooltip","title","placement","FormControlLabel","control","Checkbox","disabled","inputProps","style","undefined","SanitizedHTML","html","TrackLabelMenu","accordionBase","display","accordionCard","cursor","nestingLevelMarker","borderLeft","accordionColor","main","paddingLeft","Node","isLeaf","nestingLevel","marginLeft","Array","fill","_","idx","key","left","height","whiteSpace","getNodeData","extra","selection","defaultHeight","isOpenByDefault","filterText","treeRef","useRef","obj","useMemo","Object","fromEntries","s","toggleTrack","addToRecentlyUsed","pathName","toggleCategory","treeWalker","useCallback","child","parentMeta","curr","useEffect","current","recomputeTree","refreshNodes","useDefaultHeight","VariableSizeTree","ref","FacetedDialog","lazy","CloseConnectionDialog","DeleteConnectionDialog","ManageConnectionsDialog","ToggleConnectionsDialog","modalInfo","setModalInfo","deleteDialogDetails","setDeleteDialogDetails","connectionToggleOpen","setConnectionToggleOpen","connectionManagerOpen","setConnectionManagerOpen","facetedOpen","setFacetedOpen","breakConnection","connectionConf","deletingConnection","result","prepareToBreakConnection","safelyBreakConnection","dereferenceTypeCount","keys","CascadingMenuButton","subMenu","isSessionModelWithConnectionEditing","activeSortTrackNames","setSortTrackNames","activeSortCategories","setSortCategories","hasAnySubcategories","collapseSubCategories","collapseTopLevelCategories","expandAllCategories","MenuIcon","Suspense","fallback","handleClose","tracks","extraMenuItems","closeAfterItemClick","getTrackName","some","f","configuration","smallBadge","favoriteTracks","DropdownTrackSelector","setFavoritesCounter","clearFavorites","Badge","badge","anchorOrigin","vertical","horizontal","badgeContent","favoritesCounter","GradeIcon","recentlyUsedCounter","recentlyUsedTracks","setRecentlyUsedCounter","clearRecentlyUsed","HistoryIcon","searchBox","SearchTracksTextField","TextField","value","setFilterText","target","fullWidth","InputProps","endAdornment","InputAdornment","clearFilterText","ClearIcon","setHeaderHeight","getBoundingClientRect","HamburgerMenu","ShoppingCart","RecentlyUsedTracks","FavoriteTracks","AutoSizedHierarchicalTree","offset","jest","AutoSizer","disableWidth","args","HierarchicalTree","Wrapper","overrideDimensions","HierarchicalTrackSelectorContainer","toolbarHeight","HierarchicalTrackSelector","HierarchicalFab","headerHeight","HierarchicalHeader","hierarchy","pluginManager","getEnv","items","evaluateExtensionPoint","clearSelection","item","ShoppingCartIcon","cascadingStyle","getTrackActionMenuItems","isFavorite","removeFromFavorites","icon","StarIcon","addToFavorites","FilledStarIcon","isSelected"],"sourceRoot":""}