@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,181 @@
1
+ import { CSS_BUTTON, CSS_CELL, CSS_CELL_FOOTER, CSS_CELL_GROUP, CSS_HEADING, CSS_HEADING_CONTENT, CSS_HEADING_SORTER, CSS_ROW, CSS_ROWGROUP_BODY, CSS_ROWGROUP_FOOTER, CSS_ROWGROUP_HEADER, CSS_ROW_SELECTED, CSS_SELECTION, CSS_TABLE, CSS_WRAPPER } from "../models/style.model.mjs";
2
+ //#region src/managers/style.manager.ts
3
+ var StyleManager = class {
4
+ constructor(state) {
5
+ this.state = state;
6
+ if (appended) return;
7
+ appended = true;
8
+ const style = document.createElement("style");
9
+ style.textContent = styling;
10
+ document.head.appendChild(style);
11
+ }
12
+ };
13
+ const styling = `/** Table */
14
+
15
+ :where(.${CSS_WRAPPER}) {
16
+ flex: 1;
17
+ position: relative;
18
+ background-color: var(--oui-absolute);
19
+ border: 1px solid grey;
20
+ }
21
+
22
+ :where(.${CSS_TABLE}) {
23
+ min-height: 24em;
24
+ display: flex;
25
+ flex-flow: column nowrap;
26
+ flex: 1;
27
+ overflow: auto;
28
+ position: absolute;
29
+ inset: 0;
30
+ }
31
+
32
+ /** Row group */
33
+
34
+ :where(.${CSS_ROWGROUP_HEADER}),
35
+ :where(.${CSS_ROWGROUP_FOOTER}) {
36
+ background-color: white;
37
+ position: sticky;
38
+ left: 0;
39
+ z-index: 10;
40
+ }
41
+
42
+ :where(.${CSS_ROWGROUP_HEADER}) {
43
+ top: 0;
44
+ }
45
+
46
+ :where(.${CSS_ROWGROUP_FOOTER}) {
47
+ bottom: 0;
48
+ }
49
+
50
+ :where(.${CSS_ROWGROUP_BODY}) {
51
+ display: flex;
52
+ flex-flow: column nowrap;
53
+ flex: 1;
54
+ }
55
+
56
+ :where(.${CSS_ROWGROUP_BODY}:focus) {
57
+ outline: none;
58
+ }
59
+
60
+ :where(.${CSS_WRAPPER}:has(.${CSS_ROWGROUP_BODY}:focus-visible)) {
61
+ outline: 2px solid var(--oui-blue-6);
62
+ outline-offset: 2px;
63
+ }
64
+
65
+ /** Row */
66
+
67
+ :where(.${CSS_ROW}) {
68
+ width: 100%;
69
+ display: flex;
70
+ flex-flow: row nowrap;
71
+ }
72
+
73
+ :where(.${CSS_ROW}:last-child .${CSS_CELL}) {
74
+ border-bottom-width: 0;
75
+ }
76
+
77
+ :where(.${CSS_ROW}--body),
78
+ :where(.${CSS_ROW}--group) {
79
+ flex: 1;
80
+ position: absolute;
81
+ }
82
+
83
+ :where(.${CSS_ROW_SELECTED}) {
84
+ background-color: var(--oui-blue-1);
85
+ color: var(--oui-blue-9);
86
+ }
87
+
88
+ :where(.${CSS_WRAPPER}:has(.${CSS_ROWGROUP_BODY}:focus-visible) .${CSS_ROW}[data-active="true"]) {
89
+ outline: 2px solid var(--oui-blue-6);
90
+ outline-offset: 2px;
91
+ }
92
+
93
+ /** Cells */
94
+
95
+ :where(.${CSS_CELL}),
96
+ :where(.${CSS_HEADING}) {
97
+ padding: 0.5em;
98
+ border-color: gray;
99
+ border-style: solid;
100
+ border-width: 0 1px 1px 0;
101
+ line-height: 1;
102
+ }
103
+
104
+ :where(.${CSS_WRAPPER} .${CSS_CELL}:last-child),
105
+ :where(.${CSS_ROW} .${CSS_HEADING}:last-child) {
106
+ flex: 1;
107
+ border-right-width: 0;
108
+ }
109
+
110
+ :where(.${CSS_CELL}) {
111
+ overflow: hidden;
112
+ text-overflow: ellipsis;
113
+ white-space: nowrap;
114
+ }
115
+
116
+ :where(.${CSS_HEADING}) {
117
+ display: flex;
118
+ flex-flow: row nowrap;
119
+ align-items: center;
120
+ justify-content: space-between;
121
+ gap: 0.5em;
122
+ cursor: pointer;
123
+ }
124
+
125
+ :where(.${CSS_HEADING_CONTENT}) {
126
+ overflow: hidden;
127
+ white-space: nowrap;
128
+ text-overflow: ellipsis;
129
+ }
130
+
131
+ :where(.${CSS_HEADING}[data-sort-direction] .${CSS_HEADING_SORTER})::after {
132
+ width: 1em;
133
+ height: 1em;
134
+ display: inline-flex;
135
+ font-size: .75em;
136
+ font-weight: bold;
137
+ }
138
+
139
+ :where(.${CSS_HEADING}[data-sort-direction="ascending"] .${CSS_HEADING_SORTER})::after {
140
+ content: '\\21C8';
141
+ }
142
+
143
+ :where(.${CSS_HEADING}[data-sort-direction="descending"] .${CSS_HEADING_SORTER})::after {
144
+ content: '\\21CA';
145
+ }
146
+
147
+ :where(.${CSS_CELL_FOOTER}) {
148
+ border-top-width: 1px;
149
+ border-bottom-width: 0;
150
+ }
151
+
152
+ :where(.${CSS_CELL_GROUP}) {
153
+ padding: 0;
154
+ display: flex;
155
+ flex-flow: row nowrap;
156
+ align-items: center;
157
+ gap: 0.5em;
158
+ }
159
+
160
+ :where(.${CSS_CELL_GROUP} .${CSS_BUTTON}) {
161
+ margin: 0 0 0 .25rem;
162
+ }
163
+
164
+ /** Misc. */
165
+
166
+ :where(.${CSS_BUTTON}) {
167
+ font-size: .75rem;
168
+ font-weight: bold;
169
+ }
170
+
171
+ :where(.${CSS_SELECTION}) {
172
+ background-color: color-mix(in oklch, var(--oui-blue-6), transparent);
173
+ border: 1px solid var(--oui-blue-6);
174
+ border-radius: .25rem;
175
+ position: fixed;
176
+ z-index: 1000;
177
+ }
178
+ `.replace(/^\s+|\s+|\s+$/g, " ");
179
+ let appended = false;
180
+ //#endregion
181
+ export { StyleManager };
@@ -0,0 +1,7 @@
1
+ //#region src/models/body.model.d.ts
2
+ type BodyElements = {
3
+ faker: HTMLDivElement;
4
+ group: HTMLDivElement;
5
+ };
6
+ //#endregion
7
+ export { BodyElements };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ //#region src/models/column.model.d.ts
2
+ type Column = {
3
+ key: string;
4
+ label: string;
5
+ width: number;
6
+ };
7
+ type TabelaColumn = {
8
+ key: string;
9
+ label: string;
10
+ width?: number;
11
+ };
12
+ //#endregion
13
+ export { Column, TabelaColumn };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ import { State } from "./tabela.model.mjs";
2
+ import { Key, PlainObject } from "@oscarpalmer/atoms/models";
3
+
4
+ //#region src/models/data.model.d.ts
5
+ type DataKeys = {
6
+ active?: Key[];
7
+ original: Key[];
8
+ };
9
+ type DataState = {
10
+ keys: DataKeys;
11
+ values: DataValues;
12
+ } & State;
13
+ type DataValue = string | PlainObject;
14
+ type DataValues = {
15
+ array: DataValue[];
16
+ mapped: Map<Key, PlainObject>;
17
+ };
18
+ type TabelaData = {
19
+ add(data: PlainObject[]): Promise<void>;
20
+ clear(): Promise<void>;
21
+ get(active?: boolean): PlainObject[];
22
+ remove(keys: Key[]): Promise<void>;
23
+ remove(data: PlainObject[]): Promise<void>;
24
+ synchronize(data: PlainObject[], remove?: boolean): Promise<void>;
25
+ update(data: PlainObject[]): Promise<void>;
26
+ };
27
+ //#endregion
28
+ export { DataState, DataValue, TabelaData };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ //#region src/models/dom.model.d.ts
2
+ declare const ARIA_ACTIVEDESCENDANT = "aria-activedescendant";
3
+ declare const ARIA_LABEL = "aria-label";
4
+ declare const ARIA_SELECTED = "aria-selected";
5
+ declare const ARIA_SORT = "aria-sort";
6
+ declare const ATTRIBUTE_DATA_ACTIVE = "data-active";
7
+ declare const ATTRIBUTE_DATA_EVENT = "data-event";
8
+ declare const ATTRIBUTE_DATA_KEY = "data-key";
9
+ declare const ATTRIBUTE_DATA_SORT_DIRECTION = "data-sort-direction";
10
+ declare const ATTRIBUTE_DATA_SORT_POSITION = "data-sort-position";
11
+ declare const ATTRIBUTE_ROLE = "role";
12
+ declare const ELEMENT_DIV = "div";
13
+ declare const ROLE_CELL = "cell";
14
+ declare const ROLE_COLUMNHEADER = "columnheader";
15
+ declare const ROLE_ROW = "row";
16
+ declare const ROLE_ROWGROUP = "rowgroup";
17
+ declare const ROLE_TABLE = "table";
18
+ //#endregion
19
+ export { ARIA_ACTIVEDESCENDANT, ARIA_LABEL, ARIA_SELECTED, ARIA_SORT, ATTRIBUTE_DATA_ACTIVE, ATTRIBUTE_DATA_EVENT, ATTRIBUTE_DATA_KEY, ATTRIBUTE_DATA_SORT_DIRECTION, ATTRIBUTE_DATA_SORT_POSITION, ATTRIBUTE_ROLE, ELEMENT_DIV, ROLE_CELL, ROLE_COLUMNHEADER, ROLE_ROW, ROLE_ROWGROUP, ROLE_TABLE };
@@ -0,0 +1,19 @@
1
+ //#region src/models/dom.model.ts
2
+ const ARIA_ACTIVEDESCENDANT = "aria-activedescendant";
3
+ const ARIA_LABEL = "aria-label";
4
+ const ARIA_SELECTED = "aria-selected";
5
+ const ARIA_SORT = "aria-sort";
6
+ const ATTRIBUTE_DATA_ACTIVE = "data-active";
7
+ const ATTRIBUTE_DATA_EVENT = "data-event";
8
+ const ATTRIBUTE_DATA_KEY = "data-key";
9
+ const ATTRIBUTE_DATA_SORT_DIRECTION = "data-sort-direction";
10
+ const ATTRIBUTE_DATA_SORT_POSITION = "data-sort-position";
11
+ const ATTRIBUTE_ROLE = "role";
12
+ const ELEMENT_DIV = "div";
13
+ const ROLE_CELL = "cell";
14
+ const ROLE_COLUMNHEADER = "columnheader";
15
+ const ROLE_ROW = "row";
16
+ const ROLE_ROWGROUP = "rowgroup";
17
+ const ROLE_TABLE = "table";
18
+ //#endregion
19
+ export { ARIA_ACTIVEDESCENDANT, ARIA_LABEL, ARIA_SELECTED, ARIA_SORT, ATTRIBUTE_DATA_ACTIVE, ATTRIBUTE_DATA_EVENT, ATTRIBUTE_DATA_KEY, ATTRIBUTE_DATA_SORT_DIRECTION, ATTRIBUTE_DATA_SORT_POSITION, ATTRIBUTE_ROLE, ELEMENT_DIV, ROLE_CELL, ROLE_COLUMNHEADER, ROLE_ROW, ROLE_ROWGROUP, ROLE_TABLE };
@@ -0,0 +1,99 @@
1
+ import { TabelaFilterItem } from "./filter.model.mjs";
2
+ import { TabelaGroup, TabelaGroupToggle } from "./group.model.mjs";
3
+ import { TabelaSortItem } from "./sort.model.mjs";
4
+ import { Key, PlainObject } from "@oscarpalmer/atoms/models";
5
+
6
+ //#region src/models/event.model.d.ts
7
+ type EventDataAdd = (data: PlainObject[]) => void;
8
+ type EventDataClear = () => void;
9
+ type EventDataFiltered = (data: PlainObject[]) => void;
10
+ type EventDataRemove = (data: PlainObject[]) => void;
11
+ type EventDataSorted = (data: PlainObject[]) => void;
12
+ type EventDataSynchronize = (data: {
13
+ added: PlainObject[];
14
+ removed: PlainObject[];
15
+ updated: PlainObject[];
16
+ }) => void;
17
+ type EventDataUpdate = (data: PlainObject[]) => void;
18
+ type EventFilterAdd = (filters: TabelaFilterItem[]) => void;
19
+ type EventFilterClear = () => void;
20
+ type EventFilterRemove = (filters: TabelaFilterItem[]) => void;
21
+ type EventGroupAdd = (groups: TabelaGroup[]) => void;
22
+ type EventGroupClear = () => void;
23
+ type EventGroupRemove = (groups: TabelaGroup[]) => void;
24
+ type EventGroupToggle = (event: TabelaGroupToggle) => void;
25
+ type EventGroupUpdate = (groups: TabelaGroup[]) => void;
26
+ type EventMap = {
27
+ 'data:add': EventDataAdd;
28
+ 'data:clear': EventDataClear;
29
+ 'data:filtered': EventDataFiltered;
30
+ 'data:remove': EventDataRemove;
31
+ 'data:sorted': EventDataSorted;
32
+ 'data:synchronize': EventDataSynchronize;
33
+ 'data:update': EventDataUpdate;
34
+ 'filter:add': EventFilterAdd;
35
+ 'filter:clear': EventFilterClear;
36
+ 'filter:remove': EventFilterRemove;
37
+ 'group:add': EventGroupAdd;
38
+ 'group:clear': EventGroupClear;
39
+ 'group:remove': EventGroupRemove;
40
+ 'group:toggle': EventGroupToggle;
41
+ 'group:update': EventGroupUpdate;
42
+ 'navigation:active': EventNavigationActive;
43
+ 'render:begin': EventRenderBegin;
44
+ 'render:end': EventRenderEnd;
45
+ 'selection:add': EventSelectionAdd;
46
+ 'selection:clear': EventSelectionClear;
47
+ 'selection:remove': EventSelectionRemove;
48
+ 'selection:toggle': EventSelectionToggle;
49
+ 'sort:add': EventSortAdd;
50
+ 'sort:clear': EventSortClear;
51
+ 'sort:flip': EventSortFlip;
52
+ 'sort:remove': EventSortRemove;
53
+ 'sort:set': EventSortSet;
54
+ };
55
+ type EventName = keyof EventMap;
56
+ type EventNavigationActive = (active: Key | null) => void;
57
+ type EventRenderBegin = () => void;
58
+ type EventRenderEnd = () => void;
59
+ type EventSelectionAdd = (keys: Key[]) => void;
60
+ type EventSelectionClear = () => void;
61
+ type EventSelectionRemove = (keys: Key[]) => void;
62
+ type EventSelectionToggle = (keys: Key[]) => void;
63
+ type EventSortAdd = (sorters: TabelaSortItem[]) => void;
64
+ type EventSortClear = () => void;
65
+ type EventSortFlip = (sorters: TabelaSortItem[]) => void;
66
+ type EventSortRemove = (sorters: TabelaSortItem[]) => void;
67
+ type EventSortSet = (sorters: {
68
+ added: TabelaSortItem[];
69
+ removed: TabelaSortItem[];
70
+ }) => void;
71
+ type Events = Partial<{ [Name in EventName]: Set<EventMap[Name]> }>;
72
+ type TabelaEvents = {
73
+ subscribe<Name extends EventName>(name: Name, callback: EventMap[Name]): void;
74
+ unsubscribe<Name extends EventName>(name: Name, callback: EventMap[Name]): void;
75
+ };
76
+ declare const EVENT_BODY = "body";
77
+ declare const EVENT_DATA_ADD = "data:add";
78
+ declare const EVENT_DATA_CLEAR = "data:clear";
79
+ declare const EVENT_DATA_FILTERED = "data:filtered";
80
+ declare const EVENT_DATA_REMOVE = "data:remove";
81
+ declare const EVENT_DATA_SORTED = "data:sorted";
82
+ declare const EVENT_DATA_SYNCHRONIZE = "data:synchronize";
83
+ declare const EVENT_DATA_UPDATE = "data:update";
84
+ declare const EVENT_GROUP = "group";
85
+ declare const EVENT_GROUP_ADD = "group:add";
86
+ declare const EVENT_GROUP_CLEAR = "group:clear";
87
+ declare const EVENT_GROUP_REMOVE = "group:remove";
88
+ declare const EVENT_GROUP_TOGGLE = "group:toggle";
89
+ declare const EVENT_GROUP_UPDATE = "group:update";
90
+ declare const EVENT_HEADING = "heading";
91
+ declare const EVENT_ROW = "row";
92
+ declare const EVENT_SORT_ADD = "sort:add";
93
+ declare const EVENT_SORT_CLEAR = "sort:clear";
94
+ declare const EVENT_SORT_FLIP = "sort:flip";
95
+ declare const EVENT_SORT_REMOVE = "sort:remove";
96
+ declare const EVENT_SORT_SET = "sort:set";
97
+ declare const EVENTS_NAMES: Set<keyof EventMap>;
98
+ //#endregion
99
+ export { EVENTS_NAMES, EVENT_BODY, EVENT_DATA_ADD, EVENT_DATA_CLEAR, EVENT_DATA_FILTERED, EVENT_DATA_REMOVE, EVENT_DATA_SORTED, EVENT_DATA_SYNCHRONIZE, EVENT_DATA_UPDATE, EVENT_GROUP, EVENT_GROUP_ADD, EVENT_GROUP_CLEAR, EVENT_GROUP_REMOVE, EVENT_GROUP_TOGGLE, EVENT_GROUP_UPDATE, EVENT_HEADING, EVENT_ROW, EVENT_SORT_ADD, EVENT_SORT_CLEAR, EVENT_SORT_FLIP, EVENT_SORT_REMOVE, EVENT_SORT_SET, EventDataAdd, EventDataClear, EventDataFiltered, EventDataRemove, EventDataSorted, EventDataSynchronize, EventDataUpdate, EventFilterAdd, EventFilterClear, EventFilterRemove, EventGroupAdd, EventGroupClear, EventGroupRemove, EventGroupToggle, EventGroupUpdate, EventMap, EventName, EventNavigationActive, EventRenderBegin, EventRenderEnd, EventSelectionAdd, EventSelectionClear, EventSelectionRemove, EventSelectionToggle, EventSortAdd, EventSortClear, EventSortFlip, EventSortRemove, EventSortSet, Events, TabelaEvents };
@@ -0,0 +1,53 @@
1
+ //#region src/models/event.model.ts
2
+ const EVENT_BODY = "body";
3
+ const EVENT_DATA_ADD = "data:add";
4
+ const EVENT_DATA_CLEAR = "data:clear";
5
+ const EVENT_DATA_FILTERED = "data:filtered";
6
+ const EVENT_DATA_REMOVE = "data:remove";
7
+ const EVENT_DATA_SORTED = "data:sorted";
8
+ const EVENT_DATA_SYNCHRONIZE = "data:synchronize";
9
+ const EVENT_DATA_UPDATE = "data:update";
10
+ const EVENT_GROUP = "group";
11
+ const EVENT_GROUP_ADD = "group:add";
12
+ const EVENT_GROUP_CLEAR = "group:clear";
13
+ const EVENT_GROUP_REMOVE = "group:remove";
14
+ const EVENT_GROUP_TOGGLE = "group:toggle";
15
+ const EVENT_GROUP_UPDATE = "group:update";
16
+ const EVENT_HEADING = "heading";
17
+ const EVENT_ROW = "row";
18
+ const EVENT_SORT_ADD = "sort:add";
19
+ const EVENT_SORT_CLEAR = "sort:clear";
20
+ const EVENT_SORT_FLIP = "sort:flip";
21
+ const EVENT_SORT_REMOVE = "sort:remove";
22
+ const EVENT_SORT_SET = "sort:set";
23
+ const EVENTS_NAMES = new Set([
24
+ EVENT_DATA_ADD,
25
+ EVENT_DATA_CLEAR,
26
+ EVENT_DATA_FILTERED,
27
+ EVENT_DATA_REMOVE,
28
+ EVENT_DATA_SORTED,
29
+ EVENT_DATA_SYNCHRONIZE,
30
+ EVENT_DATA_UPDATE,
31
+ "filter:add",
32
+ "filter:clear",
33
+ "filter:remove",
34
+ EVENT_GROUP_ADD,
35
+ EVENT_GROUP_CLEAR,
36
+ EVENT_GROUP_REMOVE,
37
+ EVENT_GROUP_TOGGLE,
38
+ EVENT_GROUP_UPDATE,
39
+ "navigation:active",
40
+ "render:begin",
41
+ "render:end",
42
+ "selection:add",
43
+ "selection:clear",
44
+ "selection:remove",
45
+ "selection:toggle",
46
+ EVENT_SORT_ADD,
47
+ EVENT_SORT_CLEAR,
48
+ EVENT_SORT_FLIP,
49
+ EVENT_SORT_REMOVE,
50
+ EVENT_SORT_SET
51
+ ]);
52
+ //#endregion
53
+ export { EVENTS_NAMES, EVENT_BODY, EVENT_DATA_ADD, EVENT_DATA_CLEAR, EVENT_DATA_FILTERED, EVENT_DATA_REMOVE, EVENT_DATA_SORTED, EVENT_DATA_SYNCHRONIZE, EVENT_DATA_UPDATE, EVENT_GROUP, EVENT_GROUP_ADD, EVENT_GROUP_CLEAR, EVENT_GROUP_REMOVE, EVENT_GROUP_TOGGLE, EVENT_GROUP_UPDATE, EVENT_HEADING, EVENT_ROW, EVENT_SORT_ADD, EVENT_SORT_CLEAR, EVENT_SORT_FLIP, EVENT_SORT_REMOVE, EVENT_SORT_SET };
@@ -0,0 +1,26 @@
1
+ //#region src/models/filter.model.d.ts
2
+ type TabelaFilter = {
3
+ add(item: TabelaFilterItem): void;
4
+ clear(): void;
5
+ remove(key: string): void;
6
+ remove(item: TabelaFilterItem): void;
7
+ set(items: TabelaFilterItem[]): void;
8
+ };
9
+ type TabelaFilterComparison = 'contains' | 'ends-with' | 'equals' | 'greater-than' | 'greater-than-or-equal' | 'less-than' | 'less-than-or-equal' | 'not-contains' | 'not-equals' | 'starts-with';
10
+ type TabelaFilterItem = {
11
+ comparison: TabelaFilterComparison;
12
+ key: string;
13
+ value: unknown;
14
+ };
15
+ declare const FILTER_CONTAINS: TabelaFilterComparison;
16
+ declare const FILTER_ENDS_WITH: TabelaFilterComparison;
17
+ declare const FILTER_EQUALS: TabelaFilterComparison;
18
+ declare const FILTER_GREATER_THAN: TabelaFilterComparison;
19
+ declare const FILTER_GREATER_THAN_OR_EQUAL: TabelaFilterComparison;
20
+ declare const FILTER_LESS_THAN: TabelaFilterComparison;
21
+ declare const FILTER_LESS_THAN_OR_EQUAL: TabelaFilterComparison;
22
+ declare const FILTER_NOT_CONTAINS: TabelaFilterComparison;
23
+ declare const FILTER_NOT_EQUALS: TabelaFilterComparison;
24
+ declare const FILTER_STARTS_WITH: TabelaFilterComparison;
25
+ //#endregion
26
+ export { FILTER_CONTAINS, FILTER_ENDS_WITH, FILTER_EQUALS, FILTER_GREATER_THAN, FILTER_GREATER_THAN_OR_EQUAL, FILTER_LESS_THAN, FILTER_LESS_THAN_OR_EQUAL, FILTER_NOT_CONTAINS, FILTER_NOT_EQUALS, FILTER_STARTS_WITH, TabelaFilter, TabelaFilterComparison, TabelaFilterItem };
@@ -0,0 +1,13 @@
1
+ //#region src/models/filter.model.ts
2
+ const FILTER_CONTAINS = "contains";
3
+ const FILTER_ENDS_WITH = "ends-with";
4
+ const FILTER_EQUALS = "equals";
5
+ const FILTER_GREATER_THAN = "greater-than";
6
+ const FILTER_GREATER_THAN_OR_EQUAL = "greater-than-or-equal";
7
+ const FILTER_LESS_THAN = "less-than";
8
+ const FILTER_LESS_THAN_OR_EQUAL = "less-than-or-equal";
9
+ const FILTER_NOT_CONTAINS = "not-contains";
10
+ const FILTER_NOT_EQUALS = "not-equals";
11
+ const FILTER_STARTS_WITH = "starts-with";
12
+ //#endregion
13
+ export { FILTER_CONTAINS, FILTER_ENDS_WITH, FILTER_EQUALS, FILTER_GREATER_THAN, FILTER_GREATER_THAN_OR_EQUAL, FILTER_LESS_THAN, FILTER_LESS_THAN_OR_EQUAL, FILTER_NOT_CONTAINS, FILTER_NOT_EQUALS, FILTER_STARTS_WITH };
@@ -0,0 +1,8 @@
1
+ //#region src/models/footer.model.d.ts
2
+ type FooterElements = {
3
+ cells: HTMLDivElement[];
4
+ group: HTMLDivElement;
5
+ row: HTMLDivElement;
6
+ };
7
+ //#endregion
8
+ export { FooterElements };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ //#region src/models/group.model.d.ts
2
+ type GroupValue = {
3
+ original: unknown;
4
+ stringified: string;
5
+ };
6
+ type TabelaGroup = {
7
+ value: unknown;
8
+ };
9
+ type TabelaGroupHandlers = {
10
+ set(group?: string): void;
11
+ };
12
+ type TabelaGroupToggle = {
13
+ collapsed: TabelaGroup[];
14
+ expanded: TabelaGroup[];
15
+ };
16
+ declare const GROUP_KEY_EXPRESSION: RegExp;
17
+ declare const GROUP_KEY_PREFIX = "group:";
18
+ //#endregion
19
+ export { GROUP_KEY_EXPRESSION, GROUP_KEY_PREFIX, GroupValue, TabelaGroup, TabelaGroupHandlers, TabelaGroupToggle };
@@ -0,0 +1,5 @@
1
+ //#region src/models/group.model.ts
2
+ const GROUP_KEY_EXPRESSION = /^group:(.+)$/;
3
+ const GROUP_KEY_PREFIX = "group:";
4
+ //#endregion
5
+ export { GROUP_KEY_EXPRESSION, GROUP_KEY_PREFIX };
@@ -0,0 +1,7 @@
1
+ //#region src/models/header.model.d.ts
2
+ type HeaderElements = {
3
+ group: HTMLDivElement;
4
+ row: HTMLDivElement;
5
+ };
6
+ //#endregion
7
+ export { HeaderElements };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import { State } from "./tabela.model.mjs";
2
+ import { Key } from "@oscarpalmer/atoms/models";
3
+
4
+ //#region src/models/render.model.d.ts
5
+ type RenderElementPool = {
6
+ cells: Record<string, HTMLDivElement[]>;
7
+ rows: HTMLDivElement[];
8
+ };
9
+ type RenderRange = {
10
+ end: number;
11
+ start: number;
12
+ };
13
+ type RenderState = {
14
+ active: boolean;
15
+ top: number;
16
+ } & State;
17
+ type RenderVisible = {
18
+ indiced: Map<number, Key>;
19
+ keys: Set<Key>;
20
+ };
21
+ //#endregion
22
+ export { RenderElementPool, RenderRange, RenderState, RenderVisible };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import { Key } from "@oscarpalmer/atoms/models";
2
+
3
+ //#region src/models/selection.model.d.ts
4
+ type TabelaSelection = {
5
+ add(keys: Key[]): void;
6
+ clear(): void;
7
+ remove(keys: Key[]): void;
8
+ set(keys: Key[]): void;
9
+ toggle(): void;
10
+ };
11
+ //#endregion
12
+ export { TabelaSelection };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ import { SortDirection } from "@oscarpalmer/atoms/array";
2
+
3
+ //#region src/models/sort.model.d.ts
4
+ type TabelaSort = {
5
+ add(key: string, direction?: TabelaSortDirection): void;
6
+ clear(): void;
7
+ flip(key: string): void;
8
+ remove(key: string): void;
9
+ set(items: TabelaSortItem[]): void;
10
+ };
11
+ type TabelaSortDirection = SortDirection;
12
+ type TabelaSortItem = {
13
+ direction: TabelaSortDirection;
14
+ key: string;
15
+ };
16
+ declare const SORT_ASCENDING: TabelaSortDirection;
17
+ declare const SORT_DESCENDING: TabelaSortDirection;
18
+ //#endregion
19
+ export { SORT_ASCENDING, SORT_DESCENDING, TabelaSort, TabelaSortDirection, TabelaSortItem };
@@ -0,0 +1,5 @@
1
+ //#region src/models/sort.model.ts
2
+ const SORT_ASCENDING = "ascending";
3
+ const SORT_DESCENDING = "descending";
4
+ //#endregion
5
+ export { SORT_ASCENDING, SORT_DESCENDING };
@@ -0,0 +1,29 @@
1
+ //#region src/models/style.model.d.ts
2
+ declare const CSS_BUTTON = "tabela__button";
3
+ declare const CSS_BUTTON_GROUP = "tabela__button--group";
4
+ declare const CSS_CELL = "tabela__cell";
5
+ declare const CSS_CELL_BODY = "tabela__cell--body";
6
+ declare const CSS_CELL_FOOTER = "tabela__cell--footer";
7
+ declare const CSS_CELL_GROUP = "tabela__cell--group";
8
+ declare const CSS_FAKER = "tabela__faker";
9
+ declare const CSS_GROUP = "tabela__group";
10
+ declare const CSS_GROUP_SELECTED = "tabela__group__selected";
11
+ declare const CSS_GROUP_TOTAL = "tabela__group__total";
12
+ declare const CSS_HEADING = "tabela__heading";
13
+ declare const CSS_HEADING_CONTENT = "tabela__heading__content";
14
+ declare const CSS_HEADING_SORTER = "tabela__heading__sorter";
15
+ declare const CSS_ROW = "tabela__row";
16
+ declare const CSS_ROW_BODY = "tabela__row--body";
17
+ declare const CSS_ROW_FOOTER = "tabela__row--footer";
18
+ declare const CSS_ROW_GROUP = "tabela__row--group tabela__group";
19
+ declare const CSS_ROW_HEADER = "tabela__row--header";
20
+ declare const CSS_ROW_SELECTED = "tabela__row--selected";
21
+ declare const CSS_ROWGROUP = "tabela__rowgroup";
22
+ declare const CSS_ROWGROUP_BODY = "tabela__rowgroup--body";
23
+ declare const CSS_ROWGROUP_FOOTER = "tabela__rowgroup--footer";
24
+ declare const CSS_ROWGROUP_HEADER = "tabela__rowgroup--header";
25
+ declare const CSS_SELECTION = "tabela__selection";
26
+ declare const CSS_TABLE = "tabela__table";
27
+ declare const CSS_WRAPPER = "tabela";
28
+ //#endregion
29
+ export { CSS_BUTTON, CSS_BUTTON_GROUP, CSS_CELL, CSS_CELL_BODY, CSS_CELL_FOOTER, CSS_CELL_GROUP, CSS_FAKER, CSS_GROUP, CSS_GROUP_SELECTED, CSS_GROUP_TOTAL, CSS_HEADING, CSS_HEADING_CONTENT, CSS_HEADING_SORTER, CSS_ROW, CSS_ROWGROUP, CSS_ROWGROUP_BODY, CSS_ROWGROUP_FOOTER, CSS_ROWGROUP_HEADER, CSS_ROW_BODY, CSS_ROW_FOOTER, CSS_ROW_GROUP, CSS_ROW_HEADER, CSS_ROW_SELECTED, CSS_SELECTION, CSS_TABLE, CSS_WRAPPER };
@@ -0,0 +1,29 @@
1
+ //#region src/models/style.model.ts
2
+ const CSS_BUTTON = "tabela__button";
3
+ const CSS_BUTTON_GROUP = "tabela__button--group";
4
+ const CSS_CELL = "tabela__cell";
5
+ const CSS_CELL_BODY = "tabela__cell--body";
6
+ const CSS_CELL_FOOTER = "tabela__cell--footer";
7
+ const CSS_CELL_GROUP = "tabela__cell--group";
8
+ const CSS_FAKER = "tabela__faker";
9
+ const CSS_GROUP = "tabela__group";
10
+ const CSS_GROUP_SELECTED = "tabela__group__selected";
11
+ const CSS_GROUP_TOTAL = "tabela__group__total";
12
+ const CSS_HEADING = "tabela__heading";
13
+ const CSS_HEADING_CONTENT = "tabela__heading__content";
14
+ const CSS_HEADING_SORTER = "tabela__heading__sorter";
15
+ const CSS_ROW = "tabela__row";
16
+ const CSS_ROW_BODY = "tabela__row--body";
17
+ const CSS_ROW_FOOTER = "tabela__row--footer";
18
+ const CSS_ROW_GROUP = "tabela__row--group tabela__group";
19
+ const CSS_ROW_HEADER = "tabela__row--header";
20
+ const CSS_ROW_SELECTED = "tabela__row--selected";
21
+ const CSS_ROWGROUP = "tabela__rowgroup";
22
+ const CSS_ROWGROUP_BODY = "tabela__rowgroup--body";
23
+ const CSS_ROWGROUP_FOOTER = "tabela__rowgroup--footer";
24
+ const CSS_ROWGROUP_HEADER = "tabela__rowgroup--header";
25
+ const CSS_SELECTION = "tabela__selection";
26
+ const CSS_TABLE = "tabela__table";
27
+ const CSS_WRAPPER = "tabela";
28
+ //#endregion
29
+ export { CSS_BUTTON, CSS_BUTTON_GROUP, CSS_CELL, CSS_CELL_BODY, CSS_CELL_FOOTER, CSS_CELL_GROUP, CSS_FAKER, CSS_GROUP, CSS_GROUP_SELECTED, CSS_GROUP_TOTAL, CSS_HEADING, CSS_HEADING_CONTENT, CSS_HEADING_SORTER, CSS_ROW, CSS_ROWGROUP, CSS_ROWGROUP_BODY, CSS_ROWGROUP_FOOTER, CSS_ROWGROUP_HEADER, CSS_ROW_BODY, CSS_ROW_FOOTER, CSS_ROW_GROUP, CSS_ROW_HEADER, CSS_ROW_SELECTED, CSS_SELECTION, CSS_TABLE, CSS_WRAPPER };