@sankhyalabs/ezui 2.11.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/dist/cjs/ez-actions-button.cjs.entry.js +1 -1
  2. package/dist/cjs/ez-alert.cjs.entry.js +1 -1
  3. package/dist/cjs/ez-application.cjs.entry.js +1 -1
  4. package/dist/cjs/ez-breadcrumb.cjs.entry.js +1 -1
  5. package/dist/cjs/ez-button.cjs.entry.js +1 -1
  6. package/dist/cjs/ez-calendar.cjs.entry.js +1 -1
  7. package/dist/cjs/ez-card-item.cjs.entry.js +1 -1
  8. package/dist/cjs/ez-check.cjs.entry.js +1 -1
  9. package/dist/cjs/ez-chip.cjs.entry.js +1 -1
  10. package/dist/cjs/ez-collapsible-box.cjs.entry.js +1 -1
  11. package/dist/cjs/ez-combo-box.cjs.entry.js +1 -1
  12. package/dist/cjs/ez-date-input.cjs.entry.js +1 -1
  13. package/dist/cjs/ez-date-time-input.cjs.entry.js +1 -1
  14. package/dist/cjs/ez-dialog.cjs.entry.js +1 -1
  15. package/dist/cjs/ez-dropdown.cjs.entry.js +1 -1
  16. package/dist/cjs/ez-file-item.cjs.entry.js +1 -1
  17. package/dist/cjs/{ez-tree.cjs.entry.js → ez-filter-input_3.cjs.entry.js} +195 -21
  18. package/dist/cjs/ez-form.cjs.entry.js +54 -15
  19. package/dist/cjs/ez-grid.cjs.entry.js +1 -1
  20. package/dist/cjs/ez-guide-navigator.cjs.entry.js +339 -0
  21. package/dist/cjs/ez-icon.cjs.entry.js +1 -1
  22. package/dist/cjs/ez-list.cjs.entry.js +1 -1
  23. package/dist/cjs/ez-loading-bar.cjs.entry.js +1 -1
  24. package/dist/cjs/ez-modal-container.cjs.entry.js +1 -1
  25. package/dist/cjs/ez-modal.cjs.entry.js +1 -1
  26. package/dist/cjs/ez-number-input.cjs.entry.js +1 -1
  27. package/dist/cjs/ez-popover.cjs.entry.js +1 -1
  28. package/dist/cjs/ez-popup.cjs.entry.js +1 -1
  29. package/dist/cjs/ez-radio-button.cjs.entry.js +1 -1
  30. package/dist/cjs/ez-scroller.cjs.entry.js +1 -1
  31. package/dist/cjs/ez-search.cjs.entry.js +1 -1
  32. package/dist/cjs/ez-tabselector.cjs.entry.js +6 -3
  33. package/dist/cjs/ez-text-area.cjs.entry.js +1 -1
  34. package/dist/cjs/ez-text-edit.cjs.entry.js +1 -1
  35. package/dist/cjs/ez-text-input.cjs.entry.js +1 -1
  36. package/dist/cjs/ez-time-input.cjs.entry.js +1 -1
  37. package/dist/cjs/ez-toast.cjs.entry.js +1 -1
  38. package/dist/cjs/ez-upload.cjs.entry.js +1 -1
  39. package/dist/cjs/ez-view-stack.cjs.entry.js +1 -1
  40. package/dist/cjs/ezui.cjs.js +2 -2
  41. package/dist/cjs/{index-fb179d74.js → index-5e208fa5.js} +8 -0
  42. package/dist/cjs/loader.cjs.js +2 -2
  43. package/dist/collection/collection-manifest.json +1 -0
  44. package/dist/collection/components/ez-form/ez-form.css +6 -0
  45. package/dist/collection/components/ez-form/ez-form.js +128 -15
  46. package/dist/collection/components/ez-form/fieldbuilder/FieldBuilder.js +1 -1
  47. package/dist/collection/components/ez-form/store/form.slice.js +6 -2
  48. package/dist/collection/components/ez-form/structure/{FormSheetMetadata.js → FormMetadata.js} +1 -1
  49. package/dist/collection/components/ez-guide-navigator/Guide.js +200 -0
  50. package/dist/collection/components/ez-guide-navigator/ez-guide-navigator.css +53 -0
  51. package/dist/collection/components/ez-guide-navigator/ez-guide-navigator.js +230 -0
  52. package/dist/collection/components/ez-tabselector/ez-tabselector.js +5 -2
  53. package/dist/collection/components/ez-tree/ez-tree.css +8 -6
  54. package/dist/collection/components/ez-tree/ez-tree.js +88 -10
  55. package/dist/collection/components/ez-tree/subcomponents/DefaultTooltipResolver.js +3 -0
  56. package/dist/collection/components/ez-tree/subcomponents/TreeItem.js +5 -5
  57. package/dist/collection/components/ez-tree/subcomponents/index.js +1 -0
  58. package/dist/collection/components/ez-tree/types/Node.js +26 -4
  59. package/dist/collection/components/ez-tree/types/Tree.js +12 -2
  60. package/dist/collection/interfaces/ez-form/IDefaultConfig.js +1 -0
  61. package/dist/collection/interfaces/ez-form/IFieldConfig.js +1 -0
  62. package/dist/collection/interfaces/ez-form/IFieldMetadata.js +1 -0
  63. package/dist/collection/interfaces/ez-form/IFieldSetMetadata.js +1 -0
  64. package/dist/collection/interfaces/ez-form/IFormConfig.js +1 -0
  65. package/dist/collection/interfaces/ez-form/IFormSheetMetadata.js +1 -0
  66. package/dist/collection/interfaces/ez-form/IInvalidField.js +1 -0
  67. package/dist/collection/interfaces/ez-form/IRecordValidator.js +1 -0
  68. package/dist/collection/interfaces/ez-form/ITabConfig.js +1 -0
  69. package/dist/collection/interfaces/ez-form/IValidationResult.js +1 -0
  70. package/dist/collection/interfaces/ez-form/index.js +1 -0
  71. package/dist/custom-elements/index.d.ts +6 -0
  72. package/dist/custom-elements/index.js +492 -39
  73. package/dist/esm/ez-actions-button.entry.js +1 -1
  74. package/dist/esm/ez-alert.entry.js +1 -1
  75. package/dist/esm/ez-application.entry.js +1 -1
  76. package/dist/esm/ez-breadcrumb.entry.js +1 -1
  77. package/dist/esm/ez-button.entry.js +1 -1
  78. package/dist/esm/ez-calendar.entry.js +1 -1
  79. package/dist/esm/ez-card-item.entry.js +1 -1
  80. package/dist/esm/ez-check.entry.js +1 -1
  81. package/dist/esm/ez-chip.entry.js +1 -1
  82. package/dist/esm/ez-collapsible-box.entry.js +1 -1
  83. package/dist/esm/ez-combo-box.entry.js +1 -1
  84. package/dist/esm/ez-date-input.entry.js +1 -1
  85. package/dist/esm/ez-date-time-input.entry.js +1 -1
  86. package/dist/esm/ez-dialog.entry.js +1 -1
  87. package/dist/esm/ez-dropdown.entry.js +1 -1
  88. package/dist/esm/ez-file-item.entry.js +1 -1
  89. package/dist/esm/{ez-tree.entry.js → ez-filter-input_3.entry.js} +194 -22
  90. package/dist/esm/ez-form.entry.js +54 -15
  91. package/dist/esm/ez-grid.entry.js +1 -1
  92. package/dist/esm/ez-guide-navigator.entry.js +335 -0
  93. package/dist/esm/ez-icon.entry.js +1 -1
  94. package/dist/esm/ez-list.entry.js +1 -1
  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-number-input.entry.js +1 -1
  99. package/dist/esm/ez-popover.entry.js +1 -1
  100. package/dist/esm/ez-popup.entry.js +1 -1
  101. package/dist/esm/ez-radio-button.entry.js +1 -1
  102. package/dist/esm/ez-scroller.entry.js +1 -1
  103. package/dist/esm/ez-search.entry.js +1 -1
  104. package/dist/esm/ez-tabselector.entry.js +6 -3
  105. package/dist/esm/ez-text-area.entry.js +1 -1
  106. package/dist/esm/ez-text-edit.entry.js +1 -1
  107. package/dist/esm/ez-text-input.entry.js +1 -1
  108. package/dist/esm/ez-time-input.entry.js +1 -1
  109. package/dist/esm/ez-toast.entry.js +1 -1
  110. package/dist/esm/ez-upload.entry.js +1 -1
  111. package/dist/esm/ez-view-stack.entry.js +1 -1
  112. package/dist/esm/ezui.js +2 -2
  113. package/dist/esm/{index-b77dcd0d.js → index-c5203f95.js} +8 -0
  114. package/dist/esm/loader.js +2 -2
  115. package/dist/ezui/ezui.esm.js +1 -1
  116. package/dist/ezui/{p-22f06920.entry.js → p-0c3f7bf2.entry.js} +1 -1
  117. package/dist/ezui/{p-46c3cd8e.entry.js → p-0cd0545d.entry.js} +1 -1
  118. package/dist/ezui/{p-e881ec6d.entry.js → p-1a27bb9f.entry.js} +1 -1
  119. package/dist/ezui/{p-e9b4b3bd.entry.js → p-1b94b9dc.entry.js} +1 -1
  120. package/dist/ezui/{p-42f85e36.entry.js → p-20c01161.entry.js} +1 -1
  121. package/dist/ezui/{p-6c43b275.entry.js → p-24717f87.entry.js} +1 -1
  122. package/dist/ezui/{p-52a18a6c.entry.js → p-3320768e.entry.js} +1 -1
  123. package/dist/ezui/{p-b5efd273.entry.js → p-3b2091dd.entry.js} +1 -1
  124. package/dist/ezui/{p-42376b77.entry.js → p-47bcc678.entry.js} +1 -1
  125. package/dist/ezui/{p-5e3079cb.entry.js → p-47ca5e09.entry.js} +1 -1
  126. package/dist/ezui/{p-6a53943d.entry.js → p-4c444816.entry.js} +1 -1
  127. package/dist/ezui/{p-fe1f0c92.entry.js → p-608d13e8.entry.js} +1 -1
  128. package/dist/ezui/{p-d04f3bb1.entry.js → p-626b8940.entry.js} +1 -1
  129. package/dist/ezui/p-6500a260.entry.js +1 -0
  130. package/dist/ezui/{p-bdb5e325.entry.js → p-6630eca2.entry.js} +1 -1
  131. package/dist/ezui/{p-b7a8708e.entry.js → p-67b9a2cb.entry.js} +1 -1
  132. package/dist/ezui/p-6c45dc64.entry.js +1 -0
  133. package/dist/ezui/{p-7e9ab877.entry.js → p-6dec5cfa.entry.js} +1 -1
  134. package/dist/ezui/{p-5d19cd0d.entry.js → p-6f9aba86.entry.js} +1 -1
  135. package/dist/ezui/{p-6ccf5720.js → p-7b80df03.js} +1 -1
  136. package/dist/ezui/{p-87dd65ba.entry.js → p-7d42065a.entry.js} +1 -1
  137. package/dist/ezui/{p-74a3f9d8.entry.js → p-91f8c816.entry.js} +1 -1
  138. package/dist/ezui/{p-4b93860c.entry.js → p-98c448c9.entry.js} +1 -1
  139. package/dist/ezui/{p-f8f87959.entry.js → p-99aea44b.entry.js} +1 -1
  140. package/dist/ezui/p-a4b4645d.entry.js +1 -0
  141. package/dist/ezui/{p-e3743d12.entry.js → p-ab5eee38.entry.js} +1 -1
  142. package/dist/ezui/{p-7d8e693d.entry.js → p-ad7151e0.entry.js} +1 -1
  143. package/dist/ezui/{p-2686fa5b.entry.js → p-ad8b7412.entry.js} +1 -1
  144. package/dist/ezui/{p-ba7b2b8f.entry.js → p-b2e861cb.entry.js} +1 -1
  145. package/dist/ezui/{p-8c273b22.entry.js → p-b2efb22c.entry.js} +1 -1
  146. package/dist/ezui/{p-9171043f.entry.js → p-b5557d33.entry.js} +1 -1
  147. package/dist/ezui/{p-a4405e80.entry.js → p-bc324ee8.entry.js} +1 -1
  148. package/dist/ezui/{p-07d07b75.entry.js → p-bd9792e2.entry.js} +1 -1
  149. package/dist/ezui/{p-21782390.entry.js → p-bf8a633d.entry.js} +1 -1
  150. package/dist/ezui/{p-620e71e2.entry.js → p-c071db26.entry.js} +1 -1
  151. package/dist/ezui/{p-b9d91679.entry.js → p-c3529df3.entry.js} +1 -1
  152. package/dist/ezui/{p-297d4378.entry.js → p-ca7435a6.entry.js} +1 -1
  153. package/dist/ezui/{p-e628c8bd.entry.js → p-e203c89f.entry.js} +1 -1
  154. package/dist/ezui/p-fa2f4ea5.entry.js +1 -0
  155. package/dist/ezui/{p-a7380524.entry.js → p-fc97f773.entry.js} +1 -1
  156. package/dist/types/components/ez-form/DataBinder.d.ts +1 -1
  157. package/dist/types/components/ez-form/ez-form.d.ts +20 -43
  158. package/dist/types/components/ez-form/fieldbuilder/FieldBuilder.d.ts +2 -2
  159. package/dist/types/components/ez-form/fieldbuilder/tpl/CheckBox.tpl.d.ts +1 -1
  160. package/dist/types/components/ez-form/fieldbuilder/tpl/NumberInput.tpl.d.ts +1 -1
  161. package/dist/types/components/ez-form/store/form.slice.d.ts +5 -3
  162. package/dist/types/components/ez-form/structure/FormItem.d.ts +2 -2
  163. package/dist/types/components/ez-form/structure/{FormSheetMetadata.d.ts → FormMetadata.d.ts} +4 -20
  164. package/dist/types/components/ez-form/structure/FormSheet.d.ts +2 -2
  165. package/dist/types/components/ez-guide-navigator/Guide.d.ts +69 -0
  166. package/dist/types/components/ez-tree/ez-tree.d.ts +13 -0
  167. package/dist/types/components/ez-tree/interfaces/ITreeItem.d.ts +1 -0
  168. package/dist/types/components/ez-tree/subcomponents/DefaultTooltipResolver.d.ts +2 -0
  169. package/dist/types/components/ez-tree/subcomponents/TreeItem.d.ts +2 -0
  170. package/dist/types/components/ez-tree/subcomponents/index.d.ts +1 -0
  171. package/dist/types/components/ez-tree/types/Node.d.ts +1 -0
  172. package/dist/types/components.d.ts +80 -2
  173. package/dist/types/interfaces/ez-form/IDefaultConfig.d.ts +5 -0
  174. package/dist/types/interfaces/ez-form/IFieldConfig.d.ts +13 -0
  175. package/dist/types/interfaces/ez-form/IFieldMetadata.d.ts +6 -0
  176. package/dist/types/interfaces/ez-form/IFieldSetMetadata.d.ts +5 -0
  177. package/dist/types/interfaces/ez-form/IFormConfig.d.ts +7 -0
  178. package/dist/types/interfaces/ez-form/IFormSheetMetadata.d.ts +10 -0
  179. package/dist/types/interfaces/ez-form/IInvalidField.d.ts +4 -0
  180. package/dist/types/interfaces/ez-form/IRecordValidator.d.ts +6 -0
  181. package/dist/types/interfaces/ez-form/ITabConfig.d.ts +5 -0
  182. package/dist/types/interfaces/ez-form/IValidationResult.d.ts +8 -0
  183. package/dist/types/interfaces/ez-form/index.d.ts +10 -0
  184. package/package.json +2 -2
  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/cjs/ez-filter-input.cjs.entry.js +0 -81
  189. package/dist/cjs/ez-sidebar-button.cjs.entry.js +0 -31
  190. package/dist/esm/ez-filter-input.entry.js +0 -77
  191. package/dist/esm/ez-sidebar-button.entry.js +0 -27
  192. package/dist/ezui/p-6cdfe0db.entry.js +0 -1
  193. package/dist/ezui/p-98c78c29.entry.js +0 -1
  194. package/dist/ezui/p-99e07a6b.entry.js +0 -1
  195. package/dist/ezui/p-a928ea8d.entry.js +0 -1
  196. package/dist/ezui/p-f58201e8.entry.js +0 -1
