@sankhyalabs/sankhyablocks 10.1.0-dev.22 → 10.1.0-dev.24

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 (160) hide show
  1. package/dist/cjs/{ConfigStorage-a4e1e518.js → ConfigStorage-f61eedd2.js} +2 -2
  2. package/dist/cjs/{DataFetcher-0b6aa084.js → DataFetcher-0c830777.js} +2 -2743
  3. package/dist/cjs/{ISave-2c455a77.js → ISave-e1e8ec96.js} +1 -1
  4. package/dist/cjs/ImageUtils-5e3f406b.js +142 -0
  5. package/dist/cjs/{SnkFormConfigManager-b8c81493.js → SnkFormConfigManager-421f3581.js} +2 -2
  6. package/dist/cjs/SnkMessageBuilder-32950342.js +2785 -0
  7. package/dist/cjs/{SnkMultiSelectionListDataSource-03b58f5a.js → SnkMultiSelectionListDataSource-d30a96ef.js} +4 -4
  8. package/dist/cjs/{auth-fetcher-7e7796c9.js → auth-fetcher-761d54c4.js} +1 -1
  9. package/dist/cjs/{dataunit-fetcher-8dffbcdf.js → dataunit-fetcher-86e286bb.js} +3 -2
  10. package/dist/cjs/{form-config-fetcher-5516d68a.js → form-config-fetcher-227b2db2.js} +1 -1
  11. package/dist/cjs/index-1894343a.js +4 -0
  12. package/dist/cjs/loader.cjs.js +1 -1
  13. package/dist/cjs/pesquisa-grid_2.cjs.entry.js +5 -4
  14. package/dist/cjs/sankhyablocks.cjs.js +1 -1
  15. package/dist/cjs/snk-actions-button_9.cjs.entry.js +6 -5
  16. package/dist/cjs/snk-application.cjs.entry.js +9 -7
  17. package/dist/cjs/snk-attach.cjs.entry.js +7 -6
  18. package/dist/cjs/snk-crud.cjs.entry.js +6 -5
  19. package/dist/cjs/snk-data-exporter.cjs.entry.js +6 -5
  20. package/dist/cjs/{snk-data-unit-036ce58c.js → snk-data-unit-c06263da.js} +11 -11
  21. package/dist/cjs/snk-data-unit.cjs.entry.js +4 -3
  22. package/dist/cjs/snk-detail-view.cjs.entry.js +11 -10
  23. package/dist/cjs/snk-filter-bar_4.cjs.entry.js +4 -3
  24. package/dist/cjs/snk-filter-modal-item.cjs.entry.js +4 -3
  25. package/dist/cjs/snk-form-view.cjs.entry.js +56 -2
  26. package/dist/cjs/snk-form_2.cjs.entry.js +5 -4
  27. package/dist/cjs/snk-grid.cjs.entry.js +7 -6
  28. package/dist/cjs/{snk-guides-viewer-164c063e.js → snk-guides-viewer-92dadfa6.js} +9 -8
  29. package/dist/cjs/snk-guides-viewer.cjs.entry.js +8 -7
  30. package/dist/cjs/snk-image-input.cjs.entry.js +148 -0
  31. package/dist/cjs/snk-personalized-filter.cjs.entry.js +4 -3
  32. package/dist/cjs/snk-pesquisa.cjs.entry.js +5 -4
  33. package/dist/cjs/snk-simple-crud.cjs.entry.js +8 -7
  34. package/dist/collection/collection-manifest.json +1 -0
  35. package/dist/collection/components/snk-application/errorhandler/snk-error-handler.js +1 -0
  36. package/dist/collection/components/snk-application/snk-application.js +1 -1
  37. package/dist/collection/components/snk-crud/subcomponents/snk-detail-view/snk-detail-view.js +1 -1
  38. package/dist/collection/components/snk-crud/subcomponents/snk-form-view.js +75 -2
  39. package/dist/collection/components/snk-crud/subcomponents/snk-guides-viewer.js +4 -3
  40. package/dist/collection/components/snk-image-input/snk-image-input.css +3 -0
  41. package/dist/collection/components/snk-image-input/snk-image-input.js +326 -0
  42. package/dist/collection/components/snk-image-input/utils/ImageUtils.js +133 -0
  43. package/dist/collection/lib/message/messageResourceEnUSUtils.js +2 -0
  44. package/dist/collection/lib/message/messageResourceEsESUtils.js +2 -0
  45. package/dist/collection/lib/message/messageResourcePtBRUtils.js +2 -0
  46. package/dist/collection/lib/message/resources/en-us/snk-image-input.msg.js +11 -0
  47. package/dist/collection/lib/message/resources/es-es/snk-image-input.msg.js +11 -0
  48. package/dist/collection/lib/message/resources/pt-br/snk-image-input.msg.js +11 -0
  49. package/dist/components/DataFetcher.js +3 -2743
  50. package/dist/components/SnkMessageBuilder.js +2783 -0
  51. package/dist/components/dataunit-fetcher.js +2 -1
  52. package/dist/components/index.d.ts +1 -0
  53. package/dist/components/index.js +1 -0
  54. package/dist/components/snk-application2.js +3 -1
  55. package/dist/components/snk-attach2.js +2 -1
  56. package/dist/components/snk-crud.js +69 -63
  57. package/dist/components/snk-data-unit2.js +1 -1
  58. package/dist/components/snk-detail-view2.js +100 -87
  59. package/dist/components/snk-form-view2.js +65 -5
  60. package/dist/components/snk-image-input.d.ts +11 -0
  61. package/dist/components/snk-image-input.js +6 -0
  62. package/dist/components/snk-image-input2.js +302 -0
  63. package/dist/esm/{ConfigStorage-39ac8fef.js → ConfigStorage-175813dc.js} +2 -2
  64. package/dist/esm/{DataFetcher-0b9da57d.js → DataFetcher-49594174.js} +3 -2743
  65. package/dist/esm/{ISave-f1c9269b.js → ISave-4bdffce4.js} +1 -1
  66. package/dist/esm/ImageUtils-8fc8d905.js +136 -0
  67. package/dist/esm/{SnkFormConfigManager-a87566c8.js → SnkFormConfigManager-0bda2ef5.js} +2 -2
  68. package/dist/esm/SnkMessageBuilder-1c0fada0.js +2783 -0
  69. package/dist/esm/{SnkMultiSelectionListDataSource-01b3744b.js → SnkMultiSelectionListDataSource-e13b72f7.js} +4 -4
  70. package/dist/esm/{auth-fetcher-acdc1cb4.js → auth-fetcher-62c5abf1.js} +1 -1
  71. package/dist/esm/{dataunit-fetcher-4c312b43.js → dataunit-fetcher-b7a9ef67.js} +2 -1
  72. package/dist/esm/{form-config-fetcher-7cda6254.js → form-config-fetcher-5e29a152.js} +1 -1
  73. package/dist/esm/index-04f73a26.js +4 -0
  74. package/dist/esm/loader.js +1 -1
  75. package/dist/esm/pesquisa-grid_2.entry.js +5 -4
  76. package/dist/esm/sankhyablocks.js +1 -1
  77. package/dist/esm/snk-actions-button_9.entry.js +6 -5
  78. package/dist/esm/snk-application.entry.js +8 -6
  79. package/dist/esm/snk-attach.entry.js +6 -5
  80. package/dist/esm/snk-crud.entry.js +6 -5
  81. package/dist/esm/snk-data-exporter.entry.js +6 -5
  82. package/dist/esm/{snk-data-unit-130021b3.js → snk-data-unit-865a1e27.js} +2 -2
  83. package/dist/esm/snk-data-unit.entry.js +4 -3
  84. package/dist/esm/snk-detail-view.entry.js +9 -8
  85. package/dist/esm/snk-filter-bar_4.entry.js +4 -3
  86. package/dist/esm/snk-filter-modal-item.entry.js +4 -3
  87. package/dist/esm/snk-form-view.entry.js +57 -3
  88. package/dist/esm/snk-form_2.entry.js +5 -4
  89. package/dist/esm/snk-grid.entry.js +7 -6
  90. package/dist/esm/{snk-guides-viewer-3fd18298.js → snk-guides-viewer-2e2f48af.js} +9 -8
  91. package/dist/esm/snk-guides-viewer.entry.js +8 -7
  92. package/dist/esm/snk-image-input.entry.js +144 -0
  93. package/dist/esm/snk-personalized-filter.entry.js +4 -3
  94. package/dist/esm/snk-pesquisa.entry.js +5 -4
  95. package/dist/esm/snk-simple-crud.entry.js +8 -7
  96. package/dist/sankhyablocks/p-0fbd3f2f.entry.js +1 -0
  97. package/dist/sankhyablocks/p-164721f4.entry.js +1 -0
  98. package/dist/sankhyablocks/{p-2ac55a5d.js → p-1d0e4e8f.js} +1 -1
  99. package/dist/sankhyablocks/p-3448ebdc.js +60 -0
  100. package/dist/sankhyablocks/{p-7ee6b1bf.js → p-34d56802.js} +1 -1
  101. package/dist/sankhyablocks/p-36a82166.entry.js +1 -0
  102. package/dist/sankhyablocks/p-3f762af3.entry.js +1 -0
  103. package/dist/sankhyablocks/p-4005bd63.entry.js +1 -0
  104. package/dist/sankhyablocks/p-4ff3b494.js +1 -0
  105. package/dist/sankhyablocks/p-71ea8d08.entry.js +11 -0
  106. package/dist/sankhyablocks/p-8bf2a358.entry.js +1 -0
  107. package/dist/sankhyablocks/{p-d714b6ca.js → p-8e5f4851.js} +1 -1
  108. package/dist/sankhyablocks/{p-1f310bc6.js → p-93f4104a.js} +1 -1
  109. package/dist/sankhyablocks/p-abcfff93.entry.js +1 -0
  110. package/dist/sankhyablocks/p-b10e79bb.js +1 -0
  111. package/dist/sankhyablocks/p-bafeda2d.entry.js +1 -0
  112. package/dist/sankhyablocks/{p-48a5c311.js → p-bf37b0e2.js} +2 -2
  113. package/dist/sankhyablocks/p-c5d6717d.entry.js +1 -0
  114. package/dist/sankhyablocks/p-d2581c6b.entry.js +1 -0
  115. package/dist/sankhyablocks/p-d4e3e549.js +1 -0
  116. package/dist/sankhyablocks/p-ddb20d9e.entry.js +1 -0
  117. package/dist/sankhyablocks/p-e19a65a2.js +1 -0
  118. package/dist/sankhyablocks/p-e892ae6c.entry.js +1 -0
  119. package/dist/sankhyablocks/p-e9bbd66b.js +1 -0
  120. package/dist/sankhyablocks/p-e9e9ff1c.entry.js +1 -0
  121. package/dist/sankhyablocks/p-f21109d6.entry.js +1 -0
  122. package/dist/sankhyablocks/p-f455a553.entry.js +1 -0
  123. package/dist/sankhyablocks/p-f61fef9a.entry.js +1 -0
  124. package/dist/sankhyablocks/{p-998a9d6f.js → p-f63e1093.js} +1 -1
  125. package/dist/sankhyablocks/p-fc0736ad.entry.js +1 -0
  126. package/dist/sankhyablocks/sankhyablocks.esm.js +1 -1
  127. package/dist/types/components/snk-application/snk-application.d.ts +1 -1
  128. package/dist/types/components/snk-crud/subcomponents/snk-form-view.d.ts +9 -0
  129. package/dist/types/components/snk-crud/subcomponents/snk-guides-viewer.d.ts +1 -0
  130. package/dist/types/components/snk-image-input/snk-image-input.d.ts +56 -0
  131. package/dist/types/components/snk-image-input/utils/ImageUtils.d.ts +15 -0
  132. package/dist/types/components.d.ts +89 -0
  133. package/dist/types/lib/message/resources/en-us/snk-image-input.msg.d.ts +1 -0
  134. package/dist/types/lib/message/resources/es-es/snk-image-input.msg.d.ts +1 -0
  135. package/dist/types/lib/message/resources/pt-br/snk-image-input.msg.d.ts +1 -0
  136. package/package.json +1 -1
  137. package/react/components.d.ts +1 -0
  138. package/react/components.js +1 -0
  139. package/react/components.js.map +1 -1
  140. package/dist/sankhyablocks/p-12f595a6.entry.js +0 -1
  141. package/dist/sankhyablocks/p-18d66638.entry.js +0 -1
  142. package/dist/sankhyablocks/p-2a33d4cf.entry.js +0 -1
  143. package/dist/sankhyablocks/p-2c6be187.entry.js +0 -1
  144. package/dist/sankhyablocks/p-3a443150.entry.js +0 -1
  145. package/dist/sankhyablocks/p-3b6d8d33.entry.js +0 -1
  146. package/dist/sankhyablocks/p-3db72758.entry.js +0 -1
  147. package/dist/sankhyablocks/p-52691b42.js +0 -1
  148. package/dist/sankhyablocks/p-6768f176.js +0 -1
  149. package/dist/sankhyablocks/p-6d322b0a.js +0 -1
  150. package/dist/sankhyablocks/p-877d9614.entry.js +0 -1
  151. package/dist/sankhyablocks/p-94267a30.entry.js +0 -1
  152. package/dist/sankhyablocks/p-9e4555ab.js +0 -60
  153. package/dist/sankhyablocks/p-acd2ba28.entry.js +0 -1
  154. package/dist/sankhyablocks/p-b533edab.entry.js +0 -1
  155. package/dist/sankhyablocks/p-c2d33fc8.entry.js +0 -1
  156. package/dist/sankhyablocks/p-cd40c8cf.entry.js +0 -1
  157. package/dist/sankhyablocks/p-cd412add.entry.js +0 -1
  158. package/dist/sankhyablocks/p-d6dad5e4.entry.js +0 -1
  159. package/dist/sankhyablocks/p-f8c5395a.entry.js +0 -1
  160. package/dist/sankhyablocks/p-fa087ab2.entry.js +0 -11
