@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,2 +1,11 @@
1
- import { t as BodyComponent } from "../body.component-_VDOpJhV.mjs";
1
+ import { BodyElements } from "../models/body.model.mjs";
2
+ import { State } from "../models/tabela.model.mjs";
3
+
4
+ //#region src/components/body.component.d.ts
5
+ declare class BodyComponent {
6
+ readonly elements: BodyElements;
7
+ constructor(state: State);
8
+ destroy(): void;
9
+ }
10
+ //#endregion
2
11
  export { BodyComponent };
@@ -1,20 +1,22 @@
1
- import { CSS_TABELA_FAKER, CSS_TABELA_ROWGROUP_BODY } from "../models/style.model.mjs";
1
+ import { ATTRIBUTE_DATA_EVENT } from "../models/dom.model.mjs";
2
+ import { CSS_FAKER, CSS_ROWGROUP_BODY } from "../models/style.model.mjs";
2
3
  import { createElement, createRowGroup } from "../helpers/dom.helpers.mjs";
4
+ import { EVENT_BODY } from "../models/event.model.mjs";
3
5
  //#region src/components/body.component.ts
4
6
  function createFaker() {
5
- return createElement("div", { className: CSS_TABELA_FAKER });
7
+ return createElement("div", { className: CSS_FAKER });
6
8
  }
