UNPKG

wcz-layout

Version:

1 lines • 40.5 kB
{"version":3,"file":"AggregatedCell-3CIdlmt6.mjs","names":["Button","Dialog","DialogActions","DialogContent","DialogTitle","useEventCallback","useContext","useId","useTranslation","DialogsContext","ReactNode","OpenDialogOptions","onClose","result","TResult","Promise","AlertOptions","title","ConfirmOptions","confirmText","cancelText","DialogProps","payload","TPayload","open","OpenAlertDialog","message","options","OpenConfirmDialog","DialogComponent","React","ComponentType","OpenDialog","Component","CloseDialog","dialog","AlertDialogPayload","AlertDialogProps","AlertDialog","t0","$","_c","$i","Symbol","for","t","messageId","t1","t2","t3","t4","t5","t6","t7","t8","ConfirmDialogPayload","ConfirmDialogProps","ConfirmDialog","t9","t10","t11","t12","DialogHook","alert","confirm","close","useDialogs","undefined","message_0","options_0","_c","aggregationFn_count","aggregationFn_extent","aggregationFn_first","aggregationFn_last","aggregationFn_max","aggregationFn_mean","aggregationFn_median","aggregationFn_min","aggregationFn_sum","aggregationFn_unique","aggregationFn_uniqueCount","createExpandedRowModel","createFacetedMinMaxValues","createFacetedRowModel","createFacetedUniqueValues","createFilteredRowModel","createGroupedRowModel","createPaginatedRowModel","createSortedRowModel","createTableHookContexts","filterFn_arrHas","filterFn_arrIncludes","filterFn_arrIncludesAll","filterFn_arrIncludesSome","filterFn_between","filterFn_betweenInclusive","filterFn_empty","filterFn_endsWith","filterFn_equals","filterFn_equalsString","filterFn_equalsStringSensitive","filterFn_greaterThan","filterFn_greaterThanOrEqualTo","filterFn_inDateRange","filterFn_inNumberRange","filterFn_includesString","filterFn_includesStringSensitive","filterFn_lessThan","filterFn_lessThanOrEqualTo","filterFn_notEmpty","filterFn_startsWith","filterFn_weakEquals","metaHelper","sortFn_alphanumeric","sortFn_alphanumericCaseSensitive","sortFn_basic","sortFn_datetime","sortFn_text","sortFn_textCaseSensitive","stockFeatures","tableFeatures","AggregationFnDef","LayoutColumnMeta","RangeValue","Date","WithResult","TFn","TFeatures","TData","TValue","TResult","layoutTableFeatures","columnMeta","filteredRowModel","sortedRowModel","paginatedRowModel","expandedRowModel","groupedRowModel","facetedRowModel","facetedUniqueValues","facetedMinMaxValues","filterFns","arrHas","arrIncludes","arrIncludesAll","arrIncludesSome","between","betweenInclusive","empty","endsWith","equals","equalsString","equalsStringSensitive","greaterThan","greaterThanOrEqualTo","inDateRange","inNumberRange","includesString","includesStringSensitive","lessThan","lessThanOrEqualTo","notEmpty","startsWith","weakEquals","sortFns","alphanumeric","alphanumericCaseSensitive","basic","datetime","text","textCaseSensitive","aggregationFns","sum","min","max","extent","mean","median","unique","uniqueCount","count","first","last","LayoutTableFeatures","tableContext","cellContext","headerContext","useTableContext","useCellContext","useHeaderContext","TablePagination","TablePaginationProps","FC","useTableContext","PaginationProps","Omit","pageSizeOptions","Array","DEFAULT_PAGE_SIZE_OPTIONS","Pagination","props","table","pageIndex","pageSize","state","pagination","flexShrink","minHeight","borderTop","borderColor","isArray","sx","getPageCount","getRowCount","_","page","setPageIndex","event","setPagination","Number","target","value","Theme","formatForDisplay","Cell","CellData","Column","RowData","Range","defaultRangeExtractor","LayoutTableFeatures","LayoutColumnMeta","layoutTableClasses","root","main","table","toolbar","toolbarLabel","toolbarTitle","toolbarSelectedCount","toolbarDivider","toolbarQuickFilter","columnsButton","columnsPanel","filtersButton","filterPanel","columnHeaders","columnHeaderRow","columnHeader","columnHeaderContent","columnHeaderTitleContainer","sortLabel","sortIndex","menuIcon","columnSeparator","body","row","cell","groupCell","expandButton","actionsCell","cellOffset","rowOffset","filler","skeletonRow","skeletonCell","overlay","footer","footerRow","footerCell","aggregationValue","pagination","const","classNames","names","Array","filter","Boolean","join","pinnedClass","column","AnyColumn","TData","TValue","part","pinned","getIsPinned","shortcutLabel","label","hotkey","columnLabel","meta","columnDef","header","id","hasColumnLabel","columnAlign","align","columnFlex","Object","hasOwn","atoms","columnSizing","get","flex","moveColumn","delta","current","columnOrder","order","length","getAllLeafColumns","map","from","indexOf","to","splice","setColumnOrder","pinnedSx","isHeader","position","zIndex","insetInlineStart","getStart","undefined","insetInlineEnd","getAfter","bgcolor","backgroundImage","theme","palette","action","hover","selected","getIsLastColumn","borderInlineEnd","borderInlineEndStyle","borderColor","getIsFirstColumn","borderInlineStart","borderInlineStartStyle","cellSelectionSx","getIsSelected","edges","getSelectionEdges","outline","top","primary","bottom","left","right","boxShadow","quoteTsv","text","test","replaceAll","toClipboardValue","value","String","Date","toISOString","JSON","stringify","toClipboardText","regions","rows","cells","lookaheadRange","range","direction","lookahead","behind","overscan","ahead","startIndex","endIndex","dayjs","formatValue","value","dateFormat","undefined","Date","format","toString","JSON","stringify","TypographyProps","Typography","FC","formatValue","useCellContext","AggregatedCell","prefix","options","Intl","NumberFormatOptions","dateFormat","t0","$","_c","$i","Symbol","for","props","t1","undefined","cell","T0","t2","t3","t4","t5","t6","t7","t8","bb0","value","getValue","t9","entry","toLocaleString","format","Array","isArray","map","join","_c"],"sources":["../src/hooks/useDialogs.tsx","../src/components/table/context.ts","../src/components/table/table/Pagination.tsx","../src/components/table/utils.ts","../src/components/table/formatValue.ts","../src/components/table/cells/formatters/AggregatedCell.tsx"],"sourcesContent":["import {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n useEventCallback,\n} from \"@mui/material\";\nimport { useContext, useId } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { DialogsContext } from \"../contexts/DialogsContext\";\nimport type { ReactNode } from \"react\";\n\nexport interface OpenDialogOptions<TResult> {\n onClose?: (result: TResult) => Promise<void>;\n}\n\nexport interface AlertOptions {\n title?: ReactNode;\n}\n\nexport interface ConfirmOptions {\n title?: ReactNode;\n confirmText?: ReactNode;\n cancelText?: ReactNode;\n}\n\nexport interface DialogProps<TPayload = undefined, TResult = void> {\n payload: TPayload;\n open: boolean;\n onClose: (result: TResult) => Promise<void>;\n}\n\nexport type OpenAlertDialog = (message: ReactNode, options?: AlertOptions) => Promise<void>;\n\nexport type OpenConfirmDialog = (message: ReactNode, options?: ConfirmOptions) => Promise<boolean>;\n\nexport type DialogComponent<TPayload, TResult> = React.ComponentType<\n DialogProps<TPayload, TResult>\n>;\n\nexport interface OpenDialog {\n <TPayload extends undefined, TResult>(\n Component: DialogComponent<TPayload, TResult>,\n payload?: TPayload,\n options?: OpenDialogOptions<TResult>,\n ): Promise<TResult>;\n <TPayload, TResult>(\n Component: DialogComponent<TPayload, TResult>,\n payload: TPayload,\n options?: OpenDialogOptions<TResult>,\n ): Promise<TResult>;\n}\n\nexport type CloseDialog = <TResult>(dialog: Promise<TResult>, result: TResult) => Promise<TResult>;\n\nexport interface AlertDialogPayload extends AlertOptions {\n message: ReactNode;\n}\n\nexport type AlertDialogProps = DialogProps<AlertDialogPayload, void>;\n\nexport function AlertDialog({ open, payload, onClose }: Readonly<AlertDialogProps>) {\n const { t } = useTranslation();\n const messageId = useId();\n\n return (\n <Dialog\n maxWidth=\"xs\"\n fullWidth\n open={open}\n onClose={() => onClose()}\n role=\"alertdialog\"\n aria-describedby={messageId}\n >\n <DialogTitle>{payload.title ?? t(\"Layout.Dialog.Alert\")}</DialogTitle>\n <DialogContent id={messageId}>{payload.message}</DialogContent>\n <DialogActions>\n <Button onClick={() => onClose()} autoFocus>\n {t(\"Layout.Dialog.Confirm\")}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nexport interface ConfirmDialogPayload extends ConfirmOptions {\n message: ReactNode;\n}\n\nexport type ConfirmDialogProps = DialogProps<ConfirmDialogPayload, boolean>;\n\nexport function ConfirmDialog({ open, payload, onClose }: Readonly<ConfirmDialogProps>) {\n const { t } = useTranslation();\n const messageId = useId();\n\n return (\n <Dialog\n maxWidth=\"xs\"\n fullWidth\n open={open}\n onClose={() => onClose(false)}\n role=\"alertdialog\"\n aria-describedby={messageId}\n >\n <DialogTitle>{payload.title ?? t(\"Layout.Dialog.Confirm\")}</DialogTitle>\n <DialogContent id={messageId}>{payload.message}</DialogContent>\n <DialogActions>\n <Button onClick={() => onClose(false)}>\n {payload.cancelText ?? t(\"Layout.Dialog.Cancel\")}\n </Button>\n <Button onClick={() => onClose(true)} autoFocus>\n {payload.confirmText ?? t(\"Layout.Dialog.Confirm\")}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\ninterface DialogHook {\n alert: OpenAlertDialog;\n confirm: OpenConfirmDialog;\n open: OpenDialog;\n close: CloseDialog;\n}\n\nexport function useDialogs(): DialogHook {\n const { open, close } = useContext(DialogsContext);\n\n const alert = useEventCallback<OpenAlertDialog>((message, { ...options } = {}) =>\n open(AlertDialog, { ...options, message }),\n );\n\n const confirm = useEventCallback<OpenConfirmDialog>((message, { ...options } = {}) =>\n open(ConfirmDialog, { ...options, message }),\n );\n\n return { alert, confirm, open, close };\n}\n","import {\n aggregationFn_count,\n aggregationFn_extent,\n aggregationFn_first,\n aggregationFn_last,\n aggregationFn_max,\n aggregationFn_mean,\n aggregationFn_median,\n aggregationFn_min,\n aggregationFn_sum,\n aggregationFn_unique,\n aggregationFn_uniqueCount,\n createExpandedRowModel,\n createFacetedMinMaxValues,\n createFacetedRowModel,\n createFacetedUniqueValues,\n createFilteredRowModel,\n createGroupedRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n createTableHookContexts,\n filterFn_arrHas,\n filterFn_arrIncludes,\n filterFn_arrIncludesAll,\n filterFn_arrIncludesSome,\n filterFn_between,\n filterFn_betweenInclusive,\n filterFn_empty,\n filterFn_endsWith,\n filterFn_equals,\n filterFn_equalsString,\n filterFn_equalsStringSensitive,\n filterFn_greaterThan,\n filterFn_greaterThanOrEqualTo,\n filterFn_inDateRange,\n filterFn_inNumberRange,\n filterFn_includesString,\n filterFn_includesStringSensitive,\n filterFn_lessThan,\n filterFn_lessThanOrEqualTo,\n filterFn_notEmpty,\n filterFn_startsWith,\n filterFn_weakEquals,\n metaHelper,\n sortFn_alphanumeric,\n sortFn_alphanumericCaseSensitive,\n sortFn_basic,\n sortFn_datetime,\n sortFn_text,\n sortFn_textCaseSensitive,\n stockFeatures,\n tableFeatures,\n} from \"@tanstack/react-table\";\nimport type { AggregationFnDef } from \"@tanstack/react-table\";\nimport type { LayoutColumnMeta } from \"~/components/table/types\";\n\n// table-core types min/max/extent with its non-exported `RangeValue`, which breaks .d.ts emit.\ntype RangeValue = Date | number | undefined;\ntype WithResult<TFn, TResult> =\n TFn extends AggregationFnDef<infer TFeatures, infer TData, infer TValue, unknown>\n ? AggregationFnDef<TFeatures, TData, TValue, TResult>\n : never;\n\nexport const layoutTableFeatures = tableFeatures({\n ...stockFeatures,\n columnMeta: metaHelper<LayoutColumnMeta>(),\n filteredRowModel: createFilteredRowModel(),\n sortedRowModel: createSortedRowModel(),\n paginatedRowModel: createPaginatedRowModel(),\n expandedRowModel: createExpandedRowModel(),\n groupedRowModel: createGroupedRowModel(),\n facetedRowModel: createFacetedRowModel(),\n facetedUniqueValues: createFacetedUniqueValues(),\n facetedMinMaxValues: createFacetedMinMaxValues(),\n filterFns: {\n arrHas: filterFn_arrHas,\n arrIncludes: filterFn_arrIncludes,\n arrIncludesAll: filterFn_arrIncludesAll,\n arrIncludesSome: filterFn_arrIncludesSome,\n between: filterFn_between,\n betweenInclusive: filterFn_betweenInclusive,\n empty: filterFn_empty,\n endsWith: filterFn_endsWith,\n equals: filterFn_equals,\n equalsString: filterFn_equalsString,\n equalsStringSensitive: filterFn_equalsStringSensitive,\n greaterThan: filterFn_greaterThan,\n greaterThanOrEqualTo: filterFn_greaterThanOrEqualTo,\n inDateRange: filterFn_inDateRange,\n inNumberRange: filterFn_inNumberRange,\n includesString: filterFn_includesString,\n includesStringSensitive: filterFn_includesStringSensitive,\n lessThan: filterFn_lessThan,\n lessThanOrEqualTo: filterFn_lessThanOrEqualTo,\n notEmpty: filterFn_notEmpty,\n startsWith: filterFn_startsWith,\n weakEquals: filterFn_weakEquals,\n },\n sortFns: {\n alphanumeric: sortFn_alphanumeric,\n alphanumericCaseSensitive: sortFn_alphanumericCaseSensitive,\n basic: sortFn_basic,\n datetime: sortFn_datetime,\n text: sortFn_text,\n textCaseSensitive: sortFn_textCaseSensitive,\n },\n aggregationFns: {\n sum: aggregationFn_sum,\n min: aggregationFn_min as WithResult<typeof aggregationFn_min, RangeValue>,\n max: aggregationFn_max as WithResult<typeof aggregationFn_max, RangeValue>,\n extent: aggregationFn_extent as WithResult<\n typeof aggregationFn_extent,\n [RangeValue, RangeValue]\n >,\n mean: aggregationFn_mean,\n median: aggregationFn_median,\n unique: aggregationFn_unique,\n uniqueCount: aggregationFn_uniqueCount,\n count: aggregationFn_count,\n first: aggregationFn_first,\n last: aggregationFn_last,\n },\n});\n\nexport type LayoutTableFeatures = typeof layoutTableFeatures;\n\nexport const {\n tableContext,\n cellContext,\n headerContext,\n useTableContext,\n useCellContext,\n useHeaderContext,\n} = createTableHookContexts<LayoutTableFeatures>();\n","import { TablePagination, type TablePaginationProps } from \"@mui/material\";\nimport type { FC } from \"react\";\nimport { useTableContext } from \"~/components/table/context\";\n\nexport type PaginationProps = Omit<\n TablePaginationProps,\n \"count\" | \"page\" | \"rowsPerPage\" | \"onPageChange\" | \"onRowsPerPageChange\" | \"rowsPerPageOptions\"\n> & { pageSizeOptions?: Array<number> };\n\n/** A pager is for large data sets, so it offers no \"All\". LayoutTable starts at the lowest. */\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [25, 50, 100];\n\nexport const Pagination: FC<PaginationProps> = ({\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n ...props\n}) => {\n // The counts below are table methods; compiled, they would be cached on the table reference,\n // which does not change when only data or options (rowCount, pageCount) do.\n \"use no memo\";\n const table = useTableContext();\n const { pageIndex, pageSize } = table.state.pagination;\n\n return (\n <TablePagination\n component=\"div\"\n showFirstButton\n showLastButton\n {...props}\n sx={[\n { flexShrink: 0, minHeight: 52, borderTop: 1, borderColor: \"divider\" },\n ...(Array.isArray(props.sx) ? props.sx : [props.sx]),\n ]}\n rowsPerPageOptions={pageSizeOptions}\n // pageCount -1 means the total is unknown (cursor paging): MUI shows \"of more than N\" and\n // keeps Next enabled.\n count={table.getPageCount() === -1 ? -1 : table.getRowCount()}\n page={pageIndex}\n rowsPerPage={pageSize}\n onPageChange={(_, page) => table.setPageIndex(page)}\n // One update: a controlled onPaginationChange may resolve two calls against the same state.\n onRowsPerPageChange={(event) =>\n table.setPagination({ pageIndex: 0, pageSize: Number(event.target.value) })\n }\n />\n );\n};\n","import type { Theme } from \"@mui/material\";\nimport { formatForDisplay } from \"@tanstack/react-hotkeys\";\nimport type { Cell, CellData, Column, RowData } from \"@tanstack/react-table\";\nimport type { Range } from \"@tanstack/react-virtual\";\nimport { defaultRangeExtractor } from \"@tanstack/react-virtual\";\nimport type { LayoutTableFeatures } from \"~/components/table/context\";\nimport type { LayoutColumnMeta } from \"./types\";\n\n/** Stable class names on every table part, for `sx` selectors like `.MuiDataGrid-*`. */\nexport const layoutTableClasses = {\n root: \"LayoutTable-root\",\n main: \"LayoutTable-main\",\n table: \"LayoutTable-table\",\n\n toolbar: \"LayoutTable-toolbar\",\n toolbarLabel: \"LayoutTable-toolbarLabel\",\n toolbarTitle: \"LayoutTable-toolbarTitle\",\n toolbarSelectedCount: \"LayoutTable-toolbarSelectedCount\",\n toolbarDivider: \"LayoutTable-toolbarDivider\",\n toolbarQuickFilter: \"LayoutTable-toolbarQuickFilter\",\n columnsButton: \"LayoutTable-columnsButton\",\n columnsPanel: \"LayoutTable-columnsPanel\",\n filtersButton: \"LayoutTable-filtersButton\",\n filterPanel: \"LayoutTable-filterPanel\",\n\n columnHeaders: \"LayoutTable-columnHeaders\",\n columnHeaderRow: \"LayoutTable-columnHeaderRow\",\n columnHeader: \"LayoutTable-columnHeader\",\n \"columnHeader--sortable\": \"LayoutTable-columnHeader--sortable\",\n \"columnHeader--sorted\": \"LayoutTable-columnHeader--sorted\",\n \"columnHeader--filtered\": \"LayoutTable-columnHeader--filtered\",\n \"columnHeader--pinnedStart\": \"LayoutTable-columnHeader--pinnedStart\",\n \"columnHeader--pinnedEnd\": \"LayoutTable-columnHeader--pinnedEnd\",\n columnHeaderContent: \"LayoutTable-columnHeaderContent\",\n columnHeaderTitleContainer: \"LayoutTable-columnHeaderTitleContainer\",\n sortLabel: \"LayoutTable-sortLabel\",\n sortIndex: \"LayoutTable-sortIndex\",\n menuIcon: \"LayoutTable-menuIcon\",\n columnSeparator: \"LayoutTable-columnSeparator\",\n \"columnSeparator--resizable\": \"LayoutTable-columnSeparator--resizable\",\n \"columnSeparator--resizing\": \"LayoutTable-columnSeparator--resizing\",\n\n body: \"LayoutTable-body\",\n row: \"LayoutTable-row\",\n \"row--grouped\": \"LayoutTable-row--grouped\",\n \"row--expanded\": \"LayoutTable-row--expanded\",\n \"row--pinned\": \"LayoutTable-row--pinned\",\n cell: \"LayoutTable-cell\",\n \"cell--selected\": \"LayoutTable-cell--selected\",\n \"cell--grouped\": \"LayoutTable-cell--grouped\",\n \"cell--aggregated\": \"LayoutTable-cell--aggregated\",\n \"cell--pinnedStart\": \"LayoutTable-cell--pinnedStart\",\n \"cell--pinnedEnd\": \"LayoutTable-cell--pinnedEnd\",\n groupCell: \"LayoutTable-groupCell\",\n expandButton: \"LayoutTable-expandButton\",\n actionsCell: \"LayoutTable-actionsCell\",\n cellOffset: \"LayoutTable-cellOffset\",\n rowOffset: \"LayoutTable-rowOffset\",\n filler: \"LayoutTable-filler\",\n skeletonRow: \"LayoutTable-skeletonRow\",\n skeletonCell: \"LayoutTable-skeletonCell\",\n overlay: \"LayoutTable-overlay\",\n\n footer: \"LayoutTable-footer\",\n footerRow: \"LayoutTable-footerRow\",\n footerCell: \"LayoutTable-footerCell\",\n aggregationValue: \"LayoutTable-aggregationValue\",\n pagination: \"LayoutTable-pagination\",\n} as const;\n\nexport const classNames = (...names: Array<string | false | null | undefined>): string =>\n names.filter(Boolean).join(\" \");\n\nexport const pinnedClass = <TData extends RowData, TValue extends CellData>(\n column: AnyColumn<TData, TValue>,\n part: \"columnHeader\" | \"cell\",\n): string | false => {\n const pinned = column.getIsPinned();\n return (\n !!pinned && layoutTableClasses[`${part}--${pinned === \"start\" ? \"pinnedStart\" : \"pinnedEnd\"}`]\n );\n};\n\nexport const shortcutLabel = (label: string, hotkey: string): string =>\n `${label} (${formatForDisplay(hotkey)})`;\n\ntype AnyColumn<TData extends RowData, TValue extends CellData> = Column<\n LayoutTableFeatures,\n TData,\n TValue\n>;\n\nexport const columnLabel = <TData extends RowData, TValue extends CellData>(\n column: AnyColumn<TData, TValue>,\n): string => {\n const meta = column.columnDef.meta as LayoutColumnMeta | undefined;\n if (meta?.label) return meta.label;\n\n return typeof column.columnDef.header === \"string\" ? column.columnDef.header : column.id;\n};\n\nexport const hasColumnLabel = <TData extends RowData, TValue extends CellData>(\n column: AnyColumn<TData, TValue>,\n): boolean =>\n Boolean((column.columnDef.meta as LayoutColumnMeta | undefined)?.label) ||\n typeof column.columnDef.header === \"string\";\n\nexport const columnAlign = <TData extends RowData, TValue extends CellData>(\n column: AnyColumn<TData, TValue>,\n): \"left\" | \"center\" | \"right\" =>\n (column.columnDef.meta as LayoutColumnMeta | undefined)?.align ??\n (hasColumnLabel(column) ? \"left\" : \"center\");\n\n/** The column's `meta.flex`, or 0 once the user has resized it to a fixed width. */\nexport const columnFlex = <TData extends RowData, TValue extends CellData>(\n column: AnyColumn<TData, TValue>,\n): number =>\n Object.hasOwn(column.table.atoms.columnSizing.get(), column.id)\n ? 0\n : ((column.columnDef.meta as LayoutColumnMeta | undefined)?.flex ?? 0);\n\nexport const moveColumn = <TData extends RowData, TValue extends CellData>(\n column: AnyColumn<TData, TValue>,\n delta: number,\n): void => {\n const { table } = column;\n const current = table.atoms.columnOrder.get();\n const order = current.length ? [...current] : table.getAllLeafColumns().map(({ id }) => id);\n const from = order.indexOf(column.id);\n const to = from + delta;\n if (from < 0 || to < 0 || to >= order.length) return;\n\n order.splice(to, 0, ...order.splice(from, 1));\n table.setColumnOrder(order);\n};\n\nexport const pinnedSx = <TData extends RowData, TValue extends CellData>(\n column: AnyColumn<TData, TValue>,\n isHeader = false,\n) => {\n const pinned = column.getIsPinned();\n if (!pinned) return {};\n\n return {\n position: \"sticky\",\n zIndex: isHeader ? 4 : 2,\n insetInlineStart: pinned === \"start\" ? column.getStart(\"start\") : undefined,\n insetInlineEnd: pinned === \"end\" ? column.getAfter(\"end\") : undefined,\n bgcolor: \"background.paper\",\n ...(!isHeader && {\n \".MuiTableRow-root:hover > &\": {\n backgroundImage: (theme: Theme) =>\n `linear-gradient(${theme.palette.action.hover}, ${theme.palette.action.hover})`,\n },\n \".MuiTableRow-root.Mui-selected > &\": {\n backgroundImage: (theme: Theme) =>\n `linear-gradient(${theme.palette.action.selected}, ${theme.palette.action.selected})`,\n },\n }),\n ...(pinned === \"start\" &&\n column.getIsLastColumn(\"start\") && {\n borderInlineEnd: 1,\n borderInlineEndStyle: \"solid\",\n borderColor: \"divider\",\n }),\n ...(pinned === \"end\" &&\n column.getIsFirstColumn(\"end\") && {\n borderInlineStart: 1,\n borderInlineStartStyle: \"solid\",\n borderColor: \"divider\",\n }),\n };\n};\n\nexport const cellSelectionSx = <TData extends RowData, TValue extends CellData>(\n cell: Cell<LayoutTableFeatures, TData, TValue>,\n) => {\n if (!cell.getIsSelected()) return {};\n\n const edges = cell.getSelectionEdges();\n const outline = (theme: Theme) =>\n [\n edges.top && `inset 0 2px 0 0 ${theme.palette.primary.main}`,\n edges.bottom && `inset 0 -2px 0 0 ${theme.palette.primary.main}`,\n edges.left && `inset 2px 0 0 0 ${theme.palette.primary.main}`,\n edges.right && `inset -2px 0 0 0 ${theme.palette.primary.main}`,\n ]\n .filter(Boolean)\n .join(\", \") || \"none\";\n\n return {\n backgroundImage: (theme: Theme) =>\n `linear-gradient(${theme.palette.action.selected}, ${theme.palette.action.selected})`,\n boxShadow: outline,\n };\n};\n\n/** Spreadsheet TSV quoting, so a cell holding a tab or a newline stays one cell. */\nconst quoteTsv = (text: string): string =>\n /[\"\\t\\n\\r]/.test(text) ? `\"${text.replaceAll('\"', '\"\"')}\"` : text;\n\nconst toClipboardValue = (value: unknown): string => {\n if (value == null) return \"\";\n if (typeof value === \"string\") return quoteTsv(value);\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\")\n return quoteTsv(String(value));\n if (value instanceof Date) return quoteTsv(value.toISOString());\n\n // Everything else — objects, and the odd symbol or function — as JSON or blank.\n return quoteTsv(JSON.stringify(value) ?? \"\");\n};\n\n/**\n * Serializes `table.getSelectedCellRangesData()` as TSV, which is what Excel,\n * Google Sheets and LibreOffice all paste as a grid. Disjoint selection regions\n * are separated by a blank line.\n */\nexport const toClipboardText = (regions: Array<Array<Array<unknown>>>): string =>\n regions\n .map((rows) => rows.map((cells) => cells.map(toClipboardValue).join(\"\\t\")).join(\"\\n\"))\n .join(\"\\n\\n\");\n\nexport const lookaheadRange = (\n range: Range,\n direction: \"forward\" | \"backward\" | null,\n lookahead: number,\n): Array<number> => {\n const behind = direction ? 0 : range.overscan;\n const ahead = direction ? lookahead : range.overscan;\n\n return defaultRangeExtractor({\n ...range,\n startIndex: range.startIndex - (direction === \"backward\" ? ahead : behind),\n endIndex: range.endIndex + (direction === \"backward\" ? behind : ahead),\n overscan: 0,\n });\n};\n","import dayjs from \"dayjs\";\n\nexport const formatValue = (value: unknown, dateFormat = \"L LT\"): string => {\n if (value === null || value === undefined) return \"\";\n if (value instanceof Date) return dayjs(value).format(dateFormat);\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return value.toString();\n }\n\n return JSON.stringify(value) ?? \"\";\n};\n","import type { TypographyProps } from \"@mui/material\";\nimport { Typography } from \"@mui/material\";\nimport type { FC } from \"react\";\nimport { formatValue } from \"~/components/table/formatValue\";\nimport { useCellContext } from \"~/components/table/context\";\n\nexport const AggregatedCell: FC<\n TypographyProps & {\n prefix?: string;\n options?: Intl.NumberFormatOptions;\n dateFormat?: string;\n }\n> = ({ prefix = \"\", options, dateFormat, ...props }) => {\n const cell = useCellContext();\n const value = cell.getValue();\n if (value === null || value === undefined || value === \"\") return null;\n\n const format = (entry: unknown) =>\n typeof entry === \"number\"\n ? entry.toLocaleString(undefined, options)\n : formatValue(entry, dateFormat);\n\n return (\n <Typography variant=\"body2\" color=\"text.secondary\" noWrap {...props}>\n {prefix}\n {/* `extent` — the default aggregate for anything non-numeric — is a [min, max] pair. */}\n {Array.isArray(value) ? value.map(format).join(\" – \") : format(value)}\n </Typography>\n );\n};\n"],"mappings":";;;;;;;;;;;AA8DA,SAAOsC,YAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAD,EAAA,OAAA,oEAAA;EAAA,KAAA,IAAAE,KAAA,GAAAA,KAAA,IAAAA,MAAA,GAAAF,EAAAE,MAAAC,OAAAC,IAAA,2BAAA;EAAAJ,EAAA,KAAA;CAAA;CAAqB,MAAA,EAAAhB,MAAAF,SAAAV,YAAA2B;CAC1B,MAAA,EAAAM,MAAcrC,eAAe;CAC7B,MAAAsC,YAAkBvC,MAAM;CAAE,IAAAwC;CAAA,IAAAP,EAAA,OAAA5B,SAAA;EAObmC,WAAMnC,QAAQ;EAAC4B,EAAA,KAAA5B;EAAA4B,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,OAAAlB,QAAAL,SAAAuB,EAAA,OAAAK,GAAA;EAIVG,KAAA1B,QAAOL,SAAU4B,EAAE,qBAAqB;EAACL,EAAA,KAAAlB,QAAAL;EAAAuB,EAAA,KAAAK;EAAAL,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAQ,IAAA;EAAvDC,KAAA,oBAAC,aAAD,EAAA,UAAcD,GAAF,CAAA;EAA0DR,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,IAAAU;CAAA,IAAAV,EAAA,OAAAM,aAAAN,EAAA,OAAAlB,QAAAI,SAAA;EACtEwB,KAAA,oBAAC,eAAD;GAAmBJ,IAAAA;GAAYxB,UAAAA,QAAOI;EAAxB,CAAA;EAAiDc,EAAA,KAAAM;EAAAN,EAAA,KAAAlB,QAAAI;EAAAc,EAAA,MAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,IAAAW;CAAA,IAAAX,EAAA,QAAA5B,SAAA;EAE5CuC,WAAMvC,QAAQ;EAAC4B,EAAA,MAAA5B;EAAA4B,EAAA,MAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAY;CAAA,IAAAZ,EAAA,QAAAK,GAAA;EAC7BO,KAAAP,EAAE,uBAAuB;EAACL,EAAA,MAAAK;EAAAL,EAAA,MAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,QAAAW,MAAAX,EAAA,QAAAY,IAAA;EAF/BC,KAAA,oBAAC,eAAD,EAAA,UACE,oBAAC,QAAD;GAAiB,SAAAF;GAAiB,WAAA;GAC/BC,UAAAA;EADI,CAAA,EADK,CAAA;EAIEZ,EAAA,MAAAW;EAAAX,EAAA,MAAAY;EAAAZ,EAAA,MAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,IAAAc;CAAA,IAAAd,EAAA,QAAAM,aAAAN,EAAA,QAAAhB,QAAAgB,EAAA,QAAAO,MAAAP,EAAA,QAAAS,MAAAT,EAAA,QAAAU,MAAAV,EAAA,QAAAa,IAAA;EAdlBC,KAAA,qBAAC,QAAD;GACW,UAAA;GACT,WAAA;GACM9B;GACG,SAAAuB;GACJ,MAAA;GACaD,oBAAAA;GANpB,UAAA;IAQEG;IACAC;IACAG;GAVK;;EAeEb,EAAA,MAAAM;EAAAN,EAAA,MAAAhB;EAAAgB,EAAA,MAAAO;EAAAP,EAAA,MAAAS;EAAAT,EAAA,MAAAU;EAAAV,EAAA,MAAAa;EAAAb,EAAA,MAAAc;CAAA,OAAAA,KAAAd,EAAA;CAAA,OAfTc;AAeS;AAUb,SAAOG,cAAAlB,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAD,EAAA,OAAA,oEAAA;EAAA,KAAA,IAAAE,KAAA,GAAAA,KAAA,IAAAA,MAAA,GAAAF,EAAAE,MAAAC,OAAAC,IAAA,2BAAA;EAAAJ,EAAA,KAAA;CAAA;CAAuB,MAAA,EAAAhB,MAAAF,SAAAV,YAAA2B;CAC5B,MAAA,EAAAM,MAAcrC,eAAe;CAC7B,MAAAsC,YAAkBvC,MAAM;CAAE,IAAAwC;CAAA,IAAAP,EAAA,OAAA5B,SAAA;EAObmC,WAAMnC,QAAQ,KAAK;EAAC4B,EAAA,KAAA5B;EAAA4B,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,OAAAlB,QAAAL,SAAAuB,EAAA,OAAAK,GAAA;EAIfG,KAAA1B,QAAOL,SAAU4B,EAAE,uBAAuB;EAACL,EAAA,KAAAlB,QAAAL;EAAAuB,EAAA,KAAAK;EAAAL,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAQ,IAAA;EAAzDC,KAAA,oBAAC,aAAD,EAAA,UAAcD,GAAF,CAAA;EAA4DR,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,IAAAU;CAAA,IAAAV,EAAA,OAAAM,aAAAN,EAAA,OAAAlB,QAAAI,SAAA;EACxEwB,KAAA,oBAAC,eAAD;GAAmBJ,IAAAA;GAAYxB,UAAAA,QAAOI;EAAxB,CAAA;EAAiDc,EAAA,KAAAM;EAAAN,EAAA,KAAAlB,QAAAI;EAAAc,EAAA,MAAAU;CAAA,OAAAA,KAAAV,EAAA;CAAA,IAAAW;CAAA,IAAAX,EAAA,QAAA5B,SAAA;EAE5CuC,WAAMvC,QAAQ,KAAK;EAAC4B,EAAA,MAAA5B;EAAA4B,EAAA,MAAAW;CAAA,OAAAA,KAAAX,EAAA;CAAA,IAAAY;CAAA,IAAAZ,EAAA,QAAAlB,QAAAF,cAAAoB,EAAA,QAAAK,GAAA;EAClCO,KAAA9B,QAAOF,cAAeyB,EAAE,sBAAsB;EAACL,EAAA,MAAAlB,QAAAF;EAAAoB,EAAA,MAAAK;EAAAL,EAAA,MAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAAA,IAAAa;CAAA,IAAAb,EAAA,QAAAW,MAAAX,EAAA,QAAAY,IAAA;EADlDC,KAAA,oBAAC,QAAD;GAAiB,SAAAF;GACdC,UAAAA;EADI,CAAA;EAEEZ,EAAA,MAAAW;EAAAX,EAAA,MAAAY;EAAAZ,EAAA,MAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,IAAAc;CAAA,IAAAd,EAAA,QAAA5B,SAAA;EACQ0C,WAAM1C,QAAQ,IAAI;EAAC4B,EAAA,MAAA5B;EAAA4B,EAAA,MAAAc;CAAA,OAAAA,KAAAd,EAAA;CAAA,IAAAkB;CAAA,IAAAlB,EAAA,QAAAlB,QAAAH,eAAAqB,EAAA,QAAAK,GAAA;EACjCa,KAAApC,QAAOH,eAAgB0B,EAAE,uBAAuB;EAACL,EAAA,MAAAlB,QAAAH;EAAAqB,EAAA,MAAAK;EAAAL,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,QAAAc,MAAAd,EAAA,QAAAkB,IAAA;EADpDC,MAAA,oBAAC,QAAD;GAAiB,SAAAL;GAAqB,WAAA;GACnCI,UAAAA;EADI,CAAA;EAEElB,EAAA,MAAAc;EAAAd,EAAA,MAAAkB;EAAAlB,EAAA,MAAAmB;CAAA,OAAAA,MAAAnB,EAAA;CAAA,IAAAoB;CAAA,IAAApB,EAAA,QAAAmB,OAAAnB,EAAA,QAAAa,IAAA;EANXO,MAAA,qBAAC,eAAD,EAAA,UAAA,CACEP,IAGAM,GAJY,EAAA,CAAA;EAOEnB,EAAA,MAAAmB;EAAAnB,EAAA,MAAAa;EAAAb,EAAA,MAAAoB;CAAA,OAAAA,MAAApB,EAAA;CAAA,IAAAqB;CAAA,IAAArB,EAAA,QAAAM,aAAAN,EAAA,QAAAhB,QAAAgB,EAAA,QAAAO,MAAAP,EAAA,QAAAoB,OAAApB,EAAA,QAAAS,MAAAT,EAAA,QAAAU,IAAA;EAjBlBW,MAAA,qBAAC,QAAD;GACW,UAAA;GACT,WAAA;GACMrC;GACG,SAAAuB;GACJ,MAAA;GACaD,oBAAAA;GANpB,UAAA;IAQEG;IACAC;IACAU;GAVK;;EAkBEpB,EAAA,MAAAM;EAAAN,EAAA,MAAAhB;EAAAgB,EAAA,MAAAO;EAAAP,EAAA,MAAAoB;EAAApB,EAAA,MAAAS;EAAAT,EAAA,MAAAU;EAAAV,EAAA,MAAAqB;CAAA,OAAAA,MAAArB,EAAA;CAAA,OAlBTqB;AAkBS;AAWb,SAAOK,aAAA;CAAA,MAAA1B,IAAAC,EAAA,EAAA;CAAA,IAAAD,EAAA,OAAA,oEAAA;EAAA,KAAA,IAAAE,KAAA,GAAAA,KAAA,IAAAA,MAAA,GAAAF,EAAAE,MAAAC,OAAAC,IAAA,2BAAA;EAAAJ,EAAA,KAAA;CAAA;CACL,MAAA,EAAAhB,MAAAyC,UAAwB3D,WAAWG,cAAc;CAAE,IAAA8B;CAAA,IAAAC,EAAA,OAAAhB,MAAA;EAEHe,MAAAb,SAAAqB,OAAA;GAAU,MAAA,EAAA,GAAApB,YAAAoB,OAAAoB,KAAAA,IAAA,CAAkB,IAAlBpB;GAAmB,OAC3EvB,KAAKc,aAAa;IAAA,GAAKX;IAAOD;GAAU,CAAC;EAAC;EAAAc,EAAA,KAAAhB;EAAAgB,EAAA,KAAAD;CAAA,OAAAA,KAAAC,EAAA;CAD5C,MAAAuB,QAAc1D,iBAAkCkC,EAEhD;CAAE,IAAAQ;CAAA,IAAAP,EAAA,OAAAhB,MAAA;EAEkDuB,MAAAqB,WAAApB,OAAA;GAAU,MAAA,EAAA,GAAAqB,cAAArB,OAAAmB,KAAAA,IAAA,CAAkB,IAAlBnB;GAAmB,OAC/ExB,KAAKiC,eAAe;IAAA,GAAK9B;IAAOD,SAAEA;GAAQ,CAAC;EAAC;EAAAc,EAAA,KAAAhB;EAAAgB,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAD9C,MAAAwB,UAAgB3D,iBAAoC0C,EAEpD;CAAE,IAAAC;CAAA,IAAAR,EAAA,OAAAuB,SAAAvB,EAAA,OAAAyB,SAAAzB,EAAA,OAAAwB,WAAAxB,EAAA,OAAAhB,MAAA;EAEKwB,KAAA;GAAAe;GAAAC;GAAAxC;GAAAyC;EAA8B;EAACzB,EAAA,KAAAuB;EAAAvB,EAAA,KAAAyB;EAAAzB,EAAA,KAAAwB;EAAAxB,EAAA,KAAAhB;EAAAgB,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,OAA/BQ;AAA+B;;AC1ExC,MAAaoF,sBAAsBX,cAAc;CAC/C,GAAGD;CACHa,YAAYpB,WAA6B;CACzCqB,kBAAkBhD,uBAAuB;CACzCiD,gBAAgB9C,qBAAqB;CACrC+C,mBAAmBhD,wBAAwB;CAC3CiD,kBAAkBvD,uBAAuB;CACzCwD,iBAAiBnD,sBAAsB;CACvCoD,iBAAiBvD,sBAAsB;CACvCwD,qBAAqBvD,0BAA0B;CAC/CwD,qBAAqB1D,0BAA0B;CAC/C2D,WAAW;EACTC,QAAQpD;EACRqD,aAAapD;EACbqD,gBAAgBpD;EAChBqD,iBAAiBpD;EACjBqD,SAASpD;EACTqD,kBAAkBpD;EAClBqD,OAAOpD;EACPqD,UAAUpD;EACVqD,QAAQpD;EACRqD,cAAcpD;EACdqD,uBAAuBpD;EACvBqD,aAAapD;EACbqD,sBAAsBpD;EACtBqD,aAAapD;EACbqD,eAAepD;EACfqD,gBAAgBpD;EAChBqD,yBAAyBpD;EACzBqD,UAAUpD;EACVqD,mBAAmBpD;EACnBqD,UAAUpD;EACVqD,YAAYpD;EACZqD,YAAYpD;CACd;CACAqD,SAAS;EACPC,cAAcpD;EACdqD,2BAA2BpD;EAC3BqD,OAAOpD;EACPqD,UAAUpD;EACVqD,MAAMpD;EACNqD,mBAAmBpD;CACrB;CACAqD,gBAAgB;EACdC,KAAK9F;EACL+F,KAAKhG;EACLiG,KAAKpG;EACLqG,QAAQxG;EAIRyG,MAAMrG;EACNsG,QAAQrG;EACRsG,QAAQnG;EACRoG,aAAanG;EACboG,OAAO9G;EACP+G,OAAO7G;EACP8G,MAAM7G;CACR;AACF,CAAC;AAID,MAAa,EACX+G,cACAC,aACAC,eACAC,iBACAC,gBACAC,qBACEpG,wBAA6C;;;AC3HjD,MAAa6G,4BAA4B;CAAC;CAAI;CAAI;AAAG;AAErD,MAAaC,cAAmC,EAC9CH,kBAAkBE,2BAClB,GAAGE,YACC;CAGJ;CACA,MAAMC,QAAQR,gBAAgB;CAC9B,MAAM,EAAES,WAAWC,aAAaF,MAAMG,MAAMC;CAE5C,OACE,oBAAC,iBAAD;EACE,WAAU;EACV,iBAAA;EACA,gBAAA;EACA,GAAIL;EACJ,IAAI,CACF;GAAEM,YAAY;GAAGC,WAAW;GAAIC,WAAW;GAAGC,aAAa;EAAU,GACrE,GAAIZ,MAAMa,QAAQV,MAAMW,EAAE,IAAIX,MAAMW,KAAK,CAACX,MAAMW,EAAE,CAAE;EAEtD,oBAAoBf;EAGpB,OAAOK,MAAMW,aAAa,MAAM,KAAK,KAAKX,MAAMY,YAAY;EAC5D,MAAMX;EACN,aAAaC;EACb,eAAeW,GAAGC,SAASd,MAAMe,aAAaD,IAAI;EAElD,sBAAsBE,UACpBhB,MAAMiB,cAAc;GAAEhB,WAAW;GAAGC,UAAUgB,OAAOF,MAAMG,OAAOC,KAAK;EAAE,CAAC;CAC3E,CAAA;AAGP;;;ACpCA,MAAaW,qBAAqB;CAChCC,MAAM;CACNC,MAAM;CACNC,OAAO;CAEPC,SAAS;CACTC,cAAc;CACdC,cAAc;CACdC,sBAAsB;CACtBC,gBAAgB;CAChBC,oBAAoB;CACpBC,eAAe;CACfC,cAAc;CACdC,eAAe;CACfC,aAAa;CAEbC,eAAe;CACfC,iBAAiB;CACjBC,cAAc;CACd,0BAA0B;CAC1B,wBAAwB;CACxB,0BAA0B;CAC1B,6BAA6B;CAC7B,2BAA2B;CAC3BC,qBAAqB;CACrBC,4BAA4B;CAC5BC,WAAW;CACXC,WAAW;CACXC,UAAU;CACVC,iBAAiB;CACjB,8BAA8B;CAC9B,6BAA6B;CAE7BC,MAAM;CACNC,KAAK;CACL,gBAAgB;CAChB,iBAAiB;CACjB,eAAe;CACfC,MAAM;CACN,kBAAkB;CAClB,iBAAiB;CACjB,oBAAoB;CACpB,qBAAqB;CACrB,mBAAmB;CACnBC,WAAW;CACXC,cAAc;CACdC,aAAa;CACbC,YAAY;CACZC,WAAW;CACXC,QAAQ;CACRC,aAAa;CACbC,cAAc;CACdC,SAAS;CAETC,QAAQ;CACRC,WAAW;CACXC,YAAY;CACZC,kBAAkB;CAClBC,YAAY;AACd;AAEA,MAAaE,cAAc,GAAGC,UAC5BA,MAAME,OAAOC,OAAO,CAAC,CAACC,KAAK,GAAG;AAEhC,MAAaC,eACXC,QACAI,SACmB;CACnB,MAAMC,SAASL,OAAOM,YAAY;CAClC,OACE,CAAC,CAACD,UAAUrD,mBAAmB,GAAGoD,KAAI,IAAKC,WAAW,UAAU,gBAAgB;AAEpF;AAEA,MAAaE,iBAAiBC,OAAeC,WAC3C,GAAGD,MAAK,IAAKjE,iBAAiBkE,MAAM,EAAC;AAQvC,MAAaC,eACXV,WACW;CACX,MAAMW,OAAOX,OAAOY,UAAUD;CAC9B,IAAIA,MAAMH,OAAO,OAAOG,KAAKH;CAE7B,OAAO,OAAOR,OAAOY,UAAUC,WAAW,WAAWb,OAAOY,UAAUC,SAASb,OAAOc;AACxF;AAEA,MAAaC,kBACXf,WAEAH,QAASG,OAAOY,UAAUD,MAAuCH,KAAK,KACtE,OAAOR,OAAOY,UAAUC,WAAW;AAErC,MAAaG,eACXhB,WAECA,OAAOY,UAAUD,MAAuCM,UACxDF,eAAef,MAAM,IAAI,SAAS;;AAGrC,MAAakB,cACXlB,WAEAmB,OAAOC,OAAOpB,OAAO7C,MAAMkE,MAAMC,aAAaC,IAAI,GAAGvB,OAAOc,EAAE,IAC1D,IACEd,OAAOY,UAAUD,MAAuCa,QAAQ;AAExE,MAAaC,cACXzB,QACA0B,UACS;CACT,MAAM,EAAEvE,UAAU6C;CAClB,MAAM2B,UAAUxE,MAAMkE,MAAMO,YAAYL,IAAI;CAC5C,MAAMM,QAAQF,QAAQG,SAAS,CAAC,GAAGH,OAAO,IAAIxE,MAAM4E,kBAAkB,CAAC,CAACC,KAAK,EAAElB,SAASA,EAAE;CAC1F,MAAMmB,OAAOJ,MAAMK,QAAQlC,OAAOc,EAAE;CACpC,MAAMqB,KAAKF,OAAOP;CAClB,IAAIO,OAAO,KAAKE,KAAK,KAAKA,MAAMN,MAAMC,QAAQ;CAE9CD,MAAMO,OAAOD,IAAI,GAAG,GAAGN,MAAMO,OAAOH,MAAM,CAAC,CAAC;CAC5C9E,MAAMkF,eAAeR,KAAK;AAC5B;AAEA,MAAaS,YACXtC,QACAuC,WAAW,UACR;CACH,MAAMlC,SAASL,OAAOM,YAAY;CAClC,IAAI,CAACD,QAAQ,OAAO,CAAC;CAErB,OAAO;EACLmC,UAAU;EACVC,QAAQF,WAAW,IAAI;EACvBG,kBAAkBrC,WAAW,UAAUL,OAAO2C,SAAS,OAAO,IAAIC,KAAAA;EAClEC,gBAAgBxC,WAAW,QAAQL,OAAO8C,SAAS,KAAK,IAAIF,KAAAA;EAC5DG,SAAS;EACT,GAAI,CAACR,YAAY;GACf,+BAA+B,EAC7BS,kBAAkBC,UAChB,mBAAmBA,MAAMC,QAAQC,OAAOC,MAAK,IAAKH,MAAMC,QAAQC,OAAOC,MAAK,GAChF;GACA,sCAAsC,EACpCJ,kBAAkBC,UAChB,mBAAmBA,MAAMC,QAAQC,OAAOE,SAAQ,IAAKJ,MAAMC,QAAQC,OAAOE,SAAQ,GACtF;EACF;EACA,GAAIhD,WAAW,WACbL,OAAOsD,gBAAgB,OAAO,KAAK;GACjCC,iBAAiB;GACjBC,sBAAsB;GACtBC,aAAa;EACf;EACF,GAAIpD,WAAW,SACbL,OAAO0D,iBAAiB,KAAK,KAAK;GAChCC,mBAAmB;GACnBC,wBAAwB;GACxBH,aAAa;EACf;CACJ;AACF;AAEA,MAAaI,mBACXpF,SACG;CACH,IAAI,CAACA,KAAKqF,cAAc,GAAG,OAAO,CAAC;CAEnC,MAAMC,QAAQtF,KAAKuF,kBAAkB;CACrC,MAAMC,WAAWhB,UACf;EACEc,MAAMG,OAAO,mBAAmBjB,MAAMC,QAAQiB,QAAQjH;EACtD6G,MAAMK,UAAU,oBAAoBnB,MAAMC,QAAQiB,QAAQjH;EAC1D6G,MAAMM,QAAQ,mBAAmBpB,MAAMC,QAAQiB,QAAQjH;EACvD6G,MAAMO,SAAS,oBAAoBrB,MAAMC,QAAQiB,QAAQjH;CAAM,CAChE,CACE0C,OAAOC,OAAO,CAAC,CACfC,KAAK,IAAI,KAAK;CAEnB,OAAO;EACLkD,kBAAkBC,UAChB,mBAAmBA,MAAMC,QAAQC,OAAOE,SAAQ,IAAKJ,MAAMC,QAAQC,OAAOE,SAAQ;EACpFkB,WAAWN;CACb;AACF;;AAGA,MAAMO,YAAYC,SAChB,YAAYC,KAAKD,IAAI,IAAI,IAAIA,KAAKE,WAAW,MAAK,MAAI,EAAC,KAAMF;AAE/D,MAAMG,oBAAoBC,UAA2B;CACnD,IAAIA,SAAS,MAAM,OAAO;CAC1B,IAAI,OAAOA,UAAU,UAAU,OAAOL,SAASK,KAAK;CACpD,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,aAAa,OAAOA,UAAU,UAC9E,OAAOL,SAASM,OAAOD,KAAK,CAAC;CAC/B,IAAIA,iBAAiBE,MAAM,OAAOP,SAASK,MAAMG,YAAY,CAAC;CAG9D,OAAOR,SAASS,KAAKC,UAAUL,KAAK,KAAK,EAAE;AAC7C;;;;;;AAOA,MAAaM,mBAAmBC,YAC9BA,QACGpD,KAAKqD,SAASA,KAAKrD,KAAKsD,UAAUA,MAAMtD,IAAI4C,gBAAgB,CAAC,CAAC9E,KAAK,GAAI,CAAC,CAAC,CAACA,KAAK,IAAI,CAAC,CAAC,CACrFA,KAAK,MAAM;AAEhB,MAAayF,kBACXC,OACAC,WACAC,cACkB;CAClB,MAAMC,SAASF,YAAY,IAAID,MAAMI;CACrC,MAAMC,QAAQJ,YAAYC,YAAYF,MAAMI;CAE5C,OAAO/I,sBAAsB;EAC3B,GAAG2I;EACHM,YAAYN,MAAMM,cAAcL,cAAc,aAAaI,QAAQF;EACnEI,UAAUP,MAAMO,YAAYN,cAAc,aAAaE,SAASE;EAChED,UAAU;CACZ,CAAC;AACH;;AC1OA,MAAaK,eAAeC,OAAgBC,aAAa,WAAmB;CAC1E,IAAID,UAAU,QAAQA,UAAUE,KAAAA,GAAW,OAAO;CAClD,IAAIF,iBAAiBG,MAAM,OAAOL,MAAME,KAAK,CAAC,CAACI,OAAOH,UAAU;CAChE,IAAI,OAAOD,UAAU,UAAU,OAAOA;CACtC,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,aAAa,OAAOA,UAAU,UAC9E,OAAOA,MAAMK,SAAS;CAGxB,OAAOC,KAAKC,UAAUP,KAAK,KAAK;AAClC;;ACLA,MAAaa,kBAMTM,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAD,EAAA,OAAA,oEAAA;EAAA,KAAA,IAAAE,KAAA,GAAAA,KAAA,IAAAA,MAAA,GAAAF,EAAAE,MAAAC,OAAAC,IAAA,2BAAA;EAAAJ,EAAA,KAAA;CAAA;CAAA,IAAAF;CAAA,IAAAH;CAAA,IAAAU;CAAA,IAAAC;CAAA,IAAAN,EAAA,OAAAD,IAAA;EAAC,CAAA,CAAAL,QAAAY,IAAAX,SAAAG,YAAA,GAAAO,SAAAN;EAA8CC,EAAA,KAAAD;EAAAC,EAAA,KAAAF;EAAAE,EAAA,KAAAL;EAAAK,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAA;EAAAR,aAAAE,EAAA;EAAAL,UAAAK,EAAA;EAAAK,QAAAL,EAAA;EAAAM,KAAAN,EAAA;CAAA;CAA5C,MAAAN,SAAAY,OAAAC,KAAAA,IAAA,KAAAD;CACL,MAAAE,OAAahB,eAAe;CAAE,IAAAiB;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAhB,EAAA,OAAAQ,QAAAR,EAAA,OAAAF,cAAAE,EAAA,OAAAL,WAAAK,EAAA,OAAAN,UAAAM,EAAA,QAAAK,OAAA;EAEoCW,KAAAb,OAAIC,IAAJ,6BAAG;EAACa,KAAA;GADtE,MAAAC,QAAcV,KAAIW,SAAU;GAC5B,IAAID,UAAU,QAAQA,UAAUX,KAAAA,KAAaW,UAAU,IAAE;IAASF,KAAA;IAAA,MAAAC;GAAI;GAAC,IAAAG;GAAA,IAAApB,EAAA,QAAAF,cAAAE,EAAA,QAAAL,SAAA;IAExDyB,MAAAC,UACb,OAAOA,UAAU,WACbA,MAAKC,eAAgBf,KAAAA,GAAWZ,OACH,IAA7BJ,YAAY8B,OAAOvB,UAAU;IAACE,EAAA,MAAAF;IAAAE,EAAA,MAAAL;IAAAK,EAAA,MAAAoB;GAAA,OAAAA,KAAApB,EAAA;GAHpC,MAAAuB,SAAeH;GAMZX,KAAApB;GAAmBqB,KAAA;GAAcC,KAAA;GAAiBC,KAAA;GAAWP,KAAAA;GAC3DX,KAAAA;GAEAqB,KAAAS,MAAKC,QAASP,KAAqD,IAA5CA,MAAKQ,IAAKH,MAAM,CAAC,CAAAI,KAAM,KAAqB,IAAZJ,OAAOL,KAAK;EAAC;EAAAlB,EAAA,KAAAQ;EAAAR,EAAA,KAAAF;EAAAE,EAAA,KAAAL;EAAAK,EAAA,KAAAN;EAAAM,EAAA,MAAAK;EAAAL,EAAA,MAAAS;EAAAT,EAAA,MAAAU;EAAAV,EAAA,MAAAW;EAAAX,EAAA,MAAAY;EAAAZ,EAAA,MAAAa;EAAAb,EAAA,MAAAc;EAAAd,EAAA,MAAAe;EAAAf,EAAA,MAAAgB;CAAA,OAAA;EAAAP,KAAAT,EAAA;EAAAU,KAAAV,EAAA;EAAAW,KAAAX,EAAA;EAAAY,KAAAZ,EAAA;EAAAa,KAAAb,EAAA;EAAAc,KAAAd,EAAA;EAAAe,KAAAf,EAAA;EAAAgB,KAAAhB,EAAA;CAAA;CAAA,IAAAgB,OAAAb,OAAAC,IAAA,6BAAA,GAAA,OAAAY;CAAA,IAAAI;CAAA,IAAApB,EAAA,QAAAS,MAAAT,EAAA,QAAAU,MAAAV,EAAA,QAAAW,MAAAX,EAAA,QAAAY,MAAAZ,EAAA,QAAAa,MAAAb,EAAA,QAAAc,MAAAd,EAAA,QAAAe,IAAA;EAHvEK,KAAA,qBAAC,IAAD;GAAoB,SAAAV;GAAc,OAAAC;GAAiB,QAAAC;GAAM,GAAKP;GAA9D,UAAA,CACGX,IAEAqB,EAHQ;;EAIEf,EAAA,MAAAS;EAAAT,EAAA,MAAAU;EAAAV,EAAA,MAAAW;EAAAX,EAAA,MAAAY;EAAAZ,EAAA,MAAAa;EAAAb,EAAA,MAAAc;EAAAd,EAAA,MAAAe;EAAAf,EAAA,MAAAoB;CAAA,OAAAA,KAAApB,EAAA;CAAA,OAJboB;AAIa"}