{"version":3,"file":"TableNG.cjs","sources":["../../../../../src/components/Table/TableNG/TableNG.tsx"],"sourcesContent":["import 'react-data-grid/lib/styles.css';\n\nimport { clsx } from 'clsx';\nimport memoize from 'micro-memoize';\nimport { CSSProperties, Key, ReactNode, useCallback, useMemo, useRef, useState, useEffect, type JSX } from 'react';\nimport {\n  Cell,\n  CellRendererProps,\n  DataGrid,\n  DataGridHandle,\n  DataGridProps,\n  RenderCellProps,\n  Renderers,\n  RenderRowProps,\n  Row,\n  SortColumn,\n} from 'react-data-grid';\n\nimport {\n  DataHoverClearEvent,\n  DataHoverEvent,\n  FALLBACK_COLOR,\n  Field,\n  FieldType,\n  getDisplayProcessor,\n} from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { FieldColorModeId, TableCellTooltipPlacement, TableFooterOptions } from '@grafana/schema';\n\nimport { useStyles2, useTheme2 } from '../../../themes/ThemeContext';\nimport { getTextColorForBackground as _getTextColorForBackground } from '../../../utils/colors';\nimport { Pagination } from '../../Pagination/Pagination';\nimport { PanelContext, usePanelContext } from '../../PanelChrome';\nimport { DataLinksActionsTooltip } from '../DataLinksActionsTooltip';\nimport { TableCellInspector, TableCellInspectorMode } from '../TableCellInspector';\nimport { TableCellDisplayMode } from '../types';\nimport { DataLinksActionsTooltipState } from '../utils';\n\nimport { getCellRenderer, getCellSpecificStyles } from './Cells/renderers';\nimport { HeaderCell } from './components/HeaderCell';\nimport { RowExpander } from './components/RowExpander';\nimport { SummaryCell } from './components/SummaryCell';\nimport { TableCellActions } from './components/TableCellActions';\nimport { TableCellTooltip } from './components/TableCellTooltip';\nimport { COLUMN, TABLE } from './constants';\nimport {\n  useColumnResize,\n  useColWidths,\n  useFilteredRows,\n  useHeaderHeight,\n  usePaginatedRows,\n  useRowHeight,\n  useScrollbarWidth,\n  useSortedRows,\n} from './hooks';\nimport {\n  getCellActionStyles,\n  getDefaultCellStyles,\n  getGridStyles,\n  getHeaderCellStyles,\n  getLinkStyles,\n  getMaxHeightCellStyles,\n  getTooltipStyles,\n} from './styles';\nimport {\n  TableNGProps,\n  TableRow,\n  TableSummaryRow,\n  TableColumn,\n  InspectCellProps,\n  TableCellStyleOptions,\n  FromFieldsResult,\n  CellRootRenderer,\n} from './types';\nimport {\n  applySort,\n  canFieldBeColorized,\n  calculateFooterHeight,\n  createTypographyContext,\n  displayJsonValue,\n  extractPixelValue,\n  frameToRecords,\n  getAlignment,\n  getApplyToRowBgFn,\n  getCellColorInlineStylesFactory,\n  getCellLinks,\n  getCellOptions,\n  getDefaultRowHeight,\n  getDisplayName,\n  getIsNestedTable,\n  getJustifyContent,\n  getVisibleFields,\n  isCellInspectEnabled,\n  predicateByName,\n  shouldTextOverflow,\n  shouldTextWrap,\n  getSummaryCellTextAlign,\n  parseStyleJson,\n  IS_SAFARI_26,\n  rowKeyGetter,\n} from './utils';\n\nconst EXPANDED_COLUMN_KEY = 'expanded';\n\nexport function TableNG(props: TableNGProps) {\n  const {\n    cellHeight,\n    data,\n    disableKeyboardEvents,\n    disableSanitizeHtml,\n    enablePagination = false,\n    enableSharedCrosshair = false,\n    enableVirtualization,\n    frozenColumns = 0,\n    getActions = () => [],\n    height,\n    initialSortBy,\n    maxRowHeight: _maxRowHeight,\n    noHeader,\n    onCellFilterAdded,\n    onColumnResize,\n    onSortByChange,\n    showTypeIcons,\n    structureRev,\n    timeRange,\n    transparent,\n    width,\n    initialRowIndex,\n  } = props;\n\n  const theme = useTheme2();\n  const styles = useStyles2(getGridStyles, enablePagination, transparent);\n  const panelContext = usePanelContext();\n  const userCanExecuteActions = useMemo(() => panelContext.canExecuteActions?.() ?? false, [panelContext]);\n\n  const getCellActions = useCallback(\n    (field: Field, rowIdx: number) => {\n      if (!userCanExecuteActions) {\n        return [];\n      }\n      return getActions(data, field, rowIdx);\n    },\n    [getActions, data, userCanExecuteActions]\n  );\n\n  const visibleFields = useMemo(() => getVisibleFields(data.fields), [data.fields]);\n  const hasHeader = !noHeader;\n  const hasFooter = useMemo(\n    () => visibleFields.some((field) => Boolean(field.config.custom?.footer?.reducers?.length)),\n    [visibleFields]\n  );\n  const footerHeight = useMemo(\n    () => (hasFooter ? calculateFooterHeight(visibleFields) : 0),\n    [hasFooter, visibleFields]\n  );\n\n  const resizeHandler = useColumnResize(onColumnResize);\n\n  const hasNestedFrames = useMemo(() => getIsNestedTable(data.fields), [data]);\n  const nestedFramesFieldName = useMemo(() => {\n    if (!hasNestedFrames) {\n      return;\n    }\n    const firstNestedField = data.fields.find((f) => f.type === FieldType.nestedFrames);\n    if (!firstNestedField) {\n      return;\n    }\n    return getDisplayName(firstNestedField);\n  }, [data, hasNestedFrames]);\n  const rows = useMemo(() => frameToRecords(data, nestedFramesFieldName), [data, nestedFramesFieldName]);\n  const getTextColorForBackground = useMemo(() => memoize(_getTextColorForBackground, { maxSize: 1000 }), []);\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 [inspectCell, setInspectCell] = useState<InspectCellProps | null>(null);\n  const [tooltipState, setTooltipState] = useState<DataLinksActionsTooltipState>();\n  const [expandedRows, setExpandedRows] = useState(() => new Set<number>());\n  const [selectedRows, setSelectedRows] = useState((): ReadonlySet<string> => new Set());\n\n  // vt scrollbar accounting for column auto-sizing\n\n  const defaultRowHeight = useMemo(\n    () => getDefaultRowHeight(theme, visibleFields, cellHeight),\n    [theme, visibleFields, cellHeight]\n  );\n  const gridRef = useRef<DataGridHandle>(null);\n  const scrollbarWidth = useScrollbarWidth(gridRef, height);\n  const availableWidth = useMemo(\n    () => (hasNestedFrames ? width - COLUMN.EXPANDER_WIDTH : width) - scrollbarWidth,\n    [width, hasNestedFrames, scrollbarWidth]\n  );\n  const getCellColorInlineStyles = useMemo(() => getCellColorInlineStylesFactory(theme), [theme]);\n  const applyToRowBgFn = useMemo(\n    () => getApplyToRowBgFn(data.fields, getCellColorInlineStyles) ?? undefined,\n    [data.fields, getCellColorInlineStyles]\n  );\n  const typographyCtx = useMemo(\n    () =>\n      createTypographyContext(\n        theme.typography.fontSize,\n        theme.typography.fontFamily,\n        extractPixelValue(theme.typography.body.letterSpacing!) * theme.typography.fontSize\n      ),\n    [theme]\n  );\n\n  const [widths, numFrozenColsFullyInView] = useColWidths(visibleFields, availableWidth, frozenColumns);\n\n  const headerHeight = useHeaderHeight({\n    columnWidths: widths,\n    fields: visibleFields,\n    enabled: hasHeader,\n    sortColumns,\n    showTypeIcons: showTypeIcons ?? false,\n    typographyCtx,\n  });\n  // the minimum max row height we should honor is a single line of text.\n  const maxRowHeight = _maxRowHeight != null ? Math.max(TABLE.LINE_HEIGHT, _maxRowHeight) : undefined;\n  const rowHeight = useRowHeight({\n    columnWidths: widths,\n    fields: visibleFields,\n    hasNestedFrames,\n    defaultHeight: defaultRowHeight,\n    expandedRows,\n    typographyCtx,\n    maxHeight: maxRowHeight,\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    footerHeight,\n    headerHeight: hasHeader ? TABLE.HEADER_HEIGHT : 0,\n    rowHeight,\n  });\n\n  const [scrollToIndex, setScrollToIndex] = useState(initialRowIndex);\n  useEffect(() => {\n    if (scrollToIndex !== undefined && sortedRows && gridRef.current?.scrollToCell) {\n      const rowIdx = sortedRows.findIndex((row) => row.__index === scrollToIndex);\n      gridRef.current.scrollToCell({\n        rowIdx,\n      });\n      setScrollToIndex(undefined);\n      setSelectedRows(new Set<string>([rowKeyGetter(sortedRows[rowIdx])]));\n    }\n  }, [scrollToIndex, sortedRows]);\n\n  const [footers, isUniformFooter] = useMemo(() => {\n    const footers: Array<TableFooterOptions | undefined> = [];\n    let isUniformFooter = true;\n    let firstReducers: string[] | undefined;\n    for (const field of visibleFields) {\n      const footer = field.config?.custom?.footer;\n      footers.push(footer);\n\n      if (firstReducers === undefined && (footer?.reducers?.length ?? 0) > 0) {\n        firstReducers = footer?.reducers; // store the reducers for the first visible array with a footer.\n      } else if (firstReducers !== undefined) {\n        // once we have a list of reducers, compare each subsequent footer's reducers to the first.\n        const reducers: string[] | undefined = footer?.reducers;\n\n        // ignore fields with no footer reducers.\n        if (reducers?.length ?? 0 > 0) {\n          // isUniformFooter is false if there are different numbers of reducers or if the reducers are not identical.\n          if (reducers!.length !== firstReducers!.length || reducers!.some((r, idx) => firstReducers?.[idx] !== r)) {\n            isUniformFooter = false;\n            break;\n          }\n        }\n      }\n    }\n    return [footers, isUniformFooter];\n  }, [visibleFields]);\n\n  // normalize the row height into a function which returns a number, so we avoid a bunch of conditionals during rendering.\n  const rowHeightFn = useMemo((): ((row: TableRow) => number) => {\n    if (typeof rowHeight === 'function') {\n      return rowHeight;\n    }\n    if (typeof rowHeight === 'string') {\n      return () => TABLE.MAX_CELL_HEIGHT;\n    }\n    return () => rowHeight;\n  }, [rowHeight]);\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: !IS_SAFARI_26 && enableVirtualization !== false && rowHeight !== 'auto',\n        defaultColumnOptions: {\n          minWidth: 50,\n          resizable: true,\n          sortable: true,\n          // draggable: 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        bottomSummaryRows: hasFooter ? [{}] : undefined,\n        summaryRowHeight: footerHeight,\n        headerRowClass: styles.headerRow,\n        headerRowHeight: noHeader ? 0 : TABLE.HEADER_HEIGHT,\n      }) satisfies Partial<DataGridProps<TableRow, TableSummaryRow>>,\n    [\n      enableVirtualization,\n      hasFooter,\n      resizeHandler,\n      sortColumns,\n      rowHeight,\n      styles.headerRow,\n      noHeader,\n      setSortColumns,\n      onSortByChange,\n      footerHeight,\n    ]\n  );\n\n  const buildNestedTableExpanderColumn = useCallback(\n    (\n      nestedColumns: TableColumn[],\n      hasNestedHeaders: boolean,\n      renderers: Renderers<TableRow, TableSummaryRow>\n    ): TableColumn => ({\n      key: EXPANDED_COLUMN_KEY,\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          const rowIdx = row.__index;\n\n          return (\n            <RowExpander\n              isExpanded={expandedRows.has(rowIdx)}\n              onCellExpand={() => {\n                if (expandedRows.has(rowIdx)) {\n                  expandedRows.delete(rowIdx);\n                } else {\n                  expandedRows.add(rowIdx);\n                }\n                setExpandedRows(new Set(expandedRows));\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(\n          frameToRecords(nestedData, nestedFramesFieldName),\n          nestedData.fields,\n          sortColumns\n        );\n        if (!expandedRecords.length) {\n          return (\n            <div className={styles.noDataNested}>\n              <Trans i18nKey=\"grafana-ui.table.nested-table.no-data\">No data</Trans>\n            </div>\n          );\n        }\n\n        return (\n          <DataGrid<TableRow, TableSummaryRow>\n            {...commonDataGridProps}\n            className={clsx(styles.grid, styles.gridNested)}\n            headerRowClass={clsx(styles.headerRow, { [styles.displayNone]: !hasNestedHeaders })}\n            headerRowHeight={hasNestedHeaders ? TABLE.HEADER_HEIGHT : 0}\n            columns={nestedColumns}\n            rows={expandedRecords}\n            renderers={renderers}\n          />\n        );\n      },\n      width: COLUMN.EXPANDER_WIDTH,\n      minWidth: COLUMN.EXPANDER_WIDTH,\n    }),\n    [commonDataGridProps, data.fields.length, expandedRows, sortColumns, styles, nestedFramesFieldName]\n  );\n\n  const fromFields = useCallback(\n    (f: Field[], widths: number[]): FromFieldsResult => {\n      const result: FromFieldsResult = {\n        columns: [],\n        cellRootRenderers: {},\n      };\n\n      let lastRowIdx = -1;\n      // shared when whole row will be styled by a single cell's color\n      let rowCellStyle: Partial<CSSProperties> = {\n        color: undefined,\n        background: undefined,\n      };\n\n      f.forEach((field, i) => {\n        const cellOptions = getCellOptions(field);\n        const cellType = cellOptions.type;\n\n        // make sure we use mappings exclusively if they exist, ignore default thresholds mode\n        // we hack this by using the single color mode calculator\n        if (cellType === TableCellDisplayMode.Pill && (field.config.mappings?.length ?? 0 > 0)) {\n          field = {\n            ...field,\n            config: {\n              ...field.config,\n              color: {\n                ...field.config.color,\n                mode: FieldColorModeId.Fixed,\n                fixedColor: field.config.color?.fixedColor ?? FALLBACK_COLOR,\n              },\n            },\n          };\n          field.display = getDisplayProcessor({ field, theme });\n        }\n\n        // attach JSONCell custom display function to JSONView cell type\n        if (cellType === TableCellDisplayMode.JSONView || field.type === FieldType.other) {\n          field.display = displayJsonValue(field);\n        }\n\n        // For some cells, \"aligning\" the cell will mean aligning the inline contents of the cell with\n        // the text-align css property, and for others, we'll use justify-content to align the cell\n        // contents with flexbox. We always just get both and provide both when styling the cell.\n        const textAlign = getAlignment(field);\n        const justifyContent = getJustifyContent(textAlign);\n        const displayName = getDisplayName(field);\n        const headerCellClass = getHeaderCellStyles(theme, justifyContent);\n        const CellType = 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          ? clsx('table-cell-actions', getCellActionStyles(theme, textAlign))\n          : undefined;\n\n        const shouldOverflow =\n          !IS_SAFARI_26 && rowHeight !== 'auto' && (shouldTextOverflow(field) || Boolean(maxRowHeight));\n        const textWrap = rowHeight === 'auto' || shouldTextWrap(field);\n        const canBeColorized = canFieldBeColorized(cellType, applyToRowBgFn);\n        const cellStyleOptions: TableCellStyleOptions = {\n          textAlign,\n          textWrap,\n          shouldOverflow,\n          maxHeight: maxRowHeight,\n        };\n\n        const defaultCellStyles = getDefaultCellStyles(theme, cellStyleOptions);\n        const cellSpecificStyles = getCellSpecificStyles(cellType, field, theme, cellStyleOptions);\n        const linkStyles = getLinkStyles(theme, canBeColorized);\n        const cellParentStyles = clsx(defaultCellStyles, linkStyles);\n        const maxHeightClassName = maxRowHeight ? getMaxHeightCellStyles(theme, cellStyleOptions) : undefined;\n        const styleFieldValue = field.config.custom?.styleField;\n        const styleField = styleFieldValue ? data.fields.find(predicateByName(styleFieldValue)) : undefined;\n        const styleFieldName = styleField ? getDisplayName(styleField) : undefined;\n        const hasValidStyleField = Boolean(styleFieldName);\n\n        // TODO: in future extend this to ensure a non-classic color scheme is set with AutoCell\n\n        // this fires first\n        const renderCellRoot = (key: Key, props: CellRendererProps<TableRow, TableSummaryRow>): ReactNode => {\n          const rowIdx = props.row.__index;\n\n          // meh, this should be cached by the renderRow() call?\n          if (rowIdx !== lastRowIdx) {\n            lastRowIdx = rowIdx;\n\n            rowCellStyle.color = undefined;\n            rowCellStyle.background = undefined;\n\n            // generate shared styles for whole row\n            if (applyToRowBgFn != null) {\n              rowCellStyle = { ...rowCellStyle, ...applyToRowBgFn(rowIdx) };\n            }\n          }\n\n          let style: CSSProperties = { ...rowCellStyle };\n          if (canBeColorized) {\n            const value = props.row[props.column.key];\n            const displayValue = field.display!(value); // this fires here to get colors, then again to get rendered value?\n            const cellColorStyles = getCellColorInlineStyles(cellOptions, displayValue, applyToRowBgFn != null);\n            Object.assign(style, cellColorStyles);\n          }\n          if (hasValidStyleField) {\n            style = { ...style, ...parseStyleJson(props.row[styleFieldName!]) };\n          }\n\n          return (\n            <Cell\n              key={key}\n              {...props}\n              className={clsx(\n                props.className,\n                cellParentStyles,\n                cellSpecificStyles != null && { [cellSpecificStyles]: maxRowHeight == null }\n              )}\n              style={style}\n            />\n          );\n        };\n\n        result.cellRootRenderers[displayName] = renderCellRoot;\n\n        const renderBasicCellContent = (props: RenderCellProps<TableRow, TableSummaryRow>): JSX.Element => {\n          const rowIdx = props.row.__index;\n          const value = props.row[props.column.key];\n          // TODO: it would be nice to get rid of passing height down as a prop. but this value\n          // is cached so the cost of calling for every cell is low.\n          // NOTE: some cell types still require a height to be passed down, so that's why string-based\n          // cell types are going to just pass down the max cell height as a numeric height for those cells.\n          const height = rowHeightFn(props.row);\n          const frame = data;\n\n          let result = (\n            <>\n              <CellType\n                cellOptions={cellOptions}\n                frame={frame}\n                field={field}\n                height={height}\n                rowIdx={rowIdx}\n                theme={theme}\n                value={value}\n                width={width}\n                timeRange={timeRange}\n                cellInspect={cellInspect}\n                showFilters={showFilters}\n                getActions={getCellActions}\n                disableSanitizeHtml={disableSanitizeHtml}\n                getTextColorForBackground={getTextColorForBackground}\n              />\n              {showActions && (\n                <TableCellActions\n                  field={field}\n                  value={value}\n                  displayName={displayName}\n                  cellInspect={cellInspect}\n                  showFilters={showFilters}\n                  className={cellActionClassName}\n                  setInspectCell={setInspectCell}\n                  onCellFilterAdded={onCellFilterAdded}\n                />\n              )}\n            </>\n          );\n\n          if (maxRowHeight != null) {\n            result = <div className={clsx(maxHeightClassName, cellSpecificStyles)}>{result}</div>;\n          }\n\n          return result;\n        };\n\n        // renderCellContent fires second.\n        let renderCellContent = renderBasicCellContent;\n\n        const tooltipFieldName = field.config.custom?.tooltip?.field;\n        if (tooltipFieldName) {\n          const tooltipField = data.fields.find(predicateByName(tooltipFieldName));\n          if (tooltipField) {\n            const tooltipDisplayName = getDisplayName(tooltipField);\n            const tooltipCellOptions = getCellOptions(tooltipField);\n            const tooltipFieldRenderer = getCellRenderer(tooltipField, tooltipCellOptions);\n\n            const tooltipCellStyleOptions = {\n              textAlign: getAlignment(tooltipField),\n              textWrap: shouldTextWrap(tooltipField),\n              shouldOverflow: false,\n              maxHeight: maxRowHeight,\n            } satisfies TableCellStyleOptions;\n            const tooltipCanBeColorized = canFieldBeColorized(tooltipCellOptions.type, applyToRowBgFn);\n            const tooltipDefaultStyles = getDefaultCellStyles(theme, tooltipCellStyleOptions);\n            const tooltipSpecificStyles = getCellSpecificStyles(\n              tooltipCellOptions.type,\n              tooltipField,\n              theme,\n              tooltipCellStyleOptions\n            );\n            const tooltipLinkStyles = getLinkStyles(theme, tooltipCanBeColorized);\n            const tooltipClasses = getTooltipStyles(theme, textAlign);\n\n            const placement = field.config.custom?.tooltip?.placement ?? TableCellTooltipPlacement.Auto;\n            const tooltipWidth =\n              placement === TableCellTooltipPlacement.Left || placement === TableCellTooltipPlacement.Right\n                ? tooltipField.config.custom?.width\n                : width;\n\n            const tooltipProps = {\n              cellOptions: tooltipCellOptions,\n              classes: tooltipClasses,\n              className: clsx(\n                tooltipClasses.tooltipContent,\n                tooltipDefaultStyles,\n                tooltipSpecificStyles,\n                tooltipLinkStyles\n              ),\n              data,\n              disableSanitizeHtml,\n              field: tooltipField,\n              getActions: getCellActions,\n              getTextColorForBackground,\n              gridRef,\n              placement,\n              renderer: tooltipFieldRenderer,\n              tooltipField,\n              theme,\n              width: tooltipWidth,\n            } satisfies Partial<React.ComponentProps<typeof TableCellTooltip>>;\n\n            renderCellContent = (props: RenderCellProps<TableRow, TableSummaryRow>): JSX.Element => {\n              // cached so we don't care about multiple calls.\n              const tooltipHeight = rowHeightFn(props.row);\n              let tooltipStyle: CSSProperties = { ...rowCellStyle };\n              if (tooltipCanBeColorized) {\n                const tooltipDisplayValue = tooltipField.display!(props.row[tooltipDisplayName]);\n                const tooltipCellColorStyles = getCellColorInlineStyles(\n                  tooltipCellOptions,\n                  tooltipDisplayValue,\n                  applyToRowBgFn != null\n                );\n                Object.assign(tooltipStyle, tooltipCellColorStyles);\n              }\n\n              return (\n                <TableCellTooltip\n                  {...tooltipProps}\n                  height={tooltipHeight}\n                  rowIdx={props.row.__index}\n                  style={tooltipStyle}\n                >\n                  {renderBasicCellContent(props)}\n                </TableCellTooltip>\n              );\n            };\n          }\n        }\n\n        result.columns.push({\n          field,\n          key: displayName,\n          name: displayName,\n          width,\n          headerCellClass,\n          frozen: Math.min(frozenColumns, numFrozenColsFullyInView) > i,\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              disableKeyboardEvents={disableKeyboardEvents}\n              crossFilterOrder={crossFilterOrder}\n              crossFilterRows={crossFilterRows}\n              direction={sortDirection}\n              showTypeIcons={showTypeIcons}\n              selectFirstCell={() => {\n                gridRef.current?.selectCell({ rowIdx: 0, idx: 0 });\n              }}\n            />\n          ),\n          renderSummaryCell: () => (\n            <SummaryCell\n              rows={sortedRows}\n              footers={footers}\n              field={field}\n              colIdx={i}\n              textAlign={getSummaryCellTextAlign(textAlign, cellType)}\n              rowLabel={isUniformFooter && i === 0}\n              hideLabel={isUniformFooter && i !== 0}\n            />\n          ),\n        });\n      });\n\n      return result;\n    },\n    [\n      theme,\n      onCellFilterAdded,\n      rowHeight,\n      maxRowHeight,\n      applyToRowBgFn,\n      data,\n      frozenColumns,\n      numFrozenColsFullyInView,\n      getCellColorInlineStyles,\n      rowHeightFn,\n      timeRange,\n      getCellActions,\n      disableSanitizeHtml,\n      getTextColorForBackground,\n      rows,\n      filter,\n      setFilter,\n      disableKeyboardEvents,\n      crossFilterOrder,\n      crossFilterRows,\n      showTypeIcons,\n      sortedRows,\n      footers,\n      isUniformFooter,\n    ]\n  );\n\n  // set up the first row's nested data and the nest field widths using useColWidths to avoid\n  // unnecessary re-renders on re-size.\n  const firstRowNestedData = useMemo(\n    () => (hasNestedFrames ? rows.find((r) => r.data)?.data : undefined),\n    [hasNestedFrames, rows]\n  );\n  const nestedVisibleFields = useMemo(\n    () => (firstRowNestedData ? getVisibleFields(firstRowNestedData.fields) : []),\n    [firstRowNestedData]\n  );\n  const [nestedFieldWidths] = useColWidths(nestedVisibleFields, availableWidth);\n\n  const { columns, cellRootRenderers } = useMemo(() => {\n    const result = fromFields(visibleFields, widths);\n\n    // if nested frames are present, augment the columns to include the nested table expander column.\n    if (!firstRowNestedData) {\n      return result;\n    }\n\n    // pre-calculate renderRow and expandedColumns based on the first nested frame's fields.\n    const hasNestedHeaders = firstRowNestedData.meta?.custom?.noHeader !== true;\n    const renderRow = renderRowFactory(firstRowNestedData.fields, panelContext, expandedRows, enableSharedCrosshair);\n    const { columns: nestedColumns, cellRootRenderers: nestedCellRootRenderers } = fromFields(\n      nestedVisibleFields,\n      nestedFieldWidths\n    );\n\n    const expanderCellRenderer: CellRootRenderer = (key, props) => <Cell key={key} {...props} />;\n    result.cellRootRenderers[EXPANDED_COLUMN_KEY] = expanderCellRenderer;\n\n    // If we have nested frames, we need to add a column for the row expansion\n    result.columns.unshift(\n      buildNestedTableExpanderColumn(nestedColumns, hasNestedHeaders, {\n        renderRow,\n        renderCell: (key, props) => nestedCellRootRenderers[props.column.key](key, props),\n      })\n    );\n\n    return result;\n  }, [\n    buildNestedTableExpanderColumn,\n    enableSharedCrosshair,\n    expandedRows,\n    firstRowNestedData,\n    fromFields,\n    nestedFieldWidths,\n    nestedVisibleFields,\n    panelContext,\n    visibleFields,\n    widths,\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  const renderCellRoot: CellRootRenderer = useCallback(\n    (key, props) => cellRootRenderers[props.column.key](key, props),\n    [cellRootRenderers]\n  );\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  let rendered = (\n    <>\n      <DataGrid<TableRow, TableSummaryRow, string>\n        {...commonDataGridProps}\n        ref={gridRef}\n        className={styles.grid}\n        columns={structureRevColumns}\n        rows={paginatedRows}\n        rowKeyGetter={rowKeyGetter}\n        isRowSelectionDisabled={() => initialRowIndex !== undefined}\n        selectedRows={selectedRows}\n        onSelectedRowsChange={setSelectedRows}\n        headerRowClass={clsx(styles.headerRow, { [styles.displayNone]: noHeader })}\n        headerRowHeight={headerHeight}\n        onCellClick={({ column, row }, { clientX, clientY, preventGridDefault, target }) => {\n          // Note: could be column.field; JS says yes, but TS says no!\n          const field = columns[column.idx].field;\n\n          if (\n            target instanceof HTMLElement &&\n            // this walks up the tree to find either a faux link wrapper or the cell root\n            // it then only proceeds if we matched the faux link wrapper\n            target.closest('a[aria-haspopup], .rdg-cell')?.matches('a')\n          ) {\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={({ column, row }, event) => {\n          // if top-left cell, use default browser tabbing and\n          if (column.key === columns[0].key && row.__index === 0 && event.shiftKey && event.key === 'Tab') {\n            event.preventGridDefault();\n            gridRef.current?.selectCell({ rowIdx: -1, idx: columns.length - 1 }); // select the far right cell of the header\n            return;\n          }\n\n          if (\n            disableKeyboardEvents ||\n            (hasNestedFrames && event.isDefaultPrevented()) // skip parent grid keyboard navigation if nested grid handled it\n          ) {\n            event.preventGridDefault();\n          }\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      {inspectCell && (\n        <TableCellInspector\n          mode={inspectCell.mode ?? TableCellInspectorMode.text}\n          value={inspectCell.value}\n          onDismiss={() => setInspectCell(null)}\n        />\n      )}\n    </>\n  );\n\n  if (IS_SAFARI_26) {\n    rendered = <div className={styles.safariWrapper}>{rendered}</div>;\n  }\n\n  return rendered;\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  (fields: Field[], panelContext: PanelContext, expandedRows: Set<number>, enableSharedCrosshair: boolean) =>\n  // eslint-disable-next-line react/display-name\n  (key: React.Key, props: RenderRowProps<TableRow, TableSummaryRow>): React.ReactNode => {\n    const { row } = props;\n    const rowIdx = row.__index;\n    const isExpanded = expandedRows.has(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"],"names":["data","useTheme2","styles","useStyles2","getGridStyles","usePanelContext","useMemo","_a","_b","useCallback","getVisibleFields","calculateFooterHeight","useColumnResize","getIsNestedTable","FieldType","getDisplayName","frameToRecords","memoize","_getTextColorForBackground","useFilteredRows","useSortedRows","useState","getDefaultRowHeight","useRef","useScrollbarWidth","COLUMN","getCellColorInlineStylesFactory","getApplyToRowBgFn","createTypographyContext","extractPixelValue","useColWidths","useHeaderHeight","TABLE","useRowHeight","usePaginatedRows","useEffect","rowKeyGetter","footers","isUniformFooter","IS_SAFARI_26","jsx","RowExpander","applySort","Trans","DataGrid","clsx","widths","getCellOptions","TableCellDisplayMode","FieldColorModeId","FALLBACK_COLOR","getDisplayProcessor","displayJsonValue","getAlignment","getJustifyContent","getHeaderCellStyles","getCellRenderer","isCellInspectEnabled","width","getCellActionStyles","shouldTextOverflow","shouldTextWrap","canFieldBeColorized","getDefaultCellStyles","getCellSpecificStyles","getLinkStyles","getMaxHeightCellStyles","predicateByName","renderCellRoot","props","parseStyleJson","Cell","height","result","jsxs","Fragment","TableCellActions","getTooltipStyles","TableCellTooltipPlacement","TableCellTooltip","HeaderCell","SummaryCell","getSummaryCellTextAlign","renderRow","getCellLinks","Pagination","DataLinksActionsTooltip","TableCellInspector","TableCellInspectorMode","Row","DataHoverEvent","DataHoverClearEvent"],"mappings":"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"}