@genexus/genexus-ide-ui 1.1.56 → 1.1.57

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 (392) hide show
  1. package/dist/cjs/assets-manager-089e91b1.js +7 -0
  2. package/dist/cjs/assets-manager-089e91b1.js.map +1 -0
  3. package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js +8 -4
  4. package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js.map +1 -1
  5. package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js +8 -4
  6. package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js.map +1 -1
  7. package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js +12 -16
  8. package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js.map +1 -1
  9. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +8 -4
  10. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
  11. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +6 -2
  12. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
  13. package/dist/cjs/gx-ide-data-selector.cjs.entry.js +6 -2
  14. package/dist/cjs/gx-ide-data-selector.cjs.entry.js.map +1 -1
  15. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +6 -2
  16. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -1
  17. package/dist/cjs/gx-ide-design-import.cjs.entry.js +11 -7
  18. package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
  19. package/dist/cjs/gx-ide-details-acknowledgements.cjs.entry.js +6 -2
  20. package/dist/cjs/gx-ide-details-acknowledgements.cjs.entry.js.map +1 -1
  21. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +7 -3
  22. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js.map +1 -1
  23. package/dist/cjs/gx-ide-file-item.cjs.entry.js +9 -5
  24. package/dist/cjs/gx-ide-file-item.cjs.entry.js.map +1 -1
  25. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +6 -2
  26. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
  27. package/dist/cjs/gx-ide-json-import.cjs.entry.js +7 -3
  28. package/dist/cjs/gx-ide-json-import.cjs.entry.js.map +1 -1
  29. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +10 -6
  30. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js.map +1 -1
  31. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +9 -5
  32. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
  33. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +7 -3
  34. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -1
  35. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +6 -2
  36. package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
  37. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +7 -3
  38. package/dist/cjs/gx-ide-object-selector.cjs.entry.js.map +1 -1
  39. package/dist/cjs/gx-ide-open-api-import.cjs.entry.js +7 -3
  40. package/dist/cjs/gx-ide-open-api-import.cjs.entry.js.map +1 -1
  41. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js +8 -4
  42. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js.map +1 -1
  43. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js +6 -2
  44. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js.map +1 -1
  45. package/dist/cjs/gx-ide-references.cjs.entry.js +7 -3
  46. package/dist/cjs/gx-ide-references.cjs.entry.js.map +1 -1
  47. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +263 -20
  48. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
  49. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +7 -3
  50. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
  51. package/dist/cjs/gx-ide-server-selector.cjs.entry.js +9 -5
  52. package/dist/cjs/gx-ide-server-selector.cjs.entry.js.map +1 -1
  53. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +6 -2
  54. package/dist/cjs/gx-ide-share-kb.cjs.entry.js.map +1 -1
  55. package/dist/cjs/gx-ide-splash.cjs.entry.js +6 -2
  56. package/dist/cjs/gx-ide-splash.cjs.entry.js.map +1 -1
  57. package/dist/cjs/gx-ide-start-page.cjs.entry.js +9 -5
  58. package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
  59. package/dist/cjs/gx-ide-starting-template.cjs.entry.js +6 -2
  60. package/dist/cjs/gx-ide-starting-template.cjs.entry.js.map +1 -1
  61. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +14 -10
  62. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js.map +1 -1
  63. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +7 -3
  64. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
  65. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +10 -6
  66. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -1
  67. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js +6 -2
  68. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js.map +1 -1
  69. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +17 -13
  70. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
  71. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js +6 -2
  72. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js.map +1 -1
  73. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js +6 -2
  74. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js.map +1 -1
  75. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +8 -4
  76. package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
  77. package/dist/cjs/index.cjs.js +0 -3
  78. package/dist/cjs/index.cjs.js.map +1 -1
  79. package/dist/cjs/mer-animated-dots-001c7465.js +79 -0
  80. package/dist/cjs/mer-animated-dots-001c7465.js.map +1 -0
  81. package/dist/cjs/{tabular-grid-render-b1767da2.js → tabular-grid-render-f97a5ab3.js} +18 -14
  82. package/dist/cjs/tabular-grid-render-f97a5ab3.js.map +1 -0
  83. package/dist/cjs/{utilities-0e316b39.js → utilities-0815a260.js} +10 -6
  84. package/dist/cjs/utilities-0815a260.js.map +1 -0
  85. package/dist/collection/components/chat/chat-container/chat-container.js +2 -10
  86. package/dist/collection/components/chat/chat-container/chat-container.js.map +1 -1
  87. package/dist/collection/index.js +0 -2
  88. package/dist/collection/index.js.map +1 -1
  89. package/dist/collection/showcase/chat-container/callbacks.js +9 -9
  90. package/dist/collection/showcase/chat-container/callbacks.js.map +1 -1
  91. package/dist/collection/showcase/chat-container/chat.showcase.js +4 -4
  92. package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -1
  93. package/dist/collection/showcase/chat-container/models.js +18 -18
  94. package/dist/collection/showcase/chat-container/models.js.map +1 -1
  95. package/dist/components/chat-container.js +6 -11
  96. package/dist/components/chat-container.js.map +1 -1
  97. package/dist/components/chat-welcome.js +4 -1
  98. package/dist/components/chat-welcome.js.map +1 -1
  99. package/dist/components/entity-selector.js +4 -1
  100. package/dist/components/entity-selector.js.map +1 -1
  101. package/dist/components/file-item.js +4 -1
  102. package/dist/components/file-item.js.map +1 -1
  103. package/dist/components/gx-ide-bpm-app-declaration.js +4 -1
  104. package/dist/components/gx-ide-bpm-app-declaration.js.map +1 -1
  105. package/dist/components/gx-ide-bpm-task-documents.js +4 -1
  106. package/dist/components/gx-ide-bpm-task-documents.js.map +1 -1
  107. package/dist/components/gx-ide-create-kb-from-server.js +4 -1
  108. package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
  109. package/dist/components/gx-ide-current-user-info.js +4 -1
  110. package/dist/components/gx-ide-current-user-info.js.map +1 -1
  111. package/dist/components/gx-ide-data-selector.js +4 -1
  112. package/dist/components/gx-ide-data-selector.js.map +1 -1
  113. package/dist/components/gx-ide-data-type-selector.js +4 -1
  114. package/dist/components/gx-ide-data-type-selector.js.map +1 -1
  115. package/dist/components/gx-ide-design-import.js +4 -1
  116. package/dist/components/gx-ide-design-import.js.map +1 -1
  117. package/dist/components/gx-ide-details-acknowledgements.js +4 -1
  118. package/dist/components/gx-ide-details-acknowledgements.js.map +1 -1
  119. package/dist/components/gx-ide-file-uploader.js +4 -1
  120. package/dist/components/gx-ide-file-uploader.js.map +1 -1
  121. package/dist/components/gx-ide-json-import.js +4 -1
  122. package/dist/components/gx-ide-json-import.js.map +1 -1
  123. package/dist/components/gx-ide-kb-manager-export.js +4 -1
  124. package/dist/components/gx-ide-kb-manager-export.js.map +1 -1
  125. package/dist/components/gx-ide-kb-manager-import.js +4 -1
  126. package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
  127. package/dist/components/gx-ide-manage-module-references.js +4 -1
  128. package/dist/components/gx-ide-manage-module-references.js.map +1 -1
  129. package/dist/components/gx-ide-new-kb.js +4 -1
  130. package/dist/components/gx-ide-new-kb.js.map +1 -1
  131. package/dist/components/gx-ide-object-selector.js +4 -1
  132. package/dist/components/gx-ide-object-selector.js.map +1 -1
  133. package/dist/components/gx-ide-open-api-import.js +4 -1
  134. package/dist/components/gx-ide-open-api-import.js.map +1 -1
  135. package/dist/components/gx-ide-plugin-details.js +4 -1
  136. package/dist/components/gx-ide-plugin-details.js.map +1 -1
  137. package/dist/components/gx-ide-plugin-explorer.js +4 -1
  138. package/dist/components/gx-ide-plugin-explorer.js.map +1 -1
  139. package/dist/components/gx-ide-references.js +4 -1
  140. package/dist/components/gx-ide-references.js.map +1 -1
  141. package/dist/components/gx-ide-sc-chat-container.js +263 -20
  142. package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
  143. package/dist/components/gx-ide-server-selector.js +4 -1
  144. package/dist/components/gx-ide-server-selector.js.map +1 -1
  145. package/dist/components/gx-ide-share-kb.js +4 -1
  146. package/dist/components/gx-ide-share-kb.js.map +1 -1
  147. package/dist/components/gx-ide-splash.js +4 -1
  148. package/dist/components/gx-ide-splash.js.map +1 -1
  149. package/dist/components/gx-ide-start-page.js +4 -1
  150. package/dist/components/gx-ide-start-page.js.map +1 -1
  151. package/dist/components/gx-ide-starting-template.js +4 -1
  152. package/dist/components/gx-ide-starting-template.js.map +1 -1
  153. package/dist/components/gx-ide-team-dev-bring-changes.js +4 -1
  154. package/dist/components/gx-ide-team-dev-bring-changes.js.map +1 -1
  155. package/dist/components/gx-ide-team-dev-history.js +4 -1
  156. package/dist/components/gx-ide-team-dev-history.js.map +1 -1
  157. package/dist/components/gx-ide-team-dev-update-partial-selection.js +4 -1
  158. package/dist/components/gx-ide-team-dev-update-partial-selection.js.map +1 -1
  159. package/dist/components/gx-ide-team-dev-update.js +4 -1
  160. package/dist/components/gx-ide-team-dev-update.js.map +1 -1
  161. package/dist/components/gx-ide-welcome-page.js +4 -1
  162. package/dist/components/gx-ide-welcome-page.js.map +1 -1
  163. package/dist/components/gx-ide-ww-attributes.js +4 -1
  164. package/dist/components/gx-ide-ww-attributes.js.map +1 -1
  165. package/dist/components/gx-ide-ww-files.js +4 -1
  166. package/dist/components/gx-ide-ww-files.js.map +1 -1
  167. package/dist/components/index.js +0 -1
  168. package/dist/components/index.js.map +1 -1
  169. package/dist/components/mer-animated-dots.js +81 -0
  170. package/dist/components/mer-animated-dots.js.map +1 -0
  171. package/dist/components/select-kb-items.js +4 -1
  172. package/dist/components/select-kb-items.js.map +1 -1
  173. package/dist/components/tabular-grid-render.js +4 -1
  174. package/dist/components/tabular-grid-render.js.map +1 -1
  175. package/dist/components/utilities.js +4 -1
  176. package/dist/components/utilities.js.map +1 -1
  177. package/dist/esm/assets-manager-7d6fc08f.js +5 -0
  178. package/dist/esm/assets-manager-7d6fc08f.js.map +1 -0
  179. package/dist/esm/gx-ide-bpm-app-declaration.entry.js +5 -1
  180. package/dist/esm/gx-ide-bpm-app-declaration.entry.js.map +1 -1
  181. package/dist/esm/gx-ide-bpm-task-documents.entry.js +5 -1
  182. package/dist/esm/gx-ide-bpm-task-documents.entry.js.map +1 -1
  183. package/dist/esm/gx-ide-chat-container_2.entry.js +7 -11
  184. package/dist/esm/gx-ide-chat-container_2.entry.js.map +1 -1
  185. package/dist/esm/gx-ide-create-kb-from-server.entry.js +5 -1
  186. package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
  187. package/dist/esm/gx-ide-current-user-info.entry.js +5 -1
  188. package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
  189. package/dist/esm/gx-ide-data-selector.entry.js +5 -1
  190. package/dist/esm/gx-ide-data-selector.entry.js.map +1 -1
  191. package/dist/esm/gx-ide-data-type-selector.entry.js +5 -1
  192. package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -1
  193. package/dist/esm/gx-ide-design-import.entry.js +5 -1
  194. package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
  195. package/dist/esm/gx-ide-details-acknowledgements.entry.js +5 -1
  196. package/dist/esm/gx-ide-details-acknowledgements.entry.js.map +1 -1
  197. package/dist/esm/gx-ide-entity-selector.entry.js +5 -1
  198. package/dist/esm/gx-ide-entity-selector.entry.js.map +1 -1
  199. package/dist/esm/gx-ide-file-item.entry.js +5 -1
  200. package/dist/esm/gx-ide-file-item.entry.js.map +1 -1
  201. package/dist/esm/gx-ide-file-uploader.entry.js +5 -1
  202. package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
  203. package/dist/esm/gx-ide-json-import.entry.js +5 -1
  204. package/dist/esm/gx-ide-json-import.entry.js.map +1 -1
  205. package/dist/esm/gx-ide-kb-manager-export.entry.js +5 -1
  206. package/dist/esm/gx-ide-kb-manager-export.entry.js.map +1 -1
  207. package/dist/esm/gx-ide-kb-manager-import.entry.js +5 -1
  208. package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
  209. package/dist/esm/gx-ide-manage-module-references.entry.js +5 -1
  210. package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -1
  211. package/dist/esm/gx-ide-new-kb.entry.js +5 -1
  212. package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
  213. package/dist/esm/gx-ide-object-selector.entry.js +5 -1
  214. package/dist/esm/gx-ide-object-selector.entry.js.map +1 -1
  215. package/dist/esm/gx-ide-open-api-import.entry.js +5 -1
  216. package/dist/esm/gx-ide-open-api-import.entry.js.map +1 -1
  217. package/dist/esm/gx-ide-plugin-details.entry.js +5 -1
  218. package/dist/esm/gx-ide-plugin-details.entry.js.map +1 -1
  219. package/dist/esm/gx-ide-plugin-explorer.entry.js +5 -1
  220. package/dist/esm/gx-ide-plugin-explorer.entry.js.map +1 -1
  221. package/dist/esm/gx-ide-references.entry.js +5 -1
  222. package/dist/esm/gx-ide-references.entry.js.map +1 -1
  223. package/dist/esm/gx-ide-sc-chat-container.entry.js +263 -20
  224. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
  225. package/dist/esm/gx-ide-select-kb-items.entry.js +5 -1
  226. package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
  227. package/dist/esm/gx-ide-server-selector.entry.js +5 -1
  228. package/dist/esm/gx-ide-server-selector.entry.js.map +1 -1
  229. package/dist/esm/gx-ide-share-kb.entry.js +5 -1
  230. package/dist/esm/gx-ide-share-kb.entry.js.map +1 -1
  231. package/dist/esm/gx-ide-splash.entry.js +5 -1
  232. package/dist/esm/gx-ide-splash.entry.js.map +1 -1
  233. package/dist/esm/gx-ide-start-page.entry.js +5 -1
  234. package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
  235. package/dist/esm/gx-ide-starting-template.entry.js +5 -1
  236. package/dist/esm/gx-ide-starting-template.entry.js.map +1 -1
  237. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +7 -3
  238. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js.map +1 -1
  239. package/dist/esm/gx-ide-team-dev-commit.entry.js +7 -3
  240. package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
  241. package/dist/esm/gx-ide-team-dev-history.entry.js +6 -2
  242. package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -1
  243. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js +5 -1
  244. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js.map +1 -1
  245. package/dist/esm/gx-ide-team-dev-update.entry.js +7 -3
  246. package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
  247. package/dist/esm/gx-ide-welcome-page.entry.js +5 -1
  248. package/dist/esm/gx-ide-welcome-page.entry.js.map +1 -1
  249. package/dist/esm/gx-ide-ww-attributes.entry.js +5 -1
  250. package/dist/esm/gx-ide-ww-attributes.entry.js.map +1 -1
  251. package/dist/esm/gx-ide-ww-files.entry.js +5 -1
  252. package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
  253. package/dist/esm/index.js +0 -2
  254. package/dist/esm/index.js.map +1 -1
  255. package/dist/esm/mer-animated-dots-75d88f7e.js +77 -0
  256. package/dist/esm/mer-animated-dots-75d88f7e.js.map +1 -0
  257. package/dist/esm/{tabular-grid-render-96d67a8c.js → tabular-grid-render-2fca02f4.js} +7 -3
  258. package/dist/esm/tabular-grid-render-2fca02f4.js.map +1 -0
  259. package/dist/esm/{utilities-6624d90e.js → utilities-0cdc28eb.js} +6 -2
  260. package/dist/esm/utilities-0cdc28eb.js.map +1 -0
  261. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  262. package/dist/genexus-ide-ui/index.esm.js +0 -2
  263. package/dist/genexus-ide-ui/index.esm.js.map +1 -1
  264. package/dist/genexus-ide-ui/{p-2ce60f4c.entry.js → p-02883452.entry.js} +28 -20
  265. package/dist/genexus-ide-ui/{p-2ce60f4c.entry.js.map → p-02883452.entry.js.map} +1 -1
  266. package/dist/genexus-ide-ui/{p-c5eac770.entry.js → p-0548097b.entry.js} +10 -2
  267. package/dist/genexus-ide-ui/{p-c5eac770.entry.js.map → p-0548097b.entry.js.map} +1 -1
  268. package/dist/genexus-ide-ui/{p-64dbc4c0.entry.js → p-082780cc.entry.js} +10 -2
  269. package/dist/genexus-ide-ui/{p-64dbc4c0.entry.js.map → p-082780cc.entry.js.map} +1 -1
  270. package/dist/genexus-ide-ui/{p-9ac4aaa0.entry.js → p-1baf026c.entry.js} +16 -8
  271. package/dist/genexus-ide-ui/{p-9ac4aaa0.entry.js.map → p-1baf026c.entry.js.map} +1 -1
  272. package/dist/genexus-ide-ui/{p-098a7288.entry.js → p-1d647672.entry.js} +19 -11
  273. package/dist/genexus-ide-ui/{p-098a7288.entry.js.map → p-1d647672.entry.js.map} +1 -1
  274. package/dist/genexus-ide-ui/{p-13630aa2.entry.js → p-1e1d2672.entry.js} +51 -43
  275. package/dist/genexus-ide-ui/{p-13630aa2.entry.js.map → p-1e1d2672.entry.js.map} +1 -1
  276. package/dist/genexus-ide-ui/{p-b6a75c44.entry.js → p-207a698a.entry.js} +57 -49
  277. package/dist/genexus-ide-ui/{p-b6a75c44.entry.js.map → p-207a698a.entry.js.map} +1 -1
  278. package/dist/genexus-ide-ui/{p-d18c51fe.entry.js → p-2726ab59.entry.js} +18 -10
  279. package/dist/genexus-ide-ui/{p-d18c51fe.entry.js.map → p-2726ab59.entry.js.map} +1 -1
  280. package/dist/genexus-ide-ui/{p-0c5b7e75.entry.js → p-27633aae.entry.js} +10 -2
  281. package/dist/genexus-ide-ui/{p-0c5b7e75.entry.js.map → p-27633aae.entry.js.map} +1 -1
  282. package/dist/genexus-ide-ui/{p-2fe7ffc8.entry.js → p-28c11aff.entry.js} +32 -24
  283. package/dist/genexus-ide-ui/{p-2fe7ffc8.entry.js.map → p-28c11aff.entry.js.map} +1 -1
  284. package/dist/genexus-ide-ui/{p-3b955964.entry.js → p-2a51ea80.entry.js} +10 -2
  285. package/dist/genexus-ide-ui/{p-3b955964.entry.js.map → p-2a51ea80.entry.js.map} +1 -1
  286. package/dist/genexus-ide-ui/{p-1056dfe7.entry.js → p-336bb2ce.entry.js} +28 -20
  287. package/dist/genexus-ide-ui/{p-1056dfe7.entry.js.map → p-336bb2ce.entry.js.map} +1 -1
  288. package/dist/genexus-ide-ui/{p-ac026635.entry.js → p-364e8ecb.entry.js} +16 -8
  289. package/dist/genexus-ide-ui/{p-ac026635.entry.js.map → p-364e8ecb.entry.js.map} +1 -1
  290. package/dist/genexus-ide-ui/{p-1d044bf5.entry.js → p-4548ae72.entry.js} +17 -9
  291. package/dist/genexus-ide-ui/{p-1d044bf5.entry.js.map → p-4548ae72.entry.js.map} +1 -1
  292. package/dist/genexus-ide-ui/{p-80e49324.entry.js → p-46bb921b.entry.js} +36 -28
  293. package/dist/genexus-ide-ui/{p-80e49324.entry.js.map → p-46bb921b.entry.js.map} +1 -1
  294. package/dist/genexus-ide-ui/{p-11a60dbe.entry.js → p-506760d7.entry.js} +10 -2
  295. package/dist/genexus-ide-ui/{p-11a60dbe.entry.js.map → p-506760d7.entry.js.map} +1 -1
  296. package/dist/genexus-ide-ui/p-6e29711e.entry.js +608 -0
  297. package/dist/genexus-ide-ui/p-6e29711e.entry.js.map +1 -0
  298. package/dist/genexus-ide-ui/{p-7b986243.entry.js → p-71d4d3dd.entry.js} +32 -24
  299. package/dist/genexus-ide-ui/{p-7b986243.entry.js.map → p-71d4d3dd.entry.js.map} +1 -1
  300. package/dist/genexus-ide-ui/{p-891faf90.entry.js → p-77c315d9.entry.js} +28 -20
  301. package/dist/genexus-ide-ui/{p-891faf90.entry.js.map → p-77c315d9.entry.js.map} +1 -1
  302. package/dist/genexus-ide-ui/{p-18bbaa49.entry.js → p-7c95f511.entry.js} +16 -8
  303. package/dist/genexus-ide-ui/{p-18bbaa49.entry.js.map → p-7c95f511.entry.js.map} +1 -1
  304. package/dist/genexus-ide-ui/{p-eedb407c.entry.js → p-7e3cccf7.entry.js} +10 -2
  305. package/dist/genexus-ide-ui/{p-eedb407c.entry.js.map → p-7e3cccf7.entry.js.map} +1 -1
  306. package/dist/genexus-ide-ui/{p-410a35da.entry.js → p-8925fc99.entry.js} +40 -32
  307. package/dist/genexus-ide-ui/{p-410a35da.entry.js.map → p-8925fc99.entry.js.map} +1 -1
  308. package/dist/genexus-ide-ui/{p-072419f9.entry.js → p-94f74c12.entry.js} +18 -10
  309. package/dist/genexus-ide-ui/{p-072419f9.entry.js.map → p-94f74c12.entry.js.map} +1 -1
  310. package/dist/genexus-ide-ui/{p-d24c1115.entry.js → p-97f6438c.entry.js} +67 -59
  311. package/dist/genexus-ide-ui/{p-d24c1115.entry.js.map → p-97f6438c.entry.js.map} +1 -1
  312. package/dist/genexus-ide-ui/{p-9270c80f.entry.js → p-981873da.entry.js} +114 -118
  313. package/dist/genexus-ide-ui/p-981873da.entry.js.map +1 -0
  314. package/dist/genexus-ide-ui/{p-17b54532.entry.js → p-99b1dfd7.entry.js} +39 -31
  315. package/dist/genexus-ide-ui/{p-17b54532.entry.js.map → p-99b1dfd7.entry.js.map} +1 -1
  316. package/dist/genexus-ide-ui/{p-e1d0adf6.entry.js → p-9f7c347c.entry.js} +24 -16
  317. package/dist/genexus-ide-ui/{p-e1d0adf6.entry.js.map → p-9f7c347c.entry.js.map} +1 -1
  318. package/dist/genexus-ide-ui/{p-eacc81c8.entry.js → p-a28c2a64.entry.js} +122 -114
  319. package/dist/genexus-ide-ui/{p-eacc81c8.entry.js.map → p-a28c2a64.entry.js.map} +1 -1
  320. package/dist/genexus-ide-ui/{p-cccd6565.entry.js → p-a73db549.entry.js} +10 -2
  321. package/dist/genexus-ide-ui/{p-cccd6565.entry.js.map → p-a73db549.entry.js.map} +1 -1
  322. package/dist/genexus-ide-ui/{p-547fbde8.entry.js → p-be1ceb01.entry.js} +28 -20
  323. package/dist/genexus-ide-ui/{p-547fbde8.entry.js.map → p-be1ceb01.entry.js.map} +1 -1
  324. package/dist/genexus-ide-ui/{p-7adb9d1f.entry.js → p-c133095b.entry.js} +78 -70
  325. package/dist/genexus-ide-ui/{p-7adb9d1f.entry.js.map → p-c133095b.entry.js.map} +1 -1
  326. package/dist/genexus-ide-ui/{p-a58048e9.entry.js → p-c1c3996c.entry.js} +12 -4
  327. package/dist/genexus-ide-ui/{p-a58048e9.entry.js.map → p-c1c3996c.entry.js.map} +1 -1
  328. package/dist/genexus-ide-ui/{p-7551c2e9.entry.js → p-c426a3e7.entry.js} +22 -14
  329. package/dist/genexus-ide-ui/{p-7551c2e9.entry.js.map → p-c426a3e7.entry.js.map} +1 -1
  330. package/dist/genexus-ide-ui/{p-4f88fecd.entry.js → p-d12739cf.entry.js} +17 -9
  331. package/dist/genexus-ide-ui/{p-4f88fecd.entry.js.map → p-d12739cf.entry.js.map} +1 -1
  332. package/dist/genexus-ide-ui/{p-c8270f7d.js → p-d3ee56a4.js} +45 -37
  333. package/dist/genexus-ide-ui/{p-c8270f7d.js.map → p-d3ee56a4.js.map} +1 -1
  334. package/dist/genexus-ide-ui/p-d42e842b.js +7 -0
  335. package/dist/genexus-ide-ui/p-d42e842b.js.map +1 -0
  336. package/dist/genexus-ide-ui/{p-401bfc97.js → p-d4ecd3bb.js} +9366 -7152
  337. package/dist/genexus-ide-ui/p-d4ecd3bb.js.map +1 -0
  338. package/dist/genexus-ide-ui/{p-48e87e4f.entry.js → p-de6e9132.entry.js} +71 -63
  339. package/dist/genexus-ide-ui/{p-48e87e4f.entry.js.map → p-de6e9132.entry.js.map} +1 -1
  340. package/dist/genexus-ide-ui/{p-05fa08d7.entry.js → p-e4e3a7af.entry.js} +19 -11
  341. package/dist/genexus-ide-ui/{p-05fa08d7.entry.js.map → p-e4e3a7af.entry.js.map} +1 -1
  342. package/dist/genexus-ide-ui/{p-a24571ca.js → p-ea4b35b6.js} +19 -11
  343. package/dist/genexus-ide-ui/{p-a24571ca.js.map → p-ea4b35b6.js.map} +1 -1
  344. package/dist/genexus-ide-ui/{p-bd0ffc08.entry.js → p-f47b08c5.entry.js} +44 -36
  345. package/dist/genexus-ide-ui/{p-bd0ffc08.entry.js.map → p-f47b08c5.entry.js.map} +1 -1
  346. package/dist/types/index.d.ts +0 -2
  347. package/package.json +9 -8
  348. package/dist/cjs/MERCURY_ASSETS-f14e91ff.js +0 -9
  349. package/dist/cjs/MERCURY_ASSETS-f14e91ff.js.map +0 -1
  350. package/dist/cjs/render-item.lit-3f18e009.js +0 -329
  351. package/dist/cjs/render-item.lit-3f18e009.js.map +0 -1
  352. package/dist/cjs/tabular-grid-render-b1767da2.js.map +0 -1
  353. package/dist/cjs/utilities-0e316b39.js.map +0 -1
  354. package/dist/collection/components/chat/chat-container/gx-ide-assets/chat-container/chat-lit.css +0 -376
  355. package/dist/collection/components/chat/lit-custom-render/actions.lit.js +0 -27
  356. package/dist/collection/components/chat/lit-custom-render/actions.lit.js.map +0 -1
  357. package/dist/collection/components/chat/lit-custom-render/code-block.lit.js +0 -46
  358. package/dist/collection/components/chat/lit-custom-render/code-block.lit.js.map +0 -1
  359. package/dist/collection/components/chat/lit-custom-render/dots-animation.js +0 -61
  360. package/dist/collection/components/chat/lit-custom-render/dots-animation.js.map +0 -1
  361. package/dist/collection/components/chat/lit-custom-render/render-item.lit.js +0 -122
  362. package/dist/collection/components/chat/lit-custom-render/render-item.lit.js.map +0 -1
  363. package/dist/collection/components/chat/lit-custom-render/spinner-animation.js +0 -58
  364. package/dist/collection/components/chat/lit-custom-render/spinner-animation.js.map +0 -1
  365. package/dist/collection/components/chat/lit-custom-render/types.js +0 -2
  366. package/dist/collection/components/chat/lit-custom-render/types.js.map +0 -1
  367. package/dist/collection/components/chat/lit-custom-render/utils.js +0 -50
  368. package/dist/collection/components/chat/lit-custom-render/utils.js.map +0 -1
  369. package/dist/components/MERCURY_ASSETS.js +0 -7
  370. package/dist/components/MERCURY_ASSETS.js.map +0 -1
  371. package/dist/components/render-item.lit.js +0 -327
  372. package/dist/components/render-item.lit.js.map +0 -1
  373. package/dist/esm/MERCURY_ASSETS-ccf43ae3.js +0 -7
  374. package/dist/esm/MERCURY_ASSETS-ccf43ae3.js.map +0 -1
  375. package/dist/esm/render-item.lit-449f2946.js +0 -327
  376. package/dist/esm/render-item.lit-449f2946.js.map +0 -1
  377. package/dist/esm/tabular-grid-render-96d67a8c.js.map +0 -1
  378. package/dist/esm/utilities-6624d90e.js.map +0 -1
  379. package/dist/genexus-ide-ui/gx-ide-assets/chat-container/chat-lit.css +0 -376
  380. package/dist/genexus-ide-ui/p-401bfc97.js.map +0 -1
  381. package/dist/genexus-ide-ui/p-8d6f2b4f.entry.js +0 -359
  382. package/dist/genexus-ide-ui/p-8d6f2b4f.entry.js.map +0 -1
  383. package/dist/genexus-ide-ui/p-9270c80f.entry.js.map +0 -1
  384. package/dist/genexus-ide-ui/p-fd4f9904.js +0 -955
  385. package/dist/genexus-ide-ui/p-fd4f9904.js.map +0 -1
  386. package/dist/types/components/chat/lit-custom-render/actions.lit.d.ts +0 -2
  387. package/dist/types/components/chat/lit-custom-render/code-block.lit.d.ts +0 -2
  388. package/dist/types/components/chat/lit-custom-render/dots-animation.d.ts +0 -5
  389. package/dist/types/components/chat/lit-custom-render/render-item.lit.d.ts +0 -3
  390. package/dist/types/components/chat/lit-custom-render/spinner-animation.d.ts +0 -5
  391. package/dist/types/components/chat/lit-custom-render/types.d.ts +0 -4
  392. package/dist/types/components/chat/lit-custom-render/utils.d.ts +0 -23
