@sankhyalabs/ezui 5.22.0-dev.64 → 5.22.0-dev.65

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 (192) hide show
  1. package/dist/cjs/ez-actions-button.cjs.entry.js +1 -1
  2. package/dist/cjs/ez-alert-list.cjs.entry.js +1 -1
  3. package/dist/cjs/ez-alert.cjs.entry.js +1 -1
  4. package/dist/cjs/ez-application.cjs.entry.js +1 -1
  5. package/dist/cjs/ez-badge.cjs.entry.js +1 -1
  6. package/dist/cjs/ez-breadcrumb.cjs.entry.js +1 -1
  7. package/dist/cjs/ez-button.cjs.entry.js +1 -1
  8. package/dist/cjs/ez-calendar.cjs.entry.js +1 -1
  9. package/dist/cjs/{ez-card-item_3.cjs.entry.js → ez-card-item_2.cjs.entry.js} +1 -124
  10. package/dist/cjs/ez-chart.cjs.entry.js +1 -1
  11. package/dist/cjs/ez-check.cjs.entry.js +1 -1
  12. package/dist/cjs/ez-chip.cjs.entry.js +1 -1
  13. package/dist/cjs/ez-collapsible-box.cjs.entry.js +1 -1
  14. package/dist/cjs/ez-combo-box.cjs.entry.js +1 -1
  15. package/dist/cjs/ez-custom-form-input_2.cjs.entry.js +2 -2
  16. package/dist/cjs/ez-date-input.cjs.entry.js +1 -1
  17. package/dist/cjs/ez-date-time-input.cjs.entry.js +1 -1
  18. package/dist/cjs/ez-dialog.cjs.entry.js +1 -1
  19. package/dist/cjs/ez-double-list.cjs.entry.js +285 -0
  20. package/dist/cjs/ez-dropdown_2.cjs.entry.js +1 -1
  21. package/dist/cjs/ez-file-item.cjs.entry.js +1 -1
  22. package/dist/cjs/ez-filter-input.cjs.entry.js +130 -0
  23. package/dist/cjs/ez-form-view.cjs.entry.js +1 -1
  24. package/dist/cjs/ez-form.cjs.entry.js +1 -1
  25. package/dist/cjs/ez-grid.cjs.entry.js +1 -1
  26. package/dist/cjs/ez-guide-navigator.cjs.entry.js +1 -1
  27. package/dist/cjs/ez-icon.cjs.entry.js +1 -1
  28. package/dist/cjs/ez-list.cjs.entry.js +247 -206
  29. package/dist/cjs/ez-loading-bar.cjs.entry.js +1 -1
  30. package/dist/cjs/ez-modal-container.cjs.entry.js +1 -1
  31. package/dist/cjs/ez-modal.cjs.entry.js +1 -1
  32. package/dist/cjs/ez-multi-selection-list.cjs.entry.js +1 -1
  33. package/dist/cjs/ez-number-input.cjs.entry.js +1 -1
  34. package/dist/cjs/ez-popover.cjs.entry.js +1 -1
  35. package/dist/cjs/ez-popup.cjs.entry.js +5 -2
  36. package/dist/cjs/ez-radio-button.cjs.entry.js +1 -1
  37. package/dist/cjs/ez-scroller_2.cjs.entry.js +1 -1
  38. package/dist/cjs/ez-search.cjs.entry.js +1 -1
  39. package/dist/cjs/ez-sidebar-navigator.cjs.entry.js +1 -1
  40. package/dist/cjs/ez-split-button.cjs.entry.js +1 -1
  41. package/dist/cjs/ez-split-item.cjs.entry.js +1 -1
  42. package/dist/cjs/ez-split-panel.cjs.entry.js +1 -1
  43. package/dist/cjs/ez-tabselector.cjs.entry.js +1 -1
  44. package/dist/cjs/ez-text-area.cjs.entry.js +1 -1
  45. package/dist/cjs/ez-text-input.cjs.entry.js +1 -1
  46. package/dist/cjs/ez-time-input.cjs.entry.js +1 -1
  47. package/dist/cjs/ez-toast.cjs.entry.js +1 -1
  48. package/dist/cjs/ez-tooltip.cjs.entry.js +1 -1
  49. package/dist/cjs/ez-tree.cjs.entry.js +1 -1
  50. package/dist/cjs/ez-upload.cjs.entry.js +1 -1
  51. package/dist/cjs/ez-view-stack.cjs.entry.js +1 -1
  52. package/dist/cjs/ezListHelper-0d3970b4.js +90 -0
  53. package/dist/cjs/ezui.cjs.js +2 -2
  54. package/dist/cjs/filter-column.cjs.entry.js +1 -1
  55. package/dist/cjs/{index-9e5554cb.js → index-a7b0c73d.js} +10 -5
  56. package/dist/cjs/loader.cjs.js +2 -2
  57. package/dist/collection/collection-manifest.json +1 -0
  58. package/dist/collection/components/ez-double-list/doubleListHelper.js +82 -0
  59. package/dist/collection/components/ez-double-list/ez-double-list.css +62 -0
  60. package/dist/collection/components/ez-double-list/ez-double-list.js +418 -0
  61. package/dist/collection/components/ez-list/ez-list.js +273 -208
  62. package/dist/collection/components/ez-list/ezListHelper.js +85 -0
  63. package/dist/collection/components/ez-popup/ez-popup.css +1 -0
  64. package/dist/collection/components/ez-popup/ez-popup.js +5 -2
  65. package/dist/custom-elements/index.d.ts +6 -0
  66. package/dist/custom-elements/index.js +623 -216
  67. package/dist/esm/ez-actions-button.entry.js +1 -1
  68. package/dist/esm/ez-alert-list.entry.js +1 -1
  69. package/dist/esm/ez-alert.entry.js +1 -1
  70. package/dist/esm/ez-application.entry.js +1 -1
  71. package/dist/esm/ez-badge.entry.js +1 -1
  72. package/dist/esm/ez-breadcrumb.entry.js +1 -1
  73. package/dist/esm/ez-button.entry.js +1 -1
  74. package/dist/esm/ez-calendar.entry.js +1 -1
  75. package/dist/esm/{ez-card-item_3.entry.js → ez-card-item_2.entry.js} +2 -124
  76. package/dist/esm/ez-chart.entry.js +1 -1
  77. package/dist/esm/ez-check.entry.js +1 -1
  78. package/dist/esm/ez-chip.entry.js +1 -1
  79. package/dist/esm/ez-collapsible-box.entry.js +1 -1
  80. package/dist/esm/ez-combo-box.entry.js +1 -1
  81. package/dist/esm/ez-custom-form-input_2.entry.js +2 -2
  82. package/dist/esm/ez-date-input.entry.js +1 -1
  83. package/dist/esm/ez-date-time-input.entry.js +1 -1
  84. package/dist/esm/ez-dialog.entry.js +1 -1
  85. package/dist/esm/ez-double-list.entry.js +281 -0
  86. package/dist/esm/ez-dropdown_2.entry.js +1 -1
  87. package/dist/esm/ez-file-item.entry.js +1 -1
  88. package/dist/esm/ez-filter-input.entry.js +126 -0
  89. package/dist/esm/ez-form-view.entry.js +1 -1
  90. package/dist/esm/ez-form.entry.js +1 -1
  91. package/dist/esm/ez-grid.entry.js +1 -1
  92. package/dist/esm/ez-guide-navigator.entry.js +1 -1
  93. package/dist/esm/ez-icon.entry.js +1 -1
  94. package/dist/esm/ez-list.entry.js +247 -206
  95. package/dist/esm/ez-loading-bar.entry.js +1 -1
  96. package/dist/esm/ez-modal-container.entry.js +1 -1
  97. package/dist/esm/ez-modal.entry.js +1 -1
  98. package/dist/esm/ez-multi-selection-list.entry.js +1 -1
  99. package/dist/esm/ez-number-input.entry.js +1 -1
  100. package/dist/esm/ez-popover.entry.js +1 -1
  101. package/dist/esm/ez-popup.entry.js +5 -2
  102. package/dist/esm/ez-radio-button.entry.js +1 -1
  103. package/dist/esm/ez-scroller_2.entry.js +1 -1
  104. package/dist/esm/ez-search.entry.js +1 -1
  105. package/dist/esm/ez-sidebar-navigator.entry.js +1 -1
  106. package/dist/esm/ez-split-button.entry.js +1 -1
  107. package/dist/esm/ez-split-item.entry.js +1 -1
  108. package/dist/esm/ez-split-panel.entry.js +1 -1
  109. package/dist/esm/ez-tabselector.entry.js +1 -1
  110. package/dist/esm/ez-text-area.entry.js +1 -1
  111. package/dist/esm/ez-text-input.entry.js +1 -1
  112. package/dist/esm/ez-time-input.entry.js +1 -1
  113. package/dist/esm/ez-toast.entry.js +1 -1
  114. package/dist/esm/ez-tooltip.entry.js +1 -1
  115. package/dist/esm/ez-tree.entry.js +1 -1
  116. package/dist/esm/ez-upload.entry.js +1 -1
  117. package/dist/esm/ez-view-stack.entry.js +1 -1
  118. package/dist/esm/ezListHelper-00fb9b8d.js +87 -0
  119. package/dist/esm/ezui.js +3 -3
  120. package/dist/esm/filter-column.entry.js +1 -1
  121. package/dist/esm/{index-5a720e56.js → index-baa5e267.js} +11 -5
  122. package/dist/esm/loader.js +3 -3
  123. package/dist/ezui/ezui.esm.js +1 -1
  124. package/dist/ezui/{p-e6b38ade.entry.js → p-0306dff7.entry.js} +1 -1
  125. package/dist/ezui/{p-91ccae0c.entry.js → p-09de35a2.entry.js} +1 -1
  126. package/dist/ezui/p-13165bb1.entry.js +1 -0
  127. package/dist/ezui/{p-c7d1333c.entry.js → p-14b769d7.entry.js} +1 -1
  128. package/dist/ezui/{p-b2f6bc0a.entry.js → p-17be134a.entry.js} +1 -1
  129. package/dist/ezui/p-17eabf46.entry.js +1 -0
  130. package/dist/ezui/{p-319d36b7.entry.js → p-181b5ae8.entry.js} +1 -1
  131. package/dist/ezui/{p-81461d2f.entry.js → p-1e7a8633.entry.js} +1 -1
  132. package/dist/ezui/{p-6b51c9cc.entry.js → p-1f50fa05.entry.js} +1 -1
  133. package/dist/ezui/{p-e4c7eb39.js → p-23a36bb6.js} +2 -2
  134. package/dist/ezui/p-2475fd6e.entry.js +1 -0
  135. package/dist/ezui/{p-3c10cd94.entry.js → p-2b46b37b.entry.js} +1 -1
  136. package/dist/ezui/{p-6d31c43c.entry.js → p-2bb2a0c4.entry.js} +1 -1
  137. package/dist/ezui/{p-efbe0b73.entry.js → p-3175fe8c.entry.js} +1 -1
  138. package/dist/ezui/p-31d1fab6.entry.js +1 -0
  139. package/dist/ezui/{p-fad4f1dd.entry.js → p-35d467a8.entry.js} +1 -1
  140. package/dist/ezui/{p-5d01d189.entry.js → p-3f2dd525.entry.js} +1 -1
  141. package/dist/ezui/{p-0378416a.entry.js → p-44caad9a.entry.js} +1 -1
  142. package/dist/ezui/{p-aa543378.entry.js → p-50d83a46.entry.js} +1 -1
  143. package/dist/ezui/{p-7567ccdd.entry.js → p-555c9018.entry.js} +1 -1
  144. package/dist/ezui/{p-044d46d5.entry.js → p-5b205c80.entry.js} +1 -1
  145. package/dist/ezui/{p-6fc26622.entry.js → p-5ed81457.entry.js} +1 -1
  146. package/dist/ezui/{p-f1c2c19e.entry.js → p-650e4b6d.entry.js} +1 -1
  147. package/dist/ezui/{p-aee8d615.entry.js → p-654b3f99.entry.js} +1 -1
  148. package/dist/ezui/p-65f471bc.entry.js +1 -0
  149. package/dist/ezui/{p-6d8b3298.entry.js → p-6cdd3e0a.entry.js} +1 -1
  150. package/dist/ezui/{p-554522db.entry.js → p-6d79930d.entry.js} +1 -1
  151. package/dist/ezui/{p-fc194825.entry.js → p-6e429cff.entry.js} +1 -1
  152. package/dist/ezui/{p-def75121.entry.js → p-6f22a385.entry.js} +1 -1
  153. package/dist/ezui/{p-2f53435e.entry.js → p-7409eeaa.entry.js} +1 -1
  154. package/dist/ezui/{p-11bfeca3.entry.js → p-77a4bd35.entry.js} +1 -1
  155. package/dist/ezui/{p-397e3026.entry.js → p-7ed30844.entry.js} +1 -1
  156. package/dist/ezui/{p-e18d9e6a.entry.js → p-7fdd479f.entry.js} +1 -1
  157. package/dist/ezui/p-80dfc50b.js +1 -0
  158. package/dist/ezui/{p-1b08bf3c.entry.js → p-8888d9ed.entry.js} +1 -1
  159. package/dist/ezui/{p-82fa4b09.entry.js → p-8df1ca33.entry.js} +1 -1
  160. package/dist/ezui/{p-e7395eae.entry.js → p-90bcd2ba.entry.js} +1 -1
  161. package/dist/ezui/{p-a921e3e7.entry.js → p-990b4318.entry.js} +1 -1
  162. package/dist/ezui/{p-c2b20f78.entry.js → p-9f5fa3f9.entry.js} +1 -1
  163. package/dist/ezui/{p-b6241ea3.entry.js → p-a6fe527a.entry.js} +1 -1
  164. package/dist/ezui/{p-dfca5946.entry.js → p-a80b1287.entry.js} +1 -1
  165. package/dist/ezui/{p-18a2a28a.entry.js → p-b6a4e6de.entry.js} +1 -1
  166. package/dist/ezui/p-bc2f844e.entry.js +1 -0
  167. package/dist/ezui/{p-92748142.entry.js → p-c0d9c4f8.entry.js} +1 -1
  168. package/dist/ezui/{p-b858fc6e.entry.js → p-c3045972.entry.js} +1 -1
  169. package/dist/ezui/{p-a563df31.entry.js → p-c4320a39.entry.js} +1 -1
  170. package/dist/ezui/{p-ec5f987d.entry.js → p-ca6340a9.entry.js} +1 -1
  171. package/dist/ezui/{p-16e21a40.entry.js → p-d0ca26fe.entry.js} +1 -1
  172. package/dist/ezui/{p-cce6c015.entry.js → p-d520839d.entry.js} +1 -1
  173. package/dist/ezui/p-dc8b36c3.entry.js +1 -0
  174. package/dist/ezui/{p-bef7daac.entry.js → p-e347df9c.entry.js} +1 -1
  175. package/dist/ezui/{p-35d0b2fb.entry.js → p-e3e3fd7a.entry.js} +1 -1
  176. package/dist/ezui/{p-469b2619.entry.js → p-e82d122c.entry.js} +1 -1
  177. package/dist/ezui/{p-6bda82d1.entry.js → p-fec696ab.entry.js} +1 -1
  178. package/dist/types/components/ez-double-list/doubleListHelper.d.ts +10 -0
  179. package/dist/types/components/ez-double-list/ez-double-list.d.ts +86 -0
  180. package/dist/types/components/ez-list/ez-list.d.ts +19 -3
  181. package/dist/types/components/ez-list/ezListHelper.d.ts +20 -0
  182. package/dist/types/components/ez-popup/ez-popup.d.ts +1 -1
  183. package/dist/types/components.d.ts +97 -6
  184. package/package.json +1 -1
  185. package/react/components.d.ts +1 -0
  186. package/react/components.js +1 -0
  187. package/react/components.js.map +1 -1
  188. package/dist/ezui/p-3af64edd.entry.js +0 -1
  189. package/dist/ezui/p-46a46507.entry.js +0 -1
  190. package/dist/ezui/p-6ec40dec.entry.js +0 -1
  191. package/dist/ezui/p-7f5afb1f.entry.js +0 -1
  192. package/dist/ezui/p-a1c0eadf.entry.js +0 -1
