UNPKG

@grafana/ui

Version:
1 lines • 46.1 kB
{"version":3,"file":"TableNG.mjs","sources":["../../../../../src/components/Table/TableNG/TableNG.tsx"],"sourcesContent":["import 'react-data-grid/lib/styles.css';\nimport { css, cx } from '@emotion/css';\nimport { Property } from 'csstype';\nimport { Key, ReactNode, useCallback, useLayoutEffect, useMemo, useState } from 'react';\nimport {\n Cell,\n CellRendererProps,\n DataGrid,\n DataGridProps,\n RenderCellProps,\n RenderRowProps,\n Row,\n SortColumn,\n} from 'react-data-grid';\n\nimport { DataHoverClearEvent, DataHoverEvent, Field, FieldType, GrafanaTheme2, ReducerID } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { TableCellHeight } from '@grafana/schema';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { ContextMenu } from '../../ContextMenu/ContextMenu';\nimport { MenuItem } from '../../Menu/MenuItem';\nimport { Pagination } from '../../Pagination/Pagination';\nimport { PanelContext, usePanelContext } from '../../PanelChrome';\nimport { DataLinksActionsTooltip } from '../DataLinksActionsTooltip';\nimport { TableCellInspector, TableCellInspectorMode } from '../TableCellInspector';\nimport { CellColors, TableCellDisplayMode } from '../types';\nimport { DataLinksActionsTooltipState } from '../utils';\n\nimport { HeaderCell } from './Cells/HeaderCell';\nimport { RowExpander } from './Cells/RowExpander';\nimport { TableCellActions } from './Cells/TableCellActions';\nimport { getCellRenderer } from './Cells/renderers';\nimport { COLUMN, TABLE } from './constants';\nimport {\n useColumnResize,\n useFilteredRows,\n useFooterCalcs,\n useHeaderHeight,\n usePaginatedRows,\n useRowHeight,\n useSortedRows,\n useTypographyCtx,\n} from './hooks';\nimport { TableNGProps, TableRow, TableSummaryRow, TableColumn, ContextMenuProps } from './types';\nimport {\n frameToRecords,\n getDefaultRowHeight,\n getDisplayName,\n getIsNestedTable,\n getTextAlign,\n getVisibleFields,\n shouldTextOverflow,\n getApplyToRowBgFn,\n computeColWidths,\n applySort,\n getCellColors,\n getCellOptions,\n shouldTextWrap,\n isCellInspectEnabled,\n getCellLinks,\n withDataLinksActionsTooltip,\n} from './utils';\n\ntype CellRootRenderer = (key: React.Key, props: CellRendererProps<TableRow, TableSummaryRow>) => React.ReactNode;\n\nexport function TableNG(props: TableNGProps) {\n const {\n cellHeight,\n data,\n enablePagination = false,\n enableSharedCrosshair = false,\n enableVirtualization,\n footerOptions,\n getActions = () => [],\n height,\n initialSortBy,\n noHeader,\n onCellFilterAdded,\n onColumnResize,\n onSortByChange,\n showTypeIcons,\n structureRev,\n width,\n } = props;\n\n const theme = useTheme2();\n const styles = useStyles2(getGridStyles, {\n enablePagination,\n noHeader,\n });\n const panelContext = usePanelContext();\n\n const getCellActions = useCallback(\n (field: Field, rowIdx: number) => getActions(data, field, rowIdx),\n [getActions, data]\n );\n\n const hasHeader = !noHeader;\n const hasFooter = Boolean(footerOptions?.show && footerOptions.reducer?.length);\n const isCountRowsSet = Boolean(\n footerOptions?.countRows &&\n footerOptions.reducer &&\n footerOptions.reducer.length &&\n footerOptions.reducer[0] === ReducerID.count\n );\n\n const [contextMenuProps, setContextMenuProps] = useState<ContextMenuProps | null>(null);\n const [isContextMenuOpen, setIsContextMenuOpen] = useState(false);\n\n const resizeHandler = useColumnResize(onColumnResize);\n\n useLayoutEffect(() => {\n if (!isContextMenuOpen) {\n return;\n }\n\n function onClick(_event: MouseEvent) {\n setIsContextMenuOpen(false);\n }\n\n window.addEventListener('click', onClick);\n\n return () => {\n window.removeEventListener('click', onClick);\n };\n }, [isContextMenuOpen]);\n\n const rows = useMemo(() => frameToRecords(data), [data]);\n const hasNestedFrames = useMemo(() => getIsNestedTable(data.fields), [data]);\n\n const {\n rows: filteredRows,\n filter,\n setFilter,\n crossFilterOrder,\n crossFilterRows,\n } = useFilteredRows(rows, data.fields, { hasNestedFrames });\n\n const {\n rows: sortedRows,\n sortColumns,\n setSortColumns,\n } = useSortedRows(filteredRows, data.fields, { hasNestedFrames, initialSortBy });\n\n const defaultRowHeight = getDefaultRowHeight(theme, cellHeight);\n const defaultHeaderHeight = getDefaultRowHeight(theme, TableCellHeight.Sm);\n const [isInspecting, setIsInspecting] = useState(false);\n const [expandedRows, setExpandedRows] = useState<Record<string, boolean>>({});\n\n // vt scrollbar accounting for column auto-sizing\n const visibleFields = useMemo(() => getVisibleFields(data.fields), [data.fields]);\n const availableWidth = useMemo(\n () => (hasNestedFrames ? width - COLUMN.EXPANDER_WIDTH : width),\n [width, hasNestedFrames]\n );\n const typographyCtx = useTypographyCtx();\n const widths = useMemo(() => computeColWidths(visibleFields, availableWidth), [visibleFields, availableWidth]);\n const headerHeight = useHeaderHeight({\n columnWidths: widths,\n fields: visibleFields,\n enabled: hasHeader,\n defaultHeight: defaultHeaderHeight,\n sortColumns,\n showTypeIcons: showTypeIcons ?? false,\n typographyCtx,\n });\n const rowHeight = useRowHeight({\n columnWidths: widths,\n fields: visibleFields,\n hasNestedFrames,\n defaultHeight: defaultRowHeight,\n headerHeight,\n expandedRows,\n typographyCtx,\n });\n\n const {\n rows: paginatedRows,\n page,\n setPage,\n numPages,\n pageRangeStart,\n pageRangeEnd,\n smallPagination,\n } = usePaginatedRows(sortedRows, {\n enabled: enablePagination,\n width: availableWidth,\n height,\n headerHeight,\n footerHeight: hasFooter ? defaultRowHeight : 0,\n rowHeight,\n });\n\n // Create a map of column key to text wrap\n const footerCalcs = useFooterCalcs(sortedRows, data.fields, { enabled: hasFooter, footerOptions, isCountRowsSet });\n const applyToRowBgFn = useMemo(() => getApplyToRowBgFn(data.fields, theme) ?? undefined, [data.fields, theme]);\n\n const renderRow = useMemo(\n () => renderRowFactory(data.fields, panelContext, expandedRows, enableSharedCrosshair),\n [data, enableSharedCrosshair, expandedRows, panelContext]\n );\n\n const commonDataGridProps = useMemo(\n () =>\n ({\n enableVirtualization,\n defaultColumnOptions: {\n minWidth: 50,\n resizable: true,\n sortable: true,\n // draggable: true,\n },\n onCellContextMenu: ({ row, column }, event) => {\n // in nested tables, it's possible for this event to trigger in a column header\n // when holding Ctrl for multi-row sort.\n if (column.key === 'expanded') {\n return;\n }\n\n event.preventGridDefault();\n // Do not show the default context menu\n event.preventDefault();\n\n const cellValue = row[column.key];\n setContextMenuProps({\n // rowIdx: rows.indexOf(row),\n value: String(cellValue ?? ''),\n top: event.clientY,\n left: event.clientX,\n });\n\n setIsContextMenuOpen(true);\n },\n onColumnResize: resizeHandler,\n onSortColumnsChange: (newSortColumns: SortColumn[]) => {\n setSortColumns(newSortColumns);\n onSortByChange?.(\n newSortColumns.map(({ columnKey, direction }) => ({\n displayName: columnKey,\n desc: direction === 'DESC',\n }))\n );\n },\n sortColumns,\n rowHeight,\n headerRowClass: styles.headerRow,\n headerRowHeight: headerHeight,\n bottomSummaryRows: hasFooter ? [{}] : undefined,\n }) satisfies Partial<DataGridProps<TableRow, TableSummaryRow>>,\n [\n enableVirtualization,\n resizeHandler,\n sortColumns,\n headerHeight,\n styles.headerRow,\n rowHeight,\n hasFooter,\n setSortColumns,\n onSortByChange,\n ]\n );\n\n interface Schema {\n columns: TableColumn[];\n cellRootRenderers: Record<string, CellRootRenderer>;\n colsWithTooltip: Record<string, boolean>;\n }\n\n const { columns, cellRootRenderers, colsWithTooltip } = useMemo(() => {\n const fromFields = (f: Field[], widths: number[]) => {\n const result: Schema = {\n columns: [],\n cellRootRenderers: {},\n colsWithTooltip: {},\n };\n\n let lastRowIdx = -1;\n let _rowHeight = 0;\n\n f.forEach((field, i) => {\n const justifyContent = getTextAlign(field);\n const footerStyles = getFooterStyles(justifyContent);\n const displayName = getDisplayName(field);\n const headerCellClass = getHeaderCellStyles(theme, justifyContent).headerCell;\n const cellOptions = getCellOptions(field);\n const renderFieldCell = getCellRenderer(field, cellOptions);\n\n const cellInspect = isCellInspectEnabled(field);\n const showFilters = Boolean(field.config.filterable && onCellFilterAdded != null);\n const showActions = cellInspect || showFilters;\n const width = widths[i];\n\n // helps us avoid string cx and emotion per-cell\n const cellActionClassName = showActions\n ? cx(\n 'table-cell-actions',\n styles.cellActions,\n justifyContent === 'flex-end' ? styles.cellActionsEnd : styles.cellActionsStart\n )\n : undefined;\n\n const cellType = cellOptions.type;\n const shouldOverflow = shouldTextOverflow(field);\n const shouldWrap = shouldTextWrap(field);\n const withTooltip = withDataLinksActionsTooltip(field, cellType);\n\n result.colsWithTooltip[displayName] = withTooltip;\n\n // this fires first\n const renderCellRoot = (key: Key, props: CellRendererProps<TableRow, TableSummaryRow>): ReactNode => {\n const rowIdx = props.row.__index;\n const value = props.row[props.column.key];\n\n // meh, this should be cached by the renderRow() call?\n if (rowIdx !== lastRowIdx) {\n _rowHeight = typeof rowHeight === 'function' ? rowHeight(props.row) : rowHeight;\n lastRowIdx = rowIdx;\n }\n\n let colors: CellColors;\n\n if (applyToRowBgFn != null) {\n colors = applyToRowBgFn(props.rowIdx);\n } else if (cellType !== TableCellDisplayMode.Auto) {\n const displayValue = field.display!(value); // this fires here to get colors, then again to get rendered value?\n colors = getCellColors(theme, cellOptions, displayValue);\n } else {\n colors = {};\n }\n\n const cellStyle = getCellStyles(theme, field, _rowHeight, shouldWrap, shouldOverflow, withTooltip, colors);\n\n return (\n <Cell\n key={key}\n {...props}\n className={cx(props.className, cellStyle.cell)}\n style={{ color: colors.textColor ?? 'inherit' }}\n />\n );\n };\n\n result.cellRootRenderers[displayName] = renderCellRoot;\n\n // this fires second\n const renderCellContent = (props: RenderCellProps<TableRow, TableSummaryRow>): JSX.Element => {\n const rowIdx = props.row.__index;\n const value = props.row[props.column.key];\n const frame = data;\n\n return (\n <>\n {renderFieldCell({\n cellOptions,\n frame,\n field,\n height: _rowHeight,\n justifyContent,\n rowIdx,\n theme,\n value,\n width,\n cellInspect,\n showFilters,\n getActions: getCellActions,\n })}\n {showActions && (\n <TableCellActions\n field={field}\n value={value}\n cellOptions={cellOptions}\n displayName={displayName}\n cellInspect={cellInspect}\n showFilters={showFilters}\n className={cellActionClassName}\n setIsInspecting={setIsInspecting}\n setContextMenuProps={setContextMenuProps}\n onCellFilterAdded={onCellFilterAdded}\n />\n )}\n </>\n );\n };\n\n const column: TableColumn = {\n field,\n key: displayName,\n name: displayName,\n width,\n headerCellClass,\n renderCell: renderCellContent,\n renderHeaderCell: ({ column, sortDirection }) => (\n <HeaderCell\n column={column}\n rows={rows}\n field={field}\n filter={filter}\n setFilter={setFilter}\n crossFilterOrder={crossFilterOrder}\n crossFilterRows={crossFilterRows}\n direction={sortDirection}\n showTypeIcons={showTypeIcons}\n />\n ),\n renderSummaryCell: () => {\n if (isCountRowsSet && i === 0) {\n return (\n <div className={footerStyles.footerCellCountRows}>\n <span>\n <Trans i18nKey=\"grafana-ui.table.count\">Count</Trans>\n </span>\n <span>{footerCalcs[i]}</span>\n </div>\n );\n }\n return <div className={footerStyles.footerCell}>{footerCalcs[i]}</div>;\n },\n };\n\n result.columns.push(column);\n });\n\n return result;\n };\n\n const result = fromFields(visibleFields, widths);\n\n // handle nested frames rendering from here.\n if (!hasNestedFrames) {\n return result;\n }\n\n // pre-calculate renderRow and expandedColumns based on the first nested frame's fields.\n const firstNestedData = rows.find((r) => r.data)?.data;\n if (!firstNestedData) {\n return result;\n }\n\n const renderRow = renderRowFactory(firstNestedData.fields, panelContext, expandedRows, enableSharedCrosshair);\n const { columns: nestedColumns, cellRootRenderers: nestedCellRootRenderers } = fromFields(\n firstNestedData.fields,\n computeColWidths(firstNestedData.fields, availableWidth)\n );\n\n const renderCellRoot: CellRootRenderer = (key, props) => nestedCellRootRenderers[props.column.key](key, props);\n\n result.cellRootRenderers.expanded = (key, props) => <Cell key={key} {...props} />;\n\n // If we have nested frames, we need to add a column for the row expansion\n result.columns.unshift({\n key: 'expanded',\n name: '',\n field: {\n name: '',\n type: FieldType.other,\n config: {},\n values: [],\n },\n cellClass(row) {\n if (row.__depth !== 0) {\n return styles.cellNested;\n }\n return;\n },\n colSpan(args) {\n return args.type === 'ROW' && args.row.__depth === 1 ? data.fields.length : 1;\n },\n renderCell: ({ row }) => {\n if (row.__depth === 0) {\n return (\n <RowExpander\n height={defaultRowHeight}\n isExpanded={expandedRows[row.__index] ?? false}\n onCellExpand={() => {\n setExpandedRows({ ...expandedRows, [row.__index]: !expandedRows[row.__index] });\n }}\n />\n );\n }\n\n // Type guard to check if data exists as it's optional\n const nestedData = row.data;\n if (!nestedData) {\n return null;\n }\n\n const expandedRecords = applySort(frameToRecords(nestedData), nestedData.fields, sortColumns);\n\n return (\n <DataGrid<TableRow, TableSummaryRow>\n {...commonDataGridProps}\n className={cx(styles.grid, styles.gridNested)}\n columns={nestedColumns}\n rows={expandedRecords}\n renderers={{ renderRow, renderCell: renderCellRoot }}\n />\n );\n },\n width: COLUMN.EXPANDER_WIDTH,\n minWidth: COLUMN.EXPANDER_WIDTH,\n });\n\n return result;\n }, [\n applyToRowBgFn,\n availableWidth,\n commonDataGridProps,\n crossFilterOrder,\n crossFilterRows,\n data,\n defaultRowHeight,\n enableSharedCrosshair,\n expandedRows,\n filter,\n footerCalcs,\n hasNestedFrames,\n isCountRowsSet,\n onCellFilterAdded,\n panelContext,\n rowHeight,\n rows,\n setFilter,\n showTypeIcons,\n sortColumns,\n styles,\n theme,\n visibleFields,\n widths,\n getCellActions,\n ]);\n\n // invalidate columns on every structureRev change. this supports width editing in the fieldConfig.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const structureRevColumns = useMemo(() => columns, [columns, structureRev]);\n\n // we need to have variables with these exact names for the localization to work properly\n const itemsRangeStart = pageRangeStart;\n const displayedEnd = pageRangeEnd;\n const numRows = sortedRows.length;\n\n const renderCellRoot: CellRootRenderer = (key, props) => {\n return cellRootRenderers[props.column.key](key, props);\n };\n\n const [tooltipState, setTooltipState] = useState<DataLinksActionsTooltipState>();\n\n return (\n <>\n <DataGrid<TableRow, TableSummaryRow>\n {...commonDataGridProps}\n className={styles.grid}\n columns={structureRevColumns}\n rows={paginatedRows}\n onCellClick={({ column, row }, { clientX, clientY, preventGridDefault }) => {\n // Note: could be column.field; JS says yes, but TS says no!\n const field = columns[column.idx].field;\n\n if (colsWithTooltip[getDisplayName(field)]) {\n const rowIdx = row.__index;\n setTooltipState({\n coords: {\n clientX,\n clientY,\n },\n links: getCellLinks(field, rowIdx),\n actions: getCellActions(field, rowIdx),\n });\n\n preventGridDefault();\n }\n }}\n onCellKeyDown={\n hasNestedFrames\n ? (_, event) => {\n if (event.isDefaultPrevented()) {\n // skip parent grid keyboard navigation if nested grid handled it\n event.preventGridDefault();\n }\n }\n : null\n }\n renderers={{ renderRow, renderCell: renderCellRoot }}\n />\n\n {enablePagination && (\n <div className={styles.paginationContainer}>\n <Pagination\n className=\"table-ng-pagination\"\n currentPage={page + 1}\n numberOfPages={numPages}\n showSmallVersion={smallPagination}\n onNavigate={(toPage) => {\n setPage(toPage - 1);\n }}\n />\n {!smallPagination && (\n <div className={styles.paginationSummary}>\n {/* TODO: once TableRT is deprecated, we can update the localiziation\n string with the more consistent variable names */}\n <Trans i18nKey=\"grafana-ui.table.pagination-summary\">\n {{ itemsRangeStart }} - {{ displayedEnd }} of {{ numRows }} rows\n </Trans>\n </div>\n )}\n </div>\n )}\n\n {tooltipState && (\n <DataLinksActionsTooltip\n links={tooltipState.links ?? []}\n actions={tooltipState.actions}\n coords={tooltipState.coords}\n onTooltipClose={() => setTooltipState(undefined)}\n />\n )}\n\n {isContextMenuOpen && (\n <ContextMenu\n x={contextMenuProps?.left || 0}\n y={contextMenuProps?.top || 0}\n renderMenuItems={() => (\n <MenuItem\n label={t('grafana-ui.table.inspect-menu-label', 'Inspect value')}\n onClick={() => setIsInspecting(true)}\n className={styles.menuItem}\n />\n )}\n focusOnOpen={false}\n />\n )}\n\n {isInspecting && (\n <TableCellInspector\n mode={contextMenuProps?.mode ?? TableCellInspectorMode.text}\n value={contextMenuProps?.value}\n onDismiss={() => {\n setIsInspecting(false);\n setContextMenuProps(null);\n }}\n />\n )}\n </>\n );\n}\n\n/**\n * this is passed to the top-level `renderRow` prop on DataGrid. applies aria attributes and custom event handlers.\n */\nconst renderRowFactory =\n (\n fields: Field[],\n panelContext: PanelContext,\n expandedRows: Record<string, boolean>,\n enableSharedCrosshair: boolean\n ) =>\n (key: React.Key, props: RenderRowProps<TableRow, TableSummaryRow>): React.ReactNode => {\n const { row } = props;\n const rowIdx = row.__index;\n const isExpanded = !!expandedRows[rowIdx];\n\n // Don't render non expanded child rows\n if (row.__depth === 1 && !isExpanded) {\n return null;\n }\n\n // Add aria-expanded to parent rows that have nested data\n if (row.data) {\n return <Row key={key} {...props} aria-expanded={isExpanded} />;\n }\n\n const handlers: Partial<typeof props> = {};\n if (enableSharedCrosshair) {\n const timeField = fields.find((f) => f.type === FieldType.time);\n if (timeField) {\n handlers.onMouseEnter = () => {\n panelContext.eventBus.publish(\n new DataHoverEvent({\n point: {\n time: timeField?.values[rowIdx],\n },\n })\n );\n };\n handlers.onMouseLeave = () => {\n panelContext.eventBus.publish(new DataHoverClearEvent());\n };\n }\n }\n\n return <Row key={key} {...props} {...handlers} />;\n };\n\nconst getGridStyles = (\n theme: GrafanaTheme2,\n { enablePagination, noHeader }: { enablePagination?: boolean; noHeader?: boolean }\n) => ({\n grid: css({\n '--rdg-background-color': theme.colors.background.primary,\n '--rdg-header-background-color': theme.colors.background.primary,\n '--rdg-border-color': theme.isDark ? '#282b30' : '#ebebec',\n '--rdg-color': theme.colors.text.primary,\n\n // note: this cannot have any transparency since default cells that\n // overlay/overflow on hover inherit this background and need to occlude cells below\n '--rdg-row-hover-background-color': theme.isDark ? '#212428' : '#f4f5f5',\n\n // TODO: magic 32px number is unfortunate. it would be better to have the content\n // flow using flexbox rather than hard-coding this size via a calc\n blockSize: enablePagination ? 'calc(100% - 32px)' : '100%',\n scrollbarWidth: 'thin',\n scrollbarColor: theme.isDark ? '#fff5 #fff1' : '#0005 #0001',\n\n border: 'none',\n\n '.rdg-summary-row': {\n '.rdg-cell': {\n zIndex: theme.zIndex.tooltip - 1,\n paddingInline: TABLE.CELL_PADDING,\n paddingBlock: TABLE.CELL_PADDING,\n },\n },\n }),\n gridNested: css({\n height: '100%',\n width: `calc(100% - ${COLUMN.EXPANDER_WIDTH - 1}px)`,\n overflow: 'visible',\n marginLeft: COLUMN.EXPANDER_WIDTH - 1,\n }),\n cellNested: css({\n '&[aria-selected=true]': {\n outline: 'none',\n },\n }),\n cellActions: css({\n display: 'none',\n position: 'absolute',\n top: 0,\n margin: 'auto',\n height: '100%',\n color: theme.colors.text.primary,\n background: theme.isDark ? 'rgba(0, 0, 0, 0.3)' : 'rgba(255, 255, 255, 0.7)',\n padding: theme.spacing.x0_5,\n paddingInlineStart: theme.spacing.x1,\n }),\n cellActionsEnd: css({\n left: 0,\n }),\n cellActionsStart: css({\n right: 0,\n }),\n headerRow: css({\n paddingBlockStart: 0,\n fontWeight: 'normal',\n ...(noHeader ? { display: 'none' } : {}),\n '& .rdg-cell': {\n height: '100%',\n alignItems: 'flex-end',\n },\n }),\n paginationContainer: css({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'center',\n marginTop: '8px',\n width: '100%',\n }),\n paginationSummary: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n display: 'flex',\n justifyContent: 'flex-end',\n padding: theme.spacing(0, 1, 0, 2),\n }),\n menuItem: css({\n maxWidth: '200px',\n }),\n});\n\nconst getFooterStyles = (justifyContent: Property.JustifyContent) => ({\n footerCellCountRows: css({\n display: 'flex',\n justifyContent: 'space-between',\n }),\n footerCell: css({\n display: 'flex',\n justifyContent: justifyContent || 'space-between',\n }),\n});\n\nconst getHeaderCellStyles = (theme: GrafanaTheme2, justifyContent: Property.JustifyContent) => ({\n headerCell: css({\n display: 'flex',\n gap: theme.spacing(0.5),\n zIndex: theme.zIndex.tooltip - 1,\n paddingInline: TABLE.CELL_PADDING,\n paddingBlockEnd: TABLE.CELL_PADDING,\n justifyContent,\n '&:last-child': {\n borderInlineEnd: 'none',\n },\n }),\n});\n\nconst getCellStyles = (\n theme: GrafanaTheme2,\n field: Field,\n rowHeight: number,\n shouldWrap: boolean,\n shouldOverflow: boolean,\n hasTooltip: boolean,\n colors: CellColors\n) => {\n return {\n cell: css({\n textOverflow: 'initial',\n background: colors.bgColor ?? 'inherit',\n alignContent: 'center',\n justifyContent: getTextAlign(field),\n paddingInline: TABLE.CELL_PADDING,\n height: '100%',\n minHeight: rowHeight, // min height interacts with the fit-content property on the overflow container\n ...(shouldWrap && { whiteSpace: 'pre-line' }),\n ...(hasTooltip && { cursor: 'pointer' }),\n '&:last-child': {\n borderInlineEnd: 'none',\n },\n '&:hover': {\n background: colors.bgHoverColor,\n '.table-cell-actions': {\n display: 'flex',\n },\n ...(shouldOverflow && {\n zIndex: theme.zIndex.tooltip - 2,\n whiteSpace: 'pre-line',\n height: 'fit-content',\n minWidth: 'fit-content',\n }),\n },\n }),\n };\n};\n"],"names":["_a","widths","result","width","renderCellRoot","props","column","renderRow"],"mappings":"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"}