@sankhyalabs/ezui 0.0.0-bugfix-dev-KB-76362.0 → 0.0.0-bugfix-dev-KB-75609.1

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 (129) hide show
  1. package/dist/cjs/DataBinder-aff1dcc7.js +445 -0
  2. package/dist/cjs/FocusResolver-885f2173.js +35 -0
  3. package/dist/cjs/ez-card-item_3.cjs.entry.js +12 -19
  4. package/dist/cjs/ez-combo-box.cjs.entry.js +46 -10
  5. package/dist/cjs/ez-date-input.cjs.entry.js +8 -2
  6. package/dist/cjs/ez-date-time-input.cjs.entry.js +8 -2
  7. package/dist/cjs/ez-dialog.cjs.entry.js +9 -1
  8. package/dist/cjs/ez-form.cjs.entry.js +3 -324
  9. package/dist/cjs/ez-grid.cjs.entry.js +254 -62
  10. package/dist/cjs/ez-list.cjs.entry.js +151 -100
  11. package/dist/cjs/ez-number-input.cjs.entry.js +7 -0
  12. package/dist/cjs/ez-popover.cjs.entry.js +1 -1
  13. package/dist/cjs/ez-popup.cjs.entry.js +2 -9
  14. package/dist/cjs/ez-search.cjs.entry.js +28 -12
  15. package/dist/cjs/ez-text-area.cjs.entry.js +66 -4
  16. package/dist/cjs/ez-text-input.cjs.entry.js +8 -3
  17. package/dist/cjs/ez-time-input.cjs.entry.js +6 -0
  18. package/dist/cjs/ezui.cjs.js +1 -1
  19. package/dist/cjs/loader.cjs.js +1 -1
  20. package/dist/collection/collection-manifest.json +1 -1
  21. package/dist/collection/components/ez-card-item/ez-card-item.css +14 -5
  22. package/dist/collection/components/ez-combo-box/ez-combo-box.js +75 -14
  23. package/dist/collection/components/ez-date-input/ez-date-input.js +35 -4
  24. package/dist/collection/components/ez-date-time-input/ez-date-time-input.js +35 -4
  25. package/dist/collection/components/ez-dialog/ez-dialog.js +9 -1
  26. package/dist/collection/components/ez-filter-input/ez-filter-input.css +0 -11
  27. package/dist/collection/components/ez-filter-input/ez-filter-input.js +22 -52
  28. package/dist/collection/components/ez-grid/controller/ag-grid/AgGridController.js +52 -14
  29. package/dist/collection/components/ez-grid/controller/ag-grid/DataSource.js +3 -0
  30. package/dist/collection/components/ez-grid/controller/ag-grid/GridEditionManager.js +166 -45
  31. package/dist/collection/components/ez-grid/controller/ag-grid/components/EzGridCustomCellEditor.js +7 -0
  32. package/dist/collection/components/ez-grid/controller/ag-grid/editor/templates/ComboBox.tpl.js +1 -0
  33. package/dist/collection/components/ez-grid/controller/ag-grid/editor/templates/DateInput.tpl.js +1 -0
  34. package/dist/collection/components/ez-grid/controller/ag-grid/editor/templates/NumberInput.tpl.js +1 -0
  35. package/dist/collection/components/ez-grid/controller/ag-grid/editor/templates/Search.tpl.js +1 -0
  36. package/dist/collection/components/ez-grid/controller/ag-grid/editor/templates/TextInput.tpl.js +4 -1
  37. package/dist/collection/components/ez-grid/ez-grid.js +83 -1
  38. package/dist/collection/components/ez-list/ez-list.css +5 -5
  39. package/dist/collection/components/ez-list/ez-list.js +152 -170
  40. package/dist/collection/components/ez-number-input/ez-number-input.js +25 -0
  41. package/dist/collection/components/ez-popover/ez-popover.css +3 -10
  42. package/dist/collection/components/ez-popup/ez-popup.css +2 -6
  43. package/dist/collection/components/ez-popup/ez-popup.js +3 -10
  44. package/dist/collection/components/ez-search/ez-search.css +1 -1
  45. package/dist/collection/components/ez-search/ez-search.js +55 -14
  46. package/dist/collection/components/ez-text-area/ez-text-area.css +49 -0
  47. package/dist/collection/components/ez-text-area/ez-text-area.js +102 -2
  48. package/dist/collection/components/ez-text-input/ez-text-input.css +27 -53
  49. package/dist/collection/components/ez-text-input/ez-text-input.js +25 -2
  50. package/dist/collection/components/ez-time-input/ez-time-input.js +24 -0
  51. package/dist/collection/utils/FocusResolver.js +31 -0
  52. package/dist/collection/utils/form/DataBinder.js +18 -3
  53. package/dist/custom-elements/index.js +663 -237
  54. package/dist/esm/DataBinder-bd240826.js +441 -0
  55. package/dist/esm/FocusResolver-1ccbf850.js +33 -0
  56. package/dist/esm/ez-card-item_3.entry.js +12 -19
  57. package/dist/esm/ez-combo-box.entry.js +47 -11
  58. package/dist/esm/ez-date-input.entry.js +8 -2
  59. package/dist/esm/ez-date-time-input.entry.js +8 -2
  60. package/dist/esm/ez-dialog.entry.js +9 -1
  61. package/dist/esm/ez-form.entry.js +2 -323
  62. package/dist/esm/ez-grid.entry.js +253 -61
  63. package/dist/esm/ez-list.entry.js +152 -101
  64. package/dist/esm/ez-number-input.entry.js +7 -0
  65. package/dist/esm/ez-popover.entry.js +1 -1
  66. package/dist/esm/ez-popup.entry.js +2 -9
  67. package/dist/esm/ez-search.entry.js +28 -12
  68. package/dist/esm/ez-text-area.entry.js +66 -4
  69. package/dist/esm/ez-text-input.entry.js +8 -3
  70. package/dist/esm/ez-time-input.entry.js +6 -0
  71. package/dist/esm/ezui.js +1 -1
  72. package/dist/esm/loader.js +1 -1
  73. package/dist/ezui/ezui.esm.js +1 -1
  74. package/dist/ezui/p-03a2c7d1.entry.js +1 -0
  75. package/dist/ezui/p-0a75bb05.entry.js +1 -0
  76. package/dist/ezui/p-0db68715.entry.js +1 -0
  77. package/dist/ezui/p-19098a3f.entry.js +1 -0
  78. package/dist/ezui/p-1f830a2f.entry.js +1 -0
  79. package/dist/ezui/p-3dd919b7.entry.js +1 -0
  80. package/dist/ezui/p-7bfae0fc.entry.js +1 -0
  81. package/dist/ezui/p-81f06699.js +1 -0
  82. package/dist/ezui/p-97af4b13.entry.js +1 -0
  83. package/dist/ezui/p-9ceefe4d.entry.js +1 -0
  84. package/dist/ezui/p-a80b1287.entry.js +1 -0
  85. package/dist/ezui/{p-c3c3d640.entry.js → p-b0a5c2cd.entry.js} +2 -2
  86. package/dist/ezui/p-b54e17d2.entry.js +1 -0
  87. package/dist/ezui/p-bfad39eb.entry.js +1 -0
  88. package/dist/ezui/p-d0ca26fe.entry.js +1 -0
  89. package/dist/ezui/p-dc628ed3.js +1 -0
  90. package/dist/ezui/p-ffd246f5.entry.js +1 -0
  91. package/dist/types/components/ez-combo-box/ez-combo-box.d.ts +7 -1
  92. package/dist/types/components/ez-date-input/ez-date-input.d.ts +6 -1
  93. package/dist/types/components/ez-date-time-input/ez-date-time-input.d.ts +6 -1
  94. package/dist/types/components/ez-dialog/ez-dialog.d.ts +2 -0
  95. package/dist/types/components/ez-filter-input/ez-filter-input.d.ts +4 -11
  96. package/dist/types/components/ez-grid/controller/EzGridController.d.ts +10 -0
  97. package/dist/types/components/ez-grid/controller/ag-grid/AgGridController.d.ts +4 -0
  98. package/dist/types/components/ez-grid/controller/ag-grid/GridEditionManager.d.ts +18 -6
  99. package/dist/types/components/ez-grid/controller/ag-grid/components/EzGridCustomCellEditor.d.ts +2 -0
  100. package/dist/types/components/ez-grid/controller/ag-grid/editor/IUICellEditor.d.ts +1 -0
  101. package/dist/types/components/ez-grid/ez-grid.d.ts +10 -0
  102. package/dist/types/components/ez-list/ez-list.d.ts +3 -26
  103. package/dist/types/components/ez-number-input/ez-number-input.d.ts +4 -0
  104. package/dist/types/components/ez-popup/ez-popup.d.ts +2 -2
  105. package/dist/types/components/ez-search/ez-search.d.ts +6 -1
  106. package/dist/types/components/ez-text-area/ez-text-area.d.ts +17 -0
  107. package/dist/types/components/ez-text-input/ez-text-input.d.ts +4 -0
  108. package/dist/types/components/ez-time-input/ez-time-input.d.ts +4 -0
  109. package/dist/types/components.d.ts +101 -44
  110. package/dist/types/utils/FocusResolver.d.ts +5 -0
  111. package/dist/types/utils/form/DataBinder.d.ts +3 -0
  112. package/package.json +1 -1
  113. package/dist/cjs/RecordValidationProcessor-10846595.js +0 -108
  114. package/dist/esm/RecordValidationProcessor-9c6cc267.js +0 -105
  115. package/dist/ezui/p-188f1c4c.entry.js +0 -1
  116. package/dist/ezui/p-25ac5376.entry.js +0 -1
  117. package/dist/ezui/p-49456b34.entry.js +0 -1
  118. package/dist/ezui/p-5a90d7d1.entry.js +0 -1
  119. package/dist/ezui/p-62732269.entry.js +0 -1
  120. package/dist/ezui/p-86b6aa01.entry.js +0 -1
  121. package/dist/ezui/p-b3b94f72.entry.js +0 -1
  122. package/dist/ezui/p-b95632e8.entry.js +0 -1
  123. package/dist/ezui/p-bcd47eda.entry.js +0 -1
  124. package/dist/ezui/p-d2c06f38.entry.js +0 -1
  125. package/dist/ezui/p-dc4ada32.entry.js +0 -1
  126. package/dist/ezui/p-e85c48d7.entry.js +0 -1
  127. package/dist/ezui/p-f299c608.entry.js +0 -1
  128. package/dist/ezui/p-f42855b9.js +0 -1
  129. package/dist/ezui/p-f80ac647.entry.js +0 -1
