@genexus/genexus-ide-ui 1.1.55 → 1.1.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/dist/cjs/assets-manager-089e91b1.js +7 -0
  2. package/dist/cjs/assets-manager-089e91b1.js.map +1 -0
  3. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  4. package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js +8 -4
  5. package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js +8 -4
  7. package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js +12 -16
  9. package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js.map +1 -1
  10. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +8 -4
  11. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
  12. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +6 -2
  13. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
  14. package/dist/cjs/gx-ide-data-selector.cjs.entry.js +6 -2
  15. package/dist/cjs/gx-ide-data-selector.cjs.entry.js.map +1 -1
  16. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +6 -2
  17. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -1
  18. package/dist/cjs/gx-ide-design-import.cjs.entry.js +11 -7
  19. package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
  20. package/dist/cjs/gx-ide-details-acknowledgements.cjs.entry.js +6 -2
  21. package/dist/cjs/gx-ide-details-acknowledgements.cjs.entry.js.map +1 -1
  22. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +7 -3
  23. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js.map +1 -1
  24. package/dist/cjs/gx-ide-file-item.cjs.entry.js +9 -5
  25. package/dist/cjs/gx-ide-file-item.cjs.entry.js.map +1 -1
  26. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +6 -2
  27. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
  28. package/dist/cjs/gx-ide-json-import.cjs.entry.js +7 -3
  29. package/dist/cjs/gx-ide-json-import.cjs.entry.js.map +1 -1
  30. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +10 -6
  31. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js.map +1 -1
  32. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +9 -5
  33. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
  34. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +7 -3
  35. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -1
  36. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +6 -2
  37. package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
  38. package/dist/cjs/gx-ide-new-version.cjs.entry.js +15 -3
  39. package/dist/cjs/gx-ide-new-version.cjs.entry.js.map +1 -1
  40. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +7 -3
  41. package/dist/cjs/gx-ide-object-selector.cjs.entry.js.map +1 -1
  42. package/dist/cjs/gx-ide-open-api-import.cjs.entry.js +7 -3
  43. package/dist/cjs/gx-ide-open-api-import.cjs.entry.js.map +1 -1
  44. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js +8 -4
  45. package/dist/cjs/gx-ide-plugin-details.cjs.entry.js.map +1 -1
  46. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js +6 -2
  47. package/dist/cjs/gx-ide-plugin-explorer.cjs.entry.js.map +1 -1
  48. package/dist/cjs/gx-ide-references.cjs.entry.js +7 -3
  49. package/dist/cjs/gx-ide-references.cjs.entry.js.map +1 -1
  50. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +263 -20
  51. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
  52. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +7 -3
  53. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
  54. package/dist/cjs/gx-ide-server-selector.cjs.entry.js +9 -5
  55. package/dist/cjs/gx-ide-server-selector.cjs.entry.js.map +1 -1
  56. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +6 -2
  57. package/dist/cjs/gx-ide-share-kb.cjs.entry.js.map +1 -1
  58. package/dist/cjs/gx-ide-splash.cjs.entry.js +6 -2
  59. package/dist/cjs/gx-ide-splash.cjs.entry.js.map +1 -1
  60. package/dist/cjs/gx-ide-start-page.cjs.entry.js +9 -5
  61. package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
  62. package/dist/cjs/gx-ide-starting-template.cjs.entry.js +6 -2
  63. package/dist/cjs/gx-ide-starting-template.cjs.entry.js.map +1 -1
  64. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js +14 -10
  65. package/dist/cjs/gx-ide-team-dev-bring-changes.cjs.entry.js.map +1 -1
  66. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +7 -3
  67. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js.map +1 -1
  68. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js +10 -6
  69. package/dist/cjs/gx-ide-team-dev-history.cjs.entry.js.map +1 -1
  70. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js +6 -2
  71. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js.map +1 -1
  72. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +17 -13
  73. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
  74. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js +6 -2
  75. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js.map +1 -1
  76. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js +6 -2
  77. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js.map +1 -1
  78. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +8 -4
  79. package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
  80. package/dist/cjs/index.cjs.js +0 -3
  81. package/dist/cjs/index.cjs.js.map +1 -1
  82. package/dist/cjs/loader.cjs.js +1 -1
  83. package/dist/cjs/mer-animated-dots-001c7465.js +79 -0
  84. package/dist/cjs/mer-animated-dots-001c7465.js.map +1 -0
  85. package/dist/cjs/{tabular-grid-render-b1767da2.js → tabular-grid-render-f97a5ab3.js} +18 -14
  86. package/dist/cjs/tabular-grid-render-f97a5ab3.js.map +1 -0
  87. package/dist/cjs/{utilities-0e316b39.js → utilities-0815a260.js} +10 -6
  88. package/dist/cjs/utilities-0815a260.js.map +1 -0
  89. package/dist/collection/components/chat/chat-container/chat-container.js +2 -10
  90. package/dist/collection/components/chat/chat-container/chat-container.js.map +1 -1
  91. package/dist/collection/components/new-version/gx-ide-assets/new-version/shortcuts.json +15 -0
  92. package/dist/collection/components/new-version/new-version.js +17 -4
  93. package/dist/collection/components/new-version/new-version.js.map +1 -1
  94. package/dist/collection/index.js +0 -2
  95. package/dist/collection/index.js.map +1 -1
  96. package/dist/collection/showcase/chat-container/callbacks.js +9 -9
  97. package/dist/collection/showcase/chat-container/callbacks.js.map +1 -1
  98. package/dist/collection/showcase/chat-container/chat.showcase.js +4 -4
  99. package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -1
  100. package/dist/collection/showcase/chat-container/models.js +18 -18
  101. package/dist/collection/showcase/chat-container/models.js.map +1 -1
  102. package/dist/components/chat-container.js +6 -11
  103. package/dist/components/chat-container.js.map +1 -1
  104. package/dist/components/chat-welcome.js +4 -1
  105. package/dist/components/chat-welcome.js.map +1 -1
  106. package/dist/components/entity-selector.js +4 -1
  107. package/dist/components/entity-selector.js.map +1 -1
  108. package/dist/components/file-item.js +4 -1
  109. package/dist/components/file-item.js.map +1 -1
  110. package/dist/components/gx-ide-bpm-app-declaration.js +4 -1
  111. package/dist/components/gx-ide-bpm-app-declaration.js.map +1 -1
  112. package/dist/components/gx-ide-bpm-task-documents.js +4 -1
  113. package/dist/components/gx-ide-bpm-task-documents.js.map +1 -1
  114. package/dist/components/gx-ide-create-kb-from-server.js +4 -1
  115. package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
  116. package/dist/components/gx-ide-current-user-info.js +4 -1
  117. package/dist/components/gx-ide-current-user-info.js.map +1 -1
  118. package/dist/components/gx-ide-data-selector.js +4 -1
  119. package/dist/components/gx-ide-data-selector.js.map +1 -1
  120. package/dist/components/gx-ide-data-type-selector.js +4 -1
  121. package/dist/components/gx-ide-data-type-selector.js.map +1 -1
  122. package/dist/components/gx-ide-design-import.js +4 -1
  123. package/dist/components/gx-ide-design-import.js.map +1 -1
  124. package/dist/components/gx-ide-details-acknowledgements.js +4 -1
  125. package/dist/components/gx-ide-details-acknowledgements.js.map +1 -1
  126. package/dist/components/gx-ide-file-uploader.js +4 -1
  127. package/dist/components/gx-ide-file-uploader.js.map +1 -1
  128. package/dist/components/gx-ide-json-import.js +4 -1
  129. package/dist/components/gx-ide-json-import.js.map +1 -1
  130. package/dist/components/gx-ide-kb-manager-export.js +4 -1
  131. package/dist/components/gx-ide-kb-manager-export.js.map +1 -1
  132. package/dist/components/gx-ide-kb-manager-import.js +4 -1
  133. package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
  134. package/dist/components/gx-ide-manage-module-references.js +4 -1
  135. package/dist/components/gx-ide-manage-module-references.js.map +1 -1
  136. package/dist/components/gx-ide-new-kb.js +4 -1
  137. package/dist/components/gx-ide-new-kb.js.map +1 -1
  138. package/dist/components/gx-ide-new-version.js +17 -4
  139. package/dist/components/gx-ide-new-version.js.map +1 -1
  140. package/dist/components/gx-ide-object-selector.js +4 -1
  141. package/dist/components/gx-ide-object-selector.js.map +1 -1
  142. package/dist/components/gx-ide-open-api-import.js +4 -1
  143. package/dist/components/gx-ide-open-api-import.js.map +1 -1
  144. package/dist/components/gx-ide-plugin-details.js +4 -1
  145. package/dist/components/gx-ide-plugin-details.js.map +1 -1
  146. package/dist/components/gx-ide-plugin-explorer.js +4 -1
  147. package/dist/components/gx-ide-plugin-explorer.js.map +1 -1
  148. package/dist/components/gx-ide-references.js +4 -1
  149. package/dist/components/gx-ide-references.js.map +1 -1
  150. package/dist/components/gx-ide-sc-chat-container.js +263 -20
  151. package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
  152. package/dist/components/gx-ide-server-selector.js +4 -1
  153. package/dist/components/gx-ide-server-selector.js.map +1 -1
  154. package/dist/components/gx-ide-share-kb.js +4 -1
  155. package/dist/components/gx-ide-share-kb.js.map +1 -1
  156. package/dist/components/gx-ide-splash.js +4 -1
  157. package/dist/components/gx-ide-splash.js.map +1 -1
  158. package/dist/components/gx-ide-start-page.js +4 -1
  159. package/dist/components/gx-ide-start-page.js.map +1 -1
  160. package/dist/components/gx-ide-starting-template.js +4 -1
  161. package/dist/components/gx-ide-starting-template.js.map +1 -1
  162. package/dist/components/gx-ide-team-dev-bring-changes.js +4 -1
  163. package/dist/components/gx-ide-team-dev-bring-changes.js.map +1 -1
  164. package/dist/components/gx-ide-team-dev-history.js +4 -1
  165. package/dist/components/gx-ide-team-dev-history.js.map +1 -1
  166. package/dist/components/gx-ide-team-dev-update-partial-selection.js +4 -1
  167. package/dist/components/gx-ide-team-dev-update-partial-selection.js.map +1 -1
  168. package/dist/components/gx-ide-team-dev-update.js +4 -1
  169. package/dist/components/gx-ide-team-dev-update.js.map +1 -1
  170. package/dist/components/gx-ide-welcome-page.js +4 -1
  171. package/dist/components/gx-ide-welcome-page.js.map +1 -1
  172. package/dist/components/gx-ide-ww-attributes.js +4 -1
  173. package/dist/components/gx-ide-ww-attributes.js.map +1 -1
  174. package/dist/components/gx-ide-ww-files.js +4 -1
  175. package/dist/components/gx-ide-ww-files.js.map +1 -1
  176. package/dist/components/index.js +0 -1
  177. package/dist/components/index.js.map +1 -1
  178. package/dist/components/mer-animated-dots.js +81 -0
  179. package/dist/components/mer-animated-dots.js.map +1 -0
  180. package/dist/components/select-kb-items.js +4 -1
  181. package/dist/components/select-kb-items.js.map +1 -1
  182. package/dist/components/tabular-grid-render.js +4 -1
  183. package/dist/components/tabular-grid-render.js.map +1 -1
  184. package/dist/components/utilities.js +4 -1
  185. package/dist/components/utilities.js.map +1 -1
  186. package/dist/esm/assets-manager-7d6fc08f.js +5 -0
  187. package/dist/esm/assets-manager-7d6fc08f.js.map +1 -0
  188. package/dist/esm/genexus-ide-ui.js +1 -1
  189. package/dist/esm/gx-ide-bpm-app-declaration.entry.js +5 -1
  190. package/dist/esm/gx-ide-bpm-app-declaration.entry.js.map +1 -1
  191. package/dist/esm/gx-ide-bpm-task-documents.entry.js +5 -1
  192. package/dist/esm/gx-ide-bpm-task-documents.entry.js.map +1 -1
  193. package/dist/esm/gx-ide-chat-container_2.entry.js +7 -11
  194. package/dist/esm/gx-ide-chat-container_2.entry.js.map +1 -1
  195. package/dist/esm/gx-ide-create-kb-from-server.entry.js +5 -1
  196. package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
  197. package/dist/esm/gx-ide-current-user-info.entry.js +5 -1
  198. package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
  199. package/dist/esm/gx-ide-data-selector.entry.js +5 -1
  200. package/dist/esm/gx-ide-data-selector.entry.js.map +1 -1
  201. package/dist/esm/gx-ide-data-type-selector.entry.js +5 -1
  202. package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -1
  203. package/dist/esm/gx-ide-design-import.entry.js +5 -1
  204. package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
  205. package/dist/esm/gx-ide-details-acknowledgements.entry.js +5 -1
  206. package/dist/esm/gx-ide-details-acknowledgements.entry.js.map +1 -1
  207. package/dist/esm/gx-ide-entity-selector.entry.js +5 -1
  208. package/dist/esm/gx-ide-entity-selector.entry.js.map +1 -1
  209. package/dist/esm/gx-ide-file-item.entry.js +5 -1
  210. package/dist/esm/gx-ide-file-item.entry.js.map +1 -1
  211. package/dist/esm/gx-ide-file-uploader.entry.js +5 -1
  212. package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
  213. package/dist/esm/gx-ide-json-import.entry.js +5 -1
  214. package/dist/esm/gx-ide-json-import.entry.js.map +1 -1
  215. package/dist/esm/gx-ide-kb-manager-export.entry.js +5 -1
  216. package/dist/esm/gx-ide-kb-manager-export.entry.js.map +1 -1
  217. package/dist/esm/gx-ide-kb-manager-import.entry.js +5 -1
  218. package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
  219. package/dist/esm/gx-ide-manage-module-references.entry.js +5 -1
  220. package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -1
  221. package/dist/esm/gx-ide-new-kb.entry.js +5 -1
  222. package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
  223. package/dist/esm/gx-ide-new-version.entry.js +16 -4
  224. package/dist/esm/gx-ide-new-version.entry.js.map +1 -1
  225. package/dist/esm/gx-ide-object-selector.entry.js +5 -1
  226. package/dist/esm/gx-ide-object-selector.entry.js.map +1 -1
  227. package/dist/esm/gx-ide-open-api-import.entry.js +5 -1
  228. package/dist/esm/gx-ide-open-api-import.entry.js.map +1 -1
  229. package/dist/esm/gx-ide-plugin-details.entry.js +5 -1
  230. package/dist/esm/gx-ide-plugin-details.entry.js.map +1 -1
  231. package/dist/esm/gx-ide-plugin-explorer.entry.js +5 -1
  232. package/dist/esm/gx-ide-plugin-explorer.entry.js.map +1 -1
  233. package/dist/esm/gx-ide-references.entry.js +5 -1
  234. package/dist/esm/gx-ide-references.entry.js.map +1 -1
  235. package/dist/esm/gx-ide-sc-chat-container.entry.js +263 -20
  236. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
  237. package/dist/esm/gx-ide-select-kb-items.entry.js +5 -1
  238. package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
  239. package/dist/esm/gx-ide-server-selector.entry.js +5 -1
  240. package/dist/esm/gx-ide-server-selector.entry.js.map +1 -1
  241. package/dist/esm/gx-ide-share-kb.entry.js +5 -1
  242. package/dist/esm/gx-ide-share-kb.entry.js.map +1 -1
  243. package/dist/esm/gx-ide-splash.entry.js +5 -1
  244. package/dist/esm/gx-ide-splash.entry.js.map +1 -1
  245. package/dist/esm/gx-ide-start-page.entry.js +5 -1
  246. package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
  247. package/dist/esm/gx-ide-starting-template.entry.js +5 -1
  248. package/dist/esm/gx-ide-starting-template.entry.js.map +1 -1
  249. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js +7 -3
  250. package/dist/esm/gx-ide-team-dev-bring-changes.entry.js.map +1 -1
  251. package/dist/esm/gx-ide-team-dev-commit.entry.js +7 -3
  252. package/dist/esm/gx-ide-team-dev-commit.entry.js.map +1 -1
  253. package/dist/esm/gx-ide-team-dev-history.entry.js +6 -2
  254. package/dist/esm/gx-ide-team-dev-history.entry.js.map +1 -1
  255. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js +5 -1
  256. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js.map +1 -1
  257. package/dist/esm/gx-ide-team-dev-update.entry.js +7 -3
  258. package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
  259. package/dist/esm/gx-ide-welcome-page.entry.js +5 -1
  260. package/dist/esm/gx-ide-welcome-page.entry.js.map +1 -1
  261. package/dist/esm/gx-ide-ww-attributes.entry.js +5 -1
  262. package/dist/esm/gx-ide-ww-attributes.entry.js.map +1 -1
  263. package/dist/esm/gx-ide-ww-files.entry.js +5 -1
  264. package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
  265. package/dist/esm/index.js +0 -2
  266. package/dist/esm/index.js.map +1 -1
  267. package/dist/esm/loader.js +1 -1
  268. package/dist/esm/mer-animated-dots-75d88f7e.js +77 -0
  269. package/dist/esm/mer-animated-dots-75d88f7e.js.map +1 -0
  270. package/dist/esm/{tabular-grid-render-96d67a8c.js → tabular-grid-render-2fca02f4.js} +7 -3
  271. package/dist/esm/tabular-grid-render-2fca02f4.js.map +1 -0
  272. package/dist/esm/{utilities-6624d90e.js → utilities-0cdc28eb.js} +6 -2
  273. package/dist/esm/utilities-0cdc28eb.js.map +1 -0
  274. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  275. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  276. package/dist/genexus-ide-ui/gx-ide-assets/new-version/shortcuts.json +15 -0
  277. package/dist/genexus-ide-ui/index.esm.js +0 -2
  278. package/dist/genexus-ide-ui/index.esm.js.map +1 -1
  279. package/dist/genexus-ide-ui/{p-2ce60f4c.entry.js → p-02883452.entry.js} +28 -20
  280. package/dist/genexus-ide-ui/{p-2ce60f4c.entry.js.map → p-02883452.entry.js.map} +1 -1
  281. package/dist/genexus-ide-ui/{p-c5eac770.entry.js → p-0548097b.entry.js} +10 -2
  282. package/dist/genexus-ide-ui/{p-c5eac770.entry.js.map → p-0548097b.entry.js.map} +1 -1
  283. package/dist/genexus-ide-ui/{p-64dbc4c0.entry.js → p-082780cc.entry.js} +10 -2
  284. package/dist/genexus-ide-ui/{p-64dbc4c0.entry.js.map → p-082780cc.entry.js.map} +1 -1
  285. package/dist/genexus-ide-ui/{p-9ac4aaa0.entry.js → p-1baf026c.entry.js} +16 -8
  286. package/dist/genexus-ide-ui/{p-9ac4aaa0.entry.js.map → p-1baf026c.entry.js.map} +1 -1
  287. package/dist/genexus-ide-ui/{p-098a7288.entry.js → p-1d647672.entry.js} +19 -11
  288. package/dist/genexus-ide-ui/{p-098a7288.entry.js.map → p-1d647672.entry.js.map} +1 -1
  289. package/dist/genexus-ide-ui/{p-13630aa2.entry.js → p-1e1d2672.entry.js} +51 -43
  290. package/dist/genexus-ide-ui/{p-13630aa2.entry.js.map → p-1e1d2672.entry.js.map} +1 -1
  291. package/dist/genexus-ide-ui/{p-b6a75c44.entry.js → p-207a698a.entry.js} +57 -49
  292. package/dist/genexus-ide-ui/{p-b6a75c44.entry.js.map → p-207a698a.entry.js.map} +1 -1
  293. package/dist/genexus-ide-ui/{p-d18c51fe.entry.js → p-2726ab59.entry.js} +18 -10
  294. package/dist/genexus-ide-ui/{p-d18c51fe.entry.js.map → p-2726ab59.entry.js.map} +1 -1
  295. package/dist/genexus-ide-ui/{p-0c5b7e75.entry.js → p-27633aae.entry.js} +10 -2
  296. package/dist/genexus-ide-ui/{p-0c5b7e75.entry.js.map → p-27633aae.entry.js.map} +1 -1
  297. package/dist/genexus-ide-ui/{p-2fe7ffc8.entry.js → p-28c11aff.entry.js} +32 -24
  298. package/dist/genexus-ide-ui/{p-2fe7ffc8.entry.js.map → p-28c11aff.entry.js.map} +1 -1
  299. package/dist/genexus-ide-ui/{p-3b955964.entry.js → p-2a51ea80.entry.js} +10 -2
  300. package/dist/genexus-ide-ui/{p-3b955964.entry.js.map → p-2a51ea80.entry.js.map} +1 -1
  301. package/dist/genexus-ide-ui/{p-1056dfe7.entry.js → p-336bb2ce.entry.js} +28 -20
  302. package/dist/genexus-ide-ui/{p-1056dfe7.entry.js.map → p-336bb2ce.entry.js.map} +1 -1
  303. package/dist/genexus-ide-ui/{p-ac026635.entry.js → p-364e8ecb.entry.js} +16 -8
  304. package/dist/genexus-ide-ui/{p-ac026635.entry.js.map → p-364e8ecb.entry.js.map} +1 -1
  305. package/dist/genexus-ide-ui/p-3c14bdfc.entry.js +234 -0
  306. package/dist/genexus-ide-ui/p-3c14bdfc.entry.js.map +1 -0
  307. package/dist/genexus-ide-ui/{p-1d044bf5.entry.js → p-4548ae72.entry.js} +17 -9
  308. package/dist/genexus-ide-ui/{p-1d044bf5.entry.js.map → p-4548ae72.entry.js.map} +1 -1
  309. package/dist/genexus-ide-ui/{p-80e49324.entry.js → p-46bb921b.entry.js} +36 -28
  310. package/dist/genexus-ide-ui/{p-80e49324.entry.js.map → p-46bb921b.entry.js.map} +1 -1
  311. package/dist/genexus-ide-ui/{p-11a60dbe.entry.js → p-506760d7.entry.js} +10 -2
  312. package/dist/genexus-ide-ui/{p-11a60dbe.entry.js.map → p-506760d7.entry.js.map} +1 -1
  313. package/dist/genexus-ide-ui/p-6e29711e.entry.js +608 -0
  314. package/dist/genexus-ide-ui/p-6e29711e.entry.js.map +1 -0
  315. package/dist/genexus-ide-ui/{p-7b986243.entry.js → p-71d4d3dd.entry.js} +32 -24
  316. package/dist/genexus-ide-ui/{p-7b986243.entry.js.map → p-71d4d3dd.entry.js.map} +1 -1
  317. package/dist/genexus-ide-ui/{p-891faf90.entry.js → p-77c315d9.entry.js} +28 -20
  318. package/dist/genexus-ide-ui/{p-891faf90.entry.js.map → p-77c315d9.entry.js.map} +1 -1
  319. package/dist/genexus-ide-ui/{p-18bbaa49.entry.js → p-7c95f511.entry.js} +16 -8
  320. package/dist/genexus-ide-ui/{p-18bbaa49.entry.js.map → p-7c95f511.entry.js.map} +1 -1
  321. package/dist/genexus-ide-ui/{p-eedb407c.entry.js → p-7e3cccf7.entry.js} +10 -2
  322. package/dist/genexus-ide-ui/{p-eedb407c.entry.js.map → p-7e3cccf7.entry.js.map} +1 -1
  323. package/dist/genexus-ide-ui/{p-410a35da.entry.js → p-8925fc99.entry.js} +40 -32
  324. package/dist/genexus-ide-ui/{p-410a35da.entry.js.map → p-8925fc99.entry.js.map} +1 -1
  325. package/dist/genexus-ide-ui/{p-072419f9.entry.js → p-94f74c12.entry.js} +18 -10
  326. package/dist/genexus-ide-ui/{p-072419f9.entry.js.map → p-94f74c12.entry.js.map} +1 -1
  327. package/dist/genexus-ide-ui/{p-d24c1115.entry.js → p-97f6438c.entry.js} +67 -59
  328. package/dist/genexus-ide-ui/{p-d24c1115.entry.js.map → p-97f6438c.entry.js.map} +1 -1
  329. package/dist/genexus-ide-ui/{p-9270c80f.entry.js → p-981873da.entry.js} +114 -118
  330. package/dist/genexus-ide-ui/p-981873da.entry.js.map +1 -0
  331. package/dist/genexus-ide-ui/{p-17b54532.entry.js → p-99b1dfd7.entry.js} +39 -31
  332. package/dist/genexus-ide-ui/{p-17b54532.entry.js.map → p-99b1dfd7.entry.js.map} +1 -1
  333. package/dist/genexus-ide-ui/{p-e1d0adf6.entry.js → p-9f7c347c.entry.js} +24 -16
  334. package/dist/genexus-ide-ui/{p-e1d0adf6.entry.js.map → p-9f7c347c.entry.js.map} +1 -1
  335. package/dist/genexus-ide-ui/{p-eacc81c8.entry.js → p-a28c2a64.entry.js} +122 -114
  336. package/dist/genexus-ide-ui/{p-eacc81c8.entry.js.map → p-a28c2a64.entry.js.map} +1 -1
  337. package/dist/genexus-ide-ui/{p-cccd6565.entry.js → p-a73db549.entry.js} +10 -2
  338. package/dist/genexus-ide-ui/{p-cccd6565.entry.js.map → p-a73db549.entry.js.map} +1 -1
  339. package/dist/genexus-ide-ui/{p-547fbde8.entry.js → p-be1ceb01.entry.js} +28 -20
  340. package/dist/genexus-ide-ui/{p-547fbde8.entry.js.map → p-be1ceb01.entry.js.map} +1 -1
  341. package/dist/genexus-ide-ui/{p-7adb9d1f.entry.js → p-c133095b.entry.js} +78 -70
  342. package/dist/genexus-ide-ui/{p-7adb9d1f.entry.js.map → p-c133095b.entry.js.map} +1 -1
  343. package/dist/genexus-ide-ui/{p-a58048e9.entry.js → p-c1c3996c.entry.js} +12 -4
  344. package/dist/genexus-ide-ui/{p-a58048e9.entry.js.map → p-c1c3996c.entry.js.map} +1 -1
  345. package/dist/genexus-ide-ui/{p-7551c2e9.entry.js → p-c426a3e7.entry.js} +22 -14
  346. package/dist/genexus-ide-ui/{p-7551c2e9.entry.js.map → p-c426a3e7.entry.js.map} +1 -1
  347. package/dist/genexus-ide-ui/{p-4f88fecd.entry.js → p-d12739cf.entry.js} +17 -9
  348. package/dist/genexus-ide-ui/{p-4f88fecd.entry.js.map → p-d12739cf.entry.js.map} +1 -1
  349. package/dist/genexus-ide-ui/{p-c8270f7d.js → p-d3ee56a4.js} +45 -37
  350. package/dist/genexus-ide-ui/{p-c8270f7d.js.map → p-d3ee56a4.js.map} +1 -1
  351. package/dist/genexus-ide-ui/p-d42e842b.js +7 -0
  352. package/dist/genexus-ide-ui/p-d42e842b.js.map +1 -0
  353. package/dist/genexus-ide-ui/{p-401bfc97.js → p-d4ecd3bb.js} +9366 -7152
  354. package/dist/genexus-ide-ui/p-d4ecd3bb.js.map +1 -0
  355. package/dist/genexus-ide-ui/{p-48e87e4f.entry.js → p-de6e9132.entry.js} +71 -63
  356. package/dist/genexus-ide-ui/{p-48e87e4f.entry.js.map → p-de6e9132.entry.js.map} +1 -1
  357. package/dist/genexus-ide-ui/{p-05fa08d7.entry.js → p-e4e3a7af.entry.js} +19 -11
  358. package/dist/genexus-ide-ui/{p-05fa08d7.entry.js.map → p-e4e3a7af.entry.js.map} +1 -1
  359. package/dist/genexus-ide-ui/{p-a24571ca.js → p-ea4b35b6.js} +19 -11
  360. package/dist/genexus-ide-ui/{p-a24571ca.js.map → p-ea4b35b6.js.map} +1 -1
  361. package/dist/genexus-ide-ui/{p-bd0ffc08.entry.js → p-f47b08c5.entry.js} +44 -36
  362. package/dist/genexus-ide-ui/{p-bd0ffc08.entry.js.map → p-f47b08c5.entry.js.map} +1 -1
  363. package/dist/types/components/new-version/new-version.d.ts +4 -0
  364. package/dist/types/index.d.ts +0 -2
  365. package/package.json +9 -8
  366. package/dist/cjs/MERCURY_ASSETS-f14e91ff.js +0 -9
  367. package/dist/cjs/MERCURY_ASSETS-f14e91ff.js.map +0 -1
  368. package/dist/cjs/render-item.lit-3f18e009.js +0 -329
  369. package/dist/cjs/render-item.lit-3f18e009.js.map +0 -1
  370. package/dist/cjs/tabular-grid-render-b1767da2.js.map +0 -1
  371. package/dist/cjs/utilities-0e316b39.js.map +0 -1
  372. package/dist/collection/components/chat/chat-container/gx-ide-assets/chat-container/chat-lit.css +0 -376
  373. package/dist/collection/components/chat/lit-custom-render/actions.lit.js +0 -27
  374. package/dist/collection/components/chat/lit-custom-render/actions.lit.js.map +0 -1
  375. package/dist/collection/components/chat/lit-custom-render/code-block.lit.js +0 -46
  376. package/dist/collection/components/chat/lit-custom-render/code-block.lit.js.map +0 -1
  377. package/dist/collection/components/chat/lit-custom-render/dots-animation.js +0 -61
  378. package/dist/collection/components/chat/lit-custom-render/dots-animation.js.map +0 -1
  379. package/dist/collection/components/chat/lit-custom-render/render-item.lit.js +0 -122
  380. package/dist/collection/components/chat/lit-custom-render/render-item.lit.js.map +0 -1
  381. package/dist/collection/components/chat/lit-custom-render/spinner-animation.js +0 -58
  382. package/dist/collection/components/chat/lit-custom-render/spinner-animation.js.map +0 -1
  383. package/dist/collection/components/chat/lit-custom-render/types.js +0 -2
  384. package/dist/collection/components/chat/lit-custom-render/types.js.map +0 -1
  385. package/dist/collection/components/chat/lit-custom-render/utils.js +0 -50
  386. package/dist/collection/components/chat/lit-custom-render/utils.js.map +0 -1
  387. package/dist/components/MERCURY_ASSETS.js +0 -7
  388. package/dist/components/MERCURY_ASSETS.js.map +0 -1
  389. package/dist/components/render-item.lit.js +0 -327
  390. package/dist/components/render-item.lit.js.map +0 -1
  391. package/dist/esm/MERCURY_ASSETS-ccf43ae3.js +0 -7
  392. package/dist/esm/MERCURY_ASSETS-ccf43ae3.js.map +0 -1
  393. package/dist/esm/render-item.lit-449f2946.js +0 -327
  394. package/dist/esm/render-item.lit-449f2946.js.map +0 -1
  395. package/dist/esm/tabular-grid-render-96d67a8c.js.map +0 -1
  396. package/dist/esm/utilities-6624d90e.js.map +0 -1
  397. package/dist/genexus-ide-ui/gx-ide-assets/chat-container/chat-lit.css +0 -376
  398. package/dist/genexus-ide-ui/p-401bfc97.js.map +0 -1
  399. package/dist/genexus-ide-ui/p-5f65a4bb.entry.js +0 -218
  400. package/dist/genexus-ide-ui/p-5f65a4bb.entry.js.map +0 -1
  401. package/dist/genexus-ide-ui/p-8d6f2b4f.entry.js +0 -359
  402. package/dist/genexus-ide-ui/p-8d6f2b4f.entry.js.map +0 -1
  403. package/dist/genexus-ide-ui/p-9270c80f.entry.js.map +0 -1
  404. package/dist/genexus-ide-ui/p-fd4f9904.js +0 -955
  405. package/dist/genexus-ide-ui/p-fd4f9904.js.map +0 -1
  406. package/dist/types/components/chat/lit-custom-render/actions.lit.d.ts +0 -2
  407. package/dist/types/components/chat/lit-custom-render/code-block.lit.d.ts +0 -2
  408. package/dist/types/components/chat/lit-custom-render/dots-animation.d.ts +0 -5
  409. package/dist/types/components/chat/lit-custom-render/render-item.lit.d.ts +0 -3
  410. package/dist/types/components/chat/lit-custom-render/spinner-animation.d.ts +0 -5
  411. package/dist/types/components/chat/lit-custom-render/types.d.ts +0 -4
  412. package/dist/types/components/chat/lit-custom-render/utils.d.ts +0 -23
