@simpleapps-com/augur-web 2.2.24 → 2.2.25

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.
@@ -0,0 +1,165 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }"use client";
2
+
3
+
4
+ var _chunkVL6L4GDAcjs = require('./chunk-VL6L4GDA.cjs');
5
+
6
+ // src/pagination.tsx
7
+ var _react = require('react'); var React = _interopRequireWildcard(_react);
8
+ var _lu = require('react-icons/lu');
9
+ var _web = require('@simpleapps-com/augur-utils/web');
10
+ var _jsxruntime = require('react/jsx-runtime');
11
+ var Pagination = ({ className, ...props }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
12
+ "nav",
13
+ {
14
+ role: "navigation",
15
+ "aria-label": "pagination",
16
+ className: _web.cn.call(void 0, "mx-auto flex w-full justify-center", className),
17
+ ...props
18
+ }
19
+ );
20
+ Pagination.displayName = "Pagination";
21
+ var PaginationContent = React.forwardRef(
22
+ ({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "ul", { ref, className: _web.cn.call(void 0, "flex flex-row items-center gap-1", className), ...props })
23
+ );
24
+ PaginationContent.displayName = "PaginationContent";
25
+ var PaginationItem = React.forwardRef(
26
+ ({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { ref, className: _web.cn.call(void 0, "", className), ...props })
27
+ );
28
+ PaginationItem.displayName = "PaginationItem";
29
+ var PaginationLink = ({ className, isActive, size = "icon", ...props }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30
+ "a",
31
+ {
32
+ "aria-current": isActive ? "page" : void 0,
33
+ className: _web.cn.call(void 0,
34
+ _chunkVL6L4GDAcjs.buttonVariants.call(void 0, {
35
+ variant: isActive ? "outline" : "ghost",
36
+ size
37
+ }),
38
+ className
39
+ ),
40
+ ...props
41
+ }
42
+ );
43
+ PaginationLink.displayName = "PaginationLink";
44
+ var PaginationPrevious = ({
45
+ className,
46
+ ...props
47
+ }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
48
+ PaginationLink,
49
+ {
50
+ "aria-label": "Go to previous page",
51
+ size: "default",
52
+ className: _web.cn.call(void 0, "gap-1 pl-2.5", className),
53
+ ...props,
54
+ children: [
55
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuChevronLeft, { className: "h-4 w-4" }),
56
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: "Prev" })
57
+ ]
58
+ }
59
+ );
60
+ PaginationPrevious.displayName = "PaginationPrevious";
61
+ var PaginationNext = ({ className, ...props }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
62
+ PaginationLink,
63
+ {
64
+ "aria-label": "Go to next page",
65
+ size: "default",
66
+ className: _web.cn.call(void 0, "gap-1 pr-2.5", className),
67
+ ...props,
68
+ children: [
69
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: "Next" }),
70
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuChevronRight, { className: "h-4 w-4" })
71
+ ]
72
+ }
73
+ );
74
+ PaginationNext.displayName = "PaginationNext";
75
+ var PaginationEllipsis = ({ className, ...props }) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
76
+ "span",
77
+ {
78
+ "aria-hidden": true,
79
+ className: _web.cn.call(void 0, "flex h-9 w-9 items-center justify-center", className),
80
+ ...props,
81
+ children: [
82
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuEllipsis, { className: "h-4 w-4" }),
83
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "sr-only", children: "More pages" })
84
+ ]
85
+ }
86
+ );
87
+ PaginationEllipsis.displayName = "PaginationEllipsis";
88
+ function getPageNumbers(current, total) {
89
+ if (total <= 0) return [];
90
+ if (total === 1) return [1];
91
+ const page = Math.max(1, Math.min(current, total));
92
+ if (total <= 5) {
93
+ return Array.from({ length: total }, (_, i) => i + 1);
94
+ }
95
+ if (page <= 3) {
96
+ return [1, 2, 3, 4, "ellipsis", total];
97
+ }
98
+ if (page >= total - 2) {
99
+ return [1, "ellipsis", total - 3, total - 2, total - 1, total];
100
+ }
101
+ return [1, "ellipsis", page - 1, page, page + 1, "ellipsis", total];
102
+ }
103
+ var ListPagination = ({
104
+ page,
105
+ totalPages,
106
+ getHref,
107
+ onPageChange,
108
+ className
109
+ }) => {
110
+ if (totalPages <= 1) return null;
111
+ const pages = getPageNumbers(page, totalPages);
112
+ const isFirst = page <= 1;
113
+ const isLast = page >= totalPages;
114
+ const handleClick = (target) => (e) => {
115
+ if (onPageChange) {
116
+ e.preventDefault();
117
+ onPageChange(target);
118
+ }
119
+ };
120
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Pagination, { className, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, PaginationContent, { children: [
121
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaginationItem, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
122
+ PaginationPrevious,
123
+ {
124
+ href: isFirst ? getHref(1) : getHref(page - 1),
125
+ "aria-disabled": isFirst || void 0,
126
+ className: isFirst ? "pointer-events-none opacity-50" : void 0,
127
+ onClick: isFirst ? void 0 : handleClick(page - 1)
128
+ }
129
+ ) }),
130
+ pages.map(
131
+ (entry, i) => entry === "ellipsis" ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaginationItem, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaginationEllipsis, {}) }, `ellipsis-${i}`) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaginationItem, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
132
+ PaginationLink,
133
+ {
134
+ href: getHref(entry),
135
+ isActive: entry === page,
136
+ onClick: handleClick(entry),
137
+ children: entry
138
+ }
139
+ ) }, entry)
140
+ ),
141
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaginationItem, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
142
+ PaginationNext,
143
+ {
144
+ href: isLast ? getHref(totalPages) : getHref(page + 1),
145
+ "aria-disabled": isLast || void 0,
146
+ className: isLast ? "pointer-events-none opacity-50" : void 0,
147
+ onClick: isLast ? void 0 : handleClick(page + 1)
148
+ }
149
+ ) })
150
+ ] }) });
151
+ };
152
+ ListPagination.displayName = "ListPagination";
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+ exports.Pagination = Pagination; exports.PaginationContent = PaginationContent; exports.PaginationItem = PaginationItem; exports.PaginationLink = PaginationLink; exports.PaginationPrevious = PaginationPrevious; exports.PaginationNext = PaginationNext; exports.PaginationEllipsis = PaginationEllipsis; exports.getPageNumbers = getPageNumbers; exports.ListPagination = ListPagination;
165
+ //# sourceMappingURL=chunk-NSSX7USQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/chunk-NSSX7USQ.cjs","../src/pagination.tsx"],"names":[],"mappings":"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","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/chunk-NSSX7USQ.cjs","sourcesContent":[null,"/** Pagination navigation components, styled with buttonVariants. */\n\"use client\";\n\nimport * as React from \"react\";\nimport { LuChevronLeft, LuChevronRight, LuEllipsis } from \"react-icons/lu\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\nimport { type ButtonProps, buttonVariants } from \"./button\";\n\nconst Pagination = ({ className, ...props }: React.ComponentProps<\"nav\">) => (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n);\nPagination.displayName = \"Pagination\";\n\nconst PaginationContent = React.forwardRef<HTMLUListElement, React.ComponentProps<\"ul\">>(\n ({ className, ...props }, ref) => (\n <ul ref={ref} className={cn(\"flex flex-row items-center gap-1\", className)} {...props} />\n ),\n);\nPaginationContent.displayName = \"PaginationContent\";\n\nconst PaginationItem = React.forwardRef<HTMLLIElement, React.ComponentProps<\"li\">>(\n ({ className, ...props }, ref) => <li ref={ref} className={cn(\"\", className)} {...props} />,\n);\nPaginationItem.displayName = \"PaginationItem\";\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n} & Pick<ButtonProps, \"size\"> &\n React.ComponentProps<\"a\">;\n\nconst PaginationLink = ({ className, isActive, size = \"icon\", ...props }: PaginationLinkProps) => (\n <a\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className,\n )}\n {...props}\n />\n);\nPaginationLink.displayName = \"PaginationLink\";\n\nconst PaginationPrevious = ({\n className,\n ...props\n}: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 pl-2.5\", className)}\n {...props}\n >\n <LuChevronLeft className=\"h-4 w-4\" />\n <span>Prev</span>\n </PaginationLink>\n);\nPaginationPrevious.displayName = \"PaginationPrevious\";\n\nconst PaginationNext = ({ className, ...props }: React.ComponentProps<typeof PaginationLink>) => (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 pr-2.5\", className)}\n {...props}\n >\n <span>Next</span>\n <LuChevronRight className=\"h-4 w-4\" />\n </PaginationLink>\n);\nPaginationNext.displayName = \"PaginationNext\";\n\nconst PaginationEllipsis = ({ className, ...props }: React.ComponentProps<\"span\">) => (\n <span\n aria-hidden\n className={cn(\"flex h-9 w-9 items-center justify-center\", className)}\n {...props}\n >\n <LuEllipsis className=\"h-4 w-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n);\nPaginationEllipsis.displayName = \"PaginationEllipsis\";\n\n/** Build an array of page numbers and ellipsis markers for pagination UI. */\nfunction getPageNumbers(current: number, total: number): (number | \"ellipsis\")[] {\n if (total <= 0) return [];\n if (total === 1) return [1];\n\n const page = Math.max(1, Math.min(current, total));\n\n if (total <= 5) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n if (page <= 3) {\n return [1, 2, 3, 4, \"ellipsis\", total];\n }\n\n if (page >= total - 2) {\n return [1, \"ellipsis\", total - 3, total - 2, total - 1, total];\n }\n\n return [1, \"ellipsis\", page - 1, page, page + 1, \"ellipsis\", total];\n}\n\ntype ListPaginationProps = {\n /** Current page number (1-indexed). */\n page: number;\n /** Total number of pages. */\n totalPages: number;\n /** Builds a crawlable href for each page link (required for SEO). */\n getHref: (page: number) => string;\n /** Optional client-side callback layered on top of href navigation. */\n onPageChange?: (page: number) => void;\n className?: string;\n};\n\nconst ListPagination = ({\n page,\n totalPages,\n getHref,\n onPageChange,\n className,\n}: ListPaginationProps) => {\n if (totalPages <= 1) return null;\n\n const pages = getPageNumbers(page, totalPages);\n const isFirst = page <= 1;\n const isLast = page >= totalPages;\n\n const handleClick = (target: number) => (e: React.MouseEvent) => {\n if (onPageChange) {\n e.preventDefault();\n onPageChange(target);\n }\n };\n\n return (\n <Pagination className={className}>\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious\n href={isFirst ? getHref(1) : getHref(page - 1)}\n aria-disabled={isFirst || undefined}\n className={isFirst ? \"pointer-events-none opacity-50\" : undefined}\n onClick={isFirst ? undefined : handleClick(page - 1)}\n />\n </PaginationItem>\n\n {pages.map((entry, i) =>\n entry === \"ellipsis\" ? (\n <PaginationItem key={`ellipsis-${i}`}>\n <PaginationEllipsis />\n </PaginationItem>\n ) : (\n <PaginationItem key={entry}>\n <PaginationLink\n href={getHref(entry)}\n isActive={entry === page}\n onClick={handleClick(entry)}\n >\n {entry}\n </PaginationLink>\n </PaginationItem>\n ),\n )}\n\n <PaginationItem>\n <PaginationNext\n href={isLast ? getHref(totalPages) : getHref(page + 1)}\n aria-disabled={isLast || undefined}\n className={isLast ? \"pointer-events-none opacity-50\" : undefined}\n onClick={isLast ? undefined : handleClick(page + 1)}\n />\n </PaginationItem>\n </PaginationContent>\n </Pagination>\n );\n};\nListPagination.displayName = \"ListPagination\";\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n getPageNumbers,\n ListPagination,\n};\n"]}
@@ -0,0 +1,26 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }"use client";
2
+
3
+ // src/checkbox.tsx
4
+ var _react = require('react'); var React = _interopRequireWildcard(_react);
5
+ var _reactcheckbox = require('@radix-ui/react-checkbox'); var CheckboxPrimitive = _interopRequireWildcard(_reactcheckbox);
6
+ var _lu = require('react-icons/lu');
7
+ var _web = require('@simpleapps-com/augur-utils/web');
8
+ var _jsxruntime = require('react/jsx-runtime');
9
+ var Checkbox = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10
+ CheckboxPrimitive.Root,
11
+ {
12
+ ref,
13
+ className: _web.cn.call(void 0,
14
+ "border-primary focus-visible:ring-ring data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground peer h-4 w-4 shrink-0 rounded-sm border shadow focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50",
15
+ className
16
+ ),
17
+ ...props,
18
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, CheckboxPrimitive.Indicator, { className: _web.cn.call(void 0, "flex items-center justify-center text-current"), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuCheck, { className: "h-4 w-4" }) })
19
+ }
20
+ ));
21
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
22
+
23
+
24
+
25
+ exports.Checkbox = Checkbox;
26
+ //# sourceMappingURL=chunk-XGKBDPGD.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/chunk-XGKBDPGD.cjs","../src/checkbox.tsx"],"names":[],"mappings":"AAAA,uWAAY;AACZ;AACA;ACCA,2EAAuB;AACvB,0HAAmC;AACnC,oCAAwB;AACxB,sDAAmB;AAeb,+CAAA;AAbN,IAAM,SAAA,EAAiB,KAAA,CAAA,UAAA,CAGrB,CAAC,EAAE,SAAA,EAAW,GAAG,MAAM,CAAA,EAAG,GAAA,EAAA,mBAC1B,6BAAA;AAAA,EAAmB,iBAAA,CAAA,IAAA;AAAA,EAAlB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,qBAAA;AAAA,MACT,oQAAA;AAAA,MACA;AAAA,IACF,CAAA;AAAA,IACC,GAAG,KAAA;AAAA,IAEJ,QAAA,kBAAA,6BAAA,iBAAmB,CAAA,SAAA,EAAlB,EAA4B,SAAA,EAAW,qBAAA,+CAAkD,CAAA,EACxF,QAAA,kBAAA,6BAAA,WAAC,EAAA,EAAQ,SAAA,EAAU,UAAA,CAAU,EAAA,CAC/B;AAAA,EAAA;AACF,CACD,CAAA;AACD,QAAA,CAAS,YAAA,EAAgC,iBAAA,CAAA,IAAA,CAAK,WAAA;ADJ9C;AACA;AACE;AACF,4BAAC","file":"/home/runner/work/augur-packages/augur-packages/packages/augur-web/dist/chunk-XGKBDPGD.cjs","sourcesContent":[null,"/** Styled wrapper around @radix-ui/react-checkbox. See https://www.radix-ui.com/primitives/docs/components/checkbox */\n\"use client\";\n\nimport * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { LuCheck } from \"react-icons/lu\";\nimport { cn } from \"@simpleapps-com/augur-utils/web\";\n\nconst Checkbox = React.forwardRef<\n React.ComponentRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"border-primary focus-visible:ring-ring data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground peer h-4 w-4 shrink-0 rounded-sm border shadow focus-visible:outline-none focus-visible:ring-1 disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className={cn(\"flex items-center justify-center text-current\")}>\n <LuCheck className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n"]}
@@ -10,11 +10,28 @@
10
10
  var _chunkNEY26NNFcjs = require('./chunk-NEY26NNF.cjs');