@@ -0,0 +1,445 @@
1
+ 'use strict';
2
+
3
+ const core = require('@sankhyalabs/core');
4
+ const ApplicationUtils = require('./ApplicationUtils-c9d1205c.js');
5
+
6
+ const buildFieldMetadata = (descriptor, config) => {
7
+ let { name, label, group } = Object.assign({}, config);
8
+ let { readOnly, required } = Object.assign({}, config);
9
+ let props;
10
+ let userInterface;
11
+ if (descriptor) {
12
+ label = label || descriptor.label;
13
+ name = name || descriptor.name;
14
+ required = descriptor.required || (config === null || config === void 0 ? void 0 : config.required);
15
+ readOnly = descriptor.readOnly || (config === null || config === void 0 ? void 0 : config.readOnly);
16
+ props = descriptor.properties;
17
+ userInterface = descriptor.userInterface;
18
+ }
19
+ return {
20
+ name, label, group,
21
+ readOnly, required,
22
+ props,
23
+ userInterface: userInterface || core.UserInterface.SHORTTEXT
24
+ };
25
+ };
26
+
27
+ class RecordValidationProcessor {
28
+ constructor(dataUnit, validationSource, validator) {
29
+ this._dataUnit = dataUnit;
30
+ this._validationSource = validationSource;
31
+ this._validator = validator;
32
+ }
33
+ validate(isSaving = true) {
34
+ return new Promise((accept, reject) => {
35
+ const records = this._dataUnit.getModifiedRecords();
36
+ for (let i = 0; i < records.length; i++) {
37
+ const record = records[i];
38
+ const invalidResults = [];
39
+ let validationResult = this.validateRequired(record);
40
+ if (validationResult && !validationResult.isValid) {
41
+ invalidResults.push(validationResult);
42
+ }
43
+ if (this._validator) {
44
+ validationResult = this._validator.validateRecord(record);
45
+ if (validationResult && !validationResult.isValid) {
46
+ invalidResults.push(validationResult);
47
+ }
48
+ }
49
+ if (invalidResults.length > 0) {
50
+ if (!isSaving && invalidResults[0].invalidFields.length > 0) {
51
+ this._validationSource.markAsInvalid(invalidResults[0].invalidFields[0], record.__record__id__);
52
+ reject();
53
+ break;
54
+ }
55
+ this.processValidationResult(invalidResults, record.__record__id__);
56
+ reject();
57
+ break;
58
+ }
59
+ }
60
+ return accept();
61
+ });
62
+ }
63
+ validateRequired(record) {
64
+ const requiredFields = this._validationSource.getRequiredFields();
65
+ const invalidFields = [];
66
+ new Set(requiredFields).forEach(field => {
67
+ const value = record[field];
68
+ if (value == undefined || value === "") {
69
+ const errorMessage = this._validationSource.getMessageForField(field, record.__record__id__);
70
+ if (errorMessage) {
71
+ invalidFields.push({ name: field, message: errorMessage });
72
+ }
73
+ else {
74
+ invalidFields.push({ name: field, message: "Essa informação é obrigatória" });
75
+ }
76
+ }
77
+ });
78
+ if (invalidFields.length > 0) {
79
+ return { isValid: false, invalidFields, infoMessage: "Há pelo menos um campo obrigatório não preenchido." };
80
+ }
81
+ return undefined;
82
+ }
83
+ processValidationResult(validationResult, recordId) {
84
+ validationResult.forEach(invalidResult => {
85
+ const invalidFields = invalidResult.invalidFields;
86
+ this._dataUnit.savingCanceled(invalidFields, recordId);
87
+ if (invalidFields) {
88
+ invalidFields.forEach(field => {
89
+ this.markAsInvalid(field, recordId);
90
+ });
91
+ }
92
+ if (invalidResult.infoMessage) {
93
+ ApplicationUtils.ApplicationUtils.info(invalidResult.infoMessage);
94
+ }
95
+ if (invalidResult.errorMessage) {
96
+ const { errorTitle, errorMessage } = invalidResult;
97
+ ApplicationUtils.ApplicationUtils.error(errorTitle, errorMessage);
98
+ }
99
+ });
100
+ }
101
+ markAsInvalid(field, recordId) {
102
+ this._dataUnit.setInvalidField(field.name, field.message, recordId);
103
+ this._validationSource.markAsInvalid(field, recordId);
104
+ }
105
+ }
106
+
107
+ class DataBinder {
108
+ constructor(dataUnit) {
109
+ this.onDataUnitEvent = (action) => {
110
+ var _a, _b;
111
+ switch (action.type) {
112
+ case core.Action.DATA_LOADED:
113
+ case core.Action.DATA_SAVED:
114
+ case core.Action.RECORDS_REMOVED:
115
+ case core.Action.RECORDS_ADDED:
116
+ case core.Action.RECORDS_COPIED:
117
+ case core.Action.EDITION_CANCELED:
118
+ case core.Action.SELECTION_CHANGED:
119
+ case core.Action.NEXT_SELECTED:
120
+ case core.Action.PREVIOUS_SELECTED:
121
+ this.clearInvalid();
122
+ case core.Action.DATA_CHANGED:
123
+ case core.Action.CHANGE_UNDONE:
124
+ case core.Action.CHANGE_REDONE:
125
+ case core.Action.RECORD_LOADED:
126
+ (_a = this._fields) === null || _a === void 0 ? void 0 : _a.forEach(field => {
127
+ this.updateValue(field.fieldName, field.field);
128
+ });
129
+ this.clearFieldError(Object.keys(action.payload)[0]);
130
+ break;
131
+ case core.Action.FIELD_INVALIDATED:
132
+ (_b = this._fields) === null || _b === void 0 ? void 0 : _b.forEach(field => {
133
+ this.updateErrorMessage(field.fieldName, field.field);
134
+ });
135
+ break;
136
+ }
137
+ };
138
+ this._uuid = core.StringUtils.generateUUID();
139
+ this._fields = new Map();
140
+ this._dataUnit = dataUnit;
141
+ this.applyDefaultValues();
142
+ this._dataUnit.subscribe(this.onDataUnitEvent);
143
+ this._dataUnit.addInterceptor(this);
144
+ this.setContextDataBinder(dataUnit);
145
+ }
146
+ get dataBinderId() {
147
+ return this._uuid;
148
+ }
149
+ setContextDataBinder(dataUnit) {
150
+ const dataBindersByDataUnit = core.ApplicationContext.getContextValue("__DATABINDER_BY_DATAUNIT__") || new Map();
151
+ const dataBinders = [...(dataBindersByDataUnit.get(dataUnit.dataUnitId) || []), this];
152
+ dataBindersByDataUnit.set(dataUnit.dataUnitId, dataBinders);
153
+ core.ApplicationContext.setContextValue("__DATABINDER_BY_DATAUNIT__", dataBindersByDataUnit);
154
+ }
155
+ applyDefaultValues() {
156
+ const recordIds = (this._dataUnit.getAddedRecords() || []).map(r => r.__record__id__);
157
+ if (recordIds.length > 0) {
158
+ const defaultValues = this.getDefaultValues();
159
+ if (defaultValues) {
160
+ Object.keys(defaultValues).forEach(field => {
161
+ this._dataUnit.setFieldValue(field, defaultValues[field], recordIds);
162
+ });
163
+ }
164
+ }
165
+ }
166
+ bind(fields, currentContextName, formMetadata, recordsValidator) {
167
+ fields.forEach(fieldElement => {
168
+ const { fieldName, contextName } = fieldElement.dataset;
169
+ if (contextName == undefined || contextName === currentContextName) {
170
+ this.updateBind(fieldName, fieldElement);
171
+ }
172
+ });
173
+ this._formMetadata = formMetadata;
174
+ this._recordValidatorProcessor = new RecordValidationProcessor(this._dataUnit, {
175
+ getRequiredFields: () => this.getFormRequiredFields(),
176
+ markAsInvalid: field => this.markInvalid(field),
177
+ getMessageForField: field => this.getErrorMessage(field),
178
+ }, recordsValidator);
179
+ }
180
+ getFormRequiredFields() {
181
+ return this._formMetadata.getRequiredFields();
182
+ }
183
+ disconnectDataUnit() {
184
+ const dataBindersByDataUnit = core.ApplicationContext.getContextValue("__DATABINDER_BY_DATAUNIT__") || new Map();
185
+ const dataBinders = dataBindersByDataUnit.get(this._dataUnit.dataUnitId);
186
+ const dataBindersFiltered = dataBinders.filter((dataBinder) => dataBinder.dataBinderId !== this.dataBinderId);
187
+ dataBindersByDataUnit.set(this._dataUnit.dataUnitId, dataBindersFiltered);
188
+ core.ApplicationContext.setContextValue("__DATABINDER_BY_DATAUNIT__", dataBindersByDataUnit);
189
+ }
190
+ onDisconnectedCallback() {
191
+ this._dataUnit.unsubscribe(this.onDataUnitEvent);
192
+ this._dataUnit.removeInterceptor(this);
193
+ this.disconnectDataUnit();
194
+ }
195
+ getCurrentRecordId() {
196
+ const record = this._dataUnit.getSelectedRecord();
197
+ return record === null || record === void 0 ? void 0 : record.__record__id__;
198
+ }
199
+ markInvalid(field) {
200
+ if (this._fields.has(field.name)) {
201
+ const fieldElement = this._fields.get(field.name).field;
202
+ this.updateErrorMessage(field.name, fieldElement, field.message);
203
+ }
204
+ }
205
+ setFocus(fieldName) {
206
+ if (!this._fields.has(fieldName)) {
207
+ return;
208
+ }
209
+ const fieldElement = this._fields.get(fieldName).field;
210
+ if (typeof fieldElement["setFocus"] != "function") {
211
+ return;
212
+ }
213
+ fieldElement["setFocus"]();
214
+ }
215
+ clearInvalid(recordId) {
216
+ this._dataUnit.clearInvalid(recordId);
217
+ this._fields.forEach(fieldBinder => {
218
+ const fieldElement = fieldBinder.field;
219
+ fieldElement["errorMessage"] = "";
220
+ });
221
+ }
222
+ clearFieldError(fieldName) {
223
+ var _a;
224
+ const field = (_a = this._fields.get(fieldName)) === null || _a === void 0 ? void 0 : _a.field;
225
+ if (field["errorMessage"]) {
226
+ field["errorMessage"] = "";
227
+ this._dataUnit.clearInvalid(this.getCurrentRecordId(), fieldName);
228
+ }
229
+ }
230
+ updateValue(fieldName, field) {
231
+ const bind = this._fields.get(fieldName);
232
+ try {
233
+ if (bind) {
234
+ bind.listen = false;
235
+ }
236
+ field["value"] = this._dataUnit.getFieldValue(fieldName);
237
+ this.updateErrorMessage(fieldName, field);
238
+ }
239
+ finally {
240
+ if (bind) {
241
+ bind.listen = true;
242
+ }
243
+ }
244
+ }
245
+ validate() {
246
+ return this._recordValidatorProcessor.validate();
247
+ }
248
+ static async validateByDataunit(dataUnit) {
249
+ try {
250
+ const dataBinders = this.getDataBindersByDataUnit(dataUnit);
251
+ await Promise.all(dataBinders.map((dataBinder) => dataBinder.validate()));
252
+ return true;
253
+ }
254
+ catch (_a) {
255
+ return false;
256
+ }
257
+ }
258
+ static getDataBindersByDataUnit(dataUnit) {
259
+ const dataBindersByDataUnit = core.ApplicationContext.getContextValue("__DATABINDER_BY_DATAUNIT__");
260
+ return dataBindersByDataUnit.get(dataUnit.dataUnitId) || [];
261
+ }
262
+ updateErrorMessage(fieldName, field, message) {
263
+ if (message == undefined) {
264
+ message = this._dataUnit.getInvalidMessage(this.getCurrentRecordId(), fieldName);
265
+ }
266
+ if (!field["errorMessage"]) {
267
+ field["errorMessage"] = message;
268
+ }
269
+ }
270
+ getErrorMessage(fieldName) {
271
+ if (this._fields.has(fieldName)) {
272
+ const fieldElement = this._fields.get(fieldName).field;
273
+ return fieldElement["errorMessage"];
274
+ }
275
+ return undefined;
276
+ }
277
+ updateBind(fieldName, field) {
278
+ const oldBind = this._fields.get(fieldName);
279
+ if (oldBind) {
280
+ oldBind.destroy();
281
+ }
282
+ this.bindSearchOptionsLoader(fieldName, field);
283
+ field["value"] = this._dataUnit.getFieldValue(fieldName);
284
+ this.updateErrorMessage(fieldName, field);
285
+ this._fields.set(fieldName, Bind.create(fieldName, field, (fieldName, waitingChange) => this.changeStarted(fieldName, waitingChange), (fieldName) => this.cancelWaitingChange(fieldName), (fieldName, newValue) => this.setFieldValue(fieldName, newValue)));
286
+ this.applyEzUploadContext(fieldName, field);
287
+ }
288
+ changeStarted(fieldName, waitingChange) {
289
+ /**
290
+ * se o waitingChange não é blocante, add um event listener pra
291
+ * fazer o accept da promise
292
+ *
293
+ * se não tiver promise no waitingChange, eu crio uma e resolvo no bind
294
+ *
295
+ *
296
+ */
297
+ if (this._dataUnit.records.length === 0) {
298
+ this._dataUnit.addRecord();
299
+ }
300
+ if (!waitingChange.blocking && waitingChange.promise == undefined) {
301
+ const bind = this._fields.get(fieldName);
302
+ if (bind) {
303
+ waitingChange.promise = new Promise((resolve, reject) => {
304
+ bind.waitingChangePromiseResolve = resolve;
305
+ bind.waitingChangePromiseReject = reject;
306
+ });
307
+ }
308
+ }
309
+ this._dataUnit.startChange(fieldName, waitingChange);
310
+ }
311
+ cancelWaitingChange(fieldName) {
312
+ if (this._dataUnit.waitingForChange(fieldName)) {
313
+ this._dataUnit.cancelWaitingChange(fieldName);
314
+ const bind = this._fields.get(fieldName);
315
+ if (bind) {
316
+ bind.rejectWaitingChange(new core.WaitingChangeException("Change canceled", fieldName));
317
+ }
318
+ }
319
+ }
320
+ setFieldValue(fieldName, newValue) {
321
+ if (this._dataUnit.records.length === 0) {
322
+ this._dataUnit.addRecord();
323
+ }
324
+ this._dataUnit.clearInvalid(this.getCurrentRecordId(), fieldName);
325
+ const record = this._dataUnit.getSelectedRecord();
326
+ this._dataUnit.setFieldValue(fieldName, newValue, record ? [record.__record__id__] : undefined);
327
+ if (this._dataUnit.waitingForChange(fieldName)) {
328
+ const bind = this._fields.get(fieldName);
329
+ if (bind) {
330
+ bind.acceptWaitingChange();
331
+ }
332
+ }
333
+ }
334
+ bindSearchOptionsLoader(fieldName, field) {
335
+ if (field.nodeName === "EZ-SEARCH" && field["optionLoader"] == undefined) {
336
+ const loader = core.ApplicationContext.getContextValue("__EZUI__SEARCH__OPTION__LOADER__");
337
+ if (loader) {
338
+ field["optionLoader"] = (arg) => {
339
+ return loader(arg, fieldName, this._dataUnit);
340
+ };
341
+ }
342
+ }
343
+ }
344
+ applyEzUploadContext(fieldName, field) {
345
+ var _a, _b;
346
+ if (field.nodeName === "EZ-UPLOAD") {
347
+ field["urlUpload"] = core.ApplicationContext.getContextValue("__EZUI__UPLOAD__ADD__URL__");
348
+ field["urlDelete"] = core.ApplicationContext.getContextValue("__EZUI__UPLOAD__DEL__URL__");
349
+ const descriptor = this._dataUnit.getField(fieldName);
350
+ const destination = (_a = descriptor.properties) === null || _a === void 0 ? void 0 : _a.DESTINATION;
351
+ if (destination) {
352
+ field["requestHeaders"] = { XTRAINF: `{"destination": "${destination}"}` };
353
+ }
354
+ field["maxFiles"] = ((_b = descriptor.properties) === null || _b === void 0 ? void 0 : _b.MAX_FILES) || 0;
355
+ }
356
+ }
357
+ interceptAction(action) {
358
+ if (action.type === core.Action.RECORDS_COPIED) {
359
+ const cleanFields = this._formMetadata.getCleanOnCopyFields();
360
+ if (cleanFields) {
361
+ const records = action.payload;
362
+ return new core.DataUnitAction(core.Action.RECORDS_COPIED, records.map(record => {
363
+ const newRecord = Object.assign({}, record);
364
+ cleanFields.forEach(fieldName => delete newRecord[fieldName]);
365
+ return newRecord;
366
+ }));
367
+ }
368
+ }
369
+ if (action.type === core.Action.SAVING_DATA) {
370
+ return new Promise((resolve) => {
371
+ this.validate()
372
+ .then(() => resolve(action))
373
+ .catch(() => { });
374
+ });
375
+ }
376
+ if (action.type === core.Action.RECORDS_ADDED) {
377
+ const defaultValues = this.getDefaultValues();
378
+ if (defaultValues) {
379
+ const records = action.payload;
380
+ return new core.DataUnitAction(core.Action.RECORDS_ADDED, records.map(record => {
381
+ return Object.assign(Object.assign({}, record), defaultValues);
382
+ }));
383
+ }
384
+ }
385
+ return action;
386
+ }
387
+ getDefaultValues() {
388
+ var _a;
389
+ const rawDefaultValues = (_a = this._formMetadata) === null || _a === void 0 ? void 0 : _a.getDefaultValues();
390
+ if (rawDefaultValues) {
391
+ const defaultValues = {};
392
+ for (const field in rawDefaultValues) {
393
+ defaultValues[field] = this._dataUnit.valueFromString(field, rawDefaultValues[field]);
394
+ }
395
+ return defaultValues;
396
+ }
397
+ return undefined;
398
+ }
399
+ }
400
+ class Bind {
401
+ constructor() {
402
+ this.listen = true;
403
+ this.startChangeEventName = "ezStartChange";
404
+ this.cancelWaitingChangeEventName = "ezCancelWaitingChange";
405
+ this.changeEventName = "ezChange";
406
+ }
407
+ destroy() {
408
+ this.field.removeEventListener(this.startChangeEventName, this.startChangeListener);
409
+ this.field.removeEventListener(this.cancelWaitingChangeEventName, this.cancelWaitingChangeListener);
410
+ this.field.removeEventListener(this.changeEventName, this.changeListener);
411
+ }
412
+ acceptWaitingChange() {
413
+ if (this.waitingChangePromiseResolve) {
414
+ this.waitingChangePromiseResolve();
415
+ this.waitingChangePromiseReject = undefined;
416
+ this.waitingChangePromiseResolve = undefined;
417
+ }
418
+ }
419
+ rejectWaitingChange(reason) {
420
+ if (this.waitingChangePromiseReject) {
421
+ this.waitingChangePromiseReject(reason);
422
+ this.waitingChangePromiseReject = undefined;
423
+ this.waitingChangePromiseResolve = undefined;
424
+ }
425
+ }
426
+ static create(fieldName, field, startChangeCallback, cancelWaitingChangeCallback, changeCallback) {
427
+ const b = new Bind();
428
+ b.field = field;
429
+ b.fieldName = fieldName;
430
+ b.startChangeListener = (evt) => { if (b.listen)
431
+ startChangeCallback(fieldName, evt.detail); };
432
+ b.field.addEventListener(b.startChangeEventName, b.startChangeListener);
433
+ b.cancelWaitingChangeListener = () => { if (b.listen)
434
+ cancelWaitingChangeCallback(fieldName); };
435
+ b.field.addEventListener(b.cancelWaitingChangeEventName, b.cancelWaitingChangeListener);
436
+ b.changeListener = (evt) => { if (b.listen)
437
+ changeCallback(fieldName, evt.detail); };
438
+ b.field.addEventListener(b.changeEventName, b.changeListener);
439
+ return b;
440
+ }
441
+ }
442
+
443
+ exports.DataBinder = DataBinder;
444
+ exports.RecordValidationProcessor = RecordValidationProcessor;
445
+ exports.buildFieldMetadata = buildFieldMetadata;
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ class FocusResolver {
4
+ static resolveFocus(element, selectText = true) {
5
+ var _a;
6
+ if (!element)
7
+ return;
8
+ (_a = element.focus) === null || _a === void 0 ? void 0 : _a.call(element);
9
+ if (element.setFocus) {
10
+ element.setFocus({ selectText });
11
+ return;
12
+ }
13
+ this.resolveFocusOnChild(element, selectText);
14
+ }
15
+ static resolveFocusOnChild(element, selectText = true) {
16
+ var _a, _b;
17
+ if (this.isGridCell(element) && element.firstElementChild) {
18
+ this.resolveFocusOnChild(element.firstElementChild);
19
+ return;
20
+ }
21
+ if (!element || !element.classList.contains('hydrated'))
22
+ return;
23
+ const firstChild = element.firstElementChild;
24
+ if (!(firstChild === null || firstChild === void 0 ? void 0 : firstChild.focus) && !(firstChild === null || firstChild === void 0 ? void 0 : firstChild.setFocus))
25
+ return;
26
+ (_a = firstChild === null || firstChild === void 0 ? void 0 : firstChild.focus) === null || _a === void 0 ? void 0 : _a.call(firstChild);
27
+ (_b = firstChild === null || firstChild === void 0 ? void 0 : firstChild.setFocus) === null || _b === void 0 ? void 0 : _b.call(firstChild, { selectText });
28
+ }
29
+ static isGridCell(element) {
30
+ var _a;
31
+ return ((_a = element === null || element === void 0 ? void 0 : element.getAttribute) === null || _a === void 0 ? void 0 : _a.call(element, "role")) === 'gridcell';
32
+ }
33
+ }
34
+
35
+ exports.FocusResolver = FocusResolver;
@@ -6,7 +6,7 @@ const index = require('./index-a7b0c73d.js');
6
6
  const core = require('@sankhyalabs/core');
