@rentnerkev/table 0.0.0-stage → 0.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 (114) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +158 -2
  3. package/dist/index.d.ts +17 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +13 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/lib/Messages/tableMessages.d.ts +4 -0
  8. package/dist/lib/Messages/tableMessages.d.ts.map +1 -0
  9. package/dist/lib/Messages/tableMessages.js +81 -0
  10. package/dist/lib/Messages/tableMessages.js.map +1 -0
  11. package/dist/lib/Table/filters.d.ts +20 -0
  12. package/dist/lib/Table/filters.d.ts.map +1 -0
  13. package/dist/lib/Table/filters.js +102 -0
  14. package/dist/lib/Table/filters.js.map +1 -0
  15. package/dist/lib/Table/presentation.d.ts +7 -0
  16. package/dist/lib/Table/presentation.d.ts.map +1 -0
  17. package/dist/lib/Table/presentation.js +63 -0
  18. package/dist/lib/Table/presentation.js.map +1 -0
  19. package/dist/lib/Table/table.d.ts +87 -0
  20. package/dist/lib/Table/table.d.ts.map +1 -0
  21. package/dist/lib/Table/table.js +28 -0
  22. package/dist/lib/Table/table.js.map +1 -0
  23. package/dist/shared/Table/Components/DataTable.d.ts +4 -0
  24. package/dist/shared/Table/Components/DataTable.d.ts.map +1 -0
  25. package/dist/shared/Table/Components/DataTable.js +13 -0
  26. package/dist/shared/Table/Components/DataTable.js.map +1 -0
  27. package/dist/shared/Table/Components/DataTablePagination.d.ts +4 -0
  28. package/dist/shared/Table/Components/DataTablePagination.d.ts.map +1 -0
  29. package/dist/shared/Table/Components/DataTablePagination.js +10 -0
  30. package/dist/shared/Table/Components/DataTablePagination.js.map +1 -0
  31. package/dist/shared/Table/Components/DataTableToolbar.d.ts +4 -0
  32. package/dist/shared/Table/Components/DataTableToolbar.d.ts.map +1 -0
  33. package/dist/shared/Table/Components/DataTableToolbar.js +19 -0
  34. package/dist/shared/Table/Components/DataTableToolbar.js.map +1 -0
  35. package/dist/shared/Table/Components/Table.d.ts +4 -0
  36. package/dist/shared/Table/Components/Table.d.ts.map +1 -0
  37. package/dist/shared/Table/Components/Table.js +17 -0
  38. package/dist/shared/Table/Components/Table.js.map +1 -0
  39. package/dist/shared/Table/Components/TableBody.d.ts +4 -0
  40. package/dist/shared/Table/Components/TableBody.d.ts.map +1 -0
  41. package/dist/shared/Table/Components/TableBody.js +17 -0
  42. package/dist/shared/Table/Components/TableBody.js.map +1 -0
  43. package/dist/shared/Table/Components/TableButton.d.ts +3 -0
  44. package/dist/shared/Table/Components/TableButton.d.ts.map +1 -0
  45. package/dist/shared/Table/Components/TableButton.js +5 -0
  46. package/dist/shared/Table/Components/TableButton.js.map +1 -0
  47. package/dist/shared/Table/Components/TableCheckbox.d.ts +3 -0
  48. package/dist/shared/Table/Components/TableCheckbox.d.ts.map +1 -0
  49. package/dist/shared/Table/Components/TableCheckbox.js +8 -0
  50. package/dist/shared/Table/Components/TableCheckbox.js.map +1 -0
  51. package/dist/shared/Table/Components/TableColumnFilter.d.ts +4 -0
  52. package/dist/shared/Table/Components/TableColumnFilter.d.ts.map +1 -0
  53. package/dist/shared/Table/Components/TableColumnFilter.js +23 -0
  54. package/dist/shared/Table/Components/TableColumnFilter.js.map +1 -0
  55. package/dist/shared/Table/Components/TableDateRangeFilter.d.ts +3 -0
  56. package/dist/shared/Table/Components/TableDateRangeFilter.d.ts.map +1 -0
  57. package/dist/shared/Table/Components/TableDateRangeFilter.js +15 -0
  58. package/dist/shared/Table/Components/TableDateRangeFilter.js.map +1 -0
  59. package/dist/shared/Table/Components/TableHead.d.ts +4 -0
  60. package/dist/shared/Table/Components/TableHead.d.ts.map +1 -0
  61. package/dist/shared/Table/Components/TableHead.js +11 -0
  62. package/dist/shared/Table/Components/TableHead.js.map +1 -0
  63. package/dist/shared/Table/Components/TableProvider.d.ts +3 -0
  64. package/dist/shared/Table/Components/TableProvider.d.ts.map +1 -0
  65. package/dist/shared/Table/Components/TableProvider.js +9 -0
  66. package/dist/shared/Table/Components/TableProvider.js.map +1 -0
  67. package/dist/shared/Table/Components/TableRowActions.d.ts +3 -0
  68. package/dist/shared/Table/Components/TableRowActions.d.ts.map +1 -0
  69. package/dist/shared/Table/Components/TableRowActions.js +9 -0
  70. package/dist/shared/Table/Components/TableRowActions.js.map +1 -0
  71. package/dist/shared/Table/Components/TableStatus.d.ts +3 -0
  72. package/dist/shared/Table/Components/TableStatus.d.ts.map +1 -0
  73. package/dist/shared/Table/Components/TableStatus.js +18 -0
  74. package/dist/shared/Table/Components/TableStatus.js.map +1 -0
  75. package/dist/shared/Table/Components/TableSurface.d.ts +4 -0
  76. package/dist/shared/Table/Components/TableSurface.d.ts.map +1 -0
  77. package/dist/shared/Table/Components/TableSurface.js +11 -0
  78. package/dist/shared/Table/Components/TableSurface.js.map +1 -0
  79. package/dist/shared/Table/Hooks/useDataTableLogic.d.ts +4 -0
  80. package/dist/shared/Table/Hooks/useDataTableLogic.d.ts.map +1 -0
  81. package/dist/shared/Table/Hooks/useDataTableLogic.js +182 -0
  82. package/dist/shared/Table/Hooks/useDataTableLogic.js.map +1 -0
  83. package/dist/shared/Table/Hooks/useTableCheckboxLogic.d.ts +3 -0
  84. package/dist/shared/Table/Hooks/useTableCheckboxLogic.d.ts.map +1 -0
  85. package/dist/shared/Table/Hooks/useTableCheckboxLogic.js +10 -0
  86. package/dist/shared/Table/Hooks/useTableCheckboxLogic.js.map +1 -0
  87. package/dist/shared/Table/Hooks/useTableLogic.d.ts +4 -0
  88. package/dist/shared/Table/Hooks/useTableLogic.d.ts.map +1 -0
  89. package/dist/shared/Table/Hooks/useTableLogic.js +21 -0
  90. package/dist/shared/Table/Hooks/useTableLogic.js.map +1 -0
  91. package/dist/shared/Table/Hooks/useTableOverlay.d.ts +3 -0
  92. package/dist/shared/Table/Hooks/useTableOverlay.d.ts.map +1 -0
  93. package/dist/shared/Table/Hooks/useTableOverlay.js +6 -0
  94. package/dist/shared/Table/Hooks/useTableOverlay.js.map +1 -0
  95. package/dist/shared/Table/Types/column.types.d.ts +35 -0
  96. package/dist/shared/Table/Types/column.types.d.ts.map +1 -0
  97. package/dist/shared/Table/Types/column.types.js +2 -0
  98. package/dist/shared/Table/Types/column.types.js.map +1 -0
  99. package/dist/shared/Table/Types/dataTable.types.d.ts +197 -0
  100. package/dist/shared/Table/Types/dataTable.types.d.ts.map +1 -0
  101. package/dist/shared/Table/Types/dataTable.types.js +2 -0
  102. package/dist/shared/Table/Types/dataTable.types.js.map +1 -0
  103. package/dist/shared/Table/Types/table.types.d.ts +77 -0
  104. package/dist/shared/Table/Types/table.types.d.ts.map +1 -0
  105. package/dist/shared/Table/Types/table.types.js +2 -0
  106. package/dist/shared/Table/Types/table.types.js.map +1 -0
  107. package/dist/types.d.ts +5 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +2 -0
  110. package/dist/types.js.map +1 -0
  111. package/docs/usage.md +130 -0
  112. package/package.json +109 -5
  113. package/tailwind.css +7 -0
  114. package/theme.css +40 -0
