/* eslint-disable react/display-name */ import * as React from "react"; import { drawTextCell, prepTextCell } from "../internal/data-grid/render/data-grid-lib.js"; import { GridCellKind, type NumberCell } from "../internal/data-grid/data-grid-types.js"; import type { InternalCellRenderer } from "./cell-types.js"; const NumberOverlayEditor = React.lazy( async () => await import("../internal/data-grid-overlay-editor/private/number-overlay-editor.js") ); export const numberCellRenderer: InternalCellRenderer = { getAccessibilityString: c => c.data?.toString() ?? "", kind: GridCellKind.Number, needsHover: false, needsHoverPosition: false, useLabel: true, drawPrep: prepTextCell, draw: a => drawTextCell(a, a.cell.displayData, a.cell.contentAlign), measure: (ctx, cell, theme) => ctx.measureText(cell.displayData).width + theme.cellHorizontalPadding * 2, onDelete: c => ({ ...c, data: undefined, }), provideEditor: () => p => { const { isHighlighted, onChange, value, validatedSelection } = p; return ( onChange({ ...value, data: Number.isNaN(x.floatValue ?? 0) ? 0 : x.floatValue, }) } /> ); }, onPaste: (toPaste, cell, details) => { const newNumber = typeof details.rawValue === "number" ? details.rawValue : Number.parseFloat(typeof details.rawValue === "string" ? details.rawValue : toPaste); if (Number.isNaN(newNumber) || cell.data === newNumber) return undefined; return { ...cell, data: newNumber, displayData: details.formattedString ?? cell.displayData }; }, };