@mirror-physics/fractal-ui 0.2.0-next.59 → 0.2.0-next.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +11 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -2
- package/dist/index.d.ts +11 -2
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -255,6 +255,10 @@ interface SortableTableRowAction<T> {
|
|
|
255
255
|
label: (row: T, index: number) => string;
|
|
256
256
|
icon: (row: T, index: number) => ReactNode;
|
|
257
257
|
}
|
|
258
|
+
interface SortableTablePagination {
|
|
259
|
+
page: number;
|
|
260
|
+
pageSize: number;
|
|
261
|
+
}
|
|
258
262
|
interface SortableTableProps<T> {
|
|
259
263
|
columns: SortableTableColumn<T>[];
|
|
260
264
|
data: T[];
|
|
@@ -272,13 +276,18 @@ interface SortableTableProps<T> {
|
|
|
272
276
|
sortKey?: string | null;
|
|
273
277
|
sortDirection?: SortDirection;
|
|
274
278
|
onSortChange?: (key: string | null, direction: SortDirection) => void;
|
|
279
|
+
/**
|
|
280
|
+
* Slices the globally sorted dataset for display. Always pass the complete
|
|
281
|
+
* filtered dataset in `data`; sorting is applied before pagination.
|
|
282
|
+
*/
|
|
283
|
+
pagination?: SortableTablePagination;
|
|
275
284
|
highlightRow?: (row: T, index: number) => boolean;
|
|
276
285
|
/** Invoked when a row is selected. Enables pointer and keyboard row activation. */
|
|
277
286
|
onRowClick?: (row: T, index: number) => void;
|
|
278
287
|
/** Directional affordance displayed over the right edge of an interactive row. */
|
|
279
288
|
rowAction?: SortableTableRowAction<T>;
|
|
280
289
|
}
|
|
281
|
-
declare function SortableTable<T>({ columns, data, emptyMessage, header, size, embedded, className, defaultSort, defaultSortKey, defaultSortDirection, sortKey: controlledKey, sortDirection: controlledDirection, onSortChange, highlightRow, onRowClick, rowAction, }: SortableTableProps<T>): React.JSX.Element;
|
|
290
|
+
declare function SortableTable<T>({ columns, data, emptyMessage, header, size, embedded, className, defaultSort, defaultSortKey, defaultSortDirection, sortKey: controlledKey, sortDirection: controlledDirection, onSortChange, pagination, highlightRow, onRowClick, rowAction, }: SortableTableProps<T>): React.JSX.Element;
|
|
282
291
|
|
|
283
292
|
interface TabItem {
|
|
284
293
|
id: string;
|
|
@@ -534,4 +543,4 @@ declare function useEscapeDismiss(priority: number, handler: () => void, enabled
|
|
|
534
543
|
|
|
535
544
|
declare function cn(...inputs: ClassValue[]): string;
|
|
536
545
|
|
|
537
|
-
export { Alert, AlertDescription, AlertGhost, AlertTitle, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonColor, ButtonGhost, type ButtonGhostProps, type ButtonProps, type ButtonSize, type ButtonType, Card, CardContent, CardDescription, CardFooter, CardGhost, type CardGhostProps, CardHeader, CardTitle, Checkbox, CheckboxGhost, type CheckboxProps, Chip, ChipGhost, type ChipProps, type ChipTone, CodeBlock, type CodeBlockProps, ContentSwitcher, ContentSwitcherGhost, type ContentSwitcherItem, type ContentSwitcherProps, ConversationGhost, type ConversationGhostProps, DataTable, type DataTableColumn, DataTableGhost, type DataTableGhostProps, type DataTableProps, Disclosure, DisclosureGhost, type DisclosureProps, Dropdown, DropdownGhost, type DropdownItem, type DropdownProps, FeatureCard, type FeatureCardProps, FileDropzone, FileDropzoneGhost, type FileDropzoneProps, FolderCard, type FolderCardProps, type FormFieldGhostProps, Ghost, GhostLine, type GhostLineProps, type GhostProps, Input, InputGhost, type InputProps, Label, LabelGhost, type LabelProps, LatticeLoader, type LatticeLoaderProps, Link, LinkGhost, type LinkProps, type LinkSize, type LinkTheme, Modal, ModalGhost, type ModalProps, NumberInput, type NumberInputProps, Pagination, PaginationGhost, type PaginationProps, PasswordInput, type PasswordInputProps, PromptCard, PromptCardGhost, type PromptCardProps, type PromptCardTone, PromptGrid, type PromptGridProps, SidePanel, SidePanelGhost, type SidePanelProps, Sidebar, SidebarAccountMenu, type SidebarAccountMenuProps, SidebarBrand, SidebarFooter, SidebarGhost, type SidebarGhostProps, SidebarHeader, SidebarNav, SidebarNavItem, type SidebarNavItemProps, type SidebarProps, SidebarSection, type SortDirection, SortableTable, type SortableTableColumn, type SortableTableDefaultSort, SortableTableGhost, type SortableTableProps, type SortableTableRowAction, type SurfaceGhostProps, type TabItem, TableSearch, type TableSearchProps, type TableSearchType, Tabs, TabsGhost, type TabsProps, type TabsVariant, TextButton, TextButtonGhost, type TextButtonIconPosition, type TextButtonProps, type TextButtonSize, type TextButtonTone, Textarea, TextareaGhost, type TextareaProps, Toggle, ToggleGhost, type ToggleProps, UILoader, type UILoaderProps, type UILoaderTone, cn, useEscapeDismiss };
|
|
546
|
+
export { Alert, AlertDescription, AlertGhost, AlertTitle, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonColor, ButtonGhost, type ButtonGhostProps, type ButtonProps, type ButtonSize, type ButtonType, Card, CardContent, CardDescription, CardFooter, CardGhost, type CardGhostProps, CardHeader, CardTitle, Checkbox, CheckboxGhost, type CheckboxProps, Chip, ChipGhost, type ChipProps, type ChipTone, CodeBlock, type CodeBlockProps, ContentSwitcher, ContentSwitcherGhost, type ContentSwitcherItem, type ContentSwitcherProps, ConversationGhost, type ConversationGhostProps, DataTable, type DataTableColumn, DataTableGhost, type DataTableGhostProps, type DataTableProps, Disclosure, DisclosureGhost, type DisclosureProps, Dropdown, DropdownGhost, type DropdownItem, type DropdownProps, FeatureCard, type FeatureCardProps, FileDropzone, FileDropzoneGhost, type FileDropzoneProps, FolderCard, type FolderCardProps, type FormFieldGhostProps, Ghost, GhostLine, type GhostLineProps, type GhostProps, Input, InputGhost, type InputProps, Label, LabelGhost, type LabelProps, LatticeLoader, type LatticeLoaderProps, Link, LinkGhost, type LinkProps, type LinkSize, type LinkTheme, Modal, ModalGhost, type ModalProps, NumberInput, type NumberInputProps, Pagination, PaginationGhost, type PaginationProps, PasswordInput, type PasswordInputProps, PromptCard, PromptCardGhost, type PromptCardProps, type PromptCardTone, PromptGrid, type PromptGridProps, SidePanel, SidePanelGhost, type SidePanelProps, Sidebar, SidebarAccountMenu, type SidebarAccountMenuProps, SidebarBrand, SidebarFooter, SidebarGhost, type SidebarGhostProps, SidebarHeader, SidebarNav, SidebarNavItem, type SidebarNavItemProps, type SidebarProps, SidebarSection, type SortDirection, SortableTable, type SortableTableColumn, type SortableTableDefaultSort, SortableTableGhost, type SortableTablePagination, type SortableTableProps, type SortableTableRowAction, type SurfaceGhostProps, type TabItem, TableSearch, type TableSearchProps, type TableSearchType, Tabs, TabsGhost, type TabsProps, type TabsVariant, TextButton, TextButtonGhost, type TextButtonIconPosition, type TextButtonProps, type TextButtonSize, type TextButtonTone, Textarea, TextareaGhost, type TextareaProps, Toggle, ToggleGhost, type ToggleProps, UILoader, type UILoaderProps, type UILoaderTone, cn, useEscapeDismiss };
|
package/dist/index.d.ts
CHANGED
|
@@ -255,6 +255,10 @@ interface SortableTableRowAction<T> {
|
|
|
255
255
|
label: (row: T, index: number) => string;
|
|
256
256
|
icon: (row: T, index: number) => ReactNode;
|
|
257
257
|
}
|
|
258
|
+
interface SortableTablePagination {
|
|
259
|
+
page: number;
|
|
260
|
+
pageSize: number;
|
|
261
|
+
}
|
|
258
262
|
interface SortableTableProps<T> {
|
|
259
263
|
columns: SortableTableColumn<T>[];
|
|
260
264
|
data: T[];
|
|
@@ -272,13 +276,18 @@ interface SortableTableProps<T> {
|
|
|
272
276
|
sortKey?: string | null;
|
|
273
277
|
sortDirection?: SortDirection;
|
|
274
278
|
onSortChange?: (key: string | null, direction: SortDirection) => void;
|
|
279
|
+
/**
|
|
280
|
+
* Slices the globally sorted dataset for display. Always pass the complete
|
|
281
|
+
* filtered dataset in `data`; sorting is applied before pagination.
|
|
282
|
+
*/
|
|
283
|
+
pagination?: SortableTablePagination;
|
|
275
284
|
highlightRow?: (row: T, index: number) => boolean;
|
|
276
285
|
/** Invoked when a row is selected. Enables pointer and keyboard row activation. */
|
|
277
286
|
onRowClick?: (row: T, index: number) => void;
|
|
278
287
|
/** Directional affordance displayed over the right edge of an interactive row. */
|
|
279
288
|
rowAction?: SortableTableRowAction<T>;
|
|
280
289
|
}
|
|
281
|
-
declare function SortableTable<T>({ columns, data, emptyMessage, header, size, embedded, className, defaultSort, defaultSortKey, defaultSortDirection, sortKey: controlledKey, sortDirection: controlledDirection, onSortChange, highlightRow, onRowClick, rowAction, }: SortableTableProps<T>): React.JSX.Element;
|
|
290
|
+
declare function SortableTable<T>({ columns, data, emptyMessage, header, size, embedded, className, defaultSort, defaultSortKey, defaultSortDirection, sortKey: controlledKey, sortDirection: controlledDirection, onSortChange, pagination, highlightRow, onRowClick, rowAction, }: SortableTableProps<T>): React.JSX.Element;
|
|
282
291
|
|
|
283
292
|
interface TabItem {
|
|
284
293
|
id: string;
|
|
@@ -534,4 +543,4 @@ declare function useEscapeDismiss(priority: number, handler: () => void, enabled
|
|
|
534
543
|
|
|
535
544
|
declare function cn(...inputs: ClassValue[]): string;
|
|
536
545
|
|
|
537
|
-
export { Alert, AlertDescription, AlertGhost, AlertTitle, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonColor, ButtonGhost, type ButtonGhostProps, type ButtonProps, type ButtonSize, type ButtonType, Card, CardContent, CardDescription, CardFooter, CardGhost, type CardGhostProps, CardHeader, CardTitle, Checkbox, CheckboxGhost, type CheckboxProps, Chip, ChipGhost, type ChipProps, type ChipTone, CodeBlock, type CodeBlockProps, ContentSwitcher, ContentSwitcherGhost, type ContentSwitcherItem, type ContentSwitcherProps, ConversationGhost, type ConversationGhostProps, DataTable, type DataTableColumn, DataTableGhost, type DataTableGhostProps, type DataTableProps, Disclosure, DisclosureGhost, type DisclosureProps, Dropdown, DropdownGhost, type DropdownItem, type DropdownProps, FeatureCard, type FeatureCardProps, FileDropzone, FileDropzoneGhost, type FileDropzoneProps, FolderCard, type FolderCardProps, type FormFieldGhostProps, Ghost, GhostLine, type GhostLineProps, type GhostProps, Input, InputGhost, type InputProps, Label, LabelGhost, type LabelProps, LatticeLoader, type LatticeLoaderProps, Link, LinkGhost, type LinkProps, type LinkSize, type LinkTheme, Modal, ModalGhost, type ModalProps, NumberInput, type NumberInputProps, Pagination, PaginationGhost, type PaginationProps, PasswordInput, type PasswordInputProps, PromptCard, PromptCardGhost, type PromptCardProps, type PromptCardTone, PromptGrid, type PromptGridProps, SidePanel, SidePanelGhost, type SidePanelProps, Sidebar, SidebarAccountMenu, type SidebarAccountMenuProps, SidebarBrand, SidebarFooter, SidebarGhost, type SidebarGhostProps, SidebarHeader, SidebarNav, SidebarNavItem, type SidebarNavItemProps, type SidebarProps, SidebarSection, type SortDirection, SortableTable, type SortableTableColumn, type SortableTableDefaultSort, SortableTableGhost, type SortableTableProps, type SortableTableRowAction, type SurfaceGhostProps, type TabItem, TableSearch, type TableSearchProps, type TableSearchType, Tabs, TabsGhost, type TabsProps, type TabsVariant, TextButton, TextButtonGhost, type TextButtonIconPosition, type TextButtonProps, type TextButtonSize, type TextButtonTone, Textarea, TextareaGhost, type TextareaProps, Toggle, ToggleGhost, type ToggleProps, UILoader, type UILoaderProps, type UILoaderTone, cn, useEscapeDismiss };
|
|
546
|
+
export { Alert, AlertDescription, AlertGhost, AlertTitle, type BreadcrumbItem, Breadcrumbs, type BreadcrumbsProps, Button, type ButtonColor, ButtonGhost, type ButtonGhostProps, type ButtonProps, type ButtonSize, type ButtonType, Card, CardContent, CardDescription, CardFooter, CardGhost, type CardGhostProps, CardHeader, CardTitle, Checkbox, CheckboxGhost, type CheckboxProps, Chip, ChipGhost, type ChipProps, type ChipTone, CodeBlock, type CodeBlockProps, ContentSwitcher, ContentSwitcherGhost, type ContentSwitcherItem, type ContentSwitcherProps, ConversationGhost, type ConversationGhostProps, DataTable, type DataTableColumn, DataTableGhost, type DataTableGhostProps, type DataTableProps, Disclosure, DisclosureGhost, type DisclosureProps, Dropdown, DropdownGhost, type DropdownItem, type DropdownProps, FeatureCard, type FeatureCardProps, FileDropzone, FileDropzoneGhost, type FileDropzoneProps, FolderCard, type FolderCardProps, type FormFieldGhostProps, Ghost, GhostLine, type GhostLineProps, type GhostProps, Input, InputGhost, type InputProps, Label, LabelGhost, type LabelProps, LatticeLoader, type LatticeLoaderProps, Link, LinkGhost, type LinkProps, type LinkSize, type LinkTheme, Modal, ModalGhost, type ModalProps, NumberInput, type NumberInputProps, Pagination, PaginationGhost, type PaginationProps, PasswordInput, type PasswordInputProps, PromptCard, PromptCardGhost, type PromptCardProps, type PromptCardTone, PromptGrid, type PromptGridProps, SidePanel, SidePanelGhost, type SidePanelProps, Sidebar, SidebarAccountMenu, type SidebarAccountMenuProps, SidebarBrand, SidebarFooter, SidebarGhost, type SidebarGhostProps, SidebarHeader, SidebarNav, SidebarNavItem, type SidebarNavItemProps, type SidebarProps, SidebarSection, type SortDirection, SortableTable, type SortableTableColumn, type SortableTableDefaultSort, SortableTableGhost, type SortableTablePagination, type SortableTableProps, type SortableTableRowAction, type SurfaceGhostProps, type TabItem, TableSearch, type TableSearchProps, type TableSearchType, Tabs, TabsGhost, type TabsProps, type TabsVariant, TextButton, TextButtonGhost, type TextButtonIconPosition, type TextButtonProps, type TextButtonSize, type TextButtonTone, Textarea, TextareaGhost, type TextareaProps, Toggle, ToggleGhost, type ToggleProps, UILoader, type UILoaderProps, type UILoaderTone, cn, useEscapeDismiss };
|
package/dist/index.js
CHANGED
|
@@ -1351,6 +1351,7 @@ function SortableTable({
|
|
|
1351
1351
|
sortKey: controlledKey,
|
|
1352
1352
|
sortDirection: controlledDirection,
|
|
1353
1353
|
onSortChange,
|
|
1354
|
+
pagination,
|
|
1354
1355
|
highlightRow,
|
|
1355
1356
|
onRowClick,
|
|
1356
1357
|
rowAction
|
|
@@ -1390,6 +1391,14 @@ function SortableTable({
|
|
|
1390
1391
|
});
|
|
1391
1392
|
return copy;
|
|
1392
1393
|
}, [data, columns, effectiveKey, effectiveDirection]);
|
|
1394
|
+
const visibleRows = useMemo2(() => {
|
|
1395
|
+
if (!pagination) return sorted;
|
|
1396
|
+
const pageSize = Math.max(1, pagination.pageSize);
|
|
1397
|
+
const totalPages = Math.max(1, Math.ceil(sorted.length / pageSize));
|
|
1398
|
+
const page = Math.min(Math.max(1, pagination.page), totalPages);
|
|
1399
|
+
const startIndex = (page - 1) * pageSize;
|
|
1400
|
+
return sorted.slice(startIndex, startIndex + pageSize);
|
|
1401
|
+
}, [pagination, sorted]);
|
|
1393
1402
|
const handleSortClick = (key) => {
|
|
1394
1403
|
let nextDirection;
|
|
1395
1404
|
if (!activeKey || !activeDirection) {
|
|
@@ -1414,7 +1423,7 @@ function SortableTable({
|
|
|
1414
1423
|
};
|
|
1415
1424
|
return /* @__PURE__ */ jsx19("div", { className: cn("fractal-sortable-table", `fractal-sortable-table--${size}`, embedded && "fractal-sortable-table--embedded", className), children: /* @__PURE__ */ jsxs16("div", { className: "fractal-sortable-table-surface", children: [
|
|
1416
1425
|
header && /* @__PURE__ */ jsx19("div", { className: "fractal-sortable-table-header", children: header }),
|
|
1417
|
-
|
|
1426
|
+
visibleRows.length === 0 ? /* @__PURE__ */ jsx19("div", { className: "fractal-sortable-table-empty", children: emptyMessage || "No data" }) : /* @__PURE__ */ jsxs16("table", { className: "fractal-sortable-table-table", children: [
|
|
1418
1427
|
/* @__PURE__ */ jsx19("thead", { children: /* @__PURE__ */ jsx19("tr", { className: "fractal-sortable-table-thead-row", children: columns.map((col) => {
|
|
1419
1428
|
const isActive = activeKey === col.key && activeDirection !== null;
|
|
1420
1429
|
if (!col.sortable) {
|
|
@@ -1453,7 +1462,7 @@ function SortableTable({
|
|
|
1453
1462
|
col.key
|
|
1454
1463
|
);
|
|
1455
1464
|
}) }) }),
|
|
1456
|
-
/* @__PURE__ */ jsx19("tbody", { children:
|
|
1465
|
+
/* @__PURE__ */ jsx19("tbody", { children: visibleRows.map((row, rowIndex) => {
|
|
1457
1466
|
const highlighted = highlightRow?.(row, rowIndex) ?? false;
|
|
1458
1467
|
const action = rowAction ? {
|
|
1459
1468
|
label: rowAction.label(row, rowIndex),
|