@3t-transform/threeteeui 0.0.14 → 0.0.16

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 (104) hide show
  1. package/dist/cjs/{index-bf39be87.js → index-864b7110.js} +4 -3
  2. package/dist/cjs/loader.cjs.js +2 -2
  3. package/dist/cjs/tttx-button.cjs.entry.js +18 -18
  4. package/dist/cjs/tttx-checkbox.cjs.entry.js +18 -18
  5. package/dist/cjs/tttx-form.cjs.entry.js +364 -176
  6. package/dist/cjs/tttx-icon.cjs.entry.js +56 -54
  7. package/dist/cjs/tttx-list.cjs.entry.js +188 -188
  8. package/dist/cjs/tttx-loading-spinner.cjs.entry.js +16 -16
  9. package/dist/cjs/tttx-popover-content.cjs.entry.js +13 -13
  10. package/dist/cjs/tttx-standalone-input.cjs.entry.js +127 -127
  11. package/dist/cjs/tttx-table.cjs.entry.js +60 -0
  12. package/dist/cjs/tttx.cjs.js +2 -2
  13. package/dist/collection/collection-manifest.json +2 -1
  14. package/dist/collection/components/atoms/tttx-button/tttx-button.js +93 -93
  15. package/dist/collection/components/atoms/tttx-button/tttx-button.stories.js +25 -25
  16. package/dist/collection/components/atoms/tttx-icon/tttx-icon.js +116 -114
  17. package/dist/collection/components/atoms/tttx-icon/tttx-icon.stories.js +32 -32
  18. package/dist/collection/components/atoms/tttx-loading-spinner/tttx-loading-spinner.js +66 -66
  19. package/dist/collection/components/atoms/tttx-loading-spinner/tttx-loading-spinner.stories.js +17 -17
  20. package/dist/collection/components/atoms/tttx-popover-content/tttx-popover-content.js +96 -96
  21. package/dist/collection/components/atoms/tttx-popover-content/tttx-popover-content.stories.js +23 -23
  22. package/dist/collection/components/atoms/ttx-checkbox/tttx-checkbox.js +101 -101
  23. package/dist/collection/components/atoms/ttx-checkbox/tttx-checkbox.stories.js +9 -9
  24. package/dist/collection/components/molecules/tttx-form/tttx-form.js +451 -249
  25. package/dist/collection/components/molecules/tttx-form/tttx-form.stories.js +109 -102
  26. package/dist/collection/components/molecules/tttx-list/tttx-list.js +311 -311
  27. package/dist/collection/components/molecules/tttx-list/tttx-list.stories.js +15 -15
  28. package/dist/collection/components/molecules/tttx-standalone-input/tttx-standalone-input.js +569 -569
  29. package/dist/collection/components/molecules/tttx-standalone-input/tttx-standalone-input.stories.js +134 -134
  30. package/dist/collection/components/molecules/tttx-table/tttx-table.css +166 -0
  31. package/dist/collection/components/molecules/tttx-table/tttx-table.js +177 -0
  32. package/dist/collection/components/molecules/tttx-table/tttx-table.stories.js +81 -0
  33. package/dist/collection/components/palette.stories.js +7 -7
  34. package/dist/collection/docs/gettingstarted-developer.stories.js +5 -5
  35. package/dist/collection/icons.js +2838 -2838
  36. package/dist/collection/index.js +1 -1
  37. package/dist/components/index.d.ts +1 -0
  38. package/dist/components/index.js +1 -0
  39. package/dist/components/tttx-button.js +35 -35
  40. package/dist/components/tttx-checkbox.js +36 -36
  41. package/dist/components/tttx-form.js +381 -193
  42. package/dist/components/tttx-icon2.js +73 -71
  43. package/dist/components/tttx-list.js +214 -214
  44. package/dist/components/tttx-loading-spinner2.js +33 -33
  45. package/dist/components/tttx-popover-content.js +1 -37
  46. package/dist/components/tttx-popover-content2.js +39 -0
  47. package/dist/components/tttx-standalone-input.js +169 -168
  48. package/dist/components/tttx-table.d.ts +11 -0
  49. package/dist/components/tttx-table.js +91 -0
  50. package/dist/esm/{index-63c4d25e.js → index-232e347b.js} +4 -3
  51. package/dist/esm/loader.js +3 -3
  52. package/dist/esm/polyfills/core-js.js +0 -0
  53. package/dist/esm/polyfills/dom.js +0 -0
  54. package/dist/esm/polyfills/es5-html-element.js +0 -0
  55. package/dist/esm/polyfills/index.js +0 -0
  56. package/dist/esm/polyfills/system.js +0 -0
  57. package/dist/esm/tttx-button.entry.js +18 -18
  58. package/dist/esm/tttx-checkbox.entry.js +18 -18
  59. package/dist/esm/tttx-form.entry.js +364 -176
  60. package/dist/esm/tttx-icon.entry.js +56 -54
  61. package/dist/esm/tttx-list.entry.js +188 -188
  62. package/dist/esm/tttx-loading-spinner.entry.js +16 -16
  63. package/dist/esm/tttx-popover-content.entry.js +13 -13
  64. package/dist/esm/tttx-standalone-input.entry.js +127 -127
  65. package/dist/esm/tttx-table.entry.js +56 -0
  66. package/dist/esm/tttx.js +3 -3
  67. package/dist/tttx/{p-2d54f8aa.entry.js → p-01e1894e.entry.js} +1 -1
  68. package/dist/tttx/{p-709246f5.entry.js → p-10316ff1.entry.js} +1 -1
  69. package/dist/tttx/p-125f06b3.entry.js +1 -0
  70. package/dist/tttx/p-184c4fae.js +2 -0
  71. package/dist/tttx/{p-ad0c3fe4.entry.js → p-3973b7dd.entry.js} +1 -1
  72. package/dist/tttx/p-5ce1ba22.entry.js +1 -0
  73. package/dist/tttx/{p-4c57bcbd.entry.js → p-6828fe6f.entry.js} +1 -1
  74. package/dist/tttx/p-b1c22f5f.entry.js +1 -0
  75. package/dist/tttx/{p-1a4eb1f3.entry.js → p-c7f9be65.entry.js} +1 -1
  76. package/dist/tttx/{p-2b6720ac.entry.js → p-fe4c70b2.entry.js} +1 -1
  77. package/dist/tttx/tttx.esm.js +1 -1
  78. package/dist/types/components/atoms/tttx-button/tttx-button.d.ts +9 -9
  79. package/dist/types/components/atoms/tttx-button/tttx-button.stories.d.ts +20 -20
  80. package/dist/types/components/atoms/tttx-icon/tttx-icon.d.ts +14 -14
  81. package/dist/types/components/atoms/tttx-icon/tttx-icon.stories.d.ts +21 -21
  82. package/dist/types/components/atoms/tttx-loading-spinner/tttx-loading-spinner.d.ts +6 -6
  83. package/dist/types/components/atoms/tttx-loading-spinner/tttx-loading-spinner.stories.d.ts +17 -17
  84. package/dist/types/components/atoms/tttx-popover-content/tttx-popover-content.d.ts +7 -7
  85. package/dist/types/components/atoms/tttx-popover-content/tttx-popover-content.stories.d.ts +18 -18
  86. package/dist/types/components/atoms/ttx-checkbox/tttx-checkbox.d.ts +9 -9
  87. package/dist/types/components/atoms/ttx-checkbox/tttx-checkbox.stories.d.ts +6 -6
  88. package/dist/types/components/molecules/tttx-form/tttx-form.d.ts +134 -18
  89. package/dist/types/components/molecules/tttx-form/tttx-form.stories.d.ts +12 -6
  90. package/dist/types/components/molecules/tttx-list/tttx-list.d.ts +51 -51
  91. package/dist/types/components/molecules/tttx-list/tttx-list.stories.d.ts +13 -13
  92. package/dist/types/components/molecules/tttx-standalone-input/tttx-standalone-input.d.ts +38 -38
  93. package/dist/types/components/molecules/tttx-standalone-input/tttx-standalone-input.stories.d.ts +106 -106
  94. package/dist/types/components/molecules/tttx-table/tttx-table.d.ts +15 -0
  95. package/dist/types/components/molecules/tttx-table/tttx-table.stories.d.ts +21 -0
  96. package/dist/types/components/palette.stories.d.ts +6 -6
  97. package/dist/types/components.d.ts +29 -1
  98. package/dist/types/docs/gettingstarted-developer.stories.d.ts +5 -5
  99. package/dist/types/icons.d.ts +2 -2
  100. package/dist/types/index.d.ts +1 -1
  101. package/package.json +7 -4
  102. package/dist/tttx/p-28e4c359.entry.js +0 -1
  103. package/dist/tttx/p-95a29e09.entry.js +0 -1
  104. package/dist/tttx/p-bec472d8.js +0 -2
