@entropix/data 0.0.0 → 1.0.1

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.
Files changed (50) hide show
  1. package/dist/area-chart.cjs +14 -0
  2. package/dist/area-chart.css +144 -0
  3. package/dist/area-chart.d.cts +19 -0
  4. package/dist/area-chart.d.ts +19 -0
  5. package/dist/area-chart.js +5 -0
  6. package/dist/bar-chart.cjs +14 -0
  7. package/dist/bar-chart.css +144 -0
  8. package/dist/bar-chart.d.cts +18 -0
  9. package/dist/bar-chart.d.ts +18 -0
  10. package/dist/bar-chart.js +5 -0
  11. package/dist/chunk-42HKJHUY.js +96 -0
  12. package/dist/chunk-4WXLJDQU.js +74 -0
  13. package/dist/chunk-6YAOO76S.cjs +142 -0
  14. package/dist/chunk-CMAQ7DZD.js +135 -0
  15. package/dist/chunk-FQACLZYR.js +137 -0
  16. package/dist/chunk-GCZSXJAA.cjs +77 -0
  17. package/dist/chunk-K6ZRQYSZ.cjs +131 -0
  18. package/dist/chunk-QBI5NOHT.cjs +126 -0
  19. package/dist/chunk-SDCNTA7E.cjs +275 -0
  20. package/dist/chunk-VCSKHJLZ.js +124 -0
  21. package/dist/chunk-VGT2QF7D.cjs +98 -0
  22. package/dist/chunk-WOVSQALY.cjs +137 -0
  23. package/dist/chunk-X7GZD7KZ.js +129 -0
  24. package/dist/chunk-YINCJQN6.js +271 -0
  25. package/dist/data-table.cjs +20 -0
  26. package/dist/data-table.css +227 -0
  27. package/dist/data-table.d.cts +20 -0
  28. package/dist/data-table.d.ts +20 -0
  29. package/dist/data-table.js +3 -0
  30. package/dist/index.cjs +36 -269
  31. package/dist/index.css +144 -0
  32. package/dist/index.d.cts +8 -21
  33. package/dist/index.d.ts +8 -21
  34. package/dist/index.js +7 -269
  35. package/dist/line-chart.cjs +14 -0
  36. package/dist/line-chart.css +144 -0
  37. package/dist/line-chart.d.cts +19 -0
  38. package/dist/line-chart.d.ts +19 -0
  39. package/dist/line-chart.js +5 -0
  40. package/dist/pie-chart.cjs +13 -0
  41. package/dist/pie-chart.css +144 -0
  42. package/dist/pie-chart.d.cts +15 -0
  43. package/dist/pie-chart.d.ts +15 -0
  44. package/dist/pie-chart.js +4 -0
  45. package/dist/styles/chart.css +1 -0
  46. package/dist/styles/data-table.css +1 -304
  47. package/package.json +54 -3
  48. package/dist/index.cjs.map +0 -1
  49. package/dist/index.css.map +0 -1
  50. package/dist/index.js.map +0 -1
