@oscarpalmer/tabela 0.12.0 → 0.13.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 (160) hide show
  1. package/dist/body.component-_VDOpJhV.d.mts +10 -0
  2. package/dist/body.model-2iwsovAV.d.mts +7 -0
  3. package/dist/column.component-Bx46r3JI.d.mts +16 -0
  4. package/dist/column.model-D-aw4EU4.d.mts +16 -0
  5. package/dist/components/body.component.d.mts +2 -0
  6. package/dist/components/{body.component.js → body.component.mjs} +6 -3
  7. package/dist/components/column.component.d.mts +2 -0
  8. package/dist/components/{column.component.js → column.component.mjs} +8 -5
  9. package/dist/components/footer.component.d.mts +2 -0
  10. package/dist/components/{footer.component.js → footer.component.mjs} +7 -4
  11. package/dist/components/group.component.d.mts +2 -0
  12. package/dist/components/group.component.mjs +51 -0
  13. package/dist/components/header.component.d.mts +2 -0
  14. package/dist/components/{header.component.js → header.component.mjs} +6 -3
  15. package/dist/components/row.component.d.mts +2 -0
  16. package/dist/components/{row.component.js → row.component.mjs} +11 -7
  17. package/dist/filter.model-7ukJrtil.d.mts +16 -0
  18. package/dist/footer.component-Curiab8j.d.mts +12 -0
  19. package/dist/footer.model-DhqoS6ds.d.mts +8 -0
  20. package/dist/group.component-Cq1YYbfJ.d.mts +285 -0
  21. package/dist/group.model-BsKFwHbt.d.mts +10 -0
  22. package/dist/header.component-BjjlpZIg.d.mts +12 -0
  23. package/dist/header.model-DN_KzUCV.d.mts +7 -0
  24. package/dist/helpers/dom.helpers.d.mts +12 -0
  25. package/dist/helpers/{dom.helpers.js → dom.helpers.mjs} +13 -9
  26. package/dist/helpers/misc.helpers.d.mts +6 -0
  27. package/dist/helpers/{misc.helpers.js → misc.helpers.mjs} +3 -1
  28. package/dist/helpers/style.helper.d.mts +6 -0
  29. package/dist/helpers/style.helper.mjs +8 -0
  30. package/dist/index.d.mts +7 -0
  31. package/dist/{index.js → index.mjs} +3 -1
  32. package/dist/managers/column.manager.d.mts +2 -0
  33. package/dist/managers/{column.manager.js → column.manager.mjs} +6 -1
  34. package/dist/managers/data.manager.d.mts +2 -0
  35. package/dist/managers/data.manager.mjs +222 -0
  36. package/dist/managers/event.manager.d.mts +2 -0
  37. package/dist/managers/{event.manager.js → event.manager.mjs} +9 -8
  38. package/dist/managers/filter.manager.d.mts +2 -0
  39. package/dist/managers/{filter.manager.js → filter.manager.mjs} +23 -14
  40. package/dist/managers/group.manager.d.mts +2 -0
  41. package/dist/managers/group.manager.mjs +73 -0
  42. package/dist/managers/navigation.manager.d.mts +2 -0
  43. package/dist/managers/{navigation.manager.js → navigation.manager.mjs} +27 -24
  44. package/dist/managers/render.manager.d.mts +2 -0
  45. package/dist/managers/{render.manager.js → render.manager.mjs} +35 -26
  46. package/dist/managers/row.manager.d.mts +2 -0
  47. package/dist/managers/{row.manager.js → row.manager.mjs} +18 -11
  48. package/dist/managers/selection.manager.d.mts +2 -0
  49. package/dist/managers/{selection.manager.js → selection.manager.mjs} +32 -28
  50. package/dist/managers/sort.manager.d.mts +2 -0
  51. package/dist/managers/{sort.manager.js → sort.manager.mjs} +12 -9
  52. package/dist/managers/style.manager.d.mts +2 -0
  53. package/dist/managers/style.manager.mjs +149 -0
  54. package/dist/models/body.model.d.mts +2 -0
  55. package/dist/models/body.model.mjs +1 -0
  56. package/dist/models/column.model.d.mts +2 -0
  57. package/dist/models/column.model.mjs +1 -0
  58. package/dist/models/data.model.d.mts +2 -0
  59. package/dist/models/data.model.mjs +1 -0
  60. package/dist/models/filter.model.d.mts +2 -0
  61. package/dist/models/filter.model.mjs +1 -0
  62. package/dist/models/footer.model.d.mts +2 -0
  63. package/dist/models/footer.model.mjs +1 -0
  64. package/dist/models/group.model.d.mts +2 -0
  65. package/dist/models/group.model.mjs +1 -0
  66. package/dist/models/header.model.d.mts +2 -0
  67. package/dist/models/header.model.mjs +1 -0
  68. package/dist/models/render.model.d.mts +2 -0
  69. package/dist/models/render.model.mjs +1 -0
  70. package/dist/models/selection.model.d.mts +2 -0
  71. package/dist/models/selection.model.mjs +1 -0
  72. package/dist/models/sort.model.d.mts +2 -0
  73. package/dist/models/sort.model.mjs +1 -0
  74. package/dist/models/style.model.d.mts +23 -0
  75. package/dist/models/style.model.mjs +23 -0
  76. package/dist/models/tabela.model.d.mts +2 -0
  77. package/dist/models/tabela.model.mjs +1 -0
  78. package/dist/models/tabela.options.d.mts +2 -0
  79. package/dist/models/tabela.options.mjs +1 -0
  80. package/dist/selection.model-rwQe9fco.d.mts +12 -0
  81. package/dist/sort.model-CauImaLu.d.mts +15 -0
  82. package/dist/tabela.d.mts +21 -0
  83. package/dist/{tabela.full.js → tabela.full.mjs} +1073 -756
  84. package/dist/tabela.mjs +126 -0
  85. package/dist/tabela.options-RkZvfptB.d.mts +14 -0
  86. package/package.json +45 -37
  87. package/src/components/body.component.ts +4 -3
  88. package/src/components/column.component.ts +13 -18
  89. package/src/components/footer.component.ts +8 -3
  90. package/src/components/group.component.ts +48 -6
  91. package/src/components/header.component.ts +3 -2
  92. package/src/components/row.component.ts +8 -6
  93. package/src/helpers/dom.helpers.ts +21 -19
  94. package/src/helpers/style.helper.ts +1 -1
  95. package/src/managers/column.manager.ts +4 -0
  96. package/src/managers/data.manager.ts +170 -100
  97. package/src/managers/event.manager.ts +9 -10
  98. package/src/managers/filter.manager.ts +23 -12
  99. package/src/managers/group.manager.ts +63 -11
  100. package/src/managers/navigation.manager.ts +23 -22
  101. package/src/managers/render.manager.ts +43 -29
  102. package/src/managers/row.manager.ts +21 -9
  103. package/src/managers/selection.manager.ts +28 -21
  104. package/src/managers/sort.manager.ts +22 -20
  105. package/src/managers/style.manager.ts +156 -0
  106. package/src/models/data.model.ts +11 -8
  107. package/src/models/group.model.ts +6 -2
  108. package/src/models/style.model.ts +39 -0
  109. package/src/models/tabela.model.ts +10 -8
  110. package/src/tabela.ts +65 -33
  111. package/dist/components/group.component.js +0 -28
  112. package/dist/helpers/style.helper.js +0 -6
  113. package/dist/managers/data.manager.js +0 -181
  114. package/dist/managers/group.manager.js +0 -46
  115. package/dist/models/body.model.js +0 -0
  116. package/dist/models/column.model.js +0 -0
  117. package/dist/models/data.model.js +0 -0
  118. package/dist/models/filter.model.js +0 -0
  119. package/dist/models/footer.model.js +0 -0
  120. package/dist/models/group.model.js +0 -0
  121. package/dist/models/header.model.js +0 -0
  122. package/dist/models/render.model.js +0 -0
  123. package/dist/models/selection.model.js +0 -0
  124. package/dist/models/sort.model.js +0 -0
  125. package/dist/models/tabela.model.js +0 -0
  126. package/dist/models/tabela.options.js +0 -0
  127. package/dist/tabela.js +0 -105
  128. package/types/components/body.component.d.ts +0 -6
  129. package/types/components/column.component.d.ts +0 -13
  130. package/types/components/footer.component.d.ts +0 -8
  131. package/types/components/group.component.d.ts +0 -14
  132. package/types/components/header.component.d.ts +0 -8
  133. package/types/components/row.component.d.ts +0 -11
  134. package/types/helpers/dom.helpers.d.ts +0 -10
  135. package/types/helpers/misc.helpers.d.ts +0 -2
  136. package/types/helpers/style.helper.d.ts +0 -1
  137. package/types/index.d.ts +0 -4
  138. package/types/managers/column.manager.d.ts +0 -12
  139. package/types/managers/data.manager.d.ts +0 -29
  140. package/types/managers/event.manager.d.ts +0 -7
  141. package/types/managers/filter.manager.d.ts +0 -19
  142. package/types/managers/group.manager.d.ts +0 -17
  143. package/types/managers/navigation.manager.d.ts +0 -10
  144. package/types/managers/render.manager.d.ts +0 -17
  145. package/types/managers/row.manager.d.ts +0 -13
  146. package/types/managers/selection.manager.d.ts +0 -24
  147. package/types/managers/sort.manager.d.ts +0 -28
  148. package/types/models/body.model.d.ts +0 -4
  149. package/types/models/column.model.d.ts +0 -13
  150. package/types/models/data.model.d.ts +0 -24
  151. package/types/models/filter.model.d.ts +0 -13
  152. package/types/models/footer.model.d.ts +0 -5
  153. package/types/models/group.model.d.ts +0 -4
  154. package/types/models/header.model.d.ts +0 -4
  155. package/types/models/render.model.d.ts +0 -13
  156. package/types/models/selection.model.d.ts +0 -8
  157. package/types/models/sort.model.d.ts +0 -12
  158. package/types/models/tabela.model.d.ts +0 -39
  159. package/types/models/tabela.options.d.ts +0 -10
  160. package/types/tabela.d.ts +0 -15
