@genexus/genexus-ide-ui 1.1.4 → 1.1.6

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 (398) hide show
  1. package/dist/cjs/MERCURY_ASSETS-972bf7f4.js +9 -0
  2. package/dist/cjs/MERCURY_ASSETS-972bf7f4.js.map +1 -0
  3. package/dist/cjs/code-render-55d37767.js +86 -0
  4. package/dist/cjs/code-render-55d37767.js.map +1 -0
  5. package/dist/cjs/{common-72f91a78.js → common-090e6d3a.js} +28 -12
  6. package/dist/cjs/common-090e6d3a.js.map +1 -0
  7. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  8. package/dist/cjs/gx-ide-ai-message.cjs.entry.js +2 -3
  9. package/dist/cjs/gx-ide-ai-message.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js +5 -6
  11. package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js.map +1 -1
  12. package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js +4 -5
  13. package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js.map +1 -1
  14. package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js +239 -0
  15. package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js.map +1 -0
  16. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +3 -4
  17. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
  18. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +2 -3
  19. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
  20. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js +2 -3
  21. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js.map +1 -1
  22. package/dist/cjs/gx-ide-data-selector.cjs.entry.js +3 -4
  23. package/dist/cjs/gx-ide-data-selector.cjs.entry.js.map +1 -1
  24. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +2 -3
  25. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -1
  26. package/dist/cjs/gx-ide-design-import.cjs.entry.js +7 -8
  27. package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
  28. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +3 -4
  29. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js.map +1 -1
  30. package/dist/cjs/gx-ide-file-item.cjs.entry.js +5 -6
  31. package/dist/cjs/gx-ide-file-item.cjs.entry.js.map +1 -1
  32. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +2 -3
  33. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
  34. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +6 -7
  35. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js.map +1 -1
  36. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +5 -6
  37. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
  38. package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js +4 -5
  39. package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js.map +1 -1
  40. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +4 -5
  41. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -1
  42. package/dist/cjs/gx-ide-new-environment.cjs.entry.js +1 -1
  43. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +3 -4
  44. package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
  45. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +4 -5
  46. package/dist/cjs/gx-ide-object-selector.cjs.entry.js.map +1 -1
  47. package/dist/cjs/gx-ide-open-api-import.cjs.entry.js +3 -4
  48. package/dist/cjs/gx-ide-open-api-import.cjs.entry.js.map +1 -1
  49. package/dist/cjs/gx-ide-references.cjs.entry.js +3 -4
  50. package/dist/cjs/gx-ide-references.cjs.entry.js.map +1 -1
  51. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +202 -98
  52. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
  53. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +3 -4
  54. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
  55. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +2 -3
  56. package/dist/cjs/gx-ide-share-kb.cjs.entry.js.map +1 -1
  57. package/dist/cjs/gx-ide-splash.cjs.entry.js +3 -4
  58. package/dist/cjs/gx-ide-splash.cjs.entry.js.map +1 -1
  59. package/dist/cjs/gx-ide-start-page.cjs.entry.js +5 -6
  60. package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
  61. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +1 -1
  62. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
  63. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +1 -1
  64. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
  65. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js +2 -3
  66. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js.map +1 -1
  67. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js +3 -4
  68. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js.map +1 -1
  69. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +1 -1
  70. package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
  71. package/dist/cjs/gx-ide-ww-images.cjs.entry.js +2 -2
  72. package/dist/cjs/gx-ide-ww-images.cjs.entry.js.map +1 -1
  73. package/dist/cjs/index.cjs.js +8 -2
  74. package/dist/cjs/index.cjs.js.map +1 -1
  75. package/dist/cjs/loader.cjs.js +1 -1
  76. package/dist/collection/collection-manifest.json +2 -1
  77. package/dist/collection/common/common.js +19 -6
  78. package/dist/collection/common/common.js.map +1 -1
  79. package/dist/collection/common/images/ai-avatar.svg +11 -0
  80. package/dist/collection/components/bpm/application-declaration/bpm-app-declaration.css +1 -0
  81. package/dist/collection/components/chat/chat-container/chat-container.css +118 -0
  82. package/dist/collection/components/chat/chat-container/chat-container.js +218 -0
  83. package/dist/collection/components/chat/chat-container/chat-container.js.map +1 -0
  84. package/dist/collection/components/chat/chat-container/gx-ide-assets/chat-container/langs/chat-container.lang.en.json +9 -0
  85. package/dist/collection/components/chat/chat-container/gx-ide-assets/chat-container/langs/chat-container.lang.ja.json +9 -0
  86. package/dist/collection/components/chat/chat-container/gx-ide-assets/chat-container/langs/chat-container.lang.zh.json +9 -0
  87. package/dist/collection/components/chat/chat-welcome/chat-welcome.css +109 -0
  88. package/dist/collection/components/chat/chat-welcome/chat-welcome.js +228 -0
  89. package/dist/collection/components/chat/chat-welcome/chat-welcome.js.map +1 -0
  90. package/dist/collection/components/chat/chat-welcome/gx-ide-assets/chat-welcome/helpers.js +3 -0
  91. package/dist/collection/components/chat/chat-welcome/gx-ide-assets/chat-welcome/helpers.js.map +1 -0
  92. package/dist/collection/components/chat/chat-welcome/gx-ide-assets/chat-welcome/helpers.tsx +31 -0
  93. package/dist/collection/components/chat/chat-welcome/gx-ide-assets/chat-welcome/images/ai-avatar-welcome.svg +21 -0
  94. package/dist/collection/components/chat/chat-welcome/gx-ide-assets/chat-welcome/images/ai-avatar.svg +11 -0
  95. package/dist/collection/components/chat/chat-welcome/gx-ide-assets/chat-welcome/images/header-illustration.svg +24 -0
  96. package/dist/collection/components/chat/chat-welcome/gx-ide-assets/chat-welcome/langs/chat-welcome.lang.en.json +10 -0
  97. package/dist/collection/components/chat/chat-welcome/gx-ide-assets/chat-welcome/langs/chat-welcome.lang.ja.json +10 -0
  98. package/dist/collection/components/chat/chat-welcome/gx-ide-assets/chat-welcome/langs/chat-welcome.lang.zh.json +10 -0
  99. package/dist/collection/components/chat/code-render.js +65 -0
  100. package/dist/collection/components/chat/code-render.js.map +1 -0
  101. package/dist/collection/components/data-selector/data-selector.css +1 -0
  102. package/dist/collection/components/object-selector/object-selector.css +1 -0
  103. package/dist/collection/components/team-dev/commit/commit.css +1 -0
  104. package/dist/collection/components/team-dev/update/update.css +2 -0
  105. package/dist/collection/components/ww-attributes/ww-attributes.css +1 -0
  106. package/dist/collection/components/ww-files/ww-files.css +1 -0
  107. package/dist/collection/components/ww-images/ww-images.css +1 -0
  108. package/dist/collection/index.js +5 -1
  109. package/dist/collection/index.js.map +1 -1
  110. package/dist/collection/showcase/chat-container/callbacks.js +105 -90
  111. package/dist/collection/showcase/chat-container/callbacks.js.map +1 -1
  112. package/dist/collection/showcase/chat-container/chat.showcase.js +145 -10
  113. package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -1
  114. package/dist/collection/testing/locale.e2e.js +1 -0
  115. package/dist/collection/testing/locale.e2e.js.map +1 -1
  116. package/dist/components/MERCURY_ASSETS.js +5 -1
  117. package/dist/components/MERCURY_ASSETS.js.map +1 -1
  118. package/dist/components/ai-message.js +1 -2
  119. package/dist/components/ai-message.js.map +1 -1
  120. package/dist/components/chat-container.js +70 -7
  121. package/dist/components/chat-container.js.map +1 -1
  122. package/dist/components/chat-welcome.js +146 -0
  123. package/dist/components/chat-welcome.js.map +1 -0
  124. package/dist/components/code-render.js +68 -41
  125. package/dist/components/code-render.js.map +1 -1
  126. package/dist/components/common.js +27 -11
  127. package/dist/components/common.js.map +1 -1
  128. package/dist/components/entity-selector.js +1 -2
  129. package/dist/components/entity-selector.js.map +1 -1
  130. package/dist/components/file-item.js +1 -2
  131. package/dist/components/file-item.js.map +1 -1
  132. package/dist/components/gx-ide-bpm-app-declaration.js +2 -3
  133. package/dist/components/gx-ide-bpm-app-declaration.js.map +1 -1
  134. package/dist/components/gx-ide-bpm-task-documents.js +1 -2
  135. package/dist/components/gx-ide-bpm-task-documents.js.map +1 -1
  136. package/dist/components/gx-ide-chat-welcome.d.ts +11 -0
  137. package/dist/components/gx-ide-chat-welcome.js +8 -0
  138. package/dist/components/gx-ide-chat-welcome.js.map +1 -0
  139. package/dist/components/gx-ide-create-kb-from-server.js +1 -2
  140. package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
  141. package/dist/components/gx-ide-current-user-info.js +1 -2
  142. package/dist/components/gx-ide-current-user-info.js.map +1 -1
  143. package/dist/components/gx-ide-dashboard-home.js +1 -2
  144. package/dist/components/gx-ide-dashboard-home.js.map +1 -1
  145. package/dist/components/gx-ide-data-selector.js +2 -3
  146. package/dist/components/gx-ide-data-selector.js.map +1 -1
  147. package/dist/components/gx-ide-data-type-selector.js +1 -2
  148. package/dist/components/gx-ide-data-type-selector.js.map +1 -1
  149. package/dist/components/gx-ide-design-import.js +1 -2
  150. package/dist/components/gx-ide-design-import.js.map +1 -1
  151. package/dist/components/gx-ide-file-uploader.js +1 -2
  152. package/dist/components/gx-ide-file-uploader.js.map +1 -1
  153. package/dist/components/gx-ide-kb-manager-export.js +1 -2
  154. package/dist/components/gx-ide-kb-manager-export.js.map +1 -1
  155. package/dist/components/gx-ide-kb-manager-import.js +1 -2
  156. package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
  157. package/dist/components/gx-ide-manage-module-references-v2.js +1 -2
  158. package/dist/components/gx-ide-manage-module-references-v2.js.map +1 -1
  159. package/dist/components/gx-ide-manage-module-references.js +1 -2
  160. package/dist/components/gx-ide-manage-module-references.js.map +1 -1
  161. package/dist/components/gx-ide-new-kb.js +1 -2
  162. package/dist/components/gx-ide-new-kb.js.map +1 -1
  163. package/dist/components/gx-ide-object-selector.js +2 -3
  164. package/dist/components/gx-ide-object-selector.js.map +1 -1
  165. package/dist/components/gx-ide-open-api-import.js +1 -2
  166. package/dist/components/gx-ide-open-api-import.js.map +1 -1
  167. package/dist/components/gx-ide-references.js +1 -2
  168. package/dist/components/gx-ide-references.js.map +1 -1
  169. package/dist/components/gx-ide-sc-chat-container.js +215 -100
  170. package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
  171. package/dist/components/gx-ide-select-kb-items.js +1 -2
  172. package/dist/components/gx-ide-select-kb-items.js.map +1 -1
  173. package/dist/components/gx-ide-share-kb.js +1 -2
  174. package/dist/components/gx-ide-share-kb.js.map +1 -1
  175. package/dist/components/gx-ide-splash.js +1 -2
  176. package/dist/components/gx-ide-splash.js.map +1 -1
  177. package/dist/components/gx-ide-start-page.js +1 -2
  178. package/dist/components/gx-ide-start-page.js.map +1 -1
  179. package/dist/components/gx-ide-team-dev-commit.js +1 -1
  180. package/dist/components/gx-ide-team-dev-commit.js.map +1 -1
  181. package/dist/components/gx-ide-team-dev-update.js +1 -1
  182. package/dist/components/gx-ide-team-dev-update.js.map +1 -1
  183. package/dist/components/gx-ide-welcome-page.js +1 -2
  184. package/dist/components/gx-ide-welcome-page.js.map +1 -1
  185. package/dist/components/gx-ide-ww-attributes.js +2 -3
  186. package/dist/components/gx-ide-ww-attributes.js.map +1 -1
  187. package/dist/components/gx-ide-ww-files.js +1 -1
  188. package/dist/components/gx-ide-ww-files.js.map +1 -1
  189. package/dist/components/gx-ide-ww-images.js +1 -1
  190. package/dist/components/gx-ide-ww-images.js.map +1 -1
  191. package/dist/components/index.js +6 -0
  192. package/dist/components/index.js.map +1 -1
  193. package/dist/esm/MERCURY_ASSETS-039222dd.js +7 -0
  194. package/dist/esm/MERCURY_ASSETS-039222dd.js.map +1 -0
  195. package/dist/esm/code-render-53b3b0bd.js +83 -0
  196. package/dist/esm/code-render-53b3b0bd.js.map +1 -0
  197. package/dist/esm/{common-ccb4504a.js → common-719c4daf.js} +28 -12
  198. package/dist/esm/common-719c4daf.js.map +1 -0
  199. package/dist/esm/genexus-ide-ui.js +1 -1
  200. package/dist/esm/gx-ide-ai-message.entry.js +1 -2
  201. package/dist/esm/gx-ide-ai-message.entry.js.map +1 -1
  202. package/dist/esm/gx-ide-bpm-app-declaration.entry.js +2 -3
  203. package/dist/esm/gx-ide-bpm-app-declaration.entry.js.map +1 -1
  204. package/dist/esm/gx-ide-bpm-task-documents.entry.js +1 -2
  205. package/dist/esm/gx-ide-bpm-task-documents.entry.js.map +1 -1
  206. package/dist/esm/gx-ide-chat-container_2.entry.js +234 -0
  207. package/dist/esm/gx-ide-chat-container_2.entry.js.map +1 -0
  208. package/dist/esm/gx-ide-create-kb-from-server.entry.js +1 -2
  209. package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
  210. package/dist/esm/gx-ide-current-user-info.entry.js +1 -2
  211. package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
  212. package/dist/esm/gx-ide-dashboard-home.entry.js +1 -2
  213. package/dist/esm/gx-ide-dashboard-home.entry.js.map +1 -1
  214. package/dist/esm/gx-ide-data-selector.entry.js +2 -3
  215. package/dist/esm/gx-ide-data-selector.entry.js.map +1 -1
  216. package/dist/esm/gx-ide-data-type-selector.entry.js +1 -2
  217. package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -1
  218. package/dist/esm/gx-ide-design-import.entry.js +1 -2
  219. package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
  220. package/dist/esm/gx-ide-entity-selector.entry.js +1 -2
  221. package/dist/esm/gx-ide-entity-selector.entry.js.map +1 -1
  222. package/dist/esm/gx-ide-file-item.entry.js +1 -2
  223. package/dist/esm/gx-ide-file-item.entry.js.map +1 -1
  224. package/dist/esm/gx-ide-file-uploader.entry.js +1 -2
  225. package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
  226. package/dist/esm/gx-ide-kb-manager-export.entry.js +1 -2
  227. package/dist/esm/gx-ide-kb-manager-export.entry.js.map +1 -1
  228. package/dist/esm/gx-ide-kb-manager-import.entry.js +1 -2
  229. package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
  230. package/dist/esm/gx-ide-manage-module-references-v2.entry.js +2 -3
  231. package/dist/esm/gx-ide-manage-module-references-v2.entry.js.map +1 -1
  232. package/dist/esm/gx-ide-manage-module-references.entry.js +2 -3
  233. package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -1
  234. package/dist/esm/gx-ide-new-environment.entry.js +1 -1
  235. package/dist/esm/gx-ide-new-kb.entry.js +2 -3
  236. package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
  237. package/dist/esm/gx-ide-object-selector.entry.js +2 -3
  238. package/dist/esm/gx-ide-object-selector.entry.js.map +1 -1
  239. package/dist/esm/gx-ide-open-api-import.entry.js +1 -2
  240. package/dist/esm/gx-ide-open-api-import.entry.js.map +1 -1
  241. package/dist/esm/gx-ide-references.entry.js +1 -2
  242. package/dist/esm/gx-ide-references.entry.js.map +1 -1
  243. package/dist/esm/gx-ide-sc-chat-container.entry.js +203 -99
  244. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
  245. package/dist/esm/gx-ide-select-kb-items.entry.js +1 -2
  246. package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
  247. package/dist/esm/gx-ide-share-kb.entry.js +1 -2
  248. package/dist/esm/gx-ide-share-kb.entry.js.map +1 -1
  249. package/dist/esm/gx-ide-splash.entry.js +2 -3
  250. package/dist/esm/gx-ide-splash.entry.js.map +1 -1
  251. package/dist/esm/gx-ide-start-page.entry.js +1 -2
  252. package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
  253. package/dist/esm/gx-ide-team-dev-commit.entry.js +1 -1
  254. package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
  255. package/dist/esm/gx-ide-team-dev-update.entry.js +1 -1
  256. package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
  257. package/dist/esm/gx-ide-welcome-page.entry.js +1 -2
  258. package/dist/esm/gx-ide-welcome-page.entry.js.map +1 -1
  259. package/dist/esm/gx-ide-ww-attributes.entry.js +2 -3
  260. package/dist/esm/gx-ide-ww-attributes.entry.js.map +1 -1
  261. package/dist/esm/gx-ide-ww-files.entry.js +1 -1
  262. package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
  263. package/dist/esm/gx-ide-ww-images.entry.js +2 -2
  264. package/dist/esm/gx-ide-ww-images.entry.js.map +1 -1
  265. package/dist/esm/index.js +8 -2
  266. package/dist/esm/index.js.map +1 -1
  267. package/dist/esm/loader.js +1 -1
  268. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  269. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  270. package/dist/genexus-ide-ui/gx-ide-assets/chat-container/langs/chat-container.lang.en.json +9 -0
  271. package/dist/genexus-ide-ui/gx-ide-assets/chat-container/langs/chat-container.lang.ja.json +9 -0
  272. package/dist/genexus-ide-ui/gx-ide-assets/chat-container/langs/chat-container.lang.zh.json +9 -0
  273. package/dist/genexus-ide-ui/gx-ide-assets/chat-welcome/helpers.tsx +31 -0
  274. package/dist/genexus-ide-ui/gx-ide-assets/chat-welcome/images/ai-avatar-welcome.svg +21 -0
  275. package/dist/genexus-ide-ui/gx-ide-assets/chat-welcome/images/ai-avatar.svg +11 -0
  276. package/dist/genexus-ide-ui/gx-ide-assets/chat-welcome/images/header-illustration.svg +24 -0
  277. package/dist/genexus-ide-ui/gx-ide-assets/chat-welcome/langs/chat-welcome.lang.en.json +10 -0
  278. package/dist/genexus-ide-ui/gx-ide-assets/chat-welcome/langs/chat-welcome.lang.ja.json +10 -0
  279. package/dist/genexus-ide-ui/gx-ide-assets/chat-welcome/langs/chat-welcome.lang.zh.json +10 -0
  280. package/dist/genexus-ide-ui/index.esm.js +8 -2
  281. package/dist/genexus-ide-ui/index.esm.js.map +1 -1
  282. package/dist/genexus-ide-ui/{p-a1d73ca3.entry.js → p-01d96378.entry.js} +3 -5
  283. package/dist/genexus-ide-ui/{p-a1d73ca3.entry.js.map → p-01d96378.entry.js.map} +1 -1
  284. package/dist/genexus-ide-ui/{p-f51adb3d.entry.js → p-036d005d.entry.js} +2 -2
  285. package/dist/genexus-ide-ui/{p-f3f35e5c.entry.js → p-04205aa4.entry.js} +2 -4
  286. package/dist/genexus-ide-ui/{p-f3f35e5c.entry.js.map → p-04205aa4.entry.js.map} +1 -1
  287. package/dist/genexus-ide-ui/{p-961bb2cc.entry.js → p-0bdf34f2.entry.js} +3 -5
  288. package/dist/genexus-ide-ui/{p-961bb2cc.entry.js.map → p-0bdf34f2.entry.js.map} +1 -1
  289. package/dist/genexus-ide-ui/{p-fa18a70c.entry.js → p-1c7ea1cb.entry.js} +8 -10
  290. package/dist/genexus-ide-ui/{p-fa18a70c.entry.js.map → p-1c7ea1cb.entry.js.map} +1 -1
  291. package/dist/genexus-ide-ui/{p-530c32aa.entry.js → p-29c69938.entry.js} +8 -10
  292. package/dist/genexus-ide-ui/{p-530c32aa.entry.js.map → p-29c69938.entry.js.map} +1 -1
  293. package/dist/genexus-ide-ui/{p-67762237.entry.js → p-385c9544.entry.js} +2 -2
  294. package/dist/genexus-ide-ui/{p-4b79c3ab.entry.js → p-3da8db15.entry.js} +2 -4
  295. package/dist/genexus-ide-ui/{p-4b79c3ab.entry.js.map → p-3da8db15.entry.js.map} +1 -1
  296. package/dist/genexus-ide-ui/{p-ef5dfd35.entry.js → p-41a4364d.entry.js} +2 -4
  297. package/dist/genexus-ide-ui/{p-ef5dfd35.entry.js.map → p-41a4364d.entry.js.map} +1 -1
  298. package/dist/genexus-ide-ui/{p-56331289.entry.js → p-4538dea5.entry.js} +13 -15
  299. package/dist/genexus-ide-ui/{p-56331289.entry.js.map → p-4538dea5.entry.js.map} +1 -1
  300. package/dist/genexus-ide-ui/{p-4c717aa7.entry.js → p-48062d23.entry.js} +2 -4
  301. package/dist/genexus-ide-ui/{p-4c717aa7.entry.js.map → p-48062d23.entry.js.map} +1 -1
  302. package/dist/genexus-ide-ui/{p-9a609b51.js → p-48f5911b.js} +50 -33
  303. package/dist/genexus-ide-ui/p-48f5911b.js.map +1 -0
  304. package/dist/genexus-ide-ui/{p-6d2174ed.entry.js → p-4d0ba4f6.entry.js} +3 -5
  305. package/dist/genexus-ide-ui/{p-6d2174ed.entry.js.map → p-4d0ba4f6.entry.js.map} +1 -1
  306. package/dist/genexus-ide-ui/{p-76c3fc51.entry.js → p-4e943649.entry.js} +2 -4
  307. package/dist/genexus-ide-ui/{p-76c3fc51.entry.js.map → p-4e943649.entry.js.map} +1 -1
  308. package/dist/genexus-ide-ui/{p-29a026bb.entry.js → p-67e0b419.entry.js} +10 -12
  309. package/dist/genexus-ide-ui/{p-29a026bb.entry.js.map → p-67e0b419.entry.js.map} +1 -1
  310. package/dist/genexus-ide-ui/{p-bbf88f43.entry.js → p-690942cb.entry.js} +2 -4
  311. package/dist/genexus-ide-ui/{p-bbf88f43.entry.js.map → p-690942cb.entry.js.map} +1 -1
  312. package/dist/genexus-ide-ui/{p-84618917.entry.js → p-6f898249.entry.js} +3 -5
  313. package/dist/genexus-ide-ui/{p-84618917.entry.js.map → p-6f898249.entry.js.map} +1 -1
  314. package/dist/genexus-ide-ui/{p-fecc50e4.entry.js → p-704499e5.entry.js} +40 -42
  315. package/dist/genexus-ide-ui/{p-fecc50e4.entry.js.map → p-704499e5.entry.js.map} +1 -1
  316. package/dist/genexus-ide-ui/{p-fe490103.entry.js → p-7abe2214.entry.js} +8 -10
  317. package/dist/genexus-ide-ui/{p-fe490103.entry.js.map → p-7abe2214.entry.js.map} +1 -1
  318. package/dist/genexus-ide-ui/{p-c747afac.entry.js → p-7d8812b0.entry.js} +17 -19
  319. package/dist/genexus-ide-ui/{p-c747afac.entry.js.map → p-7d8812b0.entry.js.map} +1 -1
  320. package/dist/genexus-ide-ui/{p-edf889d2.entry.js → p-88c81f18.entry.js} +2 -4
  321. package/dist/genexus-ide-ui/{p-edf889d2.entry.js.map → p-88c81f18.entry.js.map} +1 -1
  322. package/dist/genexus-ide-ui/{p-1072bf33.entry.js → p-8cb937b7.entry.js} +2 -4
  323. package/dist/genexus-ide-ui/{p-1072bf33.entry.js.map → p-8cb937b7.entry.js.map} +1 -1
  324. package/dist/genexus-ide-ui/{p-fdf41406.entry.js → p-9fa1200f.entry.js} +12 -14
  325. package/dist/genexus-ide-ui/{p-fdf41406.entry.js.map → p-9fa1200f.entry.js.map} +1 -1
  326. package/dist/genexus-ide-ui/{p-fcecdafa.entry.js → p-a1415a9c.entry.js} +3 -3
  327. package/dist/genexus-ide-ui/{p-50f304fe.entry.js → p-aab809c4.entry.js} +11 -13
  328. package/dist/genexus-ide-ui/{p-50f304fe.entry.js.map → p-aab809c4.entry.js.map} +1 -1
  329. package/dist/genexus-ide-ui/{p-833c3585.entry.js → p-c38ce0bf.entry.js} +2 -4
  330. package/dist/genexus-ide-ui/{p-833c3585.entry.js.map → p-c38ce0bf.entry.js.map} +1 -1
  331. package/dist/genexus-ide-ui/p-c5178973.js +109 -0
  332. package/dist/genexus-ide-ui/p-c5178973.js.map +1 -0
  333. package/dist/genexus-ide-ui/{p-eea944d4.entry.js → p-c7badbf1.entry.js} +2 -4
  334. package/dist/genexus-ide-ui/{p-eea944d4.entry.js.map → p-c7badbf1.entry.js.map} +1 -1
  335. package/dist/genexus-ide-ui/{p-2b3938b4.entry.js → p-d2107cb2.entry.js} +2 -2
  336. package/dist/genexus-ide-ui/{p-ba7d1472.entry.js → p-d3767a7d.entry.js} +2 -2
  337. package/dist/genexus-ide-ui/p-da473001.entry.js +338 -0
  338. package/dist/genexus-ide-ui/p-da473001.entry.js.map +1 -0
  339. package/dist/genexus-ide-ui/{p-007173ef.entry.js → p-e28e6bc4.entry.js} +3 -5
  340. package/dist/genexus-ide-ui/{p-007173ef.entry.js.map → p-e28e6bc4.entry.js.map} +1 -1
  341. package/dist/genexus-ide-ui/{p-4cbc8a8b.entry.js → p-eb9e760d.entry.js} +10 -12
  342. package/dist/genexus-ide-ui/{p-4cbc8a8b.entry.js.map → p-eb9e760d.entry.js.map} +1 -1
  343. package/dist/genexus-ide-ui/p-ec0809a7.entry.js +317 -0
  344. package/dist/genexus-ide-ui/p-ec0809a7.entry.js.map +1 -0
  345. package/dist/genexus-ide-ui/{p-5687fdb7.entry.js → p-ecba870e.entry.js} +9 -11
  346. package/dist/genexus-ide-ui/{p-5687fdb7.entry.js.map → p-ecba870e.entry.js.map} +1 -1
  347. package/dist/genexus-ide-ui/{p-5ac47c69.js → p-ede7bd20.js} +6885 -6346
  348. package/dist/genexus-ide-ui/p-ede7bd20.js.map +1 -0
  349. package/dist/types/common/common.d.ts +1 -1
  350. package/dist/types/components/{_helpers → chat}/chat-container/chat-container.d.ts +13 -2
  351. package/dist/types/components/chat/chat-welcome/chat-welcome.d.ts +39 -0
  352. package/dist/types/components/chat/chat-welcome/gx-ide-assets/chat-welcome/helpers.d.ts +1 -0
  353. package/dist/types/components/{_helpers/chat-container → chat}/code-render.d.ts +1 -1
  354. package/dist/types/components.d.ts +73 -0
  355. package/dist/types/index.d.ts +5 -1
  356. package/dist/types/showcase/chat-container/callbacks.d.ts +1 -1
  357. package/dist/types/showcase/chat-container/chat.showcase.d.ts +15 -0
  358. package/package.json +5 -5
  359. package/dist/cjs/MERCURY_ASSETS-6bbcc011.js +0 -5
  360. package/dist/cjs/MERCURY_ASSETS-6bbcc011.js.map +0 -1
  361. package/dist/cjs/assets-manager-7227a74b.js +0 -7
  362. package/dist/cjs/assets-manager-7227a74b.js.map +0 -1
  363. package/dist/cjs/code-render-db7cb770.js +0 -59
  364. package/dist/cjs/code-render-db7cb770.js.map +0 -1
  365. package/dist/cjs/common-72f91a78.js.map +0 -1
  366. package/dist/cjs/gx-ide-chat-container.cjs.entry.js +0 -62
  367. package/dist/cjs/gx-ide-chat-container.cjs.entry.js.map +0 -1
  368. package/dist/collection/components/_helpers/chat-container/chat-container.css +0 -204
  369. package/dist/collection/components/_helpers/chat-container/chat-container.js +0 -137
  370. package/dist/collection/components/_helpers/chat-container/chat-container.js.map +0 -1
  371. package/dist/collection/components/_helpers/chat-container/code-render.js +0 -46
  372. package/dist/collection/components/_helpers/chat-container/code-render.js.map +0 -1
  373. package/dist/components/assets-manager.js +0 -5
  374. package/dist/components/assets-manager.js.map +0 -1
  375. package/dist/esm/MERCURY_ASSETS-bbdf7018.js +0 -3
  376. package/dist/esm/MERCURY_ASSETS-bbdf7018.js.map +0 -1
  377. package/dist/esm/assets-manager-0d129105.js +0 -5
  378. package/dist/esm/assets-manager-0d129105.js.map +0 -1
  379. package/dist/esm/code-render-6cbb0e63.js +0 -56
  380. package/dist/esm/code-render-6cbb0e63.js.map +0 -1
  381. package/dist/esm/common-ccb4504a.js.map +0 -1
  382. package/dist/esm/gx-ide-chat-container.entry.js +0 -58
  383. package/dist/esm/gx-ide-chat-container.entry.js.map +0 -1
  384. package/dist/genexus-ide-ui/p-1a74d49a.entry.js +0 -231
  385. package/dist/genexus-ide-ui/p-1a74d49a.entry.js.map +0 -1
  386. package/dist/genexus-ide-ui/p-5ac47c69.js.map +0 -1
  387. package/dist/genexus-ide-ui/p-6e4208d8.js +0 -9
  388. package/dist/genexus-ide-ui/p-6e4208d8.js.map +0 -1
  389. package/dist/genexus-ide-ui/p-9a609b51.js.map +0 -1
  390. package/dist/genexus-ide-ui/p-be8a59fd.js +0 -107
  391. package/dist/genexus-ide-ui/p-be8a59fd.js.map +0 -1
  392. package/dist/genexus-ide-ui/p-db9c3b37.entry.js +0 -85
  393. package/dist/genexus-ide-ui/p-db9c3b37.entry.js.map +0 -1
  394. /package/dist/genexus-ide-ui/{p-f51adb3d.entry.js.map → p-036d005d.entry.js.map} +0 -0
  395. /package/dist/genexus-ide-ui/{p-67762237.entry.js.map → p-385c9544.entry.js.map} +0 -0
  396. /package/dist/genexus-ide-ui/{p-fcecdafa.entry.js.map → p-a1415a9c.entry.js.map} +0 -0
  397. /package/dist/genexus-ide-ui/{p-2b3938b4.entry.js.map → p-d2107cb2.entry.js.map} +0 -0
  398. /package/dist/genexus-ide-ui/{p-ba7d1472.entry.js.map → p-d3767a7d.entry.js.map} +0 -0