@@ -1,6 +1,14 @@
1
1
  import { r as e, c as i, h as t } from "./p-97107ecc.js";
2
2
 
3
- import { g as r } from "./p-401bfc97.js";
3
+ import { g as r } from "./p-d42e842b.js";
4
+
5
+ import "./p-d4ecd3bb.js";
6
+
7
+ import "lit";
8
+
9
+ import "lit/directives/when.js";
10
+
11
+ import "lit/directives/if-defined.js";
4
12
 
5
13
  const s = ":host{display:block;inline-size:100%}.file-item{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto;gap:var(--mer-spacing--sm);align-items:center;border:var(--mer-border__width--sm) solid var(--mer-border__default);border-radius:var(--mer-border__radius--sm)}.file-item__icon{display:flex;align-items:center}.file-item__name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;inline-size:100%;font-weight:var(--mer-font__weight--regular)}.file-item__name ch-edit{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;inline-size:100%;font-weight:var(--mer-font__weight--regular)}.file-item__name .label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;inline-size:100%;font-weight:var(--mer-font__weight--regular)}.file-item__actions{display:flex;gap:var(--mer-spacing--xs)}.file-item__actions button:active,.file-item__actions button:focus,.file-item__actions button:hover{background-color:var(--mer-surface__hover)}.file-item__actions button:active{background-color:var(--mer-surface__pressed)}.file-item__progress-container{grid-column:1/-1;display:flex;flex-direction:column;gap:var(--mer-spacing--2xs);inline-size:100%;border:var(--mer-border__width--md) dashed var(--mer-border-color__dim);border-radius:var(--mer-border__radius--md);padding:var(--mer-spacing--sm)}.file-item__progress-header{display:flex;justify-content:space-between;align-items:center;gap:var(--mer-spacing--sm)}.file-item__uploading-text{font-style:italic;color:var(--mer-text__complementary);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-inline-size:calc(100% - var(--mer-spacing--2xl))}.file-item__progress-bar{inline-size:100%}.file-item__progress-bar progress{inline-size:100%;height:var(--mer-spacing--xs);border:none;border-radius:var(--mer-border__radius--sm);overflow:hidden}.file-item__progress-bar progress::-webkit-progress-bar{background-color:transparent}.file-item__progress-bar progress::-webkit-progress-value{background-color:var(--mer-accent__primary)}.file-item__progress-bar progress::-moz-progress-bar{background-color:var(--mer-accent__primary)}";