11
11
 
12
12
 
13
+ var _chunkNSSX7USQcjs = require('./chunk-NSSX7USQ.cjs');
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+ var _chunkJXW4XE2Pcjs = require('./chunk-JXW4XE2P.cjs');
22
+
23
+
13
24
  var _chunk7EXXNELXcjs = require('./chunk-7EXXNELX.cjs');
14
25
 
15
26
 
16
27
  var _chunk5VMEEKZ5cjs = require('./chunk-5VMEEKZ5.cjs');
17
28
 
29
+
30
+ var _chunkVL6L4GDAcjs = require('./chunk-VL6L4GDA.cjs');
31
+
32
+
33
+ var _chunkXGKBDPGDcjs = require('./chunk-XGKBDPGD.cjs');
34
+
18
35
  // src/data-table.tsx
19
36
  var _react = require('react'); var React = _interopRequireWildcard(_react);
20
37
 
@@ -27,21 +44,255 @@ var _reacttable = require('@tanstack/react-table');
27
44
  var _web = require('@simpleapps-com/augur-utils/web');
28
45
  var _lu = require('react-icons/lu');
29
46
  var _jsxruntime = require('react/jsx-runtime');
30
- function buildTanstackColumns(columns) {
31
- return columns.map((col) => ({
32
- id: col.key,
33
- accessorKey: col.key,
34
- header: col.header,
35
- enableSorting: _nullishCoalesce(col.sortable, () => ( false)),
36
- cell: col.render ? (info) => col.render(info.row.original) : (info) => String(_nullishCoalesce(info.getValue(), () => ( ""))),
37
- meta: { align: col.align }
38
- }));
47
+ var ALIGN_CLASS = { left: "text-left", center: "text-center", right: "text-right" };
48
+ function getAlignCn(meta) {
49
+ const align = _nullishCoalesce(_optionalChain([meta, 'optionalAccess', _ => _.align]), () => ( "left"));
50
+ return ALIGN_CLASS[align];
51
+ }
52
+ function buildTanstackColumns(columns, selectable) {
53
+ const cols = [];
54
+ if (selectable) {
55
+ cols.push({
56
+ id: "_select",
57
+ header: ({ table }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
58
+ _chunkXGKBDPGDcjs.Checkbox,
59
+ {
60
+ checked: table.getIsAllPageRowsSelected(),
61
+ onCheckedChange: (v) => table.toggleAllPageRowsSelected(!!v),
62
+ "aria-label": "Select all"
63
+ }
64
+ ),
65
+ cell: ({ row }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
66
+ _chunkXGKBDPGDcjs.Checkbox,
67
+ {
68
+ checked: row.getIsSelected(),
69
+ onCheckedChange: (v) => row.toggleSelected(!!v),
70
+ "aria-label": "Select row",
71
+ onClick: (e) => e.stopPropagation()
72
+ }
73
+ ),
74
+ enableSorting: false,
75
+ enableHiding: false,
76
+ meta: { align: "center" }
77
+ });
78
+ }
79
+ for (const col of columns) {
80
+ cols.push({
81
+ id: col.key,
82
+ accessorKey: col.key,
83
+ header: col.header,
84
+ enableSorting: _nullishCoalesce(col.sortable, () => ( false)),
85
+ enableHiding: col.hideable !== false,
86
+ cell: col.render ? (info) => col.render(info.row.original) : (info) => String(_nullishCoalesce(info.getValue(), () => ( ""))),
87
+ meta: { align: col.align }
88
+ });
89
+ }
90
+ return cols;
91
+ }
92
+ function exportToCsv(columns, data, filename) {
93
+ const headers = columns.map((c) => c.header);
94
+ const rows = data.map(
95
+ (row) => columns.map((col) => {
96
+ const str = String(_nullishCoalesce(row[col.key], () => ( "")));
97
+ return str.includes(",") || str.includes('"') || str.includes("\n") ? `"${str.replace(/"/g, '""')}"` : str;
98
+ })
99
+ );
100
+ const csv = [headers.join(","), ...rows.map((r) => r.join(","))].join("\n");
101
+ const blob = new Blob([csv], { type: "text/csv;charset=utf-8;" });
102
+ const url = URL.createObjectURL(blob);
103
+ const link = document.createElement("a");
104
+ link.href = url;
105
+ link.download = `${filename}.csv`;
106
+ link.click();
107
+ URL.revokeObjectURL(url);
108
+ }
109
+ function SortIndicator({ direction }) {
110
+ if (direction === "asc") return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuArrowUp, { className: "h-4 w-4" });
111
+ if (direction === "desc") return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuArrowDown, { className: "h-4 w-4" });
112
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuArrowUpDown, { className: "text-muted-foreground/50 h-4 w-4" });
113
+ }
114
+ function ColumnToggle({ table }) {
115
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJXW4XE2Pcjs.DropdownMenu, { children: [
116
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJXW4XE2Pcjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkVL6L4GDAcjs.Button, { variant: "outline", size: "sm", children: [
117
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuSettings2, { className: "mr-2 h-4 w-4" }),
118
+ "Columns"
119
+ ] }) }),
120
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkJXW4XE2Pcjs.DropdownMenuContent, { align: "end", children: [
121
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJXW4XE2Pcjs.DropdownMenuLabel, { children: "Toggle columns" }),
122
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJXW4XE2Pcjs.DropdownMenuSeparator, {}),
123
+ table.getAllColumns().filter((col) => col.getCanHide()).map((col) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
124
+ _chunkJXW4XE2Pcjs.DropdownMenuCheckboxItem,
125
+ {
126
+ checked: col.getIsVisible(),
127
+ onCheckedChange: (v) => col.toggleVisibility(!!v),
128
+ children: col.columnDef.header
129
+ },
130
+ col.id
131
+ ))
132
+ ] })
133
+ ] });
134
+ }
135
+ function HeaderCell({ header }) {
136
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
137
+ _chunkNEY26NNFcjs.TableHead,
138
+ {
139
+ className: _web.cn.call(void 0,
140
+ getAlignCn(header.column.columnDef.meta),
141
+ header.column.getCanSort() && "cursor-pointer select-none"
142
+ ),
143
+ onClick: header.column.getToggleSortingHandler(),
144
+ children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "inline-flex items-center gap-1", children: [
145
+ _reacttable.flexRender.call(void 0, header.column.columnDef.header, header.getContext()),
146
+ header.column.getCanSort() && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SortIndicator, { direction: header.column.getIsSorted() })
147
+ ] })
148
+ }
149
+ );
150
+ }
151
+ function DataCell({ cell }) {
152
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableCell, { className: getAlignCn(cell.column.columnDef.meta), children: _reacttable.flexRender.call(void 0, cell.column.columnDef.cell, cell.getContext()) });
153
+ }
154
+ function DataRow({ row, onRowClick }) {
155
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
156
+ _chunkNEY26NNFcjs.TableRow,
157
+ {
158
+ "data-state": row.getIsSelected() ? "selected" : void 0,
159
+ className: _web.cn.call(void 0, onRowClick && "cursor-pointer"),
160
+ onClick: onRowClick ? () => onRowClick(row.original) : void 0,
161
+ children: row.getVisibleCells().map((cell) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataCell, { cell }, cell.id))
162
+ }
163
+ );
164
+ }
165
+ function ExportButton({
166
+ columns,
167
+ data,
168
+ csvFilename
169
+ }) {
170
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkVL6L4GDAcjs.Button, { variant: "outline", size: "sm", onClick: () => exportToCsv(columns, data, csvFilename), children: [
171
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuDownload, { className: "mr-2 h-4 w-4" }),
172
+ "Export"
173
+ ] });
174
+ }
175
+ function BulkActionsBar({
176
+ selectedRows,
177
+ bulkActions
178
+ }) {
179
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
180
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-muted-foreground text-sm", children: [
181
+ selectedRows.length,
182
+ " selected"
183
+ ] }),
184
+ bulkActions(selectedRows)
185
+ ] });
186
+ }
187
+ function Toolbar({
188
+ searchable,
189
+ searchPlaceholder,
190
+ globalFilter,
191
+ onGlobalFilterChange,
192
+ selectedRows,
193
+ bulkActions,
194
+ toolbar,
195
+ exportCsv,
196
+ columns,
197
+ data,
198
+ csvFilename,
199
+ columnToggle,
200
+ table
201
+ }) {
202
+ const hasSelection = selectedRows.length > 0;
203
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-4", children: [
204
+ searchable && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
205
+ _chunk7EXXNELXcjs.Input,
206
+ {
207
+ placeholder: searchPlaceholder,
208
+ value: globalFilter,
209
+ onChange: (e) => onGlobalFilterChange(e.target.value),
210
+ className: "max-w-sm"
211
+ }
212
+ ),
213
+ hasSelection && bulkActions && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, BulkActionsBar, { selectedRows, bulkActions }),
214
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "ml-auto flex items-center gap-2", children: [
215
+ toolbar,
216
+ exportCsv && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ExportButton, { columns, data, csvFilename }),
217
+ columnToggle && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ColumnToggle, { table })
218
+ ] })
219
+ ] });
220
+ }
221
+ function TableBodyContent({
222
+ loading,
223
+ colSpan,
224
+ emptyMessage,
225
+ rows,
226
+ onRowClick
227
+ }) {
228
+ if (loading) {
229
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableRow, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableCell, { colSpan, className: "h-24 text-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5VMEEKZ5cjs.Spinner, { size: "lg", className: "mx-auto" }) }) });
230
+ }
231
+ if (rows.length === 0) {
232
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableRow, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableCell, { colSpan, className: "h-24 text-center", children: emptyMessage }) });
233
+ }
234
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: rows.map((row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataRow, { row, onRowClick }, row.id)) });
235
+ }
236
+ function PaginationFooter({ pagination }) {
237
+ if (!pagination || pagination.totalPages <= 1) return null;
238
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
239
+ _chunkNSSX7USQcjs.ListPagination,
240
+ {
241
+ page: pagination.page,
242
+ totalPages: pagination.totalPages,
243
+ getHref: pagination.getHref,
244
+ onPageChange: pagination.onPageChange
245
+ }
246
+ );
247
+ }
248
+ function useDataTable(opts) {
249
+ const isManualFiltering = opts.externalGlobalFilter !== void 0;
250
+ const isManualSorting = opts.externalSorting !== void 0;
251
+ const [internalSorting, setInternalSorting] = React.useState([]);
252
+ const [internalGlobalFilter, setInternalGlobalFilter] = React.useState("");
253
+ const [internalRowSelection, setInternalRowSelection] = React.useState({});
254
+ const [columnVisibility, setColumnVisibility] = React.useState({});
255
+ const sorting = _nullishCoalesce(opts.externalSorting, () => ( internalSorting));
256
+ const globalFilter = _nullishCoalesce(opts.externalGlobalFilter, () => ( internalGlobalFilter));
257
+ const rowSelectionState = _nullishCoalesce(opts.externalRowSelection, () => ( internalRowSelection));
258
+ const handleSortingChange = opts.onSortingChange ? (updater) => {
259
+ opts.onSortingChange(updater(sorting));
260
+ } : setInternalSorting;
261
+ const handleGlobalFilterChange = _nullishCoalesce(opts.onGlobalFilterChange, () => ( setInternalGlobalFilter));
262
+ const handleRowSelectionChange = opts.onRowSelectionChange ? (updater) => {
263
+ opts.onRowSelectionChange(
264
+ updater(rowSelectionState)
265
+ );
266
+ } : setInternalRowSelection;
267
+ const tanstackColumns = React.useMemo(
268
+ () => buildTanstackColumns(opts.columns, opts.selectable),
269
+ [opts.columns, opts.selectable]
270
+ );
271
+ const table = _reacttable.useReactTable.call(void 0, {
272
+ data: opts.data,
273
+ columns: tanstackColumns,
274
+ state: {
275
+ sorting,
276
+ globalFilter: isManualFiltering ? void 0 : globalFilter,
277
+ rowSelection: rowSelectionState,
278
+ columnVisibility
279
+ },
280
+ onSortingChange: handleSortingChange,
281
+ onGlobalFilterChange: isManualFiltering ? void 0 : setInternalGlobalFilter,
282
+ onRowSelectionChange: handleRowSelectionChange,
283
+ onColumnVisibilityChange: setColumnVisibility,
284
+ getCoreRowModel: _reacttable.getCoreRowModel.call(void 0, ),
285
+ getSortedRowModel: isManualSorting ? void 0 : _reacttable.getSortedRowModel.call(void 0, ),
286
+ getFilteredRowModel: isManualFiltering ? void 0 : _reacttable.getFilteredRowModel.call(void 0, ),
287
+ manualSorting: isManualSorting,
288
+ manualFiltering: isManualFiltering,
289
+ manualPagination: opts.pagination !== void 0,
290
+ enableRowSelection: opts.selectable,
291
+ getRowId: opts.getRowId ? (row) => opts.getRowId(row) : void 0
292
+ });
293
+ const selectedRows = opts.selectable ? table.getSelectedRowModel().rows.map((r) => r.original) : [];
294
+ return { table, tanstackColumns, globalFilter, handleGlobalFilterChange, selectedRows };
39
295
  }
