schummar-table 0.4.0 → 0.5.0-beta-2

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 (155) hide show
  1. package/dist/cjs/index.js +3800 -16
  2. package/dist/cjs/index.js.map +1 -0
  3. package/dist/cjs/mui4Theme.js +96 -0
  4. package/dist/cjs/mui4Theme.js.map +1 -0
  5. package/dist/cjs/mui5Theme.js +100 -0
  6. package/dist/cjs/mui5Theme.js.map +1 -0
  7. package/dist/es/index.js +3783 -0
  8. package/dist/es/index.js.map +1 -0
  9. package/dist/es/mui4Theme.js +92 -0
  10. package/dist/es/mui4Theme.js.map +1 -0
  11. package/dist/es/mui5Theme.js +96 -0
  12. package/dist/es/mui5Theme.js.map +1 -0
  13. package/dist/tableTheme.js +1990 -0
  14. package/dist/tableTheme.js.map +1 -0
  15. package/dist/{cjs → types}/components/cell.d.ts +1 -1
  16. package/dist/types/components/columnHeader.d.ts +7 -0
  17. package/dist/{cjs → types}/components/columnSelection.d.ts +0 -0
  18. package/dist/types/components/dateFilter.d.ts +8 -0
  19. package/dist/types/components/datePicker.d.ts +16 -0
  20. package/dist/types/components/expandControl.d.ts +6 -0
  21. package/dist/{cjs → types}/components/export.d.ts +0 -0
  22. package/dist/types/components/filterControl.d.ts +2 -0
  23. package/dist/types/components/formControlLabel.d.ts +5 -0
  24. package/dist/types/components/resizeHandle.d.ts +1 -0
  25. package/dist/{cjs → types}/components/row.d.ts +1 -1
  26. package/dist/{cjs → types}/components/selectComponent.d.ts +0 -0
  27. package/dist/types/components/selectFilter.d.ts +8 -0
  28. package/dist/{cjs → types}/components/sortComponent.d.ts +0 -0
  29. package/dist/types/components/spinnner.d.ts +3 -0
  30. package/dist/{cjs → types/components}/table.d.ts +1 -4
  31. package/dist/types/components/textFilter.d.ts +5 -0
  32. package/dist/{cjs → types}/components/virtualized.d.ts +0 -0
  33. package/dist/types/hooks/useFilter.d.ts +5 -0
  34. package/dist/types/hooks/useTheme.d.ts +1 -0
  35. package/dist/types/index.d.ts +10 -0
  36. package/dist/{cjs → types}/internalState/calcItems.d.ts +0 -0
  37. package/dist/{cjs → types}/internalState/calcProps.d.ts +0 -0
  38. package/dist/{cjs → types}/internalState/cleanupState.d.ts +0 -0
  39. package/dist/{cjs → types}/internalState/filterColumns.d.ts +0 -0
  40. package/dist/{cjs → types}/internalState/syncSelections.d.ts +0 -0
  41. package/dist/{cjs → types}/internalState/tableStateStorage.d.ts +1 -1
  42. package/dist/{cjs → types}/internalState/useTableState.d.ts +0 -0
  43. package/dist/{cjs → types}/misc/csvExport.d.ts +0 -0
  44. package/dist/types/misc/debounce.d.ts +4 -0
  45. package/dist/types/misc/deepPartial.d.ts +3 -0
  46. package/dist/{cjs → types}/misc/helpers.d.ts +2 -1
  47. package/dist/{cjs → types}/misc/queue.d.ts +1 -1
  48. package/dist/{cjs → types}/misc/textMatch.d.ts +0 -0
  49. package/dist/types/misc/throttle.d.ts +4 -0
  50. package/dist/types/theme/defaultClasses.d.ts +15 -0
  51. package/dist/types/theme/defaultColors.d.ts +2 -0
  52. package/dist/types/theme/defaultIcons.d.ts +2 -0
  53. package/dist/types/theme/defaultTexts.d.ts +2 -0
  54. package/dist/types/theme/defaultTheme/badge.d.ts +2 -0
  55. package/dist/types/theme/defaultTheme/button.d.ts +2 -0
  56. package/dist/types/theme/defaultTheme/checkbox.d.ts +2 -0
  57. package/dist/types/theme/defaultTheme/iconButton.d.ts +2 -0
  58. package/dist/types/theme/defaultTheme/index.d.ts +2 -0
  59. package/dist/types/theme/defaultTheme/popover.d.ts +4 -0
  60. package/dist/types/theme/defaultTheme/textField.d.ts +2 -0
  61. package/dist/types/theme/mui4Theme/index.d.ts +8 -0
  62. package/dist/types/theme/mui5Theme/index.d.ts +8 -0
  63. package/dist/types/theme/tableTheme.d.ts +11 -0
  64. package/dist/types/theme/useCssVariables.d.ts +9 -0
  65. package/dist/types/types.d.ts +285 -0
  66. package/package.json +76 -37
  67. package/dist/cjs/components/cell.js +0 -31
  68. package/dist/cjs/components/columnSelection.js +0 -37
  69. package/dist/cjs/components/defaultFilterComponent.d.ts +0 -22
  70. package/dist/cjs/components/defaultFilterComponent.js +0 -91
  71. package/dist/cjs/components/expandComponent.d.ts +0 -5
  72. package/dist/cjs/components/expandComponent.js +0 -38
  73. package/dist/cjs/components/export.js +0 -48
  74. package/dist/cjs/components/filterComponent.d.ts +0 -5
  75. package/dist/cjs/components/filterComponent.js +0 -25
  76. package/dist/cjs/components/row.js +0 -51
  77. package/dist/cjs/components/selectComponent.js +0 -61
  78. package/dist/cjs/components/sortComponent.js +0 -52
  79. package/dist/cjs/components/textFilterComponent.d.ts +0 -11
  80. package/dist/cjs/components/textFilterComponent.js +0 -70
  81. package/dist/cjs/components/useCommonClasses.d.ts +0 -1
  82. package/dist/cjs/components/useCommonClasses.js +0 -49
  83. package/dist/cjs/components/virtualized.js +0 -98
  84. package/dist/cjs/index.d.ts +0 -6
  85. package/dist/cjs/internalState/calcItems.js +0 -85
  86. package/dist/cjs/internalState/calcProps.js +0 -89
  87. package/dist/cjs/internalState/cleanupState.js +0 -43
  88. package/dist/cjs/internalState/filterColumns.js +0 -10
  89. package/dist/cjs/internalState/syncSelections.js +0 -22
  90. package/dist/cjs/internalState/tableStateStorage.js +0 -74
  91. package/dist/cjs/internalState/useTableState.js +0 -62
  92. package/dist/cjs/misc/csvExport.js +0 -15
  93. package/dist/cjs/misc/helpers.js +0 -91
  94. package/dist/cjs/misc/queue.js +0 -42
  95. package/dist/cjs/misc/textMatch.js +0 -23
  96. package/dist/cjs/misc/throttle.d.ts +0 -1
  97. package/dist/cjs/misc/throttle.js +0 -30
  98. package/dist/cjs/package.json +0 -1
  99. package/dist/cjs/table.js +0 -80
  100. package/dist/cjs/types.d.ts +0 -146
  101. package/dist/cjs/types.js +0 -2
  102. package/dist/esm/components/cell.d.ts +0 -6
  103. package/dist/esm/components/cell.js +0 -28
  104. package/dist/esm/components/columnSelection.d.ts +0 -2
  105. package/dist/esm/components/columnSelection.js +0 -33
  106. package/dist/esm/components/defaultFilterComponent.d.ts +0 -22
  107. package/dist/esm/components/defaultFilterComponent.js +0 -86
  108. package/dist/esm/components/expandComponent.d.ts +0 -5
  109. package/dist/esm/components/expandComponent.js +0 -34
  110. package/dist/esm/components/export.d.ts +0 -2
  111. package/dist/esm/components/export.js +0 -44
  112. package/dist/esm/components/filterComponent.d.ts +0 -5
  113. package/dist/esm/components/filterComponent.js +0 -21
  114. package/dist/esm/components/row.d.ts +0 -7
  115. package/dist/esm/components/row.js +0 -47
  116. package/dist/esm/components/selectComponent.d.ts +0 -5
  117. package/dist/esm/components/selectComponent.js +0 -57
  118. package/dist/esm/components/sortComponent.d.ts +0 -4
  119. package/dist/esm/components/sortComponent.js +0 -48
  120. package/dist/esm/components/textFilterComponent.d.ts +0 -11
  121. package/dist/esm/components/textFilterComponent.js +0 -65
  122. package/dist/esm/components/useCommonClasses.d.ts +0 -1
  123. package/dist/esm/components/useCommonClasses.js +0 -46
  124. package/dist/esm/components/virtualized.d.ts +0 -6
  125. package/dist/esm/components/virtualized.js +0 -94
  126. package/dist/esm/index.d.ts +0 -6
  127. package/dist/esm/index.js +0 -4
  128. package/dist/esm/internalState/calcItems.d.ts +0 -3
  129. package/dist/esm/internalState/calcItems.js +0 -81
  130. package/dist/esm/internalState/calcProps.d.ts +0 -2
  131. package/dist/esm/internalState/calcProps.js +0 -85
  132. package/dist/esm/internalState/cleanupState.d.ts +0 -3
  133. package/dist/esm/internalState/cleanupState.js +0 -39
  134. package/dist/esm/internalState/filterColumns.d.ts +0 -3
  135. package/dist/esm/internalState/filterColumns.js +0 -6
  136. package/dist/esm/internalState/syncSelections.d.ts +0 -3
  137. package/dist/esm/internalState/syncSelections.js +0 -18
  138. package/dist/esm/internalState/tableStateStorage.d.ts +0 -11
  139. package/dist/esm/internalState/tableStateStorage.js +0 -70
  140. package/dist/esm/internalState/useTableState.d.ts +0 -3
  141. package/dist/esm/internalState/useTableState.js +0 -58
  142. package/dist/esm/misc/csvExport.d.ts +0 -7
  143. package/dist/esm/misc/csvExport.js +0 -11
  144. package/dist/esm/misc/helpers.d.ts +0 -14
  145. package/dist/esm/misc/helpers.js +0 -77
  146. package/dist/esm/misc/queue.d.ts +0 -6
  147. package/dist/esm/misc/queue.js +0 -38
  148. package/dist/esm/misc/textMatch.d.ts +0 -2
  149. package/dist/esm/misc/textMatch.js +0 -18
  150. package/dist/esm/misc/throttle.d.ts +0 -1
  151. package/dist/esm/misc/throttle.js +0 -26
  152. package/dist/esm/table.d.ts +0 -11
  153. package/dist/esm/table.js +0 -73
  154. package/dist/esm/types.d.ts +0 -146
  155. package/dist/esm/types.js +0 -1
