@weng-lab/genomebrowser-ui 0.3.5 → 0.3.6
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.
- package/dist/TrackSelect/Custom/TfPeaks.d.ts +6 -2
- package/dist/TrackSelect/Custom/green-motifs.json.d.ts +20430 -0
- package/dist/genomebrowser-ui.es.js +1673 -1879
- package/dist/genomebrowser-ui.es.js.map +1 -1
- package/package.json +2 -2
- package/src/TrackSelect/Custom/TfPeaks.tsx +327 -65
- package/src/TrackSelect/Custom/green-motifs.json +20428 -0
- package/src/TrackSelect/Folders/index.ts +2 -2
- package/test/main.tsx +2 -2
- package/dist/TrackSelect/Custom/TF-ChIP-Canonical-Motifs-w-Trimmed.json.d.ts +0 -42210
- package/src/TrackSelect/Custom/TF-ChIP-Canonical-Motifs-w-Trimmed.json +0 -42207
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"genomebrowser-ui.es.js","sources":["../../../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","../../../node_modules/.pnpm/zustand@5.0.9_@types+react@19.2.7_react@19.2.3_use-sync-external-store@1.6.0_react@19.2.3_/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@5.0.9_@types+react@19.2.7_react@19.2.3_use-sync-external-store@1.6.0_react@19.2.3_/node_modules/zustand/esm/react.mjs","../src/TrackSelect/store.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/treeBuilder.ts","../src/TrackSelect/Folders/biosamples/shared/AssayToggle.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleGroupingCell.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleTreeItem.tsx","../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/treeBuilder.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","../src/TrackSelect/Folders/other-tracks/shared/treeBuilder.ts","../src/TrackSelect/Folders/other-tracks/shared/createFolder.ts","../src/TrackSelect/Folders/other-tracks/human.ts","../src/TrackSelect/Folders/index.ts","../../../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"],"sourcesContent":["/**\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 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) => 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) => <GroupingCell {...params} />,\n }}\n columnVisibilityModel={columnVisibilityModel}\n onColumnVisibilityModelChange={setColumnVisibilityModel}\n onRowSelectionModelChange={(selection) => {\n const ids = (selection as any)?.ids ?? new Set<string>();\n onSelectionChange(new Set(ids));\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: \"#0c184a\",\n color: \"white\",\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\n variant=\"contained\"\n color=\"primary\"\n onClick={onClose}\n autoFocus\n >\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: \"#0c184a\",\n color: \"white\",\n fontWeight: \"bold\",\n }}\n >\n Reset to Default\n </DialogTitle>\n <DialogContent sx={{ mt: 2 }}>\n <DialogContentText>\n Are you sure you want to reset all selections to the default?\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.rowById.size.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","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","import { create, StoreApi, UseBoundStore } from \"zustand\";\nimport { SelectionAction, SelectionState } from \"./types\";\n\nexport type SelectionStoreInstance = UseBoundStore<\n StoreApi<SelectionState & SelectionAction>\n>;\n\nconst DEFAULT_STORAGE_KEY = \"trackSelect_selection\";\n\ntype SerializedSelection = Record<string, string[]>;\n\nconst serializeSelection = (\n selection: Map<string, Set<string>>,\n): SerializedSelection => {\n const obj: SerializedSelection = {};\n selection.forEach((ids, folderId) => {\n obj[folderId] = Array.from(ids);\n });\n return obj;\n};\n\nconst deserializeSelection = (\n data: SerializedSelection,\n): Map<string, Set<string>> => {\n const map = new Map<string, Set<string>>();\n Object.entries(data).forEach(([folderId, ids]) => {\n map.set(folderId, new Set(ids));\n });\n return map;\n};\n\nconst loadFromStorage = (\n storageKey: string,\n): Map<string, Set<string>> | undefined => {\n try {\n const stored = sessionStorage.getItem(storageKey);\n if (stored) {\n const parsed = JSON.parse(stored) as SerializedSelection;\n return deserializeSelection(parsed);\n }\n } catch {\n // Ignore storage errors\n }\n return undefined;\n};\n\nconst saveToStorage = (\n selection: Map<string, Set<string>>,\n storageKey: string,\n) => {\n try {\n const serialized = serializeSelection(selection);\n sessionStorage.setItem(storageKey, JSON.stringify(serialized));\n } catch {\n // Ignore storage errors\n }\n};\n\nconst buildSelectionMap = (\n folderIds: string[],\n initialSelection?: Map<string, Set<string>>,\n) => {\n const map = new Map<string, Set<string>>();\n folderIds.forEach((folderId) => {\n const initial = initialSelection?.get(folderId);\n map.set(folderId, initial ? new Set(initial) : new Set<string>());\n });\n return map;\n};\n\nexport function createSelectionStore(\n folderIds: string[],\n storageKey: string = DEFAULT_STORAGE_KEY,\n initialSelection?: Map<string, Set<string>>,\n) {\n const storedSelection = loadFromStorage(storageKey);\n // Storage wins: use stored if exists, else fall back to initialSelection\n const selectedByFolder = buildSelectionMap(\n folderIds,\n storedSelection ?? initialSelection,\n );\n const activeFolderId = folderIds[0] ?? \"\";\n\n const store = create<SelectionState & SelectionAction>((set) => ({\n selectedByFolder,\n activeFolderId,\n clear: (folderId?: string) =>\n set((state) => {\n if (folderId) {\n const next = new Map(state.selectedByFolder);\n next.set(folderId, new Set<string>());\n return { selectedByFolder: next };\n }\n\n const next = new Map<string, Set<string>>();\n state.selectedByFolder.forEach((_value, id) => {\n next.set(id, new Set<string>());\n });\n return { selectedByFolder: next };\n }),\n setActiveFolder: (folderId: string) =>\n set(() => ({ activeFolderId: folderId })),\n setSelection: (folderId: string, ids: Set<string>) =>\n set((state) => {\n const next = new Map(state.selectedByFolder);\n next.set(folderId, new Set(ids));\n return { selectedByFolder: next };\n }),\n }));\n\n // Subscribe to changes and persist to storage\n store.subscribe((state) => {\n saveToStorage(state.selectedByFolder, storageKey);\n });\n\n return store;\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)({\n color: \"black\",\n fontFamily: \"inherit\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n});\n\nfunction CustomLabel({\n icon: Icon,\n children,\n isAssayItem,\n assayName,\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 {assayName && renderIcon && (\n <Box sx={{ flexShrink: 0 }}>{renderIcon(assayName)}</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({ id, itemId, children, label, disabled, rootRef: ref });\n\n const item = useTreeItemModel<ExtendedTreeItemProps>(itemId)!;\n const icon = getIconFromTreeItemType(item.icon, renderIcon);\n\n const handleRemoveIconClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onRemove?.(item);\n };\n\n return (\n <TreeItemProvider {...getContextProviderProps()}>\n <TreeItemRoot {...getRootProps(other)}>\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 isAssayItem: item.isAssayItem,\n assayName: item.assayName,\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 { useEffect, useMemo, useState } from \"react\";\nimport {\n CustomTreeItemProps,\n ExtendedTreeItemProps,\n FolderTreeConfig,\n TreeViewWrapperProps,\n} from \"../types\";\nimport { CustomTreeItem } from \"./CustomTreeItem\";\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 TreeItemComponent,\n onRemove,\n}: {\n items: FolderTreeConfig[\"items\"];\n TreeItemComponent: FolderTreeConfig[\"TreeItemComponent\"];\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 = TreeItemComponent ?? CustomTreeItem;\n\n return (\n <RichTreeView\n items={items}\n expandedItems={expandedItems}\n onExpandedItemsChange={(_event, ids) => 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 folderTrees,\n selectedCount,\n onRemove,\n}: TreeViewWrapperProps) {\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 TreeItemComponent={folderTree.TreeItemComponent}\n onRemove={onRemove}\n />\n ))}\n </Box>\n </Paper>\n );\n}\n","import 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 { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\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 { FolderDefinition, FolderRuntimeConfig } from \"./Folders/types\";\nimport { createSelectionStore, SelectionStoreInstance } from \"./store\";\nimport { TreeViewWrapper } from \"./TreeView/TreeViewWrapper\";\nimport { ExtendedTreeItemProps } from \"./types\";\n\nexport interface TrackSelectProps {\n folders: FolderDefinition[];\n onSubmit: (selectedByFolder: Map<string, Set<string>>) => void;\n onCancel?: () => void;\n onClear?: () => void;\n maxTracks?: number;\n storageKey?: string;\n /** Initial selection to use when no stored selection exists */\n initialSelection?: Map<string, Set<string>>;\n open: boolean;\n onClose: () => void;\n title?: string;\n}\n\nconst DEFAULT_MAX_TRACKS = 30;\n\ntype ViewState = \"folder-list\" | \"folder-detail\";\n\nconst cloneSelectionMap = (selection: Map<string, Set<string>>) => {\n const map = new Map<string, Set<string>>();\n selection.forEach((ids, folderId) => {\n map.set(folderId, new Set(ids));\n });\n return map;\n};\n\nconst buildRuntimeConfigMap = (folders: FolderDefinition[]) => {\n const map = new Map<string, FolderRuntimeConfig>();\n folders.forEach((folder) => {\n map.set(folder.id, {\n columns: folder.columns,\n groupingModel: folder.groupingModel,\n leafField: folder.leafField,\n });\n });\n return map;\n};\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\nconst DEFAULT_TITLE = \"Track Select\";\n\nexport default function TrackSelect({\n folders,\n onSubmit,\n onCancel,\n onClear,\n maxTracks,\n storageKey,\n initialSelection,\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 [runtimeConfigByFolder, setRuntimeConfigByFolder] = useState(() =>\n buildRuntimeConfigMap(folders),\n );\n\n // View state: folder list or folder detail\n const [currentView, setCurrentView] = useState<ViewState>(() =>\n folders.length > 1 ? \"folder-list\" : \"folder-detail\",\n );\n\n // Create and memoize the selection store\n const folderIds = useMemo(() => folders.map((f) => f.id), [folders]);\n const storeRef = useRef<SelectionStoreInstance | null>(null);\n if (!storeRef.current) {\n storeRef.current = createSelectionStore(\n folderIds,\n storageKey,\n initialSelection,\n );\n }\n const store = storeRef.current;\n\n // Subscribe to store changes\n const selectedByFolder = store((state) => state.selectedByFolder);\n const activeFolderId = store((state) => state.activeFolderId);\n const setActiveFolder = store((state) => state.setActiveFolder);\n const setSelection = store((state) => state.setSelection);\n const clear = store((state) => state.clear);\n\n // Keep a committed snapshot for cancel functionality\n const [committedSnapshot, setCommittedSnapshot] = useState(() =>\n cloneSelectionMap(selectedByFolder),\n );\n\n useEffect(() => {\n setRuntimeConfigByFolder(buildRuntimeConfigMap(folders));\n // Ensure active folder is valid\n if (!folders.some((folder) => folder.id === activeFolderId)) {\n setActiveFolder(folders[0]?.id ?? \"\");\n }\n // Update view state if folder count changes\n if (folders.length <= 1) {\n setCurrentView(\"folder-detail\");\n }\n }, [folders, activeFolderId, setActiveFolder]);\n\n const activeFolder = useMemo(() => {\n return folders.find((folder) => folder.id === activeFolderId) ?? folders[0];\n }, [folders, activeFolderId]);\n\n const activeConfig = useMemo(() => {\n if (!activeFolder) return undefined;\n return (\n runtimeConfigByFolder.get(activeFolder.id) ?? {\n columns: activeFolder.columns,\n groupingModel: activeFolder.groupingModel,\n leafField: activeFolder.leafField,\n }\n );\n }, [runtimeConfigByFolder, activeFolder]);\n\n const selectedIds = useMemo(() => {\n if (!activeFolder) return new Set<string>();\n return new Set(selectedByFolder.get(activeFolder.id) ?? []);\n }, [selectedByFolder, activeFolder]);\n\n const selectedCount = useMemo(() => {\n let total = 0;\n selectedByFolder.forEach((ids) => {\n total += ids.size;\n });\n return total;\n }, [selectedByFolder]);\n\n const maxTracksLimit = maxTracks ?? DEFAULT_MAX_TRACKS;\n\n const rows = useMemo(() => {\n if (!activeFolder) return [];\n return Array.from(activeFolder.rowById.values());\n }, [activeFolder]);\n\n const folderTrees = useMemo(() => {\n return folders\n .filter((folder) => {\n const selected = selectedByFolder.get(folder.id);\n return selected && selected.size > 0;\n })\n .map((folder) => {\n const config = runtimeConfigByFolder.get(folder.id);\n const buildTree = config?.buildTree ?? folder.buildTree;\n\n return {\n folderId: folder.id,\n items: attachFolderId(\n buildTree(\n Array.from(selectedByFolder.get(folder.id) ?? []),\n folder.rowById,\n ),\n folder.id,\n ),\n TreeItemComponent: folder.TreeItemComponent,\n };\n });\n }, [folders, selectedByFolder, runtimeConfigByFolder]);\n\n const updateActiveFolderConfig = useCallback(\n (partial: Partial<FolderRuntimeConfig>) => {\n if (!activeFolder) return;\n setRuntimeConfigByFolder((prev) => {\n const current = prev.get(activeFolder.id);\n if (!current) return prev;\n const next = new Map(prev);\n next.set(activeFolder.id, { ...current, ...partial });\n return next;\n });\n },\n [activeFolder],\n );\n\n // Navigation handlers\n const handleFolderSelect = (folderId: string) => {\n setActiveFolder(folderId);\n setCurrentView(\"folder-detail\");\n };\n\n const handleNavigateToRoot = () => {\n setCurrentView(\"folder-list\");\n };\n\n const handleSelectionChange = (ids: Set<string>) => {\n if (!activeFolder) return;\n\n // Filter to only include IDs that exist in rowById (exclude auto-generated group IDs)\n const filteredIds = new Set(\n Array.from(ids).filter((id) => activeFolder.rowById.has(id)),\n );\n\n // Calculate what the total would be with this change\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 setSelection(activeFolder.id, filteredIds);\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 current = selectedByFolder.get(folderId) ?? new Set<string>();\n const nextSet = new Set(current);\n item.allExpAccessions.forEach((id) => nextSet.delete(id));\n setSelection(folderId, nextSet);\n };\n\n const handleSubmit = () => {\n const committed = cloneSelectionMap(selectedByFolder);\n setCommittedSnapshot(committed);\n onSubmit(committed);\n onClose();\n };\n\n const handleCancel = () => {\n // Restore from committed snapshot\n committedSnapshot.forEach((ids, folderId) => {\n setSelection(folderId, ids);\n });\n onCancel?.();\n onClose();\n };\n\n const handleClear = () => {\n setClearDialogOpen(true);\n };\n\n const handleReset = () => {\n setResetDialogOpen(true);\n };\n\n const confirmReset = () => {\n setResetDialogOpen(false);\n if (!initialSelection) return;\n\n // Reset to initial selection\n initialSelection.forEach((ids, folderId) => {\n setSelection(folderId, new Set(ids));\n });\n // Clear any folders not in initialSelection\n folderIds.forEach((folderId) => {\n if (!initialSelection.has(folderId)) {\n setSelection(folderId, new Set<string>());\n }\n });\n\n const newSnapshot = cloneSelectionMap(initialSelection);\n setCommittedSnapshot(newSnapshot);\n onSubmit(newSnapshot);\n };\n\n const confirmClear = () => {\n setClearDialogOpen(false);\n let newSnapshot: Map<string, Set<string>>;\n\n if (currentView === \"folder-detail\") {\n // Clear only the current folder\n clear(activeFolderId);\n newSnapshot = cloneSelectionMap(selectedByFolder);\n newSnapshot.set(activeFolderId, new Set<string>());\n } else {\n // Clear all folders\n clear();\n newSnapshot = new Map<string, Set<string>>();\n folderIds.forEach((id) => newSnapshot.set(id, new Set<string>()));\n onClear?.();\n }\n\n setCommittedSnapshot(newSnapshot);\n onSubmit(newSnapshot);\n };\n\n const ToolbarExtras = activeFolder?.ToolbarExtras;\n\n return (\n <Dialog open={open} onClose={handleCancel} maxWidth=\"lg\" fullWidth>\n <DialogTitle\n sx={{\n bgcolor: \"#0c184a\",\n color: \"white\",\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: \"white\", padding: 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 {/* Toolbar row */}\n {(folders.length > 1 ||\n (currentView === \"folder-detail\" && ToolbarExtras)) && (\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 ToolbarExtras &&\n activeConfig && (\n <ToolbarExtras\n updateConfig={updateActiveFolderConfig}\n folderId={activeFolder.id}\n label={activeFolder.label}\n config={activeConfig}\n />\n )}\n </Box>\n )}\n\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n spacing={2}\n sx={{ width: \"100%\" }}\n >\n {/* Left panel - FolderList or DataGrid */}\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 {/* Right panel - Active Tracks */}\n <Box\n sx={{\n flex: { xs: \"none\", md: 2 },\n minWidth: 0,\n width: { xs: \"100%\", md: \"auto\" },\n }}\n >\n <TreeViewWrapper\n folderTrees={folderTrees}\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={handleClear}\n >\n Clear\n </Button>\n {initialSelection && (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"small\"\n onClick={handleReset}\n >\n Reset\n </Button>\n )}\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\"];\n\nfunction CollectionCell(params: GridRenderCellParams<BiosampleRowInfo>) {\n const apiRef = useGridApiContext();\n\n if (params.rowNode.type !== \"group\") {\n return 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 { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { ExtendedTreeItemProps } from \"../../../types\";\nimport { BiosampleRowInfo } from \"./types\";\nimport { assayTypes, ontologyTypes, formatAssayType } from \"./constants\";\n\n/** Format an ID like \"h3k27ac-ENCFF922YMQ\" or \"folder::h3k27ac-ENCFF922YMQ\" to \"H3K27ac - ENCFF922YMQ\" */\nfunction formatIdLabel(id: string): string {\n // Remove folder prefix if present (e.g., \"FolderName::h3k27ac-ENCFF922YMQ\" -> \"h3k27ac-ENCFF922YMQ\")\n const rawId = id.includes(\"::\") ? id.split(\"::\").pop()! : id;\n\n const hyphenIndex = rawId.indexOf(\"-\");\n if (hyphenIndex === -1) return rawId;\n\n const assayPart = rawId.substring(0, hyphenIndex);\n const accessionPart = rawId.substring(hyphenIndex + 1);\n\n return `${formatAssayType(assayPart)} - ${accessionPart}`;\n}\n\n/**\n * Creates the root node for the tree view\n */\nfunction createRootNode(\n label: string,\n folderId: string,\n): TreeViewBaseItem<ExtendedTreeItemProps> {\n return {\n id: `${folderId}::root`,\n label,\n icon: \"folder\",\n children: [],\n allExpAccessions: [],\n };\n}\n\n/**\n * Builds tree in the sorted by assay view\n * Hierarchy: Assay -> Ontology -> DisplayName (leaf)\n *\n * This is the reverse of the default view - instead of grouping by sample first,\n * we group by assay first, making displayName the leaf node.\n *\n * @param selectedIds - list of selected row IDs\n * @param rowById - Mapping between an id and its BiosampleRowInfo object\n * @param rootLabel - Label for the root node\n * @param folderId - Folder ID to prefix tree item IDs with\n * @returns tree items for the RichTreeView\n */\nexport function buildSortedAssayTreeView(\n selectedIds: string[],\n rowById: Map<string, BiosampleRowInfo>,\n rootLabel: string = \"Biosamples\",\n folderId: string = \"\",\n): TreeViewBaseItem<ExtendedTreeItemProps>[] {\n const root = createRootNode(rootLabel, folderId);\n const assayMap = new Map<string, TreeViewBaseItem<ExtendedTreeItemProps>>();\n const ontologyMap = new Map<\n string,\n TreeViewBaseItem<ExtendedTreeItemProps>\n >();\n // Track which displayName nodes exist per assay+ontology combination\n // and which experiment IDs they contain\n const displayNameMap = new Map<\n string,\n TreeViewBaseItem<ExtendedTreeItemProps>\n >();\n\n const selectedRows = selectedIds.reduce<BiosampleRowInfo[]>((acc, id) => {\n const row = rowById.get(id);\n if (row) acc.push(row);\n return acc;\n }, []);\n\n selectedRows.forEach((row) => {\n const assayKey = `${folderId}::${row.assay}`;\n let assayNode = assayMap.get(assayKey);\n if (!assayNode) {\n assayNode = {\n id: assayKey,\n isAssayItem: true,\n label: row.assay,\n icon: \"removeable\",\n assayName: row.assay, // Add assayName so the icon renders correctly\n children: [],\n allExpAccessions: [],\n };\n assayMap.set(assayKey, assayNode);\n root.children!.push(assayNode);\n }\n\n const ontologyKey = `${folderId}::${row.assay}-${row.ontology}`;\n let ontologyNode = ontologyMap.get(ontologyKey);\n if (!ontologyNode) {\n ontologyNode = {\n id: ontologyKey,\n isAssayItem: false,\n label: row.ontology,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [],\n };\n assayNode.children!.push(ontologyNode);\n ontologyMap.set(ontologyKey, ontologyNode);\n }\n\n // DisplayName is now the leaf node (no children, no assay icon)\n const displayNameKey = `${folderId}::${row.assay}-${row.ontology}-${row.displayName}`;\n let displayNameNode = displayNameMap.get(displayNameKey);\n if (!displayNameNode) {\n displayNameNode = {\n id: displayNameKey,\n isAssayItem: false,\n label: row.displayName,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [],\n };\n ontologyNode.children!.push(displayNameNode);\n displayNameMap.set(displayNameKey, displayNameNode);\n }\n\n // Add this experiment ID to all parent nodes' allExpAccessions\n assayNode.allExpAccessions!.push(row.id);\n ontologyNode.allExpAccessions!.push(row.id);\n displayNameNode.allExpAccessions!.push(row.id);\n });\n\n // standardize the order of the assay folders\n root.children!.sort((a, b): number => {\n const aAssay = a.id.split(\"::\")[1] ?? a.id;\n const bAssay = b.id.split(\"::\")[1] ?? b.id;\n return assayTypes.indexOf(aAssay) - assayTypes.indexOf(bAssay);\n });\n\n return [root];\n}\n\n/**\n * Builds tree in the default view (sorted by ontology)\n * Hierarchy: Ontology -> DisplayName -> Experiment\n *\n * @param selectedIds - list of selected row IDs\n * @param rowById - Mapping between an id and its BiosampleRowInfo object\n * @param rootLabel - Label for the root node\n * @param folderId - Folder ID to prefix tree item IDs with\n * @returns tree items for the RichTreeView\n */\nexport function buildTreeView(\n selectedIds: string[],\n rowById: Map<string, BiosampleRowInfo>,\n rootLabel: string = \"Biosamples\",\n folderId: string = \"\",\n): TreeViewBaseItem<ExtendedTreeItemProps>[] {\n const root = createRootNode(rootLabel, folderId);\n const ontologyMap = new Map<\n string,\n TreeViewBaseItem<ExtendedTreeItemProps>\n >();\n const displayNameMap = new Map<\n string,\n TreeViewBaseItem<ExtendedTreeItemProps>\n >();\n\n const selectedRows = selectedIds.reduce<BiosampleRowInfo[]>((acc, id) => {\n const row = rowById.get(id);\n if (row) acc.push(row);\n return acc;\n }, []);\n\n selectedRows.forEach((row) => {\n if (!row) {\n return;\n }\n const ontologyKey = `${folderId}::${row.ontology}`;\n let ontologyNode = ontologyMap.get(ontologyKey);\n if (!ontologyNode) {\n ontologyNode = {\n id: ontologyKey,\n label: row.ontology,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [],\n };\n ontologyMap.set(ontologyKey, ontologyNode);\n root.children!.push(ontologyNode);\n }\n\n const displayNameKey = `${folderId}::${row.ontology}-${row.displayName}`;\n let displayNameNode = displayNameMap.get(displayNameKey);\n if (!displayNameNode) {\n displayNameNode = {\n id: displayNameKey,\n label: row.displayName,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [],\n };\n ontologyNode.children!.push(displayNameNode);\n displayNameMap.set(displayNameKey, displayNameNode);\n }\n\n const expNode: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: row.id,\n label: formatIdLabel(row.id),\n icon: \"removeable\",\n assayName: row.assay,\n children: [],\n allExpAccessions: [row.id],\n };\n displayNameNode.children!.push(expNode);\n\n ontologyNode.allExpAccessions!.push(row.id);\n displayNameNode.allExpAccessions!.push(row.id);\n });\n\n // standardize the order of the ontology folders\n root.children!.sort((a, b): number => {\n const aOntology = a.id.split(\"::\")[1] ?? a.id;\n const bOntology = b.id.split(\"::\")[1] ?? b.id;\n return ontologyTypes.indexOf(aOntology) - ontologyTypes.indexOf(bOntology);\n });\n\n return [root];\n}\n","import { FormControlLabel, Switch } from \"@mui/material\";\nimport { FolderRuntimeConfig } from \"../../types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n sortedByAssayColumns,\n sortedByAssayGroupingModel,\n sortedByAssayLeafField,\n} from \"./columns\";\nimport { buildTreeView, buildSortedAssayTreeView } from \"./treeBuilder\";\n\nexport interface AssayToggleProps {\n updateConfig: (partial: Partial<FolderRuntimeConfig>) => void;\n folderId: string;\n label: string;\n config: FolderRuntimeConfig;\n}\n\n/**\n * Biosample-specific toolbar component that toggles between\n * sample-grouped and assay-grouped views.\n *\n * When toggled, it updates the folder's runtime config to switch:\n * - columns: Different column definitions for each view\n * - groupingModel: [\"ontology\", \"displayName\"] vs [\"assay\", \"ontology\"]\n * - leafField: \"assay\" vs \"displayName\"\n * - buildTree: Different tree builder function\n */\nexport function AssayToggle({\n updateConfig,\n folderId,\n label,\n config,\n}: AssayToggleProps) {\n // Derive toggle state from current config's leafField\n const sortedByAssay = config.leafField === sortedByAssayLeafField;\n\n const handleToggle = () => {\n const newValue = !sortedByAssay;\n\n if (newValue) {\n // Switch to assay-grouped view\n updateConfig({\n columns: sortedByAssayColumns,\n groupingModel: sortedByAssayGroupingModel,\n leafField: sortedByAssayLeafField,\n buildTree: (selectedIds, rowById) =>\n buildSortedAssayTreeView(selectedIds, rowById, label, folderId),\n });\n } else {\n // Switch back to default (sample-grouped) view\n updateConfig({\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n buildTree: (selectedIds, rowById) =>\n buildTreeView(selectedIds, rowById, label, folderId),\n });\n }\n };\n\n return (\n <FormControlLabel\n sx={{ display: \"flex\", justifyContent: \"flex-end\" }}\n value=\"Sort by assay\"\n control={\n <Switch\n color=\"primary\"\n checked={sortedByAssay}\n onChange={handleToggle}\n />\n }\n label=\"Sort by assay\"\n labelPlacement=\"end\"\n />\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 { 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} from \"./columns\";\nimport { buildTreeView } from \"./treeBuilder\";\nimport { formatAssayType } from \"./constants\";\nimport { AssayToggle } from \"./AssayToggle\";\nimport BiosampleGroupingCell from \"./BiosampleGroupingCell\";\nimport { BiosampleTreeItem } from \"./BiosampleTreeItem\";\n\n/**\n * Flattens TrackInfo into RowInfo objects for DataGrid display.\n * Each track can have multiple assays, so this creates one row per assay.\n *\n * @param track - TrackInfo object from JSON data\n * @returns Array of flattened BiosampleRowInfo objects, one per assay\n */\nfunction flattenTrackIntoRows(track: BiosampleTrackInfo): BiosampleRowInfo[] {\n const { ontology, lifeStage, sampleType, displayName, collection } = track;\n\n // Sort assays so cCRE comes first, then maintain original order for the rest\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,\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\n/**\n * Transforms raw JSON data into flattened rows and a lookup map.\n * Prefixes each row ID with the folder ID to ensure uniqueness across folders.\n *\n * @param data - Raw biosample data from JSON file\n * @param folderId - Folder ID to prefix row IDs with\n * @returns Object containing rows array and rowById map\n */\nfunction transformData(data: BiosampleDataFile): {\n rowById: Map<string, BiosampleRowInfo>;\n} {\n const rows = data.tracks.flatMap(flattenTrackIntoRows).map((row) => ({\n ...row,\n id: row.id,\n }));\n const rowById = new Map<string, BiosampleRowInfo>(\n rows.map((row) => [row.id, row]),\n );\n return { rowById };\n}\n\nexport interface CreateBiosampleFolderOptions {\n /** Unique identifier for this folder */\n id: string;\n /** Display label shown in the UI */\n label: string;\n /** Optional description shown in folder cards */\n description?: string;\n /** Raw biosample data from JSON file */\n data: BiosampleDataFile;\n}\n\n/**\n * Factory function that creates a FolderDefinition for biosample data.\n *\n * This handles all the common setup for biosample folders:\n * - Transforms JSON data into flattened rows\n * - Creates the rowById lookup map\n * - Configures columns, grouping, and tree building\n *\n * @param options - Configuration options for the folder\n * @returns A complete FolderDefinition for the biosample data\n */\nexport function createBiosampleFolder(\n options: CreateBiosampleFolderOptions,\n): FolderDefinition<BiosampleRowInfo> {\n const { id, label, description, data } = options;\n const { rowById } = transformData(data);\n\n return {\n id,\n label,\n description,\n rowById,\n getRowId: (row) => row.id,\n\n // Default view: ontology-based grouping\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n\n // Build tree for selected items panel\n buildTree: (selectedIds, rowById) =>\n buildTreeView(selectedIds, rowById, label, id),\n\n // Biosample-specific toolbar: toggle between sample-grouped and assay-grouped views\n ToolbarExtras: AssayToggle,\n\n // Biosample-specific custom components\n GroupingCellComponent: BiosampleGroupingCell,\n TreeItemComponent: BiosampleTreeItem,\n };\n}\n","import { createBiosampleFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/human_with_wgbs.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 unique identifier\n */\nexport const defaultLeafField = \"id\";\n","import { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { ExtendedTreeItemProps } from \"../../../types\";\nimport { GeneRowInfo } from \"./types\";\n\n/**\n * Builds a flat tree structure for the TreeView panel (selected items)\n * Since genes have no grouping, this is a simple root -> leaf structure\n *\n * @param selectedIds - Array of selected row IDs\n * @param rowById - Map of row ID to row data\n * @param rootLabel - Label for the root node\n * @returns Tree structure for RichTreeView\n */\nexport function buildTreeView(\n selectedIds: string[],\n rowById: Map<string, GeneRowInfo>,\n rootLabel: string = \"Genes\",\n): TreeViewBaseItem<ExtendedTreeItemProps>[] {\n // Root node\n const root: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: \"root\",\n label: rootLabel,\n icon: \"folder\",\n children: [],\n allExpAccessions: [],\n };\n\n // Get selected rows and add as direct children of root\n selectedIds.forEach((id) => {\n const row = rowById.get(id);\n if (row) {\n const leafNode: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: row.id,\n label: row.displayName,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [row.id],\n };\n root.children!.push(leafNode);\n root.allExpAccessions!.push(row.id);\n }\n });\n\n return [root];\n}\n","import { FolderDefinition } from \"../../types\";\nimport { GeneDataFile, GeneRowInfo, GeneTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { buildTreeView } from \"./treeBuilder\";\n\n/**\n * Transforms a single track from JSON into a row for DataGrid\n * For genes, this is a 1:1 mapping (no flattening needed)\n */\nfunction trackToRow(track: GeneTrackInfo): GeneRowInfo {\n return {\n id: track.id,\n displayName: track.displayName,\n versions: track.versions,\n };\n}\n\n/**\n * Transforms raw JSON data into rows and lookup map\n */\nfunction transformData(data: GeneDataFile): {\n rows: GeneRowInfo[];\n rowById: Map<string, GeneRowInfo>;\n} {\n const rows = data.map(trackToRow);\n const rowById = new Map<string, GeneRowInfo>(\n rows.map((row) => [row.id, row]),\n );\n return { rows, rowById };\n}\n\nexport interface CreateGeneFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: GeneDataFile;\n}\n\n/**\n * Factory function that creates a FolderDefinition for genes\n */\nexport function createGeneFolder(\n options: CreateGeneFolderOptions,\n): FolderDefinition<GeneRowInfo> {\n const { id, label, description, data } = options;\n const { rowById } = transformData(data);\n\n return {\n id,\n label,\n description,\n rowById,\n getRowId: (row) => row.id,\n\n // Default view configuration\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n\n // Tree builder for selected items panel\n buildTree: (selectedIds, rowById) =>\n buildTreeView(selectedIds, rowById, label),\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 { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { ExtendedTreeItemProps } from \"../../../types\";\nimport { OtherTrackInfo } from \"./types\";\n\nexport function buildTreeView(\n selectedIds: string[],\n rowById: Map<string, OtherTrackInfo>,\n rootLabel: string = \"Other Tracks\",\n): TreeViewBaseItem<ExtendedTreeItemProps>[] {\n const root: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: \"root\",\n label: rootLabel,\n icon: \"folder\",\n children: [],\n allExpAccessions: [],\n };\n\n selectedIds.forEach((id) => {\n const row = rowById.get(id);\n if (row) {\n const leafNode: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: row.id,\n label: row.name,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [row.id],\n };\n root.children!.push(leafNode);\n root.allExpAccessions!.push(row.id);\n }\n });\n\n return [root];\n}\n","import { FolderDefinition } from \"../../types\";\nimport { OtherTrackDataFile, OtherTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { buildTreeView } from \"./treeBuilder\";\n\nfunction transformData(data: OtherTrackDataFile): {\n rows: OtherTrackInfo[];\n rowById: Map<string, OtherTrackInfo>;\n} {\n const rowById = new Map<string, OtherTrackInfo>(\n data.map((row) => [row.id, row]),\n );\n return { rows: data, rowById };\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 { rowById } = transformData(data);\n\n return {\n id,\n label,\n description,\n rowById,\n getRowId: (row) => row.id,\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n buildTree: (selectedIds, rowById) =>\n buildTreeView(selectedIds, rowById, label),\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 { 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\";\n\nexport {\n type Assembly,\n type FolderDefinition,\n type FolderRuntimeConfig,\n} from \"./types\";\n\nexport type { BiosampleRowInfo } from \"./biosamples/shared/types\";\nexport type { GeneRowInfo } from \"./genes/shared/types\";\nexport type { OtherTrackInfo } from \"./other-tracks/shared/types\";\n\n/**\n * Registry of folders available for each assembly.\n *\n * Each assembly can have multiple folders (e.g., biosamples, genes, etc.).\n * TrackSelect receives the folders for the current assembly and renders\n * them as tabs or a folder selector.\n *\n * To add a new folder:\n * 1. Create a folder config file (e.g., folders/genes/human.ts)\n * 2. Import and add it to the appropriate assembly array below\n */\nexport const foldersByAssembly: Record<Assembly, FolderDefinition[]> = {\n GRCh38: [humanBiosamplesFolder, humanGenesFolder, humanOtherTracksFolder],\n mm10: [mouseBiosamplesFolder, mouseGenesFolder],\n};\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 \"./TF-ChIP-Canonical-Motifs-w-Trimmed.json\";\n\n// --- Types ---\n\ntype OverlayData = {\n primary: Rect[];\n overlay: Rect[];\n};\n\ntype OverlayInteractionRect = Rect & {\n source: \"base\" | \"overlay\";\n matchedName?: string;\n pwm?: number[][];\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 darkenHexColor(color: string, score?: number) {\n if (!color.startsWith(\"#\") || color.length !== 7) return color;\n const t = 1 - (0.7 * Math.min(Math.max(score ?? 0, 0), 1000)) / 1000;\n const r = Math.round(parseInt(color.slice(1, 3), 16) * t);\n const g = Math.round(parseInt(color.slice(3, 5), 16) * t);\n const b = Math.round(parseInt(color.slice(5, 7), 16) * t);\n if ([r, g, b].some(isNaN)) return color;\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[][]; 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 ?? entry?.ppm;\n}\n\n// --- Tooltip ---\n\nfunction tfDisplayName(name?: string): string {\n return nameKey(name)?.toUpperCase() || name || \"Unknown\";\n}\n\nfunction TfPeaksTooltip(rect: OverlayInteractionRect) {\n const pwm = rect.pwm;\n const label = tfDisplayName(rect.name);\n if (!pwm || pwm.length === 0) {\n return (\n <g>\n <rect\n width={120}\n height={24}\n fill=\"white\"\n rx={2}\n style={{ filter: \"drop-shadow(0px 0px 4px rgba(0,0,0,0.25))\" }}\n />\n <text x={6} y={16} fontSize={12} fill=\"#333\">\n {label}\n </text>\n </g>\n );\n }\n const logoWidth = pwm.length * 15;\n const logoHeight = 130;\n const totalHeight = logoHeight - 5;\n return (\n <g transform={`translate(0, ${-totalHeight})`}>\n <rect\n width={logoWidth + 10}\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 <text x={5} y={16} fontSize={12} fontWeight=\"bold\" fill=\"#333\">\n {label}\n </text>\n <g transform=\"translate(5, 5)\">\n <DNALogo\n ppm={pwm}\n mode=\"INFORMATION_CONTENT\"\n width={logoWidth}\n height={logoHeight}\n />\n </g>\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,\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 rows = 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 renderSquishBigBedData(visible, x);\n }, [data, domain.end, domain.start, x, filterSet]);\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 baseColor = baseColorProp || color || Vibrant[0];\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 = darkenHexColor(rect.color || baseColor, rect.score);\n const baseRect: OverlayInteractionRect = {\n source: \"base\",\n start: realStart,\n end: realEnd,\n name: baseName,\n color: fill,\n score: rect.score,\n pwm: lookupPwm(baseName),\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 const overlayRect: OverlayInteractionRect = {\n source: \"overlay\",\n start: a.start,\n end: a.end,\n name: a.name,\n color: a.color || overlayColor,\n score: a.score,\n matchedName: baseName,\n pwm: lookupPwm(a.name),\n };\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(overlayRect)}\n onMouseOver={(e) =>\n handleHover(overlayRect, overlayRect.name || \"\", e)\n }\n onMouseOut={() => handleLeave(overlayRect)}\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: \"#1e3a8a\",\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),\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"],"names":["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","createStoreImpl","createState","state","listeners","setState","partial","replace","nextState","previousState","listener","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","createImpl","useBoundStore","create","DEFAULT_STORAGE_KEY","serializeSelection","obj","folderId","deserializeSelection","data","map","loadFromStorage","storageKey","stored","parsed","saveToStorage","serialized","buildSelectionMap","folderIds","initialSelection","initial","createSelectionStore","storedSelection","selectedByFolder","activeFolderId","store","set","next","_value","id","TreeItemRoot","styled","theme","TreeItemLabelText","CustomLabel","Icon","isAssayItem","assayName","renderIcon","other","variant","labelText","TreeItemLabel","TreeItemContent","alpha","getIconFromTreeItemType","itemType","Folder","IndeterminateCheckBoxRoundedIcon","CustomTreeItem","ref","itemId","label","disabled","onRemove","getContextProviderProps","getRootProps","getContentProps","getIconContainerProps","getCheckboxProps","getLabelProps","getGroupTransitionProps","status","useTreeItem","item","useTreeItemModel","icon","handleRemoveIconClick","TreeItemProvider","TreeItemIconContainer","TreeItemIcon","TreeItemCheckbox","Collapse","getAllExpandableItemIds","items","FolderTree","TreeItemComponent","allExpandableIds","expandedItems","setExpandedItems","prev","newIds","handleRemoveTreeItem","TreeItem","RichTreeView","_event","TreeViewWrapper","folderTrees","selectedCount","Avatar","folderTree","DEFAULT_MAX_TRACKS","cloneSelectionMap","buildRuntimeConfigMap","attachFolderId","DEFAULT_TITLE","TrackSelect","onSubmit","onCancel","onClear","title","limitDialogOpen","setLimitDialogOpen","clearDialogOpen","setClearDialogOpen","resetDialogOpen","setResetDialogOpen","runtimeConfigByFolder","setRuntimeConfigByFolder","currentView","setCurrentView","f","storeRef","useRef","setActiveFolder","setSelection","clear","committedSnapshot","setCommittedSnapshot","_a","activeFolder","activeConfig","total","maxTracksLimit","selected","buildTree","updateActiveFolderConfig","useCallback","current","handleFolderSelect","handleNavigateToRoot","handleSelectionChange","filteredIds","nextTotal","nextSet","handleSubmit","committed","handleCancel","handleClear","handleReset","confirmReset","newSnapshot","confirmClear","ToolbarExtras","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","formatIdLabel","rawId","hyphenIndex","assayPart","accessionPart","createRootNode","buildSortedAssayTreeView","rowById","rootLabel","root","assayMap","ontologyMap","displayNameMap","acc","assayKey","assayNode","ontologyKey","ontologyNode","displayNameKey","displayNameNode","a","b","aAssay","bAssay","buildTreeView","expNode","aOntology","bOntology","AssayToggle","updateConfig","sortedByAssay","handleToggle","FormControlLabel","Switch","BiosampleGroupingCell","groupingField","renderContent","BiosampleTreeItem","flattenTrackIntoRows","track","ontology","lifeStage","sampleType","collection","aIsCcre","bIsCcre","assay","experimentAccession","fileAccession","url","cpgPlus","cpgMinus","coverage","transformData","createBiosampleFolder","options","description","humanBiosamplesFolder","humanData","mouseBiosamplesFolder","mouseData","formatVersions","versions","v","versionsCol","leafNode","trackToRow","createGeneFolder","humanGenesFolder","mouseGenesFolder","nameCol","descriptionCol","createOtherTracksFolder","humanOtherTracksFolder","foldersByAssembly","_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","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","nameKey","buildOverlayIndex","rects","rect","intervalsOverlap","aStart","aEnd","bStart","bEnd","darkenHexColor","score","motifLookup","motifData","lookupPwm","entry","tfDisplayName","TfPeaksTooltip","pwm","logoWidth","logoHeight","totalHeight","DNALogo","TfPeaksSettings","useTrackStore","editTrack","input","setInput","handleChange","names","OverlayBigBedRenderer","dimensions","trackHeight","baseColorProp","overlayColorProp","filter","rest","domain","useBrowserStore","totalWidth","sideWidth","reverseX","useXTransform","filterSet","visible","renderSquishBigBedData","rowHeight","useRowHeight","height","overlayByName","baseColor","Vibrant","overlayColor","cursor","handleClick","handleHover","handleLeave","useInteraction","ClipPath","rowIndex","baseY","baseH","ri","realStart","realEnd","baseName","attached","fill","baseRect","ai","left","right","overlayRect","PEAKS_BIGBED_URL","DECORATOR_BIGBED_URL","tfPeaksTrack","TrackType","DisplayMode","ctx","primary","overlay","fetchBigBedUrl","error"],"mappings":"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","x_google_ignoreList":[0,1,2,11,12,36]}
|
|
1
|
+
{"version":3,"file":"genomebrowser-ui.es.js","sources":["../../../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","../../../node_modules/.pnpm/zustand@5.0.9_@types+react@19.2.7_react@19.2.3_use-sync-external-store@1.6.0_react@19.2.3_/node_modules/zustand/esm/vanilla.mjs","../../../node_modules/.pnpm/zustand@5.0.9_@types+react@19.2.7_react@19.2.3_use-sync-external-store@1.6.0_react@19.2.3_/node_modules/zustand/esm/react.mjs","../src/TrackSelect/store.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/treeBuilder.ts","../src/TrackSelect/Folders/biosamples/shared/AssayToggle.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleGroupingCell.tsx","../src/TrackSelect/Folders/biosamples/shared/BiosampleTreeItem.tsx","../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/treeBuilder.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","../src/TrackSelect/Folders/other-tracks/shared/treeBuilder.ts","../src/TrackSelect/Folders/other-tracks/shared/createFolder.ts","../src/TrackSelect/Folders/other-tracks/human.ts","../src/TrackSelect/Folders/index.ts","../../../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"],"sourcesContent":["/**\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 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) => 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) => <GroupingCell {...params} />,\n }}\n columnVisibilityModel={columnVisibilityModel}\n onColumnVisibilityModelChange={setColumnVisibilityModel}\n onRowSelectionModelChange={(selection) => {\n const ids = (selection as any)?.ids ?? new Set<string>();\n onSelectionChange(new Set(ids));\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: \"#0c184a\",\n color: \"white\",\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\n variant=\"contained\"\n color=\"primary\"\n onClick={onClose}\n autoFocus\n >\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: \"#0c184a\",\n color: \"white\",\n fontWeight: \"bold\",\n }}\n >\n Reset to Default\n </DialogTitle>\n <DialogContent sx={{ mt: 2 }}>\n <DialogContentText>\n Are you sure you want to reset all selections to the default?\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.rowById.size.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","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n","import React from 'react';\nimport { createStore } from 'zustand/vanilla';\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = React.useSyncExternalStore(\n api.subscribe,\n React.useCallback(() => selector(api.getState()), [api, selector]),\n React.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = createStore(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\nexport { create, useStore };\n","import { create, StoreApi, UseBoundStore } from \"zustand\";\nimport { SelectionAction, SelectionState } from \"./types\";\n\nexport type SelectionStoreInstance = UseBoundStore<\n StoreApi<SelectionState & SelectionAction>\n>;\n\nconst DEFAULT_STORAGE_KEY = \"trackSelect_selection\";\n\ntype SerializedSelection = Record<string, string[]>;\n\nconst serializeSelection = (\n selection: Map<string, Set<string>>,\n): SerializedSelection => {\n const obj: SerializedSelection = {};\n selection.forEach((ids, folderId) => {\n obj[folderId] = Array.from(ids);\n });\n return obj;\n};\n\nconst deserializeSelection = (\n data: SerializedSelection,\n): Map<string, Set<string>> => {\n const map = new Map<string, Set<string>>();\n Object.entries(data).forEach(([folderId, ids]) => {\n map.set(folderId, new Set(ids));\n });\n return map;\n};\n\nconst loadFromStorage = (\n storageKey: string,\n): Map<string, Set<string>> | undefined => {\n try {\n const stored = sessionStorage.getItem(storageKey);\n if (stored) {\n const parsed = JSON.parse(stored) as SerializedSelection;\n return deserializeSelection(parsed);\n }\n } catch {\n // Ignore storage errors\n }\n return undefined;\n};\n\nconst saveToStorage = (\n selection: Map<string, Set<string>>,\n storageKey: string,\n) => {\n try {\n const serialized = serializeSelection(selection);\n sessionStorage.setItem(storageKey, JSON.stringify(serialized));\n } catch {\n // Ignore storage errors\n }\n};\n\nconst buildSelectionMap = (\n folderIds: string[],\n initialSelection?: Map<string, Set<string>>,\n) => {\n const map = new Map<string, Set<string>>();\n folderIds.forEach((folderId) => {\n const initial = initialSelection?.get(folderId);\n map.set(folderId, initial ? new Set(initial) : new Set<string>());\n });\n return map;\n};\n\nexport function createSelectionStore(\n folderIds: string[],\n storageKey: string = DEFAULT_STORAGE_KEY,\n initialSelection?: Map<string, Set<string>>,\n) {\n const storedSelection = loadFromStorage(storageKey);\n // Storage wins: use stored if exists, else fall back to initialSelection\n const selectedByFolder = buildSelectionMap(\n folderIds,\n storedSelection ?? initialSelection,\n );\n const activeFolderId = folderIds[0] ?? \"\";\n\n const store = create<SelectionState & SelectionAction>((set) => ({\n selectedByFolder,\n activeFolderId,\n clear: (folderId?: string) =>\n set((state) => {\n if (folderId) {\n const next = new Map(state.selectedByFolder);\n next.set(folderId, new Set<string>());\n return { selectedByFolder: next };\n }\n\n const next = new Map<string, Set<string>>();\n state.selectedByFolder.forEach((_value, id) => {\n next.set(id, new Set<string>());\n });\n return { selectedByFolder: next };\n }),\n setActiveFolder: (folderId: string) =>\n set(() => ({ activeFolderId: folderId })),\n setSelection: (folderId: string, ids: Set<string>) =>\n set((state) => {\n const next = new Map(state.selectedByFolder);\n next.set(folderId, new Set(ids));\n return { selectedByFolder: next };\n }),\n }));\n\n // Subscribe to changes and persist to storage\n store.subscribe((state) => {\n saveToStorage(state.selectedByFolder, storageKey);\n });\n\n return store;\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)({\n color: \"black\",\n fontFamily: \"inherit\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n});\n\nfunction CustomLabel({\n icon: Icon,\n children,\n isAssayItem,\n assayName,\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 {assayName && renderIcon && (\n <Box sx={{ flexShrink: 0 }}>{renderIcon(assayName)}</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({ id, itemId, children, label, disabled, rootRef: ref });\n\n const item = useTreeItemModel<ExtendedTreeItemProps>(itemId)!;\n const icon = getIconFromTreeItemType(item.icon, renderIcon);\n\n const handleRemoveIconClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onRemove?.(item);\n };\n\n return (\n <TreeItemProvider {...getContextProviderProps()}>\n <TreeItemRoot {...getRootProps(other)}>\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 isAssayItem: item.isAssayItem,\n assayName: item.assayName,\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 { useEffect, useMemo, useState } from \"react\";\nimport {\n CustomTreeItemProps,\n ExtendedTreeItemProps,\n FolderTreeConfig,\n TreeViewWrapperProps,\n} from \"../types\";\nimport { CustomTreeItem } from \"./CustomTreeItem\";\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 TreeItemComponent,\n onRemove,\n}: {\n items: FolderTreeConfig[\"items\"];\n TreeItemComponent: FolderTreeConfig[\"TreeItemComponent\"];\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 = TreeItemComponent ?? CustomTreeItem;\n\n return (\n <RichTreeView\n items={items}\n expandedItems={expandedItems}\n onExpandedItemsChange={(_event, ids) => 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 folderTrees,\n selectedCount,\n onRemove,\n}: TreeViewWrapperProps) {\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 TreeItemComponent={folderTree.TreeItemComponent}\n onRemove={onRemove}\n />\n ))}\n </Box>\n </Paper>\n );\n}\n","import 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 { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\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 { FolderDefinition, FolderRuntimeConfig } from \"./Folders/types\";\nimport { createSelectionStore, SelectionStoreInstance } from \"./store\";\nimport { TreeViewWrapper } from \"./TreeView/TreeViewWrapper\";\nimport { ExtendedTreeItemProps } from \"./types\";\n\nexport interface TrackSelectProps {\n folders: FolderDefinition[];\n onSubmit: (selectedByFolder: Map<string, Set<string>>) => void;\n onCancel?: () => void;\n onClear?: () => void;\n maxTracks?: number;\n storageKey?: string;\n /** Initial selection to use when no stored selection exists */\n initialSelection?: Map<string, Set<string>>;\n open: boolean;\n onClose: () => void;\n title?: string;\n}\n\nconst DEFAULT_MAX_TRACKS = 30;\n\ntype ViewState = \"folder-list\" | \"folder-detail\";\n\nconst cloneSelectionMap = (selection: Map<string, Set<string>>) => {\n const map = new Map<string, Set<string>>();\n selection.forEach((ids, folderId) => {\n map.set(folderId, new Set(ids));\n });\n return map;\n};\n\nconst buildRuntimeConfigMap = (folders: FolderDefinition[]) => {\n const map = new Map<string, FolderRuntimeConfig>();\n folders.forEach((folder) => {\n map.set(folder.id, {\n columns: folder.columns,\n groupingModel: folder.groupingModel,\n leafField: folder.leafField,\n });\n });\n return map;\n};\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\nconst DEFAULT_TITLE = \"Track Select\";\n\nexport default function TrackSelect({\n folders,\n onSubmit,\n onCancel,\n onClear,\n maxTracks,\n storageKey,\n initialSelection,\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 [runtimeConfigByFolder, setRuntimeConfigByFolder] = useState(() =>\n buildRuntimeConfigMap(folders),\n );\n\n // View state: folder list or folder detail\n const [currentView, setCurrentView] = useState<ViewState>(() =>\n folders.length > 1 ? \"folder-list\" : \"folder-detail\",\n );\n\n // Create and memoize the selection store\n const folderIds = useMemo(() => folders.map((f) => f.id), [folders]);\n const storeRef = useRef<SelectionStoreInstance | null>(null);\n if (!storeRef.current) {\n storeRef.current = createSelectionStore(\n folderIds,\n storageKey,\n initialSelection,\n );\n }\n const store = storeRef.current;\n\n // Subscribe to store changes\n const selectedByFolder = store((state) => state.selectedByFolder);\n const activeFolderId = store((state) => state.activeFolderId);\n const setActiveFolder = store((state) => state.setActiveFolder);\n const setSelection = store((state) => state.setSelection);\n const clear = store((state) => state.clear);\n\n // Keep a committed snapshot for cancel functionality\n const [committedSnapshot, setCommittedSnapshot] = useState(() =>\n cloneSelectionMap(selectedByFolder),\n );\n\n useEffect(() => {\n setRuntimeConfigByFolder(buildRuntimeConfigMap(folders));\n // Ensure active folder is valid\n if (!folders.some((folder) => folder.id === activeFolderId)) {\n setActiveFolder(folders[0]?.id ?? \"\");\n }\n // Update view state if folder count changes\n if (folders.length <= 1) {\n setCurrentView(\"folder-detail\");\n }\n }, [folders, activeFolderId, setActiveFolder]);\n\n const activeFolder = useMemo(() => {\n return folders.find((folder) => folder.id === activeFolderId) ?? folders[0];\n }, [folders, activeFolderId]);\n\n const activeConfig = useMemo(() => {\n if (!activeFolder) return undefined;\n return (\n runtimeConfigByFolder.get(activeFolder.id) ?? {\n columns: activeFolder.columns,\n groupingModel: activeFolder.groupingModel,\n leafField: activeFolder.leafField,\n }\n );\n }, [runtimeConfigByFolder, activeFolder]);\n\n const selectedIds = useMemo(() => {\n if (!activeFolder) return new Set<string>();\n return new Set(selectedByFolder.get(activeFolder.id) ?? []);\n }, [selectedByFolder, activeFolder]);\n\n const selectedCount = useMemo(() => {\n let total = 0;\n selectedByFolder.forEach((ids) => {\n total += ids.size;\n });\n return total;\n }, [selectedByFolder]);\n\n const maxTracksLimit = maxTracks ?? DEFAULT_MAX_TRACKS;\n\n const rows = useMemo(() => {\n if (!activeFolder) return [];\n return Array.from(activeFolder.rowById.values());\n }, [activeFolder]);\n\n const folderTrees = useMemo(() => {\n return folders\n .filter((folder) => {\n const selected = selectedByFolder.get(folder.id);\n return selected && selected.size > 0;\n })\n .map((folder) => {\n const config = runtimeConfigByFolder.get(folder.id);\n const buildTree = config?.buildTree ?? folder.buildTree;\n\n return {\n folderId: folder.id,\n items: attachFolderId(\n buildTree(\n Array.from(selectedByFolder.get(folder.id) ?? []),\n folder.rowById,\n ),\n folder.id,\n ),\n TreeItemComponent: folder.TreeItemComponent,\n };\n });\n }, [folders, selectedByFolder, runtimeConfigByFolder]);\n\n const updateActiveFolderConfig = useCallback(\n (partial: Partial<FolderRuntimeConfig>) => {\n if (!activeFolder) return;\n setRuntimeConfigByFolder((prev) => {\n const current = prev.get(activeFolder.id);\n if (!current) return prev;\n const next = new Map(prev);\n next.set(activeFolder.id, { ...current, ...partial });\n return next;\n });\n },\n [activeFolder],\n );\n\n // Navigation handlers\n const handleFolderSelect = (folderId: string) => {\n setActiveFolder(folderId);\n setCurrentView(\"folder-detail\");\n };\n\n const handleNavigateToRoot = () => {\n setCurrentView(\"folder-list\");\n };\n\n const handleSelectionChange = (ids: Set<string>) => {\n if (!activeFolder) return;\n\n // Filter to only include IDs that exist in rowById (exclude auto-generated group IDs)\n const filteredIds = new Set(\n Array.from(ids).filter((id) => activeFolder.rowById.has(id)),\n );\n\n // Calculate what the total would be with this change\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 setSelection(activeFolder.id, filteredIds);\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 current = selectedByFolder.get(folderId) ?? new Set<string>();\n const nextSet = new Set(current);\n item.allExpAccessions.forEach((id) => nextSet.delete(id));\n setSelection(folderId, nextSet);\n };\n\n const handleSubmit = () => {\n const committed = cloneSelectionMap(selectedByFolder);\n setCommittedSnapshot(committed);\n onSubmit(committed);\n onClose();\n };\n\n const handleCancel = () => {\n // Restore from committed snapshot\n committedSnapshot.forEach((ids, folderId) => {\n setSelection(folderId, ids);\n });\n onCancel?.();\n onClose();\n };\n\n const handleClear = () => {\n setClearDialogOpen(true);\n };\n\n const handleReset = () => {\n setResetDialogOpen(true);\n };\n\n const confirmReset = () => {\n setResetDialogOpen(false);\n if (!initialSelection) return;\n\n // Reset to initial selection\n initialSelection.forEach((ids, folderId) => {\n setSelection(folderId, new Set(ids));\n });\n // Clear any folders not in initialSelection\n folderIds.forEach((folderId) => {\n if (!initialSelection.has(folderId)) {\n setSelection(folderId, new Set<string>());\n }\n });\n\n const newSnapshot = cloneSelectionMap(initialSelection);\n setCommittedSnapshot(newSnapshot);\n onSubmit(newSnapshot);\n };\n\n const confirmClear = () => {\n setClearDialogOpen(false);\n let newSnapshot: Map<string, Set<string>>;\n\n if (currentView === \"folder-detail\") {\n // Clear only the current folder\n clear(activeFolderId);\n newSnapshot = cloneSelectionMap(selectedByFolder);\n newSnapshot.set(activeFolderId, new Set<string>());\n } else {\n // Clear all folders\n clear();\n newSnapshot = new Map<string, Set<string>>();\n folderIds.forEach((id) => newSnapshot.set(id, new Set<string>()));\n onClear?.();\n }\n\n setCommittedSnapshot(newSnapshot);\n onSubmit(newSnapshot);\n };\n\n const ToolbarExtras = activeFolder?.ToolbarExtras;\n\n return (\n <Dialog open={open} onClose={handleCancel} maxWidth=\"lg\" fullWidth>\n <DialogTitle\n sx={{\n bgcolor: \"#0c184a\",\n color: \"white\",\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: \"white\", padding: 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 {/* Toolbar row */}\n {(folders.length > 1 ||\n (currentView === \"folder-detail\" && ToolbarExtras)) && (\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 ToolbarExtras &&\n activeConfig && (\n <ToolbarExtras\n updateConfig={updateActiveFolderConfig}\n folderId={activeFolder.id}\n label={activeFolder.label}\n config={activeConfig}\n />\n )}\n </Box>\n )}\n\n <Stack\n direction={{ xs: \"column\", md: \"row\" }}\n spacing={2}\n sx={{ width: \"100%\" }}\n >\n {/* Left panel - FolderList or DataGrid */}\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 {/* Right panel - Active Tracks */}\n <Box\n sx={{\n flex: { xs: \"none\", md: 2 },\n minWidth: 0,\n width: { xs: \"100%\", md: \"auto\" },\n }}\n >\n <TreeViewWrapper\n folderTrees={folderTrees}\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={handleClear}\n >\n Clear\n </Button>\n {initialSelection && (\n <Button\n variant=\"outlined\"\n color=\"secondary\"\n size=\"small\"\n onClick={handleReset}\n >\n Reset\n </Button>\n )}\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\"];\n\nfunction CollectionCell(params: GridRenderCellParams<BiosampleRowInfo>) {\n const apiRef = useGridApiContext();\n\n if (params.rowNode.type !== \"group\") {\n return 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 { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { ExtendedTreeItemProps } from \"../../../types\";\nimport { BiosampleRowInfo } from \"./types\";\nimport { assayTypes, ontologyTypes, formatAssayType } from \"./constants\";\n\n/** Format an ID like \"h3k27ac-ENCFF922YMQ\" or \"folder::h3k27ac-ENCFF922YMQ\" to \"H3K27ac - ENCFF922YMQ\" */\nfunction formatIdLabel(id: string): string {\n // Remove folder prefix if present (e.g., \"FolderName::h3k27ac-ENCFF922YMQ\" -> \"h3k27ac-ENCFF922YMQ\")\n const rawId = id.includes(\"::\") ? id.split(\"::\").pop()! : id;\n\n const hyphenIndex = rawId.indexOf(\"-\");\n if (hyphenIndex === -1) return rawId;\n\n const assayPart = rawId.substring(0, hyphenIndex);\n const accessionPart = rawId.substring(hyphenIndex + 1);\n\n return `${formatAssayType(assayPart)} - ${accessionPart}`;\n}\n\n/**\n * Creates the root node for the tree view\n */\nfunction createRootNode(\n label: string,\n folderId: string,\n): TreeViewBaseItem<ExtendedTreeItemProps> {\n return {\n id: `${folderId}::root`,\n label,\n icon: \"folder\",\n children: [],\n allExpAccessions: [],\n };\n}\n\n/**\n * Builds tree in the sorted by assay view\n * Hierarchy: Assay -> Ontology -> DisplayName (leaf)\n *\n * This is the reverse of the default view - instead of grouping by sample first,\n * we group by assay first, making displayName the leaf node.\n *\n * @param selectedIds - list of selected row IDs\n * @param rowById - Mapping between an id and its BiosampleRowInfo object\n * @param rootLabel - Label for the root node\n * @param folderId - Folder ID to prefix tree item IDs with\n * @returns tree items for the RichTreeView\n */\nexport function buildSortedAssayTreeView(\n selectedIds: string[],\n rowById: Map<string, BiosampleRowInfo>,\n rootLabel: string = \"Biosamples\",\n folderId: string = \"\",\n): TreeViewBaseItem<ExtendedTreeItemProps>[] {\n const root = createRootNode(rootLabel, folderId);\n const assayMap = new Map<string, TreeViewBaseItem<ExtendedTreeItemProps>>();\n const ontologyMap = new Map<\n string,\n TreeViewBaseItem<ExtendedTreeItemProps>\n >();\n // Track which displayName nodes exist per assay+ontology combination\n // and which experiment IDs they contain\n const displayNameMap = new Map<\n string,\n TreeViewBaseItem<ExtendedTreeItemProps>\n >();\n\n const selectedRows = selectedIds.reduce<BiosampleRowInfo[]>((acc, id) => {\n const row = rowById.get(id);\n if (row) acc.push(row);\n return acc;\n }, []);\n\n selectedRows.forEach((row) => {\n const assayKey = `${folderId}::${row.assay}`;\n let assayNode = assayMap.get(assayKey);\n if (!assayNode) {\n assayNode = {\n id: assayKey,\n isAssayItem: true,\n label: row.assay,\n icon: \"removeable\",\n assayName: row.assay, // Add assayName so the icon renders correctly\n children: [],\n allExpAccessions: [],\n };\n assayMap.set(assayKey, assayNode);\n root.children!.push(assayNode);\n }\n\n const ontologyKey = `${folderId}::${row.assay}-${row.ontology}`;\n let ontologyNode = ontologyMap.get(ontologyKey);\n if (!ontologyNode) {\n ontologyNode = {\n id: ontologyKey,\n isAssayItem: false,\n label: row.ontology,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [],\n };\n assayNode.children!.push(ontologyNode);\n ontologyMap.set(ontologyKey, ontologyNode);\n }\n\n // DisplayName is now the leaf node (no children, no assay icon)\n const displayNameKey = `${folderId}::${row.assay}-${row.ontology}-${row.displayName}`;\n let displayNameNode = displayNameMap.get(displayNameKey);\n if (!displayNameNode) {\n displayNameNode = {\n id: displayNameKey,\n isAssayItem: false,\n label: row.displayName,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [],\n };\n ontologyNode.children!.push(displayNameNode);\n displayNameMap.set(displayNameKey, displayNameNode);\n }\n\n // Add this experiment ID to all parent nodes' allExpAccessions\n assayNode.allExpAccessions!.push(row.id);\n ontologyNode.allExpAccessions!.push(row.id);\n displayNameNode.allExpAccessions!.push(row.id);\n });\n\n // standardize the order of the assay folders\n root.children!.sort((a, b): number => {\n const aAssay = a.id.split(\"::\")[1] ?? a.id;\n const bAssay = b.id.split(\"::\")[1] ?? b.id;\n return assayTypes.indexOf(aAssay) - assayTypes.indexOf(bAssay);\n });\n\n return [root];\n}\n\n/**\n * Builds tree in the default view (sorted by ontology)\n * Hierarchy: Ontology -> DisplayName -> Experiment\n *\n * @param selectedIds - list of selected row IDs\n * @param rowById - Mapping between an id and its BiosampleRowInfo object\n * @param rootLabel - Label for the root node\n * @param folderId - Folder ID to prefix tree item IDs with\n * @returns tree items for the RichTreeView\n */\nexport function buildTreeView(\n selectedIds: string[],\n rowById: Map<string, BiosampleRowInfo>,\n rootLabel: string = \"Biosamples\",\n folderId: string = \"\",\n): TreeViewBaseItem<ExtendedTreeItemProps>[] {\n const root = createRootNode(rootLabel, folderId);\n const ontologyMap = new Map<\n string,\n TreeViewBaseItem<ExtendedTreeItemProps>\n >();\n const displayNameMap = new Map<\n string,\n TreeViewBaseItem<ExtendedTreeItemProps>\n >();\n\n const selectedRows = selectedIds.reduce<BiosampleRowInfo[]>((acc, id) => {\n const row = rowById.get(id);\n if (row) acc.push(row);\n return acc;\n }, []);\n\n selectedRows.forEach((row) => {\n if (!row) {\n return;\n }\n const ontologyKey = `${folderId}::${row.ontology}`;\n let ontologyNode = ontologyMap.get(ontologyKey);\n if (!ontologyNode) {\n ontologyNode = {\n id: ontologyKey,\n label: row.ontology,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [],\n };\n ontologyMap.set(ontologyKey, ontologyNode);\n root.children!.push(ontologyNode);\n }\n\n const displayNameKey = `${folderId}::${row.ontology}-${row.displayName}`;\n let displayNameNode = displayNameMap.get(displayNameKey);\n if (!displayNameNode) {\n displayNameNode = {\n id: displayNameKey,\n label: row.displayName,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [],\n };\n ontologyNode.children!.push(displayNameNode);\n displayNameMap.set(displayNameKey, displayNameNode);\n }\n\n const expNode: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: row.id,\n label: formatIdLabel(row.id),\n icon: \"removeable\",\n assayName: row.assay,\n children: [],\n allExpAccessions: [row.id],\n };\n displayNameNode.children!.push(expNode);\n\n ontologyNode.allExpAccessions!.push(row.id);\n displayNameNode.allExpAccessions!.push(row.id);\n });\n\n // standardize the order of the ontology folders\n root.children!.sort((a, b): number => {\n const aOntology = a.id.split(\"::\")[1] ?? a.id;\n const bOntology = b.id.split(\"::\")[1] ?? b.id;\n return ontologyTypes.indexOf(aOntology) - ontologyTypes.indexOf(bOntology);\n });\n\n return [root];\n}\n","import { FormControlLabel, Switch } from \"@mui/material\";\nimport { FolderRuntimeConfig } from \"../../types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n sortedByAssayColumns,\n sortedByAssayGroupingModel,\n sortedByAssayLeafField,\n} from \"./columns\";\nimport { buildTreeView, buildSortedAssayTreeView } from \"./treeBuilder\";\n\nexport interface AssayToggleProps {\n updateConfig: (partial: Partial<FolderRuntimeConfig>) => void;\n folderId: string;\n label: string;\n config: FolderRuntimeConfig;\n}\n\n/**\n * Biosample-specific toolbar component that toggles between\n * sample-grouped and assay-grouped views.\n *\n * When toggled, it updates the folder's runtime config to switch:\n * - columns: Different column definitions for each view\n * - groupingModel: [\"ontology\", \"displayName\"] vs [\"assay\", \"ontology\"]\n * - leafField: \"assay\" vs \"displayName\"\n * - buildTree: Different tree builder function\n */\nexport function AssayToggle({\n updateConfig,\n folderId,\n label,\n config,\n}: AssayToggleProps) {\n // Derive toggle state from current config's leafField\n const sortedByAssay = config.leafField === sortedByAssayLeafField;\n\n const handleToggle = () => {\n const newValue = !sortedByAssay;\n\n if (newValue) {\n // Switch to assay-grouped view\n updateConfig({\n columns: sortedByAssayColumns,\n groupingModel: sortedByAssayGroupingModel,\n leafField: sortedByAssayLeafField,\n buildTree: (selectedIds, rowById) =>\n buildSortedAssayTreeView(selectedIds, rowById, label, folderId),\n });\n } else {\n // Switch back to default (sample-grouped) view\n updateConfig({\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n buildTree: (selectedIds, rowById) =>\n buildTreeView(selectedIds, rowById, label, folderId),\n });\n }\n };\n\n return (\n <FormControlLabel\n sx={{ display: \"flex\", justifyContent: \"flex-end\" }}\n value=\"Sort by assay\"\n control={\n <Switch\n color=\"primary\"\n checked={sortedByAssay}\n onChange={handleToggle}\n />\n }\n label=\"Sort by assay\"\n labelPlacement=\"end\"\n />\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 { 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} from \"./columns\";\nimport { buildTreeView } from \"./treeBuilder\";\nimport { formatAssayType } from \"./constants\";\nimport { AssayToggle } from \"./AssayToggle\";\nimport BiosampleGroupingCell from \"./BiosampleGroupingCell\";\nimport { BiosampleTreeItem } from \"./BiosampleTreeItem\";\n\n/**\n * Flattens TrackInfo into RowInfo objects for DataGrid display.\n * Each track can have multiple assays, so this creates one row per assay.\n *\n * @param track - TrackInfo object from JSON data\n * @returns Array of flattened BiosampleRowInfo objects, one per assay\n */\nfunction flattenTrackIntoRows(track: BiosampleTrackInfo): BiosampleRowInfo[] {\n const { ontology, lifeStage, sampleType, displayName, collection } = track;\n\n // Sort assays so cCRE comes first, then maintain original order for the rest\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,\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\n/**\n * Transforms raw JSON data into flattened rows and a lookup map.\n * Prefixes each row ID with the folder ID to ensure uniqueness across folders.\n *\n * @param data - Raw biosample data from JSON file\n * @param folderId - Folder ID to prefix row IDs with\n * @returns Object containing rows array and rowById map\n */\nfunction transformData(data: BiosampleDataFile): {\n rowById: Map<string, BiosampleRowInfo>;\n} {\n const rows = data.tracks.flatMap(flattenTrackIntoRows).map((row) => ({\n ...row,\n id: row.id,\n }));\n const rowById = new Map<string, BiosampleRowInfo>(\n rows.map((row) => [row.id, row]),\n );\n return { rowById };\n}\n\nexport interface CreateBiosampleFolderOptions {\n /** Unique identifier for this folder */\n id: string;\n /** Display label shown in the UI */\n label: string;\n /** Optional description shown in folder cards */\n description?: string;\n /** Raw biosample data from JSON file */\n data: BiosampleDataFile;\n}\n\n/**\n * Factory function that creates a FolderDefinition for biosample data.\n *\n * This handles all the common setup for biosample folders:\n * - Transforms JSON data into flattened rows\n * - Creates the rowById lookup map\n * - Configures columns, grouping, and tree building\n *\n * @param options - Configuration options for the folder\n * @returns A complete FolderDefinition for the biosample data\n */\nexport function createBiosampleFolder(\n options: CreateBiosampleFolderOptions,\n): FolderDefinition<BiosampleRowInfo> {\n const { id, label, description, data } = options;\n const { rowById } = transformData(data);\n\n return {\n id,\n label,\n description,\n rowById,\n getRowId: (row) => row.id,\n\n // Default view: ontology-based grouping\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n\n // Build tree for selected items panel\n buildTree: (selectedIds, rowById) =>\n buildTreeView(selectedIds, rowById, label, id),\n\n // Biosample-specific toolbar: toggle between sample-grouped and assay-grouped views\n ToolbarExtras: AssayToggle,\n\n // Biosample-specific custom components\n GroupingCellComponent: BiosampleGroupingCell,\n TreeItemComponent: BiosampleTreeItem,\n };\n}\n","import { createBiosampleFolder } from \"./shared/createFolder\";\nimport humanData from \"./data/human_with_wgbs.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 unique identifier\n */\nexport const defaultLeafField = \"id\";\n","import { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { ExtendedTreeItemProps } from \"../../../types\";\nimport { GeneRowInfo } from \"./types\";\n\n/**\n * Builds a flat tree structure for the TreeView panel (selected items)\n * Since genes have no grouping, this is a simple root -> leaf structure\n *\n * @param selectedIds - Array of selected row IDs\n * @param rowById - Map of row ID to row data\n * @param rootLabel - Label for the root node\n * @returns Tree structure for RichTreeView\n */\nexport function buildTreeView(\n selectedIds: string[],\n rowById: Map<string, GeneRowInfo>,\n rootLabel: string = \"Genes\",\n): TreeViewBaseItem<ExtendedTreeItemProps>[] {\n // Root node\n const root: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: \"root\",\n label: rootLabel,\n icon: \"folder\",\n children: [],\n allExpAccessions: [],\n };\n\n // Get selected rows and add as direct children of root\n selectedIds.forEach((id) => {\n const row = rowById.get(id);\n if (row) {\n const leafNode: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: row.id,\n label: row.displayName,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [row.id],\n };\n root.children!.push(leafNode);\n root.allExpAccessions!.push(row.id);\n }\n });\n\n return [root];\n}\n","import { FolderDefinition } from \"../../types\";\nimport { GeneDataFile, GeneRowInfo, GeneTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { buildTreeView } from \"./treeBuilder\";\n\n/**\n * Transforms a single track from JSON into a row for DataGrid\n * For genes, this is a 1:1 mapping (no flattening needed)\n */\nfunction trackToRow(track: GeneTrackInfo): GeneRowInfo {\n return {\n id: track.id,\n displayName: track.displayName,\n versions: track.versions,\n };\n}\n\n/**\n * Transforms raw JSON data into rows and lookup map\n */\nfunction transformData(data: GeneDataFile): {\n rows: GeneRowInfo[];\n rowById: Map<string, GeneRowInfo>;\n} {\n const rows = data.map(trackToRow);\n const rowById = new Map<string, GeneRowInfo>(\n rows.map((row) => [row.id, row]),\n );\n return { rows, rowById };\n}\n\nexport interface CreateGeneFolderOptions {\n id: string;\n label: string;\n description?: string;\n data: GeneDataFile;\n}\n\n/**\n * Factory function that creates a FolderDefinition for genes\n */\nexport function createGeneFolder(\n options: CreateGeneFolderOptions,\n): FolderDefinition<GeneRowInfo> {\n const { id, label, description, data } = options;\n const { rowById } = transformData(data);\n\n return {\n id,\n label,\n description,\n rowById,\n getRowId: (row) => row.id,\n\n // Default view configuration\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n\n // Tree builder for selected items panel\n buildTree: (selectedIds, rowById) =>\n buildTreeView(selectedIds, rowById, label),\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 { TreeViewBaseItem } from \"@mui/x-tree-view\";\nimport { ExtendedTreeItemProps } from \"../../../types\";\nimport { OtherTrackInfo } from \"./types\";\n\nexport function buildTreeView(\n selectedIds: string[],\n rowById: Map<string, OtherTrackInfo>,\n rootLabel: string = \"Other Tracks\",\n): TreeViewBaseItem<ExtendedTreeItemProps>[] {\n const root: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: \"root\",\n label: rootLabel,\n icon: \"folder\",\n children: [],\n allExpAccessions: [],\n };\n\n selectedIds.forEach((id) => {\n const row = rowById.get(id);\n if (row) {\n const leafNode: TreeViewBaseItem<ExtendedTreeItemProps> = {\n id: row.id,\n label: row.name,\n icon: \"removeable\",\n children: [],\n allExpAccessions: [row.id],\n };\n root.children!.push(leafNode);\n root.allExpAccessions!.push(row.id);\n }\n });\n\n return [root];\n}\n","import { FolderDefinition } from \"../../types\";\nimport { OtherTrackDataFile, OtherTrackInfo } from \"./types\";\nimport {\n defaultColumns,\n defaultGroupingModel,\n defaultLeafField,\n} from \"./columns\";\nimport { buildTreeView } from \"./treeBuilder\";\n\nfunction transformData(data: OtherTrackDataFile): {\n rows: OtherTrackInfo[];\n rowById: Map<string, OtherTrackInfo>;\n} {\n const rowById = new Map<string, OtherTrackInfo>(\n data.map((row) => [row.id, row]),\n );\n return { rows: data, rowById };\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 { rowById } = transformData(data);\n\n return {\n id,\n label,\n description,\n rowById,\n getRowId: (row) => row.id,\n columns: defaultColumns,\n groupingModel: defaultGroupingModel,\n leafField: defaultLeafField,\n buildTree: (selectedIds, rowById) =>\n buildTreeView(selectedIds, rowById, label),\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 { 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\";\n\nexport {\n type Assembly,\n type FolderDefinition,\n type FolderRuntimeConfig,\n} from \"./types\";\n\nexport type { BiosampleRowInfo } from \"./biosamples/shared/types\";\nexport type { GeneRowInfo } from \"./genes/shared/types\";\nexport type { OtherTrackInfo } from \"./other-tracks/shared/types\";\n\n/**\n * Registry of folders available for each assembly.\n *\n * Each assembly can have multiple folders (e.g., biosamples, genes, etc.).\n * TrackSelect receives the folders for the current assembly and renders\n * them as tabs or a folder selector.\n *\n * To add a new folder:\n * 1. Create a folder config file (e.g., folders/genes/human.ts)\n * 2. Import and add it to the appropriate assembly array below\n */\nexport const foldersByAssembly: Record<Assembly, FolderDefinition[]> = {\n GRCh38: [humanGenesFolder, humanBiosamplesFolder, humanOtherTracksFolder],\n mm10: [mouseGenesFolder, mouseBiosamplesFolder],\n};\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"],"names":["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","createStoreImpl","createState","state","listeners","setState","partial","replace","nextState","previousState","listener","getState","api","initialState","createStore","identity","arg","useStore","selector","slice","createImpl","useBoundStore","create","DEFAULT_STORAGE_KEY","serializeSelection","obj","folderId","deserializeSelection","data","map","loadFromStorage","storageKey","stored","parsed","saveToStorage","serialized","buildSelectionMap","folderIds","initialSelection","initial","createSelectionStore","storedSelection","selectedByFolder","activeFolderId","store","set","next","_value","id","TreeItemRoot","styled","theme","TreeItemLabelText","CustomLabel","Icon","isAssayItem","assayName","renderIcon","other","variant","labelText","TreeItemLabel","TreeItemContent","alpha","getIconFromTreeItemType","itemType","Folder","IndeterminateCheckBoxRoundedIcon","CustomTreeItem","ref","itemId","label","disabled","onRemove","getContextProviderProps","getRootProps","getContentProps","getIconContainerProps","getCheckboxProps","getLabelProps","getGroupTransitionProps","status","useTreeItem","item","useTreeItemModel","icon","handleRemoveIconClick","TreeItemProvider","TreeItemIconContainer","TreeItemIcon","TreeItemCheckbox","Collapse","getAllExpandableItemIds","items","FolderTree","TreeItemComponent","allExpandableIds","expandedItems","setExpandedItems","prev","newIds","handleRemoveTreeItem","TreeItem","RichTreeView","_event","TreeViewWrapper","folderTrees","selectedCount","Avatar","folderTree","DEFAULT_MAX_TRACKS","cloneSelectionMap","buildRuntimeConfigMap","attachFolderId","DEFAULT_TITLE","TrackSelect","onSubmit","onCancel","onClear","title","limitDialogOpen","setLimitDialogOpen","clearDialogOpen","setClearDialogOpen","resetDialogOpen","setResetDialogOpen","runtimeConfigByFolder","setRuntimeConfigByFolder","currentView","setCurrentView","f","storeRef","useRef","setActiveFolder","setSelection","clear","committedSnapshot","setCommittedSnapshot","_a","activeFolder","activeConfig","total","maxTracksLimit","selected","buildTree","updateActiveFolderConfig","useCallback","current","handleFolderSelect","handleNavigateToRoot","handleSelectionChange","filteredIds","nextTotal","nextSet","handleSubmit","committed","handleCancel","handleClear","handleReset","confirmReset","newSnapshot","confirmClear","ToolbarExtras","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","formatIdLabel","rawId","hyphenIndex","assayPart","accessionPart","createRootNode","buildSortedAssayTreeView","rowById","rootLabel","root","assayMap","ontologyMap","displayNameMap","acc","assayKey","assayNode","ontologyKey","ontologyNode","displayNameKey","displayNameNode","a","b","aAssay","bAssay","buildTreeView","expNode","aOntology","bOntology","AssayToggle","updateConfig","sortedByAssay","handleToggle","FormControlLabel","Switch","BiosampleGroupingCell","groupingField","renderContent","BiosampleTreeItem","flattenTrackIntoRows","track","ontology","lifeStage","sampleType","collection","aIsCcre","bIsCcre","assay","experimentAccession","fileAccession","url","cpgPlus","cpgMinus","coverage","transformData","createBiosampleFolder","options","description","humanBiosamplesFolder","humanData","mouseBiosamplesFolder","mouseData","formatVersions","versions","v","versionsCol","leafNode","trackToRow","createGeneFolder","humanGenesFolder","mouseGenesFolder","nameCol","descriptionCol","createOtherTracksFolder","humanOtherTracksFolder","foldersByAssembly","_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","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","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","rect","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","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","TrackType","DisplayMode","ctx","primary","overlay","fetchBigBedUrl","error"],"mappings":"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","x_google_ignoreList":[0,1,2,11,12,36]}
|