azamat-ui-kit 0.1.0
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/LICENSE +21 -0
- package/README.md +323 -0
- package/dist/cli/index.js +725 -0
- package/dist/components/actions/action-menu.d.ts +26 -0
- package/dist/components/actions/copy-button.d.ts +13 -0
- package/dist/components/actions/index.d.ts +3 -0
- package/dist/components/actions/quick-action-grid.d.ts +27 -0
- package/dist/components/calendar/calendar.d.ts +28 -0
- package/dist/components/calendar/date-picker.d.ts +15 -0
- package/dist/components/calendar/date-range-picker.d.ts +18 -0
- package/dist/components/calendar/date-utils.d.ts +12 -0
- package/dist/components/calendar/index.d.ts +4 -0
- package/dist/components/command/command-palette.d.ts +54 -0
- package/dist/components/command/index.d.ts +1 -0
- package/dist/components/data-table/data-table-actions-column.d.ts +16 -0
- package/dist/components/data-table/data-table-bulk-actions.d.ts +17 -0
- package/dist/components/data-table/data-table-column-visibility-menu.d.ts +14 -0
- package/dist/components/data-table/data-table-pagination.d.ts +21 -0
- package/dist/components/data-table/data-table-row-actions.d.ts +13 -0
- package/dist/components/data-table/data-table-select-column.d.ts +13 -0
- package/dist/components/data-table/data-table-sortable-header.d.ts +11 -0
- package/dist/components/data-table/data-table-toolbar.d.ts +14 -0
- package/dist/components/data-table/data-table-view-presets.d.ts +27 -0
- package/dist/components/data-table/data-table.d.ts +86 -0
- package/dist/components/data-table/index.d.ts +10 -0
- package/dist/components/display/activity-feed.d.ts +25 -0
- package/dist/components/display/avatar.d.ts +26 -0
- package/dist/components/display/data-state.d.ts +16 -0
- package/dist/components/display/description-list.d.ts +31 -0
- package/dist/components/display/index.d.ts +10 -0
- package/dist/components/display/info-card.d.ts +18 -0
- package/dist/components/display/metric-grid.d.ts +22 -0
- package/dist/components/display/progress.d.ts +35 -0
- package/dist/components/display/result.d.ts +18 -0
- package/dist/components/display/status-legend.d.ts +27 -0
- package/dist/components/display/timeline.d.ts +25 -0
- package/dist/components/feedback/empty-state.d.ts +11 -0
- package/dist/components/feedback/index.d.ts +3 -0
- package/dist/components/feedback/loading-state.d.ts +8 -0
- package/dist/components/feedback/status-badge.d.ts +9 -0
- package/dist/components/filters/filter-bar.d.ts +14 -0
- package/dist/components/filters/filter-chips.d.ts +18 -0
- package/dist/components/filters/index.d.ts +2 -0
- package/dist/components/form/form-async-select.d.ts +12 -0
- package/dist/components/form/form-date-input.d.ts +12 -0
- package/dist/components/form/form-date-picker.d.ts +12 -0
- package/dist/components/form/form-date-range-input.d.ts +12 -0
- package/dist/components/form/form-date-range-picker.d.ts +15 -0
- package/dist/components/form/form-field-shell.d.ts +26 -0
- package/dist/components/form/form-input.d.ts +13 -0
- package/dist/components/form/form-number-input.d.ts +12 -0
- package/dist/components/form/form-password-input.d.ts +11 -0
- package/dist/components/form/form-phone-input.d.ts +13 -0
- package/dist/components/form/form-search-input.d.ts +11 -0
- package/dist/components/form/form-select.d.ts +12 -0
- package/dist/components/form/form-switch.d.ts +14 -0
- package/dist/components/form/form-textarea.d.ts +13 -0
- package/dist/components/form/index.d.ts +14 -0
- package/dist/components/inputs/async-select.d.ts +106 -0
- package/dist/components/inputs/clearable-input.d.ts +16 -0
- package/dist/components/inputs/combobox.d.ts +20 -0
- package/dist/components/inputs/date-input.d.ts +9 -0
- package/dist/components/inputs/date-range-input.d.ts +18 -0
- package/dist/components/inputs/index.d.ts +14 -0
- package/dist/components/inputs/masked-input.d.ts +11 -0
- package/dist/components/inputs/money-input.d.ts +13 -0
- package/dist/components/inputs/number-input.d.ts +16 -0
- package/dist/components/inputs/password-input.d.ts +17 -0
- package/dist/components/inputs/phone-input.d.ts +10 -0
- package/dist/components/inputs/quantity-input.d.ts +15 -0
- package/dist/components/inputs/search-input.d.ts +7 -0
- package/dist/components/inputs/simple-select.d.ts +20 -0
- package/dist/components/inputs/tag-input.d.ts +15 -0
- package/dist/components/layout/app-header.d.ts +10 -0
- package/dist/components/layout/app-shell.d.ts +32 -0
- package/dist/components/layout/app-sidebar.d.ts +28 -0
- package/dist/components/layout/breadcrumbs.d.ts +18 -0
- package/dist/components/layout/index.d.ts +8 -0
- package/dist/components/layout/page-container.d.ts +7 -0
- package/dist/components/layout/page-header.d.ts +12 -0
- package/dist/components/layout/sidebar-nav.d.ts +25 -0
- package/dist/components/layout/stat-card.d.ts +18 -0
- package/dist/components/navigation/index.d.ts +3 -0
- package/dist/components/navigation/page-tabs.d.ts +18 -0
- package/dist/components/navigation/pagination.d.ts +21 -0
- package/dist/components/navigation/stepper-tabs.d.ts +19 -0
- package/dist/components/notifications/index.d.ts +1 -0
- package/dist/components/notifications/toast.d.ts +42 -0
- package/dist/components/overlay/confirm-dialog.d.ts +17 -0
- package/dist/components/overlay/dialog-actions.d.ts +14 -0
- package/dist/components/overlay/index.d.ts +4 -0
- package/dist/components/overlay/modal-shell.d.ts +20 -0
- package/dist/components/overlay/sheet-shell.d.ts +34 -0
- package/dist/components/patterns/form-builder-presets.d.ts +23 -0
- package/dist/components/patterns/form-builder.d.ts +95 -0
- package/dist/components/patterns/index.d.ts +4 -0
- package/dist/components/patterns/resource-detail-page.d.ts +39 -0
- package/dist/components/patterns/resource-page.d.ts +34 -0
- package/dist/components/ui/badge.d.ts +7 -0
- package/dist/components/ui/button.d.ts +8 -0
- package/dist/components/ui/card.d.ts +11 -0
- package/dist/components/ui/checkbox.d.ts +13 -0
- package/dist/components/ui/component-preview.d.ts +10 -0
- package/dist/components/ui/dialog.d.ts +17 -0
- package/dist/components/ui/dropdown-menu.d.ts +29 -0
- package/dist/components/ui/input.d.ts +3 -0
- package/dist/components/ui/popover.d.ts +9 -0
- package/dist/components/ui/select.d.ts +15 -0
- package/dist/components/ui/switch.d.ts +12 -0
- package/dist/components/ui/table.d.ts +10 -0
- package/dist/components/ui/tabs.d.ts +6 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/upload/file-upload.d.ts +61 -0
- package/dist/components/upload/image-upload.d.ts +14 -0
- package/dist/components/upload/index.d.ts +2 -0
- package/dist/components/wizard/index.d.ts +2 -0
- package/dist/components/wizard/stepper.d.ts +16 -0
- package/dist/components/wizard/wizard.d.ts +17 -0
- package/dist/hooks/index.d.ts +6 -0
- package/dist/hooks/use-before-unload-when-dirty.d.ts +2 -0
- package/dist/hooks/use-data-table-view-state.d.ts +20 -0
- package/dist/hooks/use-debounce.d.ts +3 -0
- package/dist/hooks/use-disclosure.d.ts +13 -0
- package/dist/hooks/use-is-mobile.d.ts +3 -0
- package/dist/hooks/use-session-storage-state.d.ts +8 -0
- package/dist/index.cjs +9 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +23213 -0
- package/dist/lib/utils.d.ts +2 -0
- package/package.json +118 -0
- package/registry.json +185 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type ActionMenuItem = {
|
|
3
|
+
key: string;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
icon?: React.ReactNode;
|
|
6
|
+
shortcut?: React.ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
loading?: boolean;
|
|
9
|
+
destructive?: boolean;
|
|
10
|
+
hidden?: boolean;
|
|
11
|
+
onSelect?: () => void | Promise<void>;
|
|
12
|
+
};
|
|
13
|
+
export type ActionMenuProps = {
|
|
14
|
+
actions: ActionMenuItem[];
|
|
15
|
+
label?: React.ReactNode;
|
|
16
|
+
trigger?: React.ReactElement;
|
|
17
|
+
align?: "start" | "center" | "end";
|
|
18
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
19
|
+
sideOffset?: number;
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
contentClassName?: string;
|
|
22
|
+
triggerClassName?: string;
|
|
23
|
+
emptyLabel?: React.ReactNode;
|
|
24
|
+
};
|
|
25
|
+
declare function ActionMenu({ actions, label, trigger, align, side, sideOffset, disabled, contentClassName, triggerClassName, emptyLabel, }: ActionMenuProps): React.JSX.Element;
|
|
26
|
+
export { ActionMenu };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Button } from "@/components/ui/button";
|
|
3
|
+
export type CopyButtonProps = Omit<React.ComponentProps<typeof Button>, "onClick"> & {
|
|
4
|
+
value: string;
|
|
5
|
+
copiedLabel?: React.ReactNode;
|
|
6
|
+
copyLabel?: React.ReactNode;
|
|
7
|
+
copiedTimeout?: number;
|
|
8
|
+
onCopied?: (value: string) => void;
|
|
9
|
+
onCopyError?: (error: unknown) => void;
|
|
10
|
+
showIcon?: boolean;
|
|
11
|
+
};
|
|
12
|
+
declare function CopyButton({ value, copiedLabel, copyLabel, copiedTimeout, onCopied, onCopyError, showIcon, disabled, children, type, ...props }: CopyButtonProps): React.JSX.Element;
|
|
13
|
+
export { CopyButton };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type QuickActionGridColumn = 1 | 2 | 3 | 4;
|
|
3
|
+
export type QuickActionGridItem = {
|
|
4
|
+
key: string;
|
|
5
|
+
label: React.ReactNode;
|
|
6
|
+
description?: React.ReactNode;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
badge?: React.ReactNode;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
hidden?: boolean;
|
|
11
|
+
href?: string;
|
|
12
|
+
external?: boolean;
|
|
13
|
+
onSelect?: () => void;
|
|
14
|
+
className?: string;
|
|
15
|
+
};
|
|
16
|
+
export type QuickActionGridProps = React.ComponentProps<"div"> & {
|
|
17
|
+
items: QuickActionGridItem[];
|
|
18
|
+
columns?: QuickActionGridColumn;
|
|
19
|
+
compact?: boolean;
|
|
20
|
+
itemClassName?: string;
|
|
21
|
+
renderLink?: (props: React.ComponentProps<"a"> & {
|
|
22
|
+
item: QuickActionGridItem;
|
|
23
|
+
[key: `data-${string}`]: string | boolean | undefined;
|
|
24
|
+
}) => React.ReactNode;
|
|
25
|
+
};
|
|
26
|
+
declare function QuickActionGrid({ items, columns, compact, itemClassName, renderLink, className, ...props }: QuickActionGridProps): React.JSX.Element;
|
|
27
|
+
export { QuickActionGrid };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type CalendarDateRange = {
|
|
3
|
+
from?: string | null;
|
|
4
|
+
to?: string | null;
|
|
5
|
+
};
|
|
6
|
+
export type CalendarLabels = {
|
|
7
|
+
previousMonth?: string;
|
|
8
|
+
nextMonth?: string;
|
|
9
|
+
selectDate?: (date: string) => string;
|
|
10
|
+
};
|
|
11
|
+
export type CalendarProps = React.ComponentProps<"div"> & {
|
|
12
|
+
value?: string | null;
|
|
13
|
+
range?: CalendarDateRange;
|
|
14
|
+
onValueChange?: (value: string) => void;
|
|
15
|
+
onRangeChange?: (range: CalendarDateRange) => void;
|
|
16
|
+
mode?: "single" | "range";
|
|
17
|
+
month?: Date;
|
|
18
|
+
defaultMonth?: Date | string | null;
|
|
19
|
+
onMonthChange?: (month: Date) => void;
|
|
20
|
+
min?: string;
|
|
21
|
+
max?: string;
|
|
22
|
+
disabledDates?: string[];
|
|
23
|
+
locale?: string;
|
|
24
|
+
weekStartsOn?: 0 | 1;
|
|
25
|
+
labels?: CalendarLabels;
|
|
26
|
+
};
|
|
27
|
+
declare function Calendar({ className, value, range, onValueChange, onRangeChange, mode, month, defaultMonth, onMonthChange, min, max, disabledDates, locale, weekStartsOn, labels, ...props }: CalendarProps): React.JSX.Element;
|
|
28
|
+
export { Calendar };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type CalendarProps } from "@/components/calendar/calendar";
|
|
3
|
+
export type DatePickerLabels = CalendarProps["labels"] & {
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
};
|
|
6
|
+
export type DatePickerProps = Omit<CalendarProps, "mode" | "range" | "onRangeChange" | "labels"> & {
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
labels?: DatePickerLabels;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
formatValue?: (value: string) => React.ReactNode;
|
|
11
|
+
triggerClassName?: string;
|
|
12
|
+
contentClassName?: string;
|
|
13
|
+
};
|
|
14
|
+
declare function DatePicker({ value, onValueChange, placeholder, labels, disabled, formatValue, triggerClassName, contentClassName, className, ...calendarProps }: DatePickerProps): React.JSX.Element;
|
|
15
|
+
export { DatePicker };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type CalendarDateRange, type CalendarProps } from "@/components/calendar/calendar";
|
|
3
|
+
export type DateRangePickerValue = CalendarDateRange;
|
|
4
|
+
export type DateRangePickerLabels = CalendarProps["labels"] & {
|
|
5
|
+
placeholder?: string;
|
|
6
|
+
};
|
|
7
|
+
export type DateRangePickerProps = Omit<CalendarProps, "mode" | "value" | "onValueChange" | "range" | "onRangeChange" | "labels"> & {
|
|
8
|
+
value?: DateRangePickerValue;
|
|
9
|
+
onValueChange?: (value: DateRangePickerValue) => void;
|
|
10
|
+
labels?: DateRangePickerLabels;
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
formatValue?: (value: string) => React.ReactNode;
|
|
14
|
+
triggerClassName?: string;
|
|
15
|
+
contentClassName?: string;
|
|
16
|
+
};
|
|
17
|
+
declare function DateRangePicker({ className, value, onValueChange, labels, placeholder, disabled, formatValue, triggerClassName, contentClassName, ...calendarProps }: DateRangePickerProps): React.JSX.Element;
|
|
18
|
+
export { DateRangePicker };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare function toDateKey(date: Date): string;
|
|
2
|
+
declare function parseDateKey(value?: string | null): Date | null;
|
|
3
|
+
declare function startOfMonth(date: Date): Date;
|
|
4
|
+
declare function addMonths(date: Date, amount: number): Date;
|
|
5
|
+
declare function isSameMonth(left: Date, right: Date): boolean;
|
|
6
|
+
declare function isBeforeDate(left: string, right?: string | null): boolean;
|
|
7
|
+
declare function isAfterDate(left: string, right?: string | null): boolean;
|
|
8
|
+
declare function isWithinRange(date: string, from?: string | null, to?: string | null): boolean;
|
|
9
|
+
declare function getMonthLabel(date: Date, locale?: string): string;
|
|
10
|
+
declare function getWeekdayLabels(locale?: string, weekStartsOn?: 0 | 1): string[];
|
|
11
|
+
declare function getMonthDays(month: Date, weekStartsOn?: 0 | 1): Date[];
|
|
12
|
+
export { addMonths, getMonthDays, getMonthLabel, getWeekdayLabels, isAfterDate, isBeforeDate, isSameMonth, isWithinRange, parseDateKey, startOfMonth, toDateKey, };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type CommandPaletteItem = {
|
|
3
|
+
id: string;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
value?: string;
|
|
6
|
+
description?: React.ReactNode;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
shortcut?: React.ReactNode;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
disabledReason?: React.ReactNode;
|
|
11
|
+
hidden?: boolean;
|
|
12
|
+
keywords?: string[];
|
|
13
|
+
closeOnSelect?: boolean;
|
|
14
|
+
onSelect?: () => void | Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
export type CommandPaletteGroup = {
|
|
17
|
+
id: string;
|
|
18
|
+
label?: React.ReactNode;
|
|
19
|
+
items?: CommandPaletteItem[];
|
|
20
|
+
loadItems?: (search: string) => Promise<CommandPaletteItem[]>;
|
|
21
|
+
loadingLabel?: React.ReactNode;
|
|
22
|
+
emptyLabel?: React.ReactNode;
|
|
23
|
+
hidden?: boolean;
|
|
24
|
+
};
|
|
25
|
+
export type CommandPaletteRecentConfig = {
|
|
26
|
+
enabled?: boolean;
|
|
27
|
+
label?: React.ReactNode;
|
|
28
|
+
limit?: number;
|
|
29
|
+
};
|
|
30
|
+
export type CommandPaletteProps = {
|
|
31
|
+
open?: boolean;
|
|
32
|
+
onOpenChange?: (open: boolean) => void;
|
|
33
|
+
title?: React.ReactNode;
|
|
34
|
+
description?: React.ReactNode;
|
|
35
|
+
placeholder?: string;
|
|
36
|
+
emptyLabel?: React.ReactNode;
|
|
37
|
+
loadingLabel?: React.ReactNode;
|
|
38
|
+
groups: CommandPaletteGroup[];
|
|
39
|
+
value?: string;
|
|
40
|
+
onValueChange?: (value: string) => void;
|
|
41
|
+
debounceMs?: number;
|
|
42
|
+
recent?: CommandPaletteRecentConfig | boolean;
|
|
43
|
+
filterItem?: (item: CommandPaletteItem, search: string) => boolean;
|
|
44
|
+
renderEmpty?: (search: string) => React.ReactNode;
|
|
45
|
+
renderLoading?: (search: string) => React.ReactNode;
|
|
46
|
+
onItemSelect?: (item: CommandPaletteItem, group: CommandPaletteGroup) => void;
|
|
47
|
+
className?: string;
|
|
48
|
+
contentClassName?: string;
|
|
49
|
+
inputClassName?: string;
|
|
50
|
+
listClassName?: string;
|
|
51
|
+
};
|
|
52
|
+
declare function CommandPalette({ open, onOpenChange, title, description, placeholder, emptyLabel, loadingLabel, groups, value, onValueChange, debounceMs, recent, filterItem, renderEmpty, renderLoading, onItemSelect, className, contentClassName, inputClassName, listClassName, }: CommandPaletteProps): React.JSX.Element;
|
|
53
|
+
declare function useCommandPaletteShortcut(onOpenChange: (open: boolean) => void, enabled?: boolean): void;
|
|
54
|
+
export { CommandPalette, useCommandPaletteShortcut };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./command-palette";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { ColumnDef, Row } from "@tanstack/react-table";
|
|
3
|
+
import { type DataTableRowAction } from "@/components/data-table/data-table-row-actions";
|
|
4
|
+
export type DataTableActionsColumnOptions<TData> = {
|
|
5
|
+
id?: string;
|
|
6
|
+
size?: number;
|
|
7
|
+
header?: React.ReactNode;
|
|
8
|
+
headerClassName?: string;
|
|
9
|
+
cellClassName?: string;
|
|
10
|
+
actions?: DataTableRowAction<TData>[];
|
|
11
|
+
getActions?: (row: Row<TData>, original: TData) => DataTableRowAction<TData>[];
|
|
12
|
+
label?: React.ReactNode;
|
|
13
|
+
emptyLabel?: React.ReactNode;
|
|
14
|
+
};
|
|
15
|
+
declare function createDataTableActionsColumn<TData>({ id, size, header, headerClassName, cellClassName, actions, getActions, label, emptyLabel, }?: DataTableActionsColumnOptions<TData>): ColumnDef<TData>;
|
|
16
|
+
export { createDataTableActionsColumn };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type ActionMenuItem, type ActionMenuProps } from "@/components/actions/action-menu";
|
|
3
|
+
export type DataTableBulkAction<TData> = Omit<ActionMenuItem, "onSelect"> & {
|
|
4
|
+
onSelect?: (rows: TData[]) => void | Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
export type DataTableBulkActionsProps<TData> = Omit<ActionMenuProps, "actions" | "trigger"> & {
|
|
7
|
+
rows: TData[];
|
|
8
|
+
actions: DataTableBulkAction<TData>[];
|
|
9
|
+
label?: React.ReactNode;
|
|
10
|
+
selectedLabel?: (count: number) => React.ReactNode;
|
|
11
|
+
clearLabel?: React.ReactNode;
|
|
12
|
+
onClearSelection?: () => void;
|
|
13
|
+
hideWhenEmpty?: boolean;
|
|
14
|
+
triggerClassName?: string;
|
|
15
|
+
};
|
|
16
|
+
declare function DataTableBulkActions<TData>({ rows, actions, label, selectedLabel, clearLabel, onClearSelection, hideWhenEmpty, triggerClassName, disabled, ...props }: DataTableBulkActionsProps<TData>): React.JSX.Element | null;
|
|
17
|
+
export { DataTableBulkActions };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { Table as TanStackTable } from "@tanstack/react-table";
|
|
3
|
+
export type DataTableColumnVisibilityMenuProps<TData> = {
|
|
4
|
+
table: TanStackTable<TData>;
|
|
5
|
+
label?: React.ReactNode;
|
|
6
|
+
triggerLabel?: React.ReactNode;
|
|
7
|
+
align?: "start" | "center" | "end";
|
|
8
|
+
side?: "top" | "right" | "bottom" | "left";
|
|
9
|
+
triggerClassName?: string;
|
|
10
|
+
contentClassName?: string;
|
|
11
|
+
getColumnLabel?: (columnId: string) => React.ReactNode;
|
|
12
|
+
};
|
|
13
|
+
declare function DataTableColumnVisibilityMenu<TData>({ table, label, triggerLabel, align, side, triggerClassName, contentClassName, getColumnLabel, }: DataTableColumnVisibilityMenuProps<TData>): React.JSX.Element;
|
|
14
|
+
export { DataTableColumnVisibilityMenu };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type PaginationLabels } from "@/components/navigation/pagination";
|
|
3
|
+
export type DataTablePaginationLabels = PaginationLabels & {
|
|
4
|
+
rowsPerPage?: React.ReactNode;
|
|
5
|
+
pageInfo?: (page: number, pageCount: number, rowCount?: number) => React.ReactNode;
|
|
6
|
+
};
|
|
7
|
+
export type DataTablePaginationProps = React.ComponentProps<"div"> & {
|
|
8
|
+
pageIndex: number;
|
|
9
|
+
pageSize: number;
|
|
10
|
+
pageCount?: number;
|
|
11
|
+
rowCount?: number;
|
|
12
|
+
pageSizeOptions?: number[];
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
showPageSize?: boolean;
|
|
15
|
+
labels?: DataTablePaginationLabels;
|
|
16
|
+
onPageChange?: (pageIndex: number) => void;
|
|
17
|
+
onPageSizeChange?: (pageSize: number) => void;
|
|
18
|
+
};
|
|
19
|
+
declare function getDataTablePageCount(pageSize: number, pageCount?: number, rowCount?: number): number;
|
|
20
|
+
declare function DataTablePagination({ className, pageIndex, pageSize, pageCount, rowCount, pageSizeOptions, disabled, showPageSize, labels, onPageChange, onPageSizeChange, ...props }: DataTablePaginationProps): React.JSX.Element;
|
|
21
|
+
export { DataTablePagination, getDataTablePageCount };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Row } from "@tanstack/react-table";
|
|
2
|
+
import { type ActionMenuItem, type ActionMenuProps } from "@/components/actions/action-menu";
|
|
3
|
+
export type DataTableRowAction<TData> = Omit<ActionMenuItem, "onSelect"> & {
|
|
4
|
+
onSelect?: (row: Row<TData>, original: TData) => void | Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
export type DataTableRowActionsProps<TData> = Omit<ActionMenuProps, "actions"> & {
|
|
7
|
+
row: Row<TData>;
|
|
8
|
+
actions?: DataTableRowAction<TData>[];
|
|
9
|
+
getActions?: (row: Row<TData>, original: TData) => DataTableRowAction<TData>[];
|
|
10
|
+
};
|
|
11
|
+
declare function resolveRowActions<TData>(row: Row<TData>, actions?: DataTableRowAction<TData>[], getActions?: (row: Row<TData>, original: TData) => DataTableRowAction<TData>[]): ActionMenuItem[];
|
|
12
|
+
declare function DataTableRowActions<TData>({ row, actions, getActions, ...props }: DataTableRowActionsProps<TData>): import("react").JSX.Element;
|
|
13
|
+
export { DataTableRowActions, resolveRowActions };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ColumnDef } from "@tanstack/react-table";
|
|
2
|
+
export type DataTableSelectColumnOptions<TData> = {
|
|
3
|
+
id?: string;
|
|
4
|
+
size?: number;
|
|
5
|
+
headerClassName?: string;
|
|
6
|
+
cellClassName?: string;
|
|
7
|
+
ariaLabel?: {
|
|
8
|
+
selectAll?: string;
|
|
9
|
+
selectRow?: (row: TData) => string;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
declare function createDataTableSelectColumn<TData>({ id, size, headerClassName, cellClassName, ariaLabel, }?: DataTableSelectColumnOptions<TData>): ColumnDef<TData>;
|
|
13
|
+
export { createDataTableSelectColumn };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { Column } from "@tanstack/react-table";
|
|
3
|
+
export type DataTableSortableHeaderProps<TData, TValue> = React.ComponentProps<"div"> & {
|
|
4
|
+
column: Column<TData, TValue>;
|
|
5
|
+
children?: React.ReactNode;
|
|
6
|
+
label?: React.ReactNode;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
buttonClassName?: string;
|
|
9
|
+
};
|
|
10
|
+
declare function DataTableSortableHeader<TData, TValue>({ className, column, children, label, disabled, buttonClassName, ...props }: DataTableSortableHeaderProps<TData, TValue>): React.JSX.Element;
|
|
11
|
+
export { DataTableSortableHeader };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type DataTableToolbarProps = React.ComponentProps<"div"> & {
|
|
3
|
+
title?: React.ReactNode;
|
|
4
|
+
description?: React.ReactNode;
|
|
5
|
+
search?: React.ReactNode;
|
|
6
|
+
filters?: React.ReactNode;
|
|
7
|
+
actions?: React.ReactNode;
|
|
8
|
+
selectionActions?: React.ReactNode;
|
|
9
|
+
selectedCount?: number;
|
|
10
|
+
totalCount?: number;
|
|
11
|
+
selectedLabel?: (selectedCount: number, totalCount?: number) => React.ReactNode;
|
|
12
|
+
};
|
|
13
|
+
declare function DataTableToolbar({ className, title, description, search, filters, actions, selectionActions, selectedCount, totalCount, selectedLabel, children, ...props }: DataTableToolbarProps): React.JSX.Element;
|
|
14
|
+
export { DataTableToolbar };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type DataTableViewPreset<TValue extends string = string> = {
|
|
3
|
+
value: TValue;
|
|
4
|
+
label: React.ReactNode;
|
|
5
|
+
description?: React.ReactNode;
|
|
6
|
+
icon?: React.ReactNode;
|
|
7
|
+
count?: React.ReactNode;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
hidden?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type DataTableViewPresetsProps<TValue extends string = string> = Omit<React.ComponentProps<"div">, "onChange"> & {
|
|
12
|
+
value?: TValue;
|
|
13
|
+
presets: DataTableViewPreset<TValue>[];
|
|
14
|
+
onValueChange?: (value: TValue | undefined, preset?: DataTableViewPreset<TValue>) => void;
|
|
15
|
+
clearable?: boolean;
|
|
16
|
+
clearLabel?: React.ReactNode;
|
|
17
|
+
emptyLabel?: React.ReactNode;
|
|
18
|
+
size?: "xs" | "sm" | "default";
|
|
19
|
+
variant?: "tabs" | "buttons" | "pills";
|
|
20
|
+
renderPreset?: (preset: DataTableViewPreset<TValue>, state: {
|
|
21
|
+
active: boolean;
|
|
22
|
+
}) => React.ReactNode;
|
|
23
|
+
presetClassName?: string;
|
|
24
|
+
activePresetClassName?: string;
|
|
25
|
+
};
|
|
26
|
+
declare function DataTableViewPresets<TValue extends string = string>({ className, value, presets, onValueChange, clearable, clearLabel, emptyLabel, size, variant, renderPreset, presetClassName, activePresetClassName, ...props }: DataTableViewPresetsProps<TValue>): React.JSX.Element;
|
|
27
|
+
export { DataTableViewPresets };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type Cell, type ColumnDef, type Header, type OnChangeFn, type Row, type RowSelectionState, type SortingState, type Table as TanStackTable, type VisibilityState } from "@tanstack/react-table";
|
|
3
|
+
import { type DataTableBulkAction } from "@/components/data-table/data-table-bulk-actions";
|
|
4
|
+
import { type DataTablePaginationProps } from "@/components/data-table/data-table-pagination";
|
|
5
|
+
import { type DataTableRowAction } from "@/components/data-table/data-table-row-actions";
|
|
6
|
+
import { type DataTableToolbarProps } from "@/components/data-table/data-table-toolbar";
|
|
7
|
+
import { type EmptyStateProps } from "@/components/feedback/empty-state";
|
|
8
|
+
import { type LoadingStateProps } from "@/components/feedback/loading-state";
|
|
9
|
+
export type DataTableDensity = "compact" | "default" | "comfortable";
|
|
10
|
+
export type DataTableLoadingVariant = "skeleton" | "state";
|
|
11
|
+
export type DataTableFeatureConfig = {
|
|
12
|
+
search?: boolean;
|
|
13
|
+
columnVisibility?: boolean;
|
|
14
|
+
rowActions?: boolean;
|
|
15
|
+
bulkActions?: boolean;
|
|
16
|
+
refresh?: boolean;
|
|
17
|
+
export?: boolean;
|
|
18
|
+
};
|
|
19
|
+
export type DataTableSearchConfig = {
|
|
20
|
+
value: string;
|
|
21
|
+
onValueChange: (value: string) => void;
|
|
22
|
+
placeholder?: string;
|
|
23
|
+
className?: string;
|
|
24
|
+
inputClassName?: string;
|
|
25
|
+
};
|
|
26
|
+
export type DataTableActionContext<TData> = {
|
|
27
|
+
table: TanStackTable<TData>;
|
|
28
|
+
data: TData[];
|
|
29
|
+
selectedRows: TData[];
|
|
30
|
+
};
|
|
31
|
+
export type DataTablePaginationConfig = Pick<DataTablePaginationProps, "pageIndex" | "pageSize" | "pageCount" | "rowCount" | "pageSizeOptions" | "labels" | "showPageSize"> & {
|
|
32
|
+
manual?: boolean;
|
|
33
|
+
hidden?: boolean;
|
|
34
|
+
onPageChange?: (pageIndex: number) => void;
|
|
35
|
+
onPageSizeChange?: (pageSize: number) => void;
|
|
36
|
+
};
|
|
37
|
+
export type DataTableProps<TData, TValue = unknown> = Omit<React.ComponentProps<"div">, "children"> & {
|
|
38
|
+
columns: ColumnDef<TData, TValue>[];
|
|
39
|
+
data: TData[];
|
|
40
|
+
title?: React.ReactNode;
|
|
41
|
+
description?: React.ReactNode;
|
|
42
|
+
features?: DataTableFeatureConfig;
|
|
43
|
+
search?: DataTableSearchConfig;
|
|
44
|
+
toolbarActions?: React.ReactNode | ((context: DataTableActionContext<TData>) => React.ReactNode);
|
|
45
|
+
rowActions?: (row: Row<TData>, original: TData) => DataTableRowAction<TData>[];
|
|
46
|
+
bulkActions?: DataTableBulkAction<TData>[];
|
|
47
|
+
onRefresh?: (context: DataTableActionContext<TData>) => void;
|
|
48
|
+
onExport?: (context: DataTableActionContext<TData>) => void;
|
|
49
|
+
refreshLabel?: React.ReactNode;
|
|
50
|
+
exportLabel?: React.ReactNode;
|
|
51
|
+
getRowId?: (originalRow: TData, index: number, parent?: Row<TData>) => string;
|
|
52
|
+
isLoading?: boolean;
|
|
53
|
+
isError?: boolean;
|
|
54
|
+
emptyState?: EmptyStateProps;
|
|
55
|
+
errorState?: EmptyStateProps;
|
|
56
|
+
loadingState?: LoadingStateProps;
|
|
57
|
+
loadingVariant?: DataTableLoadingVariant;
|
|
58
|
+
toolbar?: React.ReactNode | ((table: TanStackTable<TData>) => React.ReactNode);
|
|
59
|
+
toolbarProps?: DataTableToolbarProps | ((table: TanStackTable<TData>) => DataTableToolbarProps);
|
|
60
|
+
pagination?: DataTablePaginationConfig | false;
|
|
61
|
+
sorting?: SortingState;
|
|
62
|
+
onSortingChange?: OnChangeFn<SortingState>;
|
|
63
|
+
columnVisibility?: VisibilityState;
|
|
64
|
+
onColumnVisibilityChange?: OnChangeFn<VisibilityState>;
|
|
65
|
+
rowSelection?: RowSelectionState;
|
|
66
|
+
onRowSelectionChange?: OnChangeFn<RowSelectionState>;
|
|
67
|
+
enableRowSelection?: boolean | ((row: Row<TData>) => boolean);
|
|
68
|
+
renderMobileCard?: (row: Row<TData>) => React.ReactNode;
|
|
69
|
+
onRowClick?: (row: Row<TData>) => void;
|
|
70
|
+
onRowDoubleClick?: (row: Row<TData>) => void;
|
|
71
|
+
getRowDisabled?: (row: Row<TData>) => boolean;
|
|
72
|
+
density?: DataTableDensity;
|
|
73
|
+
striped?: boolean;
|
|
74
|
+
bordered?: boolean;
|
|
75
|
+
stickyHeader?: boolean;
|
|
76
|
+
skeletonRows?: number;
|
|
77
|
+
skeletonCellClassName?: string;
|
|
78
|
+
cellFallback?: React.ReactNode;
|
|
79
|
+
tableClassName?: string;
|
|
80
|
+
tableWrapperClassName?: string;
|
|
81
|
+
headerCellClassName?: string | ((header: Header<TData, unknown>) => string);
|
|
82
|
+
cellClassName?: string | ((cell: Cell<TData, unknown>) => string);
|
|
83
|
+
rowClassName?: string | ((row: Row<TData>) => string);
|
|
84
|
+
};
|
|
85
|
+
declare function DataTable<TData, TValue = unknown>({ className, columns, data, title, description, features, search, toolbarActions, rowActions, bulkActions, onRefresh, onExport, refreshLabel, exportLabel, getRowId, isLoading, isError, emptyState, errorState, loadingState, loadingVariant, toolbar, toolbarProps, pagination, sorting, onSortingChange, columnVisibility, onColumnVisibilityChange, rowSelection, onRowSelectionChange, enableRowSelection, renderMobileCard, onRowClick, onRowDoubleClick, getRowDisabled, density, striped, bordered, stickyHeader, skeletonRows, skeletonCellClassName, cellFallback, tableClassName, tableWrapperClassName, headerCellClassName, cellClassName, rowClassName, ...props }: DataTableProps<TData, TValue>): React.JSX.Element;
|
|
86
|
+
export { DataTable };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./data-table";
|
|
2
|
+
export * from "./data-table-pagination";
|
|
3
|
+
export * from "./data-table-toolbar";
|
|
4
|
+
export * from "./data-table-column-visibility-menu";
|
|
5
|
+
export * from "./data-table-select-column";
|
|
6
|
+
export * from "./data-table-sortable-header";
|
|
7
|
+
export * from "./data-table-row-actions";
|
|
8
|
+
export * from "./data-table-actions-column";
|
|
9
|
+
export * from "./data-table-bulk-actions";
|
|
10
|
+
export * from "./data-table-view-presets";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Card } from "@/components/ui/card";
|
|
3
|
+
export type ActivityFeedItem = {
|
|
4
|
+
id: string;
|
|
5
|
+
title: React.ReactNode;
|
|
6
|
+
description?: React.ReactNode;
|
|
7
|
+
time?: React.ReactNode;
|
|
8
|
+
icon?: React.ReactNode;
|
|
9
|
+
tone?: "default" | "success" | "warning" | "danger" | "info" | "muted";
|
|
10
|
+
actions?: React.ReactNode;
|
|
11
|
+
hidden?: boolean;
|
|
12
|
+
className?: string;
|
|
13
|
+
};
|
|
14
|
+
export type ActivityFeedProps = React.ComponentProps<typeof Card> & {
|
|
15
|
+
title?: React.ReactNode;
|
|
16
|
+
description?: React.ReactNode;
|
|
17
|
+
actions?: React.ReactNode;
|
|
18
|
+
items: ActivityFeedItem[];
|
|
19
|
+
empty?: React.ReactNode;
|
|
20
|
+
compact?: boolean;
|
|
21
|
+
contentClassName?: string;
|
|
22
|
+
itemClassName?: string;
|
|
23
|
+
};
|
|
24
|
+
declare function ActivityFeed({ className, title, description, actions, items, empty, compact, contentClassName, itemClassName, ...props }: ActivityFeedProps): React.JSX.Element;
|
|
25
|
+
export { ActivityFeed };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type AvatarSize = "xs" | "sm" | "default" | "lg" | "xl";
|
|
3
|
+
export type AvatarShape = "circle" | "rounded" | "square";
|
|
4
|
+
export type AvatarProps = React.ComponentProps<"span"> & {
|
|
5
|
+
src?: string;
|
|
6
|
+
alt?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
fallback?: React.ReactNode;
|
|
9
|
+
size?: AvatarSize;
|
|
10
|
+
shape?: AvatarShape;
|
|
11
|
+
status?: "online" | "offline" | "busy" | "away";
|
|
12
|
+
};
|
|
13
|
+
export type AvatarGroupItem = AvatarProps & {
|
|
14
|
+
key: string;
|
|
15
|
+
};
|
|
16
|
+
export type AvatarGroupProps = React.ComponentProps<"div"> & {
|
|
17
|
+
items: AvatarGroupItem[];
|
|
18
|
+
max?: number;
|
|
19
|
+
size?: AvatarSize;
|
|
20
|
+
shape?: AvatarShape;
|
|
21
|
+
stacked?: boolean;
|
|
22
|
+
overflowLabel?: (count: number) => React.ReactNode;
|
|
23
|
+
};
|
|
24
|
+
declare function Avatar({ src, alt, name, fallback, size, shape, status, className, ...props }: AvatarProps): React.JSX.Element;
|
|
25
|
+
declare function AvatarGroup({ items, max, size, shape, stacked, overflowLabel, className, ...props }: AvatarGroupProps): React.JSX.Element;
|
|
26
|
+
export { Avatar, AvatarGroup };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Card } from "@/components/ui/card";
|
|
3
|
+
export type DataStateStatus = "idle" | "loading" | "empty" | "error" | "success";
|
|
4
|
+
export type DataStateProps = React.ComponentProps<typeof Card> & {
|
|
5
|
+
status: DataStateStatus;
|
|
6
|
+
title?: React.ReactNode;
|
|
7
|
+
description?: React.ReactNode;
|
|
8
|
+
actions?: React.ReactNode;
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
compact?: boolean;
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
retryLabel?: React.ReactNode;
|
|
13
|
+
onRetry?: () => void;
|
|
14
|
+
};
|
|
15
|
+
declare function DataState({ status, title, description, actions, icon, compact, children, retryLabel, onRetry, className, ...props }: DataStateProps): React.JSX.Element;
|
|
16
|
+
export { DataState };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Card } from "@/components/ui/card";
|
|
3
|
+
export type DescriptionListColumn = 1 | 2 | 3 | 4;
|
|
4
|
+
export type DescriptionListItem = {
|
|
5
|
+
key: string;
|
|
6
|
+
label: React.ReactNode;
|
|
7
|
+
value?: React.ReactNode;
|
|
8
|
+
description?: React.ReactNode;
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
span?: DescriptionListColumn;
|
|
11
|
+
hidden?: boolean;
|
|
12
|
+
className?: string;
|
|
13
|
+
labelClassName?: string;
|
|
14
|
+
valueClassName?: string;
|
|
15
|
+
};
|
|
16
|
+
export type DescriptionListProps = React.ComponentProps<typeof Card> & {
|
|
17
|
+
title?: React.ReactNode;
|
|
18
|
+
description?: React.ReactNode;
|
|
19
|
+
actions?: React.ReactNode;
|
|
20
|
+
items: DescriptionListItem[];
|
|
21
|
+
columns?: DescriptionListColumn;
|
|
22
|
+
bordered?: boolean;
|
|
23
|
+
compact?: boolean;
|
|
24
|
+
emptyValue?: React.ReactNode;
|
|
25
|
+
itemClassName?: string;
|
|
26
|
+
labelClassName?: string;
|
|
27
|
+
valueClassName?: string;
|
|
28
|
+
contentClassName?: string;
|
|
29
|
+
};
|
|
30
|
+
declare function DescriptionList({ title, description, actions, items, columns, bordered, compact, emptyValue, itemClassName, labelClassName, valueClassName, contentClassName, className, ...props }: DescriptionListProps): React.JSX.Element;
|
|
31
|
+
export { DescriptionList };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./description-list";
|
|
2
|
+
export * from "./progress";
|
|
3
|
+
export * from "./result";
|
|
4
|
+
export * from "./timeline";
|
|
5
|
+
export * from "./metric-grid";
|
|
6
|
+
export * from "./info-card";
|
|
7
|
+
export * from "./activity-feed";
|
|
8
|
+
export * from "./status-legend";
|
|
9
|
+
export * from "./avatar";
|
|
10
|
+
export * from "./data-state";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Card } from "@/components/ui/card";
|
|
3
|
+
export type InfoCardProps = React.ComponentProps<typeof Card> & {
|
|
4
|
+
eyebrow?: React.ReactNode;
|
|
5
|
+
title?: React.ReactNode;
|
|
6
|
+
description?: React.ReactNode;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
actions?: React.ReactNode;
|
|
9
|
+
footer?: React.ReactNode;
|
|
10
|
+
media?: React.ReactNode;
|
|
11
|
+
orientation?: "vertical" | "horizontal";
|
|
12
|
+
compact?: boolean;
|
|
13
|
+
headerClassName?: string;
|
|
14
|
+
contentClassName?: string;
|
|
15
|
+
footerClassName?: string;
|
|
16
|
+
};
|
|
17
|
+
declare function InfoCard({ className, eyebrow, title, description, icon, actions, footer, media, orientation, compact, headerClassName, contentClassName, footerClassName, children, ...props }: InfoCardProps): React.JSX.Element;
|
|
18
|
+
export { InfoCard };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type MetricTone = "default" | "success" | "warning" | "danger" | "info" | "muted";
|
|
3
|
+
export type MetricGridColumn = 1 | 2 | 3 | 4;
|
|
4
|
+
export type MetricItem = {
|
|
5
|
+
key: string;
|
|
6
|
+
label: React.ReactNode;
|
|
7
|
+
value: React.ReactNode;
|
|
8
|
+
description?: React.ReactNode;
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
trend?: React.ReactNode;
|
|
11
|
+
tone?: MetricTone;
|
|
12
|
+
hidden?: boolean;
|
|
13
|
+
className?: string;
|
|
14
|
+
};
|
|
15
|
+
export type MetricGridProps = React.ComponentProps<"div"> & {
|
|
16
|
+
items: MetricItem[];
|
|
17
|
+
columns?: MetricGridColumn;
|
|
18
|
+
compact?: boolean;
|
|
19
|
+
itemClassName?: string;
|
|
20
|
+
};
|
|
21
|
+
declare function MetricGrid({ className, items, columns, compact, itemClassName, ...props }: MetricGridProps): React.JSX.Element;
|
|
22
|
+
export { MetricGrid };
|