@oscarpalmer/tabela 0.4.0 → 0.6.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 (79) hide show
  1. package/dist/components/body.component.js +33 -55
  2. package/dist/components/column.component.js +20 -25
  3. package/dist/components/footer.component.js +33 -34
  4. package/dist/components/header.component.js +21 -26
  5. package/dist/components/row.component.js +34 -36
  6. package/dist/helpers/dom.helpers.js +35 -30
  7. package/dist/index.js +5 -5
  8. package/dist/managers/column.manager.js +32 -0
  9. package/dist/managers/data.manager.js +30 -0
  10. package/dist/managers/row.manager.js +21 -0
  11. package/dist/managers/virtualization.manager.js +89 -85
  12. package/dist/models/body.model.js +0 -0
  13. package/dist/models/column.model.js +0 -1
  14. package/dist/models/data.model.js +0 -0
  15. package/dist/models/footer.model.js +0 -0
  16. package/dist/models/header.model.js +0 -0
  17. package/dist/models/tabela.options.js +0 -1
  18. package/dist/models/virtualization.model.js +0 -0
  19. package/dist/tabela.full.js +645 -0
  20. package/dist/tabela.js +45 -43
  21. package/package.json +22 -24
  22. package/src/components/body.component.ts +22 -51
  23. package/src/components/column.component.ts +14 -8
  24. package/src/components/footer.component.ts +18 -16
  25. package/src/components/header.component.ts +9 -15
  26. package/src/components/row.component.ts +39 -32
  27. package/src/helpers/dom.helpers.ts +50 -15
  28. package/src/index.ts +8 -1
  29. package/src/managers/column.manager.ts +65 -0
  30. package/src/managers/data.manager.ts +45 -0
  31. package/src/managers/row.manager.ts +32 -0
  32. package/src/managers/virtualization.manager.ts +101 -72
  33. package/src/models/body.model.ts +4 -0
  34. package/src/models/column.model.ts +1 -7
  35. package/src/models/data.model.ts +16 -0
  36. package/src/models/footer.model.ts +5 -0
  37. package/src/models/header.model.ts +4 -0
  38. package/src/models/tabela.options.ts +2 -0
  39. package/src/models/virtualization.model.ts +14 -0
  40. package/src/tabela.ts +65 -36
  41. package/types/components/body.component.d.ts +2 -13
  42. package/types/components/footer.component.d.ts +4 -7
  43. package/types/components/header.component.d.ts +4 -8
  44. package/types/components/row.component.d.ts +7 -7
  45. package/types/helpers/dom.helpers.d.ts +1 -0
  46. package/types/index.d.ts +4 -1
  47. package/types/managers/column.manager.d.ts +12 -0
  48. package/types/managers/data.manager.d.ts +11 -0
  49. package/types/managers/row.manager.d.ts +11 -0
  50. package/types/managers/virtualization.manager.d.ts +12 -12
  51. package/types/models/body.model.d.ts +4 -0
  52. package/types/models/data.model.d.ts +14 -0
  53. package/types/models/footer.model.d.ts +5 -0
  54. package/types/models/header.model.d.ts +4 -0
  55. package/types/models/tabela.options.d.ts +2 -0
  56. package/types/models/virtualization.model.d.ts +12 -0
  57. package/types/tabela.d.ts +19 -5
  58. package/dist/components/body.component.cjs +0 -58
  59. package/dist/components/column.component.cjs +0 -27
  60. package/dist/components/footer.component.cjs +0 -35
  61. package/dist/components/header.component.cjs +0 -28
  62. package/dist/components/row.component.cjs +0 -38
  63. package/dist/helpers/dom.helpers.cjs +0 -36
  64. package/dist/index.cjs +0 -5
  65. package/dist/managers/virtualization.manager.cjs +0 -88
  66. package/dist/models/column.model.cjs +0 -1
  67. package/dist/models/tabela.options.cjs +0 -1
  68. package/dist/tabela.cjs +0 -47
  69. package/types/components/body.component.d.cts +0 -98
  70. package/types/components/column.component.d.cts +0 -98
  71. package/types/components/footer.component.d.cts +0 -98
  72. package/types/components/header.component.d.cts +0 -98
  73. package/types/components/row.component.d.cts +0 -98
  74. package/types/helpers/dom.helpers.d.cts +0 -12
  75. package/types/index.d.cts +0 -99
  76. package/types/managers/virtualization.manager.d.cts +0 -98
  77. package/types/models/column.model.d.cts +0 -17
  78. package/types/models/tabela.options.d.cts +0 -18
  79. package/types/tabela.d.cts +0 -99
