@sankhyalabs/ezui 1.1.75 → 1.1.78

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 (195) hide show
  1. package/dist/cjs/ApplicationUtils-d1c1db56.js +35 -0
  2. package/dist/cjs/AssetsUtils-dd585fba.js +24 -0
  3. package/dist/cjs/CSSVarsUtils-66e86394.js +18 -0
  4. package/dist/cjs/DataUnit-fdd7c70e.js +474 -0
  5. package/dist/cjs/DateUtils-716769e0.js +46 -0
  6. package/dist/cjs/ez-action-chip.cjs.entry.js +1 -1
  7. package/dist/cjs/ez-application.cjs.entry.js +26 -0
  8. package/dist/cjs/ez-button_11.cjs.entry.js +111771 -0
  9. package/dist/cjs/ez-calendar.cjs.entry.js +217 -0
  10. package/dist/cjs/ez-collapsible-box_6.cjs.entry.js +634 -0
  11. package/dist/cjs/ez-combo-box.cjs.entry.js +254 -0
  12. package/dist/cjs/ez-date-time-input.cjs.entry.js +133 -0
  13. package/dist/cjs/ez-dialog.cjs.entry.js +1 -1
  14. package/dist/cjs/ez-form.cjs.entry.js +1838 -0
  15. package/dist/cjs/ez-label-chip.cjs.entry.js +1 -1
  16. package/dist/cjs/ez-number-input.cjs.entry.js +36 -212
  17. package/dist/cjs/ez-popover.cjs.entry.js +3 -3
  18. package/dist/cjs/ez-popup.cjs.entry.js +2 -2
  19. package/dist/cjs/ez-time-input.cjs.entry.js +10 -9
  20. package/dist/cjs/ez-toast.cjs.entry.js +1 -1
  21. package/dist/cjs/ezui.cjs.js +3 -3
  22. package/dist/cjs/form-metadata.cjs.entry.js +129 -0
  23. package/dist/cjs/index-40ebb2be.js +7422 -0
  24. package/dist/cjs/{index-4d2896bb.js → index-4e4bae01.js} +3 -5
  25. package/dist/cjs/loader.cjs.js +3 -3
  26. package/dist/collection/collection-manifest.json +8 -3
  27. package/dist/collection/components/ez-application/ez-application.css +3 -0
  28. package/dist/collection/components/ez-application/ez-application.js +35 -0
  29. package/dist/collection/components/ez-button/ez-button.css +78 -44
  30. package/dist/collection/components/ez-button/ez-button.js +36 -4
  31. package/dist/collection/components/ez-calendar/ez-calendar.css +70 -3
  32. package/dist/collection/components/ez-calendar/ez-calendar.js +173 -24
  33. package/dist/collection/components/ez-check/ez-check.css +78 -78
  34. package/dist/collection/components/ez-check/ez-check.js +3 -3
  35. package/dist/collection/components/ez-collapsible-box/ez-collapsible-box.css +34 -34
  36. package/dist/collection/components/ez-collapsible-box/ez-collapsible-box.js +12 -12
  37. package/dist/collection/components/ez-combo-box/ez-combo-box.css +65 -54
  38. package/dist/collection/components/ez-combo-box/ez-combo-box.js +5 -0
  39. package/dist/collection/components/ez-date-input/ez-date-input.css +17 -3
  40. package/dist/collection/components/ez-date-input/ez-date-input.js +3 -3
  41. package/dist/collection/components/ez-date-time-input/ez-date-time-input.css +44 -0
  42. package/dist/collection/components/ez-date-time-input/ez-date-time-input.js +243 -0
  43. package/dist/collection/components/ez-form/ez-form.js +37 -35
  44. package/dist/collection/components/ez-form/store/Form.actions.js +16 -16
  45. package/dist/collection/components/ez-form/store/Form.reducer.js +17 -17
  46. package/dist/collection/components/ez-form/subcomponents/DataUnit.js +11 -11
  47. package/dist/collection/components/ez-form/subcomponents/form-metadata.js +12 -12
  48. package/dist/collection/components/ez-form/subcomponents/place-holder.js +1 -1
  49. package/dist/collection/components/ez-form/subcomponents/structure/Field.js +21 -21
  50. package/dist/collection/components/ez-form/subcomponents/structure/FormSheet.js +1 -1
  51. package/dist/collection/components/ez-form/subcomponents/structure/NavigationBar.js +9 -9
  52. package/dist/collection/components/ez-grid/controller/DataUnitBridge.js +21 -0
  53. package/dist/collection/components/ez-grid/controller/EzGridController.js +1 -0
  54. package/dist/collection/components/ez-grid/controller/ag-grid/AgGridController.js +203 -0
  55. package/dist/collection/components/ez-grid/controller/ag-grid/DataSource.js +41 -0
  56. package/dist/collection/components/ez-grid/controller/ag-grid/i18n/pt-BR.js +75 -0
  57. package/dist/collection/components/ez-grid/controller/ag-grid/mock/Server.js +69 -0
  58. package/dist/collection/components/ez-grid/controller/ag-grid/template/HeaderColumnTemplate.js +12 -0
  59. package/dist/collection/components/ez-grid/ez-grid.css +15 -0
  60. package/dist/collection/components/ez-grid/ez-grid.js +414 -0
  61. package/dist/collection/components/ez-grid/subcomponents/gridconfig/grid-config.css +105 -0
  62. package/dist/collection/components/ez-grid/subcomponents/gridconfig/grid-config.js +354 -0
  63. package/dist/collection/components/ez-grid/subcomponents/select-box/select-box.css +7 -0
  64. package/dist/collection/components/ez-grid/subcomponents/select-box/select-box.js +66 -0
  65. package/dist/collection/components/ez-icon/ez-icon.css +1 -1
  66. package/dist/collection/components/ez-list/ez-list.css +227 -44
  67. package/dist/collection/components/ez-list/ez-list.js +529 -149
  68. package/dist/collection/components/ez-modal/ez-modal.css +4 -4
  69. package/dist/collection/components/ez-modal/ez-modal.js +1 -1
  70. package/dist/collection/components/ez-number-input/ez-number-input.css +1 -165
  71. package/dist/collection/components/ez-number-input/ez-number-input.js +53 -339
  72. package/dist/collection/components/ez-popover/ez-popover.css +10 -6
  73. package/dist/collection/components/ez-popup/ez-popup.css +25 -27
  74. package/dist/collection/components/ez-search/ez-search.js +6 -1
  75. package/dist/collection/components/ez-tabselector/ez-tabselector.css +0 -1
  76. package/dist/collection/components/ez-tabselector/ez-tabselector.js +3 -3
  77. package/dist/collection/components/ez-text-area/ez-text-area.js +1 -0
  78. package/dist/collection/components/ez-text-input/ez-text-input.css +60 -60
  79. package/dist/collection/components/ez-text-input/ez-text-input.js +17 -16
  80. package/dist/collection/components/ez-time-input/ez-time-input.js +3 -2
  81. package/dist/collection/components/ez-upload/ez-upload.js +3 -3
  82. package/dist/collection/components/test-du/test-du.css +3 -0
  83. package/dist/collection/components/test-du/test-du.js +45 -0
  84. package/dist/collection/servidor.js +94 -94
  85. package/dist/collection/utils/{Application.js → ApplicationUtils.js} +4 -4
  86. package/dist/collection/utils/AssetsUtils.js +19 -0
  87. package/dist/collection/utils/CSSVarsUtils.js +6 -6
  88. package/dist/custom-elements/index.d.ts +36 -6
  89. package/dist/custom-elements/index.js +120886 -2964
  90. package/dist/esm/ApplicationUtils-01280a9d.js +33 -0
  91. package/dist/esm/AssetsUtils-3803e935.js +22 -0
  92. package/dist/esm/CSSVarsUtils-aeee9825.js +16 -0
  93. package/dist/esm/DataUnit-1cd45202.js +464 -0
  94. package/dist/esm/DateUtils-0a1bbd7a.js +44 -0
  95. package/dist/esm/ez-action-chip.entry.js +1 -1
  96. package/dist/esm/ez-application.entry.js +22 -0
  97. package/dist/esm/ez-button_11.entry.js +111757 -0
  98. package/dist/esm/ez-calendar.entry.js +213 -0
  99. package/dist/esm/ez-collapsible-box_6.entry.js +625 -0
  100. package/dist/esm/ez-combo-box.entry.js +250 -0
  101. package/dist/esm/ez-date-time-input.entry.js +129 -0
  102. package/dist/esm/ez-dialog.entry.js +1 -1
  103. package/dist/esm/ez-form.entry.js +1834 -0
  104. package/dist/esm/ez-label-chip.entry.js +1 -1
  105. package/dist/esm/ez-number-input.entry.js +36 -212
  106. package/dist/esm/ez-popover.entry.js +3 -3
  107. package/dist/esm/ez-popup.entry.js +2 -2
  108. package/dist/esm/ez-time-input.entry.js +5 -4
  109. package/dist/esm/ez-toast.entry.js +1 -1
  110. package/dist/esm/ezui.js +3 -3
  111. package/dist/esm/form-metadata.entry.js +125 -0
  112. package/dist/esm/{index-33153059.js → index-1dacecd3.js} +3 -6
  113. package/dist/esm/index-ca8700cb.js +7414 -0
  114. package/dist/esm/loader.js +3 -3
  115. package/dist/ezui/ezui.esm.js +1 -1
  116. package/dist/ezui/p-14bee38e.entry.js +1 -0
  117. package/dist/ezui/p-37a611ea.js +1 -0
  118. package/dist/ezui/p-3a09c678.entry.js +1 -0
  119. package/dist/ezui/p-43c15c94.entry.js +1 -0
  120. package/dist/ezui/{p-34d288d0.entry.js → p-516d0e0f.entry.js} +1 -1
  121. package/dist/ezui/{p-0d476efb.entry.js → p-5a86e18a.entry.js} +1 -1
  122. package/dist/ezui/{p-47406a6e.entry.js → p-5da66d3e.entry.js} +1 -1
  123. package/dist/ezui/p-7107d7ef.js +1 -0
  124. package/dist/ezui/p-72ff3c95.entry.js +1 -0
  125. package/dist/ezui/p-74f978db.entry.js +369 -0
  126. package/dist/ezui/p-88f45a83.entry.js +1 -0
  127. package/dist/ezui/p-8b099482.js +1 -0
  128. package/dist/ezui/p-8d6cdd3e.entry.js +1 -0
  129. package/dist/ezui/p-8f4851a6.js +1 -0
  130. package/dist/ezui/p-9dfd537e.js +1 -0
  131. package/dist/ezui/p-a0331955.entry.js +1 -0
  132. package/dist/ezui/p-a15093e3.entry.js +1 -0
  133. package/dist/ezui/{p-8818da66.entry.js → p-a18a2d7b.entry.js} +1 -1
  134. package/dist/ezui/p-a19f2af3.entry.js +1 -0
  135. package/dist/ezui/p-c6d469fc.entry.js +1 -0
  136. package/dist/ezui/p-c89629eb.js +1 -0
  137. package/dist/ezui/p-da929c01.js +1 -0
  138. package/dist/ezui/p-f3c5f27e.entry.js +1 -0
  139. package/dist/types/components/ez-application/ez-application.d.ts +10 -0
  140. package/dist/types/components/ez-button/ez-button.d.ts +5 -0
  141. package/dist/types/components/ez-calendar/ez-calendar.d.ts +21 -0
  142. package/dist/types/components/ez-check/ez-check.d.ts +1 -1
  143. package/dist/types/components/ez-collapsible-box/ez-collapsible-box.d.ts +3 -3
  144. package/dist/types/components/ez-combo-box/ez-combo-box.d.ts +1 -0
  145. package/dist/types/components/ez-date-time-input/ez-date-time-input.d.ts +42 -0
  146. package/dist/types/components/ez-form/ez-form.d.ts +9 -9
  147. package/dist/types/components/ez-form/subcomponents/DataUnit.d.ts +1 -1
  148. package/dist/types/components/ez-form/subcomponents/form-metadata.d.ts +1 -1
  149. package/dist/types/components/ez-grid/controller/DataUnitBridge.d.ts +8 -0
  150. package/dist/types/components/ez-grid/controller/EzGridController.d.ts +195 -0
  151. package/dist/types/components/ez-grid/controller/ag-grid/AgGridController.d.ts +34 -0
  152. package/dist/types/components/ez-grid/controller/ag-grid/DataSource.d.ts +11 -0
  153. package/dist/types/components/ez-grid/controller/ag-grid/i18n/pt-BR.d.ts +2 -0
  154. package/dist/types/components/ez-grid/controller/ag-grid/mock/Server.d.ts +8 -0
  155. package/dist/types/components/ez-grid/ez-grid.d.ts +78 -0
  156. package/dist/types/components/ez-grid/subcomponents/gridconfig/grid-config.d.ts +30 -0
  157. package/dist/types/components/ez-grid/subcomponents/select-box/select-box.d.ts +9 -0
  158. package/dist/types/components/ez-list/ez-list.d.ts +70 -17
  159. package/dist/types/components/ez-number-input/ez-number-input.d.ts +29 -63
  160. package/dist/types/components/ez-search/ez-search.d.ts +2 -0
  161. package/dist/types/components/ez-tabselector/ez-tabselector.d.ts +1 -1
  162. package/dist/types/components/ez-text-input/ez-text-input.d.ts +1 -1
  163. package/dist/types/components/test-du/test-du.d.ts +6 -0
  164. package/dist/types/components.d.ts +289 -139
  165. package/dist/types/stencil-public-runtime.d.ts +6 -4
  166. package/dist/types/utils/{Application.d.ts → ApplicationUtils.d.ts} +1 -1
  167. package/dist/types/utils/AssetsUtils.d.ts +1 -0
  168. package/dist/types/utils/CSSVarsUtils.d.ts +1 -1
  169. package/package.json +10 -8
  170. package/react/components.d.ts +6 -1
  171. package/react/components.js +6 -1
  172. package/react/components.js.map +1 -1
  173. package/dist/cjs/CSSVarsUtils-f8827674.js +0 -18
  174. package/dist/cjs/RequestMetadata-2cd01e8a.js +0 -531
  175. package/dist/cjs/ez-button_16.cjs.entry.js +0 -4071
  176. package/dist/cjs/ez-list.cjs.entry.js +0 -174
  177. package/dist/cjs/ez-modal.cjs.entry.js +0 -65
  178. package/dist/collection/components/ez-numeric-input/ez-numeric-input.css +0 -13
  179. package/dist/collection/components/ez-numeric-input/ez-numeric-input.js +0 -185
  180. package/dist/esm/CSSVarsUtils-e0128b01.js +0 -16
  181. package/dist/esm/RequestMetadata-c265c9d5.js +0 -527
  182. package/dist/esm/ez-button_16.entry.js +0 -4052
  183. package/dist/esm/ez-list.entry.js +0 -170
  184. package/dist/esm/ez-modal.entry.js +0 -61
  185. package/dist/ezui/p-061d21ba.entry.js +0 -1
  186. package/dist/ezui/p-15743b09.entry.js +0 -1
  187. package/dist/ezui/p-46d07e59.entry.js +0 -1
  188. package/dist/ezui/p-4df6f855.js +0 -1
  189. package/dist/ezui/p-50464bdf.entry.js +0 -1
  190. package/dist/ezui/p-67410dfa.entry.js +0 -1
  191. package/dist/ezui/p-7be54779.entry.js +0 -1
  192. package/dist/ezui/p-7f3bc6d9.entry.js +0 -1
  193. package/dist/ezui/p-9dfccb16.js +0 -1
  194. package/dist/ezui/p-d1889704.js +0 -1
  195. package/dist/types/components/ez-numeric-input/ez-numeric-input.d.ts +0 -45