@@ -1,17 +1,20 @@
1
- import { GroupComponent, renderGroup } from "../components/group.component.js";
2
- import { removeRow, renderRow } from "../components/row.component.js";
1
+ import { GroupComponent, renderGroup } from "../components/group.component.mjs";
2
+ import { removeRow, renderRow } from "../components/row.component.mjs";
3
3
  import { on } from "@oscarpalmer/toretto/event";
4
+ //#region src/managers/render.manager.ts
4
5
  function getRange(state, down) {
5
- const { components, managers, options } = state;
6
- const { clientHeight, scrollTop } = components.body.elements.group;
7
- const { keys } = managers.data;
8
- const first = Math.floor(scrollTop / options.rowHeight);
9
- const last = Math.min(keys.length - managers.group.collapsed.size - 1, Math.ceil((scrollTop + clientHeight) / options.rowHeight) - 1);
10
- const before = Math.ceil(clientHeight / options.rowHeight) * (down ? 1 : 2);
11
- const after = Math.ceil(clientHeight / options.rowHeight) * (down ? 2 : 1);
12
- const start = Math.max(0, first - before);
6
+ const { element, managers, options } = state;
7
+ const { clientHeight, scrollTop } = element;
8
+ const { items } = managers.data;
9
+ const firstIndex = Math.floor(scrollTop / options.rowHeight);
10
+ const lastIndex = items.length - managers.group.collapsed.size - 1;
11
+ const last = Math.min(lastIndex, Math.ceil((scrollTop + clientHeight) / options.rowHeight) - 1);
12
+ const visible = clientHeight / options.rowHeight;
13
+ const before = Math.ceil(visible) * (down ? 1 : 2);
14
+ const after = Math.ceil(visible) * (down ? 2 : 1);
15
+ const start = Math.max(0, firstIndex - before);
13
16
  return {
14
- end: Math.min(keys.length - managers.group.collapsed.size - 1, last + after),
17
+ end: Math.min(lastIndex, last + after),
15
18
  start
16
19
  };
17
20
  }
