@oscarpalmer/tabela 0.13.0 → 0.15.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 (108) hide show
  1. package/dist/components/body.component.d.mts +10 -1
  2. package/dist/components/body.component.mjs +8 -6
  3. package/dist/components/column.component.d.mts +15 -1
  4. package/dist/components/column.component.mjs +12 -10
  5. package/dist/components/footer.component.d.mts +12 -1
  6. package/dist/components/footer.component.mjs +6 -6
  7. package/dist/components/group.component.d.mts +19 -1
  8. package/dist/components/group.component.mjs +17 -11
  9. package/dist/components/header.component.d.mts +12 -1
  10. package/dist/components/header.component.mjs +5 -5
  11. package/dist/components/row.component.d.mts +14 -1
  12. package/dist/components/row.component.mjs +21 -17
  13. package/dist/helpers/dom.helpers.d.mts +3 -3
  14. package/dist/helpers/dom.helpers.mjs +12 -11
  15. package/dist/helpers/misc.helpers.d.mts +7 -1
  16. package/dist/helpers/misc.helpers.mjs +12 -1
  17. package/dist/index.d.mts +1 -1
  18. package/dist/managers/column.manager.d.mts +16 -1
  19. package/dist/managers/column.manager.mjs +7 -7
  20. package/dist/managers/data.manager.d.mts +26 -1
  21. package/dist/managers/data.manager.mjs +122 -88
  22. package/dist/managers/event.manager.d.mts +17 -1
  23. package/dist/managers/event.manager.mjs +35 -10
  24. package/dist/managers/filter.manager.d.mts +17 -1
  25. package/dist/managers/filter.manager.mjs +43 -35
  26. package/dist/managers/group.manager.d.mts +26 -1
  27. package/dist/managers/group.manager.mjs +36 -16
  28. package/dist/managers/navigation.manager.d.mts +15 -2
  29. package/dist/managers/navigation.manager.mjs +38 -34
  30. package/dist/managers/render.manager.d.mts +18 -1
  31. package/dist/managers/render.manager.mjs +44 -31
  32. package/dist/managers/row.manager.d.mts +18 -1
  33. package/dist/managers/row.manager.mjs +1 -1
  34. package/dist/managers/selection.manager.d.mts +22 -1
  35. package/dist/managers/selection.manager.mjs +26 -23
  36. package/dist/managers/sort.manager.d.mts +22 -1
  37. package/dist/managers/sort.manager.mjs +71 -49
  38. package/dist/managers/style.manager.d.mts +8 -1
  39. package/dist/managers/style.manager.mjs +57 -25
  40. package/dist/models/body.model.d.mts +6 -1
  41. package/dist/models/column.model.d.mts +13 -2
  42. package/dist/models/data.model.d.mts +28 -2
  43. package/dist/models/dom.model.d.mts +19 -0
  44. package/dist/models/dom.model.mjs +19 -0
  45. package/dist/models/event.model.d.mts +99 -0
  46. package/dist/models/event.model.mjs +53 -0
  47. package/dist/models/filter.model.d.mts +26 -2
  48. package/dist/models/filter.model.mjs +13 -1
  49. package/dist/models/footer.model.d.mts +7 -1
  50. package/dist/models/group.model.d.mts +19 -2
  51. package/dist/models/group.model.mjs +5 -1
  52. package/dist/models/header.model.d.mts +6 -1
  53. package/dist/models/render.model.d.mts +22 -2
  54. package/dist/models/selection.model.d.mts +11 -1
  55. package/dist/models/sort.model.d.mts +19 -2
  56. package/dist/models/sort.model.mjs +5 -1
  57. package/dist/models/style.model.d.mts +27 -21
  58. package/dist/models/style.model.mjs +27 -21
  59. package/dist/models/tabela.model.d.mts +45 -1
  60. package/dist/models/tabela.options.d.mts +13 -1
  61. package/dist/tabela.d.mts +9 -8
  62. package/dist/tabela.full.mjs +1083 -574
  63. package/dist/tabela.mjs +19 -19
  64. package/package.json +2 -4
  65. package/src/components/body.component.ts +10 -7
  66. package/src/components/column.component.ts +20 -16
  67. package/src/components/footer.component.ts +7 -10
  68. package/src/components/group.component.ts +39 -13
  69. package/src/components/header.component.ts +6 -5
  70. package/src/components/row.component.ts +27 -19
  71. package/src/helpers/dom.helpers.ts +18 -22
  72. package/src/helpers/misc.helpers.ts +17 -0
  73. package/src/managers/column.manager.ts +9 -9
  74. package/src/managers/data.manager.ts +196 -107
  75. package/src/managers/event.manager.ts +69 -12
  76. package/src/managers/filter.manager.ts +70 -41
  77. package/src/managers/group.manager.ts +60 -18
  78. package/src/managers/navigation.manager.ts +46 -49
  79. package/src/managers/render.manager.ts +60 -34
  80. package/src/managers/row.manager.ts +1 -1
  81. package/src/managers/selection.manager.ts +37 -35
  82. package/src/managers/sort.manager.ts +114 -72
  83. package/src/managers/style.manager.ts +73 -25
  84. package/src/models/column.model.ts +4 -8
  85. package/src/models/data.model.ts +13 -14
  86. package/src/models/dom.model.ts +31 -0
  87. package/src/models/event.model.ts +175 -0
  88. package/src/models/filter.model.ts +22 -2
  89. package/src/models/group.model.ts +13 -0
  90. package/src/models/render.model.ts +6 -0
  91. package/src/models/sort.model.ts +11 -5
  92. package/src/models/style.model.ts +32 -20
  93. package/src/models/tabela.model.ts +1 -0
  94. package/src/tabela.ts +26 -24
  95. package/dist/body.component-_VDOpJhV.d.mts +0 -10
  96. package/dist/body.model-2iwsovAV.d.mts +0 -7
  97. package/dist/column.component-Bx46r3JI.d.mts +0 -16
  98. package/dist/column.model-D-aw4EU4.d.mts +0 -16
  99. package/dist/filter.model-7ukJrtil.d.mts +0 -16
  100. package/dist/footer.component-Curiab8j.d.mts +0 -12
  101. package/dist/footer.model-DhqoS6ds.d.mts +0 -8
  102. package/dist/group.component-Cq1YYbfJ.d.mts +0 -285
  103. package/dist/group.model-BsKFwHbt.d.mts +0 -10
  104. package/dist/header.component-BjjlpZIg.d.mts +0 -12
  105. package/dist/header.model-DN_KzUCV.d.mts +0 -7
  106. package/dist/selection.model-rwQe9fco.d.mts +0 -12
  107. package/dist/sort.model-CauImaLu.d.mts +0 -15
  108. package/dist/tabela.options-RkZvfptB.d.mts +0 -14