@@ -1 +1 @@
1
- {"version":3,"names":["pluginDetailsCss","USER_ICON","getIconPath","category","name","colorType","CHEVRON_DOWN_ICON","CHECK_CIRCLE_ICON","EXTENSION_ICON_IMG","getAssetPath","CSS_BUNDLES","GxIdePluginDetails","_GxIdePluginDetails_componentLocale","set","this","_GxIdePluginDetails_chMarkdownViewer","_GxIdePluginDetails_docSectionIdDescriptionMap","Map","_GxIdePluginDetails_versionsMenuOptionsModel","versionsToUpdateMenusModel","_a","data","versions","map","version","id","caption","_GxIdePluginDetails_menuVersionSelectedHandler","event","selectedVersion","detail","installCallback","_GxIdePluginDetails_renderUninstallButton","h","class","onClick","__classPrivateFieldGet","_GxIdePluginDetails_uninstallClickedHandler","actions","uninstall","_GxIdePluginDetails_installClickedHandler","_GxIdePluginDetails_updateVersionHandler","_GxIdePluginDetails_openLinkHandler","link","openLinkCallback","preventDefault","uninstallCallback","_GxIdePluginDetails_renderActionButtons","actionButtonCaption","actionButtonClasses","actionButtonCallback","moreVersionsToUpdate","length","installed","install","updateVersion","updateTo","call","blockAlign","inlineAlign","model","onButtonClick","src","_GxIdePluginDetails_tabSelectionChangedHandler","selectedTabId","newSelectedId","_GxIdePluginDetails_renderDocSectionsSlots","docsTabModel","docSectionTab","markdownValue","get","ref","el","__classPrivateFieldSet","slot","key","theme","value","_GxIdePluginDetails_returnFormatedId","rawId","toLowerCase","replace","_GxIdePluginDetails_renderLinkTag","href","label","cssClass","chImageSrc","target","_GxIdePluginDetails_renderAsideContent","infoCategories","infoCategory","fields__list","displayAsTags","fields","field","fieldValue","url","text","componentWillLoad","Locale","getComponentStrings","docSections","docSection","i","formatedId","content","componentDidLoad","addEventListener","path","composedPath","find","HTMLAnchorElement","render","renderActionButtons","titleLinkDataText","titleLinkDataUrl","titleHasLink","titleText","publisherDataText","publisher","publisherDataUrl","publisherHasLink","publisherText","Host","iconUrl","alt","description","tabListPosition","overflow","contain","onSelectedItemChange","selectedId"],"sources":["src/components/plugin-details/plugin-details.scss?tag=gx-ide-plugin-details&encapsulation=shadow","src/components/plugin-details/plugin-details.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n grid-template-areas:\n \"header header\"\n \"main aside\";\n grid-template-rows: max-content 1fr;\n grid-template-columns: 1fr 280px;\n row-gap: 12px;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n display: grid;\n grid-area: header;\n grid-template-areas: \"plugin-icon plugin-details\";\n grid-template-columns: 64px 1fr;\n column-gap: 16px;\n padding: 24px 24px 16px 24px;\n}\n.plugin__icon {\n grid-area: plugin-icon;\n inline-size: 100%;\n block-size: auto;\n display: block;\n}\n.plugin__details {\n grid-area: plugin-details;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.plugin__publisher {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.plugin__description {\n line-height: 1.5; // WA: Text appears too tight.\n}\n.plugin__actions-container {\n margin-block-start: 8px;\n align-items: center;\n}\n.action-button {\n min-inline-size: 100px;\n\n &.more-versions-available {\n border-start-end-radius: 0 !important;\n border-end-end-radius: 0 !important;\n }\n}\n.installed-container {\n display: flex;\n align-items: center;\n gap: 6px;\n\n // WA Biggest Mercury icon (icon-md) looks small in this case.\n // Mercury should expose more icon sizes.\n ch-image {\n --ch-image-size: 20px;\n }\n}\n\n// main\n.main {\n grid-area: main;\n}\n.docsTab {\n block-size: 100%;\n}\n\n// aside\n.aside {\n grid-area: aside;\n overflow: auto;\n border-block-start: 1px solid var(--items-container__border-color);\n}\n.fields__list {\n list-style: none;\n padding: 0;\n margin: 0;\n font-size: 12px;\n}\n.plugin__info-category {\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n &:not(:first-child) {\n $space: 16px;\n padding-block-start: $space;\n margin-block-start: $space;\n border-block-start: 1px solid var(--mer-border-color__on-elevation--01);\n }\n}\n.fields__list:not(.fields__list--as-tags) {\n display: flex;\n flex-direction: column;\n gap: 8px;\n .field__li {\n display: flex;\n gap: 16px;\n }\n}\n.fields__list--as-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n\n .field__li {\n border: 1px solid var(--mer-border-color__on-elevation--01);\n padding: 2px 8px;\n border-radius: 4px;\n\n text-transform: lowercase;\n }\n .field__link {\n color: var(--mer-text__on-surface);\n\n &:hover {\n color: var(--mer-accent__primary);\n }\n &:active {\n color: var(--mer-accent__primary--hover);\n }\n }\n}\n\n.field__name,\n.field__value {\n flex: 1;\n}\n// WA: Link styles should be defined Mercury\n.field__link {\n color: var(--mer-accent__primary);\n &:hover {\n color: var(--mer-accent__primary--hover);\n }\n &:active {\n color: var(--mer-accent__primary--active);\n }\n}\n// WA: Remove tab elevation background color\n.docsTab {\n background-color: transparent !important;\n}\n\n// WA: Styles for \"button-icon-only\" should be defined on mercury\n.dropdown.button-icon-only::part(expandable-button) {\n padding: calc(\n (\n var(--control__block-size) - 2 *\n var(--control__border-width) - var(--mer-icon__box--md)\n ) /\n 2\n ) !important;\n border-start-start-radius: 0 !important;\n border-end-start-radius: 0 !important;\n}\n\n.version-buttons-container {\n display: flex;\n align-items: center;\n gap: 1px;\n}\n\nch-markdown-viewer {\n block-size: 100%;\n overflow: auto;\n}\n\n// WA: Need text with underline. This should be defined on Mercury\n.text-underline {\n text-decoration: underline;\n}\n","import {\n Component,\n Host,\n State,\n Prop,\n Element,\n h,\n getAssetPath,\n JSX\n} from \"@stencil/core\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { ActionMenuModel, TabModel } from \"@genexus/chameleon-controls-library\";\nimport { TabItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/tab/types\";\n\nconst USER_ICON = getIconPath({\n category: \"system\",\n name: \"user\",\n colorType: \"on-elevation\"\n});\nconst CHEVRON_DOWN_ICON = getIconPath({\n category: \"system\",\n name: \"chevron-down\",\n colorType: \"on-primary\"\n});\nconst CHECK_CIRCLE_ICON = getIconPath({\n category: \"system\",\n name: \"check-circle\",\n colorType: \"success\"\n});\n\n// plugin icon if no iconUri was provided\nconst EXTENSION_ICON_IMG = getAssetPath(\n `./gx-ide-assets/plugin-manager/images/plugin-icon.svg`\n);\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"chameleon/scrollbar\",\n \"components/button\",\n \"components/dropdown\",\n \"components/edit\",\n \"components/icon\",\n \"components/list-box\",\n \"components/tab\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\"\n];\n\n@Component({\n tag: \"gx-ide-plugin-details\",\n styleUrl: \"plugin-details.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/plugin-details\"]\n})\nexport class GxIdePluginDetails {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n #chMarkdownViewer: HTMLChMarkdownViewerElement;\n\n // A map between docSection \"id\", and docSection \"description\".\n // \"id\" is generated inside this component.\n #docSectionIdDescriptionMap: Map<string, string> = new Map();\n\n @Element() el: HTMLGxIdePluginDetailsElement;\n\n @State() docsTabModel: TabModel = [];\n @State() selectedTabId: string;\n\n /**\n * Specifies all the information related to a plugin.\n */\n @Prop() readonly data!: PluginDetailsData;\n\n /**\n * Callback that should be invoked when the user performs the install or update action.\n * Receives an optional version string when a specific version is selected.\n */\n @Prop() readonly installCallback!: (version?: string) => Promise<void>;\n\n /**\n * Callback that should be invoked when the user attempts to open any link displayed in this component.\n */\n @Prop() readonly openLinkCallback!: (url: string) => Promise<void>;\n\n /**\n * Callback that should be invoked when the user performs the uninstall action.\n */\n @Prop() readonly uninstallCallback!: () => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n if (this.data.docSections?.length) {\n this.docsTabModel = this.data.docSections.map((docSection, i) => {\n const formatedId = this.#returnFormatedId(docSection.name);\n\n this.#docSectionIdDescriptionMap.set(formatedId, docSection.content);\n\n if (i === 0) {\n this.selectedTabId = formatedId;\n }\n return {\n id: formatedId,\n name: docSection.name\n } as TabItemModel;\n });\n }\n }\n\n componentDidLoad() {\n this.#chMarkdownViewer.addEventListener(\"click\", event => {\n // Listens for clicks on links inside <ch-markdown-viewer>.\n // If a link (<a>) is clicked and openLinkCallback is defined,\n // it prevents the default navigation and delegates the event\n // to this.#openLinkHandler, passing the link's href.\n const path = event.composedPath() as EventTarget[];\n\n const link = path.find(el => el instanceof HTMLAnchorElement) as\n | HTMLAnchorElement\n | undefined;\n\n if (link?.href) {\n this.#openLinkHandler(link.href)(event);\n }\n });\n }\n\n #versionsMenuOptionsModel = (): ActionMenuModel => {\n const versionsToUpdateMenusModel: ActionMenuModel = this.data.versions?.map(\n version => {\n return { id: version, caption: version };\n }\n );\n return versionsToUpdateMenusModel;\n };\n\n #menuVersionSelectedHandler = (\n event: CustomEvent<{\n id?: string;\n }>\n ) => {\n const selectedVersion = event.detail.id;\n this.installCallback(selectedVersion);\n };\n\n #renderUninstallButton = (): JSX.Element => {\n return (\n <button class=\"button-tertiary\" onClick={this.#uninstallClickedHandler}>\n {this.#componentLocale.actions.uninstall}\n </button>\n );\n };\n\n #installClickedHandler = () => {\n this.installCallback();\n };\n\n #updateVersionHandler = (id: string) => () => {\n this.installCallback(id);\n };\n\n #openLinkHandler = (link: string) => (event: MouseEvent) => {\n if (this.openLinkCallback) {\n event.preventDefault();\n this.openLinkCallback(link);\n }\n };\n\n #uninstallClickedHandler = () => {\n this.uninstallCallback();\n };\n\n #renderActionButtons = (): JSX.Element => {\n let actionButtonCaption;\n let actionButtonClasses = \"button-primary action-button\";\n let actionButtonCallback;\n const moreVersionsToUpdate = this.data.versions?.length;\n\n if (!this.data.installed) {\n actionButtonCaption = this.#componentLocale.actions.install;\n actionButtonCallback = this.#installClickedHandler;\n } else if (this.data.updateVersion) {\n actionButtonCaption = `${this.#componentLocale.actions.updateTo} ${\n this.data.updateVersion\n }`;\n actionButtonCallback = this.#updateVersionHandler(\n this.data.updateVersion\n );\n } else {\n actionButtonCaption = this.#componentLocale.actions.installed;\n }\n\n if (moreVersionsToUpdate) {\n actionButtonClasses = `${actionButtonClasses} more-versions-available`;\n }\n\n return [\n <div class=\"version-buttons-container\">\n <button class={actionButtonClasses} onClick={actionButtonCallback}>\n {actionButtonCaption}\n </button>\n {moreVersionsToUpdate ? (\n <ch-action-menu-render\n class=\"dropdown button-primary button-icon-only\"\n blockAlign=\"outside-end\"\n inlineAlign=\"inside-start\"\n model={this.#versionsMenuOptionsModel()}\n onButtonClick={this.#menuVersionSelectedHandler}\n >\n <ch-image src={CHEVRON_DOWN_ICON} class=\"icon-md\"></ch-image>\n </ch-action-menu-render>\n ) : null}\n </div>\n ];\n };\n\n #tabSelectionChangedHandler = (\n event: CustomEvent<{\n lastSelectedIndex: number;\n newSelectedId: string;\n newSelectedIndex: number;\n }>\n ): void => {\n this.selectedTabId = event.detail.newSelectedId;\n };\n\n #renderDocSectionsSlots = (): JSX.Element => {\n return this.docsTabModel.map(docSectionTab => {\n if (docSectionTab.id === this.selectedTabId) {\n const markdownValue = this.#docSectionIdDescriptionMap.get(\n docSectionTab.id\n );\n\n return (\n <ch-markdown-viewer\n ref={(el: HTMLChMarkdownViewerElement) =>\n (this.#chMarkdownViewer = el as HTMLChMarkdownViewerElement)\n }\n slot={docSectionTab.id}\n key={docSectionTab.id}\n class=\"markdown spacing-body scrollable\"\n theme=\"components/markdown-viewer\"\n value={markdownValue}\n ></ch-markdown-viewer>\n );\n }\n });\n };\n\n #returnFormatedId = (rawId: string): string => {\n return rawId.toLowerCase().replace(/\\s+/g, \"-\");\n };\n\n #renderLinkTag = (\n href: string,\n label: string,\n cssClass?: string,\n chImageSrc?: string\n ): HTMLAnchorElement => {\n return (\n <a\n href={href}\n target=\"_blank\"\n onClick={this.#openLinkHandler(href)}\n class={cssClass}\n >\n {chImageSrc && <ch-image src={chImageSrc} class=\"icon-md\"></ch-image>}\n {label}\n </a>\n );\n };\n\n #renderAsideContent = (): JSX.Element => {\n return this.data.infoCategories.map(infoCategory => {\n return (\n <div class=\"plugin__info-category\">\n <h3 class=\"subtitle-semi-bold-s\">{infoCategory.name}</h3>\n <ul\n class={{\n \"fields__list\": true,\n \"fields__list--as-tags\": infoCategory.displayAsTags\n }}\n >\n {infoCategory.fields.map(field => {\n // If the field name isn’t specified, only the value is shown — usually a link.\n const fieldValue: string | HTMLAnchorElement =\n typeof field.value === \"string\"\n ? (field.value as string)\n : this.#renderLinkTag(\n (field.value as LinkData).url,\n (field.value as LinkData).text,\n \"field__link\"\n );\n return (\n <li class=\"field__li\">\n {field.name && !infoCategory.displayAsTags\n ? // displaysAsTags forces the items to be displayed as tags\n // no span.field__name and span.field__value\n [\n <span class=\"field__name body-semi-bold-s\">\n {field.name}\n </span>,\n <span class=\"field__value body-regular-s\">\n {fieldValue}\n </span>\n ]\n : fieldValue}\n </li>\n );\n })}\n </ul>\n </div>\n );\n });\n };\n\n render() {\n const renderActionButtons =\n !this.data.installed ||\n (this.data.installed && !!this.data.updateVersion);\n\n const titleLinkDataText = (this.data.name as LinkData).text;\n const titleLinkDataUrl = (this.data.name as LinkData).url;\n const titleHasLink = titleLinkDataText && titleLinkDataUrl;\n const titleText = titleLinkDataText || this.data.name;\n\n const publisherDataText = (this.data.publisher as LinkData).text;\n const publisherDataUrl = (this.data.publisher as LinkData).url;\n const publisherHasLink = publisherDataText && publisherDataUrl;\n const publisherText = publisherDataText || this.data.publisher;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header class=\"header\">\n <img\n class=\"plugin__icon\"\n src={this.data.iconUrl || EXTENSION_ICON_IMG}\n alt=\"plugin extension icon\"\n />\n <div class=\"plugin__details\">\n {titleHasLink ? (\n <h2 class=\"heading-5 has-link\">\n {this.#renderLinkTag(\n titleLinkDataUrl,\n titleText as string,\n \"text-underline\"\n )}\n </h2>\n ) : (\n <h2 class=\"heading-5\">{titleText}</h2>\n )}\n {publisherHasLink ? (\n this.#renderLinkTag(\n publisherDataUrl,\n titleText as string,\n \"text-underline plugin__publisher tiny-semi-bold-l\",\n USER_ICON\n )\n ) : (\n <p class=\"plugin__publisher tiny-semi-bold-l\">\n <ch-image src={USER_ICON} class=\"icon-md\"></ch-image>\n {publisherText}\n </p>\n )}\n\n <p class=\"plugin__description\">{this.data.description}</p>\n <div class=\"buttons-spacer plugin__actions-container\">\n {renderActionButtons ? (\n this.#renderActionButtons()\n ) : (\n // installed and no updates\n <p class=\"installed-container subtitle-semi-bold-s\">\n <ch-image\n src={CHECK_CIRCLE_ICON}\n class=\"icon-md\"\n ></ch-image>\n {this.#componentLocale.actions.installed}\n </p>\n )}\n {this.data.installed && this.#renderUninstallButton()}\n </div>\n </div>\n </header>\n <div class=\"main\">\n {this.docsTabModel.length > 0 && (\n <ch-tab-render\n class=\"tab docsTab scrollable\"\n tabListPosition=\"block-start\"\n overflow=\"auto\"\n contain=\"size\"\n model={this.docsTabModel}\n onSelectedItemChange={this.#tabSelectionChangedHandler}\n selectedId={this.selectedTabId}\n >\n {this.#renderDocSectionsSlots()}\n </ch-tab-render>\n )}\n </div>\n <div class=\"aside spacing-body scrollable\">\n {this.#renderAsideContent()}\n </div>\n </section>\n {/* <slot></slot> */}\n </Host>\n );\n }\n}\n\n// plugin-details.types.ts\n\nexport type LinkData = {\n text: string;\n url: string;\n};\n\nexport type PluginFieldData = {\n name?: string;\n value: string | LinkData;\n};\n\nexport type PluginInfoCategoryData = {\n name: string;\n fields: PluginFieldData[];\n displayAsTags: boolean;\n};\n\nexport type DocSectionData = {\n name: string;\n content: string;\n};\n\nexport type PluginDetailsData = {\n id: string;\n name: string | LinkData;\n publisher: string | LinkData;\n installed: boolean;\n updateVersion?: string;\n versions: string[];\n iconUrl: string;\n description: string;\n docSections: DocSectionData[];\n infoCategories: PluginInfoCategoryData[];\n};\n"],"mappings":";;;;;;AAAA,MAAMA,IAAmB;;;;;;;;;;;;;;;;;ACgBzB,MAAMC,IAAYC,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAEb,MAAMC,IAAoBJ,EAAY;EACpCC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAEb,MAAME,IAAoBL,EAAY;EACpCC,UAAU;EACVC,MAAM;EACNC,WAAW;;;yCAIb;MAAMG,IAAqBC,EACzB;;AAGF,MAAMC,IAA8B,EAClC,qBACA,uBACA,qBACA,uBACA,mBACA,mBACA,uBACA,kBACA,cACA,gBACA,iBACA;;MASWC,IAAkB;;;;;;;QAK7BC,EAAAC,IAAAC,WAAA;IAEAC,EAAAF,IAAAC,WAAA;;;QAIAE,EAAAH,IAAAC,MAAmD,IAAIG;IAkEvDC,EAAAL,IAAAC,OAA4B;;MAC1B,MAAMK,KAA8CC,IAAAN,KAAKO,KAAKC,cAAQ,QAAAF,WAAA,aAAAA,EAAEG,KACtEC,MACS;QAAEC,IAAID;QAASE,SAASF;;MAGnC,OAAOL;AAA0B;IAGnCQ,EAAAd,IAAAC,OACEc;MAIA,MAAMC,IAAkBD,EAAME,OAAOL;MACrCX,KAAKiB,gBAAgBF;AAAgB;IAGvCG,EAAAnB,IAAAC,OAAyB,MAErBmB,EAAA;MAAQC,OAAM;MAAkBC,SAASC,EAAAtB,MAAIuB,GAAA;OAC1CD,EAAAtB,MAAIF,GAAA,KAAkB0B,QAAQC;IAKrCC,EAAA3B,IAAAC,OAAyB;MACvBA,KAAKiB;AAAiB;IAGxBU,EAAA5B,IAAAC,OAAyBW,KAAe;MACtCX,KAAKiB,gBAAgBN;AAAG;IAG1BiB,EAAA7B,IAAAC,OAAoB6B,KAAkBf;MACpC,IAAId,KAAK8B,kBAAkB;QACzBhB,EAAMiB;QACN/B,KAAK8B,iBAAiBD;;;IAI1BN,EAAAxB,IAAAC,OAA2B;MACzBA,KAAKgC;AAAmB;IAG1BC,EAAAlC,IAAAC,OAAuB;;MACrB,IAAIkC;MACJ,IAAIC,IAAsB;MAC1B,IAAIC;MACJ,MAAMC,KAAuB/B,IAAAN,KAAKO,KAAKC,cAAQ,QAAAF,WAAA,aAAAA,EAAEgC;MAEjD,KAAKtC,KAAKO,KAAKgC,WAAW;QACxBL,IAAsBZ,EAAAtB,MAAIF,GAAA,KAAkB0B,QAAQgB;QACpDJ,IAAuBd,EAAAtB,MAAI0B,GAAA;aACtB,IAAI1B,KAAKO,KAAKkC,eAAe;QAClCP,IAAsB,GAAGZ,EAAAtB,MAAIF,GAAA,KAAkB0B,QAAQkB,YACrD1C,KAAKO,KAAKkC;QAEZL,IAAuBd,EAAAtB,MAAI2B,GAAA,KAAsBgB,KAA1B3C,MACrBA,KAAKO,KAAKkC;aAEP;QACLP,IAAsBZ,EAAAtB,MAAIF,GAAA,KAAkB0B,QAAQe;;MAGtD,IAAIF,GAAsB;QACxBF,IAAsB,GAAGA;;MAG3B,OAAO,EACLhB,EAAA;QAAKC,OAAM;SACTD,EAAA;QAAQC,OAAOe;QAAqBd,SAASe;SAC1CF,IAEFG,IACClB,EAAA;QACEC,OAAM;QACNwB,YAAW;QACXC,aAAY;QACZC,OAAOxB,EAAAtB,MAAII,GAAA,KAA0BuC,KAA9B3C;QACP+C,eAAezB,EAAAtB,MAAIa,GAAA;SAEnBM,EAAA;QAAU6B,KAAKxD;QAAmB4B,OAAM;YAExC;AAEP;IAGH6B,EAAAlD,IAAAC,OACEc;MAMAd,KAAKkD,gBAAgBpC,EAAME,OAAOmC;AAAa;IAGjDC,EAAArD,IAAAC,OAA0B,MACjBA,KAAKqD,aAAa5C,KAAI6C;MAC3B,IAAIA,EAAc3C,OAAOX,KAAKkD,eAAe;QAC3C,MAAMK,IAAgBjC,EAAAtB,MAAIE,GAAA,KAA6BsD,IACrDF,EAAc3C;QAGhB,OACEQ,EAAA;UACEsC,KAAMC,KACHC,EAAA3D,MAAIC,GAAqByD,GAAiC;UAE7DE,MAAMN,EAAc3C;UACpBkD,KAAKP,EAAc3C;UACnBS,OAAM;UACN0C,OAAM;UACNC,OAAOR;;;;IAOjBS,EAAAjE,IAAAC,OAAqBiE,KACZA,EAAMC,cAAcC,QAAQ,QAAQ;IAG7CC,EAAArE,IAAAC,OAAiB,CACfqE,GACAC,GACAC,GACAC,MAGErD,EAAA;MACEkD,MAAMA;MACNI,QAAO;MACPpD,SAASC,EAAAtB,MAAI4B,GAAA,KAAiBe,KAArB3C,MAAsBqE;MAC/BjD,OAAOmD;OAENC,KAAcrD,EAAA;MAAU6B,KAAKwB;MAAYpD,OAAM;QAC/CkD;IAKPI,EAAA3E,IAAAC,OAAsB,MACbA,KAAKO,KAAKoE,eAAelE,KAAImE,KAEhCzD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAIC,OAAM;OAAwBwD,EAAatF,OAC/C6B,EAAA;MACEC,OAAO;QACLyD,cAAgB;QAChB,yBAAyBD,EAAaE;;OAGvCF,EAAaG,OAAOtE,KAAIuE;;MAEvB,MAAMC,WACGD,EAAMjB,UAAU,WAClBiB,EAAMjB,QACPzC,EAAAtB,MAAIoE,GAAA,KAAezB,KAAnB3C,MACGgF,EAAMjB,MAAmBmB,KACzBF,EAAMjB,MAAmBoB,MAC1B;MAER,OACEhE,EAAA;QAAIC,OAAM;SACP4D,EAAM1F,SAASsF,EAAaE;;MAGzB,EACE3D,EAAA;QAAMC,OAAM;SACT4D,EAAM1F,OAET6B,EAAA;QAAMC,OAAM;SACT6D,OAGLA;AACD;wBAlPe;;;;;;;EAwBlC,uBAAMG;;IACJzB,EAAA3D,MAAIF,SAA0BuF,EAAOC,oBAAoBtF,KAAK0D,KAAG;IAEjE,KAAIpD,IAAAN,KAAKO,KAAKgF,iBAAW,QAAAjF,WAAA,aAAAA,EAAEgC,QAAQ;MACjCtC,KAAKqD,eAAerD,KAAKO,KAAKgF,YAAY9E,KAAI,CAAC+E,GAAYC;QACzD,MAAMC,IAAapE,EAAAtB,MAAIgE,GAAA,KAAkBrB,KAAtB3C,MAAuBwF,EAAWlG;QAErDgC,EAAAtB,MAAIE,GAAA,KAA6BH,IAAI2F,GAAYF,EAAWG;QAE5D,IAAIF,MAAM,GAAG;UACXzF,KAAKkD,gBAAgBwC;;QAEvB,OAAO;UACL/E,IAAI+E;UACJpG,MAAMkG,EAAWlG;;AACF;;;EAKvB,gBAAAsG;IACEtE,EAAAtB,MAAIC,GAAA,KAAmB4F,iBAAiB,UAAS/E;;;;;MAK/C,MAAMgF,IAAOhF,EAAMiF;MAEnB,MAAMlE,IAAOiE,EAAKE,MAAKtC,KAAMA,aAAcuC;MAI3C,IAAIpE,MAAI,QAAJA,WAAI,aAAJA,EAAMwC,MAAM;QACd/C,EAAAtB,MAAI4B,GAAA,KAAiBe,KAArB3C,MAAsB6B,EAAKwC,KAA3B/C,CAAiCR;;;;EAkMvC,MAAAoF;IACE,MAAMC,KACHnG,KAAKO,KAAKgC,aACVvC,KAAKO,KAAKgC,eAAevC,KAAKO,KAAKkC;IAEtC,MAAM2D,IAAqBpG,KAAKO,KAAKjB,KAAkB6F;IACvD,MAAMkB,IAAoBrG,KAAKO,KAAKjB,KAAkB4F;IACtD,MAAMoB,IAAeF,KAAqBC;IAC1C,MAAME,IAAYH,KAAqBpG,KAAKO,KAAKjB;IAEjD,MAAMkH,IAAqBxG,KAAKO,KAAKkG,UAAuBtB;IAC5D,MAAMuB,IAAoB1G,KAAKO,KAAKkG,UAAuBvB;IAC3D,MAAMyB,IAAmBH,KAAqBE;IAC9C,MAAME,IAAgBJ,KAAqBxG,KAAKO,KAAKkG;IAErD,OACEtF,EAAC0F,GAAI;MAACzF,OAAM;OACVD,EAAA;MAAU2B,OAAOlD;QACjBuB,EAAA;MAASC,OAAM;OACbD,EAAA;MAAQC,OAAM;OACZD,EAAA;MACEC,OAAM;MACN4B,KAAKhD,KAAKO,KAAKuG,WAAWpH;MAC1BqH,KAAI;QAEN5F,EAAA;MAAKC,OAAM;OACRkF,IACCnF,EAAA;MAAIC,OAAM;OACPE,EAAAtB,MAAIoE,GAAA,KAAezB,KAAnB3C,MACCqG,GACAE,GACA,qBAIJpF,EAAA;MAAIC,OAAM;OAAamF,IAExBI,IACCrF,EAAAtB,MAAIoE,GAAA,KAAezB,KAAnB3C,MACE0G,GACAH,GACA,qDACApH,KAGFgC,EAAA;MAAGC,OAAM;OACPD,EAAA;MAAU6B,KAAK7D;MAAWiC,OAAM;QAC/BwF,IAILzF,EAAA;MAAGC,OAAM;OAAuBpB,KAAKO,KAAKyG,cAC1C7F,EAAA;MAAKC,OAAM;OACR+E,IACC7E,EAAAtB,MAAIiC,GAAA,KAAqBU,KAAzB3C;;IAGAmB,EAAA;MAAGC,OAAM;OACPD,EAAA;MACE6B,KAAKvD;MACL2B,OAAM;QAEPE,EAAAtB,MAAIF,GAAA,KAAkB0B,QAAQe,YAGlCvC,KAAKO,KAAKgC,aAAajB,EAAAtB,MAAIkB,GAAA,KAAuByB,KAA3B3C,UAI9BmB,EAAA;MAAKC,OAAM;OACRpB,KAAKqD,aAAaf,SAAS,KAC1BnB,EAAA;MACEC,OAAM;MACN6F,iBAAgB;MAChBC,UAAS;MACTC,SAAQ;MACRrE,OAAO9C,KAAKqD;MACZ+D,sBAAsB9F,EAAAtB,MAAIiD,GAAA;MAC1BoE,YAAYrH,KAAKkD;OAEhB5B,EAAAtB,MAAIoD,GAAA,KAAwBT,KAA5B3C,SAIPmB,EAAA;MAAKC,OAAM;OACRE,EAAAtB,MAAI0E,GAAA,KAAoB/B,KAAxB3C"}
1
+ {"version":3,"names":["pluginDetailsCss","USER_ICON","getIconPath","category","name","colorType","CHEVRON_DOWN_ICON","CHECK_CIRCLE_ICON","EXTENSION_ICON_IMG","getAssetPath","CSS_BUNDLES","GxIdePluginDetails","_GxIdePluginDetails_componentLocale","set","this","_GxIdePluginDetails_chMarkdownViewer","_GxIdePluginDetails_docSectionIdDescriptionMap","Map","_GxIdePluginDetails_versionsMenuOptionsModel","versionsToUpdateMenusModel","_a","data","versions","map","version","id","caption","_GxIdePluginDetails_menuVersionSelectedHandler","event","selectedVersion","detail","installCallback","_GxIdePluginDetails_renderUninstallButton","h","class","onClick","__classPrivateFieldGet","_GxIdePluginDetails_uninstallClickedHandler","actions","uninstall","_GxIdePluginDetails_installClickedHandler","_GxIdePluginDetails_updateVersionHandler","_GxIdePluginDetails_openLinkHandler","link","openLinkCallback","preventDefault","uninstallCallback","_GxIdePluginDetails_renderActionButtons","actionButtonCaption","actionButtonClasses","actionButtonCallback","moreVersionsToUpdate","length","installed","install","updateVersion","updateTo","call","blockAlign","inlineAlign","model","onButtonClick","src","_GxIdePluginDetails_tabSelectionChangedHandler","selectedTabId","newSelectedId","_GxIdePluginDetails_renderDocSectionsSlots","docsTabModel","docSectionTab","markdownValue","get","ref","el","__classPrivateFieldSet","slot","key","theme","value","_GxIdePluginDetails_returnFormatedId","rawId","toLowerCase","replace","_GxIdePluginDetails_renderLinkTag","href","label","cssClass","chImageSrc","target","_GxIdePluginDetails_renderAsideContent","infoCategories","infoCategory","fields__list","displayAsTags","fields","field","fieldValue","url","text","componentWillLoad","Locale","getComponentStrings","docSections","docSection","i","formatedId","content","componentDidLoad","addEventListener","path","composedPath","find","HTMLAnchorElement","render","renderActionButtons","titleLinkDataText","titleLinkDataUrl","titleHasLink","titleText","publisherDataText","publisher","publisherDataUrl","publisherHasLink","publisherText","Host","iconUrl","alt","description","tabListPosition","overflow","contain","onSelectedItemChange","selectedId"],"sources":["src/components/plugin-details/plugin-details.scss?tag=gx-ide-plugin-details&encapsulation=shadow","src/components/plugin-details/plugin-details.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n grid-template-areas:\n \"header header\"\n \"main aside\";\n grid-template-rows: max-content 1fr;\n grid-template-columns: 1fr 280px;\n row-gap: 12px;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n display: grid;\n grid-area: header;\n grid-template-areas: \"plugin-icon plugin-details\";\n grid-template-columns: 64px 1fr;\n column-gap: 16px;\n padding: 24px 24px 16px 24px;\n}\n.plugin__icon {\n grid-area: plugin-icon;\n inline-size: 100%;\n block-size: auto;\n display: block;\n}\n.plugin__details {\n grid-area: plugin-details;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.plugin__publisher {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.plugin__description {\n line-height: 1.5; // WA: Text appears too tight.\n}\n.plugin__actions-container {\n margin-block-start: 8px;\n align-items: center;\n}\n.action-button {\n min-inline-size: 100px;\n\n &.more-versions-available {\n border-start-end-radius: 0 !important;\n border-end-end-radius: 0 !important;\n }\n}\n.installed-container {\n display: flex;\n align-items: center;\n gap: 6px;\n\n // WA Biggest Mercury icon (icon-md) looks small in this case.\n // Mercury should expose more icon sizes.\n ch-image {\n --ch-image-size: 20px;\n }\n}\n\n// main\n.main {\n grid-area: main;\n}\n.docsTab {\n block-size: 100%;\n}\n\n// aside\n.aside {\n grid-area: aside;\n overflow: auto;\n border-block-start: 1px solid var(--items-container__border-color);\n}\n.fields__list {\n list-style: none;\n padding: 0;\n margin: 0;\n font-size: 12px;\n}\n.plugin__info-category {\n display: flex;\n flex-direction: column;\n gap: 8px;\n\n &:not(:first-child) {\n $space: 16px;\n padding-block-start: $space;\n margin-block-start: $space;\n border-block-start: 1px solid var(--mer-border-color__on-elevation--01);\n }\n}\n.fields__list:not(.fields__list--as-tags) {\n display: flex;\n flex-direction: column;\n gap: 8px;\n .field__li {\n display: flex;\n gap: 16px;\n }\n}\n.fields__list--as-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n\n .field__li {\n border: 1px solid var(--mer-border-color__on-elevation--01);\n padding: 2px 8px;\n border-radius: 4px;\n\n text-transform: lowercase;\n }\n .field__link {\n color: var(--mer-text__on-surface);\n\n &:hover {\n color: var(--mer-accent__primary);\n }\n &:active {\n color: var(--mer-accent__primary--hover);\n }\n }\n}\n\n.field__name,\n.field__value {\n flex: 1;\n}\n// WA: Link styles should be defined Mercury\n.field__link {\n color: var(--mer-accent__primary);\n &:hover {\n color: var(--mer-accent__primary--hover);\n }\n &:active {\n color: var(--mer-accent__primary--active);\n }\n}\n// WA: Remove tab elevation background color\n.docsTab {\n background-color: transparent !important;\n}\n\n// WA: Styles for \"button-icon-only\" should be defined on mercury\n.dropdown.button-icon-only::part(expandable-button) {\n padding: calc(\n (\n var(--control__block-size) - 2 *\n var(--control__border-width) - var(--mer-icon__box--md)\n ) /\n 2\n ) !important;\n border-start-start-radius: 0 !important;\n border-end-start-radius: 0 !important;\n}\n\n.version-buttons-container {\n display: flex;\n align-items: center;\n gap: 1px;\n}\n\nch-markdown-viewer {\n block-size: 100%;\n overflow: auto;\n}\n\n// WA: Need text with underline. This should be defined on Mercury\n.text-underline {\n text-decoration: underline;\n}\n","import {\n Component,\n Host,\n State,\n Prop,\n Element,\n h,\n getAssetPath,\n JSX\n} from \"@stencil/core\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\nimport { ActionMenuModel, TabModel } from \"@genexus/chameleon-controls-library\";\nimport { TabItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/tab/types\";\n\nconst USER_ICON = getIconPath({\n category: \"system\",\n name: \"user\",\n colorType: \"on-elevation\"\n});\nconst CHEVRON_DOWN_ICON = getIconPath({\n category: \"system\",\n name: \"chevron-down\",\n colorType: \"on-primary\"\n});\nconst CHECK_CIRCLE_ICON = getIconPath({\n category: \"system\",\n name: \"check-circle\",\n colorType: \"success\"\n});\n\n// plugin icon if no iconUri was provided\nconst EXTENSION_ICON_IMG = getAssetPath(\n `./gx-ide-assets/plugin-manager/images/plugin-icon.svg`\n);\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"chameleon/scrollbar\",\n \"components/button\",\n \"components/dropdown\",\n \"components/edit\",\n \"components/icon\",\n \"components/list-box\",\n \"components/tab\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/spacing\",\n \"utils/typography\"\n];\n\n@Component({\n tag: \"gx-ide-plugin-details\",\n styleUrl: \"plugin-details.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/plugin-details\"]\n})\nexport class GxIdePluginDetails {\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n #chMarkdownViewer: HTMLChMarkdownViewerElement;\n\n // A map between docSection \"id\", and docSection \"description\".\n // \"id\" is generated inside this component.\n #docSectionIdDescriptionMap: Map<string, string> = new Map();\n\n @Element() el: HTMLGxIdePluginDetailsElement;\n\n @State() docsTabModel: TabModel = [];\n @State() selectedTabId: string;\n\n /**\n * Specifies all the information related to a plugin.\n */\n @Prop() readonly data!: PluginDetailsData;\n\n /**\n * Callback that should be invoked when the user performs the install or update action.\n * Receives an optional version string when a specific version is selected.\n */\n @Prop() readonly installCallback!: (version?: string) => Promise<void>;\n\n /**\n * Callback that should be invoked when the user attempts to open any link displayed in this component.\n */\n @Prop() readonly openLinkCallback!: (url: string) => Promise<void>;\n\n /**\n * Callback that should be invoked when the user performs the uninstall action.\n */\n @Prop() readonly uninstallCallback!: () => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n if (this.data.docSections?.length) {\n this.docsTabModel = this.data.docSections.map((docSection, i) => {\n const formatedId = this.#returnFormatedId(docSection.name);\n\n this.#docSectionIdDescriptionMap.set(formatedId, docSection.content);\n\n if (i === 0) {\n this.selectedTabId = formatedId;\n }\n return {\n id: formatedId,\n name: docSection.name\n } as TabItemModel;\n });\n }\n }\n\n componentDidLoad() {\n this.#chMarkdownViewer.addEventListener(\"click\", event => {\n // Listens for clicks on links inside <ch-markdown-viewer>.\n // If a link (<a>) is clicked and openLinkCallback is defined,\n // it prevents the default navigation and delegates the event\n // to this.#openLinkHandler, passing the link's href.\n const path = event.composedPath() as EventTarget[];\n\n const link = path.find(el => el instanceof HTMLAnchorElement) as\n | HTMLAnchorElement\n | undefined;\n\n if (link?.href) {\n this.#openLinkHandler(link.href)(event);\n }\n });\n }\n\n #versionsMenuOptionsModel = (): ActionMenuModel => {\n const versionsToUpdateMenusModel: ActionMenuModel = this.data.versions?.map(\n version => {\n return { id: version, caption: version };\n }\n );\n return versionsToUpdateMenusModel;\n };\n\n #menuVersionSelectedHandler = (\n event: CustomEvent<{\n id?: string;\n }>\n ) => {\n const selectedVersion = event.detail.id;\n this.installCallback(selectedVersion);\n };\n\n #renderUninstallButton = (): JSX.Element => {\n return (\n <button class=\"button-tertiary\" onClick={this.#uninstallClickedHandler}>\n {this.#componentLocale.actions.uninstall}\n </button>\n );\n };\n\n #installClickedHandler = () => {\n this.installCallback();\n };\n\n #updateVersionHandler = (id: string) => () => {\n this.installCallback(id);\n };\n\n #openLinkHandler = (link: string) => (event: MouseEvent) => {\n if (this.openLinkCallback) {\n event.preventDefault();\n this.openLinkCallback(link);\n }\n };\n\n #uninstallClickedHandler = () => {\n this.uninstallCallback();\n };\n\n #renderActionButtons = (): JSX.Element => {\n let actionButtonCaption;\n let actionButtonClasses = \"button-primary action-button\";\n let actionButtonCallback;\n const moreVersionsToUpdate = this.data.versions?.length;\n\n if (!this.data.installed) {\n actionButtonCaption = this.#componentLocale.actions.install;\n actionButtonCallback = this.#installClickedHandler;\n } else if (this.data.updateVersion) {\n actionButtonCaption = `${this.#componentLocale.actions.updateTo} ${\n this.data.updateVersion\n }`;\n actionButtonCallback = this.#updateVersionHandler(\n this.data.updateVersion\n );\n } else {\n actionButtonCaption = this.#componentLocale.actions.installed;\n }\n\n if (moreVersionsToUpdate) {\n actionButtonClasses = `${actionButtonClasses} more-versions-available`;\n }\n\n return [\n <div class=\"version-buttons-container\">\n <button class={actionButtonClasses} onClick={actionButtonCallback}>\n {actionButtonCaption}\n </button>\n {moreVersionsToUpdate ? (\n <ch-action-menu-render\n class=\"dropdown button-primary button-icon-only\"\n blockAlign=\"outside-end\"\n inlineAlign=\"inside-start\"\n model={this.#versionsMenuOptionsModel()}\n onButtonClick={this.#menuVersionSelectedHandler}\n >\n <ch-image src={CHEVRON_DOWN_ICON} class=\"icon-md\"></ch-image>\n </ch-action-menu-render>\n ) : null}\n </div>\n ];\n };\n\n #tabSelectionChangedHandler = (\n event: CustomEvent<{\n lastSelectedIndex: number;\n newSelectedId: string;\n newSelectedIndex: number;\n }>\n ): void => {\n this.selectedTabId = event.detail.newSelectedId;\n };\n\n #renderDocSectionsSlots = (): JSX.Element => {\n return this.docsTabModel.map(docSectionTab => {\n if (docSectionTab.id === this.selectedTabId) {\n const markdownValue = this.#docSectionIdDescriptionMap.get(\n docSectionTab.id\n );\n\n return (\n <ch-markdown-viewer\n ref={(el: HTMLChMarkdownViewerElement) =>\n (this.#chMarkdownViewer = el as HTMLChMarkdownViewerElement)\n }\n slot={docSectionTab.id}\n key={docSectionTab.id}\n class=\"markdown spacing-body scrollable\"\n theme=\"components/markdown-viewer\"\n value={markdownValue}\n ></ch-markdown-viewer>\n );\n }\n });\n };\n\n #returnFormatedId = (rawId: string): string => {\n return rawId.toLowerCase().replace(/\\s+/g, \"-\");\n };\n\n #renderLinkTag = (\n href: string,\n label: string,\n cssClass?: string,\n chImageSrc?: string\n ): HTMLAnchorElement => {\n return (\n <a\n href={href}\n target=\"_blank\"\n onClick={this.#openLinkHandler(href)}\n class={cssClass}\n >\n {chImageSrc && <ch-image src={chImageSrc} class=\"icon-md\"></ch-image>}\n {label}\n </a>\n );\n };\n\n #renderAsideContent = (): JSX.Element => {\n return this.data.infoCategories.map(infoCategory => {\n return (\n <div class=\"plugin__info-category\">\n <h3 class=\"subtitle-semi-bold-s\">{infoCategory.name}</h3>\n <ul\n class={{\n \"fields__list\": true,\n \"fields__list--as-tags\": infoCategory.displayAsTags\n }}\n >\n {infoCategory.fields.map(field => {\n // If the field name isn’t specified, only the value is shown — usually a link.\n const fieldValue: string | HTMLAnchorElement =\n typeof field.value === \"string\"\n ? (field.value as string)\n : this.#renderLinkTag(\n (field.value as LinkData).url,\n (field.value as LinkData).text,\n \"field__link\"\n );\n return (\n <li class=\"field__li\">\n {field.name && !infoCategory.displayAsTags\n ? // displaysAsTags forces the items to be displayed as tags\n // no span.field__name and span.field__value\n [\n <span class=\"field__name body-semi-bold-s\">\n {field.name}\n </span>,\n <span class=\"field__value body-regular-s\">\n {fieldValue}\n </span>\n ]\n : fieldValue}\n </li>\n );\n })}\n </ul>\n </div>\n );\n });\n };\n\n render() {\n const renderActionButtons =\n !this.data.installed ||\n (this.data.installed && !!this.data.updateVersion);\n\n const titleLinkDataText = (this.data.name as LinkData).text;\n const titleLinkDataUrl = (this.data.name as LinkData).url;\n const titleHasLink = titleLinkDataText && titleLinkDataUrl;\n const titleText = titleLinkDataText || this.data.name;\n\n const publisherDataText = (this.data.publisher as LinkData).text;\n const publisherDataUrl = (this.data.publisher as LinkData).url;\n const publisherHasLink = publisherDataText && publisherDataUrl;\n const publisherText = publisherDataText || this.data.publisher;\n\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n <header class=\"header\">\n <img\n class=\"plugin__icon\"\n src={this.data.iconUrl || EXTENSION_ICON_IMG}\n alt=\"plugin extension icon\"\n />\n <div class=\"plugin__details\">\n {titleHasLink ? (\n <h2 class=\"heading-5 has-link\">\n {this.#renderLinkTag(\n titleLinkDataUrl,\n titleText as string,\n \"text-underline\"\n )}\n </h2>\n ) : (\n <h2 class=\"heading-5\">{titleText}</h2>\n )}\n {publisherHasLink ? (\n this.#renderLinkTag(\n publisherDataUrl,\n titleText as string,\n \"text-underline plugin__publisher tiny-semi-bold-l\",\n USER_ICON\n )\n ) : (\n <p class=\"plugin__publisher tiny-semi-bold-l\">\n <ch-image src={USER_ICON} class=\"icon-md\"></ch-image>\n {publisherText}\n </p>\n )}\n\n <p class=\"plugin__description\">{this.data.description}</p>\n <div class=\"buttons-spacer plugin__actions-container\">\n {renderActionButtons ? (\n this.#renderActionButtons()\n ) : (\n // installed and no updates\n <p class=\"installed-container subtitle-semi-bold-s\">\n <ch-image\n src={CHECK_CIRCLE_ICON}\n class=\"icon-md\"\n ></ch-image>\n {this.#componentLocale.actions.installed}\n </p>\n )}\n {this.data.installed && this.#renderUninstallButton()}\n </div>\n </div>\n </header>\n <div class=\"main\">\n {this.docsTabModel.length > 0 && (\n <ch-tab-render\n class=\"tab docsTab scrollable\"\n tabListPosition=\"block-start\"\n overflow=\"auto\"\n contain=\"size\"\n model={this.docsTabModel}\n onSelectedItemChange={this.#tabSelectionChangedHandler}\n selectedId={this.selectedTabId}\n >\n {this.#renderDocSectionsSlots()}\n </ch-tab-render>\n )}\n </div>\n <div class=\"aside spacing-body scrollable\">\n {this.#renderAsideContent()}\n </div>\n </section>\n {/* <slot></slot> */}\n </Host>\n );\n }\n}\n\n// plugin-details.types.ts\n\nexport type LinkData = {\n text: string;\n url: string;\n};\n\nexport type PluginFieldData = {\n name?: string;\n value: string | LinkData;\n};\n\nexport type PluginInfoCategoryData = {\n name: string;\n fields: PluginFieldData[];\n displayAsTags: boolean;\n};\n\nexport type DocSectionData = {\n name: string;\n content: string;\n};\n\nexport type PluginDetailsData = {\n id: string;\n name: string | LinkData;\n publisher: string | LinkData;\n installed: boolean;\n updateVersion?: string;\n versions: string[];\n iconUrl: string;\n description: string;\n docSections: DocSectionData[];\n infoCategories: PluginInfoCategoryData[];\n};\n"],"mappings":"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"}
@@ -1,6 +1,14 @@
1
1
  import { r as e, c as t, h as r, H as i, a } from "./p-97107ecc.js";