6
14
 
@@ -152,4 +160,4 @@ a = new WeakMap, n = new WeakMap, l = new WeakMap, c = new WeakMap, m = new Weak
152
160
  g.style = s;
153
161
 
154
162
  export { g as gx_ide_file_item };
155
- //# sourceMappingURL=p-64dbc4c0.entry.js.map
163
+ //# sourceMappingURL=p-082780cc.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["fileItemCss","FILE_ICON","getIconPath","category","name","colorType","EDIT_ICON","DELETE_ICON","CANCEL_ICON","CSS_BUNDLES","FileItem","_FileItem_handleNameChange","set","this","event","newName","detail","currentName","fileNameChange","emit","id","file","_FileItem_handleBlur","isEditing","_FileItem_handleDelete","fileDelete","_FileItem_handleCancelClick","e","preventDefault","fileCancel","_FileItem_startEditing","editable","handleFileChange","newFile","componentWillLoad","render","h","class","model","src","value","autoFocus","onInput","__classPrivateFieldGet","onBlur","pending","type","onClick","progress","max"],"sources":["src/components/file-uploader/file-item/file-item.scss?tag=gx-ide-file-item&encapsulation=shadow","src/components/file-uploader/file-item/file-item.tsx"],"sourcesContent":["@import \"../../../global/gx-ide-mixins.scss\";\n\n:host {\n display: block;\n inline-size: 100%;\n}\n\n.file-item {\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-template-rows: auto;\n gap: var(--mer-spacing--sm);\n align-items: center;\n border: var(--mer-border__width--sm) solid var(--mer-border__default);\n border-radius: var(--mer-border__radius--sm);\n\n &__icon {\n display: flex;\n align-items: center;\n }\n\n &__name {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n\n ch-edit {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n }\n\n .label {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n }\n }\n\n &__actions {\n display: flex;\n gap: var(--mer-spacing--xs);\n\n button {\n &:active,\n &:focus,\n &:hover {\n background-color: var(--mer-surface__hover);\n }\n\n &:active {\n background-color: var(--mer-surface__pressed);\n }\n }\n }\n\n &__progress-container {\n grid-column: 1 / -1;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--2xs);\n inline-size: 100%;\n border: var(--mer-border__width--md) dashed var(--mer-border-color__dim);\n border-radius: var(--mer-border__radius--md);\n padding: var(--mer-spacing--sm);\n }\n\n &__progress-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--mer-spacing--sm);\n }\n\n &__uploading-text {\n font-style: italic;\n color: var(--mer-text__complementary);\n @include ellipsis;\n max-inline-size: calc(100% - var(--mer-spacing--2xl));\n }\n\n &__progress-bar {\n inline-size: 100%;\n\n progress {\n inline-size: 100%;\n height: var(--mer-spacing--xs);\n border: none;\n border-radius: var(--mer-border__radius--sm);\n overflow: hidden;\n\n &::-webkit-progress-bar {\n background-color: transparent;\n }\n\n &::-webkit-progress-value {\n background-color: var(--mer-accent__primary);\n }\n\n &::-moz-progress-bar {\n background-color: var(--mer-accent__primary);\n }\n }\n }\n}\n","import {\n Component,\n h,\n Prop,\n State,\n Event,\n EventEmitter,\n Watch\n} from \"@stencil/core\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\nimport { FileUploadState } from \"../types\";\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst EDIT_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"edit\",\n colorType: \"primary\"\n});\n\nconst DELETE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CANCEL_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"close\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\"\n];\n\n@Component({\n tag: \"gx-ide-file-item\",\n styleUrl: \"file-item.scss\",\n shadow: true\n})\nexport class FileItem {\n /** File state containing upload information */\n @Prop() readonly file!: FileUploadState;\n\n /** Whether the file name can be edited */\n @Prop() readonly editable: boolean = false;\n\n /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when a file deletion error occurs */\n @Prop() readonly fileDeletionErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Updates current name when file prop changes */\n @Watch(\"file\")\n handleFileChange(newFile: FileUploadState) {\n this.currentName = newFile.name;\n }\n\n @State() isEditing: boolean = false;\n @State() currentName: string;\n\n /** Emitted when the file name is changed */\n @Event() fileNameChange: EventEmitter<{ id: string; name: string }>;\n\n /** Emitted when the file is deleted */\n @Event() fileDelete: EventEmitter<string>;\n\n /** Emitted when the file upload is cancelled */\n @Event() fileCancel: EventEmitter<string>;\n\n componentWillLoad() {\n this.currentName = this.file.name;\n }\n\n #handleNameChange = (event: ChEditCustomEvent<string> | InputEvent) => {\n const newName = (event as CustomEvent<string>).detail;\n\n if (newName && newName !== this.currentName) {\n this.currentName = newName;\n this.fileNameChange.emit({\n id: this.file.id,\n name: newName\n });\n }\n };\n\n #handleBlur = () => {\n this.isEditing = false;\n };\n\n /** Handles file deletion */\n #handleDelete = () => {\n this.fileDelete.emit(this.file.id);\n };\n\n /** Handles upload cancellation */\n #handleCancelClick = (e: MouseEvent) => {\n e.preventDefault();\n this.fileCancel.emit(this.file.id);\n };\n\n /** Starts file name editing */\n #startEditing = () => {\n if (this.editable) {\n this.isEditing = true;\n }\n };\n\n render() {\n return (\n <div class=\"file-item\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"file-item__icon\">\n <ch-image src={FILE_ICON} class=\"icon-md\" />\n </div>\n\n <div class=\"file-item__name\">\n {this.isEditing ? (\n <ch-edit\n value={this.currentName}\n autoFocus={true}\n onInput={this.#handleNameChange}\n onBlur={this.#handleBlur}\n class=\"input\"\n />\n ) : (\n <label class=\"label\">{this.currentName}</label>\n )}\n </div>\n\n <div class=\"file-item__actions\">\n {!this.file.pending && this.editable && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#startEditing}\n >\n <ch-image src={EDIT_ICON} class=\"icon-md\" />\n </button>\n )}\n {!this.file.pending && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleDelete}\n aria-label=\"Delete file\"\n >\n <ch-image src={DELETE_ICON} class=\"icon-md\" />\n </button>\n )}\n </div>\n\n {this.file.pending && (\n <div class=\"file-item__progress-container\">\n <div class=\"file-item__progress-header\">\n <span class=\"file-item__uploading-text\">\n Uploading {this.currentName}...\n </span>\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleCancelClick}\n >\n <ch-image src={CANCEL_ICON} class=\"icon-md\" />\n </button>\n </div>\n <div class=\"file-item__progress-bar\">\n <progress\n class=\"elevation-1\"\n value={this.file.progress}\n max=\"100\"\n />\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":";;;;AAAA,MAAMA,IAAc;;;;;;;;;;ACapB,MAAMC,IAAYC,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMC,IAAYJ,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAME,IAAcL,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMG,IAAcN,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMI,IAA8B,EAClC,qBACA,qBACA,mBACA,mBACA,oBACA,iBACA,cACA,gBACA;;MAQWC,IAAQ;;;;;;IAsCnBC,EAAAC,IAAAC,OAAqBC;MACnB,MAAMC,IAAWD,EAA8BE;MAE/C,IAAID,KAAWA,MAAYF,KAAKI,aAAa;QAC3CJ,KAAKI,cAAcF;QACnBF,KAAKK,eAAeC,KAAK;UACvBC,IAAIP,KAAKQ,KAAKD;UACdhB,MAAMW;;;;IAKZO,EAAAV,IAAAC,OAAc;MACZA,KAAKU,YAAY;AAAK;oCAIxBC,EAAAZ,IAAAC,OAAgB;MACdA,KAAKY,WAAWN,KAAKN,KAAKQ,KAAKD;AAAG;0CAIpCM,EAAAd,IAAAC,OAAsBc;MACpBA,EAAEC;MACFf,KAAKgB,WAAWV,KAAKN,KAAKQ,KAAKD;AAAG;uCAIpCU,EAAAlB,IAAAC,OAAgB;MACd,IAAIA,KAAKkB,UAAU;QACjBlB,KAAKU,YAAY;;;;oBA/DgB;;;qBAiBP;;;sDAJ9B,gBAAAS,CAAiBC;IACfpB,KAAKI,cAAcgB,EAAQ7B;;EAe7B,iBAAA8B;IACErB,KAAKI,cAAcJ,KAAKQ,KAAKjB;;EAqC/B,MAAA+B;IACE,OACEC,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUE,OAAO7B;QACjB2B,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUG,KAAKtC;MAAWoC,OAAM;SAGlCD,EAAA;MAAKC,OAAM;OACRxB,KAAKU,YACJa,EAAA;MACEI,OAAO3B,KAAKI;MACZwB,WAAW;MACXC,SAASC,EAAA9B,MAAIF,GAAA;MACbiC,QAAQD,EAAA9B,MAAIS,GAAA;MACZe,OAAM;SAGRD,EAAA;MAAOC,OAAM;OAASxB,KAAKI,eAI/BmB,EAAA;MAAKC,OAAM;QACPxB,KAAKQ,KAAKwB,WAAWhC,KAAKkB,YAC1BK,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIiB,GAAA;OAEbM,EAAA;MAAUG,KAAKjC;MAAW+B,OAAM;UAGlCxB,KAAKQ,KAAKwB,WACVT,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIW,GAAA;MAAc,cAChB;OAEXY,EAAA;MAAUG,KAAKhC;MAAa8B,OAAM;UAKvCxB,KAAKQ,KAAKwB,WACTT,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAMC,OAAM;OAA2B,cAC1BxB,KAAKI,aAAW,QAE7BmB,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIa,GAAA;OAEbU,EAAA;MAAUG,KAAK/B;MAAa6B,OAAM;UAGtCD,EAAA;MAAKC,OAAM;OACTD,EAAA;MACEC,OAAM;MACNG,OAAO3B,KAAKQ,KAAK2B;MACjBC,KAAI"}
1
+ {"version":3,"names":["fileItemCss","FILE_ICON","getIconPath","category","name","colorType","EDIT_ICON","DELETE_ICON","CANCEL_ICON","CSS_BUNDLES","FileItem","_FileItem_handleNameChange","set","this","event","newName","detail","currentName","fileNameChange","emit","id","file","_FileItem_handleBlur","isEditing","_FileItem_handleDelete","fileDelete","_FileItem_handleCancelClick","e","preventDefault","fileCancel","_FileItem_startEditing","editable","handleFileChange","newFile","componentWillLoad","render","h","class","model","src","value","autoFocus","onInput","__classPrivateFieldGet","onBlur","pending","type","onClick","progress","max"],"sources":["src/components/file-uploader/file-item/file-item.scss?tag=gx-ide-file-item&encapsulation=shadow","src/components/file-uploader/file-item/file-item.tsx"],"sourcesContent":["@import \"../../../global/gx-ide-mixins.scss\";\n\n:host {\n display: block;\n inline-size: 100%;\n}\n\n.file-item {\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-template-rows: auto;\n gap: var(--mer-spacing--sm);\n align-items: center;\n border: var(--mer-border__width--sm) solid var(--mer-border__default);\n border-radius: var(--mer-border__radius--sm);\n\n &__icon {\n display: flex;\n align-items: center;\n }\n\n &__name {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n\n ch-edit {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n }\n\n .label {\n @include ellipsis;\n inline-size: 100%;\n font-weight: var(--mer-font__weight--regular);\n }\n }\n\n &__actions {\n display: flex;\n gap: var(--mer-spacing--xs);\n\n button {\n &:active,\n &:focus,\n &:hover {\n background-color: var(--mer-surface__hover);\n }\n\n &:active {\n background-color: var(--mer-surface__pressed);\n }\n }\n }\n\n &__progress-container {\n grid-column: 1 / -1;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--2xs);\n inline-size: 100%;\n border: var(--mer-border__width--md) dashed var(--mer-border-color__dim);\n border-radius: var(--mer-border__radius--md);\n padding: var(--mer-spacing--sm);\n }\n\n &__progress-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--mer-spacing--sm);\n }\n\n &__uploading-text {\n font-style: italic;\n color: var(--mer-text__complementary);\n @include ellipsis;\n max-inline-size: calc(100% - var(--mer-spacing--2xl));\n }\n\n &__progress-bar {\n inline-size: 100%;\n\n progress {\n inline-size: 100%;\n height: var(--mer-spacing--xs);\n border: none;\n border-radius: var(--mer-border__radius--sm);\n overflow: hidden;\n\n &::-webkit-progress-bar {\n background-color: transparent;\n }\n\n &::-webkit-progress-value {\n background-color: var(--mer-accent__primary);\n }\n\n &::-moz-progress-bar {\n background-color: var(--mer-accent__primary);\n }\n }\n }\n}\n","import {\n Component,\n h,\n Prop,\n State,\n Event,\n EventEmitter,\n Watch\n} from \"@stencil/core\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\nimport { FileUploadState } from \"../types\";\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst EDIT_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"edit\",\n colorType: \"primary\"\n});\n\nconst DELETE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CANCEL_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"close\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\"\n];\n\n@Component({\n tag: \"gx-ide-file-item\",\n styleUrl: \"file-item.scss\",\n shadow: true\n})\nexport class FileItem {\n /** File state containing upload information */\n @Prop() readonly file!: FileUploadState;\n\n /** Whether the file name can be edited */\n @Prop() readonly editable: boolean = false;\n\n /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when a file deletion error occurs */\n @Prop() readonly fileDeletionErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Updates current name when file prop changes */\n @Watch(\"file\")\n handleFileChange(newFile: FileUploadState) {\n this.currentName = newFile.name;\n }\n\n @State() isEditing: boolean = false;\n @State() currentName: string;\n\n /** Emitted when the file name is changed */\n @Event() fileNameChange: EventEmitter<{ id: string; name: string }>;\n\n /** Emitted when the file is deleted */\n @Event() fileDelete: EventEmitter<string>;\n\n /** Emitted when the file upload is cancelled */\n @Event() fileCancel: EventEmitter<string>;\n\n componentWillLoad() {\n this.currentName = this.file.name;\n }\n\n #handleNameChange = (event: ChEditCustomEvent<string> | InputEvent) => {\n const newName = (event as CustomEvent<string>).detail;\n\n if (newName && newName !== this.currentName) {\n this.currentName = newName;\n this.fileNameChange.emit({\n id: this.file.id,\n name: newName\n });\n }\n };\n\n #handleBlur = () => {\n this.isEditing = false;\n };\n\n /** Handles file deletion */\n #handleDelete = () => {\n this.fileDelete.emit(this.file.id);\n };\n\n /** Handles upload cancellation */\n #handleCancelClick = (e: MouseEvent) => {\n e.preventDefault();\n this.fileCancel.emit(this.file.id);\n };\n\n /** Starts file name editing */\n #startEditing = () => {\n if (this.editable) {\n this.isEditing = true;\n }\n };\n\n render() {\n return (\n <div class=\"file-item\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"file-item__icon\">\n <ch-image src={FILE_ICON} class=\"icon-md\" />\n </div>\n\n <div class=\"file-item__name\">\n {this.isEditing ? (\n <ch-edit\n value={this.currentName}\n autoFocus={true}\n onInput={this.#handleNameChange}\n onBlur={this.#handleBlur}\n class=\"input\"\n />\n ) : (\n <label class=\"label\">{this.currentName}</label>\n )}\n </div>\n\n <div class=\"file-item__actions\">\n {!this.file.pending && this.editable && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#startEditing}\n >\n <ch-image src={EDIT_ICON} class=\"icon-md\" />\n </button>\n )}\n {!this.file.pending && (\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleDelete}\n aria-label=\"Delete file\"\n >\n <ch-image src={DELETE_ICON} class=\"icon-md\" />\n </button>\n )}\n </div>\n\n {this.file.pending && (\n <div class=\"file-item__progress-container\">\n <div class=\"file-item__progress-header\">\n <span class=\"file-item__uploading-text\">\n Uploading {this.currentName}...\n </span>\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#handleCancelClick}\n >\n <ch-image src={CANCEL_ICON} class=\"icon-md\" />\n </button>\n </div>\n <div class=\"file-item__progress-bar\">\n <progress\n class=\"elevation-1\"\n value={this.file.progress}\n max=\"100\"\n />\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;AAAA,MAAMA,IAAc;;;;;;;;;;ACapB,MAAMC,IAAYC,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMC,IAAYJ,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAME,IAAcL,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMG,IAAcN,EAAY;EAC9BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMI,IAA8B,EAClC,qBACA,qBACA,mBACA,mBACA,oBACA,iBACA,cACA,gBACA;;MAQWC,IAAQ;;;;;;IAsCnBC,EAAAC,IAAAC,OAAqBC;MACnB,MAAMC,IAAWD,EAA8BE;MAE/C,IAAID,KAAWA,MAAYF,KAAKI,aAAa;QAC3CJ,KAAKI,cAAcF;QACnBF,KAAKK,eAAeC,KAAK;UACvBC,IAAIP,KAAKQ,KAAKD;UACdhB,MAAMW;;;;IAKZO,EAAAV,IAAAC,OAAc;MACZA,KAAKU,YAAY;AAAK;oCAIxBC,EAAAZ,IAAAC,OAAgB;MACdA,KAAKY,WAAWN,KAAKN,KAAKQ,KAAKD;AAAG;0CAIpCM,EAAAd,IAAAC,OAAsBc;MACpBA,EAAEC;MACFf,KAAKgB,WAAWV,KAAKN,KAAKQ,KAAKD;AAAG;uCAIpCU,EAAAlB,IAAAC,OAAgB;MACd,IAAIA,KAAKkB,UAAU;QACjBlB,KAAKU,YAAY;;;;oBA/DgB;;;qBAiBP;;;sDAJ9B,gBAAAS,CAAiBC;IACfpB,KAAKI,cAAcgB,EAAQ7B;;EAe7B,iBAAA8B;IACErB,KAAKI,cAAcJ,KAAKQ,KAAKjB;;EAqC/B,MAAA+B;IACE,OACEC,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUE,OAAO7B;QACjB2B,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAUG,KAAKtC;MAAWoC,OAAM;SAGlCD,EAAA;MAAKC,OAAM;OACRxB,KAAKU,YACJa,EAAA;MACEI,OAAO3B,KAAKI;MACZwB,WAAW;MACXC,SAASC,EAAA9B,MAAIF,GAAA;MACbiC,QAAQD,EAAA9B,MAAIS,GAAA;MACZe,OAAM;SAGRD,EAAA;MAAOC,OAAM;OAASxB,KAAKI,eAI/BmB,EAAA;MAAKC,OAAM;QACPxB,KAAKQ,KAAKwB,WAAWhC,KAAKkB,YAC1BK,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIiB,GAAA;OAEbM,EAAA;MAAUG,KAAKjC;MAAW+B,OAAM;UAGlCxB,KAAKQ,KAAKwB,WACVT,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIW,GAAA;MAAc,cAChB;OAEXY,EAAA;MAAUG,KAAKhC;MAAa8B,OAAM;UAKvCxB,KAAKQ,KAAKwB,WACTT,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAMC,OAAM;OAA2B,cAC1BxB,KAAKI,aAAW,QAE7BmB,EAAA;MACEC,OAAM;MACNS,MAAK;MACLC,SAASJ,EAAA9B,MAAIa,GAAA;OAEbU,EAAA;MAAUG,KAAK/B;MAAa6B,OAAM;UAGtCD,EAAA;MAAKC,OAAM;OACTD,EAAA;MACEC,OAAM;MACNG,OAAO3B,KAAKQ,KAAK2B;MACjBC,KAAI"}
@@ -1,6 +1,14 @@
1
1
  import { r as e, h as i, H as t, a } from "./p-97107ecc.js";
2
2
 
3
- import { g as r } from "./p-401bfc97.js";
3
+ import { g as r } from "./p-d42e842b.js";
4
+
5
+ import "./p-d4ecd3bb.js";
6
+
7
+ import "lit";
8
+
9
+ import "lit/directives/when.js";
10
+
11
+ import "lit/directives/if-defined.js";
4
12
 
5
13
  import { L as o } from "./p-311eedf3.js";
6
14
 
@@ -19,7 +27,7 @@ var l = undefined && undefined.__classPrivateFieldSet || function(e, i, t, a, r)
19
27
  return a === "a" ? r.call(e, t) : r ? r.value = t : i.set(e, t), t;
20
28
  };