@@ -1,67 +1,86 @@
1
- import { GroupComponent } from "../components/group.component.mjs";
1
+ import { ARIA_SORT, ATTRIBUTE_DATA_SORT_DIRECTION, ATTRIBUTE_DATA_SORT_POSITION } from "../models/dom.model.mjs";
2
+ import { EVENT_DATA_SORTED, EVENT_SORT_ADD, EVENT_SORT_CLEAR, EVENT_SORT_FLIP, EVENT_SORT_REMOVE, EVENT_SORT_SET } from "../models/event.model.mjs";
3
+ import { isGroupKey } from "../helpers/misc.helpers.mjs";
4
+ import { SORT_ASCENDING, SORT_DESCENDING } from "../models/sort.model.mjs";
2
5
  import { setAttribute, setAttributes } from "@oscarpalmer/toretto/attribute";
3
6
  import { sort } from "@oscarpalmer/atoms/array";
4
7
  import { getValue } from "@oscarpalmer/atoms/value/handle";
5
8
  import { compare } from "@oscarpalmer/atoms/value/compare";
6
9
  //#region src/managers/sort.manager.ts
7
10
  var SortManager = class {
8
- handlers = Object.freeze({
11
+ handlers = {
9
12
  add: (field, direction) => this.add(field, direction),
10
13
  flip: (field) => this.flip(field),
11
14
  clear: () => this.clear(),
12
15
  remove: (field) => this.remove(field),
13
- set: (items) => this.set(items)
14
- });
16
+ set: (items) => this.set(items, true)
17
+ };
15
18
  items = [];
16
19
  constructor(state) {
17
20
  this.state = state;
18
21
  }
19
- add(field, direction) {
20
- if (this.items.findIndex((item) => item.key === field) > -1) return;
22
+ add(key, direction) {
23
+ if (this.items.findIndex((item) => item.key === key) > -1) return;
21
24
  this.items.push({
22
- key: field,
25
+ key,
23
26
  direction: direction ?? "ascending"
24
27
  });
28
+ this.state.managers.event.emit(EVENT_SORT_ADD, [{
29
+ key,
30
+ direction: direction ?? "ascending"
31
+ }]);
25
32
  this.sort();
26
33
  }
27
- addOrSet(event, field) {
28
- if (event.ctrlKey || event.metaKey) this.add(field);
34
+ addOrSet(event, key) {
35
+ if (event.ctrlKey || event.metaKey) this.add(key);
29
36
  else this.set([{
30
- field,
31
- direction: "ascending"
32
- }]);
37
+ key,
38
+ direction: SORT_ASCENDING
39
+ }], false);
33
40
  }
34
41
  clear() {
35
- if (this.items.length > 0) {
36
- this.items.length = 0;
37
- this.sort();
38
- }
42
+ if (this.items.length === 0) return;
43
+ this.items.length = 0;
44
+ this.state.managers.event.emit(EVENT_SORT_CLEAR);
45
+ this.sort();
39
46
  }
40
47
  destroy() {
41
48
  this.handlers = void 0;
42
49
  this.items = void 0;
43
50
  this.state = void 0;
44
51
  }