2
2
 
3
- import { g as o } from "./p-401bfc97.js";
3
+ import { g as o } from "./p-d42e842b.js";
4
+
5
+ import "./p-d4ecd3bb.js";
6
+
7
+ import "lit";
8
+
9
+ import "lit/directives/when.js";
10
+
11
+ import "lit/directives/if-defined.js";
4
12
 
5
13
  import { r as s } from "./p-8c2e9df4.js";
6
14
 
@@ -487,4 +495,4 @@ c = new WeakMap, g = new WeakMap;
487
495
  f.style = n;
488
496
 
489
497
  export { f as gx_ide_manage_module_references };
490
- //# sourceMappingURL=p-eedb407c.entry.js.map
498
+ //# sourceMappingURL=p-7e3cccf7.entry.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["manageModuleReferencesCss","CSS_BUNDLES","GxManageModuleReferences","this","renderedFirstTime","_GxManageModuleReferences_filterIcon","set","getIconPath","category","name","colorType","_GxManageModuleReferences_moduleIcon","updateModulesSelectedVersion","modulesAll","selectedServerId","selectedServerIdOnModulesAllUpdate","modulesSelectedVersion","clear","forEach","module","id","versions","length","newModule","get","undefined","getActionFromCurrentModuleVersion","action","getModuleData","selectedModule","onProgress","message","progress","state","data","selectedModuleAction","Object","assign","progressValue","progressState","handleModuleChange","event","selectedModuleId","detail","rowsId","foundModule","find","item","serverSelectedCallbackHandler","async","reload","serverSelectedCallback","loadingServer","resolvedObjects","filterModulesByType","filteredModules","handleFilterChange","value","trim","toLowerCase","filter","selectedVersionName","includes","handleFilterChangeHandler","e","executeActionCallbackHandler","executeActionCallback","moduleSelectedVersionId","actionCompleted","type","currentVersion","version","showModuleMenu","serverContextMenuCallback","buttonBoundingClientRect","target","getBoundingClientRect","selection","clientX","x","clientY","y","dataType","selectedVersionId","selectedVersion","selectedVersionData","moduleActionHandler","closeProgressBar","renderModulesGrid","h","rowSelectionMode","part","class","onSelectionChanged","settingable","size","map","rowid","key","selected","moduleVersionIconColor","color","disabled","fit","onClick","renderEmptyStateModules","stateIconSrc","__classPrivateFieldGet","stateTitle","_componentLocale","modules","noModulesFilter","moduleAction","moduleCurrentVersion","renderVersionName","renderVersionWarningMessage","warningMessage","renderInstalledVersion","caption","cssClass","modulesInformation","moduleProperties","installed","notInstalled","moduleVersionsValueChangedHandler","versionId","updateSelectedModuleVersion","moduleVersionsItemChangedHandler","reRenderCounter","renderModuleVersions","label","availableVersions","labelPosition","centerLabel","onValueChanged","onItemSelected","selectedButtonChangedHandler","replace","serverItemSelectedHandler","serverId","serverValueChangedHandler","progressBarCloseHandler","setTimeout","reloadServer","Map","modulesAllWatcher","loadingServerHandler","loading","loaderEl","show","componentDidRender","componentDidRenderFirstTime","emit","componentName","componentWillLoad","Locale","getComponentStrings","el","componentDidLoad","servers","onPropValueChange","newModulesData","validate","render","Host","model","noContentPadding","noAboveFooterPadding","noBorderAboveFooter","containerTitle","displayTitle","selectServer","disableFilter","showServerCommands","icon","searchModules","reduced","fullWidth","onSelectedButtonChanged","buttonsContainer","browse","updates","ref","serversDetail","renderModuleDataProperties","emptyState","title","stateDescription","description","slot","stateType","noBorder","progressBar","defaultCaption","active","closeType","closedCallback","loaderTitle","container","borderRadius"],"sources":["src/components/modules/manage-module-references/manage-module-references.scss?tag=gx-ide-manage-module-references&encapsulation=shadow","src/components/modules/manage-module-references/manage-module-references.tsx"],"sourcesContent":["@import \"../../../global/gx-ide-common.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n\n/*--- General ---*/\np,\nul {\n font-size: var(--font-size-lg);\n margin: 0;\n}\np {\n line-height: 1.6em;\n}\n/*--- Header ---*/\n.header {\n align-items: center;\n grid-template-columns: 1fr auto;\n grid-template-rows: 1fr;\n}\n.main {\n display: grid;\n //grid-template-columns: 1fr 2fr 1fr;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: 1fr;\n height: 100%;\n overflow: auto;\n}\nch-grid-columnset {\n display: none;\n}\nch-grid-row[selected] {\n gxg-icon[data-action=\"install\"] {\n //WA to improve visibility\n filter: brightness(2);\n }\n}\n.grid-cell-module {\n &__info {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--mer-spacing--3xs);\n }\n &__name {\n font-weight: var(--mer-font__weight--bold);\n }\n &__name,\n &__description {\n line-height: 1.55em;\n }\n}\n\n/*--- Servers Container ---*/\n.grid-container {\n height: 100%;\n overflow: auto;\n gx-ide-empty-state {\n height: 100%;\n }\n}\n.servers-container {\n display: none;\n height: 100%;\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--gxg-list-box-main__padding) var(--gxg-list-box-main__padding)\n 0 var(--gxg-list-box-main__padding);\n\n gxg-button {\n width: 100%;\n }\n }\n}\n\n/*--- Modules (Header) ---*/\n.modules {\n &__header {\n padding: var(--gxg-list-box-main__padding);\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n }\n &__combo-container {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n }\n &__server-commands {\n display: flex;\n gap: var(--mer-spacing--xs);\n }\n &__combo {\n gxg-combo-box {\n flex: 1;\n }\n display: flex;\n flex-direction: row;\n gap: var(--mer-spacing--xs);\n }\n &__container {\n border-inline-end: var(--mer-border__width--sm) solid\n var(--gx-ide-container-border-color);\n display: grid;\n grid-template-rows: auto 1fr;\n height: 100%;\n overflow: auto;\n }\n &__main {\n display: grid;\n grid-template-rows: auto 1fr;\n height: 100%;\n overflow: auto;\n\n &-header {\n display: flex;\n padding: var(--mer-spacing--xs);\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n }\n }\n}\n\n/*--- Module Info ---*/\n.module-info {\n display: grid;\n grid-template-rows: auto 1fr;\n height: 100%;\n overflow: auto;\n\n &__title {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n }\n\n &__name {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n --ds-icon-size-box--regular: 24px;\n --ds-icon-size--regular: 24px;\n font-weight: var(--mer-font__weight--bold);\n }\n\n &__header {\n padding: var(--gx-ide-container__padding);\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n border-block-end: var(--mer-border__width--sm) solid\n var(--gx-ide-container-border-color);\n }\n\n &__action-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--mer-spacing--xs);\n &:before {\n content: \"\";\n width: var(--mer-spacing--xs);\n height: var(--mer-spacing--xs);\n border-radius: 50%;\n display: block;\n background-color: var(--mer-icon__primary--disabled);\n }\n &--installed:before {\n background-color: var(--mer-icon__primary);\n }\n &--uninstallable:before {\n background-color: var(--mer-icon__warning);\n }\n }\n\n &__warning-message {\n margin-block-start: var(--mer-spacing--2xs);\n background-color: var(--mer-color__tinted-yellow--5);\n color: var(--mer-text__on-elevation);\n border: var(--mer-border__width--sm) solid var(--mer-border-color__warning);\n border-radius: var(--mer-border__radius--sm);\n padding: var(--mer-spacing--xs) var(--mer-spacing--md);\n }\n\n &__divider {\n width: calc(100% - var(--gx-ide-container__padding) * 4);\n padding: 0 var(--gx-ide-container__padding);\n margin: 0 auto;\n border: 0;\n border-block-end: var(--mer-border__width--sm) solid\n var(--gx-ide-container-border-color);\n }\n &__properties {\n display: flex;\n flex-direction: column;\n padding: var(--gx-ide-container__padding);\n gap: var(--mer-spacing--xs);\n overflow: auto;\n }\n}\n\n.md-property {\n display: grid;\n gap: var(--mer-spacing--xs);\n\n &--inline {\n grid-template-columns: auto 1fr;\n }\n &--block {\n }\n &__key {\n font-weight: var(--font-weight-bold);\n max-width: 150px;\n }\n &__value {\n font-size: var(--mer-font__size--2xs);\n }\n &__key,\n &__value {\n > * {\n display: inline-block;\n }\n }\n &__list {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n > ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--2xs);\n margin-inline-start: var(--mer-spacing--xs);\n\n li {\n position: relative;\n padding-inline-start: 12px;\n line-height: var(--ds-base-font-line-height--comfortable);\n &::before {\n content: \"\";\n position: absolute;\n left: 0;\n top: 7px;\n display: inline-block;\n width: var(--mer-spacing--2xs);\n height: var(--mer-spacing--2xs);\n background-color: var(--mer-text__on-surface);\n }\n }\n }\n }\n}\n\n.md-property,\n.md-property__list {\n border-block-end: var(--mer-border__width--sm) solid\n var(--gx-ide-container-border-color);\n padding-block-end: var(--mer-spacing--xs);\n\n &:last-child {\n border-block-end: 0;\n padding-block-end: 0;\n }\n}\n\ngxg-ide-loader {\n border-radius: var(--mer-border__radius--md);\n}\n\n.button-wrapper {\n display: grid;\n align-items: center;\n justify-content: center;\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Event,\n Element,\n EventEmitter,\n Method,\n State,\n Watch\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { Color } from \"@genexus/gemini\";\nimport { topStateBarType } from \"@genexus/gemini\";\nimport { TabularGridSelectionChangedEvent } from \"@genexus/chameleon-controls-library\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n/* CUSTOM IMPORTS */\nimport {\n ModuleServerData,\n ModuleData,\n ModuleActionType,\n ModuleFilterType,\n ModulePropertyData,\n ModuleVersionData\n} from \"../types\";\nimport { renderModuleDataProperties } from \"../../../common/common\";\nimport { Locale } from \"../../../common/locale\";\nimport { ContextMenuInfo } from \"../../../common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n // \"utils/form\",\n // \"utils/layout\",\n // \"utils/typography\",\n // \"components/button\",\n // \"components/checkbox\",\n // \"components/edit\",\n \"components/tabular-grid\"\n];\n\n@Component({\n tag: \"gx-ide-manage-module-references\",\n styleUrl: \"manage-module-references.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/manage-module-references\"]\n})\nexport class GxManageModuleReferences {\n // 1.OWN PROPERTIES | WATCH'S //\n\n /**\n * The component hard-coded strings translations.\n */\n private _componentLocale: any;\n private renderedFirstTime = false;\n /* selectedServerIdOnModulesAllUpdate is updated every time modulesAll is modified, in order to determine if the server is the same or not.*/\n private selectedServerIdOnModulesAllUpdate: string;\n\n #filterIcon = getIconPath({\n category: \"system\",\n name: \"filters\",\n colorType: \"on-elevation\"\n });\n #moduleIcon = getIconPath({\n category: \"objects\",\n name: \"module\"\n });\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeManageModuleReferencesElement;\n private loaderEl!: HTMLGxgIdeLoaderElement;\n private serversDetail!: HTMLDivElement;\n\n // 3.STATE() VARIABLES //\n\n @State() modulesAll: ModuleData[] = [];\n @Watch(\"modulesAll\")\n modulesAllWatcher(modulesAll: ModuleData[]) {\n this.updateModulesSelectedVersion(modulesAll);\n }\n @State() filteredModules: ModuleData[] = [];\n @State() selectedModule: ModuleData;\n @State() selectedServerId: string;\n @State() selectedModuleAction: ActionInfo = {\n message: \"\",\n progress: 0,\n state: \"in-progress\"\n };\n @State() modulesSelectedVersion: Map<string, string> = new Map();\n @State() actionCompleted = true;\n @State() closeProgressBar = true;\n @State() progressValue: number = 0;\n @State() progressState: topStateBarType = \"in-progress\";\n @State() loadingServer = false;\n @State() reRenderCounter: number = 0;\n @Watch(\"loadingServer\")\n loadingServerHandler(loading: boolean) {\n if (loading) {\n this.loaderEl.show = true;\n } else {\n this.loaderEl.show = false;\n }\n }\n\n // 4.PUBLIC PROPERTY API //\n\n /**\n * If true it displays the component title on the header\n */\n @Prop() readonly displayTitle = false;\n\n /**\n * List of module servers currently cataloged\n */\n @Prop() readonly servers: ModuleServerData[] = [];\n\n /**\n * Callback invoked when a server is selected. Returns the set of modules available on that server.\n */\n @Prop() readonly serverSelectedCallback: ServerSelectedCallback;\n\n /**\n * Callback invoked when the user wants to execute the action corresponding to a selected module. When the action begins to be executed, the component must be able to show the progress of the action. For this, the onProgress parameter is available, which is in turn a callback used by the host to notify the progress by text message and percentage.\n */\n @Prop() readonly executeActionCallback: ExecuteActionCallback;\n\n /**\n * Callback invoked when Add button is clicked\n */\n @Prop() readonly addServerCallback: AddServerCallback;\n\n /**\n * Callback invoked when an element is right clicked on servers list\n */\n @Prop() readonly serverContextMenuCallback: ServerContextMenuCallback;\n\n /**\n * Allows you to hide the button (...) that executes serverContextMenuCallback, if we do not implement the commands in a first version\n */\n @Prop() readonly showServerCommands: boolean = false;\n\n // 5.EVENTS (EMIT) //\n\n /**\n * This event is emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n // 6.COMPONENT LIFECYCLE EVENTS //\n\n componentDidRender() {\n if (!this.renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this._componentLocale.componentName\n );\n this.renderedFirstTime = true;\n }\n }\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n async componentDidLoad() {\n await this.serverSelectedCallbackHandler(this.servers[0].id, false);\n }\n\n // 7.LISTENERS //\n\n @Watch(\"modulesAll\")\n onPropValueChange(newModulesData: ModuleData[]) {\n this.filteredModules = [...newModulesData];\n }\n\n // 8.PUBLIC METHODS API //\n\n /**\n * validate\n */\n @Method()\n async validate(): Promise<boolean> {\n return true;\n }\n\n // 9.LOCAL METHODS //\n\n private updateModulesSelectedVersion = (modulesAll: ModuleData[]) => {\n if (this.selectedServerId !== this.selectedServerIdOnModulesAllUpdate) {\n // the server has changed. clear the updateModulesSelectedVersion\n this.modulesSelectedVersion.clear();\n modulesAll.forEach(module => {\n // this.modulesSelectedVersion.set(module.id, module.versions[0].id);\n this.modulesSelectedVersion.set(\n module.id,\n module.versions[module.versions.length - 1].id\n );\n });\n } else {\n // the server has't changed. only add the module to the map, if it is a new module.\n modulesAll.forEach(module => {\n const newModule =\n this.modulesSelectedVersion.get(module.id) === undefined;\n if (newModule) {\n this.modulesSelectedVersion.set(module.id, module.versions[0].id);\n }\n });\n }\n this.selectedServerIdOnModulesAllUpdate = this.selectedServerId;\n };\n\n private getActionFromCurrentModuleVersion = (): ModuleActionType => {\n const action = this.getModuleData(\n this.selectedModule,\n \"action\"\n ) as ModuleActionType;\n return action || \"install\";\n };\n\n /**\n * Callback invoked to get the progress when module is performing an action\n */\n private onProgress = (\n message: string,\n progress: number,\n state: topStateBarType\n ): void => {\n const data = { message, progress, state };\n this.selectedModuleAction = { ...data };\n this.progressValue = this.selectedModuleAction.progress;\n this.progressState = this.selectedModuleAction.state;\n };\n\n // 10.LOCAL METHODS //\n\n /**\n * Used for changing the selected module\n */\n private handleModuleChange = (\n event: CustomEvent<TabularGridSelectionChangedEvent>\n ) => {\n const selectedModuleId = event.detail.rowsId[0];\n const foundModule = this.modulesAll.find(\n item => item.id === selectedModuleId\n );\n if (foundModule) {\n this.selectedModule = foundModule;\n }\n };\n\n /**\n * Change the server selected value in response to callbackServerSelected callback\n */\n private serverSelectedCallbackHandler = async (id: any, reload: boolean) => {\n if (this.serverSelectedCallback) {\n this.loadingServer = true;\n const resolvedObjects = await this.serverSelectedCallback(id, reload);\n this.selectedServerId = id;\n this.modulesAll = [...resolvedObjects];\n this.filterModulesByType(\"browse\");\n this.selectedModule = this.filteredModules[0];\n this.loadingServer = false;\n }\n };\n\n private handleFilterChange = (value: string) => {\n value = value.trim().toLowerCase();\n if (value) {\n this.filteredModules = this.modulesAll.filter(module => {\n const selectedVersionName = this.getModuleData(\n module,\n \"name\"\n ) as string;\n return selectedVersionName?.toLowerCase().includes(value);\n });\n } else {\n this.filteredModules = this.modulesAll;\n }\n };\n\n private handleFilterChangeHandler = (e: CustomEvent<string>) => {\n const value = e.detail;\n return this.handleFilterChange(value);\n };\n\n /**\n * Perform an action relative to a module using callbackExecuteAction callback and receive the state of that action with onProgress callback\n */\n private executeActionCallbackHandler = async (module: ModuleData) => {\n if (this.executeActionCallback) {\n const moduleSelectedVersionId = this.modulesSelectedVersion.get(\n module.id\n );\n const actionCompleted = await this.executeActionCallback(\n this.selectedServerId,\n module.id,\n moduleSelectedVersionId,\n this.getActionFromCurrentModuleVersion(),\n this.onProgress\n );\n if (actionCompleted) {\n this.serverSelectedCallbackHandler(this.selectedServerId, false);\n }\n this.actionCompleted = actionCompleted;\n }\n };\n\n private filterModulesByType = (type: ModuleFilterType) => {\n // browse\n if (type === \"browse\") {\n this.filteredModules = this.modulesAll;\n }\n // installed\n else if (type === \"installed\") {\n this.filteredModules = this.modulesAll.filter((module: ModuleData) => {\n // if the module has a currentVersion (not undefined) it means it is installed\n return module.currentVersion;\n });\n } else if (type === \"updates\") {\n this.filteredModules = this.modulesAll.filter((module: ModuleData) => {\n return module.versions.find(version => version.action === \"update\");\n });\n }\n };\n\n private showModuleMenu = async (e: MouseEvent) => {\n if (this.serverContextMenuCallback) {\n const buttonBoundingClientRect = (\n e.target as HTMLElement\n ).getBoundingClientRect();\n await this.serverContextMenuCallback({\n selection: [this.selectedServerId],\n clientX: buttonBoundingClientRect.x,\n clientY: buttonBoundingClientRect.y\n });\n }\n };\n\n private getModuleData = (\n module: ModuleData,\n dataType: keyof ModuleVersionData\n ): string | ModulePropertyData[] | undefined => {\n const selectedVersionId = this.modulesSelectedVersion.get(module.id);\n let selectedVersion;\n let selectedVersionData;\n if (selectedVersionId) {\n selectedVersion = module.versions.find(\n version => version.id === selectedVersionId\n );\n }\n if (selectedVersion) {\n selectedVersionData = selectedVersion[dataType];\n }\n return selectedVersionData;\n };\n\n private moduleActionHandler = (module: ModuleData) => () => {\n this.actionCompleted = false;\n this.closeProgressBar = false;\n this.executeActionCallbackHandler(module);\n };\n\n private renderModulesGrid = (): Element => {\n return (\n <ch-tabular-grid\n rowSelectionMode=\"single\"\n part=\"ch-grid-pending-commits\"\n class=\"tabular-grid servers-detail no-border\"\n onSelectionChanged={this.handleModuleChange}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"min-content\"\n ></ch-tabular-grid-column>\n\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n settingable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"min-content\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {this.filteredModules.map((module: ModuleData) => (\n <ch-tabular-grid-row\n class=\"tabular-grid-row\"\n rowid={module.id}\n key={module.id}\n selected={\n this.selectedModule && this.selectedModule.id === module.id\n }\n >\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <gxg-icon\n type=\"objects/module\"\n data-action={this.moduleVersionIconColor(module)}\n color={this.moduleVersionIconColor(module)}\n size=\"small\"\n ></gxg-icon>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell grid-cell-module__info\">\n <span class=\"grid-cell-module__name\">\n {this.getModuleData(module, \"name\")}\n </span>\n <span class=\"grid-cell-module__description\">\n {this.getModuleData(module, \"description\")}\n </span>\n </ch-tabular-grid-cell>\n\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.selectedModule && this.selectedModule.id === module.id ? (\n <div class=\"button-wrapper\">\n <gxg-button\n disabled={\n !this.actionCompleted ||\n this.getModuleData(module, \"action\") === \"incompatible\" ||\n this.getModuleData(module, \"action\") === \"not-installable\"\n }\n fit\n part=\"module-action\"\n onClick={this.moduleActionHandler(module)}\n >\n {this.getActionFromCurrentModuleVersion()}\n </gxg-button>\n </div>\n ) : null}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid>\n );\n };\n\n private renderEmptyStateModules = () => {\n return (\n <gx-ide-empty-state\n stateIconSrc={this.#filterIcon}\n stateTitle={this._componentLocale.modules.noModulesFilter}\n ></gx-ide-empty-state>\n );\n };\n\n private moduleVersionIconColor = (module: ModuleData): Color => {\n const moduleAction = this.getModuleData(module, \"action\");\n const moduleCurrentVersion = module.currentVersion;\n if (moduleAction === \"not-installable\" || moduleAction === \"incompatible\") {\n return \"warning\";\n } else if (!moduleCurrentVersion) {\n return \"mercury-primary-disabled\";\n } else {\n return \"mercury-primary\";\n }\n };\n\n /* module details/information renders*/\n private renderVersionName = () => {\n return (\n <gxg-title part=\"module-info__name\" type=\"title-05\">\n <div class=\"module-info__name\">\n {/* <gxg-icon\n type=\"objects/module\"\n color={this.moduleVersionIconColor(this.selectedModule)}\n ></gxg-icon> */}\n {this.getModuleData(this.selectedModule, \"name\")}\n </div>\n </gxg-title>\n );\n };\n\n private renderVersionWarningMessage = () => {\n const warningMessage = this.getModuleData(\n this.selectedModule,\n \"warningMessage\"\n );\n if (warningMessage) {\n return <p class=\"module-info__alert-message\">{warningMessage}</p>;\n }\n };\n\n private renderInstalledVersion = () => {\n const currentVersion = this.selectedModule.currentVersion;\n let caption;\n let cssClass = \"module-info__action-container\";\n if (currentVersion) {\n caption = `${this._componentLocale.modulesInformation.moduleProperties.installed}: ${currentVersion}`;\n cssClass += ` module-info__action-container--installed`;\n } else {\n caption =\n this._componentLocale.modulesInformation.moduleProperties.notInstalled;\n }\n return (\n <div class={cssClass}>\n <gxg-text part=\"module-info__action\">{caption}</gxg-text>\n </div>\n );\n };\n\n private moduleVersionsValueChangedHandler = (e: CustomEvent<any>) => {\n const versionId = e.detail;\n this.updateSelectedModuleVersion(versionId);\n };\n private moduleVersionsItemChangedHandler = (e: CustomEvent<any>) => {\n const versionId = e.detail.value;\n this.updateSelectedModuleVersion(versionId);\n };\n private updateSelectedModuleVersion = (versionId: string) => {\n if (versionId) {\n this.modulesSelectedVersion.set(this.selectedModule.id, versionId);\n this.reRenderCounter++;\n }\n };\n\n private renderModuleVersions = () => {\n return (\n <div part=\"available-versions\">\n <gxg-combo-box\n id=\"versions-combo-box\"\n disable-filter\n value={this.getModuleData(this.selectedModule, \"id\")}\n part=\"module-versions\"\n display-validation-styles\n display-validation-message\n label={\n this._componentLocale.modulesInformation.moduleProperties\n .availableVersions\n }\n labelPosition=\"start\"\n centerLabel\n onValueChanged={this.moduleVersionsValueChangedHandler}\n disabled={this.loadingServer}\n >\n {this.selectedModule.versions.map(item => (\n <gxg-combo-box-item\n value={item.id}\n onItemSelected={this.moduleVersionsItemChangedHandler}\n >\n {item.id}\n </gxg-combo-box-item>\n ))}\n </gxg-combo-box>\n </div>\n );\n };\n\n private selectedButtonChangedHandler = (e: CustomEvent<string>) => {\n const type = e.detail.replace(\"btn-\", \"\") as ModuleFilterType;\n this.filterModulesByType(type);\n };\n\n private serverItemSelectedHandler = (\n e: CustomEvent<{\n el: HTMLGxgComboBoxItemElement;\n index: number;\n value: any;\n icon?: string;\n }>\n ) => {\n const serverId = e.detail.value;\n this.serverSelectedCallbackHandler(serverId, false);\n };\n\n private serverValueChangedHandler = (e: CustomEvent<any>) => {\n const serverId = e.detail;\n this.serverSelectedCallbackHandler(serverId, false);\n };\n\n private progressBarCloseHandler = () => {\n setTimeout(() => {\n this.actionCompleted = true;\n this.closeProgressBar = true;\n // reset\n this.progressValue = 0;\n this.progressState = \"in-progress\";\n }, 400);\n // delay to force the footer line disappear after the top-state-bar has been closed.\n };\n\n private reloadServer = () => {\n this.serverSelectedCallbackHandler(this.selectedServerId, true);\n };\n\n // 11.RENDER() FUNCTION //\n\n render(): void {\n return (\n <Host\n class={{\n \"gx-ide-component\": true\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"gx-ide-main-wrapper\">\n <gx-ide-container\n noContentPadding\n noAboveFooterPadding\n noBorderAboveFooter={this.closeProgressBar}\n part=\"servers\"\n containerTitle={\n this.displayTitle ? this._componentLocale.componentName : null\n }\n >\n {/* Servers*/}\n <main class=\"main\">\n <div class=\"modules__container\">\n <header class=\"modules__header\">\n <div class=\"modules__combo-container\">\n <gxg-label>\n {this._componentLocale.modules.selectServer}\n </gxg-label>\n <div class=\"modules__combo\">\n <gxg-combo-box\n disableFilter\n onValueChanged={this.serverValueChangedHandler}\n >\n {this.servers.map(item => (\n <gxg-combo-box-item\n value={item.id}\n onItemSelected={this.serverItemSelectedHandler}\n >\n {item.name}\n </gxg-combo-box-item>\n ))}\n </gxg-combo-box>\n {this.showServerCommands ? (\n <span class=\"modules__server-commands\">\n <gxg-button\n type=\"secondary-icon-only\"\n icon=\"gemini-tools/show-more-horizontal\"\n onClick={this.showModuleMenu}\n ></gxg-button>\n </span>\n ) : null}\n <gxg-button\n type=\"secondary-icon-only\"\n icon=\"gemini-tools/reset\"\n onClick={this.reloadServer}\n ></gxg-button>\n </div>\n </div>\n </header>\n\n <div class=\"modules__main\">\n <div class=\"modules__main-header\">\n <gxg-form-text\n label={this._componentLocale.modules.searchModules}\n labelPosition=\"above\"\n centerLabel={false}\n onValueChanged={this.handleFilterChangeHandler}\n disabled={this.loadingServer}\n ></gxg-form-text>\n <gxg-buttons-container\n reduced\n fullWidth\n class=\"modules__browser\"\n onSelectedButtonChanged={\n this.selectedButtonChangedHandler\n }\n >\n <gxg-button\n id=\"btn-browse\"\n selected\n disabled={this.loadingServer}\n >\n {this._componentLocale.modules.buttonsContainer.browse}\n </gxg-button>\n <gxg-button\n id=\"btn-installed\"\n disabled={this.loadingServer}\n >\n {\n this._componentLocale.modules.buttonsContainer\n .installed\n }\n </gxg-button>\n <gxg-button\n id=\"btn-updates\"\n disabled={this.loadingServer}\n >\n {this._componentLocale.modules.buttonsContainer.updates}\n </gxg-button>\n </gxg-buttons-container>\n </div>\n {/* modules grid*/}\n <div\n class=\"grid-container\"\n ref={el => (this.serversDetail = el as HTMLDivElement)}\n >\n {this.filteredModules.length > 0\n ? this.renderModulesGrid()\n : this.renderEmptyStateModules()}\n </div>\n </div>\n </div>\n\n {/* Module version information*/}\n {this.selectedModule ? (\n <div class=\"module-info\">\n <header class=\"module-info__header\">\n {this.renderVersionName()}\n {this.renderInstalledVersion()}\n {this.renderModuleVersions()}\n {/* {this.renderNotInstallable()} */}\n {this.renderVersionWarningMessage()}\n </header>\n <div class=\"module-info__properties gxg-scrollbar\">\n {renderModuleDataProperties(\n this.getModuleData(\n this.selectedModule,\n \"properties\"\n ) as ModulePropertyData[]\n )}\n </div>\n </div>\n ) : (\n <gx-ide-empty-state\n class=\"recent-objects__empty-state\"\n stateIconSrc={this.#moduleIcon}\n stateTitle={\n this._componentLocale.modulesInformation.emptyState.title\n }\n stateDescription={\n this._componentLocale.modulesInformation.emptyState\n .description\n }\n ></gx-ide-empty-state>\n )}\n </main>\n {/* Top State Bar*/}\n <gxg-top-state-bar\n slot=\"footer-above\"\n part=\"progress-bar\"\n stateType={this.progressState}\n noBorder\n caption={\n this.selectedModuleAction.message ||\n this._componentLocale.progressBar.defaultCaption\n }\n progress={this.progressValue}\n active={!this.actionCompleted || !this.closeProgressBar}\n closeType=\"not-progress\"\n closedCallback={this.progressBarCloseHandler}\n ></gxg-top-state-bar>\n </gx-ide-container>\n </div>\n <gxg-ide-loader\n loaderTitle={this._componentLocale.servers.loading}\n ref={el => (this.loaderEl = el as HTMLGxgIdeLoaderElement)}\n container={this.serversDetail}\n borderRadius=\"0 0 0 8px\"\n ></gxg-ide-loader>\n </Host>\n );\n }\n}\n\nexport type ExecuteActionCallback = (\n serverId: string,\n moduleId: string,\n moduleVersionId: string,\n action: ModuleActionType,\n onProgress: (\n message: string,\n progress: number,\n state: topStateBarType\n ) => void\n) => Promise<boolean>;\n\nexport type ServerSelectedCallback = (\n id: string,\n reload: boolean\n) => Promise<ModuleData[]>;\n\nexport type AddServerCallback = () => Promise<void>;\n\nexport type ServerContextMenuCallback = (\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\nexport interface ActionInfo {\n message: string;\n progress: number;\n state: topStateBarType;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["manageModuleReferencesCss","CSS_BUNDLES","GxManageModuleReferences","this","renderedFirstTime","_GxManageModuleReferences_filterIcon","set","getIconPath","category","name","colorType","_GxManageModuleReferences_moduleIcon","updateModulesSelectedVersion","modulesAll","selectedServerId","selectedServerIdOnModulesAllUpdate","modulesSelectedVersion","clear","forEach","module","id","versions","length","newModule","get","undefined","getActionFromCurrentModuleVersion","action","getModuleData","selectedModule","onProgress","message","progress","state","data","selectedModuleAction","Object","assign","progressValue","progressState","handleModuleChange","event","selectedModuleId","detail","rowsId","foundModule","find","item","serverSelectedCallbackHandler","async","reload","serverSelectedCallback","loadingServer","resolvedObjects","filterModulesByType","filteredModules","handleFilterChange","value","trim","toLowerCase","filter","selectedVersionName","includes","handleFilterChangeHandler","e","executeActionCallbackHandler","executeActionCallback","moduleSelectedVersionId","actionCompleted","type","currentVersion","version","showModuleMenu","serverContextMenuCallback","buttonBoundingClientRect","target","getBoundingClientRect","selection","clientX","x","clientY","y","dataType","selectedVersionId","selectedVersion","selectedVersionData","moduleActionHandler","closeProgressBar","renderModulesGrid","h","rowSelectionMode","part","class","onSelectionChanged","settingable","size","map","rowid","key","selected","moduleVersionIconColor","color","disabled","fit","onClick","renderEmptyStateModules","stateIconSrc","__classPrivateFieldGet","stateTitle","_componentLocale","modules","noModulesFilter","moduleAction","moduleCurrentVersion","renderVersionName","renderVersionWarningMessage","warningMessage","renderInstalledVersion","caption","cssClass","modulesInformation","moduleProperties","installed","notInstalled","moduleVersionsValueChangedHandler","versionId","updateSelectedModuleVersion","moduleVersionsItemChangedHandler","reRenderCounter","renderModuleVersions","label","availableVersions","labelPosition","centerLabel","onValueChanged","onItemSelected","selectedButtonChangedHandler","replace","serverItemSelectedHandler","serverId","serverValueChangedHandler","progressBarCloseHandler","setTimeout","reloadServer","Map","modulesAllWatcher","loadingServerHandler","loading","loaderEl","show","componentDidRender","componentDidRenderFirstTime","emit","componentName","componentWillLoad","Locale","getComponentStrings","el","componentDidLoad","servers","onPropValueChange","newModulesData","validate","render","Host","model","noContentPadding","noAboveFooterPadding","noBorderAboveFooter","containerTitle","displayTitle","selectServer","disableFilter","showServerCommands","icon","searchModules","reduced","fullWidth","onSelectedButtonChanged","buttonsContainer","browse","updates","ref","serversDetail","renderModuleDataProperties","emptyState","title","stateDescription","description","slot","stateType","noBorder","progressBar","defaultCaption","active","closeType","closedCallback","loaderTitle","container","borderRadius"],"sources":["src/components/modules/manage-module-references/manage-module-references.scss?tag=gx-ide-manage-module-references&encapsulation=shadow","src/components/modules/manage-module-references/manage-module-references.tsx"],"sourcesContent":["@import \"../../../global/gx-ide-common.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n\n/*--- General ---*/\np,\nul {\n font-size: var(--font-size-lg);\n margin: 0;\n}\np {\n line-height: 1.6em;\n}\n/*--- Header ---*/\n.header {\n align-items: center;\n grid-template-columns: 1fr auto;\n grid-template-rows: 1fr;\n}\n.main {\n display: grid;\n //grid-template-columns: 1fr 2fr 1fr;\n grid-template-columns: 1fr 1fr;\n grid-template-rows: 1fr;\n height: 100%;\n overflow: auto;\n}\nch-grid-columnset {\n display: none;\n}\nch-grid-row[selected] {\n gxg-icon[data-action=\"install\"] {\n //WA to improve visibility\n filter: brightness(2);\n }\n}\n.grid-cell-module {\n &__info {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--mer-spacing--3xs);\n }\n &__name {\n font-weight: var(--mer-font__weight--bold);\n }\n &__name,\n &__description {\n line-height: 1.55em;\n }\n}\n\n/*--- Servers Container ---*/\n.grid-container {\n height: 100%;\n overflow: auto;\n gx-ide-empty-state {\n height: 100%;\n }\n}\n.servers-container {\n display: none;\n height: 100%;\n &__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--gxg-list-box-main__padding) var(--gxg-list-box-main__padding)\n 0 var(--gxg-list-box-main__padding);\n\n gxg-button {\n width: 100%;\n }\n }\n}\n\n/*--- Modules (Header) ---*/\n.modules {\n &__header {\n padding: var(--gxg-list-box-main__padding);\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n }\n &__combo-container {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n }\n &__server-commands {\n display: flex;\n gap: var(--mer-spacing--xs);\n }\n &__combo {\n gxg-combo-box {\n flex: 1;\n }\n display: flex;\n flex-direction: row;\n gap: var(--mer-spacing--xs);\n }\n &__container {\n border-inline-end: var(--mer-border__width--sm) solid\n var(--gx-ide-container-border-color);\n display: grid;\n grid-template-rows: auto 1fr;\n height: 100%;\n overflow: auto;\n }\n &__main {\n display: grid;\n grid-template-rows: auto 1fr;\n height: 100%;\n overflow: auto;\n\n &-header {\n display: flex;\n padding: var(--mer-spacing--xs);\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n }\n }\n}\n\n/*--- Module Info ---*/\n.module-info {\n display: grid;\n grid-template-rows: auto 1fr;\n height: 100%;\n overflow: auto;\n\n &__title {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--xs);\n }\n\n &__name {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n --ds-icon-size-box--regular: 24px;\n --ds-icon-size--regular: 24px;\n font-weight: var(--mer-font__weight--bold);\n }\n\n &__header {\n padding: var(--gx-ide-container__padding);\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n border-block-end: var(--mer-border__width--sm) solid\n var(--gx-ide-container-border-color);\n }\n\n &__action-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--mer-spacing--xs);\n &:before {\n content: \"\";\n width: var(--mer-spacing--xs);\n height: var(--mer-spacing--xs);\n border-radius: 50%;\n display: block;\n background-color: var(--mer-icon__primary--disabled);\n }\n &--installed:before {\n background-color: var(--mer-icon__primary);\n }\n &--uninstallable:before {\n background-color: var(--mer-icon__warning);\n }\n }\n\n &__warning-message {\n margin-block-start: var(--mer-spacing--2xs);\n background-color: var(--mer-color__tinted-yellow--5);\n color: var(--mer-text__on-elevation);\n border: var(--mer-border__width--sm) solid var(--mer-border-color__warning);\n border-radius: var(--mer-border__radius--sm);\n padding: var(--mer-spacing--xs) var(--mer-spacing--md);\n }\n\n &__divider {\n width: calc(100% - var(--gx-ide-container__padding) * 4);\n padding: 0 var(--gx-ide-container__padding);\n margin: 0 auto;\n border: 0;\n border-block-end: var(--mer-border__width--sm) solid\n var(--gx-ide-container-border-color);\n }\n &__properties {\n display: flex;\n flex-direction: column;\n padding: var(--gx-ide-container__padding);\n gap: var(--mer-spacing--xs);\n overflow: auto;\n }\n}\n\n.md-property {\n display: grid;\n gap: var(--mer-spacing--xs);\n\n &--inline {\n grid-template-columns: auto 1fr;\n }\n &--block {\n }\n &__key {\n font-weight: var(--font-weight-bold);\n max-width: 150px;\n }\n &__value {\n font-size: var(--mer-font__size--2xs);\n }\n &__key,\n &__value {\n > * {\n display: inline-block;\n }\n }\n &__list {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n > ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--2xs);\n margin-inline-start: var(--mer-spacing--xs);\n\n li {\n position: relative;\n padding-inline-start: 12px;\n line-height: var(--ds-base-font-line-height--comfortable);\n &::before {\n content: \"\";\n position: absolute;\n left: 0;\n top: 7px;\n display: inline-block;\n width: var(--mer-spacing--2xs);\n height: var(--mer-spacing--2xs);\n background-color: var(--mer-text__on-surface);\n }\n }\n }\n }\n}\n\n.md-property,\n.md-property__list {\n border-block-end: var(--mer-border__width--sm) solid\n var(--gx-ide-container-border-color);\n padding-block-end: var(--mer-spacing--xs);\n\n &:last-child {\n border-block-end: 0;\n padding-block-end: 0;\n }\n}\n\ngxg-ide-loader {\n border-radius: var(--mer-border__radius--md);\n}\n\n.button-wrapper {\n display: grid;\n align-items: center;\n justify-content: center;\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Event,\n Element,\n EventEmitter,\n Method,\n State,\n Watch\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { Color } from \"@genexus/gemini\";\nimport { topStateBarType } from \"@genexus/gemini\";\nimport { TabularGridSelectionChangedEvent } from \"@genexus/chameleon-controls-library\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n/* CUSTOM IMPORTS */\nimport {\n ModuleServerData,\n ModuleData,\n ModuleActionType,\n ModuleFilterType,\n ModulePropertyData,\n ModuleVersionData\n} from \"../types\";\nimport { renderModuleDataProperties } from \"../../../common/common\";\nimport { Locale } from \"../../../common/locale\";\nimport { ContextMenuInfo } from \"../../../common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n // \"utils/form\",\n // \"utils/layout\",\n // \"utils/typography\",\n // \"components/button\",\n // \"components/checkbox\",\n // \"components/edit\",\n \"components/tabular-grid\"\n];\n\n@Component({\n tag: \"gx-ide-manage-module-references\",\n styleUrl: \"manage-module-references.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/manage-module-references\"]\n})\nexport class GxManageModuleReferences {\n // 1.OWN PROPERTIES | WATCH'S //\n\n /**\n * The component hard-coded strings translations.\n */\n private _componentLocale: any;\n private renderedFirstTime = false;\n /* selectedServerIdOnModulesAllUpdate is updated every time modulesAll is modified, in order to determine if the server is the same or not.*/\n private selectedServerIdOnModulesAllUpdate: string;\n\n #filterIcon = getIconPath({\n category: \"system\",\n name: \"filters\",\n colorType: \"on-elevation\"\n });\n #moduleIcon = getIconPath({\n category: \"objects\",\n name: \"module\"\n });\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeManageModuleReferencesElement;\n private loaderEl!: HTMLGxgIdeLoaderElement;\n private serversDetail!: HTMLDivElement;\n\n // 3.STATE() VARIABLES //\n\n @State() modulesAll: ModuleData[] = [];\n @Watch(\"modulesAll\")\n modulesAllWatcher(modulesAll: ModuleData[]) {\n this.updateModulesSelectedVersion(modulesAll);\n }\n @State() filteredModules: ModuleData[] = [];\n @State() selectedModule: ModuleData;\n @State() selectedServerId: string;\n @State() selectedModuleAction: ActionInfo = {\n message: \"\",\n progress: 0,\n state: \"in-progress\"\n };\n @State() modulesSelectedVersion: Map<string, string> = new Map();\n @State() actionCompleted = true;\n @State() closeProgressBar = true;\n @State() progressValue: number = 0;\n @State() progressState: topStateBarType = \"in-progress\";\n @State() loadingServer = false;\n @State() reRenderCounter: number = 0;\n @Watch(\"loadingServer\")\n loadingServerHandler(loading: boolean) {\n if (loading) {\n this.loaderEl.show = true;\n } else {\n this.loaderEl.show = false;\n }\n }\n\n // 4.PUBLIC PROPERTY API //\n\n /**\n * If true it displays the component title on the header\n */\n @Prop() readonly displayTitle = false;\n\n /**\n * List of module servers currently cataloged\n */\n @Prop() readonly servers: ModuleServerData[] = [];\n\n /**\n * Callback invoked when a server is selected. Returns the set of modules available on that server.\n */\n @Prop() readonly serverSelectedCallback: ServerSelectedCallback;\n\n /**\n * Callback invoked when the user wants to execute the action corresponding to a selected module. When the action begins to be executed, the component must be able to show the progress of the action. For this, the onProgress parameter is available, which is in turn a callback used by the host to notify the progress by text message and percentage.\n */\n @Prop() readonly executeActionCallback: ExecuteActionCallback;\n\n /**\n * Callback invoked when Add button is clicked\n */\n @Prop() readonly addServerCallback: AddServerCallback;\n\n /**\n * Callback invoked when an element is right clicked on servers list\n */\n @Prop() readonly serverContextMenuCallback: ServerContextMenuCallback;\n\n /**\n * Allows you to hide the button (...) that executes serverContextMenuCallback, if we do not implement the commands in a first version\n */\n @Prop() readonly showServerCommands: boolean = false;\n\n // 5.EVENTS (EMIT) //\n\n /**\n * This event is emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n // 6.COMPONENT LIFECYCLE EVENTS //\n\n componentDidRender() {\n if (!this.renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this._componentLocale.componentName\n );\n this.renderedFirstTime = true;\n }\n }\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n async componentDidLoad() {\n await this.serverSelectedCallbackHandler(this.servers[0].id, false);\n }\n\n // 7.LISTENERS //\n\n @Watch(\"modulesAll\")\n onPropValueChange(newModulesData: ModuleData[]) {\n this.filteredModules = [...newModulesData];\n }\n\n // 8.PUBLIC METHODS API //\n\n /**\n * validate\n */\n @Method()\n async validate(): Promise<boolean> {\n return true;\n }\n\n // 9.LOCAL METHODS //\n\n private updateModulesSelectedVersion = (modulesAll: ModuleData[]) => {\n if (this.selectedServerId !== this.selectedServerIdOnModulesAllUpdate) {\n // the server has changed. clear the updateModulesSelectedVersion\n this.modulesSelectedVersion.clear();\n modulesAll.forEach(module => {\n // this.modulesSelectedVersion.set(module.id, module.versions[0].id);\n this.modulesSelectedVersion.set(\n module.id,\n module.versions[module.versions.length - 1].id\n );\n });\n } else {\n // the server has't changed. only add the module to the map, if it is a new module.\n modulesAll.forEach(module => {\n const newModule =\n this.modulesSelectedVersion.get(module.id) === undefined;\n if (newModule) {\n this.modulesSelectedVersion.set(module.id, module.versions[0].id);\n }\n });\n }\n this.selectedServerIdOnModulesAllUpdate = this.selectedServerId;\n };\n\n private getActionFromCurrentModuleVersion = (): ModuleActionType => {\n const action = this.getModuleData(\n this.selectedModule,\n \"action\"\n ) as ModuleActionType;\n return action || \"install\";\n };\n\n /**\n * Callback invoked to get the progress when module is performing an action\n */\n private onProgress = (\n message: string,\n progress: number,\n state: topStateBarType\n ): void => {\n const data = { message, progress, state };\n this.selectedModuleAction = { ...data };\n this.progressValue = this.selectedModuleAction.progress;\n this.progressState = this.selectedModuleAction.state;\n };\n\n // 10.LOCAL METHODS //\n\n /**\n * Used for changing the selected module\n */\n private handleModuleChange = (\n event: CustomEvent<TabularGridSelectionChangedEvent>\n ) => {\n const selectedModuleId = event.detail.rowsId[0];\n const foundModule = this.modulesAll.find(\n item => item.id === selectedModuleId\n );\n if (foundModule) {\n this.selectedModule = foundModule;\n }\n };\n\n /**\n * Change the server selected value in response to callbackServerSelected callback\n */\n private serverSelectedCallbackHandler = async (id: any, reload: boolean) => {\n if (this.serverSelectedCallback) {\n this.loadingServer = true;\n const resolvedObjects = await this.serverSelectedCallback(id, reload);\n this.selectedServerId = id;\n this.modulesAll = [...resolvedObjects];\n this.filterModulesByType(\"browse\");\n this.selectedModule = this.filteredModules[0];\n this.loadingServer = false;\n }\n };\n\n private handleFilterChange = (value: string) => {\n value = value.trim().toLowerCase();\n if (value) {\n this.filteredModules = this.modulesAll.filter(module => {\n const selectedVersionName = this.getModuleData(\n module,\n \"name\"\n ) as string;\n return selectedVersionName?.toLowerCase().includes(value);\n });\n } else {\n this.filteredModules = this.modulesAll;\n }\n };\n\n private handleFilterChangeHandler = (e: CustomEvent<string>) => {\n const value = e.detail;\n return this.handleFilterChange(value);\n };\n\n /**\n * Perform an action relative to a module using callbackExecuteAction callback and receive the state of that action with onProgress callback\n */\n private executeActionCallbackHandler = async (module: ModuleData) => {\n if (this.executeActionCallback) {\n const moduleSelectedVersionId = this.modulesSelectedVersion.get(\n module.id\n );\n const actionCompleted = await this.executeActionCallback(\n this.selectedServerId,\n module.id,\n moduleSelectedVersionId,\n this.getActionFromCurrentModuleVersion(),\n this.onProgress\n );\n if (actionCompleted) {\n this.serverSelectedCallbackHandler(this.selectedServerId, false);\n }\n this.actionCompleted = actionCompleted;\n }\n };\n\n private filterModulesByType = (type: ModuleFilterType) => {\n // browse\n if (type === \"browse\") {\n this.filteredModules = this.modulesAll;\n }\n // installed\n else if (type === \"installed\") {\n this.filteredModules = this.modulesAll.filter((module: ModuleData) => {\n // if the module has a currentVersion (not undefined) it means it is installed\n return module.currentVersion;\n });\n } else if (type === \"updates\") {\n this.filteredModules = this.modulesAll.filter((module: ModuleData) => {\n return module.versions.find(version => version.action === \"update\");\n });\n }\n };\n\n private showModuleMenu = async (e: MouseEvent) => {\n if (this.serverContextMenuCallback) {\n const buttonBoundingClientRect = (\n e.target as HTMLElement\n ).getBoundingClientRect();\n await this.serverContextMenuCallback({\n selection: [this.selectedServerId],\n clientX: buttonBoundingClientRect.x,\n clientY: buttonBoundingClientRect.y\n });\n }\n };\n\n private getModuleData = (\n module: ModuleData,\n dataType: keyof ModuleVersionData\n ): string | ModulePropertyData[] | undefined => {\n const selectedVersionId = this.modulesSelectedVersion.get(module.id);\n let selectedVersion;\n let selectedVersionData;\n if (selectedVersionId) {\n selectedVersion = module.versions.find(\n version => version.id === selectedVersionId\n );\n }\n if (selectedVersion) {\n selectedVersionData = selectedVersion[dataType];\n }\n return selectedVersionData;\n };\n\n private moduleActionHandler = (module: ModuleData) => () => {\n this.actionCompleted = false;\n this.closeProgressBar = false;\n this.executeActionCallbackHandler(module);\n };\n\n private renderModulesGrid = (): Element => {\n return (\n <ch-tabular-grid\n rowSelectionMode=\"single\"\n part=\"ch-grid-pending-commits\"\n class=\"tabular-grid servers-detail no-border\"\n onSelectionChanged={this.handleModuleChange}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"min-content\"\n ></ch-tabular-grid-column>\n\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n settingable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n class=\"tabular-grid-column\"\n settingable={false}\n size=\"min-content\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {this.filteredModules.map((module: ModuleData) => (\n <ch-tabular-grid-row\n class=\"tabular-grid-row\"\n rowid={module.id}\n key={module.id}\n selected={\n this.selectedModule && this.selectedModule.id === module.id\n }\n >\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <gxg-icon\n type=\"objects/module\"\n data-action={this.moduleVersionIconColor(module)}\n color={this.moduleVersionIconColor(module)}\n size=\"small\"\n ></gxg-icon>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell grid-cell-module__info\">\n <span class=\"grid-cell-module__name\">\n {this.getModuleData(module, \"name\")}\n </span>\n <span class=\"grid-cell-module__description\">\n {this.getModuleData(module, \"description\")}\n </span>\n </ch-tabular-grid-cell>\n\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.selectedModule && this.selectedModule.id === module.id ? (\n <div class=\"button-wrapper\">\n <gxg-button\n disabled={\n !this.actionCompleted ||\n this.getModuleData(module, \"action\") === \"incompatible\" ||\n this.getModuleData(module, \"action\") === \"not-installable\"\n }\n fit\n part=\"module-action\"\n onClick={this.moduleActionHandler(module)}\n >\n {this.getActionFromCurrentModuleVersion()}\n </gxg-button>\n </div>\n ) : null}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid>\n );\n };\n\n private renderEmptyStateModules = () => {\n return (\n <gx-ide-empty-state\n stateIconSrc={this.#filterIcon}\n stateTitle={this._componentLocale.modules.noModulesFilter}\n ></gx-ide-empty-state>\n );\n };\n\n private moduleVersionIconColor = (module: ModuleData): Color => {\n const moduleAction = this.getModuleData(module, \"action\");\n const moduleCurrentVersion = module.currentVersion;\n if (moduleAction === \"not-installable\" || moduleAction === \"incompatible\") {\n return \"warning\";\n } else if (!moduleCurrentVersion) {\n return \"mercury-primary-disabled\";\n } else {\n return \"mercury-primary\";\n }\n };\n\n /* module details/information renders*/\n private renderVersionName = () => {\n return (\n <gxg-title part=\"module-info__name\" type=\"title-05\">\n <div class=\"module-info__name\">\n {/* <gxg-icon\n type=\"objects/module\"\n color={this.moduleVersionIconColor(this.selectedModule)}\n ></gxg-icon> */}\n {this.getModuleData(this.selectedModule, \"name\")}\n </div>\n </gxg-title>\n );\n };\n\n private renderVersionWarningMessage = () => {\n const warningMessage = this.getModuleData(\n this.selectedModule,\n \"warningMessage\"\n );\n if (warningMessage) {\n return <p class=\"module-info__alert-message\">{warningMessage}</p>;\n }\n };\n\n private renderInstalledVersion = () => {\n const currentVersion = this.selectedModule.currentVersion;\n let caption;\n let cssClass = \"module-info__action-container\";\n if (currentVersion) {\n caption = `${this._componentLocale.modulesInformation.moduleProperties.installed}: ${currentVersion}`;\n cssClass += ` module-info__action-container--installed`;\n } else {\n caption =\n this._componentLocale.modulesInformation.moduleProperties.notInstalled;\n }\n return (\n <div class={cssClass}>\n <gxg-text part=\"module-info__action\">{caption}</gxg-text>\n </div>\n );\n };\n\n private moduleVersionsValueChangedHandler = (e: CustomEvent<any>) => {\n const versionId = e.detail;\n this.updateSelectedModuleVersion(versionId);\n };\n private moduleVersionsItemChangedHandler = (e: CustomEvent<any>) => {\n const versionId = e.detail.value;\n this.updateSelectedModuleVersion(versionId);\n };\n private updateSelectedModuleVersion = (versionId: string) => {\n if (versionId) {\n this.modulesSelectedVersion.set(this.selectedModule.id, versionId);\n this.reRenderCounter++;\n }\n };\n\n private renderModuleVersions = () => {\n return (\n <div part=\"available-versions\">\n <gxg-combo-box\n id=\"versions-combo-box\"\n disable-filter\n value={this.getModuleData(this.selectedModule, \"id\")}\n part=\"module-versions\"\n display-validation-styles\n display-validation-message\n label={\n this._componentLocale.modulesInformation.moduleProperties\n .availableVersions\n }\n labelPosition=\"start\"\n centerLabel\n onValueChanged={this.moduleVersionsValueChangedHandler}\n disabled={this.loadingServer}\n >\n {this.selectedModule.versions.map(item => (\n <gxg-combo-box-item\n value={item.id}\n onItemSelected={this.moduleVersionsItemChangedHandler}\n >\n {item.id}\n </gxg-combo-box-item>\n ))}\n </gxg-combo-box>\n </div>\n );\n };\n\n private selectedButtonChangedHandler = (e: CustomEvent<string>) => {\n const type = e.detail.replace(\"btn-\", \"\") as ModuleFilterType;\n this.filterModulesByType(type);\n };\n\n private serverItemSelectedHandler = (\n e: CustomEvent<{\n el: HTMLGxgComboBoxItemElement;\n index: number;\n value: any;\n icon?: string;\n }>\n ) => {\n const serverId = e.detail.value;\n this.serverSelectedCallbackHandler(serverId, false);\n };\n\n private serverValueChangedHandler = (e: CustomEvent<any>) => {\n const serverId = e.detail;\n this.serverSelectedCallbackHandler(serverId, false);\n };\n\n private progressBarCloseHandler = () => {\n setTimeout(() => {\n this.actionCompleted = true;\n this.closeProgressBar = true;\n // reset\n this.progressValue = 0;\n this.progressState = \"in-progress\";\n }, 400);\n // delay to force the footer line disappear after the top-state-bar has been closed.\n };\n\n private reloadServer = () => {\n this.serverSelectedCallbackHandler(this.selectedServerId, true);\n };\n\n // 11.RENDER() FUNCTION //\n\n render(): void {\n return (\n <Host\n class={{\n \"gx-ide-component\": true\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"gx-ide-main-wrapper\">\n <gx-ide-container\n noContentPadding\n noAboveFooterPadding\n noBorderAboveFooter={this.closeProgressBar}\n part=\"servers\"\n containerTitle={\n this.displayTitle ? this._componentLocale.componentName : null\n }\n >\n {/* Servers*/}\n <main class=\"main\">\n <div class=\"modules__container\">\n <header class=\"modules__header\">\n <div class=\"modules__combo-container\">\n <gxg-label>\n {this._componentLocale.modules.selectServer}\n </gxg-label>\n <div class=\"modules__combo\">\n <gxg-combo-box\n disableFilter\n onValueChanged={this.serverValueChangedHandler}\n >\n {this.servers.map(item => (\n <gxg-combo-box-item\n value={item.id}\n onItemSelected={this.serverItemSelectedHandler}\n >\n {item.name}\n </gxg-combo-box-item>\n ))}\n </gxg-combo-box>\n {this.showServerCommands ? (\n <span class=\"modules__server-commands\">\n <gxg-button\n type=\"secondary-icon-only\"\n icon=\"gemini-tools/show-more-horizontal\"\n onClick={this.showModuleMenu}\n ></gxg-button>\n </span>\n ) : null}\n <gxg-button\n type=\"secondary-icon-only\"\n icon=\"gemini-tools/reset\"\n onClick={this.reloadServer}\n ></gxg-button>\n </div>\n </div>\n </header>\n\n <div class=\"modules__main\">\n <div class=\"modules__main-header\">\n <gxg-form-text\n label={this._componentLocale.modules.searchModules}\n labelPosition=\"above\"\n centerLabel={false}\n onValueChanged={this.handleFilterChangeHandler}\n disabled={this.loadingServer}\n ></gxg-form-text>\n <gxg-buttons-container\n reduced\n fullWidth\n class=\"modules__browser\"\n onSelectedButtonChanged={\n this.selectedButtonChangedHandler\n }\n >\n <gxg-button\n id=\"btn-browse\"\n selected\n disabled={this.loadingServer}\n >\n {this._componentLocale.modules.buttonsContainer.browse}\n </gxg-button>\n <gxg-button\n id=\"btn-installed\"\n disabled={this.loadingServer}\n >\n {\n this._componentLocale.modules.buttonsContainer\n .installed\n }\n </gxg-button>\n <gxg-button\n id=\"btn-updates\"\n disabled={this.loadingServer}\n >\n {this._componentLocale.modules.buttonsContainer.updates}\n </gxg-button>\n </gxg-buttons-container>\n </div>\n {/* modules grid*/}\n <div\n class=\"grid-container\"\n ref={el => (this.serversDetail = el as HTMLDivElement)}\n >\n {this.filteredModules.length > 0\n ? this.renderModulesGrid()\n : this.renderEmptyStateModules()}\n </div>\n </div>\n </div>\n\n {/* Module version information*/}\n {this.selectedModule ? (\n <div class=\"module-info\">\n <header class=\"module-info__header\">\n {this.renderVersionName()}\n {this.renderInstalledVersion()}\n {this.renderModuleVersions()}\n {/* {this.renderNotInstallable()} */}\n {this.renderVersionWarningMessage()}\n </header>\n <div class=\"module-info__properties gxg-scrollbar\">\n {renderModuleDataProperties(\n this.getModuleData(\n this.selectedModule,\n \"properties\"\n ) as ModulePropertyData[]\n )}\n </div>\n </div>\n ) : (\n <gx-ide-empty-state\n class=\"recent-objects__empty-state\"\n stateIconSrc={this.#moduleIcon}\n stateTitle={\n this._componentLocale.modulesInformation.emptyState.title\n }\n stateDescription={\n this._componentLocale.modulesInformation.emptyState\n .description\n }\n ></gx-ide-empty-state>\n )}\n </main>\n {/* Top State Bar*/}\n <gxg-top-state-bar\n slot=\"footer-above\"\n part=\"progress-bar\"\n stateType={this.progressState}\n noBorder\n caption={\n this.selectedModuleAction.message ||\n this._componentLocale.progressBar.defaultCaption\n }\n progress={this.progressValue}\n active={!this.actionCompleted || !this.closeProgressBar}\n closeType=\"not-progress\"\n closedCallback={this.progressBarCloseHandler}\n ></gxg-top-state-bar>\n </gx-ide-container>\n </div>\n <gxg-ide-loader\n loaderTitle={this._componentLocale.servers.loading}\n ref={el => (this.loaderEl = el as HTMLGxgIdeLoaderElement)}\n container={this.serversDetail}\n borderRadius=\"0 0 0 8px\"\n ></gxg-ide-loader>\n </Host>\n );\n }\n}\n\nexport type ExecuteActionCallback = (\n serverId: string,\n moduleId: string,\n moduleVersionId: string,\n action: ModuleActionType,\n onProgress: (\n message: string,\n progress: number,\n state: topStateBarType\n ) => void\n) => Promise<boolean>;\n\nexport type ServerSelectedCallback = (\n id: string,\n reload: boolean\n) => Promise<ModuleData[]>;\n\nexport type AddServerCallback = () => Promise<void>;\n\nexport type ServerContextMenuCallback = (\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\nexport interface ActionInfo {\n message: string;\n progress: number;\n state: topStateBarType;\n}\n"],"mappings":"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"}
@@ -1,6 +1,14 @@
1
- import { g as e, r as t, h as s, H as i, a as r } from "./p-97107ecc.js";
1
+ import { g as e, r as t, h as i, H as s, a as r } from "./p-97107ecc.js";
2
2
 
