@weng-lab/genomebrowser-ui 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"genomebrowser-ui.es.js","sources":["../src/muiLicense.ts","../../../node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js","../src/TrackSelect/DataGrid/DefaultGroupingCell.tsx","../src/TrackSelect/DataGrid/DataGridWrapper.tsx","../src/TrackSelect/Dialogs/ClearDialog.tsx","../src/TrackSelect/Dialogs/LimitDialog.tsx","../src/TrackSelect/Dialogs/ResetDialog.tsx","../src/TrackSelect/FolderList/Breadcrumb.tsx","../src/TrackSelect/FolderList/FolderCard.tsx","../src/TrackSelect/FolderList/FolderList.tsx","../src/TrackSelect/managedTracks.ts","../src/TrackSelect/resolveFolderView.ts","../src/TrackSelect/buildSelectedTree.ts","../src/TrackSelect/TreeView/CustomTreeItem.tsx","../src/TrackSelect/TreeView/TreeViewWrapper.tsx","../src/TrackSelect/TrackSelect.tsx","../src/TrackSelect/Folders/biosamples/shared/constants.tsx","../src/TrackSelect/Folders/biosamples/shared/columns.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleViewSelector.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleGroupingCell.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleTreeItem.tsx","../src/TrackSelect/Folders/biosamples/shared/toTrack.ts","../src/TrackSelect/Folders/biosamples/shared/createFolder.ts","../src/TrackSelect/Folders/biosamples/human.ts","../src/TrackSelect/Folders/biosamples/mouse.ts","../src/TrackSelect/Folders/genes/shared/columns.tsx","../src/TrackSelect/Folders/genes/shared/toTrack.ts","../src/TrackSelect/Folders/genes/shared/createFolder.ts","../src/TrackSelect/Folders/genes/human.ts","../src/TrackSelect/Folders/genes/mouse.ts","../src/TrackSelect/Folders/other-tracks/shared/columns.tsx","../../../node_modules/.pnpm/logo-test@0.0.5_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/logo-test/dist/logo-test.es.js","../src/TrackSelect/Custom/TfPeaks.tsx","../src/TrackSelect/Folders/other-tracks/shared/toTrack.ts","../src/TrackSelect/Folders/other-tracks/shared/createFolder.ts","../src/TrackSelect/Folders/other-tracks/human.ts","../src/TrackSelect/Folders/mohd/shared/config.tsx","../src/TrackSelect/Folders/mohd/shared/columns.tsx","../src/TrackSelect/Folders/mohd/shared/MohdGroupingCell.tsx","../src/TrackSelect/Folders/mohd/shared/MohdTreeItem.tsx","../src/TrackSelect/Folders/mohd/shared/bigBedSchemas.ts","../src/TrackSelect/Folders/mohd/shared/MohdBigBedTooltip.tsx","../src/TrackSelect/Folders/mohd/shared/toTrack.ts","../src/TrackSelect/Folders/mohd/shared/MohdViewSelector.tsx","../src/TrackSelect/Folders/mohd/shared/createFolder.ts","../src/TrackSelect/Folders/mohd/human.ts","../src/TrackSelect/Folders/psychscreen/shared/columns.tsx","../src/TrackSelect/Folders/psychscreen/shared/PsychscreenGroupingCell.tsx","../src/TrackSelect/Folders/psychscreen/shared/toTrack.ts","../src/TrackSelect/Folders/psychscreen/shared/createFolder.ts","../src/TrackSelect/Folders/psychscreen/human.ts","../src/TrackSelect/Folders/index.ts"],"sourcesContent":["import { LicenseInfo } from \"@mui/x-license\";\n\nconst muiLicenseKey =\n import.meta.env.NEXT_PUBLIC_MUI_X_LICENSE_KEY ??\n import.meta.env.VITE_MUI_X_LICENSE_KEY;\n\nif (muiLicenseKey) {\n LicenseInfo.setLicenseKey(muiLicenseKey);\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { Tooltip, Box, IconButton } from \"@mui/material\";\nimport {\n GridRenderCellParams,\n useGridApiContext,\n GridGroupNode,\n} from \"@mui/x-data-grid-premium\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\n\n/**\n * Default grouping cell that handles expand/collapse, truncation, and tooltips.\n * This is a generic implementation without any folder-specific logic.\n */\nexport function DefaultGroupingCell(params: GridRenderCellParams) {\n const apiRef = useGridApiContext();\n const isGroup = params.rowNode.type === \"group\";\n const groupNode = params.rowNode as GridGroupNode;\n const isExpanded = isGroup ? groupNode.childrenExpanded : false;\n const depth = params.rowNode.depth ?? 0;\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n apiRef.current.setRowChildrenExpansion(params.id, !isExpanded);\n };\n\n const value = String(params.value ?? \"\");\n\n // Indent based on depth (2 units per level)\n const indentLevel = depth * 2;\n\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n ml: indentLevel,\n }}\n >\n {isGroup && (\n <IconButton size=\"small\" onClick={handleExpandClick} sx={{ mr: 0.5 }}>\n {isExpanded ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ChevronRightIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n fontWeight: isGroup ? \"bold\" : undefined,\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n </Box>\n );\n}\n","import { Box, Paper } from \"@mui/material\";\nimport {\n DataGridPremium,\n FilterColumnsArgs,\n GridAutosizeOptions,\n GridColDef,\n GridColumnVisibilityModel,\n GridRenderCellParams,\n GridRowSelectionModel,\n useGridApiRef,\n} from \"@mui/x-data-grid-premium\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport { DataGridProps } from \"../types\";\nimport { DefaultGroupingCell } from \"./DefaultGroupingCell\";\n\nconst autosizeOptions: GridAutosizeOptions = {\n expand: true,\n includeHeaders: true,\n outliersFactor: 1.5,\n};\n\nexport function DataGridWrapper(props: DataGridProps) {\n const {\n columns,\n groupingModel,\n leafField,\n onSelectionChange,\n rows,\n selectedIds,\n GroupingCellComponent,\n } = props;\n\n const GroupingCell = GroupingCellComponent ?? DefaultGroupingCell;\n\n const apiRef = useGridApiRef();\n\n useEffect(() => {\n if (apiRef.current && apiRef.current.autosizeColumns) {\n apiRef.current.autosizeColumns(autosizeOptions);\n }\n }, [columns, groupingModel, leafField]);\n\n const baseVisibility = useMemo(() => {\n const visibility: GridColumnVisibilityModel = {\n id: false,\n };\n\n // Only hide leafField if we have grouping (it shows in grouping column)\n if (groupingModel.length > 0) {\n visibility[leafField] = false;\n }\n\n groupingModel.forEach((field) => {\n visibility[field] = false;\n });\n\n return visibility;\n }, [groupingModel, leafField]);\n\n const [columnVisibilityModel, setColumnVisibilityModel] =\n useState<GridColumnVisibilityModel>(baseVisibility);\n\n useEffect(() => {\n setColumnVisibilityModel(baseVisibility);\n }, [baseVisibility]);\n\n // functions to customize the column and filter panel in the toolbar\n const filterColumns = ({ columns }: FilterColumnsArgs) => {\n return columns\n .filter((column) => column.type !== \"custom\")\n .map((column) => column.field);\n };\n\n const getTogglableColumns = (columns: GridColDef[]) => {\n return columns\n .filter((column) => column.type !== \"custom\")\n .map((column) => column.field);\n };\n\n return (\n <Paper sx={{ width: \"100%\" }}>\n <Box\n sx={{\n height: 500,\n width: \"100%\",\n overflow: \"auto\",\n }}\n >\n <DataGridPremium\n apiRef={apiRef}\n rows={rows}\n columns={columns}\n getRowId={(row: { id: string }) => row.id}\n autosizeOptions={autosizeOptions}\n rowGroupingModel={groupingModel}\n groupingColDef={{\n leafField,\n display: \"flex\",\n minWidth: 300,\n maxWidth: 500,\n flex: 2,\n renderCell: (params: GridRenderCellParams) => (\n <GroupingCell {...params} />\n ),\n }}\n columnVisibilityModel={columnVisibilityModel}\n onColumnVisibilityModelChange={setColumnVisibilityModel}\n onRowSelectionModelChange={(selection: GridRowSelectionModel) => {\n const ids = selection.ids ?? new Set<string>();\n onSelectionChange(new Set([...ids].map(String)));\n }}\n rowSelectionPropagation={{ descendants: true, parents: false }}\n disableRowGrouping={false}\n rowSelectionModel={{\n type: \"include\",\n ids: selectedIds,\n }}\n slotProps={{\n filterPanel: {\n filterFormProps: {\n filterColumns,\n },\n },\n columnsManagement: {\n getTogglableColumns,\n },\n }}\n keepNonExistentRowsSelected\n showToolbar\n disableAggregation\n disableRowSelectionExcludeModel\n disablePivoting\n checkboxSelection\n autosizeOnMount\n pagination\n hideFooterSelectedRowCount\n />\n </Box>\n </Paper>\n );\n}\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\n\ninterface ClearDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n folderLabel: string;\n clearAll: boolean;\n}\n\nexport function ClearDialog({\n open,\n onClose,\n onConfirm,\n folderLabel,\n clearAll,\n}: ClearDialogProps) {\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle\n sx={{\n bgcolor: \"primary.main\",\n color: \"primary.contrastText\",\n fontWeight: \"bold\",\n }}\n >\n {clearAll ? \"Clear All Folders\" : `Clear ${folderLabel}`}\n </DialogTitle>\n <DialogContent sx={{ mt: 2 }}>\n <DialogContentText>\n {clearAll ? (\n \"Are you sure you want to clear all selections?\"\n ) : (\n <>\n Are you sure you want to clear the selection for{\" \"}\n <strong>{folderLabel}</strong>?\n </>\n )}\n </DialogContentText>\n </DialogContent>\n <DialogActions sx={{ justifyContent: \"center\", gap: 2, pb: 2 }}>\n <Button variant=\"contained\" color=\"primary\" onClick={onClose} autoFocus>\n Cancel\n </Button>\n <Button variant=\"outlined\" color=\"secondary\" onClick={onConfirm}>\n Clear\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\n\ninterface LimitDialogProps {\n open: boolean;\n onClose: () => void;\n maxTracks: number;\n}\n\nexport function LimitDialog({ open, onClose, maxTracks }: LimitDialogProps) {\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>Track Limit Reached</DialogTitle>\n <DialogContent>\n <DialogContentText>\n You can select up to {maxTracks} tracks at a time. Please remove a\n track before adding another.\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} autoFocus>\n OK\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\n\ninterface ResetDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nexport function ResetDialog({ open, onClose, onConfirm }: ResetDialogProps) {\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle\n sx={{\n bgcolor: \"primary.main\",\n color: \"primary.contrastText\",\n fontWeight: \"bold\",\n }}\n >\n Reset to Browser State\n </DialogTitle>\n <DialogContent sx={{ mt: 2 }}>\n <DialogContentText>\n Are you sure you want to reset all selections to the current browser\n state?\n </DialogContentText>\n </DialogContent>\n <DialogActions sx={{ justifyContent: \"center\", gap: 2, pb: 2 }}>\n <Button variant=\"contained\" color=\"primary\" onClick={onClose} autoFocus>\n Cancel\n </Button>\n <Button variant=\"outlined\" color=\"secondary\" onClick={onConfirm}>\n Reset\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { Breadcrumbs, Link, Typography } from \"@mui/material\";\nimport NavigateNextIcon from \"@mui/icons-material/NavigateNext\";\nimport { FolderDefinition } from \"../Folders/types\";\n\nexport interface BreadcrumbProps {\n currentFolder: FolderDefinition | null;\n onNavigateToRoot: () => void;\n}\n\nexport function Breadcrumb({\n currentFolder,\n onNavigateToRoot,\n}: BreadcrumbProps) {\n return (\n <Breadcrumbs separator={<NavigateNextIcon fontSize=\"small\" />}>\n {currentFolder ? (\n <Link\n component=\"button\"\n variant=\"body1\"\n onClick={onNavigateToRoot}\n underline=\"hover\"\n sx={{ cursor: \"pointer\" }}\n >\n All Folders\n </Link>\n ) : (\n <Typography variant=\"body1\" color=\"text.primary\">\n All Folders\n </Typography>\n )}\n {currentFolder && (\n <Typography variant=\"body1\" color=\"text.primary\">\n {currentFolder.label}\n </Typography>\n )}\n </Breadcrumbs>\n );\n}\n","import { Paper, Typography } from \"@mui/material\";\nimport { FolderDefinition } from \"../Folders/types\";\n\nexport interface FolderCardProps {\n folder: FolderDefinition;\n onClick: () => void;\n}\n\nexport function FolderCard({ folder, onClick }: FolderCardProps) {\n return (\n <Paper\n elevation={1}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }}\n role=\"button\"\n tabIndex={0}\n sx={{\n p: 3,\n cursor: \"pointer\",\n transition: \"all 0.2s ease-in-out\",\n \"&:hover\": {\n elevation: 3,\n boxShadow: 3,\n bgcolor: \"action.hover\",\n },\n \"&:focus\": {\n outline: \"2px solid\",\n outlineColor: \"primary.main\",\n outlineOffset: 2,\n },\n }}\n >\n <Typography variant=\"h6\" gutterBottom>\n {folder.label}\n </Typography>\n {folder.description && (\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\n {folder.description}\n </Typography>\n )}\n <Typography variant=\"caption\" color=\"text.secondary\">\n {folder.rows.length.toLocaleString()} tracks available\n </Typography>\n </Paper>\n );\n}\n","import { Paper, Stack, Typography } from \"@mui/material\";\nimport { FolderDefinition } from \"../Folders/types\";\nimport { FolderCard } from \"./FolderCard\";\n\nexport interface FolderListProps {\n folders: FolderDefinition[];\n onFolderSelect: (folderId: string) => void;\n}\n\nexport function FolderList({ folders, onFolderSelect }: FolderListProps) {\n if (folders.length === 0) {\n return (\n <Paper\n variant=\"outlined\"\n sx={{\n height: 500,\n borderWidth: 2,\n }}\n >\n <Typography color=\"text.secondary\" sx={{ p: 3 }}>\n No folders available\n </Typography>\n </Paper>\n );\n }\n\n return (\n <Paper\n variant=\"outlined\"\n sx={{\n height: 500,\n overflow: \"auto\",\n borderWidth: 2,\n }}\n >\n <Stack spacing={2} sx={{ p: 2 }}>\n {folders.map((folder) => (\n <FolderCard\n key={folder.id}\n folder={folder}\n onClick={() => onFolderSelect(folder.id)}\n />\n ))}\n </Stack>\n </Paper>\n );\n}\n","import { Track } from \"@weng-lab/genomebrowser\";\nimport { Assembly, FolderDefinition } from \"./Folders/types\";\nimport type { TrackSelectTrackContext } from \"./trackContext\";\n\nconst buildManagedTrack = ({\n assembly,\n folder,\n id,\n trackContext,\n}: {\n assembly: Assembly;\n folder: FolderDefinition;\n id: string;\n trackContext?: TrackSelectTrackContext;\n}) => {\n const row = folder.rows.find((candidate) => candidate.id === id);\n if (!row) {\n return null;\n }\n\n const track = folder.createTrack(row, { assembly, trackContext });\n if (!track) {\n return null;\n }\n\n return track;\n};\n\nexport const diffManagedTracks = ({\n assembly,\n currentTracks,\n folders,\n selectedByFolder,\n trackContext,\n}: {\n assembly: Assembly;\n currentTracks: Track[];\n folders: FolderDefinition[];\n selectedByFolder: Map<string, Set<string>>;\n trackContext?: TrackSelectTrackContext;\n}) => {\n const nextManagedIds = new Set<string>();\n const currentManagedIds = new Set<string>();\n const idsToRemove: string[] = [];\n const tracksToAdd: Track[] = [];\n\n currentTracks.forEach((track) => {\n if (folders.some((folder) => track.id.startsWith(`${folder.id}/`))) {\n currentManagedIds.add(track.id);\n }\n });\n\n folders.forEach((folder) => {\n const selectedIds = selectedByFolder.get(folder.id) ?? new Set<string>();\n\n selectedIds.forEach((id) => {\n nextManagedIds.add(id);\n });\n });\n\n currentManagedIds.forEach((id) => {\n if (!nextManagedIds.has(id)) {\n idsToRemove.push(id);\n }\n });\n\n folders.forEach((folder) => {\n const selectedIds = selectedByFolder.get(folder.id) ?? new Set<string>();\n\n selectedIds.forEach((id) => {\n if (currentManagedIds.has(id)) {\n return;\n }\n\n const track = buildManagedTrack({\n assembly,\n folder,\n id,\n trackContext,\n });\n\n if (track) {\n tracksToAdd.push(track);\n }\n });\n });\n\n return {\n idsToRemove,\n tracksToAdd,\n };\n};\n","import { FolderDefinition, FolderView } from \"./Folders/types\";\n\nexport const resolveFolderView = (\n folder: FolderDefinition,\n activeViewIdByFolder: Map<string, string>,\n): FolderView => {\n const activeViewId = activeViewIdByFolder.get(folder.id);\n const activeView = folder.views?.find((view) => view.id === activeViewId);\n\n return (\n activeView ??\n folder.views?.[0] ?? {\n id: \"default\",\n label: folder.label,\n columns: folder.columns,\n groupingModel: folder.groupingModel,\n leafField: folder.leafField,\n }\n );\n};\n","import { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { ExtendedTreeItemProps } from \"./types\";\n\ntype TreeRow = {\n id: string;\n [key: string]: unknown;\n};\n\ntype BuildSelectedTreeOptions = {\n folderId: string;\n rootLabel: string;\n selectedRows: TreeRow[];\n groupingModel: string[];\n leafField: string;\n};\n\nconst toLabel = (value: unknown, fallback: string) => {\n if (value === null || value === undefined || value === \"\") {\n return fallback;\n }\n\n return String(value);\n};\n\nconst isHighlightedField = (field: string) => {\n return field === \"assay\" || field === \"ome\";\n};\n\nconst createRootNode = (\n folderId: string,\n rootLabel: string,\n): TreeViewBaseItem<ExtendedTreeItemProps> => ({\n id: `${folderId}::root`,\n kind: \"root\",\n label: rootLabel,\n icon: \"folder\",\n children: [],\n allExpAccessions: [],\n});\n\nconst createLeafNode = (\n row: TreeRow,\n leafField: string,\n): TreeViewBaseItem<ExtendedTreeItemProps> => {\n const value = row[leafField];\n const label = toLabel(value, row.id);\n\n return {\n id: row.id,\n kind: \"leaf\",\n field: leafField,\n value: label,\n rowId: row.id,\n label,\n icon: \"removeable\",\n highlightName: isHighlightedField(leafField) ? label : undefined,\n isHighlightedItem: isHighlightedField(leafField),\n children: [],\n allExpAccessions: [row.id],\n };\n};\n\nconst appendGroupedRows = (\n parent: TreeViewBaseItem<ExtendedTreeItemProps>,\n rows: TreeRow[],\n groupingModel: string[],\n depth: number,\n folderId: string,\n leafField: string,\n path: string[],\n) => {\n if (depth >= groupingModel.length) {\n rows.forEach((row) => {\n const leafNode = createLeafNode(row, leafField);\n parent.children!.push(leafNode);\n parent.allExpAccessions!.push(row.id);\n });\n return;\n }\n\n const field = groupingModel[depth];\n const groupedRows = new Map<string, TreeRow[]>();\n\n rows.forEach((row) => {\n const value = toLabel(row[field], row.id);\n const groupRows = groupedRows.get(value);\n if (groupRows) {\n groupRows.push(row);\n return;\n }\n\n groupedRows.set(value, [row]);\n });\n\n groupedRows.forEach((groupRows, value) => {\n const nodeId = `${folderId}::${[...path, `${field}=${encodeURIComponent(value)}`].join(\"::\")}`;\n const groupNode: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: nodeId,\n kind: \"group\",\n field,\n value,\n label: value,\n icon: \"removeable\",\n highlightName: isHighlightedField(field) ? value : undefined,\n isHighlightedItem: isHighlightedField(field),\n children: [],\n allExpAccessions: [],\n };\n\n appendGroupedRows(\n groupNode,\n groupRows,\n groupingModel,\n depth + 1,\n folderId,\n leafField,\n [...path, `${field}=${encodeURIComponent(value)}`],\n );\n\n parent.children!.push(groupNode);\n parent.allExpAccessions!.push(...groupNode.allExpAccessions!);\n });\n};\n\nexport const buildSelectedTree = ({\n folderId,\n rootLabel,\n selectedRows,\n groupingModel,\n leafField,\n}: BuildSelectedTreeOptions): TreeViewBaseItem<ExtendedTreeItemProps>[] => {\n const root = createRootNode(folderId, rootLabel);\n\n appendGroupedRows(\n root,\n selectedRows,\n groupingModel,\n 0,\n folderId,\n leafField,\n [],\n );\n\n return [root];\n};\n","import Folder from \"@mui/icons-material/Folder\";\nimport IndeterminateCheckBoxRoundedIcon from \"@mui/icons-material/IndeterminateCheckBoxRounded\";\nimport { Box, Stack, Tooltip, Typography } from \"@mui/material\";\nimport Collapse from \"@mui/material/Collapse\";\nimport { alpha, styled } from \"@mui/material/styles\";\nimport {\n TreeItemCheckbox,\n TreeItemIconContainer,\n TreeItemLabel,\n} from \"@mui/x-tree-view/TreeItem\";\nimport { TreeItemIcon } from \"@mui/x-tree-view/TreeItemIcon\";\nimport { TreeItemProvider } from \"@mui/x-tree-view/TreeItemProvider\";\nimport { useTreeItemModel } from \"@mui/x-tree-view/hooks\";\nimport { useTreeItem } from \"@mui/x-tree-view/useTreeItem\";\nimport React, { ReactNode } from \"react\";\nimport {\n CustomLabelProps,\n CustomTreeItemProps,\n ExtendedTreeItemProps,\n} from \"../types\";\n\nconst TreeItemRoot = styled(\"li\")(({ theme }) => ({\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n outline: 4,\n color: theme.palette.grey[400],\n ...theme.applyStyles(\"light\", {\n color: theme.palette.grey[600],\n }),\n}));\n\nconst TreeItemLabelText = styled(Typography)(({ theme }) => ({\n color: theme.palette.text.primary,\n fontFamily: \"inherit\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n}));\n\nfunction CustomLabel({\n icon: Icon,\n children,\n isHighlightedItem,\n highlightName,\n renderIcon,\n ...other\n}: CustomLabelProps) {\n const variant = \"body2\";\n const fontWeight = 500;\n const labelText = typeof children === \"string\" ? children : \"\";\n return (\n <TreeItemLabel\n {...other}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n minWidth: 0,\n overflow: \"hidden\",\n flex: 1,\n }}\n >\n {Icon && React.isValidElement(Icon) ? (\n <Box className=\"labelIcon\" sx={{ mr: 1, flexShrink: 0 }}>\n {Icon}\n </Box>\n ) : (\n <Box\n component={Icon as React.ElementType}\n className=\"labelIcon\"\n color=\"inherit\"\n sx={{ mr: 1, fontSize: \"1.2rem\", flexShrink: 0 }}\n />\n )}\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n sx={{ minWidth: 0, overflow: \"hidden\", flex: 1 }}\n >\n {isHighlightedItem && highlightName && renderIcon && (\n <Box sx={{ flexShrink: 0 }}>{renderIcon(highlightName)}</Box>\n )}\n <Tooltip title={labelText} enterDelay={500} placement=\"top\">\n <TreeItemLabelText fontWeight={fontWeight} variant={variant}>\n {labelText}\n </TreeItemLabelText>\n </Tooltip>\n </Stack>\n </TreeItemLabel>\n );\n}\n\nconst TreeItemContent = styled(\"div\")(({ theme }) => ({\n padding: theme.spacing(0.5),\n paddingRight: theme.spacing(2),\n paddingLeft: `calc(${theme.spacing(1)} + 6px * var(--TreeView-itemDepth))`,\n width: \"100%\",\n boxSizing: \"border-box\",\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.spacing(1),\n cursor: \"pointer\",\n WebkitTapHighlightColor: \"transparent\",\n flexDirection: \"row-reverse\",\n borderRadius: theme.spacing(0.7),\n marginBottom: theme.spacing(0.5),\n marginTop: theme.spacing(0.5),\n fontWeight: 500,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n color: \"white\",\n ...theme.applyStyles(\"light\", {\n color: theme.palette.primary.main,\n }),\n },\n}));\n\nconst getIconFromTreeItemType = (\n itemType: string,\n renderIcon?: (name: string) => ReactNode,\n) => {\n switch (itemType) {\n case \"folder\":\n return Folder;\n case \"removeable\":\n return IndeterminateCheckBoxRoundedIcon;\n default:\n return renderIcon ? renderIcon(itemType) : Folder;\n }\n};\n\nexport const CustomTreeItem = React.forwardRef(function CustomTreeItem(\n props: CustomTreeItemProps,\n ref: React.Ref<HTMLLIElement>,\n) {\n const {\n id,\n itemId,\n label,\n disabled,\n children,\n onRemove,\n renderIcon,\n ...other\n } = props;\n\n const {\n getContextProviderProps,\n getRootProps,\n getContentProps,\n getIconContainerProps,\n getCheckboxProps,\n getLabelProps,\n getGroupTransitionProps,\n status,\n } = useTreeItem({\n id,\n itemId,\n children,\n label,\n disabled,\n rootRef: ref as never,\n });\n\n const item = useTreeItemModel<ExtendedTreeItemProps>(itemId)!;\n const icon = getIconFromTreeItemType(item.icon, renderIcon);\n const rootProps = getRootProps(other) as React.ComponentPropsWithoutRef<\"li\">;\n\n const handleRemoveIconClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onRemove?.(item);\n };\n\n return (\n <TreeItemProvider {...getContextProviderProps()}>\n <TreeItemRoot {...rootProps}>\n <TreeItemContent {...getContentProps()}>\n <TreeItemIconContainer {...getIconContainerProps()}>\n <TreeItemIcon status={status} />\n </TreeItemIconContainer>\n <TreeItemCheckbox {...getCheckboxProps()} />\n <CustomLabel\n {...getLabelProps({\n icon:\n item.icon === \"removeable\" ? (\n <Box\n onClick={handleRemoveIconClick}\n sx={{\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n mr: 1,\n \"&:hover\": {\n backgroundColor: \"rgba(0,0,0,0.1)\",\n },\n }}\n >\n <IndeterminateCheckBoxRoundedIcon fontSize=\"small\" />\n </Box>\n ) : (\n icon\n ),\n expandable: (status.expandable && status.expanded).toString(),\n isHighlightedItem: item.isHighlightedItem,\n highlightName: item.highlightName,\n id: item.id,\n renderIcon,\n })}\n />\n </TreeItemContent>\n {children && <Collapse {...getGroupTransitionProps()} />}\n </TreeItemRoot>\n </TreeItemProvider>\n );\n});\n","import { Avatar, Box, Paper, Typography } from \"@mui/material\";\nimport { RichTreeView, TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { useTreeItemModel } from \"@mui/x-tree-view/hooks\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { buildSelectedTree } from \"../buildSelectedTree\";\nimport {\n CustomTreeItemProps,\n ExtendedTreeItemProps,\n TreeViewWrapperProps,\n} from \"../types\";\nimport { resolveFolderView } from \"../resolveFolderView\";\nimport { CustomTreeItem } from \"./CustomTreeItem\";\n\nconst attachFolderId = (\n items: TreeViewBaseItem<ExtendedTreeItemProps>[],\n folderId: string,\n): TreeViewBaseItem<ExtendedTreeItemProps>[] => {\n return items.map((item) => ({\n ...item,\n folderId,\n children: item.children\n ? attachFolderId(item.children, folderId)\n : undefined,\n }));\n};\n\nfunction getAllExpandableItemIds(\n items: TreeViewBaseItem<ExtendedTreeItemProps>[],\n): string[] {\n const ids: string[] = [];\n for (const item of items) {\n if (item.children && item.children.length > 0) {\n ids.push(item.id);\n ids.push(...getAllExpandableItemIds(item.children));\n }\n }\n return ids;\n}\n\nfunction FolderTree({\n items,\n LeafTreeItemComponent,\n TreeItemComponent,\n onRemove,\n}: {\n items: TreeViewBaseItem<ExtendedTreeItemProps>[];\n LeafTreeItemComponent?: React.ForwardRefExoticComponent<\n CustomTreeItemProps & React.RefAttributes<HTMLLIElement>\n >;\n TreeItemComponent?: React.ForwardRefExoticComponent<\n CustomTreeItemProps & React.RefAttributes<HTMLLIElement>\n >;\n onRemove: (item: TreeViewBaseItem<ExtendedTreeItemProps>) => void;\n}) {\n const allExpandableIds = useMemo(\n () => getAllExpandableItemIds(items),\n [items],\n );\n const [expandedItems, setExpandedItems] =\n useState<string[]>(allExpandableIds);\n\n useEffect(() => {\n setExpandedItems((prev) => {\n const newIds = allExpandableIds.filter((id) => !prev.includes(id));\n if (newIds.length > 0) {\n return [...prev, ...newIds];\n }\n return prev;\n });\n }, [allExpandableIds]);\n\n const handleRemoveTreeItem = (\n item: TreeViewBaseItem<ExtendedTreeItemProps>,\n ) => {\n onRemove(item);\n };\n\n const TreeItem = useMemo(\n () =>\n TreeItemComponent || LeafTreeItemComponent\n ? React.forwardRef<HTMLLIElement, CustomTreeItemProps>(\n function TreeItem(props, ref) {\n const item = useTreeItemModel<ExtendedTreeItemProps>(\n props.itemId,\n );\n const Component =\n item?.kind === \"leaf\"\n ? (LeafTreeItemComponent ??\n TreeItemComponent ??\n CustomTreeItem)\n : (TreeItemComponent ?? CustomTreeItem);\n\n return <Component {...props} ref={ref} />;\n },\n )\n : CustomTreeItem,\n [LeafTreeItemComponent, TreeItemComponent],\n );\n\n return (\n <RichTreeView\n items={items}\n expandedItems={expandedItems}\n onExpandedItemsChange={(\n _event: React.SyntheticEvent | null,\n ids: string[],\n ) => setExpandedItems(ids)}\n slots={{ item: TreeItem }}\n slotProps={{\n item: {\n onRemove: handleRemoveTreeItem,\n } as Partial<CustomTreeItemProps>,\n }}\n sx={{\n ml: 1,\n mr: 1,\n \"& ul\": {\n paddingInlineStart: \"12px\",\n },\n }}\n itemChildrenIndentation={0}\n />\n );\n}\n\nexport function TreeViewWrapper({\n folders,\n selectedByFolder,\n activeViewIdByFolder,\n selectedCount,\n onRemove,\n}: TreeViewWrapperProps) {\n const folderTrees = useMemo(\n () =>\n folders.flatMap((folder) => {\n const folderSelectedIds = selectedByFolder.get(folder.id);\n if (!folderSelectedIds || folderSelectedIds.size === 0) {\n return [];\n }\n\n const activeView = resolveFolderView(folder, activeViewIdByFolder);\n const selectedRows = folder.rows.filter((row) =>\n folderSelectedIds.has(row.id),\n );\n\n return [\n {\n folderId: folder.id,\n items: attachFolderId(\n buildSelectedTree({\n folderId: folder.id,\n rootLabel: folder.label,\n selectedRows,\n groupingModel: activeView.groupingModel,\n leafField: activeView.leafField,\n }),\n folder.id,\n ),\n TreeItemComponent: folder.TreeItemComponent,\n LeafTreeItemComponent: folder.LeafTreeItemComponent,\n },\n ];\n }),\n [activeViewIdByFolder, folders, selectedByFolder],\n );\n\n return (\n <Paper\n sx={{\n height: 500,\n width: \"100%\",\n border: \"10px solid\",\n borderColor: \"grey.200\",\n boxSizing: \"border-box\",\n borderRadius: 2,\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n py: 1,\n backgroundColor: \"grey.200\",\n flexShrink: 0,\n }}\n >\n <Avatar\n sx={{\n width: 30,\n height: 30,\n fontSize: 14,\n fontWeight: \"bold\",\n bgcolor: \"white\",\n color: \"text.primary\",\n }}\n >\n {selectedCount}\n </Avatar>\n <Typography fontWeight=\"bold\">Active Tracks</Typography>\n </Box>\n <Box\n sx={{\n flex: 1,\n overflow: \"auto\",\n }}\n >\n {folderTrees.map((folderTree) => (\n <FolderTree\n key={folderTree.folderId}\n items={folderTree.items}\n LeafTreeItemComponent={folderTree.LeafTreeItemComponent}\n TreeItemComponent={folderTree.TreeItemComponent}\n onRemove={onRemove}\n />\n ))}\n </Box>\n </Paper>\n );\n}\n","import { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { TrackStoreInstance } from \"@weng-lab/genomebrowser\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport {\n Box,\n Button,\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n Stack,\n} from \"@mui/material\";\nimport { useEffect, useState } from \"react\";\nimport { Assembly, FolderDefinition } from \"./Folders/types\";\nimport { DataGridWrapper } from \"./DataGrid/DataGridWrapper\";\nimport { ClearDialog } from \"./Dialogs/ClearDialog\";\nimport { LimitDialog } from \"./Dialogs/LimitDialog\";\nimport { ResetDialog } from \"./Dialogs/ResetDialog\";\nimport { Breadcrumb } from \"./FolderList/Breadcrumb\";\nimport { FolderList } from \"./FolderList/FolderList\";\nimport { diffManagedTracks } from \"./managedTracks\";\nimport { resolveFolderView } from \"./resolveFolderView\";\nimport type { TrackSelectTrackContext } from \"./trackContext\";\nimport { ExtendedTreeItemProps } from \"./types\";\nimport { TreeViewWrapper } from \"./TreeView/TreeViewWrapper\";\n\nexport type InitialSelectedIdsByAssembly = Partial<\n Record<Assembly, Record<string, string[]>>\n>;\n\nexport interface TrackSelectProps {\n assembly: Assembly;\n folders: FolderDefinition[];\n initialSelectedIds?: InitialSelectedIdsByAssembly;\n sessionStorageKey?: string;\n trackStore?: TrackStoreInstance;\n onCancel?: () => void;\n maxTracks?: number;\n trackContext?: TrackSelectTrackContext;\n open: boolean;\n onClose: () => void;\n title?: string;\n}\n\nconst DEFAULT_MAX_TRACKS = 30;\n\nconst DEFAULT_TITLE = \"Track Select\";\n\ntype ViewState = \"folder-list\" | \"folder-detail\";\n\nconst createEmptySelectedByFolder = (folders: FolderDefinition[]) => {\n return new Map(folders.map((folder) => [folder.id, new Set<string>()]));\n};\n\nconst cloneSelectedByFolder = (selectedByFolder: Map<string, Set<string>>) => {\n return new Map(\n Array.from(selectedByFolder, ([folderId, ids]) => [folderId, new Set(ids)]),\n );\n};\n\nconst normalizeSelectedByFolder = ({\n folders,\n selectedIdsByFolder,\n}: {\n folders: FolderDefinition[];\n selectedIdsByFolder?: Record<string, string[]>;\n}) => {\n const normalized = createEmptySelectedByFolder(folders);\n\n if (!selectedIdsByFolder) {\n return normalized;\n }\n\n folders.forEach((folder) => {\n const ids = selectedIdsByFolder[folder.id];\n if (!ids) {\n return;\n }\n\n normalized.set(\n folder.id,\n new Set(ids.filter((id) => id.startsWith(`${folder.id}/`))),\n );\n });\n\n return normalized;\n};\n\nconst loadSelectedByFolder = ({\n assembly,\n folders,\n initialSelectedIds,\n sessionStorageKey,\n}: {\n assembly: Assembly;\n folders: FolderDefinition[];\n initialSelectedIds?: InitialSelectedIdsByAssembly;\n sessionStorageKey?: string;\n}) => {\n const fallback = normalizeSelectedByFolder({\n folders,\n selectedIdsByFolder: initialSelectedIds?.[assembly],\n });\n\n if (!sessionStorageKey || typeof window === \"undefined\") {\n return fallback;\n }\n\n const storedValue = window.sessionStorage.getItem(sessionStorageKey);\n if (!storedValue) {\n return fallback;\n }\n\n try {\n const parsed = JSON.parse(storedValue) as Record<string, string[]>;\n return normalizeSelectedByFolder({\n folders,\n selectedIdsByFolder: parsed,\n });\n } catch {\n return fallback;\n }\n};\n\nconst saveSelectedByFolder = ({\n selectedByFolder,\n sessionStorageKey,\n}: {\n selectedByFolder: Map<string, Set<string>>;\n sessionStorageKey?: string;\n}) => {\n if (!sessionStorageKey || typeof window === \"undefined\") {\n return;\n }\n\n const serialized = Object.fromEntries(\n Array.from(selectedByFolder, ([folderId, ids]) => [\n folderId,\n Array.from(ids),\n ]),\n );\n window.sessionStorage.setItem(sessionStorageKey, JSON.stringify(serialized));\n};\n\nexport default function TrackSelect({\n assembly,\n folders,\n initialSelectedIds,\n sessionStorageKey,\n trackStore,\n onCancel,\n maxTracks,\n trackContext,\n open,\n onClose,\n title = DEFAULT_TITLE,\n}: TrackSelectProps) {\n const [limitDialogOpen, setLimitDialogOpen] = useState(false);\n const [clearDialogOpen, setClearDialogOpen] = useState(false);\n const [resetDialogOpen, setResetDialogOpen] = useState(false);\n const [currentView, setCurrentView] = useState<ViewState>(() =>\n folders.length > 1 ? \"folder-list\" : \"folder-detail\",\n );\n const [activeFolderId, setActiveFolderId] = useState(\n () => folders[0]?.id ?? \"\",\n );\n const [activeViewIdByFolder, setActiveViewIdByFolder] = useState(\n () =>\n new Map(\n folders.flatMap((folder) =>\n folder.views?.[0] ? [[folder.id, folder.views[0].id] as const] : [],\n ),\n ),\n );\n const [committedSelectedByFolder, setCommittedSelectedByFolder] = useState(\n () =>\n loadSelectedByFolder({\n assembly,\n folders,\n initialSelectedIds,\n sessionStorageKey,\n }),\n );\n const [selectedByFolder, setSelectedByFolder] = useState(() =>\n cloneSelectedByFolder(committedSelectedByFolder),\n );\n const maxTracksLimit = maxTracks ?? DEFAULT_MAX_TRACKS;\n\n useEffect(() => {\n setActiveFolderId((currentFolderId) => {\n if (folders.some((folder) => folder.id === currentFolderId)) {\n return currentFolderId;\n }\n\n return folders[0]?.id ?? \"\";\n });\n\n if (folders.length <= 1) {\n setCurrentView(\"folder-detail\");\n }\n\n setActiveViewIdByFolder((current) => {\n return new Map(\n folders.flatMap((folder) => {\n if (!folder.views?.length) {\n return [];\n }\n\n const activeViewId = current.get(folder.id);\n if (\n activeViewId &&\n folder.views.some((view) => view.id === activeViewId)\n ) {\n return [[folder.id, activeViewId] as const];\n }\n\n return [[folder.id, folder.views[0].id] as const];\n }),\n );\n });\n }, [folders]);\n\n useEffect(() => {\n const nextCommittedSelection = loadSelectedByFolder({\n assembly,\n folders,\n initialSelectedIds,\n sessionStorageKey,\n });\n setCommittedSelectedByFolder(nextCommittedSelection);\n setSelectedByFolder(cloneSelectedByFolder(nextCommittedSelection));\n }, [assembly, folders, initialSelectedIds, sessionStorageKey]);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n setSelectedByFolder(cloneSelectedByFolder(committedSelectedByFolder));\n }, [committedSelectedByFolder, open]);\n\n useEffect(() => {\n if (!assembly || !trackStore) {\n return;\n }\n\n const { idsToRemove, tracksToAdd } = diffManagedTracks({\n assembly,\n currentTracks: trackStore.getState().tracks,\n folders,\n selectedByFolder: committedSelectedByFolder,\n trackContext,\n });\n\n const { insertTrack, removeTrack } = trackStore.getState();\n idsToRemove.forEach((id) => removeTrack(id));\n tracksToAdd.forEach((track) => insertTrack(track));\n }, [assembly, committedSelectedByFolder, folders, trackContext, trackStore]);\n\n const activeFolder =\n folders.find((folder) => folder.id === activeFolderId) ?? folders[0];\n const activeConfig = activeFolder\n ? resolveFolderView(activeFolder, activeViewIdByFolder)\n : undefined;\n const activeViewId = activeConfig?.id ?? \"\";\n const rows = activeFolder?.rows ?? [];\n const selectedIds = new Set(\n selectedByFolder.get(activeFolder?.id ?? \"\") ?? [],\n );\n let selectedCount = 0;\n selectedByFolder.forEach((ids) => {\n selectedCount += ids.size;\n });\n\n const handleFolderSelect = (folderId: string) => {\n setActiveFolderId(folderId);\n setCurrentView(\"folder-detail\");\n };\n\n const handleNavigateToRoot = () => {\n setCurrentView(\"folder-list\");\n };\n\n const handleCancel = () => {\n onCancel?.();\n onClose();\n };\n\n const ViewSelector = activeFolder?.ViewSelector;\n\n const confirmReset = () => {\n setResetDialogOpen(false);\n setSelectedByFolder(cloneSelectedByFolder(committedSelectedByFolder));\n };\n\n const confirmClear = () => {\n setClearDialogOpen(false);\n\n const nextSelectedByFolder = new Map(selectedByFolder);\n\n if (currentView === \"folder-detail\") {\n nextSelectedByFolder.set(activeFolderId, new Set<string>());\n } else {\n folders.forEach((folder) =>\n nextSelectedByFolder.set(folder.id, new Set<string>()),\n );\n }\n\n setSelectedByFolder(nextSelectedByFolder);\n };\n\n const handleActiveViewChange = (viewId: string) => {\n if (!activeFolder) {\n return;\n }\n\n setActiveViewIdByFolder((prev) => {\n const next = new Map(prev);\n next.set(activeFolder.id, viewId);\n return next;\n });\n };\n\n const handleSelectionChange = (ids: Set<string>) => {\n if (!activeFolder) {\n return;\n }\n\n const filteredIds = new Set(\n Array.from(ids).filter((id) =>\n activeFolder.rows.some((row) => row.id === id),\n ),\n );\n\n let nextTotal = filteredIds.size;\n selectedByFolder.forEach((folderIds, folderId) => {\n if (folderId !== activeFolder.id) {\n nextTotal += folderIds.size;\n }\n });\n\n if (nextTotal > maxTracksLimit) {\n setLimitDialogOpen(true);\n return;\n }\n\n const nextSelectedByFolder = new Map(selectedByFolder);\n nextSelectedByFolder.set(activeFolder.id, filteredIds);\n setSelectedByFolder(nextSelectedByFolder);\n };\n\n const handleRemoveTreeItem = (\n item: TreeViewBaseItem<ExtendedTreeItemProps>,\n ) => {\n const folderId = item.folderId;\n if (!folderId || !item.allExpAccessions?.length) {\n return;\n }\n\n const nextSelectedByFolder = new Map(selectedByFolder);\n const nextSet = new Set(\n nextSelectedByFolder.get(folderId) ?? new Set<string>(),\n );\n item.allExpAccessions.forEach((id) => nextSet.delete(id));\n nextSelectedByFolder.set(folderId, nextSet);\n setSelectedByFolder(nextSelectedByFolder);\n };\n\n const handleSubmit = () => {\n saveSelectedByFolder({ selectedByFolder, sessionStorageKey });\n setCommittedSelectedByFolder(cloneSelectedByFolder(selectedByFolder));\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={handleCancel} maxWidth=\"lg\" fullWidth>\n <DialogTitle\n sx={{\n bgcolor: \"primary.main\",\n color: \"primary.contrastText\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontWeight: \"bold\",\n }}\n >\n {title}\n <IconButton\n size=\"large\"\n onClick={handleCancel}\n sx={{ color: \"primary.contrastText\", p: 0 }}\n >\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent sx={{ marginTop: \"5px\" }}>\n {!activeFolder || !activeConfig ? (\n <Box sx={{ p: 2 }}>No folders available.</Box>\n ) : (\n <Box sx={{ flex: 1, pt: 1 }}>\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n sx={{ mb: 2 }}\n >\n {folders.length > 1 ? (\n <Breadcrumb\n currentFolder={\n currentView === \"folder-detail\" ? activeFolder : null\n }\n onNavigateToRoot={handleNavigateToRoot}\n />\n ) : (\n <Box />\n )}\n {currentView === \"folder-detail\" &&\n ViewSelector &&\n activeFolder.views ? (\n <ViewSelector\n views={activeFolder.views}\n activeViewId={activeViewId}\n onChange={handleActiveViewChange}\n />\n ) : null}\n </Box>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n spacing={2}\n sx={{ width: \"100%\" }}\n >\n <Box\n sx={{\n flex: { xs: \"none\", md: 3 },\n minWidth: 0,\n width: { xs: \"100%\", md: \"auto\" },\n }}\n >\n {currentView === \"folder-list\" ? (\n <FolderList\n folders={folders}\n onFolderSelect={handleFolderSelect}\n />\n ) : (\n <DataGridWrapper\n rows={rows}\n columns={activeConfig.columns}\n groupingModel={activeConfig.groupingModel}\n leafField={activeConfig.leafField}\n label={`${rows.length} Available ${activeFolder.label}`}\n selectedIds={selectedIds}\n onSelectionChange={handleSelectionChange}\n GroupingCellComponent={activeFolder.GroupingCellComponent}\n />\n )}\n </Box>\n <Box\n sx={{\n flex: { xs: \"none\", md: 2 },\n minWidth: 0,\n width: { xs: \"100%\", md: \"auto\" },\n }}\n >\n <TreeViewWrapper\n folders={folders}\n selectedByFolder={selectedByFolder}\n activeViewIdByFolder={activeViewIdByFolder}\n selectedCount={selectedCount}\n onRemove={handleRemoveTreeItem}\n />\n </Box>\n </Stack>\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mt: 2,\n gap: 1,\n }}\n >\n <Box sx={{ display: \"flex\", gap: 1 }}>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"small\"\n onClick={() => setClearDialogOpen(true)}\n >\n Clear\n </Button>\n {Boolean(trackStore) ? (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"small\"\n onClick={() => setResetDialogOpen(true)}\n >\n Reset\n </Button>\n ) : null}\n </Box>\n <Box sx={{ display: \"flex\", gap: 1 }}>\n <Button variant=\"outlined\" size=\"small\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n onClick={handleSubmit}\n >\n Submit\n </Button>\n </Box>\n </Box>\n <LimitDialog\n open={limitDialogOpen}\n onClose={() => setLimitDialogOpen(false)}\n maxTracks={maxTracksLimit}\n />\n <ClearDialog\n open={clearDialogOpen}\n onClose={() => setClearDialogOpen(false)}\n onConfirm={confirmClear}\n folderLabel={activeFolder.label}\n clearAll={currentView === \"folder-list\"}\n />\n <ResetDialog\n open={resetDialogOpen}\n onClose={() => setResetDialogOpen(false)}\n onConfirm={confirmReset}\n />\n </Box>\n )}\n </DialogContent>\n </Dialog>\n );\n}\n","import { Box } from \"@mui/material\";\nimport type { Assembly } from \"../../types\";\n\nexport type { Assembly };\n\nexport const assayTypes = [\n \"cCRE\",\n \"DNase\",\n \"H3K4me3\",\n \"H3K27ac\",\n \"ATAC\",\n \"CTCF\",\n \"RNA-seq\",\n \"ChromHMM\",\n \"WGBS\",\n];\n\nexport const lifeStages = [\"Adult\", \"Embryonic\", \"N/A\"];\n\nexport const ontologyTypes = [\n \"Aggregate\",\n \"Adipose\",\n \"Adrenal gland\",\n \"Blood\",\n \"Blood vessel\",\n \"Bone\",\n \"Bone marrow\",\n \"Brain\",\n \"Breast\",\n \"Connective tissue\",\n \"Embryo\",\n \"Epithelium\",\n \"Esophagus\",\n \"Eye\",\n \"Fallopian Tube\",\n \"Gallbladder\",\n \"Heart\",\n \"Kidney\",\n \"Large Intestine\",\n \"Limb\",\n \"Liver\",\n \"Lung\",\n \"Lymphoid Tissue\",\n \"Muscle\",\n \"Mouth\",\n \"Nerve\",\n \"Nose\",\n \"Pancreas\",\n \"Parathyroid Gland\",\n \"Ovary\",\n \"Penis\",\n \"Placenta\",\n \"Prostate\",\n \"Skin\",\n \"Small Intestine\",\n \"Spinal Cord\",\n \"Spleen\",\n \"Stomach\",\n \"Testis\",\n \"Thymus\",\n \"Thyroid\",\n \"Urinary Bladder\",\n \"Uterus\",\n \"Vagina\",\n];\n\n/** Color mapping for assay types */\nexport const assayColorMap: { [key: string]: string } = {\n DNase: \"#06da93\",\n ATAC: \"#02c7b9\",\n H3K4me3: \"#ff2020\",\n ChromHMM: \"#0097a7\",\n H3K27ac: \"#fdc401\",\n CTCF: \"#01a6f1\",\n cCRE: \"#000000\",\n \"RNA-seq\": \"#00aa00\",\n WGBS: \"#648bd8\",\n};\n\n/**\n * Creates the assay icon for DataGrid and RichTreeView\n * @param type - assay type\n * @returns an icon of the assay's respective color\n */\nexport function AssayIcon(type: string) {\n const color = assayColorMap[type];\n return (\n <Box\n sx={{\n width: 12,\n height: 12,\n borderRadius: \"20%\",\n bgcolor: color,\n }}\n />\n );\n}\n\n/**\n * Mapping from JSON assay keys to display names.\n * This is the single source of truth for assay name formatting.\n */\nconst assayJsonToDisplay: Record<string, string> = {\n dnase: \"DNase\",\n atac: \"ATAC\",\n h3k4me3: \"H3K4me3\",\n h3k27ac: \"H3K27ac\",\n ctcf: \"CTCF\",\n chromhmm: \"ChromHMM\",\n ccre: \"cCRE\",\n rnaseq: \"RNA-seq\",\n wgbs: \"WGBS\",\n};\n\n/**\n * Convert JSON assay key to display name.\n * Used only during data loading to normalize assay names.\n */\nexport function formatAssayType(jsonKey: string): string {\n return assayJsonToDisplay[jsonKey.toLowerCase()] ?? jsonKey;\n}\n","import {\n GridColDef,\n GridRenderCellParams,\n GridGroupNode,\n useGridApiContext,\n} from \"@mui/x-data-grid-premium\";\nimport { Stack, capitalize } from \"@mui/material\";\nimport { AssayIcon, ontologyTypes, assayTypes, lifeStages } from \"./constants\";\nimport { BiosampleRowInfo, CollectionType } from \"./types\";\n\nconst collectionTypes: CollectionType[] = [\"Core\", \"Ancillary\", \"Partial\", \"NA\"];\n\nfunction CollectionCell(params: GridRenderCellParams<BiosampleRowInfo>) {\n const apiRef = useGridApiContext();\n\n if (params.rowNode.type !== \"group\") {\n return params.value ?? null;\n }\n\n const groupNode = params.rowNode as GridGroupNode;\n if (groupNode.groupingField !== \"displayName\") {\n return null;\n }\n\n const childIds = groupNode.children;\n if (!childIds || childIds.length === 0) {\n return null;\n }\n\n const firstChildRow = apiRef.current.getRow(\n childIds[0],\n ) as BiosampleRowInfo | null;\n\n return firstChildRow?.collection ?? null;\n}\n\nconst displayNameCol: GridColDef<BiosampleRowInfo> = {\n field: \"displayName\",\n headerName: \"Name\",\n valueFormatter: (value) => value && capitalize(value),\n maxWidth: 300,\n};\n\nconst sortedByAssayOntologyCol: GridColDef<BiosampleRowInfo> = {\n field: \"ontology\",\n headerName: \"Ontology\",\n type: \"singleSelect\",\n valueOptions: ontologyTypes,\n renderCell: (params) => {\n if (params.rowNode.type === \"group\") {\n if (params.value === undefined) {\n return null;\n }\n const val = params.value;\n return (\n <div>\n <b>{val}</b>\n </div>\n );\n }\n },\n};\n\nconst sortedByAssayAssayCol: GridColDef<BiosampleRowInfo> = {\n field: \"assay\",\n headerName: \"Assay\",\n valueOptions: assayTypes,\n renderCell: (params) => {\n if (params.rowNode.type === \"group\") {\n if (params.value === undefined) {\n return null;\n }\n const val = params.value;\n return (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n {AssayIcon(val)}\n <div>\n <b>{val}</b>\n </div>\n </Stack>\n );\n }\n },\n};\n\nconst defaultOntologyCol: GridColDef<BiosampleRowInfo> = {\n field: \"ontology\",\n headerName: \"Ontology\",\n type: \"singleSelect\",\n valueOptions: ontologyTypes,\n renderCell: (params) => {\n if (params.rowNode.type === \"group\") {\n if (params.value === undefined) {\n return null;\n }\n const val = params.value;\n return (\n <div>\n <b>{val}</b>\n </div>\n );\n }\n },\n};\n\nconst defaultAssayCol: GridColDef<BiosampleRowInfo> = {\n field: \"assay\",\n headerName: \"Assay\",\n valueOptions: assayTypes,\n renderCell: (params) => {\n if (params.value === undefined) {\n return null;\n }\n const val = params.value;\n return (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\" sx={{ ml: 6 }}>\n {AssayIcon(val)}\n <div>{val}</div>\n </Stack>\n );\n },\n};\n\nconst sampleTypeCol: GridColDef<BiosampleRowInfo> = {\n field: \"sampleType\",\n headerName: \"Sample Type\",\n type: \"singleSelect\",\n valueOptions: ontologyTypes,\n valueFormatter: (value) => value && capitalize(value),\n};\n\nconst lifeStageCol: GridColDef<BiosampleRowInfo> = {\n field: \"lifeStage\",\n headerName: \"Life Stage\",\n type: \"singleSelect\",\n valueOptions: lifeStages,\n valueFormatter: (value) => value && capitalize(value),\n};\n\nconst collectionCol: GridColDef<BiosampleRowInfo> = {\n field: \"collection\",\n headerName: \"Collection\",\n type: \"singleSelect\",\n valueOptions: collectionTypes,\n width: 100,\n renderCell: (params) => <CollectionCell {...params} />,\n};\n\nconst experimentCol: GridColDef<BiosampleRowInfo> = {\n field: \"experimentAccession\",\n headerName: \"Experiment Accession\",\n};\n\nconst fileCol: GridColDef<BiosampleRowInfo> = {\n field: \"fileAccession\",\n headerName: \"File Accession\",\n};\n\nconst idCol: GridColDef<BiosampleRowInfo> = {\n field: \"id\",\n headerName: \"ID\",\n};\n\n/** Columns for sorted-by-assay view (assay as top-level grouping) */\nexport const sortedByAssayColumns: GridColDef<BiosampleRowInfo>[] = [\n displayNameCol,\n sortedByAssayOntologyCol,\n collectionCol,\n sampleTypeCol,\n lifeStageCol,\n sortedByAssayAssayCol,\n experimentCol,\n fileCol,\n idCol,\n];\n\n/** Default columns (ontology as top-level grouping) */\nexport const defaultColumns: GridColDef<BiosampleRowInfo>[] = [\n defaultAssayCol,\n collectionCol,\n sampleTypeCol,\n lifeStageCol,\n defaultOntologyCol,\n displayNameCol,\n experimentCol,\n fileCol,\n idCol,\n];\n\n/** Grouping model for sorted-by-assay view */\nexport const sortedByAssayGroupingModel = [\"assay\", \"ontology\"];\n\n/** Default grouping model (ontology-based) */\nexport const defaultGroupingModel = [\"ontology\", \"displayName\"];\n\n/** Leaf field for sorted-by-assay view */\nexport const sortedByAssayLeafField = \"displayName\";\n\n/** Default leaf field */\nexport const defaultLeafField = \"assay\";\n","import { ToggleButton, ToggleButtonGroup } from \"@mui/material\";\nimport { FolderView } from \"../../types\";\n\nexport interface BiosampleViewSelectorProps {\n views: FolderView[];\n activeViewId: string;\n onChange: (viewId: string) => void;\n}\n\nexport function BiosampleViewSelector({\n views,\n activeViewId,\n onChange,\n}: BiosampleViewSelectorProps) {\n return (\n <ToggleButtonGroup\n exclusive\n value={activeViewId}\n size=\"small\"\n onChange={(_event, viewId: string | null) => {\n if (viewId) {\n onChange(viewId);\n }\n }}\n >\n {views.map((view) => (\n <ToggleButton key={view.id} value={view.id}>\n {view.label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n );\n}\n","import { Stack, Tooltip, Box, IconButton } from \"@mui/material\";\nimport {\n GridRenderCellParams,\n useGridApiContext,\n GridGroupNode,\n} from \"@mui/x-data-grid-premium\";\nimport { assayTypes, AssayIcon } from \"./constants\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\n\n/**\n * Biosample-specific grouping cell that renders AssayIcon for assay groups/values.\n * Handles expand/collapse, truncation, and tooltips.\n */\nexport default function BiosampleGroupingCell(params: GridRenderCellParams) {\n const apiRef = useGridApiContext();\n const isGroup = params.rowNode.type === \"group\";\n const groupNode = params.rowNode as GridGroupNode;\n const isExpanded = isGroup ? groupNode.childrenExpanded : false;\n const groupingField = isGroup ? groupNode.groupingField : null;\n const depth = params.rowNode.depth ?? 0;\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n apiRef.current.setRowChildrenExpansion(params.id, !isExpanded);\n };\n\n // Render content based on grouping field\n const renderContent = () => {\n const value = String(params.value ?? \"\");\n\n // For assay groups, show the colored icon\n if (isGroup && groupingField === \"assay\") {\n return (\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n sx={{ flex: 1, overflow: \"hidden\" }}\n >\n {AssayIcon(value)}\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontWeight: \"bold\",\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n </Stack>\n );\n }\n\n // For other groups (ontology, displayName), show bold text\n if (isGroup) {\n return (\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n fontWeight: \"bold\",\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n );\n }\n\n // For leaf rows - check if it's an assay value\n const isAssayValue = assayTypes\n .map((a) => a.toLowerCase())\n .includes(value.toLowerCase());\n\n if (isAssayValue) {\n return (\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n sx={{ flex: 1, overflow: \"hidden\" }}\n >\n {AssayIcon(value)}\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n </Stack>\n );\n }\n\n return (\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n );\n };\n\n // Indent based on depth (2 units per level)\n const indentLevel = depth * 2;\n\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n ml: indentLevel,\n }}\n >\n {isGroup && (\n <IconButton size=\"small\" onClick={handleExpandClick} sx={{ mr: 0.5 }}>\n {isExpanded ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ChevronRightIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n {renderContent()}\n </Box>\n );\n}\n","import React from \"react\";\nimport { CustomTreeItem } from \"../../../TreeView/CustomTreeItem\";\nimport { CustomTreeItemProps } from \"../../../types\";\nimport { AssayIcon } from \"./constants\";\n\n/**\n * Biosample-specific TreeItem that renders AssayIcon for assay items.\n * Wraps the generic CustomTreeItem with the AssayIcon renderer.\n */\nexport const BiosampleTreeItem = React.forwardRef<\n HTMLLIElement,\n CustomTreeItemProps\n>(function BiosampleTreeItem(props, ref) {\n return <CustomTreeItem {...props} ref={ref} renderIcon={AssayIcon} />;\n});\n","import {\n BigBedConfig,\n BigWigConfig,\n DisplayMode,\n MethylCConfig,\n Rect,\n Track,\n TrackType,\n ValuedPoint,\n} from \"@weng-lab/genomebrowser\";\nimport type { FC } from \"react\";\nimport { CreateTrackOptions } from \"../../types\";\nimport { BiosampleRowInfo } from \"./types\";\n\nexport type BiosampleTrackContext = {\n onBiosampleFeatureClick?: (args: {\n trackId: string;\n row: BiosampleRowInfo;\n rect: Rect;\n }) => void;\n onBiosampleFeatureHover?: (args: {\n trackId: string;\n row: BiosampleRowInfo;\n rect: Rect;\n }) => void;\n biosampleFeatureTooltip?: FC<Rect>;\n biosampleSignalTooltip?: FC<ValuedPoint[]>;\n biosampleMethylTooltip?: FC<ValuedPoint[]>;\n};\n\nconst assayColors: Record<string, string> = {\n dnase: \"#06da93\",\n h3k4me3: \"#ff0000\",\n h3k27ac: \"#ffcd00\",\n ctcf: \"#00b0d0\",\n atac: \"#02c7b9\",\n rnaseq: \"#00aa00\",\n chromhmm: \"#00ff00\",\n ccre: \"#000000\",\n wgbs: \"#648bd8\",\n};\n\nconst defaultBigWig: Omit<BigWigConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigWig,\n height: 50,\n displayMode: DisplayMode.Full,\n titleSize: 12,\n};\n\nconst defaultBigBed: Omit<BigBedConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigBed,\n height: 20,\n displayMode: DisplayMode.Dense,\n titleSize: 12,\n};\n\nconst defaultMethylC: Omit<MethylCConfig, \"id\" | \"title\" | \"urls\"> = {\n trackType: TrackType.MethylC,\n height: 100,\n displayMode: DisplayMode.Split,\n titleSize: 12,\n color: \"#648bd8\",\n colors: {\n cpg: \"#648bd8\",\n chg: \"#ff944d\",\n chh: \"#ff00ff\",\n depth: \"#525252\",\n },\n};\n\nexport function createBiosampleTrack(\n row: BiosampleRowInfo,\n options: CreateTrackOptions,\n): Track {\n const assay = row.assay.toLowerCase();\n const color = assayColors[assay] ?? \"#000000\";\n const trackContext = options.trackContext;\n\n switch (assay) {\n case \"chromhmm\":\n case \"ccre\":\n return {\n ...defaultBigBed,\n id: row.id,\n url: row.url ?? \"\",\n title: row.displayName,\n color,\n onClick: trackContext?.onBiosampleFeatureClick\n ? (rect: Rect) =>\n trackContext.onBiosampleFeatureClick?.({\n trackId: row.id,\n row,\n rect,\n })\n : undefined,\n onHover: trackContext?.onBiosampleFeatureHover\n ? (rect: Rect) =>\n trackContext.onBiosampleFeatureHover?.({\n trackId: row.id,\n row,\n rect,\n })\n : undefined,\n tooltip: trackContext?.biosampleFeatureTooltip,\n };\n case \"wgbs\":\n return {\n ...defaultMethylC,\n id: row.id,\n title: row.displayName,\n maskCpgByCoverage: true,\n tooltip: trackContext?.biosampleMethylTooltip,\n urls: {\n plusStrand: {\n cpg: { url: row.cpgPlus ?? \"\" },\n chg: { url: \"\" },\n chh: { url: \"\" },\n depth: { url: row.coverage ?? \"\" },\n },\n minusStrand: {\n cpg: { url: row.cpgMinus ?? \"\" },\n chg: { url: \"\" },\n chh: { url: \"\" },\n depth: { url: row.coverage ?? \"\" },\n },\n },\n };\n default:\n return {\n ...defaultBigWig,\n id: row.id,\n url: row.url ?? \"\",\n title: row.displayName,\n color,\n tooltip: trackContext?.biosampleSignalTooltip,\n };\n }\n}\n","import { capitalize } from \"@mui/material\";\nimport { FolderDefinition } from \"../../types\";\nimport {\n BiosampleDataFile,\n BiosampleRowInfo,\n BiosampleTrackInfo,\n} from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n sortedByAssayColumns,\n sortedByAssayGroupingModel,\n sortedByAssayLeafField,\n} from \"./columns\";\nimport { formatAssayType } from \"./constants\";\nimport { BiosampleViewSelector } from \"./BiosampleViewSelector\";\nimport BiosampleGroupingCell from \"./BiosampleGroupingCell\";\nimport { BiosampleTreeItem } from \"./BiosampleTreeItem\";\nimport { createBiosampleTrack } from \"./toTrack\";\n\n/** Flatten a biosample track into one row per assay. */\nfunction flattenTrackIntoRows(\n folderId: string,\n track: BiosampleTrackInfo,\n): BiosampleRowInfo[] {\n const { ontology, lifeStage, sampleType, displayName, collection } = track;\n\n // Keep cCRE rows first so aggregate selections stay prominent in the UI.\n const sortedAssays = [...track.assays].sort((a, b) => {\n const aIsCcre = a.assay.toLowerCase() === \"ccre\";\n const bIsCcre = b.assay.toLowerCase() === \"ccre\";\n if (aIsCcre && !bIsCcre) return -1;\n if (!aIsCcre && bIsCcre) return 1;\n return 0;\n });\n\n return sortedAssays.map(\n ({\n id,\n assay,\n experimentAccession,\n fileAccession,\n url,\n cpgPlus,\n cpgMinus,\n coverage,\n }) => ({\n id: `${folderId}/${id}`,\n ontology: capitalize(ontology),\n lifeStage: capitalize(lifeStage),\n sampleType: capitalize(sampleType),\n displayName: capitalize(displayName),\n assay: formatAssayType(assay),\n experimentAccession,\n fileAccession,\n url,\n collection,\n cpgPlus,\n cpgMinus,\n coverage,\n }),\n );\n}\n\nfunction transformData(\n folderId: string,\n data: BiosampleDataFile,\n): BiosampleRowInfo[] {\n return data.tracks.flatMap((track) => flattenTrackIntoRows(folderId, track));\n}\n\nexport interface CreateBiosampleFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: BiosampleDataFile;\n}\n\n/**\n * Build a biosample folder with its data, tree builder, and track factory.\n */\nexport function createBiosampleFolder(\n options: CreateBiosampleFolderOptions,\n): FolderDefinition<BiosampleRowInfo> {\n const { id, label, description, data } = options;\n const rows = transformData(id, data);\n const views = [\n {\n id: \"default\",\n label: \"Tissue\",\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n },\n {\n id: \"by-assay\",\n label: \"Assay\",\n columns: sortedByAssayColumns,\n groupingModel: sortedByAssayGroupingModel,\n leafField: sortedByAssayLeafField,\n },\n ];\n\n return {\n id,\n label,\n description,\n rows,\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n createTrack: createBiosampleTrack,\n views,\n ViewSelector: BiosampleViewSelector,\n GroupingCellComponent: BiosampleGroupingCell,\n TreeItemComponent: BiosampleTreeItem,\n };\n}\n","import { createBiosampleFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/humans_fixed.json\";\nimport { BiosampleDataFile } from \"./shared/types\";\n\n/**\n * Human biosamples folder configuration for GRCh38 assembly.\n *\n * Contains epigenomic data (DNase, ATAC, H3K4me3, H3K27ac, CTCF, cCRE, RNA-seq, ChromHMM)\n * from human tissue samples, primary cells, cell lines, and organoids.\n */\nexport const humanBiosamplesFolder = createBiosampleFolder({\n id: \"human-biosamples\",\n label: \"Human Biosamples\",\n description:\n \"Epigenomic data from human tissue samples, primary cells, cell lines, and organoids.\",\n data: humanData as BiosampleDataFile,\n});\n","import { createBiosampleFolder } from \"./shared/createFolder\";\nimport mouseData from \"./data/mouse.json\";\nimport { BiosampleDataFile } from \"./shared/types\";\n\n/**\n * Mouse biosamples folder configuration for mm10 assembly.\n *\n * Contains epigenomic data (DNase, ATAC, H3K4me3, H3K27ac, CTCF, cCRE, RNA-seq, ChromHMM)\n * from mouse tissue samples, primary cells, cell lines, and organoids.\n */\nexport const mouseBiosamplesFolder = createBiosampleFolder({\n id: \"mouse-biosamples\",\n label: \"Mouse Biosamples\",\n description:\n \"Epigenomic data from mouse tissue samples, primary cells, cell lines, and organoids.\",\n data: mouseData as BiosampleDataFile,\n});\n","import { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { GeneRowInfo } from \"./types\";\n\n/**\n * Format versions array as comma-separated string with \"v\" prefix\n * e.g., [29, 40] -> \"v29, v40\"\n */\nfunction formatVersions(versions: number[]): string {\n return versions.map((v) => `v${v}`).join(\", \");\n}\n\nconst displayNameCol: GridColDef<GeneRowInfo> = {\n field: \"displayName\",\n headerName: \"Name\",\n flex: 1,\n minWidth: 200,\n};\n\nconst versionsCol: GridColDef<GeneRowInfo> = {\n field: \"versions\",\n headerName: \"Versions\",\n width: 150,\n valueFormatter: (value: number[]) => value && formatVersions(value),\n};\n\n/**\n * Default columns for genes DataGrid (flat list, no grouping)\n */\nexport const defaultColumns: GridColDef<GeneRowInfo>[] = [\n displayNameCol,\n versionsCol,\n];\n\n/**\n * No grouping for genes - flat list\n */\nexport const defaultGroupingModel: string[] = [];\n\n/**\n * Leaf field - the raw track ID (without folder prefix) used as the tree view leaf label\n */\nexport const defaultLeafField = \"trackId\";\n","import {\n DisplayMode,\n Track,\n TrackType,\n Transcript,\n TranscriptConfig,\n} from \"@weng-lab/genomebrowser\";\nimport type { FC } from \"react\";\nimport { CreateTrackOptions } from \"../../types\";\nimport { GeneRowInfo } from \"./types\";\n\nexport type GeneTrackContext = {\n onGeneClick?: (args: {\n trackId: string;\n row: GeneRowInfo;\n transcript: Transcript;\n }) => void;\n onGeneHover?: (args: {\n trackId: string;\n row: GeneRowInfo;\n transcript: Transcript;\n }) => void;\n geneTooltip?: FC<Transcript>;\n};\n\nconst defaultTranscript: Omit<TranscriptConfig, \"id\" | \"assembly\" | \"version\"> =\n {\n title: \"GENCODE Genes\",\n trackType: TrackType.Transcript,\n displayMode: DisplayMode.Squish,\n height: 100,\n color: \"#0c184a\",\n canonicalColor: \"#100e98\",\n highlightColor: \"#3c69e8\",\n titleSize: 12,\n };\n\nexport function createGeneTrack(\n row: GeneRowInfo,\n options: CreateTrackOptions,\n): Track {\n const trackContext = options.trackContext;\n\n return {\n ...defaultTranscript,\n id: row.id,\n assembly: options.assembly,\n version: row.versions[row.versions.length - 1],\n onClick: trackContext?.onGeneClick\n ? (transcript: Transcript) =>\n trackContext.onGeneClick?.({ trackId: row.id, row, transcript })\n : undefined,\n onHover: trackContext?.onGeneHover\n ? (transcript: Transcript) =>\n trackContext.onGeneHover?.({ trackId: row.id, row, transcript })\n : undefined,\n tooltip: trackContext?.geneTooltip,\n };\n}\n","import { FolderDefinition } from \"../../types\";\nimport { GeneDataFile, GeneRowInfo, GeneTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { createGeneTrack } from \"./toTrack\";\n\n/** Genes map 1:1 from JSON track entries to table rows. */\nfunction trackToRow(folderId: string, track: GeneTrackInfo): GeneRowInfo {\n return {\n id: `${folderId}/${track.id}`,\n trackId: track.id,\n displayName: track.displayName,\n versions: track.versions,\n };\n}\n\nfunction transformData(folderId: string, data: GeneDataFile): GeneRowInfo[] {\n return data.map((track) => trackToRow(folderId, track));\n}\n\nexport interface CreateGeneFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: GeneDataFile;\n}\n\n/** Build a gene folder with its row lookup, tree, and track factory. */\nexport function createGeneFolder(\n options: CreateGeneFolderOptions,\n): FolderDefinition<GeneRowInfo> {\n const { id, label, description, data } = options;\n const rows = transformData(id, data);\n\n return {\n id,\n label,\n description,\n rows,\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n createTrack: createGeneTrack,\n };\n}\n","import { createGeneFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/human.json\";\nimport { GeneDataFile } from \"./shared/types\";\n\n/**\n * Gene annotations folder for human (GRCh38 assembly)\n *\n * Contains gene annotation tracks like GENCODE that users can\n * select to display in the genome browser.\n */\nexport const humanGenesFolder = createGeneFolder({\n id: \"human-genes\",\n label: \"Genes\",\n description: \"Gene annotation tracks\",\n data: humanData as GeneDataFile,\n});\n","import { createGeneFolder } from \"./shared/createFolder\";\nimport mouseData from \"./data/mouse.json\";\nimport { GeneDataFile } from \"./shared/types\";\n\n/**\n * Gene annotations folder for human (GRCh38 assembly)\n *\n * Contains gene annotation tracks like GENCODE that users can\n * select to display in the genome browser.\n */\nexport const mouseGenesFolder = createGeneFolder({\n id: \"mouse-genes\",\n label: \"Genes\",\n description: \"Gene annotation tracks\",\n data: mouseData as GeneDataFile,\n});\n","import { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { OtherTrackInfo } from \"./types\";\n\nconst nameCol: GridColDef<OtherTrackInfo> = {\n field: \"name\",\n headerName: \"Name\",\n flex: 1,\n minWidth: 200,\n};\n\nconst descriptionCol: GridColDef<OtherTrackInfo> = {\n field: \"description\",\n headerName: \"Description\",\n flex: 2,\n minWidth: 300,\n};\n\nexport const defaultColumns: GridColDef<OtherTrackInfo>[] = [\n nameCol,\n descriptionCol,\n];\n\nexport const defaultGroupingModel: string[] = [];\n\nexport const defaultLeafField = \"id\";\n","import { jsxs as h, jsx as e } from \"react/jsx-runtime\";\nconst _0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 10 20 C 5 -5 95 -10 100 35 L 100 100 L 80 100 L 80 90 C 90 105 10 105 0 80 C 0 45 40 40 60 45 L 80 50 C 95 30 40 5 10 35\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { fill: \"#ffffff\", d: \"M 77 70 C 70 90 30 90 22 80 C 10 50 80 60 77 70\" })\n] }), A0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 20 0 L 0 0 L 0 100 L 20 100 L 20 80 C 10 110 90 110 100 70 L 100 60 C 90 10 10 10 20 40 L 20 40 L 20 0\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 79 60 C 80 95 20 95 20 65 C 20 30 80 30 79 65\", fill: \"#ffffff\" })\n] }), N0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 80 0 L 100 0 L 100 100 L 80 100 L 80 80 C 90 110 10 110 0 70 L 0 60 C 10 10 90 10 80 40 L 80 40 L 80 0\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 79 60 C 80 95 20 95 20 65 C 20 30 80 30 79 65\", fill: \"#ffffff\" })\n] }), w0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 25 50 L 100 50 C 85 -17 15 -17 0 50 C 0 75 25 100 50 100 L 95 100 L 95 80 L 50 80 Q 25 70 25 50\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 33 37 L 68 37 C 58 10 42 10 33 37\", fill: \"#ffffff\" })\n] }), E0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 95 32 C 80 -17 20 -5 20 37 L 7 37 L 7 50 L 20 50 L 20 100 L 45 100 L 45 50 L 57 50 L 57 37 L 45 37 C 45 10 70 10 75 32 L 95 32\",\n ...o\n }\n), S0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 100 15 L 100 0 L 80 0 L 80 15 C 85 -8 15 -8 0 25 C 2 75 80 75 80 50 L 75 65 C 65 85 45 85 10 75 L 10 90 C 25 110 85 110 100 75 L 100 25\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 67 30 C 70 10 25 10 27 30 C 25 50 70 50 67 30\", fill: \"#ffffff\" })\n] }), v0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 100 L 20 100 L 20 80 C 20 40 80 40 80 80 L 80 100 L 100 100 L 100 50 C 80 20 20 20 20 45 L 20 0 L 0 0\",\n ...o\n }\n), O0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"rect\",\n {\n ...o,\n x: 40,\n y: 20,\n width: 20,\n height: 80\n }\n ),\n /* @__PURE__ */ e(\n \"rect\",\n {\n ...o,\n x: 40,\n y: 0,\n width: 20,\n height: 15\n }\n )\n] }), T0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 60 C 0 115 100 115 100 60 L 100 20 L 80 20 L 80 60 C 80 90 20 90 25 60\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 0 60 L 100 20\", ...o })\n] }), z0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 20 0 L 20 60 L 75 30 L 100 30 L 50 65 L 100 100 L 75 100 L 27 80 L 20 85 L 20 100 L 0 100 L 0 0\",\n ...o\n }\n), R0 = (o) => /* @__PURE__ */ e(\n \"rect\",\n {\n x: 40,\n y: 0,\n width: 20,\n height: 100,\n ...o\n }\n), B0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 100 L 20 100 L 20 60 C 20 20 40 20 40 50 L 40 100 L 60 100 L 60 50 C 60 20 80 20 80 50 L 80 100 L 100 100 L 100 50 C 100 -10 40 -10 50 50 C 50 -5 20 -5 20 20 L 20 0 L 0 0\",\n ...o\n }\n), F0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 100 L 20 100 L 20 60 C 20 0 80 0 80 50 L 80 100 L 100 100 L 100 25 C 80 -10 20 -10 20 20 L 20 0 L 0 0\",\n ...o\n }\n), G0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 20 100 L 0 100 L 0 0 L 20 0 L 20 20 C 10 -10 90 -10 100 30 L 100 40 C 90 90 10 90 20 60 L 20 60 L 20 100\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 79 40 C 80 5 20 5 20 35 C 20 70 80 70 79 35\", fill: \"#ffffff\" })\n] }), I0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 80 100 L 100 100 L 100 0 L 80 0 L 80 20 C 90 -10 10 -10 0 30 L 0 40 C 10 90 90 90 80 60 L 80 60 L 80 100\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 79 40 C 80 5 20 5 20 35 C 20 70 80 70 79 35\", fill: \"#ffffff\" })\n] }), Y0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 100 L 20 100 L 20 60 C 20 0 80 0 80 50 L 100 50 L 100 25 C 80 -10 20 -10 20 20 L 20 0 L 0 0\",\n ...o\n }\n), D0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 95 68 C 80 117 20 105 20 63 L 20 47 L 7 47 L 7 27 L 20 27 L 20 0 L 45 0 L 45 27 L 57 27 L 57 47 L 45 47 L 45 63 C 45 90 70 90 75 68 L 95 68\",\n ...o\n }\n), H0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 60 C 0 111 100 111 100 60 L 100 0 L 75 0 L 75 60 C 80 90 20 90 25 60 L 25 0 L 0 0\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\n \"rect\",\n {\n ...o,\n x: 75,\n y: 0,\n height: 100,\n width: 25\n }\n )\n] }), b0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 25 0 L 50 36 L 75 0 L 100 0 L 40 100 L 12 100 L 37 55 L 0 0\",\n ...o\n }\n);\nfunction j0(o) {\n return /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 80 L 0 100 L 100 100 L 100 80 L 68 80 L 68 0 L 32 0 L 0 15 L 0 40 L 32 25 L 32 80 L 0 80\"\n }\n );\n}\nconst Q0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 25 C 20 -8 80 -8 100 25 C 100 90 30 50 20 85 L 100 85 L 100 100 L 0 100 L 0 70 C 10 40 75 70 75 25 C 70 10 30 10 25 28 L 0 25\"\n }\n), U0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 35 L 0 25 C 20 -8 80 -8 100 25 C 100 30 100 50 75 50 C 100 50 100 70 100 75 C 80 108 20 108 0 75 L 0 65 L 25 65 L 25 75 C 30 88 70 88 75 75 C 75 68 75 65 47 58 L 47 42 C 75 32 75 35 75 25 C 70 12 30 12 25 25 L 25 35\"\n }\n), W0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 50 0 L 0 50 L 0 70 L 50 70 L 50 100 L 75 100 L 75 70 L 100 70 L 100 50 L 75 50 L 75 0 L 50 15 L 50 50 L 30 50 L 75 0 L 50 0\"\n }\n), X0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 95 20 L 100 0 L 10 0 L 0 60 L 25 60 C 30 45 90 50 75 77 C 66 87 30 90 26 72 L 0 80 C 20 110 80 110 100 70 C 100 25 10 25 25 40 L 30 20 L 95 20\"\n }\n), K0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 50 0 C -40 70 10 100 50 100 C 90 100 100 80 100 55 C 80 30 30 30 35 50 L 30 60 C 80 50 80 85 50 80 C 10 80 48 10 90 0 L 50 0\"\n }\n), V0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 0 L 100 0 L 50 100 L 20 100 L 60 20 L 0 20 L 0 0\"\n }\n), Z0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 35 L 0 25 C 20 -8 80 -8 100 25 C 100 30 100 50 75 50 C 100 50 100 70 100 75 C 80 108 20 108 0 75 L 0 65 L 25 65 L 25 75 C 30 88 70 88 75 75 C 75 68 75 65 47 58 L 47 42 C 75 32 75 35 75 25 C 70 12 30 12 25 25 L 25 35\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 100 35 L 100 25 C 80 -8 20 -8 0 25 C 0 30 0 50 25 50 C 0 50 0 70 0 75 C 20 108 80 108 100 75 L 100 65 L 75 65 L 75 75 C 70 88 30 88 25 75 C 25 68 25 65 53 58 L 53 42 C 25 32 25 35 25 25 C 30 12 70 12 75 25 L 75 35\"\n }\n )\n] }), J0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 50 100 C 140 30 90 0 50 0 C 10 0 0 20 0 45 C 20 70 70 70 65 50 L 70 40 C 20 50 20 15 50 20 C 90 20 52 90 10 100 L 50 100\"\n }\n), z = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 100 L 33 0 L 66 0 L 100 100 L 75 100 L 66 75 L 33 75 L 25 100 L 0 100\"\n }\n ),\n /* @__PURE__ */ e(\"path\", { fill: \"#ffffff\", d: \"M 41 55 L 50 25 L 58 55 L 41 55\" })\n] }), q0 = `M 0 0 L 80 0 C 105 0 105 50 80 50\n C 105 50 105 100 80 100 L 00 100\n L 0 0`, n0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\"path\", { ...o, d: q0 }),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 20 15 L 70 15 C 80 15 80 35 70 35 L 20 35 L 20 15\",\n fill: \"#ffffff\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 20 65 L 70 65 C 80 65 80 85 70 85 L 20 85 L 20 65\",\n fill: \"#ffffff\"\n }\n )\n] }), $0 = `M 100 28 C 100 -13 0 -13 0 50\n C 0 113 100 113 100 72 L 75 72\n C 75 90 30 90 30 50 C 30 10 75 10 75 28\n L 100 28`, v = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: $0 }), P0 = `M 0 0 L 60 0 C 110 0 110 100 60 100\n L 0 100 L 0 0`, oo = `M 20 15 L 40 15 C 85 15 85 85 40 85\n L 20 85 L 20 15`, r0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\"path\", { ...o, d: P0 }),\n /* @__PURE__ */ e(\"path\", { fill: \"#ffffff\", d: oo })\n] }), eo = `M 0 0 L 100 0 L 100 20 L 20 20 L 20 40\n L 90 40 L 90 60 L 20 60 L 20 80 L 100 80\n L 100 100 L 0 100 L 0 0`, c0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: eo }), to = `M 0 0 L 100 0 L 100 20 L 20 20 L 20 40\n L 80 40 L 80 60 L 20 60 L 20 100 L 0 100\n L 0 0`, L0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: to }), no = `M 100 28 C 100 -13 0 -13 0 50 C 0 113 100 113 100 72\n L 100 48 L 55 48 L 55 72 L 75 72 C 75 90 30 90 30 50\n C 30 10 75 5 75 28 L 100 28`, R = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: no }), ro = `M 0 0 L 20 0 L 20 40 L 80 40 L 80 0\n L 100 0 L 100 100 L 80 100 L 80 60\n L 20 60 L 20 100 L 0 100 L 0 0`, l0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: ro }), co = \"M 40 0 L 60 0 L 60 100 L 40 100 L 40 0\", g0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: co }), Lo = `M 0 60 C 0 111 100 111 100 60\n L 100 0 L 75 0 L 75 60\n C 80 90 20 90 25 60`, lo = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: Lo }), go = `M 0 0 L 20 0 L 20 40 L 75 0 L 100 0\n L 50 50 L 100 100 L 75 100 L 30 65\n L 20 75 L 20 100 L 0 100 L 0 0`, h0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: go }), ho = `M 0 0 L 0 100 L 100 100 L 100 80\n L 20 80 L 20 0 L 0 0`, s0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: ho }), so = `M 0 0 L 20 0 L 50 35 L 80 0 L 100 0 L 100 100\n L 80 100 L 80 30 L 50 65 L 20 30 L 20 100\n L 0 100 L 0 0`, i0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: so }), io = `M 0 100 L 0 0 L 20 0 L 80 75 L 80 0\n L 100 0 L 100 100 L 80 100 L 20 25 L 20 100 L 0 100`, f0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: io }), Y = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"circle\",\n {\n cx: \"50\",\n cy: \"50\",\n r: \"50\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"circle\", { cx: \"50\", cy: \"50\", r: \"32\", fill: \"#ffffff\" })\n] }), fo = `M 0 0 L 80 0 C 105 0 105 50 80 50\n L 20 50 L 20 100 L 0 100 L 0 0`, a0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\"path\", { ...o, d: fo }),\n /* @__PURE__ */ e(\n \"path\",\n {\n fill: \"#ffffff\",\n d: \"M 20 15 L 70 15 C 80 15 80 35 70 35 L 20 35 L 20 15\"\n }\n )\n] }), ao = \"M 85 100 L 55 70 L 70 55 L 100 85 L 85 100\", m0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"circle\",\n {\n cx: \"50\",\n cy: \"50\",\n r: \"50\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"circle\", { cx: \"50\", cy: \"50\", r: \"32\", fill: \"#ffffff\" }),\n /* @__PURE__ */ e(\"path\", { d: ao, ...o })\n] }), mo = `M 0 0 L 80 0 C 105 0 105 50 80 50\n C 100 50 100 70 100 70 L 100 100 L 80 100\n L 80 80 C 80 80 80 60 50 60 L 20 60\n L 20 100 L 0 100 L 0 0`, d0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\"path\", { ...o, d: mo }),\n /* @__PURE__ */ e(\n \"path\",\n {\n fill: \"#ffffff\",\n d: \"M 20 15 L 70 15 C 80 15 80 35 70 35 L 20 35 L 20 15\"\n }\n )\n] }), po = \"M92 26 A43 20 0 1 0 43 46 A42 23 0 1 1 9 68\", H = ({ fill: o, fillOpacity: n }) => /* @__PURE__ */ e(\n \"path\",\n {\n fill: \"#ffffff\",\n stroke: o,\n strokeOpacity: n,\n strokeWidth: \"18\",\n d: po\n }\n), xo = `M 0 0 L 0 20 L 35 20 L 35 100\n L 65 100 L 65 20 L 100 20\n L 100 0 L 0 0`, W = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: xo }), Co = `M 0 0 L 0 60 C 0 111 100 111 100 60\n L 100 0 L 75 0 L 75 60\n C 80 90 20 90 25 60 L 25 0 L 0 0`, X = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: Co }), Mo = `M 0 0 L 20 0 L 50 80 L 80 0\n L 100 0 L 60 100 L 40 100 L 0 0`, b = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: Mo }), uo = `M 0 0 L 20 0 L 30 70 L 50 30 L 70 70 L 80 0\n L 100 0 L 90 100 L 70 100 L 50 65 L 30 100\n L 10 100 L 0 0`, j = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: uo }), yo = `M 0 0 L 20 0 L 50 40 L 80 0 L 100 0 L 70 50\n L 100 100 L 80 100 L 50 60 L 20 100 L 0 100\n L 30 50 L 0 0`, o0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: yo }), ko = `M 0 0 L 20 0 L 50 45 L 80 0 L 100 0\n L 60 60 L 60 100 L 40 100 L 40 60 L 0 0`, p0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: ko }), _o = `M 0 0 L 100 0 L 100 20 L 35 80 L 100 80\n L 100 100 L 0 100 L 0 80 L 65 20 L 0 20\n L 0 0`, Q = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: _o });\nfunction Ao({ xscale: o, yscale: n, inverted: r, children: t }) {\n const c = n * (r ? -1 : 1);\n return /* @__PURE__ */ e(\"g\", { transform: \"scale(\" + o + \",\" + c + \")\", children: t });\n}\nconst No = ({\n height: o,\n width: n,\n indices: r,\n alphabet: t,\n lv: c,\n transform: L,\n alpha: g,\n inverted: d,\n onSymbolMouseOver: i,\n onSymbolMouseOut: f,\n onSymbolClick: s\n}) => {\n let x = o, C = n / 100;\n g = g || 1;\n let M = r.map((l) => {\n if (!t[l] || !t[l].component || c[l] === 0)\n return null;\n x -= c[l] * 100;\n const p = d ? x + c[l] * 100 : x;\n let u = C * 0.8 / t[l].component.length;\n return t[l].component.map((_, a) => /* @__PURE__ */ e(\n \"g\",\n {\n transform: \"translate(\" + (a * n * 0.8 / t[l].component.length + n * 0.1) + \",\" + p + \")\",\n onMouseOver: () => {\n i && i({\n component: [t[l].component[a]],\n regex: [t[l].regex[a]],\n color: t[l].color && [t[l].color[a]]\n });\n },\n onMouseOut: f && (() => f({\n component: [t[l].component[a]],\n regex: [t[l].regex[a]],\n color: t[l].color && [t[l].color[a]]\n })),\n onClick: s && (() => s({\n component: [t[l].component[a]],\n regex: [t[l].regex[a]],\n color: t[l].color && [t[l].color[a]]\n })),\n children: /* @__PURE__ */ e(Ao, { xscale: u, yscale: c[l], inverted: d || !1, children: /* @__PURE__ */ e(\n _,\n {\n fill: t[l].color && t[l].color[a] || \"#000000\",\n fillOpacity: g,\n ...t[l]\n }\n ) })\n },\n l + \"_\" + a\n ));\n });\n return /* @__PURE__ */ e(\"g\", { transform: L, children: M });\n}, wo = (o, n) => (r) => n[0] + (n[1] - n[0]) * ((r - o[0]) / (o[1] - o[0])), x0 = ({\n minrange: o,\n maxrange: n,\n xstart: r,\n width: t,\n height: c,\n xaxis_y: L,\n numberofgridlines: g,\n stroke: d\n}) => {\n const i = wo([o, n], [r, t]), f = n - o, s = L + c, x = Math.ceil(f) / g, C = Math.ceil(f / x), M = Array.from(Array(C).keys());\n return /* @__PURE__ */ h(\"g\", { stroke: d || \"#000000\", children: [\n M.map((l) => {\n const p = o + x * l;\n return /* @__PURE__ */ e(\"line\", { x1: i(p), x2: i(p), y1: L, y2: s }, l);\n }),\n /* @__PURE__ */ e(\"line\", { x1: i(n), x2: i(n), y1: L, y2: s }),\n \";\"\n ] });\n}, jo = \"INFORMATION_CONTENT\", D = \"FREQUENCY\", e0 = [\n { component: [z], regex: [\"A\"], color: [\"red\"] },\n { component: [n0], regex: [\"B\"], color: [\"maroon\"] },\n { component: [v], regex: [\"C\"], color: [\"blue\"] },\n { component: [r0], regex: [\"D\"], color: [\"green\"] },\n { component: [c0], regex: [\"E\"], color: [\"olive\"] },\n { component: [L0], regex: [\"F\"], color: [\"navy\"] },\n { component: [R], regex: [\"G\"], color: [\"orange\"] },\n { component: [l0], regex: [\"H\"], color: [\"teal\"] },\n { component: [g0], regex: [\"I\"], color: [\"cadetblue\"] },\n { component: [lo], regex: [\"J\"], color: [\"lavender\"] },\n { component: [h0], regex: [\"K\"], color: [\"chocolate\"] },\n { component: [s0], regex: [\"L\"], color: [\"coral\"] },\n { component: [i0], regex: [\"M\"], color: [\"darkolivegreen\"] },\n { component: [f0], regex: [\"N\"], color: [\"darkorange\"] },\n { component: [Y], regex: [\"O\"], color: [\"gold\"] },\n { component: [a0], regex: [\"P\"], color: [\"darkorchid\"] },\n { component: [m0], regex: [\"Q\"], color: [\"darkslateblue\"] },\n { component: [d0], regex: [\"R\"], color: [\"firebrick\"] },\n { component: [H], regex: [\"S\"], color: [\"darkslategrey\"] },\n { component: [W], regex: [\"T\"], color: [\"#228b22\"] },\n { component: [X], regex: [\"U\"], color: [\"seagreen\"] },\n { component: [b], regex: [\"V\"], color: [\"indigo\"] },\n { component: [j], regex: [\"W\"], color: [\"mediumseagreen\"] },\n { component: [o0], regex: [\"X\"], color: [\"black\"] },\n { component: [p0], regex: [\"Y\"], color: [\"palevioletred\"] },\n { component: [Q], regex: [\"Z\"], color: [\"peru\"] },\n { component: [_0], regex: [\"a\"], color: [\"red\"] },\n { component: [A0], regex: [\"b\"], color: [\"maroon\"] },\n { component: [v], regex: [\"c\"], color: [\"purple\"] },\n { component: [N0], regex: [\"d\"], color: [\"green\"] },\n { component: [w0], regex: [\"e\"], color: [\"olive\"] },\n { component: [E0], regex: [\"f\"], color: [\"navy\"] },\n { component: [S0], regex: [\"g\"], color: [\"orange\"] },\n { component: [v0], regex: [\"h\"], color: [\"teal\"] },\n { component: [O0], regex: [\"i\"], color: [\"cadetblue\"] },\n { component: [T0], regex: [\"j\"], color: [\"lavender\"] },\n { component: [z0], regex: [\"k\"], color: [\"chocolate\"] },\n { component: [R0], regex: [\"l\"], color: [\"coral\"] },\n { component: [B0], regex: [\"m\"], color: [\"darkolivegreen\"] },\n { component: [F0], regex: [\"n\"], color: [\"darkorange\"] },\n { component: [Y], regex: [\"o\"], color: [\"gold\"] },\n { component: [G0], regex: [\"p\"], color: [\"darkorchid\"] },\n { component: [I0], regex: [\"q\"], color: [\"darkslateblue\"] },\n { component: [Y0], regex: [\"r\"], color: [\"firebrick\"] },\n { component: [H], regex: [\"s\"], color: [\"darkslategrey\"] },\n { component: [D0], regex: [\"t\"], color: [\"#228b22\"] },\n { component: [H0], regex: [\"u\"], color: [\"seagreen\"] },\n { component: [b], regex: [\"v\"], color: [\"indigo\"] },\n { component: [j], regex: [\"w\"], color: [\"mediumseagreen\"] },\n { component: [o0], regex: [\"x\"], color: [\"black\"] },\n { component: [b0], regex: [\"y\"], color: [\"palevioletred\"] },\n { component: [Q], regex: [\"z\"], color: [\"peru\"] },\n { component: [Y], regex: [\"0\"], color: [\"indianred\"] },\n { component: [j0], regex: [\"1\"], color: [\"red\"] },\n { component: [Q0], regex: [\"2\"], color: [\"green\"] },\n { component: [U0], regex: [\"3\"], color: [\"purple\"] },\n { component: [W0], regex: [\"4\"], color: [\"navy\"] },\n { component: [X0], regex: [\"5\"], color: [\"teal\"] },\n { component: [K0], regex: [\"6\"], color: [\"gold\"] },\n { component: [V0], regex: [\"7\"], color: [\"olive\"] },\n { component: [Z0], regex: [\"8\"], color: [\"slate\"] },\n { component: [J0], regex: [\"9\"], color: [\"firebrick\"] }\n], C0 = (o, n) => {\n let r = (\"\" + o).length;\n for (let t = o + 1; t < o + n; ++t)\n (\"\" + t).length > r && (r = (\"\" + t).length);\n return r;\n}, t0 = (() => {\n let o = {};\n return e0.forEach((n, r) => {\n n.regex.forEach((t) => {\n o[t] = e0[r];\n });\n }), o;\n})(), M0 = (o) => o.map((n) => {\n if (n.regex.length === 1)\n return Object.assign({}, n, {\n component: t0[n.regex[0]].component\n });\n const r = \"#000000\";\n let t = Object.assign({}, n, { component: [], color: [] });\n for (let c = 0; c < t.regex.length; ++c)\n t.component.push(t0[t.regex[c]].component[0]), t.color.push(n.color && n.color[c] || r);\n return t;\n}), Eo = (o) => (n, r) => {\n let t = 0, c = r || 0;\n return n.map(\n (L, g) => t += L === 0 ? 0 : L * Math.log2(L / (o[g] || 0.01))\n ), n.map((L) => {\n const g = L * (t - c);\n return g <= 0 ? 0 : g;\n });\n}, So = (o) => o.map((r, t) => t).sort((r, t) => o[r] < o[t] ? -1 : o[r] === o[t] ? 0 : 1), vo = (o) => o.map((r, t) => t).sort((r, t) => o[r] < o[t] ? 1 : o[r] === o[t] ? 0 : -1), K = (o) => {\n let n = [];\n for (let r = 0; r < Math.floor(o); r++)\n n.push(r);\n return n;\n}, Oo = (o) => {\n let n = 0;\n return o.filter((r) => r > 0).forEach((r) => {\n n += r;\n }), n;\n}, To = (o) => {\n let n = 0;\n return o.filter((r) => r < 0).forEach((r) => {\n n += r;\n }), n;\n}, u0 = ({\n n: o,\n transform: n,\n glyphWidth: r,\n startPos: t\n}) => {\n const c = K(o);\n return /* @__PURE__ */ e(\"g\", { transform: n, children: /* @__PURE__ */ e(\"g\", { transform: \"rotate(-90)\", children: c.map((L) => /* @__PURE__ */ e(\n \"text\",\n {\n x: \"0\",\n y: r * (L + 0.66),\n fontSize: \"18\",\n textAnchor: \"end\",\n children: L + (t || 0)\n },\n L\n )) }) });\n}, zo = (o) => {\n const n = K(o.bits + 1), r = o.zeroPoint || 1;\n return /* @__PURE__ */ h(\"g\", { transform: o.transform, children: [\n /* @__PURE__ */ e(\n \"rect\",\n {\n height: o.height * r,\n width: 4,\n x: o.width + 1,\n y: 0,\n fill: \"#000000\"\n }\n ),\n n.map((t) => /* @__PURE__ */ h(\n \"g\",\n {\n transform: \"translate(0,\" + (o.height * r - Math.floor(t * (o.height * r) / o.bits)) + \")\",\n children: [\n /* @__PURE__ */ e(\"text\", { x: o.width - 15, textAnchor: \"end\", y: \"4\", fontSize: \"18\", children: t }),\n /* @__PURE__ */ e(\n \"rect\",\n {\n x: o.width - 10,\n width: \"15\",\n height: \"4\",\n y: \"-2\",\n fill: \"#000000\"\n }\n )\n ]\n },\n t\n )),\n /* @__PURE__ */ e(\"g\", { transform: \"rotate(-90)\", children: /* @__PURE__ */ e(\n \"text\",\n {\n y: \"20\",\n x: -(o.height * r) / 2,\n textAnchor: \"middle\",\n fontSize: \"18\",\n children: \"bits\"\n }\n ) })\n ] });\n}, Ro = (o) => {\n const n = K(o.ticks + 1).map((r) => r / o.ticks);\n return /* @__PURE__ */ h(\"g\", { transform: o.transform, children: [\n /* @__PURE__ */ e(\n \"rect\",\n {\n height: o.height,\n width: 4,\n x: o.width + 1,\n y: \"0\",\n fill: \"#000000\"\n }\n ),\n n.map((r) => /* @__PURE__ */ h(\n \"g\",\n {\n transform: \"translate(0,\" + (o.height - Math.floor(r * o.height)) + \")\",\n children: [\n /* @__PURE__ */ e(\"text\", { x: o.width - 10, textAnchor: \"end\", y: \"4\", fontSize: \"18\", children: (r + \"\").substring(0, 4) }),\n /* @__PURE__ */ e(\n \"rect\",\n {\n x: o.width - 5,\n width: \"10\",\n height: \"4\",\n y: \"-2\",\n fill: \"#000000\"\n }\n )\n ]\n },\n r\n )),\n /* @__PURE__ */ e(\"g\", { transform: \"rotate(-90)\", children: /* @__PURE__ */ e(\"text\", { y: \"15\", x: -o.height / 2, textAnchor: \"middle\", fontSize: \"18\", children: \"frequency\" }) })\n ] });\n}, Bo = ({\n transform: o,\n min: n,\n max: r,\n width: t,\n height: c\n}) => {\n const L = [n, 0, r];\n return /* @__PURE__ */ h(\"g\", { transform: o, children: [\n /* @__PURE__ */ e(\n \"rect\",\n {\n height: (c - (n < 0 ? n : 0) / r * c) / 2,\n width: 4,\n x: t + 1,\n y: \"0\",\n fill: \"#000000\"\n }\n ),\n L.map((g) => /* @__PURE__ */ h(\n \"g\",\n {\n transform: \"translate(0,\" + (c - g / r * c) / 2 + \")\",\n children: [\n /* @__PURE__ */ e(\"text\", { x: t - 10, textAnchor: \"end\", y: \"4\", fontSize: \"18\", children: (g + \"\").substring(0, 4) }),\n /* @__PURE__ */ e(\"rect\", { x: t - 5, width: \"10\", height: \"4\", y: \"-2\", fill: \"#000000\" })\n ]\n },\n g\n )),\n /* @__PURE__ */ e(\"g\", { transform: \"rotate(-90)\", children: /* @__PURE__ */ e(\n \"text\",\n {\n y: \"15\",\n x: -((c - (n < 0 ? n : 0) / r * c) / 2) / 2,\n textAnchor: \"middle\",\n fontSize: \"18\",\n children: \"frequency\"\n }\n ) })\n ] });\n}, U = (o, n, r, t) => (c, L, g, d, i, f) => {\n const s = f ? vo(c) : So(c), { onSymbolMouseOver: x, onSymbolMouseOut: C, onSymbolClick: M } = d;\n return /* @__PURE__ */ e(\n No,\n {\n indices: s,\n alphabet: g,\n alpha: r,\n onSymbolMouseOver: (l) => x && x(l),\n onSymbolClick: (l) => M && M(l),\n onSymbolMouseOut: (l) => C && C(l),\n lv: c,\n transform: i,\n width: o,\n height: n,\n inverted: t\n },\n L\n );\n}, Fo = ({\n values: o,\n glyphWidth: n,\n stackHeight: r,\n alphabet: t,\n onSymbolMouseOver: c,\n onSymbolMouseOut: L,\n onSymbolClick: g\n}) => {\n const d = U(n, r);\n for (const f in t)\n if (!t[f].component) {\n t = M0(t);\n break;\n }\n return o.map(\n (f, s) => d(\n f,\n s,\n t,\n { onSymbolMouseOver: c, onSymbolMouseOut: L, onSymbolClick: g },\n \"translate(\" + n * s + \",0)\"\n )\n );\n}, y0 = (o, n, r) => {\n const t = [], c = Math.max(...r.map((L) => L.length));\n for (let L = 0; L < c; ++L)\n t.push(o.map((g) => 0));\n return r.forEach((L) => {\n for (let g = 0; g < L.length; ++g)\n n[L[g]] !== void 0 && ++t[g][n[L[g]]];\n }), {\n count: r.length,\n pfm: t\n };\n}, Go = (o, n) => {\n const r = {}, t = [];\n return o.forEach((c, L) => {\n c.regex.forEach((g) => {\n r[g] = L;\n });\n }), n.split(`\n`).forEach((c) => {\n c[0] === \">\" ? t.push(\"\") : t[t.length - 1] += c.trim();\n }), y0(o, r, t);\n}, Io = (o, n) => {\n const r = {};\n return o.forEach((t, c) => {\n t.regex.forEach((L) => {\n r[L] = c;\n });\n }), y0(\n o,\n r,\n n.split(`\n`).map((t) => t.trim())\n );\n}, V = ({\n ppm: o,\n pfm: n,\n values: r,\n fasta: t,\n mode: c,\n height: L,\n width: g,\n alphabet: d,\n glyphWidth: i,\n scale: f,\n startPos: s,\n showGridLines: x,\n backgroundFrequencies: C,\n constantPseudocount: M,\n smallSampleCorrectionOff: l,\n yAxisMax: p,\n onSymbolMouseOver: u,\n onSymbolMouseOut: _,\n onSymbolClick: a,\n noFastaNames: B,\n countUnaligned: O,\n svgRef: k\n}) => {\n let y = null;\n const A = (n || t) && !M && !O ? !l : !1, Z = A ? 0 : (M || 0) / d.length;\n if (!o && !n && t) {\n const m = (B ? Io : Go)(\n d,\n t.toUpperCase()\n );\n n = m.pfm, y = m.count || 1;\n }\n const J = A && n && n.map(\n (m) => m.reduce(\n (N, S, I) => I === void 0 ? N : S + N,\n 0\n )\n ).map(\n (m) => m === 0 ? 0 : (d.length - 1) / (2 * Math.log(2) * m)\n );\n if (!o && n && (o = n.map((m) => {\n const N = (y && O ? y : m.reduce((S, I) => S + I, 0) + Z * d.length) || 1;\n return m.map((S) => (S + Z) / N);\n })), !o || o && (o.length === 0 || o[0].length === 0))\n return /* @__PURE__ */ e(\"div\", {});\n let F = o[0].length;\n C || (C = o[0].map((m) => 1 / F));\n let E = r || (c !== D ? o.map(\n (m, N) => Eo(C)(m, J ? J[N] : void 0)\n ) : o.map(\n (m) => m.map((N) => N * Math.log2(F))\n ));\n const q = c === D ? [Math.log2(F)] : C.map((m) => Math.log2(1 / (m || 0.01))), T = p || Math.max(...q), $ = Math.min(...q), k0 = $ < 0 ? T / (T - $) : 1;\n s = s && !isNaN(parseFloat(s.toString())) && isFinite(s) ? s : 1;\n let w = 100 * T;\n i = w / 6 * (i || 1);\n let G = E.length * i + 80, P = w + 18 * (C0(s, E.length) + 1);\n return f && (G > P ? g = f : L = f), /* @__PURE__ */ h(\n \"svg\",\n {\n width: g,\n height: L,\n viewBox: \"0 0 \" + G + \" \" + P,\n ref: k,\n children: [\n x && /* @__PURE__ */ e(\n x0,\n {\n minrange: s,\n maxrange: s + o.length,\n xstart: 70,\n width: G,\n height: w,\n xaxis_y: 10,\n numberofgridlines: 10 * E.length\n }\n ),\n /* @__PURE__ */ e(\n u0,\n {\n transform: \"translate(80,\" + (w + 20) + \")\",\n n: E.length,\n glyphWidth: i,\n startPos: s\n }\n ),\n c === D ? /* @__PURE__ */ e(\n Ro,\n {\n transform: \"translate(0,10)\",\n width: 65,\n height: w,\n ticks: 2\n }\n ) : /* @__PURE__ */ e(\n zo,\n {\n transform: \"translate(0,10)\",\n width: 65,\n height: w,\n bits: T,\n zeroPoint: k0\n }\n ),\n /* @__PURE__ */ e(\"g\", { transform: \"translate(80,10)\", children: /* @__PURE__ */ e(\n Fo,\n {\n values: E,\n glyphWidth: i,\n stackHeight: w,\n alphabet: d,\n onSymbolMouseOver: u,\n onSymbolMouseOut: _,\n onSymbolClick: a\n }\n ) })\n ]\n }\n );\n}, Qo = ({\n values: o,\n height: n,\n width: r,\n alphabet: t,\n scale: c,\n startPos: L,\n negativealpha: g,\n showGridLines: d,\n inverted: i,\n onSymbolMouseOver: f,\n onSymbolMouseOut: s,\n onSymbolClick: x\n}) => {\n if (o.length === 0 || o[0].length === 0)\n return /* @__PURE__ */ e(\"div\", {});\n for (const k in t)\n if (!t[k].component) {\n t = M0(t);\n break;\n }\n L = L ?? 1, g = g < 0 ? 0 : g, g = g > 255 ? 255 : g;\n let C = o.map(Oo), M = o.map((k) => -To(k)), l = Math.max(...C, ...M), p = 200, u = p / 6, _ = o.length * u + 80, a = p + 18 * (C0(L, o.length) + 1), B = U(u, p / 2.05), O = U(\n u,\n -p / 2.05,\n g / 255,\n i\n );\n return c && (_ > a ? r = c : n = c), /* @__PURE__ */ h(\n \"svg\",\n {\n width: r,\n height: n,\n viewBox: \"0 0 \" + _ + \" \" + a,\n children: [\n d && /* @__PURE__ */ e(\n x0,\n {\n minrange: L,\n maxrange: L + o.length,\n xstart: 70,\n width: _,\n height: p,\n xaxis_y: 10,\n numberofgridlines: 10 * o.length\n }\n ),\n /* @__PURE__ */ e(\n u0,\n {\n transform: \"translate(80,\" + (p + 20) + \")\",\n n: o.length,\n glyphWidth: u,\n startPos: L\n }\n ),\n /* @__PURE__ */ e(\n Bo,\n {\n transform: \"translate(0,10)\",\n width: 65,\n height: p,\n min: -l,\n max: l\n }\n ),\n /* @__PURE__ */ e(\n \"line\",\n {\n style: {\n fill: \"none\",\n stroke: \"#000000\",\n strokeWidth: 2,\n strokeLinecap: \"butt\",\n strokeLinejoin: \"miter\",\n strokeOpacity: 1,\n strokeMiterlimit: 4,\n strokeDasharray: \"0.53,1.59\",\n strokeDashoffset: 0\n },\n transform: \"translate(80,\" + (11 + p / 2) + \")\",\n x1: 0,\n x2: _ - 80\n }\n ),\n /* @__PURE__ */ h(\"g\", { transform: \"translate(80,10)\", children: [\n o.map(\n (k, y) => B(\n k.map((A) => A > 0 ? A / l : 0),\n y,\n t,\n { onSymbolMouseOver: f, onSymbolMouseOut: s, onSymbolClick: x },\n \"translate(\" + u * y + \",0)\",\n !1\n )\n ),\n o.map(\n (k, y) => O(\n k.map((A) => A < 0 ? A / l : 0),\n y,\n t,\n { onSymbolMouseOver: f, onSymbolMouseOut: s, onSymbolClick: x },\n \"translate(\" + u * y + \",\" + p + \")\",\n !0\n )\n )\n ] })\n ]\n }\n );\n}, Yo = [\n { component: [z], regex: [\"A\"], color: [\"red\"] },\n { component: [v], regex: [\"C\"], color: [\"blue\"] },\n { component: [R], regex: [\"G\"], color: [\"orange\"] },\n { component: [W], regex: [\"T\"], color: [\"#228b22\"] }\n];\nfunction Uo(o) {\n return /* @__PURE__ */ e(V, { ...o, alphabet: Yo });\n}\nconst Do = [\n { component: [z], regex: [\"A\"], color: [\"black\"] },\n { component: [n0], regex: [\"B\"], color: [\"#bb8800\"] },\n { component: [v], regex: [\"C\"], color: [\"#008811\"] },\n { component: [r0], regex: [\"D\"], color: [\"#ff0000\"] },\n { component: [c0], regex: [\"E\"], color: [\"#ff0022\"] },\n { component: [L0], regex: [\"F\"], color: [\"#333333\"] },\n { component: [R], regex: [\"G\"], color: [\"#007700\"] },\n { component: [l0], regex: [\"H\"], color: [\"#220099\"] },\n { component: [g0], regex: [\"I\"], color: [\"#111111\"] },\n { component: [h0], regex: [\"K\"], color: [\"#002222\"] },\n { component: [s0], regex: [\"L\"], color: [\"#002222\"] },\n { component: [i0], regex: [\"M\"], color: [\"#220022\"] },\n { component: [f0], regex: [\"N\"], color: [\"#009911\"] },\n { component: [a0], regex: [\"P\"], color: [\"#080808\"] },\n { component: [m0], regex: [\"Q\"], color: [\"#00aa00\"] },\n { component: [d0], regex: [\"R\"], color: [\"#0022aa\"] },\n { component: [H], regex: [\"S\"], color: [\"#008f00\"] },\n { component: [W], regex: [\"T\"], color: [\"#006600\"] },\n { component: [X], regex: [\"U\"], color: [\"seagreen\"] },\n { component: [b], regex: [\"V\"], color: [\"#222200\"] },\n { component: [j], regex: [\"W\"], color: [\"#080808\"] },\n { component: [p0], regex: [\"Y\"], color: [\"#00a800\"] },\n { component: [Q], regex: [\"Z\"], color: [\"#aaaa00\"] }\n], Wo = (o) => /* @__PURE__ */ e(V, { ...o, alphabet: Do }), Ho = [\n { component: [z], regex: [\"A\"], color: [\"red\"] },\n { component: [v], regex: [\"C\"], color: [\"blue\"] },\n { component: [R], regex: [\"G\"], color: [\"orange\"] },\n { component: [X], regex: [\"U\"], color: [\"seagreen\"] }\n], Xo = (o) => /* @__PURE__ */ e(V, { ...o, alphabet: Ho });\nexport {\n z as A,\n n0 as B,\n v as C,\n e0 as CompleteAlphabet,\n r0 as D,\n Yo as DNAAlphabet,\n Uo as DNALogo,\n c0 as E,\n L0 as F,\n D as FREQUENCY,\n R as G,\n Ao as Glyph,\n No as GlyphStack,\n l0 as H,\n g0 as I,\n jo as INFORMATION_CONTENT,\n lo as J,\n h0 as K,\n s0 as L,\n V as Logo,\n Qo as LogoWithNegatives,\n i0 as M,\n f0 as N,\n j0 as N1,\n Q0 as N2,\n U0 as N3,\n W0 as N4,\n X0 as N5,\n K0 as N6,\n V0 as N7,\n Z0 as N8,\n J0 as N9,\n Y as O,\n a0 as P,\n Do as ProteinAlphabet,\n Wo as ProteinLogo,\n m0 as Q,\n d0 as R,\n Ho as RNAAlphabet,\n Xo as RNALogo,\n Fo as RawLogo,\n H as S,\n W as T,\n X as U,\n b as V,\n j as W,\n o0 as X,\n u0 as XAxis,\n p0 as Y,\n zo as YAxis,\n Ro as YAxisFrequency,\n Bo as YAxisWithNegatives,\n x0 as YGridlines,\n Q as Z,\n _0 as a,\n A0 as b,\n N0 as d,\n w0 as e,\n E0 as f,\n S0 as g,\n v0 as h,\n O0 as i,\n T0 as j,\n z0 as k,\n R0 as l,\n B0 as m,\n F0 as n,\n G0 as p,\n I0 as q,\n Y0 as r,\n D0 as t,\n H0 as u,\n b0 as y\n};\n//# sourceMappingURL=logo-test.es.js.map\n","import {\n ClipPath,\n CustomTrackConfig,\n CustomTrackProps,\n DisplayMode,\n fetchBigBedUrl,\n Rect,\n renderSquishBigBedData,\n TrackType,\n useBrowserStore,\n useInteraction,\n useRowHeight,\n useXTransform,\n Vibrant,\n useTrackStore,\n} from \"@weng-lab/genomebrowser\";\nimport { DNALogo } from \"logo-test\";\nimport { useMemo, useState } from \"react\";\nimport motifData from \"./green-motifs.json\";\n\n// --- TF Peak BigBed Parser ---\n\ninterface TfPeakBigBedData {\n chr: string;\n start: number;\n end: number;\n name?: string;\n score?: number;\n color?: string;\n tfName?: string;\n expRatio?: string;\n cCREId?: string;\n experimentId?: string;\n expSupport?: Record<string, Record<string, string>>;\n}\n\nfunction parseTfPeakBigBed(\n chrom: string,\n startBase: number,\n endBase: number,\n rest: string,\n): TfPeakBigBedData {\n const entry: TfPeakBigBedData = {\n chr: chrom,\n start: startBase,\n end: endBase,\n };\n const tokens = rest.split(\"\\t\");\n if (tokens.length > 0) entry.name = tokens[0];\n if (tokens.length > 1) entry.score = parseFloat(tokens[1]);\n // tokens[2] = strand, tokens[3] = thickStart, tokens[4] = thickEnd\n if (tokens.length > 5 && tokens[5] !== \".\" && tokens[5] !== \"0\") {\n entry.color = tokens[5].includes(\",\")\n ? tokens[5].startsWith(\"rgb\")\n ? tokens[5]\n : \"rgb(\" + tokens[5] + \")\"\n : tokens[5];\n }\n // tokens[6] = blockCount, tokens[7] = blockSizes, tokens[8] = blockStarts\n if (tokens.length > 9) entry.tfName = tokens[9];\n if (tokens.length > 10) entry.expRatio = tokens[10];\n if (tokens.length > 11) entry.cCREId = tokens[11];\n if (tokens.length > 12) entry.experimentId = tokens[12];\n if (tokens.length > 13) {\n try {\n entry.expSupport = JSON.parse(tokens[13]);\n } catch {\n // leave undefined if JSON is malformed\n }\n }\n return entry;\n}\n\n// --- Types ---\n\ntype OverlayData = {\n primary: TfPeakBigBedData[];\n overlay: Rect[];\n};\n\ntype OverlayInteractionRect = Rect & {\n chr?: string;\n pwm?: number[][];\n tfName?: string;\n expRatio?: string;\n cCREId?: string;\n experimentId?: string;\n expSupport?: Record<string, Record<string, string>>;\n};\n\n// The config type — extra fields go directly on the config\ntype OverlayBigBedConfig = CustomTrackConfig<OverlayInteractionRect> & {\n primaryUrl: string;\n overlayUrl: string;\n baseColor?: string;\n overlayColor?: string;\n filter?: string[];\n};\n\n// --- Helpers ---\n\nfunction nameKey(name?: string) {\n if (!name) return \"\";\n return name.split(/[-_]/)[0].trim().toLowerCase();\n}\n\nfunction buildOverlayIndex(rects: Rect[]) {\n return rects.reduce<Record<string, Rect[]>>((acc, rect) => {\n const key = nameKey(rect.name);\n if (!key) return acc;\n (acc[key] ??= []).push(rect);\n return acc;\n }, {});\n}\n\nfunction intervalsOverlap(\n aStart: number,\n aEnd: number,\n bStart: number,\n bEnd: number,\n) {\n return aStart <= bEnd && bStart <= aEnd;\n}\n\nfunction scoreColor(score?: number) {\n const t = Math.min(Math.max(score ?? 0, 0), 1000) / 1000;\n const r = Math.round(0xe3 + (0x00 - 0xe3) * t);\n const g = Math.round(0xe3 + (0x00 - 0xe3) * t);\n const b = Math.round(0xe3 + (0x00 - 0xe3) * t);\n return `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n}\n\n// --- Motif data lookup ---\n\ntype MotifEntry = { trimmed_ppm: number[][] };\nconst motifLookup = motifData as Record<string, MotifEntry>;\n\nfunction lookupPwm(name?: string): number[][] | undefined {\n const key = nameKey(name)?.toUpperCase();\n if (!key) return undefined;\n const entry = motifLookup[key];\n return entry?.trimmed_ppm;\n}\n\n// --- Tooltip ---\n\nfunction tfDisplayName(name?: string): string {\n return nameKey(name)?.toUpperCase() || name || \"Unknown\";\n}\n\nfunction TooltipRow({\n label,\n value,\n y,\n}: {\n label: string;\n value: string;\n y: number;\n}) {\n return (\n <g transform={`translate(0, ${y})`}>\n <text x={8} y={0} fontSize={10} fill=\"#888\" dominantBaseline=\"hanging\">\n {label}\n </text>\n <text x={100} y={0} fontSize={10} fill=\"#333\" dominantBaseline=\"hanging\">\n {value}\n </text>\n </g>\n );\n}\n\nfunction TfPeaksTooltip(rect: OverlayInteractionRect) {\n const pwm = rect.pwm;\n const label = tfDisplayName(rect.name);\n const totalWidth = 340;\n const pad = 8;\n const lineH = 14;\n const titleH = 18;\n\n // Build metadata rows (single-value rows)\n const metaRows: { label: string; value: string }[] = [];\n if (rect.score != null)\n metaRows.push({ label: \"Score\", value: `${rect.score}` });\n metaRows.push({\n label: \"Position\",\n value: `${rect.chr ? rect.chr + \":\" : \"\"}${rect.start.toLocaleString()}-${rect.end.toLocaleString()}`,\n });\n\n // Multi-value rows: split comma-separated cCREs, group 4 per row, cap at 5\n const allCCREItems = rect.cCREId\n ? rect.cCREId\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean)\n : [];\n const maxCCREs = 5;\n const cCREItems = allCCREItems.slice(0, maxCCREs);\n const hiddenCCREs = Math.max(0, allCCREItems.length - maxCCREs);\n const cCRERows: string[][] = [];\n for (let i = 0; i < cCREItems.length; i += 4) {\n cCRERows.push(cCREItems.slice(i, i + 4));\n }\n\n // Extract unique sorted biosamples from expSupport\n const allBiosamples: string[] = [];\n if (rect.expSupport) {\n const seen = new Set<string>();\n for (const cellLine of Object.keys(rect.expSupport)) {\n if (!seen.has(cellLine)) {\n seen.add(cellLine);\n allBiosamples.push(cellLine);\n }\n }\n allBiosamples.sort((a, b) => a.localeCompare(b));\n }\n const maxBiosamples = 12;\n const biosampleItems = allBiosamples.slice(0, maxBiosamples);\n const hiddenBiosamples = Math.max(0, allBiosamples.length - maxBiosamples);\n const biosampleText = biosampleItems.join(\", \");\n const biosampleMoreText =\n hiddenBiosamples > 0 ? ` ...and ${hiddenBiosamples} more` : \"\";\n const biosampleCharsPerLine = Math.floor((totalWidth - 2 * pad) / 5.2);\n const biosampleContentLines = Math.max(\n 1,\n Math.ceil(\n (biosampleText.length + biosampleMoreText.length) / biosampleCharsPerLine,\n ),\n );\n\n // Layout: compute y offsets upfront\n const hasLogo = pwm && pwm.length > 0;\n\n const logoHeight = hasLogo ? 80 : 0;\n const logoSectionH = hasLogo ? logoHeight + 4 : 0;\n const metaSectionH = metaRows.length * lineH;\n\n // cCRE section: label row + one row per group of 4 + optional \"+N more\" row\n const cCREGap = cCRERows.length > 0 ? 8 : 0;\n const cCREHeaderH = cCRERows.length > 0 ? lineH : 0;\n const cCREMoreH = hiddenCCREs > 0 ? lineH : 0;\n const cCRESectionH = cCRERows.length * lineH + cCREMoreH;\n\n // Biosamples section\n const biosampleGap = biosampleContentLines > 0 ? 8 : 0;\n const biosampleHeaderH = biosampleContentLines > 0 ? lineH : 0;\n const biosampleSectionH = biosampleContentLines * lineH;\n\n const titleY = pad;\n const logoY = titleY + titleH;\n const metaY = logoY + logoSectionH;\n const cCREY = metaY + metaSectionH + cCREGap;\n const cCREDataY = cCREY + cCREHeaderH;\n const biosampleY = cCREDataY + cCRESectionH + biosampleGap;\n const biosampleDataY = biosampleY + biosampleHeaderH;\n const totalHeight = biosampleDataY + biosampleSectionH + pad;\n\n return (\n <g>\n <rect\n width={totalWidth}\n height={totalHeight}\n fill=\"white\"\n rx={3}\n style={{ filter: \"drop-shadow(0px 0px 5px rgba(0,0,0,0.3))\" }}\n />\n\n {/* Title */}\n <text x={pad} y={titleY + 12} fontSize={12} fontWeight=\"bold\" fill=\"#333\">\n {label}\n </text>\n\n {/* Logo */}\n {hasLogo && (\n <g transform={`translate(${pad}, ${logoY})`}>\n <DNALogo\n ppm={pwm!}\n mode=\"INFORMATION_CONTENT\"\n width={totalWidth - 2 * pad}\n height={logoHeight}\n />\n </g>\n )}\n\n {/* Metadata rows */}\n {metaRows.map((row, i) => (\n <TooltipRow\n key={row.label}\n label={row.label}\n value={row.value}\n y={metaY + i * lineH}\n />\n ))}\n\n {/* Overlapping cCREs */}\n {cCRERows.length > 0 && (\n <g>\n <line\n x1={pad}\n x2={totalWidth - pad}\n y1={cCREY - 4}\n y2={cCREY - 4}\n stroke=\"#ddd\"\n />\n <text\n x={pad}\n y={cCREY + 2}\n fontSize={9}\n fontWeight=\"bold\"\n fill=\"#666\"\n dominantBaseline=\"hanging\"\n >\n Overlapping cCREs\n </text>\n {cCRERows.map((group, i) => (\n <text\n key={i}\n x={pad}\n y={cCREDataY + i * lineH + 2}\n fontSize={9}\n fill=\"#333\"\n dominantBaseline=\"hanging\"\n >\n {group.join(\", \")}\n </text>\n ))}\n {hiddenCCREs > 0 && (\n <text\n x={pad}\n y={cCREDataY + cCRERows.length * lineH + 2}\n fontSize={9}\n fill=\"#aaa\"\n dominantBaseline=\"hanging\"\n >\n +{hiddenCCREs} more...\n </text>\n )}\n </g>\n )}\n\n {/* Biosamples */}\n {biosampleContentLines > 0 && (\n <g>\n <line\n x1={pad}\n x2={totalWidth - pad}\n y1={biosampleY - 4}\n y2={biosampleY - 4}\n stroke=\"#ddd\"\n />\n <text\n x={pad}\n y={biosampleY + 2}\n fontSize={9}\n fontWeight=\"bold\"\n fill=\"#666\"\n dominantBaseline=\"hanging\"\n >\n Biosamples\n </text>\n <foreignObject\n x={pad}\n y={biosampleDataY}\n width={totalWidth - 2 * pad}\n height={biosampleSectionH}\n >\n <div\n style={{\n color: \"#333\",\n fontSize: \"9px\",\n lineHeight: `${lineH}px`,\n margin: 0,\n padding: 0,\n overflow: \"hidden\",\n whiteSpace: \"normal\",\n wordBreak: \"break-word\",\n }}\n >\n {biosampleText}\n {hiddenBiosamples > 0 && (\n <span style={{ color: \"#aaa\" }}>{biosampleMoreText}</span>\n )}\n </div>\n </foreignObject>\n </g>\n )}\n </g>\n );\n}\n\n// --- Settings Panel ---\n\nfunction TfPeaksSettings({ id }: { id: string }) {\n const track = useTrackStore((state) => state.getTrack(id)) as\n | OverlayBigBedConfig\n | undefined;\n const editTrack = useTrackStore((state) => state.editTrack);\n const [input, setInput] = useState((track?.filter || []).join(\", \"));\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInput(value);\n const names = value\n .split(\",\")\n .map((s) => s.trim().toUpperCase())\n .filter(Boolean);\n editTrack<OverlayBigBedConfig>(id, {\n filter: names.length > 0 ? names : undefined,\n });\n };\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n paddingBlock: \"5px\",\n paddingInline: \"10px\",\n gap: \"3px\",\n }}\n >\n <div style={{ fontWeight: \"bold\" }}>Filter TFs</div>\n <input\n value={input}\n onChange={handleChange}\n placeholder=\"e.g. CTCF, TP53, GATA1\"\n style={{ width: \"100%\" }}\n />\n </div>\n );\n}\n\n// --- Renderer ---\n\nfunction OverlayBigBedRenderer(\n props: CustomTrackProps<OverlayData> & OverlayBigBedConfig,\n) {\n const {\n data,\n dimensions,\n id,\n height: trackHeight,\n color: _color,\n baseColor: _baseColorProp,\n overlayColor: overlayColorProp,\n filter,\n ...rest\n } = props;\n const domain = useBrowserStore((state) => state.domain);\n const { totalWidth, sideWidth } = dimensions;\n const { x, reverseX } = useXTransform(totalWidth);\n\n const filterSet = useMemo(\n () =>\n filter && filter.length > 0\n ? new Set(filter.map((f) => f.toUpperCase()))\n : null,\n [filter],\n );\n\n const visiblePrimary = useMemo(() => {\n let visible = (data?.primary || []).filter(\n (r) => r.end >= domain.start && r.start <= domain.end,\n );\n if (filterSet) {\n visible = visible.filter((r) =>\n filterSet.has(nameKey(r.name)?.toUpperCase()),\n );\n }\n return visible;\n }, [data, domain.end, domain.start, filterSet]);\n\n const rows = useMemo(\n () => renderSquishBigBedData(visiblePrimary, x),\n [visiblePrimary, x],\n );\n\n // Index primary data by \"name:start:end\" for fast TF metadata lookup\n const primaryIndex = useMemo(() => {\n const index = new Map<string, TfPeakBigBedData>();\n for (const item of visiblePrimary) {\n index.set(`${item.name}:${item.start}:${item.end}`, item);\n }\n return index;\n }, [visiblePrimary]);\n\n const rowHeight = useRowHeight(rows.length, id);\n const height = Math.max(trackHeight, rowHeight * Math.max(rows.length, 1));\n const overlayByName = useMemo(\n () => buildOverlayIndex(data?.overlay || []),\n [data],\n );\n\n const overlayColor = overlayColorProp || Vibrant[3];\n const cursor = rest.onClick ? \"pointer\" : \"default\";\n\n const { handleClick, handleHover, handleLeave } =\n useInteraction<OverlayInteractionRect>({\n onClick: rest.onClick,\n onHover: rest.onHover,\n onLeave: rest.onLeave,\n tooltip: rest.tooltip,\n });\n\n return (\n <g\n width={totalWidth}\n height={height}\n clipPath={`url(#${id})`}\n transform={`translate(-${sideWidth}, 0)`}\n >\n <rect width={totalWidth} height={height} fill=\"transparent\" />\n <defs>\n <ClipPath id={id} width={totalWidth} height={height} />\n </defs>\n {rows.map((row, rowIndex) => {\n const baseY = rowHeight * 0.2;\n const baseH = rowHeight * 0.6;\n return (\n <g\n key={`row_${rowIndex}`}\n transform={`translate(0, ${rowIndex * rowHeight})`}\n >\n {row.map((rect, ri) => {\n const realStart = Math.round(reverseX(rect.start));\n const realEnd = Math.round(reverseX(rect.end));\n const baseName = rect.rectname;\n const attached = (\n overlayByName[nameKey(rect.rectname)] || []\n ).filter((a) =>\n intervalsOverlap(realStart, realEnd, a.start, a.end),\n );\n const fill = scoreColor(rect.score);\n const meta = primaryIndex.get(\n `${baseName}:${realStart}:${realEnd}`,\n );\n const baseRect: OverlayInteractionRect = {\n start: realStart,\n end: realEnd,\n name: baseName,\n color: fill,\n score: rect.score,\n chr: meta?.chr,\n pwm: attached.length > 0 ? lookupPwm(baseName) : undefined,\n tfName: meta?.tfName,\n expRatio: meta?.expRatio,\n cCREId: meta?.cCREId,\n experimentId: meta?.experimentId,\n expSupport: meta?.expSupport,\n };\n\n return (\n <g key={`${id}_${rowIndex}_${ri}`}>\n <rect\n style={{ cursor }}\n x={rect.start}\n y={baseY}\n width={Math.max(rect.end - rect.start, 1)}\n height={baseH}\n fill={fill}\n opacity={0.9}\n onClick={() => handleClick(baseRect)}\n onMouseOver={(e) =>\n handleHover(baseRect, baseRect.name || \"\", e)\n }\n onMouseOut={() => handleLeave(baseRect)}\n />\n {attached.map((a, ai) => {\n const left = x(a.start);\n const right = x(a.end);\n return (\n <rect\n style={{ cursor }}\n key={`${id}_${rowIndex}_${ri}_a_${ai}`}\n x={left}\n y={baseY}\n width={Math.max(right - left, 1)}\n height={baseH}\n fill={a.color || overlayColor}\n opacity={0.9}\n onClick={() => handleClick(baseRect)}\n onMouseOver={(e) =>\n handleHover(baseRect, baseRect.name || \"\", e)\n }\n onMouseOut={() => handleLeave(baseRect)}\n />\n );\n })}\n </g>\n );\n })}\n </g>\n );\n })}\n </g>\n );\n}\n\n// --- Track config ---\n\nexport const PEAKS_BIGBED_URL =\n \"https://users.wenglab.org/gaomingshi/no_trim.TF_name.rPeaks.bb\";\nexport const DECORATOR_BIGBED_URL =\n \"https://users.wenglab.org/gaomingshi/no_trim.TF_name.decorator.bb\";\n\nexport const tfPeaksTrack: OverlayBigBedConfig = {\n id: \"custom-tf-peaks\",\n title: \"TF Peaks (Overlay)\",\n shortLabel: \"TF Peaks\",\n trackType: TrackType.Custom,\n displayMode: DisplayMode.Full,\n color: Vibrant[0],\n height: 80,\n primaryUrl: PEAKS_BIGBED_URL,\n overlayUrl: DECORATOR_BIGBED_URL,\n baseColor: \"#d1d5db\",\n overlayColor: \"#36dd81\",\n onClick: (rect) => {\n console.log(\"Clicked on rect:\", rect);\n },\n tooltip: TfPeaksTooltip,\n settingsPanel: TfPeaksSettings,\n renderers: {\n [DisplayMode.Full]: OverlayBigBedRenderer,\n },\n fetcher: async (ctx) => {\n const track = ctx.track as OverlayBigBedConfig;\n const [primary, overlay] = await Promise.all([\n fetchBigBedUrl(track.primaryUrl, ctx, parseTfPeakBigBed),\n fetchBigBedUrl(track.overlayUrl, ctx),\n ]);\n const error =\n [primary.error, overlay.error].filter(Boolean).join(\"\\n\") || null;\n return {\n data: { primary: primary.data || [], overlay: overlay.data || [] },\n error,\n };\n },\n};\n","import { Track } from \"@weng-lab/genomebrowser\";\nimport { tfPeaksTrack } from \"../../../Custom/TfPeaks\";\nimport { CreateTrackOptions } from \"../../types\";\nimport { OtherTrackInfo } from \"./types\";\n\nexport type OtherTracksTrackContext = {};\n\nexport function createOtherTrack(\n row: OtherTrackInfo,\n _options: CreateTrackOptions,\n): Track | null {\n if ((row.sourceId ?? row.id) === \"tf-peaks\") {\n return { ...tfPeaksTrack, id: row.id };\n }\n\n return null;\n}\n","import { FolderDefinition } from \"../../types\";\nimport { OtherTrackDataFile, OtherTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { createOtherTrack } from \"./toTrack\";\n\nfunction transformData(\n folderId: string,\n data: OtherTrackDataFile,\n): OtherTrackInfo[] {\n return data.map((row) => ({\n ...row,\n sourceId: row.id,\n id: `${folderId}/${row.id}`,\n }));\n}\n\nexport interface CreateOtherTracksFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: OtherTrackDataFile;\n}\n\nexport function createOtherTracksFolder(\n options: CreateOtherTracksFolderOptions,\n): FolderDefinition<OtherTrackInfo> {\n const { id, label, description, data } = options;\n const rows = transformData(id, data);\n\n return {\n id,\n label,\n description,\n rows,\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n createTrack: createOtherTrack,\n };\n}\n","import { createOtherTracksFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/human.json\";\nimport { OtherTrackDataFile } from \"./shared/types\";\n\nexport const humanOtherTracksFolder = createOtherTracksFolder({\n id: \"human-other-tracks\",\n label: \"Other Tracks\",\n description: \"Additional tracks\",\n data: humanData as OtherTrackDataFile,\n});\n","import { Box } from \"@mui/material\";\n\nexport const MOHD_BASE_URL = \"https://downloads.mohdconsortium.org\";\n\nexport const MOHD_OME_CONFIG = {\n atac: {\n label: \"ATAC\",\n color: \"#02c7b9\",\n downloadPath: \"2_ATAC\",\n },\n rna: {\n label: \"RNA\",\n color: \"#00aa00\",\n downloadPath: \"3_RNA\",\n },\n wgbs: {\n label: \"WGBS\",\n color: \"#648bd8\",\n downloadPath: \"1_WGBS\",\n },\n} as const;\n\nexport type MohdRawOme = keyof typeof MOHD_OME_CONFIG;\nexport type MohdOme = (typeof MOHD_OME_CONFIG)[MohdRawOme][\"label\"];\n\nconst MOHD_OME_LABELS = Object.values(MOHD_OME_CONFIG).map(\n (config) => config.label,\n);\n\nexport function getMohdOmeConfig(rawOme: string) {\n const config = MOHD_OME_CONFIG[rawOme.toLowerCase() as MohdRawOme];\n\n if (!config) {\n throw new Error(`Unknown MOHD ome: ${rawOme}`);\n }\n\n return config;\n}\n\nexport function createMohdFileUrl({\n ome,\n sampleId,\n filename,\n}: {\n ome: string;\n sampleId: string;\n filename: string;\n}) {\n const { downloadPath } = getMohdOmeConfig(ome);\n return `${MOHD_BASE_URL}/${downloadPath}/${sampleId}/${filename}`;\n}\n\nexport function isMohdOmeLabel(value: string) {\n return MOHD_OME_LABELS.includes(value as MohdOme);\n}\n\nexport function MohdOmeIcon({ type }: { type: string }) {\n const { color } = getMohdOmeConfig(type);\n\n return (\n <Box\n data-testid={`mohd-ome-icon-${type.toLowerCase()}`}\n sx={{\n width: 12,\n height: 12,\n borderRadius: \"20%\",\n bgcolor: color,\n }}\n />\n );\n}\n","import { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { FolderView } from \"../../types\";\nimport { MohdRowInfo } from \"./types\";\n\nconst descriptionCol: GridColDef<MohdRowInfo> = {\n field: \"description\",\n headerName: \"Description\",\n minWidth: 220,\n flex: 1.5,\n};\n\nconst sampleIdCol: GridColDef<MohdRowInfo> = {\n field: \"sampleId\",\n headerName: \"Sample ID\",\n minWidth: 180,\n flex: 1,\n};\n\nconst kitIdCol: GridColDef<MohdRowInfo> = {\n field: \"kitId\",\n headerName: \"Kit ID\",\n minWidth: 140,\n flex: 1,\n};\n\nconst trackCategoryCol: GridColDef<MohdRowInfo> = {\n field: \"trackCategory\",\n headerName: \"Track Type\",\n minWidth: 140,\n width: 140,\n};\n\nconst omeCol: GridColDef<MohdRowInfo> = {\n field: \"ome\",\n headerName: \"Ome\",\n minWidth: 120,\n width: 120,\n};\n\nconst siteCol: GridColDef<MohdRowInfo> = {\n field: \"site\",\n headerName: \"Site\",\n minWidth: 100,\n width: 100,\n};\n\nconst sexCol: GridColDef<MohdRowInfo> = {\n field: \"sex\",\n headerName: \"Sex\",\n minWidth: 120,\n width: 120,\n};\n\nconst statusCol: GridColDef<MohdRowInfo> = {\n field: \"status\",\n headerName: \"Status\",\n minWidth: 120,\n flex: 1,\n};\n\nexport const mohdColumns: GridColDef<MohdRowInfo>[] = [\n descriptionCol,\n trackCategoryCol,\n sampleIdCol,\n kitIdCol,\n omeCol,\n siteCol,\n sexCol,\n statusCol,\n];\n\nexport const mohdViews: FolderView[] = [\n {\n id: \"ome\",\n label: \"Ome\",\n columns: mohdColumns,\n groupingModel: [\"ome\", \"site\", \"sampleId\"],\n leafField: \"description\",\n },\n {\n id: \"site\",\n label: \"Site\",\n columns: mohdColumns,\n groupingModel: [\"site\", \"ome\", \"sampleId\"],\n leafField: \"description\",\n },\n];\n","import ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport { Box, IconButton, Stack, Tooltip } from \"@mui/material\";\nimport {\n GridGroupNode,\n GridRenderCellParams,\n useGridApiContext,\n} from \"@mui/x-data-grid-premium\";\nimport { isMohdOmeLabel, MohdOmeIcon } from \"./config\";\n\nexport function MohdGroupingCell(params: GridRenderCellParams) {\n const apiRef = useGridApiContext();\n const isGroup = params.rowNode.type === \"group\";\n const groupNode = params.rowNode as GridGroupNode;\n const isExpanded = isGroup ? groupNode.childrenExpanded : false;\n const groupingField = isGroup ? groupNode.groupingField : null;\n const depth = params.rowNode.depth ?? 0;\n const value = String(params.value ?? \"\");\n const showOmeIcon =\n (isGroup && groupingField === \"ome\") || isMohdOmeLabel(value);\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n apiRef.current.setRowChildrenExpansion(params.id, !isExpanded);\n };\n\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n ml: depth * 2,\n }}\n >\n {isGroup && (\n <IconButton size=\"small\" onClick={handleExpandClick} sx={{ mr: 0.5 }}>\n {isExpanded ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ChevronRightIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n sx={{ flex: 1, overflow: \"hidden\" }}\n >\n {showOmeIcon && <MohdOmeIcon type={value} />}\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n fontWeight: isGroup ? \"bold\" : undefined,\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n </Stack>\n </Box>\n );\n}\n","import React from \"react\";\nimport { CustomTreeItem } from \"../../../TreeView/CustomTreeItem\";\nimport { CustomTreeItemProps } from \"../../../types\";\nimport { MohdOmeIcon } from \"./config\";\n\nexport const MohdTreeItem = React.forwardRef<\n HTMLLIElement,\n CustomTreeItemProps\n>(function MohdTreeItem(props, ref) {\n return (\n <CustomTreeItem\n {...props}\n ref={ref}\n renderIcon={(type) => <MohdOmeIcon type={type} />}\n />\n );\n});\n","import { defineBigBedSchema } from \"@weng-lab/genomebrowser\";\nimport type { MohdFileRowInfo } from \"./types\";\n\nexport const mohdAtacFdrPeaksSchema = defineBigBedSchema({\n name: \"string\",\n score: \"number\",\n strand: \"string\",\n signalValue: \"number\",\n pValue: \"number\",\n qValue: \"number\",\n peak: \"number\",\n});\n\nexport const mohdAtacPseudorepPeaksSchema = defineBigBedSchema({\n name: \"string\",\n score: \"number\",\n strand: \"string\",\n signalValue: \"number\",\n pValue: \"number\",\n qValue: \"number\",\n peak: \"number\",\n});\n\nexport function getMohdBigBedSchema(row: MohdFileRowInfo) {\n if (row.description === \"FDR 0.05 peaks\") {\n return mohdAtacFdrPeaksSchema;\n }\n\n if (row.description === \"Pseudorep peaks\") {\n return mohdAtacPseudorepPeaksSchema;\n }\n\n return undefined;\n}\n","import { InferBigBedRow } from \"@weng-lab/genomebrowser\";\nimport {\n mohdAtacFdrPeaksSchema,\n mohdAtacPseudorepPeaksSchema,\n} from \"./bigBedSchemas\";\n\ntype MohdBigBedRow =\n | InferBigBedRow<typeof mohdAtacFdrPeaksSchema>\n | InferBigBedRow<typeof mohdAtacPseudorepPeaksSchema>;\n\nfunction TooltipRow({\n label,\n value,\n y,\n}: {\n label: string;\n value: string;\n y: number;\n}) {\n return (\n <g transform={`translate(0, ${y})`}>\n <text x={8} y={0} fontSize={10} fill=\"#888\" dominantBaseline=\"hanging\">\n {label}\n </text>\n <text x={100} y={0} fontSize={10} fill=\"#333\" dominantBaseline=\"hanging\">\n {value}\n </text>\n </g>\n );\n}\n\nfunction formatValue(value: string | number | undefined) {\n if (value === undefined) {\n return \"-\";\n }\n\n return `${value}`;\n}\n\nexport function MohdBigBedTooltip(rect: MohdBigBedRow) {\n const rows = [\n {\n label: \"Position\",\n value: `${rect.chr}:${rect.start.toLocaleString()}-${rect.end.toLocaleString()}`,\n },\n { label: \"Name\", value: formatValue(rect.name) },\n { label: \"Score\", value: formatValue(rect.score) },\n { label: \"Strand\", value: formatValue(rect.strand) },\n { label: \"Signal\", value: formatValue(rect.signalValue) },\n { label: \"pValue\", value: formatValue(rect.pValue) },\n { label: \"qValue\", value: formatValue(rect.qValue) },\n { label: \"Peak\", value: formatValue(rect.peak) },\n ];\n const pad = 8;\n const lineH = 14;\n const titleH = 18;\n const width = 280;\n const height = pad + titleH + rows.length * lineH + pad;\n\n return (\n <g>\n <rect\n width={width}\n height={height}\n fill=\"white\"\n rx={3}\n style={{ filter: \"drop-shadow(0px 0px 5px rgba(0,0,0,0.3))\" }}\n />\n <text x={pad} y={pad + 12} fontSize={12} fontWeight=\"bold\" fill=\"#333\">\n {rect.name || \"MOHD peak\"}\n </text>\n {rows.map((row, index) => (\n <TooltipRow\n key={row.label}\n label={row.label}\n value={row.value}\n y={pad + titleH + index * lineH}\n />\n ))}\n </g>\n );\n}\n","import {\n BigBedConfig,\n BigWigConfig,\n DisplayMode,\n InferBigBedRow,\n MethylCConfig,\n Track,\n TrackType,\n ValuedPoint,\n} from \"@weng-lab/genomebrowser\";\nimport type { FC } from \"react\";\nimport { CreateTrackOptions } from \"../../types\";\nimport {\n getMohdBigBedSchema,\n mohdAtacFdrPeaksSchema,\n mohdAtacPseudorepPeaksSchema,\n} from \"./bigBedSchemas\";\nimport { createMohdFileUrl, getMohdOmeConfig } from \"./config\";\nimport { MohdBigBedTooltip } from \"./MohdBigBedTooltip\";\nimport { MohdRowInfo } from \"./types\";\n\nexport type MohdTrackContext = {\n mohdSignalTooltip?: FC<ValuedPoint[]>;\n mohdMethylTooltip?: FC<ValuedPoint[]>;\n};\n\nconst defaultBigWig: Omit<BigWigConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigWig,\n height: 30,\n displayMode: DisplayMode.Full,\n titleSize: 12,\n color: \"#02c7b9\",\n};\n\nconst defaultBigBed: Omit<BigBedConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigBed,\n height: 20,\n displayMode: DisplayMode.Dense,\n titleSize: 12,\n};\n\nconst defaultMethylC: Omit<MethylCConfig, \"id\" | \"title\" | \"urls\"> = {\n trackType: TrackType.MethylC,\n height: 75,\n displayMode: DisplayMode.Split,\n titleSize: 12,\n color: \"#648bd8\",\n maskCpgByCoverage: true,\n colors: {\n cpg: \"#648bd8\",\n chg: \"#ff944d\",\n chh: \"#ff00ff\",\n depth: \"#525252\",\n },\n};\n\ntype MohdBigBedRow =\n | InferBigBedRow<typeof mohdAtacFdrPeaksSchema>\n | InferBigBedRow<typeof mohdAtacPseudorepPeaksSchema>;\n\nfunction createTrackTitle(row: MohdRowInfo) {\n return `${row.sampleId} ${row.description}`;\n}\n\nexport function createMohdTrack(\n row: MohdRowInfo,\n options: CreateTrackOptions,\n): Track | null {\n const trackContext = options.trackContext;\n\n if (row.kind === \"wgbs-methyl\") {\n return {\n ...defaultMethylC,\n id: row.id,\n title: createTrackTitle(row),\n tooltip: trackContext?.mohdMethylTooltip,\n urls: {\n plusStrand: {\n cpg: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.plusStrand.cpg,\n }),\n },\n chg: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.plusStrand.chg,\n }),\n },\n chh: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.plusStrand.chh,\n }),\n },\n depth: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.plusStrand.depth,\n }),\n },\n },\n minusStrand: {\n cpg: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.minusStrand.cpg,\n }),\n },\n chg: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.minusStrand.chg,\n }),\n },\n chh: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.minusStrand.chh,\n }),\n },\n depth: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.minusStrand.depth,\n }),\n },\n },\n },\n };\n }\n\n if (row.kind !== \"file\") {\n return null;\n }\n\n const { color } = getMohdOmeConfig(row.ome);\n const url = createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filename,\n });\n\n if (row.filename.endsWith(\".bigWig\")) {\n return {\n ...defaultBigWig,\n id: row.id,\n title: createTrackTitle(row),\n url,\n color,\n tooltip: trackContext?.mohdSignalTooltip,\n };\n }\n\n if (row.filename.endsWith(\".bigBed\")) {\n return {\n ...defaultBigBed,\n id: row.id,\n title: createTrackTitle(row),\n url,\n color,\n schema: getMohdBigBedSchema(row),\n tooltip: MohdBigBedTooltip,\n onClick: (rect: MohdBigBedRow) => {\n console.log(rect);\n },\n };\n }\n\n return null;\n}\n","import { ToggleButton, ToggleButtonGroup } from \"@mui/material\";\nimport { FolderView } from \"../../types\";\n\nexport interface MohdViewSelectorProps {\n views: FolderView[];\n activeViewId: string;\n onChange: (viewId: string) => void;\n}\n\nexport function MohdViewSelector({\n views,\n activeViewId,\n onChange,\n}: MohdViewSelectorProps) {\n return (\n <ToggleButtonGroup\n exclusive\n value={activeViewId}\n size=\"small\"\n onChange={(_event, viewId: string | null) => {\n if (viewId) {\n onChange(viewId);\n }\n }}\n >\n {views.map((view) => (\n <ToggleButton key={view.id} value={view.id}>\n {view.label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n );\n}\n","import { FolderDefinition } from \"../../types\";\nimport { MohdDataFile, MohdRowInfo } from \"./types\";\nimport { getMohdOmeConfig } from \"./config\";\nimport { mohdViews } from \"./columns\";\nimport { MohdGroupingCell } from \"./MohdGroupingCell\";\nimport { MohdTreeItem } from \"./MohdTreeItem\";\nimport { createMohdTrack } from \"./toTrack\";\nimport { MohdViewSelector } from \"./MohdViewSelector\";\n\nconst WGBS_DESCRIPTION = \"DNA Methylation\";\n\nfunction createBaseRow(folderId: string, row: MohdDataFile[number]) {\n return {\n id: `${folderId}/${row.sample_id}::${row.filename}`,\n ome: getMohdOmeConfig(row.ome).label,\n site: row.site,\n sampleId: row.sample_id,\n kitId: row.kit_id,\n sex: row.sex,\n status: row.status,\n };\n}\n\nfunction createFileRow(\n folderId: string,\n row: MohdDataFile[number],\n): MohdRowInfo {\n const trackCategory = row.filename.endsWith(\".bigBed\")\n ? \"Annotation\"\n : \"Signal\";\n\n return {\n ...createBaseRow(folderId, row),\n kind: \"file\",\n description: row.file_type,\n trackCategory,\n filename: row.filename,\n };\n}\n\nfunction getRequiredWgbsFilename(\n sampleRows: MohdDataFile,\n includesText: string,\n) {\n const match = sampleRows.find((row) => row.filename.includes(includesText));\n\n if (!match) {\n throw new Error(`Missing WGBS file matching ${includesText}`);\n }\n\n return match.filename;\n}\n\nfunction createWgbsMethylRow(\n folderId: string,\n sampleRows: MohdDataFile,\n): MohdRowInfo {\n const sampleId = sampleRows[0]?.sample_id;\n\n if (!sampleId) {\n throw new Error(\"Cannot build WGBS row without a sample ID\");\n }\n\n const base = createBaseRow(folderId, sampleRows[0]!);\n\n return {\n ...base,\n id: `${folderId}/${sampleId}`,\n kind: \"wgbs-methyl\",\n description: WGBS_DESCRIPTION,\n trackCategory: \"Methylation\",\n filenames: {\n plusStrand: {\n cpg: getRequiredWgbsFilename(sampleRows, \"DNAme-CpG-plus\"),\n chg: getRequiredWgbsFilename(sampleRows, \"DNAme-CHG-plus\"),\n chh: getRequiredWgbsFilename(sampleRows, \"DNAme-CHH-plus\"),\n depth: getRequiredWgbsFilename(sampleRows, \"coverage-plus\"),\n },\n minusStrand: {\n cpg: getRequiredWgbsFilename(sampleRows, \"DNAme-CpG-minus\"),\n chg: getRequiredWgbsFilename(sampleRows, \"DNAme-CHG-minus\"),\n chh: getRequiredWgbsFilename(sampleRows, \"DNAme-CHH-minus\"),\n depth: getRequiredWgbsFilename(sampleRows, \"coverage-minus\"),\n },\n },\n };\n}\n\nfunction transformData(folderId: string, data: MohdDataFile): MohdRowInfo[] {\n const signalRows = data\n .filter((row) => row.ome !== \"wgbs\")\n .map((row) => createFileRow(folderId, row));\n const wgbsRowsBySampleId = new Map<string, MohdDataFile>();\n\n data.forEach((row) => {\n if (row.ome !== \"wgbs\") {\n return;\n }\n\n const sampleRows = wgbsRowsBySampleId.get(row.sample_id);\n\n if (sampleRows) {\n sampleRows.push(row);\n return;\n }\n\n wgbsRowsBySampleId.set(row.sample_id, [row]);\n });\n\n const methylationRows = Array.from(wgbsRowsBySampleId.values()).map(\n (sampleRows) => createWgbsMethylRow(folderId, sampleRows),\n );\n\n return [...signalRows, ...methylationRows];\n}\n\nexport interface CreateMohdFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: MohdDataFile;\n}\n\nexport function createMohdFolder(\n options: CreateMohdFolderOptions,\n): FolderDefinition<MohdRowInfo> {\n const { id, label, description, data } = options;\n const rows = transformData(id, data);\n const defaultView = mohdViews[0]!;\n\n return {\n id,\n label,\n description,\n rows,\n columns: defaultView.columns,\n groupingModel: defaultView.groupingModel,\n leafField: defaultView.leafField,\n createTrack: createMohdTrack,\n views: mohdViews,\n ViewSelector: MohdViewSelector,\n GroupingCellComponent: MohdGroupingCell,\n TreeItemComponent: MohdTreeItem,\n };\n}\n","import humanData from \"./data/human.json\";\nimport { createMohdFolder } from \"./shared/createFolder\";\nimport { MohdDataFile } from \"./shared/types\";\n\nexport const humanMohdFolder = createMohdFolder({\n id: \"human-mohd\",\n label: \"MOHD\",\n description: \"Public MOHD signal, methylation, and annotation tracks.\",\n data: humanData as MohdDataFile,\n});\n","import { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { PsychscreenTrackInfo } from \"./types\";\n\nexport const psychscreenCategoryColors: Record<string, string> = {\n \"Epigenetic Tracks\": \"#9479bc\",\n \"Deep Learned Models\": \"#758c7b\",\n \"Pseudo bulk ATAC\": \"#cd8c66\",\n \"Evolutionary Conservation\": \"#c0a9e2\",\n \"ATAC Seq Peaks\": \"#9479bc\",\n};\n\nexport function getPsychscreenCategoryColor(category: string) {\n return psychscreenCategoryColors[category] ?? \"#000000\";\n}\n\nconst titleCol: GridColDef<PsychscreenTrackInfo> = {\n field: \"title\",\n headerName: \"Title\",\n flex: 1,\n minWidth: 240,\n};\n\nconst categoryCol: GridColDef<PsychscreenTrackInfo> = {\n field: \"category\",\n headerName: \"Category\",\n flex: 1,\n minWidth: 180,\n};\n\nconst subcategoryCol: GridColDef<PsychscreenTrackInfo> = {\n field: \"subcategory\",\n headerName: \"Subcategory\",\n flex: 1,\n minWidth: 240,\n};\n\nconst trackTypeCol: GridColDef<PsychscreenTrackInfo> = {\n field: \"trackType\",\n headerName: \"Track Type\",\n width: 120,\n};\n\nexport const defaultColumns: GridColDef<PsychscreenTrackInfo>[] = [\n titleCol,\n categoryCol,\n subcategoryCol,\n trackTypeCol,\n];\n\nexport const defaultGroupingModel = [\"category\", \"subcategory\"];\n\nexport const defaultLeafField = \"title\";\n","import ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport { Box, IconButton, Tooltip } from \"@mui/material\";\nimport { alpha } from \"@mui/material/styles\";\nimport {\n GridGroupNode,\n GridRenderCellParams,\n useGridApiContext,\n} from \"@mui/x-data-grid-premium\";\nimport { getPsychscreenCategoryColor } from \"./columns\";\n\nexport function PsychscreenGroupingCell(params: GridRenderCellParams) {\n const apiRef = useGridApiContext();\n const isGroup = params.rowNode.type === \"group\";\n const groupNode = params.rowNode as GridGroupNode;\n const isExpanded = isGroup ? groupNode.childrenExpanded : false;\n const groupingField = isGroup ? groupNode.groupingField : null;\n const isCategoryGroup = groupingField === \"category\";\n const color = getPsychscreenCategoryColor(\n isCategoryGroup ? String(params.value ?? \"\") : params.row.category,\n );\n const label = String(params.formattedValue ?? params.value ?? \"\");\n const depth = params.rowNode.depth ?? 0;\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n apiRef.current.setRowChildrenExpansion(params.id, !isExpanded);\n };\n\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n gap: 1,\n ml: depth * 2,\n }}\n >\n {isGroup && (\n <IconButton size=\"small\" onClick={handleExpandClick} sx={{ mr: 0.25 }}>\n {isExpanded ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ChevronRightIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n {isCategoryGroup && (\n <Box\n sx={{\n width: 9,\n height: 9,\n borderRadius: \"50%\",\n bgcolor: alpha(color, 0.65),\n flexShrink: 0,\n }}\n />\n )}\n <Tooltip title={label} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n bgcolor: isCategoryGroup ? alpha(color, 0.06) : undefined,\n borderRadius: isCategoryGroup ? 1 : undefined,\n px: isCategoryGroup ? 0.75 : 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n fontWeight: isGroup ? 700 : undefined,\n }}\n >\n {label}\n </Box>\n </Tooltip>\n </Box>\n );\n}\n","import {\n BigBedConfig,\n BigWigConfig,\n DisplayMode,\n Track,\n TrackType,\n} from \"@weng-lab/genomebrowser\";\nimport { CreateTrackOptions } from \"../../types\";\nimport { PsychscreenTrackInfo } from \"./types\";\n\nexport type PsychscreenTrackContext = {};\n\nconst defaultBigWig: Omit<BigWigConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigWig,\n height: 50,\n displayMode: DisplayMode.Full,\n titleSize: 12,\n};\n\nconst defaultBigBed: Omit<BigBedConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigBed,\n height: 30,\n displayMode: DisplayMode.Dense,\n titleSize: 12,\n};\n\nexport function createPsychscreenTrack(\n row: PsychscreenTrackInfo,\n _options: CreateTrackOptions,\n): Track {\n if (row.trackType === \"bigbed\") {\n return {\n ...defaultBigBed,\n id: row.id,\n title: row.title,\n url: row.url,\n color: row.color ?? \"#000000\",\n };\n }\n\n return {\n ...defaultBigWig,\n id: row.id,\n title: row.title,\n url: row.url,\n color: row.color ?? \"#000000\",\n };\n}\n","import { FolderDefinition } from \"../../types\";\nimport { PsychscreenDataFile, PsychscreenTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { PsychscreenGroupingCell } from \"./PsychscreenGroupingCell\";\nimport { createPsychscreenTrack } from \"./toTrack\";\n\nfunction transformData(\n folderId: string,\n data: PsychscreenDataFile,\n): PsychscreenTrackInfo[] {\n return data.map((row) => ({\n ...row,\n sourceId: row.id,\n id: `${folderId}/${row.id}`,\n }));\n}\n\nexport interface CreatePsychscreenFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: PsychscreenDataFile;\n}\n\nexport function createPsychscreenFolder(\n options: CreatePsychscreenFolderOptions,\n): FolderDefinition<PsychscreenTrackInfo> {\n const { id, label, description, data } = options;\n\n return {\n id,\n label,\n description,\n rows: transformData(id, data),\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n createTrack: createPsychscreenTrack,\n GroupingCellComponent: PsychscreenGroupingCell,\n };\n}\n","import { createPsychscreenFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/human.json\";\nimport { PsychscreenDataFile } from \"./shared/types\";\n\nexport const humanPsychscreenFolder = createPsychscreenFolder({\n id: \"human-psychscreen\",\n label: \"PsychSCREEN\",\n description: \"PsychSCREEN browser tracks\",\n data: humanData as PsychscreenDataFile,\n});\n","import { Assembly, FolderDefinition } from \"./types\";\nimport { humanBiosamplesFolder } from \"./biosamples/human\";\nimport { mouseBiosamplesFolder } from \"./biosamples/mouse\";\nimport { humanGenesFolder } from \"./genes/human\";\nimport { mouseGenesFolder } from \"./genes/mouse\";\nimport { humanOtherTracksFolder } from \"./other-tracks/human\";\nimport { humanMohdFolder } from \"./mohd/human\";\nimport { humanPsychscreenFolder } from \"./psychscreen/human\";\n\nexport { type Assembly, type FolderDefinition, type FolderView } from \"./types\";\n\nexport type { BiosampleRowInfo } from \"./biosamples/shared/types\";\nexport type { BiosampleTrackContext } from \"./biosamples/shared/toTrack\";\nexport type { GeneRowInfo } from \"./genes/shared/types\";\nexport type { GeneTrackContext } from \"./genes/shared/toTrack\";\nexport type { MohdRowInfo } from \"./mohd/shared/types\";\nexport type { MohdTrackContext } from \"./mohd/shared/toTrack\";\nexport type { PsychscreenTrackInfo } from \"./psychscreen/shared/types\";\nexport type { PsychscreenTrackContext } from \"./psychscreen/shared/toTrack\";\nexport type { OtherTrackInfo } from \"./other-tracks/shared/types\";\nexport type { OtherTracksTrackContext } from \"./other-tracks/shared/toTrack\";\n\n// Registry of folders by assembly\nexport const foldersByAssembly: Record<Assembly, FolderDefinition[]> = {\n GRCh38: [\n humanGenesFolder,\n humanBiosamplesFolder,\n humanMohdFolder,\n humanPsychscreenFolder,\n humanOtherTracksFolder,\n ],\n mm10: [mouseGenesFolder, mouseBiosamplesFolder],\n};\n"],"names":["muiLicenseKey","LicenseInfo","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","DefaultGroupingCell","params","apiRef","useGridApiContext","isGroup","groupNode","isExpanded","depth","handleExpandClick","e","indentLevel","jsxs","Box","jsx","IconButton","ExpandMoreIcon","ChevronRightIcon","Tooltip","autosizeOptions","DataGridWrapper","columns","groupingModel","leafField","onSelectionChange","rows","selectedIds","GroupingCellComponent","GroupingCell","useGridApiRef","useEffect","baseVisibility","useMemo","visibility","field","columnVisibilityModel","setColumnVisibilityModel","useState","filterColumns","column","getTogglableColumns","Paper","DataGridPremium","row","selection","ids","ClearDialog","open","onClose","onConfirm","folderLabel","clearAll","Dialog","DialogTitle","DialogContent","DialogContentText","Fragment","DialogActions","Button","LimitDialog","maxTracks","ResetDialog","Breadcrumb","currentFolder","onNavigateToRoot","Breadcrumbs","NavigateNextIcon","Link","Typography","FolderCard","folder","onClick","FolderList","folders","onFolderSelect","Stack","buildManagedTrack","assembly","id","trackContext","candidate","track","diffManagedTracks","currentTracks","selectedByFolder","nextManagedIds","currentManagedIds","idsToRemove","tracksToAdd","resolveFolderView","activeViewIdByFolder","activeViewId","_a","view","_b","toLabel","fallback","isHighlightedField","createRootNode","folderId","rootLabel","createLeafNode","label","appendGroupedRows","parent","path","leafNode","groupedRows","groupRows","buildSelectedTree","selectedRows","root","TreeItemRoot","styled","theme","TreeItemLabelText","CustomLabel","Icon","isHighlightedItem","highlightName","renderIcon","other","variant","labelText","TreeItemLabel","TreeItemContent","alpha","getIconFromTreeItemType","itemType","Folder","IndeterminateCheckBoxRoundedIcon","CustomTreeItem","ref","itemId","disabled","onRemove","getContextProviderProps","getRootProps","getContentProps","getIconContainerProps","getCheckboxProps","getLabelProps","getGroupTransitionProps","status","useTreeItem","item","useTreeItemModel","icon","rootProps","handleRemoveIconClick","TreeItemProvider","TreeItemIconContainer","TreeItemIcon","TreeItemCheckbox","Collapse","attachFolderId","items","getAllExpandableItemIds","FolderTree","LeafTreeItemComponent","TreeItemComponent","allExpandableIds","expandedItems","setExpandedItems","prev","newIds","handleRemoveTreeItem","TreeItem","Component","RichTreeView","_event","TreeViewWrapper","selectedCount","folderTrees","folderSelectedIds","activeView","Avatar","folderTree","DEFAULT_MAX_TRACKS","DEFAULT_TITLE","createEmptySelectedByFolder","cloneSelectedByFolder","normalizeSelectedByFolder","selectedIdsByFolder","normalized","loadSelectedByFolder","initialSelectedIds","sessionStorageKey","storedValue","parsed","saveSelectedByFolder","serialized","TrackSelect","trackStore","onCancel","title","limitDialogOpen","setLimitDialogOpen","clearDialogOpen","setClearDialogOpen","resetDialogOpen","setResetDialogOpen","currentView","setCurrentView","activeFolderId","setActiveFolderId","setActiveViewIdByFolder","committedSelectedByFolder","setCommittedSelectedByFolder","setSelectedByFolder","maxTracksLimit","currentFolderId","current","nextCommittedSelection","insertTrack","removeTrack","activeFolder","activeConfig","handleFolderSelect","handleNavigateToRoot","handleCancel","ViewSelector","confirmReset","confirmClear","nextSelectedByFolder","handleActiveViewChange","viewId","next","handleSelectionChange","filteredIds","nextTotal","folderIds","nextSet","handleSubmit","CloseIcon","assayTypes","lifeStages","ontologyTypes","assayColorMap","AssayIcon","color","assayJsonToDisplay","formatAssayType","jsonKey","collectionTypes","CollectionCell","childIds","firstChildRow","displayNameCol","capitalize","sortedByAssayOntologyCol","val","sortedByAssayAssayCol","defaultOntologyCol","defaultAssayCol","sampleTypeCol","lifeStageCol","collectionCol","experimentCol","fileCol","idCol","sortedByAssayColumns","defaultColumns","sortedByAssayGroupingModel","defaultGroupingModel","sortedByAssayLeafField","defaultLeafField","BiosampleViewSelector","views","onChange","ToggleButtonGroup","ToggleButton","BiosampleGroupingCell","groupingField","renderContent","a","BiosampleTreeItem","assayColors","defaultBigWig","TrackType","DisplayMode","defaultBigBed","defaultMethylC","createBiosampleTrack","options","assay","rect","flattenTrackIntoRows","ontology","lifeStage","sampleType","collection","b","aIsCcre","bIsCcre","experimentAccession","fileAccession","url","cpgPlus","cpgMinus","coverage","transformData","data","createBiosampleFolder","description","humanBiosamplesFolder","humanData","mouseBiosamplesFolder","mouseData","formatVersions","versions","v","versionsCol","defaultTranscript","createGeneTrack","transcript","trackToRow","createGeneFolder","humanGenesFolder","mouseGenesFolder","nameCol","descriptionCol","_0","o","h","A0","N0","w0","E0","S0","v0","O0","T0","z0","R0","B0","F0","G0","I0","Y0","D0","H0","b0","j0","Q0","U0","W0","X0","K0","V0","Z0","J0","z","q0","n0","$0","P0","oo","r0","eo","c0","to","L0","no","R","ro","l0","co","g0","Lo","lo","go","h0","ho","s0","so","i0","io","f0","Y","fo","a0","ao","m0","mo","d0","po","H","n","xo","W","Co","X","Mo","uo","j","yo","o0","ko","p0","_o","Q","Ao","r","t","c","No","L","g","d","i","f","s","x","C","M","l","p","u","_","wo","x0","D","e0","C0","t0","M0","Eo","So","vo","K","u0","zo","Ro","U","Fo","y0","Go","Io","V","B","O","y","A","Z","m","J","N","S","I","F","E","q","T","$","k0","w","G","P","Yo","Uo","parseTfPeakBigBed","chrom","startBase","endBase","rest","entry","tokens","nameKey","buildOverlayIndex","rects","acc","intervalsOverlap","aStart","aEnd","bStart","bEnd","scoreColor","score","motifLookup","motifData","lookupPwm","tfDisplayName","TooltipRow","TfPeaksTooltip","pwm","totalWidth","pad","lineH","titleH","metaRows","allCCREItems","maxCCREs","cCREItems","hiddenCCREs","cCRERows","allBiosamples","seen","cellLine","maxBiosamples","biosampleItems","hiddenBiosamples","biosampleText","biosampleMoreText","biosampleCharsPerLine","biosampleContentLines","hasLogo","logoHeight","logoSectionH","metaSectionH","cCREGap","cCREHeaderH","cCREMoreH","cCRESectionH","biosampleGap","biosampleHeaderH","biosampleSectionH","titleY","logoY","metaY","cCREY","cCREDataY","biosampleY","biosampleDataY","totalHeight","DNALogo","group","TfPeaksSettings","useTrackStore","state","editTrack","input","setInput","handleChange","names","OverlayBigBedRenderer","dimensions","trackHeight","_color","_baseColorProp","overlayColorProp","filter","domain","useBrowserStore","sideWidth","reverseX","useXTransform","filterSet","visiblePrimary","visible","renderSquishBigBedData","primaryIndex","index","rowHeight","useRowHeight","height","overlayByName","overlayColor","Vibrant","cursor","handleClick","handleHover","handleLeave","useInteraction","ClipPath","rowIndex","baseY","baseH","ri","realStart","realEnd","baseName","attached","fill","meta","baseRect","ai","left","right","PEAKS_BIGBED_URL","DECORATOR_BIGBED_URL","tfPeaksTrack","ctx","primary","overlay","fetchBigBedUrl","error","createOtherTrack","_options","createOtherTracksFolder","humanOtherTracksFolder","MOHD_BASE_URL","MOHD_OME_CONFIG","MOHD_OME_LABELS","getMohdOmeConfig","rawOme","createMohdFileUrl","ome","sampleId","filename","downloadPath","isMohdOmeLabel","MohdOmeIcon","sampleIdCol","kitIdCol","trackCategoryCol","omeCol","siteCol","sexCol","statusCol","mohdColumns","mohdViews","MohdGroupingCell","showOmeIcon","MohdTreeItem","mohdAtacFdrPeaksSchema","defineBigBedSchema","mohdAtacPseudorepPeaksSchema","getMohdBigBedSchema","formatValue","MohdBigBedTooltip","width","createTrackTitle","createMohdTrack","MohdViewSelector","WGBS_DESCRIPTION","createBaseRow","createFileRow","trackCategory","getRequiredWgbsFilename","sampleRows","includesText","match","createWgbsMethylRow","signalRows","wgbsRowsBySampleId","methylationRows","createMohdFolder","defaultView","humanMohdFolder","psychscreenCategoryColors","getPsychscreenCategoryColor","category","titleCol","categoryCol","subcategoryCol","trackTypeCol","PsychscreenGroupingCell","isCategoryGroup","createPsychscreenTrack","createPsychscreenFolder","humanPsychscreenFolder","foldersByAssembly"],"mappings":"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","x_google_ignoreList":[1,2,3,33]}
1
+ {"version":3,"file":"genomebrowser-ui.es.js","sources":["../src/muiLicense.ts","../../../node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.2.3/node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/.pnpm/react@19.2.3/node_modules/react/jsx-runtime.js","../src/TrackSelect/DataGrid/DefaultGroupingCell.tsx","../src/TrackSelect/DataGrid/DataGridWrapper.tsx","../src/TrackSelect/Dialogs/ClearDialog.tsx","../src/TrackSelect/Dialogs/LimitDialog.tsx","../src/TrackSelect/Dialogs/ResetDialog.tsx","../src/TrackSelect/FolderList/Breadcrumb.tsx","../src/TrackSelect/FolderList/FolderCard.tsx","../src/TrackSelect/FolderList/FolderList.tsx","../src/TrackSelect/managedTracks.ts","../src/TrackSelect/resolveFolderView.ts","../src/TrackSelect/buildSelectedTree.ts","../src/TrackSelect/TreeView/CustomTreeItem.tsx","../src/TrackSelect/TreeView/TreeViewWrapper.tsx","../src/TrackSelect/TrackSelect.tsx","../src/TrackSelect/Folders/biosamples/shared/constants.tsx","../src/TrackSelect/Folders/biosamples/shared/columns.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleViewSelector.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleGroupingCell.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleTreeItem.tsx","../src/TrackSelect/Folders/biosamples/shared/toTrack.ts","../src/TrackSelect/Folders/biosamples/shared/createFolder.ts","../src/TrackSelect/Folders/biosamples/human.ts","../src/TrackSelect/Folders/biosamples/mouse.ts","../src/TrackSelect/Folders/genes/shared/columns.tsx","../src/TrackSelect/Folders/genes/shared/toTrack.ts","../src/TrackSelect/Folders/genes/shared/createFolder.ts","../src/TrackSelect/Folders/genes/human.ts","../src/TrackSelect/Folders/genes/mouse.ts","../src/TrackSelect/Folders/other-tracks/shared/columns.tsx","../../../node_modules/.pnpm/logo-test@0.0.5_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/logo-test/dist/logo-test.es.js","../src/TrackSelect/Custom/TfPeaks.tsx","../src/TrackSelect/Folders/other-tracks/shared/toTrack.ts","../src/TrackSelect/Folders/other-tracks/shared/createFolder.ts","../src/TrackSelect/Folders/other-tracks/human.ts","../src/TrackSelect/Folders/mohd/shared/config.tsx","../src/TrackSelect/Folders/mohd/shared/columns.tsx","../src/TrackSelect/Folders/mohd/shared/MohdGroupingCell.tsx","../src/TrackSelect/Folders/mohd/shared/MohdTreeItem.tsx","../src/TrackSelect/Folders/mohd/shared/bigBedSchemas.ts","../src/TrackSelect/Folders/mohd/shared/MohdBigBedTooltip.tsx","../src/TrackSelect/Folders/mohd/shared/toTrack.ts","../src/TrackSelect/Folders/mohd/shared/MohdViewSelector.tsx","../src/TrackSelect/Folders/mohd/shared/createFolder.ts","../src/TrackSelect/Folders/mohd/human.ts","../src/TrackSelect/Folders/psychscreen/shared/columns.tsx","../src/TrackSelect/Folders/psychscreen/shared/PsychscreenGroupingCell.tsx","../src/TrackSelect/Folders/psychscreen/shared/toTrack.ts","../src/TrackSelect/Folders/psychscreen/shared/createFolder.ts","../src/TrackSelect/Folders/psychscreen/human.ts","../src/TrackSelect/Folders/index.ts"],"sourcesContent":["import { LicenseInfo } from \"@mui/x-license\";\n\nconst muiLicenseKey =\n import.meta.env.NEXT_PUBLIC_MUI_X_LICENSE_KEY ??\n import.meta.env.VITE_MUI_X_LICENSE_KEY;\n\nif (muiLicenseKey) {\n LicenseInfo.setLicenseKey(muiLicenseKey);\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { Tooltip, Box, IconButton } from \"@mui/material\";\nimport {\n GridRenderCellParams,\n useGridApiContext,\n GridGroupNode,\n} from \"@mui/x-data-grid-premium\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\n\n/**\n * Default grouping cell that handles expand/collapse, truncation, and tooltips.\n * This is a generic implementation without any folder-specific logic.\n */\nexport function DefaultGroupingCell(params: GridRenderCellParams) {\n const apiRef = useGridApiContext();\n const isGroup = params.rowNode.type === \"group\";\n const groupNode = params.rowNode as GridGroupNode;\n const isExpanded = isGroup ? groupNode.childrenExpanded : false;\n const depth = params.rowNode.depth ?? 0;\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n apiRef.current.setRowChildrenExpansion(params.id, !isExpanded);\n };\n\n const value = String(params.value ?? \"\");\n\n // Indent based on depth (2 units per level)\n const indentLevel = depth * 2;\n\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n ml: indentLevel,\n }}\n >\n {isGroup && (\n <IconButton size=\"small\" onClick={handleExpandClick} sx={{ mr: 0.5 }}>\n {isExpanded ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ChevronRightIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n fontWeight: isGroup ? \"bold\" : undefined,\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n </Box>\n );\n}\n","import { Box, Paper } from \"@mui/material\";\nimport {\n DataGridPremium,\n FilterColumnsArgs,\n GridAutosizeOptions,\n GridColDef,\n GridColumnVisibilityModel,\n GridRenderCellParams,\n GridRowId,\n GridRowSelectionModel,\n useGridApiRef,\n} from \"@mui/x-data-grid-premium\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { DataGridProps } from \"../types\";\nimport { DefaultGroupingCell } from \"./DefaultGroupingCell\";\n\nconst autosizeOptions: GridAutosizeOptions = {\n expand: true,\n includeHeaders: true,\n outliersFactor: 1.5,\n};\n\nconst areSetsEqual = <T,>(a: Set<T>, b: Set<T>) => {\n if (a.size !== b.size) {\n return false;\n }\n\n for (const value of a) {\n if (!b.has(value)) {\n return false;\n }\n }\n\n return true;\n};\n\nconst areSelectionModelsEqual = (\n a: GridRowSelectionModel,\n b: GridRowSelectionModel,\n) => a.type === b.type && areSetsEqual(a.ids, b.ids);\n\nexport function DataGridWrapper(props: DataGridProps) {\n const {\n columns,\n groupingModel,\n leafField,\n onSelectionChange,\n rows,\n selectedIds,\n GroupingCellComponent,\n } = props;\n\n const GroupingCell = GroupingCellComponent ?? DefaultGroupingCell;\n\n const apiRef = useGridApiRef();\n\n const rowIdSet = useMemo(\n () => new Set(rows.map((row: { id: string }) => row.id)),\n [rows],\n );\n\n const filterToLeafIds = useCallback(\n (ids: Set<GridRowId>) =>\n new Set([...ids].map(String).filter((id) => rowIdSet.has(id))),\n [rowIdSet],\n );\n\n const getPropagatedSelectionModel = useCallback(\n (ids: Set<GridRowId>) => {\n const selectionModel: GridRowSelectionModel = {\n type: \"include\",\n ids,\n };\n\n return apiRef.current.getPropagatedRowSelectionModel\n ? apiRef.current.getPropagatedRowSelectionModel(selectionModel)\n : selectionModel;\n },\n [apiRef],\n );\n\n const [rowSelectionModel, setRowSelectionModel] =\n useState<GridRowSelectionModel>(() => ({\n type: \"include\",\n ids: new Set(selectedIds),\n }));\n\n useEffect(() => {\n const currentLeafIds = filterToLeafIds(rowSelectionModel.ids);\n if (areSetsEqual(currentLeafIds, selectedIds)) {\n return;\n }\n\n const nextSelectionModel = getPropagatedSelectionModel(\n new Set(selectedIds),\n );\n\n setRowSelectionModel((currentSelectionModel) =>\n areSelectionModelsEqual(currentSelectionModel, nextSelectionModel)\n ? currentSelectionModel\n : nextSelectionModel,\n );\n }, [\n filterToLeafIds,\n getPropagatedSelectionModel,\n groupingModel,\n rowSelectionModel.ids,\n selectedIds,\n ]);\n\n useEffect(() => {\n if (apiRef.current && apiRef.current.autosizeColumns) {\n apiRef.current.autosizeColumns(autosizeOptions);\n }\n }, [columns, groupingModel, leafField]);\n\n const baseVisibility = useMemo(() => {\n const visibility: GridColumnVisibilityModel = {\n id: false,\n };\n\n // Only hide leafField if we have grouping (it shows in grouping column)\n if (groupingModel.length > 0) {\n visibility[leafField] = false;\n }\n\n groupingModel.forEach((field) => {\n visibility[field] = false;\n });\n\n return visibility;\n }, [groupingModel, leafField]);\n\n const [columnVisibilityModel, setColumnVisibilityModel] =\n useState<GridColumnVisibilityModel>(baseVisibility);\n\n useEffect(() => {\n setColumnVisibilityModel(baseVisibility);\n }, [baseVisibility]);\n\n // functions to customize the column and filter panel in the toolbar\n const filterColumns = ({ columns }: FilterColumnsArgs) => {\n return columns\n .filter((column) => column.type !== \"custom\")\n .map((column) => column.field);\n };\n\n const getTogglableColumns = (columns: GridColDef[]) => {\n return columns\n .filter((column) => column.type !== \"custom\")\n .map((column) => column.field);\n };\n\n return (\n <Paper sx={{ width: \"100%\" }}>\n <Box\n sx={{\n height: 500,\n width: \"100%\",\n overflow: \"auto\",\n }}\n >\n <DataGridPremium\n apiRef={apiRef}\n rows={rows}\n columns={columns}\n getRowId={(row: { id: string }) => row.id}\n autosizeOptions={autosizeOptions}\n rowGroupingModel={groupingModel}\n groupingColDef={{\n leafField,\n display: \"flex\",\n minWidth: 300,\n maxWidth: 500,\n flex: 2,\n renderCell: (params: GridRenderCellParams) => (\n <GroupingCell {...params} />\n ),\n }}\n columnVisibilityModel={columnVisibilityModel}\n onColumnVisibilityModelChange={setColumnVisibilityModel}\n onRowSelectionModelChange={(selection: GridRowSelectionModel) => {\n const nextSelectionModel = getPropagatedSelectionModel(\n selection.ids,\n );\n\n setRowSelectionModel((currentSelectionModel) =>\n areSelectionModelsEqual(currentSelectionModel, nextSelectionModel)\n ? currentSelectionModel\n : nextSelectionModel,\n );\n\n const leafIds = filterToLeafIds(nextSelectionModel.ids);\n\n if (!areSetsEqual(leafIds, selectedIds)) {\n onSelectionChange(leafIds);\n }\n }}\n rowSelectionPropagation={{ descendants: true, parents: true }}\n disableRowGrouping={false}\n rowSelectionModel={rowSelectionModel}\n slotProps={{\n filterPanel: {\n filterFormProps: {\n filterColumns,\n },\n },\n columnsManagement: {\n getTogglableColumns,\n },\n }}\n keepNonExistentRowsSelected\n showToolbar\n disableAggregation\n disableRowSelectionExcludeModel\n disablePivoting\n checkboxSelection\n autosizeOnMount\n pagination\n hideFooterSelectedRowCount\n />\n </Box>\n </Paper>\n );\n}\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\n\ninterface ClearDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n folderLabel: string;\n clearAll: boolean;\n}\n\nexport function ClearDialog({\n open,\n onClose,\n onConfirm,\n folderLabel,\n clearAll,\n}: ClearDialogProps) {\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle\n sx={{\n bgcolor: \"primary.main\",\n color: \"primary.contrastText\",\n fontWeight: \"bold\",\n }}\n >\n {clearAll ? \"Clear All Folders\" : `Clear ${folderLabel}`}\n </DialogTitle>\n <DialogContent sx={{ mt: 2 }}>\n <DialogContentText>\n {clearAll ? (\n \"Are you sure you want to clear all selections?\"\n ) : (\n <>\n Are you sure you want to clear the selection for{\" \"}\n <strong>{folderLabel}</strong>?\n </>\n )}\n </DialogContentText>\n </DialogContent>\n <DialogActions sx={{ justifyContent: \"center\", gap: 2, pb: 2 }}>\n <Button variant=\"contained\" color=\"primary\" onClick={onClose} autoFocus>\n Cancel\n </Button>\n <Button variant=\"outlined\" color=\"secondary\" onClick={onConfirm}>\n Clear\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\n\ninterface LimitDialogProps {\n open: boolean;\n onClose: () => void;\n maxTracks: number;\n}\n\nexport function LimitDialog({ open, onClose, maxTracks }: LimitDialogProps) {\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>Track Limit Reached</DialogTitle>\n <DialogContent>\n <DialogContentText>\n You can select up to {maxTracks} tracks at a time. Please remove a\n track before adding another.\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} autoFocus>\n OK\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\n\ninterface ResetDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nexport function ResetDialog({ open, onClose, onConfirm }: ResetDialogProps) {\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle\n sx={{\n bgcolor: \"primary.main\",\n color: \"primary.contrastText\",\n fontWeight: \"bold\",\n }}\n >\n Reset to Browser State\n </DialogTitle>\n <DialogContent sx={{ mt: 2 }}>\n <DialogContentText>\n Are you sure you want to reset all selections to the current browser\n state?\n </DialogContentText>\n </DialogContent>\n <DialogActions sx={{ justifyContent: \"center\", gap: 2, pb: 2 }}>\n <Button variant=\"contained\" color=\"primary\" onClick={onClose} autoFocus>\n Cancel\n </Button>\n <Button variant=\"outlined\" color=\"secondary\" onClick={onConfirm}>\n Reset\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { Breadcrumbs, Link, Typography } from \"@mui/material\";\nimport NavigateNextIcon from \"@mui/icons-material/NavigateNext\";\nimport { FolderDefinition } from \"../Folders/types\";\n\nexport interface BreadcrumbProps {\n currentFolder: FolderDefinition | null;\n onNavigateToRoot: () => void;\n}\n\nexport function Breadcrumb({\n currentFolder,\n onNavigateToRoot,\n}: BreadcrumbProps) {\n return (\n <Breadcrumbs separator={<NavigateNextIcon fontSize=\"small\" />}>\n {currentFolder ? (\n <Link\n component=\"button\"\n variant=\"body1\"\n onClick={onNavigateToRoot}\n underline=\"hover\"\n sx={{ cursor: \"pointer\" }}\n >\n All Folders\n </Link>\n ) : (\n <Typography variant=\"body1\" color=\"text.primary\">\n All Folders\n </Typography>\n )}\n {currentFolder && (\n <Typography variant=\"body1\" color=\"text.primary\">\n {currentFolder.label}\n </Typography>\n )}\n </Breadcrumbs>\n );\n}\n","import { Paper, Typography } from \"@mui/material\";\nimport { FolderDefinition } from \"../Folders/types\";\n\nexport interface FolderCardProps {\n folder: FolderDefinition;\n onClick: () => void;\n}\n\nexport function FolderCard({ folder, onClick }: FolderCardProps) {\n return (\n <Paper\n elevation={1}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }}\n role=\"button\"\n tabIndex={0}\n sx={{\n p: 3,\n cursor: \"pointer\",\n transition: \"all 0.2s ease-in-out\",\n \"&:hover\": {\n elevation: 3,\n boxShadow: 3,\n bgcolor: \"action.hover\",\n },\n \"&:focus\": {\n outline: \"2px solid\",\n outlineColor: \"primary.main\",\n outlineOffset: 2,\n },\n }}\n >\n <Typography variant=\"h6\" gutterBottom>\n {folder.label}\n </Typography>\n {folder.description && (\n <Typography variant=\"body2\" color=\"text.secondary\" gutterBottom>\n {folder.description}\n </Typography>\n )}\n <Typography variant=\"caption\" color=\"text.secondary\">\n {folder.rows.length.toLocaleString()} tracks available\n </Typography>\n </Paper>\n );\n}\n","import { Paper, Stack, Typography } from \"@mui/material\";\nimport { FolderDefinition } from \"../Folders/types\";\nimport { FolderCard } from \"./FolderCard\";\n\nexport interface FolderListProps {\n folders: FolderDefinition[];\n onFolderSelect: (folderId: string) => void;\n}\n\nexport function FolderList({ folders, onFolderSelect }: FolderListProps) {\n if (folders.length === 0) {\n return (\n <Paper\n variant=\"outlined\"\n sx={{\n height: 500,\n borderWidth: 2,\n }}\n >\n <Typography color=\"text.secondary\" sx={{ p: 3 }}>\n No folders available\n </Typography>\n </Paper>\n );\n }\n\n return (\n <Paper\n variant=\"outlined\"\n sx={{\n height: 500,\n overflow: \"auto\",\n borderWidth: 2,\n }}\n >\n <Stack spacing={2} sx={{ p: 2 }}>\n {folders.map((folder) => (\n <FolderCard\n key={folder.id}\n folder={folder}\n onClick={() => onFolderSelect(folder.id)}\n />\n ))}\n </Stack>\n </Paper>\n );\n}\n","import { Track } from \"@weng-lab/genomebrowser\";\nimport { Assembly, FolderDefinition } from \"./Folders/types\";\nimport type { TrackSelectTrackContext } from \"./trackContext\";\n\nconst buildManagedTrack = ({\n assembly,\n folder,\n id,\n trackContext,\n}: {\n assembly: Assembly;\n folder: FolderDefinition;\n id: string;\n trackContext?: TrackSelectTrackContext;\n}) => {\n const row = folder.rows.find((candidate) => candidate.id === id);\n if (!row) {\n return null;\n }\n\n const track = folder.createTrack(row, { assembly, trackContext });\n if (!track) {\n return null;\n }\n\n return track;\n};\n\nexport const diffManagedTracks = ({\n assembly,\n currentTracks,\n folders,\n selectedByFolder,\n trackContext,\n}: {\n assembly: Assembly;\n currentTracks: Track[];\n folders: FolderDefinition[];\n selectedByFolder: Map<string, Set<string>>;\n trackContext?: TrackSelectTrackContext;\n}) => {\n const nextManagedIds = new Set<string>();\n const currentManagedIds = new Set<string>();\n const idsToRemove: string[] = [];\n const tracksToAdd: Track[] = [];\n\n currentTracks.forEach((track) => {\n if (folders.some((folder) => track.id.startsWith(`${folder.id}/`))) {\n currentManagedIds.add(track.id);\n }\n });\n\n folders.forEach((folder) => {\n const selectedIds = selectedByFolder.get(folder.id) ?? new Set<string>();\n\n selectedIds.forEach((id) => {\n nextManagedIds.add(id);\n });\n });\n\n currentManagedIds.forEach((id) => {\n if (!nextManagedIds.has(id)) {\n idsToRemove.push(id);\n }\n });\n\n folders.forEach((folder) => {\n const selectedIds = selectedByFolder.get(folder.id) ?? new Set<string>();\n\n selectedIds.forEach((id) => {\n if (currentManagedIds.has(id)) {\n return;\n }\n\n const track = buildManagedTrack({\n assembly,\n folder,\n id,\n trackContext,\n });\n\n if (track) {\n tracksToAdd.push(track);\n }\n });\n });\n\n return {\n idsToRemove,\n tracksToAdd,\n };\n};\n","import { FolderDefinition, FolderView } from \"./Folders/types\";\n\nexport const resolveFolderView = (\n folder: FolderDefinition,\n activeViewIdByFolder: Map<string, string>,\n): FolderView => {\n const activeViewId = activeViewIdByFolder.get(folder.id);\n const activeView = folder.views?.find((view) => view.id === activeViewId);\n\n return (\n activeView ??\n folder.views?.[0] ?? {\n id: \"default\",\n label: folder.label,\n columns: folder.columns,\n groupingModel: folder.groupingModel,\n leafField: folder.leafField,\n }\n );\n};\n","import { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { ExtendedTreeItemProps } from \"./types\";\n\ntype TreeRow = {\n id: string;\n [key: string]: unknown;\n};\n\ntype BuildSelectedTreeOptions = {\n folderId: string;\n rootLabel: string;\n selectedRows: TreeRow[];\n groupingModel: string[];\n leafField: string;\n};\n\nconst toLabel = (value: unknown, fallback: string) => {\n if (value === null || value === undefined || value === \"\") {\n return fallback;\n }\n\n return String(value);\n};\n\nconst isHighlightedField = (field: string) => {\n return field === \"assay\" || field === \"ome\";\n};\n\nconst createRootNode = (\n folderId: string,\n rootLabel: string,\n): TreeViewBaseItem<ExtendedTreeItemProps> => ({\n id: `${folderId}::root`,\n kind: \"root\",\n label: rootLabel,\n icon: \"folder\",\n children: [],\n allExpAccessions: [],\n});\n\nconst createLeafNode = (\n row: TreeRow,\n leafField: string,\n): TreeViewBaseItem<ExtendedTreeItemProps> => {\n const value = row[leafField];\n const label = toLabel(value, row.id);\n\n return {\n id: row.id,\n kind: \"leaf\",\n field: leafField,\n value: label,\n rowId: row.id,\n label,\n icon: \"removeable\",\n highlightName: isHighlightedField(leafField) ? label : undefined,\n isHighlightedItem: isHighlightedField(leafField),\n children: [],\n allExpAccessions: [row.id],\n };\n};\n\nconst appendGroupedRows = (\n parent: TreeViewBaseItem<ExtendedTreeItemProps>,\n rows: TreeRow[],\n groupingModel: string[],\n depth: number,\n folderId: string,\n leafField: string,\n path: string[],\n) => {\n if (depth >= groupingModel.length) {\n rows.forEach((row) => {\n const leafNode = createLeafNode(row, leafField);\n parent.children!.push(leafNode);\n parent.allExpAccessions!.push(row.id);\n });\n return;\n }\n\n const field = groupingModel[depth];\n const groupedRows = new Map<string, TreeRow[]>();\n\n rows.forEach((row) => {\n const value = toLabel(row[field], row.id);\n const groupRows = groupedRows.get(value);\n if (groupRows) {\n groupRows.push(row);\n return;\n }\n\n groupedRows.set(value, [row]);\n });\n\n groupedRows.forEach((groupRows, value) => {\n const nodeId = `${folderId}::${[...path, `${field}=${encodeURIComponent(value)}`].join(\"::\")}`;\n const groupNode: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: nodeId,\n kind: \"group\",\n field,\n value,\n label: value,\n icon: \"removeable\",\n highlightName: isHighlightedField(field) ? value : undefined,\n isHighlightedItem: isHighlightedField(field),\n children: [],\n allExpAccessions: [],\n };\n\n appendGroupedRows(\n groupNode,\n groupRows,\n groupingModel,\n depth + 1,\n folderId,\n leafField,\n [...path, `${field}=${encodeURIComponent(value)}`],\n );\n\n parent.children!.push(groupNode);\n parent.allExpAccessions!.push(...groupNode.allExpAccessions!);\n });\n};\n\nexport const buildSelectedTree = ({\n folderId,\n rootLabel,\n selectedRows,\n groupingModel,\n leafField,\n}: BuildSelectedTreeOptions): TreeViewBaseItem<ExtendedTreeItemProps>[] => {\n const root = createRootNode(folderId, rootLabel);\n\n appendGroupedRows(\n root,\n selectedRows,\n groupingModel,\n 0,\n folderId,\n leafField,\n [],\n );\n\n return [root];\n};\n","import Folder from \"@mui/icons-material/Folder\";\nimport IndeterminateCheckBoxRoundedIcon from \"@mui/icons-material/IndeterminateCheckBoxRounded\";\nimport { Box, Stack, Tooltip, Typography } from \"@mui/material\";\nimport Collapse from \"@mui/material/Collapse\";\nimport { alpha, styled } from \"@mui/material/styles\";\nimport {\n TreeItemCheckbox,\n TreeItemIconContainer,\n TreeItemLabel,\n} from \"@mui/x-tree-view/TreeItem\";\nimport { TreeItemIcon } from \"@mui/x-tree-view/TreeItemIcon\";\nimport { TreeItemProvider } from \"@mui/x-tree-view/TreeItemProvider\";\nimport { useTreeItemModel } from \"@mui/x-tree-view/hooks\";\nimport { useTreeItem } from \"@mui/x-tree-view/useTreeItem\";\nimport React, { ReactNode } from \"react\";\nimport {\n CustomLabelProps,\n CustomTreeItemProps,\n ExtendedTreeItemProps,\n} from \"../types\";\n\nconst TreeItemRoot = styled(\"li\")(({ theme }) => ({\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n outline: 4,\n color: theme.palette.grey[400],\n ...theme.applyStyles(\"light\", {\n color: theme.palette.grey[600],\n }),\n}));\n\nconst TreeItemLabelText = styled(Typography)(({ theme }) => ({\n color: theme.palette.text.primary,\n fontFamily: \"inherit\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n}));\n\nfunction CustomLabel({\n icon: Icon,\n children,\n isHighlightedItem,\n highlightName,\n renderIcon,\n ...other\n}: CustomLabelProps) {\n const variant = \"body2\";\n const fontWeight = 500;\n const labelText = typeof children === \"string\" ? children : \"\";\n return (\n <TreeItemLabel\n {...other}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n minWidth: 0,\n overflow: \"hidden\",\n flex: 1,\n }}\n >\n {Icon && React.isValidElement(Icon) ? (\n <Box className=\"labelIcon\" sx={{ mr: 1, flexShrink: 0 }}>\n {Icon}\n </Box>\n ) : (\n <Box\n component={Icon as React.ElementType}\n className=\"labelIcon\"\n color=\"inherit\"\n sx={{ mr: 1, fontSize: \"1.2rem\", flexShrink: 0 }}\n />\n )}\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n sx={{ minWidth: 0, overflow: \"hidden\", flex: 1 }}\n >\n {isHighlightedItem && highlightName && renderIcon && (\n <Box sx={{ flexShrink: 0 }}>{renderIcon(highlightName)}</Box>\n )}\n <Tooltip title={labelText} enterDelay={500} placement=\"top\">\n <TreeItemLabelText fontWeight={fontWeight} variant={variant}>\n {labelText}\n </TreeItemLabelText>\n </Tooltip>\n </Stack>\n </TreeItemLabel>\n );\n}\n\nconst TreeItemContent = styled(\"div\")(({ theme }) => ({\n padding: theme.spacing(0.5),\n paddingRight: theme.spacing(2),\n paddingLeft: `calc(${theme.spacing(1)} + 6px * var(--TreeView-itemDepth))`,\n width: \"100%\",\n boxSizing: \"border-box\",\n position: \"relative\",\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.spacing(1),\n cursor: \"pointer\",\n WebkitTapHighlightColor: \"transparent\",\n flexDirection: \"row-reverse\",\n borderRadius: theme.spacing(0.7),\n marginBottom: theme.spacing(0.5),\n marginTop: theme.spacing(0.5),\n fontWeight: 500,\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.primary.main, 0.1),\n color: \"white\",\n ...theme.applyStyles(\"light\", {\n color: theme.palette.primary.main,\n }),\n },\n}));\n\nconst getIconFromTreeItemType = (\n itemType: string,\n renderIcon?: (name: string) => ReactNode,\n) => {\n switch (itemType) {\n case \"folder\":\n return Folder;\n case \"removeable\":\n return IndeterminateCheckBoxRoundedIcon;\n default:\n return renderIcon ? renderIcon(itemType) : Folder;\n }\n};\n\nexport const CustomTreeItem = React.forwardRef(function CustomTreeItem(\n props: CustomTreeItemProps,\n ref: React.Ref<HTMLLIElement>,\n) {\n const {\n id,\n itemId,\n label,\n disabled,\n children,\n onRemove,\n renderIcon,\n ...other\n } = props;\n\n const {\n getContextProviderProps,\n getRootProps,\n getContentProps,\n getIconContainerProps,\n getCheckboxProps,\n getLabelProps,\n getGroupTransitionProps,\n status,\n } = useTreeItem({\n id,\n itemId,\n children,\n label,\n disabled,\n rootRef: ref as never,\n });\n\n const item = useTreeItemModel<ExtendedTreeItemProps>(itemId)!;\n const icon = getIconFromTreeItemType(item.icon, renderIcon);\n const rootProps = getRootProps(other) as React.ComponentPropsWithoutRef<\"li\">;\n\n const handleRemoveIconClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onRemove?.(item);\n };\n\n return (\n <TreeItemProvider {...getContextProviderProps()}>\n <TreeItemRoot {...rootProps}>\n <TreeItemContent {...getContentProps()}>\n <TreeItemIconContainer {...getIconContainerProps()}>\n <TreeItemIcon status={status} />\n </TreeItemIconContainer>\n <TreeItemCheckbox {...getCheckboxProps()} />\n <CustomLabel\n {...getLabelProps({\n icon:\n item.icon === \"removeable\" ? (\n <Box\n onClick={handleRemoveIconClick}\n sx={{\n width: 20,\n height: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: \"4px\",\n cursor: \"pointer\",\n mr: 1,\n \"&:hover\": {\n backgroundColor: \"rgba(0,0,0,0.1)\",\n },\n }}\n >\n <IndeterminateCheckBoxRoundedIcon fontSize=\"small\" />\n </Box>\n ) : (\n icon\n ),\n expandable: (status.expandable && status.expanded).toString(),\n isHighlightedItem: item.isHighlightedItem,\n highlightName: item.highlightName,\n id: item.id,\n renderIcon,\n })}\n />\n </TreeItemContent>\n {children && <Collapse {...getGroupTransitionProps()} />}\n </TreeItemRoot>\n </TreeItemProvider>\n );\n});\n","import { Avatar, Box, Paper, Typography } from \"@mui/material\";\nimport { RichTreeView, TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { useTreeItemModel } from \"@mui/x-tree-view/hooks\";\nimport React, { useEffect, useMemo, useState } from \"react\";\nimport { buildSelectedTree } from \"../buildSelectedTree\";\nimport {\n CustomTreeItemProps,\n ExtendedTreeItemProps,\n TreeViewWrapperProps,\n} from \"../types\";\nimport { resolveFolderView } from \"../resolveFolderView\";\nimport { CustomTreeItem } from \"./CustomTreeItem\";\n\nconst attachFolderId = (\n items: TreeViewBaseItem<ExtendedTreeItemProps>[],\n folderId: string,\n): TreeViewBaseItem<ExtendedTreeItemProps>[] => {\n return items.map((item) => ({\n ...item,\n folderId,\n children: item.children\n ? attachFolderId(item.children, folderId)\n : undefined,\n }));\n};\n\nfunction getAllExpandableItemIds(\n items: TreeViewBaseItem<ExtendedTreeItemProps>[],\n): string[] {\n const ids: string[] = [];\n for (const item of items) {\n if (item.children && item.children.length > 0) {\n ids.push(item.id);\n ids.push(...getAllExpandableItemIds(item.children));\n }\n }\n return ids;\n}\n\nfunction FolderTree({\n items,\n LeafTreeItemComponent,\n TreeItemComponent,\n onRemove,\n}: {\n items: TreeViewBaseItem<ExtendedTreeItemProps>[];\n LeafTreeItemComponent?: React.ForwardRefExoticComponent<\n CustomTreeItemProps & React.RefAttributes<HTMLLIElement>\n >;\n TreeItemComponent?: React.ForwardRefExoticComponent<\n CustomTreeItemProps & React.RefAttributes<HTMLLIElement>\n >;\n onRemove: (item: TreeViewBaseItem<ExtendedTreeItemProps>) => void;\n}) {\n const allExpandableIds = useMemo(\n () => getAllExpandableItemIds(items),\n [items],\n );\n const [expandedItems, setExpandedItems] =\n useState<string[]>(allExpandableIds);\n\n useEffect(() => {\n setExpandedItems((prev) => {\n const newIds = allExpandableIds.filter((id) => !prev.includes(id));\n if (newIds.length > 0) {\n return [...prev, ...newIds];\n }\n return prev;\n });\n }, [allExpandableIds]);\n\n const handleRemoveTreeItem = (\n item: TreeViewBaseItem<ExtendedTreeItemProps>,\n ) => {\n onRemove(item);\n };\n\n const TreeItem = useMemo(\n () =>\n TreeItemComponent || LeafTreeItemComponent\n ? React.forwardRef<HTMLLIElement, CustomTreeItemProps>(\n function TreeItem(props, ref) {\n const item = useTreeItemModel<ExtendedTreeItemProps>(\n props.itemId,\n );\n const Component =\n item?.kind === \"leaf\"\n ? (LeafTreeItemComponent ??\n TreeItemComponent ??\n CustomTreeItem)\n : (TreeItemComponent ?? CustomTreeItem);\n\n return <Component {...props} ref={ref} />;\n },\n )\n : CustomTreeItem,\n [LeafTreeItemComponent, TreeItemComponent],\n );\n\n return (\n <RichTreeView\n items={items}\n expandedItems={expandedItems}\n onExpandedItemsChange={(\n _event: React.SyntheticEvent | null,\n ids: string[],\n ) => setExpandedItems(ids)}\n slots={{ item: TreeItem }}\n slotProps={{\n item: {\n onRemove: handleRemoveTreeItem,\n } as Partial<CustomTreeItemProps>,\n }}\n sx={{\n ml: 1,\n mr: 1,\n \"& ul\": {\n paddingInlineStart: \"12px\",\n },\n }}\n itemChildrenIndentation={0}\n />\n );\n}\n\nexport function TreeViewWrapper({\n folders,\n selectedByFolder,\n activeViewIdByFolder,\n selectedCount,\n onRemove,\n}: TreeViewWrapperProps) {\n const folderTrees = useMemo(\n () =>\n folders.flatMap((folder) => {\n const folderSelectedIds = selectedByFolder.get(folder.id);\n if (!folderSelectedIds || folderSelectedIds.size === 0) {\n return [];\n }\n\n const activeView = resolveFolderView(folder, activeViewIdByFolder);\n const selectedRows = folder.rows.filter((row) =>\n folderSelectedIds.has(row.id),\n );\n\n return [\n {\n folderId: folder.id,\n items: attachFolderId(\n buildSelectedTree({\n folderId: folder.id,\n rootLabel: folder.label,\n selectedRows,\n groupingModel: activeView.groupingModel,\n leafField: activeView.leafField,\n }),\n folder.id,\n ),\n TreeItemComponent: folder.TreeItemComponent,\n LeafTreeItemComponent: folder.LeafTreeItemComponent,\n },\n ];\n }),\n [activeViewIdByFolder, folders, selectedByFolder],\n );\n\n return (\n <Paper\n sx={{\n height: 500,\n width: \"100%\",\n border: \"10px solid\",\n borderColor: \"grey.200\",\n boxSizing: \"border-box\",\n borderRadius: 2,\n display: \"flex\",\n flexDirection: \"column\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n py: 1,\n backgroundColor: \"grey.200\",\n flexShrink: 0,\n }}\n >\n <Avatar\n sx={{\n width: 30,\n height: 30,\n fontSize: 14,\n fontWeight: \"bold\",\n bgcolor: \"white\",\n color: \"text.primary\",\n }}\n >\n {selectedCount}\n </Avatar>\n <Typography fontWeight=\"bold\">Active Tracks</Typography>\n </Box>\n <Box\n sx={{\n flex: 1,\n overflow: \"auto\",\n }}\n >\n {folderTrees.map((folderTree) => (\n <FolderTree\n key={folderTree.folderId}\n items={folderTree.items}\n LeafTreeItemComponent={folderTree.LeafTreeItemComponent}\n TreeItemComponent={folderTree.TreeItemComponent}\n onRemove={onRemove}\n />\n ))}\n </Box>\n </Paper>\n );\n}\n","import { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { TrackStoreInstance } from \"@weng-lab/genomebrowser\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport {\n Box,\n Button,\n Dialog,\n DialogContent,\n DialogTitle,\n IconButton,\n Stack,\n} from \"@mui/material\";\nimport { useEffect, useState } from \"react\";\nimport { Assembly, FolderDefinition } from \"./Folders/types\";\nimport { DataGridWrapper } from \"./DataGrid/DataGridWrapper\";\nimport { ClearDialog } from \"./Dialogs/ClearDialog\";\nimport { LimitDialog } from \"./Dialogs/LimitDialog\";\nimport { ResetDialog } from \"./Dialogs/ResetDialog\";\nimport { Breadcrumb } from \"./FolderList/Breadcrumb\";\nimport { FolderList } from \"./FolderList/FolderList\";\nimport { diffManagedTracks } from \"./managedTracks\";\nimport { resolveFolderView } from \"./resolveFolderView\";\nimport type { TrackSelectTrackContext } from \"./trackContext\";\nimport { ExtendedTreeItemProps } from \"./types\";\nimport { TreeViewWrapper } from \"./TreeView/TreeViewWrapper\";\n\nexport type InitialSelectedIdsByAssembly = Partial<\n Record<Assembly, Record<string, string[]>>\n>;\n\nexport interface TrackSelectProps {\n assembly: Assembly;\n folders: FolderDefinition[];\n initialSelectedIds?: InitialSelectedIdsByAssembly;\n sessionStorageKey?: string;\n trackStore?: TrackStoreInstance;\n onCancel?: () => void;\n maxTracks?: number;\n trackContext?: TrackSelectTrackContext;\n open: boolean;\n onClose: () => void;\n title?: string;\n}\n\nconst DEFAULT_MAX_TRACKS = 30;\n\nconst DEFAULT_TITLE = \"Track Select\";\n\ntype ViewState = \"folder-list\" | \"folder-detail\";\n\nconst createEmptySelectedByFolder = (folders: FolderDefinition[]) => {\n return new Map(folders.map((folder) => [folder.id, new Set<string>()]));\n};\n\nconst cloneSelectedByFolder = (selectedByFolder: Map<string, Set<string>>) => {\n return new Map(\n Array.from(selectedByFolder, ([folderId, ids]) => [folderId, new Set(ids)]),\n );\n};\n\nconst normalizeSelectedByFolder = ({\n folders,\n selectedIdsByFolder,\n}: {\n folders: FolderDefinition[];\n selectedIdsByFolder?: Record<string, string[]>;\n}) => {\n const normalized = createEmptySelectedByFolder(folders);\n\n if (!selectedIdsByFolder) {\n return normalized;\n }\n\n folders.forEach((folder) => {\n const ids = selectedIdsByFolder[folder.id];\n if (!ids) {\n return;\n }\n\n normalized.set(\n folder.id,\n new Set(ids.filter((id) => id.startsWith(`${folder.id}/`))),\n );\n });\n\n return normalized;\n};\n\nconst loadSelectedByFolder = ({\n assembly,\n folders,\n initialSelectedIds,\n sessionStorageKey,\n}: {\n assembly: Assembly;\n folders: FolderDefinition[];\n initialSelectedIds?: InitialSelectedIdsByAssembly;\n sessionStorageKey?: string;\n}) => {\n const fallback = normalizeSelectedByFolder({\n folders,\n selectedIdsByFolder: initialSelectedIds?.[assembly],\n });\n\n if (!sessionStorageKey || typeof window === \"undefined\") {\n return fallback;\n }\n\n const storedValue = window.sessionStorage.getItem(sessionStorageKey);\n if (!storedValue) {\n return fallback;\n }\n\n try {\n const parsed = JSON.parse(storedValue) as Record<string, string[]>;\n return normalizeSelectedByFolder({\n folders,\n selectedIdsByFolder: parsed,\n });\n } catch {\n return fallback;\n }\n};\n\nconst saveSelectedByFolder = ({\n selectedByFolder,\n sessionStorageKey,\n}: {\n selectedByFolder: Map<string, Set<string>>;\n sessionStorageKey?: string;\n}) => {\n if (!sessionStorageKey || typeof window === \"undefined\") {\n return;\n }\n\n const serialized = Object.fromEntries(\n Array.from(selectedByFolder, ([folderId, ids]) => [\n folderId,\n Array.from(ids),\n ]),\n );\n window.sessionStorage.setItem(sessionStorageKey, JSON.stringify(serialized));\n};\n\nexport default function TrackSelect({\n assembly,\n folders,\n initialSelectedIds,\n sessionStorageKey,\n trackStore,\n onCancel,\n maxTracks,\n trackContext,\n open,\n onClose,\n title = DEFAULT_TITLE,\n}: TrackSelectProps) {\n const [limitDialogOpen, setLimitDialogOpen] = useState(false);\n const [clearDialogOpen, setClearDialogOpen] = useState(false);\n const [resetDialogOpen, setResetDialogOpen] = useState(false);\n const [currentView, setCurrentView] = useState<ViewState>(() =>\n folders.length > 1 ? \"folder-list\" : \"folder-detail\",\n );\n const [activeFolderId, setActiveFolderId] = useState(\n () => folders[0]?.id ?? \"\",\n );\n const [activeViewIdByFolder, setActiveViewIdByFolder] = useState(\n () =>\n new Map(\n folders.flatMap((folder) =>\n folder.views?.[0] ? [[folder.id, folder.views[0].id] as const] : [],\n ),\n ),\n );\n const [committedSelectedByFolder, setCommittedSelectedByFolder] = useState(\n () =>\n loadSelectedByFolder({\n assembly,\n folders,\n initialSelectedIds,\n sessionStorageKey,\n }),\n );\n const [selectedByFolder, setSelectedByFolder] = useState(() =>\n cloneSelectedByFolder(committedSelectedByFolder),\n );\n const maxTracksLimit = maxTracks ?? DEFAULT_MAX_TRACKS;\n\n useEffect(() => {\n setActiveFolderId((currentFolderId) => {\n if (folders.some((folder) => folder.id === currentFolderId)) {\n return currentFolderId;\n }\n\n return folders[0]?.id ?? \"\";\n });\n\n if (folders.length <= 1) {\n setCurrentView(\"folder-detail\");\n }\n\n setActiveViewIdByFolder((current) => {\n return new Map(\n folders.flatMap((folder) => {\n if (!folder.views?.length) {\n return [];\n }\n\n const activeViewId = current.get(folder.id);\n if (\n activeViewId &&\n folder.views.some((view) => view.id === activeViewId)\n ) {\n return [[folder.id, activeViewId] as const];\n }\n\n return [[folder.id, folder.views[0].id] as const];\n }),\n );\n });\n }, [folders]);\n\n useEffect(() => {\n const nextCommittedSelection = loadSelectedByFolder({\n assembly,\n folders,\n initialSelectedIds,\n sessionStorageKey,\n });\n setCommittedSelectedByFolder(nextCommittedSelection);\n setSelectedByFolder(cloneSelectedByFolder(nextCommittedSelection));\n }, [assembly, folders, initialSelectedIds, sessionStorageKey]);\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n setSelectedByFolder(cloneSelectedByFolder(committedSelectedByFolder));\n }, [committedSelectedByFolder, open]);\n\n useEffect(() => {\n if (!assembly || !trackStore) {\n return;\n }\n\n const { idsToRemove, tracksToAdd } = diffManagedTracks({\n assembly,\n currentTracks: trackStore.getState().tracks,\n folders,\n selectedByFolder: committedSelectedByFolder,\n trackContext,\n });\n\n const { insertTrack, removeTrack } = trackStore.getState();\n idsToRemove.forEach((id) => removeTrack(id));\n tracksToAdd.forEach((track) => insertTrack(track));\n }, [assembly, committedSelectedByFolder, folders, trackContext, trackStore]);\n\n const activeFolder =\n folders.find((folder) => folder.id === activeFolderId) ?? folders[0];\n const activeConfig = activeFolder\n ? resolveFolderView(activeFolder, activeViewIdByFolder)\n : undefined;\n const activeViewId = activeConfig?.id ?? \"\";\n const rows = activeFolder?.rows ?? [];\n const selectedIds = new Set(\n selectedByFolder.get(activeFolder?.id ?? \"\") ?? [],\n );\n let selectedCount = 0;\n selectedByFolder.forEach((ids) => {\n selectedCount += ids.size;\n });\n\n const handleFolderSelect = (folderId: string) => {\n setActiveFolderId(folderId);\n setCurrentView(\"folder-detail\");\n };\n\n const handleNavigateToRoot = () => {\n setCurrentView(\"folder-list\");\n };\n\n const handleCancel = () => {\n onCancel?.();\n onClose();\n };\n\n const ViewSelector = activeFolder?.ViewSelector;\n\n const confirmReset = () => {\n setResetDialogOpen(false);\n setSelectedByFolder(cloneSelectedByFolder(committedSelectedByFolder));\n };\n\n const confirmClear = () => {\n setClearDialogOpen(false);\n\n const nextSelectedByFolder = new Map(selectedByFolder);\n\n if (currentView === \"folder-detail\") {\n nextSelectedByFolder.set(activeFolderId, new Set<string>());\n } else {\n folders.forEach((folder) =>\n nextSelectedByFolder.set(folder.id, new Set<string>()),\n );\n }\n\n setSelectedByFolder(nextSelectedByFolder);\n };\n\n const handleActiveViewChange = (viewId: string) => {\n if (!activeFolder) {\n return;\n }\n\n setActiveViewIdByFolder((prev) => {\n const next = new Map(prev);\n next.set(activeFolder.id, viewId);\n return next;\n });\n };\n\n const handleSelectionChange = (ids: Set<string>) => {\n if (!activeFolder) {\n return;\n }\n\n const filteredIds = new Set(\n Array.from(ids).filter((id) =>\n activeFolder.rows.some((row) => row.id === id),\n ),\n );\n\n let nextTotal = filteredIds.size;\n selectedByFolder.forEach((folderIds, folderId) => {\n if (folderId !== activeFolder.id) {\n nextTotal += folderIds.size;\n }\n });\n\n if (nextTotal > maxTracksLimit) {\n setLimitDialogOpen(true);\n return;\n }\n\n const nextSelectedByFolder = new Map(selectedByFolder);\n nextSelectedByFolder.set(activeFolder.id, filteredIds);\n setSelectedByFolder(nextSelectedByFolder);\n };\n\n const handleRemoveTreeItem = (\n item: TreeViewBaseItem<ExtendedTreeItemProps>,\n ) => {\n const folderId = item.folderId;\n if (!folderId || !item.allExpAccessions?.length) {\n return;\n }\n\n const nextSelectedByFolder = new Map(selectedByFolder);\n const nextSet = new Set(\n nextSelectedByFolder.get(folderId) ?? new Set<string>(),\n );\n item.allExpAccessions.forEach((id) => nextSet.delete(id));\n nextSelectedByFolder.set(folderId, nextSet);\n setSelectedByFolder(nextSelectedByFolder);\n };\n\n const handleSubmit = () => {\n saveSelectedByFolder({ selectedByFolder, sessionStorageKey });\n setCommittedSelectedByFolder(cloneSelectedByFolder(selectedByFolder));\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={handleCancel} maxWidth=\"lg\" fullWidth>\n <DialogTitle\n sx={{\n bgcolor: \"primary.main\",\n color: \"primary.contrastText\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n fontWeight: \"bold\",\n }}\n >\n {title}\n <IconButton\n size=\"large\"\n onClick={handleCancel}\n sx={{ color: \"primary.contrastText\", p: 0 }}\n >\n <CloseIcon fontSize=\"large\" />\n </IconButton>\n </DialogTitle>\n <DialogContent sx={{ marginTop: \"5px\" }}>\n {!activeFolder || !activeConfig ? (\n <Box sx={{ p: 2 }}>No folders available.</Box>\n ) : (\n <Box sx={{ flex: 1, pt: 1 }}>\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n sx={{ mb: 2 }}\n >\n {folders.length > 1 ? (\n <Breadcrumb\n currentFolder={\n currentView === \"folder-detail\" ? activeFolder : null\n }\n onNavigateToRoot={handleNavigateToRoot}\n />\n ) : (\n <Box />\n )}\n {currentView === \"folder-detail\" &&\n ViewSelector &&\n activeFolder.views ? (\n <ViewSelector\n views={activeFolder.views}\n activeViewId={activeViewId}\n onChange={handleActiveViewChange}\n />\n ) : null}\n </Box>\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n spacing={2}\n sx={{ width: \"100%\" }}\n >\n <Box\n sx={{\n flex: { xs: \"none\", md: 3 },\n minWidth: 0,\n width: { xs: \"100%\", md: \"auto\" },\n }}\n >\n {currentView === \"folder-list\" ? (\n <FolderList\n folders={folders}\n onFolderSelect={handleFolderSelect}\n />\n ) : (\n <DataGridWrapper\n rows={rows}\n columns={activeConfig.columns}\n groupingModel={activeConfig.groupingModel}\n leafField={activeConfig.leafField}\n label={`${rows.length} Available ${activeFolder.label}`}\n selectedIds={selectedIds}\n onSelectionChange={handleSelectionChange}\n GroupingCellComponent={activeFolder.GroupingCellComponent}\n />\n )}\n </Box>\n <Box\n sx={{\n flex: { xs: \"none\", md: 2 },\n minWidth: 0,\n width: { xs: \"100%\", md: \"auto\" },\n }}\n >\n <TreeViewWrapper\n folders={folders}\n selectedByFolder={selectedByFolder}\n activeViewIdByFolder={activeViewIdByFolder}\n selectedCount={selectedCount}\n onRemove={handleRemoveTreeItem}\n />\n </Box>\n </Stack>\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mt: 2,\n gap: 1,\n }}\n >\n <Box sx={{ display: \"flex\", gap: 1 }}>\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"small\"\n onClick={() => setClearDialogOpen(true)}\n >\n Clear\n </Button>\n {Boolean(trackStore) ? (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"small\"\n onClick={() => setResetDialogOpen(true)}\n >\n Reset\n </Button>\n ) : null}\n </Box>\n <Box sx={{ display: \"flex\", gap: 1 }}>\n <Button variant=\"outlined\" size=\"small\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n onClick={handleSubmit}\n >\n Submit\n </Button>\n </Box>\n </Box>\n <LimitDialog\n open={limitDialogOpen}\n onClose={() => setLimitDialogOpen(false)}\n maxTracks={maxTracksLimit}\n />\n <ClearDialog\n open={clearDialogOpen}\n onClose={() => setClearDialogOpen(false)}\n onConfirm={confirmClear}\n folderLabel={activeFolder.label}\n clearAll={currentView === \"folder-list\"}\n />\n <ResetDialog\n open={resetDialogOpen}\n onClose={() => setResetDialogOpen(false)}\n onConfirm={confirmReset}\n />\n </Box>\n )}\n </DialogContent>\n </Dialog>\n );\n}\n","import { Box } from \"@mui/material\";\nimport type { Assembly } from \"../../types\";\n\nexport type { Assembly };\n\nexport const assayTypes = [\n \"cCRE\",\n \"DNase\",\n \"H3K4me3\",\n \"H3K27ac\",\n \"ATAC\",\n \"CTCF\",\n \"RNA-seq\",\n \"ChromHMM\",\n \"WGBS\",\n];\n\nexport const lifeStages = [\"Adult\", \"Embryonic\", \"N/A\"];\n\nexport const ontologyTypes = [\n \"Aggregate\",\n \"Adipose\",\n \"Adrenal gland\",\n \"Blood\",\n \"Blood vessel\",\n \"Bone\",\n \"Bone marrow\",\n \"Brain\",\n \"Breast\",\n \"Connective tissue\",\n \"Embryo\",\n \"Epithelium\",\n \"Esophagus\",\n \"Eye\",\n \"Fallopian Tube\",\n \"Gallbladder\",\n \"Heart\",\n \"Kidney\",\n \"Large Intestine\",\n \"Limb\",\n \"Liver\",\n \"Lung\",\n \"Lymphoid Tissue\",\n \"Muscle\",\n \"Mouth\",\n \"Nerve\",\n \"Nose\",\n \"Pancreas\",\n \"Parathyroid Gland\",\n \"Ovary\",\n \"Penis\",\n \"Placenta\",\n \"Prostate\",\n \"Skin\",\n \"Small Intestine\",\n \"Spinal Cord\",\n \"Spleen\",\n \"Stomach\",\n \"Testis\",\n \"Thymus\",\n \"Thyroid\",\n \"Urinary Bladder\",\n \"Uterus\",\n \"Vagina\",\n];\n\n/** Color mapping for assay types */\nexport const assayColorMap: { [key: string]: string } = {\n DNase: \"#06da93\",\n ATAC: \"#02c7b9\",\n H3K4me3: \"#ff2020\",\n ChromHMM: \"#0097a7\",\n H3K27ac: \"#fdc401\",\n CTCF: \"#01a6f1\",\n cCRE: \"#000000\",\n \"RNA-seq\": \"#00aa00\",\n WGBS: \"#648bd8\",\n};\n\n/**\n * Creates the assay icon for DataGrid and RichTreeView\n * @param type - assay type\n * @returns an icon of the assay's respective color\n */\nexport function AssayIcon(type: string) {\n const color = assayColorMap[type];\n return (\n <Box\n sx={{\n width: 12,\n height: 12,\n borderRadius: \"20%\",\n bgcolor: color,\n }}\n />\n );\n}\n\n/**\n * Mapping from JSON assay keys to display names.\n * This is the single source of truth for assay name formatting.\n */\nconst assayJsonToDisplay: Record<string, string> = {\n dnase: \"DNase\",\n atac: \"ATAC\",\n h3k4me3: \"H3K4me3\",\n h3k27ac: \"H3K27ac\",\n ctcf: \"CTCF\",\n chromhmm: \"ChromHMM\",\n ccre: \"cCRE\",\n rnaseq: \"RNA-seq\",\n wgbs: \"WGBS\",\n};\n\n/**\n * Convert JSON assay key to display name.\n * Used only during data loading to normalize assay names.\n */\nexport function formatAssayType(jsonKey: string): string {\n return assayJsonToDisplay[jsonKey.toLowerCase()] ?? jsonKey;\n}\n","import {\n GridColDef,\n GridRenderCellParams,\n GridGroupNode,\n useGridApiContext,\n} from \"@mui/x-data-grid-premium\";\nimport { Stack, capitalize } from \"@mui/material\";\nimport { AssayIcon, ontologyTypes, assayTypes, lifeStages } from \"./constants\";\nimport { BiosampleRowInfo, CollectionType } from \"./types\";\n\nconst collectionTypes: CollectionType[] = [\"Core\", \"Ancillary\", \"Partial\", \"NA\"];\n\nfunction CollectionCell(params: GridRenderCellParams<BiosampleRowInfo>) {\n const apiRef = useGridApiContext();\n\n if (params.rowNode.type !== \"group\") {\n return params.value ?? null;\n }\n\n const groupNode = params.rowNode as GridGroupNode;\n if (groupNode.groupingField !== \"displayName\") {\n return null;\n }\n\n const childIds = groupNode.children;\n if (!childIds || childIds.length === 0) {\n return null;\n }\n\n const firstChildRow = apiRef.current.getRow(\n childIds[0],\n ) as BiosampleRowInfo | null;\n\n return firstChildRow?.collection ?? null;\n}\n\nconst displayNameCol: GridColDef<BiosampleRowInfo> = {\n field: \"displayName\",\n headerName: \"Name\",\n valueFormatter: (value) => value && capitalize(value),\n maxWidth: 300,\n};\n\nconst sortedByAssayOntologyCol: GridColDef<BiosampleRowInfo> = {\n field: \"ontology\",\n headerName: \"Ontology\",\n type: \"singleSelect\",\n valueOptions: ontologyTypes,\n renderCell: (params) => {\n if (params.rowNode.type === \"group\") {\n if (params.value === undefined) {\n return null;\n }\n const val = params.value;\n return (\n <div>\n <b>{val}</b>\n </div>\n );\n }\n },\n};\n\nconst sortedByAssayAssayCol: GridColDef<BiosampleRowInfo> = {\n field: \"assay\",\n headerName: \"Assay\",\n valueOptions: assayTypes,\n renderCell: (params) => {\n if (params.rowNode.type === \"group\") {\n if (params.value === undefined) {\n return null;\n }\n const val = params.value;\n return (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n {AssayIcon(val)}\n <div>\n <b>{val}</b>\n </div>\n </Stack>\n );\n }\n },\n};\n\nconst defaultOntologyCol: GridColDef<BiosampleRowInfo> = {\n field: \"ontology\",\n headerName: \"Ontology\",\n type: \"singleSelect\",\n valueOptions: ontologyTypes,\n renderCell: (params) => {\n if (params.rowNode.type === \"group\") {\n if (params.value === undefined) {\n return null;\n }\n const val = params.value;\n return (\n <div>\n <b>{val}</b>\n </div>\n );\n }\n },\n};\n\nconst defaultAssayCol: GridColDef<BiosampleRowInfo> = {\n field: \"assay\",\n headerName: \"Assay\",\n valueOptions: assayTypes,\n renderCell: (params) => {\n if (params.value === undefined) {\n return null;\n }\n const val = params.value;\n return (\n <Stack direction=\"row\" spacing={2} alignItems=\"center\" sx={{ ml: 6 }}>\n {AssayIcon(val)}\n <div>{val}</div>\n </Stack>\n );\n },\n};\n\nconst sampleTypeCol: GridColDef<BiosampleRowInfo> = {\n field: \"sampleType\",\n headerName: \"Sample Type\",\n type: \"singleSelect\",\n valueOptions: ontologyTypes,\n valueFormatter: (value) => value && capitalize(value),\n};\n\nconst lifeStageCol: GridColDef<BiosampleRowInfo> = {\n field: \"lifeStage\",\n headerName: \"Life Stage\",\n type: \"singleSelect\",\n valueOptions: lifeStages,\n valueFormatter: (value) => value && capitalize(value),\n};\n\nconst collectionCol: GridColDef<BiosampleRowInfo> = {\n field: \"collection\",\n headerName: \"Collection\",\n type: \"singleSelect\",\n valueOptions: collectionTypes,\n width: 100,\n renderCell: (params) => <CollectionCell {...params} />,\n};\n\nconst experimentCol: GridColDef<BiosampleRowInfo> = {\n field: \"experimentAccession\",\n headerName: \"Experiment Accession\",\n};\n\nconst fileCol: GridColDef<BiosampleRowInfo> = {\n field: \"fileAccession\",\n headerName: \"File Accession\",\n};\n\nconst idCol: GridColDef<BiosampleRowInfo> = {\n field: \"id\",\n headerName: \"ID\",\n};\n\n/** Columns for sorted-by-assay view (assay as top-level grouping) */\nexport const sortedByAssayColumns: GridColDef<BiosampleRowInfo>[] = [\n displayNameCol,\n sortedByAssayOntologyCol,\n collectionCol,\n sampleTypeCol,\n lifeStageCol,\n sortedByAssayAssayCol,\n experimentCol,\n fileCol,\n idCol,\n];\n\n/** Default columns (ontology as top-level grouping) */\nexport const defaultColumns: GridColDef<BiosampleRowInfo>[] = [\n defaultAssayCol,\n collectionCol,\n sampleTypeCol,\n lifeStageCol,\n defaultOntologyCol,\n displayNameCol,\n experimentCol,\n fileCol,\n idCol,\n];\n\n/** Grouping model for sorted-by-assay view */\nexport const sortedByAssayGroupingModel = [\"assay\", \"ontology\"];\n\n/** Default grouping model (ontology-based) */\nexport const defaultGroupingModel = [\"ontology\", \"displayName\"];\n\n/** Leaf field for sorted-by-assay view */\nexport const sortedByAssayLeafField = \"displayName\";\n\n/** Default leaf field */\nexport const defaultLeafField = \"assay\";\n","import { ToggleButton, ToggleButtonGroup } from \"@mui/material\";\nimport { FolderView } from \"../../types\";\n\nexport interface BiosampleViewSelectorProps {\n views: FolderView[];\n activeViewId: string;\n onChange: (viewId: string) => void;\n}\n\nexport function BiosampleViewSelector({\n views,\n activeViewId,\n onChange,\n}: BiosampleViewSelectorProps) {\n return (\n <ToggleButtonGroup\n exclusive\n value={activeViewId}\n size=\"small\"\n onChange={(_event, viewId: string | null) => {\n if (viewId) {\n onChange(viewId);\n }\n }}\n >\n {views.map((view) => (\n <ToggleButton key={view.id} value={view.id}>\n {view.label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n );\n}\n","import { Stack, Tooltip, Box, IconButton } from \"@mui/material\";\nimport {\n GridRenderCellParams,\n useGridApiContext,\n GridGroupNode,\n} from \"@mui/x-data-grid-premium\";\nimport { assayTypes, AssayIcon } from \"./constants\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\n\n/**\n * Biosample-specific grouping cell that renders AssayIcon for assay groups/values.\n * Handles expand/collapse, truncation, and tooltips.\n */\nexport default function BiosampleGroupingCell(params: GridRenderCellParams) {\n const apiRef = useGridApiContext();\n const isGroup = params.rowNode.type === \"group\";\n const groupNode = params.rowNode as GridGroupNode;\n const isExpanded = isGroup ? groupNode.childrenExpanded : false;\n const groupingField = isGroup ? groupNode.groupingField : null;\n const depth = params.rowNode.depth ?? 0;\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n apiRef.current.setRowChildrenExpansion(params.id, !isExpanded);\n };\n\n // Render content based on grouping field\n const renderContent = () => {\n const value = String(params.value ?? \"\");\n\n // For assay groups, show the colored icon\n if (isGroup && groupingField === \"assay\") {\n return (\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n sx={{ flex: 1, overflow: \"hidden\" }}\n >\n {AssayIcon(value)}\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontWeight: \"bold\",\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n </Stack>\n );\n }\n\n // For other groups (ontology, displayName), show bold text\n if (isGroup) {\n return (\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n fontWeight: \"bold\",\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n );\n }\n\n // For leaf rows - check if it's an assay value\n const isAssayValue = assayTypes\n .map((a) => a.toLowerCase())\n .includes(value.toLowerCase());\n\n if (isAssayValue) {\n return (\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n sx={{ flex: 1, overflow: \"hidden\" }}\n >\n {AssayIcon(value)}\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n </Stack>\n );\n }\n\n return (\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n );\n };\n\n // Indent based on depth (2 units per level)\n const indentLevel = depth * 2;\n\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n ml: indentLevel,\n }}\n >\n {isGroup && (\n <IconButton size=\"small\" onClick={handleExpandClick} sx={{ mr: 0.5 }}>\n {isExpanded ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ChevronRightIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n {renderContent()}\n </Box>\n );\n}\n","import React from \"react\";\nimport { CustomTreeItem } from \"../../../TreeView/CustomTreeItem\";\nimport { CustomTreeItemProps } from \"../../../types\";\nimport { AssayIcon } from \"./constants\";\n\n/**\n * Biosample-specific TreeItem that renders AssayIcon for assay items.\n * Wraps the generic CustomTreeItem with the AssayIcon renderer.\n */\nexport const BiosampleTreeItem = React.forwardRef<\n HTMLLIElement,\n CustomTreeItemProps\n>(function BiosampleTreeItem(props, ref) {\n return <CustomTreeItem {...props} ref={ref} renderIcon={AssayIcon} />;\n});\n","import {\n BigBedConfig,\n BigWigConfig,\n DisplayMode,\n MethylCConfig,\n Rect,\n Track,\n TrackType,\n ValuedPoint,\n} from \"@weng-lab/genomebrowser\";\nimport type { FC } from \"react\";\nimport { CreateTrackOptions } from \"../../types\";\nimport { BiosampleRowInfo } from \"./types\";\n\nexport type BiosampleTrackContext = {\n onBiosampleFeatureClick?: (args: {\n trackId: string;\n row: BiosampleRowInfo;\n rect: Rect;\n }) => void;\n onBiosampleFeatureHover?: (args: {\n trackId: string;\n row: BiosampleRowInfo;\n rect: Rect;\n }) => void;\n biosampleFeatureTooltip?: FC<Rect>;\n biosampleSignalTooltip?: FC<ValuedPoint[]>;\n biosampleMethylTooltip?: FC<ValuedPoint[]>;\n};\n\nconst assayColors: Record<string, string> = {\n dnase: \"#06da93\",\n h3k4me3: \"#ff0000\",\n h3k27ac: \"#ffcd00\",\n ctcf: \"#00b0d0\",\n atac: \"#02c7b9\",\n rnaseq: \"#00aa00\",\n chromhmm: \"#00ff00\",\n ccre: \"#000000\",\n wgbs: \"#648bd8\",\n};\n\nconst defaultBigWig: Omit<BigWigConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigWig,\n height: 50,\n displayMode: DisplayMode.Full,\n titleSize: 12,\n};\n\nconst defaultBigBed: Omit<BigBedConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigBed,\n height: 20,\n displayMode: DisplayMode.Dense,\n titleSize: 12,\n};\n\nconst defaultMethylC: Omit<MethylCConfig, \"id\" | \"title\" | \"urls\"> = {\n trackType: TrackType.MethylC,\n height: 100,\n displayMode: DisplayMode.Split,\n titleSize: 12,\n color: \"#648bd8\",\n colors: {\n cpg: \"#648bd8\",\n chg: \"#ff944d\",\n chh: \"#ff00ff\",\n depth: \"#525252\",\n },\n};\n\nexport function createBiosampleTrack(\n row: BiosampleRowInfo,\n options: CreateTrackOptions,\n): Track {\n const assay = row.assay.toLowerCase();\n const color = assayColors[assay] ?? \"#000000\";\n const trackContext = options.trackContext;\n\n switch (assay) {\n case \"chromhmm\":\n case \"ccre\":\n return {\n ...defaultBigBed,\n id: row.id,\n url: row.url ?? \"\",\n title: row.displayName,\n color,\n onClick: trackContext?.onBiosampleFeatureClick\n ? (rect: Rect) =>\n trackContext.onBiosampleFeatureClick?.({\n trackId: row.id,\n row,\n rect,\n })\n : undefined,\n onHover: trackContext?.onBiosampleFeatureHover\n ? (rect: Rect) =>\n trackContext.onBiosampleFeatureHover?.({\n trackId: row.id,\n row,\n rect,\n })\n : undefined,\n tooltip: trackContext?.biosampleFeatureTooltip,\n };\n case \"wgbs\":\n return {\n ...defaultMethylC,\n id: row.id,\n title: row.displayName,\n maskCpgByCoverage: true,\n tooltip: trackContext?.biosampleMethylTooltip,\n urls: {\n plusStrand: {\n cpg: { url: row.cpgPlus ?? \"\" },\n chg: { url: \"\" },\n chh: { url: \"\" },\n depth: { url: row.coverage ?? \"\" },\n },\n minusStrand: {\n cpg: { url: row.cpgMinus ?? \"\" },\n chg: { url: \"\" },\n chh: { url: \"\" },\n depth: { url: row.coverage ?? \"\" },\n },\n },\n };\n default:\n return {\n ...defaultBigWig,\n id: row.id,\n url: row.url ?? \"\",\n title: row.displayName,\n color,\n tooltip: trackContext?.biosampleSignalTooltip,\n };\n }\n}\n","import { capitalize } from \"@mui/material\";\nimport { FolderDefinition } from \"../../types\";\nimport {\n BiosampleDataFile,\n BiosampleRowInfo,\n BiosampleTrackInfo,\n} from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n sortedByAssayColumns,\n sortedByAssayGroupingModel,\n sortedByAssayLeafField,\n} from \"./columns\";\nimport { formatAssayType } from \"./constants\";\nimport { BiosampleViewSelector } from \"./BiosampleViewSelector\";\nimport BiosampleGroupingCell from \"./BiosampleGroupingCell\";\nimport { BiosampleTreeItem } from \"./BiosampleTreeItem\";\nimport { createBiosampleTrack } from \"./toTrack\";\n\n/** Flatten a biosample track into one row per assay. */\nfunction flattenTrackIntoRows(\n folderId: string,\n track: BiosampleTrackInfo,\n): BiosampleRowInfo[] {\n const { ontology, lifeStage, sampleType, displayName, collection } = track;\n\n // Keep cCRE rows first so aggregate selections stay prominent in the UI.\n const sortedAssays = [...track.assays].sort((a, b) => {\n const aIsCcre = a.assay.toLowerCase() === \"ccre\";\n const bIsCcre = b.assay.toLowerCase() === \"ccre\";\n if (aIsCcre && !bIsCcre) return -1;\n if (!aIsCcre && bIsCcre) return 1;\n return 0;\n });\n\n return sortedAssays.map(\n ({\n id,\n assay,\n experimentAccession,\n fileAccession,\n url,\n cpgPlus,\n cpgMinus,\n coverage,\n }) => ({\n id: `${folderId}/${id}`,\n ontology: capitalize(ontology),\n lifeStage: capitalize(lifeStage),\n sampleType: capitalize(sampleType),\n displayName: capitalize(displayName),\n assay: formatAssayType(assay),\n experimentAccession,\n fileAccession,\n url,\n collection,\n cpgPlus,\n cpgMinus,\n coverage,\n }),\n );\n}\n\nfunction transformData(\n folderId: string,\n data: BiosampleDataFile,\n): BiosampleRowInfo[] {\n return data.tracks.flatMap((track) => flattenTrackIntoRows(folderId, track));\n}\n\nexport interface CreateBiosampleFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: BiosampleDataFile;\n}\n\n/**\n * Build a biosample folder with its data, tree builder, and track factory.\n */\nexport function createBiosampleFolder(\n options: CreateBiosampleFolderOptions,\n): FolderDefinition<BiosampleRowInfo> {\n const { id, label, description, data } = options;\n const rows = transformData(id, data);\n const views = [\n {\n id: \"default\",\n label: \"Tissue\",\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n },\n {\n id: \"by-assay\",\n label: \"Assay\",\n columns: sortedByAssayColumns,\n groupingModel: sortedByAssayGroupingModel,\n leafField: sortedByAssayLeafField,\n },\n ];\n\n return {\n id,\n label,\n description,\n rows,\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n createTrack: createBiosampleTrack,\n views,\n ViewSelector: BiosampleViewSelector,\n GroupingCellComponent: BiosampleGroupingCell,\n TreeItemComponent: BiosampleTreeItem,\n };\n}\n","import { createBiosampleFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/humans_fixed.json\";\nimport { BiosampleDataFile } from \"./shared/types\";\n\n/**\n * Human biosamples folder configuration for GRCh38 assembly.\n *\n * Contains epigenomic data (DNase, ATAC, H3K4me3, H3K27ac, CTCF, cCRE, RNA-seq, ChromHMM)\n * from human tissue samples, primary cells, cell lines, and organoids.\n */\nexport const humanBiosamplesFolder = createBiosampleFolder({\n id: \"human-biosamples\",\n label: \"Human Biosamples\",\n description:\n \"Epigenomic data from human tissue samples, primary cells, cell lines, and organoids.\",\n data: humanData as BiosampleDataFile,\n});\n","import { createBiosampleFolder } from \"./shared/createFolder\";\nimport mouseData from \"./data/mouse.json\";\nimport { BiosampleDataFile } from \"./shared/types\";\n\n/**\n * Mouse biosamples folder configuration for mm10 assembly.\n *\n * Contains epigenomic data (DNase, ATAC, H3K4me3, H3K27ac, CTCF, cCRE, RNA-seq, ChromHMM)\n * from mouse tissue samples, primary cells, cell lines, and organoids.\n */\nexport const mouseBiosamplesFolder = createBiosampleFolder({\n id: \"mouse-biosamples\",\n label: \"Mouse Biosamples\",\n description:\n \"Epigenomic data from mouse tissue samples, primary cells, cell lines, and organoids.\",\n data: mouseData as BiosampleDataFile,\n});\n","import { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { GeneRowInfo } from \"./types\";\n\n/**\n * Format versions array as comma-separated string with \"v\" prefix\n * e.g., [29, 40] -> \"v29, v40\"\n */\nfunction formatVersions(versions: number[]): string {\n return versions.map((v) => `v${v}`).join(\", \");\n}\n\nconst displayNameCol: GridColDef<GeneRowInfo> = {\n field: \"displayName\",\n headerName: \"Name\",\n flex: 1,\n minWidth: 200,\n};\n\nconst versionsCol: GridColDef<GeneRowInfo> = {\n field: \"versions\",\n headerName: \"Versions\",\n width: 150,\n valueFormatter: (value: number[]) => value && formatVersions(value),\n};\n\n/**\n * Default columns for genes DataGrid (flat list, no grouping)\n */\nexport const defaultColumns: GridColDef<GeneRowInfo>[] = [\n displayNameCol,\n versionsCol,\n];\n\n/**\n * No grouping for genes - flat list\n */\nexport const defaultGroupingModel: string[] = [];\n\n/**\n * Leaf field - the raw track ID (without folder prefix) used as the tree view leaf label\n */\nexport const defaultLeafField = \"trackId\";\n","import {\n DisplayMode,\n Track,\n TrackType,\n Transcript,\n TranscriptConfig,\n} from \"@weng-lab/genomebrowser\";\nimport type { FC } from \"react\";\nimport { CreateTrackOptions } from \"../../types\";\nimport { GeneRowInfo } from \"./types\";\n\nexport type GeneTrackContext = {\n onGeneClick?: (args: {\n trackId: string;\n row: GeneRowInfo;\n transcript: Transcript;\n }) => void;\n onGeneHover?: (args: {\n trackId: string;\n row: GeneRowInfo;\n transcript: Transcript;\n }) => void;\n geneTooltip?: FC<Transcript>;\n};\n\nconst defaultTranscript: Omit<TranscriptConfig, \"id\" | \"assembly\" | \"version\"> =\n {\n title: \"GENCODE Genes\",\n trackType: TrackType.Transcript,\n displayMode: DisplayMode.Squish,\n height: 100,\n color: \"#0c184a\",\n canonicalColor: \"#100e98\",\n highlightColor: \"#3c69e8\",\n titleSize: 12,\n };\n\nexport function createGeneTrack(\n row: GeneRowInfo,\n options: CreateTrackOptions,\n): Track {\n const trackContext = options.trackContext;\n\n return {\n ...defaultTranscript,\n id: row.id,\n assembly: options.assembly,\n version: row.versions[row.versions.length - 1],\n onClick: trackContext?.onGeneClick\n ? (transcript: Transcript) =>\n trackContext.onGeneClick?.({ trackId: row.id, row, transcript })\n : undefined,\n onHover: trackContext?.onGeneHover\n ? (transcript: Transcript) =>\n trackContext.onGeneHover?.({ trackId: row.id, row, transcript })\n : undefined,\n tooltip: trackContext?.geneTooltip,\n };\n}\n","import { FolderDefinition } from \"../../types\";\nimport { GeneDataFile, GeneRowInfo, GeneTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { createGeneTrack } from \"./toTrack\";\n\n/** Genes map 1:1 from JSON track entries to table rows. */\nfunction trackToRow(folderId: string, track: GeneTrackInfo): GeneRowInfo {\n return {\n id: `${folderId}/${track.id}`,\n trackId: track.id,\n displayName: track.displayName,\n versions: track.versions,\n };\n}\n\nfunction transformData(folderId: string, data: GeneDataFile): GeneRowInfo[] {\n return data.map((track) => trackToRow(folderId, track));\n}\n\nexport interface CreateGeneFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: GeneDataFile;\n}\n\n/** Build a gene folder with its row lookup, tree, and track factory. */\nexport function createGeneFolder(\n options: CreateGeneFolderOptions,\n): FolderDefinition<GeneRowInfo> {\n const { id, label, description, data } = options;\n const rows = transformData(id, data);\n\n return {\n id,\n label,\n description,\n rows,\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n createTrack: createGeneTrack,\n };\n}\n","import { createGeneFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/human.json\";\nimport { GeneDataFile } from \"./shared/types\";\n\n/**\n * Gene annotations folder for human (GRCh38 assembly)\n *\n * Contains gene annotation tracks like GENCODE that users can\n * select to display in the genome browser.\n */\nexport const humanGenesFolder = createGeneFolder({\n id: \"human-genes\",\n label: \"Genes\",\n description: \"Gene annotation tracks\",\n data: humanData as GeneDataFile,\n});\n","import { createGeneFolder } from \"./shared/createFolder\";\nimport mouseData from \"./data/mouse.json\";\nimport { GeneDataFile } from \"./shared/types\";\n\n/**\n * Gene annotations folder for human (GRCh38 assembly)\n *\n * Contains gene annotation tracks like GENCODE that users can\n * select to display in the genome browser.\n */\nexport const mouseGenesFolder = createGeneFolder({\n id: \"mouse-genes\",\n label: \"Genes\",\n description: \"Gene annotation tracks\",\n data: mouseData as GeneDataFile,\n});\n","import { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { OtherTrackInfo } from \"./types\";\n\nconst nameCol: GridColDef<OtherTrackInfo> = {\n field: \"name\",\n headerName: \"Name\",\n flex: 1,\n minWidth: 200,\n};\n\nconst descriptionCol: GridColDef<OtherTrackInfo> = {\n field: \"description\",\n headerName: \"Description\",\n flex: 2,\n minWidth: 300,\n};\n\nexport const defaultColumns: GridColDef<OtherTrackInfo>[] = [\n nameCol,\n descriptionCol,\n];\n\nexport const defaultGroupingModel: string[] = [];\n\nexport const defaultLeafField = \"id\";\n","import { jsxs as h, jsx as e } from \"react/jsx-runtime\";\nconst _0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 10 20 C 5 -5 95 -10 100 35 L 100 100 L 80 100 L 80 90 C 90 105 10 105 0 80 C 0 45 40 40 60 45 L 80 50 C 95 30 40 5 10 35\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { fill: \"#ffffff\", d: \"M 77 70 C 70 90 30 90 22 80 C 10 50 80 60 77 70\" })\n] }), A0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 20 0 L 0 0 L 0 100 L 20 100 L 20 80 C 10 110 90 110 100 70 L 100 60 C 90 10 10 10 20 40 L 20 40 L 20 0\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 79 60 C 80 95 20 95 20 65 C 20 30 80 30 79 65\", fill: \"#ffffff\" })\n] }), N0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 80 0 L 100 0 L 100 100 L 80 100 L 80 80 C 90 110 10 110 0 70 L 0 60 C 10 10 90 10 80 40 L 80 40 L 80 0\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 79 60 C 80 95 20 95 20 65 C 20 30 80 30 79 65\", fill: \"#ffffff\" })\n] }), w0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 25 50 L 100 50 C 85 -17 15 -17 0 50 C 0 75 25 100 50 100 L 95 100 L 95 80 L 50 80 Q 25 70 25 50\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 33 37 L 68 37 C 58 10 42 10 33 37\", fill: \"#ffffff\" })\n] }), E0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 95 32 C 80 -17 20 -5 20 37 L 7 37 L 7 50 L 20 50 L 20 100 L 45 100 L 45 50 L 57 50 L 57 37 L 45 37 C 45 10 70 10 75 32 L 95 32\",\n ...o\n }\n), S0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 100 15 L 100 0 L 80 0 L 80 15 C 85 -8 15 -8 0 25 C 2 75 80 75 80 50 L 75 65 C 65 85 45 85 10 75 L 10 90 C 25 110 85 110 100 75 L 100 25\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 67 30 C 70 10 25 10 27 30 C 25 50 70 50 67 30\", fill: \"#ffffff\" })\n] }), v0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 100 L 20 100 L 20 80 C 20 40 80 40 80 80 L 80 100 L 100 100 L 100 50 C 80 20 20 20 20 45 L 20 0 L 0 0\",\n ...o\n }\n), O0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"rect\",\n {\n ...o,\n x: 40,\n y: 20,\n width: 20,\n height: 80\n }\n ),\n /* @__PURE__ */ e(\n \"rect\",\n {\n ...o,\n x: 40,\n y: 0,\n width: 20,\n height: 15\n }\n )\n] }), T0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 60 C 0 115 100 115 100 60 L 100 20 L 80 20 L 80 60 C 80 90 20 90 25 60\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 0 60 L 100 20\", ...o })\n] }), z0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 20 0 L 20 60 L 75 30 L 100 30 L 50 65 L 100 100 L 75 100 L 27 80 L 20 85 L 20 100 L 0 100 L 0 0\",\n ...o\n }\n), R0 = (o) => /* @__PURE__ */ e(\n \"rect\",\n {\n x: 40,\n y: 0,\n width: 20,\n height: 100,\n ...o\n }\n), B0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 100 L 20 100 L 20 60 C 20 20 40 20 40 50 L 40 100 L 60 100 L 60 50 C 60 20 80 20 80 50 L 80 100 L 100 100 L 100 50 C 100 -10 40 -10 50 50 C 50 -5 20 -5 20 20 L 20 0 L 0 0\",\n ...o\n }\n), F0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 100 L 20 100 L 20 60 C 20 0 80 0 80 50 L 80 100 L 100 100 L 100 25 C 80 -10 20 -10 20 20 L 20 0 L 0 0\",\n ...o\n }\n), G0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 20 100 L 0 100 L 0 0 L 20 0 L 20 20 C 10 -10 90 -10 100 30 L 100 40 C 90 90 10 90 20 60 L 20 60 L 20 100\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 79 40 C 80 5 20 5 20 35 C 20 70 80 70 79 35\", fill: \"#ffffff\" })\n] }), I0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 80 100 L 100 100 L 100 0 L 80 0 L 80 20 C 90 -10 10 -10 0 30 L 0 40 C 10 90 90 90 80 60 L 80 60 L 80 100\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"path\", { d: \"M 79 40 C 80 5 20 5 20 35 C 20 70 80 70 79 35\", fill: \"#ffffff\" })\n] }), Y0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 100 L 20 100 L 20 60 C 20 0 80 0 80 50 L 100 50 L 100 25 C 80 -10 20 -10 20 20 L 20 0 L 0 0\",\n ...o\n }\n), D0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 95 68 C 80 117 20 105 20 63 L 20 47 L 7 47 L 7 27 L 20 27 L 20 0 L 45 0 L 45 27 L 57 27 L 57 47 L 45 47 L 45 63 C 45 90 70 90 75 68 L 95 68\",\n ...o\n }\n), H0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 0 60 C 0 111 100 111 100 60 L 100 0 L 75 0 L 75 60 C 80 90 20 90 25 60 L 25 0 L 0 0\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\n \"rect\",\n {\n ...o,\n x: 75,\n y: 0,\n height: 100,\n width: 25\n }\n )\n] }), b0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 0 0 L 25 0 L 50 36 L 75 0 L 100 0 L 40 100 L 12 100 L 37 55 L 0 0\",\n ...o\n }\n);\nfunction j0(o) {\n return /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 80 L 0 100 L 100 100 L 100 80 L 68 80 L 68 0 L 32 0 L 0 15 L 0 40 L 32 25 L 32 80 L 0 80\"\n }\n );\n}\nconst Q0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 25 C 20 -8 80 -8 100 25 C 100 90 30 50 20 85 L 100 85 L 100 100 L 0 100 L 0 70 C 10 40 75 70 75 25 C 70 10 30 10 25 28 L 0 25\"\n }\n), U0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 35 L 0 25 C 20 -8 80 -8 100 25 C 100 30 100 50 75 50 C 100 50 100 70 100 75 C 80 108 20 108 0 75 L 0 65 L 25 65 L 25 75 C 30 88 70 88 75 75 C 75 68 75 65 47 58 L 47 42 C 75 32 75 35 75 25 C 70 12 30 12 25 25 L 25 35\"\n }\n), W0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 50 0 L 0 50 L 0 70 L 50 70 L 50 100 L 75 100 L 75 70 L 100 70 L 100 50 L 75 50 L 75 0 L 50 15 L 50 50 L 30 50 L 75 0 L 50 0\"\n }\n), X0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 95 20 L 100 0 L 10 0 L 0 60 L 25 60 C 30 45 90 50 75 77 C 66 87 30 90 26 72 L 0 80 C 20 110 80 110 100 70 C 100 25 10 25 25 40 L 30 20 L 95 20\"\n }\n), K0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 50 0 C -40 70 10 100 50 100 C 90 100 100 80 100 55 C 80 30 30 30 35 50 L 30 60 C 80 50 80 85 50 80 C 10 80 48 10 90 0 L 50 0\"\n }\n), V0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 0 L 100 0 L 50 100 L 20 100 L 60 20 L 0 20 L 0 0\"\n }\n), Z0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 35 L 0 25 C 20 -8 80 -8 100 25 C 100 30 100 50 75 50 C 100 50 100 70 100 75 C 80 108 20 108 0 75 L 0 65 L 25 65 L 25 75 C 30 88 70 88 75 75 C 75 68 75 65 47 58 L 47 42 C 75 32 75 35 75 25 C 70 12 30 12 25 25 L 25 35\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 100 35 L 100 25 C 80 -8 20 -8 0 25 C 0 30 0 50 25 50 C 0 50 0 70 0 75 C 20 108 80 108 100 75 L 100 65 L 75 65 L 75 75 C 70 88 30 88 25 75 C 25 68 25 65 53 58 L 53 42 C 25 32 25 35 25 25 C 30 12 70 12 75 25 L 75 35\"\n }\n )\n] }), J0 = (o) => /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 50 100 C 140 30 90 0 50 0 C 10 0 0 20 0 45 C 20 70 70 70 65 50 L 70 40 C 20 50 20 15 50 20 C 90 20 52 90 10 100 L 50 100\"\n }\n), z = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"path\",\n {\n ...o,\n d: \"M 0 100 L 33 0 L 66 0 L 100 100 L 75 100 L 66 75 L 33 75 L 25 100 L 0 100\"\n }\n ),\n /* @__PURE__ */ e(\"path\", { fill: \"#ffffff\", d: \"M 41 55 L 50 25 L 58 55 L 41 55\" })\n] }), q0 = `M 0 0 L 80 0 C 105 0 105 50 80 50\n C 105 50 105 100 80 100 L 00 100\n L 0 0`, n0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\"path\", { ...o, d: q0 }),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 20 15 L 70 15 C 80 15 80 35 70 35 L 20 35 L 20 15\",\n fill: \"#ffffff\"\n }\n ),\n /* @__PURE__ */ e(\n \"path\",\n {\n d: \"M 20 65 L 70 65 C 80 65 80 85 70 85 L 20 85 L 20 65\",\n fill: \"#ffffff\"\n }\n )\n] }), $0 = `M 100 28 C 100 -13 0 -13 0 50\n C 0 113 100 113 100 72 L 75 72\n C 75 90 30 90 30 50 C 30 10 75 10 75 28\n L 100 28`, v = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: $0 }), P0 = `M 0 0 L 60 0 C 110 0 110 100 60 100\n L 0 100 L 0 0`, oo = `M 20 15 L 40 15 C 85 15 85 85 40 85\n L 20 85 L 20 15`, r0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\"path\", { ...o, d: P0 }),\n /* @__PURE__ */ e(\"path\", { fill: \"#ffffff\", d: oo })\n] }), eo = `M 0 0 L 100 0 L 100 20 L 20 20 L 20 40\n L 90 40 L 90 60 L 20 60 L 20 80 L 100 80\n L 100 100 L 0 100 L 0 0`, c0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: eo }), to = `M 0 0 L 100 0 L 100 20 L 20 20 L 20 40\n L 80 40 L 80 60 L 20 60 L 20 100 L 0 100\n L 0 0`, L0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: to }), no = `M 100 28 C 100 -13 0 -13 0 50 C 0 113 100 113 100 72\n L 100 48 L 55 48 L 55 72 L 75 72 C 75 90 30 90 30 50\n C 30 10 75 5 75 28 L 100 28`, R = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: no }), ro = `M 0 0 L 20 0 L 20 40 L 80 40 L 80 0\n L 100 0 L 100 100 L 80 100 L 80 60\n L 20 60 L 20 100 L 0 100 L 0 0`, l0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: ro }), co = \"M 40 0 L 60 0 L 60 100 L 40 100 L 40 0\", g0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: co }), Lo = `M 0 60 C 0 111 100 111 100 60\n L 100 0 L 75 0 L 75 60\n C 80 90 20 90 25 60`, lo = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: Lo }), go = `M 0 0 L 20 0 L 20 40 L 75 0 L 100 0\n L 50 50 L 100 100 L 75 100 L 30 65\n L 20 75 L 20 100 L 0 100 L 0 0`, h0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: go }), ho = `M 0 0 L 0 100 L 100 100 L 100 80\n L 20 80 L 20 0 L 0 0`, s0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: ho }), so = `M 0 0 L 20 0 L 50 35 L 80 0 L 100 0 L 100 100\n L 80 100 L 80 30 L 50 65 L 20 30 L 20 100\n L 0 100 L 0 0`, i0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: so }), io = `M 0 100 L 0 0 L 20 0 L 80 75 L 80 0\n L 100 0 L 100 100 L 80 100 L 20 25 L 20 100 L 0 100`, f0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: io }), Y = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"circle\",\n {\n cx: \"50\",\n cy: \"50\",\n r: \"50\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"circle\", { cx: \"50\", cy: \"50\", r: \"32\", fill: \"#ffffff\" })\n] }), fo = `M 0 0 L 80 0 C 105 0 105 50 80 50\n L 20 50 L 20 100 L 0 100 L 0 0`, a0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\"path\", { ...o, d: fo }),\n /* @__PURE__ */ e(\n \"path\",\n {\n fill: \"#ffffff\",\n d: \"M 20 15 L 70 15 C 80 15 80 35 70 35 L 20 35 L 20 15\"\n }\n )\n] }), ao = \"M 85 100 L 55 70 L 70 55 L 100 85 L 85 100\", m0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\n \"circle\",\n {\n cx: \"50\",\n cy: \"50\",\n r: \"50\",\n ...o\n }\n ),\n /* @__PURE__ */ e(\"circle\", { cx: \"50\", cy: \"50\", r: \"32\", fill: \"#ffffff\" }),\n /* @__PURE__ */ e(\"path\", { d: ao, ...o })\n] }), mo = `M 0 0 L 80 0 C 105 0 105 50 80 50\n C 100 50 100 70 100 70 L 100 100 L 80 100\n L 80 80 C 80 80 80 60 50 60 L 20 60\n L 20 100 L 0 100 L 0 0`, d0 = (o) => /* @__PURE__ */ h(\"g\", { children: [\n /* @__PURE__ */ e(\"path\", { ...o, d: mo }),\n /* @__PURE__ */ e(\n \"path\",\n {\n fill: \"#ffffff\",\n d: \"M 20 15 L 70 15 C 80 15 80 35 70 35 L 20 35 L 20 15\"\n }\n )\n] }), po = \"M92 26 A43 20 0 1 0 43 46 A42 23 0 1 1 9 68\", H = ({ fill: o, fillOpacity: n }) => /* @__PURE__ */ e(\n \"path\",\n {\n fill: \"#ffffff\",\n stroke: o,\n strokeOpacity: n,\n strokeWidth: \"18\",\n d: po\n }\n), xo = `M 0 0 L 0 20 L 35 20 L 35 100\n L 65 100 L 65 20 L 100 20\n L 100 0 L 0 0`, W = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: xo }), Co = `M 0 0 L 0 60 C 0 111 100 111 100 60\n L 100 0 L 75 0 L 75 60\n C 80 90 20 90 25 60 L 25 0 L 0 0`, X = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: Co }), Mo = `M 0 0 L 20 0 L 50 80 L 80 0\n L 100 0 L 60 100 L 40 100 L 0 0`, b = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: Mo }), uo = `M 0 0 L 20 0 L 30 70 L 50 30 L 70 70 L 80 0\n L 100 0 L 90 100 L 70 100 L 50 65 L 30 100\n L 10 100 L 0 0`, j = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: uo }), yo = `M 0 0 L 20 0 L 50 40 L 80 0 L 100 0 L 70 50\n L 100 100 L 80 100 L 50 60 L 20 100 L 0 100\n L 30 50 L 0 0`, o0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: yo }), ko = `M 0 0 L 20 0 L 50 45 L 80 0 L 100 0\n L 60 60 L 60 100 L 40 100 L 40 60 L 0 0`, p0 = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: ko }), _o = `M 0 0 L 100 0 L 100 20 L 35 80 L 100 80\n L 100 100 L 0 100 L 0 80 L 65 20 L 0 20\n L 0 0`, Q = (o) => /* @__PURE__ */ e(\"path\", { ...o, d: _o });\nfunction Ao({ xscale: o, yscale: n, inverted: r, children: t }) {\n const c = n * (r ? -1 : 1);\n return /* @__PURE__ */ e(\"g\", { transform: \"scale(\" + o + \",\" + c + \")\", children: t });\n}\nconst No = ({\n height: o,\n width: n,\n indices: r,\n alphabet: t,\n lv: c,\n transform: L,\n alpha: g,\n inverted: d,\n onSymbolMouseOver: i,\n onSymbolMouseOut: f,\n onSymbolClick: s\n}) => {\n let x = o, C = n / 100;\n g = g || 1;\n let M = r.map((l) => {\n if (!t[l] || !t[l].component || c[l] === 0)\n return null;\n x -= c[l] * 100;\n const p = d ? x + c[l] * 100 : x;\n let u = C * 0.8 / t[l].component.length;\n return t[l].component.map((_, a) => /* @__PURE__ */ e(\n \"g\",\n {\n transform: \"translate(\" + (a * n * 0.8 / t[l].component.length + n * 0.1) + \",\" + p + \")\",\n onMouseOver: () => {\n i && i({\n component: [t[l].component[a]],\n regex: [t[l].regex[a]],\n color: t[l].color && [t[l].color[a]]\n });\n },\n onMouseOut: f && (() => f({\n component: [t[l].component[a]],\n regex: [t[l].regex[a]],\n color: t[l].color && [t[l].color[a]]\n })),\n onClick: s && (() => s({\n component: [t[l].component[a]],\n regex: [t[l].regex[a]],\n color: t[l].color && [t[l].color[a]]\n })),\n children: /* @__PURE__ */ e(Ao, { xscale: u, yscale: c[l], inverted: d || !1, children: /* @__PURE__ */ e(\n _,\n {\n fill: t[l].color && t[l].color[a] || \"#000000\",\n fillOpacity: g,\n ...t[l]\n }\n ) })\n },\n l + \"_\" + a\n ));\n });\n return /* @__PURE__ */ e(\"g\", { transform: L, children: M });\n}, wo = (o, n) => (r) => n[0] + (n[1] - n[0]) * ((r - o[0]) / (o[1] - o[0])), x0 = ({\n minrange: o,\n maxrange: n,\n xstart: r,\n width: t,\n height: c,\n xaxis_y: L,\n numberofgridlines: g,\n stroke: d\n}) => {\n const i = wo([o, n], [r, t]), f = n - o, s = L + c, x = Math.ceil(f) / g, C = Math.ceil(f / x), M = Array.from(Array(C).keys());\n return /* @__PURE__ */ h(\"g\", { stroke: d || \"#000000\", children: [\n M.map((l) => {\n const p = o + x * l;\n return /* @__PURE__ */ e(\"line\", { x1: i(p), x2: i(p), y1: L, y2: s }, l);\n }),\n /* @__PURE__ */ e(\"line\", { x1: i(n), x2: i(n), y1: L, y2: s }),\n \";\"\n ] });\n}, jo = \"INFORMATION_CONTENT\", D = \"FREQUENCY\", e0 = [\n { component: [z], regex: [\"A\"], color: [\"red\"] },\n { component: [n0], regex: [\"B\"], color: [\"maroon\"] },\n { component: [v], regex: [\"C\"], color: [\"blue\"] },\n { component: [r0], regex: [\"D\"], color: [\"green\"] },\n { component: [c0], regex: [\"E\"], color: [\"olive\"] },\n { component: [L0], regex: [\"F\"], color: [\"navy\"] },\n { component: [R], regex: [\"G\"], color: [\"orange\"] },\n { component: [l0], regex: [\"H\"], color: [\"teal\"] },\n { component: [g0], regex: [\"I\"], color: [\"cadetblue\"] },\n { component: [lo], regex: [\"J\"], color: [\"lavender\"] },\n { component: [h0], regex: [\"K\"], color: [\"chocolate\"] },\n { component: [s0], regex: [\"L\"], color: [\"coral\"] },\n { component: [i0], regex: [\"M\"], color: [\"darkolivegreen\"] },\n { component: [f0], regex: [\"N\"], color: [\"darkorange\"] },\n { component: [Y], regex: [\"O\"], color: [\"gold\"] },\n { component: [a0], regex: [\"P\"], color: [\"darkorchid\"] },\n { component: [m0], regex: [\"Q\"], color: [\"darkslateblue\"] },\n { component: [d0], regex: [\"R\"], color: [\"firebrick\"] },\n { component: [H], regex: [\"S\"], color: [\"darkslategrey\"] },\n { component: [W], regex: [\"T\"], color: [\"#228b22\"] },\n { component: [X], regex: [\"U\"], color: [\"seagreen\"] },\n { component: [b], regex: [\"V\"], color: [\"indigo\"] },\n { component: [j], regex: [\"W\"], color: [\"mediumseagreen\"] },\n { component: [o0], regex: [\"X\"], color: [\"black\"] },\n { component: [p0], regex: [\"Y\"], color: [\"palevioletred\"] },\n { component: [Q], regex: [\"Z\"], color: [\"peru\"] },\n { component: [_0], regex: [\"a\"], color: [\"red\"] },\n { component: [A0], regex: [\"b\"], color: [\"maroon\"] },\n { component: [v], regex: [\"c\"], color: [\"purple\"] },\n { component: [N0], regex: [\"d\"], color: [\"green\"] },\n { component: [w0], regex: [\"e\"], color: [\"olive\"] },\n { component: [E0], regex: [\"f\"], color: [\"navy\"] },\n { component: [S0], regex: [\"g\"], color: [\"orange\"] },\n { component: [v0], regex: [\"h\"], color: [\"teal\"] },\n { component: [O0], regex: [\"i\"], color: [\"cadetblue\"] },\n { component: [T0], regex: [\"j\"], color: [\"lavender\"] },\n { component: [z0], regex: [\"k\"], color: [\"chocolate\"] },\n { component: [R0], regex: [\"l\"], color: [\"coral\"] },\n { component: [B0], regex: [\"m\"], color: [\"darkolivegreen\"] },\n { component: [F0], regex: [\"n\"], color: [\"darkorange\"] },\n { component: [Y], regex: [\"o\"], color: [\"gold\"] },\n { component: [G0], regex: [\"p\"], color: [\"darkorchid\"] },\n { component: [I0], regex: [\"q\"], color: [\"darkslateblue\"] },\n { component: [Y0], regex: [\"r\"], color: [\"firebrick\"] },\n { component: [H], regex: [\"s\"], color: [\"darkslategrey\"] },\n { component: [D0], regex: [\"t\"], color: [\"#228b22\"] },\n { component: [H0], regex: [\"u\"], color: [\"seagreen\"] },\n { component: [b], regex: [\"v\"], color: [\"indigo\"] },\n { component: [j], regex: [\"w\"], color: [\"mediumseagreen\"] },\n { component: [o0], regex: [\"x\"], color: [\"black\"] },\n { component: [b0], regex: [\"y\"], color: [\"palevioletred\"] },\n { component: [Q], regex: [\"z\"], color: [\"peru\"] },\n { component: [Y], regex: [\"0\"], color: [\"indianred\"] },\n { component: [j0], regex: [\"1\"], color: [\"red\"] },\n { component: [Q0], regex: [\"2\"], color: [\"green\"] },\n { component: [U0], regex: [\"3\"], color: [\"purple\"] },\n { component: [W0], regex: [\"4\"], color: [\"navy\"] },\n { component: [X0], regex: [\"5\"], color: [\"teal\"] },\n { component: [K0], regex: [\"6\"], color: [\"gold\"] },\n { component: [V0], regex: [\"7\"], color: [\"olive\"] },\n { component: [Z0], regex: [\"8\"], color: [\"slate\"] },\n { component: [J0], regex: [\"9\"], color: [\"firebrick\"] }\n], C0 = (o, n) => {\n let r = (\"\" + o).length;\n for (let t = o + 1; t < o + n; ++t)\n (\"\" + t).length > r && (r = (\"\" + t).length);\n return r;\n}, t0 = (() => {\n let o = {};\n return e0.forEach((n, r) => {\n n.regex.forEach((t) => {\n o[t] = e0[r];\n });\n }), o;\n})(), M0 = (o) => o.map((n) => {\n if (n.regex.length === 1)\n return Object.assign({}, n, {\n component: t0[n.regex[0]].component\n });\n const r = \"#000000\";\n let t = Object.assign({}, n, { component: [], color: [] });\n for (let c = 0; c < t.regex.length; ++c)\n t.component.push(t0[t.regex[c]].component[0]), t.color.push(n.color && n.color[c] || r);\n return t;\n}), Eo = (o) => (n, r) => {\n let t = 0, c = r || 0;\n return n.map(\n (L, g) => t += L === 0 ? 0 : L * Math.log2(L / (o[g] || 0.01))\n ), n.map((L) => {\n const g = L * (t - c);\n return g <= 0 ? 0 : g;\n });\n}, So = (o) => o.map((r, t) => t).sort((r, t) => o[r] < o[t] ? -1 : o[r] === o[t] ? 0 : 1), vo = (o) => o.map((r, t) => t).sort((r, t) => o[r] < o[t] ? 1 : o[r] === o[t] ? 0 : -1), K = (o) => {\n let n = [];\n for (let r = 0; r < Math.floor(o); r++)\n n.push(r);\n return n;\n}, Oo = (o) => {\n let n = 0;\n return o.filter((r) => r > 0).forEach((r) => {\n n += r;\n }), n;\n}, To = (o) => {\n let n = 0;\n return o.filter((r) => r < 0).forEach((r) => {\n n += r;\n }), n;\n}, u0 = ({\n n: o,\n transform: n,\n glyphWidth: r,\n startPos: t\n}) => {\n const c = K(o);\n return /* @__PURE__ */ e(\"g\", { transform: n, children: /* @__PURE__ */ e(\"g\", { transform: \"rotate(-90)\", children: c.map((L) => /* @__PURE__ */ e(\n \"text\",\n {\n x: \"0\",\n y: r * (L + 0.66),\n fontSize: \"18\",\n textAnchor: \"end\",\n children: L + (t || 0)\n },\n L\n )) }) });\n}, zo = (o) => {\n const n = K(o.bits + 1), r = o.zeroPoint || 1;\n return /* @__PURE__ */ h(\"g\", { transform: o.transform, children: [\n /* @__PURE__ */ e(\n \"rect\",\n {\n height: o.height * r,\n width: 4,\n x: o.width + 1,\n y: 0,\n fill: \"#000000\"\n }\n ),\n n.map((t) => /* @__PURE__ */ h(\n \"g\",\n {\n transform: \"translate(0,\" + (o.height * r - Math.floor(t * (o.height * r) / o.bits)) + \")\",\n children: [\n /* @__PURE__ */ e(\"text\", { x: o.width - 15, textAnchor: \"end\", y: \"4\", fontSize: \"18\", children: t }),\n /* @__PURE__ */ e(\n \"rect\",\n {\n x: o.width - 10,\n width: \"15\",\n height: \"4\",\n y: \"-2\",\n fill: \"#000000\"\n }\n )\n ]\n },\n t\n )),\n /* @__PURE__ */ e(\"g\", { transform: \"rotate(-90)\", children: /* @__PURE__ */ e(\n \"text\",\n {\n y: \"20\",\n x: -(o.height * r) / 2,\n textAnchor: \"middle\",\n fontSize: \"18\",\n children: \"bits\"\n }\n ) })\n ] });\n}, Ro = (o) => {\n const n = K(o.ticks + 1).map((r) => r / o.ticks);\n return /* @__PURE__ */ h(\"g\", { transform: o.transform, children: [\n /* @__PURE__ */ e(\n \"rect\",\n {\n height: o.height,\n width: 4,\n x: o.width + 1,\n y: \"0\",\n fill: \"#000000\"\n }\n ),\n n.map((r) => /* @__PURE__ */ h(\n \"g\",\n {\n transform: \"translate(0,\" + (o.height - Math.floor(r * o.height)) + \")\",\n children: [\n /* @__PURE__ */ e(\"text\", { x: o.width - 10, textAnchor: \"end\", y: \"4\", fontSize: \"18\", children: (r + \"\").substring(0, 4) }),\n /* @__PURE__ */ e(\n \"rect\",\n {\n x: o.width - 5,\n width: \"10\",\n height: \"4\",\n y: \"-2\",\n fill: \"#000000\"\n }\n )\n ]\n },\n r\n )),\n /* @__PURE__ */ e(\"g\", { transform: \"rotate(-90)\", children: /* @__PURE__ */ e(\"text\", { y: \"15\", x: -o.height / 2, textAnchor: \"middle\", fontSize: \"18\", children: \"frequency\" }) })\n ] });\n}, Bo = ({\n transform: o,\n min: n,\n max: r,\n width: t,\n height: c\n}) => {\n const L = [n, 0, r];\n return /* @__PURE__ */ h(\"g\", { transform: o, children: [\n /* @__PURE__ */ e(\n \"rect\",\n {\n height: (c - (n < 0 ? n : 0) / r * c) / 2,\n width: 4,\n x: t + 1,\n y: \"0\",\n fill: \"#000000\"\n }\n ),\n L.map((g) => /* @__PURE__ */ h(\n \"g\",\n {\n transform: \"translate(0,\" + (c - g / r * c) / 2 + \")\",\n children: [\n /* @__PURE__ */ e(\"text\", { x: t - 10, textAnchor: \"end\", y: \"4\", fontSize: \"18\", children: (g + \"\").substring(0, 4) }),\n /* @__PURE__ */ e(\"rect\", { x: t - 5, width: \"10\", height: \"4\", y: \"-2\", fill: \"#000000\" })\n ]\n },\n g\n )),\n /* @__PURE__ */ e(\"g\", { transform: \"rotate(-90)\", children: /* @__PURE__ */ e(\n \"text\",\n {\n y: \"15\",\n x: -((c - (n < 0 ? n : 0) / r * c) / 2) / 2,\n textAnchor: \"middle\",\n fontSize: \"18\",\n children: \"frequency\"\n }\n ) })\n ] });\n}, U = (o, n, r, t) => (c, L, g, d, i, f) => {\n const s = f ? vo(c) : So(c), { onSymbolMouseOver: x, onSymbolMouseOut: C, onSymbolClick: M } = d;\n return /* @__PURE__ */ e(\n No,\n {\n indices: s,\n alphabet: g,\n alpha: r,\n onSymbolMouseOver: (l) => x && x(l),\n onSymbolClick: (l) => M && M(l),\n onSymbolMouseOut: (l) => C && C(l),\n lv: c,\n transform: i,\n width: o,\n height: n,\n inverted: t\n },\n L\n );\n}, Fo = ({\n values: o,\n glyphWidth: n,\n stackHeight: r,\n alphabet: t,\n onSymbolMouseOver: c,\n onSymbolMouseOut: L,\n onSymbolClick: g\n}) => {\n const d = U(n, r);\n for (const f in t)\n if (!t[f].component) {\n t = M0(t);\n break;\n }\n return o.map(\n (f, s) => d(\n f,\n s,\n t,\n { onSymbolMouseOver: c, onSymbolMouseOut: L, onSymbolClick: g },\n \"translate(\" + n * s + \",0)\"\n )\n );\n}, y0 = (o, n, r) => {\n const t = [], c = Math.max(...r.map((L) => L.length));\n for (let L = 0; L < c; ++L)\n t.push(o.map((g) => 0));\n return r.forEach((L) => {\n for (let g = 0; g < L.length; ++g)\n n[L[g]] !== void 0 && ++t[g][n[L[g]]];\n }), {\n count: r.length,\n pfm: t\n };\n}, Go = (o, n) => {\n const r = {}, t = [];\n return o.forEach((c, L) => {\n c.regex.forEach((g) => {\n r[g] = L;\n });\n }), n.split(`\n`).forEach((c) => {\n c[0] === \">\" ? t.push(\"\") : t[t.length - 1] += c.trim();\n }), y0(o, r, t);\n}, Io = (o, n) => {\n const r = {};\n return o.forEach((t, c) => {\n t.regex.forEach((L) => {\n r[L] = c;\n });\n }), y0(\n o,\n r,\n n.split(`\n`).map((t) => t.trim())\n );\n}, V = ({\n ppm: o,\n pfm: n,\n values: r,\n fasta: t,\n mode: c,\n height: L,\n width: g,\n alphabet: d,\n glyphWidth: i,\n scale: f,\n startPos: s,\n showGridLines: x,\n backgroundFrequencies: C,\n constantPseudocount: M,\n smallSampleCorrectionOff: l,\n yAxisMax: p,\n onSymbolMouseOver: u,\n onSymbolMouseOut: _,\n onSymbolClick: a,\n noFastaNames: B,\n countUnaligned: O,\n svgRef: k\n}) => {\n let y = null;\n const A = (n || t) && !M && !O ? !l : !1, Z = A ? 0 : (M || 0) / d.length;\n if (!o && !n && t) {\n const m = (B ? Io : Go)(\n d,\n t.toUpperCase()\n );\n n = m.pfm, y = m.count || 1;\n }\n const J = A && n && n.map(\n (m) => m.reduce(\n (N, S, I) => I === void 0 ? N : S + N,\n 0\n )\n ).map(\n (m) => m === 0 ? 0 : (d.length - 1) / (2 * Math.log(2) * m)\n );\n if (!o && n && (o = n.map((m) => {\n const N = (y && O ? y : m.reduce((S, I) => S + I, 0) + Z * d.length) || 1;\n return m.map((S) => (S + Z) / N);\n })), !o || o && (o.length === 0 || o[0].length === 0))\n return /* @__PURE__ */ e(\"div\", {});\n let F = o[0].length;\n C || (C = o[0].map((m) => 1 / F));\n let E = r || (c !== D ? o.map(\n (m, N) => Eo(C)(m, J ? J[N] : void 0)\n ) : o.map(\n (m) => m.map((N) => N * Math.log2(F))\n ));\n const q = c === D ? [Math.log2(F)] : C.map((m) => Math.log2(1 / (m || 0.01))), T = p || Math.max(...q), $ = Math.min(...q), k0 = $ < 0 ? T / (T - $) : 1;\n s = s && !isNaN(parseFloat(s.toString())) && isFinite(s) ? s : 1;\n let w = 100 * T;\n i = w / 6 * (i || 1);\n let G = E.length * i + 80, P = w + 18 * (C0(s, E.length) + 1);\n return f && (G > P ? g = f : L = f), /* @__PURE__ */ h(\n \"svg\",\n {\n width: g,\n height: L,\n viewBox: \"0 0 \" + G + \" \" + P,\n ref: k,\n children: [\n x && /* @__PURE__ */ e(\n x0,\n {\n minrange: s,\n maxrange: s + o.length,\n xstart: 70,\n width: G,\n height: w,\n xaxis_y: 10,\n numberofgridlines: 10 * E.length\n }\n ),\n /* @__PURE__ */ e(\n u0,\n {\n transform: \"translate(80,\" + (w + 20) + \")\",\n n: E.length,\n glyphWidth: i,\n startPos: s\n }\n ),\n c === D ? /* @__PURE__ */ e(\n Ro,\n {\n transform: \"translate(0,10)\",\n width: 65,\n height: w,\n ticks: 2\n }\n ) : /* @__PURE__ */ e(\n zo,\n {\n transform: \"translate(0,10)\",\n width: 65,\n height: w,\n bits: T,\n zeroPoint: k0\n }\n ),\n /* @__PURE__ */ e(\"g\", { transform: \"translate(80,10)\", children: /* @__PURE__ */ e(\n Fo,\n {\n values: E,\n glyphWidth: i,\n stackHeight: w,\n alphabet: d,\n onSymbolMouseOver: u,\n onSymbolMouseOut: _,\n onSymbolClick: a\n }\n ) })\n ]\n }\n );\n}, Qo = ({\n values: o,\n height: n,\n width: r,\n alphabet: t,\n scale: c,\n startPos: L,\n negativealpha: g,\n showGridLines: d,\n inverted: i,\n onSymbolMouseOver: f,\n onSymbolMouseOut: s,\n onSymbolClick: x\n}) => {\n if (o.length === 0 || o[0].length === 0)\n return /* @__PURE__ */ e(\"div\", {});\n for (const k in t)\n if (!t[k].component) {\n t = M0(t);\n break;\n }\n L = L ?? 1, g = g < 0 ? 0 : g, g = g > 255 ? 255 : g;\n let C = o.map(Oo), M = o.map((k) => -To(k)), l = Math.max(...C, ...M), p = 200, u = p / 6, _ = o.length * u + 80, a = p + 18 * (C0(L, o.length) + 1), B = U(u, p / 2.05), O = U(\n u,\n -p / 2.05,\n g / 255,\n i\n );\n return c && (_ > a ? r = c : n = c), /* @__PURE__ */ h(\n \"svg\",\n {\n width: r,\n height: n,\n viewBox: \"0 0 \" + _ + \" \" + a,\n children: [\n d && /* @__PURE__ */ e(\n x0,\n {\n minrange: L,\n maxrange: L + o.length,\n xstart: 70,\n width: _,\n height: p,\n xaxis_y: 10,\n numberofgridlines: 10 * o.length\n }\n ),\n /* @__PURE__ */ e(\n u0,\n {\n transform: \"translate(80,\" + (p + 20) + \")\",\n n: o.length,\n glyphWidth: u,\n startPos: L\n }\n ),\n /* @__PURE__ */ e(\n Bo,\n {\n transform: \"translate(0,10)\",\n width: 65,\n height: p,\n min: -l,\n max: l\n }\n ),\n /* @__PURE__ */ e(\n \"line\",\n {\n style: {\n fill: \"none\",\n stroke: \"#000000\",\n strokeWidth: 2,\n strokeLinecap: \"butt\",\n strokeLinejoin: \"miter\",\n strokeOpacity: 1,\n strokeMiterlimit: 4,\n strokeDasharray: \"0.53,1.59\",\n strokeDashoffset: 0\n },\n transform: \"translate(80,\" + (11 + p / 2) + \")\",\n x1: 0,\n x2: _ - 80\n }\n ),\n /* @__PURE__ */ h(\"g\", { transform: \"translate(80,10)\", children: [\n o.map(\n (k, y) => B(\n k.map((A) => A > 0 ? A / l : 0),\n y,\n t,\n { onSymbolMouseOver: f, onSymbolMouseOut: s, onSymbolClick: x },\n \"translate(\" + u * y + \",0)\",\n !1\n )\n ),\n o.map(\n (k, y) => O(\n k.map((A) => A < 0 ? A / l : 0),\n y,\n t,\n { onSymbolMouseOver: f, onSymbolMouseOut: s, onSymbolClick: x },\n \"translate(\" + u * y + \",\" + p + \")\",\n !0\n )\n )\n ] })\n ]\n }\n );\n}, Yo = [\n { component: [z], regex: [\"A\"], color: [\"red\"] },\n { component: [v], regex: [\"C\"], color: [\"blue\"] },\n { component: [R], regex: [\"G\"], color: [\"orange\"] },\n { component: [W], regex: [\"T\"], color: [\"#228b22\"] }\n];\nfunction Uo(o) {\n return /* @__PURE__ */ e(V, { ...o, alphabet: Yo });\n}\nconst Do = [\n { component: [z], regex: [\"A\"], color: [\"black\"] },\n { component: [n0], regex: [\"B\"], color: [\"#bb8800\"] },\n { component: [v], regex: [\"C\"], color: [\"#008811\"] },\n { component: [r0], regex: [\"D\"], color: [\"#ff0000\"] },\n { component: [c0], regex: [\"E\"], color: [\"#ff0022\"] },\n { component: [L0], regex: [\"F\"], color: [\"#333333\"] },\n { component: [R], regex: [\"G\"], color: [\"#007700\"] },\n { component: [l0], regex: [\"H\"], color: [\"#220099\"] },\n { component: [g0], regex: [\"I\"], color: [\"#111111\"] },\n { component: [h0], regex: [\"K\"], color: [\"#002222\"] },\n { component: [s0], regex: [\"L\"], color: [\"#002222\"] },\n { component: [i0], regex: [\"M\"], color: [\"#220022\"] },\n { component: [f0], regex: [\"N\"], color: [\"#009911\"] },\n { component: [a0], regex: [\"P\"], color: [\"#080808\"] },\n { component: [m0], regex: [\"Q\"], color: [\"#00aa00\"] },\n { component: [d0], regex: [\"R\"], color: [\"#0022aa\"] },\n { component: [H], regex: [\"S\"], color: [\"#008f00\"] },\n { component: [W], regex: [\"T\"], color: [\"#006600\"] },\n { component: [X], regex: [\"U\"], color: [\"seagreen\"] },\n { component: [b], regex: [\"V\"], color: [\"#222200\"] },\n { component: [j], regex: [\"W\"], color: [\"#080808\"] },\n { component: [p0], regex: [\"Y\"], color: [\"#00a800\"] },\n { component: [Q], regex: [\"Z\"], color: [\"#aaaa00\"] }\n], Wo = (o) => /* @__PURE__ */ e(V, { ...o, alphabet: Do }), Ho = [\n { component: [z], regex: [\"A\"], color: [\"red\"] },\n { component: [v], regex: [\"C\"], color: [\"blue\"] },\n { component: [R], regex: [\"G\"], color: [\"orange\"] },\n { component: [X], regex: [\"U\"], color: [\"seagreen\"] }\n], Xo = (o) => /* @__PURE__ */ e(V, { ...o, alphabet: Ho });\nexport {\n z as A,\n n0 as B,\n v as C,\n e0 as CompleteAlphabet,\n r0 as D,\n Yo as DNAAlphabet,\n Uo as DNALogo,\n c0 as E,\n L0 as F,\n D as FREQUENCY,\n R as G,\n Ao as Glyph,\n No as GlyphStack,\n l0 as H,\n g0 as I,\n jo as INFORMATION_CONTENT,\n lo as J,\n h0 as K,\n s0 as L,\n V as Logo,\n Qo as LogoWithNegatives,\n i0 as M,\n f0 as N,\n j0 as N1,\n Q0 as N2,\n U0 as N3,\n W0 as N4,\n X0 as N5,\n K0 as N6,\n V0 as N7,\n Z0 as N8,\n J0 as N9,\n Y as O,\n a0 as P,\n Do as ProteinAlphabet,\n Wo as ProteinLogo,\n m0 as Q,\n d0 as R,\n Ho as RNAAlphabet,\n Xo as RNALogo,\n Fo as RawLogo,\n H as S,\n W as T,\n X as U,\n b as V,\n j as W,\n o0 as X,\n u0 as XAxis,\n p0 as Y,\n zo as YAxis,\n Ro as YAxisFrequency,\n Bo as YAxisWithNegatives,\n x0 as YGridlines,\n Q as Z,\n _0 as a,\n A0 as b,\n N0 as d,\n w0 as e,\n E0 as f,\n S0 as g,\n v0 as h,\n O0 as i,\n T0 as j,\n z0 as k,\n R0 as l,\n B0 as m,\n F0 as n,\n G0 as p,\n I0 as q,\n Y0 as r,\n D0 as t,\n H0 as u,\n b0 as y\n};\n//# sourceMappingURL=logo-test.es.js.map\n","import {\n ClipPath,\n CustomTrackConfig,\n CustomTrackProps,\n DisplayMode,\n fetchBigBedUrl,\n Rect,\n renderSquishBigBedData,\n TrackType,\n useBrowserStore,\n useInteraction,\n useRowHeight,\n useXTransform,\n Vibrant,\n useTrackStore,\n} from \"@weng-lab/genomebrowser\";\nimport { DNALogo } from \"logo-test\";\nimport { useMemo, useState } from \"react\";\nimport motifData from \"./green-motifs.json\";\n\n// --- TF Peak BigBed Parser ---\n\ninterface TfPeakBigBedData {\n chr: string;\n start: number;\n end: number;\n name?: string;\n score?: number;\n color?: string;\n tfName?: string;\n expRatio?: string;\n cCREId?: string;\n experimentId?: string;\n expSupport?: Record<string, Record<string, string>>;\n}\n\nfunction parseTfPeakBigBed(\n chrom: string,\n startBase: number,\n endBase: number,\n rest: string,\n): TfPeakBigBedData {\n const entry: TfPeakBigBedData = {\n chr: chrom,\n start: startBase,\n end: endBase,\n };\n const tokens = rest.split(\"\\t\");\n if (tokens.length > 0) entry.name = tokens[0];\n if (tokens.length > 1) entry.score = parseFloat(tokens[1]);\n // tokens[2] = strand, tokens[3] = thickStart, tokens[4] = thickEnd\n if (tokens.length > 5 && tokens[5] !== \".\" && tokens[5] !== \"0\") {\n entry.color = tokens[5].includes(\",\")\n ? tokens[5].startsWith(\"rgb\")\n ? tokens[5]\n : \"rgb(\" + tokens[5] + \")\"\n : tokens[5];\n }\n // tokens[6] = blockCount, tokens[7] = blockSizes, tokens[8] = blockStarts\n if (tokens.length > 9) entry.tfName = tokens[9];\n if (tokens.length > 10) entry.expRatio = tokens[10];\n if (tokens.length > 11) entry.cCREId = tokens[11];\n if (tokens.length > 12) entry.experimentId = tokens[12];\n if (tokens.length > 13) {\n try {\n entry.expSupport = JSON.parse(tokens[13]);\n } catch {\n // leave undefined if JSON is malformed\n }\n }\n return entry;\n}\n\n// --- Types ---\n\ntype OverlayData = {\n primary: TfPeakBigBedData[];\n overlay: Rect[];\n};\n\ntype OverlayInteractionRect = Rect & {\n chr?: string;\n pwm?: number[][];\n tfName?: string;\n expRatio?: string;\n cCREId?: string;\n experimentId?: string;\n expSupport?: Record<string, Record<string, string>>;\n};\n\n// The config type — extra fields go directly on the config\ntype OverlayBigBedConfig = CustomTrackConfig<OverlayInteractionRect> & {\n primaryUrl: string;\n overlayUrl: string;\n baseColor?: string;\n overlayColor?: string;\n filter?: string[];\n};\n\n// --- Helpers ---\n\nfunction nameKey(name?: string) {\n if (!name) return \"\";\n return name.split(/[-_]/)[0].trim().toLowerCase();\n}\n\nfunction buildOverlayIndex(rects: Rect[]) {\n return rects.reduce<Record<string, Rect[]>>((acc, rect) => {\n const key = nameKey(rect.name);\n if (!key) return acc;\n (acc[key] ??= []).push(rect);\n return acc;\n }, {});\n}\n\nfunction intervalsOverlap(\n aStart: number,\n aEnd: number,\n bStart: number,\n bEnd: number,\n) {\n return aStart <= bEnd && bStart <= aEnd;\n}\n\nfunction scoreColor(score?: number) {\n const t = Math.min(Math.max(score ?? 0, 0), 1000) / 1000;\n const r = Math.round(0xe3 + (0x00 - 0xe3) * t);\n const g = Math.round(0xe3 + (0x00 - 0xe3) * t);\n const b = Math.round(0xe3 + (0x00 - 0xe3) * t);\n return `#${r.toString(16).padStart(2, \"0\")}${g.toString(16).padStart(2, \"0\")}${b.toString(16).padStart(2, \"0\")}`;\n}\n\n// --- Motif data lookup ---\n\ntype MotifEntry = { trimmed_ppm: number[][] };\nconst motifLookup = motifData as Record<string, MotifEntry>;\n\nfunction lookupPwm(name?: string): number[][] | undefined {\n const key = nameKey(name)?.toUpperCase();\n if (!key) return undefined;\n const entry = motifLookup[key];\n return entry?.trimmed_ppm;\n}\n\n// --- Tooltip ---\n\nfunction tfDisplayName(name?: string): string {\n return nameKey(name)?.toUpperCase() || name || \"Unknown\";\n}\n\nfunction TooltipRow({\n label,\n value,\n y,\n}: {\n label: string;\n value: string;\n y: number;\n}) {\n return (\n <g transform={`translate(0, ${y})`}>\n <text x={8} y={0} fontSize={10} fill=\"#888\" dominantBaseline=\"hanging\">\n {label}\n </text>\n <text x={100} y={0} fontSize={10} fill=\"#333\" dominantBaseline=\"hanging\">\n {value}\n </text>\n </g>\n );\n}\n\nfunction TfPeaksTooltip(rect: OverlayInteractionRect) {\n const pwm = rect.pwm;\n const label = tfDisplayName(rect.name);\n const totalWidth = 340;\n const pad = 8;\n const lineH = 14;\n const titleH = 18;\n\n // Build metadata rows (single-value rows)\n const metaRows: { label: string; value: string }[] = [];\n if (rect.score != null)\n metaRows.push({ label: \"Score\", value: `${rect.score}` });\n metaRows.push({\n label: \"Position\",\n value: `${rect.chr ? rect.chr + \":\" : \"\"}${rect.start.toLocaleString()}-${rect.end.toLocaleString()}`,\n });\n\n // Multi-value rows: split comma-separated cCREs, group 4 per row, cap at 5\n const allCCREItems = rect.cCREId\n ? rect.cCREId\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean)\n : [];\n const maxCCREs = 5;\n const cCREItems = allCCREItems.slice(0, maxCCREs);\n const hiddenCCREs = Math.max(0, allCCREItems.length - maxCCREs);\n const cCRERows: string[][] = [];\n for (let i = 0; i < cCREItems.length; i += 4) {\n cCRERows.push(cCREItems.slice(i, i + 4));\n }\n\n // Extract unique sorted biosamples from expSupport\n const allBiosamples: string[] = [];\n if (rect.expSupport) {\n const seen = new Set<string>();\n for (const cellLine of Object.keys(rect.expSupport)) {\n if (!seen.has(cellLine)) {\n seen.add(cellLine);\n allBiosamples.push(cellLine);\n }\n }\n allBiosamples.sort((a, b) => a.localeCompare(b));\n }\n const maxBiosamples = 12;\n const biosampleItems = allBiosamples.slice(0, maxBiosamples);\n const hiddenBiosamples = Math.max(0, allBiosamples.length - maxBiosamples);\n const biosampleText = biosampleItems.join(\", \");\n const biosampleMoreText =\n hiddenBiosamples > 0 ? ` ...and ${hiddenBiosamples} more` : \"\";\n const biosampleCharsPerLine = Math.floor((totalWidth - 2 * pad) / 5.2);\n const biosampleContentLines = Math.max(\n 1,\n Math.ceil(\n (biosampleText.length + biosampleMoreText.length) / biosampleCharsPerLine,\n ),\n );\n\n // Layout: compute y offsets upfront\n const hasLogo = pwm && pwm.length > 0;\n\n const logoHeight = hasLogo ? 80 : 0;\n const logoSectionH = hasLogo ? logoHeight + 4 : 0;\n const metaSectionH = metaRows.length * lineH;\n\n // cCRE section: label row + one row per group of 4 + optional \"+N more\" row\n const cCREGap = cCRERows.length > 0 ? 8 : 0;\n const cCREHeaderH = cCRERows.length > 0 ? lineH : 0;\n const cCREMoreH = hiddenCCREs > 0 ? lineH : 0;\n const cCRESectionH = cCRERows.length * lineH + cCREMoreH;\n\n // Biosamples section\n const biosampleGap = biosampleContentLines > 0 ? 8 : 0;\n const biosampleHeaderH = biosampleContentLines > 0 ? lineH : 0;\n const biosampleSectionH = biosampleContentLines * lineH;\n\n const titleY = pad;\n const logoY = titleY + titleH;\n const metaY = logoY + logoSectionH;\n const cCREY = metaY + metaSectionH + cCREGap;\n const cCREDataY = cCREY + cCREHeaderH;\n const biosampleY = cCREDataY + cCRESectionH + biosampleGap;\n const biosampleDataY = biosampleY + biosampleHeaderH;\n const totalHeight = biosampleDataY + biosampleSectionH + pad;\n\n return (\n <g>\n <rect\n width={totalWidth}\n height={totalHeight}\n fill=\"white\"\n rx={3}\n style={{ filter: \"drop-shadow(0px 0px 5px rgba(0,0,0,0.3))\" }}\n />\n\n {/* Title */}\n <text x={pad} y={titleY + 12} fontSize={12} fontWeight=\"bold\" fill=\"#333\">\n {label}\n </text>\n\n {/* Logo */}\n {hasLogo && (\n <g transform={`translate(${pad}, ${logoY})`}>\n <DNALogo\n ppm={pwm!}\n mode=\"INFORMATION_CONTENT\"\n width={totalWidth - 2 * pad}\n height={logoHeight}\n />\n </g>\n )}\n\n {/* Metadata rows */}\n {metaRows.map((row, i) => (\n <TooltipRow\n key={row.label}\n label={row.label}\n value={row.value}\n y={metaY + i * lineH}\n />\n ))}\n\n {/* Overlapping cCREs */}\n {cCRERows.length > 0 && (\n <g>\n <line\n x1={pad}\n x2={totalWidth - pad}\n y1={cCREY - 4}\n y2={cCREY - 4}\n stroke=\"#ddd\"\n />\n <text\n x={pad}\n y={cCREY + 2}\n fontSize={9}\n fontWeight=\"bold\"\n fill=\"#666\"\n dominantBaseline=\"hanging\"\n >\n Overlapping cCREs\n </text>\n {cCRERows.map((group, i) => (\n <text\n key={i}\n x={pad}\n y={cCREDataY + i * lineH + 2}\n fontSize={9}\n fill=\"#333\"\n dominantBaseline=\"hanging\"\n >\n {group.join(\", \")}\n </text>\n ))}\n {hiddenCCREs > 0 && (\n <text\n x={pad}\n y={cCREDataY + cCRERows.length * lineH + 2}\n fontSize={9}\n fill=\"#aaa\"\n dominantBaseline=\"hanging\"\n >\n +{hiddenCCREs} more...\n </text>\n )}\n </g>\n )}\n\n {/* Biosamples */}\n {biosampleContentLines > 0 && (\n <g>\n <line\n x1={pad}\n x2={totalWidth - pad}\n y1={biosampleY - 4}\n y2={biosampleY - 4}\n stroke=\"#ddd\"\n />\n <text\n x={pad}\n y={biosampleY + 2}\n fontSize={9}\n fontWeight=\"bold\"\n fill=\"#666\"\n dominantBaseline=\"hanging\"\n >\n Biosamples\n </text>\n <foreignObject\n x={pad}\n y={biosampleDataY}\n width={totalWidth - 2 * pad}\n height={biosampleSectionH}\n >\n <div\n style={{\n color: \"#333\",\n fontSize: \"9px\",\n lineHeight: `${lineH}px`,\n margin: 0,\n padding: 0,\n overflow: \"hidden\",\n whiteSpace: \"normal\",\n wordBreak: \"break-word\",\n }}\n >\n {biosampleText}\n {hiddenBiosamples > 0 && (\n <span style={{ color: \"#aaa\" }}>{biosampleMoreText}</span>\n )}\n </div>\n </foreignObject>\n </g>\n )}\n </g>\n );\n}\n\n// --- Settings Panel ---\n\nfunction TfPeaksSettings({ id }: { id: string }) {\n const track = useTrackStore((state) => state.getTrack(id)) as\n | OverlayBigBedConfig\n | undefined;\n const editTrack = useTrackStore((state) => state.editTrack);\n const [input, setInput] = useState((track?.filter || []).join(\", \"));\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInput(value);\n const names = value\n .split(\",\")\n .map((s) => s.trim().toUpperCase())\n .filter(Boolean);\n editTrack<OverlayBigBedConfig>(id, {\n filter: names.length > 0 ? names : undefined,\n });\n };\n\n return (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n paddingBlock: \"5px\",\n paddingInline: \"10px\",\n gap: \"3px\",\n }}\n >\n <div style={{ fontWeight: \"bold\" }}>Filter TFs</div>\n <input\n value={input}\n onChange={handleChange}\n placeholder=\"e.g. CTCF, TP53, GATA1\"\n style={{ width: \"100%\" }}\n />\n </div>\n );\n}\n\n// --- Renderer ---\n\nfunction OverlayBigBedRenderer(\n props: CustomTrackProps<OverlayData> & OverlayBigBedConfig,\n) {\n const {\n data,\n dimensions,\n id,\n height: trackHeight,\n color: _color,\n baseColor: _baseColorProp,\n overlayColor: overlayColorProp,\n filter,\n ...rest\n } = props;\n const domain = useBrowserStore((state) => state.domain);\n const { totalWidth, sideWidth } = dimensions;\n const { x, reverseX } = useXTransform(totalWidth);\n\n const filterSet = useMemo(\n () =>\n filter && filter.length > 0\n ? new Set(filter.map((f) => f.toUpperCase()))\n : null,\n [filter],\n );\n\n const visiblePrimary = useMemo(() => {\n let visible = (data?.primary || []).filter(\n (r) => r.end >= domain.start && r.start <= domain.end,\n );\n if (filterSet) {\n visible = visible.filter((r) =>\n filterSet.has(nameKey(r.name)?.toUpperCase()),\n );\n }\n return visible;\n }, [data, domain.end, domain.start, filterSet]);\n\n const rows = useMemo(\n () => renderSquishBigBedData(visiblePrimary, x),\n [visiblePrimary, x],\n );\n\n // Index primary data by \"name:start:end\" for fast TF metadata lookup\n const primaryIndex = useMemo(() => {\n const index = new Map<string, TfPeakBigBedData>();\n for (const item of visiblePrimary) {\n index.set(`${item.name}:${item.start}:${item.end}`, item);\n }\n return index;\n }, [visiblePrimary]);\n\n const rowHeight = useRowHeight(rows.length, id);\n const height = Math.max(trackHeight, rowHeight * Math.max(rows.length, 1));\n const overlayByName = useMemo(\n () => buildOverlayIndex(data?.overlay || []),\n [data],\n );\n\n const overlayColor = overlayColorProp || Vibrant[3];\n const cursor = rest.onClick ? \"pointer\" : \"default\";\n\n const { handleClick, handleHover, handleLeave } =\n useInteraction<OverlayInteractionRect>({\n onClick: rest.onClick,\n onHover: rest.onHover,\n onLeave: rest.onLeave,\n tooltip: rest.tooltip,\n });\n\n return (\n <g\n width={totalWidth}\n height={height}\n clipPath={`url(#${id})`}\n transform={`translate(-${sideWidth}, 0)`}\n >\n <rect width={totalWidth} height={height} fill=\"transparent\" />\n <defs>\n <ClipPath id={id} width={totalWidth} height={height} />\n </defs>\n {rows.map((row, rowIndex) => {\n const baseY = rowHeight * 0.2;\n const baseH = rowHeight * 0.6;\n return (\n <g\n key={`row_${rowIndex}`}\n transform={`translate(0, ${rowIndex * rowHeight})`}\n >\n {row.map((rect, ri) => {\n const realStart = Math.round(reverseX(rect.start));\n const realEnd = Math.round(reverseX(rect.end));\n const baseName = rect.rectname;\n const attached = (\n overlayByName[nameKey(rect.rectname)] || []\n ).filter((a) =>\n intervalsOverlap(realStart, realEnd, a.start, a.end),\n );\n const fill = scoreColor(rect.score);\n const meta = primaryIndex.get(\n `${baseName}:${realStart}:${realEnd}`,\n );\n const baseRect: OverlayInteractionRect = {\n start: realStart,\n end: realEnd,\n name: baseName,\n color: fill,\n score: rect.score,\n chr: meta?.chr,\n pwm: attached.length > 0 ? lookupPwm(baseName) : undefined,\n tfName: meta?.tfName,\n expRatio: meta?.expRatio,\n cCREId: meta?.cCREId,\n experimentId: meta?.experimentId,\n expSupport: meta?.expSupport,\n };\n\n return (\n <g key={`${id}_${rowIndex}_${ri}`}>\n <rect\n style={{ cursor }}\n x={rect.start}\n y={baseY}\n width={Math.max(rect.end - rect.start, 1)}\n height={baseH}\n fill={fill}\n opacity={0.9}\n onClick={() => handleClick(baseRect)}\n onMouseOver={(e) =>\n handleHover(baseRect, baseRect.name || \"\", e)\n }\n onMouseOut={() => handleLeave(baseRect)}\n />\n {attached.map((a, ai) => {\n const left = x(a.start);\n const right = x(a.end);\n return (\n <rect\n style={{ cursor }}\n key={`${id}_${rowIndex}_${ri}_a_${ai}`}\n x={left}\n y={baseY}\n width={Math.max(right - left, 1)}\n height={baseH}\n fill={a.color || overlayColor}\n opacity={0.9}\n onClick={() => handleClick(baseRect)}\n onMouseOver={(e) =>\n handleHover(baseRect, baseRect.name || \"\", e)\n }\n onMouseOut={() => handleLeave(baseRect)}\n />\n );\n })}\n </g>\n );\n })}\n </g>\n );\n })}\n </g>\n );\n}\n\n// --- Track config ---\n\nexport const PEAKS_BIGBED_URL =\n \"https://users.wenglab.org/gaomingshi/no_trim.TF_name.rPeaks.bb\";\nexport const DECORATOR_BIGBED_URL =\n \"https://users.wenglab.org/gaomingshi/no_trim.TF_name.decorator.bb\";\n\nexport const tfPeaksTrack: OverlayBigBedConfig = {\n id: \"custom-tf-peaks\",\n title: \"TF Peaks (Overlay)\",\n shortLabel: \"TF Peaks\",\n trackType: TrackType.Custom,\n displayMode: DisplayMode.Full,\n color: Vibrant[0],\n height: 80,\n primaryUrl: PEAKS_BIGBED_URL,\n overlayUrl: DECORATOR_BIGBED_URL,\n baseColor: \"#d1d5db\",\n overlayColor: \"#36dd81\",\n onClick: (rect) => {\n console.log(\"Clicked on rect:\", rect);\n },\n tooltip: TfPeaksTooltip,\n settingsPanel: TfPeaksSettings,\n renderers: {\n [DisplayMode.Full]: OverlayBigBedRenderer,\n },\n fetcher: async (ctx) => {\n const track = ctx.track as OverlayBigBedConfig;\n const [primary, overlay] = await Promise.all([\n fetchBigBedUrl(track.primaryUrl, ctx, parseTfPeakBigBed),\n fetchBigBedUrl(track.overlayUrl, ctx),\n ]);\n const error =\n [primary.error, overlay.error].filter(Boolean).join(\"\\n\") || null;\n return {\n data: { primary: primary.data || [], overlay: overlay.data || [] },\n error,\n };\n },\n};\n","import { Track } from \"@weng-lab/genomebrowser\";\nimport { tfPeaksTrack } from \"../../../Custom/TfPeaks\";\nimport { CreateTrackOptions } from \"../../types\";\nimport { OtherTrackInfo } from \"./types\";\n\nexport type OtherTracksTrackContext = {};\n\nexport function createOtherTrack(\n row: OtherTrackInfo,\n _options: CreateTrackOptions,\n): Track | null {\n if ((row.sourceId ?? row.id) === \"tf-peaks\") {\n return { ...tfPeaksTrack, id: row.id };\n }\n\n return null;\n}\n","import { FolderDefinition } from \"../../types\";\nimport { OtherTrackDataFile, OtherTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { createOtherTrack } from \"./toTrack\";\n\nfunction transformData(\n folderId: string,\n data: OtherTrackDataFile,\n): OtherTrackInfo[] {\n return data.map((row) => ({\n ...row,\n sourceId: row.id,\n id: `${folderId}/${row.id}`,\n }));\n}\n\nexport interface CreateOtherTracksFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: OtherTrackDataFile;\n}\n\nexport function createOtherTracksFolder(\n options: CreateOtherTracksFolderOptions,\n): FolderDefinition<OtherTrackInfo> {\n const { id, label, description, data } = options;\n const rows = transformData(id, data);\n\n return {\n id,\n label,\n description,\n rows,\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n createTrack: createOtherTrack,\n };\n}\n","import { createOtherTracksFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/human.json\";\nimport { OtherTrackDataFile } from \"./shared/types\";\n\nexport const humanOtherTracksFolder = createOtherTracksFolder({\n id: \"human-other-tracks\",\n label: \"Other Tracks\",\n description: \"Additional tracks\",\n data: humanData as OtherTrackDataFile,\n});\n","import { Box } from \"@mui/material\";\n\nexport const MOHD_BASE_URL = \"https://downloads.mohdconsortium.org\";\n\nexport const MOHD_OME_CONFIG = {\n atac: {\n label: \"ATAC\",\n color: \"#02c7b9\",\n downloadPath: \"2_ATAC\",\n },\n rna: {\n label: \"RNA\",\n color: \"#00aa00\",\n downloadPath: \"3_RNA\",\n },\n wgbs: {\n label: \"WGBS\",\n color: \"#648bd8\",\n downloadPath: \"1_WGBS\",\n },\n} as const;\n\nexport type MohdRawOme = keyof typeof MOHD_OME_CONFIG;\nexport type MohdOme = (typeof MOHD_OME_CONFIG)[MohdRawOme][\"label\"];\n\nconst MOHD_OME_LABELS = Object.values(MOHD_OME_CONFIG).map(\n (config) => config.label,\n);\n\nexport function getMohdOmeConfig(rawOme: string) {\n const config = MOHD_OME_CONFIG[rawOme.toLowerCase() as MohdRawOme];\n\n if (!config) {\n throw new Error(`Unknown MOHD ome: ${rawOme}`);\n }\n\n return config;\n}\n\nexport function createMohdFileUrl({\n ome,\n sampleId,\n filename,\n}: {\n ome: string;\n sampleId: string;\n filename: string;\n}) {\n const { downloadPath } = getMohdOmeConfig(ome);\n return `${MOHD_BASE_URL}/${downloadPath}/${sampleId}/${filename}`;\n}\n\nexport function isMohdOmeLabel(value: string) {\n return MOHD_OME_LABELS.includes(value as MohdOme);\n}\n\nexport function MohdOmeIcon({ type }: { type: string }) {\n const { color } = getMohdOmeConfig(type);\n\n return (\n <Box\n data-testid={`mohd-ome-icon-${type.toLowerCase()}`}\n sx={{\n width: 12,\n height: 12,\n borderRadius: \"20%\",\n bgcolor: color,\n }}\n />\n );\n}\n","import { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { FolderView } from \"../../types\";\nimport { MohdRowInfo } from \"./types\";\n\nconst descriptionCol: GridColDef<MohdRowInfo> = {\n field: \"description\",\n headerName: \"Description\",\n minWidth: 220,\n flex: 1.5,\n};\n\nconst sampleIdCol: GridColDef<MohdRowInfo> = {\n field: \"sampleId\",\n headerName: \"Sample ID\",\n minWidth: 180,\n flex: 1,\n};\n\nconst kitIdCol: GridColDef<MohdRowInfo> = {\n field: \"kitId\",\n headerName: \"Kit ID\",\n minWidth: 140,\n flex: 1,\n};\n\nconst trackCategoryCol: GridColDef<MohdRowInfo> = {\n field: \"trackCategory\",\n headerName: \"Track Type\",\n minWidth: 140,\n width: 140,\n};\n\nconst omeCol: GridColDef<MohdRowInfo> = {\n field: \"ome\",\n headerName: \"Ome\",\n minWidth: 120,\n width: 120,\n};\n\nconst siteCol: GridColDef<MohdRowInfo> = {\n field: \"site\",\n headerName: \"Site\",\n minWidth: 100,\n width: 100,\n};\n\nconst sexCol: GridColDef<MohdRowInfo> = {\n field: \"sex\",\n headerName: \"Sex\",\n minWidth: 120,\n width: 120,\n};\n\nconst statusCol: GridColDef<MohdRowInfo> = {\n field: \"status\",\n headerName: \"Status\",\n minWidth: 120,\n flex: 1,\n};\n\nexport const mohdColumns: GridColDef<MohdRowInfo>[] = [\n descriptionCol,\n trackCategoryCol,\n sampleIdCol,\n kitIdCol,\n omeCol,\n siteCol,\n sexCol,\n statusCol,\n];\n\nexport const mohdViews: FolderView[] = [\n {\n id: \"ome\",\n label: \"Ome\",\n columns: mohdColumns,\n groupingModel: [\"ome\", \"site\", \"sampleId\"],\n leafField: \"description\",\n },\n {\n id: \"site\",\n label: \"Site\",\n columns: mohdColumns,\n groupingModel: [\"site\", \"ome\", \"sampleId\"],\n leafField: \"description\",\n },\n];\n","import ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport { Box, IconButton, Stack, Tooltip } from \"@mui/material\";\nimport {\n GridGroupNode,\n GridRenderCellParams,\n useGridApiContext,\n} from \"@mui/x-data-grid-premium\";\nimport { isMohdOmeLabel, MohdOmeIcon } from \"./config\";\n\nexport function MohdGroupingCell(params: GridRenderCellParams) {\n const apiRef = useGridApiContext();\n const isGroup = params.rowNode.type === \"group\";\n const groupNode = params.rowNode as GridGroupNode;\n const isExpanded = isGroup ? groupNode.childrenExpanded : false;\n const groupingField = isGroup ? groupNode.groupingField : null;\n const depth = params.rowNode.depth ?? 0;\n const value = String(params.value ?? \"\");\n const showOmeIcon =\n (isGroup && groupingField === \"ome\") || isMohdOmeLabel(value);\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n apiRef.current.setRowChildrenExpansion(params.id, !isExpanded);\n };\n\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n ml: depth * 2,\n }}\n >\n {isGroup && (\n <IconButton size=\"small\" onClick={handleExpandClick} sx={{ mr: 0.5 }}>\n {isExpanded ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ChevronRightIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n <Stack\n direction=\"row\"\n spacing={1}\n alignItems=\"center\"\n sx={{ flex: 1, overflow: \"hidden\" }}\n >\n {showOmeIcon && <MohdOmeIcon type={value} />}\n <Tooltip title={value} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n fontWeight: isGroup ? \"bold\" : undefined,\n }}\n >\n {params.formattedValue}\n </Box>\n </Tooltip>\n </Stack>\n </Box>\n );\n}\n","import React from \"react\";\nimport { CustomTreeItem } from \"../../../TreeView/CustomTreeItem\";\nimport { CustomTreeItemProps } from \"../../../types\";\nimport { MohdOmeIcon } from \"./config\";\n\nexport const MohdTreeItem = React.forwardRef<\n HTMLLIElement,\n CustomTreeItemProps\n>(function MohdTreeItem(props, ref) {\n return (\n <CustomTreeItem\n {...props}\n ref={ref}\n renderIcon={(type) => <MohdOmeIcon type={type} />}\n />\n );\n});\n","import { defineBigBedSchema } from \"@weng-lab/genomebrowser\";\nimport type { MohdFileRowInfo } from \"./types\";\n\nexport const mohdAtacFdrPeaksSchema = defineBigBedSchema({\n name: \"string\",\n score: \"number\",\n strand: \"string\",\n signalValue: \"number\",\n pValue: \"number\",\n qValue: \"number\",\n peak: \"number\",\n});\n\nexport const mohdAtacPseudorepPeaksSchema = defineBigBedSchema({\n name: \"string\",\n score: \"number\",\n strand: \"string\",\n signalValue: \"number\",\n pValue: \"number\",\n qValue: \"number\",\n peak: \"number\",\n});\n\nexport function getMohdBigBedSchema(row: MohdFileRowInfo) {\n if (row.description === \"FDR 0.05 peaks\") {\n return mohdAtacFdrPeaksSchema;\n }\n\n if (row.description === \"Pseudorep peaks\") {\n return mohdAtacPseudorepPeaksSchema;\n }\n\n return undefined;\n}\n","import { InferBigBedRow } from \"@weng-lab/genomebrowser\";\nimport {\n mohdAtacFdrPeaksSchema,\n mohdAtacPseudorepPeaksSchema,\n} from \"./bigBedSchemas\";\n\ntype MohdBigBedRow =\n | InferBigBedRow<typeof mohdAtacFdrPeaksSchema>\n | InferBigBedRow<typeof mohdAtacPseudorepPeaksSchema>;\n\nfunction TooltipRow({\n label,\n value,\n y,\n}: {\n label: string;\n value: string;\n y: number;\n}) {\n return (\n <g transform={`translate(0, ${y})`}>\n <text x={8} y={0} fontSize={10} fill=\"#888\" dominantBaseline=\"hanging\">\n {label}\n </text>\n <text x={100} y={0} fontSize={10} fill=\"#333\" dominantBaseline=\"hanging\">\n {value}\n </text>\n </g>\n );\n}\n\nfunction formatValue(value: string | number | undefined) {\n if (value === undefined) {\n return \"-\";\n }\n\n return `${value}`;\n}\n\nexport function MohdBigBedTooltip(rect: MohdBigBedRow) {\n const rows = [\n {\n label: \"Position\",\n value: `${rect.chr}:${rect.start.toLocaleString()}-${rect.end.toLocaleString()}`,\n },\n { label: \"Name\", value: formatValue(rect.name) },\n { label: \"Score\", value: formatValue(rect.score) },\n { label: \"Strand\", value: formatValue(rect.strand) },\n { label: \"Signal\", value: formatValue(rect.signalValue) },\n { label: \"pValue\", value: formatValue(rect.pValue) },\n { label: \"qValue\", value: formatValue(rect.qValue) },\n { label: \"Peak\", value: formatValue(rect.peak) },\n ];\n const pad = 8;\n const lineH = 14;\n const titleH = 18;\n const width = 280;\n const height = pad + titleH + rows.length * lineH + pad;\n\n return (\n <g>\n <rect\n width={width}\n height={height}\n fill=\"white\"\n rx={3}\n style={{ filter: \"drop-shadow(0px 0px 5px rgba(0,0,0,0.3))\" }}\n />\n <text x={pad} y={pad + 12} fontSize={12} fontWeight=\"bold\" fill=\"#333\">\n {rect.name || \"MOHD peak\"}\n </text>\n {rows.map((row, index) => (\n <TooltipRow\n key={row.label}\n label={row.label}\n value={row.value}\n y={pad + titleH + index * lineH}\n />\n ))}\n </g>\n );\n}\n","import {\n BigBedConfig,\n BigWigConfig,\n DisplayMode,\n InferBigBedRow,\n MethylCConfig,\n Track,\n TrackType,\n ValuedPoint,\n} from \"@weng-lab/genomebrowser\";\nimport type { FC } from \"react\";\nimport { CreateTrackOptions } from \"../../types\";\nimport {\n getMohdBigBedSchema,\n mohdAtacFdrPeaksSchema,\n mohdAtacPseudorepPeaksSchema,\n} from \"./bigBedSchemas\";\nimport { createMohdFileUrl, getMohdOmeConfig } from \"./config\";\nimport { MohdBigBedTooltip } from \"./MohdBigBedTooltip\";\nimport { MohdRowInfo } from \"./types\";\n\nexport type MohdTrackContext = {\n mohdSignalTooltip?: FC<ValuedPoint[]>;\n mohdMethylTooltip?: FC<ValuedPoint[]>;\n};\n\nconst defaultBigWig: Omit<BigWigConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigWig,\n height: 30,\n displayMode: DisplayMode.Full,\n titleSize: 12,\n color: \"#02c7b9\",\n};\n\nconst defaultBigBed: Omit<BigBedConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigBed,\n height: 20,\n displayMode: DisplayMode.Dense,\n titleSize: 12,\n};\n\nconst defaultMethylC: Omit<MethylCConfig, \"id\" | \"title\" | \"urls\"> = {\n trackType: TrackType.MethylC,\n height: 75,\n displayMode: DisplayMode.Split,\n titleSize: 12,\n color: \"#648bd8\",\n maskCpgByCoverage: true,\n colors: {\n cpg: \"#648bd8\",\n chg: \"#ff944d\",\n chh: \"#ff00ff\",\n depth: \"#525252\",\n },\n};\n\ntype MohdBigBedRow =\n | InferBigBedRow<typeof mohdAtacFdrPeaksSchema>\n | InferBigBedRow<typeof mohdAtacPseudorepPeaksSchema>;\n\nfunction createTrackTitle(row: MohdRowInfo) {\n return `${row.sampleId} ${row.description}`;\n}\n\nexport function createMohdTrack(\n row: MohdRowInfo,\n options: CreateTrackOptions,\n): Track | null {\n const trackContext = options.trackContext;\n\n if (row.kind === \"wgbs-methyl\") {\n return {\n ...defaultMethylC,\n id: row.id,\n title: createTrackTitle(row),\n tooltip: trackContext?.mohdMethylTooltip,\n urls: {\n plusStrand: {\n cpg: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.plusStrand.cpg,\n }),\n },\n chg: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.plusStrand.chg,\n }),\n },\n chh: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.plusStrand.chh,\n }),\n },\n depth: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.plusStrand.depth,\n }),\n },\n },\n minusStrand: {\n cpg: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.minusStrand.cpg,\n }),\n },\n chg: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.minusStrand.chg,\n }),\n },\n chh: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.minusStrand.chh,\n }),\n },\n depth: {\n url: createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filenames.minusStrand.depth,\n }),\n },\n },\n },\n };\n }\n\n if (row.kind !== \"file\") {\n return null;\n }\n\n const { color } = getMohdOmeConfig(row.ome);\n const url = createMohdFileUrl({\n ome: row.ome,\n sampleId: row.sampleId,\n filename: row.filename,\n });\n\n if (row.filename.endsWith(\".bigWig\")) {\n return {\n ...defaultBigWig,\n id: row.id,\n title: createTrackTitle(row),\n url,\n color,\n tooltip: trackContext?.mohdSignalTooltip,\n };\n }\n\n if (row.filename.endsWith(\".bigBed\")) {\n return {\n ...defaultBigBed,\n id: row.id,\n title: createTrackTitle(row),\n url,\n color,\n schema: getMohdBigBedSchema(row),\n tooltip: MohdBigBedTooltip,\n onClick: (rect: MohdBigBedRow) => {\n console.log(rect);\n },\n };\n }\n\n return null;\n}\n","import { ToggleButton, ToggleButtonGroup } from \"@mui/material\";\nimport { FolderView } from \"../../types\";\n\nexport interface MohdViewSelectorProps {\n views: FolderView[];\n activeViewId: string;\n onChange: (viewId: string) => void;\n}\n\nexport function MohdViewSelector({\n views,\n activeViewId,\n onChange,\n}: MohdViewSelectorProps) {\n return (\n <ToggleButtonGroup\n exclusive\n value={activeViewId}\n size=\"small\"\n onChange={(_event, viewId: string | null) => {\n if (viewId) {\n onChange(viewId);\n }\n }}\n >\n {views.map((view) => (\n <ToggleButton key={view.id} value={view.id}>\n {view.label}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n );\n}\n","import { FolderDefinition } from \"../../types\";\nimport { MohdDataFile, MohdRowInfo } from \"./types\";\nimport { getMohdOmeConfig } from \"./config\";\nimport { mohdViews } from \"./columns\";\nimport { MohdGroupingCell } from \"./MohdGroupingCell\";\nimport { MohdTreeItem } from \"./MohdTreeItem\";\nimport { createMohdTrack } from \"./toTrack\";\nimport { MohdViewSelector } from \"./MohdViewSelector\";\n\nconst WGBS_DESCRIPTION = \"DNA Methylation\";\n\nfunction createBaseRow(folderId: string, row: MohdDataFile[number]) {\n return {\n id: `${folderId}/${row.sample_id}::${row.filename}`,\n ome: getMohdOmeConfig(row.ome).label,\n site: row.site,\n sampleId: row.sample_id,\n kitId: row.kit_id,\n sex: row.sex,\n status: row.status,\n };\n}\n\nfunction createFileRow(\n folderId: string,\n row: MohdDataFile[number],\n): MohdRowInfo {\n const trackCategory = row.filename.endsWith(\".bigBed\")\n ? \"Annotation\"\n : \"Signal\";\n\n return {\n ...createBaseRow(folderId, row),\n kind: \"file\",\n description: row.file_type,\n trackCategory,\n filename: row.filename,\n };\n}\n\nfunction getRequiredWgbsFilename(\n sampleRows: MohdDataFile,\n includesText: string,\n) {\n const match = sampleRows.find((row) => row.filename.includes(includesText));\n\n if (!match) {\n throw new Error(`Missing WGBS file matching ${includesText}`);\n }\n\n return match.filename;\n}\n\nfunction createWgbsMethylRow(\n folderId: string,\n sampleRows: MohdDataFile,\n): MohdRowInfo {\n const sampleId = sampleRows[0]?.sample_id;\n\n if (!sampleId) {\n throw new Error(\"Cannot build WGBS row without a sample ID\");\n }\n\n const base = createBaseRow(folderId, sampleRows[0]!);\n\n return {\n ...base,\n id: `${folderId}/${sampleId}`,\n kind: \"wgbs-methyl\",\n description: WGBS_DESCRIPTION,\n trackCategory: \"Methylation\",\n filenames: {\n plusStrand: {\n cpg: getRequiredWgbsFilename(sampleRows, \"DNAme-CpG-plus\"),\n chg: getRequiredWgbsFilename(sampleRows, \"DNAme-CHG-plus\"),\n chh: getRequiredWgbsFilename(sampleRows, \"DNAme-CHH-plus\"),\n depth: getRequiredWgbsFilename(sampleRows, \"coverage-plus\"),\n },\n minusStrand: {\n cpg: getRequiredWgbsFilename(sampleRows, \"DNAme-CpG-minus\"),\n chg: getRequiredWgbsFilename(sampleRows, \"DNAme-CHG-minus\"),\n chh: getRequiredWgbsFilename(sampleRows, \"DNAme-CHH-minus\"),\n depth: getRequiredWgbsFilename(sampleRows, \"coverage-minus\"),\n },\n },\n };\n}\n\nfunction transformData(folderId: string, data: MohdDataFile): MohdRowInfo[] {\n const signalRows = data\n .filter((row) => row.ome !== \"wgbs\")\n .map((row) => createFileRow(folderId, row));\n const wgbsRowsBySampleId = new Map<string, MohdDataFile>();\n\n data.forEach((row) => {\n if (row.ome !== \"wgbs\") {\n return;\n }\n\n const sampleRows = wgbsRowsBySampleId.get(row.sample_id);\n\n if (sampleRows) {\n sampleRows.push(row);\n return;\n }\n\n wgbsRowsBySampleId.set(row.sample_id, [row]);\n });\n\n const methylationRows = Array.from(wgbsRowsBySampleId.values()).map(\n (sampleRows) => createWgbsMethylRow(folderId, sampleRows),\n );\n\n return [...signalRows, ...methylationRows];\n}\n\nexport interface CreateMohdFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: MohdDataFile;\n}\n\nexport function createMohdFolder(\n options: CreateMohdFolderOptions,\n): FolderDefinition<MohdRowInfo> {\n const { id, label, description, data } = options;\n const rows = transformData(id, data);\n const defaultView = mohdViews[0]!;\n\n return {\n id,\n label,\n description,\n rows,\n columns: defaultView.columns,\n groupingModel: defaultView.groupingModel,\n leafField: defaultView.leafField,\n createTrack: createMohdTrack,\n views: mohdViews,\n ViewSelector: MohdViewSelector,\n GroupingCellComponent: MohdGroupingCell,\n TreeItemComponent: MohdTreeItem,\n };\n}\n","import humanData from \"./data/human.json\";\nimport { createMohdFolder } from \"./shared/createFolder\";\nimport { MohdDataFile } from \"./shared/types\";\n\nexport const humanMohdFolder = createMohdFolder({\n id: \"human-mohd\",\n label: \"MOHD\",\n description: \"Public MOHD signal, methylation, and annotation tracks.\",\n data: humanData as MohdDataFile,\n});\n","import { GridColDef } from \"@mui/x-data-grid-premium\";\nimport { PsychscreenTrackInfo } from \"./types\";\n\nexport const psychscreenCategoryColors: Record<string, string> = {\n \"Epigenetic Tracks\": \"#9479bc\",\n \"Deep Learned Models\": \"#758c7b\",\n \"Pseudo bulk ATAC\": \"#cd8c66\",\n \"Evolutionary Conservation\": \"#c0a9e2\",\n \"ATAC Seq Peaks\": \"#9479bc\",\n};\n\nexport function getPsychscreenCategoryColor(category: string) {\n return psychscreenCategoryColors[category] ?? \"#000000\";\n}\n\nconst titleCol: GridColDef<PsychscreenTrackInfo> = {\n field: \"title\",\n headerName: \"Title\",\n flex: 1,\n minWidth: 240,\n};\n\nconst categoryCol: GridColDef<PsychscreenTrackInfo> = {\n field: \"category\",\n headerName: \"Category\",\n flex: 1,\n minWidth: 180,\n};\n\nconst subcategoryCol: GridColDef<PsychscreenTrackInfo> = {\n field: \"subcategory\",\n headerName: \"Subcategory\",\n flex: 1,\n minWidth: 240,\n};\n\nconst trackTypeCol: GridColDef<PsychscreenTrackInfo> = {\n field: \"trackType\",\n headerName: \"Track Type\",\n width: 120,\n};\n\nexport const defaultColumns: GridColDef<PsychscreenTrackInfo>[] = [\n titleCol,\n categoryCol,\n subcategoryCol,\n trackTypeCol,\n];\n\nexport const defaultGroupingModel = [\"category\", \"subcategory\"];\n\nexport const defaultLeafField = \"title\";\n","import ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport { Box, IconButton, Tooltip } from \"@mui/material\";\nimport { alpha } from \"@mui/material/styles\";\nimport {\n GridGroupNode,\n GridRenderCellParams,\n useGridApiContext,\n} from \"@mui/x-data-grid-premium\";\nimport { getPsychscreenCategoryColor } from \"./columns\";\n\nexport function PsychscreenGroupingCell(params: GridRenderCellParams) {\n const apiRef = useGridApiContext();\n const isGroup = params.rowNode.type === \"group\";\n const groupNode = params.rowNode as GridGroupNode;\n const isExpanded = isGroup ? groupNode.childrenExpanded : false;\n const groupingField = isGroup ? groupNode.groupingField : null;\n const isCategoryGroup = groupingField === \"category\";\n const color = getPsychscreenCategoryColor(\n isCategoryGroup ? String(params.value ?? \"\") : params.row.category,\n );\n const label = String(params.formattedValue ?? params.value ?? \"\");\n const depth = params.rowNode.depth ?? 0;\n\n const handleExpandClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n apiRef.current.setRowChildrenExpansion(params.id, !isExpanded);\n };\n\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n gap: 1,\n ml: depth * 2,\n }}\n >\n {isGroup && (\n <IconButton size=\"small\" onClick={handleExpandClick} sx={{ mr: 0.25 }}>\n {isExpanded ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ChevronRightIcon fontSize=\"small\" />\n )}\n </IconButton>\n )}\n {isCategoryGroup && (\n <Box\n sx={{\n width: 9,\n height: 9,\n borderRadius: \"50%\",\n bgcolor: alpha(color, 0.65),\n flexShrink: 0,\n }}\n />\n )}\n <Tooltip title={label} placement=\"top-start\" enterDelay={500}>\n <Box\n sx={{\n bgcolor: isCategoryGroup ? alpha(color, 0.06) : undefined,\n borderRadius: isCategoryGroup ? 1 : undefined,\n px: isCategoryGroup ? 0.75 : 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n flex: 1,\n fontWeight: isGroup ? 700 : undefined,\n }}\n >\n {label}\n </Box>\n </Tooltip>\n </Box>\n );\n}\n","import {\n BigBedConfig,\n BigWigConfig,\n DisplayMode,\n Track,\n TrackType,\n} from \"@weng-lab/genomebrowser\";\nimport { CreateTrackOptions } from \"../../types\";\nimport { PsychscreenTrackInfo } from \"./types\";\n\nexport type PsychscreenTrackContext = {};\n\nconst defaultBigWig: Omit<BigWigConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigWig,\n height: 50,\n displayMode: DisplayMode.Full,\n titleSize: 12,\n};\n\nconst defaultBigBed: Omit<BigBedConfig, \"id\" | \"title\" | \"url\"> = {\n trackType: TrackType.BigBed,\n height: 30,\n displayMode: DisplayMode.Dense,\n titleSize: 12,\n};\n\nexport function createPsychscreenTrack(\n row: PsychscreenTrackInfo,\n _options: CreateTrackOptions,\n): Track {\n if (row.trackType === \"bigbed\") {\n return {\n ...defaultBigBed,\n id: row.id,\n title: row.title,\n url: row.url,\n color: row.color ?? \"#000000\",\n };\n }\n\n return {\n ...defaultBigWig,\n id: row.id,\n title: row.title,\n url: row.url,\n color: row.color ?? \"#000000\",\n };\n}\n","import { FolderDefinition } from \"../../types\";\nimport { PsychscreenDataFile, PsychscreenTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { PsychscreenGroupingCell } from \"./PsychscreenGroupingCell\";\nimport { createPsychscreenTrack } from \"./toTrack\";\n\nfunction transformData(\n folderId: string,\n data: PsychscreenDataFile,\n): PsychscreenTrackInfo[] {\n return data.map((row) => ({\n ...row,\n sourceId: row.id,\n id: `${folderId}/${row.id}`,\n }));\n}\n\nexport interface CreatePsychscreenFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: PsychscreenDataFile;\n}\n\nexport function createPsychscreenFolder(\n options: CreatePsychscreenFolderOptions,\n): FolderDefinition<PsychscreenTrackInfo> {\n const { id, label, description, data } = options;\n\n return {\n id,\n label,\n description,\n rows: transformData(id, data),\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n createTrack: createPsychscreenTrack,\n GroupingCellComponent: PsychscreenGroupingCell,\n };\n}\n","import { createPsychscreenFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/human.json\";\nimport { PsychscreenDataFile } from \"./shared/types\";\n\nexport const humanPsychscreenFolder = createPsychscreenFolder({\n id: \"human-psychscreen\",\n label: \"PsychSCREEN\",\n description: \"PsychSCREEN browser tracks\",\n data: humanData as PsychscreenDataFile,\n});\n","import { Assembly, FolderDefinition } from \"./types\";\nimport { humanBiosamplesFolder } from \"./biosamples/human\";\nimport { mouseBiosamplesFolder } from \"./biosamples/mouse\";\nimport { humanGenesFolder } from \"./genes/human\";\nimport { mouseGenesFolder } from \"./genes/mouse\";\nimport { humanOtherTracksFolder } from \"./other-tracks/human\";\nimport { humanMohdFolder } from \"./mohd/human\";\nimport { humanPsychscreenFolder } from \"./psychscreen/human\";\n\nexport { type Assembly, type FolderDefinition, type FolderView } from \"./types\";\n\nexport type { BiosampleRowInfo } from \"./biosamples/shared/types\";\nexport type { BiosampleTrackContext } from \"./biosamples/shared/toTrack\";\nexport type { GeneRowInfo } from \"./genes/shared/types\";\nexport type { GeneTrackContext } from \"./genes/shared/toTrack\";\nexport type { MohdRowInfo } from \"./mohd/shared/types\";\nexport type { MohdTrackContext } from \"./mohd/shared/toTrack\";\nexport type { PsychscreenTrackInfo } from \"./psychscreen/shared/types\";\nexport type { PsychscreenTrackContext } from \"./psychscreen/shared/toTrack\";\nexport type { OtherTrackInfo } from \"./other-tracks/shared/types\";\nexport type { OtherTracksTrackContext } from \"./other-tracks/shared/toTrack\";\n\n// Registry of folders by assembly\nexport const foldersByAssembly: Record<Assembly, FolderDefinition[]> = {\n GRCh38: [\n humanGenesFolder,\n humanBiosamplesFolder,\n humanMohdFolder,\n humanPsychscreenFolder,\n humanOtherTracksFolder,\n ],\n mm10: [mouseGenesFolder, mouseBiosamplesFolder],\n};\n"],"names":["muiLicenseKey","LicenseInfo","REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","DefaultGroupingCell","params","apiRef","useGridApiContext","isGroup","groupNode","isExpanded","depth","handleExpandClick","e","indentLevel","jsxs","Box","jsx","IconButton","ExpandMoreIcon","ChevronRightIcon","Tooltip","autosizeOptions","areSetsEqual","a","b","areSelectionModelsEqual","DataGridWrapper","columns","groupingModel","leafField","onSelectionChange","rows","selectedIds","GroupingCellComponent","GroupingCell","useGridApiRef","rowIdSet","useMemo","row","filterToLeafIds","useCallback","ids","id","getPropagatedSelectionModel","selectionModel","rowSelectionModel","setRowSelectionModel","useState","useEffect","currentLeafIds","nextSelectionModel","currentSelectionModel","baseVisibility","visibility","field","columnVisibilityModel","setColumnVisibilityModel","filterColumns","column","getTogglableColumns","Paper","DataGridPremium","selection","leafIds","ClearDialog","open","onClose","onConfirm","folderLabel","clearAll","Dialog","DialogTitle","DialogContent","DialogContentText","Fragment","DialogActions","Button","LimitDialog","maxTracks","ResetDialog","Breadcrumb","currentFolder","onNavigateToRoot","Breadcrumbs","NavigateNextIcon","Link","Typography","FolderCard","folder","onClick","FolderList","folders","onFolderSelect","Stack","buildManagedTrack","assembly","trackContext","candidate","track","diffManagedTracks","currentTracks","selectedByFolder","nextManagedIds","currentManagedIds","idsToRemove","tracksToAdd","resolveFolderView","activeViewIdByFolder","activeViewId","_a","view","_b","toLabel","fallback","isHighlightedField","createRootNode","folderId","rootLabel","createLeafNode","label","appendGroupedRows","parent","path","leafNode","groupedRows","groupRows","buildSelectedTree","selectedRows","root","TreeItemRoot","styled","theme","TreeItemLabelText","CustomLabel","Icon","isHighlightedItem","highlightName","renderIcon","other","variant","labelText","TreeItemLabel","TreeItemContent","alpha","getIconFromTreeItemType","itemType","Folder","IndeterminateCheckBoxRoundedIcon","CustomTreeItem","ref","itemId","disabled","onRemove","getContextProviderProps","getRootProps","getContentProps","getIconContainerProps","getCheckboxProps","getLabelProps","getGroupTransitionProps","status","useTreeItem","item","useTreeItemModel","icon","rootProps","handleRemoveIconClick","TreeItemProvider","TreeItemIconContainer","TreeItemIcon","TreeItemCheckbox","Collapse","attachFolderId","items","getAllExpandableItemIds","FolderTree","LeafTreeItemComponent","TreeItemComponent","allExpandableIds","expandedItems","setExpandedItems","prev","newIds","handleRemoveTreeItem","TreeItem","Component","RichTreeView","_event","TreeViewWrapper","selectedCount","folderTrees","folderSelectedIds","activeView","Avatar","folderTree","DEFAULT_MAX_TRACKS","DEFAULT_TITLE","createEmptySelectedByFolder","cloneSelectedByFolder","normalizeSelectedByFolder","selectedIdsByFolder","normalized","loadSelectedByFolder","initialSelectedIds","sessionStorageKey","storedValue","parsed","saveSelectedByFolder","serialized","TrackSelect","trackStore","onCancel","title","limitDialogOpen","setLimitDialogOpen","clearDialogOpen","setClearDialogOpen","resetDialogOpen","setResetDialogOpen","currentView","setCurrentView","activeFolderId","setActiveFolderId","setActiveViewIdByFolder","committedSelectedByFolder","setCommittedSelectedByFolder","setSelectedByFolder","maxTracksLimit","currentFolderId","current","nextCommittedSelection","insertTrack","removeTrack","activeFolder","activeConfig","handleFolderSelect","handleNavigateToRoot","handleCancel","ViewSelector","confirmReset","confirmClear","nextSelectedByFolder","handleActiveViewChange","viewId","next","handleSelectionChange","filteredIds","nextTotal","folderIds","nextSet","handleSubmit","CloseIcon","assayTypes","lifeStages","ontologyTypes","assayColorMap","AssayIcon","color","assayJsonToDisplay","formatAssayType","jsonKey","collectionTypes","CollectionCell","childIds","firstChildRow","displayNameCol","capitalize","sortedByAssayOntologyCol","val","sortedByAssayAssayCol","defaultOntologyCol","defaultAssayCol","sampleTypeCol","lifeStageCol","collectionCol","experimentCol","fileCol","idCol","sortedByAssayColumns","defaultColumns","sortedByAssayGroupingModel","defaultGroupingModel","sortedByAssayLeafField","defaultLeafField","BiosampleViewSelector","views","onChange","ToggleButtonGroup","ToggleButton","BiosampleGroupingCell","groupingField","renderContent","BiosampleTreeItem","assayColors","defaultBigWig","TrackType","DisplayMode","defaultBigBed","defaultMethylC","createBiosampleTrack","options","assay","rect","flattenTrackIntoRows","ontology","lifeStage","sampleType","collection","aIsCcre","bIsCcre","experimentAccession","fileAccession","url","cpgPlus","cpgMinus","coverage","transformData","data","createBiosampleFolder","description","humanBiosamplesFolder","humanData","mouseBiosamplesFolder","mouseData","formatVersions","versions","v","versionsCol","defaultTranscript","createGeneTrack","transcript","trackToRow","createGeneFolder","humanGenesFolder","mouseGenesFolder","nameCol","descriptionCol","_0","o","h","A0","N0","w0","E0","S0","v0","O0","T0","z0","R0","B0","F0","G0","I0","Y0","D0","H0","b0","j0","Q0","U0","W0","X0","K0","V0","Z0","J0","z","q0","n0","$0","P0","oo","r0","eo","c0","to","L0","no","R","ro","l0","co","g0","Lo","lo","go","h0","ho","s0","so","i0","io","f0","Y","fo","a0","ao","m0","mo","d0","po","H","n","xo","W","Co","X","Mo","uo","j","yo","o0","ko","p0","_o","Q","Ao","r","t","c","No","L","g","d","i","f","s","x","C","M","l","p","u","_","wo","x0","D","e0","C0","t0","M0","Eo","So","vo","K","u0","zo","Ro","U","Fo","y0","Go","Io","V","B","O","y","A","Z","m","J","N","S","I","F","E","q","$","k0","w","G","P","Yo","Uo","parseTfPeakBigBed","chrom","startBase","endBase","rest","entry","tokens","nameKey","buildOverlayIndex","rects","acc","intervalsOverlap","aStart","aEnd","bStart","bEnd","scoreColor","score","motifLookup","motifData","lookupPwm","tfDisplayName","TooltipRow","TfPeaksTooltip","pwm","totalWidth","pad","lineH","titleH","metaRows","allCCREItems","maxCCREs","cCREItems","hiddenCCREs","cCRERows","allBiosamples","seen","cellLine","maxBiosamples","biosampleItems","hiddenBiosamples","biosampleText","biosampleMoreText","biosampleCharsPerLine","biosampleContentLines","hasLogo","logoHeight","logoSectionH","metaSectionH","cCREGap","cCREHeaderH","cCREMoreH","cCRESectionH","biosampleGap","biosampleHeaderH","biosampleSectionH","titleY","logoY","metaY","cCREY","cCREDataY","biosampleY","biosampleDataY","totalHeight","DNALogo","group","TfPeaksSettings","useTrackStore","state","editTrack","input","setInput","handleChange","names","OverlayBigBedRenderer","dimensions","trackHeight","_color","_baseColorProp","overlayColorProp","filter","domain","useBrowserStore","sideWidth","reverseX","useXTransform","filterSet","visiblePrimary","visible","renderSquishBigBedData","primaryIndex","index","rowHeight","useRowHeight","height","overlayByName","overlayColor","Vibrant","cursor","handleClick","handleHover","handleLeave","useInteraction","ClipPath","rowIndex","baseY","baseH","ri","realStart","realEnd","baseName","attached","fill","meta","baseRect","ai","left","right","PEAKS_BIGBED_URL","DECORATOR_BIGBED_URL","tfPeaksTrack","ctx","primary","overlay","fetchBigBedUrl","error","createOtherTrack","_options","createOtherTracksFolder","humanOtherTracksFolder","MOHD_BASE_URL","MOHD_OME_CONFIG","MOHD_OME_LABELS","getMohdOmeConfig","rawOme","createMohdFileUrl","ome","sampleId","filename","downloadPath","isMohdOmeLabel","MohdOmeIcon","sampleIdCol","kitIdCol","trackCategoryCol","omeCol","siteCol","sexCol","statusCol","mohdColumns","mohdViews","MohdGroupingCell","showOmeIcon","MohdTreeItem","mohdAtacFdrPeaksSchema","defineBigBedSchema","mohdAtacPseudorepPeaksSchema","getMohdBigBedSchema","formatValue","MohdBigBedTooltip","width","createTrackTitle","createMohdTrack","MohdViewSelector","WGBS_DESCRIPTION","createBaseRow","createFileRow","trackCategory","getRequiredWgbsFilename","sampleRows","includesText","match","createWgbsMethylRow","signalRows","wgbsRowsBySampleId","methylationRows","createMohdFolder","defaultView","humanMohdFolder","psychscreenCategoryColors","getPsychscreenCategoryColor","category","titleCol","categoryCol","subcategoryCol","trackTypeCol","PsychscreenGroupingCell","isCategoryGroup","createPsychscreenTrack","createPsychscreenFolder","humanPsychscreenFolder","foldersByAssembly"],"mappings":"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","x_google_ignoreList":[1,2,3,33]}