@oscarpalmer/tabela 0.9.0 → 0.11.0

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 (60) hide show
  1. package/dist/components/body.component.js +3 -15
  2. package/dist/components/footer.component.js +3 -3
  3. package/dist/components/header.component.js +2 -2
  4. package/dist/components/row.component.js +19 -7
  5. package/dist/helpers/dom.helpers.js +5 -10
  6. package/dist/helpers/misc.helpers.js +7 -0
  7. package/dist/helpers/style.helper.js +6 -0
  8. package/dist/managers/column.manager.js +10 -9
  9. package/dist/managers/data.manager.js +26 -22
  10. package/dist/managers/event.manager.js +39 -19
  11. package/dist/managers/filter.manager.js +11 -10
  12. package/dist/managers/navigation.manager.js +73 -0
  13. package/dist/managers/render.manager.js +110 -0
  14. package/dist/managers/row.manager.js +7 -7
  15. package/dist/managers/selection.manager.js +189 -0
  16. package/dist/managers/sort.manager.js +9 -8
  17. package/dist/tabela.full.js +1096 -433
  18. package/dist/tabela.js +34 -11
  19. package/package.json +1 -1
  20. package/src/components/body.component.ts +5 -20
  21. package/src/components/footer.component.ts +3 -3
  22. package/src/components/header.component.ts +2 -2
  23. package/src/components/row.component.ts +30 -10
  24. package/src/helpers/dom.helpers.ts +3 -10
  25. package/src/helpers/misc.helpers.ts +15 -0
  26. package/src/helpers/style.helper.ts +6 -0
  27. package/src/managers/column.manager.ts +12 -14
  28. package/src/managers/data.manager.ts +31 -27
  29. package/src/managers/event.manager.ts +67 -37
  30. package/src/managers/filter.manager.ts +12 -11
  31. package/src/managers/navigation.manager.ts +145 -0
  32. package/src/managers/render.manager.ts +184 -0
  33. package/src/managers/row.manager.ts +9 -14
  34. package/src/managers/selection.manager.ts +332 -0
  35. package/src/managers/sort.manager.ts +14 -14
  36. package/src/models/render.model.ts +16 -0
  37. package/src/models/tabela.model.ts +23 -2
  38. package/src/tabela.ts +42 -10
  39. package/types/components/row.component.d.ts +4 -4
  40. package/types/helpers/dom.helpers.d.ts +1 -1
  41. package/types/helpers/misc.helpers.d.ts +2 -0
  42. package/types/helpers/style.helper.d.ts +1 -0
  43. package/types/managers/column.manager.d.ts +4 -5
  44. package/types/managers/data.manager.d.ts +5 -6
  45. package/types/managers/event.manager.d.ts +3 -6
  46. package/types/managers/filter.manager.d.ts +3 -3
  47. package/types/managers/navigation.manager.d.ts +10 -0
  48. package/types/managers/render.manager.d.ts +16 -0
  49. package/types/managers/row.manager.d.ts +4 -5
  50. package/types/managers/selection.manager.d.ts +18 -0
  51. package/types/managers/sort.manager.d.ts +4 -4
  52. package/types/models/render.model.d.ts +13 -0
  53. package/types/models/tabela.model.d.ts +21 -2
  54. package/types/tabela.d.ts +2 -1
  55. package/dist/managers/virtualization.manager.js +0 -101
  56. package/src/managers/virtualization.manager.ts +0 -176
  57. package/src/models/virtualization.model.ts +0 -14
  58. package/types/managers/virtualization.manager.d.ts +0 -18
  59. package/types/models/virtualization.model.d.ts +0 -12
  60. /package/dist/models/{virtualization.model.js → render.model.js} +0 -0