7
7
  const CSSVarsUtils = require('./CSSVarsUtils-10c9d5b4.js');
8
8
 
9
- const ezCardItemCss = ":host { \n /*@doc Define o tamanho da fonte do componente.*/\n --ez-card-item--font-size: var(--text--medium, 14px);\n\n /*@doc Define o tamanho da fonte do componente no modo compacto.*/\n --ez-card-item--font-size-compacted: var(--text--extra-small, 10px);\n\n /*@doc Define a família da fonte do componente.*/\n --ez-card-item--font-family: var(--font-pattern, Arial);\n\n /*@doc Define o peso da fonte do componente.*/\n --ez-card-item--font-weight: var(--text-weight--medium, 400);\n\n /*@doc Define o peso da fonte do title do componente.*/\n --ez-card-item--font-weight-medium: var(--text-weight--medium, 400);\n\n /*@doc Define a cor da fonte do componente.*/\n --ez-card-item--color: var(--text--primary, #626e82);\n\n /*@doc Define a cor da fonte da key do componente.*/\n --ez-card-item__key--color: var(--text--primary, #626e82);\n\n /*@doc Define a cor da fonte do label do detalhe do componente.*/\n --ez-card-item__detail-label--color: var(--text--secondary, #A2ABB9);\n\n /*@doc Define o espaçamento inferior dos detalhes do componente.*/\n --ez-card-item__detail--padding-bottom: var(--space--extra-small, 3px);\n\n /*@doc Define a cor do highlight / marcação nos textos do componente.*/\n --ez-card-item__highlight--color: var(--color--primary-300, #E2F4EF);\n\n /*@doc Define o peso da fonte do componente.*/\n --ez-card-item--detail-label--font-weight: var(--text-weight--large, 400);\n\n width: 100%;\n display: flex;\n cursor: pointer;\n}\n\n.card-item {\n display: flex;\n flex-direction: column;\n width: 100%;\n cursor: pointer;\n z-index: 0;\n position: relative;\n container-type: inline-size;\n container-name: box;\n white-space: pre-line;\n}\n\n.card-item__detail {\n display: inline-block;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n opacity: var(--opacity--soft);\n cursor: pointer;\n}\n\n\n\n.card-item__expanded {\n padding: var(--space--medium);\n}\n\n.card-item:hover {\n background: #F0F3F7;\n border-radius: 12px;\n}\n\n.card-item__title {\n display: flex;\n align-items: center;\n line-height: 18px;\n cursor: pointer;\n\n /*public*/\n font-size: var(--ez-card-item--font-size);\n font-family: var(--ez-card-item--font-family);\n font-weight: var(--ez-card-item--font-weight-medium);\n color: var(--ez-card-item--color);\n gap: var(--space--small, 6px);\n}\n\n.card-item__key {\n /*public*/\n color: var(--ez-card-item__key--color);\n}\n\n.card-item__details {\n display: flex;\n flex-direction: column;\n cursor: pointer;\n justify-content: space-between;\n width: 100%;\n}\n\n.card-item__details-container__left {\n display: flex;\n flex-direction: column;\n white-space: pre-line;\n cursor: pointer;\n width: 50%;\n}\n\n.card-item__details-container__right {\n display: flex;\n flex-direction: column;\n white-space: pre-line;\n width: 50%;\n cursor: pointer;\n}\n\n.card-item__detail-default:not(:last-child) {\n padding-bottom: var(--ez-card-item__detail--padding-bottom);\n}\n\n.card-item__detail-label {\n cursor: pointer;\n\n /*public*/\n font-size: var(--ez-card-item--font-size);\n font-family: var(--ez-card-item--font-family);\n font-weight: var(--ez-card-item--detail-label--font-weight);\n}\n\n.card-item__detail-value {\n cursor: pointer;\n line-break: anywhere;\n\n /*public*/\n font-size: var(--ez-card-item--font-size);\n font-family: var(--ez-card-item--font-family);\n font-weight: var(--ez-card-item--font-weight);\n}\n\n.card-item__highlight {\n position: relative;\n border-radius: 8px;\n z-index: -1;\n\n /*public*/\n background-color: var(--ez-card-item__highlight--color);\n outline: 2px solid var(--ez-card-item__highlight--color);\n box-shadow: -4px 0px 0px 0px var(--ez-card-item__highlight--color), \n 4px 0px 0px 0px var(--ez-card-item__highlight--color);\n}\n\n.card-item__content{\n display: flex;\n align-items: center;\n}\n\n.card-item__details-container_default{\n display: flex;\n}\n\n.card-item__details-slot{\n margin-left: auto;\n}\n\n/* Modo compacto */\n.card-item__compacted {\n padding: var(--space--2xs, 8px) var(--space--3xs, 4px);\n}\n\n.card-item__detail-label-compacted {\n font-size: var(--ez-card-item--font-size-compacted);\n}\n\n.card-item__detail-value-compacted {\n font-size: var(--ez-card-item--font-size-compacted);\n}\n\n.card-item__title-compacted {\n font-size: var(--ez-card-item--font-size-compacted);\n}\n\n.card-item__details-container__left-compacted{\n width: 100%;\n}\n\n.card-item__details-container__right-compacted {\n width: 100%;\n}\n\n\n@container box (max-width: 550px) {\n .card-item__details {\n flex-direction: column;\n }\n\n .card-item__details-container__left {\n width: 100%;\n }\n \n .card-item__details-container__right {\n width: 100%;\n }\n}\n\n@container box (max-width: 200px) {\n .card-item__title {\n font-size: 10px;\n }\n\n .card-item__detail-label {\n font-size: 10px;\n }\n\n .card-item__detail-value {\n font-size: 10px;\n }\n\n}";
9
+ const ezCardItemCss = ":host { \n /*@doc Define o tamanho da fonte do componente.*/\n --ez-card-item--font-size: var(--text--medium, 14px);\n\n /*@doc Define o tamanho da fonte do componente no modo compacto.*/\n --ez-card-item--font-size-compacted: var(--text--extra-small, 10px);\n\n /*@doc Define a família da fonte do componente.*/\n --ez-card-item--font-family: var(--font-pattern, Arial);\n\n /*@doc Define o peso da fonte do componente.*/\n --ez-card-item--font-weight: var(--text-weight--medium, 400);\n\n /*@doc Define o peso da fonte do title do componente.*/\n --ez-card-item--font-weight-large: var(--text-weight--large, 600);\n\n /*@doc Define a cor da fonte do componente.*/\n --ez-card-item--color: var(--text--primary, #626e82);\n\n /*@doc Define a cor da fonte da key do componente.*/\n --ez-card-item__key--color: var(--text--primary, #626e82);\n\n /*@doc Define a cor da fonte do label do detalhe do componente.*/\n --ez-card-item__detail-label--color: var(--text--secondary, #A2ABB9);\n\n /*@doc Define o espaçamento inferior dos detalhes do componente.*/\n --ez-card-item__detail--padding-bottom: var(--space--extra-small, 3px);\n\n /*@doc Define o espaçamento inferior do title do componente.*/\n --ez-card-item__title--padding-bottom: var(--space--extra-small, 3px);\n\n /*@doc Define a cor do highlight / marcação nos textos do componente.*/\n --ez-card-item__highlight--color: var(--color--primary-300, #E2F4EF);\n\n /*@doc Define o peso da fonte do componente.*/\n --ez-card-item--detail-label--font-weight: var(--text-weight--large, 400);\n\n width: 100%;\n display: flex;\n cursor: pointer;\n}\n\n.card-item {\n display: flex;\n flex-direction: column;\n width: 100%;\n cursor: pointer;\n z-index: 0;\n position: relative;\n container-type: inline-size;\n container-name: box;\n white-space: pre-line;\n}\n\n.card-item__detail{\n display: inline-block;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n opacity: var(--opacity--soft);\n}\n\n\n\n.card-item__expanded {\n padding: var(--space--medium);\n}\n\n.card-item:hover {\n background: #F0F3F7;\n border-radius: 12px;\n}\n\n.card-item__title {\n display: flex;\n align-items: center;\n line-height: 18px;\n cursor: pointer;\n\n /*public*/\n font-size: var(--ez-card-item--font-size);\n font-family: var(--ez-card-item--font-family);\n font-weight: var(--ez-card-item--font-weight-large);\n color: var(--ez-card-item--color);\n padding-bottom: var(--ez-card-item__title--padding-bottom);\n gap: var(--space--small, 6px);\n}\n\n.card-item__key {\n /*public*/\n color: var(--ez-card-item__key--color);\n}\n\n.card-item__details {\n display: flex;\n flex-direction: column;\n cursor: pointer;\n justify-content: space-between;\n width: 100%;\n}\n\n.card-item__details-container__left {\n display: flex;\n flex-direction: column;\n white-space: pre-line;\n cursor: pointer;\n width: 50%;\n}\n\n.card-item__details-container__right {\n display: flex;\n flex-direction: column;\n white-space: pre-line;\n width: 50%;\n cursor: pointer;\n}\n\n.card-item__detail{\n cursor: pointer;\n}\n\n.card-item__detail-default:not(:last-child) {\n padding-bottom: var(--ez-card-item__detail--padding-bottom);\n}\n\n.card-item__detail-label {\n cursor: pointer;\n\n /*public*/\n font-size: var(--ez-card-item--font-size);\n font-family: var(--ez-card-item--font-family);\n font-weight: var(--ez-card-item--detail-label--font-weight);\n}\n\n.card-item__detail-value {\n cursor: pointer;\n line-break: anywhere;\n\n /*public*/\n font-size: var(--ez-card-item--font-size);\n font-family: var(--ez-card-item--font-family);\n font-weight: var(--ez-card-item--font-weight);\n}\n\n.card-item__highlight {\n position: relative;\n border-radius: 8px;\n z-index: -1;\n\n /*public*/\n background-color: var(--ez-card-item__highlight--color);\n outline: 2px solid var(--ez-card-item__highlight--color);\n box-shadow: -4px 0px 0px 0px var(--ez-card-item__highlight--color), \n 4px 0px 0px 0px var(--ez-card-item__highlight--color);\n}\n\n.card-item__content{\n display: flex;\n align-items: center;\n}\n\n.card-item__details-container_default{\n display: flex;\n}\n\n.card-item__details-slot{\n margin-left: auto;\n}\n\n/* Modo compacto */\n.card-item__compacted {\n padding: var(--space--medium);\n padding-bottom: 0px;\n padding-right: 0px;\n}\n\n.card-item__detail-label-compacted {\n font-size: var(--ez-card-item--font-size-compacted);\n}\n\n.card-item__detail-value-compacted {\n font-size: var(--ez-card-item--font-size-compacted);\n}\n\n.card-item__title-compacted {\n font-size: var(--ez-card-item--font-size-compacted);\n}\n\n.card-item__details-container__left-compacted{\n width: 100%;\n}\n\n.card-item__details-container__right-compacted {\n width: 100%;\n}\n\n\n@container box (max-width: 550px) {\n .card-item__details {\n flex-direction: column;\n }\n\n .card-item__details-container__left {\n width: 100%;\n }\n \n .card-item__details-container__right {\n width: 100%;\n }\n}\n\n@container box (max-width: 200px) {\n .card-item__title {\n font-size: 10px;\n }\n\n .card-item__detail-label {\n font-size: 10px;\n }\n\n .card-item__detail-value {\n font-size: 10px;\n }\n\n}";
10
10
 
