@primer/react
Version:
An implementation of GitHub's Primer Design System using React
561 lines (560 loc) • 14.2 kB
JavaScript
import Text_default from "../Text/Text.js";
import VisuallyHidden from "../_VisuallyHidden.js";
import { ScrollableRegion } from "../ScrollableRegion/ScrollableRegion.js";
import { SkeletonText } from "../SkeletonText/SkeletonText.js";
import { SortDirection } from "./sorting.js";
import { useTableLayout } from "./useTable.js";
import { Button } from "../internal/components/ButtonReset.js";
import Table_module_css_default from "./Table.module.css.js";
import { c } from "react-compiler-runtime";
import { clsx } from "clsx";
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
import React from "react";
import { SortAscIcon, SortDescIcon } from "@primer/octicons-react";
//#region src/DataTable/Table.tsx
const Table = /*#__PURE__*/ React.forwardRef(function Table(t0, ref) {
const $ = c(21);
let className;
let gridTemplateColumns;
let labelledby;
let rest;
let t1;
if ($[0] !== t0) {
({"aria-labelledby": labelledby, cellPadding: t1, className, gridTemplateColumns, ...rest} = t0);
$[0] = t0;
$[1] = className;
$[2] = gridTemplateColumns;
$[3] = labelledby;
$[4] = rest;
$[5] = t1;
} else {
className = $[1];
gridTemplateColumns = $[2];
labelledby = $[3];
rest = $[4];
t1 = $[5];
}
const cellPadding = t1 === void 0 ? "normal" : t1;
let t2;
if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
t2 = clsx("TableOverflowWrapper", Table_module_css_default.TableOverflowWrapper);
$[6] = t2;
} else t2 = $[6];
let t3;
if ($[7] !== className) {
t3 = clsx(className, "Table", Table_module_css_default.Table);
$[7] = className;
$[8] = t3;
} else t3 = $[8];
let t4;
if ($[9] !== gridTemplateColumns) {
t4 = { "--grid-template-columns": gridTemplateColumns };
$[9] = gridTemplateColumns;
$[10] = t4;
} else t4 = $[10];
const t5 = t4;
let t6;
if ($[11] !== cellPadding || $[12] !== labelledby || $[13] !== ref || $[14] !== rest || $[15] !== t3 || $[16] !== t5) {
t6 = /*#__PURE__*/ jsx("table", {
...rest,
"aria-labelledby": labelledby,
"data-cell-padding": cellPadding,
className: t3,
role: "table",
ref,
style: t5,
"data-component": "Table"
});
$[11] = cellPadding;
$[12] = labelledby;
$[13] = ref;
$[14] = rest;
$[15] = t3;
$[16] = t5;
$[17] = t6;
} else t6 = $[17];
let t7;
if ($[18] !== labelledby || $[19] !== t6) {
t7 = /*#__PURE__*/ jsx(ScrollableRegion, {
"aria-labelledby": labelledby,
className: t2,
children: t6
});
$[18] = labelledby;
$[19] = t6;
$[20] = t7;
} else t7 = $[20];
return t7;
});
function TableHead(t0) {
const $ = c(3);
const { children } = t0;
let t1;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t1 = clsx("TableHead", Table_module_css_default.TableHead);
$[0] = t1;
} else t1 = $[0];
let t2;
if ($[1] !== children) {
t2 = /*#__PURE__*/ jsx("thead", {
className: t1,
role: "rowgroup",
"data-component": "Table.Head",
children
});
$[1] = children;
$[2] = t2;
} else t2 = $[2];
return t2;
}
function TableBody(t0) {
const $ = c(3);
const { children } = t0;
let t1;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t1 = clsx("TableBody", Table_module_css_default.TableBody);
$[0] = t1;
} else t1 = $[0];
let t2;
if ($[1] !== children) {
t2 = /*#__PURE__*/ jsx("tbody", {
className: t1,
role: "rowgroup",
"data-component": "Table.Body",
children
});
$[1] = children;
$[2] = t2;
} else t2 = $[2];
return t2;
}
function TableHeader(t0) {
const $ = c(9);
let align;
let children;
let rest;
if ($[0] !== t0) {
({align, children, ...rest} = t0);
$[0] = t0;
$[1] = align;
$[2] = children;
$[3] = rest;
} else {
align = $[1];
children = $[2];
rest = $[3];
}
let t1;
if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
t1 = clsx("TableHeader", Table_module_css_default.TableHeader);
$[4] = t1;
} else t1 = $[4];
let t2;
if ($[5] !== align || $[6] !== children || $[7] !== rest) {
t2 = /*#__PURE__*/ jsx("th", {
"data-component": "Table.Header",
...rest,
className: t1,
role: "columnheader",
scope: "col",
"data-cell-align": align,
children
});
$[5] = align;
$[6] = children;
$[7] = rest;
$[8] = t2;
} else t2 = $[8];
return t2;
}
function TableSortHeader(t0) {
const $ = c(23);
let align;
let children;
let direction;
let onToggleSort;
let rest;
if ($[0] !== t0) {
({align, children, direction, onToggleSort, ...rest} = t0);
$[0] = t0;
$[1] = align;
$[2] = children;
$[3] = direction;
$[4] = onToggleSort;
$[5] = rest;
} else {
align = $[1];
children = $[2];
direction = $[3];
onToggleSort = $[4];
rest = $[5];
}
const ariaSort = direction === "DESC" ? "descending" : direction === "ASC" ? "ascending" : void 0;
let t1;
if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
t1 = clsx("TableSortButton", Table_module_css_default.TableSortButton);
$[6] = t1;
} else t1 = $[6];
let t2;
if ($[7] !== onToggleSort) {
t2 = () => {
onToggleSort();
};
$[7] = onToggleSort;
$[8] = t2;
} else t2 = $[8];
let t3;
if ($[9] !== direction) {
t3 = direction === SortDirection.NONE || direction === SortDirection.ASC ? /*#__PURE__*/ jsxs(Fragment, { children: [/*#__PURE__*/ jsx(SortAscIcon, { className: clsx("TableSortIcon", "TableSortIcon--ascending", Table_module_css_default.TableSortIcon, Table_module_css_default["TableSortIcon--ascending"]) }), direction === SortDirection.NONE ? /*#__PURE__*/ jsx(VisuallyHidden, { children: "sort ascending" }) : null] }) : null;
$[9] = direction;
$[10] = t3;
} else t3 = $[10];
let t4;
if ($[11] !== direction) {
t4 = direction === SortDirection.DESC ? /*#__PURE__*/ jsx(SortDescIcon, { className: clsx("TableSortIcon", "TableSortIcon--descending", Table_module_css_default.TableSortIcon, Table_module_css_default["TableSortIcon--descending"]) }) : null;
$[11] = direction;
$[12] = t4;
} else t4 = $[12];
let t5;
if ($[13] !== children || $[14] !== t2 || $[15] !== t3 || $[16] !== t4) {
t5 = /*#__PURE__*/ jsxs(Button, {
type: "button",
className: t1,
"data-component": "Table.SortHeader.Button",
onClick: t2,
children: [
children,
t3,
t4
]
});
$[13] = children;
$[14] = t2;
$[15] = t3;
$[16] = t4;
$[17] = t5;
} else t5 = $[17];
let t6;
if ($[18] !== align || $[19] !== ariaSort || $[20] !== rest || $[21] !== t5) {
t6 = /*#__PURE__*/ jsx(TableHeader, {
...rest,
"aria-sort": ariaSort,
align,
"data-component": "Table.SortHeader",
children: t5
});
$[18] = align;
$[19] = ariaSort;
$[20] = rest;
$[21] = t5;
$[22] = t6;
} else t6 = $[22];
return t6;
}
function TableRow(t0) {
const $ = c(7);
let children;
let rest;
if ($[0] !== t0) {
({children, ...rest} = t0);
$[0] = t0;
$[1] = children;
$[2] = rest;
} else {
children = $[1];
rest = $[2];
}
let t1;
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
t1 = clsx("TableRow", Table_module_css_default.TableRow);
$[3] = t1;
} else t1 = $[3];
let t2;
if ($[4] !== children || $[5] !== rest) {
t2 = /*#__PURE__*/ jsx("tr", {
...rest,
className: t1,
role: "row",
"data-component": "Table.Row",
children
});
$[4] = children;
$[5] = rest;
$[6] = t2;
} else t2 = $[6];
return t2;
}
function TableCell(t0) {
const $ = c(16);
let align;
let children;
let className;
let rest;
let scope;
if ($[0] !== t0) {
({align, className, children, scope, ...rest} = t0);
$[0] = t0;
$[1] = align;
$[2] = children;
$[3] = className;
$[4] = rest;
$[5] = scope;
} else {
align = $[1];
children = $[2];
className = $[3];
rest = $[4];
scope = $[5];
}
const BaseComponent = scope ? "th" : "td";
const role = scope ? "rowheader" : "cell";
let t1;
if ($[6] !== className) {
t1 = clsx("TableCell", className, Table_module_css_default.TableCell);
$[6] = className;
$[7] = t1;
} else t1 = $[7];
let t2;
if ($[8] !== BaseComponent || $[9] !== align || $[10] !== children || $[11] !== rest || $[12] !== role || $[13] !== scope || $[14] !== t1) {
t2 = /*#__PURE__*/ jsx(BaseComponent, {
...rest,
className: t1,
scope,
role,
"data-cell-align": align,
"data-component": "Table.Cell",
children
});
$[8] = BaseComponent;
$[9] = align;
$[10] = children;
$[11] = rest;
$[12] = role;
$[13] = scope;
$[14] = t1;
$[15] = t2;
} else t2 = $[15];
return t2;
}
function TableCellPlaceholder(t0) {
const $ = c(2);
const { children } = t0;
let t1;
if ($[0] !== children) {
t1 = /*#__PURE__*/ jsx(Text_default, {
className: Table_module_css_default.PlaceholderText,
"data-component": "Table.CellPlaceholder",
children
});
$[0] = children;
$[1] = t1;
} else t1 = $[1];
return t1;
}
function TableContainer(t0) {
const $ = c(12);
let as;
let children;
let className;
let rest;
if ($[0] !== t0) {
({children, className, as, ...rest} = t0);
$[0] = t0;
$[1] = as;
$[2] = children;
$[3] = className;
$[4] = rest;
} else {
as = $[1];
children = $[2];
className = $[3];
rest = $[4];
}
const Component = as || "div";
let t1;
if ($[5] !== className) {
t1 = clsx(className, Table_module_css_default.TableContainer);
$[5] = className;
$[6] = t1;
} else t1 = $[6];
let t2;
if ($[7] !== Component || $[8] !== children || $[9] !== rest || $[10] !== t1) {
t2 = /*#__PURE__*/ jsx(Component, {
...rest,
className: t1,
"data-component": "Table.Container",
children
});
$[7] = Component;
$[8] = children;
$[9] = rest;
$[10] = t1;
$[11] = t2;
} else t2 = $[11];
return t2;
}
const TableTitle = /*#__PURE__*/ React.forwardRef(function TableTitle(t0, ref) {
const $ = c(6);
const { as: t1, children, id } = t0;
const BaseComponent = t1 === void 0 ? "h2" : t1;
let t2;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t2 = clsx("TableTitle", Table_module_css_default.TableTitle);
$[0] = t2;
} else t2 = $[0];
let t3;
if ($[1] !== BaseComponent || $[2] !== children || $[3] !== id || $[4] !== ref) {
t3 = /*#__PURE__*/ jsx(BaseComponent, {
className: t2,
id,
ref,
"data-component": "Table.Title",
children
});
$[1] = BaseComponent;
$[2] = children;
$[3] = id;
$[4] = ref;
$[5] = t3;
} else t3 = $[5];
return t3;
});
function TableSubtitle(t0) {
const $ = c(5);
const { as: t1, children, id } = t0;
const BaseComponent = t1 === void 0 ? "div" : t1;
let t2;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t2 = clsx("TableSubtitle", Table_module_css_default.TableSubtitle);
$[0] = t2;
} else t2 = $[0];
let t3;
if ($[1] !== BaseComponent || $[2] !== children || $[3] !== id) {
t3 = /*#__PURE__*/ jsx(BaseComponent, {
className: t2,
id,
"data-component": "Table.Subtitle",
children
});
$[1] = BaseComponent;
$[2] = children;
$[3] = id;
$[4] = t3;
} else t3 = $[4];
return t3;
}
function TableDivider() {
const $ = c(1);
let t0;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t0 = /*#__PURE__*/ jsx("div", {
className: clsx("TableDivider", Table_module_css_default.TableDivider),
role: "presentation",
"data-component": "Table.Divider"
});
$[0] = t0;
} else t0 = $[0];
return t0;
}
function TableActions(t0) {
const $ = c(3);
const { children } = t0;
let t1;
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
t1 = clsx("TableActions", Table_module_css_default.TableActions);
$[0] = t1;
} else t1 = $[0];
let t2;
if ($[1] !== children) {
t2 = /*#__PURE__*/ jsx("div", {
className: t1,
"data-component": "Table.Actions",
children
});
$[1] = children;
$[2] = t2;
} else t2 = $[2];
return t2;
}
function TableSkeleton(t0) {
const $ = c(20);
let cellPadding;
let columns;
let rest;
let t1;
if ($[0] !== t0) {
({cellPadding, columns, rows: t1, ...rest} = t0);
$[0] = t0;
$[1] = cellPadding;
$[2] = columns;
$[3] = rest;
$[4] = t1;
} else {
cellPadding = $[1];
columns = $[2];
rest = $[3];
t1 = $[4];
}
const rows = t1 === void 0 ? 10 : t1;
const { gridTemplateColumns } = useTableLayout(columns);
let t2;
if ($[5] !== columns) {
t2 = Array.isArray(columns) ? columns.map(_temp) : null;
$[5] = columns;
$[6] = t2;
} else t2 = $[6];
let t3;
if ($[7] !== t2) {
t3 = /*#__PURE__*/ jsx(TableHead, { children: /*#__PURE__*/ jsx(TableRow, { children: t2 }) });
$[7] = t2;
$[8] = t3;
} else t3 = $[8];
let t4;
if ($[9] !== columns.length) {
t4 = Array.from({ length: columns.length });
$[9] = columns.length;
$[10] = t4;
} else t4 = $[10];
let t5;
if ($[11] !== rows || $[12] !== t4) {
t5 = /*#__PURE__*/ jsx(TableBody, { children: /*#__PURE__*/ jsx(TableRow, { children: t4.map((_, i_0) => /*#__PURE__*/ jsxs(TableCell, {
className: clsx("TableCellSkeleton", Table_module_css_default.TableCellSkeleton),
children: [/*#__PURE__*/ jsx(VisuallyHidden, { children: "Loading" }), /*#__PURE__*/ jsx("div", {
className: clsx("TableCellSkeletonItems", Table_module_css_default.TableCellSkeletonItems),
children: Array.from({ length: rows }).map(_temp2)
})]
}, i_0)) }) });
$[11] = rows;
$[12] = t4;
$[13] = t5;
} else t5 = $[13];
let t6;
if ($[14] !== cellPadding || $[15] !== gridTemplateColumns || $[16] !== rest || $[17] !== t3 || $[18] !== t5) {
t6 = /*#__PURE__*/ jsxs(Table, {
...rest,
cellPadding,
gridTemplateColumns,
children: [t3, t5]
});
$[14] = cellPadding;
$[15] = gridTemplateColumns;
$[16] = rest;
$[17] = t3;
$[18] = t5;
$[19] = t6;
} else t6 = $[19];
return t6;
}
function _temp2(__0, i_1) {
return /*#__PURE__*/ jsx("div", {
className: clsx("TableCellSkeletonItem", Table_module_css_default.TableCellSkeletonItem),
children: /*#__PURE__*/ jsx(SkeletonText, {})
}, i_1);
}
_temp2.displayName = "_temp2";
function _temp(column, i) {
return /*#__PURE__*/ jsx(TableHeader, { children: typeof column.header === "string" ? column.header : column.header() }, i);
}
_temp.displayName = "_temp";
//#endregion
export { Table, TableActions, TableBody, TableCell, TableCellPlaceholder, TableContainer, TableDivider, TableHead, TableHeader, TableRow, TableSkeleton, TableSortHeader, TableSubtitle, TableTitle };