@@ -0,0 +1,332 @@
1
+ import {isKey} from '@oscarpalmer/atoms/is';
2
+ import type {Key} from '@oscarpalmer/atoms/models';
3
+ import {findAncestor, type EventPosition} from '@oscarpalmer/toretto';
4
+ import {setAttribute} from '@oscarpalmer/toretto/attribute';
5
+ import {getPosition, on} from '@oscarpalmer/toretto/event';
6
+ import {createElement} from '../helpers/dom.helpers';
7
+ import {getKey} from '../helpers/misc.helpers';
8
+ import {dragStyling} from '../helpers/style.helper';
9
+ import type {TabelaSelection, TabelaState} from '../models/tabela.model';
10
+
11
+ export class SelectionManager {
12
+ handlers = Object.freeze({
13
+ clear: () => this.clear(),
14
+ deselect: keys => this.deselect(keys),
15
+ select: keys => this.select(keys),
16
+ toggle: () => this.toggle(),
17
+ } as TabelaSelection);
18
+
19
+ items = new Set<Key>();
20
+
21
+ last: Key | undefined;
22
+
23
+ constructor(public state: TabelaState) {
24
+ mapped.set(state.element, this);
25
+ }
26
+
27
+ clear(): void {
28
+ if (this.items.size === 0) {
29
+ return;
30
+ }
31
+
32
+ const removed = [...this.items];
33
+
34
+ this.items.clear();
35
+
36
+ this.update(removed);
37
+ }
38
+
39
+ deselect(keys: Key[]): void {
40
+ const {length} = keys;
41
+
42
+ const removed: Key[] = [];
43
+
44
+ for (let index = 0; index < length; index += 1) {
45
+ const key = keys[index];
46
+
47
+ if (this.items.delete(key)) {
48
+ removed.push(key);
49
+ }
50
+ }
51
+
52
+ if (removed.length > 0) {
53
+ this.update(removed);
54
+ }
55
+ }
56
+
57
+ destroy(): void {
58
+ mapped.delete(this.state.element);
59
+
60
+ this.handlers = undefined as never;
61
+ this.items = undefined as never;
62
+ this.last = undefined;
63
+ this.state = undefined as never;
64
+ }
65
+
66
+ handle(event: MouseEvent, target: HTMLElement): void {
67
+ const key = getKey(target.getAttribute('data-key'));
68
+
69
+ if (key == null) {
70
+ return;
71
+ }
72
+
73
+ const {items} = this;
74
+
75
+ if (event.shiftKey) {
76
+ if (this.last == null) {
77
+ this.state.managers.navigation.setActive(key, false);
78
+ } else {
79
+ this.range(this.last, key);
80
+ }
81
+
82
+ return;
83
+ }
84
+
85
+ this.last = key;
86
+
87
+ this.state.managers.navigation.setActive(key, false);
88
+
89
+ if (event.ctrlKey || event.metaKey) {
90
+ if (items.has(key)) {
91
+ this.deselect([key]);
92
+ } else {
93
+ this.select([key]);
94
+ }
95
+
96
+ return;
97
+ }
98
+
99
+ this.set([key]);
100
+ }
101
+
102
+ range(from: Key | HTMLElement, to: Key | HTMLElement): void {
103
+ const {state} = this;
104
+
105
+ const keyed = isKey(from) && isKey(to);
106
+
107
+ const fromKey = keyed ? (from as Key) : getKey((from as HTMLElement).getAttribute('data-key'))!;
108
+ const toKey = keyed ? (to as Key) : getKey((to as HTMLElement).getAttribute('data-key'))!;
109
+
110
+ if (fromKey === toKey) {
111
+ return;
112
+ }
113
+
114
+ const keys = state.managers.data.values.keys.active ?? state.managers.data.values.keys.original;
115
+
116
+ const fromIndex = state.managers.data.getIndex(fromKey);
117
+ const toIndex = state.managers.data.getIndex(toKey);
118
+
119
+ if (fromIndex === -1 || toIndex === -1) {
120
+ return;
121
+ }
122
+
123
+ const [start, end] = fromIndex < toIndex ? [fromIndex, toIndex] : [toIndex, fromIndex];
124
+
125
+ const selected: Key[] = [];
126
+
127
+ for (let index = start; index <= end; index += 1) {
128
+ selected.push(keys[index]);
129
+ }
130
+
131
+ if (keyed) {
132
+ this.select(selected);
133
+ } else {
134
+ this.set(selected);
135
+ }
136
+
137
+ this.last = toKey;
138
+
139
+ this.state.managers.navigation.setActive(toKey, false);
140
+ }
141
+
142
+ select(keys: Key[]): void {
143
+ const {length} = keys;
144
+
145
+ let update = false;
146
+
147
+ for (let index = 0; index < length; index += 1) {
148
+ const key = keys[index];
149
+
150
+ if (!this.items.has(key)) {
151
+ this.items.add(key);
152
+
153
+ update = true;
154
+ }
155
+ }
156
+
157
+ if (update) {
158
+ this.update([]);
159
+ }
160
+ }
161
+
162
+ set(keys: Key[]): void {
163
+ const {items} = this;
164
+
165
+ const removed = [...items].filter(key => !keys.includes(key));
166
+ const added = keys.filter(key => !items.has(key));
167
+
168
+ if (removed.length === 0 && added.length === 0) {
169
+ return;
170
+ }
171
+
172
+ this.items = new Set(keys);
173
+
174
+ this.update(removed);
175
+ }
176
+
177
+ toggle(): void {
178
+ const {items, state} = this;
179
+
180
+ const all = state.managers.data.values.keys.active ?? state.managers.data.values.keys.original;
181
+
182
+ if (items.size === all.length) {
183
+ this.clear();
184
+ } else {
185
+ this.select(all);
186
+ }
187
+ }
188
+
189
+ update(removed: Key[]): void {
190
+ const items = [
191
+ ...removed.map(key => ({key, removed: true})),
192
+ ...[...this.items].map(key => ({key, removed: false})),
193
+ ];
194
+
195
+ const {length} = items;
196
+
197
+ for (let index = 0; index < length; index += 1) {
198
+ const {key, removed} = items[index];
199
+
200
+ const row = this.state.managers.row.get(key);
201
+
202
+ if (row == null || row.element == null) {
203
+ continue;
204
+ }
205
+
206
+ setAttribute(row.element, 'aria-selected', String(!removed));
207
+
208
+ if (removed) {
209
+ row.element.classList.remove('tabela__row--selected');
210
+ } else {
211
+ row.element.classList.add('tabela__row--selected');
212
+ }
213
+ }
214
+ }
215
+ }
216
+
217
+ function getPlaceholder(): HTMLElement {
218
+ placeholder ??= createElement(
219
+ 'div',
220
+ {
221
+ className: 'tabela__selection--placeholder',
222
+ },
223
+ {},
224
+ {},
225
+ );
226
+
227
+ return placeholder;
228
+ }
229
+
230
+ function onMouseDown(event: MouseEvent): void {
231
+ if (shifted) {
232
+ const row = findAncestor(event.target as HTMLElement, '.tabela__row--body');
233
+
234
+ if (!(row instanceof HTMLElement)) {
235
+ return;
236
+ }
237
+
238
+ startElement = row;
239
+ startPosition = getPosition(event)!;
240
+
241
+ dragStyling.set();
242
+ }
243
+ }
244
+
245
+ function onMouseMove(event: MouseEvent): void {
246
+ if (startElement == null) {
247
+ return;
248
+ }
249
+
250
+ const currentPosition = getPosition(event)!;
251
+
252
+ if (currentPosition == null || startPosition == null) {
253
+ return;
254
+ }
255
+
256
+ const element = getPlaceholder();
257
+
258
+ if (element.parentElement == null) {
259
+ document.body.append(element);
260
+ }
261
+
262
+ const {x: cX, y: cY} = currentPosition;
263
+ const {x: sX, y: sY} = startPosition;
264
+
265
+ const top = Math.min(cY, sY);
266
+ const left = Math.min(cX, sX);
267
+
268
+ const width = Math.abs(cX - sX);
269
+ const height = Math.abs(cY - sY);
270
+
271
+ element.style.inset = `${top}px ${window.innerWidth - left - width}px ${window.innerHeight - top - height}px ${left}px`;
272
+ }
273
+
274
+ function onMouseUp(event: MouseEvent): void {
275
+ if (startElement == null) {
276
+ return;
277
+ }
278
+
279
+ if (!event.shiftKey) {
280
+ shifted = false;
281
+
282
+ dragStyling.remove();
283
+ }
284
+
285
+ getPlaceholder().remove();
286
+
287
+ const row = findAncestor(event.target as HTMLElement, '.tabela__row--body');
288
+
289
+ if (row instanceof HTMLElement) {
290
+ endElement = row;
291
+
292
+ const endTable = findAncestor(endElement, '.tabela');
293
+ const startTable = findAncestor(startElement, '.tabela');
294
+
295
+ if (startTable != null && startTable === endTable) {
296
+ mapped.get(startTable)?.range(startElement, endElement);
297
+ }
298
+ }
299
+
300
+ endElement = undefined;
301
+ startElement = undefined;
302
+ startPosition = undefined as never;
303
+ }
304
+
305
+ function onShift(event: KeyboardEvent, value: boolean): void {
306
+ if (event.key === 'Shift') {
307
+ shifted = value;
308
+ }
309
+ }
310
+
311
+ function onShiftDown(event: KeyboardEvent): void {
312
+ onShift(event, true);
313
+ }
314
+
315
+ function onShiftUp(event: KeyboardEvent): void {
316
+ onShift(event, false);
317
+ }
318
+
319
+ const mapped = new WeakMap<Element, SelectionManager>();
320
+
321
+ let shifted = false;
322
+
323
+ let endElement: HTMLElement | undefined;
324
+ let placeholder: HTMLElement;
325
+ let startPosition: EventPosition;
326
+ let startElement: HTMLElement | undefined;
327
+
328
+ on(document, 'keydown', onShiftDown);
329
+ on(document, 'keyup', onShiftUp);
330
+ on(document, 'mousedown', onMouseDown);
331
+ on(document, 'mousemove', onMouseMove);
332
+ on(document, 'mouseup', onMouseUp);
@@ -2,7 +2,7 @@ import {sort, type ArrayKeySorter} from '@oscarpalmer/atoms/array';
2
2
  import type {Key, PlainObject} from '@oscarpalmer/atoms/models';
