periplo-ui 4.9.3 → 4.11.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/dist/components/Badge/Badge.d.ts +22 -66
- package/dist/components/Badge/Badge.js +15 -88
- package/dist/components/Badge/Badge.js.map +1 -1
- package/dist/components/DataTable/DataTable.js +31 -23
- package/dist/components/DataTable/DataTable.js.map +1 -1
- package/dist/components/DataTable/components/DataTableBody.js +2 -2
- package/dist/components/DataTable/components/DataTableBody.js.map +1 -1
- package/dist/components/DataTable/components/DataTableToolbar.js +2 -2
- package/dist/components/DataTable/components/DataTableToolbar.js.map +1 -1
- package/dist/components/Form/Form.d.ts +1 -1
- package/dist/components/NotificationBadge/NotificationBadge.d.ts +84 -0
- package/dist/components/NotificationBadge/NotificationBadge.js +85 -0
- package/dist/components/NotificationBadge/NotificationBadge.js.map +1 -0
- package/dist/components/NotificationBadge/index.d.ts +1 -0
- package/dist/components/NotificationBadge/index.js +2 -0
- package/dist/components/NotificationBadge/index.js.map +1 -0
- package/dist/components/PhoneInput/PhoneInput.d.ts +24 -40
- package/dist/components/PhoneInput/PhoneInput.js +139 -116
- package/dist/components/PhoneInput/PhoneInput.js.map +1 -1
- package/dist/components/PhoneInput/hooks/index.d.ts +1 -0
- package/dist/components/PhoneInput/hooks/index.js +2 -0
- package/dist/components/PhoneInput/hooks/index.js.map +1 -0
- package/dist/components/PhoneInput/hooks/usePhoneField.d.ts +22 -0
- package/dist/components/PhoneInput/hooks/usePhoneField.js +152 -0
- package/dist/components/PhoneInput/hooks/usePhoneField.js.map +1 -0
- package/dist/components/PhoneInput/index.d.ts +2 -1
- package/dist/components/PhoneInput/index.js +1 -1
- package/dist/components/PhoneInput/phone.d.ts +47 -0
- package/dist/components/PhoneInput/phone.js +129 -0
- package/dist/components/PhoneInput/phone.js.map +1 -0
- package/dist/components/PhoneInput/types.d.ts +25 -0
- package/dist/components/PhoneInput/types.js +2 -0
- package/dist/components/PhoneInput/types.js.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +23 -1
- package/dist/components/RadioGroup/RadioGroup.js +63 -15
- package/dist/components/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/components/Toaster/Toaster.js +33 -22
- package/dist/components/Toaster/Toaster.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +8 -2
- package/dist/components/Tooltip/Tooltip.js +18 -6
- package/dist/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/Typography/Typography.d.ts +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/useTouchDevice.d.ts +1 -0
- package/dist/lib/useTouchDevice.js +18 -0
- package/dist/lib/useTouchDevice.js.map +1 -0
- package/package.json +6 -1
- package/dist/components/PhoneInput/countries.d.ts +0 -16
- package/dist/components/PhoneInput/countries.js +0 -254
- package/dist/components/PhoneInput/countries.js.map +0 -1
|
@@ -1,90 +1,46 @@
|
|
|
1
|
-
import { VariantProps } from 'class-variance-authority';
|
|
2
1
|
import * as React from 'react';
|
|
3
2
|
declare const badgeVariants: (props?: ({
|
|
4
|
-
color?: "
|
|
5
|
-
size?: "
|
|
6
|
-
position?: "top-right" | "top-left" | "bottom-right" | "bottom-left" | null | undefined;
|
|
7
|
-
numeric?: boolean | null | undefined;
|
|
3
|
+
color?: "accent" | "success" | "warning" | "error" | "neutral" | "info" | null | undefined;
|
|
4
|
+
size?: "big" | "small" | "medium" | null | undefined;
|
|
8
5
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
9
6
|
export type BadgeProps = {
|
|
10
7
|
/**
|
|
11
|
-
*
|
|
12
|
-
* @default
|
|
8
|
+
* The color of the badge.
|
|
9
|
+
* @default 'neutral'
|
|
13
10
|
*/
|
|
14
|
-
|
|
11
|
+
color?: 'neutral' | 'accent' | 'info' | 'success' | 'warning' | 'error';
|
|
15
12
|
/**
|
|
16
|
-
* The
|
|
17
|
-
* @default '
|
|
13
|
+
* The size of the badge.
|
|
14
|
+
* @default 'medium'
|
|
18
15
|
*/
|
|
19
|
-
|
|
16
|
+
size?: 'small' | 'medium' | 'big';
|
|
20
17
|
/**
|
|
21
|
-
* The
|
|
22
|
-
* @default 'md'
|
|
18
|
+
* The label to display inside the badge.
|
|
23
19
|
*/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* The position of the badge relative to its container
|
|
27
|
-
* @default 'top-right'
|
|
28
|
-
*/
|
|
29
|
-
position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
|
|
30
|
-
/**
|
|
31
|
-
* The number to display in the badge)
|
|
32
|
-
*/
|
|
33
|
-
count?: number;
|
|
34
|
-
} & React.HTMLAttributes<HTMLElement> & VariantProps<typeof badgeVariants>;
|
|
20
|
+
children?: React.ReactNode;
|
|
21
|
+
} & React.HTMLAttributes<HTMLElement>;
|
|
35
22
|
/**
|
|
36
|
-
*
|
|
37
|
-
* status, or draw attention to an element.
|
|
23
|
+
* An inline status label used to represent a state (e.g. "Active", "Pending").
|
|
38
24
|
*
|
|
39
25
|
* @example
|
|
40
26
|
* ```tsx
|
|
41
|
-
*
|
|
42
|
-
* <div className="relative">
|
|
43
|
-
* <Bell className="h-6 w-6" />
|
|
44
|
-
* <Badge intent="error" />
|
|
45
|
-
* </div>
|
|
46
|
-
*
|
|
47
|
-
* // Custom size and position
|
|
48
|
-
* <div className="relative">
|
|
49
|
-
* <Avatar />
|
|
50
|
-
* <Badge
|
|
51
|
-
* intent="success"
|
|
52
|
-
* size="sm"
|
|
53
|
-
* position="bottom-right"
|
|
54
|
-
* ping={false}
|
|
55
|
-
* />
|
|
56
|
-
* </div>
|
|
27
|
+
* <Badge color="success" size="small">Active</Badge>
|
|
57
28
|
* ```
|
|
58
29
|
*/
|
|
59
30
|
declare const Badge: React.ForwardRefExoticComponent<{
|
|
60
31
|
/**
|
|
61
|
-
*
|
|
62
|
-
* @default
|
|
63
|
-
*/
|
|
64
|
-
ping?: boolean;
|
|
65
|
-
/**
|
|
66
|
-
* The color variant of the badge
|
|
67
|
-
* @default 'accent'
|
|
68
|
-
*/
|
|
69
|
-
color?: "neutral" | "accent" | "primary" | "success" | "warning" | "error";
|
|
70
|
-
/**
|
|
71
|
-
* The size of the badge
|
|
72
|
-
* @default 'md'
|
|
32
|
+
* The color of the badge.
|
|
33
|
+
* @default 'neutral'
|
|
73
34
|
*/
|
|
74
|
-
|
|
35
|
+
color?: "neutral" | "accent" | "info" | "success" | "warning" | "error";
|
|
75
36
|
/**
|
|
76
|
-
* The
|
|
77
|
-
* @default '
|
|
37
|
+
* The size of the badge.
|
|
38
|
+
* @default 'medium'
|
|
78
39
|
*/
|
|
79
|
-
|
|
40
|
+
size?: "small" | "medium" | "big";
|
|
80
41
|
/**
|
|
81
|
-
* The
|
|
42
|
+
* The label to display inside the badge.
|
|
82
43
|
*/
|
|
83
|
-
|
|
84
|
-
} & React.HTMLAttributes<HTMLElement> &
|
|
85
|
-
color?: "primary" | "accent" | "success" | "warning" | "error" | "neutral" | null | undefined;
|
|
86
|
-
size?: "sm" | "md" | "lg" | null | undefined;
|
|
87
|
-
position?: "top-right" | "top-left" | "bottom-right" | "bottom-left" | null | undefined;
|
|
88
|
-
numeric?: boolean | null | undefined;
|
|
89
|
-
} & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLSpanElement>>;
|
|
44
|
+
children?: React.ReactNode;
|
|
45
|
+
} & React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLSpanElement>>;
|
|
90
46
|
export { Badge, badgeVariants };
|
|
@@ -1,105 +1,32 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { cva } from 'class-variance-authority';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { cn } from '../../lib/utils.js';
|
|
5
5
|
|
|
6
|
-
const badgeVariants = cva("rounded-
|
|
6
|
+
const badgeVariants = cva("inline-flex items-center rounded-sm border border-transparent font-medium", {
|
|
7
7
|
variants: {
|
|
8
|
-
/**
|
|
9
|
-
* Controls the color scheme of the badge
|
|
10
|
-
* @default 'accent'
|
|
11
|
-
*/
|
|
12
8
|
color: {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/** Indicates successful or positive state */
|
|
20
|
-
success: "bg-success text-success-foreground ",
|
|
21
|
-
/** Indicates warning or cautionary state */
|
|
22
|
-
warning: "bg-warning text-warning-foreground",
|
|
23
|
-
/** Indicates error or critical state */
|
|
24
|
-
error: "bg-error text-error-foreground"
|
|
9
|
+
neutral: "bg-neutral-50 text-neutral-950",
|
|
10
|
+
accent: "bg-accent-100 text-neutral-950",
|
|
11
|
+
info: "bg-information-100 text-information-800",
|
|
12
|
+
success: "bg-success-100 text-success-800",
|
|
13
|
+
warning: "bg-background-300 text-accent-900",
|
|
14
|
+
error: "bg-error-100 text-error-800"
|
|
25
15
|
},
|
|
26
|
-
/**
|
|
27
|
-
* Controls the size of the badge
|
|
28
|
-
* @default 'md'
|
|
29
|
-
*/
|
|
30
16
|
size: {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
md: "h-3 w-3",
|
|
35
|
-
/** Large size - 16px */
|
|
36
|
-
lg: "h-4 w-4"
|
|
37
|
-
},
|
|
38
|
-
/**
|
|
39
|
-
* Controls the position of the badge relative to its container
|
|
40
|
-
* @default 'top-right'
|
|
41
|
-
*/
|
|
42
|
-
position: {
|
|
43
|
-
/** Places the badge in the top-right corner */
|
|
44
|
-
"top-right": "right-0 top-0",
|
|
45
|
-
/** Places the badge in the top-left corner */
|
|
46
|
-
"top-left": "left-0 top-0",
|
|
47
|
-
/** Places the badge in the bottom-right corner */
|
|
48
|
-
"bottom-right": "right-0 bottom-0",
|
|
49
|
-
/** Places the badge in the bottom-left corner */
|
|
50
|
-
"bottom-left": "left-0 bottom-0"
|
|
51
|
-
},
|
|
52
|
-
/**
|
|
53
|
-
* Controls whether the badge displays a number
|
|
54
|
-
* @default false
|
|
55
|
-
*/
|
|
56
|
-
numeric: {
|
|
57
|
-
true: "min-w-[16px] h-4 px-1 flex items-center justify-center text-[10px] font-medium",
|
|
58
|
-
false: ""
|
|
17
|
+
small: "px-2 py-0.5 text-xs",
|
|
18
|
+
medium: "px-2.5 py-0.5 text-sm",
|
|
19
|
+
big: "px-3 py-1 text-base"
|
|
59
20
|
}
|
|
60
21
|
},
|
|
61
22
|
defaultVariants: {
|
|
62
|
-
color: "
|
|
63
|
-
size: "
|
|
64
|
-
position: "top-right",
|
|
65
|
-
numeric: false
|
|
23
|
+
color: "neutral",
|
|
24
|
+
size: "medium"
|
|
66
25
|
}
|
|
67
26
|
});
|
|
68
27
|
const Badge = React.forwardRef(
|
|
69
|
-
({ className, color = "
|
|
70
|
-
|
|
71
|
-
sm: "h-2 w-2",
|
|
72
|
-
md: "h-3 w-3",
|
|
73
|
-
lg: "h-4 w-4"
|
|
74
|
-
}[size || "md"];
|
|
75
|
-
return /* @__PURE__ */ jsxs(
|
|
76
|
-
"span",
|
|
77
|
-
{
|
|
78
|
-
className: cn(
|
|
79
|
-
"absolute flex",
|
|
80
|
-
badgeVariants({ color, position, numeric: !!count }),
|
|
81
|
-
!count && sizeClasses,
|
|
82
|
-
className
|
|
83
|
-
),
|
|
84
|
-
ref,
|
|
85
|
-
...props,
|
|
86
|
-
children: [
|
|
87
|
-
ping && /* @__PURE__ */ jsx(
|
|
88
|
-
"span",
|
|
89
|
-
{
|
|
90
|
-
className: cn(badgeVariants({ color }), "absolute inline-flex h-full w-full animate-ping opacity-75")
|
|
91
|
-
}
|
|
92
|
-
),
|
|
93
|
-
/* @__PURE__ */ jsx(
|
|
94
|
-
"span",
|
|
95
|
-
{
|
|
96
|
-
className: cn(badgeVariants({ color }), "relative inline-flex h-full w-full items-center justify-center"),
|
|
97
|
-
children: count
|
|
98
|
-
}
|
|
99
|
-
)
|
|
100
|
-
]
|
|
101
|
-
}
|
|
102
|
-
);
|
|
28
|
+
({ className, color = "neutral", size = "medium", children, ...props }, ref) => {
|
|
29
|
+
return /* @__PURE__ */ jsx("span", { className: cn(badgeVariants({ color, size }), className), ref, ...props, children });
|
|
103
30
|
}
|
|
104
31
|
);
|
|
105
32
|
Badge.displayName = "Badge";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Badge.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import { cva
|
|
1
|
+
{"version":3,"file":"Badge.js","sources":["../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import { cva } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../../lib/utils'\n\nconst badgeVariants = cva('inline-flex items-center rounded-sm border border-transparent font-medium', {\n variants: {\n color: {\n neutral: 'bg-neutral-50 text-neutral-950',\n accent: 'bg-accent-100 text-neutral-950',\n info: 'bg-information-100 text-information-800',\n success: 'bg-success-100 text-success-800',\n warning: 'bg-background-300 text-accent-900',\n error: 'bg-error-100 text-error-800',\n },\n size: {\n small: 'px-2 py-0.5 text-xs',\n medium: 'px-2.5 py-0.5 text-sm',\n big: 'px-3 py-1 text-base',\n },\n },\n defaultVariants: {\n color: 'neutral',\n size: 'medium',\n },\n})\n\nexport type BadgeProps = {\n /**\n * The color of the badge.\n * @default 'neutral'\n */\n color?: 'neutral' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n\n /**\n * The size of the badge.\n * @default 'medium'\n */\n size?: 'small' | 'medium' | 'big'\n\n /**\n * The label to display inside the badge.\n */\n children?: React.ReactNode\n} & React.HTMLAttributes<HTMLElement>\n\n/**\n * An inline status label used to represent a state (e.g. \"Active\", \"Pending\").\n *\n * @example\n * ```tsx\n * <Badge color=\"success\" size=\"small\">Active</Badge>\n * ```\n */\nconst Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(\n ({ className, color = 'neutral', size = 'medium', children, ...props }, ref) => {\n return (\n <span className={cn(badgeVariants({ color, size }), className)} ref={ref} {...props}>\n {children}\n </span>\n )\n },\n)\n\nBadge.displayName = 'Badge'\n\nexport { Badge, badgeVariants }\n"],"names":[],"mappings":";;;;;AAKA,MAAM,aAAA,GAAgB,IAAI,2EAAA,EAA6E;AAAA,EACrG,QAAA,EAAU;AAAA,IACR,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,gCAAA;AAAA,MACT,MAAA,EAAQ,gCAAA;AAAA,MACR,IAAA,EAAM,yCAAA;AAAA,MACN,OAAA,EAAS,iCAAA;AAAA,MACT,OAAA,EAAS,mCAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO,qBAAA;AAAA,MACP,MAAA,EAAQ,uBAAA;AAAA,MACR,GAAA,EAAK;AAAA;AACP,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,KAAA,EAAO,SAAA;AAAA,IACP,IAAA,EAAM;AAAA;AAEV,CAAC;AA6BD,MAAM,QAAQ,KAAA,CAAM,UAAA;AAAA,EAClB,CAAC,EAAE,SAAA,EAAW,KAAA,GAAQ,SAAA,EAAW,IAAA,GAAO,QAAA,EAAU,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAC9E,IAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,cAAc,EAAE,KAAA,EAAO,IAAA,EAAM,GAAG,SAAS,CAAA,EAAG,GAAA,EAAW,GAAG,OAC3E,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AAEA,KAAA,CAAM,WAAA,GAAc,OAAA;;;;"}
|
|
@@ -138,6 +138,7 @@ function DataTable({
|
|
|
138
138
|
manualPagination: isBackendPagination,
|
|
139
139
|
onPaginationChange: isBackendPagination ? void 0 : tableOnPaginationChange
|
|
140
140
|
});
|
|
141
|
+
const isEmptyState = !isLoading && table.getRowModel().rows.length === 0;
|
|
141
142
|
return /* @__PURE__ */ jsxs("div", { className: cn("flex h-full min-h-0 w-full flex-1 flex-col gap-2 overflow-hidden", className), children: [
|
|
142
143
|
/* @__PURE__ */ jsx(
|
|
143
144
|
DataTableToolbar,
|
|
@@ -153,29 +154,36 @@ function DataTable({
|
|
|
153
154
|
}
|
|
154
155
|
),
|
|
155
156
|
/* @__PURE__ */ jsxs("div", { className: "flex min-h-0 flex-1 flex-col rounded-md border bg-white", children: [
|
|
156
|
-
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto overscroll-x-none overscroll-y-auto", children: /* @__PURE__ */ jsxs(
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
157
|
+
/* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-auto overscroll-x-none overscroll-y-auto", children: /* @__PURE__ */ jsxs(
|
|
158
|
+
Table,
|
|
159
|
+
{
|
|
160
|
+
className: cn("w-full", isEmptyState && "h-full"),
|
|
161
|
+
tableClassName: cn("min-w-max", tableClassName),
|
|
162
|
+
children: [
|
|
163
|
+
/* @__PURE__ */ jsx(TableHeader, { className: "sticky top-0 z-10 bg-neutral-50", children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx(TableRow, { children: headerGroup.headers.map((header) => /* @__PURE__ */ jsx(
|
|
164
|
+
TableHead,
|
|
165
|
+
{
|
|
166
|
+
style: { width: header.column.columnDef.size },
|
|
167
|
+
className: "h-auto p-0 text-neutral-900",
|
|
168
|
+
children: /* @__PURE__ */ jsx("div", { className: getDataTableCellClassName({ columnId: header.column.id, kind: "header" }), children: header.isPlaceholder ? null : flexRender(header.column.columnDef.header, header.getContext()) })
|
|
169
|
+
},
|
|
170
|
+
header.id
|
|
171
|
+
)) }, headerGroup.id)) }),
|
|
172
|
+
/* @__PURE__ */ jsx(
|
|
173
|
+
DataTableBody,
|
|
174
|
+
{
|
|
175
|
+
table,
|
|
176
|
+
isLoading,
|
|
177
|
+
pageSize,
|
|
178
|
+
getRowId,
|
|
179
|
+
rowSelection,
|
|
180
|
+
emptyState,
|
|
181
|
+
group: groupConfig
|
|
182
|
+
}
|
|
183
|
+
)
|
|
184
|
+
]
|
|
185
|
+
}
|
|
186
|
+
) }),
|
|
179
187
|
!!pagination && /* @__PURE__ */ jsx("div", { className: "border-t px-4 py-2", children: /* @__PURE__ */ jsx(
|
|
180
188
|
DataTablePagination,
|
|
181
189
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTable.js","sources":["../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["'use client'\n\nimport {\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getPaginationRowModel,\n useReactTable,\n VisibilityState,\n PaginationState,\n Updater,\n} from '@tanstack/react-table'\nimport * as React from 'react'\n\nimport { Table as TableComponent, TableHeader, TableHead, TableRow } from '../Table'\n\nimport { DataTableBody } from './components/DataTableBody'\nimport { getDataTableCellClassName } from './components/dataTableCellStyles'\nimport { DataTablePagination } from './components/DataTablePagination'\nimport { DataTableToolbar } from './components/DataTableToolbar'\nimport { useGroupExpansion } from './hooks/useGroupExpansion'\nimport { useSelectColumn } from './hooks/useSelectColumn'\nimport { useSelection } from './hooks/useSelection'\nimport { DataTableProps } from './types'\nimport { flattenLeaves } from './utils'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * A feature-rich data table component built on top of TanStack Table.\n * Provides sorting, filtering, pagination, and column visibility controls.\n */\nexport function DataTable<TData extends object>({\n columns: userColumns,\n data,\n getRowId = (row: TData) => (row as { id: string }).id,\n columnVisibility: columnVisibilityConfig,\n isLoading = false,\n pagination,\n grouping,\n primaryFilters,\n secondaryFilters,\n activePrimaryFiltersCount = 0,\n activeSecondaryFiltersCount = 0,\n selection,\n labels = {\n filters: 'Filters',\n moreFilters: 'More filters',\n },\n emptyState = {\n title: 'No data available',\n description: 'Try adjusting your filters or search criteria',\n },\n className,\n tableClassName,\n}: DataTableProps<TData>) {\n const [internalColumnVisibility, setInternalColumnVisibility] = React.useState<VisibilityState>({})\n const [pageIndex, setPageIndex] = React.useState(0)\n\n const columnVisibilityState = columnVisibilityConfig?.state ?? internalColumnVisibility\n const setColumnVisibilityState = columnVisibilityConfig?.onChange ?? setInternalColumnVisibility\n\n const { isGroupOpen, toggleGroup } = useGroupExpansion({ grouping, data, getRowId })\n\n const selectionData = React.useMemo(\n () => (grouping ? flattenLeaves(data, grouping.getSubRows) : data),\n [grouping, data],\n )\n\n const isBackendPagination = pagination !== undefined && 'onPageChange' in pagination\n\n const total = isBackendPagination ? pagination.total : data.length\n const pageSize = pagination?.pageSize ?? (isLoading ? 10 : data.length)\n const totalPages = Math.ceil(total / pageSize)\n\n const { selectedIds, handleRowSelect, handleSelectAll } = useSelection({\n data: selectionData,\n getRowId,\n selection,\n })\n\n const rowSelection = React.useMemo(\n () => Object.fromEntries(Array.from(selectedIds).map((id) => [id, true])),\n [selectedIds],\n )\n\n const selectColumn = useSelectColumn({\n selection,\n selectedIds,\n selectionData,\n getRowId,\n handleRowSelect,\n handleSelectAll,\n isBackendPagination,\n isLoading,\n })\n\n const tableColumns = React.useMemo(() => {\n if (!selectColumn) return userColumns\n return [selectColumn.column, ...userColumns]\n }, [userColumns, selectColumn])\n\n const toolbarSelectionProps = React.useMemo(() => {\n if (isBackendPagination && selection) {\n return {\n isSelectionStarted: selection.isSelectionStarted,\n onSelectionStart: selection.onSelectionStart,\n onSelectionCancel: selection.onSelectionCancel,\n selectionSummary: selection.labels?.selectionSummary,\n isSelectionDisabled: selection.isSelectionDisabled,\n labels: selection.labels,\n }\n }\n return undefined\n }, [isBackendPagination, selection])\n\n const currentPage = isBackendPagination ? pagination.currentPage : pageIndex + 1\n const handlePageChange = isBackendPagination ? pagination.onPageChange : (page: number) => setPageIndex(page - 1)\n\n const tablePaginationState = React.useMemo(() => {\n if (!pagination) {\n return undefined\n }\n return {\n pageIndex: isBackendPagination ? pagination.currentPage - 1 : pageIndex,\n pageSize,\n }\n }, [pagination, isBackendPagination, pageIndex, pageSize])\n\n const tableGetPaginationRowModel = React.useMemo(() => {\n return pagination && !isBackendPagination ? getPaginationRowModel() : undefined\n }, [pagination, isBackendPagination])\n\n const tableOnPaginationChange = React.useCallback(\n (updater: Updater<PaginationState>) => {\n if (typeof updater === 'function') {\n const newState = updater({ pageIndex, pageSize })\n setPageIndex(newState.pageIndex)\n }\n },\n [pageIndex, pageSize],\n )\n\n const groupConfig = React.useMemo(() => {\n if (!grouping) return undefined\n\n return {\n renderGroupRow: grouping.renderGroupRow,\n renderGroupSelector: selectColumn?.GroupSelectCell,\n isGroupOpen,\n toggleGroup,\n getRowId,\n }\n }, [grouping, selectColumn, isGroupOpen, toggleGroup, getRowId])\n\n const table = useReactTable({\n data,\n columns: tableColumns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: tableGetPaginationRowModel,\n getSubRows: grouping?.getSubRows,\n getExpandedRowModel: grouping ? getExpandedRowModel() : undefined,\n onColumnVisibilityChange: setColumnVisibilityState,\n enableRowSelection: !!selection,\n getRowId,\n state: {\n columnVisibility: columnVisibilityState,\n rowSelection,\n pagination: tablePaginationState,\n expanded: grouping ? true : undefined,\n },\n manualPagination: isBackendPagination,\n onPaginationChange: isBackendPagination ? undefined : tableOnPaginationChange,\n })\n\n return (\n <div className={cn('flex h-full min-h-0 w-full flex-1 flex-col gap-2 overflow-hidden', className)}>\n <DataTableToolbar\n table={table}\n columnVisibility={columnVisibilityConfig}\n primaryFilters={primaryFilters}\n secondaryFilters={secondaryFilters}\n activePrimaryFiltersCount={activePrimaryFiltersCount}\n activeSecondaryFiltersCount={activeSecondaryFiltersCount}\n labels={labels}\n selection={toolbarSelectionProps}\n />\n\n <div className=\"flex min-h-0 flex-1 flex-col rounded-md border bg-white\">\n <div className=\"min-h-0 flex-1 overflow-auto overscroll-x-none overscroll-y-auto\">\n <TableComponent
|
|
1
|
+
{"version":3,"file":"DataTable.js","sources":["../../../src/components/DataTable/DataTable.tsx"],"sourcesContent":["'use client'\n\nimport {\n flexRender,\n getCoreRowModel,\n getExpandedRowModel,\n getPaginationRowModel,\n useReactTable,\n VisibilityState,\n PaginationState,\n Updater,\n} from '@tanstack/react-table'\nimport * as React from 'react'\n\nimport { Table as TableComponent, TableHeader, TableHead, TableRow } from '../Table'\n\nimport { DataTableBody } from './components/DataTableBody'\nimport { getDataTableCellClassName } from './components/dataTableCellStyles'\nimport { DataTablePagination } from './components/DataTablePagination'\nimport { DataTableToolbar } from './components/DataTableToolbar'\nimport { useGroupExpansion } from './hooks/useGroupExpansion'\nimport { useSelectColumn } from './hooks/useSelectColumn'\nimport { useSelection } from './hooks/useSelection'\nimport { DataTableProps } from './types'\nimport { flattenLeaves } from './utils'\n\nimport { cn } from '@/lib/utils'\n\n/**\n * A feature-rich data table component built on top of TanStack Table.\n * Provides sorting, filtering, pagination, and column visibility controls.\n */\nexport function DataTable<TData extends object>({\n columns: userColumns,\n data,\n getRowId = (row: TData) => (row as { id: string }).id,\n columnVisibility: columnVisibilityConfig,\n isLoading = false,\n pagination,\n grouping,\n primaryFilters,\n secondaryFilters,\n activePrimaryFiltersCount = 0,\n activeSecondaryFiltersCount = 0,\n selection,\n labels = {\n filters: 'Filters',\n moreFilters: 'More filters',\n },\n emptyState = {\n title: 'No data available',\n description: 'Try adjusting your filters or search criteria',\n },\n className,\n tableClassName,\n}: DataTableProps<TData>) {\n const [internalColumnVisibility, setInternalColumnVisibility] = React.useState<VisibilityState>({})\n const [pageIndex, setPageIndex] = React.useState(0)\n\n const columnVisibilityState = columnVisibilityConfig?.state ?? internalColumnVisibility\n const setColumnVisibilityState = columnVisibilityConfig?.onChange ?? setInternalColumnVisibility\n\n const { isGroupOpen, toggleGroup } = useGroupExpansion({ grouping, data, getRowId })\n\n const selectionData = React.useMemo(\n () => (grouping ? flattenLeaves(data, grouping.getSubRows) : data),\n [grouping, data],\n )\n\n const isBackendPagination = pagination !== undefined && 'onPageChange' in pagination\n\n const total = isBackendPagination ? pagination.total : data.length\n const pageSize = pagination?.pageSize ?? (isLoading ? 10 : data.length)\n const totalPages = Math.ceil(total / pageSize)\n\n const { selectedIds, handleRowSelect, handleSelectAll } = useSelection({\n data: selectionData,\n getRowId,\n selection,\n })\n\n const rowSelection = React.useMemo(\n () => Object.fromEntries(Array.from(selectedIds).map((id) => [id, true])),\n [selectedIds],\n )\n\n const selectColumn = useSelectColumn({\n selection,\n selectedIds,\n selectionData,\n getRowId,\n handleRowSelect,\n handleSelectAll,\n isBackendPagination,\n isLoading,\n })\n\n const tableColumns = React.useMemo(() => {\n if (!selectColumn) return userColumns\n return [selectColumn.column, ...userColumns]\n }, [userColumns, selectColumn])\n\n const toolbarSelectionProps = React.useMemo(() => {\n if (isBackendPagination && selection) {\n return {\n isSelectionStarted: selection.isSelectionStarted,\n onSelectionStart: selection.onSelectionStart,\n onSelectionCancel: selection.onSelectionCancel,\n selectionSummary: selection.labels?.selectionSummary,\n isSelectionDisabled: selection.isSelectionDisabled,\n labels: selection.labels,\n }\n }\n return undefined\n }, [isBackendPagination, selection])\n\n const currentPage = isBackendPagination ? pagination.currentPage : pageIndex + 1\n const handlePageChange = isBackendPagination ? pagination.onPageChange : (page: number) => setPageIndex(page - 1)\n\n const tablePaginationState = React.useMemo(() => {\n if (!pagination) {\n return undefined\n }\n return {\n pageIndex: isBackendPagination ? pagination.currentPage - 1 : pageIndex,\n pageSize,\n }\n }, [pagination, isBackendPagination, pageIndex, pageSize])\n\n const tableGetPaginationRowModel = React.useMemo(() => {\n return pagination && !isBackendPagination ? getPaginationRowModel() : undefined\n }, [pagination, isBackendPagination])\n\n const tableOnPaginationChange = React.useCallback(\n (updater: Updater<PaginationState>) => {\n if (typeof updater === 'function') {\n const newState = updater({ pageIndex, pageSize })\n setPageIndex(newState.pageIndex)\n }\n },\n [pageIndex, pageSize],\n )\n\n const groupConfig = React.useMemo(() => {\n if (!grouping) return undefined\n\n return {\n renderGroupRow: grouping.renderGroupRow,\n renderGroupSelector: selectColumn?.GroupSelectCell,\n isGroupOpen,\n toggleGroup,\n getRowId,\n }\n }, [grouping, selectColumn, isGroupOpen, toggleGroup, getRowId])\n\n const table = useReactTable({\n data,\n columns: tableColumns,\n getCoreRowModel: getCoreRowModel(),\n getPaginationRowModel: tableGetPaginationRowModel,\n getSubRows: grouping?.getSubRows,\n getExpandedRowModel: grouping ? getExpandedRowModel() : undefined,\n onColumnVisibilityChange: setColumnVisibilityState,\n enableRowSelection: !!selection,\n getRowId,\n state: {\n columnVisibility: columnVisibilityState,\n rowSelection,\n pagination: tablePaginationState,\n expanded: grouping ? true : undefined,\n },\n manualPagination: isBackendPagination,\n onPaginationChange: isBackendPagination ? undefined : tableOnPaginationChange,\n })\n\n const isEmptyState = !isLoading && table.getRowModel().rows.length === 0\n\n return (\n <div className={cn('flex h-full min-h-0 w-full flex-1 flex-col gap-2 overflow-hidden', className)}>\n <DataTableToolbar\n table={table}\n columnVisibility={columnVisibilityConfig}\n primaryFilters={primaryFilters}\n secondaryFilters={secondaryFilters}\n activePrimaryFiltersCount={activePrimaryFiltersCount}\n activeSecondaryFiltersCount={activeSecondaryFiltersCount}\n labels={labels}\n selection={toolbarSelectionProps}\n />\n\n <div className=\"flex min-h-0 flex-1 flex-col rounded-md border bg-white\">\n <div className=\"min-h-0 flex-1 overflow-auto overscroll-x-none overscroll-y-auto\">\n <TableComponent\n className={cn('w-full', isEmptyState && 'h-full')}\n tableClassName={cn('min-w-max', tableClassName)}\n >\n <TableHeader className=\"sticky top-0 z-10 bg-neutral-50\">\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead\n key={header.id}\n style={{ width: header.column.columnDef.size }}\n className=\"h-auto p-0 text-neutral-900\"\n >\n <div className={getDataTableCellClassName({ columnId: header.column.id, kind: 'header' })}>\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </div>\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <DataTableBody\n table={table}\n isLoading={isLoading}\n pageSize={pageSize}\n getRowId={getRowId}\n rowSelection={rowSelection}\n emptyState={emptyState}\n group={groupConfig}\n />\n </TableComponent>\n </div>\n {!!pagination && (\n <div className=\"border-t px-4 py-2\">\n <DataTablePagination\n table={table}\n total={total}\n pageSize={pageSize}\n currentPage={currentPage}\n totalPages={totalPages}\n onPageChange={handlePageChange}\n isLoading={pagination.isLoading}\n labels={pagination.labels}\n />\n </div>\n )}\n </div>\n </div>\n )\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAgCO;AAAyC;AACrC;AACT;AACmD;AACjC;AACN;AACZ;AACA;AACA;AACA;AAC4B;AACE;AAC9B;AACS;AACE;AACI;AACf;AACa;AACJ;AACM;AACf;AACA;AAEF;AACE;AACA;AAEA;AACA;AAEA;AAEA;AAA4B;AACmC;AAC9C;AAGjB;AAEA;AACA;AACA;AAEA;AAAuE;AAC/D;AACN;AACA;AAGF;AAA2B;AAC+C;AAC5D;AAGd;AAAqC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGF;AACE;AACA;AAA2C;AAG7C;AACE;AACE;AAAO;AACyB;AACF;AACC;AACO;AACL;AACb;AACpB;AAEF;AAAO;AAGT;AACA;AAEA;AACE;AACE;AAAO;AAET;AAAO;AACyD;AAC9D;AACF;AAGF;AACE;AAAsE;AAGxE;AAAsC;AAElC;AACE;AACA;AAA+B;AACjC;AACF;AACoB;AAGtB;AACE;AAEA;AAAO;AACoB;AACU;AACnC;AACA;AACA;AACF;AAGF;AAA4B;AAC1B;AACS;AACwB;AACV;AACD;AACkC;AAC9B;AACJ;AACtB;AACO;AACa;AAClB;AACY;AACgB;AAC9B;AACkB;AACoC;AAGxD;AAEA;AAEI;AAAA;AAAC;AAAA;AACC;AACkB;AAClB;AACA;AACA;AACA;AACA;AACW;AAAA;AACb;AAGE;AACE;AAAC;AAAA;AACiD;AACF;AAE9C;AAIQ;AAAC;AAAA;AAE8C;AACnC;AAMV;AAAA;AARY;AAatB;AACA;AAAC;AAAA;AACC;AACA;AACA;AACA;AACA;AACA;AACO;AAAA;AACT;AAAA;AAAA;AAEJ;AAGI;AAAC;AAAA;AACC;AACA;AACA;AACA;AACA;AACc;AACQ;AACH;AAAA;AAEvB;AAEJ;AAGN;;"}
|
|
@@ -60,11 +60,11 @@ function DataTableBody({
|
|
|
60
60
|
const rows = table.getRowModel().rows;
|
|
61
61
|
if (!rows.length) {
|
|
62
62
|
const visibleColumns = table.getAllColumns().filter((col) => col.getIsVisible());
|
|
63
|
-
return /* @__PURE__ */ jsx(TableBody, { children: /* @__PURE__ */ jsx(TableRow, { className: "h-full", children: /* @__PURE__ */ jsx(TableCell, { colSpan: visibleColumns.length, className: "h-full p-0", children: /* @__PURE__ */ jsxs("div", { className: "
|
|
63
|
+
return /* @__PURE__ */ jsx(TableBody, { children: /* @__PURE__ */ jsx(TableRow, { className: "h-full", children: /* @__PURE__ */ jsx(TableCell, { colSpan: visibleColumns.length, className: "h-full p-0", children: /* @__PURE__ */ jsxs("div", { className: "flex h-full w-full flex-col items-center justify-center", children: [
|
|
64
64
|
emptyState.imageRoute && /* @__PURE__ */ jsx(
|
|
65
65
|
"img",
|
|
66
66
|
{
|
|
67
|
-
className: cn("mb-6 w-
|
|
67
|
+
className: cn("mb-6 w-50 md:w-75", emptyState.imageClassName),
|
|
68
68
|
src: emptyState.imageRoute,
|
|
69
69
|
alt: emptyState.imageAlt ?? "No data available"
|
|
70
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableBody.js","sources":["../../../../src/components/DataTable/components/DataTableBody.tsx"],"sourcesContent":["import { flexRender, Row, Table } from '@tanstack/react-table'\n\nimport { Skeleton } from '../../Skeleton'\nimport { TableBody, TableCell, TableRow } from '../../Table'\nimport { Typography } from '../../Typography'\nimport { EmptyStateConfig, RowIdentifierFn } from '../types'\n\nimport { DataTableCell } from './DataTableCell'\nimport { ACTIONS_COLUMN_ID, getSkeletonClassName, SELECT_COLUMN_ID } from './dataTableCellStyles'\nimport { DataTableGroupRow } from './DataTableGroupRow'\n\nimport { cn } from '@/lib/utils'\n\ntype GroupRenderConfig<TData> = {\n readonly renderGroupRow?: (row: Row<TData>) => React.ReactNode\n readonly renderGroupSelector?: React.ComponentType<{ row: Row<TData> }>\n readonly isGroupOpen: (groupId: string) => boolean\n readonly toggleGroup: (groupId: string) => void\n readonly getRowId: RowIdentifierFn<TData>\n}\n\ntype DataTableBodyProps<TData> = {\n readonly table: Table<TData>\n readonly isLoading?: boolean\n readonly pageSize: number\n readonly getRowId: RowIdentifierFn<TData>\n readonly rowSelection: Record<string, boolean>\n readonly emptyState: EmptyStateConfig\n readonly group?: GroupRenderConfig<TData>\n}\n\ntype DataTableRowProps<TData> = {\n readonly row: Row<TData>\n readonly isSelected: boolean\n readonly isCollapsible?: boolean\n readonly isOpen?: boolean\n}\n\nfunction DataTableRow<TData>({\n row,\n isSelected,\n isCollapsible = false,\n isOpen = true,\n}: DataTableRowProps<TData>) {\n return (\n <TableRow\n data-selected={isSelected}\n className={cn(isCollapsible && 'transition-colors', isCollapsible && !isOpen && 'border-b-0')}\n >\n {row.getVisibleCells().map((cell) => {\n const content = cell.column.columnDef.cell && flexRender(cell.column.columnDef.cell, cell.getContext())\n\n return (\n <DataTableCell\n key={cell.id}\n columnId={cell.column.id}\n isCollapsible={isCollapsible}\n isOpen={isOpen}\n style={{ width: cell.column.columnDef.size }}\n >\n {content}\n </DataTableCell>\n )\n })}\n </TableRow>\n )\n}\n\nexport function DataTableBody<TData>({\n table,\n isLoading,\n pageSize,\n getRowId,\n rowSelection,\n emptyState,\n group,\n}: DataTableBodyProps<TData>) {\n if (isLoading) {\n return (\n <TableBody>\n {Array.from({ length: pageSize }).map((_unused, index) => (\n <TableRow key={`skeleton-row-${String(index)}`}>\n {table\n .getAllColumns()\n .filter((column) => column.getIsVisible())\n .map((column) => (\n <DataTableCell\n key={`skeleton-cell-${String(index)}-${column.id}`}\n columnId={column.id}\n style={{ width: column.columnDef.size }}\n className={\n column.id !== SELECT_COLUMN_ID && column.id !== ACTIONS_COLUMN_ID ? 'w-full' : undefined\n }\n >\n <Skeleton className={getSkeletonClassName(column.id)} />\n </DataTableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n )\n }\n\n const rows = table.getRowModel().rows\n\n if (!rows.length) {\n const visibleColumns = table.getAllColumns().filter((col) => col.getIsVisible())\n\n return (\n <TableBody>\n <TableRow className=\"h-full\">\n <TableCell colSpan={visibleColumns.length} className=\"h-full p-0\">\n <div className=\"
|
|
1
|
+
{"version":3,"file":"DataTableBody.js","sources":["../../../../src/components/DataTable/components/DataTableBody.tsx"],"sourcesContent":["import { flexRender, Row, Table } from '@tanstack/react-table'\n\nimport { Skeleton } from '../../Skeleton'\nimport { TableBody, TableCell, TableRow } from '../../Table'\nimport { Typography } from '../../Typography'\nimport { EmptyStateConfig, RowIdentifierFn } from '../types'\n\nimport { DataTableCell } from './DataTableCell'\nimport { ACTIONS_COLUMN_ID, getSkeletonClassName, SELECT_COLUMN_ID } from './dataTableCellStyles'\nimport { DataTableGroupRow } from './DataTableGroupRow'\n\nimport { cn } from '@/lib/utils'\n\ntype GroupRenderConfig<TData> = {\n readonly renderGroupRow?: (row: Row<TData>) => React.ReactNode\n readonly renderGroupSelector?: React.ComponentType<{ row: Row<TData> }>\n readonly isGroupOpen: (groupId: string) => boolean\n readonly toggleGroup: (groupId: string) => void\n readonly getRowId: RowIdentifierFn<TData>\n}\n\ntype DataTableBodyProps<TData> = {\n readonly table: Table<TData>\n readonly isLoading?: boolean\n readonly pageSize: number\n readonly getRowId: RowIdentifierFn<TData>\n readonly rowSelection: Record<string, boolean>\n readonly emptyState: EmptyStateConfig\n readonly group?: GroupRenderConfig<TData>\n}\n\ntype DataTableRowProps<TData> = {\n readonly row: Row<TData>\n readonly isSelected: boolean\n readonly isCollapsible?: boolean\n readonly isOpen?: boolean\n}\n\nfunction DataTableRow<TData>({\n row,\n isSelected,\n isCollapsible = false,\n isOpen = true,\n}: DataTableRowProps<TData>) {\n return (\n <TableRow\n data-selected={isSelected}\n className={cn(isCollapsible && 'transition-colors', isCollapsible && !isOpen && 'border-b-0')}\n >\n {row.getVisibleCells().map((cell) => {\n const content = cell.column.columnDef.cell && flexRender(cell.column.columnDef.cell, cell.getContext())\n\n return (\n <DataTableCell\n key={cell.id}\n columnId={cell.column.id}\n isCollapsible={isCollapsible}\n isOpen={isOpen}\n style={{ width: cell.column.columnDef.size }}\n >\n {content}\n </DataTableCell>\n )\n })}\n </TableRow>\n )\n}\n\nexport function DataTableBody<TData>({\n table,\n isLoading,\n pageSize,\n getRowId,\n rowSelection,\n emptyState,\n group,\n}: DataTableBodyProps<TData>) {\n if (isLoading) {\n return (\n <TableBody>\n {Array.from({ length: pageSize }).map((_unused, index) => (\n <TableRow key={`skeleton-row-${String(index)}`}>\n {table\n .getAllColumns()\n .filter((column) => column.getIsVisible())\n .map((column) => (\n <DataTableCell\n key={`skeleton-cell-${String(index)}-${column.id}`}\n columnId={column.id}\n style={{ width: column.columnDef.size }}\n className={\n column.id !== SELECT_COLUMN_ID && column.id !== ACTIONS_COLUMN_ID ? 'w-full' : undefined\n }\n >\n <Skeleton className={getSkeletonClassName(column.id)} />\n </DataTableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n )\n }\n\n const rows = table.getRowModel().rows\n\n if (!rows.length) {\n const visibleColumns = table.getAllColumns().filter((col) => col.getIsVisible())\n\n return (\n <TableBody>\n <TableRow className=\"h-full\">\n <TableCell colSpan={visibleColumns.length} className=\"h-full p-0\">\n <div className=\"flex h-full w-full flex-col items-center justify-center\">\n {emptyState.imageRoute && (\n <img\n className={cn('mb-6 w-50 md:w-75', emptyState.imageClassName)}\n src={emptyState.imageRoute}\n alt={emptyState.imageAlt ?? 'No data available'}\n />\n )}\n <Typography variant=\"title-md\" weight=\"semibold\" className=\"text-center\">\n {emptyState.title}\n </Typography>\n <Typography variant=\"title-sm\" className=\"text-center opacity-80\">\n {emptyState.description}\n </Typography>\n </div>\n </TableCell>\n </TableRow>\n </TableBody>\n )\n }\n\n const visibleColumnCount = table.getVisibleLeafColumns().length\n\n return (\n <TableBody>\n {rows.map((row) => {\n const rowId = getRowId(row.original)\n\n if (group && row.getCanExpand()) {\n const content = group.renderGroupRow?.(row) ?? `${String(row.getLeafRows().length)} items`\n return (\n <DataTableGroupRow\n key={rowId}\n colSpan={visibleColumnCount}\n selector={group.renderGroupSelector ? <group.renderGroupSelector row={row} /> : undefined}\n content={content}\n isOpen={group.isGroupOpen(rowId)}\n onToggle={() => group.toggleGroup(rowId)}\n />\n )\n }\n\n const isSelected = rowSelection[rowId] ?? false\n const parentRow = group ? row.getParentRow() : undefined\n return (\n <DataTableRow\n key={rowId}\n row={row}\n isSelected={isSelected}\n isCollapsible={!!group}\n isOpen={parentRow ? (group?.isGroupOpen(getRowId(parentRow.original)) ?? true) : true}\n />\n )\n })}\n </TableBody>\n )\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,9 @@ import { FunnelSimple } from '@phosphor-icons/react/dist/ssr/FunnelSimple';
|
|
|
3
3
|
import { SelectionAll } from '@phosphor-icons/react/dist/ssr/SelectionAll';
|
|
4
4
|
import { TextColumns } from '@phosphor-icons/react/dist/ssr/TextColumns';
|
|
5
5
|
import { X } from '@phosphor-icons/react/dist/ssr/X';
|
|
6
|
-
import { Badge } from '../../Badge/Badge.js';
|
|
7
6
|
import { Button } from '../../Button/Button.js';
|
|
8
7
|
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuCheckboxItem, DropdownMenuSeparator } from '../../DropdownMenu/DropdownMenu.js';
|
|
8
|
+
import { NotificationBadge } from '../../NotificationBadge/NotificationBadge.js';
|
|
9
9
|
import { PopoverRoot, PopoverTrigger, PopoverContent } from '../../Popover/Popover.js';
|
|
10
10
|
import { Typography } from '../../Typography/Typography.js';
|
|
11
11
|
import { TooltipProvider, TooltipRoot, TooltipTrigger, TooltipContent } from '../../Tooltip/Tooltip.js';
|
|
@@ -82,7 +82,7 @@ function DataTableToolbar({
|
|
|
82
82
|
showFiltersButton && /* @__PURE__ */ jsxs(PopoverRoot, { children: [
|
|
83
83
|
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(Button, { variant: "text", size: "sm", StartIcon: FunnelSimple, className: "relative whitespace-nowrap", children: [
|
|
84
84
|
showBadge && /* @__PURE__ */ jsx(
|
|
85
|
-
|
|
85
|
+
NotificationBadge,
|
|
86
86
|
{
|
|
87
87
|
count: activeFiltersCount,
|
|
88
88
|
color: "primary",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableToolbar.js","sources":["../../../../src/components/DataTable/components/DataTableToolbar.tsx"],"sourcesContent":["import { FunnelSimple } from '@phosphor-icons/react/dist/ssr/FunnelSimple'\nimport { SelectionAll } from '@phosphor-icons/react/dist/ssr/SelectionAll'\nimport { TextColumns } from '@phosphor-icons/react/dist/ssr/TextColumns'\nimport { X } from '@phosphor-icons/react/dist/ssr/X'\nimport { Table } from '@tanstack/react-table'\nimport * as React from 'react'\n\nimport { Badge } from '../../Badge'\nimport { Button } from '../../Button'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../DropdownMenu'\nimport { PopoverContent, PopoverRoot, PopoverTrigger } from '../../Popover'\nimport { Typography } from '../../Typography'\n\nimport { ColumnVisibilityConfig } from '@/components/DataTable/types'\nimport { TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from '@/components/Tooltip'\nimport { useIsMobile } from '@/lib/useMobile'\nimport { cn } from '@/lib/utils'\n\ntype DataTableToolbarProps<TData> = {\n readonly table: Table<TData>\n readonly columnVisibility?: ColumnVisibilityConfig\n readonly primaryFilters?: React.ReactNode\n readonly secondaryFilters?: React.ReactNode\n readonly activePrimaryFiltersCount?: number\n readonly activeSecondaryFiltersCount?: number\n readonly labels?: {\n filters?: string\n moreFilters?: string\n }\n readonly selection?: {\n isSelectionStarted?: boolean\n onSelectionStart?: () => void\n onSelectionCancel?: () => void\n selectionSummary?: string | null\n isSelectionDisabled?: boolean\n labels?: {\n startSelection?: string\n cancelSelection?: string\n selectionSummary?: string\n selectionDisabledTooltip?: string\n }\n }\n}\n\nconst defaultLabels = {\n filters: 'Filters',\n moreFilters: 'More filters',\n}\n\nconst defaultColumnVisibilityLabels = {\n button: 'Hide columns',\n selectAll: 'Select all',\n}\n\nconst defaultSelectionLabels = {\n startSelection: 'Start selection',\n cancelSelection: 'Cancel selection',\n}\n\nexport function DataTableToolbar<TData>({\n table,\n columnVisibility,\n primaryFilters,\n secondaryFilters,\n activePrimaryFiltersCount = 0,\n activeSecondaryFiltersCount = 0,\n selection,\n labels: labelsProp,\n}: DataTableToolbarProps<TData>) {\n const isMobile = useIsMobile()\n\n const labels = {\n ...defaultLabels,\n ...labelsProp,\n }\n\n const columnVisibilityLabels = {\n ...defaultColumnVisibilityLabels,\n ...columnVisibility?.labels,\n }\n\n const selectionLabels = {\n ...defaultSelectionLabels,\n ...selection?.labels,\n }\n\n const showColumnVisibilityControls = columnVisibility?.showControls ?? true\n\n const hasPrimaryFilters = !!primaryFilters\n const hasSecondaryFilters = !!secondaryFilters\n\n const showFiltersButton = isMobile ? hasPrimaryFilters || hasSecondaryFilters : hasSecondaryFilters\n\n const totalActiveFiltersCount = activePrimaryFiltersCount + activeSecondaryFiltersCount\n const activeFiltersCount = isMobile ? totalActiveFiltersCount : activeSecondaryFiltersCount\n const showBadge = activeFiltersCount > 0\n\n const filtersButtonLabel = !hasPrimaryFilters || isMobile ? labels.filters : labels.moreFilters\n\n if (!showColumnVisibilityControls && !primaryFilters && !secondaryFilters && !selection) {\n return null\n }\n\n return (\n <div className=\"flex shrink-0 flex-col gap-2 p-1\">\n {!isMobile && primaryFilters && <div className=\"flex flex-wrap items-center gap-2\">{primaryFilters}</div>}\n\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {selection && (\n <div className=\"flex items-center gap-2\">\n {selection.isSelectionStarted ? (\n <>\n <Button variant=\"text\" size=\"sm\" StartIcon={X} onClick={selection.onSelectionCancel}>\n {selectionLabels.cancelSelection}\n </Button>\n {selection.selectionSummary && !isMobile && (\n <Typography variant=\"body-sm\" className=\"text-neutral-600\">\n {selection.selectionSummary}\n </Typography>\n )}\n </>\n ) : (\n <TooltipProvider>\n <TooltipRoot delayDuration={200}>\n <TooltipTrigger asChild>\n <div>\n <Button\n variant=\"text\"\n size=\"sm\"\n StartIcon={SelectionAll}\n onClick={selection.onSelectionStart}\n disabled={selection.isSelectionDisabled}\n >\n {selectionLabels.startSelection}\n </Button>\n </div>\n </TooltipTrigger>\n {selection.labels?.selectionDisabledTooltip && selection.isSelectionDisabled && (\n <TooltipContent>{selection.labels.selectionDisabledTooltip}</TooltipContent>\n )}\n </TooltipRoot>\n </TooltipProvider>\n )}\n </div>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {showFiltersButton && (\n <PopoverRoot>\n <PopoverTrigger asChild>\n <Button variant=\"text\" size=\"sm\" StartIcon={FunnelSimple} className=\"relative whitespace-nowrap\">\n {showBadge && (\n <Badge\n count={activeFiltersCount}\n color=\"primary\"\n ping={false}\n className=\"absolute -top-1 -right-1\"\n />\n )}\n {filtersButtonLabel}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n align=\"center\"\n className={cn('w-fit p-4', isMobile && 'max-h-[80vh] w-[95vw] overflow-y-auto')}\n >\n <div className=\"flex flex-col gap-4\">\n {isMobile && primaryFilters}\n {secondaryFilters}\n </div>\n </PopoverContent>\n </PopoverRoot>\n )}\n {showColumnVisibilityControls && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"text\" size=\"sm\" className={cn('whitespace-nowrap')} StartIcon={TextColumns}>\n {columnVisibilityLabels.button}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuCheckboxItem\n key={'all-columns'}\n className=\"capitalize\"\n checked={table\n .getAllColumns()\n .filter((column) => column.getCanHide())\n .every((column) => column.getIsVisible())}\n onSelect={(event) => event.preventDefault()}\n onCheckedChange={(value) =>\n table\n .getAllColumns()\n .filter((column) => column.getCanHide())\n .forEach((column) => column.toggleVisibility(!!value))\n }\n >\n {columnVisibilityLabels.selectAll}\n </DropdownMenuCheckboxItem>\n <DropdownMenuSeparator className=\"bg-neutral-100\" />\n {table\n .getAllColumns()\n .filter((column) => column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onSelect={(event) => event.preventDefault()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.columnDef.header?.toString()}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n </div>\n )\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAkDA,MAAM,aAAA,GAAgB;AAAA,EACpB,OAAA,EAAS,SAAA;AAAA,EACT,WAAA,EAAa;AACf,CAAA;AAEA,MAAM,6BAAA,GAAgC;AAAA,EACpC,MAAA,EAAQ,cAAA;AAAA,EACR,SAAA,EAAW;AACb,CAAA;AAEA,MAAM,sBAAA,GAAyB;AAAA,EAC7B,cAAA,EAAgB,iBAAA;AAAA,EAChB,eAAA,EAAiB;AACnB,CAAA;AAEO,SAAS,gBAAA,CAAwB;AAAA,EACtC,KAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,yBAAA,GAA4B,CAAA;AAAA,EAC5B,2BAAA,GAA8B,CAAA;AAAA,EAC9B,SAAA;AAAA,EACA,MAAA,EAAQ;AACV,CAAA,EAAiC;AAC/B,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,aAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,sBAAA,GAAyB;AAAA,IAC7B,GAAG,6BAAA;AAAA,IACH,GAAG,gBAAA,EAAkB;AAAA,GACvB;AAEA,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,GAAG,sBAAA;AAAA,IACH,GAAG,SAAA,EAAW;AAAA,GAChB;AAEA,EAAA,MAAM,4BAAA,GAA+B,kBAAkB,YAAA,IAAgB,IAAA;AAEvE,EAAA,MAAM,iBAAA,GAAoB,CAAC,CAAC,cAAA;AAC5B,EAAA,MAAM,mBAAA,GAAsB,CAAC,CAAC,gBAAA;AAE9B,EAAA,MAAM,iBAAA,GAAoB,QAAA,GAAW,iBAAA,IAAqB,mBAAA,GAAsB,mBAAA;AAEhF,EAAA,MAAM,0BAA0B,yBAAA,GAA4B,2BAAA;AAC5D,EAAA,MAAM,kBAAA,GAAqB,WAAW,uBAAA,GAA0B,2BAAA;AAChE,EAAA,MAAM,YAAY,kBAAA,GAAqB,CAAA;AAEvC,EAAA,MAAM,qBAAqB,CAAC,iBAAA,IAAqB,QAAA,GAAW,MAAA,CAAO,UAAU,MAAA,CAAO,WAAA;AAEpF,EAAA,IAAI,CAAC,4BAAA,IAAgC,CAAC,kBAAkB,CAAC,gBAAA,IAAoB,CAAC,SAAA,EAAW;AACvF,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACZ,QAAA,EAAA;AAAA,IAAA,CAAC,YAAY,cAAA,oBAAkB,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAqC,QAAA,EAAA,cAAA,EAAe,CAAA;AAAA,oBAEnG,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA,SAAA,oBACC,GAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA,SAAA,CAAU,kBAAA,mBACT,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,MAAA,EAAO,IAAA,EAAK,IAAA,EAAK,SAAA,EAAW,CAAA,EAAG,OAAA,EAAS,SAAA,CAAU,iBAAA,EAC/D,QAAA,EAAA,eAAA,CAAgB,eAAA,EACnB,CAAA;AAAA,QACC,SAAA,CAAU,gBAAA,IAAoB,CAAC,QAAA,oBAC9B,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,kBAAA,EACrC,QAAA,EAAA,SAAA,CAAU,gBAAA,EACb;AAAA,OAAA,EAEJ,oBAEA,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,WAAA,EAAA,EAAY,eAAe,GAAA,EAC1B,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,SAAA,EAAW,YAAA;AAAA,YACX,SAAS,SAAA,CAAU,gBAAA;AAAA,YACnB,UAAU,SAAA,CAAU,mBAAA;AAAA,YAEnB,QAAA,EAAA,eAAA,CAAgB;AAAA;AAAA,WAErB,CAAA,EACF,CAAA;AAAA,QACC,SAAA,CAAU,QAAQ,wBAAA,IAA4B,SAAA,CAAU,uCACvD,GAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,SAAA,CAAU,MAAA,CAAO,wBAAA,EAAyB;AAAA,OAAA,EAE/D,CAAA,EACF,GAEJ,CAAA,EAEJ,CAAA;AAAA,sBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,QAAA,iBAAA,yBACE,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,MAAA,EAAO,IAAA,EAAK,IAAA,EAAK,SAAA,EAAW,YAAA,EAAc,SAAA,EAAU,4BAAA,EACjE,QAAA,EAAA;AAAA,YAAA,SAAA,oBACC,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,kBAAA;AAAA,gBACP,KAAA,EAAM,SAAA;AAAA,gBACN,IAAA,EAAM,KAAA;AAAA,gBACN,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,YAED;AAAA,WAAA,EACH,CAAA,EACF,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,cAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,QAAA;AAAA,cACN,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,QAAA,IAAY,uCAAuC,CAAA;AAAA,cAE9E,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,QAAA,IAAY,cAAA;AAAA,gBACZ;AAAA,eAAA,EACH;AAAA;AAAA;AACF,SAAA,EACF,CAAA;AAAA,QAED,4BAAA,yBACE,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,uBAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAQ,MAAA,EAAO,IAAA,EAAK,IAAA,EAAK,SAAA,EAAW,GAAG,mBAAmB,CAAA,EAAG,WAAW,WAAA,EAC7E,QAAA,EAAA,sBAAA,CAAuB,QAC1B,CAAA,EACF,CAAA;AAAA,+BACC,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,wBAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,YAAA;AAAA,gBACV,SAAS,KAAA,CACN,aAAA,EAAc,CACd,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,UAAA,EAAY,EACtC,KAAA,CAAM,CAAC,MAAA,KAAW,MAAA,CAAO,cAAc,CAAA;AAAA,gBAC1C,QAAA,EAAU,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,gBAC1C,eAAA,EAAiB,CAAC,KAAA,KAChB,KAAA,CACG,eAAc,CACd,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,YAAY,CAAA,CACtC,QAAQ,CAAC,MAAA,KAAW,OAAO,gBAAA,CAAiB,CAAC,CAAC,KAAK,CAAC,CAAA;AAAA,gBAGxD,QAAA,EAAA,sBAAA,CAAuB;AAAA,eAAA;AAAA,cAdnB;AAAA,aAeP;AAAA,4BACA,GAAA,CAAC,qBAAA,EAAA,EAAsB,SAAA,EAAU,gBAAA,EAAiB,CAAA;AAAA,YACjD,KAAA,CACE,aAAA,EAAc,CACd,MAAA,CAAO,CAAC,MAAA,KAAW,MAAA,CAAO,UAAA,EAAY,CAAA,CACtC,GAAA,CAAI,CAAC,MAAA,KAAW;AACf,cAAA,uBACE,GAAA;AAAA,gBAAC,wBAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAU,YAAA;AAAA,kBACV,OAAA,EAAS,OAAO,YAAA,EAAa;AAAA,kBAC7B,QAAA,EAAU,CAAC,KAAA,KAAU,KAAA,CAAM,cAAA,EAAe;AAAA,kBAC1C,iBAAiB,CAAC,KAAA,KAAU,OAAO,gBAAA,CAAiB,CAAC,CAAC,KAAK,CAAA;AAAA,kBAE1D,QAAA,EAAA,MAAA,CAAO,SAAA,CAAU,MAAA,EAAQ,QAAA;AAAS,iBAAA;AAAA,gBAN9B,MAAA,CAAO;AAAA,eAOd;AAAA,YAEJ,CAAC;AAAA,WAAA,EACL;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"DataTableToolbar.js","sources":["../../../../src/components/DataTable/components/DataTableToolbar.tsx"],"sourcesContent":["import { FunnelSimple } from '@phosphor-icons/react/dist/ssr/FunnelSimple'\nimport { SelectionAll } from '@phosphor-icons/react/dist/ssr/SelectionAll'\nimport { TextColumns } from '@phosphor-icons/react/dist/ssr/TextColumns'\nimport { X } from '@phosphor-icons/react/dist/ssr/X'\nimport { Table } from '@tanstack/react-table'\nimport * as React from 'react'\n\nimport { Button } from '../../Button'\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '../../DropdownMenu'\nimport { NotificationBadge } from '../../NotificationBadge'\nimport { PopoverContent, PopoverRoot, PopoverTrigger } from '../../Popover'\nimport { Typography } from '../../Typography'\n\nimport { ColumnVisibilityConfig } from '@/components/DataTable/types'\nimport { TooltipContent, TooltipProvider, TooltipRoot, TooltipTrigger } from '@/components/Tooltip'\nimport { useIsMobile } from '@/lib/useMobile'\nimport { cn } from '@/lib/utils'\n\ntype DataTableToolbarProps<TData> = {\n readonly table: Table<TData>\n readonly columnVisibility?: ColumnVisibilityConfig\n readonly primaryFilters?: React.ReactNode\n readonly secondaryFilters?: React.ReactNode\n readonly activePrimaryFiltersCount?: number\n readonly activeSecondaryFiltersCount?: number\n readonly labels?: {\n filters?: string\n moreFilters?: string\n }\n readonly selection?: {\n isSelectionStarted?: boolean\n onSelectionStart?: () => void\n onSelectionCancel?: () => void\n selectionSummary?: string | null\n isSelectionDisabled?: boolean\n labels?: {\n startSelection?: string\n cancelSelection?: string\n selectionSummary?: string\n selectionDisabledTooltip?: string\n }\n }\n}\n\nconst defaultLabels = {\n filters: 'Filters',\n moreFilters: 'More filters',\n}\n\nconst defaultColumnVisibilityLabels = {\n button: 'Hide columns',\n selectAll: 'Select all',\n}\n\nconst defaultSelectionLabels = {\n startSelection: 'Start selection',\n cancelSelection: 'Cancel selection',\n}\n\nexport function DataTableToolbar<TData>({\n table,\n columnVisibility,\n primaryFilters,\n secondaryFilters,\n activePrimaryFiltersCount = 0,\n activeSecondaryFiltersCount = 0,\n selection,\n labels: labelsProp,\n}: DataTableToolbarProps<TData>) {\n const isMobile = useIsMobile()\n\n const labels = {\n ...defaultLabels,\n ...labelsProp,\n }\n\n const columnVisibilityLabels = {\n ...defaultColumnVisibilityLabels,\n ...columnVisibility?.labels,\n }\n\n const selectionLabels = {\n ...defaultSelectionLabels,\n ...selection?.labels,\n }\n\n const showColumnVisibilityControls = columnVisibility?.showControls ?? true\n\n const hasPrimaryFilters = !!primaryFilters\n const hasSecondaryFilters = !!secondaryFilters\n\n const showFiltersButton = isMobile ? hasPrimaryFilters || hasSecondaryFilters : hasSecondaryFilters\n\n const totalActiveFiltersCount = activePrimaryFiltersCount + activeSecondaryFiltersCount\n const activeFiltersCount = isMobile ? totalActiveFiltersCount : activeSecondaryFiltersCount\n const showBadge = activeFiltersCount > 0\n\n const filtersButtonLabel = !hasPrimaryFilters || isMobile ? labels.filters : labels.moreFilters\n\n if (!showColumnVisibilityControls && !primaryFilters && !secondaryFilters && !selection) {\n return null\n }\n\n return (\n <div className=\"flex shrink-0 flex-col gap-2 p-1\">\n {!isMobile && primaryFilters && <div className=\"flex flex-wrap items-center gap-2\">{primaryFilters}</div>}\n\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n {selection && (\n <div className=\"flex items-center gap-2\">\n {selection.isSelectionStarted ? (\n <>\n <Button variant=\"text\" size=\"sm\" StartIcon={X} onClick={selection.onSelectionCancel}>\n {selectionLabels.cancelSelection}\n </Button>\n {selection.selectionSummary && !isMobile && (\n <Typography variant=\"body-sm\" className=\"text-neutral-600\">\n {selection.selectionSummary}\n </Typography>\n )}\n </>\n ) : (\n <TooltipProvider>\n <TooltipRoot delayDuration={200}>\n <TooltipTrigger asChild>\n <div>\n <Button\n variant=\"text\"\n size=\"sm\"\n StartIcon={SelectionAll}\n onClick={selection.onSelectionStart}\n disabled={selection.isSelectionDisabled}\n >\n {selectionLabels.startSelection}\n </Button>\n </div>\n </TooltipTrigger>\n {selection.labels?.selectionDisabledTooltip && selection.isSelectionDisabled && (\n <TooltipContent>{selection.labels.selectionDisabledTooltip}</TooltipContent>\n )}\n </TooltipRoot>\n </TooltipProvider>\n )}\n </div>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {showFiltersButton && (\n <PopoverRoot>\n <PopoverTrigger asChild>\n <Button variant=\"text\" size=\"sm\" StartIcon={FunnelSimple} className=\"relative whitespace-nowrap\">\n {showBadge && (\n <NotificationBadge\n count={activeFiltersCount}\n color=\"primary\"\n ping={false}\n className=\"absolute -top-1 -right-1\"\n />\n )}\n {filtersButtonLabel}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n align=\"center\"\n className={cn('w-fit p-4', isMobile && 'max-h-[80vh] w-[95vw] overflow-y-auto')}\n >\n <div className=\"flex flex-col gap-4\">\n {isMobile && primaryFilters}\n {secondaryFilters}\n </div>\n </PopoverContent>\n </PopoverRoot>\n )}\n {showColumnVisibilityControls && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"text\" size=\"sm\" className={cn('whitespace-nowrap')} StartIcon={TextColumns}>\n {columnVisibilityLabels.button}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuCheckboxItem\n key={'all-columns'}\n className=\"capitalize\"\n checked={table\n .getAllColumns()\n .filter((column) => column.getCanHide())\n .every((column) => column.getIsVisible())}\n onSelect={(event) => event.preventDefault()}\n onCheckedChange={(value) =>\n table\n .getAllColumns()\n .filter((column) => column.getCanHide())\n .forEach((column) => column.toggleVisibility(!!value))\n }\n >\n {columnVisibilityLabels.selectAll}\n </DropdownMenuCheckboxItem>\n <DropdownMenuSeparator className=\"bg-neutral-100\" />\n {table\n .getAllColumns()\n .filter((column) => column.getCanHide())\n .map((column) => {\n return (\n <DropdownMenuCheckboxItem\n key={column.id}\n className=\"capitalize\"\n checked={column.getIsVisible()}\n onSelect={(event) => event.preventDefault()}\n onCheckedChange={(value) => column.toggleVisibility(!!value)}\n >\n {column.columnDef.header?.toString()}\n </DropdownMenuCheckboxItem>\n )\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n </div>\n </div>\n </div>\n )\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ declare const FormMessage: React.ForwardRefExoticComponent<{
|
|
|
25
25
|
asChild?: boolean;
|
|
26
26
|
} & React.BaseHTMLAttributes<HTMLParagraphElement> & import('class-variance-authority').VariantProps<(props?: ({
|
|
27
27
|
variant?: "display-lg" | "display-md" | "display-sm" | "headline-lg" | "headline-md" | "headline-sm" | "title-lg" | "title-md" | "title-sm" | "label-lg" | "label-md" | "label-sm" | "body-lg" | "body-md" | "body-sm" | null | undefined;
|
|
28
|
-
weight?: "bold" | "
|
|
28
|
+
weight?: "bold" | "medium" | "regular" | "semibold" | null | undefined;
|
|
29
29
|
family?: "onest" | null | undefined;
|
|
30
30
|
color?: "primary" | "accent" | "success" | "warning" | "error" | "neutral" | "inverse" | "secondary" | null | undefined;
|
|
31
31
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLParagraphElement>>;
|