@@ -1,5 +1,6 @@
1
1
  import { ElementIDUtils, StringUtils } from '@sankhyalabs/core';
2
2
  import { Fragment, Host, h } from '@stencil/core';
3
+ import { processListOnDrop } from './ezListHelper';
3
4
  export class EzList {
4
5
  constructor() {
5
6
  this._listItemsHistory = [];
@@ -13,6 +14,7 @@ export class EzList {
13
14
  this.itemSlotBuilder = undefined;
14
15
  this.itemLeftSlotBuilder = undefined;
15
16
  this.hoverFeedback = false;
17
+ this.enableMultipleSelection = false;
16
18
  }
17
19
  /**
18
20
  * Limpa o histórico da lista.
@@ -34,56 +36,93 @@ export class EzList {
34
36
  /**
35
37
  * Aplica seleção nas linhas da lista.
36
38
  */
37
- async setSelection(selectedItem, scrollToOption) {
38
- if (selectedItem && this.ezSelectable) {
39
- this.ezSelectItem.emit(selectedItem);
40
- if (this.useGroups) {
41
- let newList = [...this._listGroupItems];
42
- newList.forEach(groupItem => {
43
- groupItem.items.forEach(item => {
44
- item.selected = item.id === selectedItem.id;
45
- });
46
- });
47
- this._listGroupItems = newList;
48
- }
49
- else {
50
- let newList = [...this._listItems];
51
- newList.forEach(item => {
52
- item.selected = item.id === selectedItem.id;
53
- });
54
- this._listItems = newList;
55
- }
56
- if (scrollToOption) {
57
- let liElem = this.useGroups
58
- ? this._groupContainer.querySelector('li#item_' + selectedItem.id)
59
- : this._itemContainer.querySelector('li#item_' + selectedItem.id);
60
- if (liElem) {
61
- liElem.scrollIntoView();
62
- }
63
- }
64
- }
65
- else {
39
+ async setSelection(selectedItem, scrollToOption, shitkey, ctrlKey) {
40
+ if (!selectedItem || !this.ezSelectable) {
66
41
  await this.removeSelection();
42
+ return;
43
+ }
44
+ if (this.useGroups) {
45
+ this.setSelectionWithGroups(selectedItem, scrollToOption);
46
+ return;
47
+ }
48
+ if (this.enableMultipleSelection && ctrlKey) {
49
+ this.setSelectionMultiple(selectedItem);
50
+ return;
51
+ }
52
+ if (this.enableMultipleSelection && shitkey) {
53
+ this.setSelectionRange(selectedItem);
54
+ return;
55
+ }
56
+ this.setSelectionSingleItem(selectedItem, scrollToOption);
57
+ this.ezSelectItem.emit(selectedItem);
58
+ }
59
+ setSelectionRange(selectedItem) {
60
+ const lastSelectedIndex = this._listItems.findIndex(item => item.selected);
61
+ const seletedItemIndex = this._listItems.findIndex(item => item.id === selectedItem.id);
62
+ if (lastSelectedIndex < 0 || lastSelectedIndex === seletedItemIndex) {
63
+ this.setSelectionSingleItem(selectedItem);
64
+ return;
67
65
  }
66
+ const minorIndex = Math.min(lastSelectedIndex, seletedItemIndex);
67
+ const majorIndex = Math.max(lastSelectedIndex, seletedItemIndex);
68
+ let newList = [...this._listItems];
69
+ newList.forEach((item, index) => {
70
+ item.selected = (index >= minorIndex && index <= majorIndex);
71
+ });
72
+ this._listItems = [...newList];
73
+ this.ezSelectItem.emit(this._listItems.filter(item => item.selected));
74
+ }
75
+ setSelectionMultiple(selectedItem) {
76
+ let newList = [...this._listItems];
77
+ newList.forEach(item => {
78
+ item.selected = (item.id === selectedItem.id) ? !item.selected : item.selected;
79
+ });
80
+ this._listItems = [...newList];
81
+ this.ezSelectItem.emit(this._listItems.filter(item => item.selected));
82
+ }
83
+ setSelectionSingleItem(selectedItem, scrollToOption) {
84
+ this.ezSelectItem.emit(selectedItem);
85
+ let newList = [...this._listItems];
86
+ newList.forEach(item => {
87
+ item.selected = item.id === selectedItem.id;
88
+ });
89
+ this._listItems = newList;
90
+ if (!scrollToOption)
91
+ return;
92
+ let liElem = this._itemContainer.querySelector('li#item_' + selectedItem.id);
93
+ if (liElem)
94
+ liElem.scrollIntoView();
95
+ }
96
+ setSelectionWithGroups(selectedItem, scrollToOption) {
97
+ this.ezSelectItem.emit(selectedItem);
98
+ let newList = [...this._listGroupItems];
99
+ newList.forEach(groupItem => {
100
+ groupItem.items.forEach(item => {
101
+ item.selected = item.id === selectedItem.id;
102
+ });
103
+ });
104
+ this._listGroupItems = newList;
105
+ if (!scrollToOption)
106
+ return;
107
+ let liElem = this._groupContainer.querySelector('li#item_' + selectedItem.id);
108
+ if (liElem)
109
+ liElem.scrollIntoView();
68
110
  }
69
111
  /**
70
112
  * Obtém o item selecionado.
71
113
  */
72
114
  async getSelection() {
115
+ if (!this.useGroups)
116
+ return this._listItems.find(item => item.selected == true);
73
117
  let selectedItem;
74
- if (this.useGroups) {
75
- this._listGroupItems.every(group => {
76
- let item = group.items.find(item => item.selected == true);
77
- if (item) {
78
- selectedItem = item;
79
- return false;
80
- }
81
- return true;
82
- });
83
- }
84
- else {
85
- selectedItem = this._listItems.find(item => item.selected == true);
86
- }
118
+ this._listGroupItems.every(group => {
119
+ let item = group.items.find(item => item.selected == true);
120
+ if (item) {
121
+ selectedItem = item;
122
+ return false;
123
+ }
124
+ return true;
125
+ });
87
126
  return selectedItem;
88
127
  }
89
128
  /**
@@ -107,14 +146,11 @@ export class EzList {
107
146
  });
108
147
  });
109
148
  this._listGroupItems = newList;
149
+ return;
110
150
  }
111
- else {
112
- let newList = [...this._listItems];
113
- newList.forEach(item => {
114
- item.selected = false;
115
- });
116
- this._listItems = newList;
117
- }
151
+ let newList = [...this._listItems];
152
+ newList.forEach(item => item.selected = false);
153
+ this._listItems = newList;
118
154
  }
119
155
  applyUUID(item) {
120
156
  if (!item.id) {
@@ -176,78 +212,88 @@ export class EzList {
176
212
  ElementIDUtils.addIDInfo(this._element);
177
213
  }
178
214
  onDrop(ev, dragEndItem) {
215
+ ev.stopPropagation();
179
216
  this.removeOverClass();
217
+ if (!this._dragStartItem)
218
+ return;
219
+ if (this.useGroups) {
220
+ this.onDropWithGroups(dragEndItem);
221
+ return;
222
+ }
223
+ this._listItems = [...processListOnDrop(this.buildDragHandlerConfig(dragEndItem.index, false))];
224
+ this._listItemsHistory = [...this._listItems];
225
+ this.ezChange.emit(this._listItems);
226
+ }
227
+ buildDragHandlerConfig(targetIndex, moveToFinal) {
228
+ return {
229
+ listItems: this._listItems,
230
+ dragItem: this._dragStartItem,
231
+ enableMultipleSelection: this.enableMultipleSelection,
232
+ targetIndex,
233
+ moveToFinal,
234
+ clearSelection: () => this.setSelection(undefined)
235
+ };
236
+ }
237
+ ;
238
+ onDropWithGroups(dragEndItem) {
180
239
  this.setSelection(undefined);
181
- if (this._dragStartItem) {
182
- if (this.useGroups) {
183
- let newList = [...this._listGroupItems];
184
- let groupEnd = this._listGroupItems.find(group => dragEndItem.groupName == group.group);
185
- //Remove item arrastado
186
- newList.find(group => group.group == this._dragStartItem.groupName).items.splice(this._dragStartItem.index, 1);
187
- //Adiciona item arrastado
188
- if (groupEnd.sort) {
189
- newList.find(group => group.group == dragEndItem.groupName).items.push(this._dragStartItem.item);
190
- newList
191
- .find(group => group.group == dragEndItem.groupName)
192
- .items.sort(function (a, b) {
193
- return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
194
- });
195
- if (groupEnd.sort === 'DSC') {
196
- newList.find(group => group.group == dragEndItem.groupName).items.reverse();
197
- }
198
- }
199
- else {
200
- let indexForAdd = dragEndItem.index > this._dragStartItem.index ? dragEndItem.index - 1 : dragEndItem.index;
201
- newList.find(group => group.group == dragEndItem.groupName).items.splice(indexForAdd, 0, this._dragStartItem.item);
202
- }
203
- this._listGroupItems = newList;
204
- this.ezChange.emit(this._listGroupItems);
205
- }
206
- else {
207
- let newList = [...this._listItems];
208
- newList.splice(this._dragStartItem.index, 1);
209
- newList.splice(dragEndItem.index, 0, this._dragStartItem.item);
210
- this._listItems = newList;
211
- this._listItemsHistory = newList;
212
- this.ezChange.emit(this._listItems);
240
+ let newList = [...this._listGroupItems];
241
+ let groupEnd = this._listGroupItems.find(group => dragEndItem.groupName == group.group);
242
+ //Remove item arrastado
243
+ newList.find(group => group.group == this._dragStartItem.groupName).items.splice(this._dragStartItem.index, 1);
244
+ //Adiciona item arrastado
245
+ if (groupEnd.sort) {
246
+ newList.find(group => group.group == dragEndItem.groupName).items.push(this._dragStartItem.item);
247
+ newList
248
+ .find(group => group.group == dragEndItem.groupName)
249
+ .items.sort(function (a, b) {
250
+ return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
251
+ });
252
+ if (groupEnd.sort === 'DSC') {
253
+ newList.find(group => group.group == dragEndItem.groupName).items.reverse();
213
254
  }
214
255
  }
215
- ev.stopPropagation();
256
+ else {
257
+ let indexForAdd = dragEndItem.index > this._dragStartItem.index ? dragEndItem.index - 1 : dragEndItem.index;
258
+ newList.find(group => group.group == dragEndItem.groupName).items.splice(indexForAdd, 0, this._dragStartItem.item);
259
+ }
260
+ this._listGroupItems = newList;
261
+ this.ezChange.emit(this._listGroupItems);
216
262
  }
217
263
  onDropLastIndex(ev, groupDropped) {
264
+ ev.stopPropagation();
218
265
  this.removeOverClass();
266
+ if (!this._dragStartItem)
267
+ return;
268
+ if (this.useGroups) {
269
+ this.onDropLastItemWithGroups(groupDropped);
270
+ return;
271
+ }
272
+ const lastIndex = this._listItems.length - 1;
273
+ this._listItems = [...processListOnDrop(this.buildDragHandlerConfig(lastIndex, true))];
274
+ this._listItemsHistory = [...this._listItems];
275
+ this.ezChange.emit(this._listItems);
276
+ }
277
+ onDropLastItemWithGroups(groupDropped) {
219
278
  this.setSelection(undefined);
220
- if (this._dragStartItem) {
221
- if (this.useGroups) {
222
- let newList = [...this._listGroupItems];
223
- let groupEnd = this._listGroupItems.find(group => groupDropped.group == group.group);
224
- //Remove item arrastado
225
- newList.find(group => group.group == this._dragStartItem.groupName).items.splice(this._dragStartItem.index, 1);
226
- //Adiciona item arrastado
227
- newList.find(group => group.group == groupDropped.group).items.push(this._dragStartItem.item);
228
- if (groupEnd.sort) {
229
- newList
230
- .find(group => group.group == groupDropped.group)
231
- .items.sort(function (a, b) {
232
- return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
233
- });
234
- if (groupEnd.sort === 'DSC') {
235
- newList.find(group => group.group == groupDropped.group).items.reverse();
236
- }
237
- }
238
- this._listGroupItems = newList;
239
- this.ezChange.emit(this._listGroupItems);
240
- }
241
- else {
242
- let newList = [...this._listItems];
243
- newList.splice(this._dragStartItem.index, 1);
244
- newList.push(this._dragStartItem.item);
245
- this._listItems = newList;
246
- this._listItemsHistory = newList;
247
- this.ezChange.emit(this._listItems);
279
+ let newList = [...this._listGroupItems];
280
+ let groupEnd = this._listGroupItems.find(group => groupDropped.group == group.group);
281
+ //Remove item arrastado
282
+ newList.find(group => group.group == this._dragStartItem.groupName).items.splice(this._dragStartItem.index, 1);
283
+ //Adiciona item arrastado
284
+ newList.find(group => group.group == groupDropped.group).items.push(this._dragStartItem.item);
285
+ if (groupEnd.sort) {
286
+ newList
287
+ .find(group => group.group == groupDropped.group)
288
+ .items.sort(function (a, b) {
289
+ return a.label < b.label ? -1 : a.label > b.label ? 1 : 0;
290
+ });
291
+ if (groupEnd.sort === 'DSC') {
292
+ newList.find(group => group.group == groupDropped.group).items.reverse();
248
293
  }
249
294
  }
250
- ev.stopPropagation();
295
+ this._listGroupItems = newList;
296
+ this.ezChange.emit(this._listGroupItems);
251
297
  }
252
298
  onDropGroup(groupSelected) {
253
299
  var _a;
@@ -285,19 +331,13 @@ export class EzList {
285
331
  if (this.useGroups) {
286
332
  this.hideOverlays();
287
333
  }
288
- if (this._draggingElement) {
289
- try {
290
- this._element.removeChild(this._draggingElement);
291
- }
292
- catch (err) { }
293
- this._draggingElement = undefined;
294
- }
295
334
  }
296
335
  addOverClass(element) {
297
336
  if ((element === null || element === void 0 ? void 0 : element.__proto__) == HTMLDivElement.prototype && element.classList.contains('draggable')) {
298
337
  element.classList.add('over');
338
+ return;
299
339
  }
300
- else if ((element === null || element === void 0 ? void 0 : element.parentElement) && !element.parentElement.classList.contains('draggable-list')) {
340
+ if ((element === null || element === void 0 ? void 0 : element.parentElement) && !element.parentElement.classList.contains('draggable-list')) {
301
341
  this.addOverClass(element.parentElement);
302
342
  }
303
343
  }
@@ -353,84 +393,94 @@ export class EzList {
353
393
  window.clearTimeout(this._changeDeboucingTimeout);
354
394
  }
355
395
  if (this.useGroups) {
356
- this._dragStartItem = { groupName: group.group, item: item, index: index };
357
- this._changeDeboucingTimeout = window.setTimeout(() => {
358
- this.showOverlays(group);
359
- }, 10);
360
- }
361
- else {
362
- this._dragStartItem = { item: item.item, index: item.index };
396
+ this.onDragStartWithGroups(group, item, index);
397
+ return;
363
398
  }
399
+ this._dragStartItem = { item: item.item, index: item.index };
400
+ }
401
+ onDragStartWithGroups(group, item, index) {
402
+ this._dragStartItem = { groupName: group.group, item: item, index: index };
403
+ this._changeDeboucingTimeout = window.setTimeout(() => {
404
+ this.showOverlays(group);
405
+ }, 10);
364
406
  }
365
407
  selectFirstItem() {
366
408
  if (this.useGroups) {
367
409
  this.setSelection(this._listGroupItems[0].items[0]);
368
410
  }
369
- {
411
+ else {
370
412
  this.setSelection(this._listItems[0]);
371
413
  }
372
414
  }
373
415
  nextOption(selectedItem) {
374
- let nextItem = undefined;
375
416
  if (this.useGroups) {
376
- this._listGroupItems.every((group, groupIndex, listGroupItems) => {
377
- let item = undefined;
378
- let itemIndex = group.items.findIndex(item => item.id == selectedItem.id);
379
- if (itemIndex != undefined && itemIndex != -1) {
380
- if (itemIndex === group.items.length - 1) {
381
- if (groupIndex + 1 <= listGroupItems.length - 1) {
382
- item = { label: listGroupItems[groupIndex + 1].items[0].label };
383
- }
384
- }
385
- else {
386
- item = { label: group.items[itemIndex + 1].label };
417
+ this.setSelection(this.nextOptionWithGroups(selectedItem), true);
418
+ return;
419
+ }
420
+ let nextItem = undefined;
421
+ let itemIndex = this._listItems.findIndex(item => item.id === selectedItem.id);
422
+ if (itemIndex >= 0 && itemIndex < this._listItems.length) {
423
+ nextItem = this._listItems[itemIndex + 1];
424
+ }
425
+ this.setSelection(nextItem, true);
426
+ }
427
+ nextOptionWithGroups(selectedItem) {
428
+ let nextItem = undefined;
429
+ this._listGroupItems.every((group, groupIndex, listGroupItems) => {
430
+ let item = undefined;
431
+ let itemIndex = group.items.findIndex(item => item.id == selectedItem.id);
432
+ if (itemIndex != undefined && itemIndex != -1) {
433
+ if (itemIndex === group.items.length - 1) {
434
+ if (groupIndex + 1 <= listGroupItems.length - 1) {
435
+ item = { label: listGroupItems[groupIndex + 1].items[0].label };
387
436
  }
388
437
  }
389
- if (item != undefined) {
390
- nextItem = item;
391
- return false;
438
+ else {
439
+ item = { label: group.items[itemIndex + 1].label };
392
440
  }
393
- return true;
394
- });
395
- }
396
- else {
397
- let itemIndex = this._listItems.findIndex(item => item.id === selectedItem.id);
398
- if (itemIndex >= 0 && itemIndex < this._listItems.length) {
399
- nextItem = this._listItems[itemIndex + 1];
400
441
  }
401
- }
402
- this.setSelection(nextItem, true);
442
+ if (item != undefined) {
443
+ nextItem = item;
444
+ return false;
445
+ }
446
+ return true;
447
+ });
448
+ return nextItem;
403
449
  }
404
450
  previousOption(selectedItem) {
405
- let previousItem = undefined;
406
451
  if (this.useGroups) {
407
- this._listGroupItems.every((group, groupIndex, listGroupItems) => {
408
- let item = undefined;
409
- let itemIndex = group.items.findIndex(item => item.id === selectedItem.id);
410
- if (itemIndex != undefined && itemIndex != -1) {
411
- if (itemIndex === 0) {
412
- if (groupIndex - 1 >= 0) {
413
- item = { label: listGroupItems[groupIndex - 1].items[listGroupItems[groupIndex - 1].items.length - 1].label };
414
- }
415
- }
416
- else {
417
- item = { label: group.items[itemIndex - 1].label };
452
+ this.setSelection(this.previousOptionWithGroups(selectedItem), true);
453
+ return;
454
+ }
455
+ let previousItem = undefined;
456
+ let itemIndex = this._listItems.findIndex(item => item.id === selectedItem.id);
457
+ if (itemIndex > 0 && itemIndex < this._listItems.length) {
458
+ previousItem = this._listItems[itemIndex - 1];
459
+ }
460
+ this.setSelection(previousItem, true);
461
+ }
462
+ previousOptionWithGroups(selectedItem) {
463
+ let previousItem = undefined;
464
+ this._listGroupItems.every((group, groupIndex, listGroupItems) => {
465
+ let item = undefined;
466
+ let itemIndex = group.items.findIndex(item => item.id === selectedItem.id);
467
+ if (itemIndex != undefined && itemIndex != -1) {
468
+ if (itemIndex === 0) {
469
+ if (groupIndex - 1 >= 0) {
470
+ item = { label: listGroupItems[groupIndex - 1].items[listGroupItems[groupIndex - 1].items.length - 1].label };
418
471
  }
419
472
  }
420
- if (item != undefined) {
421
- previousItem = item;
422
- return false;
473
+ else {
474
+ item = { label: group.items[itemIndex - 1].label };
423
475
  }
424
- return true;
425
- });
426
- }
427
- else {
428
- let itemIndex = this._listItems.findIndex(item => item.id === selectedItem.id);
429
- if (itemIndex > 0 && itemIndex < this._listItems.length) {
430
- previousItem = this._listItems[itemIndex - 1];
431
476
  }
432
- }
433
- this.setSelection(previousItem, true);
477
+ if (item != undefined) {
478
+ previousItem = item;
479
+ return false;
480
+ }
481
+ return true;
482
+ });
483
+ return previousItem;
434
484
  }
435
485
  keyDownHandler(event) {
436
486
  if (!event.ctrlKey) {
@@ -472,11 +522,11 @@ export class EzList {
472
522
  }
473
523
  }
474
524
  onDragOverItem(event) {
475
- if (this._dragStartItem) {
476
- event.preventDefault();
477
- this.addOverClass(event.target);
478
- event.stopPropagation();
479
- }
525
+ if (!this._dragStartItem)
526
+ return;
527
+ event.preventDefault();
528
+ this.addOverClass(event.target);
529
+ event.stopPropagation();
480
530
  }
481
531
  onDragOverLastIndex(ev) {
482
532
  ev.preventDefault();
@@ -516,38 +566,29 @@ export class EzList {
516
566
  doubleClickItem(item) {
517
567
  this.ezDoubleClick.emit(item);
518
568
  }
519
- render() {
520
- return (h(Host, { ref: el => (this._element = el) }, this.useGroups ? (h("div", { class: "group-container", ref: el => (this._groupContainer = el), tabIndex: 0, onKeyDown: event => {
521
- this.keyDownHandler(event);
522
- } }, this._listGroupItems.map(group => {
523
- return (h("div", { id: this.getDivGroupId(group.group), class: "group", key: group.group + group.items.length, onDrop: () => this.onDropGroup(group) }, h("label", { draggable: false, class: "group-name", title: group.group }, group.group), h("section", { class: "section-container", onDragOver: ev => ev.preventDefault() }, h("div", { class: "group-items-container" }, h("div", { class: "draggable-list" }, group.items.map((item, index) => (h("li", Object.assign({ id: 'item_' + item.id, class: {
569
+ buildItem(item, evt) {
570
+ return { id: item.id, label: item.label, check: evt.detail };
571
+ }
572
+ renderListWithGroups() {
573
+ return h("div", { class: 'group-container', ref: el => (this._groupContainer = el), tabIndex: 0, onKeyDown: event => this.keyDownHandler(event) }, this._listGroupItems.map(group => {
574
+ return (h("div", { id: this.getDivGroupId(group.group), class: 'group', key: group.group + group.items.length, onDrop: () => this.onDropGroup(group) }, h("label", { draggable: false, class: 'group-name', title: group.group }, group.group), h("section", { class: 'section-container', onDragOver: ev => ev.preventDefault() }, h("div", { class: 'group-items-container' }, h("div", { class: 'draggable-list' }, group.items.map((item, index) => (h("li", Object.assign({ id: 'item_' + item.id, class: {
524
575
  'selectable-container': this.ezSelectable,
525
576
  'hover-feedback': this.hoverFeedback,
526
577
  }, key: 'item_' + item.id }, {
527
578
  [ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME]: ElementIDUtils.getInternalIDInfo(`ezListItem__${StringUtils.replaceAccentuatedChars(item.label)}`),
528
- }), h("div", { class: 'draggable' + (item.selected == true ? ' selected-item ' : '') + (this.ezSelectable == true ? ' selectable ' : ''), onDblClick: () => {
529
- this.doubleClickItem(item);
530
- }, onClick: () => {
531
- this.setSelection(item);
532
- }, onDragLeave: () => {
533
- group.sort ? undefined : this.removeOverClass();
534
- }, onDragEnd: () => this.onDragEnd(), onDragStart: () => this.onDragStart(item, group, index), onDragOver: event => {
535
- group.sort ? undefined : this.onDragOverItem(event);
536
- }, onDrop: event => this.onDrop(event, { groupName: group.group, item: item, index: index }), draggable: this.ezDraggable }, h("div", { class: "item-content" }, this.ezDraggable ? h("span", { class: "draggable-icon" }) : undefined, this.listMode === 'regular' ? (h(Fragment, null, !!this.itemLeftSlotBuilder && this.getContainerItemBuilder('left', item, group), h("p", { title: item.label, class: "person-name text--ellipsis" }, item.label))) : (h("ez-check", { label: item.label, value: item.check, onEzChange: evt => this.ezCheckChange.emit({ id: item.id, label: item.label, check: evt.detail }) }))), !!this.itemSlotBuilder && this.getContainerItemBuilder('right', item, group, 'slot-item')))))), h("div", { class: "last-droppable-space", onDragLeave: () => this.removeOverClass(), onDragOver: event => {
537
- this.onDragOverLastIndex(event);
538
- }, onDragEnd: () => this.onDragEnd(), onDrop: event => this.onDropLastIndex(event, group) })), group.sort ? (h("div", { id: this.getGroupOverlayId(group.group), class: "group-overlay" }, "Mover para ", group.group)) : undefined)));
539
- }))) : (h("div", { class: "items-container", ref: el => (this._itemContainer = el), tabIndex: 0, onKeyDown: event => {
579
+ }), h("div", { class: 'draggable' + (item.selected == true ? ' selected-item ' : '') + (this.ezSelectable == true ? ' selectable ' : ''), onDblClick: () => this.doubleClickItem(item), onClick: () => this.setSelection(item), onDragLeave: () => group.sort ? undefined : this.removeOverClass(), onDragEnd: () => this.onDragEnd(), onDragStart: () => this.onDragStart(item, group, index), onDragOver: event => group.sort ? undefined : this.onDragOverItem(event), onDrop: event => this.onDrop(event, { groupName: group.group, item: item, index: index }), draggable: this.ezDraggable }, h("div", { class: 'item-content' }, this.ezDraggable ? h("span", { class: 'draggable-icon' }) : undefined, this.listMode === 'regular' ? (h(Fragment, null, !!this.itemLeftSlotBuilder && this.getContainerItemBuilder('left', item, group), h("p", { title: item.label, class: 'person-name text--ellipsis' }, item.label))) : (h("ez-check", { label: item.label, value: item.check, onEzChange: evt => this.ezCheckChange.emit(this.buildItem(item, evt)) }))), !!this.itemSlotBuilder && this.getContainerItemBuilder('right', item, group, 'slot-item')))))), h("div", { class: 'last-droppable-space', onDragLeave: () => this.removeOverClass(), onDragOver: event => this.onDragOverLastIndex(event), onDragEnd: () => this.onDragEnd(), onDrop: event => this.onDropLastIndex(event, group) })), group.sort ? (h("div", { id: this.getGroupOverlayId(group.group), class: 'group-overlay' }, "Mover para ", group.group)) : undefined)));
580
+ }));
581
+ }
582
+ renderList() {
583
+ return h("div", { class: 'items-container', ref: el => (this._itemContainer = el), tabIndex: 0, onKeyDown: event => {
540
584
  this.keyDownHandler(event);
541
- } }, h("div", { class: "draggable-list" }, this._listItems.map((item, index) => (h("li", Object.assign({ id: 'item_' + item.id, class: {
585
+ } }, h("div", { class: 'draggable-list' }, this._listItems.map((item, index) => (h("li", Object.assign({ id: 'item_' + item.id, class: {
542
586
  'selectable-container': this.ezSelectable,
543
587
  'hover-feedback': this.hoverFeedback,
544
- }, key: 'item_' + item.id }, { [ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME]: ElementIDUtils.getInternalIDInfo(`ezListItem__${StringUtils.replaceAccentuatedChars(item.label)}`) }), h("div", { class: 'draggable' + (item.selected == true ? ' selected-item ' : '') + (this.ezSelectable == true ? ' selectable ' : ''), onDragStart: () => this.onDragStart({ item: item, index: index }), onDblClick: () => {
545
- this.doubleClickItem(item);
546
- }, onClick: () => {
547
- this.setSelection(item);
548
- }, onDragLeave: () => this.removeOverClass(), onDragOver: event => this.onDragOverItem(event), onDragEnd: () => this.onDragEnd(), onDrop: event => this.onDrop(event, { item: item, index: index }), draggable: this.ezDraggable }, h("div", { class: "item-content" }, this.listMode === 'regular' ? (h(Fragment, null, this.ezDraggable ? h("span", { class: "draggable-icon" }) : undefined, !!this.itemLeftSlotBuilder && this.getContainerItemBuilder('left', item), h("p", { title: item.label, class: "person-name text--ellipsis" }, item.label))) : (h(Fragment, null, this.ezDraggable ? h("span", { class: "draggable-icon" }) : undefined, h("ez-check", { label: item.label, value: item.check, onEzChange: evt => this.ezCheckChange.emit({ id: item.id, label: item.label, check: evt.detail }) })))), !!this.itemSlotBuilder && this.getContainerItemBuilder('right', item))))), h("div", { class: "last-droppable-space", onDragLeave: () => this.removeOverClass(), onDragOver: event => {
549
- this.onDragOverLastIndex(event);
550
- }, onDragEnd: () => this.onDragEnd(), onDrop: event => this.onDropLastIndex(event) }))))));
588
+ }, key: 'item_' + item.id }, { [ElementIDUtils.DATA_ELEMENT_ID_ATTRIBUTE_NAME]: ElementIDUtils.getInternalIDInfo(`ezListItem__${StringUtils.replaceAccentuatedChars(item.label)}`) }), h("div", { class: 'draggable' + (item.selected == true ? ' selected-item ' : '') + (this.ezSelectable == true ? ' selectable ' : ''), onDblClick: () => this.doubleClickItem(item), onClick: (event) => this.setSelection(item, false, event.shiftKey, (event.altKey || event.metaKey)), onDragStart: () => this.onDragStart({ item: item, index: index }), onDragOver: event => this.onDragOverItem(event), onDragLeave: () => this.removeOverClass(), onDragEnd: () => this.onDragEnd(), onDrop: event => this.onDrop(event, { item: item, index: index }), draggable: this.ezDraggable }, h("div", { class: 'item-content' }, this.listMode === 'regular' ? (h(Fragment, null, this.ezDraggable ? h("span", { class: 'draggable-icon' }) : undefined, !!this.itemLeftSlotBuilder && this.getContainerItemBuilder('left', item), h("p", { title: item.label, class: 'person-name text--ellipsis' }, item.label))) : (h(Fragment, null, this.ezDraggable ? h("span", { class: 'draggable-icon' }) : undefined, h("ez-check", { label: item.label, value: item.check, onEzChange: evt => this.ezCheckChange.emit({ id: item.id, label: item.label, check: evt.detail }) })))), !!this.itemSlotBuilder && this.getContainerItemBuilder('right', item))))), h("div", { class: 'last-droppable-space', onDragLeave: () => this.removeOverClass(), onDragOver: event => this.onDragOverLastIndex(event), onDragEnd: () => this.onDragEnd(), onDrop: event => this.onDropLastIndex(event) })));
589
+ }
590
+ render() {
591
+ return (h(Host, { ref: el => (this._element = el) }, this.useGroups ? this.renderListWithGroups() : this.renderList()));
551
592
  }
552
593
  static get is() { return "ez-list"; }
553
594
  static get encapsulation() { return "scoped"; }
@@ -720,6 +761,24 @@ export class EzList {
720
761
  "attribute": "hover-feedback",
721
762
  "reflect": false,
722
763
  "defaultValue": "false"
764
+ },
765
+ "enableMultipleSelection": {
766
+ "type": "boolean",
767
+ "mutable": false,
768
+ "complexType": {
769
+ "original": "boolean",
770
+ "resolved": "boolean",
771
+ "references": {}
772
+ },
773
+ "required": false,
774
+ "optional": false,
775
+ "docs": {
776
+ "tags": [],
777
+ "text": "Habilita sele\u00E7\u00E3o de m\u00FAltiplos items."
778
+ },
779
+ "attribute": "enable-multiple-selection",
780
+ "reflect": false,
781
+ "defaultValue": "false"
723
782
  }
724
783
  };
725
784
  }
@@ -766,8 +825,8 @@ export class EzList {
766
825
  "text": "Emitido sempre que um item da lista for selecionado."
767
826
  },
768
827
  "complexType": {
769
- "original": "ListItem",
770
- "resolved": "ListItem",
828
+ "original": "ListItem | ListItem[]",
829
+ "resolved": "ListItem | ListItem[]",
771
830
  "references": {
772
831
  "ListItem": {
773
832
  "location": "local"
@@ -850,13 +909,19 @@ export class EzList {
850
909
  },
851
910
  "setSelection": {
852
911
  "complexType": {
853
- "signature": "(selectedItem: ListItem, scrollToOption?: boolean) => Promise<void>",
912
+ "signature": "(selectedItem: ListItem, scrollToOption?: boolean, shitkey?: boolean, ctrlKey?: boolean) => Promise<void>",
854
913
  "parameters": [{
855
914
  "tags": [],
856
915
  "text": ""
857
916
  }, {
858
917
  "tags": [],
859
918
  "text": ""
919
+ }, {
920
+ "tags": [],
921
+ "text": ""
922
+ }, {
923
+ "tags": [],
924
+ "text": ""
860
925
  }],
861
926
  "references": {
862
927
  "Promise": {