45
- flip(field) {
46
- const item = this.items.find((item) => item.key === field);
52
+ flip(key) {
53
+ const item = this.items.find((item) => item.key === key);
47
54
  if (item == null) return;
48
- item.direction = item.direction === "ascending" ? "descending" : "ascending";
55
+ item.direction = item.direction === "ascending" ? SORT_DESCENDING : SORT_ASCENDING;
56
+ this.state.managers.event.emit(EVENT_SORT_FLIP, [{
57
+ key,
58
+ direction: item.direction
59
+ }]);
49
60
  this.sort();
50
61
  }
51
- remove(field) {
52
- const index = this.items.findIndex((item) => item.key === field);
53
- if (index > -1) {
54
- this.items.splice(index, 1);
55
- this.sort();
56
- }
57
- }
58
- removeOrClear(event, field) {
59
- if (event.ctrlKey || event.metaKey) this.remove(field);
60
- else this.clear();
62
+ remove(key) {
63
+ const index = this.items.findIndex((item) => item.key === key);
64
+ if (index === -1) return;
65
+ const spliced = this.items.splice(index, 1);
66
+ this.state.managers.event.emit(EVENT_SORT_REMOVE, spliced);
67
+ if (this.items.length === 0) this.state.managers.event.emit(EVENT_SORT_CLEAR);
68
+ this.sort();
61
69
  }
62
- set(items) {
63
- this.items.splice(0, this.items.length, ...items.map((item) => ({
64
- key: item.field,
70
+ set(items, set) {
71
+ const removed = this.items.splice(0, this.items.length, ...items.map((item) => ({
72
+ key: item.key,
73
+ direction: item.direction
74
+ })));
75
+ if (set) this.state.managers.event.emit(EVENT_SORT_SET, {
76
+ removed,
77
+ added: items.map((item) => ({
78
+ key: item.key,
79
+ direction: item.direction
80
+ }))
81
+ });
82
+ else this.state.managers.event.emit(EVENT_SORT_ADD, items.map((item) => ({
83
+ key: item.key,
65
84
  direction: item.direction
66
85
  })));
67
86
  this.sort();
@@ -71,47 +90,48 @@ var SortManager = class {
71
90
  const { length } = state.managers.column.items;
72
91
  for (let index = 0; index < length; index += 1) {
73
92
  const column = state.managers.column.items[index];
74
- const sorterIndex = items.findIndex((item) => item.key === column.options.field);
93
+ const sorterIndex = items.findIndex((item) => item.key === column.options.key);
75
94
  const sorterItem = items[sorterIndex];
76
95
  setAttributes(column.elements.wrapper, {
77
- "aria-sort": sorterItem == null ? "none" : items.length > 1 ? "other" : sorterItem.direction,
78
- "data-sort-direction": sorterItem == null ? void 0 : sorterItem.direction
96
+ [ARIA_SORT]: sorterItem == null ? SORT_NONE : items.length > 1 ? SORT_OTHER : sorterItem.direction,
97
+ [ATTRIBUTE_DATA_SORT_DIRECTION]: sorterItem == null ? void 0 : sorterItem.direction
79
98
  });
80
- setAttribute(column.elements.sorter, "data-sort-position", sorterIndex > -1 && items.length > 1 ? sorterIndex + 1 : void 0);
99
+ setAttribute(column.elements.sorter, ATTRIBUTE_DATA_SORT_POSITION, sorterIndex > -1 && items.length > 1 ? sorterIndex + 1 : void 0);
81
100
  }
82
- state.managers.data.state.items.active = items.length === 0 ? void 0 : getSortedItems(state, items);
101
+ state.managers.data.state.keys.active = items.length === 0 ? void 0 : getSortedItems(state, items);
102
+ state.managers.event.emit(EVENT_DATA_SORTED, state.managers.data.get(true));
83
103
  state.managers.render.update(true, true);
84
104
  }
85
- toggle(event, field, direction) {
105
+ toggle(event, key, direction) {
86
106
  switch (direction) {
87
- case "ascending":
88
- this.flip(field);
107
+ case SORT_ASCENDING:
108
+ this.flip(key);
89
109
  return;
90
- case "descending":
91
- this.removeOrClear(event, field);
110
+ case SORT_DESCENDING:
111
+ this.remove(key);
92
112
  return;
93
113
  default:
94
- this.addOrSet(event, field);
114
+ this.addOrSet(event, key);
95
115
  return;
96
116
  }
97
117
  }
98
118
  };
99
119
  function getSortedItems(state, sorters) {
100
- const data = state.managers.data.state.items.active?.map((key) => key instanceof GroupComponent ? key : state.managers.data.state.values.mapped.get(key)) ?? state.managers.data.state.values.array.slice();
120
+ const data = state.managers.data.state.keys.active?.map((key) => isGroupKey(key) ? key : state.managers.data.state.values.mapped.get(key)) ?? state.managers.data.state.values.array;
101
121
  if (!state.managers.group.enabled) return sort(data, sorters).map((item) => getValue(item, state.key));
102
- return sortWithGroups(state, data, sorters).map((item) => item instanceof GroupComponent ? item : getValue(item, state.key));
122
+ return sortWithGroups(state, data, sorters).map((item) => isGroupKey(item) ? item : getValue(item, state.key));
103
123
  }
104
124
  function sortWithGroups(state, data, sorters) {
105
125
  const { length } = sorters;
106
126
  return data.sort((first, second) => {
107
- const firstValue = first instanceof GroupComponent ? first.value.stringified : getValue(first, state.managers.group.field);
108
- const secondValue = second instanceof GroupComponent ? second.value.stringified : getValue(second, state.managers.group.field);
127
+ const firstIsGroup = isGroupKey(first);
128
+ const secondIsGroup = isGroupKey(second);
129
+ const firstValue = firstIsGroup ? state.managers.group.getForKey(first).value.stringified : getValue(first, state.managers.group.key);
130
+ const secondValue = secondIsGroup ? state.managers.group.getForKey(second).value.stringified : getValue(second, state.managers.group.key);
109
131
  const firstOrder = state.managers.group.order[firstValue];
110
132
  const secondOrder = state.managers.group.order[secondValue];
111
133
  const groupComparison = compare(firstOrder, secondOrder);
112
134
  if (groupComparison !== 0) return groupComparison;
113
- const firstIsGroup = first instanceof GroupComponent;
114
- const secondIsGroup = second instanceof GroupComponent;
115
135
  if (firstIsGroup || secondIsGroup) return firstIsGroup && secondIsGroup ? 0 : firstIsGroup ? -1 : 1;
116
136
  for (let index = 0; index < length; index += 1) {
117
137
  const sorter = sorters[index];
@@ -121,5 +141,7 @@ function sortWithGroups(state, data, sorters) {
121
141
  return 0;
122
142
  });
123
143
  }
144
+ const SORT_NONE = "none";
145
+ const SORT_OTHER = "other";
124
146
  //#endregion
125
147
  export { SortManager, sortWithGroups };
@@ -1,2 +1,9 @@
1
- import { c as StyleManager } from "../group.component-Cq1YYbfJ.mjs";
1
+ import { State } from "../models/tabela.model.mjs";
2
+
3
+ //#region src/managers/style.manager.d.ts
4
+ declare class StyleManager {
5
+ readonly state: State;
6
+ constructor(state: State);
7
+ }
8
+ //#endregion
2
9
  export { StyleManager };
@@ -1,3 +1,4 @@
1
+ import { CSS_BUTTON, CSS_CELL, CSS_CELL_FOOTER, CSS_CELL_GROUP, CSS_HEADING, CSS_HEADING_CONTENT, CSS_HEADING_SORTER, CSS_ROW, CSS_ROWGROUP_BODY, CSS_ROWGROUP_FOOTER, CSS_ROWGROUP_HEADER, CSS_ROW_SELECTED, CSS_SELECTION, CSS_TABLE, CSS_WRAPPER } from "../models/style.model.mjs";
1
2
  //#region src/managers/style.manager.ts
2
3
  var StyleManager = class {
3
4
  constructor(state) {
@@ -11,14 +12,14 @@ var StyleManager = class {
11
12
  };
12
13
  const styling = `/** Table */
13
14
 
14
- :where(.tabela) {
15
+ :where(.${CSS_WRAPPER}) {
15
16
  flex: 1;
16
17
  position: relative;
17
18
  background-color: var(--oui-absolute);
18
19
  border: 1px solid grey;
19
20
  }
20
21
 
21
- :where(.tabela__table) {
22
+ :where(.${CSS_TABLE}) {
22
23
  min-height: 24em;
23
24
  display: flex;
24
25
  flex-flow: column nowrap;
@@ -30,69 +31,69 @@ const styling = `/** Table */
30
31
 
31
32
  /** Row group */
32
33
 
33
- :where(.tabela__rowgroup--header),
34
- :where(.tabela__rowgroup--footer) {
34
+ :where(.${CSS_ROWGROUP_HEADER}),
35
+ :where(.${CSS_ROWGROUP_FOOTER}) {
35
36
  background-color: white;
36
37
  position: sticky;
37
38
  left: 0;
38
39
  z-index: 10;
39
40
  }
40
41
 
41
- :where(.tabela__rowgroup--header) {
42
+ :where(.${CSS_ROWGROUP_HEADER}) {
42
43
  top: 0;
43
44
  }
44
45
 
45
- :where(.tabela__rowgroup--footer) {
46
+ :where(.${CSS_ROWGROUP_FOOTER}) {
46
47
  bottom: 0;
47
48
  }
48
49
 
49
- :where(.tabela__rowgroup--body) {
50
+ :where(.${CSS_ROWGROUP_BODY}) {
50
51
  display: flex;
51
52
  flex-flow: column nowrap;
52
53
  flex: 1;
53
54
  }
54
55
 
55
- :where(.tabela__rowgroup--body:focus) {
56
+ :where(.${CSS_ROWGROUP_BODY}:focus) {
56
57
  outline: none;
57
58
  }
58
59
 
59
- :where(.tabela:has(.tabela__rowgroup--body:focus-visible)) {
60
+ :where(.${CSS_WRAPPER}:has(.${CSS_ROWGROUP_BODY}:focus-visible)) {
60
61
  outline: 2px solid var(--oui-blue-6);
61
62
  outline-offset: 2px;
62
63
  }
63
64
 
64
65
  /** Row */
65
66
 
66
- :where(.tabela__row) {
67
+ :where(.${CSS_ROW}) {
67
68
  width: 100%;
68
69
  display: flex;
69
70
  flex-flow: row nowrap;
70
71
  }
71
72
 
72
- :where(.tabela__row:last-child .tabela__cell) {
73
+ :where(.${CSS_ROW}:last-child .${CSS_CELL}) {
73
74
  border-bottom-width: 0;
74
75
  }
75
76
 
76
- :where(.tabela__row--body),
77
- :where(.tabela__row--group) {
77
+ :where(.${CSS_ROW}--body),
78
+ :where(.${CSS_ROW}--group) {
78
79
  flex: 1;
79
80
  position: absolute;
80
81
  }
81
82
 
82
- :where(.tabela__row--selected) {
83
+ :where(.${CSS_ROW_SELECTED}) {
83
84
  background-color: var(--oui-blue-1);
84
85
  color: var(--oui-blue-9);
85
86
  }
86
87
 
87
- :where(.tabela:has(.tabela__rowgroup--body:focus-visible) .tabela__row[data-active="true"]) {
88
+ :where(.${CSS_WRAPPER}:has(.${CSS_ROWGROUP_BODY}:focus-visible) .${CSS_ROW}[data-active="true"]) {
88
89
  outline: 2px solid var(--oui-blue-6);
89
90
  outline-offset: 2px;
90
91
  }
91
92
 
92
93
  /** Cells */
93
94
 
94
- :where(.tabela__cell),
95
- :where(.tabela__heading) {
95
+ :where(.${CSS_CELL}),
96
+ :where(.${CSS_HEADING}) {
96
97
  padding: 0.5em;
97
98
  border-color: gray;
98
99
  border-style: solid;
@@ -100,24 +101,55 @@ const styling = `/** Table */
100
101
  line-height: 1;
101
102
  }
102
103
 
103
- :where(.tabela__row .tabela__cell:last-child),
104
- :where(.tabela__row .tabela__heading:last-child) {
104
+ :where(.${CSS_WRAPPER} .${CSS_CELL}:last-child),
105
+ :where(.${CSS_ROW} .${CSS_HEADING}:last-child) {
105
106
  flex: 1;
106
107
  border-right-width: 0;
107
108
  }
108
109
 
109
- :where(.tabela__cell) {
110
+ :where(.${CSS_CELL}) {
110
111
  overflow: hidden;
111
112
  text-overflow: ellipsis;
112
113
  white-space: nowrap;
113
114
  }
114
115
 
115
- :where(.tabela__cell--footer) {
116
+ :where(.${CSS_HEADING}) {
117
+ display: flex;
118
+ flex-flow: row nowrap;
119
+ align-items: center;
120
+ justify-content: space-between;
121
+ gap: 0.5em;
122
+ cursor: pointer;
123
+ }
124
+
125
+ :where(.${CSS_HEADING_CONTENT}) {
126
+ overflow: hidden;
127
+ white-space: nowrap;
128
+ text-overflow: ellipsis;
129
+ }
130
+
131
+ :where(.${CSS_HEADING}[data-sort-direction] .${CSS_HEADING_SORTER})::after {
132
+ width: 1em;
133
+ height: 1em;
134
+ display: inline-flex;
135
+ font-size: .75em;
136
+ font-weight: bold;
137
+ }
138
+
139
+ :where(.${CSS_HEADING}[data-sort-direction="ascending"] .${CSS_HEADING_SORTER})::after {
140
+ content: '\\21C8';
141
+ }
142
+
143
+ :where(.${CSS_HEADING}[data-sort-direction="descending"] .${CSS_HEADING_SORTER})::after {
144
+ content: '\\21CA';
145
+ }
146
+
147
+ :where(.${CSS_CELL_FOOTER}) {
116
148
  border-top-width: 1px;
117
149
  border-bottom-width: 0;
118
150
  }
119
151
 
120
- :where(.tabela__cell--group) {
152
+ :where(.${CSS_CELL_GROUP}) {
121
153
  padding: 0;
122
154
  display: flex;
123
155
  flex-flow: row nowrap;
@@ -125,18 +157,18 @@ const styling = `/** Table */
125
157
  gap: 0.5em;
126
158
  }
127
159
 
128
- :where(.tabela__cell--group .tabela__button) {
160
+ :where(.${CSS_CELL_GROUP} .${CSS_BUTTON}) {
129
161
  margin: 0 0 0 .25rem;
130
162
  }
131
163
 
132
164
  /** Misc. */
133
165
 
134
- :where(.tabela__button) {
166
+ :where(.${CSS_BUTTON}) {
135
167
  font-size: .75rem;
136
168
  font-weight: bold;
137
169
  }
138
170
 
139
- :where(.tabela__selection) {
171
+ :where(.${CSS_SELECTION}) {
140
172
  background-color: color-mix(in oklch, var(--oui-blue-6), transparent);
141
173
  border: 1px solid var(--oui-blue-6);
142
174
  border-radius: .25rem;
@@ -1,2 +1,7 @@
1
- import { t as BodyElements } from "../body.model-2iwsovAV.mjs";
1
+ //#region src/models/body.model.d.ts
2
+ type BodyElements = {
3
+ faker: HTMLDivElement;
4
+ group: HTMLDivElement;
5
+ };
6
+ //#endregion
2
7
  export { BodyElements };
@@ -1,2 +1,13 @@
1
- import { n as TabelaColumn, r as TabelaColumnType, t as Column } from "../column.model-D-aw4EU4.mjs";
2
- export { Column, TabelaColumn, TabelaColumnType };
1
+ //#region src/models/column.model.d.ts
2
+ type Column = {
3
+ key: string;
4
+ label: string;
5
+ width: number;
6
+ };
7
+ type TabelaColumn = {
8
+ key: string;
9
+ label: string;
10
+ width?: number;
11
+ };
12
+ //#endregion
13
+ export { Column, TabelaColumn };
@@ -1,2 +1,28 @@
1
- import { D as TabelaData, E as DataState, T as DataItem } from "../group.component-Cq1YYbfJ.mjs";
2
- export { DataItem, DataState, TabelaData };
1
+ import { State } from "./tabela.model.mjs";
2
+ import { Key, PlainObject } from "@oscarpalmer/atoms/models";
3
+
4
+ //#region src/models/data.model.d.ts
5
+ type DataKeys = {
6
+ active?: Key[];
7
+ original: Key[];
8
+ };
9
+ type DataState = {
10
+ keys: DataKeys;
11
+ values: DataValues;
12
+ } & State;
13
+ type DataValue = string | PlainObject;
14
+ type DataValues = {
15
+ array: DataValue[];
16
+ mapped: Map<Key, PlainObject>;
17
+ };
18
+ type TabelaData = {
19
+ add(data: PlainObject[]): Promise<void>;
20
+ clear(): Promise<void>;
21
+ get(active?: boolean): PlainObject[];
22
+ remove(keys: Key[]): Promise<void>;
23
+ remove(data: PlainObject[]): Promise<void>;
24
+ synchronize(data: PlainObject[], remove?: boolean): Promise<void>;
25
+ update(data: PlainObject[]): Promise<void>;
26
+ };
27
+ //#endregion
28
+ export { DataState, DataValue, TabelaData };
@@ -0,0 +1,19 @@
1
+ //#region src/models/dom.model.d.ts
2
+ declare const ARIA_ACTIVEDESCENDANT = "aria-activedescendant";
3
+ declare const ARIA_LABEL = "aria-label";
4
+ declare const ARIA_SELECTED = "aria-selected";
5
+ declare const ARIA_SORT = "aria-sort";
6
+ declare const ATTRIBUTE_DATA_ACTIVE = "data-active";
7
+ declare const ATTRIBUTE_DATA_EVENT = "data-event";
8
+ declare const ATTRIBUTE_DATA_KEY = "data-key";
9
+ declare const ATTRIBUTE_DATA_SORT_DIRECTION = "data-sort-direction";
10
+ declare const ATTRIBUTE_DATA_SORT_POSITION = "data-sort-position";
11
+ declare const ATTRIBUTE_ROLE = "role";
12
+ declare const ELEMENT_DIV = "div";
13
+ declare const ROLE_CELL = "cell";
14
+ declare const ROLE_COLUMNHEADER = "columnheader";
15
+ declare const ROLE_ROW = "row";
16
+ declare const ROLE_ROWGROUP = "rowgroup";
17
+ declare const ROLE_TABLE = "table";
18
+ //#endregion
19
+ export { ARIA_ACTIVEDESCENDANT, ARIA_LABEL, ARIA_SELECTED, ARIA_SORT, ATTRIBUTE_DATA_ACTIVE, ATTRIBUTE_DATA_EVENT, ATTRIBUTE_DATA_KEY, ATTRIBUTE_DATA_SORT_DIRECTION, ATTRIBUTE_DATA_SORT_POSITION, ATTRIBUTE_ROLE, ELEMENT_DIV, ROLE_CELL, ROLE_COLUMNHEADER, ROLE_ROW, ROLE_ROWGROUP, ROLE_TABLE };
@@ -0,0 +1,19 @@
1
+ //#region src/models/dom.model.ts
2
+ const ARIA_ACTIVEDESCENDANT = "aria-activedescendant";
3
+ const ARIA_LABEL = "aria-label";
4
+ const ARIA_SELECTED = "aria-selected";
5
+ const ARIA_SORT = "aria-sort";
6
+ const ATTRIBUTE_DATA_ACTIVE = "data-active";
7
+ const ATTRIBUTE_DATA_EVENT = "data-event";
8
+ const ATTRIBUTE_DATA_KEY = "data-key";
9
+ const ATTRIBUTE_DATA_SORT_DIRECTION = "data-sort-direction";
10
+ const ATTRIBUTE_DATA_SORT_POSITION = "data-sort-position";
11
+ const ATTRIBUTE_ROLE = "role";
12
+ const ELEMENT_DIV = "div";
13
+ const ROLE_CELL = "cell";
14
+ const ROLE_COLUMNHEADER = "columnheader";
15
+ const ROLE_ROW = "row";
16
+ const ROLE_ROWGROUP = "rowgroup";
17
+ const ROLE_TABLE = "table";
18
+ //#endregion
19
+ export { ARIA_ACTIVEDESCENDANT, ARIA_LABEL, ARIA_SELECTED, ARIA_SORT, ATTRIBUTE_DATA_ACTIVE, ATTRIBUTE_DATA_EVENT, ATTRIBUTE_DATA_KEY, ATTRIBUTE_DATA_SORT_DIRECTION, ATTRIBUTE_DATA_SORT_POSITION, ATTRIBUTE_ROLE, ELEMENT_DIV, ROLE_CELL, ROLE_COLUMNHEADER, ROLE_ROW, ROLE_ROWGROUP, ROLE_TABLE };
@@ -0,0 +1,99 @@
1
+ import { TabelaFilterItem } from "./filter.model.mjs";
2
+ import { TabelaGroup, TabelaGroupToggle } from "./group.model.mjs";
3
+ import { TabelaSortItem } from "./sort.model.mjs";
4
+ import { Key, PlainObject } from "@oscarpalmer/atoms/models";
5
+
6
+ //#region src/models/event.model.d.ts
7
+ type EventDataAdd = (data: PlainObject[]) => void;
8
+ type EventDataClear = () => void;
9
+ type EventDataFiltered = (data: PlainObject[]) => void;
10
+ type EventDataRemove = (data: PlainObject[]) => void;
11
+ type EventDataSorted = (data: PlainObject[]) => void;
12
+ type EventDataSynchronize = (data: {
13
+ added: PlainObject[];
14
+ removed: PlainObject[];
15
+ updated: PlainObject[];
16
+ }) => void;
17
+ type EventDataUpdate = (data: PlainObject[]) => void;
18
+ type EventFilterAdd = (filters: TabelaFilterItem[]) => void;
19
+ type EventFilterClear = () => void;
20
+ type EventFilterRemove = (filters: TabelaFilterItem[]) => void;
21
+ type EventGroupAdd = (groups: TabelaGroup[]) => void;
22
+ type EventGroupClear = () => void;
23
+ type EventGroupRemove = (groups: TabelaGroup[]) => void;
24
+ type EventGroupToggle = (event: TabelaGroupToggle) => void;
25
+ type EventGroupUpdate = (groups: TabelaGroup[]) => void;
26
+ type EventMap = {
27
+ 'data:add': EventDataAdd;
28
+ 'data:clear': EventDataClear;
29
+ 'data:filtered': EventDataFiltered;
30
+ 'data:remove': EventDataRemove;
31
+ 'data:sorted': EventDataSorted;
32
+ 'data:synchronize': EventDataSynchronize;
33
+ 'data:update': EventDataUpdate;
34
+ 'filter:add': EventFilterAdd;
35
+ 'filter:clear': EventFilterClear;
36
+ 'filter:remove': EventFilterRemove;
37
+ 'group:add': EventGroupAdd;
38
+ 'group:clear': EventGroupClear;
39
+ 'group:remove': EventGroupRemove;
40
+ 'group:toggle': EventGroupToggle;
41
+ 'group:update': EventGroupUpdate;
42
+ 'navigation:active': EventNavigationActive;
43
+ 'render:begin': EventRenderBegin;
44
+ 'render:end': EventRenderEnd;
45
+ 'selection:add': EventSelectionAdd;
46
+ 'selection:clear': EventSelectionClear;
47
+ 'selection:remove': EventSelectionRemove;
48
+ 'selection:toggle': EventSelectionToggle;
49
+ 'sort:add': EventSortAdd;
50
+ 'sort:clear': EventSortClear;
51
+ 'sort:flip': EventSortFlip;
52
+ 'sort:remove': EventSortRemove;
53
+ 'sort:set': EventSortSet;
54
+ };
55
+ type EventName = keyof EventMap;
56
+ type EventNavigationActive = (active: Key | null) => void;
57
+ type EventRenderBegin = () => void;
58
+ type EventRenderEnd = () => void;
59
+ type EventSelectionAdd = (keys: Key[]) => void;
60
+ type EventSelectionClear = () => void;
61
+ type EventSelectionRemove = (keys: Key[]) => void;
62
+ type EventSelectionToggle = (keys: Key[]) => void;
63
+ type EventSortAdd = (sorters: TabelaSortItem[]) => void;
64
+ type EventSortClear = () => void;
65
+ type EventSortFlip = (sorters: TabelaSortItem[]) => void;
66
+ type EventSortRemove = (sorters: TabelaSortItem[]) => void;
67
+ type EventSortSet = (sorters: {
68
+ added: TabelaSortItem[];
69
+ removed: TabelaSortItem[];
70
+ }) => void;
71
+ type Events = Partial<{ [Name in EventName]: Set<EventMap[Name]> }>;
72
+ type TabelaEvents = {
73
+ subscribe<Name extends EventName>(name: Name, callback: EventMap[Name]): void;
74
+ unsubscribe<Name extends EventName>(name: Name, callback: EventMap[Name]): void;
75
+ };
76
+ declare const EVENT_BODY = "body";
77
+ declare const EVENT_DATA_ADD = "data:add";
78
+ declare const EVENT_DATA_CLEAR = "data:clear";
79
+ declare const EVENT_DATA_FILTERED = "data:filtered";
80
+ declare const EVENT_DATA_REMOVE = "data:remove";
81
+ declare const EVENT_DATA_SORTED = "data:sorted";
82
+ declare const EVENT_DATA_SYNCHRONIZE = "data:synchronize";
83
+ declare const EVENT_DATA_UPDATE = "data:update";
84
+ declare const EVENT_GROUP = "group";
85
+ declare const EVENT_GROUP_ADD = "group:add";
86
+ declare const EVENT_GROUP_CLEAR = "group:clear";
87
+ declare const EVENT_GROUP_REMOVE = "group:remove";
88
+ declare const EVENT_GROUP_TOGGLE = "group:toggle";
89
+ declare const EVENT_GROUP_UPDATE = "group:update";
90
+ declare const EVENT_HEADING = "heading";
91
+ declare const EVENT_ROW = "row";
92
+ declare const EVENT_SORT_ADD = "sort:add";
93
+ declare const EVENT_SORT_CLEAR = "sort:clear";
94
+ declare const EVENT_SORT_FLIP = "sort:flip";
95
+ declare const EVENT_SORT_REMOVE = "sort:remove";
96
+ declare const EVENT_SORT_SET = "sort:set";
97
+ declare const EVENTS_NAMES: Set<keyof EventMap>;
98
+ //#endregion
99
+ export { EVENTS_NAMES, EVENT_BODY, EVENT_DATA_ADD, EVENT_DATA_CLEAR, EVENT_DATA_FILTERED, EVENT_DATA_REMOVE, EVENT_DATA_SORTED, EVENT_DATA_SYNCHRONIZE, EVENT_DATA_UPDATE, EVENT_GROUP, EVENT_GROUP_ADD, EVENT_GROUP_CLEAR, EVENT_GROUP_REMOVE, EVENT_GROUP_TOGGLE, EVENT_GROUP_UPDATE, EVENT_HEADING, EVENT_ROW, EVENT_SORT_ADD, EVENT_SORT_CLEAR, EVENT_SORT_FLIP, EVENT_SORT_REMOVE, EVENT_SORT_SET, EventDataAdd, EventDataClear, EventDataFiltered, EventDataRemove, EventDataSorted, EventDataSynchronize, EventDataUpdate, EventFilterAdd, EventFilterClear, EventFilterRemove, EventGroupAdd, EventGroupClear, EventGroupRemove, EventGroupToggle, EventGroupUpdate, EventMap, EventName, EventNavigationActive, EventRenderBegin, EventRenderEnd, EventSelectionAdd, EventSelectionClear, EventSelectionRemove, EventSelectionToggle, EventSortAdd, EventSortClear, EventSortFlip, EventSortRemove, EventSortSet, Events, TabelaEvents };
@@ -0,0 +1,53 @@
1
+ //#region src/models/event.model.ts
2
+ const EVENT_BODY = "body";
3
+ const EVENT_DATA_ADD = "data:add";
4
+ const EVENT_DATA_CLEAR = "data:clear";
5
+ const EVENT_DATA_FILTERED = "data:filtered";
6
+ const EVENT_DATA_REMOVE = "data:remove";
7
+ const EVENT_DATA_SORTED = "data:sorted";
8
+ const EVENT_DATA_SYNCHRONIZE = "data:synchronize";
9
+ const EVENT_DATA_UPDATE = "data:update";
10
+ const EVENT_GROUP = "group";
11
+ const EVENT_GROUP_ADD = "group:add";
12
+ const EVENT_GROUP_CLEAR = "group:clear";
13
+ const EVENT_GROUP_REMOVE = "group:remove";
14
+ const EVENT_GROUP_TOGGLE = "group:toggle";
15
+ const EVENT_GROUP_UPDATE = "group:update";
16
+ const EVENT_HEADING = "heading";
17
+ const EVENT_ROW = "row";
18
+ const EVENT_SORT_ADD = "sort:add";
19
+ const EVENT_SORT_CLEAR = "sort:clear";
20
+ const EVENT_SORT_FLIP = "sort:flip";
21
+ const EVENT_SORT_REMOVE = "sort:remove";
22
+ const EVENT_SORT_SET = "sort:set";
23
+ const EVENTS_NAMES = new Set([
24
+ EVENT_DATA_ADD,
25
+ EVENT_DATA_CLEAR,
26
+ EVENT_DATA_FILTERED,
27
+ EVENT_DATA_REMOVE,
28
+ EVENT_DATA_SORTED,
29
+ EVENT_DATA_SYNCHRONIZE,
30
+ EVENT_DATA_UPDATE,
31
+ "filter:add",
32
+ "filter:clear",
33
+ "filter:remove",
34
+ EVENT_GROUP_ADD,
35
+ EVENT_GROUP_CLEAR,
36
+ EVENT_GROUP_REMOVE,
37
+ EVENT_GROUP_TOGGLE,
38
+ EVENT_GROUP_UPDATE,
39
+ "navigation:active",
40
+ "render:begin",
41
+ "render:end",
42
+ "selection:add",
43
+ "selection:clear",
44
+ "selection:remove",
45
+ "selection:toggle",
46
+ EVENT_SORT_ADD,
47
+ EVENT_SORT_CLEAR,
48
+ EVENT_SORT_FLIP,
49
+ EVENT_SORT_REMOVE,
50
+ EVENT_SORT_SET
51
+ ]);
52
+ //#endregion
53
+ export { EVENTS_NAMES, EVENT_BODY, EVENT_DATA_ADD, EVENT_DATA_CLEAR, EVENT_DATA_FILTERED, EVENT_DATA_REMOVE, EVENT_DATA_SORTED, EVENT_DATA_SYNCHRONIZE, EVENT_DATA_UPDATE, EVENT_GROUP, EVENT_GROUP_ADD, EVENT_GROUP_CLEAR, EVENT_GROUP_REMOVE, EVENT_GROUP_TOGGLE, EVENT_GROUP_UPDATE, EVENT_HEADING, EVENT_ROW, EVENT_SORT_ADD, EVENT_SORT_CLEAR, EVENT_SORT_FLIP, EVENT_SORT_REMOVE, EVENT_SORT_SET };
@@ -1,2 +1,26 @@
1
- import { n as TabelaFilterComparison, r as TabelaFilterItem, t as TabelaFilter } from "../filter.model-7ukJrtil.mjs";
2
- export { TabelaFilter, TabelaFilterComparison, TabelaFilterItem };
1
+ //#region src/models/filter.model.d.ts
2
+ type TabelaFilter = {
3
+ add(item: TabelaFilterItem): void;
4
+ clear(): void;
5
+ remove(key: string): void;
6
+ remove(item: TabelaFilterItem): void;
7
+ set(items: TabelaFilterItem[]): void;
8
+ };
9
+ type TabelaFilterComparison = 'contains' | 'ends-with' | 'equals' | 'greater-than' | 'greater-than-or-equal' | 'less-than' | 'less-than-or-equal' | 'not-contains' | 'not-equals' | 'starts-with';
10
+ type TabelaFilterItem = {
11
+ comparison: TabelaFilterComparison;
12
+ key: string;
13
+ value: unknown;
14
+ };
15
+ declare const FILTER_CONTAINS: TabelaFilterComparison;
16
+ declare const FILTER_ENDS_WITH: TabelaFilterComparison;
17
+ declare const FILTER_EQUALS: TabelaFilterComparison;
18
+ declare const FILTER_GREATER_THAN: TabelaFilterComparison;
19
+ declare const FILTER_GREATER_THAN_OR_EQUAL: TabelaFilterComparison;
20
+ declare const FILTER_LESS_THAN: TabelaFilterComparison;
21
+ declare const FILTER_LESS_THAN_OR_EQUAL: TabelaFilterComparison;
22
+ declare const FILTER_NOT_CONTAINS: TabelaFilterComparison;
23
+ declare const FILTER_NOT_EQUALS: TabelaFilterComparison;
24
+ declare const FILTER_STARTS_WITH: TabelaFilterComparison;
25
+ //#endregion
26
+ export { FILTER_CONTAINS, FILTER_ENDS_WITH, FILTER_EQUALS, FILTER_GREATER_THAN, FILTER_GREATER_THAN_OR_EQUAL, FILTER_LESS_THAN, FILTER_LESS_THAN_OR_EQUAL, FILTER_NOT_CONTAINS, FILTER_NOT_EQUALS, FILTER_STARTS_WITH, TabelaFilter, TabelaFilterComparison, TabelaFilterItem };