@@ -1,311 +1,311 @@
1
- import { h, Host } from "@stencil/core";
2
- export class TttxList {
3
- constructor() {
4
- this.rowCount = 0;
5
- this.name = undefined;
6
- this.selectable = undefined;
7
- this.items = [];
8
- this.selectedIds = [];
9
- this.loading = true;
10
- this.lastPage = false;
11
- }
12
- listLoadHandler(event) {
13
- if (event.detail.name !== this.name)
14
- return;
15
- this.items = [...this.items, ...event.detail.items];
16
- this.loading = false;
17
- this.lastPage = event.detail.lastPage;
18
- this.renderRows(event.detail.items);
19
- if (this.scrollableParent.clientHeight === this.scrollableParent.scrollHeight)
20
- this.listPaginateHandler();
21
- }
22
- listPaginateHandler() {
23
- // We don't want to emit an event to load the next page if this is the last page, or if we're already loading
24
- if (this.lastPage || this.loading)
25
- return;
26
- this.loading = true;
27
- this.listPaginate.emit({ name: this.name });
28
- }
29
- listClearDataCacheHandler(event) {
30
- if (event.detail.name !== this.name)
31
- return;
32
- this.items = [];
33
- this.selectedIds = [];
34
- this.listItemContainer()
35
- .querySelectorAll(".tttx-list__row")
36
- .forEach((node) => {
37
- node.remove();
38
- });
39
- this.rowCount = 0;
40
- this.lastPage = false;
41
- this.loading = false;
42
- }
43
- listActionSelectedEventHandler(event) {
44
- if (event.detail.name !== this.name || !this.selectable || this.selectedIds.length === 0)
45
- return;
46
- const selectedRows = this.selectedIds.map(id => {
47
- return this.items[id];
48
- });
49
- if (event.detail.removeRows)
50
- this.removeSelectedRows();
51
- this.listSelectedEvent.emit({
52
- name: this.name,
53
- eventName: event.detail.eventName,
54
- selectedRows,
55
- });
56
- }
57
- removeSelectedRows() {
58
- const orderedSelectedIds = [...this.selectedIds].sort((a, b) => {
59
- return b - a;
60
- });
61
- orderedSelectedIds.forEach(itemIndex => {
62
- this.items.splice(itemIndex, 1);
63
- this.listItemContainer().removeChild(this.listItemContainer().querySelector(`[data-row-id="${itemIndex}"]`));
64
- // If this removes the scrollbar and we're not on the last page, load in a new page
65
- if (this.scrollableParent.clientHeight === this.scrollableParent.scrollHeight)
66
- this.listPaginateHandler();
67
- });
68
- // Empty selected ids with mutation rather than assignment to avoid unecessary component rerender
69
- this.selectedIds.splice(0, this.selectedIds.length);
70
- }
71
- listItemClickHandler(itemData) {
72
- if (this.selectedIds.length !== 0)
73
- return;
74
- this.listItemClick.emit({ itemData, name: this.name });
75
- }
76
- componentWillLoad() {
77
- this.template = this.host.querySelector("template");
78
- this.scrollableParent = this.getScrollableParent(this.host);
79
- const scrollableContext = this.scrollableParent === document.scrollingElement ? document : this.scrollableParent;
80
- scrollableContext.addEventListener("scroll", this.scrollHandler.bind(this));
81
- window.addEventListener("resize", this.scrollHandler.bind(this));
82
- }
83
- componentDidLoad() {
84
- // Emit event to load first page
85
- this.listPaginate.emit({ name: this.name });
86
- }
87
- listItemContainer() {
88
- return this.host.shadowRoot.querySelector(".list-item-container");
89
- }
90
- async scrollHandler() {
91
- const { clientHeight, scrollTop, scrollHeight } = this.scrollableParent;
92
- if (Math.abs(scrollHeight - clientHeight - scrollTop) < 26)
93
- this.listPaginateHandler();
94
- }
95
- isScrollable(node) {
96
- const hasScrollbar = ["scroll", "auto"].includes(node.style.overflowY);
97
- return hasScrollbar;
98
- }
99
- getScrollableParent(node) {
100
- if (!node || node === document.body) {
101
- return document.scrollingElement;
102
- }
103
- else {
104
- return this.isScrollable(node) ? node : this.getScrollableParent(node.parentElement);
105
- }
106
- }
107
- appendRowCheckbox(rowContainer) {
108
- if (!this.selectable)
109
- return;
110
- const rowId = this.rowCount;
111
- const checkbox = document.createElement("input");
112
- checkbox.setAttribute("type", "checkbox");
113
- checkbox.addEventListener("click", e => {
114
- e.stopPropagation();
115
- if (e.target.checked) {
116
- this.selectedIds = [...this.selectedIds, rowId];
117
- rowContainer.classList.add("selected");
118
- }
119
- else {
120
- this.selectedIds = this.selectedIds.filter(id => {
121
- return id !== rowId;
122
- });
123
- rowContainer.classList.remove("selected");
124
- }
125
- });
126
- rowContainer.setAttribute("data-row-id", `${rowId}`);
127
- this.rowCount++;
128
- rowContainer.appendChild(checkbox);
129
- }
130
- appendSeededTemplate(rowData, rowContainer) {
131
- this.template.childNodes.forEach(child => {
132
- const clone = child.cloneNode(false);
133
- if (clone.getAttribute("data-fields")) {
134
- const fields = clone.getAttribute("data-fields").replace(/\s/g, "").split(",");
135
- const filteredRowData = Object.fromEntries(fields.map((field) => {
136
- return [field, rowData[field]];
137
- }));
138
- clone.setAttribute("row-data", JSON.stringify(filteredRowData));
139
- }
140
- else {
141
- clone.setAttribute("row-data", JSON.stringify(rowData));
142
- }
143
- rowContainer.appendChild(clone);
144
- });
145
- }
146
- appendGenericTemplate(rowData, rowContainer) {
147
- const row = document.createElement("div");
148
- row.classList.add("generic-template__content");
149
- row.textContent = rowData.text;
150
- rowContainer.appendChild(row);
151
- if (!rowData.icon)
152
- return;
153
- const icon = document.createElement("span");
154
- icon.classList.add("material-symbols-rounded");
155
- icon.textContent = rowData.icon;
156
- if (rowData.iconColor)
157
- icon.style["color"] = rowData.iconColor;
158
- row.prepend(icon);
159
- }
160
- row(rowData) {
161
- const rowContainer = document.createElement("div");
162
- rowContainer.classList.add("tttx-list__row");
163
- rowContainer.addEventListener("click", () => {
164
- this.listItemClickHandler(rowData);
165
- });
166
- this.appendRowCheckbox(rowContainer);
167
- this.template ? this.appendSeededTemplate(rowData, rowContainer) : this.appendGenericTemplate(rowData, rowContainer);
168
- return rowContainer;
169
- }
170
- renderRows(batchData) {
171
- batchData.forEach(rowData => {
172
- this.listItemContainer().appendChild(this.row(rowData));
173
- });
174
- }
175
- loadIndicator() {
176
- if (!this.loading)
177
- return;
178
- return h("div", { class: "load-indicator" }, h("tttx-loading-spinner", { size: 'large' }));
179
- }
180
- render() {
181
- return (h(Host, null, h("div", { class: "list-item-container", tabindex: "0" }, !this.loading && this.items.length === 0 ? "No data to display" : undefined), this.loadIndicator()));
182
- }
183
- static get is() { return "tttx-list"; }
184
- static get encapsulation() { return "shadow"; }
185
- static get originalStyleUrls() {
186
- return {
187
- "$": ["tttx-list.scss"]
188
- };
189
- }
190
- static get styleUrls() {
191
- return {
192
- "$": ["tttx-list.css"]
193
- };
194
- }
195
- static get properties() {
196
- return {
197
- "name": {
198
- "type": "string",
199
- "mutable": false,
200
- "complexType": {
201
- "original": "string",
202
- "resolved": "string",
203
- "references": {}
204
- },
205
- "required": false,
206
- "optional": false,
207
- "docs": {
208
- "tags": [],
209
- "text": ""
210
- },
211
- "attribute": "name",
212
- "reflect": false
213
- },
214
- "selectable": {
215
- "type": "boolean",
216
- "mutable": false,
217
- "complexType": {
218
- "original": "boolean",
219
- "resolved": "boolean",
220
- "references": {}
221
- },
222
- "required": false,
223
- "optional": false,
224
- "docs": {
225
- "tags": [],
226
- "text": ""
227
- },
228
- "attribute": "selectable",
229
- "reflect": false
230
- }
231
- };
232
- }
233
- static get states() {
234
- return {
235
- "items": {},
236
- "selectedIds": {},
237
- "loading": {},
238
- "lastPage": {}
239
- };
240
- }
241
- static get events() {
242
- return [{
243
- "method": "listPaginate",
244
- "name": "listPaginate",
245
- "bubbles": true,
246
- "cancelable": true,
247
- "composed": true,
248
- "docs": {
249
- "tags": [],
250
- "text": ""
251
- },
252
- "complexType": {
253
- "original": "any",
254
- "resolved": "any",
255
- "references": {}
256
- }
257
- }, {
258
- "method": "listSelectedEvent",
259
- "name": "listSelectedEvent",
260
- "bubbles": true,
261
- "cancelable": true,
262
- "composed": true,
263
- "docs": {
264
- "tags": [],
265
- "text": ""
266
- },
267
- "complexType": {
268
- "original": "any",
269
- "resolved": "any",
270
- "references": {}
271
- }
272
- }, {
273
- "method": "listItemClick",
274
- "name": "listItemClick",
275
- "bubbles": true,
276
- "cancelable": true,
277
- "composed": true,
278
- "docs": {
279
- "tags": [],
280
- "text": ""
281
- },
282
- "complexType": {
283
- "original": "any",
284
- "resolved": "any",
285
- "references": {}
286
- }
287
- }];
288
- }
289
- static get elementRef() { return "host"; }
290
- static get listeners() {
291
- return [{
292
- "name": "listPageLoad",
293
- "method": "listLoadHandler",
294
- "target": "document",
295
- "capture": false,
296
- "passive": false
297
- }, {
298
- "name": "listClearDataCache",
299
- "method": "listClearDataCacheHandler",
300
- "target": "document",
301
- "capture": false,
302
- "passive": false
303
- }, {
304
- "name": "listActionSelectedEvent",
305
- "method": "listActionSelectedEventHandler",
306
- "target": "document",
307
- "capture": false,
308
- "passive": false
309
- }];
310
- }
311
- }
1
+ import { h, Host } from "@stencil/core";
2
+ export class TttxList {
3
+ constructor() {
4
+ this.rowCount = 0;
5
+ this.name = undefined;
6
+ this.selectable = undefined;
7
+ this.items = [];
8
+ this.selectedIds = [];
9
+ this.loading = true;
10
+ this.lastPage = false;
11
+ }
12
+ listLoadHandler(event) {
13
+ if (event.detail.name !== this.name)
14
+ return;
15
+ this.items = [...this.items, ...event.detail.items];
16
+ this.loading = false;
17
+ this.lastPage = event.detail.lastPage;
18
+ this.renderRows(event.detail.items);
19
+ if (this.scrollableParent.clientHeight === this.scrollableParent.scrollHeight)
20
+ this.listPaginateHandler();
21
+ }
22
+ listPaginateHandler() {
23
+ // We don't want to emit an event to load the next page if this is the last page, or if we're already loading
24
+ if (this.lastPage || this.loading)
25
+ return;
26
+ this.loading = true;
27
+ this.listPaginate.emit({ name: this.name });
28
+ }
29
+ listClearDataCacheHandler(event) {
30
+ if (event.detail.name !== this.name)
31
+ return;
32
+ this.items = [];
33
+ this.selectedIds = [];
34
+ this.listItemContainer()
35
+ .querySelectorAll(".tttx-list__row")
36
+ .forEach((node) => {
37
+ node.remove();
38
+ });
39
+ this.rowCount = 0;
40
+ this.lastPage = false;
41
+ this.loading = false;
42
+ }
43
+ listActionSelectedEventHandler(event) {
44
+ if (event.detail.name !== this.name || !this.selectable || this.selectedIds.length === 0)
45
+ return;
46
+ const selectedRows = this.selectedIds.map(id => {
47
+ return this.items[id];
48
+ });
49
+ if (event.detail.removeRows)
50
+ this.removeSelectedRows();
51
+ this.listSelectedEvent.emit({
52
+ name: this.name,
53
+ eventName: event.detail.eventName,
54
+ selectedRows,
55
+ });
56
+ }
57
+ removeSelectedRows() {
58
+ const orderedSelectedIds = [...this.selectedIds].sort((a, b) => {
59
+ return b - a;
60
+ });
61
+ orderedSelectedIds.forEach(itemIndex => {
62
+ this.items.splice(itemIndex, 1);
63
+ this.listItemContainer().removeChild(this.listItemContainer().querySelector(`[data-row-id="${itemIndex}"]`));
64
+ // If this removes the scrollbar and we're not on the last page, load in a new page
65
+ if (this.scrollableParent.clientHeight === this.scrollableParent.scrollHeight)
66
+ this.listPaginateHandler();
67
+ });
68
+ // Empty selected ids with mutation rather than assignment to avoid unecessary component rerender
69
+ this.selectedIds.splice(0, this.selectedIds.length);
70
+ }
71
+ listItemClickHandler(itemData) {
72
+ if (this.selectedIds.length !== 0)
73
+ return;
74
+ this.listItemClick.emit({ itemData, name: this.name });
75
+ }
76
+ componentWillLoad() {
77
+ this.template = this.host.querySelector("template");
78
+ this.scrollableParent = this.getScrollableParent(this.host);
79
+ const scrollableContext = this.scrollableParent === document.scrollingElement ? document : this.scrollableParent;
80
+ scrollableContext.addEventListener("scroll", this.scrollHandler.bind(this));
81
+ window.addEventListener("resize", this.scrollHandler.bind(this));
82
+ }
83
+ componentDidLoad() {
84
+ // Emit event to load first page
85
+ this.listPaginate.emit({ name: this.name });
86
+ }
87
+ listItemContainer() {
88
+ return this.host.shadowRoot.querySelector(".list-item-container");
89
+ }
90
+ async scrollHandler() {
91
+ const { clientHeight, scrollTop, scrollHeight } = this.scrollableParent;
92
+ if (Math.abs(scrollHeight - clientHeight - scrollTop) < 26)
93
+ this.listPaginateHandler();
94
+ }
95
+ isScrollable(node) {
96
+ const hasScrollbar = ["scroll", "auto"].includes(node.style.overflowY);
97
+ return hasScrollbar;
98
+ }
99
+ getScrollableParent(node) {
100
+ if (!node || node === document.body) {
101
+ return document.scrollingElement;
102
+ }
103
+ else {
104
+ return this.isScrollable(node) ? node : this.getScrollableParent(node.parentElement);
105
+ }
106
+ }
107
+ appendRowCheckbox(rowContainer) {
108
+ if (!this.selectable)
109
+ return;
110
+ const rowId = this.rowCount;
111
+ const checkbox = document.createElement("input");
112
+ checkbox.setAttribute("type", "checkbox");
113
+ checkbox.addEventListener("click", e => {
114
+ e.stopPropagation();
115
+ if (e.target.checked) {
116
+ this.selectedIds = [...this.selectedIds, rowId];
117
+ rowContainer.classList.add("selected");
118
+ }
119
+ else {
120
+ this.selectedIds = this.selectedIds.filter(id => {
121
+ return id !== rowId;
122
+ });
123
+ rowContainer.classList.remove("selected");
124
+ }
125
+ });
126
+ rowContainer.setAttribute("data-row-id", `${rowId}`);
127
+ this.rowCount++;
128
+ rowContainer.appendChild(checkbox);
129
+ }
130
+ appendSeededTemplate(rowData, rowContainer) {
131
+ this.template.childNodes.forEach(child => {
132
+ const clone = child.cloneNode(false);
133
+ if (clone.getAttribute("data-fields")) {
134
+ const fields = clone.getAttribute("data-fields").replace(/\s/g, "").split(",");
135
+ const filteredRowData = Object.fromEntries(fields.map((field) => {
136
+ return [field, rowData[field]];
137
+ }));
138
+ clone.setAttribute("row-data", JSON.stringify(filteredRowData));
139
+ }
140
+ else {
141
+ clone.setAttribute("row-data", JSON.stringify(rowData));
142
+ }
143
+ rowContainer.appendChild(clone);
144
+ });
145
+ }
146
+ appendGenericTemplate(rowData, rowContainer) {
147
+ const row = document.createElement("div");
148
+ row.classList.add("generic-template__content");
149
+ row.textContent = rowData.text;
150
+ rowContainer.appendChild(row);
151
+ if (!rowData.icon)
152
+ return;
153
+ const icon = document.createElement("span");
154
+ icon.classList.add("material-symbols-rounded");
155
+ icon.textContent = rowData.icon;
156
+ if (rowData.iconColor)
157
+ icon.style["color"] = rowData.iconColor;
158
+ row.prepend(icon);
159
+ }
160
+ row(rowData) {
161
+ const rowContainer = document.createElement("div");
162
+ rowContainer.classList.add("tttx-list__row");
163
+ rowContainer.addEventListener("click", () => {
164
+ this.listItemClickHandler(rowData);
165
+ });
166
+ this.appendRowCheckbox(rowContainer);
167
+ this.template ? this.appendSeededTemplate(rowData, rowContainer) : this.appendGenericTemplate(rowData, rowContainer);
168
+ return rowContainer;
169
+ }
170
+ renderRows(batchData) {
171
+ batchData.forEach(rowData => {
172
+ this.listItemContainer().appendChild(this.row(rowData));
173
+ });
174
+ }
175
+ loadIndicator() {
176
+ if (!this.loading)
177
+ return;
178
+ return h("div", { class: "load-indicator" }, h("tttx-loading-spinner", { size: 'large' }));
179
+ }
180
+ render() {
181
+ return (h(Host, null, h("div", { class: "list-item-container", tabindex: "0" }, !this.loading && this.items.length === 0 ? "No data to display" : undefined), this.loadIndicator()));
182
+ }
183
+ static get is() { return "tttx-list"; }
184
+ static get encapsulation() { return "shadow"; }
185
+ static get originalStyleUrls() {
186
+ return {
187
+ "$": ["tttx-list.scss"]
188
+ };
189
+ }
190
+ static get styleUrls() {
191
+ return {
192
+ "$": ["tttx-list.css"]
193
+ };
194
+ }
195
+ static get properties() {
196
+ return {
197
+ "name": {
198
+ "type": "string",
199
+ "mutable": false,
200
+ "complexType": {
201
+ "original": "string",
202
+ "resolved": "string",
203
+ "references": {}
204
+ },
205
+ "required": false,
206
+ "optional": false,
207
+ "docs": {
208
+ "tags": [],
209
+ "text": ""
210
+ },
211
+ "attribute": "name",
212
+ "reflect": false
213
+ },
214
+ "selectable": {
215
+ "type": "boolean",
216
+ "mutable": false,
217
+ "complexType": {
218
+ "original": "boolean",
219
+ "resolved": "boolean",
220
+ "references": {}
221
+ },
222
+ "required": false,
223
+ "optional": false,
224
+ "docs": {
225
+ "tags": [],
226
+ "text": ""
227
+ },
228
+ "attribute": "selectable",
229
+ "reflect": false
230
+ }
231
+ };
232
+ }
233
+ static get states() {
234
+ return {
235
+ "items": {},
236
+ "selectedIds": {},
237
+ "loading": {},
238
+ "lastPage": {}
239
+ };
240
+ }
241
+ static get events() {
242
+ return [{
243
+ "method": "listPaginate",
244
+ "name": "listPaginate",
245
+ "bubbles": true,
246
+ "cancelable": true,
247
+ "composed": true,
248
+ "docs": {
249
+ "tags": [],
250
+ "text": ""
251
+ },
252
+ "complexType": {
253
+ "original": "any",
254
+ "resolved": "any",
255
+ "references": {}
256
+ }
257
+ }, {
258
+ "method": "listSelectedEvent",
259
+ "name": "listSelectedEvent",
260
+ "bubbles": true,
261
+ "cancelable": true,
262
+ "composed": true,
263
+ "docs": {
264
+ "tags": [],
265
+ "text": ""
266
+ },
267
+ "complexType": {
268
+ "original": "any",
269
+ "resolved": "any",
270
+ "references": {}
271
+ }
272
+ }, {
273
+ "method": "listItemClick",
274
+ "name": "listItemClick",
275
+ "bubbles": true,
276
+ "cancelable": true,
277
+ "composed": true,
278
+ "docs": {
279
+ "tags": [],
280
+ "text": ""
281
+ },
282
+ "complexType": {
283
+ "original": "any",
284
+ "resolved": "any",
285
+ "references": {}
286
+ }
287
+ }];
288
+ }
289
+ static get elementRef() { return "host"; }
290
+ static get listeners() {
291
+ return [{
292
+ "name": "listPageLoad",
293
+ "method": "listLoadHandler",
294
+ "target": "document",
295
+ "capture": false,
296
+ "passive": false
297
+ }, {
298
+ "name": "listClearDataCache",
299
+ "method": "listClearDataCacheHandler",
300
+ "target": "document",
301
+ "capture": false,
302
+ "passive": false
303
+ }, {
304
+ "name": "listActionSelectedEvent",
305
+ "method": "listActionSelectedEventHandler",
306
+ "target": "document",
307
+ "capture": false,
308
+ "passive": false
309
+ }];
310
+ }
311
+ }
@@ -1,15 +1,15 @@
1
- export default {
2
- title: "molecules/List",
3
- component: "tttx-list",
4
- argTypes: {
5
- selectable: {
6
- control: {
7
- type: "boolean"
8
- }
9
- }
10
- }
11
- };
12
- export const ListWithGenericTemplate = (args) => {
1
+ export default {
2
+ title: 'molecules/List',
3
+ component: 'tttx-list',
4
+ argTypes: {
5
+ selectable: {
6
+ control: {
7
+ type: 'boolean'
8
+ }
9
+ }
10
+ }
11
+ };
12
+ export const ListWithGenericTemplate = (args) => {
13
13
  return `
14
14
  <script>
15
15
  function loadPage (event) {
@@ -32,6 +32,6 @@ export const ListWithGenericTemplate = (args) => {
32
32
  document.addEventListener("listPaginate", loadPage);
33
33
  </script>
34
34
 
35
- <tttx-list ${args.selectable ? "selectable" : ""} name='listWithGenericTemplate' />
36
- `;
37
- };
35
+ <tttx-list ${args.selectable ? 'selectable' : ''} name='listWithGenericTemplate' />
36
+ `;
37
+ };