@oscarpalmer/tabela 0.14.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 (126) hide show
  1. package/dist/components/body.component.d.mts +11 -0
  2. package/dist/components/body.component.mjs +28 -0
  3. package/dist/components/column.component.d.mts +16 -0
  4. package/dist/components/column.component.mjs +46 -0
  5. package/dist/components/footer.component.d.mts +13 -0
  6. package/dist/components/{footer.component.js → footer.component.mjs} +9 -6
  7. package/dist/components/group.component.d.mts +20 -0
  8. package/dist/components/group.component.mjs +57 -0
  9. package/dist/components/header.component.d.mts +13 -0
  10. package/dist/components/header.component.mjs +25 -0
  11. package/dist/components/row.component.d.mts +15 -0
  12. package/dist/components/row.component.mjs +56 -0
  13. package/dist/helpers/dom.helpers.d.mts +12 -0
  14. package/dist/helpers/dom.helpers.mjs +43 -0
  15. package/dist/helpers/misc.helpers.d.mts +12 -0
  16. package/dist/helpers/misc.helpers.mjs +20 -0
  17. package/dist/helpers/style.helper.d.mts +6 -0
  18. package/dist/helpers/style.helper.mjs +8 -0
  19. package/dist/index.d.mts +7 -0
  20. package/dist/{index.js → index.mjs} +3 -1
  21. package/dist/managers/column.manager.d.mts +17 -0
  22. package/dist/managers/{column.manager.js → column.manager.mjs} +11 -6
  23. package/dist/managers/data.manager.d.mts +27 -0
  24. package/dist/managers/data.manager.mjs +256 -0
  25. package/dist/managers/event.manager.d.mts +18 -0
  26. package/dist/managers/event.manager.mjs +79 -0
  27. package/dist/managers/filter.manager.d.mts +18 -0
  28. package/dist/managers/filter.manager.mjs +115 -0
  29. package/dist/managers/group.manager.d.mts +27 -0
  30. package/dist/managers/group.manager.mjs +93 -0
  31. package/dist/managers/navigation.manager.d.mts +15 -0
  32. package/dist/managers/navigation.manager.mjs +80 -0
  33. package/dist/managers/render.manager.d.mts +19 -0
  34. package/dist/managers/render.manager.mjs +157 -0
  35. package/dist/managers/row.manager.d.mts +19 -0
  36. package/dist/managers/row.manager.mjs +45 -0
  37. package/dist/managers/selection.manager.d.mts +23 -0
  38. package/dist/managers/{selection.manager.js → selection.manager.mjs} +38 -31
  39. package/dist/managers/sort.manager.d.mts +23 -0
  40. package/dist/managers/sort.manager.mjs +147 -0
  41. package/dist/managers/style.manager.d.mts +9 -0
  42. package/dist/managers/style.manager.mjs +181 -0
  43. package/dist/models/body.model.d.mts +7 -0
  44. package/dist/models/body.model.mjs +1 -0
  45. package/dist/models/column.model.d.mts +13 -0
  46. package/dist/models/column.model.mjs +1 -0
  47. package/dist/models/data.model.d.mts +28 -0
  48. package/dist/models/data.model.mjs +1 -0
  49. package/dist/models/dom.model.d.mts +19 -0
  50. package/dist/models/dom.model.mjs +19 -0
  51. package/dist/models/event.model.d.mts +99 -0
  52. package/dist/models/event.model.mjs +53 -0
  53. package/dist/models/filter.model.d.mts +26 -0
  54. package/dist/models/filter.model.mjs +13 -0
  55. package/dist/models/footer.model.d.mts +8 -0
  56. package/dist/models/footer.model.mjs +1 -0
  57. package/dist/models/group.model.d.mts +19 -0
  58. package/dist/models/group.model.mjs +5 -0
  59. package/dist/models/header.model.d.mts +7 -0
  60. package/dist/models/header.model.mjs +1 -0
  61. package/dist/models/render.model.d.mts +22 -0
  62. package/dist/models/render.model.mjs +1 -0
  63. package/dist/models/selection.model.d.mts +12 -0
  64. package/dist/models/selection.model.mjs +1 -0
  65. package/dist/models/sort.model.d.mts +19 -0
  66. package/dist/models/sort.model.mjs +5 -0
  67. package/dist/models/style.model.d.mts +29 -0
  68. package/dist/models/style.model.mjs +29 -0
  69. package/dist/models/tabela.model.d.mts +46 -0
  70. package/dist/models/tabela.model.mjs +1 -0
  71. package/dist/models/tabela.options.d.mts +14 -0
  72. package/dist/models/tabela.options.mjs +1 -0
  73. package/dist/tabela.d.mts +22 -0
  74. package/dist/{tabela.full.js → tabela.full.mjs} +1501 -803
  75. package/dist/tabela.mjs +126 -0
  76. package/package.json +2 -4
  77. package/src/components/column.component.ts +4 -4
  78. package/src/components/group.component.ts +6 -2
  79. package/src/components/row.component.ts +5 -5
  80. package/src/helpers/misc.helpers.ts +13 -1
  81. package/src/managers/column.manager.ts +9 -9
  82. package/src/managers/data.manager.ts +139 -53
  83. package/src/managers/event.manager.ts +52 -6
  84. package/src/managers/filter.manager.ts +36 -20
  85. package/src/managers/group.manager.ts +43 -10
  86. package/src/managers/render.manager.ts +30 -17
  87. package/src/managers/sort.manager.ts +81 -52
  88. package/src/managers/style.manager.ts +33 -0
  89. package/src/models/column.model.ts +2 -2
  90. package/src/models/data.model.ts +6 -6
  91. package/src/models/dom.model.ts +0 -2
  92. package/src/models/event.model.ts +168 -0
  93. package/src/models/filter.model.ts +2 -2
  94. package/src/models/group.model.ts +9 -0
  95. package/src/models/render.model.ts +6 -0
  96. package/src/models/sort.model.ts +7 -5
  97. package/src/tabela.ts +6 -2
  98. package/dist/components/body.component.js +0 -23
  99. package/dist/components/column.component.js +0 -41
  100. package/dist/components/group.component.js +0 -28
  101. package/dist/components/header.component.js +0 -22
  102. package/dist/components/row.component.js +0 -48
  103. package/dist/helpers/dom.helpers.js +0 -38
  104. package/dist/helpers/misc.helpers.js +0 -7
  105. package/dist/helpers/style.helper.js +0 -6
  106. package/dist/managers/data.manager.js +0 -181
  107. package/dist/managers/event.manager.js +0 -53
  108. package/dist/managers/filter.manager.js +0 -98
  109. package/dist/managers/group.manager.js +0 -46
  110. package/dist/managers/navigation.manager.js +0 -73
  111. package/dist/managers/render.manager.js +0 -135
  112. package/dist/managers/row.manager.js +0 -38
  113. package/dist/managers/sort.manager.js +0 -122
  114. package/dist/models/body.model.js +0 -0
  115. package/dist/models/column.model.js +0 -0
  116. package/dist/models/data.model.js +0 -0
  117. package/dist/models/filter.model.js +0 -0
  118. package/dist/models/footer.model.js +0 -0
  119. package/dist/models/group.model.js +0 -0
  120. package/dist/models/header.model.js +0 -0
  121. package/dist/models/render.model.js +0 -0
  122. package/dist/models/selection.model.js +0 -0
  123. package/dist/models/sort.model.js +0 -0
  124. package/dist/models/tabela.model.js +0 -0
  125. package/dist/models/tabela.options.js +0 -0
  126. package/dist/tabela.js +0 -105