40
- var alignClass = {
41
- left: "text-left",
42
- center: "text-center",
43
- right: "text-right"
44
- };
45
296
  function DataTable({
46
297
  columns,
47
298
  data,
@@ -52,82 +303,70 @@ function DataTable({
52
303
  emptyMessage = "No results.",
53
304
  toolbar,
54
305
  className,
55
- getRowId
306
+ getRowId,
307
+ pagination,
308
+ globalFilter: externalGlobalFilter,
309
+ onGlobalFilterChange,
310
+ sortingState,
311
+ onSortingChange,
312
+ selectable = false,
313
+ rowSelection,
314
+ onRowSelectionChange,
315
+ bulkActions,
316
+ columnToggle = false,
317
+ exportCsv = false,
318
+ csvFilename = "export"
56
319
  }) {
57
- const [sorting, setSorting] = React.useState([]);
58
- const [globalFilter, setGlobalFilter] = React.useState("");
59
- const tanstackColumns = React.useMemo(() => buildTanstackColumns(columns), [columns]);
60
- const table = _reacttable.useReactTable.call(void 0, {
320
+ const { table, tanstackColumns, globalFilter, handleGlobalFilterChange, selectedRows } = useDataTable({
321
+ columns,
61
322
  data,
62
- columns: tanstackColumns,
63
- state: { sorting, globalFilter },
64
- onSortingChange: setSorting,
65
- onGlobalFilterChange: setGlobalFilter,
66
- getCoreRowModel: _reacttable.getCoreRowModel.call(void 0, ),
67
- getSortedRowModel: _reacttable.getSortedRowModel.call(void 0, ),
68
- getFilteredRowModel: _reacttable.getFilteredRowModel.call(void 0, ),
69
- getRowId: getRowId ? (row) => getRowId(row) : void 0
323
+ selectable,
324
+ getRowId,
325
+ pagination,
326
+ externalGlobalFilter,
327
+ onGlobalFilterChange,
328
+ externalSorting: sortingState,
329
+ onSortingChange,
330
+ externalRowSelection: rowSelection,
331
+ onRowSelectionChange
70
332
  });
333
+ const showToolbar = searchable || toolbar || columnToggle || exportCsv || selectedRows.length > 0;
71
334
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _web.cn.call(void 0, "space-y-4", className), children: [
72
- (searchable || toolbar) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-4", children: [
73
- searchable && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
74
- _chunk7EXXNELXcjs.Input,
335
+ showToolbar && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
336
+ Toolbar,
337
+ {
338
+ searchable,
339
+ searchPlaceholder,
340
+ globalFilter,
341
+ onGlobalFilterChange: handleGlobalFilterChange,
342
+ selectedRows,
343
+ bulkActions,
344
+ toolbar,
345
+ exportCsv,
346
+ columns,
347
+ data,
348
+ csvFilename,
349
+ columnToggle,
350
+ table
351
+ }
352
+ ),
353
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNEY26NNFcjs.Table, { children: [
354
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableHeader, { className: "bg-background sticky top-0 z-10", children: table.getHeaderGroups().map((hg) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableRow, { children: hg.headers.map((h) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderCell, { header: h }, h.id)) }, hg.id)) }),
355
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableBody, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
356
+ TableBodyContent,
75
357
  {
76
- placeholder: searchPlaceholder,
77
- value: globalFilter,
78
- onChange: (e) => setGlobalFilter(e.target.value),
79
- className: "max-w-sm"
358
+ loading,
359
+ colSpan: tanstackColumns.length,
360
+ emptyMessage,
361
+ rows: table.getRowModel().rows,
362
+ onRowClick
80
363
  }
81
- ),
82
- toolbar
364
+ ) })
83
365
  ] }),