@@ -0,0 +1,133 @@
1
+ import { ApplicationContext } from "@sankhyalabs/core";
2
+ export async function base64ToBlob(base64) {
3
+ const response = await fetch(base64);
4
+ return await response.blob();
5
+ }
6
+ export function buildFileKey(entityName, fieldName) {
7
+ if (entityName) {
8
+ return `${entityName}_${fieldName}`;
9
+ }
10
+ else {
11
+ return fieldName;
12
+ }
13
+ }
14
+ function hasSpecialCharacters(value) {
15
+ const specialChars = /[ !@#$%^&*()+\-=\[\]{};':"\\|,.<>\/?]/;
16
+ return specialChars.test(value);
17
+ }
18
+ /**
19
+ * Gera a URL base para upload de sessão
20
+ */
21
+ function getSessionUploadBaseUrl(fileKey, context = 'mge') {
22
+ let url = `/${context}/sessionUpload.${context}?sessionkey=${fileKey}`;
23
+ // Verifica se precisa processar caracteres especiais
24
+ if (canProcessSpecialKeys(context) && hasSpecialCharacters(fileKey)) {
25
+ url += `&encodedKey=${btoa(encodeURI(fileKey))}`;
26
+ }
27
+ return url;
28
+ }
29
+ /**
30
+ * Verifica se pode processar chaves especiais
31
+ * Baseado no método canProcessSpecialKeys do sessionfileupload.service.js
32
+ */
33
+ async function canProcessSpecialKeys(context) {
34
+ var _a;
35
+ const application = ApplicationContext.getContextValue("__SNK__APPLICATION__");
36
+ if (!application)
37
+ return false;
38
+ const resourceId = await ((_a = application.getResourceID) === null || _a === void 0 ? void 0 : _a.call(application)) || '';
39
+ const adPrefix = "br.com.sankhya.menu.adicional";
40
+ return context === 'mge' && resourceId.startsWith(adPrefix);
41
+ }
42
+ /**
43
+ * Constrói a URL de upload
44
+ * Baseado no método buildUploadURL do sessionfileupload.service.js
45
+ */
46
+ function buildUploadURL(fileKey) {
47
+ let url = getSessionUploadBaseUrl(fileKey);
48
+ url += "&fitem=S&salvar=S&useCache=N";
49
+ return url;
50
+ }
51
+ /**
52
+ * Faz upload de arquivo para a sessão usando XMLHttpRequest
53
+ * Baseado no método uploadSessionFile do sessionfileupload.service.js
54
+ */
55
+ export async function sessionFileUpload(blob, entityName, fieldName, onProgress) {
56
+ const fileKey = buildFileKey(entityName, fieldName);
57
+ const uploadUrl = buildUploadURL(fileKey);
58
+ return new Promise((resolve, reject) => {
59
+ const formData = new FormData();
60
+ formData.append('arquivo', blob);
61
+ const http = new XMLHttpRequest();
62
+ http.addEventListener("load", () => {
63
+ if (http.status >= 200 && http.status < 300) {
64
+ resolve(`/mge/UPLOADING_${fileKey}.dbimage`);
65
+ }
66
+ else {
67
+ reject(new Error(`Upload failed: ${http.statusText}`));
68
+ }
69
+ });
70
+ http.addEventListener("error", () => {
71
+ reject(new Error('Upload error'));
72
+ });
73
+ if (onProgress) {
74
+ http.upload.addEventListener("progress", onProgress);
75
+ }
76
+ http.open("POST", uploadUrl);
77
+ http.send(formData);
78
+ });
79
+ }
80
+ export function getUrlBase() {
81
+ return window.location.origin;
82
+ }
83
+ export function getBaseUrl(pk, entityName, fieldName) {
84
+ if (!pk)
85
+ return undefined;
86
+ const baseUrl = getUrlBase();
87
+ let url = `${baseUrl}/mge/${entityName}@${fieldName}`;
88
+ for (const pkField in pk) {
89
+ url += `@${pkField}=${pk[pkField]}`;
90
+ }
91
+ url += '.dbimage';
92
+ return url;
93
+ }
94
+ export function getPKs(dataUnit) {
95
+ if (!dataUnit) {
96
+ return undefined;
97
+ }
98
+ const pk = {};
99
+ const fields = dataUnit.metadata.fields;
100
+ const selectedRecord = dataUnit.getSelectedRecord();
101
+ fields.forEach((field) => {
102
+ if (field.properties['isPrimaryKey']) {
103
+ pk[field.name] = selectedRecord[field.name];
104
+ }
105
+ });
106
+ return pk;
107
+ }
108
+ export async function imageBlobToBase64(blob) {
109
+ return new Promise((resolve, reject) => {
110
+ const reader = new FileReader();
111
+ reader.onloadend = () => {
112
+ resolve(reader.result);
113
+ };
114
+ reader.onerror = reject;
115
+ reader.readAsDataURL(blob);
116
+ });
117
+ }
118
+ export async function downloadImage(pks, fieldName, entityName) {
119
+ const uploadUrl = getBaseUrl(pks, entityName, fieldName);
120
+ if (!uploadUrl) {
121
+ return;
122
+ }
123
+ try {
124
+ const response = await fetch(uploadUrl);
125
+ if (response.ok) {
126
+ const blob = await response.blob();
127
+ return await imageBlobToBase64(blob);
128
+ }
129
+ }
130
+ catch (error) {
131
+ console.error('Error downloading image:', error);
132
+ }
133
+ }
@@ -26,6 +26,7 @@ import { snkSimpleBarMessages } from './resources/en-us/snk-simple-bar.msg';
26
26
  import { snkSimpleCrudMessages } from "./resources/en-us/snk-simple-crud.msg";
27
27
  import { snkSimpleFormConfigMessages } from "./resources/en-us/snk-simple-form-config.msg";
28
28
  import { snkTaskbarMessages } from "./resources/en-us/snk-taskbar.msg";
29
+ import { snkImageInputMessages } from "./resources/en-us/snk-image-input.msg";
29
30
 
30
31
  import {
31
32
  snkGridConfigMessages,
@@ -61,6 +62,7 @@ const messageResourcePtBR = {
61
62
  snkFilterFieldSearch: snkFilterFieldSearchMessages,
62
63
  snkSimpleBar: snkSimpleBarMessages,
63
64
  snkAttach: snkAttachMessages,
65
+ snkImageInput: snkImageInputMessages,
64
66
  snkPersonalizedFilter: snkPersonalizedFilterMessages,
65
67
  snkEntityList: snkEntityListMessages,
66
68
  snkActionsButton: snkActionsButtonMessages,
@@ -26,6 +26,7 @@ import { snkSimpleBarMessages } from './resources/es-es/snk-simple-bar.msg';
26
26
  import { snkSimpleCrudMessages } from "./resources/es-es/snk-simple-crud.msg";
27
27
  import { snkSimpleFormConfigMessages } from "./resources/es-es/snk-simple-form-config.msg";
28
28
  import { snkTaskbarMessages } from "./resources/es-es/snk-taskbar.msg";
29
+ import { snkImageInputMessages } from "./resources/es-es/snk-image-input.msg";
29
30
 
30
31
  import {
31
32
  snkGridConfigMessages,
@@ -61,6 +62,7 @@ const messageResourcePtBR = {
61
62
  snkFilterFieldSearch: snkFilterFieldSearchMessages,
62
63
  snkSimpleBar: snkSimpleBarMessages,
63
64
  snkAttach: snkAttachMessages,
65
+ snkImageInput: snkImageInputMessages,
64
66
  snkPersonalizedFilter: snkPersonalizedFilterMessages,
65
67
  snkEntityList: snkEntityListMessages,
66
68
  snkActionsButton: snkActionsButtonMessages,
@@ -26,6 +26,7 @@ import { snkSimpleBarMessages } from './resources/pt-br/snk-simple-bar.msg';
26
26
  import { snkSimpleCrudMessages } from "./resources/pt-br/snk-simple-crud.msg";
27
27
  import { snkSimpleFormConfigMessages } from "./resources/pt-br/snk-simple-form-config.msg";
28
28
  import { snkTaskbarMessages } from "./resources/pt-br/snk-taskbar.msg";
29
+ import { snkImageInputMessages } from "./resources/pt-br/snk-image-input.msg";
29
30
 
30
31
  import {
31
32
  snkGridConfigMessages,
@@ -61,6 +62,7 @@ const messageResourcePtBR = {
61
62
  snkFilterFieldSearch: snkFilterFieldSearchMessages,
62
63
  snkSimpleBar: snkSimpleBarMessages,
63
64
  snkAttach: snkAttachMessages,
65
+ snkImageInput: snkImageInputMessages,
64
66
  snkPersonalizedFilter: snkPersonalizedFilterMessages,
65
67
  snkEntityList: snkEntityListMessages,
66
68
  snkActionsButton: snkActionsButtonMessages,
@@ -0,0 +1,11 @@
1
+ export const snkImageInputMessages = {
2
+ msgTipoImage: "Invalid file type. Accepted types: ",
3
+ errorImageSize: "File size exceeds the maximum allowed: ",
4
+ defaultLabel: "Click or drag to upload an image",
5
+ removeImage: "Remove image",
6
+ imageAlt: "Preview image",
7
+ imagePreview: "Image Preview",
8
+ uploadError: "Error uploading file",
9
+ downloadError: "Error downloading image",
10
+ errorTitle: "Error"
11
+ };
@@ -0,0 +1,11 @@
1
+ export const snkImageInputMessages = {
2
+ msgTipoImage: "Tipo de archivo inválido. Tipos aceptados: ",
3
+ errorImageSize: "El tamaño del archivo excede el máximo permitido: ",
4
+ defaultLabel: "Haga clic o arrastre para cargar una imagen",
5
+ removeImage: "Eliminar imagen",
6
+ imageAlt: "Vista previa de la imagen",
7
+ imagePreview: "Vista previa de la imagen",
8
+ uploadError: "Error al cargar el archivo",
9
+ downloadError: "Error al descargar la imagen",
10
+ errorTitle: "Error"
11
+ };
@@ -0,0 +1,11 @@
1
+ export const snkImageInputMessages = {
2
+ msgTipoImage: "Tipo de arquivo inválido. Tipos aceitos: ",
3
+ errorImageSize: "O tamanho do arquivo excede o máximo permitido: ",
4
+ defaultLabel: "Clique ou arraste para fazer upload de uma imagem",
5
+ removeImage: "Remover imagem",
6
+ imageAlt: "Visualização da imagem",
7
+ imagePreview: "Visualização da Imagem",
8
+ uploadError: "Erro ao fazer upload do arquivo",
9
+ downloadError: "Erro ao baixar imagem",
10
+ errorTitle: "Erro"
11
+ };