7
9
  var BodyComponent = class {
8
10
  elements = {
9
11
  faker: createFaker(),
10
12
  group: void 0
11
13
  };
12
- constructor() {
13
- const group = createRowGroup(false);
14
+ constructor(state) {
15
+ const group = createRowGroup(state.options.rowHeight, false);
14
16
  this.elements.group = group;
15
- group.className += ` ${CSS_TABELA_ROWGROUP_BODY}`;
17
+ group.className += ` ${CSS_ROWGROUP_BODY}`;
16
18
  group.tabIndex = 0;
17
- group.setAttribute("data-event", "body");
19
+ group.setAttribute(ATTRIBUTE_DATA_EVENT, EVENT_BODY);
18
20
  group.append(this.elements.faker);
19
21
  }
20
22
  destroy() {
@@ -1,2 +1,16 @@
1
- import { t as ColumnComponent } from "../column.component-Bx46r3JI.mjs";
1
+ import { Column, TabelaColumn } from "../models/column.model.mjs";
2
+
3
+ //#region src/components/column.component.d.ts
4
+ declare class ColumnComponent {
5
+ elements: ColumnElements;
6
+ options: Column;
7
+ constructor(column: TabelaColumn);
8
+ destroy(): void;
9
+ }
10
+ type ColumnElements = {
11
+ content: HTMLDivElement;
12
+ sorter: HTMLDivElement;
13
+ wrapper: HTMLDivElement;
14
+ };
15
+ //#endregion
2
16
  export { ColumnComponent };
@@ -1,16 +1,18 @@
1
- import { CSS_TABELA_HEADING, CSS_TABELA_HEADING_CONTENT, CSS_TABELA_HEADING_SORTER } from "../models/style.model.mjs";
1
+ import { ATTRIBUTE_DATA_EVENT, ATTRIBUTE_DATA_KEY, ATTRIBUTE_ROLE, ROLE_COLUMNHEADER } from "../models/dom.model.mjs";
2
+ import { CSS_HEADING, CSS_HEADING_CONTENT, CSS_HEADING_SORTER } from "../models/style.model.mjs";
2
3
  import { createElement } from "../helpers/dom.helpers.mjs";
4
+ import { EVENT_HEADING } from "../models/event.model.mjs";
3
5
  //#region src/components/column.component.ts
4
6
  var ColumnComponent = class {
5
7
  elements;
6
8
  options;
7
9
  constructor(column) {
8
- const width = Number.parseInt(getComputedStyle(document.body).fontSize, 10) * (column.width ?? column.title.length * 1.5);
10
+ const width = Number.parseInt(getComputedStyle(document.body).fontSize, 10) * (column.width ?? column.label.length * 1.5);
9
11
  this.options = {
10
12
  ...column,
11
13
  width
12
14
  };
13
- this.elements = createHeading(this.options.field, this.options.title, width);
15
+ this.elements = createHeading(this.options.key, this.options.label, width);
14
16
  }
15
17
  destroy() {
16
18
  this.elements.content.remove();
@@ -20,19 +22,19 @@ var ColumnComponent = class {
20
22
  this.options = void 0;
21
23
  }
22
24
  };
23
- function createHeading(field, title, width) {
25
+ function createHeading(key, title, width) {
24
26
  const wrapper = createElement("div", {
25
- className: CSS_TABELA_HEADING,
26
- role: "columnheader"
27
+ className: CSS_HEADING,
28
+ [ATTRIBUTE_ROLE]: ROLE_COLUMNHEADER
27
29
  }, {
28
- "data-event": "heading",
29
- "data-field": field
30
+ [ATTRIBUTE_DATA_EVENT]: EVENT_HEADING,
31
+ [ATTRIBUTE_DATA_KEY]: key
30
32
  }, { width: `${width}px` });
31
33
  const content = createElement("div", {
32
- className: CSS_TABELA_HEADING_CONTENT,
34
+ className: CSS_HEADING_CONTENT,
33
35
  textContent: title
34
36
  });
35
- const sorter = createElement("div", { className: CSS_TABELA_HEADING_SORTER });
37
+ const sorter = createElement("div", { className: CSS_HEADING_SORTER });
36
38
  wrapper.append(content, sorter);
37
39
  return {
38
40
  content,
@@ -1,2 +1,13 @@
1
- import { t as FooterComponent } from "../footer.component-Curiab8j.mjs";
1
+ import { FooterElements } from "../models/footer.model.mjs";
2
+ import { ColumnComponent } from "./column.component.mjs";
3
+ import { State } from "../models/tabela.model.mjs";
4
+
5
+ //#region src/components/footer.component.d.ts
6
+ declare class FooterComponent {
7
+ readonly elements: FooterElements;
8
+ constructor(state: State);
9
+ destroy(): void;
10
+ update(columns: ColumnComponent[]): void;
11
+ }
12
+ //#endregion
2
13
  export { FooterComponent };
@@ -1,17 +1,17 @@
1
- import { CSS_TABELA_CELL_FOOTER, CSS_TABELA_ROWGROUP_FOOTER, CSS_TABELA_ROW_FOOTER } from "../models/style.model.mjs";
1
+ import { CSS_CELL_FOOTER, CSS_ROWGROUP_FOOTER, CSS_ROW_FOOTER } from "../models/style.model.mjs";
2
2
  import { createCell, createRowGroup } from "../helpers/dom.helpers.mjs";
3
3
  //#region src/components/footer.component.ts
4
4
  var FooterComponent = class {
5
5
  elements;
6
- constructor() {
7
- const { group, row } = createRowGroup();
6
+ constructor(state) {
7
+ const { group, row } = createRowGroup(state.options.rowHeight);
8
8
  this.elements = {
9
9
  group,
10
10
  row,
11
11
  cells: []
12
12
  };
13
- group.className += ` ${CSS_TABELA_ROWGROUP_FOOTER}`;
14
- row.className += ` ${CSS_TABELA_ROW_FOOTER}`;
13
+ group.className += ` ${CSS_ROWGROUP_FOOTER}`;
14
+ row.className += ` ${CSS_ROW_FOOTER}`;
15
15
  }
16
16
  destroy() {
17
17
  this.elements.cells.length = 0;
@@ -25,7 +25,7 @@ var FooterComponent = class {
25
25
  elements.row.innerHTML = "";
26
26
  for (let index = 0; index < length; index += 1) {
27
27
  const cell = createCell(columns[index].options.width ?? 4, false);
28
- cell.className += ` ${CSS_TABELA_CELL_FOOTER}`;
28
+ cell.className += ` ${CSS_CELL_FOOTER}`;
29
29
  cell.innerHTML = "&nbsp;";
30
30
  elements.cells.push(cell);
31
31
  elements.row.append(cell);
@@ -1,2 +1,20 @@
1
- import { i as updateGroup, n as removeGroup, r as renderGroup, t as GroupComponent } from "../group.component-Cq1YYbfJ.mjs";
1
+ import { GroupValue } from "../models/group.model.mjs";
2
+ import { State } from "../models/tabela.model.mjs";
3
+
4
+ //#region src/components/group.component.d.ts
5
+ declare class GroupComponent {
6
+ readonly label: string;
7
+ element: HTMLElement | undefined;
8
+ expanded: boolean;
9
+ filtered: number;
10
+ readonly key: string;
11
+ selected: number;
12
+ total: number;
13
+ readonly value: GroupValue;
14
+ constructor(label: string, value: unknown);
15
+ }
16
+ declare function removeGroup(group: GroupComponent): void;
17
+ declare function renderGroup(state: State, component: GroupComponent): void;
18
+ declare function updateGroup(state: State, component: GroupComponent, emit: boolean): void;
19
+ //#endregion
2
20
  export { GroupComponent, removeGroup, renderGroup, updateGroup };
@@ -1,5 +1,8 @@
1
- import { CSS_TABELA_ROW, CSS_TABELA_ROW_GROUP } from "../models/style.model.mjs";
1
+ import { ATTRIBUTE_DATA_EVENT, ATTRIBUTE_DATA_KEY, ATTRIBUTE_ROLE, ROLE_CELL } from "../models/dom.model.mjs";
2
+ import { CSS_BUTTON, CSS_BUTTON_GROUP, CSS_CELL, CSS_CELL_GROUP, CSS_GROUP_SELECTED, CSS_GROUP_TOTAL, CSS_ROW, CSS_ROW_GROUP } from "../models/style.model.mjs";
2
3
  import { createElement } from "../helpers/dom.helpers.mjs";
4
+ import { EVENT_GROUP, EVENT_GROUP_UPDATE } from "../models/event.model.mjs";
5
+ import { GROUP_KEY_PREFIX } from "../models/group.model.mjs";
3
6
  import { getString } from "@oscarpalmer/atoms/string";
4
7
  //#region src/components/group.component.ts
5
8
  var GroupComponent = class {
@@ -13,7 +16,7 @@ var GroupComponent = class {
13
16
  constructor(label, value) {
14
17
  this.label = label;
15
18
  const stringified = getString(value);
16
- this.key = `group:${stringified}`;
19
+ this.key = `${GROUP_KEY_PREFIX}${stringified}`;
17
20
  this.value = {
18
21
  stringified,
19
22
  original: value
@@ -27,25 +30,28 @@ function removeGroup(group) {
27
30
  }
28
31
  function renderGroup(state, component) {
29
32
  component.element ??= createElement("div", {
30
- className: `${CSS_TABELA_ROW} ${CSS_TABELA_ROW_GROUP}`,
31
- innerHTML: `<div class="tabela__cell tabela__cell--group" role="cell">
32
- <button class="tabela__button tabela__button--group" data-event="group" data-key="tabela_${state.id}_${component.key}" type="button">
33
+ className: `${CSS_ROW} ${CSS_ROW_GROUP}`,
34
+ innerHTML: `<div class="${CSS_CELL} ${CSS_CELL_GROUP}" role="${ROLE_CELL}">
35
+ <button class="${CSS_BUTTON} ${CSS_BUTTON_GROUP}" ${ATTRIBUTE_DATA_EVENT}="${EVENT_GROUP}" ${ATTRIBUTE_DATA_KEY}="${state.prefix}_${component.key}" type="button">
33
36
  <span aria-hidden="true"></span>
34
37
  <span>Open/close</span>
35
38
  </button>
36
39
  <p>${component.label}</p>
37
- <span class="tabela__group__total">${component.total}</span>
38
- <span class="tabela__group__selected">${component.selected === 0 ? "" : component.selected}</span>
40
+ <span class="${CSS_GROUP_TOTAL}">${component.total}</span>
41
+ <span class="${CSS_GROUP_SELECTED}">${component.selected === 0 ? "" : component.selected}</span>
39
42
  </div>`,
40
- role: "row"
43
+ [ATTRIBUTE_ROLE]: "row"
41
44
  }, {}, { height: `${state.options.rowHeight}px` });
42
45
  }
43
- function updateGroup(state, component) {
46
+ function updateGroup(state, component, emit) {
44
47
  if (component.element == null) return;
45
- const selected = component.element.querySelector(".tabela__group__selected");
46
- const total = component.element.querySelector(".tabela__group__total");
48
+ const selected = component.element.querySelector(selectedSelector);
49
+ const total = component.element.querySelector(totalSelector);
47
50
  if (selected != null) selected.textContent = component.selected === 0 ? "" : String(component.selected);
48
51
  if (total != null) total.textContent = String(component.total);
52
+ if (emit) state.managers.event.emit(EVENT_GROUP_UPDATE, [component]);
49
53
  }
54
+ const selectedSelector = `.${CSS_GROUP_SELECTED}`;
55
+ const totalSelector = `.${CSS_GROUP_TOTAL}`;
50
56
  //#endregion
51
57
  export { GroupComponent, removeGroup, renderGroup, updateGroup };
@@ -1,2 +1,13 @@
1
- import { t as HeaderComponent } from "../header.component-BjjlpZIg.mjs";
1
+ import { ColumnComponent } from "./column.component.mjs";
2
+ import { HeaderElements } from "../models/header.model.mjs";
3
+ import { State } from "../models/tabela.model.mjs";
4
+
5
+ //#region src/components/header.component.d.ts
6
+ declare class HeaderComponent {
7
+ readonly elements: HeaderElements;
8
+ constructor(state: State);
9
+ destroy(): void;
10
+ update(columns: ColumnComponent[]): void;
11
+ }
12
+ //#endregion
2
13
  export { HeaderComponent };
@@ -1,16 +1,16 @@
1
- import { CSS_TABELA_ROWGROUP_HEADER, CSS_TABELA_ROW_HEADER } from "../models/style.model.mjs";
1
+ import { CSS_ROWGROUP_HEADER, CSS_ROW_HEADER } from "../models/style.model.mjs";
2
2
  import { createRowGroup } from "../helpers/dom.helpers.mjs";
3
3
  //#region src/components/header.component.ts
4
4
  var HeaderComponent = class {
5
5
  elements;
6
- constructor() {
7
- const { group, row } = createRowGroup();
6
+ constructor(state) {
7
+ const { group, row } = createRowGroup(state.options.rowHeight);
8
8
  this.elements = {
9
9
  group,
10
10
  row
11
11
  };
12
- group.className += ` ${CSS_TABELA_ROWGROUP_HEADER}`;
13
- row.className += ` ${CSS_TABELA_ROW_HEADER}`;
12
+ group.className += ` ${CSS_ROWGROUP_HEADER}`;
13
+ row.className += ` ${CSS_ROW_HEADER}`;
14
14
  }
15
15
  destroy() {
16
16
  this.elements.group = void 0;
@@ -1,2 +1,15 @@
1
- import { h as renderRow, m as removeRow, p as RowComponent } from "../group.component-Cq1YYbfJ.mjs";
1
+ import { RenderElementPool } from "../models/render.model.mjs";
2
+ import { State } from "../models/tabela.model.mjs";
3
+ import { Key } from "@oscarpalmer/atoms/models";
4
+
5
+ //#region src/components/row.component.d.ts
6
+ declare function removeRow(pool: RenderElementPool, row: RowComponent): void;
7
+ declare function renderRow(state: State, row: RowComponent): void;
8
+ declare class RowComponent {
9
+ readonly key: Key;
10
+ cells: Record<string, HTMLDivElement>;
11
+ element: HTMLDivElement | undefined;
12
+ constructor(key: Key);
13
+ }
14
+ //#endregion
2
15
  export { RowComponent, removeRow, renderRow };
@@ -1,5 +1,7 @@
1
- import { CSS_TABELA_ROW_BODY, CSS_TABELA_ROW_SELECTED } from "../models/style.model.mjs";
1
+ import { ARIA_SELECTED, ATTRIBUTE_DATA_ACTIVE, ATTRIBUTE_DATA_EVENT, ATTRIBUTE_DATA_KEY } from "../models/dom.model.mjs";
2
+ import { CSS_ROW_BODY, CSS_ROW_SELECTED } from "../models/style.model.mjs";
2
3
  import { createCell, createRow } from "../helpers/dom.helpers.mjs";
4
+ import "../models/event.model.mjs";
3
5
  import { setAttributes } from "@oscarpalmer/toretto/attribute";
4
6
  import { getValue } from "@oscarpalmer/atoms/value/handle";
5
7
  //#region src/components/row.component.ts
@@ -13,31 +15,33 @@ function removeRow(pool, row) {
13
15
  row.cells = {};
14
16
  }
15
17
  function renderRow(state, row) {
16
- const element = row.element ?? state.managers.render.pool.rows.shift() ?? createRow();
18
+ const { managers, options, prefix } = state;
19
+ const element = row.element ?? managers.render.pool.rows.shift() ?? createRow(options.rowHeight);
17
20
  row.element = element;
18
21
  element.innerHTML = "";
19
- const selected = state.managers.selection.items.has(row.key);
22
+ const selected = managers.selection.items.has(row.key);
20
23
  const key = String(row.key);
21
24
  setAttributes(element, {
22
- "aria-selected": String(selected),
23
- "data-active": String(state.managers.navigation.active === row.key),
24
- "data-event": "row",
25
- "data-key": key,
26
- id: `tabela_${state.id}_${key}`
25
+ [ARIA_SELECTED]: String(selected),
26
+ [ATTRIBUTE_DATA_ACTIVE]: String(managers.navigation.active === row.key),
27
+ [ATTRIBUTE_DATA_EVENT]: "row",
28
+ [ATTRIBUTE_DATA_KEY]: key,
29
+ id: `${prefix}${key}`
27
30
  });
28
- element.classList.add(CSS_TABELA_ROW_BODY);
29
- if (selected) element.classList.add(CSS_TABELA_ROW_SELECTED);
30
- else element.classList.remove(CSS_TABELA_ROW_SELECTED);
31
- const columns = state.managers.column.items;
31
+ element.classList.add(CSS_ROW_BODY);
32
+ if (selected) element.classList.add(CSS_ROW_SELECTED);
33
+ else element.classList.remove(CSS_ROW_SELECTED);
34
+ const columns = managers.column.items;
32
35
  const { length } = columns;
33
- const data = state.managers.data.state.values.mapped.get(row.key);
36
+ const data = managers.data.state.values.mapped.get(row.key);
34
37
  if (data == null) return;
35
38
  for (let index = 0; index < length; index += 1) {
36
39
  const { options } = columns[index];
37
- state.managers.render.pool.cells[options.field] ??= [];
38
- const cell = state.managers.render.pool.cells[columns[index].options.field].shift() ?? createCell(options.width);
39
- cell.textContent = String(getValue(data, options.field));
40
- row.cells[options.field] = cell;
40
+ const { key, width } = options;
41
+ managers.render.pool.cells[key] ??= [];
42
+ const cell = managers.render.pool.cells[key].shift() ?? createCell(width);
43
+ cell.textContent = String(getValue(data, key));
44
+ row.cells[key] = cell;
41
45
  element.append(cell);
42
46
  }
43
47
  }
@@ -5,8 +5,8 @@ type RowGroupWithRow = {
5
5
  };
6
6
  declare function createCell(width: number, body?: boolean): HTMLDivElement;
7
7
  declare function createElement<TagName extends keyof HTMLElementTagNameMap>(tagName: TagName, properties?: Partial<HTMLElementTagNameMap[TagName]>, attributes?: Record<string, string>, style?: Partial<CSSStyleDeclaration>): HTMLElementTagNameMap[TagName];
8
- declare function createRowGroup(): RowGroupWithRow;
9
- declare function createRowGroup(withRow: boolean): HTMLDivElement;
10
- declare function createRow(): HTMLDivElement;
8
+ declare function createRowGroup(height: number): RowGroupWithRow;
9
+ declare function createRowGroup(height: number, withRow: boolean): HTMLDivElement;
10
+ declare function createRow(height: number): HTMLDivElement;
11
11
  //#endregion
12
12
  export { createCell, createElement, createRow, createRowGroup };
@@ -1,13 +1,14 @@
1
- import { CSS_TABELA_CELL, CSS_TABELA_CELL_BODY, CSS_TABELA_ROW, CSS_TABELA_ROWGROUP } from "../models/style.model.mjs";
1
+ import { ROLE_CELL, ROLE_ROWGROUP } from "../models/dom.model.mjs";
2
+ import { CSS_CELL, CSS_CELL_BODY, CSS_ROW, CSS_ROWGROUP } from "../models/style.model.mjs";
2
3
  import { setAttributes } from "@oscarpalmer/toretto/attribute";
3
4
  import { setStyles } from "@oscarpalmer/toretto/style";
4
5
  //#region src/helpers/dom.helpers.ts
5
6
  function createCell(width, body) {
6
7
  const cell = createElement("div", {
7
- className: CSS_TABELA_CELL,
8
- role: "cell"
8
+ className: CSS_CELL,
9
+ role: ROLE_CELL
9
10
  }, {}, { width: `${width}px` });
10
- if (body ?? true) cell.classList.add(CSS_TABELA_CELL_BODY);
11
+ if (body ?? true) cell.classList.add(CSS_CELL_BODY);
11
12
  return cell;
12
13
  }
13
14
  function createElement(tagName, properties, attributes, style) {
@@ -19,24 +20,24 @@ function createElement(tagName, properties, attributes, style) {
19
20
  setStyles(element, style ?? {});
20
21
  return element;
21
22
  }
22
- function createRowGroup(withRow) {
23
+ function createRowGroup(height, withRow) {
23
24
  const group = createElement("div", {
24
- className: CSS_TABELA_ROWGROUP,
25
- role: "rowgroup"
25
+ className: CSS_ROWGROUP,
26
+ role: ROLE_ROWGROUP
26
27
  });
27
28
  if (!(withRow ?? true)) return group;
28
- const row = createRow();
29
+ const row = createRow(height);
29
30
  group.append(row);
30
31
  return {
31
32
  group,
32
33
  row
33
34
  };
34
35
  }
35
- function createRow() {
36
+ function createRow(height) {
36
37
  return createElement("div", {
37
- className: CSS_TABELA_ROW,
38
+ className: CSS_ROW,
38
39
  role: "row"
39
- }, {}, { height: "32px" });
40
+ }, {}, { height: `${height}px` });
40
41
  }
41
42
  //#endregion
42
43
  export { createCell, createElement, createRow, createRowGroup };
@@ -1,6 +1,12 @@
1
+ import { TabelaGroup } from "../models/group.model.mjs";
2
+ import { EventName } from "../models/event.model.mjs";
3
+ import { GroupComponent } from "../components/group.component.mjs";
1
4
  import { Key } from "@oscarpalmer/atoms/models";
2
5
 
3
6
  //#region src/helpers/misc.helpers.d.ts
7
+ declare function getGroup(group: GroupComponent): TabelaGroup;
4
8
  declare function getKey(value: unknown): Key | undefined;
9
+ declare function isEvent(value: unknown): value is EventName;
10
+ declare function isGroupKey(key: unknown): boolean;
5
11
  //#endregion
6
- export { getKey };
12
+ export { getGroup, getKey, isEvent, isGroupKey };
@@ -1,9 +1,20 @@
1
+ import { EVENTS_NAMES } from "../models/event.model.mjs";
2
+ import { GROUP_KEY_EXPRESSION } from "../models/group.model.mjs";
1
3
  //#region src/helpers/misc.helpers.ts
4
+ function getGroup(group) {
5
+ return { value: group.value.original };
6
+ }
2
7
  function getKey(value) {
3
8
  if (typeof value === "number") return value;
4
9
  if (typeof value !== "string") return;
5
10
  return integerExpression.test(value) ? Number.parseInt(value, 10) : value;
6
11
  }
12
+ function isEvent(value) {
13
+ return EVENTS_NAMES.has(value);
14
+ }
15
+ function isGroupKey(key) {
16
+ return typeof key === "string" && GROUP_KEY_EXPRESSION.test(key);
17
+ }
7
18
  const integerExpression = /^\d+$/;
8
19
  //#endregion
9
- export { getKey };
20
+ export { getGroup, getKey, isEvent, isGroupKey };
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { t as TabelaOptions } from "./tabela.options-RkZvfptB.mjs";
1
+ import { TabelaOptions } from "./models/tabela.options.mjs";
2
2
  import { Tabela } from "./tabela.mjs";
3
3
 
4
4
  //#region src/index.d.ts
@@ -1,2 +1,17 @@
1
- import { O as ColumnManager } from "../group.component-Cq1YYbfJ.mjs";
1
+ import { TabelaColumn } from "../models/column.model.mjs";
2
+ import { ColumnComponent } from "../components/column.component.mjs";
3
+ import { State } from "../models/tabela.model.mjs";
4
+
5
+ //#region src/managers/column.manager.d.ts
6
+ declare class ColumnManager {
7
+ state: State;
8
+ items: ColumnComponent[];
9
+ constructor(state: State);
10
+ destroy(): void;
11
+ get(key: string): ColumnComponent | undefined;
12
+ remove(key: string): void;
13
+ remove(keys: string[]): void;
14
+ set(columns: TabelaColumn[]): void;
15
+ }
16
+ //#endregion
2
17
  export { ColumnManager };
@@ -12,17 +12,17 @@ var ColumnManager = class {
12
12
  this.items = void 0;
13
13
  this.state = void 0;
14
14
  }
15
- get(field) {
16
- return this.items.find((item) => item.options.field === field);
15
+ get(key) {
16
+ return this.items.find((item) => item.options.key === key);
17
17
  }
18
18
  remove(value) {
19
19
  const { items, state } = this;
20
20
  const { components, managers } = state;
21
- const fields = (Array.isArray(value) ? value : [value]).filter((item) => typeof item === "string");
22
- const { length } = fields;
21
+ const keys = (Array.isArray(value) ? value : [value]).filter((item) => typeof item === "string");
22
+ const { length } = keys;
23
23
  if (length === 0) return;
24
- for (let fieldIndex = 0; fieldIndex < length; fieldIndex += 1) {
25
- const itemIndex = items.findIndex((component) => component.options.field === fields[fieldIndex]);
24
+ for (let keyIndex = 0; keyIndex < length; keyIndex += 1) {
25
+ const itemIndex = items.findIndex((component) => component.options.key === keys[keyIndex]);
26
26
  if (itemIndex > -1) {
27
27
  items[itemIndex].destroy();
28
28
  items.splice(itemIndex, 1);
@@ -30,7 +30,7 @@ var ColumnManager = class {
30
30
  }
31
31
  components.header.update(items);
32
32
  components.footer.update(items);
33
- managers.render.removeCells(fields);
33
+ managers.render.removeCells(keys);
34
34
  }
35
35
  set(columns) {
36
36
  const { items, state } = this;
@@ -1,2 +1,27 @@
1
- import { w as DataManager } from "../group.component-Cq1YYbfJ.mjs";
1
+ import { DataState, TabelaData } from "../models/data.model.mjs";
2
+ import { State } from "../models/tabela.model.mjs";
3
+ import { Key, PlainObject } from "@oscarpalmer/atoms/models";
4
+
5
+ //#region src/managers/data.manager.d.ts
6
+ declare class DataManager {
7
+ handlers: TabelaData;
8
+ state: DataState;
9
+ get keys(): Key[];
10
+ get size(): number;
11
+ constructor(state: State);
12
+ add(data: PlainObject[], render: boolean): Promise<void>;
13
+ clear(): Promise<void>;
14
+ destroy(): void;
15
+ get(active?: boolean): PlainObject[];
16
+ getIndex(item: Key): number;
17
+ remove(items: Array<Key | PlainObject>, render: false): Promise<PlainObject[]>;
18
+ remove(items: Array<Key | PlainObject>, render: true): Promise<void>;
19
+ removeItems(data: Key[], clear: boolean, render: false): Promise<PlainObject[]>;
20
+ removeItems(data: Key[], clear: boolean, render: true): Promise<void>;
21
+ render(): void;
22
+ set(data: PlainObject[]): void;
23
+ synchronize(data: PlainObject[], remove: boolean): Promise<void>;
24
+ update(data: PlainObject[], render: boolean): Promise<void>;
25
+ }
26
+ //#endregion
2
27
  export { DataManager };