@@ -0,0 +1,15 @@
1
+ export declare const white = "#ffffff";
2
+ export declare const lightGray = "#eeeeee";
3
+ export declare const gray = "#bdbdbd";
4
+ export declare const darkGray = "#777";
5
+ export declare const defaultClasses: {
6
+ table: import("@emotion/utils").SerializedStyles;
7
+ cell: import("@emotion/utils").SerializedStyles;
8
+ cellFill: import("@emotion/utils").SerializedStyles;
9
+ headerCell: import("@emotion/utils").SerializedStyles;
10
+ firstCell: import("@emotion/utils").SerializedStyles;
11
+ sticky: import("@emotion/utils").SerializedStyles;
12
+ headerFill: import("@emotion/utils").SerializedStyles;
13
+ text: import("@emotion/utils").SerializedStyles;
14
+ card: import("@emotion/utils").SerializedStyles;
15
+ };
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../types';
2
+ export declare const defaultColors: TableTheme['colors'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../types';
2
+ export declare const defaultIcons: TableTheme['icons'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../types';
2
+ export declare const defaultTexts: TableTheme['text'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const Badge: TableTheme['components']['Badge'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const Button: TableTheme['components']['Button'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const Checkbox: TableTheme['components']['Checkbox'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const IconButton: TableTheme['components']['IconButton'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const defaultComponents: TableTheme['components'];
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { TableTheme } from '../../types';
3
+ export declare const PopoverContext: React.Context<number>;
4
+ export declare const Popover: TableTheme['components']['Popover'];
@@ -0,0 +1,2 @@
1
+ import { TableTheme } from '../../types';
2
+ export declare const TextField: TableTheme['components']['TextField'];
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ import { DeepPartial } from '../../misc/deepPartial';
3
+ import { TableTheme } from '../../types';
4
+ export declare const mui4Theme: Partial<TableTheme>;
5
+ export declare function Mui4TableThemeProvider({ theme, children }: {
6
+ theme?: DeepPartial<TableTheme>;
7
+ children: ReactNode;
8
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from 'react';
2
+ import { DeepPartial } from '../../misc/deepPartial';
3
+ import { TableTheme } from '../../types';
4
+ export declare const mui5Theme: Partial<TableTheme>;
5
+ export declare function Mui5TableThemeProvider({ theme, children }: {
6
+ theme?: DeepPartial<TableTheme>;
7
+ children: ReactNode;
8
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ import { DeepPartial } from '../misc/deepPartial';
3
+ import { InternalTableProps, TableTheme } from '../types';
4
+ export declare function configureTableTheme(tableTheme: DeepPartial<TableTheme>): void;
5
+ export declare const TableThemeContext: import("react").Context<DeepPartial<TableTheme<unknown>>>;
6
+ export declare function TableThemeProvider({ theme, children }: {
7
+ theme: DeepPartial<TableTheme>;
8
+ children: ReactNode;
9
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
10
+ export declare function mergeThemes<T>(...themes: DeepPartial<TableTheme<T>>[]): DeepPartial<TableTheme<T>>;
11
+ export declare function useTableTheme<T>(props: InternalTableProps<T>): TableTheme<T>;
@@ -0,0 +1,9 @@
1
+ export declare function useCssVariables(): {
2
+ '--spacing': string | number;
3
+ '--primaryMain': string;
4
+ '--primaryLight': string;
5
+ '--primaryContrastText': string;
6
+ '--secondaryMain': string;
7
+ '--secondaryLight': string;
8
+ '--secondaryContrastText': string;
9
+ };
@@ -0,0 +1,285 @@
1
+ import { CSSInterpolation } from '@emotion/serialize';
2
+ import React, { ComponentType, CSSProperties, ReactNode } from 'react';
3
+ import { TableStateStorage } from './internalState/tableStateStorage';
4
+ import { CsvExportOptions } from './misc/csvExport';
5
+ export declare type Sort = {
6
+ columnId: string | number;
7
+ direction: SortDirection;
8
+ };
9
+ export declare type SortDirection = 'asc' | 'desc';
10
+ export declare type Id = string | number;
11
+ export declare type KeyOfType<T, S> = {
12
+ [K in keyof T]: T[K] extends S ? K : never;
13
+ }[keyof T];
14
+ export interface TableTheme<T = unknown> {
15
+ /** Define display texts. */
16
+ text: {
17
+ selectColumns: ReactNode;
18
+ noResults: ReactNode;
19
+ exportTitle: ReactNode;
20
+ exportCopy: ReactNode;
21
+ exportDownload: ReactNode;
22
+ textFilter: ReactNode;
23
+ selectFilter: ReactNode;
24
+ dateFilter: ReactNode;
25
+ today: ReactNode;
26
+ reset: ReactNode;
27
+ loading: ReactNode;
28
+ };
29
+ /** Define styles. */
30
+ css?: {
31
+ table?: CSSInterpolation;
32
+ headerCell?: CSSInterpolation;
33
+ cell?: CSSInterpolation | ((item: T, index: number) => CSSInterpolation);
34
+ evenCell?: CSSInterpolation;
35
+ oddCell?: CSSInterpolation;
36
+ };
37
+ /** Defined components to be used in the table. */
38
+ components: {
39
+ IconButton: ComponentType<{
40
+ children: ReactNode;
41
+ onClick?: (e: React.MouseEvent<Element>) => void;
42
+ className?: string;
43
+ }>;
44
+ Button: ComponentType<{
45
+ children: ReactNode;
46
+ onClick?: (e: React.MouseEvent<Element>) => void;
47
+ startIcon?: ReactNode;
48
+ variant?: 'text' | 'outlined' | 'contained';
49
+ disabled?: boolean;
50
+ }>;
51
+ Checkbox: ComponentType<{
52
+ checked: boolean;
53
+ onChange: (e: React.ChangeEvent) => void;
54
+ disabled?: boolean;
55
+ className?: string;
56
+ }>;
57
+ Popover: ComponentType<{
58
+ anchorEl: Element | null;
59
+ open: boolean;
60
+ hidden?: boolean;
61
+ onClose: () => void;
62
+ children: ReactNode;
63
+ className?: string;
64
+ align?: 'center' | 'left';
65
+ }>;
66
+ Badge: ComponentType<{
67
+ children: ReactNode;
68
+ badgeContent: ReactNode;
69
+ }>;
70
+ TextField: ComponentType<{
71
+ value: string | null;
72
+ onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
73
+ endIcon?: ReactNode;
74
+ className?: string;
75
+ }>;
76
+ Spinner: (props: {
77
+ className?: string;
78
+ }) => JSX.Element;
79
+ };
80
+ /** Define icons for the table. */
81
+ icons: {
82
+ [K in 'Settings' | 'Export' | 'Clipboard' | 'ChevronRight' | 'Search' | 'Clear' | 'ArrowDropDown' | 'FilterList' | 'ArrowUpward']: ComponentType<{
83
+ className?: string;
84
+ }>;
85
+ };
86
+ /** Define colors */
87
+ colors: {
88
+ primary: {
89
+ main: string;
90
+ light: string;
91
+ contrastText: string;
92
+ };
93
+ secondary: {
94
+ main: string;
95
+ light: string;
96
+ contrastText: string;
97
+ };
98
+ };
99
+ /** Spacing. */
100
+ spacing: string | number;
101
+ }
102
+ export interface TableProps<T> extends Partial<TableTheme<T>> {
103
+ /** The data to be rendered. One item per row. */
104
+ items?: T[];
105
+ /** Unique id for each item/row. */
106
+ id: ((item: T) => Id) | KeyOfType<T, Id>;
107
+ /** Create a nested structure by assigning parents to items. Child items are hidden until the parent is expanded. */
108
+ parentId?: ((item: T) => Id | undefined) | KeyOfType<T, Id | undefined>;
109
+ /** If true for an item, it means that children will be loaded asynchronously as soon as item is expanded. */
110
+ hasDeferredChildren?: (item: T) => boolean;
111
+ /** Column definitions. */
112
+ columns: Column<T, any>[] | ((col: <V>(value: (item: T) => V, column: Omit<Column<T, V>, 'value'>) => Column<T, V>) => Column<T, any>[]);
113
+ /** Display a cell at the start of each row. Useful for "go to details" button for example. */
114
+ rowAction?: ReactNode | ((item: T, index: number) => ReactNode);
115
+ /** Default sort order. */
116
+ defaultSort?: Sort[];
117
+ /** If given, controls the sort order. */
118
+ sort?: Sort[];
119
+ /** Called when sort order changes. */
120
+ onSortChange?: (sort: Sort[]) => void;
121
+ /** Default selection. */
122
+ defaultSelection?: Set<Id>;
123
+ /** If given, controls the selection. */
124
+ selection?: Set<Id>;
125
+ /** Called when selection changes. */
126
+ onSelectionChange?: (selection: Set<Id>) => void;
127
+ /** Whether to show checkboxes at the start of each row.
128
+ * @default true
129
+ */
130
+ enableSelection?: boolean;
131
+ /** Select and deselect children if a parent is selected or deselected.
132
+ * @default true
133
+ */
134
+ selectSyncChildren?: boolean;
135
+ /** Expand parents whose children fit a newly selected filter
136
+ * @default false
137
+ */
138
+ revealFiltered?: boolean;
139
+ /** Default expanded rows. */
140
+ defaultExpanded?: Set<Id>;
141
+ /** If given, controls expanded rows. */
142
+ expanded?: Set<Id>;
143
+ /** Called when expanded rows change. */
144
+ onExpandedChange?: (expanded: Set<Id>) => void;
145
+ /** If enabled and one row is expanded, other rows will be closed.
146
+ * @default false
147
+ */
148
+ expandOnlyOne?: boolean;
149
+ /** Default hidden columns. */
150
+ defaultHiddenColumns?: Set<Id>;
151
+ /** If given, controls hidden columns. */
152
+ hiddenColumns?: Set<Id>;
153
+ /** Called when hidden columns change. */
154
+ onHiddenColumnsChange?: (hiddenColumns: Set<Id>) => void;
155
+ /** Default width for columns. */
156
+ defaultWidth?: string;
157
+ /** Whether to stretch the table component over the available space. If value is "left" or "right", align accordingly. */
158
+ fullWidth?: boolean | 'left' | 'right';
159
+ /** Whether the table header should be sticky.
160
+ * @default false
161
+ */
162
+ stickyHeader?: boolean;
163
+ /** Whether the table cells should only be rendered when in viewport.
164
+ * @default true
165
+ */
166
+ virtual?: boolean | {
167
+ rowHeight?: number;
168
+ initalRowHeight?: number;
169
+ throttleScroll?: number;
170
+ overscan?: number;
171
+ overscanBottom?: number;
172
+ overscanTop?: number;
173
+ };
174
+ /** Enable menu to select which columns are visible.
175
+ * @default true
176
+ */
177
+ enableColumnSelection?: boolean;
178
+ /** Enable exporting to csv.
179
+ * @default false
180
+ */
181
+ enableExport?: boolean | {
182
+ copy?: boolean | CsvExportOptions;
183
+ download?: boolean | CsvExportOptions;
184
+ };
185
+ /** Allow to drag and drop column separators to resize the column left of it.
186
+ * @default true
187
+ */
188
+ enableColumnResize?: boolean;
189
+ /** Allow to drag and drop column header to reorder columns.
190
+ * @default true
191
+ */
192
+ enableColumnReorder?: boolean;
193
+ /** If enabled, automatically store table state in localStorage, localForage or another compatible storage. */
194
+ persist?: {
195
+ storage: TableStateStorage;
196
+ id?: string;
197
+ include?: ('sort' | 'selection' | 'expanded' | 'hiddenColumns' | 'filterValues' | 'columnWidths' | 'columnOrder')[];
198
+ exclude?: ('sort' | 'selection' | 'expanded' | 'hiddenColumns' | 'filterValues' | 'columnWidths' | 'columnOrder')[];
199
+ };
200
+ debug?: (...output: any) => void;
201
+ debugRender?: (...output: any) => void;
202
+ }
203
+ export declare type InternalTableProps<T> = Omit<TableProps<T>, 'id' | 'parentId' | 'columns' | 'enableExport'> & {
204
+ id: (item: T) => Id;
205
+ parentId?: (item: T) => Id | undefined;
206
+ columns: InternalColumn<T, unknown>[];
207
+ enableExport: {
208
+ copy?: CsvExportOptions;
209
+ download?: CsvExportOptions;
210
+ };
211
+ };
212
+ export declare type TableItem<T = unknown> = T & {
213
+ id: Id;
214
+ parentId?: Id;
215
+ children: TableItem<T>[];
216
+ };
217
+ export declare type Column<T, V> = {
218
+ id?: string;
219
+ header?: ReactNode;
220
+ value: (item: T) => V;
221
+ renderCell?: (value: V, item: T) => ReactNode;
222
+ exportCell?: (value: V, item: T) => string | number;
223
+ sortBy?: ((value: V, item: T) => unknown) | ((value: V) => unknown)[];
224
+ filter?: ReactNode;
225
+ cannotHide?: boolean;
226
+ width?: string;
227
+ justifyContent?: CSSProperties['justifyContent'];
228
+ css?: TableTheme<T>['css'];
229
+ /** If the column definition changes, supply parameters that it depends on. If not set, the column will not update */
230
+ dependencies?: any[];
231
+ };
232
+ export declare type InternalColumn<T, V> = Required<Omit<Column<T, V>, 'id'>, 'header' | 'renderCell' | 'exportCell' | 'sortBy'> & {
233
+ id: Id;
234
+ };
235
+ declare type Required<T, S> = T & {
236
+ [P in keyof T as P extends S ? P : never]-?: T[P];
237
+ };
238
+ export declare type Rows<T, V> = [{
239
+ value: V;
240
+ item: T;
241
+ }, ...{
242
+ value: V;
243
+ item: T;
244
+ }[]];
245
+ export declare type InternalTableState<T> = {
246
+ props: InternalTableProps<T>;
247
+ theme: TableTheme<T>;
248
+ sort: Sort[];
249
+ selection: Set<Id>;
250
+ expanded: Set<Id>;
251
+ rowHeights: Map<Id, number>;
252
+ filters: Map<Id, FilterImplementation<T, any, any, any>>;
253
+ filterValues: Map<Id, any>;
254
+ hiddenColumns: Set<Id>;
255
+ columnWidths: Map<Id, string>;
256
+ columnOrder: Id[];
257
+ columnStyleOverride: Map<Id, CSSInterpolation>;
258
+ activeColumns: InternalColumn<T, unknown>[];
259
+ items: TableItem<T>[];
260
+ itemsById: Map<Id, TableItem<T>>;
261
+ activeItems: TableItem<T>[];
262
+ activeItemsById: Map<Id, TableItem<T>>;
263
+ lastSelectedId?: Id;
264
+ };
265
+ export declare type CommonFilterProps<T, V, F, S extends SerializableValue> = {
266
+ filterBy?: (value: V, item: T) => F | F[];
267
+ defaultValue?: S;
268
+ value?: S;
269
+ onChange?: (value?: S) => void;
270
+ dependencies?: any[];
271
+ persist?: boolean;
272
+ };
273
+ export declare type FilterImplementation<T, V, F, S extends SerializableValue> = CommonFilterProps<T, V, F, S> & {
274
+ id: string;
275
+ isActive: (filterValue: S) => boolean;
276
+ test: (filterValue: S, value: F) => boolean;
277
+ };
278
+ export declare type SerializableValue = string | number | boolean | null | Date | SerializableArray | SerializableObject | SerializableSet | SerializableMap;
279
+ export declare type SerializableObject = {
280
+ [key: string]: SerializableValue;
281
+ };
282
+ export declare type SerializableArray = SerializableValue[];
283
+ export declare type SerializableSet = Set<SerializableValue>;
284
+ export declare type SerializableMap = Map<SerializableValue, SerializableValue>;
285
+ export {};
package/package.json CHANGED
@@ -1,15 +1,39 @@
1
1
  {
2
2
  "name": "schummar-table",
3
3
  "repository": "schummar/schummar-table",
4
- "version": "0.4.0",
4
+ "version": "0.5.0-beta-2",
5
5
  "description": "",
6
6
  "type": "module",
7
7
  "sideEffects": false,
8
8
  "main": "dist/cjs/index.js",
9
- "module": "dist/esm/index.js",
9
+ "module": "dist/es/index.js",
10
10
  "exports": {
11
- "import": "./dist/esm/index.js",
12
- "require": "./dist/cjs/index.js"
11
+ ".": {
12
+ "import": "./dist/es/index.js",
13
+ "require": "./dist/cjs/index.js"
14
+ },
15
+ "./mui5Theme": {
16
+ "import": "./dist/es/mui5Theme.js",
17
+ "require": "./dist/cjs/mui5Theme.js"
18
+ },
19
+ "./mui4Theme": {
20
+ "import": "./dist/es/mui4Theme.js",
21
+ "require": "./dist/cjs/mui4Theme.js"
22
+ }
23
+ },
24
+ "types": "dist/types/index.d.ts",
25
+ "typesVersions": {
26
+ "*": {
27
+ "*": [
28
+ "dist/types/index.d.ts"
29
+ ],
30
+ "theme/mui5Theme": [
31
+ "dist/types/theme/mui5Theme/index.d.ts"
32
+ ],
33
+ "theme/mui4Theme": [
34
+ "dist/types/theme/mui4Theme/index.d.ts"
35
+ ]
36
+ }
13
37
  },
14
38
  "author": {
15
39
  "name": "Marco Schumacher",
@@ -17,50 +41,65 @@
17
41
  },
18
42
  "license": "ISC",
19
43
  "scripts": {
20
- "start": "npm --prefix example run dev",
21
- "dev": "run-p dev:*",
22
- "dev:esm": "tsc --watch",
23
- "dev:cjs": "tsc -p tsconfig-cjs.json --watch",
24
- "build": "npm-run-all -s build:clean -p build:compile:*",
25
- "build:clean": "rimraf dist/**",
26
- "build:compile:esm": "tsc",
27
- "build:compile:cjs": "tsc -p tsconfig-cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
44
+ "start": "vite",
45
+ "build": "run-s build:clean build:compile:*",
46
+ "build:clean": "rimraf \"dist/**/*\"",
47
+ "build:compile:js": "vite build",
48
+ "build:compile:types": "tsc --outDir dist/types --declaration --emitDeclarationOnly",
28
49
  "lint": "run-p lint:*",
29
50
  "lint:eslint": "eslint src",
30
51
  "lint:tsc": "tsc --noEmit",
31
- "prepublishOnly": "run-s test lint build",
32
- "test": "cd test && ava",
33
- "test-watch": "cd test && ava --watch",
34
- "coverage": "nyc --include src --all npm run test"
52
+ "prepublishOnly": "run-s lint build"
53
+ },
54
+ "dependencies": {
55
+ "@emotion/react": "^11.7.1",
56
+ "dayzed": "^3.2.2",
57
+ "immer": "^9.0.12",
58
+ "schummar-state": "0.2.1-experimental-9"
35
59
  },
36
60
  "peerDependencies": {
37
- "@material-ui/core": ">=4.11.4",
38
- "@material-ui/icons": ">=4.11.2",
39
- "@types/react": ">=17.0.11",
40
- "immer": ">=9.0.3",
41
- "react": ">=16.8.0",
42
- "schummar-state": ">=0.0.36"
61
+ "@emotion/styled": "^11.6.0",
62
+ "@material-ui/core": "^4.12.3",
63
+ "@mui/material": "^5.4.0",
64
+ "@types/react": ">=17",
65
+ "@types/react-dom": ">=17",
66
+ "react": ">=17",
67
+ "react-dom": ">=17"
68
+ },
69
+ "peerDependenciesMeta": {
70
+ "@emotion/styled": {
71
+ "optional": true
72
+ },
73
+ "@material-ui/core": {
74
+ "optional": true
75
+ },
76
+ "@mui/material": {
77
+ "optional": true
78
+ }
43
79
  },
44
80
  "devDependencies": {
45
- "@testing-library/react": "^12.1.2",
46
- "@types/react": "*",
47
- "@typescript-eslint/eslint-plugin": "^5.4.0",
48
- "@typescript-eslint/parser": "^5.4.0",
49
- "ava": "^3.15.0",
50
- "eslint": "^8.2.0",
51
- "global-jsdom": "^8.3.0",
52
- "immer": "*",
53
- "jsdom": "^18.1.0",
81
+ "@emotion/styled": "^11.6.0",
82
+ "@fontsource/fira-sans": "^4.5.2",
83
+ "@material-ui/core": "^4.12.3",
84
+ "@mui/material": "^5.4.1",
85
+ "@types/react": "17",
86
+ "@types/react-dom": "17",
87
+ "@typescript-eslint/eslint-plugin": "^5.11.0",
88
+ "@typescript-eslint/parser": "^5.11.0",
89
+ "@vitejs/plugin-react": "^1.2.0",
90
+ "@vitejs/plugin-react-refresh": "^1.3.6",
91
+ "eslint": "^8.8.0",
54
92
  "localforage": "^1.10.0",
55
93
  "npm-run-all": "^4.1.5",
56
94
  "nyc": "^15.1.0",
57
- "prettier": "^2.4.1",
58
- "react": "^17.0.2",
59
- "react-dom": "^17.0.2",
95
+ "prettier": "^2.5.1",
96
+ "react": "17",
97
+ "react-dom": "17",
60
98
  "rimraf": "^3.0.2",
61
- "schummar-state": "*",
62
- "ts-node": "^10.4.0",
63
- "typescript": "^4.5.2"
99
+ "ts-node": "^10.5.0",
100
+ "typescript": "^4.5.5",
101
+ "vite": "file:../vite/packages/vite",
102
+ "zx": "^5.0.0"
64
103
  },
65
104
  "files": [
66
105
  "dist"
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Cell = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const react_1 = require("react");
6
- const __1 = require("..");
7
- const helpers_1 = require("../misc/helpers");
8
- const row_1 = require("./row");
9
- const useCommonClasses_1 = require("./useCommonClasses");
10
- exports.Cell = (0, react_1.memo)(function Cell({ itemId, rowIndex }) {
11
- var _a, _b;
12
- const commonClasses = (0, useCommonClasses_1.useCommonClasses)();
13
- const state = (0, __1.useTableContext)();
14
- const columnId = (0, __1.useColumnContext)();
15
- const column = state.useState((state) => state.activeColumns.find((column) => column.id === columnId), [columnId]);
16
- const item = state.useState((state) => state.activeItemsById.get(itemId), [itemId]);
17
- const classes = state.useState('props.classes');
18
- let wrapCell = state.useState('props.wrapCell');
19
- if (!column || !item)
20
- return null;
21
- (_b = (_a = state.getState().props).debug) === null || _b === void 0 ? void 0 : _b.call(_a, 'render cell', itemId, columnId);
22
- const className = (0, helpers_1.c)((0, row_1.calcClassName)(classes, item, rowIndex), (0, row_1.calcClassName)(column === null || column === void 0 ? void 0 : column.classes, item, rowIndex));
23
- const content = column.renderCell(column.value(item), item);
24
- if (!wrapCell && typeof content === 'string') {
25
- wrapCell = (content) => ((0, jsx_runtime_1.jsx)("div", Object.assign({ className: (0, helpers_1.c)(commonClasses.cell, className) }, { children: (0, jsx_runtime_1.jsx)("span", Object.assign({ className: (0, helpers_1.c)(commonClasses.text) }, { children: content }), void 0) }), void 0));
26
- }
27
- else if (!wrapCell) {
28
- wrapCell = (content) => (0, jsx_runtime_1.jsx)("div", Object.assign({ className: (0, helpers_1.c)(commonClasses.cell, className) }, { children: content }), void 0);
29
- }
30
- return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: wrapCell(content, item) }, void 0);
31
- });
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ColumnSelection = void 0;
4
- const jsx_runtime_1 = require("react/jsx-runtime");
5
- const core_1 = require("@material-ui/core");
6
- const icons_1 = require("@material-ui/icons");
7
- const react_1 = require("react");
8
- const table_1 = require("../table");
9
- const useClasses = (0, core_1.makeStyles)((theme) => ({
10
- list: {
11
- padding: theme.spacing(2),
12
- display: 'grid',
13
- },
14
- }));
15
- function ColumnSelection() {
16
- const classes = useClasses();
17
- const [anchor, setAnchor] = (0, react_1.useState)(null);
18
- const state = (0, table_1.useTableContext)();
19
- const columns = state.useState('props.columns');
20
- const hiddenColumns = state.useState('hiddenColumns');
21
- const toggle = (column) => {
22
- const { props: { hiddenColumns: controlledHiddenColumns, onHiddenColumnsChange }, } = state.getState();
23
- const newValue = new Set(hiddenColumns);
24
- if (hiddenColumns.has(column.id))
25
- newValue.delete(column.id);
26
- else
27
- newValue.add(column.id);
28
- if (!controlledHiddenColumns) {
29
- state.update((state) => {
30
- state.hiddenColumns = newValue;
31
- });
32
- }
33
- onHiddenColumnsChange === null || onHiddenColumnsChange === void 0 ? void 0 : onHiddenColumnsChange(newValue);
34
- };
35
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(core_1.IconButton, Object.assign({ color: "inherit", size: "small", onClick: (e) => setAnchor(e.currentTarget) }, { children: (0, jsx_runtime_1.jsx)(icons_1.Settings, {}, void 0) }), void 0), (0, jsx_runtime_1.jsx)(core_1.Popover, Object.assign({ open: !!anchor, onClose: () => setAnchor(null), anchorEl: anchor, anchorOrigin: { vertical: 'bottom', horizontal: 'center' }, transformOrigin: { vertical: 'top', horizontal: 'left' } }, { children: (0, jsx_runtime_1.jsx)("div", Object.assign({ className: classes.list }, { children: columns.map((column) => ((0, jsx_runtime_1.jsx)(core_1.FormControlLabel, { control: (0, jsx_runtime_1.jsx)(core_1.Checkbox, { checked: !hiddenColumns.has(column.id), onChange: () => toggle(column), disabled: column.cannotHide }, void 0), label: column.header }, column.id))) }), void 0) }), void 0)] }, void 0));
36
- }
37
- exports.ColumnSelection = ColumnSelection;
@@ -1,22 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import { Filter } from './filterComponent';
3
- export declare class DefaultFilter<T, O> implements Filter<T> {
4
- readonly values: Set<O>;
5
- readonly filter: (item: T) => boolean;
6
- constructor(values: Set<O>, filter: (item: T) => boolean);
7
- }
8
- declare type UnwrapArray<O> = O extends Array<infer S> ? S : O;
9
- export declare function DefaultFilterComponent<V>(props: {
10
- options?: UnwrapArray<V>[];
11
- compare?: (a: UnwrapArray<V>, b: UnwrapArray<V>) => boolean;
12
- stringValue?: (value: UnwrapArray<V>) => string;
13
- render?: (value: UnwrapArray<V>) => ReactNode;
14
- }): JSX.Element;
15
- export declare function DefaultFilterComponent<T, V, O>(props: {
16
- filterBy?: (value: V, item: T) => O | O[];
17
- options?: O[];
18
- compare?: (a: O, b: O) => boolean;
19
- stringValue?: (value: O) => string;
20
- render?: (value: O) => ReactNode;
21
- }): JSX.Element;
22
- export {};