@@ -0,0 +1,137 @@
1
+ 'use strict';
2
+
3
+ var chunkGCZSXJAA_cjs = require('./chunk-GCZSXJAA.cjs');
4
+ var chunk6YAOO76S_cjs = require('./chunk-6YAOO76S.cjs');
5
+ var react = require('react');
6
+ var core = require('@entropix/core');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ var MARGINS = { top: 20, right: 20, bottom: 40, left: 50 };
10
+ function AreaChart({
11
+ data,
12
+ height = 300,
13
+ colors,
14
+ curved = false,
15
+ opacity = 0.3,
16
+ showGrid = true,
17
+ showTooltip = true,
18
+ showLegend = true,
19
+ xAxis,
20
+ yAxis,
21
+ className
22
+ }) {
23
+ const [hiddenSeries, setHiddenSeries] = react.useState(/* @__PURE__ */ new Set());
24
+ const [tooltip, setTooltip] = react.useState(null);
25
+ const containerRef = react.useRef(null);
26
+ const toggleSeries = react.useCallback((name) => {
27
+ setHiddenSeries((prev) => {
28
+ const next = new Set(prev);
29
+ if (next.has(name)) next.delete(name);
30
+ else next.add(name);
31
+ return next;
32
+ });
33
+ }, []);
34
+ const allSeries = core.normalizeChartData(data, colors ?? chunk6YAOO76S_cjs.CSS_CHART_COLORS);
35
+ const visibleSeries = allSeries.filter((s) => !hiddenSeries.has(s.name));
36
+ const { categories, yMin, yMax } = core.getDataExtent(visibleSeries);
37
+ const legendItems = allSeries.map((s) => ({
38
+ name: s.name,
39
+ color: s.color,
40
+ active: !hiddenSeries.has(s.name)
41
+ }));
42
+ const handlePointEnter = react.useCallback(
43
+ (point, seriesName, color) => {
44
+ if (!showTooltip) return;
45
+ setTooltip({
46
+ x: point.x + MARGINS.left,
47
+ y: point.y + MARGINS.top,
48
+ series: seriesName,
49
+ label: point.label,
50
+ value: point.value,
51
+ color
52
+ });
53
+ },
54
+ [showTooltip]
55
+ );
56
+ const handlePointLeave = react.useCallback(() => {
57
+ setTooltip(null);
58
+ }, []);
59
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: className ? `entropix-chart ${className}` : "entropix-chart", style: { position: "relative" }, children: [
60
+ /* @__PURE__ */ jsxRuntime.jsx(chunk6YAOO76S_cjs.ChartContainer, { height, children: (width, h) => {
61
+ const innerWidth = width - MARGINS.left - MARGINS.right;
62
+ const innerHeight = h - MARGINS.top - MARGINS.bottom;
63
+ if (innerWidth <= 0 || innerHeight <= 0) return null;
64
+ const bounds = core.niceBounds(yMin, yMax, yAxis?.tickCount ?? 5);
65
+ const yScale = core.createLinearScale(
66
+ [bounds.min, bounds.max],
67
+ [innerHeight, 0]
68
+ );
69
+ const xScale = core.createBandScale(categories, [0, innerWidth]);
70
+ const baselineY = yScale(bounds.min);
71
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${MARGINS.left}, ${MARGINS.top})`, children: [
72
+ yAxis?.show !== false && /* @__PURE__ */ jsxRuntime.jsx(
73
+ chunkGCZSXJAA_cjs.YAxis,
74
+ {
75
+ scale: yScale,
76
+ x: 0,
77
+ width: innerWidth,
78
+ showGrid,
79
+ formatter: yAxis?.formatter
80
+ }
81
+ ),
82
+ xAxis?.show !== false && /* @__PURE__ */ jsxRuntime.jsx(
83
+ chunkGCZSXJAA_cjs.XAxis,
84
+ {
85
+ scale: xScale,
86
+ y: innerHeight,
87
+ height: innerHeight,
88
+ formatter: xAxis?.formatter
89
+ }
90
+ ),
91
+ visibleSeries.map((series) => {
92
+ const points = core.computeLinePoints(series, xScale, yScale);
93
+ const areaD = core.describeAreaPath(points, baselineY, curved);
94
+ const lineD = core.describeLinePath(points, curved);
95
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
96
+ /* @__PURE__ */ jsxRuntime.jsx(
97
+ "path",
98
+ {
99
+ className: "entropix-chart__area",
100
+ d: areaD,
101
+ fill: series.color,
102
+ fillOpacity: opacity
103
+ }
104
+ ),
105
+ /* @__PURE__ */ jsxRuntime.jsx(
106
+ "path",
107
+ {
108
+ className: "entropix-chart__line",
109
+ d: lineD,
110
+ stroke: series.color
111
+ }
112
+ ),
113
+ points.map((pt, i) => /* @__PURE__ */ jsxRuntime.jsx(
114
+ "circle",
115
+ {
116
+ className: "entropix-chart__point",
117
+ cx: pt.x,
118
+ cy: pt.y,
119
+ r: 3,
120
+ fill: series.color,
121
+ onMouseEnter: () => handlePointEnter(pt, series.name, series.color),
122
+ onMouseLeave: handlePointLeave
123
+ },
124
+ i
125
+ ))
126
+ ] }, series.name);
127
+ })
128
+ ] });
129
+ } }),
130
+ showTooltip && /* @__PURE__ */ jsxRuntime.jsx(chunk6YAOO76S_cjs.ChartTooltip, { data: tooltip, containerRef }),
131
+ showLegend && allSeries.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(chunk6YAOO76S_cjs.ChartLegend, { items: legendItems, onToggle: toggleSeries })
132
+ ] });
133
+ }
134
+
135
+ exports.AreaChart = AreaChart;
136
+ //# sourceMappingURL=chunk-WOVSQALY.cjs.map
137
+ //# sourceMappingURL=chunk-WOVSQALY.cjs.map
@@ -0,0 +1,129 @@
1
+ import { YAxis, XAxis } from './chunk-4WXLJDQU.js';
2
+ import { CSS_CHART_COLORS, ChartContainer, ChartTooltip, ChartLegend } from './chunk-FQACLZYR.js';
3
+ import { useState, useRef, useCallback } from 'react';
4
+ import { normalizeChartData, getDataExtent, niceBounds, createLinearScale, createBandScale, computeBarGeometry } from '@entropix/core';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ var MARGINS = { top: 20, right: 20, bottom: 40, left: 50 };
8
+ function BarChart({
9
+ data,
10
+ height = 300,
11
+ colors,
12
+ stacked = false,
13
+ showGrid = true,
14
+ showTooltip = true,
15
+ showLegend = true,
16
+ xAxis,
17
+ yAxis,
18
+ className
19
+ }) {
20
+ const [hiddenSeries, setHiddenSeries] = useState(/* @__PURE__ */ new Set());
21
+ const [tooltip, setTooltip] = useState(null);
22
+ const containerRef = useRef(null);
23
+ const toggleSeries = useCallback((name) => {
24
+ setHiddenSeries((prev) => {
25
+ const next = new Set(prev);
26
+ if (next.has(name)) {
27
+ next.delete(name);
28
+ } else {
29
+ next.add(name);
30
+ }
31
+ return next;
32
+ });
33
+ }, []);
34
+ const allSeries = normalizeChartData(data, colors ?? CSS_CHART_COLORS);
35
+ const visibleSeries = allSeries.filter((s) => !hiddenSeries.has(s.name));
36
+ const { categories, yMin, yMax } = getDataExtent(visibleSeries);
37
+ const legendItems = allSeries.map((s) => ({
38
+ name: s.name,
39
+ color: s.color,
40
+ active: !hiddenSeries.has(s.name)
41
+ }));
42
+ const handleBarEnter = useCallback(
43
+ (rect, seriesName, event) => {
44
+ if (!showTooltip) return;
45
+ const svg = event.target.closest("svg");
46
+ if (!svg) return;
47
+ svg.getBoundingClientRect();
48
+ const container = containerRef.current;
49
+ if (!container) return;
50
+ container.getBoundingClientRect();
51
+ setTooltip({
52
+ x: rect.x + rect.width / 2 + MARGINS.left,
53
+ y: rect.y + MARGINS.top,
54
+ series: seriesName,
55
+ label: rect.label,
56
+ value: rect.value,
57
+ color: rect.color
58
+ });
59
+ },
60
+ [showTooltip]
61
+ );
62
+ const handleBarLeave = useCallback(() => {
63
+ setTooltip(null);
64
+ }, []);
65
+ return /* @__PURE__ */ jsxs("div", { ref: containerRef, className: className ? `entropix-chart ${className}` : "entropix-chart", style: { position: "relative" }, children: [
66
+ /* @__PURE__ */ jsx(ChartContainer, { height, children: (width, h) => {
67
+ const innerWidth = width - MARGINS.left - MARGINS.right;
68
+ const innerHeight = h - MARGINS.top - MARGINS.bottom;
69
+ if (innerWidth <= 0 || innerHeight <= 0) return null;
70
+ const bounds = niceBounds(yMin, yMax, yAxis?.tickCount ?? 5);
71
+ const yScale = createLinearScale(
72
+ [bounds.min, bounds.max],
73
+ [innerHeight, 0]
74
+ );
75
+ const xScale = createBandScale(categories, [0, innerWidth]);
76
+ const bars = computeBarGeometry(
77
+ visibleSeries,
78
+ xScale,
79
+ yScale,
80
+ innerHeight,
81
+ stacked
82
+ );
83
+ return /* @__PURE__ */ jsxs("g", { transform: `translate(${MARGINS.left}, ${MARGINS.top})`, children: [
84
+ yAxis?.show !== false && /* @__PURE__ */ jsx(
85
+ YAxis,
86
+ {
87
+ scale: yScale,
88
+ x: 0,
89
+ width: innerWidth,
90
+ showGrid,
91
+ formatter: yAxis?.formatter
92
+ }
93
+ ),
94
+ xAxis?.show !== false && /* @__PURE__ */ jsx(
95
+ XAxis,
96
+ {
97
+ scale: xScale,
98
+ y: innerHeight,
99
+ height: innerHeight,
100
+ formatter: xAxis?.formatter
101
+ }
102
+ ),
103
+ bars.map((rect, i) => {
104
+ const series = visibleSeries[rect.seriesIndex];
105
+ return /* @__PURE__ */ jsx(
106
+ "rect",
107
+ {
108
+ className: "entropix-chart__bar",
109
+ x: rect.x,
110
+ y: rect.y,
111
+ width: rect.width,
112
+ height: rect.height,
113
+ fill: rect.color,
114
+ onMouseEnter: (e) => handleBarEnter(rect, series?.name ?? "", e),
115
+ onMouseLeave: handleBarLeave
116
+ },
117
+ i
118
+ );
119
+ })
120
+ ] });
121
+ } }),
122
+ showTooltip && /* @__PURE__ */ jsx(ChartTooltip, { data: tooltip, containerRef }),
123
+ showLegend && allSeries.length > 1 && /* @__PURE__ */ jsx(ChartLegend, { items: legendItems, onToggle: toggleSeries })
124
+ ] });
125
+ }
126
+
127
+ export { BarChart };
128
+ //# sourceMappingURL=chunk-X7GZD7KZ.js.map
129
+ //# sourceMappingURL=chunk-X7GZD7KZ.js.map
@@ -0,0 +1,271 @@
1
+ import { createContext, useContext, useMemo } from 'react';
2
+ import { useTable } from '@entropix/core';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ // src/components/data-table/data-table.tsx
6
+ var DataTableContext = createContext(
7
+ null
8
+ );
9
+ function useDataTableContext() {
10
+ const ctx = useContext(DataTableContext);
11
+ if (!ctx) {
12
+ throw new Error(
13
+ "useDataTableContext must be used within a <DataTable /> component."
14
+ );
15
+ }
16
+ return ctx;
17
+ }
18
+ function mapA11yToAria(a) {
19
+ const result = {};
20
+ if (a.role) result.role = a.role;
21
+ if (a.label) result["aria-label"] = a.label;
22
+ if (a.labelledBy) result["aria-labelledby"] = a.labelledBy;
23
+ if (a.describedBy) result["aria-describedby"] = a.describedBy;
24
+ if (a.disabled != null) result["aria-disabled"] = a.disabled;
25
+ if (a.expanded != null) result["aria-expanded"] = a.expanded;
26
+ if (a.selected != null) result["aria-selected"] = a.selected;
27
+ if (a.checked != null) result["aria-checked"] = a.checked;
28
+ if (a.busy != null) result["aria-busy"] = a.busy;
29
+ if (a.hidden != null) result["aria-hidden"] = a.hidden;
30
+ if (a.tabIndex != null) result.tabIndex = a.tabIndex;
31
+ if (a.controls) result["aria-controls"] = a.controls;
32
+ if (a.orientation) result["aria-orientation"] = a.orientation;
33
+ if (a.required != null) result["aria-required"] = a.required;
34
+ if (a.invalid != null) result["aria-invalid"] = a.invalid;
35
+ return result;
36
+ }
37
+ function DataTable(props) {
38
+ const {
39
+ className,
40
+ emptyMessage = "No data",
41
+ renderCell,
42
+ stickyHeader = false,
43
+ ...tableOptions
44
+ } = props;
45
+ const table = useTable(tableOptions);
46
+ const {
47
+ columns,
48
+ getRowKey = (_, i) => String(i),
49
+ selectionMode = "none"
50
+ } = tableOptions;
51
+ const contextValue = useMemo(
52
+ () => ({
53
+ ...table,
54
+ columns,
55
+ getRowKey
56
+ }),
57
+ [table, columns, getRowKey]
58
+ );
59
+ const tableAriaProps = mapA11yToAria(table.getTableProps().accessibility);
60
+ const getSortDir = (colKey) => {
61
+ const s = table.sortState.find((st) => st.columnKey === colKey);
62
+ return s ? s.direction : "none";
63
+ };
64
+ const hasFilters = columns.some((c) => c.filterable);
65
+ return /* @__PURE__ */ jsx(DataTableContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs("div", { className: `entropix-datatable ${className ?? ""}`.trim(), children: [
66
+ /* @__PURE__ */ jsxs("table", { className: "entropix-datatable__table", ...tableAriaProps, children: [
67
+ /* @__PURE__ */ jsxs(
68
+ "thead",
69
+ {
70
+ className: "entropix-datatable__thead",
71
+ "data-sticky": stickyHeader ? "true" : void 0,
72
+ ...mapA11yToAria(table.getHeaderRowProps().accessibility),
73
+ children: [
74
+ hasFilters && /* @__PURE__ */ jsxs("tr", { className: "entropix-datatable__filter-row", children: [
75
+ selectionMode !== "none" && /* @__PURE__ */ jsx("th", { className: "entropix-datatable__th entropix-datatable__th--checkbox" }),
76
+ columns.map((col) => /* @__PURE__ */ jsx(
77
+ "th",
78
+ {
79
+ className: "entropix-datatable__th entropix-datatable__th--filter",
80
+ children: col.filterable ? /* @__PURE__ */ jsx(
81
+ "input",
82
+ {
83
+ type: "text",
84
+ className: "entropix-datatable__filter",
85
+ placeholder: `Filter ${col.header}...`,
86
+ value: table.columnFilters[col.key] ?? "",
87
+ onChange: (e) => table.setColumnFilter(col.key, e.target.value),
88
+ "aria-label": `Filter by ${col.header}`
89
+ }
90
+ ) : null
91
+ },
92
+ `filter-${col.key}`
93
+ ))
94
+ ] }),
95
+ /* @__PURE__ */ jsxs("tr", { className: "entropix-datatable__tr entropix-datatable__tr--header", children: [
96
+ selectionMode !== "none" && /* @__PURE__ */ jsx("th", { className: "entropix-datatable__th entropix-datatable__th--checkbox", children: selectionMode === "multi" && /* @__PURE__ */ jsx(
97
+ "input",
98
+ {
99
+ type: "checkbox",
100
+ className: "entropix-datatable__checkbox",
101
+ checked: table.isAllSelected,
102
+ ref: (el) => {
103
+ if (el) el.indeterminate = table.isIndeterminate;
104
+ },
105
+ onChange: table.toggleAllSelection,
106
+ "aria-label": "Select all rows"
107
+ }
108
+ ) }),
109
+ columns.map((col) => {
110
+ const headerProps = table.getHeaderCellProps(col.key);
111
+ const ariaProps = mapA11yToAria(headerProps.accessibility);
112
+ const sortDir = getSortDir(col.key);
113
+ return /* @__PURE__ */ jsx(
114
+ "th",
115
+ {
116
+ className: `entropix-datatable__th${col.sortable ? " entropix-datatable__th--sortable" : ""}`,
117
+ "data-sort": col.sortable ? sortDir : void 0,
118
+ onClick: headerProps.onAction,
119
+ onKeyDown: col.sortable ? (e) => {
120
+ if (e.key === "Enter" || e.key === " ") {
121
+ e.preventDefault();
122
+ headerProps.onAction?.();
123
+ }
124
+ } : void 0,
125
+ style: col.width ? {
126
+ width: typeof col.width === "number" ? `${col.width}px` : col.width
127
+ } : void 0,
128
+ ...ariaProps,
129
+ children: /* @__PURE__ */ jsxs("span", { className: "entropix-datatable__th-content", children: [
130
+ col.header,
131
+ col.sortable && sortDir !== "none" && /* @__PURE__ */ jsx(
132
+ "span",
133
+ {
134
+ className: "entropix-datatable__sort-icon",
135
+ "aria-hidden": "true",
136
+ children: sortDir === "asc" ? " \u25B2" : " \u25BC"
137
+ }
138
+ )
139
+ ] })
140
+ },
141
+ col.key
142
+ );
143
+ })
144
+ ] })
145
+ ]
146
+ }
147
+ ),
148
+ /* @__PURE__ */ jsx(
149
+ "tbody",
150
+ {
151
+ className: "entropix-datatable__tbody",
152
+ ...mapA11yToAria(table.getBodyProps().accessibility),
153
+ children: table.isLoading ? /* @__PURE__ */ jsx("tr", { className: "entropix-datatable__tr entropix-datatable__tr--loading", children: /* @__PURE__ */ jsx(
154
+ "td",
155
+ {
156
+ className: "entropix-datatable__td entropix-datatable__td--loading",
157
+ colSpan: columns.length + (selectionMode !== "none" ? 1 : 0),
158
+ children: /* @__PURE__ */ jsx("div", { className: "entropix-datatable__loading", children: "Loading..." })
159
+ }
160
+ ) }) : table.rows.length === 0 ? /* @__PURE__ */ jsx("tr", { className: "entropix-datatable__tr entropix-datatable__tr--empty", children: /* @__PURE__ */ jsx(
161
+ "td",
162
+ {
163
+ className: "entropix-datatable__td entropix-datatable__td--empty",
164
+ colSpan: columns.length + (selectionMode !== "none" ? 1 : 0),
165
+ children: /* @__PURE__ */ jsx("div", { className: "entropix-datatable__empty", children: emptyMessage })
166
+ }
167
+ ) }) : table.rows.map((row, i) => {
168
+ const globalIndex = table.page * table.pageSize + i;
169
+ const rowKey = getRowKey(row, globalIndex);
170
+ const rowProps = table.getRowProps(rowKey, i);
171
+ const isSelected = table.selectedKeys.has(rowKey);
172
+ return /* @__PURE__ */ jsxs(
173
+ "tr",
174
+ {
175
+ className: "entropix-datatable__tr",
176
+ "data-selected": isSelected ? "true" : void 0,
177
+ ...mapA11yToAria(rowProps.accessibility),
178
+ children: [
179
+ selectionMode !== "none" && /* @__PURE__ */ jsx("td", { className: "entropix-datatable__td entropix-datatable__td--checkbox", children: /* @__PURE__ */ jsx(
180
+ "input",
181
+ {
182
+ type: "checkbox",
183
+ className: "entropix-datatable__checkbox",
184
+ checked: isSelected,
185
+ onChange: () => table.toggleRowSelection(rowKey),
186
+ "aria-label": `Select row ${rowKey}`
187
+ }
188
+ ) }),
189
+ columns.map((col) => {
190
+ const cellValue = col.accessor ? col.accessor(row) : row[col.key];
191
+ return /* @__PURE__ */ jsx(
192
+ "td",
193
+ {
194
+ className: "entropix-datatable__td",
195
+ ...mapA11yToAria(
196
+ table.getCellProps(col.key, rowKey).accessibility
197
+ ),
198
+ children: renderCell ? renderCell(cellValue, row, col) : String(cellValue ?? "")
199
+ },
200
+ col.key
201
+ );
202
+ })
203
+ ]
204
+ },
205
+ rowKey
206
+ );
207
+ })
208
+ }
209
+ )
210
+ ] }),
211
+ table.pageCount > 1 && /* @__PURE__ */ jsxs(
212
+ "nav",
213
+ {
214
+ className: "entropix-datatable__pagination",
215
+ "aria-label": "Table pagination",
216
+ children: [
217
+ /* @__PURE__ */ jsx(
218
+ "button",
219
+ {
220
+ className: "entropix-datatable__pagination-btn",
221
+ onClick: table.firstPage,
222
+ disabled: !table.canPreviousPage,
223
+ "aria-label": "First page",
224
+ children: "\u27E8\u27E8"
225
+ }
226
+ ),
227
+ /* @__PURE__ */ jsx(
228
+ "button",
229
+ {
230
+ className: "entropix-datatable__pagination-btn",
231
+ onClick: table.previousPage,
232
+ disabled: !table.canPreviousPage,
233
+ "aria-label": "Previous page",
234
+ children: "\u27E8"
235
+ }
236
+ ),
237
+ /* @__PURE__ */ jsxs("span", { className: "entropix-datatable__pagination-info", children: [
238
+ "Page ",
239
+ table.page + 1,
240
+ " of ",
241
+ table.pageCount
242
+ ] }),
243
+ /* @__PURE__ */ jsx(
244
+ "button",
245
+ {
246
+ className: "entropix-datatable__pagination-btn",
247
+ onClick: table.nextPage,
248
+ disabled: !table.canNextPage,
249
+ "aria-label": "Next page",
250
+ children: "\u27E9"
251
+ }
252
+ ),
253
+ /* @__PURE__ */ jsx(
254
+ "button",
255
+ {
256
+ className: "entropix-datatable__pagination-btn",
257
+ onClick: table.lastPage,
258
+ disabled: !table.canNextPage,
259
+ "aria-label": "Last page",
260
+ children: "\u27E9\u27E9"
261
+ }
262
+ )
263
+ ]
264
+ }
265
+ )
266
+ ] }) });
267
+ }
268
+
269
+ export { DataTable, DataTableContext, useDataTableContext };
270
+ //# sourceMappingURL=chunk-YINCJQN6.js.map
271
+ //# sourceMappingURL=chunk-YINCJQN6.js.map
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var chunkSDCNTA7E_cjs = require('./chunk-SDCNTA7E.cjs');
4
+
5
+
6
+
7
+ Object.defineProperty(exports, "DataTable", {
8
+ enumerable: true,
9
+ get: function () { return chunkSDCNTA7E_cjs.DataTable; }
10
+ });
11
+ Object.defineProperty(exports, "DataTableContext", {
12
+ enumerable: true,
13
+ get: function () { return chunkSDCNTA7E_cjs.DataTableContext; }
14
+ });
15
+ Object.defineProperty(exports, "useDataTableContext", {
16
+ enumerable: true,
17
+ get: function () { return chunkSDCNTA7E_cjs.useDataTableContext; }
18
+ });
19
+ //# sourceMappingURL=data-table.cjs.map
20
+ //# sourceMappingURL=data-table.cjs.map