@@ -4,11 +4,9 @@ import { L as n } from "./p-311eedf3.js";
4
4
 
5
5
  import { c as r } from "./p-13738332.js";
6
6
 
7
- import { g as o } from "./p-6e4208d8.js";
7
+ import { g as o } from "./p-ede7bd20.js";
8
8
 
9
- import "./p-5ac47c69.js";
10
-
11
- const l = ":host{display:grid;grid-template-rows:max-content 1fr max-content;overflow:auto;block-size:100%}.section{display:contents}.header__field-group{display:grid;grid-template-columns:1fr 1fr}.tabular-grid{contain:size}.data ch-tabular-grid-cell:is(:nth-child(2),:nth-child(3),:nth-child(4)){padding-block:var(--grid-cell__padding-block);padding-inline:var(--grid-cell__padding-inline);align-items:start;justify-content:start;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}ch-tabular-grid.empty-result::part(main){overflow:hidden}ch-tabular-grid-rowset-empty{position:relative}";
9
+ const l = ":host{display:grid;grid-template-rows:max-content 1fr max-content;overflow:auto;block-size:100%}.section{display:contents}.header__field-group{display:grid;grid-template-columns:1fr 1fr}.tabular-grid{contain:size}.data ch-tabular-grid-cell:is(:nth-child(2),:nth-child(3),:nth-child(4)){padding-block:var(--grid-cell__padding-block);padding-inline:var(--grid-cell__padding-inline);align-items:start;justify-content:start;display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-inline-size:0}ch-tabular-grid.empty-result::part(main){overflow:hidden}ch-tabular-grid-rowset-empty{position:relative}";
12
10
 