11
11
  const EzCardItem = class {
12
12
  constructor(hostRef) {
@@ -60,7 +60,7 @@ const EzCardItem = class {
60
60
  };
61
61
  EzCardItem.style = ezCardItemCss;
62
62
 
63
- const ezFilterInputCss = ":host{--ez-filter-slot--right--width:70px;display:block;width:100%}.pointerCursor{cursor:pointer}ez-text-input{--ez-text-input__icon--right--width:var(--ez-filter-slot--right--width)}";
63
+ const ezFilterInputCss = ":host{display:block;width:100%}";
64
64
 
65
65
  const EzFilterInput = class {
66
66
  constructor(hostRef) {
@@ -68,19 +68,15 @@ const EzFilterInput = class {
68
68
  this.ezChange = index.createEvent(this, "ezChange", 7);
69
69
  this.ezSearching = index.createEvent(this, "ezSearching", 7);
70
70
  this.ezFocusIn = index.createEvent(this, "ezFocusIn", 7);
71
- this.ezIconClick = index.createEvent(this, "ezIconClick", 7);
72
71
  this._searchingText = "";
73
72
  this.handleFocus = () => {
74
- this.ezFocusIn.emit();
75
- if (!this.asyncSearch) {
76
- return;
77
- }
78
73
  if (this._searchingText === "") {
79
74
  this._textInput.value = "";
80
75
  }
81
76
  else {
82
77
  this._textInput.value = this._searchingText;
83
78
  }
79
+ this.ezFocusIn.emit();
84
80
  };
85
81
  this.label = undefined;
86
82
  this.value = undefined;
@@ -90,7 +86,7 @@ const EzFilterInput = class {
90
86
  this.mode = "regular";
91
87
  this.asyncSearch = false;
92
88
  this.canShowError = true;
93
- this.enabledIconClick = false;
89
+ this.autoFocus = false;
94
90
  }
95
91
  observeLabel() {
96
92
  if (this._textInput) {
@@ -111,8 +107,8 @@ const EzFilterInput = class {
111
107
  /**
112
108
  * Aplica o foco no campo.
113
109
  */
114
- async setFocus() {
115
- this._textInput.setFocus();
110
+ async setFocus(options) {
111
+ this._textInput.setFocus(options);
116
112
  }
117
113
  /**
118
114
  * Remove o foco do campo.
@@ -152,14 +148,6 @@ const EzFilterInput = class {
152
148
  this._textInput.value = this.value;
153
149
  }
154
150
  }
155
- /**
156
- * Método usado para emitir o evento de clique no ícone
157
- */
158
- async handleIconClick() {
159
- if (this.enabledIconClick) {
160
- this.ezIconClick.emit(true);
161
- }
162
- }
163
151
  handleChange(evt) {
164
152
  const newValue = evt.detail;
165
153
  this.errorMessage = "";
@@ -173,10 +161,15 @@ const EzFilterInput = class {
173
161
  }
174
162
  componentDidLoad() {
175
163
  CSSVarsUtils.CSSVarsUtils.applyVarsTextInput(this._elem, this._textInput);
164
+ if (this.autoFocus) {
165
+ requestAnimationFrame(() => {
166
+ this.setFocus({ selectText: true });
167
+ });
168
+ }
176
169
  }
177
170
  render() {
178
171
  core.ElementIDUtils.addIDInfoIfNotExists(this._elem, 'input');
179
- return (index.h("ez-text-input", { "data-element-id": core.ElementIDUtils.getInternalIDInfo("textInput"), ref: elem => this._textInput = elem, label: this.label, onEzChange: evt => this.handleChange(evt), value: this.value, enabled: this.enabled, errorMessage: this.errorMessage, restrict: this.restrict, mode: this.mode, onFocusin: this.handleFocus, canShowError: this.canShowError }, index.h("ez-icon", { slot: "leftIcon", iconName: "search", onClick: () => this.handleIconClick(), class: this.enabledIconClick ? 'pointerCursor' : '' }), index.h("slot", { name: "right", slot: "rightIcon" })));
172
+ return (index.h("ez-text-input", { "data-element-id": core.ElementIDUtils.getInternalIDInfo("textInput"), ref: elem => this._textInput = elem, label: this.label, onEzChange: evt => this.handleChange(evt), value: this.value, enabled: this.enabled, errorMessage: this.errorMessage, restrict: this.restrict, mode: this.mode, onFocusin: this.handleFocus, canShowError: this.canShowError }, index.h("ez-icon", { slot: "leftIcon", iconName: "search" })));
180
173
  }
181
174
  get _elem() { return index.getElement(this); }
182
175
  static get watchers() { return {