21
29
 
22
- var d, c, f, g, h, b, v, p, m, u, y, x, w, k, _, z, M, j;
30
+ var d, c, f, g, h, b, v, p, m, u, y, x, w, k, _, z, j, M;
23
31
 
24
32
  const W = r({
25
33
  category: "gemini-tools",
@@ -203,7 +211,7 @@ const C = class {
203
211
  }
204
212
  }
205
213
  }));
206
- /** Handles dialog confirmation */ M.set(this, (async () => {
214
+ /** Handles dialog confirmation */ j.set(this, (async () => {
207
215
  var e;
208
216
  // Verificar si hay subidas en progreso
209
217
  const i = Array.from(this.fileStates.values()).some((e => e.pending));
@@ -231,7 +239,7 @@ const C = class {
231
239
  n(this, f, "f").value = "";
232
240
  }
233
241
  }));
234
- /** Handles dialog cancellation */ j.set(this, (async () => {
242
+ /** Handles dialog cancellation */ M.set(this, (async () => {
235
243
  var e, i, t;
236
244
  try {
237
245
  // Cancelamos todas las subidas en progreso
@@ -378,11 +386,11 @@ const C = class {
378
386
  }, i("button", {
379
387
  class: "button-secondary",
380
388
  type: "button",
381
- onClick: n(this, j, "f")
389
+ onClick: n(this, M, "f")
382
390
  }, (C = n(this, c, "f")) === null || C === void 0 ? void 0 : C.buttons.cancel), i("button", {
383
391
  class: "button-primary",
384
392
  type: "button",
385
- onClick: n(this, M, "f"),
393
+ onClick: n(this, j, "f"),
386
394
  disabled: this.fileStates.size === 0 || Array.from(this.fileStates.values()).some((e => e.pending))
387
395
  }, (E = n(this, c, "f")) === null || E === void 0 ? void 0 : E.buttons.confirm)))));
388
396
  }
@@ -396,7 +404,7 @@ const C = class {
396
404
 
397
405
  c = new WeakMap, f = new WeakMap, g = new WeakMap, h = new WeakMap, p = new WeakMap,
398
406
  m = new WeakMap, u = new WeakMap, y = new WeakMap, x = new WeakMap, w = new WeakMap,
399
- k = new WeakMap, _ = new WeakMap, z = new WeakMap, M = new WeakMap, j = new WeakMap,
407
+ k = new WeakMap, _ = new WeakMap, z = new WeakMap, j = new WeakMap, M = new WeakMap,
400
408
  d = new WeakSet, b = function _FileUploader_isValidFile(e) {
401
409
  var i, t;
402
410
  // If no types specified, accept any file
@@ -454,4 +462,4 @@ d = new WeakSet, b = function _FileUploader_isValidFile(e) {
454
462
  C.style = s;
455
463
 
456
464
  export { C as gx_ide_file_uploader };
457
- //# sourceMappingURL=p-9ac4aaa0.entry.js.map
465
+ //# sourceMappingURL=p-1baf026c.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["fileUploaderCss","PLUS_ICON","getIconPath","category","name","colorType","CSS_BUNDLES","FileUploader","_FileUploader__componentLocale","set","this","_FileUploader_fileInputEl","_FileUploader_dragCounter","_FileUploader_generateId","Math","random","toString","substr","_FileUploader_handleDragEnter","e","preventDefault","stopPropagation","__classPrivateFieldSet","_a","__classPrivateFieldGet","isDragging","_FileUploader_handleDragLeave","_FileUploader_handleDragOver","_FileUploader_handleDrop","files","dataTransfer","_FileUploader_handleFiles","call","_FileUploader_handleFileSelect","click","_FileUploader_handleFileInput","target","validFiles","_FileUploader_instances","_FileUploader_getValidFiles","forEach","async","file","id","fileState","pending","progress","multiple","fileStates","clear","Map","uploadFunction","uploadPromise","state","get","updatedState","Object","assign","stateWithPromise","result","success","remoteId","fileUploadedCallback","originalName","error","_b","errors","upload","Error","message","value","_FileUploader_handleNameChange","event","detail","updatedFile","trim","isEditing","fileRenamedCallback","fileId","newName","_FileUploader_handleFileCancel","cancel","cancelUploadFunction","uploadCancelledCallback","delete","fileToDelete","shouldDelete","onBeforeDelete","_c","fileDeletedCallback","_d","fileDeletionErrorCallback","fileName","_FileUploader_handleConfirm","hasPendingUploads","Array","from","values","some","uploadedFiles","filter","isValid","map","length","dialogConfirmedCallback","_FileUploader_handleCancel","entries","dialogCanceledCallback","componentWillLoad","Locale","getComponentStrings","el","render","h","Host","class","model","type","accept","types","startsWith","join","onChange","ref","tabIndex","style","display","size","onDragEnter","onDragLeave","onDragOver","onDrop","onClick","src","header","uploadButtonMultiple","uploadButtonSingle","label","orText","_e","dragAndDrop","_f","acceptedFiles","replace","_g","allFilesAccepted","_h","fileList","attachedFiles","_j","filesCount","_k","_l","key","editable","canEditName","onFileNameChange","onFileDelete","onFileCancel","_m","buttons","disabled","_o","confirm","includes","baseType","split","toLowerCase","endsWith","invalidFileType","validation","_FileUploader_isValidFile","push","fileValidationErrorCallback"],"sources":["src/components/file-uploader/file-uploader.scss?tag=gx-ide-file-uploader&encapsulation=shadow","src/components/file-uploader/file-uploader.tsx"],"sourcesContent":["@import \"../../global/gx-ide-common.scss\";\n@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n display: block;\n inline-size: 100%;\n block-size: 100%;\n padding-inline-end: 0 !important;\n}\n\n.file-uploader-dialog {\n display: flex;\n flex-direction: column;\n block-size: 100%;\n background-color: var(--mer-surface__background);\n position: relative;\n\n .dialog-content {\n flex: 1;\n min-block-size: 0;\n overflow: auto;\n }\n\n .dialog-footer {\n padding-inline-end: var(--spacing-body-inline-end);\n }\n}\n\n.file-uploader {\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n\n &__list {\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n\n &-header {\n position: sticky;\n top: 0;\n z-index: 1;\n background-color: var(--mer-surface__elevation--01);\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-inline-end: var(--spacing-body-inline-end);\n }\n\n &-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n padding-inline-end: var(--spacing-body-inline-end);\n padding-block-end: var(--mer-spacing--md);\n }\n }\n\n &__list-title-container {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n white-space: nowrap;\n }\n\n &__drop-zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n inline-size: calc(100% - var(--spacing-body-inline-end));\n block-size: calc(100% - var(--mer-spacing--sm));\n min-block-size: 200px;\n margin-block-end: var(--mer-spacing--sm);\n background: var(--mer-surface__elevation--01);\n border: var(--mer-border__width--md) dashed var(--mer-border-color__dim);\n border-radius: var(--mer-border__radius--md);\n transition: border-color 0.3s ease, background-color 0.3s ease,\n opacity 0.3s ease;\n\n &--dragging {\n border-color: var(--mer-accent__primary);\n background: var(--mer-accent__primary--hover);\n opacity: 0.7;\n }\n\n .text-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n margin-block-start: var(--mer-spacing--xs);\n }\n }\n}\n\n.hidden-input {\n display: none;\n}\n\n.label-primary-row {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n}\n","/* eslint-disable @stencil-community/own-methods-must-be-private */\n/* eslint-disable @stencil-community/own-props-must-be-private */\n/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { UploadedFile, FileUploadState, UploadResult } from \"./types\";\n\nconst PLUS_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"add\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/list-box\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\",\n \"chameleon/scrollbar\"\n];\n\ntype FileValidationResult = {\n isValid: boolean;\n error?: string;\n};\n\n@Component({\n tag: \"gx-ide-file-uploader\",\n styleUrl: \"file-uploader.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/file-uploader\"]\n})\nexport class FileUploader {\n #_componentLocale: any;\n #fileInputEl!: HTMLInputElement;\n\n @Element() el!: HTMLGxIdeFileUploaderElement;\n\n /** Allowed file types/extensions (e.g. ['.jpg', '.png', 'image/*', 'application/pdf']) */\n @Prop() readonly types?: string[] = [];\n\n /** Whether multiple files can be selected */\n @Prop() readonly multiple: boolean = false;\n\n /** Whether file names can be edited */\n @Prop() readonly canEditName: boolean = false;\n\n /** Label to display in the uploader dialog */\n @Prop() readonly label?: string;\n\n /** Function to handle file upload */\n @Prop() readonly uploadFunction!: (\n file: File,\n progressCallback: (progress: number) => void\n ) => Promise<UploadResult>;\n\n /** Function to cancel file upload */\n @Prop() readonly cancelUploadFunction?: (fileId: string) => Promise<void>;\n\n /** Callback when a file is uploaded successfully */\n @Prop() readonly fileUploadedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback when the dialog is canceled */\n @Prop() readonly dialogCanceledCallback?: () => Promise<void>;\n\n /** Callback when the dialog is confirmed with files */\n @Prop() readonly dialogConfirmedCallback?: (\n files: UploadedFile[]\n ) => Promise<void>;\n\n /** Callback when upload is cancelled */\n @Prop() readonly uploadCancelledCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when file is renamed */\n @Prop() readonly fileRenamedCallback?: (data: {\n fileId: string;\n newName: string;\n }) => Promise<void>;\n\n /** Callback when a file validation error occurs */\n @Prop() readonly fileValidationErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Callback when a file deletion error occurs */\n @Prop() readonly fileDeletionErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback before deleting a file to get confirmation */\n @Prop() readonly onBeforeDelete?: (file: UploadedFile) => Promise<boolean>;\n\n @State() private fileStates: Map<string, FileUploadState> = new Map();\n @State() private isDragging: boolean = false;\n #dragCounter = 0;\n\n /** Initializes component with locale strings */\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n /** Generates a unique ID for file identification */\n #generateId = (): string => {\n return Math.random().toString(36).substr(2, 9);\n };\n\n /** Validates if a file matches the allowed types */\n #isValidFile(file: File): FileValidationResult {\n // If no types specified, accept any file\n if (!this.types || this.types.length === 0) {\n return { isValid: true };\n }\n\n for (const type of this.types) {\n // Handle wildcards like 'image/*'\n if (type.includes(\"/*\")) {\n const baseType = type.split(\"/\")[0];\n if (file.type.startsWith(baseType)) {\n return { isValid: true };\n }\n }\n // Handle extensions like '.jpg'\n else if (type.startsWith(\".\")) {\n if (file.name.toLowerCase().endsWith(type.toLowerCase())) {\n return { isValid: true };\n }\n }\n // Handle specific MIME types\n else if (file.type === type || file.type === `application/${type}`) {\n return { isValid: true };\n }\n }\n\n return {\n isValid: false,\n error:\n this.#_componentLocale?.errors?.invalidFileType || \"Invalid file type\"\n };\n }\n\n /** Filters valid files from a FileList */\n #getValidFiles(files: FileList): File[] {\n const validFiles: File[] = [];\n\n Array.from(files).forEach(file => {\n const validation = this.#isValidFile(file);\n if (validation.isValid) {\n validFiles.push(file);\n } else {\n this.fileValidationErrorCallback?.({\n fileName: file.name,\n error: validation.error\n });\n }\n });\n\n return validFiles;\n }\n\n /** Handles drag enter event */\n #handleDragEnter = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter++;\n this.isDragging = true;\n };\n\n /** Handles drag leave event */\n #handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter--;\n if (this.#dragCounter === 0) {\n this.isDragging = false;\n }\n };\n\n /** Handles drag over event */\n #handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n /** Handles drop event */\n #handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = false;\n this.#dragCounter = 0;\n\n const files = e.dataTransfer?.files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Triggers file input click */\n #handleFileSelect = () => {\n this.#fileInputEl?.click();\n };\n\n /** Handles file input change event */\n #handleFileInput = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Processes files and starts upload */\n #handleFiles = (files: FileList) => {\n const validFiles: File[] = this.#getValidFiles(files);\n\n validFiles.forEach(async file => {\n const id = this.#generateId();\n const fileState: FileUploadState = {\n id,\n name: file.name,\n file,\n pending: true,\n progress: 0\n };\n\n if (!this.multiple) {\n this.fileStates.clear();\n }\n\n this.fileStates = new Map(this.fileStates.set(id, fileState));\n\n if (this.uploadFunction) {\n try {\n const uploadPromise = this.uploadFunction(file, progress => {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n progress: progress,\n pending: progress < 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n });\n\n // Store the upload promise/object for potential cancellation\n const stateWithPromise = {\n ...this.fileStates.get(id),\n uploadPromise\n };\n this.fileStates = new Map(this.fileStates.set(id, stateWithPromise));\n\n const result = await uploadPromise;\n\n const state = this.fileStates.get(id);\n if (state) {\n if (result.success && result.remoteId) {\n const updatedState = {\n ...state,\n remoteId: result.remoteId,\n pending: false,\n progress: 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n\n await this.fileUploadedCallback?.({\n name: state.name,\n originalName: state.file.name,\n remoteId: result.remoteId\n });\n } else {\n const updatedState = {\n ...state,\n error: result.errors?.upload || \"Upload failed\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n } catch (error) {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n error:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n }\n });\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles file name change */\n #handleNameChange = async (\n event: CustomEvent<{ id: string; name: string }>\n ) => {\n const { id, name } = event.detail;\n const file = this.fileStates.get(id);\n\n if (file) {\n const updatedFile = {\n ...file,\n name: name.trim(),\n isEditing: false\n };\n\n this.fileStates = new Map(this.fileStates.set(id, updatedFile));\n await this.fileRenamedCallback?.({ fileId: id, newName: name.trim() });\n }\n };\n\n /** Handles individual file cancellation or deletion */\n #handleFileCancel = async (event: CustomEvent<string>) => {\n const id = event.detail;\n const state = this.fileStates.get(id);\n if (state) {\n try {\n if (state.pending) {\n // Cancel upload in progress\n if (\n state.uploadPromise &&\n typeof state.uploadPromise.cancel === \"function\"\n ) {\n state.uploadPromise.cancel();\n } else if (this.cancelUploadFunction) {\n await this.cancelUploadFunction(id);\n }\n\n await this.uploadCancelledCallback?.(id);\n\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n } else {\n const fileToDelete: UploadedFile = {\n name: state.name,\n originalName: state.file.name,\n remoteId: state.remoteId\n };\n\n const shouldDelete = await this.onBeforeDelete?.(fileToDelete);\n\n if (shouldDelete) {\n await this.fileDeletedCallback?.(fileToDelete);\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n }\n }\n } catch (error) {\n await this.fileDeletionErrorCallback?.({\n fileName: state.name,\n error:\n error instanceof Error ? error.message : \"Unknown error occurred\"\n });\n }\n }\n };\n\n /** Handles dialog confirmation */\n #handleConfirm = async () => {\n // Verificar si hay subidas en progreso\n const hasPendingUploads = Array.from(this.fileStates.values()).some(\n file => file.pending\n );\n\n if (hasPendingUploads) {\n return; // No permitir confirmar si hay subidas en progreso\n }\n\n // Obtener todos los archivos que están completamente subidos\n const uploadedFiles: UploadedFile[] = Array.from(this.fileStates.values())\n .filter(file => {\n const isValid = !file.pending && file.remoteId && !file.error;\n return isValid;\n })\n .map(file => ({\n name: file.name,\n originalName: file.file.name,\n remoteId: file.remoteId as string\n }));\n\n if (uploadedFiles.length > 0) {\n await this.dialogConfirmedCallback?.(uploadedFiles);\n }\n\n // Clear file states\n this.fileStates.clear();\n this.fileStates = new Map();\n\n // Reset file input\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles dialog cancellation */\n #handleCancel = async () => {\n try {\n // Cancelamos todas las subidas en progreso\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n\n // Limpiamos todos los estados\n this.fileStates.clear();\n this.fileStates = new Map();\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n\n await this.dialogCanceledCallback?.();\n } catch (error) {\n this.fileStates.clear();\n this.fileStates = new Map();\n await this.dialogCanceledCallback?.();\n }\n };\n\n /** Clears the current file selection */\n @Method()\n async clear() {\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n this.fileStates.clear();\n }\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <input\n type=\"file\"\n class=\"hidden-input\"\n multiple={this.multiple}\n accept={this.types\n ?.map(type => (type.startsWith(\".\") ? type : `.${type}`))\n .join(\",\")}\n onChange={this.#handleFileInput}\n ref={el => (this.#fileInputEl = el as HTMLInputElement)}\n aria-hidden=\"true\"\n tabIndex={-1}\n style={{ display: \"none\" }}\n />\n <div class=\"file-uploader-dialog\">\n <div class=\"dialog-content\">\n {this.isDragging || this.fileStates.size === 0 ? (\n <div\n class={{\n \"file-uploader__drop-zone\": true,\n \"file-uploader__drop-zone--dragging\": this.isDragging\n }}\n onDragEnter={this.#handleDragEnter}\n onDragLeave={this.#handleDragLeave}\n onDragOver={this.#handleDragOver}\n onDrop={this.#handleDrop}\n >\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-md\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n <div class=\"text-container\">\n <div class=\"label-primary-row\">\n <label class=\"label\">\n {this.label || this.#_componentLocale?.header.orText}\n </label>\n <label class=\"label\">\n {this.#_componentLocale?.header.dragAndDrop}\n </label>\n </div>\n <span class=\"caption\">\n {this.types && this.types.length > 0\n ? this.#_componentLocale?.header.acceptedFiles.replace(\n \"{0}\",\n this.types.join(\", \")\n )\n : this.#_componentLocale?.header.allFilesAccepted}\n </span>\n </div>\n </div>\n ) : (\n <div class=\"file-uploader__list\">\n <div class=\"file-uploader__list-header spacing-body-block-end\">\n <div class=\"file-uploader__list-title-container\">\n <label class=\"label\">\n {this.label ||\n this.#_componentLocale?.fileList.attachedFiles}\n </label>\n <span class=\"caption\">\n {this.#_componentLocale?.fileList.filesCount.replace(\n \"{0}\",\n this.fileStates.size.toString()\n )}\n </span>\n </div>\n {this.multiple && (\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-md\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n )}\n </div>\n <div class=\"file-uploader__list-content scrollable\">\n {Array.from(this.fileStates.values()).map(file => (\n <gx-ide-file-item\n key={file.id}\n file={file}\n editable={this.canEditName}\n onFileNameChange={this.#handleNameChange}\n onFileDelete={this.#handleFileCancel}\n onFileCancel={this.#handleFileCancel}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n <div class=\"dialog-footer control-footer control-footer-with-border\">\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#handleCancel}\n >\n {this.#_componentLocale?.buttons.cancel}\n </button>\n <button\n class=\"button-primary\"\n type=\"button\"\n onClick={this.#handleConfirm}\n disabled={\n this.fileStates.size === 0 ||\n Array.from(this.fileStates.values()).some(\n file => file.pending\n )\n }\n >\n {this.#_componentLocale?.buttons.confirm}\n </button>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["fileUploaderCss","PLUS_ICON","getIconPath","category","name","colorType","CSS_BUNDLES","FileUploader","_FileUploader__componentLocale","set","this","_FileUploader_fileInputEl","_FileUploader_dragCounter","_FileUploader_generateId","Math","random","toString","substr","_FileUploader_handleDragEnter","e","preventDefault","stopPropagation","__classPrivateFieldSet","_a","__classPrivateFieldGet","isDragging","_FileUploader_handleDragLeave","_FileUploader_handleDragOver","_FileUploader_handleDrop","files","dataTransfer","_FileUploader_handleFiles","call","_FileUploader_handleFileSelect","click","_FileUploader_handleFileInput","target","validFiles","_FileUploader_instances","_FileUploader_getValidFiles","forEach","async","file","id","fileState","pending","progress","multiple","fileStates","clear","Map","uploadFunction","uploadPromise","state","get","updatedState","Object","assign","stateWithPromise","result","success","remoteId","fileUploadedCallback","originalName","error","_b","errors","upload","Error","message","value","_FileUploader_handleNameChange","event","detail","updatedFile","trim","isEditing","fileRenamedCallback","fileId","newName","_FileUploader_handleFileCancel","cancel","cancelUploadFunction","uploadCancelledCallback","delete","fileToDelete","shouldDelete","onBeforeDelete","_c","fileDeletedCallback","_d","fileDeletionErrorCallback","fileName","_FileUploader_handleConfirm","hasPendingUploads","Array","from","values","some","uploadedFiles","filter","isValid","map","length","dialogConfirmedCallback","_FileUploader_handleCancel","entries","dialogCanceledCallback","componentWillLoad","Locale","getComponentStrings","el","render","h","Host","class","model","type","accept","types","startsWith","join","onChange","ref","tabIndex","style","display","size","onDragEnter","onDragLeave","onDragOver","onDrop","onClick","src","header","uploadButtonMultiple","uploadButtonSingle","label","orText","_e","dragAndDrop","_f","acceptedFiles","replace","_g","allFilesAccepted","_h","fileList","attachedFiles","_j","filesCount","_k","_l","key","editable","canEditName","onFileNameChange","onFileDelete","onFileCancel","_m","buttons","disabled","_o","confirm","includes","baseType","split","toLowerCase","endsWith","invalidFileType","validation","_FileUploader_isValidFile","push","fileValidationErrorCallback"],"sources":["src/components/file-uploader/file-uploader.scss?tag=gx-ide-file-uploader&encapsulation=shadow","src/components/file-uploader/file-uploader.tsx"],"sourcesContent":["@import \"../../global/gx-ide-common.scss\";\n@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n display: block;\n inline-size: 100%;\n block-size: 100%;\n padding-inline-end: 0 !important;\n}\n\n.file-uploader-dialog {\n display: flex;\n flex-direction: column;\n block-size: 100%;\n background-color: var(--mer-surface__background);\n position: relative;\n\n .dialog-content {\n flex: 1;\n min-block-size: 0;\n overflow: auto;\n }\n\n .dialog-footer {\n padding-inline-end: var(--spacing-body-inline-end);\n }\n}\n\n.file-uploader {\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n\n &__list {\n display: flex;\n flex-direction: column;\n inline-size: 100%;\n block-size: 100%;\n\n &-header {\n position: sticky;\n top: 0;\n z-index: 1;\n background-color: var(--mer-surface__elevation--01);\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-inline-end: var(--spacing-body-inline-end);\n }\n\n &-content {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n padding-inline-end: var(--spacing-body-inline-end);\n padding-block-end: var(--mer-spacing--md);\n }\n }\n\n &__list-title-container {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n white-space: nowrap;\n }\n\n &__drop-zone {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n inline-size: calc(100% - var(--spacing-body-inline-end));\n block-size: calc(100% - var(--mer-spacing--sm));\n min-block-size: 200px;\n margin-block-end: var(--mer-spacing--sm);\n background: var(--mer-surface__elevation--01);\n border: var(--mer-border__width--md) dashed var(--mer-border-color__dim);\n border-radius: var(--mer-border__radius--md);\n transition: border-color 0.3s ease, background-color 0.3s ease,\n opacity 0.3s ease;\n\n &--dragging {\n border-color: var(--mer-accent__primary);\n background: var(--mer-accent__primary--hover);\n opacity: 0.7;\n }\n\n .text-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n margin-block-start: var(--mer-spacing--xs);\n }\n }\n}\n\n.hidden-input {\n display: none;\n}\n\n.label-primary-row {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n}\n","/* eslint-disable @stencil-community/own-methods-must-be-private */\n/* eslint-disable @stencil-community/own-props-must-be-private */\n/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { UploadedFile, FileUploadState, UploadResult } from \"./types\";\n\nconst PLUS_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"add\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"components/list-box\",\n \"components/edit\",\n \"utils/typography\",\n \"utils/spacing\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/elevation\",\n \"chameleon/scrollbar\"\n];\n\ntype FileValidationResult = {\n isValid: boolean;\n error?: string;\n};\n\n@Component({\n tag: \"gx-ide-file-uploader\",\n styleUrl: \"file-uploader.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/file-uploader\"]\n})\nexport class FileUploader {\n #_componentLocale: any;\n #fileInputEl!: HTMLInputElement;\n\n @Element() el!: HTMLGxIdeFileUploaderElement;\n\n /** Allowed file types/extensions (e.g. ['.jpg', '.png', 'image/*', 'application/pdf']) */\n @Prop() readonly types?: string[] = [];\n\n /** Whether multiple files can be selected */\n @Prop() readonly multiple: boolean = false;\n\n /** Whether file names can be edited */\n @Prop() readonly canEditName: boolean = false;\n\n /** Label to display in the uploader dialog */\n @Prop() readonly label?: string;\n\n /** Function to handle file upload */\n @Prop() readonly uploadFunction!: (\n file: File,\n progressCallback: (progress: number) => void\n ) => Promise<UploadResult>;\n\n /** Function to cancel file upload */\n @Prop() readonly cancelUploadFunction?: (fileId: string) => Promise<void>;\n\n /** Callback when a file is uploaded successfully */\n @Prop() readonly fileUploadedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback when the dialog is canceled */\n @Prop() readonly dialogCanceledCallback?: () => Promise<void>;\n\n /** Callback when the dialog is confirmed with files */\n @Prop() readonly dialogConfirmedCallback?: (\n files: UploadedFile[]\n ) => Promise<void>;\n\n /** Callback when upload is cancelled */\n @Prop() readonly uploadCancelledCallback?: (fileId: string) => Promise<void>;\n\n /** Callback when file is renamed */\n @Prop() readonly fileRenamedCallback?: (data: {\n fileId: string;\n newName: string;\n }) => Promise<void>;\n\n /** Callback when a file validation error occurs */\n @Prop() readonly fileValidationErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Callback when a file deletion error occurs */\n @Prop() readonly fileDeletionErrorCallback?: (data: {\n fileName: string;\n error: string;\n }) => Promise<void>;\n\n /** Callback when a file is deleted */\n @Prop() readonly fileDeletedCallback?: (file: UploadedFile) => Promise<void>;\n\n /** Callback before deleting a file to get confirmation */\n @Prop() readonly onBeforeDelete?: (file: UploadedFile) => Promise<boolean>;\n\n @State() private fileStates: Map<string, FileUploadState> = new Map();\n @State() private isDragging: boolean = false;\n #dragCounter = 0;\n\n /** Initializes component with locale strings */\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n /** Generates a unique ID for file identification */\n #generateId = (): string => {\n return Math.random().toString(36).substr(2, 9);\n };\n\n /** Validates if a file matches the allowed types */\n #isValidFile(file: File): FileValidationResult {\n // If no types specified, accept any file\n if (!this.types || this.types.length === 0) {\n return { isValid: true };\n }\n\n for (const type of this.types) {\n // Handle wildcards like 'image/*'\n if (type.includes(\"/*\")) {\n const baseType = type.split(\"/\")[0];\n if (file.type.startsWith(baseType)) {\n return { isValid: true };\n }\n }\n // Handle extensions like '.jpg'\n else if (type.startsWith(\".\")) {\n if (file.name.toLowerCase().endsWith(type.toLowerCase())) {\n return { isValid: true };\n }\n }\n // Handle specific MIME types\n else if (file.type === type || file.type === `application/${type}`) {\n return { isValid: true };\n }\n }\n\n return {\n isValid: false,\n error:\n this.#_componentLocale?.errors?.invalidFileType || \"Invalid file type\"\n };\n }\n\n /** Filters valid files from a FileList */\n #getValidFiles(files: FileList): File[] {\n const validFiles: File[] = [];\n\n Array.from(files).forEach(file => {\n const validation = this.#isValidFile(file);\n if (validation.isValid) {\n validFiles.push(file);\n } else {\n this.fileValidationErrorCallback?.({\n fileName: file.name,\n error: validation.error\n });\n }\n });\n\n return validFiles;\n }\n\n /** Handles drag enter event */\n #handleDragEnter = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter++;\n this.isDragging = true;\n };\n\n /** Handles drag leave event */\n #handleDragLeave = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.#dragCounter--;\n if (this.#dragCounter === 0) {\n this.isDragging = false;\n }\n };\n\n /** Handles drag over event */\n #handleDragOver = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n /** Handles drop event */\n #handleDrop = (e: DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n this.isDragging = false;\n this.#dragCounter = 0;\n\n const files = e.dataTransfer?.files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Triggers file input click */\n #handleFileSelect = () => {\n this.#fileInputEl?.click();\n };\n\n /** Handles file input change event */\n #handleFileInput = (e: Event) => {\n const files = (e.target as HTMLInputElement).files;\n if (files) {\n this.#handleFiles(files);\n }\n };\n\n /** Processes files and starts upload */\n #handleFiles = (files: FileList) => {\n const validFiles: File[] = this.#getValidFiles(files);\n\n validFiles.forEach(async file => {\n const id = this.#generateId();\n const fileState: FileUploadState = {\n id,\n name: file.name,\n file,\n pending: true,\n progress: 0\n };\n\n if (!this.multiple) {\n this.fileStates.clear();\n }\n\n this.fileStates = new Map(this.fileStates.set(id, fileState));\n\n if (this.uploadFunction) {\n try {\n const uploadPromise = this.uploadFunction(file, progress => {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n progress: progress,\n pending: progress < 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n });\n\n // Store the upload promise/object for potential cancellation\n const stateWithPromise = {\n ...this.fileStates.get(id),\n uploadPromise\n };\n this.fileStates = new Map(this.fileStates.set(id, stateWithPromise));\n\n const result = await uploadPromise;\n\n const state = this.fileStates.get(id);\n if (state) {\n if (result.success && result.remoteId) {\n const updatedState = {\n ...state,\n remoteId: result.remoteId,\n pending: false,\n progress: 100\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n\n await this.fileUploadedCallback?.({\n name: state.name,\n originalName: state.file.name,\n remoteId: result.remoteId\n });\n } else {\n const updatedState = {\n ...state,\n error: result.errors?.upload || \"Upload failed\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n } catch (error) {\n const state = this.fileStates.get(id);\n if (state) {\n const updatedState = {\n ...state,\n error:\n error instanceof Error\n ? error.message\n : \"Unknown error occurred\",\n pending: false\n };\n this.fileStates = new Map(this.fileStates.set(id, updatedState));\n }\n }\n }\n });\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles file name change */\n #handleNameChange = async (\n event: CustomEvent<{ id: string; name: string }>\n ) => {\n const { id, name } = event.detail;\n const file = this.fileStates.get(id);\n\n if (file) {\n const updatedFile = {\n ...file,\n name: name.trim(),\n isEditing: false\n };\n\n this.fileStates = new Map(this.fileStates.set(id, updatedFile));\n await this.fileRenamedCallback?.({ fileId: id, newName: name.trim() });\n }\n };\n\n /** Handles individual file cancellation or deletion */\n #handleFileCancel = async (event: CustomEvent<string>) => {\n const id = event.detail;\n const state = this.fileStates.get(id);\n if (state) {\n try {\n if (state.pending) {\n // Cancel upload in progress\n if (\n state.uploadPromise &&\n typeof state.uploadPromise.cancel === \"function\"\n ) {\n state.uploadPromise.cancel();\n } else if (this.cancelUploadFunction) {\n await this.cancelUploadFunction(id);\n }\n\n await this.uploadCancelledCallback?.(id);\n\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n } else {\n const fileToDelete: UploadedFile = {\n name: state.name,\n originalName: state.file.name,\n remoteId: state.remoteId\n };\n\n const shouldDelete = await this.onBeforeDelete?.(fileToDelete);\n\n if (shouldDelete) {\n await this.fileDeletedCallback?.(fileToDelete);\n this.fileStates.delete(id);\n this.fileStates = new Map(this.fileStates);\n }\n }\n } catch (error) {\n await this.fileDeletionErrorCallback?.({\n fileName: state.name,\n error:\n error instanceof Error ? error.message : \"Unknown error occurred\"\n });\n }\n }\n };\n\n /** Handles dialog confirmation */\n #handleConfirm = async () => {\n // Verificar si hay subidas en progreso\n const hasPendingUploads = Array.from(this.fileStates.values()).some(\n file => file.pending\n );\n\n if (hasPendingUploads) {\n return; // No permitir confirmar si hay subidas en progreso\n }\n\n // Obtener todos los archivos que están completamente subidos\n const uploadedFiles: UploadedFile[] = Array.from(this.fileStates.values())\n .filter(file => {\n const isValid = !file.pending && file.remoteId && !file.error;\n return isValid;\n })\n .map(file => ({\n name: file.name,\n originalName: file.file.name,\n remoteId: file.remoteId as string\n }));\n\n if (uploadedFiles.length > 0) {\n await this.dialogConfirmedCallback?.(uploadedFiles);\n }\n\n // Clear file states\n this.fileStates.clear();\n this.fileStates = new Map();\n\n // Reset file input\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n };\n\n /** Handles dialog cancellation */\n #handleCancel = async () => {\n try {\n // Cancelamos todas las subidas en progreso\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n\n // Limpiamos todos los estados\n this.fileStates.clear();\n this.fileStates = new Map();\n\n if (this.#fileInputEl) {\n this.#fileInputEl.value = \"\";\n }\n\n await this.dialogCanceledCallback?.();\n } catch (error) {\n this.fileStates.clear();\n this.fileStates = new Map();\n await this.dialogCanceledCallback?.();\n }\n };\n\n /** Clears the current file selection */\n @Method()\n async clear() {\n for (const [id, state] of this.fileStates.entries()) {\n if (state.pending && this.cancelUploadFunction) {\n try {\n await this.cancelUploadFunction(id);\n await this.uploadCancelledCallback?.(id);\n } catch (error) {\n // Error handling for upload cancellation\n }\n }\n }\n this.fileStates.clear();\n }\n\n render() {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <input\n type=\"file\"\n class=\"hidden-input\"\n multiple={this.multiple}\n accept={this.types\n ?.map(type => (type.startsWith(\".\") ? type : `.${type}`))\n .join(\",\")}\n onChange={this.#handleFileInput}\n ref={el => (this.#fileInputEl = el as HTMLInputElement)}\n aria-hidden=\"true\"\n tabIndex={-1}\n style={{ display: \"none\" }}\n />\n <div class=\"file-uploader-dialog\">\n <div class=\"dialog-content\">\n {this.isDragging || this.fileStates.size === 0 ? (\n <div\n class={{\n \"file-uploader__drop-zone\": true,\n \"file-uploader__drop-zone--dragging\": this.isDragging\n }}\n onDragEnter={this.#handleDragEnter}\n onDragLeave={this.#handleDragLeave}\n onDragOver={this.#handleDragOver}\n onDrop={this.#handleDrop}\n >\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-md\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n <div class=\"text-container\">\n <div class=\"label-primary-row\">\n <label class=\"label\">\n {this.label || this.#_componentLocale?.header.orText}\n </label>\n <label class=\"label\">\n {this.#_componentLocale?.header.dragAndDrop}\n </label>\n </div>\n <span class=\"caption\">\n {this.types && this.types.length > 0\n ? this.#_componentLocale?.header.acceptedFiles.replace(\n \"{0}\",\n this.types.join(\", \")\n )\n : this.#_componentLocale?.header.allFilesAccepted}\n </span>\n </div>\n </div>\n ) : (\n <div class=\"file-uploader__list\">\n <div class=\"file-uploader__list-header spacing-body-block-end\">\n <div class=\"file-uploader__list-title-container\">\n <label class=\"label\">\n {this.label ||\n this.#_componentLocale?.fileList.attachedFiles}\n </label>\n <span class=\"caption\">\n {this.#_componentLocale?.fileList.filesCount.replace(\n \"{0}\",\n this.fileStates.size.toString()\n )}\n </span>\n </div>\n {this.multiple && (\n <button\n class=\"button-tertiary button-icon-and-text\"\n type=\"button\"\n onClick={this.#handleFileSelect}\n >\n <ch-image class=\"icon-md\" src={PLUS_ICON}></ch-image>\n <label class=\"label\">\n {this.multiple\n ? this.#_componentLocale?.header.uploadButtonMultiple\n : this.#_componentLocale?.header.uploadButtonSingle}\n </label>\n </button>\n )}\n </div>\n <div class=\"file-uploader__list-content scrollable\">\n {Array.from(this.fileStates.values()).map(file => (\n <gx-ide-file-item\n key={file.id}\n file={file}\n editable={this.canEditName}\n onFileNameChange={this.#handleNameChange}\n onFileDelete={this.#handleFileCancel}\n onFileCancel={this.#handleFileCancel}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n <div class=\"dialog-footer control-footer control-footer-with-border\">\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#handleCancel}\n >\n {this.#_componentLocale?.buttons.cancel}\n </button>\n <button\n class=\"button-primary\"\n type=\"button\"\n onClick={this.#handleConfirm}\n disabled={\n this.fileStates.size === 0 ||\n Array.from(this.fileStates.values()).some(\n file => file.pending\n )\n }\n >\n {this.#_componentLocale?.buttons.confirm}\n </button>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,14 @@
1
- import { r as t, c as e, g as i, h as s, H as n, a } from "./p-97107ecc.js";
1
+ import { r as t, c as e, g as i, h as s, H as n, a as o } from "./p-97107ecc.js";
2
2
 
3
- import { g as o } from "./p-401bfc97.js";
3
+ import { g as a } from "./p-d42e842b.js";
4
+
5
+ import "./p-d4ecd3bb.js";
6
+
7
+ import "lit";
8
+
9
+ import "lit/directives/when.js";
10
+
11
+ import "lit/directives/if-defined.js";
4
12
 
5
13
  import { c as r } from "./p-9a03ac9f.js";
6
14
 
@@ -23,7 +31,7 @@ var f = undefined && undefined.__classPrivateFieldGet || function(t, e, i, s) {
23
31
  return i === "m" ? s : i === "a" ? s.call(t) : s ? s.value : e.get(t);
24
32
  };
25
33
 
26
- var p, u, m, b, v, w, g, y, k, M, W, _, x, T, j, C, E, $;
34
+ var p, u, m, b, v, w, g, y, k, M, W, _, x, j, T, C, E, $;
27
35
 
28
36
  const A = [ "resets/box-sizing", "utils/form--full", "utils/layout", "utils/typography", "utils/spacing", "components/list-box", "components/tooltip", "chameleon/scrollbar" ];
29
37
 
@@ -31,7 +39,7 @@ const S = class {
31
39
  constructor(n) {
32
40
  t(this, n);
33
41
  this.componentDidRenderFirstTime = e(this, "componentDidRenderFirstTime", 7);
34
- p.set(this, o({
42
+ p.set(this, a({
35
43
  category: "gemini-tools",
36
44
  name: "show-more-horizontal",
37
45
  colorType: "on-elevation"
@@ -89,7 +97,7 @@ const S = class {
89
97
  delay: r.tooltipSettings.delay
90
98
  }, this.validatableControls.get(t.id).message);
91
99
  }));
92
- T.set(this, (() => {
100
+ j.set(this, (() => {
93
101
  // populate validatableControls with the controls that could have errors.
94
102
  const t = [ f(this, k, "f") ];
95
103
  t.forEach((t => {
@@ -102,7 +110,7 @@ const S = class {
102
110
  }
103
111
  }));
104
112
  }));
105
- j.set(this, (t => {
113
+ T.set(this, (t => {
106
114
  this.kbName = t.detail;
107
115
  }));
108
116
  C.set(this, (async () => {
@@ -167,7 +175,7 @@ const S = class {
167
175
  }
168
176
  componentDidLoad() {
169
177
  this.versionSelectedType = f(this, y, "f").value;
170
- f(this, T, "f").call(this);
178
+ f(this, j, "f").call(this);
171
179
  }
172
180
  componentDidRender() {
173
181
  if (!f(this, v, "f")) {
@@ -213,7 +221,7 @@ const S = class {
213
221
  class: "input",
214
222
  id: "kb-name",
215
223
  value: this.kbName,
216
- onInput: f(this, j, "f"),
224
+ onInput: f(this, T, "f"),
217
225
  placeholder: f(this, m, "f").kb.localKbNamePlaceholder,
218
226
  ref: t => d(this, k, t, "f")
219
227
  }), f(this, x, "f").call(this, f(this, k, "f"))), s("div", {
@@ -251,16 +259,16 @@ const S = class {
251
259
  return [ "gx-ide-assets/share-kb" ];
252
260
  }
253
261
  get el() {
254
- return a(this);
262
+ return o(this);
255
263
  }
256
264
  };
257
265
 
258
266
  p = new WeakMap, u = new WeakMap, m = new WeakMap, b = new WeakMap, v = new WeakMap,
259
267
  w = new WeakMap, g = new WeakMap, y = new WeakMap, k = new WeakMap, M = new WeakMap,
260
- W = new WeakMap, _ = new WeakMap, x = new WeakMap, T = new WeakMap, j = new WeakMap,
268
+ W = new WeakMap, _ = new WeakMap, x = new WeakMap, j = new WeakMap, T = new WeakMap,
261
269
  C = new WeakMap, E = new WeakMap, $ = new WeakMap;
262
270
 
263
271
  S.style = c;
264
272
 
265
273
  export { S as gx_ide_share_kb };
266
- //# sourceMappingURL=p-098a7288.entry.js.map
274
+ //# sourceMappingURL=p-1d647672.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["shareKbCss","CSS_BUNDLES","GxIdeShareKb","_GxIdeShareKb_showMoreIcon","set","this","getIconPath","category","name","colorType","_GxIdeShareKb_versionsSelect","value","caption","_GxIdeShareKb__componentLocale","_GxIdeShareKb_kbVersions","_GxIdeShareKb_renderedFirstTime","_GxIdeShareKb_shortcutsSrc","getAssetPath","_GxIdeShareKb_selectedKbId","_GxIdeShareKb_versionSelectedTypeEl","_GxIdeShareKb_KBNameEl","_GxIdeShareKb_cancelHandler","cancelCallback","_GxIdeShareKb_changeConnectionHandler","async","changeConnectionCallback","authenticationType","connectionData","serverUrl","userName","userPassword","_GxIdeShareKb_shareKBHandler","versionSelectedType","__classPrivateFieldSet","shareKBCallback","kbName","versionList","__classPrivateFieldGet","allVersions","then","formSubmitResult","validatableControls","validateControls","_GxIdeShareKb_evaluateTooltipRender","controlReference","_b","_a","get","id","hasError","_c","message","h","class","actionElement","blockAlign","config","tooltipSettings","inlineAlign","delay","_GxIdeShareKb_initializeValidatableControls","forEach","validatableControl","reference","undefined","_GxIdeShareKb_kbNameInputHandler","event","detail","_GxIdeShareKb_selectedVersionHandler","selectKBVersionsCallback","result","length","map","kbVersion","localKbNameInputValue","versionsValueInput","kb","versionsPlaceholder","toString","versionSelectedFieldValue","oneVersionSelectedFieldValue","_GxIdeShareKb_versionsChangedHandler","enableSelectVersionsButton","_GxIdeShareKb_renderFooter","disableShareKbButton","onClick","part","footer","cancel","disabled","shareKB","Map","componentDidLoad","call","componentDidRender","componentDidRenderFirstTime","emit","componentName","componentWillLoad","Locale","getComponentStrings","el","render","Host","model","src","ref","chShortcutsEl","header","user","change","htmlFor","aliasLabel","onInput","placeholder","localKbNamePlaceholder","onChange","versionsLabel","readonly","versionsPlaceholderDisabled"],"sources":["src/components/team-dev/share-kb/share-kb.scss?tag=gx-ide-share-kb&encapsulation=shadow","src/components/team-dev/share-kb/share-kb.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - -\n// Header\n// - - - - - - - - - - -\n\nheader {\n display: grid;\n grid-template-rows: max-content;\n grid-template-columns: 1fr 1fr max-content;\n}\n\n.button-change {\n align-self: center;\n justify-self: end;\n}\n\n// - - - - - - - - - - -\n// Main\n// - - - - - - - - - - -\n\n.main {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: max-content 1fr max-content max-content;\n}\n\n.search-kbs {\n inline-size: 50%;\n}\n\n.versions-container {\n grid-auto-rows: max-content;\n\n &__input {\n display: grid;\n grid-template-columns: 1fr max-content;\n gap: var(--mer-spacing--xs);\n }\n}\n\n.button-icon-only.button-tertiary {\n border-color: var(--mer-color__neutral-gray--500);\n border-width: var(--mer-border__width--sm);\n border-radius: var(--mer-border__radius--sm);\n}\n\n.button-icon-only:hover {\n border-color: var(--mer-color__neutral-gray--100);\n}\n","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Event,\n EventEmitter,\n Element,\n State,\n getAssetPath\n} from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport { config } from \"../../../common/config\";\nimport { GXServerConnectionData } from \"../connect-gx-server/connect-gx-server\";\nimport { FormSubmitResult } from \"../../../common/types\";\nimport {\n ControlValidation,\n validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/list-box\",\n \"components/tooltip\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-share-kb\",\n styleUrl: \"share-kb.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/share-kb\"]\n})\nexport class GxIdeShareKb {\n #showMoreIcon = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"on-elevation\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"Trunk\", caption: \"Trunk Version\" },\n { value: \"All\", caption: \"All Versions\" },\n { value: \"Select\", caption: \"Select Version\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n #kbVersions: KBVersion[] = [];\n #renderedFirstTime = false;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/create-kb-from-server/shortcuts.json`\n );\n #selectedKbId: string;\n\n #versionSelectedTypeEl: HTMLChRadioGroupRenderElement;\n\n @Element() el: HTMLGxIdeShareKbElement;\n\n #KBNameEl!: HTMLChEditElement;\n\n /**\n * State to enable/disable the select versions button\n */\n @State() enableSelectVersionsButton: boolean = false;\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The version selected type\n */\n @State() versionSelectedType: VersionOption;\n\n /**\n * String value to show the number of versions selected (\"N versions selected\")\n */\n @State() versionsValueInput: string = \"\";\n\n /**\n * Set of data required when executing any of the callbacks that require a connection to the server.\n */\n @Prop() readonly connectionData: GXServerConnectionData;\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * The host reopens the gx-ide-connect-server login modal with the previous data, and closes the current modal\n */\n @Prop() readonly changeConnectionCallback: (\n data: GXServerConnectionData\n ) => Promise<void>;\n\n /**\n * The name of the KB.\n */\n @Prop({ mutable: true }) kbName: string;\n\n /**\n * Callback that must be invoked when the Share button is pressed.\n */\n @Prop() readonly shareKBCallback: (\n data: ShareKBData\n ) => Promise<FormSubmitResult>;\n\n /**\n * Callback invoked by pressing the ellipsis in the version selector. Receives the KB selected by the user, and displays the version selector dialog. Returns a list of versions chosen by the user.\n */\n @Prop() readonly selectKBVersionsCallback: (\n selectedKB: string\n ) => Promise<KBVersion[]>;\n\n /**\n * Emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.versionSelectedType = this.#versionSelectedTypeEl\n .value as VersionOption;\n\n this.#initializeValidatableControls();\n }\n\n componentDidRender() {\n if (!this.#renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this.#_componentLocale.componentName\n );\n this.#renderedFirstTime = true;\n }\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #changeConnectionHandler = async (): Promise<void> => {\n this.changeConnectionCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n });\n };\n\n #shareKBHandler = async (): Promise<void> => {\n if (this.versionSelectedType !== \"Select\") {\n this.#kbVersions = [];\n }\n this.shareKBCallback({\n name: this.kbName,\n serverUrl: this.connectionData.serverUrl,\n versionList: this.#kbVersions,\n allVersions: this.versionSelectedType === \"All\"\n }).then((formSubmitResult: FormSubmitResult) => {\n this.validatableControls = validateControls(\n formSubmitResult,\n this.validatableControls\n );\n });\n };\n\n // TODO: evaluate if this should be a global helper function.\n // It is used on other dialogs as well.\n #evaluateTooltipRender = (\n controlReference: HTMLElement\n ): HTMLChTooltipElement =>\n this.validatableControls?.get(controlReference?.id)?.hasError &&\n this.validatableControls.get(controlReference.id)?.message && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={controlReference as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.validatableControls.get(controlReference.id).message}\n </ch-tooltip>\n );\n\n #initializeValidatableControls = () => {\n // populate validatableControls with the controls that could have errors.\n const validatableControls: HTMLElement[] = [this.#KBNameEl];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #kbNameInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.kbName = event.detail as string;\n };\n\n #selectedVersionHandler = async () => {\n if (this.selectKBVersionsCallback) {\n await this.selectKBVersionsCallback(this.#selectedKbId).then(result => {\n if (result?.length) {\n this.#kbVersions = result.map(kbVersion => ({\n id: kbVersion.id,\n name: kbVersion.name\n }));\n\n if (result.length === 1 && this.#kbVersions[0].id === 0) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput =\n this.#_componentLocale.kb.versionsPlaceholder;\n } else if (result.length > 1) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput = `${result.length.toString()} ${\n this.#_componentLocale.kb.versionSelectedFieldValue\n }`;\n } else {\n this.localKbNameInputValue = `${this.#selectedKbId}_${\n this.#kbVersions[0].name\n }`;\n this.versionsValueInput = `${result[0].name} ${\n this.#_componentLocale.kb.oneVersionSelectedFieldValue\n }`;\n }\n }\n });\n }\n };\n\n #versionsChangedHandler = (event: CustomEvent<string>) => {\n this.versionSelectedType = event.detail as VersionOption;\n if (this.versionSelectedType === \"Select\") {\n this.enableSelectVersionsButton = true;\n } else {\n this.enableSelectVersionsButton = false;\n }\n };\n\n #renderFooter = () => {\n const disableShareKbButton = !this.kbName.length;\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end\">\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n part=\"button button-cancel\"\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // share kb button\n class=\"button-primary\"\n onClick={!disableShareKbButton && this.#shareKBHandler}\n disabled={disableShareKbButton}\n part=\"button button-create-kb\"\n >\n {this.#_componentLocale.footer.shareKB}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border space-body spacing-body-inline spacing-body-block-start\">\n <div class=\"field field-block\">\n <label class=\"label\">\n {this.#_componentLocale.header.serverUrl}\n </label>\n <p>{this.connectionData.serverUrl}</p>\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\">{this.#_componentLocale.header.user}</label>\n <p>{this.connectionData.userName}</p>\n </div>\n\n <button\n class=\"button-tertiary button-change\"\n onClick={this.#changeConnectionHandler}\n >\n {this.#_componentLocale.header.change}\n </button>\n </header>\n\n <section class=\"main field-group spacing-body\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"alias\">\n {this.#_componentLocale.kb.aliasLabel}\n </label>\n <ch-edit\n // alias\n class=\"input\"\n id=\"kb-name\"\n value={this.kbName}\n onInput={this.#kbNameInputHandler}\n placeholder={this.#_componentLocale.kb.localKbNamePlaceholder}\n ref={(el: HTMLChEditElement) =>\n (this.#KBNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#KBNameEl)}\n </div>\n\n <div class=\"versions-container field-group\">\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#versionsChangedHandler}\n value={this.#versionsSelect[0].value}\n ref={(el: HTMLChRadioGroupRenderElement) =>\n (this.#versionSelectedTypeEl =\n el as HTMLChRadioGroupRenderElement)\n }\n ></ch-radio-group-render>\n\n {this.versionSelectedType === \"Select\" && (\n <div class=\"versions-container__item field-group\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"control-id-1\">\n {this.#_componentLocale.kb.versionsLabel}\n </label>\n <div class=\"versions-container__input\">\n <ch-edit\n class=\"input\"\n readonly\n placeholder={\n this.enableSelectVersionsButton\n ? this.#_componentLocale.kb.versionsPlaceholder\n : this.#_componentLocale.kb\n .versionsPlaceholderDisabled\n }\n value={this.versionsValueInput}\n ></ch-edit>\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#selectedVersionHandler}\n disabled={!this.enableSelectVersionsButton}\n >\n <ch-image\n src={this.#showMoreIcon}\n class=\"icon-sm\"\n ></ch-image>\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </section>\n\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type KBData = {\n id: string;\n name: string;\n};\n\nexport type KBVersion = {\n id: number;\n name: string;\n type?: VersionType;\n};\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n kbs: KBData[];\n};\n\nexport type ShareKBData = {\n name: string;\n serverUrl: string;\n versionList: KBVersion[];\n allVersions: boolean;\n};\n\nexport type VersionOption = \"Trunk\" | \"All\" | \"Select\";\n\nexport type VersionType = \"Branch\" | \"Frozen\";\n"],"mappings":"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"}
1
+ {"version":3,"names":["shareKbCss","CSS_BUNDLES","GxIdeShareKb","_GxIdeShareKb_showMoreIcon","set","this","getIconPath","category","name","colorType","_GxIdeShareKb_versionsSelect","value","caption","_GxIdeShareKb__componentLocale","_GxIdeShareKb_kbVersions","_GxIdeShareKb_renderedFirstTime","_GxIdeShareKb_shortcutsSrc","getAssetPath","_GxIdeShareKb_selectedKbId","_GxIdeShareKb_versionSelectedTypeEl","_GxIdeShareKb_KBNameEl","_GxIdeShareKb_cancelHandler","cancelCallback","_GxIdeShareKb_changeConnectionHandler","async","changeConnectionCallback","authenticationType","connectionData","serverUrl","userName","userPassword","_GxIdeShareKb_shareKBHandler","versionSelectedType","__classPrivateFieldSet","shareKBCallback","kbName","versionList","__classPrivateFieldGet","allVersions","then","formSubmitResult","validatableControls","validateControls","_GxIdeShareKb_evaluateTooltipRender","controlReference","_b","_a","get","id","hasError","_c","message","h","class","actionElement","blockAlign","config","tooltipSettings","inlineAlign","delay","_GxIdeShareKb_initializeValidatableControls","forEach","validatableControl","reference","undefined","_GxIdeShareKb_kbNameInputHandler","event","detail","_GxIdeShareKb_selectedVersionHandler","selectKBVersionsCallback","result","length","map","kbVersion","localKbNameInputValue","versionsValueInput","kb","versionsPlaceholder","toString","versionSelectedFieldValue","oneVersionSelectedFieldValue","_GxIdeShareKb_versionsChangedHandler","enableSelectVersionsButton","_GxIdeShareKb_renderFooter","disableShareKbButton","onClick","part","footer","cancel","disabled","shareKB","Map","componentDidLoad","call","componentDidRender","componentDidRenderFirstTime","emit","componentName","componentWillLoad","Locale","getComponentStrings","el","render","Host","model","src","ref","chShortcutsEl","header","user","change","htmlFor","aliasLabel","onInput","placeholder","localKbNamePlaceholder","onChange","versionsLabel","readonly","versionsPlaceholderDisabled"],"sources":["src/components/team-dev/share-kb/share-kb.scss?tag=gx-ide-share-kb&encapsulation=shadow","src/components/team-dev/share-kb/share-kb.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - -\n// Header\n// - - - - - - - - - - -\n\nheader {\n display: grid;\n grid-template-rows: max-content;\n grid-template-columns: 1fr 1fr max-content;\n}\n\n.button-change {\n align-self: center;\n justify-self: end;\n}\n\n// - - - - - - - - - - -\n// Main\n// - - - - - - - - - - -\n\n.main {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: max-content 1fr max-content max-content;\n}\n\n.search-kbs {\n inline-size: 50%;\n}\n\n.versions-container {\n grid-auto-rows: max-content;\n\n &__input {\n display: grid;\n grid-template-columns: 1fr max-content;\n gap: var(--mer-spacing--xs);\n }\n}\n\n.button-icon-only.button-tertiary {\n border-color: var(--mer-color__neutral-gray--500);\n border-width: var(--mer-border__width--sm);\n border-radius: var(--mer-border__radius--sm);\n}\n\n.button-icon-only:hover {\n border-color: var(--mer-color__neutral-gray--100);\n}\n","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Event,\n EventEmitter,\n Element,\n State,\n getAssetPath\n} from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport { config } from \"../../../common/config\";\nimport { GXServerConnectionData } from \"../connect-gx-server/connect-gx-server\";\nimport { FormSubmitResult } from \"../../../common/types\";\nimport {\n ControlValidation,\n validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\nimport { ChEditCustomEvent } from \"@genexus/chameleon-controls-library\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/list-box\",\n \"components/tooltip\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-share-kb\",\n styleUrl: \"share-kb.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/share-kb\"]\n})\nexport class GxIdeShareKb {\n #showMoreIcon = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"on-elevation\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"Trunk\", caption: \"Trunk Version\" },\n { value: \"All\", caption: \"All Versions\" },\n { value: \"Select\", caption: \"Select Version\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n #kbVersions: KBVersion[] = [];\n #renderedFirstTime = false;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/create-kb-from-server/shortcuts.json`\n );\n #selectedKbId: string;\n\n #versionSelectedTypeEl: HTMLChRadioGroupRenderElement;\n\n @Element() el: HTMLGxIdeShareKbElement;\n\n #KBNameEl!: HTMLChEditElement;\n\n /**\n * State to enable/disable the select versions button\n */\n @State() enableSelectVersionsButton: boolean = false;\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The version selected type\n */\n @State() versionSelectedType: VersionOption;\n\n /**\n * String value to show the number of versions selected (\"N versions selected\")\n */\n @State() versionsValueInput: string = \"\";\n\n /**\n * Set of data required when executing any of the callbacks that require a connection to the server.\n */\n @Prop() readonly connectionData: GXServerConnectionData;\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * The host reopens the gx-ide-connect-server login modal with the previous data, and closes the current modal\n */\n @Prop() readonly changeConnectionCallback: (\n data: GXServerConnectionData\n ) => Promise<void>;\n\n /**\n * The name of the KB.\n */\n @Prop({ mutable: true }) kbName: string;\n\n /**\n * Callback that must be invoked when the Share button is pressed.\n */\n @Prop() readonly shareKBCallback: (\n data: ShareKBData\n ) => Promise<FormSubmitResult>;\n\n /**\n * Callback invoked by pressing the ellipsis in the version selector. Receives the KB selected by the user, and displays the version selector dialog. Returns a list of versions chosen by the user.\n */\n @Prop() readonly selectKBVersionsCallback: (\n selectedKB: string\n ) => Promise<KBVersion[]>;\n\n /**\n * Emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.versionSelectedType = this.#versionSelectedTypeEl\n .value as VersionOption;\n\n this.#initializeValidatableControls();\n }\n\n componentDidRender() {\n if (!this.#renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this.#_componentLocale.componentName\n );\n this.#renderedFirstTime = true;\n }\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #changeConnectionHandler = async (): Promise<void> => {\n this.changeConnectionCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n });\n };\n\n #shareKBHandler = async (): Promise<void> => {\n if (this.versionSelectedType !== \"Select\") {\n this.#kbVersions = [];\n }\n this.shareKBCallback({\n name: this.kbName,\n serverUrl: this.connectionData.serverUrl,\n versionList: this.#kbVersions,\n allVersions: this.versionSelectedType === \"All\"\n }).then((formSubmitResult: FormSubmitResult) => {\n this.validatableControls = validateControls(\n formSubmitResult,\n this.validatableControls\n );\n });\n };\n\n // TODO: evaluate if this should be a global helper function.\n // It is used on other dialogs as well.\n #evaluateTooltipRender = (\n controlReference: HTMLElement\n ): HTMLChTooltipElement =>\n this.validatableControls?.get(controlReference?.id)?.hasError &&\n this.validatableControls.get(controlReference.id)?.message && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={controlReference as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.validatableControls.get(controlReference.id).message}\n </ch-tooltip>\n );\n\n #initializeValidatableControls = () => {\n // populate validatableControls with the controls that could have errors.\n const validatableControls: HTMLElement[] = [this.#KBNameEl];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #kbNameInputHandler = (event: ChEditCustomEvent<string> | InputEvent) => {\n this.kbName = event.detail as string;\n };\n\n #selectedVersionHandler = async () => {\n if (this.selectKBVersionsCallback) {\n await this.selectKBVersionsCallback(this.#selectedKbId).then(result => {\n if (result?.length) {\n this.#kbVersions = result.map(kbVersion => ({\n id: kbVersion.id,\n name: kbVersion.name\n }));\n\n if (result.length === 1 && this.#kbVersions[0].id === 0) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput =\n this.#_componentLocale.kb.versionsPlaceholder;\n } else if (result.length > 1) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput = `${result.length.toString()} ${\n this.#_componentLocale.kb.versionSelectedFieldValue\n }`;\n } else {\n this.localKbNameInputValue = `${this.#selectedKbId}_${\n this.#kbVersions[0].name\n }`;\n this.versionsValueInput = `${result[0].name} ${\n this.#_componentLocale.kb.oneVersionSelectedFieldValue\n }`;\n }\n }\n });\n }\n };\n\n #versionsChangedHandler = (event: CustomEvent<string>) => {\n this.versionSelectedType = event.detail as VersionOption;\n if (this.versionSelectedType === \"Select\") {\n this.enableSelectVersionsButton = true;\n } else {\n this.enableSelectVersionsButton = false;\n }\n };\n\n #renderFooter = () => {\n const disableShareKbButton = !this.kbName.length;\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end\">\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n part=\"button button-cancel\"\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // share kb button\n class=\"button-primary\"\n onClick={!disableShareKbButton && this.#shareKBHandler}\n disabled={disableShareKbButton}\n part=\"button button-create-kb\"\n >\n {this.#_componentLocale.footer.shareKB}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border space-body spacing-body-inline spacing-body-block-start\">\n <div class=\"field field-block\">\n <label class=\"label\">\n {this.#_componentLocale.header.serverUrl}\n </label>\n <p>{this.connectionData.serverUrl}</p>\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\">{this.#_componentLocale.header.user}</label>\n <p>{this.connectionData.userName}</p>\n </div>\n\n <button\n class=\"button-tertiary button-change\"\n onClick={this.#changeConnectionHandler}\n >\n {this.#_componentLocale.header.change}\n </button>\n </header>\n\n <section class=\"main field-group spacing-body\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"alias\">\n {this.#_componentLocale.kb.aliasLabel}\n </label>\n <ch-edit\n // alias\n class=\"input\"\n id=\"kb-name\"\n value={this.kbName}\n onInput={this.#kbNameInputHandler}\n placeholder={this.#_componentLocale.kb.localKbNamePlaceholder}\n ref={(el: HTMLChEditElement) =>\n (this.#KBNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#KBNameEl)}\n </div>\n\n <div class=\"versions-container field-group\">\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#versionsChangedHandler}\n value={this.#versionsSelect[0].value}\n ref={(el: HTMLChRadioGroupRenderElement) =>\n (this.#versionSelectedTypeEl =\n el as HTMLChRadioGroupRenderElement)\n }\n ></ch-radio-group-render>\n\n {this.versionSelectedType === \"Select\" && (\n <div class=\"versions-container__item field-group\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"control-id-1\">\n {this.#_componentLocale.kb.versionsLabel}\n </label>\n <div class=\"versions-container__input\">\n <ch-edit\n class=\"input\"\n readonly\n placeholder={\n this.enableSelectVersionsButton\n ? this.#_componentLocale.kb.versionsPlaceholder\n : this.#_componentLocale.kb\n .versionsPlaceholderDisabled\n }\n value={this.versionsValueInput}\n ></ch-edit>\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#selectedVersionHandler}\n disabled={!this.enableSelectVersionsButton}\n >\n <ch-image\n src={this.#showMoreIcon}\n class=\"icon-sm\"\n ></ch-image>\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </section>\n\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type KBData = {\n id: string;\n name: string;\n};\n\nexport type KBVersion = {\n id: number;\n name: string;\n type?: VersionType;\n};\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n kbs: KBData[];\n};\n\nexport type ShareKBData = {\n name: string;\n serverUrl: string;\n versionList: KBVersion[];\n allVersions: boolean;\n};\n\nexport type VersionOption = \"Trunk\" | \"All\" | \"Select\";\n\nexport type VersionType = \"Branch\" | \"Frozen\";\n"],"mappings":"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"}