@@ -0,0 +1,200 @@
1
+ import { ObjectUtils } from '@sankhyalabs/core';
2
+ export const HIERARCHY_SEPARATOR = '>>';
3
+ export class Guide {
4
+ constructor(list) {
5
+ this.originalList = [];
6
+ this.guideMap = new Map();
7
+ this.hierarchiesAlreadyLoaded = new Set();
8
+ if (list === null || list === void 0 ? void 0 : list.length)
9
+ this.setList(list);
10
+ }
11
+ /**
12
+ * Converte uma lista de objetos IGuideItem em um objeto IGuideMap com sua hierarquia.
13
+ * @param list Uma lista de objetos IGuideItem representando a lista de itens.
14
+ * @param hierarquiaList Uma lista opcional de strings que representa a hierarquia dos itens pai.
15
+ * @param indexReferences Uma lista opcional de números que representa as referências de índice da lista original.
16
+ * @returns Uma Promise que resolve para um objeto IGuideMap com os itens e sua hierarquia.
17
+ */
18
+ convertArrayToMap(list, hierarchyList = [], indexReferences = []) {
19
+ return new Promise(resolve => {
20
+ list.forEach(async (item, index) => {
21
+ const updatedHierarchyList = [...hierarchyList, item.id];
22
+ const key = updatedHierarchyList.join(HIERARCHY_SEPARATOR);
23
+ const currentIndexReferences = [...indexReferences, index];
24
+ const children = Array.isArray(item.children) ? item.children : [];
25
+ item = Object.assign(Object.assign({}, item), { parentId: hierarchyList[hierarchyList.length - 1], indexReferences: currentIndexReferences, hierarchy: updatedHierarchyList, hierarchyId: key });
26
+ delete item.children;
27
+ this.guideMap.set(key, item);
28
+ if (children.length)
29
+ await this.convertArrayToMap(children, updatedHierarchyList, currentIndexReferences);
30
+ });
31
+ resolve(this.guideMap);
32
+ });
33
+ }
34
+ /**
35
+ * Converte um objeto IGuideMap em uma lista de objetos IGuideItem com sua hierarquia.
36
+ * @param map Um objeto IGuideMap opcional que representa o mapa de itens com sua hierarquia.
37
+ * @returns Uma Promise que resolve para uma lista de objetos IGuideItem com sua hierarquia.
38
+ */
39
+ convertMapToArray(map = this.guideMap) {
40
+ return new Promise(resolve => {
41
+ const array = [];
42
+ const itemsById = {};
43
+ map.forEach(value => {
44
+ var _a;
45
+ const item = Object.assign({}, value);
46
+ if (((_a = item.children) === null || _a === void 0 ? void 0 : _a.length) === 0) {
47
+ delete item.children;
48
+ }
49
+ itemsById[item.id] = item;
50
+ });
51
+ Object.values(itemsById).forEach(item => {
52
+ if (item.parentId) {
53
+ const parent = itemsById[item.parentId];
54
+ if (Array.isArray(parent.children)) {
55
+ parent.children.push(item);
56
+ }
57
+ else {
58
+ parent.children = [item];
59
+ }
60
+ }
61
+ else {
62
+ array.push(item);
63
+ }
64
+ });
65
+ resolve(array);
66
+ });
67
+ }
68
+ /**
69
+ * Obtém a lista selecionada de itens com base na lista original e na lista de índice selecionada.
70
+ * @param originalList Uma lista de objetos IGuideItem representando a lista original de itens.
71
+ * @param selectedIndexList Uma matriz representando a lista de índices selecionada.
72
+ * @returns Uma lista de objetos IGuideItem representando a lista selecionada de itens.
73
+ */
74
+ getSelectedList(originalList, selectedIndexList) {
75
+ const selectedList = [];
76
+ selectedIndexList.forEach(selectedIndex => {
77
+ if (!selectedIndex.length)
78
+ return;
79
+ const [parentIndex, childIndex] = selectedIndex;
80
+ if (childIndex === undefined) {
81
+ selectedList.push(originalList[parentIndex]);
82
+ }
83
+ else {
84
+ const parent = originalList[parentIndex];
85
+ const child = parent.children[childIndex];
86
+ const selectedParent = selectedList.find(item => item.id === parent.id);
87
+ if (selectedParent) {
88
+ selectedParent.children.push(child);
89
+ }
90
+ else {
91
+ selectedList.push(Object.assign(Object.assign({}, parent), { children: [child] }));
92
+ }
93
+ }
94
+ });
95
+ return selectedList;
96
+ }
97
+ /**
98
+ * Define a lista de itens para o Map guideMap.
99
+ * @param list Uma lista de objetos IGuideItem representando a lista de itens.
100
+ * @returns Uma Promise que resolve quando a lista é convertida para o Map.
101
+ */
102
+ setList(list) {
103
+ return new Promise(async (resolve) => {
104
+ this.guideMap.clear();
105
+ if (!this.originalList.length) {
106
+ this.originalList = ObjectUtils.copy(list);
107
+ }
108
+ await this.convertArrayToMap(list);
109
+ resolve();
110
+ });
111
+ }
112
+ /**
113
+ * Obtém a lista de itens com sua hierarquia.
114
+ * @returns Uma Promise que resolve para uma lista de objetos IGuideItem com sua hierarquia.
115
+ */
116
+ getList() {
117
+ return this.convertMapToArray();
118
+ }
119
+ /**
120
+ * Adiciona filhos a um item pai no guia.
121
+ * @param parent Um objeto IGuideItem que representa o item pai.
122
+ * @param children Uma lista de objetos IGuideItem representando os itens filhos.
123
+ * @returns Uma Promise que resolve para uma lista de objetos IGuideItem com sua hierarquia.
124
+ */
125
+ addChildren(parent, children) {
126
+ return new Promise(async (resolve, reject) => {
127
+ if (parent.disabled)
128
+ return reject('Parent is disabled');
129
+ if (!parent.hierarchy || !parent.hierarchyId)
130
+ return reject('Hierarchy not found');
131
+ if (this.hierarchiesAlreadyLoaded.has(parent.hierarchyId))
132
+ return resolve([]);
133
+ await this.convertArrayToMap(children, parent.hierarchy);
134
+ const list = await this.getList();
135
+ this.originalList = ObjectUtils.copy(list);
136
+ this.hierarchiesAlreadyLoaded.add(parent.hierarchyId);
137
+ resolve(list);
138
+ });
139
+ }
140
+ /**
141
+ * Obtém os itens a partir de um campo corresponde à string de consulta.
142
+ * @param query Uma string que representa a consulta para corresponder ao rótulo.
143
+ * @param fieldName Uma string opcional que representa o nome do campo para corresponder à consulta.
144
+ * @returns Uma Promise que resolve para um objeto com o primeiro item encontrado e uma matriz de itens correspondentes com sua hierarquia.
145
+ */
146
+ getItemsByLabel(query, fieldName = 'label', selectedItem) {
147
+ return new Promise(async (resolve) => {
148
+ var _a;
149
+ const mapResults = [];
150
+ let firstOcorrence;
151
+ const itemFromMap = this.guideMap.get(selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.hierarchyId);
152
+ if (itemFromMap)
153
+ itemFromMap.expanded = true;
154
+ for (const item of this.guideMap.values()) {
155
+ const label = ((_a = item === null || item === void 0 ? void 0 : item[fieldName]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || '';
156
+ if (label.includes(query.toLowerCase())) {
157
+ if (!firstOcorrence)
158
+ firstOcorrence = item;
159
+ mapResults.push(item.indexReferences);
160
+ }
161
+ }
162
+ const updatedList = this.getSelectedList(this.originalList, mapResults);
163
+ resolve({
164
+ first: firstOcorrence,
165
+ list: updatedList,
166
+ });
167
+ });
168
+ }
169
+ /**
170
+ * Habilita todos os objetos IGuideItem.
171
+ * @returns Uma Promise que resolve com o array atualizado de objetos IGuideItem.
172
+ */
173
+ enableAllItems() {
174
+ return new Promise(async (resolve) => {
175
+ for (const item of this.guideMap.values())
176
+ item.disabled = false;
177
+ const list = await this.getList();
178
+ this.originalList = ObjectUtils.copy(list);
179
+ resolve(list);
180
+ });
181
+ }
182
+ /**
183
+ * Ativa somente objetos IGuideItem com base em uma matriz de IDs.
184
+ * @param ids Um array de IDs para habilitar.
185
+ * @param customTooltip Uma string para definir o tooltip de itens desabilitados.
186
+ * @returns Uma Promise que resolve com o array atualizado de objetos IGuideItem.
187
+ */
188
+ enableItemsById(ids = [], customTooltip = '') {
189
+ return new Promise(async (resolve) => {
190
+ for (const item of this.guideMap.values()) {
191
+ const isEnabled = ids.includes(item.id);
192
+ item.disabled = !isEnabled;
193
+ item.tooltip = isEnabled ? item.tooltip : customTooltip;
194
+ }
195
+ const list = await this.getList();
196
+ this.originalList = ObjectUtils.copy(list);
197
+ resolve(list);
198
+ });
199
+ }
200
+ }
@@ -0,0 +1,53 @@
1
+ :host {
2
+ /* Label Container */
3
+ /*@doc Define o espaçamento interno do container de label*/
4
+ --ez-guide-navigator--padding: 0 var(--space--large);
5
+ /*@doc Define a cor de shadow box do container de label*/
6
+ --ez-guide-navigator--box-shadow: var(--shadow, 0px 0px 24px 0px #000);
7
+ /*@doc Define a cor de fundo do container de label*/
8
+ --ez-guide-navigator--background-color: var(--color--inverted);
9
+ /*@doc Define o border radius do container de label*/
10
+ --ez-guide-navigator--border-radius: 0px var(--border--radius-medium) var(--border--radius-medium) 0px;
11
+
12
+
13
+ /*Labels Actions */
14
+ /*@doc Define o espaçamento entre as ações*/
15
+ --ez-guide-navigator--actions-gap: var(--space--medium);
16
+ /*@doc Define a margem vertical do elemento*/
17
+ --ez-guide-navigator--actions-margin: var(--space--medium) 0 var(--space--medium);
18
+ }
19
+
20
+ .inverted {
21
+ transform: rotate(180deg);
22
+ }
23
+
24
+ .ez-guide-navigator {
25
+ /* public */
26
+ display: -webkit-box;
27
+ display: -ms-flexbox;
28
+ display: flex;
29
+ -webkit-box-orient: vertical;
30
+ -webkit-box-direction: normal;
31
+ -ms-flex-direction: column;
32
+ flex-direction: column;
33
+ /* private */
34
+ padding: var(--ez-guide-navigator--padding);
35
+ background-color: var(--ez-guide-navigator--background-color);
36
+ -webkit-box-shadow: var(--ez-guide-navigator--box-shadow);
37
+ box-shadow: var(--ez-guide-navigator--box-shadow);
38
+ border-radius: var(--ez-guide-navigator--border-radius);
39
+
40
+ }
41
+
42
+ .ez-guide-navigator__actions {
43
+ /* public */
44
+ display: -webkit-box;
45
+ display: -ms-flexbox;
46
+ display: flex;
47
+ -webkit-box-align: center;
48
+ -ms-flex-align: center;
49
+ align-items: center;
50
+ /* private */
51
+ gap: var(--ez-guide-navigator--actions-gap);
52
+ margin: var(--ez-guide-navigator--actions-margin)
53
+ }
@@ -0,0 +1,230 @@
1
+ import { Component, Prop, State, h, Host, Method, Element, Watch } from '@stencil/core';
2
+ import { ElementIDUtils } from '@sankhyalabs/core';
3
+ import { Guide, HIERARCHY_SEPARATOR } from './Guide';
4
+ const ENTER_KEY = 'Enter';
5
+ export class EzGuideNavigator {
6
+ constructor() {
7
+ //TODO: Quando a filtragem for feita dentro da árvore, não será mais necessário
8
+ this.guide = new Guide();
9
+ //TODO: Destituir esse binder. Rediscutida a arquitetura desse componente
10
+ //vimos que o binder só dificulta a vida de quem vai usar... assim teremos
11
+ //apenas uma lista de IGuideItems e o resto fica como a própria árvore...
12
+ /**
13
+ * Provedor de dados para o guide navigator.
14
+ */
15
+ this.binder = null;
16
+ /**
17
+ * Define se o menu de navegação está aberto.
18
+ */
19
+ this.open = true;
20
+ //TODO: Destituir esse binder. Rediscutida a arquitetura desse componente
21
+ //vimos que o binder só dificulta a vida de quem vai usar... assim teremos
22
+ //apenas uma lista de IGuideItems e o resto fica como a própria árvore...
23
+ /**
24
+ * Lista de itens do menu de navegação.
25
+ */
26
+ this.items = [];
27
+ /**
28
+ * Valor do campo de pesquisa usado na filtragem de guias.
29
+ */
30
+ this.filterText = '';
31
+ }
32
+ /**
33
+ * Habilita itens específicos a partir de uma lista de ID's.
34
+ */
35
+ async enableOnly(id, customTooltip) {
36
+ //TODO: Levar para a árvore
37
+ this._tree.items = await this.guide.enableItemsById(id, customTooltip);
38
+ }
39
+ /**
40
+ * Habilita todos os itens do menu de navegação.
41
+ */
42
+ async enableAll() {
43
+ //TODO: Levar para a árvore
44
+ this._tree.items = await this.guide.enableAllItems();
45
+ }
46
+ //TODO: Destituir esse binder. Rediscutida a arquitetura desse componente
47
+ //vimos que o binder só dificulta a vida de quem vai usar... assim teremos
48
+ //apenas uma lista de IGuideItems e o resto fica como a própria árvore...
49
+ handleBinderChange(newBinder, oldBinder) {
50
+ if (newBinder != oldBinder) {
51
+ this.initTree();
52
+ }
53
+ }
54
+ async handleToggleSidebar() {
55
+ this.open = !this.open;
56
+ if (this.open) {
57
+ await this.initTree();
58
+ this.filterItems();
59
+ }
60
+ ;
61
+ }
62
+ handleSelectTreeItem({ detail: parent }) {
63
+ if (!parent.expanded)
64
+ return;
65
+ //TODO: Destituir esse binder. Rediscutida a arquitetura desse componente
66
+ //vimos que o binder só dificulta a vida de quem vai usar... assim teremos
67
+ //apenas uma lista de IGuideItems e o resto fica como a própria árvore...
68
+ this.binder.fetchItems(parent.id).then(async (children) => {
69
+ if (!(children === null || children === void 0 ? void 0 : children.length))
70
+ return;
71
+ await this.guide.addChildren(parent, children);
72
+ const { list } = await this.guide.getItemsByLabel(this.filterText, 'label', parent);
73
+ this._tree.items = list;
74
+ this._tree.openItem(parent.hierarchyId || parent.id);
75
+ });
76
+ this.binder.onSelectItem(parent);
77
+ }
78
+ //TODO: Destituir esse binder. Rediscutida a arquitetura desse componente
79
+ //vimos que o binder só dificulta a vida de quem vai usar... assim teremos
80
+ //apenas uma lista de IGuideItems e o resto fica como a própria árvore...
81
+ handleFilterTree(event) {
82
+ if (event.key === ENTER_KEY)
83
+ this.filterItems();
84
+ }
85
+ //TODO: Destituir esse binder. Rediscutida a arquitetura desse componente
86
+ //vimos que o binder só dificulta a vida de quem vai usar... assim teremos
87
+ //apenas uma lista de IGuideItems e o resto fica como a própria árvore...
88
+ async setTreeIems(list, first) {
89
+ var _a;
90
+ this._tree.items = list;
91
+ if (first && !(first === null || first === void 0 ? void 0 : first.disabled)) {
92
+ const parentHierarchyId = ((_a = first.hierarchy) === null || _a === void 0 ? void 0 : _a.slice(0, -1).join(HIERARCHY_SEPARATOR)) || first.id;
93
+ await this._tree.openItem(parentHierarchyId);
94
+ await this._tree.selectItem(first.id);
95
+ }
96
+ else {
97
+ this._tree.selectItem(null);
98
+ }
99
+ }
100
+ //TODO: Destituir esse binder. Rediscutida a arquitetura desse componente
101
+ //vimos que o binder só dificulta a vida de quem vai usar... assim teremos
102
+ //apenas uma lista de IGuideItems e o resto fica como a própria árvore...
103
+ filterItems() {
104
+ this.guide.getItemsByLabel(this.filterText).then(async ({ list, first }) => {
105
+ this.setTreeIems(list, first);
106
+ });
107
+ }
108
+ //TODO: Destituir esse binder. Rediscutida a arquitetura desse componente
109
+ //vimos que o binder só dificulta a vida de quem vai usar... assim teremos
110
+ //apenas uma lista de IGuideItems e o resto fica como a própria árvore...
111
+ async initTree() {
112
+ if (!this.binder)
113
+ return;
114
+ const binderItems = await this.binder.fetchItems();
115
+ await this.guide.setList(binderItems);
116
+ const guideItems = await this.guide.getList();
117
+ this.setTreeIems(guideItems);
118
+ }
119
+ componentDidLoad() {
120
+ ElementIDUtils.addIDInfoIfNotExists(this._element);
121
+ this.initTree();
122
+ }
123
+ render() {
124
+ return (h(Host, null, this.open ? (h("aside", { tabIndex: -1, id: "navigator", class: "ez-col ez-col--sd-12 ez-col--tb-3 ez-guide-navigator", "data-element-id": ElementIDUtils.getInternalIDInfo("sidebar") },
125
+ h("div", { role: "search", class: "ez-guide-navigator__actions" },
126
+ h("ez-filter-input", { mode: "slim", value: this.filterText, onEzChange: (event) => (this.filterText = event.detail), label: "Buscar guia", "aria-placeholder": "Buscar guia", onKeyUp: this.handleFilterTree.bind(this), "data-element-id": ElementIDUtils.getInternalIDInfo("textinput") }),
127
+ h("ez-button", { onClick: this.handleToggleSidebar.bind(this), class: "inverted", mode: "icon", size: "small", iconName: "show_menu", title: "Ocultar menu", "aria-label": "Ocultar menu", "aria-controls": "navigator", "data-element-id": ElementIDUtils.getInternalIDInfo("closeButton") })),
128
+ h("ez-tree", { ref: element => (this._tree = element), onEzChange: evt => this.handleSelectTreeItem(evt), "data-element-id": ElementIDUtils.getInternalIDInfo("tree") }))) : (h("ez-sidebar-button", { onEzClick: this.handleToggleSidebar.bind(this), "aria-controls": "navigator", "aria-expanded": this.open, "data-element-id": ElementIDUtils.getInternalIDInfo("openButton") }))));
129
+ }
130
+ static get is() { return "ez-guide-navigator"; }
131
+ static get encapsulation() { return "shadow"; }
132
+ static get originalStyleUrls() { return {
133
+ "$": ["ez-guide-navigator.css"]
134
+ }; }
135
+ static get styleUrls() { return {
136
+ "$": ["ez-guide-navigator.css"]
137
+ }; }
138
+ static get properties() { return {
139
+ "binder": {
140
+ "type": "unknown",
141
+ "mutable": false,
142
+ "complexType": {
143
+ "original": "IGuideBinder",
144
+ "resolved": "IGuideBinder",
145
+ "references": {
146
+ "IGuideBinder": {
147
+ "location": "local"
148
+ }
149
+ }
150
+ },
151
+ "required": false,
152
+ "optional": false,
153
+ "docs": {
154
+ "tags": [],
155
+ "text": "Provedor de dados para o guide navigator."
156
+ },
157
+ "defaultValue": "null"
158
+ },
159
+ "open": {
160
+ "type": "boolean",
161
+ "mutable": true,
162
+ "complexType": {
163
+ "original": "boolean",
164
+ "resolved": "boolean",
165
+ "references": {}
166
+ },
167
+ "required": false,
168
+ "optional": false,
169
+ "docs": {
170
+ "tags": [],
171
+ "text": "Define se o menu de navega\u00E7\u00E3o est\u00E1 aberto."
172
+ },
173
+ "attribute": "open",
174
+ "reflect": true,
175
+ "defaultValue": "true"
176
+ }
177
+ }; }
178
+ static get states() { return {
179
+ "items": {},
180
+ "filterText": {}
181
+ }; }
182
+ static get methods() { return {
183
+ "enableOnly": {
184
+ "complexType": {
185
+ "signature": "(id: Array<string>, customTooltip: string) => Promise<void>",
186
+ "parameters": [{
187
+ "tags": [],
188
+ "text": ""
189
+ }, {
190
+ "tags": [],
191
+ "text": ""
192
+ }],
193
+ "references": {
194
+ "Promise": {
195
+ "location": "global"
196
+ },
197
+ "Array": {
198
+ "location": "global"
199
+ }
200
+ },
201
+ "return": "Promise<void>"
202
+ },
203
+ "docs": {
204
+ "text": "Habilita itens espec\u00EDficos a partir de uma lista de ID's.",
205
+ "tags": []
206
+ }
207
+ },
208
+ "enableAll": {
209
+ "complexType": {
210
+ "signature": "() => Promise<void>",
211
+ "parameters": [],
212
+ "references": {
213
+ "Promise": {
214
+ "location": "global"
215
+ }
216
+ },
217
+ "return": "Promise<void>"
218
+ },
219
+ "docs": {
220
+ "text": "Habilita todos os itens do menu de navega\u00E7\u00E3o.",
221
+ "tags": []
222
+ }
223
+ }
224
+ }; }
225
+ static get elementRef() { return "_element"; }
226
+ static get watchers() { return [{
227
+ "propName": "binder",
228
+ "methodName": "handleBinderChange"
229
+ }]; }
230
+ }
@@ -68,9 +68,12 @@ export class EzTabselector {
68
68
  }
69
69
  componentWillRender() {
70
70
  if (!this._processedTabs) {
71
- this._processedTabs = [];
72
71
  if (this.tabs) {
73
- if (typeof this.tabs === "string") {
72
+ if (Array.isArray(this.tabs)) {
73
+ this._processedTabs = [...this.tabs];
74
+ }
75
+ else {
76
+ this._processedTabs = [];
74
77
  this.tabs.split(",").forEach((label) => {
75
78
  label = label.trim();
76
79
  this._processedTabs.push({ label, tabKey: label, index: this._processedTabs.length });
@@ -86,17 +86,11 @@ ul.first-level {
86
86
  }
87
87
 
88
88
  .tree-item:hover {
89
- /*private*/
90
- cursor: pointer;
91
-
92
89
  /*public*/
93
90
  background-color: var(--ez-tree__tree-item--hover--background-color);
94
91
  }
95
92
 
96
93
  .tree-item[disabled], .tree-item[disabled]:hover {
97
- /*private*/
98
- cursor: unset;
99
-
100
94
  /*public*/
101
95
  background-color: var(--ez-tree__tree-item--disabled--background-color);
102
96
  }
@@ -118,12 +112,20 @@ ul.first-level {
118
112
  --ez-icon--color: var(--ez-tree--color);
119
113
  }
120
114
 
115
+ .item-icon:hover {
116
+ /*private*/
117
+ cursor: pointer;
118
+ }
119
+
121
120
  .tree-item[selected] .item-icon {
122
121
  /*public*/
123
122
  --ez-icon--color: var(--ez-tree--selected--color);
124
123
  }
125
124
 
126
125
  .tree-item[disabled] .item-icon {
126
+ /*private*/
127
+ cursor: unset;
128
+
127
129
  /*public*/
128
130
  --ez-icon--color: var(--ez-tree--disabled--color);
129
131
  }