@@ -1,166 +1,442 @@
1
- import { Component, Host, h, Prop, Method } from '@stencil/core';
1
+ import { Component, Host, h, Prop, Method, State, Event } from '@stencil/core';
2
+ ;
2
3
  ;
3
4
  export class EzList {
4
5
  constructor() {
5
6
  this._listItems = [];
7
+ this._listGroupItems = [];
8
+ this._listItemsHistory = [];
6
9
  /**
7
10
  * Define a lista inicial do componente.
8
11
  */
9
- this.initialList = [];
12
+ this.dataSource = [];
13
+ /**
14
+ * Define se o componente renderizará os itens separados em grupos..
15
+ */
16
+ this.useGroups = false;
10
17
  /**
11
18
  * Define se o componente terá o comportamento de arrasto de linhas.
12
19
  */
13
- this.draggable = true;
20
+ this.ezDraggable = false;
14
21
  /**
15
- * Define se é possível selecionar mais de um registro.
22
+ * Define se os items da lista serão selecionáveis.
16
23
  */
17
- this.isMultipleSelection = true;
24
+ this.ezSelectable = false;
18
25
  }
19
26
  createList() {
20
- [...this.initialList]
21
- .forEach((item, index) => {
22
- const listItem = document.createElement('li');
23
- listItem.setAttribute('data-index', index.toString());
24
- if (!this.isMultipleSelection)
25
- listItem.onclick = this.selectLine.bind(this);
26
- listItem.innerHTML = `
27
- <div class="draggable" ${this.draggable ? "draggable=true" : ""}>
28
-
29
- ${this.draggable ? '<span class="draggable-icon"></span>' : ""}
30
-
31
- ${this.isMultipleSelection ? `<ez-check class='checkbox' value=${item.checked}></ez-check>` : ''}
32
- <p title="${item.value}" class="person-name text--ellipsis">${item.value}</p>
33
-
34
- </div>
35
- `;
36
- this._listItems.push(listItem);
37
- this._draggableList.appendChild(listItem);
38
- });
39
- if (this.draggable) {
40
- this.handleEventListeners(this._listItems, this._draggableList, this._hostElement, false);
41
- }
42
- }
43
- selectLine(e) {
44
- var _a, _b, _c;
45
- this._listItems.forEach(item => { item.classList.remove('draggable-selected'); });
46
- if (((_a = e.target) === null || _a === void 0 ? void 0 : _a.tagName) === 'SPAN') {
47
- const span = e.target;
48
- this._selectedItem = { value: span.parentElement.getElementsByTagName('p')[0].textContent };
49
- span.parentElement.parentElement.classList.add('draggable-selected');
50
- }
51
- else if (((_b = e.target) === null || _b === void 0 ? void 0 : _b.tagName) === 'P') {
52
- const paragraph = e.target;
53
- this._selectedItem = { value: paragraph.textContent };
54
- paragraph.parentElement.parentElement.classList.add('draggable-selected');
55
- }
56
- else if (((_c = e.target) === null || _c === void 0 ? void 0 : _c.tagName) === 'DIV') {
57
- const draggable = e.target;
58
- this._selectedItem = { value: draggable.getElementsByTagName('p')[0].textContent };
59
- draggable.parentElement.classList.add('draggable-selected');
60
- }
61
- }
62
- handleEventListeners(listItems, dragableList, hostElement, removeEvents) {
63
- let _dragStartIndex;
64
- let _isItemOut = false;
65
- function dragStart(item) {
66
- _dragStartIndex = item.parentElement.getAttribute('data-index');
67
- }
68
- function dragEnter(item) {
69
- item.classList.add('over');
70
- }
71
- function dragLeave(item) {
72
- item.classList.remove('over');
73
- }
74
- function dragOver(e) {
75
- e.preventDefault();
76
- }
77
- function dragDrop(item) {
78
- if (_isItemOut) {
79
- let index = +item.getAttribute('data-index');
80
- const itemRemoved = listItems[index].querySelector('.draggable');
81
- listItems[index].removeChild(itemRemoved);
82
- }
83
- const dragEndIndex = +item.getAttribute('data-index');
84
- swapItems(+_dragStartIndex, dragEndIndex);
85
- item.classList.remove('over');
86
- }
87
- function swapItems(fromIndex, toIndex) {
88
- const itemOne = listItems[fromIndex].querySelector('.draggable');
89
- const itemTwo = listItems[toIndex].querySelector('.draggable');
90
- listItems[fromIndex].appendChild(itemTwo);
91
- listItems[toIndex].appendChild(itemOne);
92
- return listItems;
93
- }
94
- if (!removeEvents) {
95
- hostElement.addEventListener('dragenter', function () { _isItemOut = false; });
96
- hostElement.addEventListener('dragleave', function () { _isItemOut = true; });
97
- const draggables = dragableList.querySelectorAll("div.draggable");
98
- draggables.forEach(draggable => {
99
- draggable.addEventListener('dragstart', function () { dragStart(draggable); });
27
+ if (this.useGroups) {
28
+ let list = [...this.dataSource];
29
+ list.forEach(itemGroup => {
30
+ this.sortGroup(itemGroup);
100
31
  });
101
- listItems.forEach(item => {
102
- item.addEventListener('dragover', function (event) { dragOver(event); });
103
- item.addEventListener('drop', function () { dragDrop(item); });
104
- item.addEventListener('dragenter', function () { dragEnter(item); });
105
- item.addEventListener('dragleave', function () { dragLeave(item); });
32
+ this._listGroupItems = list;
33
+ }
34
+ else {
35
+ this._listItems = this._listItemsHistory.length > 0 ? this._listItemsHistory : [...this.dataSource];
36
+ }
37
+ }
38
+ sortGroup(itemGroup) {
39
+ if (itemGroup.sort) {
40
+ itemGroup.items.sort(function (a, b) {
41
+ return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
106
42
  });
43
+ if (itemGroup.sort === "DSC") {
44
+ itemGroup.items.reverse();
45
+ }
46
+ }
47
+ }
48
+ /**
49
+ * Recebe como argumento um ListItem {label: string} e um booleano que define se o componente deve fazer scroll para exibir o item específico (opcional).
50
+ */
51
+ async setSelection(selectedItem, scrollToOption) {
52
+ if (selectedItem && this.ezSelectable) {
53
+ if (this.useGroups) {
54
+ let newList = [...this._listGroupItems];
55
+ newList.forEach(groupItem => {
56
+ groupItem.items.forEach(item => {
57
+ if (item.label == selectedItem.label) {
58
+ item.selected = !item.selected;
59
+ }
60
+ else {
61
+ item.selected = false;
62
+ }
63
+ });
64
+ });
65
+ this._listGroupItems = newList;
66
+ }
67
+ else {
68
+ let newList = [...this._listItems];
69
+ newList.forEach(item => {
70
+ if (item.label === selectedItem.label) {
71
+ item.selected = !item.selected;
72
+ }
73
+ else {
74
+ item.selected = false;
75
+ }
76
+ });
77
+ this._listItems = newList;
78
+ }
79
+ if (scrollToOption) {
80
+ let liElem = this.useGroups ?
81
+ this._groupContainer.querySelector('li#item_' + this.getItemId(selectedItem.label))
82
+ : this._itemContainer.querySelector('li#item_' + this.getItemId(selectedItem.label));
83
+ if (liElem) {
84
+ liElem.scrollIntoView();
85
+ }
86
+ }
107
87
  }
108
88
  else {
109
- hostElement.removeEventListener('dragenter', function () { _isItemOut = false; });
110
- hostElement.removeEventListener('dragleave', function () { _isItemOut = true; });
111
- const draggables = dragableList.querySelectorAll("div.draggable");
112
- draggables.forEach(draggable => {
113
- draggable.removeEventListener('dragstart', function () { dragStart(draggable); });
89
+ this.removeSelection();
90
+ }
91
+ }
92
+ removeSelection() {
93
+ if (this.useGroups) {
94
+ let newList = [...this._listGroupItems];
95
+ newList.forEach(groupItem => {
96
+ groupItem.items.forEach(item => {
97
+ item.selected = false;
98
+ });
114
99
  });
115
- listItems.forEach(item => {
116
- item.removeEventListener('dragover', function (event) { dragOver(event); });
117
- item.removeEventListener('drop', function () { dragDrop(item); });
118
- item.removeEventListener('dragenter', function () { dragEnter(item); });
119
- item.removeEventListener('dragleave', function () { dragLeave(item); });
100
+ this._listGroupItems = newList;
101
+ }
102
+ else {
103
+ let newList = [...this._listItems];
104
+ newList.forEach(item => {
105
+ item.selected = false;
120
106
  });
107
+ this._listItems = newList;
121
108
  }
122
109
  }
123
110
  /**
124
- * Retorna uma promessa com o estado da atual lista composta por objetos do tipo {value: string, checked: boolean}.
111
+ * Retorna o item selecionado.
125
112
  */
126
- async getState() {
127
- let emitionList = [];
128
- this._listItems.forEach(item => {
129
- let emitionItem = {
130
- value: this.getValueItem(item),
131
- checked: this.getChecked(item)
132
- };
133
- emitionList.push(emitionItem);
134
- });
135
- return emitionList;
136
- }
137
- getChecked(item) {
138
- if (this.isMultipleSelection) {
139
- return item.children[0].children[1].value;
113
+ async getSelection() {
114
+ let selectedItem;
115
+ if (this.useGroups) {
116
+ this._listGroupItems.every(group => {
117
+ let item = group.items.find((item) => item.selected == true);
118
+ if (item) {
119
+ selectedItem = item;
120
+ return false;
121
+ }
122
+ return true;
123
+ });
140
124
  }
141
125
  else {
142
- if (!this._selectedItem)
143
- return false;
144
- return (item.children[0].children[1].textContent === this._selectedItem.value);
126
+ selectedItem = this._listItems.find((item) => item.selected == true);
145
127
  }
128
+ return selectedItem;
146
129
  }
147
- getValueItem(item) {
148
- if (this.isMultipleSelection) {
149
- return item.children[0].children[2].textContent;
130
+ /**
131
+ * Retorna a lista de items conforme o modo de uso.
132
+ */
133
+ async getList() {
134
+ if (this.useGroups) {
135
+ return this._listGroupItems;
150
136
  }
151
- return item.children[0].children[1].textContent;
137
+ return this._listItems;
138
+ }
139
+ componentWillLoad() {
140
+ this._listItemsHistory = [];
152
141
  }
153
- componentDidLoad() {
142
+ componentWillRender() {
154
143
  this.createList();
155
144
  }
156
- disconnectedCallback() {
157
- if (this.draggable) {
158
- this.handleEventListeners(this._listItems, this._draggableList, this._hostElement, true);
145
+ onDrop(ev, dragEndItem) {
146
+ this.removeOverClass(ev);
147
+ this.setSelection(undefined);
148
+ if (this._dragStartItem) {
149
+ if (this.useGroups) {
150
+ let newList = [...this._listGroupItems];
151
+ let groupEnd = this._listGroupItems.find(group => dragEndItem.groupName == group.group);
152
+ //Remove item arrastado
153
+ newList.find(group => group.group == this._dragStartItem.groupName).items.splice(this._dragStartItem.index, 1);
154
+ //Adiciona item arrastado
155
+ if (groupEnd.sort) {
156
+ newList.find(group => group.group == dragEndItem.groupName).items.push(this._dragStartItem.item);
157
+ newList.find(group => group.group == dragEndItem.groupName).items.sort(function (a, b) {
158
+ return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
159
+ });
160
+ if (groupEnd.sort === "DSC") {
161
+ newList.find(group => group.group == dragEndItem.groupName).items.reverse();
162
+ }
163
+ }
164
+ else {
165
+ newList.find(group => group.group == dragEndItem.groupName).items.splice(dragEndItem.index, 0, this._dragStartItem.item);
166
+ }
167
+ this._listGroupItems = newList;
168
+ this.ezChange.emit(this._listGroupItems);
169
+ }
170
+ else {
171
+ let newList = [...this._listItems];
172
+ newList.splice(this._dragStartItem.index, 1);
173
+ newList.splice(dragEndItem.index, 0, this._dragStartItem.item);
174
+ this._listItems = newList;
175
+ this._listItemsHistory = newList;
176
+ this.ezChange.emit(this._listItems);
177
+ }
178
+ }
179
+ ev.stopPropagation();
180
+ }
181
+ onDropGroup(groupSelected) {
182
+ var _a;
183
+ let newList = [...this._listGroupItems];
184
+ this.setSelection(undefined);
185
+ let newGroup = newList.find(group => group.group === groupSelected.group);
186
+ if (newGroup) {
187
+ if (((_a = newGroup.items) === null || _a === void 0 ? void 0 : _a.length) > 0) {
188
+ let newItem;
189
+ newGroup.items.forEach((item, index) => {
190
+ if (item.label === this._dragStartItem.item.label) {
191
+ newItem = { item: item, index: index };
192
+ }
193
+ });
194
+ if (newItem) {
195
+ newGroup.items.splice(newItem.index, 1);
196
+ newGroup.items.unshift(newItem.item);
197
+ this.sortGroup(newGroup);
198
+ }
199
+ else {
200
+ newGroup.items.unshift(this._dragStartItem.item);
201
+ this.sortGroup(newGroup);
202
+ newList.find(group => group.group === this._dragStartItem.groupName).items.splice(this._dragStartItem.index, 1);
203
+ }
204
+ }
205
+ else {
206
+ newList.find(group => group.group === this._dragStartItem.groupName).items.splice(this._dragStartItem.index, 1);
207
+ newGroup.items = [this._dragStartItem.item];
208
+ }
209
+ this._listGroupItems = newList;
210
+ }
211
+ }
212
+ onDragEnd() {
213
+ this._dragStartItem = undefined;
214
+ if (this._draggingElement) {
215
+ try {
216
+ this._element.shadowRoot.removeChild(this._draggingElement);
217
+ }
218
+ catch (err) { }
219
+ this._draggingElement = undefined;
220
+ }
221
+ }
222
+ addOverClass(ev) {
223
+ if (ev.target.__proto__ == HTMLDivElement.prototype && ev.target.classList.contains("draggable")) {
224
+ ev.target.classList.add('over');
225
+ }
226
+ }
227
+ addOverGroupClass(ev, group) {
228
+ if (ev.target) {
229
+ let groupContainer = this._groupContainer.querySelector("div#" + this.getDivGroupId(group.group));
230
+ if (group.items.length > 0) {
231
+ let groupOverlay = groupContainer.getElementsByClassName("group-overlay")[0];
232
+ groupOverlay.setAttribute("style", "display:grid");
233
+ }
234
+ else {
235
+ groupContainer === null || groupContainer === void 0 ? void 0 : groupContainer.classList.add('overGroup');
236
+ }
237
+ }
238
+ }
239
+ removeOverClass(ev) {
240
+ ev.target.classList.remove('over');
241
+ }
242
+ removeOverGroupClass(ev, group) {
243
+ if (ev.target) {
244
+ let groupContainer = this._groupContainer.querySelector("div#" + this.getDivGroupId(group.group));
245
+ if (group.items.length > 0) {
246
+ let groupOverlay = groupContainer.getElementsByClassName("group-overlay")[0];
247
+ groupOverlay.setAttribute("style", "display:none");
248
+ }
249
+ else {
250
+ groupContainer === null || groupContainer === void 0 ? void 0 : groupContainer.classList.remove('overGroup');
251
+ }
252
+ }
253
+ }
254
+ onDragStart(event, item, group, index) {
255
+ if (this.useGroups) {
256
+ this._dragStartItem = { groupName: group.group, item: item, index: index };
257
+ }
258
+ else {
259
+ this._dragStartItem = { item: item.item, index: item.index };
260
+ }
261
+ let sourceElement = event.srcElement.cloneNode(true);
262
+ this._draggingElement = event.srcElement.cloneNode(true);
263
+ this._draggingElement.style.position = "absolute";
264
+ this._draggingElement.style.top = (event.clientY + 5) + 'px';
265
+ this._draggingElement.style.left = (event.clientX + 5) + 'px';
266
+ this._draggingElement.style.height = event.srcElement.clientHeight + 'px';
267
+ this._draggingElement.style.width = event.srcElement.clientWidth + 'px';
268
+ this._draggingElement.style.background = "#FFFFFF";
269
+ this._draggingElement.style.border = "1px solid #008561";
270
+ this._draggingElement.style["box-sizing"] = "border-box";
271
+ this._draggingElement.style["box-shadow"] = "0px 0px 16px rgba(0, 38, 111, 0.122)";
272
+ this._draggingElement.style["border-radius"] = "6px";
273
+ this._element.shadowRoot.appendChild(this._draggingElement);
274
+ event.dataTransfer.setDragImage(sourceElement, -10000, -10000);
275
+ }
276
+ onDrag(event) {
277
+ if (this._draggingElement) {
278
+ this._draggingElement.style.top = (event.clientY + 5) + 'px';
279
+ this._draggingElement.style.left = (event.clientX + 5) + 'px';
280
+ }
281
+ }
282
+ selectFirstItem() {
283
+ if (this.useGroups) {
284
+ this.setSelection(this._listGroupItems[0].items[0]);
285
+ }
286
+ {
287
+ this.setSelection(this._listItems[0]);
288
+ }
289
+ }
290
+ nextOption(selectedItem) {
291
+ let nextItem = undefined;
292
+ if (this.useGroups) {
293
+ this._listGroupItems.every((group, groupIndex, listGroupItems) => {
294
+ let item = undefined;
295
+ let itemIndex = group.items.findIndex(item => item.label == selectedItem.label);
296
+ if (itemIndex != undefined && itemIndex != -1) {
297
+ if (itemIndex === group.items.length - 1) {
298
+ if (groupIndex + 1 <= listGroupItems.length - 1) {
299
+ item = { label: listGroupItems[groupIndex + 1].items[0].label };
300
+ }
301
+ }
302
+ else {
303
+ item = { label: group.items[itemIndex + 1].label };
304
+ }
305
+ }
306
+ if (item != undefined) {
307
+ nextItem = item;
308
+ return false;
309
+ }
310
+ return true;
311
+ });
312
+ }
313
+ else {
314
+ let itemIndex = this._listItems.findIndex(item => item.label === selectedItem.label);
315
+ if (itemIndex >= 0 && itemIndex < this._listItems.length) {
316
+ nextItem = this._listItems[itemIndex + 1];
317
+ }
318
+ }
319
+ this.setSelection(nextItem, true);
320
+ }
321
+ previousOption(selectedItem) {
322
+ let previousItem = undefined;
323
+ if (this.useGroups) {
324
+ this._listGroupItems.every((group, groupIndex, listGroupItems) => {
325
+ let item = undefined;
326
+ let itemIndex = group.items.findIndex(item => item.label == selectedItem.label);
327
+ if (itemIndex != undefined && itemIndex != -1) {
328
+ if (itemIndex === 0) {
329
+ if ((groupIndex - 1 >= 0)) {
330
+ item = { label: listGroupItems[groupIndex - 1].items[listGroupItems[groupIndex - 1].items.length - 1].label };
331
+ }
332
+ }
333
+ else {
334
+ item = { label: group.items[itemIndex - 1].label };
335
+ }
336
+ }
337
+ if (item != undefined) {
338
+ previousItem = item;
339
+ return false;
340
+ }
341
+ return true;
342
+ });
343
+ }
344
+ else {
345
+ let itemIndex = this._listItems.findIndex(item => item.label === selectedItem.label);
346
+ if (itemIndex > 0 && itemIndex < this._listItems.length) {
347
+ previousItem = this._listItems[itemIndex - 1];
348
+ }
349
+ }
350
+ this.setSelection(previousItem, true);
351
+ }
352
+ keyDownHandler(event) {
353
+ event.preventDefault();
354
+ this.getSelection().then(selectedItem => {
355
+ if (selectedItem) {
356
+ switch (event.key) {
357
+ case "ArrowDown":
358
+ this.nextOption(selectedItem);
359
+ break;
360
+ case "ArrowUp":
361
+ this.previousOption(selectedItem);
362
+ break;
363
+ }
364
+ }
365
+ else {
366
+ this.selectFirstItem();
367
+ }
368
+ });
369
+ event.stopPropagation();
370
+ }
371
+ getItemId(itemLabel) {
372
+ if (itemLabel) {
373
+ return itemLabel.replace(/[^a-z0-9_]/gi, "_");
374
+ }
375
+ return undefined;
376
+ }
377
+ getDivGroupId(groupName) {
378
+ if (groupName) {
379
+ return "group-" + groupName.replace(/[^a-z0-9_]/gi, "_");
380
+ }
381
+ return undefined;
382
+ }
383
+ onDragOverGroup(event, group) {
384
+ if (this._dragStartItem && this._dragStartItem.groupName !== group.group) {
385
+ event.preventDefault();
386
+ this.addOverGroupClass(event, group);
387
+ }
388
+ }
389
+ onDragOverItem(event, group) {
390
+ if (this._dragStartItem) {
391
+ event.preventDefault();
392
+ if (group) {
393
+ group.sort ?
394
+ () => {
395
+ this.addOverGroupClass(event, group);
396
+ }
397
+ : this.addOverClass(event);
398
+ }
399
+ else {
400
+ this.addOverClass(event);
401
+ }
402
+ event.stopPropagation();
159
403
  }
160
404
  }
161
405
  render() {
162
- return (h(Host, { ref: (el) => this._hostElement = el },
163
- h("ul", { ref: (el) => this._draggableList = el, class: "draggable-list", id: "draggable-list" })));
406
+ return (h(Host, { ref: (el) => this._element = el }, this.useGroups ?
407
+ h("div", { class: "group-container", ref: (el) => this._groupContainer = el, tabIndex: 0, onKeyDown: (event) => { this.keyDownHandler(event); } }, this._listGroupItems.map(group => {
408
+ return h("div", { id: this.getDivGroupId(group.group), class: "group", key: group.group + group.items.length, onDragLeave: (event) => { this.removeOverGroupClass(event, group); }, onDragEnd: (event) => { this.onDragEnd(); this.removeOverGroupClass(event, group); }, onDragOver: (event) => { this.onDragOverGroup(event, group); }, onDrop: () => this.onDropGroup(group) },
409
+ h("label", { class: "group-name", onDragLeave: (event) => { this.removeOverGroupClass(event, group); }, onDragOver: (event) => { this.onDragOverGroup(event, group); }, onDragEnd: (event) => { this.onDragEnd(); this.removeOverGroupClass(event, group); }, onDrop: () => this.onDropGroup(group) }, group.group),
410
+ h("section", { class: "section-container", onDragOver: (ev) => ev.preventDefault() },
411
+ h("div", { class: "group-items-container" },
412
+ h("div", { class: "draggable-list" }, group.items.map((item, index) => {
413
+ return h("li", { id: 'item_' + this.getItemId(item.label), class: this.ezSelectable ? "selectable-container" : "", key: 'item_' + this.getItemId(item.label) },
414
+ h("div", { class: "draggable" + (item.selected == true ? " selected-item " : "") + (this.ezSelectable == true ? " selectable " : ""), onClick: () => { this.setSelection(item); }, onDragLeave: (event) => { group.sort ? undefined : this.removeOverClass(event); }, onDragEnd: () => this.onDragEnd(), onDragStart: (event) => this.onDragStart(event, item, group, index), onDragOver: (event) => this.onDragOverItem(event, group), onDrop: (event) => this.onDrop(event, { groupName: group.group, item: item, index: index }), onDrag: (event) => this.onDrag(event), draggable: this.ezDraggable },
415
+ h("div", { class: "item-content" },
416
+ this.ezDraggable ? h("span", { class: "draggable-icon" }) : undefined,
417
+ h("p", { title: item.label, class: "person-name text--ellipsis" }, item.label)),
418
+ this.itemSlotBuilder ?
419
+ h("div", { class: "slot-item" }, this.itemSlotBuilder(item, group))
420
+ : undefined));
421
+ }))),
422
+ h("div", { class: "group-overlay" },
423
+ h("div", { id: "overlay-text" },
424
+ h("b", null, "Mover"),
425
+ " para ",
426
+ group.group))));
427
+ }))
428
+ :
429
+ h("div", { class: "items-container", ref: (el) => this._itemContainer = el, tabIndex: 0, onKeyDown: (event) => { this.keyDownHandler(event); } },
430
+ h("div", { class: "draggable-list" }, this._listItems.map((item, index) => {
431
+ return h("li", { id: 'item_' + this.getItemId(item.label), class: this.ezSelectable ? "selectable-container" : "", key: 'item_' + this.getItemId(item.label) },
432
+ h("div", { class: "draggable" + (item.selected == true ? " selected-item " : "") + (this.ezSelectable == true ? " selectable " : ""), onDragStart: (event) => this.onDragStart(event, { item: item, index: index }), onClick: () => { this.setSelection(item); }, onDragLeave: event => this.removeOverClass(event), onDragOver: (event) => this.onDragOverItem(event), onDragEnd: () => this.onDragEnd(), onDrop: (event) => this.onDrop(event, { item: item, index: index }), onDrag: (event) => this.onDrag(event), draggable: this.ezDraggable },
433
+ h("div", { class: "item-content" },
434
+ this.ezDraggable ? h("span", { class: "draggable-icon" }) : undefined,
435
+ h("p", { title: item.label, class: "person-name text--ellipsis" }, item.label)),
436
+ this.itemSlotBuilder ?
437
+ h("div", null, this.itemSlotBuilder(item))
438
+ : undefined));
439
+ })))));
164
440
  }
165
441
  static get is() { return "ez-list"; }
166
442
  static get encapsulation() { return "shadow"; }
@@ -171,17 +447,13 @@ export class EzList {
171
447
  "$": ["ez-list.css"]
172
448
  }; }
173
449
  static get properties() { return {
174
- "initialList": {
450
+ "dataSource": {
175
451
  "type": "unknown",
176
452
  "mutable": true,
177
453
  "complexType": {
178
- "original": "ListItem[]",
179
- "resolved": "ListItem[]",
180
- "references": {
181
- "ListItem": {
182
- "location": "local"
183
- }
184
- }
454
+ "original": "any[]",
455
+ "resolved": "any[]",
456
+ "references": {}
185
457
  },
186
458
  "required": false,
187
459
  "optional": false,
@@ -191,9 +463,27 @@ export class EzList {
191
463
  },
192
464
  "defaultValue": "[]"
193
465
  },
194
- "draggable": {
466
+ "useGroups": {
195
467
  "type": "boolean",
196
- "mutable": false,
468
+ "mutable": true,
469
+ "complexType": {
470
+ "original": "boolean",
471
+ "resolved": "boolean",
472
+ "references": {}
473
+ },
474
+ "required": false,
475
+ "optional": false,
476
+ "docs": {
477
+ "tags": [],
478
+ "text": "Define se o componente renderizar\u00E1 os itens separados em grupos.."
479
+ },
480
+ "attribute": "use-groups",
481
+ "reflect": true,
482
+ "defaultValue": "false"
483
+ },
484
+ "ezDraggable": {
485
+ "type": "boolean",
486
+ "mutable": true,
197
487
  "complexType": {
198
488
  "original": "boolean",
199
489
  "resolved": "boolean",
@@ -205,11 +495,11 @@ export class EzList {
205
495
  "tags": [],
206
496
  "text": "Define se o componente ter\u00E1 o comportamento de arrasto de linhas."
207
497
  },
208
- "attribute": "draggable",
498
+ "attribute": "ez-draggable",
209
499
  "reflect": false,
210
- "defaultValue": "true"
500
+ "defaultValue": "false"
211
501
  },
212
- "isMultipleSelection": {
502
+ "ezSelectable": {
213
503
  "type": "boolean",
214
504
  "mutable": true,
215
505
  "complexType": {
@@ -221,17 +511,104 @@ export class EzList {
221
511
  "optional": false,
222
512
  "docs": {
223
513
  "tags": [],
224
- "text": "Define se \u00E9 poss\u00EDvel selecionar mais de um registro."
514
+ "text": "Define se os items da lista ser\u00E3o selecion\u00E1veis."
225
515
  },
226
- "attribute": "is-multiple-selection",
227
- "reflect": true,
228
- "defaultValue": "true"
516
+ "attribute": "ez-selectable",
517
+ "reflect": false,
518
+ "defaultValue": "false"
519
+ },
520
+ "itemSlotBuilder": {
521
+ "type": "unknown",
522
+ "mutable": true,
523
+ "complexType": {
524
+ "original": "(item: any, group?: any) => HTMLElement",
525
+ "resolved": "(item: any, group?: any) => HTMLElement",
526
+ "references": {
527
+ "HTMLElement": {
528
+ "location": "global"
529
+ }
530
+ }
531
+ },
532
+ "required": false,
533
+ "optional": false,
534
+ "docs": {
535
+ "tags": [],
536
+ "text": "Fun\u00E7\u00E3o respons\u00E1vel por renderizar um conte\u00FAdo dentro do item da lista."
537
+ }
229
538
  }
230
539
  }; }
540
+ static get states() { return {
541
+ "_listItems": {},
542
+ "_listGroupItems": {}
543
+ }; }
544
+ static get events() { return [{
545
+ "method": "ezChange",
546
+ "name": "ezChange",
547
+ "bubbles": true,
548
+ "cancelable": true,
549
+ "composed": true,
550
+ "docs": {
551
+ "tags": [],
552
+ "text": "Evento disparado ao modificar ordena\u00E7\u00E3o nas linhas da grade."
553
+ },
554
+ "complexType": {
555
+ "original": "ListItem[] | ListGroup[]",
556
+ "resolved": "ListGroup[] | ListItem[]",
557
+ "references": {
558
+ "ListItem": {
559
+ "location": "local"
560
+ },
561
+ "ListGroup": {
562
+ "location": "local"
563
+ }
564
+ }
565
+ }
566
+ }]; }
231
567
  static get methods() { return {
232
- "getState": {
568
+ "setSelection": {
569
+ "complexType": {
570
+ "signature": "(selectedItem: ListItem, scrollToOption?: boolean) => Promise<void>",
571
+ "parameters": [{
572
+ "tags": [],
573
+ "text": ""
574
+ }, {
575
+ "tags": [],
576
+ "text": ""
577
+ }],
578
+ "references": {
579
+ "Promise": {
580
+ "location": "global"
581
+ },
582
+ "ListItem": {
583
+ "location": "local"
584
+ }
585
+ },
586
+ "return": "Promise<void>"
587
+ },
588
+ "docs": {
589
+ "text": "Recebe como argumento um ListItem {label: string} e um booleano que define se o componente deve fazer scroll para exibir o item espec\u00EDfico (opcional).",
590
+ "tags": []
591
+ }
592
+ },
593
+ "getSelection": {
594
+ "complexType": {
595
+ "signature": "() => Promise<any>",
596
+ "parameters": [],
597
+ "references": {
598
+ "Promise": {
599
+ "location": "global"
600
+ }
601
+ },
602
+ "return": "Promise<any>"
603
+ },
604
+ "docs": {
605
+ "text": "Retorna o item selecionado.",
606
+ "tags": []
607
+ }
608
+ },
609
+ "getList": {
233
610
  "complexType": {
234
- "signature": "() => Promise<ListItem[]>",
611
+ "signature": "() => Promise<ListItem[] | ListGroup[]>",
235
612
  "parameters": [],
236
613
  "references": {
237
614
  "Promise": {
@@ -239,12 +616,15 @@ export class EzList {
239
616
  },
240
617
  "ListItem": {
241
618
  "location": "local"
619
+ },
620
+ "ListGroup": {
621
+ "location": "local"
242
622
  }
243
623
  },
244
- "return": "Promise<ListItem[]>"
624
+ "return": "Promise<ListItem[] | ListGroup[]>"
245
625
  },
246
626
  "docs": {
247
- "text": "Retorna uma promessa com o estado da atual lista composta por objetos do tipo {value: string, checked: boolean}.",
627
+ "text": "Retorna a lista de items conforme o modo de uso.",
248
628
  "tags": []
249
629
  }
250
630
  }