84
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNEY26NNFcjs.Table, { children: [
85
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableHeader, { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableRow, { children: headerGroup.headers.map((header) => {
86
- const align = _nullishCoalesce(_optionalChain([header, 'access', _ => _.column, 'access', _2 => _2.columnDef, 'access', _3 => _3.meta, 'optionalAccess', _4 => _4.align]), () => ( "left"));
87
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
88
- _chunkNEY26NNFcjs.TableHead,
89
- {
90
- className: _web.cn.call(void 0,
91
- alignClass[align],
92
- header.column.getCanSort() && "cursor-pointer select-none"
93
- ),
94
- onClick: header.column.getToggleSortingHandler(),
95
- children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "inline-flex items-center gap-1", children: [
96
- _reacttable.flexRender.call(void 0, header.column.columnDef.header, header.getContext()),
97
- header.column.getCanSort() && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SortIndicator, { direction: header.column.getIsSorted() })
98
- ] })
99
- },
100
- header.id
101
- );
102
- }) }, headerGroup.id)) }),
103
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableBody, { children: loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableRow, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableCell, { colSpan: columns.length, className: "h-24 text-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk5VMEEKZ5cjs.Spinner, { size: "lg", className: "mx-auto" }) }) }) : table.getRowModel().rows.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableRow, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNEY26NNFcjs.TableCell, { colSpan: columns.length, className: "h-24 text-center", children: emptyMessage }) }) : table.getRowModel().rows.map((row) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
104
- _chunkNEY26NNFcjs.TableRow,
105
- {
106
- className: _web.cn.call(void 0, onRowClick && "cursor-pointer"),
107
- onClick: onRowClick ? () => onRowClick(row.original) : void 0,
108
- children: row.getVisibleCells().map((cell) => {
109
- const align = _nullishCoalesce(_optionalChain([cell, 'access', _5 => _5.column, 'access', _6 => _6.columnDef, 'access', _7 => _7.meta, 'optionalAccess', _8 => _8.align]), () => ( "left"));
110
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
111
- _chunkNEY26NNFcjs.TableCell,
112
- {
113
- className: alignClass[align],
114
- children: _reacttable.flexRender.call(void 0, cell.column.columnDef.cell, cell.getContext())
115
- },
116
- cell.id
117
- );
118
- })
119
- },
120
- row.id
121
- )) })
122
- ] })
366
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, PaginationFooter, { pagination })
123
367
  ] });
124
368
  }
125
369
  DataTable.displayName = "DataTable";
126
- function SortIndicator({ direction }) {
127
- if (direction === "asc") return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuArrowUp, { className: "h-4 w-4" });
128
- if (direction === "desc") return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuArrowDown, { className: "h-4 w-4" });
129
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lu.LuArrowUpDown, { className: "text-muted-foreground/50 h-4 w-4" });
130
- }
131
370
 
132
371
 
133
372
  exports.DataTable = DataTable;