@veracity/vui
Version:
Veracity UI is a React component library crafted for use within Veracity applications and pages. Based on Styled Components and @xstyled.
68 lines (66 loc) • 2.4 kB
JavaScript
import { cs } from "../utils/styles.js";
import { useStyleConfig } from "../core/theme.js";
import vui from "../core/vui.js";
import { Box } from "../box/box.js";
import { Button } from "../button/button.js";
import { usePaginationContext } from "./context.js";
import { jsx } from "react/jsx-runtime";
//#region src/pagination/paginationButtons.tsx
/** Displays a page navigation button within the Pagination. */
const PaginationButton = vui((props, ref) => {
const { className, page: pageProp, ...rest } = props;
const { onPageChange, page: currentPage } = usePaginationContext();
const styles = useStyleConfig("Pagination", usePaginationContext());
const isActive = pageProp === currentPage;
return /* @__PURE__ */ jsx(Button, {
className: cs("vui-paginationButton", className),
onClick: () => onPageChange(pageProp),
ref,
text: pageProp,
isActive,
...styles.button,
...rest
});
});
PaginationButton.displayName = "PaginationButton";
/** Displays '...' ellipsis for hidden pages. */
const PaginationEllipsis = vui((props, ref) => {
const { children, className, ...rest } = props;
const styles = useStyleConfig("Pagination", usePaginationContext());
return /* @__PURE__ */ jsx(Box, {
alignItems: "center",
className: cs("vui-paginationEllipsis", className),
px: "10px",
ref,
...styles.ellipsis,
...rest,
children: children ?? "…"
});
});
PaginationEllipsis.displayName = "PaginationEllipsis";
/** Displays a page navigation button, which navigates forward or backward. */
const PaginationPrevNext = vui((props, ref) => {
const { className, direction, ...rest } = props;
const { onPageChange, page, pageCount } = usePaginationContext();
const styles = useStyleConfig("Pagination", usePaginationContext());
const isPrev = direction === "previous";
const pageChange = isPrev ? -1 : 1;
const directionProps = {
disabled: isPrev ? page === 1 : page === pageCount,
icon: `uiAngle${isPrev ? "Left" : "Right"}`,
onClick: () => onPageChange(page + pageChange)
};
return /* @__PURE__ */ jsx(Button, {
className: cs("vui-paginationPrevNext", className),
minW: 0,
ref,
...styles.prevNext,
...directionProps,
...rest
});
});
PaginationPrevNext.displayName = "PaginationPrevNext";
//#endregion
export { PaginationButton, PaginationEllipsis, PaginationPrevNext };
globalThis.__vuiVersion__ = "5.3.1"
//# sourceMappingURL=paginationButtons.js.map