3
- import { g as o } from "./p-401bfc97.js";
3
+ import { g as o } from "./p-d42e842b.js";
4
+
5
+ import "./p-d4ecd3bb.js";
6
+
7
+ import "lit";
8
+
9
+ import "lit/directives/when.js";
10
+
11
+ import "lit/directives/if-defined.js";
4
12
 
5
13
  import { L as a } from "./p-311eedf3.js";
6
14
 
@@ -8,17 +16,17 @@ import { A as n } from "./p-8c2e9df4.js";
8
16
 
9
17
  const l = ":host{--wrapper-copacity:0;--wrapper-min-inline-size:700px;--wrapper-max-inline-size:1040px;--wrapper-block-size:640px;transition:var(--mer-timing--regular) opacity;display:flex;align-items:center;justify-content:center;inline-size:100%;block-size:100%;padding:16px;overflow:auto}.wrapper{flex:1;display:grid;grid-template-columns:1fr var(--wrapper-block-size);block-size:var(--wrapper-block-size);max-inline-size:var(--wrapper-max-inline-size);background-color:var(--mer-surface__elevation--01);border-radius:var(--mer-spacing--sm);overflow:auto;transform:translateY(6px)}.side-inline-start{background-size:cover}.side-inline-end{position:relative;display:grid;grid-template-rows:max-content 1fr max-content;padding:64px 80px;transition:1000ms grid-template-rows;overflow:auto}.close-button{position:absolute;inset-inline-end:0;inset-block-start:0}.header{display:grid;gap:var(--mer-spacing--md);margin-block-end:92px}.header__logo__close-button{display:flex;justify-content:space-between}.title{color:var(--mer-text__on-surface);font-size:var(--mer-font__size--xl);font-weight:var(--mer-font__weight--semi-bold);letter-spacing:0.02em}.next-version{color:var(--mer-text__on-surface)}.header__description{color:var(--mer-text__complementary);line-height:1.45 !important}.main{display:flex;flex-direction:column;gap:var(--mer-spacing--sm);overflow:auto}.log__container{--logVisibleLines:6;--logFontSize:12px;--logLineHeight:1.2;--logGap:4px;--logContainerBlockSize:calc(\n var(--logFontSize) * var(--logLineHeight) * var(--logVisibleLines) +\n calc(var(--logGap) * (var(--logVisibleLines) - 1))\n );block-size:var(--logContainerBlockSize);font-family:monospace;color:var(--mer-text__complementary);display:flex;flex-direction:column-reverse;gap:var(--logGap);overflow:hidden}.log__container:hover{overflow:auto}.log__message{opacity:0;transition:var(--mer-timing--regular) opacity;animation:fadeInLogMessage 0.45s ease-out forwards}.log__message--error{color:var(--mer-text__error)}.footer{display:grid;grid-auto-rows:max-content;gap:var(--mer-spacing--sm);margin-block-start:var(--mer-spacing--lg)}.error-message{font-family:monospace;font-size:13px;line-height:1.5;color:var(--mer-text__error);margin-block-start:auto;display:-webkit-box;-webkit-line-clamp:2;overflow:hidden}.status--processing{display:flex;flex-direction:row;align-items:baseline;gap:4px}@keyframes fadeInLogMessage{from{opacity:0}to{opacity:1}}";
