MDK Logo

Data display components

Components for presenting and visualizing data

Data display components

Components for displaying data in tables, badges, tags, and other visual formats.

Data table

The DataTable component is a full-featured data table built on TanStack Table with sorting, pagination, and row selection.

Import

import { DataTable } from '@mdk/core'

// Types for column definitions
import type {
  DataTableColumnDef,
  DataTableSortingState,
  DataTablePaginationState,
  DataTableRowSelectionState,
} from '@mdk/core'

Basic usage

import { DataTable } from '@mdk/core'
import type { DataTableColumnDef } from '@mdk/core'

type Miner = {
  id: string
  name: string
  hashrate: number
  status: string
}

const columns: DataTableColumnDef<Miner>[] = [
  {
    accessorKey: 'name',
    header: 'Name',
  },
  {
    accessorKey: 'hashrate',
    header: 'Hashrate',
    cell: ({ row }) => `${row.original.hashrate} TH/s`,
  },
  {
    accessorKey: 'status',
    header: 'Status',
  },
]

function MinersTable() {
  return <DataTable columns={columns} data={miners} />
}

With sorting and pagination

const [sorting, setSorting] = useState<DataTableSortingState>([])
const [pagination, setPagination] = useState<DataTablePaginationState>({
  pageIndex: 0,
  pageSize: 10,
})

<DataTable
  columns={columns}
  data={miners}
  sorting={sorting}
  onSortingChange={setSorting}
  pagination={pagination}
  onPaginationChange={setPagination}
/>

With row selection

const [rowSelection, setRowSelection] = useState<DataTableRowSelectionState>({})

<DataTable
  columns={columns}
  data={miners}
  rowSelection={rowSelection}
  onRowSelectionChange={setRowSelection}
  enableRowSelection
/>

Styling

  • .mdk-data-table: Root container
  • .mdk-data-table__header: Header row
  • .mdk-data-table__body: Table body
  • .mdk-data-table__row: Data row
  • .mdk-data-table__cell: Table cell

Badge

Numeric or status badge that can wrap content or stand alone.

Import

import { Badge } from '@mdk/core'

Props

PropTypeDefaultDescription
countnumber0Number to display
overflowCountnumber99Max count before showing "99+"
showZerobooleanfalseShow badge when count is 0
dotbooleanfalseShow as dot instead of number
textstringnoneCustom text content
colorColorVariant'primary'Badge color
size'sm' | 'md' | 'lg''md'Badge size
status'success' | 'processing' | 'error' | 'warning' | 'default'noneStatus variant
squarebooleanfalseSquare badge (no border-radius)
offset[number, number][0, 0]Position offset [x, y]

Basic usage

// Number badge on content
<Badge count={5}>
  <Button>Messages</Button>
</Badge>

// Overflow
<Badge count={100} overflowCount={99}>
  <BellIcon />
</Badge>
// Shows "99+"

Dot badge

<Badge dot>
  <NotificationIcon />
</Badge>

Status badge

<Badge status="success" text="Online" />
<Badge status="error" text="Offline" />
<Badge status="processing" text="Syncing" />
<Badge status="warning" text="Warning" />

Standalone badge

<Badge count={25} />
<Badge text="NEW" color="primary" square />

Styling

  • .mdk-badge: Badge element
  • .mdk-badge--{color}: Color variant
  • .mdk-badge--{size}: Size variant
  • .mdk-badge--dot: Dot variant
  • .mdk-badge--status: Status variant
  • .mdk-badge-wrapper: Wrapper when wrapping content

Pagination

Page navigation with size selector.

Import

import { Pagination } from '@mdk/core'

Props

PropTypeDefaultDescription
currentnumber1Current page number
totalnumber0Total number of items
pageSizenumber20Items per page
pageSizeOptionsnumber[][10, 20, 50, 100]Page size options
showSizeChangerbooleantrueShow page size dropdown
showTotalbooleanfalseShow total count text
disabledbooleanfalseDisable pagination
size'sm' | 'md' | 'lg''sm'Size variant
onChangefunctionnonePage/size change callback

Basic usage

const [page, setPage] = useState(1)
const [pageSize, setPageSize] = useState(20)

<Pagination
  current={page}
  total={500}
  pageSize={pageSize}
  onChange={(newPage, newSize) => {
    setPage(newPage)
    setPageSize(newSize)
  }}
/>

With total display

<Pagination
  current={1}
  total={100}
  pageSize={20}
  showTotal
/>
// Shows "1-20 of 100"

Styling

  • .mdk-pagination: Root container
  • .mdk-pagination__pages: Page buttons container
  • .mdk-pagination__button: Navigation button
  • .mdk-pagination__button--active: Active page
  • .mdk-pagination__total: Total count text
  • .mdk-pagination__size-changer: Page size select

Tag

Removable tag/chip component.

Import

import { Tag } from '@mdk/core'

Basic usage

<Tag>Default Tag</Tag>
<Tag color="primary">Primary</Tag>
<Tag color="success">Success</Tag>
<Tag onClose={() => handleRemove()}>Removable</Tag>

Avatar

User avatar display component.

Import

import { Avatar } from '@mdk/core'

Basic usage

<Avatar src="/user.jpg" alt="User" />
<Avatar>JD</Avatar>
<Avatar src="/user.jpg" size="lg" />

Skeleton

Loading placeholder animation.

Import

import { Skeleton } from '@mdk/core'

Basic usage

// Text skeleton
<Skeleton className="h-4 w-48" />

// Circle skeleton
<Skeleton className="h-12 w-12 rounded-full" />

// Card skeleton
<Card>
  <Card.Body>
    <Skeleton className="h-4 w-full mb-2" />
    <Skeleton className="h-4 w-3/4" />
  </Card.Body>
</Card>

Tooltip

Hover tooltip for additional information.

Import

import { Tooltip } from '@mdk/core'

Basic usage

<Tooltip content="This is helpful information">
  <Button>Hover me</Button>
</Tooltip>

Additional data display components

ComponentDescription
BreadcrumbsNavigation breadcrumb trail
TypographyText styling component
IndicatorStatus dot indicator
SpinnerLoading spinner animation
LoaderLoading indicator
ProgressProgress bar (Radix-based)

On this page