13
11
  var c = undefined && undefined.__classPrivateFieldGet || function(t, e, i, s) {
14
12
  if (i === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
@@ -23,7 +21,7 @@ var h = undefined && undefined.__classPrivateFieldSet || function(t, e, i, s, a)
23
21
  return s === "a" ? a.call(t, i) : a ? a.value = i : e.set(t, i), i;
24
22
  };
25
23
 
26
- var d, u, f, p, b, g, m, w, y, k, v, M, W, x, j, C, _, E, T, z, D;
24
+ var d, u, f, p, b, g, m, w, y, k, v, M, W, x, j, C, _, z, E, T, D;
27
25
 
28
26
  // Best performance bundle
29
27
  const P = [ "resets/box-sizing", "components/button", "components/edit", "components/tabular-grid", "components/icon", "utils/form", "utils/layout", "utils/spacing", "chameleon/scrollbar" ];
@@ -108,7 +106,7 @@ const F = class {
108
106
  this.loading = false;
109
107
  }));
110
108
  }));
111
- E.set(this, (() => [ i("div", {
109
+ z.set(this, (() => [ i("div", {
112
110
  class: "header__field-group field-group"
113
111
  }, i("div", {
114
112
  class: "field field-block pattern-field"
@@ -133,7 +131,7 @@ const F = class {
133
131
  class: "entity",
134
132
  onValueChanged: c(this, _, "f")
135
133
  })) ]));
136
- T.set(this, (() => {
134
+ E.set(this, (() => {
137
135
  const t = !this.objects.length;
138
136
  const e = this.loader && this.loading;
139
137
  if (!t || e) {
@@ -204,7 +202,7 @@ const F = class {
204
202
  stateTitle: c(this, f, "f").emptyState.title
205
203
  }))));
206
204
  }));
207
- z.set(this, (() => {
205
+ T.set(this, (() => {
208
206
  if (!this.editCallback && !this.newVariableCallback) {
209
207
  return null;
210
208
  }
@@ -298,7 +296,7 @@ const F = class {
298
296
  class: "section"
299
297
  }, i("header", {
300
298
  class: "header control-header-with-border spacing-body-block-start spacing-body-inline"
301
- }, c(this, E, "f").call(this)), c(this, T, "f").call(this), i("footer", {
299
+ }, c(this, z, "f").call(this)), c(this, E, "f").call(this), i("footer", {
302
300
  class: {
303
301
  footer: true,
304
302
  "control-footer-with-border": true,
@@ -306,7 +304,7 @@ const F = class {
306
304
  "spacing-body-inline": true,
307
305
  "spacing-body-block-end": true
308
306
  }
309
- }, c(this, z, "f").call(this), i("div", {
307
+ }, c(this, T, "f").call(this), i("div", {
310
308
  class: "buttons-spacer"
311
309
  }, i("button", {
312
310
  // Cancel Button
@@ -337,10 +335,10 @@ const F = class {
337
335
  d = new WeakMap, u = new WeakMap, f = new WeakMap, p = new WeakMap, b = new WeakMap,
338
336
  g = new WeakMap, m = new WeakMap, w = new WeakMap, y = new WeakMap, k = new WeakMap,
339
337
  v = new WeakMap, M = new WeakMap, W = new WeakMap, x = new WeakMap, j = new WeakMap,
340
- C = new WeakMap, _ = new WeakMap, E = new WeakMap, T = new WeakMap, z = new WeakMap,
338
+ C = new WeakMap, _ = new WeakMap, z = new WeakMap, E = new WeakMap, T = new WeakMap,
341
339
  D = new WeakMap;
342
340
 
343
341
  F.style = l;
344
342
 
345
343
  export { F as gx_ide_data_selector };
346
- //# sourceMappingURL=p-29a026bb.entry.js.map
344
+ //# sourceMappingURL=p-67e0b419.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["dataSelectorCss","CSS_BUNDLES","FILTER_ICON","getIconPath","category","name","colorType","GxIdeDataSelector","_GxIdeDataSelector_firstGridObjectId","set","this","_GxIdeDataSelector_loadItemsCallbackJustCalled","_GxIdeDataSelector_componentLocale","_GxIdeDataSelector_animateEmptyState","_GxIdeDataSelector_shortcutsSrc","getAssetPath","_GxIdeDataSelector_filterPatternEl","_GxIdeDataSelector_filterObjectEl","_GxIdeDataSelector_chShortcutsEl","_GxIdeDataSelector_chTabularGridObjectsEl","_GxIdeDataSelector_evaluateFirstRowSelection","__classPrivateFieldGet","selectRow","__classPrivateFieldSet","_GxIdeDataSelector_chGridKeyDownHandler","e","key","_GxIdeDataSelector_confirmCallbackHandler","call","stopPropagation","confirmCallback","selectedObjectsIds","_GxIdeDataSelector_editCallbackHandler","async","result","editCallback","_GxIdeDataSelector_refreshUIWithNewConfiguration","_GxIdeDataSelector_hostKeyPressHandler","_GxIdeDataSelector_objectsSelectionChangedHandler","event","detail","rowsId","_GxIdeDataSelector_newVariableCallbackHandler","response","newVariableCallback","objects","filters","pattern","_a","value","object","_c","_b","id","loading","loadItemsCallback","then","items","length","_GxIdeDataSelector_sortObjectsByName","_GxIdeDataSelector_renderFilter","h","class","htmlFor","filter","autoFocus","part","debounce","config","inputDebounce","onInput","ref","el","defaultModule","defaultValue","selectEntityCallback","selectObjectCallback","onValueChanged","_GxIdeDataSelector_renderObjects","gridIsEmpty","displayLoader","loader","data","rowSelectionMode","selectionType","onKeyDown","onSelectionChanged","undefined","settingable","size","tabularGrid","colSize","maxContent","tableHead","common","dataType","description","map","obj","rowid","onDblClick","src","type","loaderTitle","title","show","isAnimated","stateIconSrc","stateTitle","emptyState","_GxIdeDataSelector_renderEditButtons","newVariableButtonEnabled","editButtonEnabled","disabled","onClick","footer","btnNew","btnEdit","sort","a","b","nameA","toLowerCase","nameB","componentWillLoad","Locale","getComponentStrings","connectedCallback","componentDidLoad","focus","componentDidRender","suspendShortcuts","suspend","validate","isValid","render","okButtonEnabled","footerJustifySpaceBetween","Host","onKeyPress","model","cancelCallback","btnCancel","btnConfirm"],"sources":["src/components/data-selector/data-selector.scss?tag=gx-ide-data-selector&encapsulation=shadow","src/components/data-selector/data-selector.tsx"],"sourcesContent":["@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\"; // for the tabular-grid-cell-layout mixin\n\n:host {\n display: grid;\n grid-template-rows: max-content 1fr max-content;\n overflow: auto;\n block-size: 100%;\n}\n\n.section {\n display: contents;\n}\n\n.header__field-group {\n display: grid;\n grid-template-columns: 1fr 1fr;\n}\n\n.tabular-grid {\n contain: size;\n}\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".data\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 2,\n 3,\n 4\n )\n);\n\nch-tabular-grid.empty-result::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\nch-tabular-grid-rowset-empty {\n // to make the loader be positioned relative to 'ch-tabular-grid-rowset-empty'\n position: relative;\n}\n","/* eslint-disable @stencil-community/own-props-must-be-private */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n getAssetPath,\n JSX\n} from \"@stencil/core\";\n\nimport { Locale } from \"../../common/locale\";\n\nimport { config } from \"../../common/config\";\nimport { EntityData } from \"../../common/types\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { TabularGridSelectionChangedEvent } from \"@genexus/chameleon-controls-library\";\n\n// Best performance bundle\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/edit\",\n \"components/tabular-grid\",\n \"components/icon\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\n\n@Component({\n tag: \"gx-ide-data-selector\",\n styleUrl: \"data-selector.scss\",\n shadow: { delegatesFocus: true },\n assetsDirs: [\"gx-ide-assets/data-selector\"]\n})\nexport class GxIdeDataSelector {\n #firstGridObjectId: string; // used to select the first item after \"loadItemsCallback\"\n #loadItemsCallbackJustCalled: boolean = false; // used to select the first item after \"loadItemsCallback\"\n\n #componentLocale: any;\n #animateEmptyState: boolean = false;\n #shortcutsSrc = getAssetPath(`./gx-ide-assets/data-selector/shortcuts.json`);\n /* References needed to collect data */\n #filterPatternEl!: HTMLChEditElement;\n #filterObjectEl!: HTMLGxIdeEntitySelectorElement;\n #chShortcutsEl: HTMLChShortcutsElement;\n #chTabularGridObjectsEl: HTMLChTabularGridElement;\n\n @Element() el: HTMLGxIdeDataSelectorElement;\n\n /**\n * True if loadItemsCallback has been called and has not been resolved yet.\n */\n @State() loading: boolean = true;\n\n /**\n * The objects rendered in the table\n */\n @State() objects: ItemData[] = [];\n\n /**\n * The selected objects in the table of objects\n */\n @State() selectedObjectsIds: string[] = [];\n\n /**\n * Callback invoked when the user wishes to cancel the selection of objects.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * Callback invoked when the user presses the 'OK' button\n */\n @Prop() readonly confirmCallback!: ConfirmCallback;\n\n /**\n * The default value for the module/folder filter\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * If true it displays the component title on the header\n */\n @Prop() readonly displayTitle = false;\n\n /**\n * Callback invoked when user presses the edit button. Receives the first\n * selected element id as a parameter.\n */\n @Prop() readonly editCallback: EditCallback;\n\n /**\n * Callback invoked when the component needs to reload the list of attributes.\n */\n @Prop() readonly loadItemsCallback!: LoadItemsCallback;\n\n /**\n * If true, it will display a loader when needed.\n */\n @Prop() readonly loader = false;\n\n /**\n * Callback invoked when the user presses the 'New' button.\n */\n @Prop() readonly newVariableCallback: NewVariableCallback;\n\n /**\n * Callback invoked when the action is executed in the Object filter. It returns\n * the information of the selected object (id and name) or 'undefined' if it was\n * canceled.\n */\n @Prop() readonly selectObjectCallback: SelectObjectCallback;\n\n /**\n * Single if multiple object selection is not allowed. Default is multiple\n */\n @Prop() readonly selectionType: \"single\" | \"multiple\" = \"multiple\";\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n connectedCallback() {\n this.#refreshUIWithNewConfiguration();\n }\n\n componentDidLoad() {\n this.#filterPatternEl.focus();\n }\n\n componentDidRender() {\n this.#evaluateFirstRowSelection();\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Validate necessary data input\n */\n @Method()\n async validate(): Promise<boolean> {\n const isValid = true;\n return isValid;\n }\n\n /**\n * After items have been loaded and rendered, the first row should be selected.\n */\n #evaluateFirstRowSelection = () => {\n if (this.#loadItemsCallbackJustCalled) {\n this.#chTabularGridObjectsEl.selectRow(this.#firstGridObjectId);\n }\n this.#loadItemsCallbackJustCalled = false;\n };\n\n #chGridKeyDownHandler = (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n this.#confirmCallbackHandler(e);\n }\n };\n\n #confirmCallbackHandler = (e: MouseEvent | KeyboardEvent): void => {\n e.stopPropagation();\n this.confirmCallback(this.selectedObjectsIds);\n };\n\n #editCallbackHandler = async (e: MouseEvent): Promise<void> => {\n e.stopPropagation();\n if (this.selectedObjectsIds[0]) {\n const result = await this.editCallback(this.selectedObjectsIds[0]);\n if (result) {\n this.#refreshUIWithNewConfiguration();\n }\n }\n };\n\n #hostKeyPressHandler = (e: KeyboardEvent) => {\n // TODO : revise why this is necessary\n // just prevent keypress propagation\n if (e.key === \"Enter\") {\n e.stopPropagation();\n }\n };\n\n #objectsSelectionChangedHandler = (\n event: CustomEvent<TabularGridSelectionChangedEvent>\n ) => {\n this.selectedObjectsIds = event.detail.rowsId;\n };\n\n #newVariableCallbackHandler = async () => {\n const response = await this.newVariableCallback();\n if (response) {\n this.#refreshUIWithNewConfiguration();\n }\n };\n #refreshUIWithNewConfiguration = (): void => {\n this.objects = [];\n const filters: FiltersData = {\n pattern: this.#filterPatternEl?.value,\n object: this.#filterObjectEl?.value?.id\n };\n this.loading = true;\n this.loadItemsCallback(filters).then((items: ItemData[]) => {\n if (items.length) {\n this.objects = this.#sortObjectsByName(items);\n this.#firstGridObjectId = this.objects[0].id;\n this.#loadItemsCallbackJustCalled = true;\n }\n this.selectedObjectsIds = [];\n this.loading = false;\n });\n };\n\n #renderFilter = (): Element[] => {\n return [\n <div class=\"header__field-group field-group\">\n <div class=\"field field-block pattern-field\">\n <label class=\"label\" htmlFor=\"filter-pattern\">\n {this.#componentLocale.filter.pattern}\n </label>\n <ch-edit\n autoFocus\n id=\"filter-pattern\"\n name=\"filter-pattern\"\n class=\"input pattern-input\"\n part=\"filter-pattern\"\n debounce={config.inputDebounce}\n onInput={this.#refreshUIWithNewConfiguration}\n ref={(el: HTMLChEditElement) =>\n (this.#filterPatternEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n <gx-ide-entity-selector\n id=\"object-selector\"\n value={this.defaultModule}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectObjectCallback}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#filterObjectEl = el as HTMLGxIdeEntitySelectorElement)\n }\n class=\"entity\"\n onValueChanged={this.#refreshUIWithNewConfiguration}\n ></gx-ide-entity-selector>\n </div>\n ];\n };\n\n #renderObjects = (): Element => {\n const gridIsEmpty = !this.objects.length;\n const displayLoader = this.loader && this.loading;\n if (!gridIsEmpty || displayLoader) {\n this.#animateEmptyState = true; // improve performance if is first render\n }\n return (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"empty-result\": this.objects.length === 0,\n \"data\": true\n }}\n rowSelectionMode={this.selectionType}\n onKeyDown={this.#chGridKeyDownHandler}\n part=\"ch-grid-objects\"\n onSelectionChanged={\n this.objects.length ? this.#objectsSelectionChangedHandler : undefined\n }\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chTabularGridObjectsEl = el as HTMLChTabularGridElement)\n }\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.name}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.dataType}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.description}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {!gridIsEmpty ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects.map((obj: ItemData) => (\n <ch-tabular-grid-row\n rowid={obj.id}\n onDblClick={this.#confirmCallbackHandler}\n class=\"tabular-grid-row\"\n >\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image\n src={\n obj.type === \"attribute\"\n ? \"objects/attribute\"\n : \"objects-parts/variables\"\n }\n class=\"icon-md\"\n ></ch-image>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.dataType}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.description}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n {displayLoader ? (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n show\n ></gx-ide-loader>\n ) : (\n <gx-ide-empty-state\n isAnimated={this.#animateEmptyState}\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.emptyState.title}\n ></gx-ide-empty-state>\n )}\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #renderEditButtons = (): JSX.Element | null => {\n if (!this.editCallback && !this.newVariableCallback) {\n return null;\n }\n\n const newVariableButtonEnabled = this.newVariableCallback && !this.loading;\n const editButtonEnabled =\n this.editCallback && !this.loading && this.selectedObjectsIds.length;\n\n return (\n <div class=\"buttons-spacer\">\n {this.newVariableCallback ? (\n <button\n // New Variable Button\n class=\"button-secondary\"\n disabled={!newVariableButtonEnabled}\n part=\"button button-new\"\n type=\"button\"\n onClick={this.#newVariableCallbackHandler}\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n ) : (\n []\n )}\n {this.editCallback ? (\n <button\n // Edit Button\n class=\"button-secondary\"\n disabled={!editButtonEnabled}\n part=\"button button-edit\"\n type=\"button\"\n onClick={editButtonEnabled && this.#editCallbackHandler}\n >\n {this.#componentLocale.footer.btnEdit}\n </button>\n ) : (\n []\n )}\n </div>\n );\n };\n\n #sortObjectsByName = (objects: ItemData[]): ItemData[] =>\n // TODO (make this a common helper function\n // and use it in other dialog grids that\n // require filter by name).\n objects.sort((a, b) => {\n const nameA = a.name.toLowerCase(),\n nameB = b.name.toLowerCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n return 0;\n });\n\n render() {\n const okButtonEnabled = !this.loading;\n const footerJustifySpaceBetween: boolean =\n !!this.newVariableCallback || !!this.editCallback;\n\n return (\n <Host onKeyPress={this.#hostKeyPressHandler} 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 spacing-body-block-start spacing-body-inline\">\n {this.#renderFilter()}\n </header>\n {this.#renderObjects()}\n <footer\n class={{\n \"footer\": true,\n \"control-footer-with-border\": true,\n \"control-footer-space-between\": footerJustifySpaceBetween,\n \"spacing-body-inline\": true,\n \"spacing-body-block-end\": true\n }}\n >\n {this.#renderEditButtons()}\n <div class=\"buttons-spacer\">\n <button\n // Cancel Button\n class=\"button-secondary\"\n part=\"button button-cancel\"\n type=\"button\"\n onClick={this.cancelCallback}\n >\n {this.#componentLocale.footer.btnCancel}\n </button>\n <button\n // Confirm Button\n class=\"button-primary\"\n part=\"button button-ok\"\n disabled={!okButtonEnabled}\n type=\"button\"\n onClick={okButtonEnabled && this.#confirmCallbackHandler}\n >\n {this.#componentLocale.footer.btnConfirm}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type NewVariableCallback = () => Promise<boolean> | undefined;\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type SelectObjectCallback = () => Promise<EntityData | undefined>;\n\nexport type EditCallback = (id: string) => Promise<boolean> | undefined;\n\nexport type ConfirmCallback = (ids: string[]) => Promise<void>;\n\nexport type LoadItemsCallback = (filters: FiltersData) => Promise<ItemData[]>;\n\nexport type FiltersData = {\n pattern?: string;\n object?: string;\n};\n\nexport type ItemData = {\n type: ItemType;\n id: string;\n name: string;\n dataType: string;\n description: string;\n};\n\nexport type ItemType = \"variable\" | \"attribute\";\n"],"mappings":"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"}
1
+ {"version":3,"names":["dataSelectorCss","CSS_BUNDLES","FILTER_ICON","getIconPath","category","name","colorType","GxIdeDataSelector","_GxIdeDataSelector_firstGridObjectId","set","this","_GxIdeDataSelector_loadItemsCallbackJustCalled","_GxIdeDataSelector_componentLocale","_GxIdeDataSelector_animateEmptyState","_GxIdeDataSelector_shortcutsSrc","getAssetPath","_GxIdeDataSelector_filterPatternEl","_GxIdeDataSelector_filterObjectEl","_GxIdeDataSelector_chShortcutsEl","_GxIdeDataSelector_chTabularGridObjectsEl","_GxIdeDataSelector_evaluateFirstRowSelection","__classPrivateFieldGet","selectRow","__classPrivateFieldSet","_GxIdeDataSelector_chGridKeyDownHandler","e","key","_GxIdeDataSelector_confirmCallbackHandler","call","stopPropagation","confirmCallback","selectedObjectsIds","_GxIdeDataSelector_editCallbackHandler","async","result","editCallback","_GxIdeDataSelector_refreshUIWithNewConfiguration","_GxIdeDataSelector_hostKeyPressHandler","_GxIdeDataSelector_objectsSelectionChangedHandler","event","detail","rowsId","_GxIdeDataSelector_newVariableCallbackHandler","response","newVariableCallback","objects","filters","pattern","_a","value","object","_c","_b","id","loading","loadItemsCallback","then","items","length","_GxIdeDataSelector_sortObjectsByName","_GxIdeDataSelector_renderFilter","h","class","htmlFor","filter","autoFocus","part","debounce","config","inputDebounce","onInput","ref","el","defaultModule","defaultValue","selectEntityCallback","selectObjectCallback","onValueChanged","_GxIdeDataSelector_renderObjects","gridIsEmpty","displayLoader","loader","data","rowSelectionMode","selectionType","onKeyDown","onSelectionChanged","undefined","settingable","size","tabularGrid","colSize","maxContent","tableHead","common","dataType","description","map","obj","rowid","onDblClick","src","type","loaderTitle","title","show","isAnimated","stateIconSrc","stateTitle","emptyState","_GxIdeDataSelector_renderEditButtons","newVariableButtonEnabled","editButtonEnabled","disabled","onClick","footer","btnNew","btnEdit","sort","a","b","nameA","toLowerCase","nameB","componentWillLoad","Locale","getComponentStrings","connectedCallback","componentDidLoad","focus","componentDidRender","suspendShortcuts","suspend","validate","isValid","render","okButtonEnabled","footerJustifySpaceBetween","Host","onKeyPress","model","cancelCallback","btnCancel","btnConfirm"],"sources":["src/components/data-selector/data-selector.scss?tag=gx-ide-data-selector&encapsulation=shadow","src/components/data-selector/data-selector.tsx"],"sourcesContent":["@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\"; // for the tabular-grid-cell-layout mixin\n\n:host {\n display: grid;\n grid-template-rows: max-content 1fr max-content;\n overflow: auto;\n block-size: 100%;\n}\n\n.section {\n display: contents;\n}\n\n.header__field-group {\n display: grid;\n grid-template-columns: 1fr 1fr;\n}\n\n.tabular-grid {\n contain: size;\n}\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".data\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 2,\n 3,\n 4\n )\n);\n\nch-tabular-grid.empty-result::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\nch-tabular-grid-rowset-empty {\n // to make the loader be positioned relative to 'ch-tabular-grid-rowset-empty'\n position: relative;\n}\n","/* eslint-disable @stencil-community/own-props-must-be-private */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n getAssetPath,\n JSX\n} from \"@stencil/core\";\n\nimport { Locale } from \"../../common/locale\";\n\nimport { config } from \"../../common/config\";\nimport { EntityData } from \"../../common/types\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { TabularGridSelectionChangedEvent } from \"@genexus/chameleon-controls-library\";\n\n// Best performance bundle\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/edit\",\n \"components/tabular-grid\",\n \"components/icon\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\n\n@Component({\n tag: \"gx-ide-data-selector\",\n styleUrl: \"data-selector.scss\",\n shadow: { delegatesFocus: true },\n assetsDirs: [\"gx-ide-assets/data-selector\"]\n})\nexport class GxIdeDataSelector {\n #firstGridObjectId: string; // used to select the first item after \"loadItemsCallback\"\n #loadItemsCallbackJustCalled: boolean = false; // used to select the first item after \"loadItemsCallback\"\n\n #componentLocale: any;\n #animateEmptyState: boolean = false;\n #shortcutsSrc = getAssetPath(`./gx-ide-assets/data-selector/shortcuts.json`);\n /* References needed to collect data */\n #filterPatternEl!: HTMLChEditElement;\n #filterObjectEl!: HTMLGxIdeEntitySelectorElement;\n #chShortcutsEl: HTMLChShortcutsElement;\n #chTabularGridObjectsEl: HTMLChTabularGridElement;\n\n @Element() el: HTMLGxIdeDataSelectorElement;\n\n /**\n * True if loadItemsCallback has been called and has not been resolved yet.\n */\n @State() loading: boolean = true;\n\n /**\n * The objects rendered in the table\n */\n @State() objects: ItemData[] = [];\n\n /**\n * The selected objects in the table of objects\n */\n @State() selectedObjectsIds: string[] = [];\n\n /**\n * Callback invoked when the user wishes to cancel the selection of objects.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * Callback invoked when the user presses the 'OK' button\n */\n @Prop() readonly confirmCallback!: ConfirmCallback;\n\n /**\n * The default value for the module/folder filter\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * If true it displays the component title on the header\n */\n @Prop() readonly displayTitle = false;\n\n /**\n * Callback invoked when user presses the edit button. Receives the first\n * selected element id as a parameter.\n */\n @Prop() readonly editCallback: EditCallback;\n\n /**\n * Callback invoked when the component needs to reload the list of attributes.\n */\n @Prop() readonly loadItemsCallback!: LoadItemsCallback;\n\n /**\n * If true, it will display a loader when needed.\n */\n @Prop() readonly loader = false;\n\n /**\n * Callback invoked when the user presses the 'New' button.\n */\n @Prop() readonly newVariableCallback: NewVariableCallback;\n\n /**\n * Callback invoked when the action is executed in the Object filter. It returns\n * the information of the selected object (id and name) or 'undefined' if it was\n * canceled.\n */\n @Prop() readonly selectObjectCallback: SelectObjectCallback;\n\n /**\n * Single if multiple object selection is not allowed. Default is multiple\n */\n @Prop() readonly selectionType: \"single\" | \"multiple\" = \"multiple\";\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n connectedCallback() {\n this.#refreshUIWithNewConfiguration();\n }\n\n componentDidLoad() {\n this.#filterPatternEl.focus();\n }\n\n componentDidRender() {\n this.#evaluateFirstRowSelection();\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Validate necessary data input\n */\n @Method()\n async validate(): Promise<boolean> {\n const isValid = true;\n return isValid;\n }\n\n /**\n * After items have been loaded and rendered, the first row should be selected.\n */\n #evaluateFirstRowSelection = () => {\n if (this.#loadItemsCallbackJustCalled) {\n this.#chTabularGridObjectsEl.selectRow(this.#firstGridObjectId);\n }\n this.#loadItemsCallbackJustCalled = false;\n };\n\n #chGridKeyDownHandler = (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n this.#confirmCallbackHandler(e);\n }\n };\n\n #confirmCallbackHandler = (e: MouseEvent | KeyboardEvent): void => {\n e.stopPropagation();\n this.confirmCallback(this.selectedObjectsIds);\n };\n\n #editCallbackHandler = async (e: MouseEvent): Promise<void> => {\n e.stopPropagation();\n if (this.selectedObjectsIds[0]) {\n const result = await this.editCallback(this.selectedObjectsIds[0]);\n if (result) {\n this.#refreshUIWithNewConfiguration();\n }\n }\n };\n\n #hostKeyPressHandler = (e: KeyboardEvent) => {\n // TODO : revise why this is necessary\n // just prevent keypress propagation\n if (e.key === \"Enter\") {\n e.stopPropagation();\n }\n };\n\n #objectsSelectionChangedHandler = (\n event: CustomEvent<TabularGridSelectionChangedEvent>\n ) => {\n this.selectedObjectsIds = event.detail.rowsId;\n };\n\n #newVariableCallbackHandler = async () => {\n const response = await this.newVariableCallback();\n if (response) {\n this.#refreshUIWithNewConfiguration();\n }\n };\n #refreshUIWithNewConfiguration = (): void => {\n this.objects = [];\n const filters: FiltersData = {\n pattern: this.#filterPatternEl?.value,\n object: this.#filterObjectEl?.value?.id\n };\n this.loading = true;\n this.loadItemsCallback(filters).then((items: ItemData[]) => {\n if (items.length) {\n this.objects = this.#sortObjectsByName(items);\n this.#firstGridObjectId = this.objects[0].id;\n this.#loadItemsCallbackJustCalled = true;\n }\n this.selectedObjectsIds = [];\n this.loading = false;\n });\n };\n\n #renderFilter = (): Element[] => {\n return [\n <div class=\"header__field-group field-group\">\n <div class=\"field field-block pattern-field\">\n <label class=\"label\" htmlFor=\"filter-pattern\">\n {this.#componentLocale.filter.pattern}\n </label>\n <ch-edit\n autoFocus\n id=\"filter-pattern\"\n name=\"filter-pattern\"\n class=\"input pattern-input\"\n part=\"filter-pattern\"\n debounce={config.inputDebounce}\n onInput={this.#refreshUIWithNewConfiguration}\n ref={(el: HTMLChEditElement) =>\n (this.#filterPatternEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n <gx-ide-entity-selector\n id=\"object-selector\"\n value={this.defaultModule}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectObjectCallback}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#filterObjectEl = el as HTMLGxIdeEntitySelectorElement)\n }\n class=\"entity\"\n onValueChanged={this.#refreshUIWithNewConfiguration}\n ></gx-ide-entity-selector>\n </div>\n ];\n };\n\n #renderObjects = (): Element => {\n const gridIsEmpty = !this.objects.length;\n const displayLoader = this.loader && this.loading;\n if (!gridIsEmpty || displayLoader) {\n this.#animateEmptyState = true; // improve performance if is first render\n }\n return (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"empty-result\": this.objects.length === 0,\n \"data\": true\n }}\n rowSelectionMode={this.selectionType}\n onKeyDown={this.#chGridKeyDownHandler}\n part=\"ch-grid-objects\"\n onSelectionChanged={\n this.objects.length ? this.#objectsSelectionChangedHandler : undefined\n }\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chTabularGridObjectsEl = el as HTMLChTabularGridElement)\n }\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.name}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.dataType}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.description}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {!gridIsEmpty ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects.map((obj: ItemData) => (\n <ch-tabular-grid-row\n rowid={obj.id}\n onDblClick={this.#confirmCallbackHandler}\n class=\"tabular-grid-row\"\n >\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image\n src={\n obj.type === \"attribute\"\n ? \"objects/attribute\"\n : \"objects-parts/variables\"\n }\n class=\"icon-md\"\n ></ch-image>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.dataType}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.description}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n {displayLoader ? (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n show\n ></gx-ide-loader>\n ) : (\n <gx-ide-empty-state\n isAnimated={this.#animateEmptyState}\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.emptyState.title}\n ></gx-ide-empty-state>\n )}\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #renderEditButtons = (): JSX.Element | null => {\n if (!this.editCallback && !this.newVariableCallback) {\n return null;\n }\n\n const newVariableButtonEnabled = this.newVariableCallback && !this.loading;\n const editButtonEnabled =\n this.editCallback && !this.loading && this.selectedObjectsIds.length;\n\n return (\n <div class=\"buttons-spacer\">\n {this.newVariableCallback ? (\n <button\n // New Variable Button\n class=\"button-secondary\"\n disabled={!newVariableButtonEnabled}\n part=\"button button-new\"\n type=\"button\"\n onClick={this.#newVariableCallbackHandler}\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n ) : (\n []\n )}\n {this.editCallback ? (\n <button\n // Edit Button\n class=\"button-secondary\"\n disabled={!editButtonEnabled}\n part=\"button button-edit\"\n type=\"button\"\n onClick={editButtonEnabled && this.#editCallbackHandler}\n >\n {this.#componentLocale.footer.btnEdit}\n </button>\n ) : (\n []\n )}\n </div>\n );\n };\n\n #sortObjectsByName = (objects: ItemData[]): ItemData[] =>\n // TODO (make this a common helper function\n // and use it in other dialog grids that\n // require filter by name).\n objects.sort((a, b) => {\n const nameA = a.name.toLowerCase(),\n nameB = b.name.toLowerCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n return 0;\n });\n\n render() {\n const okButtonEnabled = !this.loading;\n const footerJustifySpaceBetween: boolean =\n !!this.newVariableCallback || !!this.editCallback;\n\n return (\n <Host onKeyPress={this.#hostKeyPressHandler} 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 spacing-body-block-start spacing-body-inline\">\n {this.#renderFilter()}\n </header>\n {this.#renderObjects()}\n <footer\n class={{\n \"footer\": true,\n \"control-footer-with-border\": true,\n \"control-footer-space-between\": footerJustifySpaceBetween,\n \"spacing-body-inline\": true,\n \"spacing-body-block-end\": true\n }}\n >\n {this.#renderEditButtons()}\n <div class=\"buttons-spacer\">\n <button\n // Cancel Button\n class=\"button-secondary\"\n part=\"button button-cancel\"\n type=\"button\"\n onClick={this.cancelCallback}\n >\n {this.#componentLocale.footer.btnCancel}\n </button>\n <button\n // Confirm Button\n class=\"button-primary\"\n part=\"button button-ok\"\n disabled={!okButtonEnabled}\n type=\"button\"\n onClick={okButtonEnabled && this.#confirmCallbackHandler}\n >\n {this.#componentLocale.footer.btnConfirm}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type NewVariableCallback = () => Promise<boolean> | undefined;\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type SelectObjectCallback = () => Promise<EntityData | undefined>;\n\nexport type EditCallback = (id: string) => Promise<boolean> | undefined;\n\nexport type ConfirmCallback = (ids: string[]) => Promise<void>;\n\nexport type LoadItemsCallback = (filters: FiltersData) => Promise<ItemData[]>;\n\nexport type FiltersData = {\n pattern?: string;\n object?: string;\n};\n\nexport type ItemData = {\n type: ItemType;\n id: string;\n name: string;\n dataType: string;\n description: string;\n};\n\nexport type ItemType = \"variable\" | \"attribute\";\n"],"mappings":"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"}
@@ -1,8 +1,6 @@
1
1
  import { r as e, h as i, H as t, a } from "./p-25a9f1d7.js";
2
2
 
3
- import { g as o } from "./p-6e4208d8.js";
4
-
5
- import "./p-5ac47c69.js";
3
+ import { g as o } from "./p-ede7bd20.js";
6
4
 
7
5
  import { L as r } from "./p-311eedf3.js";
8
6
 
@@ -472,4 +470,4 @@ d = new WeakSet, b = function _FileUploader_isValidFile(e) {
472
470
  F.style = s;
473
471
 
474
472
  export { F as gx_ide_file_uploader };
475
- //# sourceMappingURL=p-bbf88f43.entry.js.map
473
+ //# sourceMappingURL=p-690942cb.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","console","log","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 console.log(\"Upload result:\", { id, result });\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 console.log(\"File uploaded successfully:\", updatedState);\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 console.log(\"File upload failed:\", 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 console.log(\"File upload error:\", 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 console.log(\"File validation:\", {\n id: file.id,\n name: file.name,\n pending: file.pending,\n remoteId: file.remoteId,\n error: file.error,\n isValid\n });\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 console.log(\"Files to be confirmed:\", uploadedFiles);\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","console","log","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 console.log(\"Upload result:\", { id, result });\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 console.log(\"File uploaded successfully:\", updatedState);\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 console.log(\"File upload failed:\", 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 console.log(\"File upload error:\", 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 console.log(\"File validation:\", {\n id: file.id,\n name: file.name,\n pending: file.pending,\n remoteId: file.remoteId,\n error: file.error,\n isValid\n });\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 console.log(\"Files to be confirmed:\", uploadedFiles);\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":";;;;;;AAAA,MAAMA,IAAkB;;;;;;;;;;;;;;;;;ACiBxB,MAAMC,IAAYC,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAGb,MAAMC,IAA8B,EAClC,qBACA,qBACA,mBACA,uBACA,mBACA,oBACA,iBACA,cACA,gBACA,mBACA;;MAcWC,IAAY;;;;IACvBC,EAAAC,IAAAC,WAAA;IACAC,EAAAF,IAAAC,WAAA;IAiEAE,EAAAH,IAAAC,MAAe;4DAQfG,EAAAJ,IAAAC,OAAc,MACLI,KAAKC,SAASC,SAAS,IAAIC,OAAO,GAAG;uCAyD9CC,EAAAT,IAAAC,OAAoBS;;MAClBA,EAAEC;MACFD,EAAEE;MACFC,EAAAZ,MAAAE,IAAAW,IAAAC,EAAAd,MAAAE,GAAA,MAAAW,KAAmBA,IAAA;MACnBb,KAAKe,aAAa;AAAI;uCAIxBC,EAAAjB,IAAAC,OAAoBS;;MAClBA,EAAEC;MACFD,EAAEE;MACFC,EAAAZ,MAAAE,IAAAW,IAAAC,EAAAd,MAAAE,GAAA,MAAAW,KAAmBA,IAAA;MACnB,IAAIC,EAAAd,MAAIE,GAAA,SAAkB,GAAG;QAC3BF,KAAKe,aAAa;;;sCAKtBE,EAAAlB,IAAAC,OAAmBS;MACjBA,EAAEC;MACFD,EAAEE;AAAiB;iCAIrBO,EAAAnB,IAAAC,OAAeS;;MACbA,EAAEC;MACFD,EAAEE;MACFX,KAAKe,aAAa;MAClBH,EAAAZ,MAAIE,GAAgB,GAAC;MAErB,MAAMiB,KAAQN,IAAAJ,EAAEW,kBAAY,QAAAP,WAAA,aAAAA,EAAEM;MAC9B,IAAIA,GAAO;QACTL,EAAAd,MAAIqB,GAAA,KAAaC,KAAjBtB,MAAkBmB;;;wCAKtBI,EAAAxB,IAAAC,OAAoB;;OAClBa,IAAAC,EAAAd,MAAIC,GAAA,UAAa,QAAAY,WAAA,aAAAA,EAAEW;AAAO;8CAI5BC,EAAA1B,IAAAC,OAAoBS;MAClB,MAAMU,IAASV,EAAEiB,OAA4BP;MAC7C,IAAIA,GAAO;QACTL,EAAAd,MAAIqB,GAAA,KAAaC,KAAjBtB,MAAkBmB;;;gDAKtBE,EAAAtB,IAAAC,OAAgBmB;MACd,MAAMQ,IAAqBb,EAAAd,MAAI4B,GAAA,KAAAC,GAAeP,KAAnBtB,MAAoBmB;MAE/CQ,EAAWG,SAAQC,MAAMC;;QACvB,MAAMC,IAAKnB,EAAAd,MAAIG,GAAA,KAAYmB,KAAhBtB;QACX,MAAMkC,IAA6B;UACjCD;UACAvC,MAAMsC,EAAKtC;UACXsC;UACAG,SAAS;UACTC,UAAU;;QAGZ,KAAKpC,KAAKqC,UAAU;UAClBrC,KAAKsC,WAAWC;;QAGlBvC,KAAKsC,aAAa,IAAIE,IAAIxC,KAAKsC,WAAWvC,IAAIkC,GAAIC;QAElD,IAAIlC,KAAKyC,gBAAgB;UACvB;YACE,MAAMC,IAAgB1C,KAAKyC,eAAeT,IAAMI;cAC9C,MAAMO,IAAQ3C,KAAKsC,WAAWM,IAAIX;cAClC,IAAIU,GAAO;gBACT,MAAME,IAAYC,OAAAC,OAAAD,OAAAC,OAAA,IACbJ,IAAK;kBACRP,UAAUA;kBACVD,SAASC,IAAW;;gBAEtBpC,KAAKsC,aAAa,IAAIE,IAAIxC,KAAKsC,WAAWvC,IAAIkC,GAAIY;;;;wBAKtD,MAAMG,IAAgBF,OAAAC,OAAAD,OAAAC,OAAA,IACjB/C,KAAKsC,WAAWM,IAAIX,KAAG;cAC1BS;;YAEF1C,KAAKsC,aAAa,IAAIE,IAAIxC,KAAKsC,WAAWvC,IAAIkC,GAAIe;YAElD,MAAMC,UAAeP;YACrBQ,QAAQC,IAAI,kBAAkB;cAAElB;cAAIgB;;YAEpC,MAAMN,IAAQ3C,KAAKsC,WAAWM,IAAIX;YAClC,IAAIU,GAAO;cACT,IAAIM,EAAOG,WAAWH,EAAOI,UAAU;gBACrC,MAAMR,IAAYC,OAAAC,OAAAD,OAAAC,OAAA,IACbJ,IAAK;kBACRU,UAAUJ,EAAOI;kBACjBlB,SAAS;kBACTC,UAAU;;gBAEZpC,KAAKsC,aAAa,IAAIE,IAAIxC,KAAKsC,WAAWvC,IAAIkC,GAAIY;gBAClDK,QAAQC,IAAI,+BAA+BN;wBACrChC,IAAAb,KAAKsD,0BAAoB,QAAAzC,WAAA,aAAAA,EAAAS,KAAAtB,MAAG;kBAChCN,MAAMiD,EAAMjD;kBACZ6D,cAAcZ,EAAMX,KAAKtC;kBACzB2D,UAAUJ,EAAOI;;qBAEd;gBACL,MAAMR,IAAYC,OAAAC,OAAAD,OAAAC,OAAA,IACbJ,IAAK;kBACRa,SAAOC,IAAAR,EAAOS,YAAM,QAAAD,WAAA,aAAAA,EAAEE,WAAU;kBAChCxB,SAAS;;gBAEXnC,KAAKsC,aAAa,IAAIE,IAAIxC,KAAKsC,WAAWvC,IAAIkC,GAAIY;gBAClDK,QAAQC,IAAI,uBAAuBN;;;YAGvC,OAAOW;YACP,MAAMb,IAAQ3C,KAAKsC,WAAWM,IAAIX;YAClC,IAAIU,GAAO;cACT,MAAME,IAAYC,OAAAC,OAAAD,OAAAC,OAAA,IACbJ,IAAK;gBACRa,OACEA,aAAiBI,QACbJ,EAAMK,UACN;gBACN1B,SAAS;;cAEXnC,KAAKsC,aAAa,IAAIE,IAAIxC,KAAKsC,WAAWvC,IAAIkC,GAAIY;cAClDK,QAAQC,IAAI,sBAAsBN;;;;;MAM1C,IAAI/B,EAAAd,MAAIC,GAAA,MAAe;QACrBa,EAAAd,MAAIC,GAAA,KAAc6D,QAAQ;;;uCAK9BC,EAAAhE,IAAAC,OAAoB+B,MAClBiC;;MAEA,OAAM/B,IAAEA,GAAEvC,MAAEA,KAASsE,EAAMC;MAC3B,MAAMjC,IAAOhC,KAAKsC,WAAWM,IAAIX;MAEjC,IAAID,GAAM;QACR,MAAMkC,IAAWpB,OAAAC,OAAAD,OAAAC,OAAA,IACZf,IAAI;UACPtC,MAAMA,EAAKyE;UACXC,WAAW;;QAGbpE,KAAKsC,aAAa,IAAIE,IAAIxC,KAAKsC,WAAWvC,IAAIkC,GAAIiC;gBAC5CrD,IAAAb,KAAKqE,yBAAmB,QAAAxD,WAAA,aAAAA,EAAAS,KAAAtB,MAAG;UAAEsE,QAAQrC;UAAIsC,SAAS7E,EAAKyE;;;;+DAKjEK,EAAAzE,IAAAC,OAAoB+B,MAAOiC;;MACzB,MAAM/B,IAAK+B,EAAMC;MACjB,MAAMtB,IAAQ3C,KAAKsC,WAAWM,IAAIX;MAClC,IAAIU,GAAO;QACT;UACE,IAAIA,EAAMR,SAAS;;YAEjB,IACEQ,EAAMD,wBACCC,EAAMD,cAAc+B,WAAW,YACtC;cACA9B,EAAMD,cAAc+B;mBACf,IAAIzE,KAAK0E,sBAAsB;oBAC9B1E,KAAK0E,qBAAqBzC;;oBAG5BpB,IAAAb,KAAK2E,6BAAuB,QAAA9D,WAAA,aAAAA,EAAAS,KAAAtB,MAAGiC;YAErCjC,KAAKsC,WAAWsC,OAAO3C;YACvBjC,KAAKsC,aAAa,IAAIE,IAAIxC,KAAKsC;iBAC1B;YACL,MAAMuC,IAA6B;cACjCnF,MAAMiD,EAAMjD;cACZ6D,cAAcZ,EAAMX,KAAKtC;cACzB2D,UAAUV,EAAMU;;YAGlB,MAAMyB,YAAqBrB,IAAAzD,KAAK+E,oBAAc,QAAAtB,WAAA,aAAAA,EAAAnC,KAAAtB,MAAG6E;YAEjD,IAAIC,GAAc;sBACVE,IAAAhF,KAAKiF,yBAAmB,QAAAD,WAAA,aAAAA,EAAA1D,KAAAtB,MAAG6E;cACjC7E,KAAKsC,WAAWsC,OAAO3C;cACvBjC,KAAKsC,aAAa,IAAIE,IAAIxC,KAAKsC;;;UAGnC,OAAOkB;kBACD0B,IAAAlF,KAAKmF,+BAAyB,QAAAD,WAAA,aAAAA,EAAA5D,KAAAtB,MAAG;YACrCoF,UAAUzC,EAAMjD;YAChB8D,OACEA,aAAiBI,QAAQJ,EAAMK,UAAU;;;;;0CAOnDwB,EAAAtF,IAAAC,OAAiB+B;;;YAEf,MAAMuD,IAAoBC,MAAMC,KAAKxF,KAAKsC,WAAWmD,UAAUC,MAC7D1D,KAAQA,EAAKG;MAGf,IAAImD,GAAmB;QACrB;;;;YAIF,MAAMK,IAAgCJ,MAAMC,KAAKxF,KAAKsC,WAAWmD,UAC9DG,QAAO5D;QACN,MAAM6D,KAAW7D,EAAKG,WAAWH,EAAKqB,aAAarB,EAAKwB;QACxDN,QAAQC,IAAI,oBAAoB;UAC9BlB,IAAID,EAAKC;UACTvC,MAAMsC,EAAKtC;UACXyC,SAASH,EAAKG;UACdkB,UAAUrB,EAAKqB;UACfG,OAAOxB,EAAKwB;UACZqC;;QAEF,OAAOA;AAAO,UAEfC,KAAI9D,MAAI;QACPtC,MAAMsC,EAAKtC;QACX6D,cAAcvB,EAAKA,KAAKtC;QACxB2D,UAAUrB,EAAKqB;;MAGnBH,QAAQC,IAAI,0BAA0BwC;MAEtC,IAAIA,EAAcI,SAAS,GAAG;gBACtBlF,IAAAb,KAAKgG,6BAAuB,QAAAnF,WAAA,aAAAA,EAAAS,KAAAtB,MAAG2F;;;YAIvC3F,KAAKsC,WAAWC;MAChBvC,KAAKsC,aAAa,IAAIE;;YAGtB,IAAI1B,EAAAd,MAAIC,GAAA,MAAe;QACrBa,EAAAd,MAAIC,GAAA,KAAc6D,QAAQ;;;0CAK9BmC,EAAAlG,IAAAC,OAAgB+B;;MACd;;QAEE,KAAK,OAAOE,GAAIU,MAAU3C,KAAKsC,WAAW4D,WAAW;UACnD,IAAIvD,EAAMR,WAAWnC,KAAK0E,sBAAsB;YAC9C;oBACQ1E,KAAK0E,qBAAqBzC;sBAC1BpB,IAAAb,KAAK2E,6BAAuB,QAAA9D,WAAA,aAAAA,EAAAS,KAAAtB,MAAGiC;cACrC,OAAOuB;;;;;;gBAObxD,KAAKsC,WAAWC;QAChBvC,KAAKsC,aAAa,IAAIE;QAEtB,IAAI1B,EAAAd,MAAIC,GAAA,MAAe;UACrBa,EAAAd,MAAIC,GAAA,KAAc6D,QAAQ;;gBAGtBL,IAAAzD,KAAKmG,4BAAsB,QAAA1C,WAAA,aAAAA,EAAAnC,KAAAtB;QACjC,OAAOwD;QACPxD,KAAKsC,WAAWC;QAChBvC,KAAKsC,aAAa,IAAIE;gBAChBwC,IAAAhF,KAAKmG,4BAAsB,QAAAnB,WAAA,aAAAA,EAAA1D,KAAAtB;;;iBAvZD;oBAGC;uBAGG;;;;;;;;;;;;;sBAoDoB,IAAIwC;sBACzB;;oDAIvC,uBAAM4D;IACJxF,EAAAZ,MAAIF,SAA2BuG,EAAOC,oBAAoBtG,KAAKuG,KAAG;;4CA6VpE,WAAMhE;;IACJ,KAAK,OAAON,GAAIU,MAAU3C,KAAKsC,WAAW4D,WAAW;MACnD,IAAIvD,EAAMR,WAAWnC,KAAK0E,sBAAsB;QAC9C;gBACQ1E,KAAK0E,qBAAqBzC;kBAC1BpB,IAAAb,KAAK2E,6BAAuB,QAAA9D,WAAA,aAAAA,EAAAS,KAAAtB,MAAGiC;UACrC,OAAOuB;;;;;IAKbxD,KAAKsC,WAAWC;;EAGlB,MAAAiE;;IACE,OACEC,EAACC,GAAI;MAACC,OAAM;OACVF,EAAA;MAAUG,OAAOhH;QACjB6G,EAAA;MACEI,MAAK;MACLF,OAAM;MACNtE,UAAUrC,KAAKqC;MACfyE,SAAQjG,IAAAb,KAAK+G,WAAK,QAAAlG,WAAA,aAAAA,EACdiF,KAAIe,KAASA,EAAKG,WAAW,OAAOH,IAAO,IAAIA,MAChDI,KAAK;MACRC,UAAUpG,EAAAd,MAAIyB,GAAA;MACd0F,KAAKZ,KAAO3F,EAAAZ,MAAIC,GAAgBsG,GAAsB;MAAC,eAC3C;MACZa,WAAW;MACXC,OAAO;QAAEC,SAAS;;QAEpBb,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAKE,OAAM;OACR3G,KAAKe,cAAcf,KAAKsC,WAAWiF,SAAS,IAC3Cd,EAAA;MACEE,OAAO;QACL,4BAA4B;QAC5B,sCAAsC3G,KAAKe;;MAE7CyG,aAAa1G,EAAAd,MAAIQ,GAAA;MACjBiH,aAAa3G,EAAAd,MAAIgB,GAAA;MACjB0G,YAAY5G,EAAAd,MAAIiB,GAAA;MAChB0G,QAAQ7G,EAAAd,MAAIkB,GAAA;OAEZuF,EAAA;MACEE,OAAM;MACNE,MAAK;MACLe,SAAS9G,EAAAd,MAAIuB,GAAA;OAEbkF,EAAA;MAAUE,OAAM;MAAUkB,KAAKtI;QAC/BkH,EAAA;MAAOE,OAAM;OACV3G,KAAKqC,YACFoB,IAAA3C,EAAAd,MAAIF,GAAA,UAAkB,QAAA2D,WAAA,aAAAA,EAAEqE,OAAOC,wBAC/B/C,IAAAlE,EAAAd,MAAIF,GAAA,UAAkB,QAAAkF,WAAA,aAAAA,EAAE8C,OAAOE,sBAGvCvB,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAOE,OAAM;OACV3G,KAAKiI,WAAS/C,IAAApE,EAAAd,MAAIF,GAAA,UAAkB,QAAAoF,WAAA,aAAAA,EAAE4C,OAAOI,UAEhDzB,EAAA;MAAOE,OAAM;QACVwB,IAAArH,EAAAd,MAAIF,GAAA,UAAkB,QAAAqI,WAAA,aAAAA,EAAEL,OAAOM,eAGpC3B,EAAA;MAAME,OAAM;OACT3G,KAAK+G,SAAS/G,KAAK+G,MAAMhB,SAAS,KAC/BsC,IAAAvH,EAAAd,MAAIF,GAAA,UAAkB,QAAAuI,WAAA,aAAAA,EAAEP,OAAOQ,cAAcC,QAC3C,OACAvI,KAAK+G,MAAME,KAAK,UAElBuB,IAAA1H,EAAAd,MAAIF,GAAA,UAAkB,QAAA0I,WAAA,aAAAA,EAAEV,OAAOW,sBAKzChC,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAOE,OAAM;OACV3G,KAAKiI,WACJS,IAAA5H,EAAAd,MAAIF,GAAA,UAAkB,QAAA4I,WAAA,aAAAA,EAAEC,SAASC,iBAErCnC,EAAA;MAAME,OAAM;QACTkC,IAAA/H,EAAAd,MAAIF,GAAA,UAAkB,QAAA+I,WAAA,aAAAA,EAAEF,SAASG,WAAWP,QAC3C,OACAvI,KAAKsC,WAAWiF,KAAKjH,eAI1BN,KAAKqC,YACJoE,EAAA;MACEE,OAAM;MACNE,MAAK;MACLe,SAAS9G,EAAAd,MAAIuB,GAAA;OAEbkF,EAAA;MAAUE,OAAM;MAAUkB,KAAKtI;QAC/BkH,EAAA;MAAOE,OAAM;OACV3G,KAAKqC,YACF0G,IAAAjI,EAAAd,MAAIF,GAAA,UAAkB,QAAAiJ,WAAA,aAAAA,EAAEjB,OAAOC,wBAC/BiB,IAAAlI,EAAAd,MAAIF,GAAA,UAAkB,QAAAkJ,WAAA,aAAAA,EAAElB,OAAOE,uBAK3CvB,EAAA;MAAKE,OAAM;OACRpB,MAAMC,KAAKxF,KAAKsC,WAAWmD,UAAUK,KAAI9D,KACxCyE,EAAA;MACEwC,KAAKjH,EAAKC;MACVD,MAAMA;MACNkH,UAAUlJ,KAAKmJ;MACfC,kBAAkBtI,EAAAd,MAAI+D,GAAA;MACtBsF,cAAcvI,EAAAd,MAAIwE,GAAA;MAClB8E,cAAcxI,EAAAd,MAAIwE,GAAA;aAO9BiC,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAKE,OAAM;OACTF,EAAA;MACEE,OAAM;MACNE,MAAK;MACLe,SAAS9G,EAAAd,MAAIiG,GAAA;QAEZsD,IAAAzI,EAAAd,MAAIF,GAAA,UAAkB,QAAAyJ,WAAA,aAAAA,EAAEC,QAAQ/E,SAEnCgC,EAAA;MACEE,OAAM;MACNE,MAAK;MACLe,SAAS9G,EAAAd,MAAIqF,GAAA;MACboE,UACEzJ,KAAKsC,WAAWiF,SAAS,KACzBhC,MAAMC,KAAKxF,KAAKsC,WAAWmD,UAAUC,MACnC1D,KAAQA,EAAKG;QAIhBuH,IAAA5I,EAAAd,MAAIF,GAAA,UAAkB,QAAA4J,WAAA,aAAAA,EAAEF,QAAQG;;;;;;;;;;;;;wDAhelC3H;;;IAEX,KAAKhC,KAAK+G,SAAS/G,KAAK+G,MAAMhB,WAAW,GAAG;IAC1C,OAAO;MAAEF,SAAS;;;EAGpB,KAAK,MAAMgB,KAAQ7G,KAAK+G,OAAO;;IAE7B,IAAIF,EAAK+C,SAAS,OAAO;MACvB,MAAMC,IAAWhD,EAAKiD,MAAM,KAAK;MACjC,IAAI9H,EAAK6E,KAAKG,WAAW6C,IAAW;QAClC,OAAO;UAAEhE,SAAS;;;;;UAIjB,IAAIgB,EAAKG,WAAW,MAAM;MAC7B,IAAIhF,EAAKtC,KAAKqK,cAAcC,SAASnD,EAAKkD,gBAAgB;QACxD,OAAO;UAAElE,SAAS;;;;;UAIjB,IAAI7D,EAAK6E,SAASA,KAAQ7E,EAAK6E,SAAS,eAAeA,KAAQ;MAClE,OAAO;QAAEhB,SAAS;;;;EAItB,OAAO;IACLA,SAAS;IACTrC,SACEC,KAAA5C,IAAAC,EAAAd,MAAIF,GAAA,UAAkB,QAAAe,WAAA,aAAAA,EAAE6C,YAAM,QAAAD,WAAA,aAAAA,EAAEwG,oBAAmB;;AAEzD,GAACpI,IAAA,SAAAA,4BAGcV;EACb,MAAMQ,IAAqB;EAE3B4D,MAAMC,KAAKrE,GAAOW,SAAQE;;IACxB,MAAMkI,IAAapJ,EAAAd,MAAI4B,GAAA,KAAAuI,GAAa7I,KAAjBtB,MAAkBgC;IACrC,IAAIkI,EAAWrE,SAAS;MACtBlE,EAAWyI,KAAKpI;WACX;OACLnB,IAAAb,KAAKqK,iCAA2B,QAAAxJ,WAAA,aAAAA,EAAAS,KAAAtB,MAAG;QACjCoF,UAAUpD,EAAKtC;QACf8D,OAAO0G,EAAW1G;;;;EAKxB,OAAO7B;AACT"}
@@ -1,14 +1,12 @@
1
1
  import { r as t, g as i, h as e, H as s, a } from "./p-25a9f1d7.js";
2
2
 
3
- import { g as o } from "./p-6e4208d8.js";
4
-
5
- import "./p-5ac47c69.js";
3
+ import { g as o } from "./p-ede7bd20.js";
6
4
 
7
5
  import { c as n } from "./p-13738332.js";
8
6
 
9
7
  import { L as h } from "./p-311eedf3.js";
10
8
 
11
- import { g as l } from "./p-9a609b51.js";
9
+ import { g as l } from "./p-48f5911b.js";
12
10
 
13
11
  import { r, m as d } from "./p-9ddea83b.js";
14
12
 
@@ -733,4 +731,4 @@ et = new WeakMap;
733
731
  dt.style = p;
734
732
 
735
733
  export { dt as gx_ide_new_kb };
736
- //# sourceMappingURL=p-84618917.entry.js.map
734
+ //# sourceMappingURL=p-6f898249.entry.js.map