@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,197 @@
1
+ import type { Column, Row, RowData } from '@tanstack/react-table';
2
+ import type { ComponentPropsWithRef, ReactNode, RefObject } from 'react';
3
+ import type { MenuItem } from '@rentnerkev/menu';
4
+ import type { TableDateRange } from './column.types.ts';
5
+ import type { rentnerTableFeatures } from '../../../lib/Table/table.ts';
6
+ import type { RentnerTableInstance, RentnerTableOptions, TableLogicResult, TableLocale, TableMessages, TableSize } from './table.types.ts';
7
+ export type TableRow<TData extends RowData> = Row<typeof rentnerTableFeatures, TData>;
8
+ export type TableColumnInstance<TData extends RowData> = Column<typeof rentnerTableFeatures, TData, unknown>;
9
+ export interface DataTableContext<TData extends RowData> {
10
+ table: RentnerTableInstance<TData>;
11
+ selectedRows: readonly TableRow<TData>[];
12
+ }
13
+ export interface DataTableClassNames {
14
+ root?: string;
15
+ toolbar?: string;
16
+ viewport?: string;
17
+ table?: string;
18
+ header?: string;
19
+ headerCell?: string;
20
+ row?: string;
21
+ cell?: string;
22
+ footer?: string;
23
+ }
24
+ export type DataTableLogicOptions<TData extends RowData> = Pick<RentnerTableOptions<TData>, 'data' | 'columns'> & {
25
+ getRowId: (row: TData, index: number) => string;
26
+ locale?: TableLocale;
27
+ messages?: Partial<TableMessages>;
28
+ pagination?: boolean;
29
+ pageSize?: number;
30
+ pageSizeOptions?: readonly number[];
31
+ selectable?: boolean | ((row: TableRow<TData>) => boolean);
32
+ getRowLabel?: (row: TData) => string;
33
+ renderExpandedRow?: (row: TableRow<TData>) => ReactNode;
34
+ initialShowFilters?: boolean;
35
+ tableOptions?: Omit<RentnerTableOptions<TData>, 'data' | 'columns' | 'getRowId' | 'enableRowSelection'>;
36
+ portalContainer?: Element | DocumentFragment | null;
37
+ };
38
+ export type DataTableProps<TData extends RowData> = DataTableLogicOptions<TData> & {
39
+ title?: ReactNode;
40
+ description?: ReactNode;
41
+ icon?: ReactNode;
42
+ searchable?: boolean;
43
+ searchPlaceholder?: string;
44
+ columnFilters?: boolean;
45
+ columnVisibility?: boolean;
46
+ isLoading?: boolean;
47
+ isRefreshing?: boolean;
48
+ error?: ReactNode;
49
+ onRetry?: () => void;
50
+ emptyState?: ReactNode;
51
+ loadingState?: ReactNode;
52
+ noResultsState?: ReactNode;
53
+ size?: TableSize;
54
+ striped?: boolean;
55
+ stickyHeader?: boolean;
56
+ className?: string;
57
+ classNames?: DataTableClassNames;
58
+ toolbarActions?: ReactNode | ((context: DataTableContext<TData>) => ReactNode);
59
+ bulkActions?: (context: DataTableContext<TData>) => ReactNode;
60
+ rowClassName?: (row: TableRow<TData>) => string | undefined;
61
+ };
62
+ export interface DataTableLogicResult<TData extends RowData> {
63
+ table: RentnerTableInstance<TData>;
64
+ state: TableLogicResult<TData>['state'] & {
65
+ id: string;
66
+ search: string;
67
+ showFilters: boolean;
68
+ hasFilters: boolean;
69
+ filterCount: number;
70
+ filterColumns: TableColumnInstance<TData>[];
71
+ columnItems: MenuItem[];
72
+ selectedRows: TableRow<TData>[];
73
+ selectionCount: number;
74
+ selectionEnabled: boolean;
75
+ canSelectPage: boolean;
76
+ allPageSelected: boolean;
77
+ somePageSelected: boolean;
78
+ firstRow: number;
79
+ lastRow: number;
80
+ totalRows: number | null;
81
+ totalPages: number | null;
82
+ page: number;
83
+ pageSize: number;
84
+ pageSizes: {
85
+ value: number;
86
+ label: string;
87
+ }[];
88
+ canPreviousPage: boolean;
89
+ canNextPage: boolean;
90
+ portalContainer: Element | DocumentFragment | null;
91
+ };
92
+ handler: {
93
+ handleSearch: (value: string) => void;
94
+ handleToggleFilters: () => void;
95
+ handleResetFilters: () => void;
96
+ handleClearSelection: () => void;
97
+ handleSelectPage: () => void;
98
+ handlePageSize: (value: number) => void;
99
+ handleFirstPage: () => void;
100
+ handlePreviousPage: () => void;
101
+ handleNextPage: () => void;
102
+ handleLastPage: () => void;
103
+ };
104
+ refs: {
105
+ root: (element: HTMLElement | null) => void;
106
+ };
107
+ }
108
+ export type DataTableToolbarProps<TData extends RowData> = {
109
+ state: DataTableLogicResult<TData>['state'];
110
+ handler: DataTableLogicResult<TData>['handler'];
111
+ options: Pick<DataTableProps<TData>, 'title' | 'description' | 'icon' | 'searchable' | 'searchPlaceholder' | 'columnFilters' | 'columnVisibility' | 'toolbarActions' | 'bulkActions' | 'isLoading' | 'isRefreshing'>;
112
+ table: RentnerTableInstance<TData>;
113
+ className?: string;
114
+ };
115
+ export type TableSurfaceProps<TData extends RowData> = Omit<ComponentPropsWithRef<'table'>, 'children'> & {
116
+ table: RentnerTableInstance<TData>;
117
+ view: TableLogicResult<TData>['state'];
118
+ caption?: ReactNode;
119
+ size?: TableSize;
120
+ striped?: boolean;
121
+ isLoading?: boolean;
122
+ emptyState?: ReactNode;
123
+ loadingState?: ReactNode;
124
+ noResultsState?: ReactNode;
125
+ hasFilters?: boolean;
126
+ error?: ReactNode;
127
+ onRetry?: () => void;
128
+ onResetFilters?: () => void;
129
+ containerClassName?: string;
130
+ embedded?: boolean;
131
+ stickyHeader?: boolean;
132
+ classNames?: DataTableClassNames;
133
+ rowClassName?: DataTableProps<TData>['rowClassName'];
134
+ selection?: DataTableLogicResult<TData>['state'];
135
+ onSelectPage?: () => void;
136
+ getRowLabel?: (row: TData) => string;
137
+ renderExpandedRow?: (row: TableRow<TData>) => ReactNode;
138
+ detailsId?: string;
139
+ filters?: ReactNode;
140
+ detailedStates?: boolean;
141
+ };
142
+ export type TableButtonProps = ComponentPropsWithRef<'button'> & {
143
+ active?: boolean;
144
+ iconOnly?: boolean;
145
+ };
146
+ export interface TableCheckboxProps {
147
+ checked: boolean;
148
+ indeterminate?: boolean;
149
+ disabled?: boolean;
150
+ label: string;
151
+ onChange: () => void;
152
+ }
153
+ export interface TableCheckboxLogicResult {
154
+ refs: {
155
+ input: RefObject<HTMLInputElement | null>;
156
+ };
157
+ }
158
+ export interface TableColumnFilterProps<TData extends RowData> {
159
+ column: TableColumnInstance<TData>;
160
+ locale: TableLocale;
161
+ messages: TableMessages;
162
+ disabled?: boolean;
163
+ }
164
+ export interface TableDateRangeFilterProps {
165
+ value: unknown;
166
+ onValueChange: (value: TableDateRange) => void;
167
+ label: string;
168
+ placeholder?: string;
169
+ locale: TableLocale;
170
+ disabled?: boolean;
171
+ }
172
+ export type TableHeadProps<TData extends RowData> = Pick<TableSurfaceProps<TData>, 'table' | 'view' | 'selection' | 'onSelectPage' | 'renderExpandedRow' | 'isLoading' | 'filters' | 'classNames' | 'stickyHeader'>;
173
+ export type TableBodyProps<TData extends RowData> = Pick<TableSurfaceProps<TData>, 'table' | 'view' | 'selection' | 'renderExpandedRow' | 'getRowLabel' | 'detailsId' | 'classNames' | 'rowClassName' | 'isLoading'>;
174
+ export type TableStatusProps = Pick<TableSurfaceProps<object>, 'isLoading' | 'loadingState' | 'emptyState' | 'noResultsState' | 'hasFilters' | 'error' | 'onRetry' | 'onResetFilters' | 'detailedStates'> & {
175
+ view: {
176
+ columnCount: number;
177
+ messages: TableMessages;
178
+ };
179
+ };
180
+ export type DataTablePaginationProps<TData extends RowData> = {
181
+ state: DataTableLogicResult<TData>['state'];
182
+ handler: DataTableLogicResult<TData>['handler'];
183
+ locale: TableLocale;
184
+ pagination: boolean;
185
+ disabled?: boolean;
186
+ className?: string;
187
+ };
188
+ export interface TableRowActionsProps {
189
+ label: string;
190
+ items: readonly MenuItem[];
191
+ disabled?: boolean;
192
+ }
193
+ export interface TableProviderProps {
194
+ children: ReactNode;
195
+ portalContainer?: Element | DocumentFragment | null;
196
+ }
197
+ //# sourceMappingURL=dataTable.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataTable.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Types/dataTable.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dataTable.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataTable.types.js","sourceRoot":"","sources":["../../../../src/shared/Table/Types/dataTable.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Column, Row, RowData } from '@tanstack/react-table'\nimport type { ComponentPropsWithRef, ReactNode, RefObject } from 'react'\nimport type { MenuItem } from '@rentnerkev/menu'\nimport type { TableDateRange } from './column.types.ts'\nimport type { rentnerTableFeatures } from '../../../lib/Table/table.ts'\nimport type {\n RentnerTableInstance,\n RentnerTableOptions,\n TableLogicResult,\n TableLocale,\n TableMessages,\n TableSize,\n} from './table.types.ts'\n\nexport type TableRow<TData extends RowData> = Row<\n typeof rentnerTableFeatures,\n TData\n>\nexport type TableColumnInstance<TData extends RowData> = Column<\n typeof rentnerTableFeatures,\n TData,\n unknown\n>\n\nexport interface DataTableContext<TData extends RowData> {\n table: RentnerTableInstance<TData>\n selectedRows: readonly TableRow<TData>[]\n}\n\nexport interface DataTableClassNames {\n root?: string\n toolbar?: string\n viewport?: string\n table?: string\n header?: string\n headerCell?: string\n row?: string\n cell?: string\n footer?: string\n}\n\nexport type DataTableLogicOptions<TData extends RowData> = Pick<\n RentnerTableOptions<TData>,\n 'data' | 'columns'\n> & {\n getRowId: (row: TData, index: number) => string\n locale?: TableLocale\n messages?: Partial<TableMessages>\n pagination?: boolean\n pageSize?: number\n pageSizeOptions?: readonly number[]\n selectable?: boolean | ((row: TableRow<TData>) => boolean)\n getRowLabel?: (row: TData) => string\n renderExpandedRow?: (row: TableRow<TData>) => ReactNode\n initialShowFilters?: boolean\n tableOptions?: Omit<\n RentnerTableOptions<TData>,\n 'data' | 'columns' | 'getRowId' | 'enableRowSelection'\n >\n portalContainer?: Element | DocumentFragment | null\n}\n\nexport type DataTableProps<TData extends RowData> =\n DataTableLogicOptions<TData> & {\n title?: ReactNode\n description?: ReactNode\n icon?: ReactNode\n searchable?: boolean\n searchPlaceholder?: string\n columnFilters?: boolean\n columnVisibility?: boolean\n isLoading?: boolean\n isRefreshing?: boolean\n error?: ReactNode\n onRetry?: () => void\n emptyState?: ReactNode\n loadingState?: ReactNode\n noResultsState?: ReactNode\n size?: TableSize\n striped?: boolean\n stickyHeader?: boolean\n className?: string\n classNames?: DataTableClassNames\n toolbarActions?:\n ReactNode | ((context: DataTableContext<TData>) => ReactNode)\n bulkActions?: (context: DataTableContext<TData>) => ReactNode\n rowClassName?: (row: TableRow<TData>) => string | undefined\n }\n\nexport interface DataTableLogicResult<TData extends RowData> {\n table: RentnerTableInstance<TData>\n state: TableLogicResult<TData>['state'] & {\n id: string\n search: string\n showFilters: boolean\n hasFilters: boolean\n filterCount: number\n filterColumns: TableColumnInstance<TData>[]\n columnItems: MenuItem[]\n selectedRows: TableRow<TData>[]\n selectionCount: number\n selectionEnabled: boolean\n canSelectPage: boolean\n allPageSelected: boolean\n somePageSelected: boolean\n firstRow: number\n lastRow: number\n totalRows: number | null\n totalPages: number | null\n page: number\n pageSize: number\n pageSizes: { value: number; label: string }[]\n canPreviousPage: boolean\n canNextPage: boolean\n portalContainer: Element | DocumentFragment | null\n }\n handler: {\n handleSearch: (value: string) => void\n handleToggleFilters: () => void\n handleResetFilters: () => void\n handleClearSelection: () => void\n handleSelectPage: () => void\n handlePageSize: (value: number) => void\n handleFirstPage: () => void\n handlePreviousPage: () => void\n handleNextPage: () => void\n handleLastPage: () => void\n }\n refs: { root: (element: HTMLElement | null) => void }\n}\n\nexport type DataTableToolbarProps<TData extends RowData> = {\n state: DataTableLogicResult<TData>['state']\n handler: DataTableLogicResult<TData>['handler']\n options: Pick<\n DataTableProps<TData>,\n | 'title'\n | 'description'\n | 'icon'\n | 'searchable'\n | 'searchPlaceholder'\n | 'columnFilters'\n | 'columnVisibility'\n | 'toolbarActions'\n | 'bulkActions'\n | 'isLoading'\n | 'isRefreshing'\n >\n table: RentnerTableInstance<TData>\n className?: string\n}\n\nexport type TableSurfaceProps<TData extends RowData> = Omit<\n ComponentPropsWithRef<'table'>,\n 'children'\n> & {\n table: RentnerTableInstance<TData>\n view: TableLogicResult<TData>['state']\n caption?: ReactNode\n size?: TableSize\n striped?: boolean\n isLoading?: boolean\n emptyState?: ReactNode\n loadingState?: ReactNode\n noResultsState?: ReactNode\n hasFilters?: boolean\n error?: ReactNode\n onRetry?: () => void\n onResetFilters?: () => void\n containerClassName?: string\n embedded?: boolean\n stickyHeader?: boolean\n classNames?: DataTableClassNames\n rowClassName?: DataTableProps<TData>['rowClassName']\n selection?: DataTableLogicResult<TData>['state']\n onSelectPage?: () => void\n getRowLabel?: (row: TData) => string\n renderExpandedRow?: (row: TableRow<TData>) => ReactNode\n detailsId?: string\n filters?: ReactNode\n detailedStates?: boolean\n}\n\nexport type TableButtonProps = ComponentPropsWithRef<'button'> & {\n active?: boolean\n iconOnly?: boolean\n}\nexport interface TableCheckboxProps {\n checked: boolean\n indeterminate?: boolean\n disabled?: boolean\n label: string\n onChange: () => void\n}\nexport interface TableCheckboxLogicResult {\n refs: { input: RefObject<HTMLInputElement | null> }\n}\n\nexport interface TableColumnFilterProps<TData extends RowData> {\n column: TableColumnInstance<TData>\n locale: TableLocale\n messages: TableMessages\n disabled?: boolean\n}\n\nexport interface TableDateRangeFilterProps {\n value: unknown\n onValueChange: (value: TableDateRange) => void\n label: string\n placeholder?: string\n locale: TableLocale\n disabled?: boolean\n}\n\nexport type TableHeadProps<TData extends RowData> = Pick<\n TableSurfaceProps<TData>,\n | 'table'\n | 'view'\n | 'selection'\n | 'onSelectPage'\n | 'renderExpandedRow'\n | 'isLoading'\n | 'filters'\n | 'classNames'\n | 'stickyHeader'\n>\nexport type TableBodyProps<TData extends RowData> = Pick<\n TableSurfaceProps<TData>,\n | 'table'\n | 'view'\n | 'selection'\n | 'renderExpandedRow'\n | 'getRowLabel'\n | 'detailsId'\n | 'classNames'\n | 'rowClassName'\n | 'isLoading'\n>\nexport type TableStatusProps = Pick<\n TableSurfaceProps<object>,\n | 'isLoading'\n | 'loadingState'\n | 'emptyState'\n | 'noResultsState'\n | 'hasFilters'\n | 'error'\n | 'onRetry'\n | 'onResetFilters'\n | 'detailedStates'\n> & { view: { columnCount: number; messages: TableMessages } }\nexport type DataTablePaginationProps<TData extends RowData> = {\n state: DataTableLogicResult<TData>['state']\n handler: DataTableLogicResult<TData>['handler']\n locale: TableLocale\n pagination: boolean\n disabled?: boolean\n className?: string\n}\n\nexport interface TableRowActionsProps {\n label: string\n items: readonly MenuItem[]\n disabled?: boolean\n}\n\nexport interface TableProviderProps {\n children: ReactNode\n portalContainer?: Element | DocumentFragment | null\n}\n"]}
@@ -0,0 +1,77 @@
1
+ import type { ComponentPropsWithRef, ReactNode } from 'react';
2
+ import type { ColumnDef, Header, ReactTable, Row, RowData, SortingState, TableOptions } from '@tanstack/react-table';
3
+ import type { rentnerTableFeatures } from '../../../lib/Table/table.ts';
4
+ export type TableLocale = 'de' | 'en';
5
+ export type TableSize = 'sm' | 'md' | 'lg';
6
+ export interface TableMessages {
7
+ empty: string;
8
+ loading: string;
9
+ sortAscending: string;
10
+ sortDescending: string;
11
+ clearSorting: string;
12
+ title: string;
13
+ search: string;
14
+ searchPlaceholder: string;
15
+ filters: string;
16
+ columns: string;
17
+ resetFilters: string;
18
+ noResults: string;
19
+ noResultsDescription: string;
20
+ emptyDescription: string;
21
+ error: string;
22
+ retry: string;
23
+ all: string;
24
+ filterColumn: (label: string) => string;
25
+ rowsPerPage: string;
26
+ firstPage: string;
27
+ previousPage: string;
28
+ nextPage: string;
29
+ lastPage: string;
30
+ pageInfo: (page: number, pages: number | null) => string;
31
+ rowRange: (first: number, last: number, total: number | null) => string;
32
+ results: (count: number) => string;
33
+ selected: (count: number) => string;
34
+ clearSelection: string;
35
+ selectPage: string;
36
+ selectRow: (label: string) => string;
37
+ expandRow: (label: string) => string;
38
+ collapseRow: (label: string) => string;
39
+ }
40
+ export type TableColumn<TData extends RowData, TValue = unknown> = ColumnDef<typeof rentnerTableFeatures, TData, TValue>;
41
+ export type RentnerTableInstance<TData extends RowData> = ReactTable<typeof rentnerTableFeatures, TData>;
42
+ export type RentnerTableOptions<TData extends RowData> = Omit<TableOptions<typeof rentnerTableFeatures, TData>, 'features'>;
43
+ export type TableLogicOptions<TData extends RowData> = Pick<TableOptions<typeof rentnerTableFeatures, TData>, 'data' | 'columns' | 'getRowId' | 'enableSorting'> & {
44
+ initialSorting?: SortingState;
45
+ locale?: TableLocale;
46
+ messages?: Partial<TableMessages>;
47
+ };
48
+ export type TableProps<TData extends RowData> = Omit<ComponentPropsWithRef<'table'>, 'children'> & TableLogicOptions<TData> & {
49
+ children?: never;
50
+ caption?: ReactNode;
51
+ size?: TableSize;
52
+ striped?: boolean;
53
+ isLoading?: boolean;
54
+ emptyState?: ReactNode;
55
+ loadingState?: ReactNode;
56
+ containerClassName?: string;
57
+ };
58
+ export interface TableHeaderState<TData extends RowData> {
59
+ header: Header<typeof rentnerTableFeatures, TData, unknown>;
60
+ canSort: boolean;
61
+ sortDirection: 'ascending' | 'descending' | undefined;
62
+ sortAction: string;
63
+ sortIndicator: string;
64
+ }
65
+ export interface TableLogicResult<TData extends RowData> {
66
+ table: ReactTable<typeof rentnerTableFeatures, TData>;
67
+ state: {
68
+ headerGroups: {
69
+ id: string;
70
+ headers: TableHeaderState<TData>[];
71
+ }[];
72
+ rows: Row<typeof rentnerTableFeatures, TData>[];
73
+ columnCount: number;
74
+ messages: TableMessages;
75
+ };
76
+ }
77
+ //# sourceMappingURL=table.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.types.d.ts","sourceRoot":"","sources":["../../../../src/shared/Table/Types/table.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=table.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.types.js","sourceRoot":"","sources":["../../../../src/shared/Table/Types/table.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ComponentPropsWithRef, ReactNode } from 'react'\nimport type {\n ColumnDef,\n Header,\n ReactTable,\n Row,\n RowData,\n SortingState,\n TableOptions,\n} from '@tanstack/react-table'\nimport type { rentnerTableFeatures } from '../../../lib/Table/table.ts'\n\nexport type TableLocale = 'de' | 'en'\nexport type TableSize = 'sm' | 'md' | 'lg'\n\nexport interface TableMessages {\n empty: string\n loading: string\n sortAscending: string\n sortDescending: string\n clearSorting: string\n title: string\n search: string\n searchPlaceholder: string\n filters: string\n columns: string\n resetFilters: string\n noResults: string\n noResultsDescription: string\n emptyDescription: string\n error: string\n retry: string\n all: string\n filterColumn: (label: string) => string\n rowsPerPage: string\n firstPage: string\n previousPage: string\n nextPage: string\n lastPage: string\n pageInfo: (page: number, pages: number | null) => string\n rowRange: (first: number, last: number, total: number | null) => string\n results: (count: number) => string\n selected: (count: number) => string\n clearSelection: string\n selectPage: string\n selectRow: (label: string) => string\n expandRow: (label: string) => string\n collapseRow: (label: string) => string\n}\n\nexport type TableColumn<TData extends RowData, TValue = unknown> = ColumnDef<\n typeof rentnerTableFeatures,\n TData,\n TValue\n>\n\nexport type RentnerTableInstance<TData extends RowData> = ReactTable<\n typeof rentnerTableFeatures,\n TData\n>\nexport type RentnerTableOptions<TData extends RowData> = Omit<\n TableOptions<typeof rentnerTableFeatures, TData>,\n 'features'\n>\n\nexport type TableLogicOptions<TData extends RowData> = Pick<\n TableOptions<typeof rentnerTableFeatures, TData>,\n 'data' | 'columns' | 'getRowId' | 'enableSorting'\n> & {\n initialSorting?: SortingState\n locale?: TableLocale\n messages?: Partial<TableMessages>\n}\n\nexport type TableProps<TData extends RowData> = Omit<\n ComponentPropsWithRef<'table'>,\n 'children'\n> &\n TableLogicOptions<TData> & {\n children?: never\n caption?: ReactNode\n size?: TableSize\n striped?: boolean\n isLoading?: boolean\n emptyState?: ReactNode\n loadingState?: ReactNode\n containerClassName?: string\n }\n\nexport interface TableHeaderState<TData extends RowData> {\n header: Header<typeof rentnerTableFeatures, TData, unknown>\n canSort: boolean\n sortDirection: 'ascending' | 'descending' | undefined\n sortAction: string\n sortIndicator: string\n}\n\nexport interface TableLogicResult<TData extends RowData> {\n table: ReactTable<typeof rentnerTableFeatures, TData>\n state: {\n headerGroups: {\n id: string\n headers: TableHeaderState<TData>[]\n }[]\n rows: Row<typeof rentnerTableFeatures, TData>[]\n columnCount: number\n messages: TableMessages\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export type { TableColumn, TableLocale, TableLogicOptions, TableLogicResult, TableMessages, TableProps, TableSize, RentnerTableInstance, RentnerTableOptions, } from './shared/Table/Types/table.types.ts';
2
+ export type { TableColumnMeta, TableColumnFilter, TableDateRange, } from './shared/Table/Types/column.types.ts';
3
+ export type { TableProviderProps } from './shared/Table/Types/dataTable.types.ts';
4
+ export type { DataTableProps, DataTableLogicOptions, DataTableLogicResult, DataTableContext, DataTableClassNames, TableRow, TableColumnInstance, TableSurfaceProps, DataTableToolbarProps, DataTablePaginationProps, TableRowActionsProps, } from './shared/Table/Types/dataTable.types.ts';
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,mBAAmB,GACtB,MAAM,qCAAqC,CAAA;AAC5C,YAAY,EACR,eAAe,EACf,iBAAiB,EACjB,cAAc,GACjB,MAAM,sCAAsC,CAAA;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAA;AACjF,YAAY,EACR,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,GACvB,MAAM,yCAAyC,CAAA"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["export type {\n TableColumn,\n TableLocale,\n TableLogicOptions,\n TableLogicResult,\n TableMessages,\n TableProps,\n TableSize,\n RentnerTableInstance,\n RentnerTableOptions,\n} from './shared/Table/Types/table.types.ts'\nexport type {\n TableColumnMeta,\n TableColumnFilter,\n TableDateRange,\n} from './shared/Table/Types/column.types.ts'\nexport type { TableProviderProps } from './shared/Table/Types/dataTable.types.ts'\nexport type {\n DataTableProps,\n DataTableLogicOptions,\n DataTableLogicResult,\n DataTableContext,\n DataTableClassNames,\n TableRow,\n TableColumnInstance,\n TableSurfaceProps,\n DataTableToolbarProps,\n DataTablePaginationProps,\n TableRowActionsProps,\n} from './shared/Table/Types/dataTable.types.ts'\n"]}
package/docs/usage.md ADDED
@@ -0,0 +1,130 @@
1
+ # RentnerTable usage
2
+
3
+ The package supports React 19, React DOM 19, Tailwind CSS 4 and TanStack Table 9. Import `@rentnerkev/table/tailwind.css` after Tailwind; see the [README quick start](../README.md#quick-start) for a complete typed component.
4
+
5
+ ## Components and entry points
6
+
7
+ | Entry | API |
8
+ | -------------------------------- | ---------------------------------------------------- |
9
+ | `@rentnerkev/table` | Public components, hooks, helpers, filters and types |
10
+ | `@rentnerkev/table/table` | `Table`, a minimal sortable table |
11
+ | `@rentnerkev/table/data-table` | `DataTable`, the complete table interface |
12
+ | `@rentnerkev/table/hooks` | `useDataTableLogic` |
13
+ | `@rentnerkev/table/filters` | Portable text, equality and date-range filters |
14
+ | `@rentnerkev/table/types` | Type-only contracts |
15
+ | `@rentnerkev/table/tailwind.css` | Theme, scanned library classes and control styles |
16
+ | `@rentnerkev/table/theme.css` | Shared theme token mapping only |
17
+
18
+ `DataTable` requires `data`, `columns` and `getRowId`. Supply a stable string ID from the record rather than a page-relative array index. `getRowLabel` gives selection and detail buttons a readable accessible name.
19
+
20
+ `Table` takes `data`, `columns`, an optional `getRowId` and a `caption`. It renders every supplied row and supports `enableSorting`, `initialSorting`, `locale`, `messages`, density, striped rows and loading/empty content. It accepts native table attributes and a ref.
21
+
22
+ ## Columns and filters
23
+
24
+ Create columns with `createTableColumnHelper<YourRecord>()`. `helper.columns([...])` preserves typed values across heterogeneous accessor columns. Define reusable columns outside render, or memoize columns that depend on locale or callbacks.
25
+
26
+ | Column setting | Behavior |
27
+ | --------------------------------------------- | --------------------------------------------------------------------------------- |
28
+ | `meta.label` | Plain-text label for filter and visibility controls when the header is custom JSX |
29
+ | `meta.align` | `left`, `center` or `right` alignment for headers and cells |
30
+ | `meta.headerClassName`, `meta.cellClassName` | Extra classes for that column |
31
+ | `meta.filter: { type: 'text' }` | Trimmed, case-insensitive substring matching |
32
+ | `meta.filter: { type: 'select', options }` | Exact scalar value matching; options use string values |
33
+ | `meta.filter: { type: 'dateRange' }` | Inclusive local calendar-day boundaries |
34
+ | `meta.filter: { type: 'custom', render }` | Render a custom control with `value`, `onValueChange` and `label` |
35
+ | `enableColumnFilter: false` | Disable the column filter |
36
+ | `enableGlobalFilter: false` | Exclude a column from global search |
37
+ | `enableSorting: false`, `enableHiding: false` | Disable individual capabilities |
38
+
39
+ An explicit TanStack `filterFn` takes precedence over the default function selected by metadata. A custom filter control should supply a matching `filterFn` when text matching is unsuitable.
40
+
41
+ `TableDateRange` is `{ from?: string; to?: string }`, using `YYYY-MM-DD` boundaries. Rows may contain valid `Date` objects, timestamps or date strings. Date-only strings are interpreted as local dates. Invalid dates and reversed ranges produce no matches. Search, sorting and column-filter changes return to page one by default; `tableOptions.autoResetPageIndex: false` opts out. Client pages still clamp when the current page no longer exists.
42
+
43
+ ## Selection, actions and expanded rows
44
+
45
+ Set `selectable` to `true` or a predicate receiving the native row. The header checkbox selects eligible rows on the current page. Selection uses record IDs and survives page changes; `bulkActions` receives the currently filtered selected rows and the native table instance. With manual server pagination it can only resolve selected records in the data currently supplied by the application. Keep a separate application-level ID selection when actions must span unloaded server pages.
46
+
47
+ `toolbarActions` accepts a node or a function receiving `{ table, selectedRows }`. `bulkActions` receives the same context. Use `table.resetRowSelection(true)` after a successful bulk operation when the selection should clear. Disabling `selectable` hides selection UI while preserving native selection state.
48
+
49
+ `TableRowActions` accepts an accessible `label` and the existing RentnerMenu item model. Place it in a display column; item callbacks can act on that column's row. See the [playground implementation](../playground/src/Hooks/useTeamTableLogic.tsx) for row menus and a bulk update.
50
+
51
+ `renderExpandedRow(row)` renders content in a separate full-width table row. Use `row.original` for the record. Keep data requests and mutations in application hooks; the table does not fetch or persist records.
52
+
53
+ ## Controlled server data
54
+
55
+ Pass controlled TanStack state and callbacks through `tableOptions`. Set `manualPagination`, `manualFiltering` and `manualSorting` to make the server responsible for those operations. The application supplies the current page's records and a total `rowCount` when known.
56
+
57
+ ```tsx
58
+ import { useState } from 'react'
59
+ import { useDataTableLogic, createTableColumnHelper } from '@rentnerkev/table'
60
+
61
+ type Member = { id: string; name: string }
62
+ const column = createTableColumnHelper<Member>()
63
+ const columns = column.columns([column.accessor('name', { header: 'Member' })])
64
+
65
+ export function useRemoteMembersLogic(
66
+ data: readonly Member[],
67
+ rowCount: number,
68
+ ) {
69
+ const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 25 })
70
+ const [globalFilter, setGlobalFilter] = useState('')
71
+
72
+ return useDataTableLogic({
73
+ data,
74
+ columns,
75
+ getRowId: (member) => member.id,
76
+ tableOptions: {
77
+ manualPagination: true,
78
+ manualFiltering: true,
79
+ manualSorting: true,
80
+ rowCount,
81
+ state: { pagination, globalFilter },
82
+ onPaginationChange: setPagination,
83
+ onGlobalFilterChange: setGlobalFilter,
84
+ },
85
+ })
86
+ }
87
+ ```
88
+
89
+ Connect these controlled values to your application's query hook and pass the query results into the table. For controlled sorting and column filters, add their state and matching callbacks as well. `useDataTableLogic` returns the native `table` alongside `state`, `handler` and `refs` for a custom UI. A controlled state slice needs its corresponding callback; `initialState` only sets uncontrolled defaults.
90
+
91
+ For an unknown total, use `pageCount: -1`; the footer omits the total page count and disables last-page navigation. Bound next-page navigation from your server response through an application-owned pagination UI when using this mode. `pagination={false}` renders all supplied rows.
92
+
93
+ ## Appearance and messages
94
+
95
+ `size` accepts `sm`, `md` or `lg`. `DataTable` defaults to striped rows; `striped={false}` disables them. `stickyHeader` sticks within the table viewport; constrain the viewport height through `classNames.viewport` when using a vertically scrolling table.
96
+
97
+ The table scrolls horizontally inside its viewport at narrow widths. `classNames` exposes `root`, `toolbar`, `viewport`, `table`, `header`, `headerCell`, `row`, `cell` and `footer`. `rowClassName(row)` adds record-specific row classes.
98
+
99
+ Override shared `--rentner-*` tokens on `:root` or a container. For example:
100
+
101
+ ```css
102
+ .light-table {
103
+ --rentner-surface: #ffffff;
104
+ --rentner-control: #edf1f6;
105
+ --rentner-foreground: #0f172a;
106
+ --rentner-muted: #475569;
107
+ --rentner-border: #cbd5e1;
108
+ --rentner-accent: #006d64;
109
+ --rentner-accent-hover: #00564f;
110
+ --rentner-accent-foreground: #ffffff;
111
+ --rentner-success: #047857;
112
+ --rentner-danger: #b91c1c;
113
+ }
114
+ ```
115
+
116
+ Popup controls use the table root as their default portal container, retaining scoped theme tokens. Pass `portalContainer` explicitly for an application overlay boundary. `TableProvider` is available for custom composition using these controls.
117
+
118
+ Set `locale="de"` or `locale="en"` and override individual labels or formatter functions through `messages`. Search, filter, visibility and pagination controls use the resolved messages. `searchable`, `columnFilters` and `columnVisibility` can independently hide their controls.
119
+
120
+ ## Loading and errors
121
+
122
+ `isLoading` displays the loading state and disables built-in controls. `isRefreshing` retains the visible rows and adds a refresh indicator. Custom `toolbarActions` and `bulkActions` remain application-owned; manage their disabled state in your action components.
123
+
124
+ Use `error={true}` for the translated default error message, a React node for custom content, and `onRetry` for retry behavior. `error={false}` leaves data visible. `emptyState`, `loadingState` and `noResultsState` customize their respective content. Filtered empty results include a reset action.
125
+
126
+ ## Rendering and performance
127
+
128
+ The library is ESM with public subpath exports and server-renderable markup. Interactive consumers need a client boundary in frameworks that distinguish server and client components. Date-filter UI loads lazily; row data remains application-owned.
129
+
130
+ Pagination bounds rendered rows. Row virtualization, fetching, CSV export, editing, persistence and infinite scrolling are application responsibilities. For large remote datasets, filter/sort/page on the server and provide a page of rows. Keep `data`, columns and controlled state referentially stable when their contents have not changed.
package/package.json CHANGED
@@ -1,6 +1,110 @@
1
1
  {
2
- "name": "@rentnerkev/table",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
2
+ "name": "@rentnerkev/table",
3
+ "version": "0.0.1",
4
+ "description": "Accessible, typed React tables with TanStack Table and shared RentnerKev styling.",
5
+ "author": "RentnerKev",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "files": [
11
+ "dist",
12
+ "tailwind.css",
13
+ "theme.css",
14
+ "README.md",
15
+ "docs/usage.md"
16
+ ],
17
+ "sideEffects": [
18
+ "./tailwind.css",
19
+ "./theme.css"
20
+ ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ },
26
+ "./table": {
27
+ "types": "./dist/shared/Table/Components/Table.d.ts",
28
+ "import": "./dist/shared/Table/Components/Table.js"
29
+ },
30
+ "./data-table": {
31
+ "types": "./dist/shared/Table/Components/DataTable.d.ts",
32
+ "import": "./dist/shared/Table/Components/DataTable.js"
33
+ },
34
+ "./hooks": {
35
+ "types": "./dist/shared/Table/Hooks/useDataTableLogic.d.ts",
36
+ "import": "./dist/shared/Table/Hooks/useDataTableLogic.js"
37
+ },
38
+ "./filters": {
39
+ "types": "./dist/lib/Table/filters.d.ts",
40
+ "import": "./dist/lib/Table/filters.js"
41
+ },
42
+ "./types": {
43
+ "types": "./dist/types.d.ts",
44
+ "import": "./dist/types.js"
45
+ },
46
+ "./tailwind.css": "./tailwind.css",
47
+ "./theme.css": "./theme.css",
48
+ "./package.json": "./package.json"
49
+ },
50
+ "scripts": {
51
+ "build": "bun scripts/build.ts && tsc",
52
+ "prepare": "bun run build",
53
+ "typecheck": "tsc --noEmit && tsc --project tsconfig.type-tests.json && bun run typecheck:playground && bun run typecheck:automation",
54
+ "typecheck:playground": "tsc --noEmit -p playground/tsconfig.json",
55
+ "typecheck:automation": "tsc --noEmit -p .github/scripts/tsconfig.json",
56
+ "test": "bun test",
57
+ "e2e": "playwright test",
58
+ "pack:check": "bun pm pack --dry-run",
59
+ "pack:consumer": "bun scripts/consumer/verify.ts",
60
+ "playground:install": "bun install --cwd playground --frozen-lockfile",
61
+ "playground:dev": "bun --cwd playground dev",
62
+ "playground:build": "bun --cwd playground build",
63
+ "lint": "oxlint --deny-warnings src scripts playground/src playground/vite.config.ts playwright.config.ts .github/scripts",
64
+ "lint:fix": "oxlint --fix --deny-warnings src scripts playground/src playground/vite.config.ts playwright.config.ts .github/scripts",
65
+ "format": "bun fmt src scripts playground .github docs README.md package.json tsconfig.json tsconfig.type-tests.json playwright.config.ts .oxlintrc.json bunfig.toml theme.css tailwind.css cliff.toml",
66
+ "format:check": "bun fmt --check src scripts playground .github docs README.md package.json tsconfig.json tsconfig.type-tests.json playwright.config.ts .oxlintrc.json bunfig.toml theme.css tailwind.css cliff.toml",
67
+ "verify": "bun run playground:install && bun run typecheck && bun run lint && bun run format:check && bun run test && bun run build && bun run pack:check && bun run pack:consumer && bun run playground:build && bun run e2e"
68
+ },
69
+ "repository": {
70
+ "type": "git",
71
+ "url": "git+https://github.com/RentnerKev/RentnerTable.git"
72
+ },
73
+ "homepage": "https://github.com/RentnerKev/RentnerTable",
74
+ "bugs": {
75
+ "url": "https://github.com/RentnerKev/RentnerTable/issues"
76
+ },
77
+ "publishConfig": {
78
+ "access": "public",
79
+ "registry": "https://registry.npmjs.org"
80
+ },
81
+ "peerDependencies": {
82
+ "react": "^19.0.0",
83
+ "react-dom": "^19.0.0"
84
+ },
85
+ "dependencies": {
86
+ "@rentnerkev/calendar": "^2.9.0",
87
+ "@rentnerkev/inputs": "^2.8.1",
88
+ "@rentnerkev/menu": "^1.1.0",
89
+ "@rentnerkev/select": "^6.1.0",
90
+ "@tanstack/react-table": "^9.3.1",
91
+ "lucide-react": "^1.73.0"
92
+ },
93
+ "devDependencies": {
94
+ "@axe-core/playwright": "^4.14.0",
95
+ "@happy-dom/global-registrator": "^21.0.4",
96
+ "@playwright/test": "^1.64.1",
97
+ "@testing-library/react": "^16.3.3",
98
+ "@testing-library/user-event": "^14.6.8",
99
+ "@types/bun": "^1.4.4",
100
+ "@types/node": "^26.6.6",
101
+ "@types/react": "^19.3.0",
102
+ "@types/react-dom": "^19.3.0",
103
+ "happy-dom": "^21.0.4",
104
+ "oxlint": "^1.91.0",
105
+ "react": "^19.3.1",
106
+ "react-dom": "^19.3.1",
107
+ "typescript": "^7.0.2"
108
+ },
109
+ "packageManager": "bun@1.4.4"
110
+ }
package/tailwind.css ADDED
@@ -0,0 +1,7 @@
1
+ @import './theme.css';
2
+ @import '@rentnerkev/inputs/tailwind.css';
3
+ @import '@rentnerkev/select/tailwind.css';
4
+ @import '@rentnerkev/menu/tailwind.css';
5
+ @import '@rentnerkev/calendar/tailwind.css';
6
+
7
+ @source './dist/**/*.js';