Mercurial > repos > fubar > jbrowse2
comparison 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 |
comparison
equal
deleted
inserted
replaced
124:137e08517410 | 125:49f3d3878413 |
---|---|
1 {"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":""} |