@@ -19,7 +22,7 @@ function onScroll() {
19
22
  const { state } = this;
20
23
  if (!state.active) {
21
24
  requestAnimationFrame(() => {
22
- const top = state.components.body.elements.group.scrollTop;
25
+ const top = state.element.scrollTop;
23
26
  this.update(top > state.top);
24
27
  state.active = false;
25
28
  state.top = top;
@@ -37,7 +40,7 @@ var RenderManager = class {
37
40
  state;
38
41
  visible = /* @__PURE__ */ new Map();
39
42
  constructor(state) {
40
- this.listener = on(state.components.body.elements.group, "scroll", onScroll.bind(this));
43
+ this.listener = on(state.element, "scroll", onScroll.bind(this));
41
44
  this.state = {
42
45
  ...state,
43
46
  active: false,
@@ -48,6 +51,11 @@ var RenderManager = class {
48
51
  const { listener, pool, visible } = this;
49
52
  listener();
50
53
  visible.clear();
54
+ const cells = Object.values(pool.cells).flat();
55
+ let { length } = cells;
56
+ for (let index = 0; index < length; index += 1) cells[index].remove();
57
+ length = pool.rows.length;
58
+ for (let index = 0; index < length; index += 1) pool.rows[index].remove();
51
59
  pool.cells = {};
52
60
  pool.rows = [];
53
61
  this.fragment = void 0;
@@ -62,7 +70,7 @@ var RenderManager = class {
62
70
  for (let index = 0; index < length; index += 1) delete pool.cells[fields[index]];
63
71
  for (const [, key] of visible) {
64
72
  if (key instanceof GroupComponent) continue;
65
- const row = state.managers.row.get(key);
73
+ const row = state.managers.row.get(key, false);
66
74
  if (row == null || row.element == null) continue;
67
75
  for (let index = 0; index < length; index += 1) {
68
76
  row.cells[fields[index]].innerHTML = "";
@@ -92,38 +100,38 @@ var RenderManager = class {
92
100
  }
93
101
  continue;
94
102
  }
95
- const row = managers.row.get(key);
103
+ const row = managers.row.get(key, false);
96
104
  if (remove || row == null || !indices.has(index) || managers.group.collapsed.has(key)) {
97
105
  visible.delete(index);
98
106
  if (row != null) removeRow(pool, row);
99
107
  }
100
108
  }
101
109
  const fragment = this.getFragment();
102
- const { keys } = managers.data;
110
+ const { items } = managers.data;
103
111
  let count = 0;
104
112
  let offset = 0;
105
113
  for (let index = range.start; index <= range.end + offset; index += 1) {
106
114
  if (visible.has(index)) continue;
107
- const key = keys[index];
108
- if (key instanceof GroupComponent) {
115
+ const item = items[index];
116
+ if (item instanceof GroupComponent) {
109
117
  count += 1;
110
- renderGroup(state, key);
111
- visible.set(index, key);
112
- if (key.element != null) {
113
- key.element.style.transform = `translateY(${(index - offset) * options.rowHeight}px)`;
114
- fragment.append(key.element);
118
+ renderGroup(state, item);
119
+ visible.set(index, item);
120
+ if (item.element != null) {
121
+ item.element.style.transform = `translateY(${(index - offset) * options.rowHeight}px)`;
122
+ fragment.append(item.element);
115
123
  }
116
124
  continue;
117
125
  }
118
- const row = managers.row.get(key);
126
+ const row = managers.row.get(item, true);
119
127
  if (row == null) continue;
120
- if (managers.group.collapsed.has(key)) {
128
+ if (managers.group.collapsed.has(item)) {
121
129
  offset += 1;
122
130
  continue;
123
131
  }
124
132
  count += 1;
125
133
  renderRow(state, row);
126
- visible.set(index, key);
134
+ visible.set(index, item);
127
135
  if (row.element != null) {
128
136
  row.element.style.transform = `translateY(${(index - offset) * options.rowHeight}px)`;
129
137
  fragment.append(row.element);
@@ -132,4 +140,5 @@ var RenderManager = class {
132
140
  if (count > 0) components.body.elements.group[down ? "append" : "prepend"](fragment);
133
141
  }
134
142
  };
143
+ //#endregion
135
144
  export { RenderManager };
@@ -0,0 +1,2 @@
1
+ import { f as RowManager } from "../group.component-Cq1YYbfJ.mjs";
2
+ export { RowManager };
@@ -1,20 +1,25 @@
1
- import { RowComponent, removeRow, renderRow } from "../components/row.component.js";
1
+ import { RowComponent, removeRow, renderRow } from "../components/row.component.mjs";
2
+ //#region src/managers/row.manager.ts
2
3
  var RowManager = class {
3
4
  components = /* @__PURE__ */ new Map();
4
5
  constructor(state) {
5
6
  this.state = state;
6
7
  }
8
+ clear() {
9
+ const { components } = this;
10
+ const rows = [...components.values()];
11
+ const { length } = rows;
12
+ for (let index = 0; index < length; index += 1) this.removeRow(rows[index]);
13
+ components.clear();
14
+ }
7
15
  destroy() {
8
- const components = [...this.components.values()];
9
- const { length } = components;
10
- for (let index = 0; index < length; index += 1) removeRow(this.state.managers.render.pool, components[index]);
11
- this.components.clear();
16
+ this.clear();
12
17
  this.components = void 0;
13
18
  this.state = void 0;
14
19
  }
15
- get(key) {
20
+ get(key, create) {
16
21
  let row = this.components.get(key);
17
- if (row == null) {
22
+ if (row == null && create) {
18
23
  row = new RowComponent(key);
19
24
  this.components.set(key, row);
20
25
  }
@@ -25,14 +30,16 @@ var RowManager = class {
25
30
  }
26
31
  remove(key) {
27
32
  const row = this.components.get(key);
28
- if (row != null) {
29
- removeRow(this.state.managers.render.pool, row);
30
- this.components.delete(key);
31
- }
33
+ if (row != null) this.removeRow(row);
34
+ }
35
+ removeRow(row) {
36
+ if (row.element != null) removeRow(this.state.managers.render.pool, row);
37
+ this.components.delete(row.key);
32
38
  }
33
39
  update(key) {
34
40
  const row = this.components.get(key);
35
41
  if (row != null) renderRow(this.state, row);
36
42
  }
37
43
  };
44
+ //#endregion
38
45
  export { RowManager };
@@ -0,0 +1,2 @@
1
+ import { d as SelectionManager } from "../group.component-Cq1YYbfJ.mjs";
2
+ export { SelectionManager };
@@ -1,11 +1,13 @@
1
- import { createElement } from "../helpers/dom.helpers.js";
2
- import { GroupComponent } from "../components/group.component.js";
3
- import { getKey } from "../helpers/misc.helpers.js";
4
- import { dragStyling } from "../helpers/style.helper.js";
1
+ import { CSS_TABELA_ROW_BODY, CSS_TABELA_ROW_SELECTED, CSS_TABELA_SELECTION } from "../models/style.model.mjs";
2
+ import { createElement } from "../helpers/dom.helpers.mjs";
3
+ import { GroupComponent } from "../components/group.component.mjs";
4
+ import { getKey } from "../helpers/misc.helpers.mjs";
5
+ import { preventSelection } from "../helpers/style.helper.mjs";
5
6
  import { setAttribute } from "@oscarpalmer/toretto/attribute";
6
7
  import { isKey } from "@oscarpalmer/atoms/is";
7
8
  import { getPosition, on } from "@oscarpalmer/toretto/event";
8
9
  import { findAncestor } from "@oscarpalmer/toretto/find";
10
+ //#region src/managers/selection.manager.ts
9
11
  var SelectionManager = class {
10
12
  handlers = Object.freeze({
11
13
  add: (keys) => this.add(keys),
@@ -69,15 +71,15 @@ var SelectionManager = class {
69
71
  const fromKey = keyed ? from : getKey(from.getAttribute("data-key"));
70
72
  const toKey = keyed ? to : getKey(to.getAttribute("data-key"));
71
73
  if (fromKey === toKey) return;
72
- const { keys } = state.managers.data;
74
+ const { items } = state.managers.data;
73
75
  const fromIndex = state.managers.data.getIndex(fromKey);
74
76
  const toIndex = state.managers.data.getIndex(toKey);
75
77
  if (fromIndex === -1 || toIndex === -1) return;
76
78
  const [start, end] = fromIndex < toIndex ? [fromIndex, toIndex] : [toIndex, fromIndex];
77
79
  const selected = [];
78
80
  for (let index = start; index <= end; index += 1) {
79
- const key = keys[index];
80
- if (!(key instanceof GroupComponent)) selected.push(key);
81
+ const item = items[index];
82
+ if (!(item instanceof GroupComponent)) selected.push(item);
81
83
  }
82
84
  if (keyed) this.add(selected);
83
85
  else this.set(selected);
@@ -103,11 +105,12 @@ var SelectionManager = class {
103
105
  }
104
106
  toggle() {
105
107
  const { items, state } = this;
106
- const { keys } = state.managers.data;
107
- if (items.size === keys.length - state.managers.group.items.length) this.clear();
108
- else this.set(keys.filter((key) => !(key instanceof GroupComponent)));
108
+ const data = state.managers.data.items;
109
+ if (items.size === data.length - state.managers.group.items.length) this.clear();
110
+ else this.set(data.filter((key) => !(key instanceof GroupComponent)));
109
111
  }
110
112
  update(removed) {
113
+ const { state } = this;
111
114
  const items = [...removed.map((key) => ({
112
115
  key,
113
116
  removed: true
@@ -115,28 +118,28 @@ var SelectionManager = class {
115
118
  key,
116
119
  removed: false
117
120
  }))];
118
- const { length } = items;
121
+ let { length } = items;
119
122
  for (let index = 0; index < length; index += 1) {
120
123
  const { key, removed } = items[index];
121
- const row = this.state.managers.row.get(key);
122
- if (row == null || row.element == null) continue;
123
- setAttribute(row.element, "aria-selected", String(!removed));
124
- if (removed) row.element.classList.remove("tabela__row--selected");
125
- else row.element.classList.add("tabela__row--selected");
124
+ const element = state.managers.row.get(key, false)?.element;
125
+ if (element == null) continue;
126
+ setAttribute(element, "aria-selected", String(!removed));
127
+ if (removed) element.classList.remove(CSS_TABELA_ROW_SELECTED);
128
+ else element.classList.add(CSS_TABELA_ROW_SELECTED);
126
129
  }
127
130
  }
128
131
  };
129
132
  function getPlaceholder() {
130
- placeholder ??= createElement("div", { className: "tabela__selection--placeholder" }, {}, {});
133
+ placeholder ??= createElement("div", { className: CSS_TABELA_SELECTION }, {}, {});
131
134
  return placeholder;
132
135
  }
133
136
  function onMouseDown(event) {
134
137
  if (shifted) {
135
- const row = findAncestor(event.target, ".tabela__row--body");
138
+ const row = findAncestor(event.target, `.${CSS_TABELA_ROW_BODY}`);
136
139
  if (!(row instanceof HTMLElement)) return;
137
140
  startElement = row;
138
141
  startPosition = getPosition(event);
139
- dragStyling.set();
142
+ preventSelection.set();
140
143
  }
141
144
  }
142
145
  function onMouseMove(event) {
@@ -157,14 +160,14 @@ function onMouseUp(event) {
157
160
  if (startElement == null) return;
158
161
  if (!event.shiftKey) {
159
162
  shifted = false;
160
- dragStyling.remove();
163
+ preventSelection.remove();
161
164
  }
162
165
  getPlaceholder().remove();
163
166
  const row = findAncestor(event.target, ".tabela__row--body");
164
167
  if (row instanceof HTMLElement) {
165
168
  endElement = row;
166
- const endTable = findAncestor(endElement, ".tabela");
167
- const startTable = findAncestor(startElement, ".tabela");
169
+ const endTable = findAncestor(endElement, ".tabela__table");
170
+ const startTable = findAncestor(startElement, ".tabela__table");
168
171
  if (startTable != null && startTable === endTable) mapped.get(startTable)?.range(startElement, endElement);
169
172
  }
170
173
  endElement = void 0;
@@ -180,15 +183,16 @@ function onShiftDown(event) {
180
183
  function onShiftUp(event) {
181
184
  onShift(event, false);
182
185
  }
183
- var mapped = /* @__PURE__ */ new WeakMap();
184
- var shifted = false;
185
- var endElement;
186
- var placeholder;
187
- var startPosition;
188
- var startElement;
186
+ const mapped = /* @__PURE__ */ new WeakMap();
187
+ let shifted = false;
188
+ let endElement;
189
+ let placeholder;
190
+ let startPosition;
191
+ let startElement;
189
192
  on(document, "keydown", onShiftDown);
190
193
  on(document, "keyup", onShiftUp);
191
194
  on(document, "mousedown", onMouseDown);
192
195
  on(document, "mousemove", onMouseMove);
193
196
  on(document, "mouseup", onMouseUp);
197
+ //#endregion
194
198
  export { SelectionManager };
@@ -0,0 +1,2 @@
1
+ import { l as SortManager, u as sortWithGroups } from "../group.component-Cq1YYbfJ.mjs";
2
+ export { SortManager, sortWithGroups };
@@ -1,7 +1,9 @@
1
- import { GroupComponent } from "../components/group.component.js";
1
+ import { GroupComponent } from "../components/group.component.mjs";
2
2
  import { setAttribute, setAttributes } from "@oscarpalmer/toretto/attribute";
3
3
  import { sort } from "@oscarpalmer/atoms/array";
4
+ import { getValue } from "@oscarpalmer/atoms/value/handle";
4
5
  import { compare } from "@oscarpalmer/atoms/value/compare";
6
+ //#region src/managers/sort.manager.ts
5
7
  var SortManager = class {
6
8
  handlers = Object.freeze({
7
9
  add: (field, direction) => this.add(field, direction),
@@ -77,7 +79,7 @@ var SortManager = class {
77
79
  });
78
80
  setAttribute(column.elements.sorter, "data-sort-position", sorterIndex > -1 && items.length > 1 ? sorterIndex + 1 : void 0);
79
81
  }
80
- state.managers.data.values.keys.active = items.length === 0 ? void 0 : getSortedKeys(state, items);
82
+ state.managers.data.state.items.active = items.length === 0 ? void 0 : getSortedItems(state, items);
81
83
  state.managers.render.update(true, true);
82
84
  }
83
85
  toggle(event, field, direction) {
@@ -94,16 +96,16 @@ var SortManager = class {
94
96
  }
95
97
  }
96
98
  };
97
- function getSortedKeys(state, sorters) {
98
- const data = state.managers.data.values.keys.active?.map((key) => key instanceof GroupComponent ? key : state.managers.data.values.objects.mapped.get(key)) ?? state.managers.data.values.objects.array.slice();
99
- if (!state.managers.group.enabled) return sort(data, sorters).map((item) => item[state.key]);
100
- return sortWithGroups(state, data, sorters).map((item) => item instanceof GroupComponent ? item : item[state.key]);
99
+ 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();
101
+ 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));
101
103
  }
102
104
  function sortWithGroups(state, data, sorters) {
103
105
  const { length } = sorters;
104
106
  return data.sort((first, second) => {
105
- const firstValue = first instanceof GroupComponent ? first.value : first[state.managers.group.field];
106
- const secondValue = second instanceof GroupComponent ? second.value : second[state.managers.group.field];
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);
107
109
  const firstOrder = state.managers.group.order[firstValue];
108
110
  const secondOrder = state.managers.group.order[secondValue];
109
111
  const groupComparison = compare(firstOrder, secondOrder);
@@ -113,10 +115,11 @@ function sortWithGroups(state, data, sorters) {
113
115
  if (firstIsGroup || secondIsGroup) return firstIsGroup && secondIsGroup ? 0 : firstIsGroup ? -1 : 1;
114
116
  for (let index = 0; index < length; index += 1) {
115
117
  const sorter = sorters[index];
116
- const comparison = compare(first[sorter.key], second[sorter.key]);
118
+ const comparison = compare(getValue(first, sorter.key), getValue(second, sorter.key));
117
119
  if (comparison !== 0) return comparison * (sorter.direction === "ascending" ? 1 : -1);
118
120
  }
119
121
  return 0;
120
122
  });
121
123
  }
124
+ //#endregion
122
125
  export { SortManager, sortWithGroups };
@@ -0,0 +1,2 @@
1
+ import { c as StyleManager } from "../group.component-Cq1YYbfJ.mjs";
2
+ export { StyleManager };
@@ -0,0 +1,149 @@
1
+ //#region src/managers/style.manager.ts
2
+ var StyleManager = class {
3
+ constructor(state) {
4
+ this.state = state;
5
+ if (appended) return;
6
+ appended = true;
7
+ const style = document.createElement("style");
8
+ style.textContent = styling;
9
+ document.head.appendChild(style);
10
+ }
11
+ };
12
+ const styling = `/** Table */
13
+
14
+ :where(.tabela) {
15
+ flex: 1;
16
+ position: relative;
17
+ background-color: var(--oui-absolute);
18
+ border: 1px solid grey;
19
+ }
20
+
21
+ :where(.tabela__table) {
22
+ min-height: 24em;
23
+ display: flex;
24
+ flex-flow: column nowrap;
25
+ flex: 1;
26
+ overflow: auto;
27
+ position: absolute;
28
+ inset: 0;
29
+ }
30
+
31
+ /** Row group */
32
+
33
+ :where(.tabela__rowgroup--header),
34
+ :where(.tabela__rowgroup--footer) {
35
+ background-color: white;
36
+ position: sticky;
37
+ left: 0;
38
+ z-index: 10;
39
+ }
40
+
41
+ :where(.tabela__rowgroup--header) {
42
+ top: 0;
43
+ }
44
+
45
+ :where(.tabela__rowgroup--footer) {
46
+ bottom: 0;
47
+ }
48
+
49
+ :where(.tabela__rowgroup--body) {
50
+ display: flex;
51
+ flex-flow: column nowrap;
52
+ flex: 1;
53
+ }
54
+
55
+ :where(.tabela__rowgroup--body:focus) {
56
+ outline: none;
57
+ }
58
+
59
+ :where(.tabela:has(.tabela__rowgroup--body:focus-visible)) {
60
+ outline: 2px solid var(--oui-blue-6);
61
+ outline-offset: 2px;
62
+ }
63
+
64
+ /** Row */
65
+
66
+ :where(.tabela__row) {
67
+ width: 100%;
68
+ display: flex;
69
+ flex-flow: row nowrap;
70
+ }
71
+
72
+ :where(.tabela__row:last-child .tabela__cell) {
73
+ border-bottom-width: 0;
74
+ }
75
+
76
+ :where(.tabela__row--body),
77
+ :where(.tabela__row--group) {
78
+ flex: 1;
79
+ position: absolute;
80
+ }
81
+
82
+ :where(.tabela__row--selected) {
83
+ background-color: var(--oui-blue-1);
84
+ color: var(--oui-blue-9);
85
+ }
86
+
87
+ :where(.tabela:has(.tabela__rowgroup--body:focus-visible) .tabela__row[data-active="true"]) {
88
+ outline: 2px solid var(--oui-blue-6);
89
+ outline-offset: 2px;
90
+ }
91
+
92
+ /** Cells */
93
+
94
+ :where(.tabela__cell),
95
+ :where(.tabela__heading) {
96
+ padding: 0.5em;
97
+ border-color: gray;
98
+ border-style: solid;
99
+ border-width: 0 1px 1px 0;
100
+ line-height: 1;
101
+ }
102
+
103
+ :where(.tabela__row .tabela__cell:last-child),
104
+ :where(.tabela__row .tabela__heading:last-child) {
105
+ flex: 1;
106
+ border-right-width: 0;
107
+ }
108
+
109
+ :where(.tabela__cell) {
110
+ overflow: hidden;
111
+ text-overflow: ellipsis;
112
+ white-space: nowrap;
113
+ }
114
+
115
+ :where(.tabela__cell--footer) {
116
+ border-top-width: 1px;
117
+ border-bottom-width: 0;
118
+ }
119
+
120
+ :where(.tabela__cell--group) {
121
+ padding: 0;
122
+ display: flex;
123
+ flex-flow: row nowrap;
124
+ align-items: center;
125
+ gap: 0.5em;
126
+ }
127
+
128
+ :where(.tabela__cell--group .tabela__button) {
129
+ margin: 0 0 0 .25rem;
130
+ }
131
+
132
+ /** Misc. */
133
+
134
+ :where(.tabela__button) {
135
+ font-size: .75rem;
136
+ font-weight: bold;
137
+ }
138
+
139
+ :where(.tabela__selection) {
140
+ background-color: color-mix(in oklch, var(--oui-blue-6), transparent);
141
+ border: 1px solid var(--oui-blue-6);
142
+ border-radius: .25rem;
143
+ position: fixed;
144
+ z-index: 1000;
145
+ }
146
+ `.replace(/^\s+|\s+|\s+$/g, " ");
147
+ let appended = false;
148
+ //#endregion
149
+ export { StyleManager };
@@ -0,0 +1,2 @@
1
+ import { t as BodyElements } from "../body.model-2iwsovAV.mjs";
2
+ export { BodyElements };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { n as TabelaColumn, r as TabelaColumnType, t as Column } from "../column.model-D-aw4EU4.mjs";
2
+ export { Column, TabelaColumn, TabelaColumnType };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { D as TabelaData, E as DataState, T as DataItem } from "../group.component-Cq1YYbfJ.mjs";
2
+ export { DataItem, DataState, TabelaData };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { n as TabelaFilterComparison, r as TabelaFilterItem, t as TabelaFilter } from "../filter.model-7ukJrtil.mjs";
2
+ export { TabelaFilter, TabelaFilterComparison, TabelaFilterItem };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { t as FooterElements } from "../footer.model-DhqoS6ds.mjs";
2
+ export { FooterElements };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { n as TabelaGroup, t as GroupValue } from "../group.model-BsKFwHbt.mjs";
2
+ export { GroupValue, TabelaGroup };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { t as HeaderElements } from "../header.model-DN_KzUCV.mjs";
2
+ export { HeaderElements };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { _ as RenderElementPool, v as RenderRange, y as RenderState } from "../group.component-Cq1YYbfJ.mjs";
2
+ export { RenderElementPool, RenderRange, RenderState };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { t as TabelaSelection } from "../selection.model-rwQe9fco.mjs";
2
+ export { TabelaSelection };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import { n as TabelaSortDirection, r as TabelaSortItem, t as TabelaSort } from "../sort.model-CauImaLu.mjs";
2
+ export { TabelaSort, TabelaSortDirection, TabelaSortItem };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ //#region src/models/style.model.d.ts
2
+ declare const CSS_TABELA = "tabela";
3
+ declare const CSS_TABELA_CELL = "tabela__cell";
4
+ declare const CSS_TABELA_CELL_BODY = "tabela__cell--body";
5
+ declare const CSS_TABELA_CELL_FOOTER = "tabela__cell--footer";
6
+ declare const CSS_TABELA_FAKER = "tabela__faker";
7
+ declare const CSS_TABELA_HEADING = "tabela__heading";
8
+ declare const CSS_TABELA_HEADING_CONTENT = "tabela__heading__content";
9
+ declare const CSS_TABELA_HEADING_SORTER = "tabela__heading__sorter";
10
+ declare const CSS_TABELA_ROW = "tabela__row";
11
+ declare const CSS_TABELA_ROW_BODY = "tabela__row--body";
12
+ declare const CSS_TABELA_ROW_FOOTER = "tabela__row--footer";
13
+ declare const CSS_TABELA_ROW_GROUP = "tabela__row--group tabela__group";
14
+ declare const CSS_TABELA_ROW_HEADER = "tabela__row--header";
15
+ declare const CSS_TABELA_ROW_SELECTED = "tabela__row--selected";
16
+ declare const CSS_TABELA_ROWGROUP = "tabela__rowgroup";
17
+ declare const CSS_TABELA_ROWGROUP_BODY = "tabela__rowgroup--body";
18
+ declare const CSS_TABELA_ROWGROUP_FOOTER = "tabela__rowgroup--footer";
19
+ declare const CSS_TABELA_ROWGROUP_HEADER = "tabela__rowgroup--header";
20
+ declare const CSS_TABELA_SELECTION = "tabela__selection";
21
+ declare const CSS_TABELA_TABLE = "tabela__table";
22
+ //#endregion
23
+ export { CSS_TABELA, CSS_TABELA_CELL, CSS_TABELA_CELL_BODY, CSS_TABELA_CELL_FOOTER, CSS_TABELA_FAKER, CSS_TABELA_HEADING, CSS_TABELA_HEADING_CONTENT, CSS_TABELA_HEADING_SORTER, CSS_TABELA_ROW, CSS_TABELA_ROWGROUP, CSS_TABELA_ROWGROUP_BODY, CSS_TABELA_ROWGROUP_FOOTER, CSS_TABELA_ROWGROUP_HEADER, CSS_TABELA_ROW_BODY, CSS_TABELA_ROW_FOOTER, CSS_TABELA_ROW_GROUP, CSS_TABELA_ROW_HEADER, CSS_TABELA_ROW_SELECTED, CSS_TABELA_SELECTION, CSS_TABELA_TABLE };
@@ -0,0 +1,23 @@
1
+ //#region src/models/style.model.ts
2
+ const CSS_TABELA = "tabela";
3
+ const CSS_TABELA_CELL = "tabela__cell";
4
+ const CSS_TABELA_CELL_BODY = "tabela__cell--body";
5
+ const CSS_TABELA_CELL_FOOTER = "tabela__cell--footer";
6
+ const CSS_TABELA_FAKER = "tabela__faker";
7
+ const CSS_TABELA_HEADING = "tabela__heading";
8
+ const CSS_TABELA_HEADING_CONTENT = "tabela__heading__content";
9
+ const CSS_TABELA_HEADING_SORTER = "tabela__heading__sorter";
10
+ const CSS_TABELA_ROW = "tabela__row";
11
+ const CSS_TABELA_ROW_BODY = "tabela__row--body";
12
+ const CSS_TABELA_ROW_FOOTER = "tabela__row--footer";
13
+ const CSS_TABELA_ROW_GROUP = "tabela__row--group tabela__group";
14
+ const CSS_TABELA_ROW_HEADER = "tabela__row--header";
15
+ const CSS_TABELA_ROW_SELECTED = "tabela__row--selected";
16
+ const CSS_TABELA_ROWGROUP = "tabela__rowgroup";
17
+ const CSS_TABELA_ROWGROUP_BODY = "tabela__rowgroup--body";
18
+ const CSS_TABELA_ROWGROUP_FOOTER = "tabela__rowgroup--footer";
19
+ const CSS_TABELA_ROWGROUP_HEADER = "tabela__rowgroup--header";
20
+ const CSS_TABELA_SELECTION = "tabela__selection";
21
+ const CSS_TABELA_TABLE = "tabela__table";
22
+ //#endregion
23
+ export { CSS_TABELA, CSS_TABELA_CELL, CSS_TABELA_CELL_BODY, CSS_TABELA_CELL_FOOTER, CSS_TABELA_FAKER, CSS_TABELA_HEADING, CSS_TABELA_HEADING_CONTENT, CSS_TABELA_HEADING_SORTER, CSS_TABELA_ROW, CSS_TABELA_ROWGROUP, CSS_TABELA_ROWGROUP_BODY, CSS_TABELA_ROWGROUP_FOOTER, CSS_TABELA_ROWGROUP_HEADER, CSS_TABELA_ROW_BODY, CSS_TABELA_ROW_FOOTER, CSS_TABELA_ROW_GROUP, CSS_TABELA_ROW_HEADER, CSS_TABELA_ROW_SELECTED, CSS_TABELA_SELECTION, CSS_TABELA_TABLE };