*/ public $elements; /** @var array|null */ public $cellStyleOverride; /** @var array|null */ public $ribbon; /** * Every attribute of the cell block, untouched, for renderers that read * attributes free does not know about (pro registers its own). * * @var array */ public $cellAttrs = []; /** @var string|null */ public $sortableType; /** @var string|null */ public $width; /** @var string|null */ public $height; /** @var bool */ public $stickyHeader; /** @var bool */ public $stickyFirstCol; /** * Whether the cell is a pro "empty cell": renders as a bare, unstyled * cell on the frontend — no content, no background, no border. * * @var bool */ public $isEmpty; /** @var string */ public $innerBorderType; /** @var int */ public $totalRows; /** @var int */ public $totalCols; /** * @param mixed $row * @param mixed $col * @param mixed $rowSpan * @param mixed $colSpan * @param mixed $tag * @param mixed $globalCellStyles * @param array $elements * @param array|null $cellStyleOverride * @param array|null $ribbon * @param string|null $sortableType * @param string|null $width * @param string|null $height * @param bool $stickyHeader * @param string|null $className * @param bool $isEmpty * @param string $innerBorderType * @param int $totalRows * @param int $totalCols * @return self */ public static function create( $row, $col, $rowSpan, $colSpan, $tag, $globalCellStyles, $elements, $cellStyleOverride, $ribbon, $sortableType = null, $width = null, $height = null, $stickyHeader = false, $stickyFirstCol = false, $className = null, $cellAttrs = [], $isEmpty = false, $innerBorderType = '', $totalRows = 0, $totalCols = 0 ) { $instance = new self(); $instance->hasCellCoords = is_numeric($row) && is_numeric($col); $instance->row = $instance->hasCellCoords ? (int) $row : 0; $instance->col = $instance->hasCellCoords ? (int) $col : 0; $instance->rowSpan = is_numeric($rowSpan) ? (int) $rowSpan : 1; $instance->colSpan = is_numeric($colSpan) ? (int) $colSpan : 1; if ($instance->rowSpan < 1) { $instance->rowSpan = 1; } if ($instance->colSpan < 1) { $instance->colSpan = 1; } $instance->tag = $tag === 'th' ? 'th' : 'td'; $globalCellStyles = is_array($globalCellStyles) ? $globalCellStyles : []; $globalPadding = getArrayOrNull($globalCellStyles['padding']) ?? []; $globalBorder = getArrayOrNull($globalCellStyles['border']) ?? []; $globalBorderRadius = getArrayOrNull($globalCellStyles['borderRadius']) ?? []; $instance->paddingTop = getStringOrNull($globalPadding['top']) ?? ''; $instance->paddingRight = getStringOrNull($globalPadding['right']) ?? ''; $instance->paddingBottom = getStringOrNull($globalPadding['bottom']) ?? ''; $instance->paddingLeft = getStringOrNull($globalPadding['left']) ?? ''; $orientation = getStringOrNull($globalCellStyles['orientation']) ?? 'vertical'; if (!in_array($orientation, ['vertical', 'horizontal'], true)) { $orientation = 'vertical'; } $instance->orientation = $orientation; $instance->elementGap = getStringOrNull($globalCellStyles['elementGap']) ?? 'var(--wp--preset--spacing--20)'; $wrap = getStringOrNull($globalCellStyles['wrap']) ?? 'wrap'; if (!in_array($wrap, ['wrap', 'nowrap'], true)) { $wrap = 'wrap'; } $instance->wrap = $wrap; $verticalAlign = getStringOrNull($globalCellStyles['verticalAlign']) ?? 'middle'; if (!in_array($verticalAlign, ['top', 'middle', 'bottom'], true)) { $verticalAlign = 'middle'; } $instance->verticalAlign = $verticalAlign; $instance->borderTop = getStringOrNull($globalBorder['top']) ?? ''; $instance->borderRight = getStringOrNull($globalBorder['right']) ?? ''; $instance->borderBottom = getStringOrNull($globalBorder['bottom']) ?? ''; $instance->borderLeft = getStringOrNull($globalBorder['left']) ?? ''; $instance->borderTopLeftRadius = getStringOrNull($globalBorderRadius['topLeft']) ?? ''; $instance->borderTopRightRadius = getStringOrNull($globalBorderRadius['topRight']) ?? ''; $instance->borderBottomRightRadius = getStringOrNull($globalBorderRadius['bottomRight']) ?? ''; $instance->borderBottomLeftRadius = getStringOrNull($globalBorderRadius['bottomLeft']) ?? ''; $instance->backgroundColor = getStringOrNull($globalCellStyles['backgroundColor']) ?? ''; $instance->elements = is_array($elements) ? $elements : []; $instance->cellStyleOverride = getArrayOrNull($cellStyleOverride); $instance->cellAttrs = is_array($cellAttrs) ? $cellAttrs : []; $instance->ribbon = getArrayOrNull($ribbon); $sortableType = getStringOrNull($sortableType); if (in_array($sortableType, ['text', 'number', 'date'], true)) { $instance->sortableType = $sortableType; } else { $instance->sortableType = null; } $instance->width = getStringOrNull($width); $instance->height = getStringOrNull($height); $instance->stickyHeader = (bool) $stickyHeader; $instance->stickyFirstCol = (bool) $stickyFirstCol; $instance->isEmpty = (bool) $isEmpty; $instance->innerBorderType = in_array($innerBorderType, ['row', 'col'], true) ? $innerBorderType : ''; $instance->totalRows = max(0, (int) $totalRows); $instance->totalCols = max(0, (int) $totalCols); $instance->className = trim((string) (getStringOrNull($className) ?? '')); return $instance; } }