3
3
  import {setAttribute, setAttributes} from '@oscarpalmer/toretto/attribute';
4
4
  import type {SortDirection, SortItem} from '../models/sort.model';
5
- import type {TabelaManagers, TabelaSort} from '../models/tabela.model';
5
+ import type {TabelaSort, TabelaState} from '../models/tabela.model';
6
6
 
7
7
  export class SortManager {
8
8
  handlers = Object.freeze({
@@ -13,9 +13,9 @@ export class SortManager {
13
13
  set: items => this.set(items),
14
14
  } satisfies TabelaSort);
15
15
 
16
- readonly items: ArrayKeySorter<PlainObject>[] = [];
16
+ items: ArrayKeySorter<PlainObject>[] = [];
17
17
 
18
- constructor(readonly managers: TabelaManagers) {}
18
+ constructor(public state: TabelaState) {}
19
19
 
20
20
  add(field: string, direction?: SortDirection): void {
21
21
  const index = this.items.findIndex(item => item.key === field);
@@ -50,7 +50,8 @@ export class SortManager {
50
50
 
51
51
  destroy(): void {
52
52
  this.handlers = undefined as never;
53
- this.items.length = 0;
53
+ this.items = undefined as never;
54
+ this.state = undefined as never;
54
55
  }
55
56
 
56
57
  flip(field: string): void {
@@ -94,12 +95,12 @@ export class SortManager {
94
95
  }
95
96
 
96
97
  sort(): void {
97
- const {items, managers} = this;
98
+ const {items, state} = this;
98
99
 
99
- const {length} = managers.column.items;
100
+ const {length} = state.managers.column.items;
100
101
 
101
102
  for (let index = 0; index < length; index += 1) {
102
- const column = managers.column.items[index];
103
+ const column = state.managers.column.items[index];
103
104
 
104
105
  const sorterIndex = items.findIndex(item => item.key === column.options.field);
105
106
  const sorterItem = items[sorterIndex];
@@ -117,18 +118,17 @@ export class SortManager {
117
118
  );
118
119
  }
119
120
 
120
- managers.data.values.keys.active =
121
+ state.managers.data.values.keys.active =
121
122
  items.length === 0
122
123
  ? undefined
123
124
  : (sort(
124
- managers.data.values.keys.active?.map(
125
- key => managers.data.values.objects.mapped.get(key)!,
126
- ) ??
127
- managers.data.values.objects.array,
125
+ state.managers.data.values.keys.active?.map(
126
+ key => state.managers.data.values.objects.mapped.get(key)!,
127
+ ) ?? state.managers.data.values.objects.array,
128
128
  items,
129
- ).map(row => row[managers.data.field]) as Key[]);
129
+ ).map(row => row[state.key]) as Key[]);
130
130
 
131
- managers.virtualization.update(true, true);
131
+ state.managers.render.update(true, true);
132
132
  }
133
133
 
134
134
  toggle(event: MouseEvent, field: string, direction?: string | null): void {
@@ -0,0 +1,16 @@
1
+ import type {TabelaState} from './tabela.model';
2
+
3
+ export type RenderElementPool = {
4
+ cells: Record<string, HTMLDivElement[]>;
5
+ rows: HTMLDivElement[];
6
+ };
7
+
8
+ export type RenderRange = {
9
+ end: number;
10
+ start: number;
11
+ };
12
+
13
+ export type RenderState = {
14
+ active: boolean;
15
+ top: number;
16
+ } & TabelaState;
@@ -6,11 +6,14 @@ import type {ColumnManager} from '../managers/column.manager';
6
6
  import type {DataManager} from '../managers/data.manager';
7
7
  import type {EventManager} from '../managers/event.manager';
8
8
  import type {FilterManager} from '../managers/filter.manager';
9
+ import type {NavigationManager} from '../managers/navigation.manager';
10
+ import type {RenderManager} from '../managers/render.manager';
9
11
  import type {RowManager} from '../managers/row.manager';
12
+ import type {SelectionManager} from '../managers/selection.manager';
10
13
  import type {SortManager} from '../managers/sort.manager';
11
- import type {VirtualizationManager} from '../managers/virtualization.manager';
12
14
  import type {FilterItem} from './filter.model';
13
15
  import type {SortDirection, SortItem} from './sort.model';
16
+ import type {TabelaOptions} from './tabela.options';
14
17
 
15
18
  export type TabelaComponents = {
16
19
  body: BodyComponent;
@@ -41,9 +44,18 @@ export type TabelaManagers = {
41
44
  data: DataManager;
42
45
  event: EventManager;
43
46
  filter: FilterManager;
47
+ navigation: NavigationManager;
44
48
  row: RowManager;
49
+ selection: SelectionManager;
45
50
  sort: SortManager;
46
- virtualization: VirtualizationManager;
51
+ render: RenderManager;
52
+ };
53
+
54
+ export type TabelaSelection = {
55
+ clear(): void;
56
+ deselect(keys: Key[]): void;
57
+ select(keys: Key[]): void;
58
+ toggle(): void;
47
59
  };
48
60
 
49
61
  export type TabelaSort = {
@@ -53,3 +65,12 @@ export type TabelaSort = {
53
65
  remove(field: string): void;
54
66
  set(items: SortItem[]): void;
55
67
  };
68
+
69
+ export type TabelaState = {
70
+ readonly components: TabelaComponents;
71
+ readonly element: HTMLElement;
72
+ readonly id: number;
73
+ readonly key: string;
74
+ readonly managers: TabelaManagers;
75
+ readonly options: TabelaOptions;
76
+ };
package/src/tabela.ts CHANGED
@@ -5,15 +5,19 @@ import {ColumnManager} from './managers/column.manager';
5
5
  import {DataManager} from './managers/data.manager';
6
6
  import {EventManager} from './managers/event.manager';
7
7
  import {FilterManager} from './managers/filter.manager';
8
+ import {NavigationManager} from './managers/navigation.manager';
9
+ import {RenderManager} from './managers/render.manager';
8
10
  import {RowManager} from './managers/row.manager';
11
+ import {SelectionManager} from './managers/selection.manager';
9
12
  import {SortManager} from './managers/sort.manager';
10
- import {VirtualizationManager} from './managers/virtualization.manager';
11
13
  import type {
12
14
  TabelaComponents,
13
15
  TabelaData,
14
16
  TabelaFilter,
15
17
  TabelaManagers,
18
+ TabelaSelection,
16
19
  TabelaSort,
20
+ TabelaState,
17
21
  } from './models/tabela.model';
18
22
  import type {TabelaOptions} from './models/tabela.options';
19
23
 
@@ -26,6 +30,8 @@ export class Tabela {
26
30
 
27
31
  #element: HTMLElement;
28
32
 
33
+ #id = getId();
34
+
29
35
  readonly #key: string;
30
36
 
31
37
  readonly #managers: TabelaManagers = {
@@ -33,15 +39,19 @@ export class Tabela {
33
39
  data: undefined as never,
34
40
  event: undefined as never,
35
41
  filter: undefined as never,
42
+ navigation: undefined as never,
43
+ render: undefined as never,
36
44
  row: undefined as never,
45
+ selection: undefined as never,
37
46
  sort: undefined as never,
38
- virtualization: undefined as never,
39
47
  };
40
48
 
41
49
  readonly data: TabelaData;
42
50
 
43
51
  readonly filter: TabelaFilter;
44
52
 
53
+ readonly selection: TabelaSelection;
54
+
45
55
  readonly sort: TabelaSort;
46
56
 
47
57
  get key(): string {
@@ -64,13 +74,24 @@ export class Tabela {
64
74
  this.#components.body = new BodyComponent();
65
75
  this.#components.footer = new FooterComponent();
66
76
 
67
- this.#managers.column = new ColumnManager(this.#managers, this.#components, options.columns);
68
- this.#managers.data = new DataManager(this.#managers, this.#components, options.key);
69
- this.#managers.event = new EventManager(this.#managers, this.#element);
70
- this.#managers.filter = new FilterManager(this.#managers);
71
- this.#managers.row = new RowManager(this.#managers, options.rowHeight);
72
- this.#managers.sort = new SortManager(this.#managers);
73
- this.#managers.virtualization = new VirtualizationManager(this.#managers, this.#components);
77
+ const state: TabelaState = {
78
+ element,
79
+ options,
80
+ components: this.#components,
81
+ id: this.#id,
82
+ key: this.#key,
83
+ managers: this.#managers,
84
+ };
85
+
86
+ this.#managers.column = new ColumnManager(state);
87
+ this.#managers.data = new DataManager(state);
88
+ this.#managers.event = new EventManager(state);
89
+ this.#managers.filter = new FilterManager(state);
90
+ this.#managers.navigation = new NavigationManager(state);
91
+ this.#managers.render = new RenderManager(state);
92
+ this.#managers.row = new RowManager(state);
93
+ this.#managers.selection = new SelectionManager(state);
94
+ this.#managers.sort = new SortManager(state);
74
95
 
75
96
  element.append(
76
97
  this.#components.header.elements.group,
@@ -82,6 +103,7 @@ export class Tabela {
82
103
 
83
104
  this.data = this.#managers.data.handlers;
84
105
  this.filter = this.#managers.filter.handlers;
106
+ this.selection = this.#managers.selection.handlers;
85
107
  this.sort = this.#managers.sort.handlers;
86
108
  }
87
109
 
@@ -98,9 +120,11 @@ export class Tabela {
98
120
  managers.data.destroy();
99
121
  managers.event.destroy();
100
122
  managers.filter.destroy();
123
+ // managers.navigation.destroy();
124
+ managers.render.destroy();
101
125
  managers.row.destroy();
126
+ managers.selection.destroy();
102
127
  managers.sort.destroy();
103
- managers.virtualization.destroy();
104
128
 
105
129
  element.innerHTML = '';
106
130
  element.role = '';
@@ -112,3 +136,11 @@ export class Tabela {
112
136
  this.#element = undefined as never;
113
137
  }
114
138
  }
139
+
140
+ function getId(): number {
141
+ id += 1;
142
+
143
+ return id;
144
+ }
145
+
146
+ let id = 0;
@@ -1,8 +1,8 @@
1
1
  import type { Key } from '@oscarpalmer/atoms/models';
2
- import type { TabelaManagers } from '../models/tabela.model';
3
- import type { VirtualizationPool } from '../models/virtualization.model';
4
- export declare function removeRow(pool: VirtualizationPool, row: RowComponent): void;
5
- export declare function renderRow(managers: TabelaManagers, row: RowComponent): void;
2
+ import type { RenderElementPool } from '../models/render.model';
3
+ import type { TabelaState } from '../models/tabela.model';
4
+ export declare function removeRow(pool: RenderElementPool, row: RowComponent): void;
5
+ export declare function renderRow(state: TabelaState, row: RowComponent): void;
6
6
  export declare class RowComponent {
7
7
  readonly key: Key;
8
8
  cells: Record<string, HTMLDivElement>;
@@ -6,5 +6,5 @@ export declare function createCell(width: number, body?: boolean): HTMLDivElemen
6
6
  export declare function createElement<TagName extends keyof HTMLElementTagNameMap>(tagName: TagName, properties: Partial<HTMLElementTagNameMap[TagName]>, attributes: Record<string, string>, style: Partial<CSSStyleDeclaration>): HTMLElementTagNameMap[TagName];
7
7
  export declare function createRowGroup(): RowGroupWithRow;
8
8
  export declare function createRowGroup(withRow: boolean): HTMLDivElement;
9
- export declare function createRow(withStyle?: boolean): HTMLDivElement;
9
+ export declare function createRow(): HTMLDivElement;
10
10
  export {};
@@ -0,0 +1,2 @@
1
+ import type { Key } from '@oscarpalmer/atoms/models';
2
+ export declare function getKey(value: unknown): Key | undefined;
@@ -0,0 +1 @@
1
+ export declare const dragStyling: import("@oscarpalmer/toretto").StyleToggler;
@@ -1,11 +1,10 @@
1
1
  import { ColumnComponent } from '../components/column.component';
2
2
  import type { TabelaColumnOptions } from '../models/column.model';
3
- import type { TabelaComponents, TabelaManagers } from '../models/tabela.model';
3
+ import type { TabelaState } from '../models/tabela.model';
4
4
  export declare class ColumnManager {
5
- managers: TabelaManagers;
6
- components: TabelaComponents;
7
- readonly items: ColumnComponent[];
8
- constructor(managers: TabelaManagers, components: TabelaComponents, columns: TabelaColumnOptions[]);
5
+ state: TabelaState;
6
+ items: ColumnComponent[];
7
+ constructor(state: TabelaState);
9
8
  destroy(): void;
10
9
  remove(field: string): void;
11
10
  remove(fields: string[]): void;
@@ -1,10 +1,8 @@
1
1
  import type { Key, PlainObject } from '@oscarpalmer/atoms/models';
2
2
  import type { DataValues } from '../models/data.model';
3
- import type { TabelaComponents, TabelaManagers } from '../models/tabela.model';
3
+ import type { TabelaState } from '../models/tabela.model';
4
4
  export declare class DataManager {
5
- managers: TabelaManagers;
6
- components: TabelaComponents;
7
- field: string;
5
+ state: TabelaState;
8
6
  handlers: Readonly<{
9
7
  add: (data: PlainObject[]) => undefined;
10
8
  clear: () => undefined;
@@ -13,13 +11,14 @@ export declare class DataManager {
13
11
  synchronize: (data: PlainObject[], remove: boolean | undefined) => undefined;
14
12
  update: (data: PlainObject[]) => undefined;
15
13
  }>;
16
- readonly values: DataValues;
14
+ values: DataValues;
17
15
  get size(): number;
18
- constructor(managers: TabelaManagers, components: TabelaComponents, field: string);
16
+ constructor(state: TabelaState);
19
17
  add(data: PlainObject[], render: boolean): Promise<void>;
20
18
  clear(): void;
21
19
  destroy(): void;
22
20
  get(active?: boolean): PlainObject[];
21
+ getIndex(key: Key): number;
23
22
  remove(items: Array<Key | PlainObject>, render: boolean): Promise<void>;
24
23
  render(): void;
25
24
  set(data: PlainObject[]): void;
@@ -1,10 +1,7 @@
1
- import type { RemovableEventListener } from '@oscarpalmer/toretto/models';
2
- import type { TabelaManagers } from '../models/tabela.model';
1
+ import type { TabelaState } from '../models/tabela.model';
3
2
  export declare class EventManager {
4
- readonly managers: TabelaManagers;
5
- listener: RemovableEventListener;
6
- constructor(managers: TabelaManagers, element: HTMLElement);
3
+ state: TabelaState;
4
+ constructor(state: TabelaState);
7
5
  destroy(): void;
8
- onClick(event: MouseEvent): void;
9
6
  onSort(event: MouseEvent, target: HTMLElement): void;
10
7
  }
@@ -1,7 +1,7 @@
1
1
  import type { FilterItem } from '../models/filter.model';
2
- import type { TabelaManagers } from '../models/tabela.model';
2
+ import type { TabelaState } from '../models/tabela.model';
3
3
  export declare class FilterManager {
4
- readonly managers: TabelaManagers;
4
+ state: TabelaState;
5
5
  handlers: Readonly<{
6
6
  add: (item: FilterItem) => void;
7
7
  clear: () => void;
@@ -9,7 +9,7 @@ export declare class FilterManager {
9
9
  set: (items: FilterItem[]) => void;
10
10
  }>;
11
11
  items: Record<string, FilterItem[]>;
12
- constructor(managers: TabelaManagers);
12
+ constructor(state: TabelaState);
13
13
  add(item: FilterItem): void;
14
14
  clear(): void;
15
15
  destroy(): void;