10
18
 
11
- var c = undefined && undefined.__classPrivateFieldSet || function(e, t, s, i, r) {
12
- if (i === "m") throw new TypeError("Private method is not writable");
13
- if (i === "a" && !r) throw new TypeError("Private accessor was defined without a setter");
19
+ var c = undefined && undefined.__classPrivateFieldSet || function(e, t, i, s, r) {
20
+ if (s === "m") throw new TypeError("Private method is not writable");
21
+ if (s === "a" && !r) throw new TypeError("Private accessor was defined without a setter");
14
22
  if (typeof t === "function" ? e !== t || !r : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
- return i === "a" ? r.call(e, s) : r ? r.value = s : t.set(e, s), s;
23
+ return s === "a" ? r.call(e, i) : r ? r.value = i : t.set(e, i), i;
16
24
  };
17
25
 
18
- var p = undefined && undefined.__classPrivateFieldGet || function(e, t, s, i) {
19
- if (s === "a" && !i) throw new TypeError("Private accessor was defined without a getter");
20
- if (typeof t === "function" ? e !== t || !i : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
21
- return s === "m" ? i : s === "a" ? i.call(e) : i ? i.value : t.get(e);
26
+ var p = undefined && undefined.__classPrivateFieldGet || function(e, t, i, s) {
27
+ if (i === "a" && !s) throw new TypeError("Private accessor was defined without a getter");
28
+ if (typeof t === "function" ? e !== t || !s : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
29
+ return i === "m" ? s : i === "a" ? s.call(e) : s ? s.value : t.get(e);
22
30
  };
23
31
 
24
32
  var d;
@@ -66,71 +74,71 @@ const u = class {
66
74
  if (r) {
67
75
  c = `${c} ${p(this, d, "f").warnings.checkTheLog}`;
68
76
  }
69
- return s(i, null, s("ch-theme", {
77
+ return i(s, null, i("ch-theme", {
70
78
  model: f
71
- }), s("div", {
79
+ }), i("div", {
72
80
  class: {
73
81
  scrollable: true,
74
82
  wrapper: true
75
83
  }
76
- }, s("div", {
84
+ }, i("div", {
77
85
  class: "side-inline-start",
78
86
  style: {
79
87
  backgroundImage: `url(${m})`
80
88
  },
81
89
  role: "img"
82
- }), s("section", {
90
+ }), i("section", {
83
91
  class: "side-inline-end scrollable"
84
- }, s("header", {
92
+ }, i("header", {
85
93
  class: "header"
86
- }, s("img", {
94
+ }, i("img", {
87
95
  src: g,
88
96
  alt: p(this, d, "f").illustrationAlternativeText
89
- }), s("h2", {
97
+ }), i("h2", {
90
98
  class: "title"
91
- }, p(this, d, "f").title), this.appVersion && s("p", {
99
+ }, p(this, d, "f").title), this.appVersion && i("p", {
92
100
  class: "body-regular-m next-version"
93
- }, p(this, d, "f").nextVersion, " ", this.appVersion), s("p", {
101
+ }, p(this, d, "f").nextVersion, " ", this.appVersion), i("p", {
94
102
  class: "body-italic-m header__description"
95
- }, p(this, d, "f").allRightsReserved), s("p", {
103
+ }, p(this, d, "f").allRightsReserved), i("p", {
96
104
  class: "body-italic-m header__description"
97
- }, p(this, d, "f").copyright)), s("main", {
105
+ }, p(this, d, "f").copyright)), i("main", {
98
106
  class: "main"
99
- }, a && s("p", {
107
+ }, a && i("p", {
100
108
  class: {
101
109
  "body-regular-m": true,
102
110
  "status--processing": true
103
111
  }
104
- }, p(this, d, "f").initializingServices, n("tiny", "on-surface")), s("code", {
112
+ }, p(this, d, "f").initializingServices, n("tiny", "on-surface")), i("code", {
105
113
  class: "log__container scrollable",
106
114
  role: "status",
107
115
  "aria-live": "polite",
108
116
  "aria-busy": this.ariaBusy
109
- }, (t = this.messages) === null || t === void 0 ? void 0 : t.reverse().map(((e, t) => s("p", {
117
+ }, (t = this.messages) === null || t === void 0 ? void 0 : t.reverse().map(((e, t) => i("p", {
110
118
  class: {
111
119
  "tiny-regular-l": true,
112
120
  log__message: true,
113
121
  "log__message--error": e.type === "error"
114
122
  },
115
123
  key: this.messages.length - t
116
- }, e.text)))), l && s("p", {
124
+ }, e.text)))), l && i("p", {
117
125
  class: "error-message status--error"
118
- }, o && s("span", null, c), o && this.showDockerMissingError && s("span", null, " - "), this.showDockerMissingError && s("span", null, p(this, d, "f").warnings.dockerMissing))), s("footer", {
126
+ }, o && i("span", null, c), o && this.showDockerMissingError && i("span", null, " - "), this.showDockerMissingError && i("span", null, p(this, d, "f").warnings.dockerMissing))), i("footer", {
119
127
  class: "footer"
120
- }, s("div", {
128
+ }, i("div", {
121
129
  class: "buttons-spacer"
122
- }, this.showDockerMissingError && s("button", {
130
+ }, this.showDockerMissingError && i("button", {
123
131
  key: "download-docker",
124
132
  class: "button-secondary button-icon-and-text download-docker-button",
125
133
  onClick: this.downloadDockerCallback
126
- }, p(this, d, "f").downloadDocker), r && s("button", {
134
+ }, p(this, d, "f").downloadDocker), r && i("button", {
127
135
  key: "open-log",
128
136
  class: "button-tertiary button-icon-and-text",
129
137
  onClick: this.openLogCallback
130
- }, s("ch-image", {
138
+ }, i("ch-image", {
131
139
  class: "icon-md",
132
140
  src: h
133
- }), p(this, d, "f").openLog), this.quitCallback && this.showQuitButton && s("button", {
141
+ }), p(this, d, "f").openLog), this.quitCallback && this.showQuitButton && i("button", {
134
142
  class: "button-secondary",
135
143
  onClick: this.quitCallback
136
144
  }, p(this, d, "f").quitGenexus))))));
@@ -148,4 +156,4 @@ d = new WeakMap;
148
156
  u.style = l;
149
157
 
150
158
  export { u as gx_ide_splash };
151
- //# sourceMappingURL=p-410a35da.entry.js.map
159
+ //# sourceMappingURL=p-8925fc99.entry.js.map