@@ -0,0 +1,11 @@
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
11
+ export { BodyComponent };
@@ -0,0 +1,28 @@
1
+ import { ATTRIBUTE_DATA_EVENT } from "../models/dom.model.mjs";
2
+ import { CSS_FAKER, CSS_ROWGROUP_BODY } from "../models/style.model.mjs";
3
+ import { createElement, createRowGroup } from "../helpers/dom.helpers.mjs";
4
+ import { EVENT_BODY } from "../models/event.model.mjs";
5
+ //#region src/components/body.component.ts
6
+ function createFaker() {
7
+ return createElement("div", { className: CSS_FAKER });
8
+ }
9
+ var BodyComponent = class {
10
+ elements = {
11
+ faker: createFaker(),
12
+ group: void 0
13
+ };
14
+ constructor(state) {
15
+ const group = createRowGroup(state.options.rowHeight, false);
16
+ this.elements.group = group;
17
+ group.className += ` ${CSS_ROWGROUP_BODY}`;
18
+ group.tabIndex = 0;
19
+ group.setAttribute(ATTRIBUTE_DATA_EVENT, EVENT_BODY);
20
+ group.append(this.elements.faker);
21
+ }
22
+ destroy() {
23
+ this.elements.faker = void 0;
24
+ this.elements.group = void 0;
25
+ }
26
+ };
27
+ //#endregion
28
+ export { BodyComponent };
@@ -0,0 +1,16 @@
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
16
+ export { ColumnComponent };
@@ -0,0 +1,46 @@
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";
3
+ import { createElement } from "../helpers/dom.helpers.mjs";
4
+ import { EVENT_HEADING } from "../models/event.model.mjs";
5
+ //#region src/components/column.component.ts
6
+ var ColumnComponent = class {
7
+ elements;
8
+ options;
9
+ constructor(column) {
10
+ const width = Number.parseInt(getComputedStyle(document.body).fontSize, 10) * (column.width ?? column.label.length * 1.5);
11
+ this.options = {
12
+ ...column,
13
+ width
14
+ };
15
+ this.elements = createHeading(this.options.key, this.options.label, width);
16
+ }
17
+ destroy() {
18
+ this.elements.content.remove();
19
+ this.elements.wrapper.remove();
20
+ this.elements.sorter.remove();
21
+ this.elements = void 0;
22
+ this.options = void 0;
23
+ }
24
+ };
25
+ function createHeading(key, title, width) {
26
+ const wrapper = createElement("div", {
27
+ className: CSS_HEADING,
28
+ [ATTRIBUTE_ROLE]: ROLE_COLUMNHEADER
29
+ }, {
30
+ [ATTRIBUTE_DATA_EVENT]: EVENT_HEADING,
31
+ [ATTRIBUTE_DATA_KEY]: key
32
+ }, { width: `${width}px` });
33
+ const content = createElement("div", {
34
+ className: CSS_HEADING_CONTENT,
35
+ textContent: title
36
+ });
37
+ const sorter = createElement("div", { className: CSS_HEADING_SORTER });
38
+ wrapper.append(content, sorter);
39
+ return {
40
+ content,
41
+ sorter,
42
+ wrapper
43
+ };
44
+ }
45
+ //#endregion
46
+ export { ColumnComponent };
@@ -0,0 +1,13 @@
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
13
+ export { FooterComponent };
@@ -1,15 +1,17 @@
1
- import { createCell, createRowGroup } from "../helpers/dom.helpers.js";
1
+ import { CSS_CELL_FOOTER, CSS_ROWGROUP_FOOTER, CSS_ROW_FOOTER } from "../models/style.model.mjs";
2
+ import { createCell, createRowGroup } from "../helpers/dom.helpers.mjs";
3
+ //#region src/components/footer.component.ts
2
4
  var FooterComponent = class {
3
5
  elements;
4
- constructor() {
5
- const { group, row } = createRowGroup();
6
+ constructor(state) {
7
+ const { group, row } = createRowGroup(state.options.rowHeight);
6
8
  this.elements = {
7
9
  group,
8
10
  row,
9
11
  cells: []
10
12
  };
11
- group.className += " tabela__rowgroup--footer";
12
- row.className += " tabela__row--footer";
13
+ group.className += ` ${CSS_ROWGROUP_FOOTER}`;
14
+ row.className += ` ${CSS_ROW_FOOTER}`;
13
15
  }
14
16
  destroy() {
15
17
  this.elements.cells.length = 0;
@@ -23,11 +25,12 @@ var FooterComponent = class {
23
25
  elements.row.innerHTML = "";
24
26
  for (let index = 0; index < length; index += 1) {
25
27
  const cell = createCell(columns[index].options.width ?? 4, false);
26
- cell.className += " tabela__cell--footer";
28
+ cell.className += ` ${CSS_CELL_FOOTER}`;
27
29
  cell.innerHTML = "&nbsp;";
28
30
  elements.cells.push(cell);
29
31
  elements.row.append(cell);
30
32
  }
31
33
  }
32
34
  };
35
+ //#endregion
33
36
  export { FooterComponent };
@@ -0,0 +1,20 @@
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
20
+ export { GroupComponent, removeGroup, renderGroup, updateGroup };
@@ -0,0 +1,57 @@
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";
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";
6
+ import { getString } from "@oscarpalmer/atoms/string";
7
+ //#region src/components/group.component.ts
8
+ var GroupComponent = class {
9
+ element;
10
+ expanded = true;
11
+ filtered = 0;
12
+ key;
13
+ selected = 0;
14
+ total = 0;
15
+ value;
16
+ constructor(label, value) {
17
+ this.label = label;
18
+ const stringified = getString(value);
19
+ this.key = `${GROUP_KEY_PREFIX}${stringified}`;
20
+ this.value = {
21
+ stringified,
22
+ original: value
23
+ };
24
+ }
25
+ };
26
+ function removeGroup(group) {
27
+ if (group.element == null) return;
28
+ group.element.innerHTML = "";
29
+ group.element.remove();
30
+ }
31
+ function renderGroup(state, component) {
32
+ component.element ??= createElement("div", {
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">
36
+ <span aria-hidden="true"></span>
37
+ <span>Open/close</span>
38
+ </button>
39
+ <p>${component.label}</p>
40
+ <span class="${CSS_GROUP_TOTAL}">${component.total}</span>
41
+ <span class="${CSS_GROUP_SELECTED}">${component.selected === 0 ? "" : component.selected}</span>
42
+ </div>`,
43
+ [ATTRIBUTE_ROLE]: "row"
44
+ }, {}, { height: `${state.options.rowHeight}px` });
45
+ }
46
+ function updateGroup(state, component, emit) {
47
+ if (component.element == null) return;
48
+ const selected = component.element.querySelector(selectedSelector);
49
+ const total = component.element.querySelector(totalSelector);
50
+ if (selected != null) selected.textContent = component.selected === 0 ? "" : String(component.selected);
51
+ if (total != null) total.textContent = String(component.total);
52
+ if (emit) state.managers.event.emit(EVENT_GROUP_UPDATE, [component]);
53
+ }
54
+ const selectedSelector = `.${CSS_GROUP_SELECTED}`;
55
+ const totalSelector = `.${CSS_GROUP_TOTAL}`;
56
+ //#endregion
57
+ export { GroupComponent, removeGroup, renderGroup, updateGroup };
@@ -0,0 +1,13 @@
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
13
+ export { HeaderComponent };
@@ -0,0 +1,25 @@
1
+ import { CSS_ROWGROUP_HEADER, CSS_ROW_HEADER } from "../models/style.model.mjs";
2
+ import { createRowGroup } from "../helpers/dom.helpers.mjs";
3
+ //#region src/components/header.component.ts
4
+ var HeaderComponent = class {
5
+ elements;
6
+ constructor(state) {
7
+ const { group, row } = createRowGroup(state.options.rowHeight);
8
+ this.elements = {
9
+ group,
10
+ row
11
+ };
12
+ group.className += ` ${CSS_ROWGROUP_HEADER}`;
13
+ row.className += ` ${CSS_ROW_HEADER}`;
14
+ }
15
+ destroy() {
16
+ this.elements.group = void 0;
17
+ this.elements.row = void 0;
18
+ }
19
+ update(columns) {
20
+ this.elements.row.innerHTML = "";
21
+ this.elements.row.append(...columns.map((column) => column.elements.wrapper));
22
+ }
23
+ };
24
+ //#endregion
25
+ export { HeaderComponent };
@@ -0,0 +1,15 @@
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
15
+ export { RowComponent, removeRow, renderRow };
@@ -0,0 +1,56 @@
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";
3
+ import { createCell, createRow } from "../helpers/dom.helpers.mjs";
4
+ import "../models/event.model.mjs";
5
+ import { setAttributes } from "@oscarpalmer/toretto/attribute";
6
+ import { getValue } from "@oscarpalmer/atoms/value/handle";
7
+ //#region src/components/row.component.ts
8
+ function removeRow(pool, row) {
9
+ if (row.element != null) {
10
+ row.element.innerHTML = "";
11
+ pool.rows.push(row.element);
12
+ row.element.remove();
13
+ row.element = void 0;
14
+ }
15
+ row.cells = {};
16
+ }
17
+ function renderRow(state, row) {
18
+ const { managers, options, prefix } = state;
19
+ const element = row.element ?? managers.render.pool.rows.shift() ?? createRow(options.rowHeight);
20
+ row.element = element;
21
+ element.innerHTML = "";
22
+ const selected = managers.selection.items.has(row.key);
23
+ const key = String(row.key);
24
+ setAttributes(element, {
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}`
30
+ });
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;
35
+ const { length } = columns;
36
+ const data = managers.data.state.values.mapped.get(row.key);
37
+ if (data == null) return;
38
+ for (let index = 0; index < length; index += 1) {
39
+ const { options } = columns[index];
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;
45
+ element.append(cell);
46
+ }
47
+ }
48
+ var RowComponent = class {
49
+ cells = {};
50
+ element;
51
+ constructor(key) {
52
+ this.key = key;
53
+ }
54
+ };
55
+ //#endregion
56
+ export { RowComponent, removeRow, renderRow };
@@ -0,0 +1,12 @@
1
+ //#region src/helpers/dom.helpers.d.ts
2
+ type RowGroupWithRow = {
3
+ group: HTMLDivElement;
4
+ row: HTMLDivElement;
5
+ };
6
+ declare function createCell(width: number, body?: boolean): HTMLDivElement;
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(height: number): RowGroupWithRow;
9
+ declare function createRowGroup(height: number, withRow: boolean): HTMLDivElement;
10
+ declare function createRow(height: number): HTMLDivElement;
11
+ //#endregion
12
+ export { createCell, createElement, createRow, createRowGroup };
@@ -0,0 +1,43 @@
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";
3
+ import { setAttributes } from "@oscarpalmer/toretto/attribute";
4
+ import { setStyles } from "@oscarpalmer/toretto/style";
5
+ //#region src/helpers/dom.helpers.ts
6
+ function createCell(width, body) {
7
+ const cell = createElement("div", {
8
+ className: CSS_CELL,
9
+ role: ROLE_CELL
10
+ }, {}, { width: `${width}px` });
11
+ if (body ?? true) cell.classList.add(CSS_CELL_BODY);
12
+ return cell;
13
+ }
14
+ function createElement(tagName, properties, attributes, style) {
15
+ const element = document.createElement(tagName);
16
+ const props = properties ?? {};
17
+ const keys = Object.keys(props);
18
+ for (const key of keys) element[key] = props[key];
19
+ setAttributes(element, attributes ?? {});
20
+ setStyles(element, style ?? {});
21
+ return element;
22
+ }
23
+ function createRowGroup(height, withRow) {
24
+ const group = createElement("div", {
25
+ className: CSS_ROWGROUP,
26
+ role: ROLE_ROWGROUP
27
+ });
28
+ if (!(withRow ?? true)) return group;
29
+ const row = createRow(height);
30
+ group.append(row);
31
+ return {
32
+ group,
33
+ row
34
+ };
35
+ }
36
+ function createRow(height) {
37
+ return createElement("div", {
38
+ className: CSS_ROW,
39
+ role: "row"
40
+ }, {}, { height: `${height}px` });
41
+ }
42
+ //#endregion
43
+ export { createCell, createElement, createRow, createRowGroup };
@@ -0,0 +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";
4
+ import { Key } from "@oscarpalmer/atoms/models";
5
+
6
+ //#region src/helpers/misc.helpers.d.ts
7
+ declare function getGroup(group: GroupComponent): TabelaGroup;
8
+ declare function getKey(value: unknown): Key | undefined;
9
+ declare function isEvent(value: unknown): value is EventName;
10
+ declare function isGroupKey(key: unknown): boolean;
11
+ //#endregion
12
+ export { getGroup, getKey, isEvent, isGroupKey };
@@ -0,0 +1,20 @@
1
+ import { EVENTS_NAMES } from "../models/event.model.mjs";
2
+ import { GROUP_KEY_EXPRESSION } from "../models/group.model.mjs";
3
+ //#region src/helpers/misc.helpers.ts
4
+ function getGroup(group) {
5
+ return { value: group.value.original };
6
+ }
7
+ function getKey(value) {
8
+ if (typeof value === "number") return value;
9
+ if (typeof value !== "string") return;
10
+ return integerExpression.test(value) ? Number.parseInt(value, 10) : value;
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
+ }
18
+ const integerExpression = /^\d+$/;
19
+ //#endregion
20
+ export { getGroup, getKey, isEvent, isGroupKey };
@@ -0,0 +1,6 @@
1
+ import * as _oscarpalmer_toretto_style0 from "@oscarpalmer/toretto/style";
2
+
3
+ //#region src/helpers/style.helper.d.ts
4
+ declare const preventSelection: _oscarpalmer_toretto_style0.StyleToggler;
5
+ //#endregion
6
+ export { preventSelection };
@@ -0,0 +1,8 @@
1
+ import { toggleStyles } from "@oscarpalmer/toretto/style";
2
+ //#region src/helpers/style.helper.ts
3
+ const preventSelection = toggleStyles(document.body, {
4
+ userSelect: "none",
5
+ webkitUserSelect: "none"
6
+ });
7
+ //#endregion
8
+ export { preventSelection };
@@ -0,0 +1,7 @@
1
+ import { TabelaOptions } from "./models/tabela.options.mjs";
2
+ import { Tabela } from "./tabela.mjs";
3
+
4
+ //#region src/index.d.ts
5
+ declare function tabela(element: HTMLElement, options: TabelaOptions): Tabela;
6
+ //#endregion
7
+ export { type Tabela, type TabelaOptions, tabela };
@@ -1,5 +1,7 @@
1
- import { Tabela } from "./tabela.js";
1
+ import { Tabela } from "./tabela.mjs";
2
+ //#region src/index.ts
2
3
  function tabela(element, options) {
3
4
  return new Tabela(element, options);
4
5
  }
6
+ //#endregion
5
7
  export { tabela };
@@ -0,0 +1,17 @@
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
17
+ export { ColumnManager };
@@ -1,4 +1,5 @@
1
- import { ColumnComponent } from "../components/column.component.js";
1
+ import { ColumnComponent } from "../components/column.component.mjs";
2
+ //#region src/managers/column.manager.ts
2
3
  var ColumnManager = class {
3
4
  items = [];
4
5
  constructor(state) {
@@ -11,14 +12,17 @@ var ColumnManager = class {
11
12
  this.items = void 0;
12
13
  this.state = void 0;
13
14
  }
15
+ get(key) {
16
+ return this.items.find((item) => item.options.key === key);
17
+ }
14
18
  remove(value) {
15
19
  const { items, state } = this;
16
20
  const { components, managers } = state;
17
- const fields = (Array.isArray(value) ? value : [value]).filter((item) => typeof item === "string");
18
- const { length } = fields;
21
+ const keys = (Array.isArray(value) ? value : [value]).filter((item) => typeof item === "string");
22
+ const { length } = keys;
19
23
  if (length === 0) return;
20
- for (let fieldIndex = 0; fieldIndex < length; fieldIndex += 1) {
21
- 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]);
22
26
  if (itemIndex > -1) {
23
27
  items[itemIndex].destroy();
24
28
  items.splice(itemIndex, 1);
@@ -26,7 +30,7 @@ var ColumnManager = class {
26
30
  }
27
31
  components.header.update(items);
28
32
  components.footer.update(items);
29
- managers.render.removeCells(fields);
33
+ managers.render.removeCells(keys);
30
34
  }
31
35
  set(columns) {
32
36
  const { items, state } = this;
@@ -36,4 +40,5 @@ var ColumnManager = class {
36
40
  footer.update(items);
37
41
  }
38
42
  };
43
+ //#endregion
39
44
  export { ColumnManager };
@@ -0,0 +1,27 @@
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
27
+ export { DataManager };