@@ -0,0 +1,87 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { TableColumnMeta } from '../../shared/Table/Types/column.types.ts';
3
+ export declare const rentnerTableFeatures: {
4
+ columnMeta: TableColumnMeta;
5
+ columnSizingFeature: import("@tanstack/react-table").TableFeature;
6
+ columnVisibilityFeature: import("@tanstack/react-table").TableFeature;
7
+ columnFilteringFeature: import("@tanstack/react-table").TableFeature;
8
+ globalFilteringFeature: import("@tanstack/react-table").TableFeature;
9
+ filteredRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
10
+ filterFns: {
11
+ text: ((row: {
12
+ getValue: (id: string) => unknown;
13
+ }, columnId: string, value: unknown) => boolean) & {
14
+ autoRemove: (value: unknown) => boolean;
15
+ resolveFilterValue: (value: unknown) => unknown;
16
+ };
17
+ equals: ((row: {
18
+ getValue: (id: string) => unknown;
19
+ }, columnId: string, value: unknown) => boolean) & {
20
+ autoRemove: (value: unknown) => value is "" | null | undefined;
21
+ };
22
+ dateRange: ((row: {
23
+ getValue: (id: string) => unknown;
24
+ }, columnId: string, value: unknown) => boolean) & {
25
+ resolveFilterValue: (value: unknown) => unknown;
26
+ autoRemove: (value: unknown) => boolean;
27
+ };
28
+ };
29
+ rowPaginationFeature: import("@tanstack/react-table").TableFeature;
30
+ paginatedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
31
+ rowSelectionFeature: import("@tanstack/react-table").TableFeature;
32
+ rowExpandingFeature: import("@tanstack/react-table").TableFeature;
33
+ expandedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
34
+ rowSortingFeature: import("@tanstack/react-table").TableFeature;
35
+ sortedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
36
+ sortFns: {
37
+ alphanumeric: import("@tanstack/react-table").CreatedSortFn<any, any>;
38
+ alphanumericCaseSensitive: import("@tanstack/react-table").CreatedSortFn<any, any>;
39
+ basic: import("@tanstack/react-table").CreatedSortFn<any, any>;
40
+ datetime: import("@tanstack/react-table").CreatedSortFn<any, any>;
41
+ text: import("@tanstack/react-table").CreatedSortFn<any, any>;
42
+ textCaseSensitive: import("@tanstack/react-table").CreatedSortFn<any, any>;
43
+ };
44
+ };
45
+ export declare function createTableColumnHelper<TData extends RowData>(): import("@tanstack/react-table").ColumnHelper<{
46
+ columnMeta: TableColumnMeta;
47
+ columnSizingFeature: import("@tanstack/react-table").TableFeature;
48
+ columnVisibilityFeature: import("@tanstack/react-table").TableFeature;
49
+ columnFilteringFeature: import("@tanstack/react-table").TableFeature;
50
+ globalFilteringFeature: import("@tanstack/react-table").TableFeature;
51
+ filteredRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
52
+ filterFns: {
53
+ text: ((row: {
54
+ getValue: (id: string) => unknown;
55
+ }, columnId: string, value: unknown) => boolean) & {
56
+ autoRemove: (value: unknown) => boolean;
57
+ resolveFilterValue: (value: unknown) => unknown;
58
+ };
59
+ equals: ((row: {
60
+ getValue: (id: string) => unknown;
61
+ }, columnId: string, value: unknown) => boolean) & {
62
+ autoRemove: (value: unknown) => value is "" | null | undefined;
63
+ };
64
+ dateRange: ((row: {
65
+ getValue: (id: string) => unknown;
66
+ }, columnId: string, value: unknown) => boolean) & {
67
+ resolveFilterValue: (value: unknown) => unknown;
68
+ autoRemove: (value: unknown) => boolean;
69
+ };
70
+ };
71
+ rowPaginationFeature: import("@tanstack/react-table").TableFeature;
72
+ paginatedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
73
+ rowSelectionFeature: import("@tanstack/react-table").TableFeature;
74
+ rowExpandingFeature: import("@tanstack/react-table").TableFeature;
75
+ expandedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
76
+ rowSortingFeature: import("@tanstack/react-table").TableFeature;
77
+ sortedRowModel: (table: import("@tanstack/react-table").Table<any, any>) => () => import("@tanstack/react-table").RowModel<any, any>;
78
+ sortFns: {
79
+ alphanumeric: import("@tanstack/react-table").CreatedSortFn<any, any>;
80
+ alphanumericCaseSensitive: import("@tanstack/react-table").CreatedSortFn<any, any>;
81
+ basic: import("@tanstack/react-table").CreatedSortFn<any, any>;
82
+ datetime: import("@tanstack/react-table").CreatedSortFn<any, any>;
83
+ text: import("@tanstack/react-table").CreatedSortFn<any, any>;
84
+ textCaseSensitive: import("@tanstack/react-table").CreatedSortFn<any, any>;
85
+ };
86
+ }, TData>;
87
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/lib/Table/table.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAA;AAS/E,eAAO,MAAM,oBAAoB;;;;;;;;QAQzB,IAAI;;;;;;QACJ,MAAM;;;;;QACN,SAAS;;;;;;;;;;;;;;;;;;;;;;CAUf,CAAA;AAEF,wBAAgB,uBAAuB,CAAC,KAAK,SAAS,OAAO;;;;;;;;QAdrD,IAAI;;;;;;QACJ,MAAM;;;;;QACN,SAAS;;;;;;;;;;;;;;;;;;;;;;UAchB"}
@@ -0,0 +1,28 @@
1
+ import { createColumnHelper, columnFilteringFeature, columnSizingFeature, columnVisibilityFeature, createExpandedRowModel, createFilteredRowModel, createPaginatedRowModel, createSortedRowModel, globalFilteringFeature, rowExpandingFeature, rowPaginationFeature, rowSelectionFeature, rowSortingFeature, sortFns, tableFeatures, } from '@tanstack/react-table';
2
+ import { tableDateRangeFilter, tableEqualsFilter, tableTextFilter, } from './filters.js';
3
+ const columnMeta = {};
4
+ export const rentnerTableFeatures = tableFeatures({
5
+ columnMeta,
6
+ columnSizingFeature,
7
+ columnVisibilityFeature,
8
+ columnFilteringFeature,
9
+ globalFilteringFeature,
10
+ filteredRowModel: createFilteredRowModel(),
11
+ filterFns: {
12
+ text: tableTextFilter,
13
+ equals: tableEqualsFilter,
14
+ dateRange: tableDateRangeFilter,
15
+ },
16
+ rowPaginationFeature,
17
+ paginatedRowModel: createPaginatedRowModel(),
18
+ rowSelectionFeature,
19
+ rowExpandingFeature,
20
+ expandedRowModel: createExpandedRowModel(),
21
+ rowSortingFeature,
22
+ sortedRowModel: createSortedRowModel(),
23
+ sortFns,
24
+ });
25
+ export function createTableColumnHelper() {
26
+ return createColumnHelper();
27
+ }
28
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/lib/Table/table.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,OAAO,EACP,aAAa,GAChB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACH,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,GAClB,MAAM,cAAc,CAAA;AAErB,MAAM,UAAU,GAAoB,EAAE,CAAA;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC;IAC9C,UAAU;IACV,mBAAmB;IACnB,uBAAuB;IACvB,sBAAsB;IACtB,sBAAsB;IACtB,gBAAgB,EAAE,sBAAsB,EAAE;IAC1C,SAAS,EAAE;QACP,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,iBAAiB;QACzB,SAAS,EAAE,oBAAoB;KAClC;IACD,oBAAoB;IACpB,iBAAiB,EAAE,uBAAuB,EAAE;IAC5C,mBAAmB;IACnB,mBAAmB;IACnB,gBAAgB,EAAE,sBAAsB,EAAE;IAC1C,iBAAiB;IACjB,cAAc,EAAE,oBAAoB,EAAE;IACtC,OAAO;CACV,CAAC,CAAA;AAEF,MAAM,UAAU,uBAAuB;IACnC,OAAO,kBAAkB,EAAsC,CAAA;AACnE,CAAC","sourcesContent":["import {\n createColumnHelper,\n columnFilteringFeature,\n columnSizingFeature,\n columnVisibilityFeature,\n createExpandedRowModel,\n createFilteredRowModel,\n createPaginatedRowModel,\n createSortedRowModel,\n globalFilteringFeature,\n rowExpandingFeature,\n rowPaginationFeature,\n rowSelectionFeature,\n rowSortingFeature,\n sortFns,\n tableFeatures,\n} from '@tanstack/react-table'\nimport type { RowData } from '@tanstack/react-table'\nimport type { TableColumnMeta } from '../../shared/Table/Types/column.types.ts'\nimport {\n tableDateRangeFilter,\n tableEqualsFilter,\n tableTextFilter,\n} from './filters.ts'\n\nconst columnMeta: TableColumnMeta = {}\n\nexport const rentnerTableFeatures = tableFeatures({\n columnMeta,\n columnSizingFeature,\n columnVisibilityFeature,\n columnFilteringFeature,\n globalFilteringFeature,\n filteredRowModel: createFilteredRowModel(),\n filterFns: {\n text: tableTextFilter,\n equals: tableEqualsFilter,\n dateRange: tableDateRangeFilter,\n },\n rowPaginationFeature,\n paginatedRowModel: createPaginatedRowModel(),\n rowSelectionFeature,\n rowExpandingFeature,\n expandedRowModel: createExpandedRowModel(),\n rowSortingFeature,\n sortedRowModel: createSortedRowModel(),\n sortFns,\n})\n\nexport function createTableColumnHelper<TData extends RowData>() {\n return createColumnHelper<typeof rentnerTableFeatures, TData>()\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { DataTableProps } from '../Types/dataTable.types.ts';
3
+ export declare function DataTable<TData extends RowData>(props: DataTableProps<TData>): import("react").JSX.Element;
4
+ //# sourceMappingURL=DataTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/DataTable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAOpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEjE,wBAAgB,SAAS,CAAC,KAAK,SAAS,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,+BAqF5E"}
@@ -0,0 +1,13 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useDataTableLogic } from '../Hooks/useDataTableLogic.js';
4
+ import { DataTableToolbar } from './DataTableToolbar.js';
5
+ import { DataTablePagination } from './DataTablePagination.js';
6
+ import { TableColumnFilter } from './TableColumnFilter.js';
7
+ import { TableSurface } from './TableSurface.js';
8
+ import { TableProvider } from './TableProvider.js';
9
+ export function DataTable(props) {
10
+ const { table, state, handler, refs: { root }, } = useDataTableLogic(props);
11
+ return (_jsx(TableProvider, { portalContainer: state.portalContainer, children: _jsxs("section", { ref: root, "data-rentner-data-table": "", "aria-labelledby": `${state.id}-title`, className: `min-w-0 rounded-rentner-control border border-rentner-border bg-rentner-surface text-rentner-foreground ${props.classNames?.root ?? ''} ${props.className ?? ''}`, children: [_jsx(DataTableToolbar, { table: table, state: state, handler: handler, options: props, className: props.classNames?.toolbar }), _jsx(TableSurface, { table: table, view: state, "aria-labelledby": `${state.id}-title`, embedded: true, detailedStates: true, size: props.size, striped: props.striped ?? true, stickyHeader: props.stickyHeader, classNames: props.classNames, selection: state, onSelectPage: handler.handleSelectPage, getRowLabel: props.getRowLabel, renderExpandedRow: props.renderExpandedRow, rowClassName: props.rowClassName, detailsId: `${state.id}-details`, isLoading: props.isLoading, emptyState: props.emptyState, loadingState: props.loadingState, noResultsState: props.noResultsState, hasFilters: state.hasFilters, error: props.error, onRetry: props.onRetry, onResetFilters: handler.handleResetFilters, filters: props.columnFilters !== false && state.showFilters ? (_jsxs("tr", { id: `${state.id}-filters`, children: [state.selectionEnabled && (_jsx("td", { "aria-hidden": "true", className: "w-12" })), props.renderExpandedRow && (_jsx("td", { "aria-hidden": "true", className: "w-10" })), state.filterColumns.map((column) => (_jsx("td", { className: "border-t border-rentner-border px-3 py-3", children: column.getCanFilter() && (_jsx(TableColumnFilter, { column: column, locale: props.locale ?? 'en', messages: state.messages, disabled: props.isLoading })) }, column.id)))] })) : null }), _jsx(DataTablePagination, { state: state, handler: handler, locale: props.locale ?? 'en', pagination: props.pagination !== false, disabled: props.isLoading, className: props.classNames?.footer })] }) }));
12
+ }
13
+ //# sourceMappingURL=DataTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTable.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/DataTable.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport type { RowData } from '@tanstack/react-table'\nimport { useDataTableLogic } from '../Hooks/useDataTableLogic.ts'\nimport { DataTableToolbar } from './DataTableToolbar.tsx'\nimport { DataTablePagination } from './DataTablePagination.tsx'\nimport { TableColumnFilter } from './TableColumnFilter.tsx'\nimport { TableSurface } from './TableSurface.tsx'\nimport { TableProvider } from './TableProvider.tsx'\nimport type { DataTableProps } from '../Types/dataTable.types.ts'\n\nexport function DataTable<TData extends RowData>(props: DataTableProps<TData>) {\n const {\n table,\n state,\n handler,\n refs: { root },\n } = useDataTableLogic(props)\n return (\n <TableProvider portalContainer={state.portalContainer}>\n <section\n ref={root}\n data-rentner-data-table=\"\"\n aria-labelledby={`${state.id}-title`}\n className={`min-w-0 rounded-rentner-control border border-rentner-border bg-rentner-surface text-rentner-foreground ${props.classNames?.root ?? ''} ${props.className ?? ''}`}\n >\n <DataTableToolbar\n table={table}\n state={state}\n handler={handler}\n options={props}\n className={props.classNames?.toolbar}\n />\n <TableSurface\n table={table}\n view={state}\n aria-labelledby={`${state.id}-title`}\n embedded\n detailedStates\n size={props.size}\n striped={props.striped ?? true}\n stickyHeader={props.stickyHeader}\n classNames={props.classNames}\n selection={state}\n onSelectPage={handler.handleSelectPage}\n getRowLabel={props.getRowLabel}\n renderExpandedRow={props.renderExpandedRow}\n rowClassName={props.rowClassName}\n detailsId={`${state.id}-details`}\n isLoading={props.isLoading}\n emptyState={props.emptyState}\n loadingState={props.loadingState}\n noResultsState={props.noResultsState}\n hasFilters={state.hasFilters}\n error={props.error}\n onRetry={props.onRetry}\n onResetFilters={handler.handleResetFilters}\n filters={\n props.columnFilters !== false && state.showFilters ? (\n <tr id={`${state.id}-filters`}>\n {state.selectionEnabled && (\n <td aria-hidden=\"true\" className=\"w-12\" />\n )}\n {props.renderExpandedRow && (\n <td aria-hidden=\"true\" className=\"w-10\" />\n )}\n {state.filterColumns.map((column) => (\n <td\n key={column.id}\n className=\"border-t border-rentner-border px-3 py-3\"\n >\n {column.getCanFilter() && (\n <TableColumnFilter\n column={column}\n locale={props.locale ?? 'en'}\n messages={state.messages}\n disabled={props.isLoading}\n />\n )}\n </td>\n ))}\n </tr>\n ) : null\n }\n />\n <DataTablePagination\n state={state}\n handler={handler}\n locale={props.locale ?? 'en'}\n pagination={props.pagination !== false}\n disabled={props.isLoading}\n className={props.classNames?.footer}\n />\n </section>\n </TableProvider>\n )\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { DataTablePaginationProps } from '../Types/dataTable.types.ts';
3
+ export declare function DataTablePagination<TData extends RowData>({ state, handler, locale, pagination, disabled, className, }: DataTablePaginationProps<TData>): import("react").JSX.Element;
4
+ //# sourceMappingURL=DataTablePagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTablePagination.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/DataTablePagination.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AASpD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AAE3E,wBAAgB,mBAAmB,CAAC,KAAK,SAAS,OAAO,EAAE,EACvD,KAAK,EACL,OAAO,EACP,MAAM,EACN,UAAU,EACV,QAAQ,EACR,SAAc,GACjB,EAAE,wBAAwB,CAAC,KAAK,CAAC,+BA+FjC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { CustomSelect } from '@rentnerkev/select/select';
3
+ import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, } from 'lucide-react';
4
+ import { TableButton } from './TableButton.js';
5
+ export function DataTablePagination({ state, handler, locale, pagination, disabled, className = '', }) {
6
+ return (_jsxs("div", { className: `flex flex-col gap-4 border-t border-rentner-border bg-rentner-control/15 px-5 py-4 text-xs text-rentner-muted lg:flex-row lg:items-center lg:justify-between ${className}`, children: [_jsx("p", { className: "tabular-nums", "aria-live": "polite", children: state.messages.rowRange(state.firstRow, state.lastRow, state.totalRows) }), pagination && (_jsxs("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { id: `${state.id}-page-size`, children: state.messages.rowsPerPage }), _jsx(CustomSelect, { options: state.pageSizes, value: state.pageSize, onValueChange: handler.handlePageSize, "aria-labelledby": `${state.id}-page-size`, controlSize: "sm", locale: locale, disabled: disabled, className: "min-w-20" })] }), _jsxs("nav", { "aria-label": state.messages.pageInfo(state.page, state.totalPages), className: "flex items-center gap-1.5", children: [_jsx(TableButton, { iconOnly: true, "aria-label": state.messages.firstPage, onClick: handler.handleFirstPage, disabled: disabled || !state.canPreviousPage, children: _jsx(ChevronsLeft, { "aria-hidden": "true", className: "size-4" }) }), _jsx(TableButton, { iconOnly: true, "aria-label": state.messages.previousPage, onClick: handler.handlePreviousPage, disabled: disabled || !state.canPreviousPage, children: _jsx(ChevronLeft, { "aria-hidden": "true", className: "size-4" }) }), _jsx("span", { className: "min-w-24 px-2 text-center font-medium tabular-nums text-rentner-foreground", children: state.messages.pageInfo(state.page, state.totalPages) }), _jsx(TableButton, { iconOnly: true, "aria-label": state.messages.nextPage, onClick: handler.handleNextPage, disabled: disabled || !state.canNextPage, children: _jsx(ChevronRight, { "aria-hidden": "true", className: "size-4" }) }), _jsx(TableButton, { iconOnly: true, "aria-label": state.messages.lastPage, onClick: handler.handleLastPage, disabled: disabled ||
7
+ state.totalPages === null ||
8
+ !state.canNextPage, children: _jsx(ChevronsRight, { "aria-hidden": "true", className: "size-4" }) })] })] }))] }));
9
+ }
10
+ //# sourceMappingURL=DataTablePagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTablePagination.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/DataTablePagination.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EACH,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,GAChB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAG/C,MAAM,UAAU,mBAAmB,CAAwB,EACvD,KAAK,EACL,OAAO,EACP,MAAM,EACN,UAAU,EACV,QAAQ,EACR,SAAS,GAAG,EAAE,GACgB;IAC9B,OAAO,CACH,eACI,SAAS,EAAE,gKAAgK,SAAS,EAAE,aAEtL,YAAG,SAAS,EAAC,cAAc,eAAW,QAAQ,YACzC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CACpB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,SAAS,CAClB,GACD,EACH,UAAU,IAAI,CACX,eAAK,SAAS,EAAC,6CAA6C,aACxD,eAAK,SAAS,EAAC,yBAAyB,aACpC,eAAM,EAAE,EAAE,GAAG,KAAK,CAAC,EAAE,YAAY,YAC5B,KAAK,CAAC,QAAQ,CAAC,WAAW,GACxB,EACP,KAAC,YAAY,IACT,OAAO,EAAE,KAAK,CAAC,SAAS,EACxB,KAAK,EAAE,KAAK,CAAC,QAAQ,EACrB,aAAa,EAAE,OAAO,CAAC,cAAc,qBACpB,GAAG,KAAK,CAAC,EAAE,YAAY,EACxC,WAAW,EAAC,IAAI,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,UAAU,GACtB,IACA,EACN,6BACgB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAC/B,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,CACnB,EACD,SAAS,EAAC,2BAA2B,aAErC,KAAC,WAAW,IACR,QAAQ,sBACI,KAAK,CAAC,QAAQ,CAAC,SAAS,EACpC,OAAO,EAAE,OAAO,CAAC,eAAe,EAChC,QAAQ,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,eAAe,YAE5C,KAAC,YAAY,mBACG,MAAM,EAClB,SAAS,EAAC,QAAQ,GACpB,GACQ,EACd,KAAC,WAAW,IACR,QAAQ,sBACI,KAAK,CAAC,QAAQ,CAAC,YAAY,EACvC,OAAO,EAAE,OAAO,CAAC,kBAAkB,EACnC,QAAQ,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,eAAe,YAE5C,KAAC,WAAW,mBACI,MAAM,EAClB,SAAS,EAAC,QAAQ,GACpB,GACQ,EACd,eAAM,SAAS,EAAC,4EAA4E,YACvF,KAAK,CAAC,QAAQ,CAAC,QAAQ,CACpB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,UAAU,CACnB,GACE,EACP,KAAC,WAAW,IACR,QAAQ,sBACI,KAAK,CAAC,QAAQ,CAAC,QAAQ,EACnC,OAAO,EAAE,OAAO,CAAC,cAAc,EAC/B,QAAQ,EAAE,QAAQ,IAAI,CAAC,KAAK,CAAC,WAAW,YAExC,KAAC,YAAY,mBACG,MAAM,EAClB,SAAS,EAAC,QAAQ,GACpB,GACQ,EACd,KAAC,WAAW,IACR,QAAQ,sBACI,KAAK,CAAC,QAAQ,CAAC,QAAQ,EACnC,OAAO,EAAE,OAAO,CAAC,cAAc,EAC/B,QAAQ,EACJ,QAAQ;oCACR,KAAK,CAAC,UAAU,KAAK,IAAI;oCACzB,CAAC,KAAK,CAAC,WAAW,YAGtB,KAAC,aAAa,mBACE,MAAM,EAClB,SAAS,EAAC,QAAQ,GACpB,GACQ,IACZ,IACJ,CACT,IACC,CACT,CAAA;AACL,CAAC","sourcesContent":["import type { RowData } from '@tanstack/react-table'\nimport { CustomSelect } from '@rentnerkev/select/select'\nimport {\n ChevronLeft,\n ChevronRight,\n ChevronsLeft,\n ChevronsRight,\n} from 'lucide-react'\nimport { TableButton } from './TableButton.tsx'\nimport type { DataTablePaginationProps } from '../Types/dataTable.types.ts'\n\nexport function DataTablePagination<TData extends RowData>({\n state,\n handler,\n locale,\n pagination,\n disabled,\n className = '',\n}: DataTablePaginationProps<TData>) {\n return (\n <div\n className={`flex flex-col gap-4 border-t border-rentner-border bg-rentner-control/15 px-5 py-4 text-xs text-rentner-muted lg:flex-row lg:items-center lg:justify-between ${className}`}\n >\n <p className=\"tabular-nums\" aria-live=\"polite\">\n {state.messages.rowRange(\n state.firstRow,\n state.lastRow,\n state.totalRows,\n )}\n </p>\n {pagination && (\n <div className=\"flex flex-wrap items-center gap-x-6 gap-y-3\">\n <div className=\"flex items-center gap-2\">\n <span id={`${state.id}-page-size`}>\n {state.messages.rowsPerPage}\n </span>\n <CustomSelect\n options={state.pageSizes}\n value={state.pageSize}\n onValueChange={handler.handlePageSize}\n aria-labelledby={`${state.id}-page-size`}\n controlSize=\"sm\"\n locale={locale}\n disabled={disabled}\n className=\"min-w-20\"\n />\n </div>\n <nav\n aria-label={state.messages.pageInfo(\n state.page,\n state.totalPages,\n )}\n className=\"flex items-center gap-1.5\"\n >\n <TableButton\n iconOnly\n aria-label={state.messages.firstPage}\n onClick={handler.handleFirstPage}\n disabled={disabled || !state.canPreviousPage}\n >\n <ChevronsLeft\n aria-hidden=\"true\"\n className=\"size-4\"\n />\n </TableButton>\n <TableButton\n iconOnly\n aria-label={state.messages.previousPage}\n onClick={handler.handlePreviousPage}\n disabled={disabled || !state.canPreviousPage}\n >\n <ChevronLeft\n aria-hidden=\"true\"\n className=\"size-4\"\n />\n </TableButton>\n <span className=\"min-w-24 px-2 text-center font-medium tabular-nums text-rentner-foreground\">\n {state.messages.pageInfo(\n state.page,\n state.totalPages,\n )}\n </span>\n <TableButton\n iconOnly\n aria-label={state.messages.nextPage}\n onClick={handler.handleNextPage}\n disabled={disabled || !state.canNextPage}\n >\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-4\"\n />\n </TableButton>\n <TableButton\n iconOnly\n aria-label={state.messages.lastPage}\n onClick={handler.handleLastPage}\n disabled={\n disabled ||\n state.totalPages === null ||\n !state.canNextPage\n }\n >\n <ChevronsRight\n aria-hidden=\"true\"\n className=\"size-4\"\n />\n </TableButton>\n </nav>\n </div>\n )}\n </div>\n )\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { DataTableToolbarProps } from '../Types/dataTable.types.ts';
3
+ export declare function DataTableToolbar<TData extends RowData>({ table, state, handler, options, className, }: DataTableToolbarProps<TData>): import("react").JSX.Element;
4
+ //# sourceMappingURL=DataTableToolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableToolbar.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/DataTableToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAapD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAExE,wBAAgB,gBAAgB,CAAC,KAAK,SAAS,OAAO,EAAE,EACpD,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,SAAc,GACjB,EAAE,qBAAqB,CAAC,KAAK,CAAC,+BA0J9B"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { TextInput } from '@rentnerkev/inputs/text-input';
3
+ import { Menu } from '@rentnerkev/menu/menu';
4
+ import { ChevronDown, Columns3, ListFilter, RefreshCw, RotateCcw, Search, X, } from 'lucide-react';
5
+ import { TableButton } from './TableButton.js';
6
+ export function DataTableToolbar({ table, state, handler, options, className = '', }) {
7
+ return (_jsxs("div", { className: `border-b border-rentner-border ${className}`, children: [_jsxs("div", { className: "flex flex-col gap-5 p-5 lg:flex-row lg:items-start lg:justify-between", children: [_jsxs("div", { className: "flex min-w-0 items-start gap-3", children: [options.icon && (_jsx("span", { "aria-hidden": "true", className: "flex size-10 shrink-0 items-center justify-center rounded-xl border border-rentner-accent/20 bg-rentner-accent/10 text-rentner-accent", children: options.icon })), _jsxs("div", { className: "min-w-0", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2.5", children: [_jsx("h2", { id: `${state.id}-title`, className: "text-base font-semibold tracking-tight text-rentner-foreground", children: options.title ?? state.messages.title }), state.totalRows !== null && (_jsx("span", { className: "rounded-md border border-rentner-border bg-rentner-control px-2 py-0.5 text-xs tabular-nums text-rentner-muted", children: state.totalRows })), options.isRefreshing && (_jsx(RefreshCw, { "aria-label": state.messages.loading, className: "size-3.5 motion-safe:animate-spin text-rentner-accent" }))] }), options.description && (_jsx("p", { className: "mt-1 text-sm leading-relaxed text-rentner-muted", children: options.description }))] })] }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [options.searchable !== false && (_jsx("div", { className: "w-full sm:w-64", children: _jsx(TextInput, { type: "text", value: state.search, onValueChange: handler.handleSearch, "aria-label": state.messages.search, placeholder: options.searchPlaceholder ??
8
+ state.messages.searchPlaceholder, maxLength: 200, icon: _jsx(Search, { "aria-hidden": "true", className: "size-4" }), controlSize: "sm", disabled: options.isLoading }) })), options.columnFilters !== false && (_jsxs(TableButton, { onClick: handler.handleToggleFilters, "aria-pressed": state.showFilters, "aria-expanded": state.showFilters, "aria-controls": `${state.id}-filters`, active: state.showFilters || state.filterCount > 0, disabled: options.isLoading ||
9
+ !state.filterColumns.some((column) => column.getCanFilter()), children: [_jsx(ListFilter, { "aria-hidden": "true", className: "size-4" }), state.messages.filters, state.filterCount > 0 && (_jsx("span", { className: "rounded bg-rentner-accent/15 px-1.5 tabular-nums", children: state.filterCount }))] })), options.columnVisibility !== false && (_jsx(Menu, { ariaLabel: state.messages.columns, items: state.columnItems, align: "end", controlSize: "sm", disabled: options.isLoading, asChild: true, trigger: _jsxs(TableButton, { children: [_jsx(Columns3, { "aria-hidden": "true", className: "size-4" }), state.messages.columns, _jsx(ChevronDown, { "aria-hidden": "true", className: "size-3" })] }) })), state.hasFilters && (_jsx(TableButton, { iconOnly: true, "aria-label": state.messages.resetFilters, title: state.messages.resetFilters, onClick: handler.handleResetFilters, children: _jsx(RotateCcw, { "aria-hidden": "true", className: "size-4" }) })), typeof options.toolbarActions === 'function'
10
+ ? options.toolbarActions({
11
+ table,
12
+ selectedRows: state.selectedRows,
13
+ })
14
+ : options.toolbarActions] })] }), state.selectionCount > 0 && (_jsxs("section", { "aria-label": state.messages.selected(state.selectionCount), className: "flex flex-wrap items-center gap-3 border-t border-rentner-accent/15 bg-rentner-accent/5 px-5 py-3", children: [_jsx("span", { className: "text-sm font-medium tabular-nums text-rentner-accent", children: state.messages.selected(state.selectionCount) }), _jsx(TableButton, { iconOnly: true, "aria-label": state.messages.clearSelection, onClick: handler.handleClearSelection, className: "border-transparent bg-transparent", children: _jsx(X, { "aria-hidden": "true", className: "size-4" }) }), _jsx("div", { className: "ml-auto flex flex-wrap items-center gap-2", children: options.bulkActions?.({
15
+ table,
16
+ selectedRows: state.selectedRows,
17
+ }) })] }))] }));
18
+ }
19
+ //# sourceMappingURL=DataTableToolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataTableToolbar.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/DataTableToolbar.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { RowData } from '@tanstack/react-table'\nimport { TextInput } from '@rentnerkev/inputs/text-input'\nimport { Menu } from '@rentnerkev/menu/menu'\nimport {\n ChevronDown,\n Columns3,\n ListFilter,\n RefreshCw,\n RotateCcw,\n Search,\n X,\n} from 'lucide-react'\nimport { TableButton } from './TableButton.tsx'\nimport type { DataTableToolbarProps } from '../Types/dataTable.types.ts'\n\nexport function DataTableToolbar<TData extends RowData>({\n table,\n state,\n handler,\n options,\n className = '',\n}: DataTableToolbarProps<TData>) {\n return (\n <div className={`border-b border-rentner-border ${className}`}>\n <div className=\"flex flex-col gap-5 p-5 lg:flex-row lg:items-start lg:justify-between\">\n <div className=\"flex min-w-0 items-start gap-3\">\n {options.icon && (\n <span\n aria-hidden=\"true\"\n className=\"flex size-10 shrink-0 items-center justify-center rounded-xl border border-rentner-accent/20 bg-rentner-accent/10 text-rentner-accent\"\n >\n {options.icon}\n </span>\n )}\n <div className=\"min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2.5\">\n <h2\n id={`${state.id}-title`}\n className=\"text-base font-semibold tracking-tight text-rentner-foreground\"\n >\n {options.title ?? state.messages.title}\n </h2>\n {state.totalRows !== null && (\n <span className=\"rounded-md border border-rentner-border bg-rentner-control px-2 py-0.5 text-xs tabular-nums text-rentner-muted\">\n {state.totalRows}\n </span>\n )}\n {options.isRefreshing && (\n <RefreshCw\n aria-label={state.messages.loading}\n className=\"size-3.5 motion-safe:animate-spin text-rentner-accent\"\n />\n )}\n </div>\n {options.description && (\n <p className=\"mt-1 text-sm leading-relaxed text-rentner-muted\">\n {options.description}\n </p>\n )}\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n {options.searchable !== false && (\n <div className=\"w-full sm:w-64\">\n <TextInput\n type=\"text\"\n value={state.search}\n onValueChange={handler.handleSearch}\n aria-label={state.messages.search}\n placeholder={\n options.searchPlaceholder ??\n state.messages.searchPlaceholder\n }\n maxLength={200}\n icon={\n <Search\n aria-hidden=\"true\"\n className=\"size-4\"\n />\n }\n controlSize=\"sm\"\n disabled={options.isLoading}\n />\n </div>\n )}\n {options.columnFilters !== false && (\n <TableButton\n onClick={handler.handleToggleFilters}\n aria-pressed={state.showFilters}\n aria-expanded={state.showFilters}\n aria-controls={`${state.id}-filters`}\n active={state.showFilters || state.filterCount > 0}\n disabled={\n options.isLoading ||\n !state.filterColumns.some((column) =>\n column.getCanFilter(),\n )\n }\n >\n <ListFilter aria-hidden=\"true\" className=\"size-4\" />\n {state.messages.filters}\n {state.filterCount > 0 && (\n <span className=\"rounded bg-rentner-accent/15 px-1.5 tabular-nums\">\n {state.filterCount}\n </span>\n )}\n </TableButton>\n )}\n {options.columnVisibility !== false && (\n <Menu\n ariaLabel={state.messages.columns}\n items={state.columnItems}\n align=\"end\"\n controlSize=\"sm\"\n disabled={options.isLoading}\n asChild\n trigger={\n <TableButton>\n <Columns3\n aria-hidden=\"true\"\n className=\"size-4\"\n />\n {state.messages.columns}\n <ChevronDown\n aria-hidden=\"true\"\n className=\"size-3\"\n />\n </TableButton>\n }\n />\n )}\n {state.hasFilters && (\n <TableButton\n iconOnly\n aria-label={state.messages.resetFilters}\n title={state.messages.resetFilters}\n onClick={handler.handleResetFilters}\n >\n <RotateCcw aria-hidden=\"true\" className=\"size-4\" />\n </TableButton>\n )}\n {typeof options.toolbarActions === 'function'\n ? options.toolbarActions({\n table,\n selectedRows: state.selectedRows,\n })\n : options.toolbarActions}\n </div>\n </div>\n {state.selectionCount > 0 && (\n <section\n aria-label={state.messages.selected(state.selectionCount)}\n className=\"flex flex-wrap items-center gap-3 border-t border-rentner-accent/15 bg-rentner-accent/5 px-5 py-3\"\n >\n <span className=\"text-sm font-medium tabular-nums text-rentner-accent\">\n {state.messages.selected(state.selectionCount)}\n </span>\n <TableButton\n iconOnly\n aria-label={state.messages.clearSelection}\n onClick={handler.handleClearSelection}\n className=\"border-transparent bg-transparent\"\n >\n <X aria-hidden=\"true\" className=\"size-4\" />\n </TableButton>\n <div className=\"ml-auto flex flex-wrap items-center gap-2\">\n {options.bulkActions?.({\n table,\n selectedRows: state.selectedRows,\n })}\n </div>\n </section>\n )}\n </div>\n )\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { TableProps } from '../Types/table.types.ts';
3
+ export declare function Table<TData extends RowData>({ data, columns, getRowId, enableSorting, initialSorting, locale, messages, ...appearance }: TableProps<TData>): import("react").JSX.Element;
4
+ //# sourceMappingURL=Table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/Table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAGpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEzD,wBAAgB,KAAK,CAAC,KAAK,SAAS,OAAO,EAAE,EACzC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,aAAa,EACb,cAAc,EACd,MAAM,EACN,QAAQ,EACR,GAAG,UAAU,EAChB,EAAE,UAAU,CAAC,KAAK,CAAC,+BAWnB"}
@@ -0,0 +1,17 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useTableLogic } from '../Hooks/useTableLogic.js';
4
+ import { TableSurface } from './TableSurface.js';
5
+ export function Table({ data, columns, getRowId, enableSorting, initialSorting, locale, messages, ...appearance }) {
6
+ const { table, state } = useTableLogic({
7
+ data,
8
+ columns,
9
+ getRowId,
10
+ enableSorting,
11
+ initialSorting,
12
+ locale,
13
+ messages,
14
+ });
15
+ return _jsx(TableSurface, { ...appearance, table: table, view: state });
16
+ }
17
+ //# sourceMappingURL=Table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/Table.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AAGjD,MAAM,UAAU,KAAK,CAAwB,EACzC,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,aAAa,EACb,cAAc,EACd,MAAM,EACN,QAAQ,EACR,GAAG,UAAU,EACG;IAChB,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC;QACnC,IAAI;QACJ,OAAO;QACP,QAAQ;QACR,aAAa;QACb,cAAc;QACd,MAAM;QACN,QAAQ;KACX,CAAC,CAAA;IACF,OAAO,KAAC,YAAY,OAAK,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAI,CAAA;AACtE,CAAC","sourcesContent":["'use client'\n\nimport type { RowData } from '@tanstack/react-table'\nimport { useTableLogic } from '../Hooks/useTableLogic.ts'\nimport { TableSurface } from './TableSurface.tsx'\nimport type { TableProps } from '../Types/table.types.ts'\n\nexport function Table<TData extends RowData>({\n data,\n columns,\n getRowId,\n enableSorting,\n initialSorting,\n locale,\n messages,\n ...appearance\n}: TableProps<TData>) {\n const { table, state } = useTableLogic({\n data,\n columns,\n getRowId,\n enableSorting,\n initialSorting,\n locale,\n messages,\n })\n return <TableSurface {...appearance} table={table} view={state} />\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { TableBodyProps } from '../Types/dataTable.types.ts';
3
+ export declare function TableBody<TData extends RowData>({ table, view, selection, renderExpandedRow, getRowLabel, detailsId, classNames, rowClassName, isLoading, }: TableBodyProps<TData>): import("react").JSX.Element;
4
+ //# sourceMappingURL=TableBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableBody.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableBody.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAIpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEjE,wBAAgB,SAAS,CAAC,KAAK,SAAS,OAAO,EAAE,EAC7C,KAAK,EACL,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACZ,SAAS,GACZ,EAAE,cAAc,CAAC,KAAK,CAAC,+BAwFvB"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Fragment } from 'react';
3
+ import { ChevronRight } from 'lucide-react';
4
+ import { TableCheckbox } from './TableCheckbox.js';
5
+ import { TableButton } from './TableButton.js';
6
+ export function TableBody({ table, view, selection, renderExpandedRow, getRowLabel, detailsId, classNames, rowClassName, isLoading, }) {
7
+ return (_jsx("tbody", { children: view.rows.map((row) => (_jsxs(Fragment, { children: [_jsxs("tr", { "data-row-id": row.id, "data-selected": (selection?.selectionEnabled &&
8
+ row.getIsSelected()) ||
9
+ undefined, className: `border-b border-rentner-border motion-safe:transition-colors last:border-0 hover:bg-rentner-control/70 hover:shadow-[inset_3px_0_0_var(--rentner-accent,#13ecd6)] data-[selected=true]:bg-rentner-accent/5 ${classNames?.row ?? ''} ${rowClassName?.(row) ?? ''}`, children: [selection?.selectionEnabled && (_jsx("td", { className: "w-12 px-4 py-3", children: _jsx(TableCheckbox, { checked: row.getIsSelected(), disabled: isLoading || !row.getCanSelect(), label: view.messages.selectRow(getRowLabel?.(row.original) ?? row.id), onChange: () => row.toggleSelected() }) })), renderExpandedRow && (_jsx("td", { className: "w-10 px-1", children: _jsx(TableButton, { iconOnly: true, disabled: !row.getCanExpand(), "aria-label": row.getIsExpanded()
10
+ ? view.messages.collapseRow(getRowLabel?.(row.original) ??
11
+ row.id)
12
+ : view.messages.expandRow(getRowLabel?.(row.original) ??
13
+ row.id), "aria-expanded": row.getIsExpanded(), "aria-controls": `${detailsId}-${encodeURIComponent(row.id)}`, onClick: row.getToggleExpandedHandler(), className: "border-transparent bg-transparent", children: _jsx(ChevronRight, { "aria-hidden": "true", className: `size-4 ${row.getIsExpanded() ? 'rotate-90' : ''}` }) }) })), row.getVisibleCells().map((cell) => (_jsx("td", { "data-align": cell.column.columnDef.meta?.align, style: cell.column.columnDef.size === undefined
14
+ ? undefined
15
+ : { width: cell.column.getSize() }, className: `px-4 py-3 align-middle group-data-[size=sm]/table:px-3 group-data-[size=sm]/table:py-2 group-data-[size=lg]/table:px-5 group-data-[size=lg]/table:py-4 data-[align=center]:text-center data-[align=right]:text-right ${cell.column.columnDef.meta?.cellClassName ?? ''} ${classNames?.cell ?? ''}`, children: _jsx(table.FlexRender, { cell: cell }) }, cell.id)))] }), renderExpandedRow && row.getIsExpanded() && (_jsx("tr", { children: _jsx("td", { colSpan: view.columnCount, className: "border-b border-rentner-border bg-rentner-control/30 p-5", children: _jsx("div", { id: `${detailsId}-${encodeURIComponent(row.id)}`, children: renderExpandedRow(row) }) }) }))] }, row.id))) }));
16
+ }
17
+ //# sourceMappingURL=TableBody.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableBody.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableBody.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Fragment } from 'react'\nimport type { RowData } from '@tanstack/react-table'\nimport { ChevronRight } from 'lucide-react'\nimport { TableCheckbox } from './TableCheckbox.tsx'\nimport { TableButton } from './TableButton.tsx'\nimport type { TableBodyProps } from '../Types/dataTable.types.ts'\n\nexport function TableBody<TData extends RowData>({\n table,\n view,\n selection,\n renderExpandedRow,\n getRowLabel,\n detailsId,\n classNames,\n rowClassName,\n isLoading,\n}: TableBodyProps<TData>) {\n return (\n <tbody>\n {view.rows.map((row) => (\n <Fragment key={row.id}>\n <tr\n data-row-id={row.id}\n data-selected={\n (selection?.selectionEnabled &&\n row.getIsSelected()) ||\n undefined\n }\n className={`border-b border-rentner-border motion-safe:transition-colors last:border-0 hover:bg-rentner-control/70 hover:shadow-[inset_3px_0_0_var(--rentner-accent,#13ecd6)] data-[selected=true]:bg-rentner-accent/5 ${classNames?.row ?? ''} ${rowClassName?.(row) ?? ''}`}\n >\n {selection?.selectionEnabled && (\n <td className=\"w-12 px-4 py-3\">\n <TableCheckbox\n checked={row.getIsSelected()}\n disabled={isLoading || !row.getCanSelect()}\n label={view.messages.selectRow(\n getRowLabel?.(row.original) ?? row.id,\n )}\n onChange={() => row.toggleSelected()}\n />\n </td>\n )}\n {renderExpandedRow && (\n <td className=\"w-10 px-1\">\n <TableButton\n iconOnly\n disabled={!row.getCanExpand()}\n aria-label={\n row.getIsExpanded()\n ? view.messages.collapseRow(\n getRowLabel?.(row.original) ??\n row.id,\n )\n : view.messages.expandRow(\n getRowLabel?.(row.original) ??\n row.id,\n )\n }\n aria-expanded={row.getIsExpanded()}\n aria-controls={`${detailsId}-${encodeURIComponent(row.id)}`}\n onClick={row.getToggleExpandedHandler()}\n className=\"border-transparent bg-transparent\"\n >\n <ChevronRight\n aria-hidden=\"true\"\n className={`size-4 ${row.getIsExpanded() ? 'rotate-90' : ''}`}\n />\n </TableButton>\n </td>\n )}\n {row.getVisibleCells().map((cell) => (\n // oxlint-disable-next-line jsx-a11y/control-has-associated-label -- The column renderer owns accessible cell content.\n <td\n key={cell.id}\n data-align={cell.column.columnDef.meta?.align}\n style={\n cell.column.columnDef.size === undefined\n ? undefined\n : { width: cell.column.getSize() }\n }\n className={`px-4 py-3 align-middle group-data-[size=sm]/table:px-3 group-data-[size=sm]/table:py-2 group-data-[size=lg]/table:px-5 group-data-[size=lg]/table:py-4 data-[align=center]:text-center data-[align=right]:text-right ${cell.column.columnDef.meta?.cellClassName ?? ''} ${classNames?.cell ?? ''}`}\n >\n <table.FlexRender cell={cell} />\n </td>\n ))}\n </tr>\n {renderExpandedRow && row.getIsExpanded() && (\n <tr>\n <td\n colSpan={view.columnCount}\n className=\"border-b border-rentner-border bg-rentner-control/30 p-5\"\n >\n <div\n id={`${detailsId}-${encodeURIComponent(row.id)}`}\n >\n {renderExpandedRow(row)}\n </div>\n </td>\n </tr>\n )}\n </Fragment>\n ))}\n </tbody>\n )\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { TableButtonProps } from '../Types/dataTable.types.ts';
2
+ export declare function TableButton({ className, active, iconOnly, type, ...props }: TableButtonProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=TableButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableButton.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAEnE,wBAAgB,WAAW,CAAC,EACxB,SAAc,EACd,MAAM,EACN,QAAQ,EACR,IAAe,EACf,GAAG,KAAK,EACX,EAAE,gBAAgB,+BASlB"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function TableButton({ className = '', active, iconOnly, type = 'button', ...props }) {
3
+ return (_jsx("button", { ...props, type: type, "data-active": active || undefined, className: `inline-flex min-h-9 shrink-0 items-center justify-center gap-2 rounded-lg border border-rentner-border bg-rentner-control/40 text-xs font-medium text-rentner-muted motion-safe:transition-colors hover:bg-rentner-control hover:text-rentner-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-rentner-accent disabled:cursor-not-allowed disabled:opacity-40 data-[active=true]:border-rentner-accent/30 data-[active=true]:bg-rentner-accent/10 data-[active=true]:text-rentner-accent ${iconOnly ? 'size-9' : 'px-3 py-2'} ${className}` }));
4
+ }
5
+ //# sourceMappingURL=TableButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableButton.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableButton.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,WAAW,CAAC,EACxB,SAAS,GAAG,EAAE,EACd,MAAM,EACN,QAAQ,EACR,IAAI,GAAG,QAAQ,EACf,GAAG,KAAK,EACO;IACf,OAAO,CACH,oBACQ,KAAK,EACT,IAAI,EAAE,IAAI,iBACG,MAAM,IAAI,SAAS,EAChC,SAAS,EAAE,mgBAAmgB,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,IAAI,SAAS,EAAE,GAChkB,CACL,CAAA;AACL,CAAC","sourcesContent":["import type { TableButtonProps } from '../Types/dataTable.types.ts'\n\nexport function TableButton({\n className = '',\n active,\n iconOnly,\n type = 'button',\n ...props\n}: TableButtonProps) {\n return (\n <button\n {...props}\n type={type}\n data-active={active || undefined}\n className={`inline-flex min-h-9 shrink-0 items-center justify-center gap-2 rounded-lg border border-rentner-border bg-rentner-control/40 text-xs font-medium text-rentner-muted motion-safe:transition-colors hover:bg-rentner-control hover:text-rentner-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-rentner-accent disabled:cursor-not-allowed disabled:opacity-40 data-[active=true]:border-rentner-accent/30 data-[active=true]:bg-rentner-accent/10 data-[active=true]:text-rentner-accent ${iconOnly ? 'size-9' : 'px-3 py-2'} ${className}`}\n />\n )\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { TableCheckboxProps } from '../Types/dataTable.types.ts';
2
+ export declare function TableCheckbox({ checked, indeterminate, disabled, label, onChange, }: TableCheckboxProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=TableCheckbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCheckbox.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableCheckbox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,wBAAgB,aAAa,CAAC,EAC1B,OAAO,EACP,aAAqB,EACrB,QAAQ,EACR,KAAK,EACL,QAAQ,GACX,EAAE,kBAAkB,+BAepB"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { CheckboxInput } from '@rentnerkev/inputs/checkbox-input';
3
+ import { useTableCheckboxLogic } from '../Hooks/useTableCheckboxLogic.js';
4
+ export function TableCheckbox({ checked, indeterminate = false, disabled, label, onChange, }) {
5
+ const { refs: { input }, } = useTableCheckboxLogic(indeterminate);
6
+ return (_jsx(CheckboxInput, { ref: input, checked: checked, "aria-checked": indeterminate ? 'mixed' : checked, "aria-label": label, disabled: disabled, onChange: onChange, controlSize: "sm" }));
7
+ }
8
+ //# sourceMappingURL=TableCheckbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableCheckbox.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableCheckbox.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AAGzE,MAAM,UAAU,aAAa,CAAC,EAC1B,OAAO,EACP,aAAa,GAAG,KAAK,EACrB,QAAQ,EACR,KAAK,EACL,QAAQ,GACS;IACjB,MAAM,EACF,IAAI,EAAE,EAAE,KAAK,EAAE,GAClB,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAA;IACxC,OAAO,CACH,KAAC,aAAa,IACV,GAAG,EAAE,KAAK,EACV,OAAO,EAAE,OAAO,kBACF,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,gBACnC,KAAK,EACjB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAC,IAAI,GAClB,CACL,CAAA;AACL,CAAC","sourcesContent":["import { CheckboxInput } from '@rentnerkev/inputs/checkbox-input'\nimport { useTableCheckboxLogic } from '../Hooks/useTableCheckboxLogic.ts'\nimport type { TableCheckboxProps } from '../Types/dataTable.types.ts'\n\nexport function TableCheckbox({\n checked,\n indeterminate = false,\n disabled,\n label,\n onChange,\n}: TableCheckboxProps) {\n const {\n refs: { input },\n } = useTableCheckboxLogic(indeterminate)\n return (\n <CheckboxInput\n ref={input}\n checked={checked}\n aria-checked={indeterminate ? 'mixed' : checked}\n aria-label={label}\n disabled={disabled}\n onChange={onChange}\n controlSize=\"sm\"\n />\n )\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { TableColumnFilterProps } from '../Types/dataTable.types.ts';
3
+ export declare function TableColumnFilter<TData extends RowData>({ column, locale, messages, disabled, }: TableColumnFilterProps<TData>): string | number | bigint | boolean | import("react").JSX.Element | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | Iterable<import("react").ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined;
4
+ //# sourceMappingURL=TableColumnFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableColumnFilter.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableColumnFilter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAKpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAIzE,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,OAAO,EAAE,EACrD,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,GACX,EAAE,sBAAsB,CAAC,KAAK,CAAC,+VAuD/B"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { lazy, Suspense } from 'react';
3
+ import { TextInput } from '@rentnerkev/inputs/text-input';
4
+ import { CustomSelect } from '@rentnerkev/select/select';
5
+ import { getColumnLabel } from '../../../lib/Table/presentation.js';
6
+ const TableDateRangeFilter = lazy(() => import('./TableDateRangeFilter.js'));
7
+ export function TableColumnFilter({ column, locale, messages, disabled, }) {
8
+ const config = column.columnDef.meta?.filter;
9
+ const value = column.getFilterValue();
10
+ const label = messages.filterColumn(getColumnLabel(column));
11
+ if (config?.type === 'custom')
12
+ return config.render({
13
+ value,
14
+ onValueChange: (next) => column.setFilterValue(next),
15
+ label,
16
+ });
17
+ if (config?.type === 'select')
18
+ return (_jsx(CustomSelect, { options: config.options, value: typeof value === 'string' ? value : '', onValueChange: (next) => column.setFilterValue(next), "aria-label": label, placeholder: config.placeholder ?? messages.all, clearable: true, emptyValue: "", controlSize: "sm", disabled: disabled, locale: locale, className: "min-w-32" }));
19
+ if (config?.type === 'dateRange')
20
+ return (_jsx(Suspense, { fallback: _jsx("span", { className: "text-xs text-rentner-muted", children: label }), children: _jsx(TableDateRangeFilter, { value: value, onValueChange: (next) => column.setFilterValue(next), label: label, placeholder: config.placeholder, locale: locale, disabled: disabled }) }));
21
+ return (_jsx(TextInput, { value: typeof value === 'string' ? value : '', onValueChange: (next) => column.setFilterValue(next), "aria-label": label, placeholder: config?.placeholder ?? label, maxLength: config?.maxLength ?? 200, controlSize: "sm", disabled: disabled, className: "min-w-28" }));
22
+ }
23
+ //# sourceMappingURL=TableColumnFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableColumnFilter.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableColumnFilter.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAGnE,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA4B,CAAC,CAAC,CAAA;AAE7E,MAAM,UAAU,iBAAiB,CAAwB,EACrD,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,GACoB;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAA;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,CAAA;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3D,IAAI,MAAM,EAAE,IAAI,KAAK,QAAQ;QACzB,OAAO,MAAM,CAAC,MAAM,CAAC;YACjB,KAAK;YACL,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC;YACpD,KAAK;SACR,CAAC,CAAA;IACN,IAAI,MAAM,EAAE,IAAI,KAAK,QAAQ;QACzB,OAAO,CACH,KAAC,YAAY,IACT,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAC7C,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,gBACxC,KAAK,EACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,GAAG,EAC/C,SAAS,QACT,UAAU,EAAC,EAAE,EACb,WAAW,EAAC,IAAI,EAChB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAC,UAAU,GACtB,CACL,CAAA;IACL,IAAI,MAAM,EAAE,IAAI,KAAK,WAAW;QAC5B,OAAO,CACH,KAAC,QAAQ,IACL,QAAQ,EACJ,eAAM,SAAS,EAAC,4BAA4B,YAAE,KAAK,GAAQ,YAG/D,KAAC,oBAAoB,IACjB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EACpD,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,CAAC,WAAW,EAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,GACpB,GACK,CACd,CAAA;IACL,OAAO,CACH,KAAC,SAAS,IACN,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAC7C,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,gBACxC,KAAK,EACjB,WAAW,EAAE,MAAM,EAAE,WAAW,IAAI,KAAK,EACzC,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,GAAG,EACnC,WAAW,EAAC,IAAI,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,UAAU,GACtB,CACL,CAAA;AACL,CAAC","sourcesContent":["import type { RowData } from '@tanstack/react-table'\nimport { lazy, Suspense } from 'react'\nimport { TextInput } from '@rentnerkev/inputs/text-input'\nimport { CustomSelect } from '@rentnerkev/select/select'\nimport { getColumnLabel } from '../../../lib/Table/presentation.ts'\nimport type { TableColumnFilterProps } from '../Types/dataTable.types.ts'\n\nconst TableDateRangeFilter = lazy(() => import('./TableDateRangeFilter.tsx'))\n\nexport function TableColumnFilter<TData extends RowData>({\n column,\n locale,\n messages,\n disabled,\n}: TableColumnFilterProps<TData>) {\n const config = column.columnDef.meta?.filter\n const value = column.getFilterValue()\n const label = messages.filterColumn(getColumnLabel(column))\n if (config?.type === 'custom')\n return config.render({\n value,\n onValueChange: (next) => column.setFilterValue(next),\n label,\n })\n if (config?.type === 'select')\n return (\n <CustomSelect\n options={config.options}\n value={typeof value === 'string' ? value : ''}\n onValueChange={(next) => column.setFilterValue(next)}\n aria-label={label}\n placeholder={config.placeholder ?? messages.all}\n clearable\n emptyValue=\"\"\n controlSize=\"sm\"\n disabled={disabled}\n locale={locale}\n className=\"min-w-32\"\n />\n )\n if (config?.type === 'dateRange')\n return (\n <Suspense\n fallback={\n <span className=\"text-xs text-rentner-muted\">{label}</span>\n }\n >\n <TableDateRangeFilter\n value={value}\n onValueChange={(next) => column.setFilterValue(next)}\n label={label}\n placeholder={config.placeholder}\n locale={locale}\n disabled={disabled}\n />\n </Suspense>\n )\n return (\n <TextInput\n value={typeof value === 'string' ? value : ''}\n onValueChange={(next) => column.setFilterValue(next)}\n aria-label={label}\n placeholder={config?.placeholder ?? label}\n maxLength={config?.maxLength ?? 200}\n controlSize=\"sm\"\n disabled={disabled}\n className=\"min-w-28\"\n />\n )\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { TableDateRangeFilterProps } from '../Types/dataTable.types.ts';
2
+ export default function TableDateRangeFilter({ value, onValueChange, label, placeholder, locale, disabled, }: TableDateRangeFilterProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=TableDateRangeFilter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableDateRangeFilter.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableDateRangeFilter.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAG5E,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EACzC,KAAK,EACL,aAAa,EACb,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,GACX,EAAE,yBAAyB,+BAyB3B"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { RangeCalendar } from '@rentnerkev/calendar/range-calendar';
3
+ import { getTableDateRange } from '../../../lib/Table/filters.js';
4
+ import { useTableOverlay } from '../Hooks/useTableOverlay.js';
5
+ export default function TableDateRangeFilter({ value, onValueChange, label, placeholder, locale, disabled, }) {
6
+ const portalContainer = useTableOverlay();
7
+ return (_jsx(RangeCalendar, { valueFormat: "iso-date", value: [
8
+ getTableDateRange(value).from ?? null,
9
+ getTableDateRange(value).to ?? null,
10
+ ], onChange: (range) => onValueChange({
11
+ from: range?.[0] ?? undefined,
12
+ to: range?.[1] ?? undefined,
13
+ }), "aria-label": label, placeholder: placeholder ?? label, locale: locale, controlSize: "sm", isDeletable: true, disabled: disabled, portalContainer: portalContainer, className: "min-w-44" }));
14
+ }
15
+ //# sourceMappingURL=TableDateRangeFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableDateRangeFilter.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableDateRangeFilter.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAEjE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAE7D,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EACzC,KAAK,EACL,aAAa,EACb,KAAK,EACL,WAAW,EACX,MAAM,EACN,QAAQ,GACgB;IACxB,MAAM,eAAe,GAAG,eAAe,EAAE,CAAA;IACzC,OAAO,CACH,KAAC,aAAa,IACV,WAAW,EAAC,UAAU,EACtB,KAAK,EAAE;YACH,iBAAiB,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI;YACrC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI;SACtC,EACD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,aAAa,CAAC;YACV,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS;YAC7B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS;SAC9B,CAAC,gBAEM,KAAK,EACjB,WAAW,EAAE,WAAW,IAAI,KAAK,EACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAC,IAAI,EAChB,WAAW,QACX,QAAQ,EAAE,QAAQ,EAClB,eAAe,EAAE,eAAe,EAChC,SAAS,EAAC,UAAU,GACtB,CACL,CAAA;AACL,CAAC","sourcesContent":["import { RangeCalendar } from '@rentnerkev/calendar/range-calendar'\nimport { getTableDateRange } from '../../../lib/Table/filters.ts'\nimport type { TableDateRangeFilterProps } from '../Types/dataTable.types.ts'\nimport { useTableOverlay } from '../Hooks/useTableOverlay.ts'\n\nexport default function TableDateRangeFilter({\n value,\n onValueChange,\n label,\n placeholder,\n locale,\n disabled,\n}: TableDateRangeFilterProps) {\n const portalContainer = useTableOverlay()\n return (\n <RangeCalendar\n valueFormat=\"iso-date\"\n value={[\n getTableDateRange(value).from ?? null,\n getTableDateRange(value).to ?? null,\n ]}\n onChange={(range) =>\n onValueChange({\n from: range?.[0] ?? undefined,\n to: range?.[1] ?? undefined,\n })\n }\n aria-label={label}\n placeholder={placeholder ?? label}\n locale={locale}\n controlSize=\"sm\"\n isDeletable\n disabled={disabled}\n portalContainer={portalContainer}\n className=\"min-w-44\"\n />\n )\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { RowData } from '@tanstack/react-table';
2
+ import type { TableHeadProps } from '../Types/dataTable.types.ts';
3
+ export declare function TableHead<TData extends RowData>({ table, view, selection, onSelectPage, renderExpandedRow, isLoading, filters, classNames, stickyHeader, }: TableHeadProps<TData>): import("react").JSX.Element;
4
+ //# sourceMappingURL=TableHead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHead.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableHead.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAGpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEjE,wBAAgB,SAAS,CAAC,KAAK,SAAS,OAAO,EAAE,EAC7C,KAAK,EACL,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,OAAO,EACP,UAAU,EACV,YAAY,GACf,EAAE,cAAc,CAAC,KAAK,CAAC,+BA8FvB"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronRight } from 'lucide-react';
3
+ import { TableCheckbox } from './TableCheckbox.js';
4
+ export function TableHead({ table, view, selection, onSelectPage, renderExpandedRow, isLoading, filters, classNames, stickyHeader, }) {
5
+ return (_jsxs("thead", { className: `${stickyHeader ? 'sticky top-0 z-10' : ''} border-b-2 border-rentner-accent/80 bg-rentner-control text-xs text-rentner-muted ${classNames?.header ?? ''}`, children: [view.headerGroups.map((group, index) => (_jsxs("tr", { children: [index === 0 && selection?.selectionEnabled && (_jsx("th", { scope: "col", rowSpan: view.headerGroups.length, className: "w-12 px-4 py-3", children: _jsx(TableCheckbox, { checked: selection.allPageSelected, indeterminate: selection.somePageSelected &&
6
+ !selection.allPageSelected, disabled: isLoading || !selection.canSelectPage, label: view.messages.selectPage, onChange: onSelectPage ??
7
+ (() => table.toggleAllPageRowsSelected()) }) })), index === 0 && renderExpandedRow && (_jsxs("th", { scope: "col", rowSpan: view.headerGroups.length, className: "w-10 px-2", children: [_jsx("span", { className: "sr-only", children: view.messages.expandRow('') }), _jsx(ChevronRight, { "aria-hidden": "true", className: "size-4 opacity-0" })] })), group.headers.map((item) => (_jsx("th", { colSpan: item.header.colSpan, scope: item.header.colSpan > 1 ? 'colgroup' : 'col', "aria-hidden": item.header.isPlaceholder || undefined, "aria-sort": item.sortDirection, "data-align": item.header.column.columnDef.meta?.align, style: item.header.column.columnDef.size === undefined
8
+ ? undefined
9
+ : { width: item.header.column.getSize() }, className: `px-4 py-3 font-medium group-data-[size=sm]/table:px-3 group-data-[size=sm]/table:py-2 group-data-[size=lg]/table:px-5 group-data-[size=lg]/table:py-4 data-[align=center]:text-center data-[align=right]:text-right ${item.header.column.columnDef.meta?.headerClassName ?? ''} ${classNames?.headerCell ?? ''}`, children: item.canSort ? (_jsxs("button", { type: "button", disabled: isLoading, onClick: item.header.column.getToggleSortingHandler(), "data-align": item.header.column.columnDef.meta?.align, className: "group/sort relative flex w-full items-center gap-2 rounded-sm text-left motion-safe:transition-colors hover:text-rentner-foreground focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-rentner-accent disabled:cursor-wait disabled:opacity-60 data-[align=center]:justify-center data-[align=center]:text-center data-[align=right]:justify-end data-[align=right]:text-right", children: [_jsx(table.FlexRender, { header: item.header }), _jsxs("span", { className: "sr-only", children: [' ', "\u2014 ", item.sortAction] }), _jsx("span", { "aria-hidden": "true", className: "ml-auto shrink-0 text-rentner-accent group-data-[align=center]/sort:ml-0 group-data-[align=right]/sort:ml-0", children: item.sortIndicator })] })) : (!item.header.isPlaceholder && (_jsx(table.FlexRender, { header: item.header }))) }, item.header.id)))] }, group.id))), filters] }));
10
+ }
11
+ //# sourceMappingURL=TableHead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHead.js","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableHead.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { RowData } from '@tanstack/react-table'\nimport { ChevronRight } from 'lucide-react'\nimport { TableCheckbox } from './TableCheckbox.tsx'\nimport type { TableHeadProps } from '../Types/dataTable.types.ts'\n\nexport function TableHead<TData extends RowData>({\n table,\n view,\n selection,\n onSelectPage,\n renderExpandedRow,\n isLoading,\n filters,\n classNames,\n stickyHeader,\n}: TableHeadProps<TData>) {\n return (\n <thead\n className={`${stickyHeader ? 'sticky top-0 z-10' : ''} border-b-2 border-rentner-accent/80 bg-rentner-control text-xs text-rentner-muted ${classNames?.header ?? ''}`}\n >\n {view.headerGroups.map((group, index) => (\n <tr key={group.id}>\n {index === 0 && selection?.selectionEnabled && (\n <th\n scope=\"col\"\n rowSpan={view.headerGroups.length}\n className=\"w-12 px-4 py-3\"\n >\n <TableCheckbox\n checked={selection.allPageSelected}\n indeterminate={\n selection.somePageSelected &&\n !selection.allPageSelected\n }\n disabled={isLoading || !selection.canSelectPage}\n label={view.messages.selectPage}\n onChange={\n onSelectPage ??\n (() => table.toggleAllPageRowsSelected())\n }\n />\n </th>\n )}\n {index === 0 && renderExpandedRow && (\n <th\n scope=\"col\"\n rowSpan={view.headerGroups.length}\n className=\"w-10 px-2\"\n >\n <span className=\"sr-only\">\n {view.messages.expandRow('')}\n </span>\n <ChevronRight\n aria-hidden=\"true\"\n className=\"size-4 opacity-0\"\n />\n </th>\n )}\n {group.headers.map((item) => (\n <th\n key={item.header.id}\n colSpan={item.header.colSpan}\n scope={item.header.colSpan > 1 ? 'colgroup' : 'col'}\n aria-hidden={item.header.isPlaceholder || undefined}\n aria-sort={item.sortDirection}\n data-align={\n item.header.column.columnDef.meta?.align\n }\n style={\n item.header.column.columnDef.size === undefined\n ? undefined\n : { width: item.header.column.getSize() }\n }\n className={`px-4 py-3 font-medium group-data-[size=sm]/table:px-3 group-data-[size=sm]/table:py-2 group-data-[size=lg]/table:px-5 group-data-[size=lg]/table:py-4 data-[align=center]:text-center data-[align=right]:text-right ${item.header.column.columnDef.meta?.headerClassName ?? ''} ${classNames?.headerCell ?? ''}`}\n >\n {item.canSort ? (\n <button\n type=\"button\"\n disabled={isLoading}\n onClick={item.header.column.getToggleSortingHandler()}\n data-align={\n item.header.column.columnDef.meta?.align\n }\n className=\"group/sort relative flex w-full items-center gap-2 rounded-sm text-left motion-safe:transition-colors hover:text-rentner-foreground focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-rentner-accent disabled:cursor-wait disabled:opacity-60 data-[align=center]:justify-center data-[align=center]:text-center data-[align=right]:justify-end data-[align=right]:text-right\"\n >\n <table.FlexRender header={item.header} />\n <span className=\"sr-only\">\n {' '}\n — {item.sortAction}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"ml-auto shrink-0 text-rentner-accent group-data-[align=center]/sort:ml-0 group-data-[align=right]/sort:ml-0\"\n >\n {item.sortIndicator}\n </span>\n </button>\n ) : (\n !item.header.isPlaceholder && (\n <table.FlexRender header={item.header} />\n )\n )}\n </th>\n ))}\n </tr>\n ))}\n {filters}\n </thead>\n )\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { TableProviderProps } from '../Types/dataTable.types.ts';
2
+ export declare function TableProvider({ children, portalContainer, }: TableProviderProps): import("react").JSX.Element;
3
+ //# sourceMappingURL=TableProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Components/TableProvider.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,wBAAgB,aAAa,CAAC,EAC1B,QAAQ,EACR,eAAe,GAClB,EAAE,kBAAkB,+BAUpB"}