// Copyright 2017-2026 @pezkuwi/react-components authors & contributors // SPDX-License-Identifier: Apache-2.0 import React from 'react'; import { styled } from '../styled.js'; type HeaderDef = [React.ReactNode?, string?, number?, (() => void)?]; interface Props { children?: React.ReactNode; className?: string; filter?: React.ReactNode; header?: (false | null | undefined | HeaderDef)[]; isEmpty: boolean; } function Head ({ children, className = '', filter, header, isEmpty }: Props): React.ReactElement | null { if (!header?.length) { return null; } return ( {filter && ( {filter} )} {header.filter((h): h is HeaderDef => !!h).map(([label, className = 'default', colSpan = 1, onClick], index) => {index === 0 ?

{label}

: !isEmpty && label && } )} {children}
); } const StyledThead = styled.thead` z-index: 1; th { background: var(--bg-table); font: var(--font-sans); font-weight: var(--font-weight-normal); padding: 0.375rem 1rem; text-align: right; vertical-align: middle; white-space: nowrap; h1 { display: table-cell; vertical-align: middle; .sub { display: inline-block; font-size: var(--font-size-base); font-weight: var(--font-weight-normal); opacity: var(--opacity-light); padding-left: 1.5rem; text-overflow: ellipsis; vertical-align: middle; } } > label { margin: 0 !important; } &.address { padding-left: 3rem; text-align: left; } &.badge { padding: 0; } &.expand, &.number { text-align: right; } &.isClickable { cursor: pointer; } &.mini { padding: 0 !important; } &.no-pad-left { padding-left: 0.125rem; } &.no-pad-right { padding-right: 0.125rem; } &.start { text-align: left; } &.balances { text-align: right; padding-right: 2.25rem; } } tr { text-transform: lowercase; &.filter { .ui.input, .ui.selection.dropdown { background: transparent; &:first-child { margin-top: 0; } } th { padding: 0; } } &:not(.filter) { th { color: var(--color-table-head); } } } `; export default React.memo(Head);