@@ -1,58 +1,36 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { createRowGroup } from "../helpers/dom.helpers.js";
5
- import { VirtualizationManager } from "../managers/virtualization.manager.js";
6
- import { RowComponent } from "./row.component.js";
1
+ import { createElement, createRowGroup } from "../helpers/dom.helpers.js";
2
+ import { setStyles } from "@oscarpalmer/toretto/style";
7
3
  function createFaker() {
8
- const element = document.createElement("div");
9
- element.style.height = "0";
10
- element.style.inset = "0 auto auto 0";
11
- element.style.opacity = "0";
12
- element.style.pointerEvents = "none";
13
- element.style.position = "absolute";
14
- element.style.width = "1px";
15
- return element;
4
+ return createElement("div", {}, {
5
+ height: "0",
6
+ inset: "0 auto auto 0",
7
+ opacity: "0",
8
+ pointerEvents: "none",
9
+ position: "absolute",
10
+ width: "1px"
11
+ });
16
12
  }
17
- class BodyComponent {
18
- constructor(tabela) {
19
- __publicField(this, "elements", {
20
- faker: createFaker(),
21
- group: void 0
22
- });
23
- __publicField(this, "rows", []);
24
- __publicField(this, "virtualization");
25
- this.tabela = tabela;
26
- const group = createRowGroup(false);
27
- this.elements.group = group;
28
- this.virtualization = new VirtualizationManager(this);
29
- group.className += " tabela__rowgroup-body";
30
- group.style.height = "100%";
31
- group.style.overflow = "auto";
32
- group.style.position = "relative";
33
- group.append(this.elements.faker);
34
- void this.addData(tabela.options.data).then(() => {
35
- this.virtualization.update(true);
36
- });
37
- }
38
- async addData(data) {
39
- const { length } = data;
40
- for (let index = 0; index < length; index += 1) {
41
- this.rows.push(new RowComponent(this.tabela, data[index]));
42
- }
43
- this.updateVirtualization();
44
- }
45
- destroy() {
46
- this.virtualization.destroy();
47
- this.elements.faker = void 0;
48
- this.elements.group = void 0;
49
- this.rows.length = 0;
50
- }
51
- updateVirtualization() {
52
- this.elements.faker.style.height = `${this.rows.length * 32}px`;
53
- this.virtualization.update(true);
54
- }
55
- }
56
- export {
57
- BodyComponent
13
+ var BodyComponent = class {
14
+ elements = {
15
+ faker: createFaker(),
16
+ group: void 0
17
+ };
18
+ constructor(tabela) {
19
+ this.tabela = tabela;
20
+ const group = createRowGroup(false);
21
+ this.elements.group = group;
22
+ group.className += " tabela__rowgroup-body";
23
+ group.tabIndex = 0;
24
+ setStyles(group, {
25
+ height: "100%",
26
+ overflow: "auto",
27
+ position: "relative"
28
+ });
29
+ group.append(this.elements.faker);
30
+ }
31
+ destroy() {
32
+ this.elements.faker = void 0;
33
+ this.elements.group = void 0;
34
+ }
58
35
  };
36
+ export { BodyComponent };
@@ -1,27 +1,22 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- function createElement(title, width) {
5
- const cell = document.createElement("div");
6
- cell.className = "tabela__heading";
7
- cell.role = "columnheader";
8
- cell.style.width = `${width}px`;
9
- cell.textContent = title;
10
- return cell;
1
+ import { createElement } from "../helpers/dom.helpers.js";
2
+ function createHeading(title, width) {
3
+ return createElement("div", {
4
+ className: "tabela__heading",
5
+ role: "columnheader",
6
+ textContent: title
7
+ }, { width: `${width}px` });
11
8
  }
12
- class ColumnComponent {
13
- constructor(tabela, options) {
14
- __publicField(this, "element");
15
- __publicField(this, "options");
16
- this.tabela = tabela;
17
- const width = Number.parseInt(getComputedStyle(tabela.element).fontSize, 10) * (options.width ?? options.title.length * 1.5);
18
- this.options = {
19
- ...options,
20
- width
21
- };
22
- this.element = createElement(options.title, width);
23
- }
24
- }
25
- export {
26
- ColumnComponent
9
+ var ColumnComponent = class {
10
+ element;
11
+ options;
12
+ constructor(tabela, options) {
13
+ this.tabela = tabela;
14
+ const width = Number.parseInt(getComputedStyle(tabela.element).fontSize, 10) * (options.width ?? options.title.length * 1.5);
15
+ this.options = {
16
+ ...options,
17
+ width
18
+ };
19
+ this.element = createHeading(options.title, width);
20
+ }
27
21
  };
22
+ export { ColumnComponent };
@@ -1,35 +1,34 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { createRowGroup, createCell } from "../helpers/dom.helpers.js";
5
- class FooterComponent {
6
- constructor(tabela) {
7
- __publicField(this, "elements");
8
- this.tabela = tabela;
9
- const { group, row } = createRowGroup();
10
- this.elements = {
11
- group,
12
- row,
13
- cells: []
14
- };
15
- group.className += " tabela__rowgroup-footer";
16
- row.className += " tabela__row-footer";
17
- const { columns } = tabela.header;
18
- const { length } = columns;
19
- for (let index = 0; index < length; index += 1) {
20
- const cell = createCell(columns[index].options.width ?? 4, false);
21
- cell.className += " tabela__cell-footer";
22
- cell.innerHTML = "&nbsp;";
23
- this.elements.cells.push(cell);
24
- row.append(cell);
25
- }
26
- }
27
- destroy() {
28
- this.elements.cells = [];
29
- this.elements.group = void 0;
30
- this.elements.row = void 0;
31
- }
32
- }
33
- export {
34
- FooterComponent
1
+ import { createCell, createRowGroup } from "../helpers/dom.helpers.js";
2
+ var FooterComponent = class {
3
+ elements;
4
+ constructor(tabela) {
5
+ this.tabela = tabela;
6
+ const { group, row } = createRowGroup();
7
+ this.elements = {
8
+ group,
9
+ row,
10
+ cells: []
11
+ };
12
+ group.className += " tabela__rowgroup-footer";
13
+ row.className += " tabela__row-footer";
14
+ }
15
+ destroy() {
16
+ this.elements.cells.length = 0;
17
+ this.elements.group = void 0;
18
+ this.elements.row = void 0;
19
+ }
20
+ update(columns) {
21
+ const { elements } = this;
22
+ const { length } = columns;
23
+ elements.cells.length = 0;
24
+ elements.row.innerHTML = "";
25
+ for (let index = 0; index < length; index += 1) {
26
+ const cell = createCell(columns[index].options.width ?? 4, false);
27
+ cell.className += " tabela__cell-footer";
28
+ cell.innerHTML = "&nbsp;";
29
+ elements.cells.push(cell);
30
+ elements.row.append(cell);
31
+ }
32
+ }
35
33
  };
34
+ export { FooterComponent };
@@ -1,28 +1,23 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
1
  import { createRowGroup } from "../helpers/dom.helpers.js";
5
- import { ColumnComponent } from "./column.component.js";
6
- class HeaderComponent {
7
- constructor(tabela) {
8
- __publicField(this, "columns");
9
- __publicField(this, "elements");
10
- this.tabela = tabela;
11
- this.columns = tabela.options.columns.map(
12
- (column) => new ColumnComponent(tabela, column)
13
- );
14
- const { group, row } = createRowGroup();
15
- this.elements = { group, row };
16
- group.className += " tabela__rowgroup-header";
17
- row.className += " tabela__row-header";
18
- row.append(...this.columns.map((column) => column.element));
19
- }
20
- destroy() {
21
- this.columns.length = 0;
22
- this.elements.group = void 0;
23
- this.elements.row = void 0;
24
- }
25
- }
26
- export {
27
- HeaderComponent
2
+ var HeaderComponent = class {
3
+ elements;
4
+ constructor(tabela) {
5
+ this.tabela = tabela;
6
+ const { group, row } = createRowGroup();
7
+ this.elements = {
8
+ group,
9
+ row
10
+ };
11
+ group.className += " tabela__rowgroup-header";
12
+ row.className += " tabela__row-header";
13
+ }
14
+ destroy() {
15
+ this.elements.group = void 0;
16
+ this.elements.row = void 0;
17
+ }
18
+ update(columns) {
19
+ this.elements.row.innerHTML = "";
20
+ this.elements.row.append(...columns.map((column) => column.element));
21
+ }
28
22
  };
23
+ export { HeaderComponent };
@@ -1,38 +1,36 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { createRow, createCell } from "../helpers/dom.helpers.js";
5
- class RowComponent {
6
- constructor(tabela, data) {
7
- __publicField(this, "element");
8
- this.tabela = tabela;
9
- this.data = data;
10
- }
11
- remove(pool) {
12
- if (this.element != null) {
13
- this.element.innerHTML = "";
14
- pool.rows.push(this.element);
15
- this.element.remove();
16
- this.element = void 0;
17
- }
18
- }
19
- render(pool) {
20
- var _a, _b;
21
- const element = this.element ?? pool.rows.shift() ?? createRow();
22
- this.element = element;
23
- element.innerHTML = "";
24
- const { tabela } = this;
25
- const { columns } = tabela.header;
26
- const { length } = columns;
27
- for (let index = 0; index < length; index += 1) {
28
- const { options } = columns[index];
29
- (_a = pool.cells)[_b = options.field] ?? (_a[_b] = []);
30
- const cell = pool.cells[columns[index].options.field].shift() ?? createCell(options.width);
31
- cell.textContent = String(this.data[options.field]);
32
- element.append(cell);
33
- }
34
- }
1
+ import { createCell, createRow } from "../helpers/dom.helpers.js";
2
+ function removeRow(row, pool) {
3
+ if (row.element != null) {
4
+ row.element.innerHTML = "";
5
+ pool.rows.push(row.element);
6
+ row.element.remove();
7
+ row.element = void 0;
8
+ }
9
+ row.cells = {};
35
10
  }
36
- export {
37
- RowComponent
11
+ function renderRow(tabela, pool, row) {
12
+ const element = row.element ?? pool.rows.shift() ?? createRow();
13
+ row.element = element;
14
+ element.dataset.key = String(row.key);
15
+ element.innerHTML = "";
16
+ const columns = tabela.managers.columns.components;
17
+ const { length } = columns;
18
+ const data = tabela.managers.data.values.objects.mapped.get(row.key);
19
+ if (data == null) return;
20
+ for (let index = 0; index < length; index += 1) {
21
+ const { options } = columns[index];
22
+ pool.cells[options.field] ??= [];
23
+ const cell = pool.cells[columns[index].options.field].shift() ?? createCell(options.width);
24
+ cell.textContent = String(data[options.field]);
25
+ row.cells[options.field] = cell;
26
+ element.append(cell);
27
+ }
28
+ }
29
+ var RowComponent = class {
30
+ cells = {};
31
+ element;
32
+ constructor(key) {
33
+ this.key = key;
34
+ }
38
35
  };
36
+ export { RowComponent, removeRow, renderRow };
@@ -1,36 +1,41 @@
1
+ import { setStyles } from "@oscarpalmer/toretto/style";
1
2
  function createCell(width, body) {
2
- const cell = document.createElement("div");
3
- cell.className = "tabela__cell";
4
- cell.role = "cell";
5
- cell.style.width = `${width}px`;
6
- if (body ?? true) {
7
- cell.classList.add("tabela__cell-body");
8
- }
9
- return cell;
3
+ const cell = createElement("div", {
4
+ className: "tabela__cell",
5
+ role: "cell"
6
+ }, { width: `${width}px` });
7
+ if (body ?? true) cell.classList.add("tabela__cell-body");
8
+ return cell;
9
+ }
10
+ function createElement(tagName, properties, style) {
11
+ const element = document.createElement(tagName);
12
+ const keys = Object.keys(properties);
13
+ for (const key of keys) element[key] = properties[key];
14
+ setStyles(element, style);
15
+ return element;
10
16
  }
11
17
  function createRowGroup(withRow) {
12
- const group = document.createElement("div");
13
- group.className = "tabela__rowgroup";
14
- group.role = "rowgroup";
15
- if (!(withRow ?? true)) {
16
- return group;
17
- }
18
- const row = createRow(false);
19
- group.append(row);
20
- return { group, row };
18
+ const group = createElement("div", {
19
+ className: "tabela__rowgroup",
20
+ role: "rowgroup"
21
+ }, {});
22
+ if (!(withRow ?? true)) return group;
23
+ const row = createRow(false);
24
+ group.append(row);
25
+ return {
26
+ group,
27
+ row
28
+ };
21
29
  }
22
30
  function createRow(withStyle) {
23
- const row = document.createElement("div");
24
- row.className = "tabela__row";
25
- row.role = "row";
26
- if (withStyle ?? true) {
27
- row.style.inset = "0 auto auto 0";
28
- row.style.position = "absolute";
29
- }
30
- return row;
31
+ const row = createElement("div", {
32
+ className: "tabela__row",
33
+ role: "row"
34
+ }, {});
35
+ if (withStyle ?? true) setStyles(row, {
36
+ inset: "0 auto auto 0",
37
+ position: "absolute"
38
+ });
39
+ return row;
31
40
  }
32
- export {
33
- createCell,
34
- createRow,
35
- createRowGroup
36
- };
41
+ export { createCell, createElement, createRow, createRowGroup };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { Tabela, tabela } from "./tabela.js";
2
- export {
3
- Tabela,
4
- tabela
5
- };
1
+ import { Tabela } from "./tabela.js";
2
+ function tabela(element, options) {
3
+ return new Tabela(element, options);
4
+ }
5
+ export { tabela };
@@ -0,0 +1,32 @@
1
+ import { ColumnComponent } from "../components/column.component.js";
2
+ var ColumnManager = class {
3
+ components = [];
4
+ constructor(tabela, columns) {
5
+ this.tabela = tabela;
6
+ this.set(columns);
7
+ }
8
+ destroy() {
9
+ this.components.length = 0;
10
+ }
11
+ remove(value) {
12
+ const { components, tabela } = this;
13
+ const fields = (Array.isArray(value) ? value : [value]).filter((item) => typeof item === "string");
14
+ const { length } = fields;
15
+ if (length === 0) return;
16
+ for (let fieldIndex = 0; fieldIndex < length; fieldIndex += 1) {
17
+ const componentIndex = components.findIndex((component) => component.options.field === fields[fieldIndex]);
18
+ if (componentIndex > -1) components.splice(componentIndex, 1);
19
+ }
20
+ tabela.components.header.update(components);
21
+ tabela.components.footer.update(components);
22
+ tabela.managers.virtualization.removeCells(fields);
23
+ }
24
+ set(columns) {
25
+ const { components, tabela } = this;
26
+ const { footer, header } = tabela.components;
27
+ components.splice(0, components.length, ...columns.map((column) => new ColumnComponent(tabela, column)));
28
+ header.update(components);
29
+ footer.update(components);
30
+ }
31
+ };
32
+ export { ColumnManager };
@@ -0,0 +1,30 @@
1
+ import { toMap } from "@oscarpalmer/atoms/array/to-map";
2
+ var DataManager = class {
3
+ values;
4
+ get length() {
5
+ return this.values.keys.active?.length ?? this.values.keys.original.length;
6
+ }
7
+ constructor(tabela, values) {
8
+ this.tabela = tabela;
9
+ const mapped = toMap(values, tabela.key);
10
+ this.values = {
11
+ keys: { original: [...mapped.keys()] },
12
+ objects: {
13
+ mapped,
14
+ array: values
15
+ }
16
+ };
17
+ }
18
+ destroy() {
19
+ const { values } = this;
20
+ values.objects.mapped.clear();
21
+ values.keys.active = void 0;
22
+ values.keys.original.length = 0;
23
+ values.objects.array.length = 0;
24
+ }
25
+ update() {
26
+ this.tabela.components.body.elements.faker.style.height = `${this.length * this.tabela.managers.rows.height}px`;
27
+ this.tabela.managers.virtualization.update(true);
28
+ }
29
+ };
30
+ export { DataManager };
@@ -0,0 +1,21 @@
1
+ import { RowComponent } from "../components/row.component.js";
2
+ var RowManager = class {
3
+ components = /* @__PURE__ */ new Map();
4
+ height;
5
+ constructor(tabela, rowHeight) {
6
+ this.tabela = tabela;
7
+ this.height = rowHeight;
8
+ }
9
+ destroy() {
10
+ this.components.clear();
11
+ }
12
+ get(key) {
13
+ let row = this.components.get(key);
14
+ if (row == null) {
15
+ row = new RowComponent(key);
16
+ this.components.set(key, row);
17
+ }
18
+ return row;
19
+ }
20
+ };
21
+ export { RowManager };