import { styled, textEllipsis } from '../../styles'; import type { TableCellProps } from './interface'; export const StyledTable = styled('table')<{ showBorder?: boolean }>(({ showBorder, }) => { return { fontSize: 'var(--affine-font-base)', color: 'var(--affine-text-primary-color)', tableLayout: 'fixed', width: '100%', borderCollapse: 'collapse', borderSpacing: '0', ...(typeof showBorder === 'boolean' ? { thead: { '::after': { display: 'block', position: 'absolute', content: '""', width: '100%', height: '1px', left: 0, background: 'var(--affine-border-color)', transition: 'opacity .15s', opacity: showBorder ? 1 : 0, }, }, } : {}), }; }); export const StyledTableBody = styled('tbody')(() => { return { fontWeight: 400, }; }); export const StyledTableCell = styled('td')< Pick< TableCellProps, 'ellipsis' | 'align' | 'proportion' | 'active' | 'onClick' > >(({ align = 'left', ellipsis = false, proportion, active = false, onClick, }) => { const width = proportion ? `${proportion * 100}%` : 'auto'; return { width, height: '52px', paddingLeft: '16px', boxSizing: 'border-box', textAlign: align, verticalAlign: 'middle', whiteSpace: 'nowrap', userSelect: 'none', fontSize: 'var(--affine-font-sm)', ...(active ? { color: 'var(--affine-text-primary-color)' } : {}), ...(ellipsis ? textEllipsis(1) : {}), ...(onClick ? { cursor: 'pointer' } : {}), }; }); export const StyledTableHead = styled('thead')(() => { return { fontWeight: 500, color: 'var(--affine-text-secondary-color)', }; }); export const StyledTHeadRow = styled('tr')({ td: { whiteSpace: 'nowrap', // How to set tbody height with overflow scroll // see https://stackoverflow.com/questions/23989463/how-to-set-tbody-height-with-overflow-scroll position: 'sticky', top: 0, background: 'var(--affine-background-primary-color)', }, }); export const StyledTBodyRow = styled('tr')(() => { return { td: { transition: 'background .15s', }, // Add border radius to table row // see https://stackoverflow.com/questions/4094126/how-to-add-border-radius-on-table-row 'td:first-of-type': { borderTopLeftRadius: '10px', borderBottomLeftRadius: '10px', }, 'td:last-of-type': { borderTopRightRadius: '10px', borderBottomRightRadius: '10px', }, ':hover': { td: { background: 'var(--affine-hover-color)', }, }, }; });