@genexus/genexus-ide-ui 1.1.5 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (643) hide show
  1. package/dist/cjs/{code-render-0e9837c4.js → code-render-55d37767.js} +3 -3
  2. package/dist/cjs/code-render-55d37767.js.map +1 -0
  3. package/dist/cjs/{form-validation-ffe2b957.js → form-validation-178cf461.js} +3 -7
  4. package/dist/cjs/form-validation-178cf461.js.map +1 -0
  5. package/dist/cjs/gx-ide-about.cjs.entry.js +1 -1
  6. package/dist/cjs/gx-ide-ai-assistant.cjs.entry.js +15 -9
  7. package/dist/cjs/gx-ide-ai-assistant.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-ai-message.cjs.entry.js +2 -2
  9. package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js +4 -3
  10. package/dist/cjs/gx-ide-bpm-app-declaration.cjs.entry.js.map +1 -1
  11. package/dist/cjs/gx-ide-bpm-assign-roles.cjs.entry.js +1 -1
  12. package/dist/cjs/gx-ide-bpm-export-xpdl.cjs.entry.js +5 -3
  13. package/dist/cjs/gx-ide-bpm-export-xpdl.cjs.entry.js.map +1 -1
  14. package/dist/cjs/gx-ide-bpm-import-files.cjs.entry.js +3 -2
  15. package/dist/cjs/gx-ide-bpm-import-files.cjs.entry.js.map +1 -1
  16. package/dist/cjs/gx-ide-bpm-import-gxpm.cjs.entry.js +1 -1
  17. package/dist/cjs/gx-ide-bpm-objects-selector.cjs.entry.js +1 -1
  18. package/dist/cjs/gx-ide-bpm-sync-gam-roles.cjs.entry.js +3 -2
  19. package/dist/cjs/gx-ide-bpm-sync-gam-roles.cjs.entry.js.map +1 -1
  20. package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js +11 -9
  21. package/dist/cjs/gx-ide-bpm-task-documents.cjs.entry.js.map +1 -1
  22. package/dist/cjs/gx-ide-bpm-timer-duration.cjs.entry.js +3 -2
  23. package/dist/cjs/gx-ide-bpm-timer-duration.cjs.entry.js.map +1 -1
  24. package/dist/cjs/gx-ide-card.cjs.entry.js +1 -1
  25. package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js +1 -1
  26. package/dist/cjs/gx-ide-connect-gx-server.cjs.entry.js +23 -18
  27. package/dist/cjs/gx-ide-connect-gx-server.cjs.entry.js.map +1 -1
  28. package/dist/cjs/gx-ide-container_2.cjs.entry.js +2 -1
  29. package/dist/cjs/gx-ide-container_2.cjs.entry.js.map +1 -1
  30. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +10 -6
  31. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
  32. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +4 -3
  33. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
  34. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js +5 -4
  35. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js.map +1 -1
  36. package/dist/cjs/gx-ide-data-selector.cjs.entry.js +4 -3
  37. package/dist/cjs/gx-ide-data-selector.cjs.entry.js.map +1 -1
  38. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +5 -4
  39. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -1
  40. package/dist/cjs/gx-ide-deployment-tool.cjs.entry.js +20 -16
  41. package/dist/cjs/gx-ide-deployment-tool.cjs.entry.js.map +1 -1
  42. package/dist/cjs/gx-ide-design-import.cjs.entry.js +28 -20
  43. package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
  44. package/dist/cjs/gx-ide-directory-selector.cjs.entry.js +2 -1
  45. package/dist/cjs/gx-ide-directory-selector.cjs.entry.js.map +1 -1
  46. package/dist/cjs/gx-ide-edit-module-server.cjs.entry.js +3 -2
  47. package/dist/cjs/gx-ide-edit-module-server.cjs.entry.js.map +1 -1
  48. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +5 -3
  49. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js.map +1 -1
  50. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js +45 -60
  51. package/dist/cjs/gx-ide-file-uploader.cjs.entry.js.map +1 -1
  52. package/dist/cjs/gx-ide-gam-installation-settings.cjs.entry.js +3 -2
  53. package/dist/cjs/gx-ide-gam-installation-settings.cjs.entry.js.map +1 -1
  54. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +1 -1
  55. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +8 -5
  56. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
  57. package/dist/cjs/gx-ide-list-selector_2.cjs.entry.js +1 -1
  58. package/dist/cjs/gx-ide-list-selector_2.cjs.entry.js.map +1 -1
  59. package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js +5 -14
  60. package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js.map +1 -1
  61. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +3 -3
  62. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -1
  63. package/dist/cjs/gx-ide-navigation-report.cjs.entry.js +7 -4
  64. package/dist/cjs/gx-ide-navigation-report.cjs.entry.js.map +1 -1
  65. package/dist/cjs/gx-ide-new-environment.cjs.entry.js +18 -13
  66. package/dist/cjs/gx-ide-new-environment.cjs.entry.js.map +1 -1
  67. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +35 -31
  68. package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
  69. package/dist/cjs/gx-ide-new-object.cjs.entry.js +9 -6
  70. package/dist/cjs/gx-ide-new-object.cjs.entry.js.map +1 -1
  71. package/dist/cjs/gx-ide-new-version.cjs.entry.js +3 -3
  72. package/dist/cjs/gx-ide-new-version.cjs.entry.js.map +1 -1
  73. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +7 -6
  74. package/dist/cjs/gx-ide-object-selector.cjs.entry.js.map +1 -1
  75. package/dist/cjs/gx-ide-open-api-import.cjs.entry.js +9 -5
  76. package/dist/cjs/gx-ide-open-api-import.cjs.entry.js.map +1 -1
  77. package/dist/cjs/gx-ide-references.cjs.entry.js +23 -18
  78. package/dist/cjs/gx-ide-references.cjs.entry.js.map +1 -1
  79. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +1 -1
  80. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js +13 -7
  81. package/dist/cjs/gx-ide-select-kb-items.cjs.entry.js.map +1 -1
  82. package/dist/cjs/gx-ide-select-user-team.cjs.entry.js +4 -3
  83. package/dist/cjs/gx-ide-select-user-team.cjs.entry.js.map +1 -1
  84. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +7 -4
  85. package/dist/cjs/gx-ide-share-kb.cjs.entry.js.map +1 -1
  86. package/dist/cjs/gx-ide-sign-in-team.cjs.entry.js +3 -2
  87. package/dist/cjs/gx-ide-sign-in-team.cjs.entry.js.map +1 -1
  88. package/dist/cjs/gx-ide-sign-in.cjs.entry.js +1 -1
  89. package/dist/cjs/gx-ide-splash.cjs.entry.js +4 -3
  90. package/dist/cjs/gx-ide-splash.cjs.entry.js.map +1 -1
  91. package/dist/cjs/gx-ide-start-page.cjs.entry.js +7 -4
  92. package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
  93. package/dist/cjs/gx-ide-status-buttons.cjs.entry.js +1 -1
  94. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +2 -2
  95. package/dist/cjs/gx-ide-team-dev-select-recent-comment.cjs.entry.js +1 -1
  96. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js +2 -2
  97. package/dist/cjs/gx-ide-team-dev-update-partial-selection.cjs.entry.js.map +1 -1
  98. package/dist/cjs/gx-ide-team-dev-update-to-revision.cjs.entry.js +1 -1
  99. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +4 -3
  100. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js.map +1 -1
  101. package/dist/cjs/gx-ide-template.cjs.entry.js +1 -1
  102. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js +8 -6
  103. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js.map +1 -1
  104. package/dist/cjs/gx-ide-wf-settings.cjs.entry.js +1 -1
  105. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js +14 -8
  106. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js.map +1 -1
  107. package/dist/cjs/gx-ide-ww-files.cjs.entry.js +21 -18
  108. package/dist/cjs/gx-ide-ww-files.cjs.entry.js.map +1 -1
  109. package/dist/cjs/gx-ide-ww-images.cjs.entry.js +7 -18
  110. package/dist/cjs/gx-ide-ww-images.cjs.entry.js.map +1 -1
  111. package/dist/cjs/{helpers-e5a13fa5.js → helpers-30f109a4.js} +6 -6
  112. package/dist/cjs/helpers-30f109a4.js.map +1 -0
  113. package/dist/cjs/index.cjs.js +7 -1
  114. package/dist/cjs/index.cjs.js.map +1 -1
  115. package/dist/cjs/{locale-36b93b1b.js → locale-ff30a5f3.js} +4 -4
  116. package/dist/cjs/locale-ff30a5f3.js.map +1 -0
  117. package/dist/collection/common/common.js +7 -4
  118. package/dist/collection/common/common.js.map +1 -1
  119. package/dist/collection/common/form-validation.js +4 -7
  120. package/dist/collection/common/form-validation.js.map +1 -1
  121. package/dist/collection/common/helpers.js +10 -9
  122. package/dist/collection/common/helpers.js.map +1 -1
  123. package/dist/collection/common/images/ai-avatar.svg +11 -0
  124. package/dist/collection/common/locale.js +3 -3
  125. package/dist/collection/common/locale.js.map +1 -1
  126. package/dist/collection/common/render-suggest.js +1 -1
  127. package/dist/collection/common/render-suggest.js.map +1 -1
  128. package/dist/collection/components/_helpers/container/container.js +2 -1
  129. package/dist/collection/components/_helpers/container/container.js.map +1 -1
  130. package/dist/collection/components/_helpers/directory-selector/directory-selector.js +2 -1
  131. package/dist/collection/components/_helpers/directory-selector/directory-selector.js.map +1 -1
  132. package/dist/collection/components/_helpers/entity-selector/entity-selector.js +4 -2
  133. package/dist/collection/components/_helpers/entity-selector/entity-selector.js.map +1 -1
  134. package/dist/collection/components/_helpers/list-selector/list-selector-item/list-selector-item.js +1 -1
  135. package/dist/collection/components/_helpers/list-selector/list-selector-item/list-selector-item.js.map +1 -1
  136. package/dist/collection/components/ai-assistant/ai-assistant.js +14 -8
  137. package/dist/collection/components/ai-assistant/ai-assistant.js.map +1 -1
  138. package/dist/collection/components/bpm/application-declaration/bpm-app-declaration.js +3 -2
  139. package/dist/collection/components/bpm/application-declaration/bpm-app-declaration.js.map +1 -1
  140. package/dist/collection/components/bpm/export-xpdl/bpm-export-xpdl.js +4 -2
  141. package/dist/collection/components/bpm/export-xpdl/bpm-export-xpdl.js.map +1 -1
  142. package/dist/collection/components/bpm/import-files/bpm-import-files.js +2 -1
  143. package/dist/collection/components/bpm/import-files/bpm-import-files.js.map +1 -1
  144. package/dist/collection/components/bpm/sync-gam-roles/bpm-sync-gam-roles.js +2 -1
  145. package/dist/collection/components/bpm/sync-gam-roles/bpm-sync-gam-roles.js.map +1 -1
  146. package/dist/collection/components/bpm/task-documents/helpers.js +1 -1
  147. package/dist/collection/components/bpm/task-documents/helpers.js.map +1 -1
  148. package/dist/collection/components/bpm/task-documents/task-documents.js +9 -7
  149. package/dist/collection/components/bpm/task-documents/task-documents.js.map +1 -1
  150. package/dist/collection/components/bpm/timer-duration/bpm-timer-duration.js +2 -1
  151. package/dist/collection/components/bpm/timer-duration/bpm-timer-duration.js.map +1 -1
  152. package/dist/collection/components/chat/code-render.js +2 -2
  153. package/dist/collection/components/chat/code-render.js.map +1 -1
  154. package/dist/collection/components/current-user-info/current-user-info.js +3 -2
  155. package/dist/collection/components/current-user-info/current-user-info.js.map +1 -1
  156. package/dist/collection/components/dashboard-home/dashboard-home.js +3 -2
  157. package/dist/collection/components/dashboard-home/dashboard-home.js.map +1 -1
  158. package/dist/collection/components/data-selector/data-selector.js +3 -2
  159. package/dist/collection/components/data-selector/data-selector.js.map +1 -1
  160. package/dist/collection/components/data-type-selector/data-type-selector.js +4 -3
  161. package/dist/collection/components/data-type-selector/data-type-selector.js.map +1 -1
  162. package/dist/collection/components/deployment-tool/deployment-tool.js +18 -11
  163. package/dist/collection/components/deployment-tool/deployment-tool.js.map +1 -1
  164. package/dist/collection/components/deployment-tool/helpers.js +1 -4
  165. package/dist/collection/components/deployment-tool/helpers.js.map +1 -1
  166. package/dist/collection/components/design-import/design-import.js +26 -18
  167. package/dist/collection/components/design-import/design-import.js.map +1 -1
  168. package/dist/collection/components/design-import/helpers.js +1 -1
  169. package/dist/collection/components/design-import/helpers.js.map +1 -1
  170. package/dist/collection/components/file-uploader/file-uploader.js +44 -59
  171. package/dist/collection/components/file-uploader/file-uploader.js.map +1 -1
  172. package/dist/collection/components/gam-installation-settings/gam-installation-settings.js +2 -1
  173. package/dist/collection/components/gam-installation-settings/gam-installation-settings.js.map +1 -1
  174. package/dist/collection/components/kb-manager-import/kb-manager-import.js +7 -4
  175. package/dist/collection/components/kb-manager-import/kb-manager-import.js.map +1 -1
  176. package/dist/collection/components/modules/edit-module-server/edit-module-server.js +2 -1
  177. package/dist/collection/components/modules/edit-module-server/edit-module-server.js.map +1 -1
  178. package/dist/collection/components/modules/manage-module-references/manage-module-references.js +2 -2
  179. package/dist/collection/components/modules/manage-module-references/manage-module-references.js.map +1 -1
  180. package/dist/collection/components/modules/manage-module-references-v2/manage-module-references-v2.js +4 -13
  181. package/dist/collection/components/modules/manage-module-references-v2/manage-module-references-v2.js.map +1 -1
  182. package/dist/collection/components/navigation-report/navigation-report.js +6 -3
  183. package/dist/collection/components/navigation-report/navigation-report.js.map +1 -1
  184. package/dist/collection/components/new-environment/new-environment.js +15 -10
  185. package/dist/collection/components/new-environment/new-environment.js.map +1 -1
  186. package/dist/collection/components/new-kb/new-kb.js +32 -28
  187. package/dist/collection/components/new-kb/new-kb.js.map +1 -1
  188. package/dist/collection/components/new-object/new-object.js +8 -5
  189. package/dist/collection/components/new-object/new-object.js.map +1 -1
  190. package/dist/collection/components/new-version/new-version.js +2 -2
  191. package/dist/collection/components/new-version/new-version.js.map +1 -1
  192. package/dist/collection/components/object-selector/object-selector.js +5 -4
  193. package/dist/collection/components/object-selector/object-selector.js.map +1 -1
  194. package/dist/collection/components/open-api-import/open-api-import.js +8 -4
  195. package/dist/collection/components/open-api-import/open-api-import.js.map +1 -1
  196. package/dist/collection/components/references/helpers.js +13 -9
  197. package/dist/collection/components/references/helpers.js.map +1 -1
  198. package/dist/collection/components/references/references.js +11 -9
  199. package/dist/collection/components/references/references.js.map +1 -1
  200. package/dist/collection/components/select-kb-items/helpers.js +10 -5
  201. package/dist/collection/components/select-kb-items/helpers.js.map +1 -1
  202. package/dist/collection/components/select-kb-items/select-kb-items.js +2 -1
  203. package/dist/collection/components/select-kb-items/select-kb-items.js.map +1 -1
  204. package/dist/collection/components/select-user-team/helpers.js +1 -1
  205. package/dist/collection/components/select-user-team/helpers.js.map +1 -1
  206. package/dist/collection/components/select-user-team/select-user-team.js +2 -1
  207. package/dist/collection/components/select-user-team/select-user-team.js.map +1 -1
  208. package/dist/collection/components/sign-in-team/sign-in-team.js +2 -1
  209. package/dist/collection/components/sign-in-team/sign-in-team.js.map +1 -1
  210. package/dist/collection/components/splash/splash.js +3 -2
  211. package/dist/collection/components/splash/splash.js.map +1 -1
  212. package/dist/collection/components/start-page/start-page.js +6 -3
  213. package/dist/collection/components/start-page/start-page.js.map +1 -1
  214. package/dist/collection/components/team-dev/connect-gx-server/connect-gx-server.js +21 -16
  215. package/dist/collection/components/team-dev/connect-gx-server/connect-gx-server.js.map +1 -1
  216. package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js +8 -4
  217. package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js.map +1 -1
  218. package/dist/collection/components/team-dev/share-kb/share-kb.js +5 -2
  219. package/dist/collection/components/team-dev/share-kb/share-kb.js.map +1 -1
  220. package/dist/collection/components/team-dev/update/update.js +2 -1
  221. package/dist/collection/components/team-dev/update/update.js.map +1 -1
  222. package/dist/collection/components/team-dev/update-partial-selection/update-partial-selection.js +1 -1
  223. package/dist/collection/components/team-dev/update-partial-selection/update-partial-selection.js.map +1 -1
  224. package/dist/collection/components/welcome-page/welcome-page.js +7 -5
  225. package/dist/collection/components/welcome-page/welcome-page.js.map +1 -1
  226. package/dist/collection/components/ww-attributes/helpers.js +2 -1
  227. package/dist/collection/components/ww-attributes/helpers.js.map +1 -1
  228. package/dist/collection/components/ww-attributes/ww-attributes.js +11 -6
  229. package/dist/collection/components/ww-attributes/ww-attributes.js.map +1 -1
  230. package/dist/collection/components/ww-files/helpers.js +2 -1
  231. package/dist/collection/components/ww-files/helpers.js.map +1 -1
  232. package/dist/collection/components/ww-files/ww-files.js +18 -16
  233. package/dist/collection/components/ww-files/ww-files.js.map +1 -1
  234. package/dist/collection/components/ww-images/ww-images.js +5 -16
  235. package/dist/collection/components/ww-images/ww-images.js.map +1 -1
  236. package/dist/collection/index.js +4 -0
  237. package/dist/collection/index.js.map +1 -1
  238. package/dist/collection/testing/locale.e2e.js +3 -3
  239. package/dist/collection/testing/locale.e2e.js.map +1 -1
  240. package/dist/components/code-render.js +2 -2
  241. package/dist/components/code-render.js.map +1 -1
  242. package/dist/components/container.js +2 -1
  243. package/dist/components/container.js.map +1 -1
  244. package/dist/components/entity-selector.js +4 -2
  245. package/dist/components/entity-selector.js.map +1 -1
  246. package/dist/components/form-validation.js +2 -6
  247. package/dist/components/form-validation.js.map +1 -1
  248. package/dist/components/gx-ide-ai-assistant.js +14 -8
  249. package/dist/components/gx-ide-ai-assistant.js.map +1 -1
  250. package/dist/components/gx-ide-bpm-app-declaration.js +3 -2
  251. package/dist/components/gx-ide-bpm-app-declaration.js.map +1 -1
  252. package/dist/components/gx-ide-bpm-export-xpdl.js +4 -2
  253. package/dist/components/gx-ide-bpm-export-xpdl.js.map +1 -1
  254. package/dist/components/gx-ide-bpm-import-files.js +2 -1
  255. package/dist/components/gx-ide-bpm-import-files.js.map +1 -1
  256. package/dist/components/gx-ide-bpm-sync-gam-roles.js +2 -1
  257. package/dist/components/gx-ide-bpm-sync-gam-roles.js.map +1 -1
  258. package/dist/components/gx-ide-bpm-task-documents.js +10 -8
  259. package/dist/components/gx-ide-bpm-task-documents.js.map +1 -1
  260. package/dist/components/gx-ide-bpm-timer-duration.js +2 -1
  261. package/dist/components/gx-ide-bpm-timer-duration.js.map +1 -1
  262. package/dist/components/gx-ide-connect-gx-server.js +21 -16
  263. package/dist/components/gx-ide-connect-gx-server.js.map +1 -1
  264. package/dist/components/gx-ide-create-kb-from-server.js +8 -4
  265. package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
  266. package/dist/components/gx-ide-current-user-info.js +3 -2
  267. package/dist/components/gx-ide-current-user-info.js.map +1 -1
  268. package/dist/components/gx-ide-dashboard-home.js +3 -2
  269. package/dist/components/gx-ide-dashboard-home.js.map +1 -1
  270. package/dist/components/gx-ide-data-selector.js +3 -2
  271. package/dist/components/gx-ide-data-selector.js.map +1 -1
  272. package/dist/components/gx-ide-data-type-selector.js +4 -3
  273. package/dist/components/gx-ide-data-type-selector.js.map +1 -1
  274. package/dist/components/gx-ide-deployment-tool.js +19 -15
  275. package/dist/components/gx-ide-deployment-tool.js.map +1 -1
  276. package/dist/components/gx-ide-design-import.js +27 -19
  277. package/dist/components/gx-ide-design-import.js.map +1 -1
  278. package/dist/components/gx-ide-directory-selector.js +2 -1
  279. package/dist/components/gx-ide-directory-selector.js.map +1 -1
  280. package/dist/components/gx-ide-edit-module-server.js +2 -1
  281. package/dist/components/gx-ide-edit-module-server.js.map +1 -1
  282. package/dist/components/gx-ide-file-uploader.js +44 -59
  283. package/dist/components/gx-ide-file-uploader.js.map +1 -1
  284. package/dist/components/gx-ide-gam-installation-settings.js +2 -1
  285. package/dist/components/gx-ide-gam-installation-settings.js.map +1 -1
  286. package/dist/components/gx-ide-kb-manager-import.js +7 -4
  287. package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
  288. package/dist/components/gx-ide-manage-module-references-v2.js +4 -13
  289. package/dist/components/gx-ide-manage-module-references-v2.js.map +1 -1
  290. package/dist/components/gx-ide-manage-module-references.js +2 -2
  291. package/dist/components/gx-ide-manage-module-references.js.map +1 -1
  292. package/dist/components/gx-ide-navigation-report.js +6 -3
  293. package/dist/components/gx-ide-navigation-report.js.map +1 -1
  294. package/dist/components/gx-ide-new-environment.js +15 -10
  295. package/dist/components/gx-ide-new-environment.js.map +1 -1
  296. package/dist/components/gx-ide-new-kb.js +32 -28
  297. package/dist/components/gx-ide-new-kb.js.map +1 -1
  298. package/dist/components/gx-ide-new-object.js +8 -5
  299. package/dist/components/gx-ide-new-object.js.map +1 -1
  300. package/dist/components/gx-ide-new-version.js +2 -2
  301. package/dist/components/gx-ide-new-version.js.map +1 -1
  302. package/dist/components/gx-ide-object-selector.js +5 -4
  303. package/dist/components/gx-ide-object-selector.js.map +1 -1
  304. package/dist/components/gx-ide-open-api-import.js +8 -4
  305. package/dist/components/gx-ide-open-api-import.js.map +1 -1
  306. package/dist/components/gx-ide-references.js +22 -17
  307. package/dist/components/gx-ide-references.js.map +1 -1
  308. package/dist/components/gx-ide-select-kb-items.js +12 -6
  309. package/dist/components/gx-ide-select-kb-items.js.map +1 -1
  310. package/dist/components/gx-ide-select-user-team.js +3 -2
  311. package/dist/components/gx-ide-select-user-team.js.map +1 -1
  312. package/dist/components/gx-ide-share-kb.js +5 -2
  313. package/dist/components/gx-ide-share-kb.js.map +1 -1
  314. package/dist/components/gx-ide-sign-in-team.js +2 -1
  315. package/dist/components/gx-ide-sign-in-team.js.map +1 -1
  316. package/dist/components/gx-ide-splash.js +3 -2
  317. package/dist/components/gx-ide-splash.js.map +1 -1
  318. package/dist/components/gx-ide-start-page.js +6 -3
  319. package/dist/components/gx-ide-start-page.js.map +1 -1
  320. package/dist/components/gx-ide-team-dev-update-partial-selection.js +1 -1
  321. package/dist/components/gx-ide-team-dev-update-partial-selection.js.map +1 -1
  322. package/dist/components/gx-ide-team-dev-update.js +2 -1
  323. package/dist/components/gx-ide-team-dev-update.js.map +1 -1
  324. package/dist/components/gx-ide-welcome-page.js +7 -5
  325. package/dist/components/gx-ide-welcome-page.js.map +1 -1
  326. package/dist/components/gx-ide-ww-attributes.js +13 -7
  327. package/dist/components/gx-ide-ww-attributes.js.map +1 -1
  328. package/dist/components/gx-ide-ww-files.js +20 -17
  329. package/dist/components/gx-ide-ww-files.js.map +1 -1
  330. package/dist/components/gx-ide-ww-images.js +5 -16
  331. package/dist/components/gx-ide-ww-images.js.map +1 -1
  332. package/dist/components/helpers.js +5 -5
  333. package/dist/components/helpers.js.map +1 -1
  334. package/dist/components/index.js +6 -0
  335. package/dist/components/index.js.map +1 -1
  336. package/dist/components/list-selector-item.js +1 -1
  337. package/dist/components/list-selector-item.js.map +1 -1
  338. package/dist/components/locale.js +3 -3
  339. package/dist/components/locale.js.map +1 -1
  340. package/dist/esm/{code-render-f3afd300.js → code-render-53b3b0bd.js} +3 -3
  341. package/dist/esm/code-render-53b3b0bd.js.map +1 -0
  342. package/dist/esm/{form-validation-71dca8c6.js → form-validation-cd0215c6.js} +3 -7
  343. package/dist/{genexus-ide-ui/p-549b8f0c.js.map → esm/form-validation-cd0215c6.js.map} +1 -1
  344. package/dist/esm/gx-ide-about.entry.js +1 -1
  345. package/dist/esm/gx-ide-ai-assistant.entry.js +15 -9
  346. package/dist/esm/gx-ide-ai-assistant.entry.js.map +1 -1
  347. package/dist/esm/gx-ide-ai-message.entry.js +2 -2
  348. package/dist/esm/gx-ide-bpm-app-declaration.entry.js +4 -3
  349. package/dist/esm/gx-ide-bpm-app-declaration.entry.js.map +1 -1
  350. package/dist/esm/gx-ide-bpm-assign-roles.entry.js +1 -1
  351. package/dist/esm/gx-ide-bpm-export-xpdl.entry.js +5 -3
  352. package/dist/esm/gx-ide-bpm-export-xpdl.entry.js.map +1 -1
  353. package/dist/esm/gx-ide-bpm-import-files.entry.js +3 -2
  354. package/dist/esm/gx-ide-bpm-import-files.entry.js.map +1 -1
  355. package/dist/esm/gx-ide-bpm-import-gxpm.entry.js +1 -1
  356. package/dist/esm/gx-ide-bpm-objects-selector.entry.js +1 -1
  357. package/dist/esm/gx-ide-bpm-sync-gam-roles.entry.js +3 -2
  358. package/dist/esm/gx-ide-bpm-sync-gam-roles.entry.js.map +1 -1
  359. package/dist/esm/gx-ide-bpm-task-documents.entry.js +11 -9
  360. package/dist/esm/gx-ide-bpm-task-documents.entry.js.map +1 -1
  361. package/dist/esm/gx-ide-bpm-timer-duration.entry.js +3 -2
  362. package/dist/esm/gx-ide-bpm-timer-duration.entry.js.map +1 -1
  363. package/dist/esm/gx-ide-card.entry.js +1 -1
  364. package/dist/esm/gx-ide-chat-container_2.entry.js +1 -1
  365. package/dist/esm/gx-ide-connect-gx-server.entry.js +23 -18
  366. package/dist/esm/gx-ide-connect-gx-server.entry.js.map +1 -1
  367. package/dist/esm/gx-ide-container_2.entry.js +2 -1
  368. package/dist/esm/gx-ide-container_2.entry.js.map +1 -1
  369. package/dist/esm/gx-ide-create-kb-from-server.entry.js +10 -6
  370. package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
  371. package/dist/esm/gx-ide-current-user-info.entry.js +4 -3
  372. package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
  373. package/dist/esm/gx-ide-dashboard-home.entry.js +5 -4
  374. package/dist/esm/gx-ide-dashboard-home.entry.js.map +1 -1
  375. package/dist/esm/gx-ide-data-selector.entry.js +4 -3
  376. package/dist/esm/gx-ide-data-selector.entry.js.map +1 -1
  377. package/dist/esm/gx-ide-data-type-selector.entry.js +5 -4
  378. package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -1
  379. package/dist/esm/gx-ide-deployment-tool.entry.js +20 -16
  380. package/dist/esm/gx-ide-deployment-tool.entry.js.map +1 -1
  381. package/dist/esm/gx-ide-design-import.entry.js +28 -20
  382. package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
  383. package/dist/esm/gx-ide-directory-selector.entry.js +2 -1
  384. package/dist/esm/gx-ide-directory-selector.entry.js.map +1 -1
  385. package/dist/esm/gx-ide-edit-module-server.entry.js +3 -2
  386. package/dist/esm/gx-ide-edit-module-server.entry.js.map +1 -1
  387. package/dist/esm/gx-ide-entity-selector.entry.js +5 -3
  388. package/dist/esm/gx-ide-entity-selector.entry.js.map +1 -1
  389. package/dist/esm/gx-ide-file-uploader.entry.js +45 -60
  390. package/dist/esm/gx-ide-file-uploader.entry.js.map +1 -1
  391. package/dist/esm/gx-ide-gam-installation-settings.entry.js +3 -2
  392. package/dist/esm/gx-ide-gam-installation-settings.entry.js.map +1 -1
  393. package/dist/esm/gx-ide-kb-manager-export.entry.js +1 -1
  394. package/dist/esm/gx-ide-kb-manager-import.entry.js +8 -5
  395. package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
  396. package/dist/esm/gx-ide-list-selector_2.entry.js +1 -1
  397. package/dist/esm/gx-ide-list-selector_2.entry.js.map +1 -1
  398. package/dist/esm/gx-ide-manage-module-references-v2.entry.js +5 -14
  399. package/dist/esm/gx-ide-manage-module-references-v2.entry.js.map +1 -1
  400. package/dist/esm/gx-ide-manage-module-references.entry.js +3 -3
  401. package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -1
  402. package/dist/esm/gx-ide-navigation-report.entry.js +7 -4
  403. package/dist/esm/gx-ide-navigation-report.entry.js.map +1 -1
  404. package/dist/esm/gx-ide-new-environment.entry.js +18 -13
  405. package/dist/esm/gx-ide-new-environment.entry.js.map +1 -1
  406. package/dist/esm/gx-ide-new-kb.entry.js +35 -31
  407. package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
  408. package/dist/esm/gx-ide-new-object.entry.js +9 -6
  409. package/dist/esm/gx-ide-new-object.entry.js.map +1 -1
  410. package/dist/esm/gx-ide-new-version.entry.js +3 -3
  411. package/dist/esm/gx-ide-new-version.entry.js.map +1 -1
  412. package/dist/esm/gx-ide-object-selector.entry.js +7 -6
  413. package/dist/esm/gx-ide-object-selector.entry.js.map +1 -1
  414. package/dist/esm/gx-ide-open-api-import.entry.js +9 -5
  415. package/dist/esm/gx-ide-open-api-import.entry.js.map +1 -1
  416. package/dist/esm/gx-ide-references.entry.js +23 -18
  417. package/dist/esm/gx-ide-references.entry.js.map +1 -1
  418. package/dist/esm/gx-ide-sc-chat-container.entry.js +1 -1
  419. package/dist/esm/gx-ide-select-kb-items.entry.js +13 -7
  420. package/dist/esm/gx-ide-select-kb-items.entry.js.map +1 -1
  421. package/dist/esm/gx-ide-select-user-team.entry.js +4 -3
  422. package/dist/esm/gx-ide-select-user-team.entry.js.map +1 -1
  423. package/dist/esm/gx-ide-share-kb.entry.js +7 -4
  424. package/dist/esm/gx-ide-share-kb.entry.js.map +1 -1
  425. package/dist/esm/gx-ide-sign-in-team.entry.js +3 -2
  426. package/dist/esm/gx-ide-sign-in-team.entry.js.map +1 -1
  427. package/dist/esm/gx-ide-sign-in.entry.js +1 -1
  428. package/dist/esm/gx-ide-splash.entry.js +4 -3
  429. package/dist/esm/gx-ide-splash.entry.js.map +1 -1
  430. package/dist/esm/gx-ide-start-page.entry.js +7 -4
  431. package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
  432. package/dist/esm/gx-ide-status-buttons.entry.js +1 -1
  433. package/dist/esm/gx-ide-team-dev-commit.entry.js +2 -2
  434. package/dist/esm/gx-ide-team-dev-select-recent-comment.entry.js +1 -1
  435. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js +2 -2
  436. package/dist/esm/gx-ide-team-dev-update-partial-selection.entry.js.map +1 -1
  437. package/dist/esm/gx-ide-team-dev-update-to-revision.entry.js +1 -1
  438. package/dist/esm/gx-ide-team-dev-update.entry.js +4 -3
  439. package/dist/esm/gx-ide-team-dev-update.entry.js.map +1 -1
  440. package/dist/esm/gx-ide-template.entry.js +1 -1
  441. package/dist/esm/gx-ide-welcome-page.entry.js +8 -6
  442. package/dist/esm/gx-ide-welcome-page.entry.js.map +1 -1
  443. package/dist/esm/gx-ide-wf-settings.entry.js +1 -1
  444. package/dist/esm/gx-ide-ww-attributes.entry.js +14 -8
  445. package/dist/esm/gx-ide-ww-attributes.entry.js.map +1 -1
  446. package/dist/esm/gx-ide-ww-files.entry.js +21 -18
  447. package/dist/esm/gx-ide-ww-files.entry.js.map +1 -1
  448. package/dist/esm/gx-ide-ww-images.entry.js +7 -18
  449. package/dist/esm/gx-ide-ww-images.entry.js.map +1 -1
  450. package/dist/esm/{helpers-5f1c9a32.js → helpers-10479d69.js} +6 -6
  451. package/dist/esm/helpers-10479d69.js.map +1 -0
  452. package/dist/esm/index.js +7 -1
  453. package/dist/esm/index.js.map +1 -1
  454. package/dist/esm/{locale-643afe17.js → locale-e5107fad.js} +4 -4
  455. package/dist/esm/locale-e5107fad.js.map +1 -0
  456. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  457. package/dist/genexus-ide-ui/index.esm.js +7 -1
  458. package/dist/genexus-ide-ui/index.esm.js.map +1 -1
  459. package/dist/genexus-ide-ui/{p-11dccb8f.entry.js → p-01d96378.entry.js} +16 -17
  460. package/dist/genexus-ide-ui/p-01d96378.entry.js.map +1 -0
  461. package/dist/genexus-ide-ui/{p-75e1aa31.entry.js → p-036d005d.entry.js} +5 -4
  462. package/dist/genexus-ide-ui/p-036d005d.entry.js.map +1 -0
  463. package/dist/genexus-ide-ui/{p-f5a48b33.entry.js → p-04205aa4.entry.js} +6 -5
  464. package/dist/genexus-ide-ui/p-04205aa4.entry.js.map +1 -0
  465. package/dist/genexus-ide-ui/{p-f6ceb01a.entry.js → p-04c6bd23.entry.js} +29 -28
  466. package/dist/genexus-ide-ui/p-04c6bd23.entry.js.map +1 -0
  467. package/dist/genexus-ide-ui/{p-f52bcdac.entry.js → p-0550fd5f.entry.js} +2 -2
  468. package/dist/genexus-ide-ui/{p-e1d75f00.entry.js → p-05b04291.entry.js} +2 -2
  469. package/dist/genexus-ide-ui/{p-e1d75f00.entry.js.map → p-05b04291.entry.js.map} +1 -1
  470. package/dist/genexus-ide-ui/{p-bfd9066c.entry.js → p-0bdf34f2.entry.js} +4 -6
  471. package/dist/genexus-ide-ui/p-0bdf34f2.entry.js.map +1 -0
  472. package/dist/genexus-ide-ui/{p-2be58a7a.entry.js → p-14165308.entry.js} +2 -2
  473. package/dist/genexus-ide-ui/{p-7cedb0f0.entry.js → p-1bc2613e.entry.js} +69 -66
  474. package/dist/genexus-ide-ui/p-1bc2613e.entry.js.map +1 -0
  475. package/dist/genexus-ide-ui/{p-c5cca204.entry.js → p-1c7ea1cb.entry.js} +11 -10
  476. package/dist/genexus-ide-ui/p-1c7ea1cb.entry.js.map +1 -0
  477. package/dist/genexus-ide-ui/{p-daa29451.entry.js → p-1dd7be84.entry.js} +17 -14
  478. package/dist/genexus-ide-ui/p-1dd7be84.entry.js.map +1 -0
  479. package/dist/genexus-ide-ui/{p-549b8f0c.js → p-289c3290.js} +15 -16
  480. package/dist/genexus-ide-ui/p-289c3290.js.map +1 -0
  481. package/dist/genexus-ide-ui/{p-032b4a81.entry.js → p-29c69938.entry.js} +22 -19
  482. package/dist/genexus-ide-ui/p-29c69938.entry.js.map +1 -0
  483. package/dist/genexus-ide-ui/{p-db4f756a.entry.js → p-3085add2.entry.js} +188 -176
  484. package/dist/genexus-ide-ui/p-3085add2.entry.js.map +1 -0
  485. package/dist/genexus-ide-ui/{p-857866f8.js → p-311eedf3.js} +9 -8
  486. package/dist/genexus-ide-ui/p-311eedf3.js.map +1 -0
  487. package/dist/genexus-ide-ui/{p-2e90a13a.entry.js → p-31beae9e.entry.js} +3 -2
  488. package/dist/genexus-ide-ui/p-31beae9e.entry.js.map +1 -0
  489. package/dist/genexus-ide-ui/{p-9a39e49c.entry.js → p-35f9ebbc.entry.js} +2 -2
  490. package/dist/genexus-ide-ui/{p-db4750ff.entry.js → p-385c9544.entry.js} +147 -138
  491. package/dist/genexus-ide-ui/p-385c9544.entry.js.map +1 -0
  492. package/dist/genexus-ide-ui/{p-8f1f4126.entry.js → p-3da8db15.entry.js} +9 -9
  493. package/dist/genexus-ide-ui/p-3da8db15.entry.js.map +1 -0
  494. package/dist/genexus-ide-ui/{p-b1833747.entry.js → p-4538dea5.entry.js} +31 -26
  495. package/dist/genexus-ide-ui/p-4538dea5.entry.js.map +1 -0
  496. package/dist/genexus-ide-ui/{p-6dc05a27.entry.js → p-45996535.entry.js} +4 -3
  497. package/dist/genexus-ide-ui/p-45996535.entry.js.map +1 -0
  498. package/dist/genexus-ide-ui/{p-a6029d9a.entry.js → p-48062d23.entry.js} +128 -116
  499. package/dist/genexus-ide-ui/p-48062d23.entry.js.map +1 -0
  500. package/dist/genexus-ide-ui/{p-4d929210.entry.js → p-4b38fffc.entry.js} +2 -2
  501. package/dist/genexus-ide-ui/{p-d1cc4724.entry.js → p-4d0ba4f6.entry.js} +8 -15
  502. package/dist/genexus-ide-ui/p-4d0ba4f6.entry.js.map +1 -0
  503. package/dist/genexus-ide-ui/{p-66d9269a.entry.js → p-4e943649.entry.js} +19 -16
  504. package/dist/genexus-ide-ui/p-4e943649.entry.js.map +1 -0
  505. package/dist/genexus-ide-ui/{p-ec01c70c.entry.js → p-67e0b419.entry.js} +7 -6
  506. package/dist/genexus-ide-ui/p-67e0b419.entry.js.map +1 -0
  507. package/dist/genexus-ide-ui/{p-45d2fa91.entry.js → p-68969051.entry.js} +12 -11
  508. package/dist/genexus-ide-ui/p-68969051.entry.js.map +1 -0
  509. package/dist/genexus-ide-ui/{p-9b238bf7.entry.js → p-690942cb.entry.js} +178 -173
  510. package/dist/genexus-ide-ui/p-690942cb.entry.js.map +1 -0
  511. package/dist/genexus-ide-ui/{p-b211bca8.entry.js → p-6b957e82.entry.js} +2 -2
  512. package/dist/genexus-ide-ui/{p-be794132.entry.js → p-6f898249.entry.js} +233 -228
  513. package/dist/genexus-ide-ui/p-6f898249.entry.js.map +1 -0
  514. package/dist/genexus-ide-ui/{p-29575656.entry.js → p-704499e5.entry.js} +116 -107
  515. package/dist/genexus-ide-ui/p-704499e5.entry.js.map +1 -0
  516. package/dist/genexus-ide-ui/{p-ac0438d6.entry.js → p-767e0f6d.entry.js} +12 -11
  517. package/dist/genexus-ide-ui/p-767e0f6d.entry.js.map +1 -0
  518. package/dist/genexus-ide-ui/{p-6168d48c.entry.js → p-7abe2214.entry.js} +167 -160
  519. package/dist/genexus-ide-ui/p-7abe2214.entry.js.map +1 -0
  520. package/dist/genexus-ide-ui/{p-50eaa96d.entry.js → p-7d8812b0.entry.js} +99 -89
  521. package/dist/genexus-ide-ui/p-7d8812b0.entry.js.map +1 -0
  522. package/dist/genexus-ide-ui/{p-9c690c36.entry.js → p-88c81f18.entry.js} +13 -12
  523. package/dist/genexus-ide-ui/p-88c81f18.entry.js.map +1 -0
  524. package/dist/genexus-ide-ui/{p-5e05f830.entry.js → p-8cb937b7.entry.js} +35 -31
  525. package/dist/genexus-ide-ui/p-8cb937b7.entry.js.map +1 -0
  526. package/dist/genexus-ide-ui/p-9ddea83b.js +146 -0
  527. package/dist/genexus-ide-ui/p-9ddea83b.js.map +1 -0
  528. package/dist/genexus-ide-ui/{p-2dbf722d.entry.js → p-9fa1200f.entry.js} +75 -69
  529. package/dist/genexus-ide-ui/p-9fa1200f.entry.js.map +1 -0
  530. package/dist/genexus-ide-ui/{p-0e53f1ef.entry.js → p-a1415a9c.entry.js} +161 -159
  531. package/dist/genexus-ide-ui/p-a1415a9c.entry.js.map +1 -0
  532. package/dist/genexus-ide-ui/{p-c30b2104.entry.js → p-a47d71eb.entry.js} +11 -9
  533. package/dist/genexus-ide-ui/p-a47d71eb.entry.js.map +1 -0
  534. package/dist/genexus-ide-ui/{p-f315c6e0.entry.js → p-aab809c4.entry.js} +2 -2
  535. package/dist/genexus-ide-ui/{p-f5879a41.entry.js → p-b1851e6b.entry.js} +3 -3
  536. package/dist/genexus-ide-ui/{p-f5879a41.entry.js.map → p-b1851e6b.entry.js.map} +1 -1
  537. package/dist/genexus-ide-ui/{p-95f831a8.entry.js → p-b2928645.entry.js} +2 -2
  538. package/dist/genexus-ide-ui/{p-39c527ff.entry.js → p-b58fb87b.entry.js} +2 -2
  539. package/dist/genexus-ide-ui/{p-a86a8692.entry.js → p-c38ce0bf.entry.js} +36 -32
  540. package/dist/genexus-ide-ui/p-c38ce0bf.entry.js.map +1 -0
  541. package/dist/genexus-ide-ui/{p-3edbf07d.js → p-c5178973.js} +3 -3
  542. package/dist/genexus-ide-ui/{p-3edbf07d.js.map → p-c5178973.js.map} +1 -1
  543. package/dist/genexus-ide-ui/{p-0d83a34d.entry.js → p-c7badbf1.entry.js} +66 -62
  544. package/dist/genexus-ide-ui/p-c7badbf1.entry.js.map +1 -0
  545. package/dist/genexus-ide-ui/{p-970d16ca.entry.js → p-c91af626.entry.js} +15 -15
  546. package/dist/genexus-ide-ui/{p-970d16ca.entry.js.map → p-c91af626.entry.js.map} +1 -1
  547. package/dist/genexus-ide-ui/{p-8b046b4b.entry.js → p-d095a37c.entry.js} +10 -9
  548. package/dist/genexus-ide-ui/p-d095a37c.entry.js.map +1 -0
  549. package/dist/genexus-ide-ui/{p-e37e95e7.entry.js → p-d2107cb2.entry.js} +3 -3
  550. package/dist/genexus-ide-ui/{p-353810b8.entry.js → p-d3767a7d.entry.js} +104 -99
  551. package/dist/genexus-ide-ui/p-d3767a7d.entry.js.map +1 -0
  552. package/dist/genexus-ide-ui/{p-02fc47cd.entry.js → p-d8379699.entry.js} +2 -2
  553. package/dist/genexus-ide-ui/{p-cdf8b082.entry.js → p-da473001.entry.js} +2 -2
  554. package/dist/genexus-ide-ui/{p-501c7b1f.entry.js → p-de7f0c1f.entry.js} +22 -19
  555. package/dist/genexus-ide-ui/p-de7f0c1f.entry.js.map +1 -0
  556. package/dist/genexus-ide-ui/{p-5da3e999.entry.js → p-ded7444c.entry.js} +17 -16
  557. package/dist/genexus-ide-ui/p-ded7444c.entry.js.map +1 -0
  558. package/dist/genexus-ide-ui/{p-9a9ee1ee.entry.js → p-e24902a0.entry.js} +2 -2
  559. package/dist/genexus-ide-ui/{p-5a42428d.entry.js → p-e28e6bc4.entry.js} +15 -14
  560. package/dist/genexus-ide-ui/p-e28e6bc4.entry.js.map +1 -0
  561. package/dist/genexus-ide-ui/{p-7782e1b8.entry.js → p-e502c2fd.entry.js} +61 -56
  562. package/dist/genexus-ide-ui/p-e502c2fd.entry.js.map +1 -0
  563. package/dist/genexus-ide-ui/{p-f2bd9044.entry.js → p-e7fb3ee3.entry.js} +2 -2
  564. package/dist/genexus-ide-ui/{p-e5571f49.entry.js → p-eb9e760d.entry.js} +18 -18
  565. package/dist/genexus-ide-ui/p-eb9e760d.entry.js.map +1 -0
  566. package/dist/genexus-ide-ui/{p-eb51429c.entry.js → p-ec0809a7.entry.js} +2 -2
  567. package/dist/genexus-ide-ui/{p-460db3ff.entry.js → p-ecba870e.entry.js} +3 -3
  568. package/dist/genexus-ide-ui/{p-e26e05c7.entry.js → p-f49bb305.entry.js} +18 -12
  569. package/dist/genexus-ide-ui/p-f49bb305.entry.js.map +1 -0
  570. package/dist/genexus-ide-ui/{p-8636a0bd.entry.js → p-f722955f.entry.js} +2 -2
  571. package/dist/genexus-ide-ui/{p-a8cc41e4.entry.js → p-f7421997.entry.js} +61 -58
  572. package/dist/genexus-ide-ui/p-f7421997.entry.js.map +1 -0
  573. package/dist/types/index.d.ts +4 -0
  574. package/package.json +3 -3
  575. package/dist/cjs/code-render-0e9837c4.js.map +0 -1
  576. package/dist/cjs/form-validation-ffe2b957.js.map +0 -1
  577. package/dist/cjs/helpers-e5a13fa5.js.map +0 -1
  578. package/dist/cjs/locale-36b93b1b.js.map +0 -1
  579. package/dist/esm/code-render-f3afd300.js.map +0 -1
  580. package/dist/esm/form-validation-71dca8c6.js.map +0 -1
  581. package/dist/esm/helpers-5f1c9a32.js.map +0 -1
  582. package/dist/esm/locale-643afe17.js.map +0 -1
  583. package/dist/genexus-ide-ui/p-032b4a81.entry.js.map +0 -1
  584. package/dist/genexus-ide-ui/p-0d83a34d.entry.js.map +0 -1
  585. package/dist/genexus-ide-ui/p-0e53f1ef.entry.js.map +0 -1
  586. package/dist/genexus-ide-ui/p-11dccb8f.entry.js.map +0 -1
  587. package/dist/genexus-ide-ui/p-29575656.entry.js.map +0 -1
  588. package/dist/genexus-ide-ui/p-2dbf722d.entry.js.map +0 -1
  589. package/dist/genexus-ide-ui/p-2e90a13a.entry.js.map +0 -1
  590. package/dist/genexus-ide-ui/p-353810b8.entry.js.map +0 -1
  591. package/dist/genexus-ide-ui/p-45d2fa91.entry.js.map +0 -1
  592. package/dist/genexus-ide-ui/p-501c7b1f.entry.js.map +0 -1
  593. package/dist/genexus-ide-ui/p-50eaa96d.entry.js.map +0 -1
  594. package/dist/genexus-ide-ui/p-51601b85.js +0 -145
  595. package/dist/genexus-ide-ui/p-51601b85.js.map +0 -1
  596. package/dist/genexus-ide-ui/p-5a42428d.entry.js.map +0 -1
  597. package/dist/genexus-ide-ui/p-5da3e999.entry.js.map +0 -1
  598. package/dist/genexus-ide-ui/p-5e05f830.entry.js.map +0 -1
  599. package/dist/genexus-ide-ui/p-6168d48c.entry.js.map +0 -1
  600. package/dist/genexus-ide-ui/p-66d9269a.entry.js.map +0 -1
  601. package/dist/genexus-ide-ui/p-6dc05a27.entry.js.map +0 -1
  602. package/dist/genexus-ide-ui/p-75e1aa31.entry.js.map +0 -1
  603. package/dist/genexus-ide-ui/p-7782e1b8.entry.js.map +0 -1
  604. package/dist/genexus-ide-ui/p-7cedb0f0.entry.js.map +0 -1
  605. package/dist/genexus-ide-ui/p-857866f8.js.map +0 -1
  606. package/dist/genexus-ide-ui/p-8b046b4b.entry.js.map +0 -1
  607. package/dist/genexus-ide-ui/p-8f1f4126.entry.js.map +0 -1
  608. package/dist/genexus-ide-ui/p-9b238bf7.entry.js.map +0 -1
  609. package/dist/genexus-ide-ui/p-9c690c36.entry.js.map +0 -1
  610. package/dist/genexus-ide-ui/p-a6029d9a.entry.js.map +0 -1
  611. package/dist/genexus-ide-ui/p-a86a8692.entry.js.map +0 -1
  612. package/dist/genexus-ide-ui/p-a8cc41e4.entry.js.map +0 -1
  613. package/dist/genexus-ide-ui/p-ac0438d6.entry.js.map +0 -1
  614. package/dist/genexus-ide-ui/p-b1833747.entry.js.map +0 -1
  615. package/dist/genexus-ide-ui/p-be794132.entry.js.map +0 -1
  616. package/dist/genexus-ide-ui/p-bfd9066c.entry.js.map +0 -1
  617. package/dist/genexus-ide-ui/p-c30b2104.entry.js.map +0 -1
  618. package/dist/genexus-ide-ui/p-c5cca204.entry.js.map +0 -1
  619. package/dist/genexus-ide-ui/p-d1cc4724.entry.js.map +0 -1
  620. package/dist/genexus-ide-ui/p-daa29451.entry.js.map +0 -1
  621. package/dist/genexus-ide-ui/p-db4750ff.entry.js.map +0 -1
  622. package/dist/genexus-ide-ui/p-db4f756a.entry.js.map +0 -1
  623. package/dist/genexus-ide-ui/p-e26e05c7.entry.js.map +0 -1
  624. package/dist/genexus-ide-ui/p-e5571f49.entry.js.map +0 -1
  625. package/dist/genexus-ide-ui/p-ec01c70c.entry.js.map +0 -1
  626. package/dist/genexus-ide-ui/p-f5a48b33.entry.js.map +0 -1
  627. package/dist/genexus-ide-ui/p-f6ceb01a.entry.js.map +0 -1
  628. /package/dist/genexus-ide-ui/{p-f52bcdac.entry.js.map → p-0550fd5f.entry.js.map} +0 -0
  629. /package/dist/genexus-ide-ui/{p-2be58a7a.entry.js.map → p-14165308.entry.js.map} +0 -0
  630. /package/dist/genexus-ide-ui/{p-9a39e49c.entry.js.map → p-35f9ebbc.entry.js.map} +0 -0
  631. /package/dist/genexus-ide-ui/{p-4d929210.entry.js.map → p-4b38fffc.entry.js.map} +0 -0
  632. /package/dist/genexus-ide-ui/{p-b211bca8.entry.js.map → p-6b957e82.entry.js.map} +0 -0
  633. /package/dist/genexus-ide-ui/{p-f315c6e0.entry.js.map → p-aab809c4.entry.js.map} +0 -0
  634. /package/dist/genexus-ide-ui/{p-95f831a8.entry.js.map → p-b2928645.entry.js.map} +0 -0
  635. /package/dist/genexus-ide-ui/{p-39c527ff.entry.js.map → p-b58fb87b.entry.js.map} +0 -0
  636. /package/dist/genexus-ide-ui/{p-e37e95e7.entry.js.map → p-d2107cb2.entry.js.map} +0 -0
  637. /package/dist/genexus-ide-ui/{p-02fc47cd.entry.js.map → p-d8379699.entry.js.map} +0 -0
  638. /package/dist/genexus-ide-ui/{p-cdf8b082.entry.js.map → p-da473001.entry.js.map} +0 -0
  639. /package/dist/genexus-ide-ui/{p-9a9ee1ee.entry.js.map → p-e24902a0.entry.js.map} +0 -0
  640. /package/dist/genexus-ide-ui/{p-f2bd9044.entry.js.map → p-e7fb3ee3.entry.js.map} +0 -0
  641. /package/dist/genexus-ide-ui/{p-eb51429c.entry.js.map → p-ec0809a7.entry.js.map} +0 -0
  642. /package/dist/genexus-ide-ui/{p-460db3ff.entry.js.map → p-ecba870e.entry.js.map} +0 -0
  643. /package/dist/genexus-ide-ui/{p-8636a0bd.entry.js.map → p-f722955f.entry.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["aiAssistantCss","CSS_BUNDLES","GxIdeTemplate","this","setFocus","scrollToBottomFlag","evaluateAiInProgress","messages","length","type","aIInProgress","evaluateAiStatus","assistantStatus","renderMessage","message","i","text","h","style","messageType","hidden","filterValue","key","toString","translations","_componentLocale","aiMessage","aiAssistantHostRef","el","textAreaInputHandler","userHasTyped","showFilter","filterEl","value","promptEnterHandler","async","prompt","promptTrimmed","detail","replace","textAreaEl","setTimeout","lastUserMessageHeight","offsetHeight","addMessage","userMessageCallback","then","filterMessagesHandler","e","toLowerCase","filteredMessages","forEach","includes","clearMessages","focus","clearCallback","attachShortcuts","focusShortcuts","ctrlFocusIndex","findIndex","toLocaleLowerCase","shiftFocusIndex","cmdKeyIndex","keyFocus","find","document","addEventListener","ctrlKey","shiftKey","metaKey","promptArrowUpHandler","lastUserMessage","textareaShadowPart","height","toggleFilterHandler","promptFocusHandler","promptHasFocus","promptBlurHandler","scrollToBottom","messagesWrapperEl","scrollTo","scrollHeight","scrollTop","clientHeight","_GxIdeTemplate_mouseDownListener","set","removeAttribute","_GxIdeTemplate_mouseUpListener","setAttribute","watchAIInProgressHandler","aiInProgress","watchMessagesHandler","componentWillLoad","Locale","getComponentStrings","componentDidLoad","shadowRoot","querySelector","__classPrivateFieldGet","componentDidRender","handleFocus","event","preventDefault","clear","updateInProgressMessage","pop","push","render","Host","class","tabindex","model","componentName","filter","icon","onClick","disabled","onInput","ref","scrollable","map","ai","promptValue","maxHeight","promptMaxHeight","placeholder","processingQueryPlaceholder","promptPlaceholder","onEnter","onArrowUpPressed","onBlur","onFocus","prompt__shortcuts","shortcut"],"sources":["src/components/ai-assistant/ai-assistant.scss?tag=gx-ide-ai-assistant&encapsulation=shadow","src/components/ai-assistant/ai-assistant.tsx"],"sourcesContent":["@import \"../../global/gx-ide-common.scss\";\n@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/gemini/dist/gemini/globals/mixins.scss\";\n\n:host {\n font-family: var(--mer-font-family--primary);\n display: block;\n height: 100%;\n flex-basis: 286px;\n flex-shrink: 0;\n height: 100%;\n overflow-y: auto;\n}\n.gx-ide-main-wrapper {\n padding: 0 10px 52px 10px;\n background-color: var(--mer-surface);\n height: 100%;\n display: grid;\n grid-template-rows: auto 1fr auto;\n gap: var(--mer-spacing--sm);\n}\n\n/*--- Header ---*/\n.header {\n padding-block-start: var(--mer-spacing--sm);\n display: flex;\n flex-direction: column;\n\n &__actions-wrapper {\n display: flex;\n gap: var(--ai-assistant-header-actions-gap);\n margin-inline-start: auto;\n }\n &__first-row {\n display: flex;\n gap: var(--mer-spacing--xs);\n align-items: center;\n justify-content: space-between;\n }\n &__filter {\n margin-block-start: var(--mer-spacing--xs);\n }\n &__second-row {\n transition: 100ms grid-template-rows;\n display: grid;\n grid-template-rows: 0fr;\n\n &--visible {\n grid-template-rows: 1fr;\n }\n }\n .filter-inner-wrapper {\n overflow: hidden;\n }\n}\n\n/*--- Messages ---*/\n.messages-wrapper {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n scroll-behavior: smooth;\n @include gxg-scrollbar();\n}\n.messages {\n display: flex;\n flex-direction: column;\n list-style-type: none;\n padding: 0;\n margin: 0;\n}\n\n/*--- Prompt ---*/\n.prompt {\n position: relative;\n margin-top: auto;\n\n &__textarea {\n &::part(textarea-wrapper) {\n border: none;\n }\n &::part(textarea) {\n border: none;\n background-color: var(--mer-color__neutral-gray--800);\n }\n }\n &__shortcuts {\n position: absolute;\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n padding-inline-end: var(--mer-spacing--xs);\n right: 0;\n top: 0;\n height: 100%;\n }\n &__shortcut {\n color: var(--mer-color__neutral-gray--400);\n font-size: var(--mer-font__size--2xs);\n padding: var(--mer-spacing--3xs) var(--mer-spacing--xs);\n background-color: var(--mer-color__neutral-gray--700);\n border-radius: var(--mer-border__radius--xs);\n }\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n Method,\n State,\n Watch,\n Listen\n} from \"@stencil/core\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/icon\",\n \"components/button\"\n];\n\nimport { Locale } from \"../../common/locale\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\n\n@Component({\n tag: \"gx-ide-ai-assistant\",\n styleUrl: \"ai-assistant.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/ai-assistant\"]\n})\nexport class GxIdeTemplate {\n /**\n * The component hard-coded strings translations.\n */\n private _componentLocale: any;\n /* lastUserMessageHeight is used to set the appropriate height on the textarea, if user presses arrowUp (recover last message)*/\n private lastUserMessageHeight: number;\n private setFocus = true;\n private scrollToBottomFlag = true;\n\n @Element() el: HTMLGxIdeAiAssistantElement;\n private textAreaEl!: HTMLGxgFormTextareaElement;\n private textareaShadowPart: HTMLTextAreaElement;\n private filterEl: HTMLGxgFormTextElement;\n private messagesWrapperEl!: HTMLDivElement;\n\n /**\n * Flag used to hide the shortcuts\n */\n @State() userHasTyped = false;\n\n /**\n * This is true if the last message is of type 'assistant-in-progress'\n */\n @State() aIInProgress = false;\n @Watch(\"aIInProgress\")\n watchAIInProgressHandler(aiInProgress: boolean) {\n if (!aiInProgress) {\n this.setFocus = true;\n }\n }\n\n /**\n * This displays or hides the messages filter\n */\n @State() showFilter = false;\n\n /**\n * True if the prompt textbox has focus\n */\n @State() promptHasFocus = false;\n\n /**\n * The filter value\n */\n @State() filterValue: string;\n\n /**\n * List of messages displayed by the component\n */\n @Prop({ mutable: true }) messages: Message[] = [];\n @Watch(\"messages\")\n watchMessagesHandler() {\n this.evaluateAiInProgress();\n this.evaluateAiStatus();\n }\n\n /**\n * The prompt textarea max-height\n */\n @Prop() readonly promptMaxHeight = \"128px\";\n\n /**\n * A temporary property to illustrate the assistant status\n */\n @Prop({ mutable: true }) assistantStatus: AiStatus = \"indeterminate\";\n\n /**\n * List of keys that make up the shortcut to focus on the component's text input\n */\n @Prop() readonly focusShortcuts: string[];\n\n /**\n * List of keys that make up the shortcut to focus on the component's text input\n */\n @Prop() readonly userMessageCallback: UserMessageCallback;\n\n /**\n * Callback that must be invoked when the conversation is cleared, using the header button.\n */\n @Prop() readonly clearCallback: () => Promise<void>;\n\n /**\n * the prompt value\n */\n @Prop() readonly promptValue: string;\n\n /**\n * If tue, it will display a filter.\n */\n @Prop() readonly filter = true;\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n this.evaluateAiInProgress();\n this.evaluateAiStatus();\n this.attachShortcuts();\n }\n\n componentDidLoad() {\n this.textareaShadowPart =\n this.textAreaEl.shadowRoot.querySelector(\"textarea\");\n this.el.addEventListener(\"mousedown\", this.#mouseDownListener);\n this.el.addEventListener(\"mouseup\", this.#mouseUpListener);\n }\n\n componentDidRender() {\n if (this.setFocus) {\n setTimeout(() => {\n /* Doesn't seems to work without the setTimeout */\n this.textAreaEl.focus();\n this.setFocus = false;\n }, 50);\n }\n setTimeout(() => {\n this.scrollToBottom();\n }, 200);\n }\n\n @Listen(\"focus\", { capture: true })\n handleFocus(event: FocusEvent) {\n if (this.textAreaEl) {\n event.preventDefault();\n this.textAreaEl.focus();\n }\n }\n\n /**\n * Clear the list of messages\n */\n @Method()\n async clear() {\n this.messages = [];\n }\n\n /**\n * Add a message. This method will be used by the host to add messages from the assistant\n */\n @Method()\n async addMessage(message: Message) {\n if (message.text?.length > 0) {\n const messages = [...this.messages];\n const updateInProgressMessage =\n messages?.length > 0 &&\n messages[messages.length - 1].type === \"assistant-in-progress\";\n if (updateInProgressMessage) {\n messages.pop();\n }\n messages.push(message);\n this.messages = messages;\n }\n }\n\n private evaluateAiInProgress = () => {\n if (\n this.messages?.length > 0 &&\n this.messages[this.messages.length - 1].type === \"assistant-in-progress\"\n ) {\n this.aIInProgress = true;\n } else {\n this.aIInProgress = false;\n }\n };\n\n private evaluateAiStatus = () => {\n if (this.messages?.length === 0) {\n this.assistantStatus = \"indeterminate\";\n return;\n }\n if (\n this.messages[this.messages.length - 1].type ===\n \"assistant-in-progress\" ||\n this.messages[this.messages.length - 1].type === \"user\"\n ) {\n this.assistantStatus = \"indeterminate\";\n } else if (\n this.messages[this.messages.length - 1].type === \"assistant-error\"\n ) {\n this.assistantStatus = \"error\";\n } else {\n this.assistantStatus = \"success\";\n }\n };\n\n private renderMessage = (\n message: Message,\n i: number\n ): HTMLLIElement | void => {\n if (message.text.length > 0) {\n return (\n <gx-ide-ai-message\n style={{\n \"--primary-color\": \"lightblue\"\n }}\n message={message.text}\n messageType={message.type}\n hidden={message.hidden}\n filterValue={this.filterValue}\n key={`${i.toString()}-${message.type}`}\n translations={this._componentLocale.aiMessage}\n aiAssistantHostRef={this.el}\n ></gx-ide-ai-message>\n );\n }\n };\n\n private textAreaInputHandler = () => {\n this.userHasTyped = true;\n this.showFilter = false;\n this.filterEl.value = \"\";\n this.filterValue = \"\";\n this.scrollToBottomFlag = true;\n };\n\n private promptEnterHandler = async (prompt: CustomEvent<string>) => {\n /* First remove double spaces */\n const promptTrimmed = prompt.detail.replace(/\\s+/g, \" \");\n /* Update textarea value to get the proper height */\n this.textAreaEl.value = promptTrimmed;\n setTimeout(() => {\n /* Then save the actual height (setTimeOut required) */\n this.lastUserMessageHeight = this.textAreaEl.offsetHeight;\n }, 0);\n /* The clear the textarea */\n this.textAreaEl.value = \"\";\n /* Insert the user message */\n this.addMessage({\n type: \"user\",\n text: promptTrimmed\n });\n /* Call the callback */\n if (this.userMessageCallback && !this.aIInProgress) {\n this.aIInProgress = true;\n this.userMessageCallback(promptTrimmed).then(() => {\n this.aIInProgress = false;\n });\n }\n };\n\n private filterMessagesHandler = (e: CustomEvent<string>) => {\n this.scrollToBottomFlag = false;\n this.filterValue = e.detail.toLowerCase();\n const filteredMessages = [...this.messages];\n filteredMessages.forEach(message => {\n if (message.text.toLowerCase().includes(this.filterValue)) {\n message.hidden = false;\n } else {\n message.hidden = true;\n }\n });\n this.messages = filteredMessages;\n };\n\n private clearMessages = () => {\n this.messages = [];\n this.textAreaEl.focus();\n if (this.clearCallback) {\n this.clearCallback();\n }\n };\n\n private attachShortcuts = () => {\n if (this.focusShortcuts?.length > 0) {\n const ctrlFocusIndex = this.focusShortcuts.findIndex(\n key => key.toLocaleLowerCase() === \"ctrl\"\n );\n const shiftFocusIndex = this.focusShortcuts.findIndex(\n key => key.toLocaleLowerCase() === \"shift\"\n );\n const cmdKeyIndex = this.focusShortcuts.findIndex(\n key => key.toLocaleLowerCase() === \"cmd\"\n );\n const keyFocus = this.focusShortcuts\n .find(key => {\n return (\n key.toLocaleLowerCase() !== \"ctrl\" &&\n key.toLocaleLowerCase() !== \"shift\" &&\n key.toLocaleLowerCase() !== \"cmd\"\n );\n })\n .toLowerCase();\n document.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (e.key === keyFocus && ctrlFocusIndex !== -1 && e.ctrlKey) {\n this.textAreaEl.focus();\n this.userHasTyped = true;\n } else if (e.key === keyFocus && shiftFocusIndex !== -1 && e.shiftKey) {\n this.textAreaEl.focus();\n this.userHasTyped = true;\n } else if (e.key === keyFocus && cmdKeyIndex !== -1 && e.metaKey) {\n this.textAreaEl.focus();\n this.userHasTyped = true;\n }\n });\n }\n };\n\n private promptArrowUpHandler = () => {\n this.userHasTyped = true;\n const lastUserMessage = this.messages?.find(message => {\n return message.type === \"user\";\n });\n if (lastUserMessage) {\n if (this.lastUserMessageHeight) {\n this.textareaShadowPart.style.height = `${this.lastUserMessageHeight}px`;\n }\n this.textAreaEl.value = lastUserMessage.text;\n }\n };\n\n private toggleFilterHandler = () => {\n this.showFilter = !this.showFilter;\n if (this.showFilter) {\n this.filterEl.focus();\n }\n };\n\n private promptFocusHandler = () => {\n this.promptHasFocus = true;\n };\n\n private promptBlurHandler = () => {\n this.promptHasFocus = false;\n };\n\n private scrollToBottom = () => {\n if (this.scrollToBottomFlag) {\n this.messagesWrapperEl.scrollTo(0, this.messagesWrapperEl.scrollHeight);\n this.messagesWrapperEl.scrollTop =\n this.messagesWrapperEl.scrollHeight -\n this.messagesWrapperEl.clientHeight;\n }\n };\n\n #mouseDownListener = () => {\n this.el.removeAttribute(\"tabindex\");\n };\n\n #mouseUpListener = () => {\n this.el.setAttribute(\"tabindex\", \"0\");\n };\n\n render() {\n return (\n <Host\n class={{\n [`assistant--${this.assistantStatus}`]: true,\n \"assistant--in-progress\": this.aIInProgress\n }}\n tabindex=\"0\"\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"gx-ide-main-wrapper\">\n <slot></slot>\n <header class=\"header\">\n <div class=\"header__first-row\">\n <gxg-title type=\"title-02\">\n {this._componentLocale.componentName}\n </gxg-title>\n <div class=\"header__actions-wrapper\">\n {this.filter ? (\n <gxg-button\n class=\"header__filter-button\"\n type=\"tertiary\"\n icon=\"menus/find\"\n onClick={this.toggleFilterHandler}\n disabled={this.messages.length === 0}\n ></gxg-button>\n ) : null}\n\n <gxg-button\n class=\"header__clear-button\"\n type=\"tertiary\"\n icon=\"bpm/delete\"\n onClick={this.clearMessages}\n disabled={this.messages.length === 0}\n ></gxg-button>\n </div>\n </div>\n {this.filter ? (\n <div\n class={{\n \"header__second-row\": true,\n \"header__second-row--visible\": this.showFilter\n }}\n >\n <div class=\"filter-inner-wrapper\">\n <gxg-form-text\n class=\"header__filter\"\n onInput={this.filterMessagesHandler as any}\n ref={el => (this.filterEl = el as HTMLGxgFormTextElement)}\n ></gxg-form-text>\n </div>\n </div>\n ) : null}\n </header>\n\n <div\n class={{\n \"messages-wrapper\": true,\n \"scrollable\": true\n }}\n ref={el => (this.messagesWrapperEl = el as HTMLDivElement)}\n >\n {this.messages?.length ? (\n <ol class={{ messages: true }}>\n {this.messages.map((message, i) => {\n return this.renderMessage(message, i);\n })}\n </ol>\n ) : null}\n </div>\n\n <div\n class={{\n prompt: true\n }}\n >\n <gxg-form-textarea\n ai\n class=\"prompt__textarea\"\n value={this.promptValue}\n maxHeight={this.promptMaxHeight}\n placeholder={\n this.aIInProgress\n ? this._componentLocale.processingQueryPlaceholder\n : this._componentLocale.promptPlaceholder\n }\n onInput={this.textAreaInputHandler}\n onEnter={this.promptEnterHandler}\n onArrowUpPressed={this.promptArrowUpHandler}\n onBlur={this.promptBlurHandler}\n onFocus={this.promptFocusHandler}\n disabled={this.aIInProgress}\n ref={el => (this.textAreaEl = el as HTMLGxgFormTextareaElement)}\n ></gxg-form-textarea>\n {!this.userHasTyped &&\n !this.aIInProgress &&\n !this.promptHasFocus &&\n this.focusShortcuts?.length > 0 ? (\n <div\n class={{\n prompt__shortcuts: true\n }}\n >\n {this.focusShortcuts.map((shortcut, i) => {\n /* Up to three keys allowed*/\n return i <= 2 ? (\n <span class=\"prompt__shortcut\">{shortcut}</span>\n ) : null;\n })}\n </div>\n ) : null}\n </div>\n </div>\n </Host>\n );\n }\n}\n\nexport type AiStatus = \"indeterminate\" | \"success\" | \"error\";\n\nexport type Message = {\n type: MessageType;\n text: string;\n hidden?: boolean;\n filterValue?: string;\n};\n\nexport type MessageType =\n | \"user\"\n | \"assistant-chat\"\n | \"assistant-action\"\n | \"assistant-in-progress\"\n | \"assistant-error\";\n\nexport type UserMessageCallback = (text: string) => Promise<void>;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["mapObjectTypeToComboBoxItemModel","objectTypeModel","map","objectType","value","id","caption","name","mapCategoryToComboBoxItemModel","categoryModel","category","label","objectSelectorCss","CSS_BUNDLES","FILTER_ICON","getIconPath","colorType","USER_ICON","MODIFIED_ACCORDION_MODEL","expanded","TODAY","GxIdeObjectSelector","_GxIdeObjectSelector_componentLocale","set","this","_GxIdeObjectSelector_shortcutsSrc","getAssetPath","_GxIdeObjectSelector_afterModel","_GxIdeObjectSelector_patternInput","_GxIdeObjectSelector_typeComboBox","_GxIdeObjectSelector_categoryComboBox","_GxIdeObjectSelector_moduleEntitySelector","_GxIdeObjectSelector_afterTypeComboBox","_GxIdeObjectSelector_userInput","_GxIdeObjectSelector_modifiedDateInput","_GxIdeObjectSelector_objectsGrid","_GxIdeObjectSelector_shortcutsEl","_GxIdeObjectSelector_cancelCallbackHandler","cancelCallback","_GxIdeObjectSelector_chGridKeyDownHandler","e","key","__classPrivateFieldGet","_GxIdeObjectSelector_openSelectionCallbackHandler","call","_GxIdeObjectSelector_deselectAll","selectAllRows","_GxIdeObjectSelector_evaluateObjectsCount","type","locale","selectedObjectsIdsArray","length","objCount","selected","none","one","many","objects","matching","_GxIdeObjectSelector_getToday","now","Date","date","toISOString","split","time","slice","_GxIdeObjectSelector_handleAfterValueChange","event","modifiedAfterValue","detail","FILTER_AFTER","DATE_TIME","_GxIdeObjectSelector_refreshUIWithNewConfiguration","_GxIdeObjectSelector_handleObjectsSelectionChange","rowsId","_GxIdeObjectSelector_hostKeyPressHandler","stopPropagation","_GxIdeObjectSelector_newObjectCallbackHandler","newObjectCallback","openSelectionCallback","modifiedAfter","user","trim","filters","pattern","module","modifiedBy","modifiedDate","loading","loadCallback","then","_GxIdeObjectSelector_sortObjectsByName","_GxIdeObjectSelector_renderFilter","h","class","htmlFor","filter","accessibleName","debounce","config","inputDebounce","part","patternValue","mode","ref","el","__classPrivateFieldSet","onInput","disabled","types","defaultType","model","categories","defaultCategory","defaultModule","labelCaption","labelPosition","onValueChanged","defaultValue","selectEntityCallback","selectModuleCallback","slot","after","startImgSrc","dateTime","max","_GxIdeObjectSelector_renderFooter","onClick","undefined","footer","btnNew","btnCancel","btnConfirm","multiSelection","_GxIdeObjectSelector_selectAll","btnSelectAll","_GxIdeObjectSelector_renderObjects","rowSelectionMode","onKeyDown","onSelectionChanged","onDblClick","settingable","size","tabularGrid","colSize","maxContent","tableHead","description","commonDouble","importDate","obj","rowid","src","icon","formatDate","loader","loaderTitle","title","show","stateIconSrc","stateTitle","emptyState","_GxIdeObjectSelector_setAfterDefaultValue","NONE","_GxIdeObjectSelector_setAfterOptions","afterNone","IMPORT","LAST_BUILD","sort","a","b","nameA","toLowerCase","nameB","connectedCallback","componentWillLoad","Locale","getComponentStrings","componentDidLoad","focus","componentDidRender","suspendShortcuts","suspend","validate","isValid","render","Host","onKeyPress"],"sources":["src/components/object-selector/helpers.ts","src/components/object-selector/object-selector.scss?tag=gx-ide-object-selector&encapsulation=shadow","src/components/object-selector/object-selector.tsx"],"sourcesContent":["import { ComboBoxModel } from \"@genexus/chameleon-controls-library\";\nimport { ObjectType, GxOption } from \"../../common/types\";\n// - - - - - - - - - - - -\n// Data Mappings\n// - - - - - - - - - - - -\n\n// ch-combo-box-render\n\nexport const mapObjectTypeToComboBoxItemModel = (\n objectTypeModel: ObjectType[]\n): ComboBoxModel =>\n objectTypeModel.map(objectType => ({\n value: objectType.id,\n caption: objectType.name\n }));\nexport const mapCategoryToComboBoxItemModel = (\n categoryModel: GxOption[]\n): ComboBoxModel =>\n categoryModel.map(category => ({\n value: category.id,\n caption: category.label\n }));\n","@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\"; // for the tabular-grid-cell-layout mixin\n\n:host {\n block-size: 100%;\n display: grid;\n grid-template-rows: auto 1fr auto;\n overflow: auto;\n}\n\n.section {\n display: contents;\n}\n\n/* Filters */\n.filter-layout {\n grid-template:\n \"pattern type\"\n \"category module\"\n \"modified modified\";\n grid-template-columns: 1fr 1fr;\n}\n.pattern {\n grid-area: pattern;\n}\n.type {\n grid-area: type;\n}\n.category {\n grid-area: category;\n}\n.module {\n grid-area: module;\n}\n.modified-accordion {\n grid-area: modified;\n display: flex;\n flex-direction: column;\n}\n.field-group-modified {\n grid-template-columns: 1fr 1fr 1fr;\n}\n.input-date-time {\n // TODO: Mercury controls block-size should be defined by a variable,\n // instead of the sum of the font-size + line-height + padding-block.\n // once this is updated, the block-size defined bellow should not be\n // required anymore.\n\n block-size: calc(\n var(--control__font-size--regular) * var(--control__line-height) +\n var(--control__padding-block) * 2 + var(--control__border-width) * 2\n );\n}\n\ngx-ide-container::part(content) {\n // only apply display grid when the loader is being displayed, to stretch the container.\n display: grid;\n}\n\n/*tabular grid*/\nch-tabular-grid {\n overflow: auto;\n}\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid-object-selector\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 5\n )\n);\n\n// Objects Table\n.objects-count {\n display: grid;\n grid-template-columns: 1fr 1fr;\n border-block-start: var(--mer-border__width--sm) solid\n var(--mer-color__elevation--04);\n}\n.objects-selected,\n.objects-matching {\n padding-block-end: var(--mer-spacing--xs);\n}\n\nch-tabular-grid-rowset-empty {\n position: relative; // makes this the bounder element for the loader\n}\n\nch-tabular-grid.empty-result::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\n\ninput::-webkit-datetime-edit-fields-wrapper {\n // WA remove padding to force this input block-size to be the same as other\n // mercury controls block size.\n padding: none;\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n getAssetPath\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport {\n AccordionModel,\n ComboBoxModel,\n TabularGridSelectionChangedEvent\n} from \"@genexus/chameleon-controls-library\";\n\nimport { Locale } from \"../../common/locale\";\nimport { config } from \"../../common/config\";\nimport { EntityData, GxOption, ObjectType } from \"../../common/types\";\nimport { formatDate } from \"../../common/helpers\";\nimport {\n mapObjectTypeToComboBoxItemModel,\n mapCategoryToComboBoxItemModel\n} from \"./helpers\";\nimport { FILTER_AFTER, FilterAfterValue } from \"../../common/constants\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"components/accordion\",\n \"components/tabular-grid\",\n \"utils/typography\",\n \"utils/layout\",\n \"utils/spacing\"\n];\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\nconst USER_ICON = getIconPath({\n category: \"system\",\n name: \"user\",\n colorType: \"on-elevation\"\n});\n\nconst MODIFIED_ACCORDION_MODEL: AccordionModel = [\n {\n id: \"modified\",\n caption: \"Modified\",\n expanded: false\n }\n];\n\nlet TODAY: string = null;\n\n@Component({\n tag: \"gx-ide-object-selector\",\n styleUrl: \"object-selector.scss\",\n shadow: { delegatesFocus: true },\n assetsDirs: [\"gx-ide-assets/object-selector\"]\n})\nexport class GxIdeObjectSelector {\n #componentLocale: any;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/object-selector/shortcuts.json`\n );\n\n #afterModel: ComboBoxModel = null;\n\n @Element() el: HTMLGxIdeObjectSelectorElement;\n\n /* References needed to collect data */\n #patternInput!: HTMLChEditElement;\n #typeComboBox!: HTMLChComboBoxRenderElement;\n #categoryComboBox!: HTMLChComboBoxRenderElement;\n #moduleEntitySelector!: HTMLGxIdeEntitySelectorElement;\n #afterTypeComboBox!: HTMLChComboBoxRenderElement;\n #userInput!: HTMLChEditElement;\n #modifiedDateInput!: HTMLInputElement;\n #objectsGrid!: HTMLChTabularGridElement;\n #shortcutsEl: HTMLChShortcutsElement;\n\n /**\n * For show or hide the filters relative to modifiers\n */\n @State() filterModified = false;\n\n /**\n * True if loadCallback has been called and has not been resolved yet.\n */\n @State() loading: boolean = false;\n\n /**\n * The \"modified after\" value\n */\n @State() modifiedAfterValue: FilterAfterValue;\n\n /**\n * The objects rendered in the table\n */\n @State() objects: ObjectData[] = [];\n\n /**\n * The selected objects in the table of objects\n */\n @State() selectedObjectsIdsArray: string[] = [];\n\n /**\n * Callback invoked when the user wishes to cancel the selection of objects.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * The categories render in the filter category selector\n */\n @Prop() readonly categories!: GxOption[];\n\n /**\n * The default id value for the category filter\n */\n @Prop() readonly defaultCategory: string;\n\n /**\n * The default value for the module/folder filter\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * The default value for the type filter\n */\n @Prop() readonly defaultType: string;\n\n /**\n * If true, it will display a loader when needed.\n */\n @Prop() readonly loader = false;\n\n /**\n * Callback invoked when the component needs to reload the list of attributes.\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * True if multiple object selection is allowed. Default is 'True'\n */\n @Prop() readonly multiSelection: boolean = false;\n\n /**\n * Callback invoked when the user presses the 'New' button.\n */\n @Prop() readonly newObjectCallback!: NewObjectCallback;\n\n /**\n * This is a function provided by the developer for expanded the data of object that is double-clicked or entered.\n */\n @Prop() readonly openSelectionCallback!: OpenSelectionCallback;\n\n /**\n * Current value of the input pattern. It is also used to set the default value when initializing the component\n */\n @Prop() readonly patternValue: string;\n\n /**\n * Callback invoked when the action is executed in the Module/Folder filter. It returns the information of the selected object (id and name) or 'undefined' if it was canceled.\n */\n @Prop() readonly selectModuleCallback: SelectModuleCallback;\n\n /**\n * The types render in the filter type selector\n */\n @Prop() readonly types!: ObjectType[];\n\n async connectedCallback() {\n TODAY = this.#getToday();\n }\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#setAfterOptions();\n this.#setAfterDefaultValue();\n }\n\n componentDidLoad() {\n this.#refreshUIWithNewConfiguration();\n this.#patternInput.focus();\n }\n\n componentDidRender() {}\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#shortcutsEl.suspend = true;\n } else {\n this.#shortcutsEl.suspend = false;\n }\n }\n\n /**\n * Validate necessary data input\n */\n @Method()\n async validate(): Promise<boolean> {\n const isValid = true;\n return isValid;\n }\n\n #cancelCallbackHandler = (): void => {\n this.cancelCallback();\n };\n\n #chGridKeyDownHandler = (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n this.#openSelectionCallbackHandler(e);\n }\n };\n\n #deselectAll = (): void => {\n (this.#objectsGrid as any).selectAllRows(false);\n };\n\n #evaluateObjectsCount = (type: \"selected\" | \"matching\"): string => {\n const locale = this.#componentLocale;\n\n if (type === \"selected\") {\n if (this.selectedObjectsIdsArray.length === 0) {\n return locale.objCount.selected.none;\n }\n if (this.selectedObjectsIdsArray.length === 1) {\n return `1 ${locale.objCount.selected.one}`;\n }\n return `${this.selectedObjectsIdsArray.length} ${locale.objCount.selected.many}`;\n }\n\n // type === \"matching\"\n if (this.objects.length === 0) {\n return locale.objCount.matching.none;\n }\n if (this.objects.length === 1) {\n return `1 ${locale.objCount.matching.one}`;\n }\n return `${this.objects.length} ${locale.objCount.matching.many}`;\n };\n\n #getToday = (): string => {\n const now = new Date();\n const date = now.toISOString().split(\"T\")[0];\n const time = now.toISOString().split(\"T\")[1].slice(0, 5); // Only take 'HH:MM' part\n return `${date}T${time}`;\n };\n\n #handleAfterValueChange = (event: CustomEvent<string> | InputEvent) => {\n this.modifiedAfterValue = event.detail as FilterAfterValue;\n if (\n this.modifiedAfterValue !== FILTER_AFTER.DATE_TIME ||\n (this.modifiedAfterValue === FILTER_AFTER.DATE_TIME &&\n this.#modifiedDateInput.value)\n ) {\n // if \"modified\" is \"after date/time\" only refresh ui if date/time is valid.\n this.#refreshUIWithNewConfiguration();\n }\n };\n\n #handleObjectsSelectionChange = (\n event: CustomEvent<TabularGridSelectionChangedEvent>\n ) => {\n this.selectedObjectsIdsArray = event.detail.rowsId;\n };\n\n #hostKeyPressHandler = (e: KeyboardEvent) => {\n // just prevent keypress propagation\n if (e.key === \"Enter\") {\n e.stopPropagation();\n }\n };\n\n #newObjectCallbackHandler = (): void => {\n this.newObjectCallback();\n };\n\n #openSelectionCallbackHandler = (e: MouseEvent | KeyboardEvent): void => {\n e.stopPropagation();\n this.openSelectionCallback(this.selectedObjectsIdsArray);\n };\n\n #refreshUIWithNewConfiguration = (): void => {\n /* 'modified' checkbox, should only be considered if 'date' || 'user' */\n const modifiedAfter = this.#afterTypeComboBox.value;\n const user = this.#userInput?.value?.trim();\n const filters: ObjectFiltersData = {\n pattern: this.#patternInput?.value,\n type: this.#typeComboBox.value,\n category: this.#categoryComboBox.value,\n module: this.#moduleEntitySelector?.value?.id,\n modifiedAfter: modifiedAfter ? modifiedAfter : null,\n modifiedBy: user ? user : null,\n modifiedDate:\n modifiedAfter === FILTER_AFTER.DATE_TIME\n ? new Date(this.#modifiedDateInput?.value)\n : null\n };\n this.loading = true;\n this.objects = [];\n this.loadCallback(filters).then((objects: ObjectData[]) => {\n if (objects) {\n this.objects = this.#sortObjectsByName(objects);\n }\n this.selectedObjectsIdsArray = [];\n this.#deselectAll();\n this.loading = false;\n });\n };\n\n #renderFilter = (): Element => {\n return (\n <header class=\"control-header spacing-body-inline spacing-body-block-start\">\n <form class=\"field-group filter-layout\">\n <div class=\"field field-block pattern\">\n <label\n // pattern\n class=\"label\"\n htmlFor=\"pattern\"\n >\n {this.#componentLocale.filter.pattern}\n </label>\n\n <ch-edit\n accessibleName={this.#componentLocale.filter.pattern}\n debounce={config.inputDebounce}\n class=\"input\"\n part=\"filter-pattern\"\n id=\"pattern\"\n name=\"pattern\"\n value={this.patternValue}\n mode=\"text\"\n ref={(el: HTMLChEditElement) =>\n (this.#patternInput = el as HTMLChEditElement)\n }\n onInput={this.#refreshUIWithNewConfiguration}\n ></ch-edit>\n </div>\n\n <div class=\"field field-block type\">\n <label\n // type\n class=\"label\"\n htmlFor=\"type\"\n >\n {this.#componentLocale.filter.type}\n </label>\n <ch-combo-box-render\n accessibleName={this.#componentLocale.filter.type}\n class=\"combo-box\"\n disabled={!this.types}\n value={this.defaultType}\n part=\"filter-type\"\n id=\"type\"\n model={mapObjectTypeToComboBoxItemModel(this.types)}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#typeComboBox = el as HTMLChComboBoxRenderElement)\n }\n onInput={this.#refreshUIWithNewConfiguration}\n ></ch-combo-box-render>\n </div>\n\n <div class=\"field field-block category\">\n <label\n // category\n class=\"label\"\n htmlFor=\"category\"\n >\n {this.#componentLocale.filter.category}\n </label>\n <ch-combo-box-render\n id=\"category\"\n class=\"combo-box\"\n accessibleName={this.#componentLocale.filter.category}\n disabled={!this.categories}\n model={mapCategoryToComboBoxItemModel(this.categories)}\n value={this.defaultCategory}\n part=\"filter-category\"\n onInput={this.categories && this.#refreshUIWithNewConfiguration}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#categoryComboBox = el as HTMLChComboBoxRenderElement)\n }\n ></ch-combo-box-render>\n </div>\n\n <gx-ide-entity-selector\n // module\n class=\"module\"\n id=\"module\"\n value={this.defaultModule}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#moduleEntitySelector =\n el as HTMLGxIdeEntitySelectorElement)\n }\n labelCaption={this.#componentLocale.filter.module}\n labelPosition=\"block-start\"\n onValueChanged={this.#refreshUIWithNewConfiguration}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectModuleCallback}\n ></gx-ide-entity-selector>\n\n <ch-accordion-render\n // modified\n class=\"accordion-outlined modified-accordion\"\n model={MODIFIED_ACCORDION_MODEL}\n >\n <div slot=\"modified\" class=\"spacing-body\">\n <div class=\"field-group field-group-modified\">\n <div class=\"field field-block after\">\n <label\n // after\n class=\"label\"\n htmlFor=\"after-type\"\n >\n {this.#componentLocale.filter.after}\n </label>\n <ch-combo-box-render\n class=\"combo-box\"\n value={this.modifiedAfterValue}\n part=\"filter-after-type\"\n id=\"after-type\"\n model={this.#afterModel}\n ref={(el: HTMLChComboBoxRenderElement) =>\n (this.#afterTypeComboBox =\n el as HTMLChComboBoxRenderElement)\n }\n onInput={this.#handleAfterValueChange}\n ></ch-combo-box-render>\n </div>\n\n <div class=\"field field-block\">\n <label\n // user\n class=\"label\"\n htmlFor=\"user-name\"\n >\n {this.#componentLocale.filter.user}\n </label>\n <ch-edit\n class=\"input\"\n part=\"filter-user\"\n value={this.patternValue}\n ref={(el: HTMLChEditElement) =>\n (this.#userInput = el as HTMLChEditElement)\n }\n id=\"user-name\"\n name=\"userName\"\n startImgSrc={USER_ICON}\n onInput={this.#refreshUIWithNewConfiguration}\n ></ch-edit>\n </div>\n\n <div class=\"field field-block\">\n <label\n // date\n class={{\n \"label\": true,\n \"label--disabled\":\n this.modifiedAfterValue !== \"afterDateTime\"\n }}\n htmlFor=\"modified-date\"\n >\n {this.#componentLocale.filter.dateTime}\n </label>\n\n <input\n type=\"datetime-local\"\n class=\"input input-date-time\"\n id=\"modified-date\"\n name=\"modifiedDate\"\n part=\"filter-pattern\"\n value={this.patternValue}\n max={TODAY}\n ref={(el: HTMLInputElement) =>\n (this.#modifiedDateInput = el as HTMLInputElement)\n }\n disabled={this.modifiedAfterValue !== \"afterDateTime\"}\n onInput={this.#refreshUIWithNewConfiguration}\n ></input>\n </div>\n </div>\n </div>\n </ch-accordion-render>\n </form>\n </header>\n );\n };\n\n #renderFooter = (): Element => {\n return (\n <footer class=\"footer control-footer-space-between\">\n <div\n class=\"control-footer control-footer-space-between objects-count spacing-body-inline\"\n slot=\"footer-above\"\n >\n <p class=\"body-regular-s objects-selected\" part=\"objects-selected\">\n {this.#evaluateObjectsCount(\"selected\")}\n </p>\n <p class=\"body-regular-s objects-matching\" part=\"objects-matching\">\n {this.#evaluateObjectsCount(\"matching\")}\n </p>\n </div>\n\n <div class=\"control-footer-with-border control-footer-space-between spacing-body-inline spacing-body-block-end\">\n <button\n // button new object\n class=\"button-secondary\"\n part=\"button button-new\"\n onClick={!this.loading ? this.#newObjectCallbackHandler : undefined}\n disabled={this.loading}\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n <div class=\"end buttons-spacer\">\n <button\n // button cancel\n class=\"button-secondary\"\n part=\"button button-cancel\"\n onClick={this.#cancelCallbackHandler}\n >\n {this.#componentLocale.footer.btnCancel}\n </button>\n <button\n // button confirm\n class=\"button-primary\"\n part=\"button button-confirm\"\n onClick={this.#openSelectionCallbackHandler}\n disabled={this.loading}\n >\n {this.#componentLocale.footer.btnConfirm}\n </button>\n {this.multiSelection ? (\n <button\n class=\"button-secondary\"\n onClick={this.#selectAll}\n part=\"button button-select-all\"\n >\n {this.#componentLocale.footer.btnSelectAll}\n </button>\n ) : null}\n </div>\n </div>\n </footer>\n );\n };\n\n #renderObjects = (): Element => {\n return (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"tabular-grid-object-selector\": true,\n \"empty-result\": this.objects.length === 0\n }}\n rowSelectionMode={this.multiSelection ? \"multiple\" : \"single\"}\n ref={(el: HTMLChTabularGridElement) => (this.#objectsGrid = el)}\n part=\"ch-grid-objects\"\n onKeyDown={this.#chGridKeyDownHandler}\n onSelectionChanged={this.#handleObjectsSelectionChange}\n onDblClick={this.#openSelectionCallbackHandler}\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.name}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.type}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.module}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.description}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.commonDouble}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.modifiedDate}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.importDate}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {this.objects.length ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects.map((obj: ObjectData) => (\n <ch-tabular-grid-row\n rowid={obj.id}\n key={obj.id}\n class=\"tabular-grid-row\"\n >\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image src={obj.icon} class=\"icon-md\"></ch-image>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.type}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.module}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.description}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {`${formatDate(obj.modifiedDate, \"date-time\")}`}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {`${formatDate(obj.importDate, \"date-time\")}`}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n {this.loader && this.loading ? (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n show\n ></gx-ide-loader>\n ) : (\n <gx-ide-empty-state\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.emptyState.title}\n ></gx-ide-empty-state>\n )}\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #selectAll = (): void => {\n (this.#objectsGrid as any).selectAllRows();\n };\n\n #setAfterDefaultValue = (): void => {\n this.modifiedAfterValue = FILTER_AFTER.NONE;\n };\n\n #setAfterOptions = (): void => {\n this.#afterModel = [\n {\n caption: this.#componentLocale.filter.afterNone,\n value: FILTER_AFTER.NONE\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.DATE_TIME],\n value: FILTER_AFTER.DATE_TIME\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.IMPORT],\n value: FILTER_AFTER.IMPORT\n },\n {\n caption: this.#componentLocale.filter[FILTER_AFTER.LAST_BUILD],\n value: FILTER_AFTER.LAST_BUILD\n }\n ];\n };\n\n #sortObjectsByName = (objects: ObjectData[]): ObjectData[] => {\n return objects.sort((a, b) => {\n const nameA = a.name.toLowerCase(),\n nameB = b.name.toLowerCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n return 0;\n });\n };\n\n render(): void {\n return (\n <Host onKeyPress={this.#hostKeyPressHandler} class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#shortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n <section class=\"section\">\n {this.#renderFilter()}\n {this.#renderObjects()}\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type NewObjectCallback = () => Promise<void>;\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type SelectModuleCallback = () => Promise<EntityData | undefined>;\n\nexport type OpenSelectionCallback = (ids: string[]) => Promise<void>;\n\nexport type LoadCallback = (\n filters: ObjectFiltersData\n) => Promise<ObjectData[]>;\n\nexport type ObjectFiltersData = {\n pattern?: string;\n type: string;\n category?: string;\n module?: string;\n modifiedAfter?: string;\n modifiedBy?: string;\n modifiedDate?: Date;\n};\n\nexport type ObjectData = {\n id: string;\n icon: string;\n name: string;\n type: string;\n description: string;\n module: string;\n modifiedDate?: Date;\n importDate?: Date;\n};\n"],"mappings":";;;;;;;;;;;;;;;;AAQO,MAAMA,mCACXC,KAEAA,EAAgBC,KAAIC,MAAU;EAC5BC,OAAOD,EAAWE;EAClBC,SAASH,EAAWI;;;AAEjB,MAAMC,iCACXC,KAEAA,EAAcP,KAAIQ,MAAQ;EACxBN,OAAOM,EAASL;EAChBC,SAASI,EAASC;;;ACpBtB,MAAMC,IAAoB;;;;;;;;;;;;;;;;;AC4B1B,MAAMC,IAA8B,EAClC,qBACA,oBACA,wBACA,2BACA,oBACA,gBACA;;AAGF,MAAMC,IAAcC,EAAY;EAC9BL,UAAU;EACVH,MAAM;EACNS,WAAW;;;AAEb,MAAMC,IAAYF,EAAY;EAC5BL,UAAU;EACVH,MAAM;EACNS,WAAW;;;AAGb,MAAME,IAA2C,EAC/C;EACEb,IAAI;EACJC,SAAS;EACTa,UAAU;;;AAId,IAAIC,IAAgB;;MAQPC,IAAmB;;;IAC9BC,EAAAC,IAAAC,WAAA;IACAC,EAAAF,IAAAC,MAAgBE,EACd;IAGFC,EAAAJ,IAAAC,MAA6B;+CAK7BI,EAAAL,IAAAC,WAAA;IACAK,EAAAN,IAAAC,WAAA;IACAM,EAAAP,IAAAC,WAAA;IACAO,EAAAR,IAAAC,WAAA;IACAQ,EAAAT,IAAAC,WAAA;IACAS,EAAAV,IAAAC,WAAA;IACAU,EAAAX,IAAAC,WAAA;IACAW,EAAAZ,IAAAC,WAAA;IACAY,EAAAb,IAAAC,WAAA;IAkIAa,EAAAd,IAAAC,OAAyB;MACvBA,KAAKc;AAAgB;IAGvBC,EAAAhB,IAAAC,OAAyBgB;MACvB,IAAIA,EAAEC,QAAQ,SAAS;QACrBC,EAAAlB,MAAImB,GAAA,KAA8BC,KAAlCpB,MAAmCgB;;;IAIvCK,EAAAtB,IAAAC,OAAe;MACZkB,EAAAlB,MAAIW,GAAA,KAAsBW,cAAc;AAAM;IAGjDC,EAAAxB,IAAAC,OAAyBwB;MACvB,MAAMC,IAASP,EAAAlB,MAAIF,GAAA;MAEnB,IAAI0B,MAAS,YAAY;QACvB,IAAIxB,KAAK0B,wBAAwBC,WAAW,GAAG;UAC7C,OAAOF,EAAOG,SAASC,SAASC;;QAElC,IAAI9B,KAAK0B,wBAAwBC,WAAW,GAAG;UAC7C,OAAO,KAAKF,EAAOG,SAASC,SAASE;;QAEvC,OAAO,GAAG/B,KAAK0B,wBAAwBC,UAAUF,EAAOG,SAASC,SAASG;;;YAI5E,IAAIhC,KAAKiC,QAAQN,WAAW,GAAG;QAC7B,OAAOF,EAAOG,SAASM,SAASJ;;MAElC,IAAI9B,KAAKiC,QAAQN,WAAW,GAAG;QAC7B,OAAO,KAAKF,EAAOG,SAASM,SAASH;;MAEvC,OAAO,GAAG/B,KAAKiC,QAAQN,UAAUF,EAAOG,SAASM,SAASF;AAAM;IAGlEG,EAAApC,IAAAC,OAAY;MACV,MAAMoC,IAAM,IAAIC;MAChB,MAAMC,IAAOF,EAAIG,cAAcC,MAAM,KAAK;MAC1C,MAAMC,IAAOL,EAAIG,cAAcC,MAAM,KAAK,GAAGE,MAAM,GAAG;;YACtD,OAAO,GAAGJ,KAAQG;AAAM;IAG1BE,EAAA5C,IAAAC,OAA2B4C;MACzB5C,KAAK6C,qBAAqBD,EAAME;MAChC,IACE9C,KAAK6C,uBAAuBE,EAAaC,aACxChD,KAAK6C,uBAAuBE,EAAaC,aACxC9B,EAAAlB,MAAIU,GAAA,KAAoB9B,OAC1B;;QAEAsC,EAAAlB,MAAIiD,GAAA,KAA+B7B,KAAnCpB;;;IAIJkD,EAAAnD,IAAAC,OACE4C;MAEA5C,KAAK0B,0BAA0BkB,EAAME,OAAOK;AAAM;IAGpDC,EAAArD,IAAAC,OAAwBgB;;MAEtB,IAAIA,EAAEC,QAAQ,SAAS;QACrBD,EAAEqC;;;IAINC,EAAAvD,IAAAC,OAA4B;MAC1BA,KAAKuD;AAAmB;IAG1BpC,EAAApB,IAAAC,OAAiCgB;MAC/BA,EAAEqC;MACFrD,KAAKwD,sBAAsBxD,KAAK0B;AAAwB;IAG1DuB,EAAAlD,IAAAC,OAAiC;;MAE/B,MAAMyD,IAAgBvC,EAAAlB,MAAIQ,GAAA,KAAoB5B;MAC9C,MAAM8E,IAAOxC,EAAAlB,MAAIS,GAAA,MAAa7B,OAAO+E;MACrC,MAAMC,IAA6B;QACjCC,SAAS3C,EAAAlB,MAAII,GAAA,MAAgBxB;QAC7B4C,MAAMN,EAAAlB,MAAIK,GAAA,KAAezB;QACzBM,UAAUgC,EAAAlB,MAAIM,GAAA,KAAmB1B;QACjCkF,QAAQ5C,EAAAlB,MAAIO,GAAA,MAAwB3B,OAAOC;QAC3C4E,eAAeA,IAAgBA,IAAgB;QAC/CM,YAAYL,IAAOA,IAAO;QAC1BM,cACEP,MAAkBV,EAAaC,YAC3B,IAAIX,KAAKnB,EAAAlB,MAAIU,GAAA,MAAqB9B,SAClC;;MAERoB,KAAKiE,UAAU;MACfjE,KAAKiC,UAAU;MACfjC,KAAKkE,aAAaN,GAASO,MAAMlC;QAC/B,IAAIA,GAAS;UACXjC,KAAKiC,UAAUf,EAAAlB,MAAIoE,GAAA,KAAmBhD,KAAvBpB,MAAwBiC;;QAEzCjC,KAAK0B,0BAA0B;QAC/BR,EAAAlB,MAAIqB,GAAA,KAAaD,KAAjBpB;QACAA,KAAKiE,UAAU;AAAK;AACpB;IAGJI,EAAAtE,IAAAC,OAAgB,MAEZsE,EAAA;MAAQC,OAAM;OACZD,EAAA;MAAMC,OAAM;OACVD,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACNC,SAAQ;OAEPtD,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAOZ,UAGhCS,EAAA;MACEI,gBAAgBxD,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAOZ;MAC7Cc,UAAUC,EAAOC;MACjBN,OAAM;MACNO,MAAK;MACLjG,IAAG;MACHE,MAAK;MACLH,OAAOoB,KAAK+E;MACZC,MAAK;MACLC,KAAMC,KACHC,EAAAnF,MAAII,GAAiB8E,GAAuB;MAE/CE,SAASlE,EAAAlB,MAAIiD,GAAA;SAIjBqB,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACNC,SAAQ;OAEPtD,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAOjD,OAEhC8C,EAAA;MACEI,gBAAgBxD,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAOjD;MAC7C+C,OAAM;MACNc,WAAWrF,KAAKsF;MAChB1G,OAAOoB,KAAKuF;MACZT,MAAK;MACLjG,IAAG;MACH2G,OAAOhH,iCAAiCwB,KAAKsF;MAC7CL,KAAMC,KACHC,EAAAnF,MAAIK,GAAiB6E,GAAiC;MAEzDE,SAASlE,EAAAlB,MAAIiD,GAAA;SAIjBqB,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACNC,SAAQ;OAEPtD,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAOvF,WAEhCoF,EAAA;MACEzF,IAAG;MACH0F,OAAM;MACNG,gBAAgBxD,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAOvF;MAC7CmG,WAAWrF,KAAKyF;MAChBD,OAAOxG,+BAA+BgB,KAAKyF;MAC3C7G,OAAOoB,KAAK0F;MACZZ,MAAK;MACLM,SAASpF,KAAKyF,cAAcvE,EAAAlB,MAAIiD,GAAA;MAChCgC,KAAMC,KACHC,EAAAnF,MAAIM,GAAqB4E,GAAiC;SAKjEZ,EAAA;;MAEEC,OAAM;MACN1F,IAAG;MACHD,OAAOoB,KAAK2F;MACZV,KAAMC,KACHC,EAAAnF,MAAIO,GACH2E,GAAoC;MAExCU,cAAc1E,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAOX;MAC3C+B,eAAc;MACdC,gBAAgB5E,EAAAlB,MAAIiD,GAAA;MACpB8C,cAAc/F,KAAK2F;MACnBK,sBAAsBhG,KAAKiG;QAG7B3B,EAAA;;MAEEC,OAAM;MACNiB,OAAO9F;OAEP4E,EAAA;MAAK4B,MAAK;MAAW3B,OAAM;OACzBD,EAAA;MAAKC,OAAM;OACTD,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACNC,SAAQ;OAEPtD,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAO0B,QAEhC7B,EAAA;MACEC,OAAM;MACN3F,OAAOoB,KAAK6C;MACZiC,MAAK;MACLjG,IAAG;MACH2G,OAAOtE,EAAAlB,MAAIG,GAAA;MACX8E,KAAMC,KACHC,EAAAnF,MAAIQ,GACH0E,GAAiC;MAErCE,SAASlE,EAAAlB,MAAI2C,GAAA;SAIjB2B,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACNC,SAAQ;OAEPtD,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAOf,OAEhCY,EAAA;MACEC,OAAM;MACNO,MAAK;MACLlG,OAAOoB,KAAK+E;MACZE,KAAMC,KACHC,EAAAnF,MAAIS,GAAcyE,GAAuB;MAE5CrG,IAAG;MACHE,MAAK;MACLqH,aAAa3G;MACb2F,SAASlE,EAAAlB,MAAIiD,GAAA;SAIjBqB,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAO;QACLpF,OAAS;QACT,mBACEa,KAAK6C,uBAAuB;;MAEhC2B,SAAQ;OAEPtD,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAO4B,WAGhC/B,EAAA;MACE9C,MAAK;MACL+C,OAAM;MACN1F,IAAG;MACHE,MAAK;MACL+F,MAAK;MACLlG,OAAOoB,KAAK+E;MACZuB,KAAK1G;MACLqF,KAAMC,KACHC,EAAAnF,MAAIU,GAAsBwE,GAAsB;MAEnDG,UAAUrF,KAAK6C,uBAAuB;MACtCuC,SAASlE,EAAAlB,MAAIiD,GAAA;;IAW/BsD,EAAAxG,IAAAC,OAAgB,MAEZsE,EAAA;MAAQC,OAAM;OACZD,EAAA;MACEC,OAAM;MACN2B,MAAK;OAEL5B,EAAA;MAAGC,OAAM;MAAkCO,MAAK;OAC7C5D,EAAAlB,MAAIuB,GAAA,KAAsBH,KAA1BpB,MAA2B,cAE9BsE,EAAA;MAAGC,OAAM;MAAkCO,MAAK;OAC7C5D,EAAAlB,MAAIuB,GAAA,KAAsBH,KAA1BpB,MAA2B,eAIhCsE,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACNO,MAAK;MACL0B,UAAUxG,KAAKiE,UAAU/C,EAAAlB,MAAIsD,GAAA,OAA6BmD;MAC1DpB,UAAUrF,KAAKiE;OAEd/C,EAAAlB,MAAIF,GAAA,KAAkB4G,OAAOC,SAEhCrC,EAAA;MAAKC,OAAM;OACTD,EAAA;;MAEEC,OAAM;MACNO,MAAK;MACL0B,SAAStF,EAAAlB,MAAIa,GAAA;OAEZK,EAAAlB,MAAIF,GAAA,KAAkB4G,OAAOE,YAEhCtC,EAAA;;MAEEC,OAAM;MACNO,MAAK;MACL0B,SAAStF,EAAAlB,MAAImB,GAAA;MACbkE,UAAUrF,KAAKiE;OAEd/C,EAAAlB,MAAIF,GAAA,KAAkB4G,OAAOG,aAE/B7G,KAAK8G,iBACJxC,EAAA;MACEC,OAAM;MACNiC,SAAStF,EAAAlB,MAAI+G,GAAA;MACbjC,MAAK;OAEJ5D,EAAAlB,MAAIF,GAAA,KAAkB4G,OAAOM,gBAE9B;IAOdC,EAAAlH,IAAAC,OAAiB,MAEbsE,EAAA;MACEC,OAAO;QACL,gBAAgB;QAChB,gCAAgC;QAChC,gBAAgBvE,KAAKiC,QAAQN,WAAW;;MAE1CuF,kBAAkBlH,KAAK8G,iBAAiB,aAAa;MACrD7B,KAAMC,KAAkCC,EAAAnF,MAAIW,GAAgBuE,GAAE;MAC9DJ,MAAK;MACLqC,WAAWjG,EAAAlB,MAAIe,GAAA;MACfqG,oBAAoBlG,EAAAlB,MAAIkD,GAAA;MACxBmE,YAAYnG,EAAAlB,MAAImB,GAAA;OAEhBmD,EAAA;MAA2BC,OAAM;OAC/BD,EAAA;MAAA,wBACuB;MACrBgD,aAAa;MACbC,MAAM3C,EAAO4C,YAAYC,QAAQC;MACjCnD,OAAM;QAERD,EAAA;MAAA,eACepD,EAAAlB,MAAIF,GAAA,KAAkB6H,UAAU5I;MAAI,wBAC5B;MACrBuI,aAAa;MACbC,MAAM3C,EAAO4C,YAAYC,QAAQC;MACjCnD,OAAM;QAERD,EAAA;MAAA,eACepD,EAAAlB,MAAIF,GAAA,KAAkB6H,UAAUnG;MAAI,wBAC5B;MACrB8F,aAAa;MACbC,MAAM3C,EAAO4C,YAAYC,QAAQC;MACjCnD,OAAM;QAERD,EAAA;MAAA,eACepD,EAAAlB,MAAIF,GAAA,KAAkB6H,UAAU7D;MAAM,wBAC9B;MACrBwD,aAAa;MACbC,MAAM3C,EAAO4C,YAAYC,QAAQC;MACjCnD,OAAM;QAERD,EAAA;MAAA,eACepD,EAAAlB,MAAIF,GAAA,KAAkB6H,UAAUC;MAAW,wBACnC;MACrBN,aAAa;MACbC,MAAM3C,EAAO4C,YAAYC,QAAQI;MACjCtD,OAAM;QAERD,EAAA;MAAA,eACepD,EAAAlB,MAAIF,GAAA,KAAkB6H,UAAU3D;MAAY,wBACpC;MACrBsD,aAAa;MACbC,MAAM3C,EAAO4C,YAAYC,QAAQC;MACjCnD,OAAM;QAERD,EAAA;MAAA,eACepD,EAAAlB,MAAIF,GAAA,KAAkB6H,UAAUG;MAAU,wBAClC;MACrBR,aAAa;MACbC,MAAM3C,EAAO4C,YAAYC,QAAQC;MACjCnD,OAAM;SAITvE,KAAKiC,QAAQN,SACZ2C,EAAA;MAAwBC,OAAM;OAC3BvE,KAAKiC,QAAQvD,KAAKqJ,KACjBzD,EAAA;MACE0D,OAAOD,EAAIlJ;MACXoC,KAAK8G,EAAIlJ;MACT0F,OAAM;OAEND,EAAA;MAAsBC,OAAM;OAC1BD,EAAA;MAAU2D,KAAKF,EAAIG;MAAM3D,OAAM;SAEjCD,EAAA;MAAsBC,OAAM;OACzBwD,EAAIhJ,OAEPuF,EAAA;MAAsBC,OAAM;OACzBwD,EAAIvG,OAEP8C,EAAA;MAAsBC,OAAM;OACzBwD,EAAIjE,SAEPQ,EAAA;MAAsBC,OAAM;OACzBwD,EAAIH,cAEPtD,EAAA;MAAsBC,OAAM;OACzB,GAAG4D,EAAWJ,EAAI/D,cAAc,iBAEnCM,EAAA;MAAsBC,OAAM;OACzB,GAAG4D,EAAWJ,EAAID,YAAY,sBAMvCxD,EAAA;MAAwBC,OAAM;OAC5BD,EAAA,sCACGtE,KAAKoI,UAAUpI,KAAKiE,UACnBK,EAAA;MACE+D,aAAanH,EAAAlB,MAAIF,GAAA,KAAkBsI,OAAOE;MAC1CC,MAAI;SAGNjE,EAAA;MACEkE,cAAclJ;MACdmJ,YAAYvH,EAAAlB,MAAIF,GAAA,KAAkB4I,WAAWJ;;IAU7DvB,EAAAhH,IAAAC,OAAa;MACVkB,EAAAlB,MAAIW,GAAA,KAAsBW;AAAe;IAG5CqH,EAAA5I,IAAAC,OAAwB;MACtBA,KAAK6C,qBAAqBE,EAAa6F;AAAI;IAG7CC,EAAA9I,IAAAC,OAAmB;MACjBmF,EAAAnF,MAAIG,GAAe,EACjB;QACErB,SAASoC,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAOqE;QACtClK,OAAOmE,EAAa6F;SAEtB;QACE9J,SAASoC,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAO1B,EAAaC;QACnDpE,OAAOmE,EAAaC;SAEtB;QACElE,SAASoC,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAO1B,EAAagG;QACnDnK,OAAOmE,EAAagG;SAEtB;QACEjK,SAASoC,EAAAlB,MAAIF,GAAA,KAAkB2E,OAAO1B,EAAaiG;QACnDpK,OAAOmE,EAAaiG;WAEvB;AAAA;IAGH5E,EAAArE,IAAAC,OAAsBiC,KACbA,EAAQgH,MAAK,CAACC,GAAGC;MACtB,MAAMC,IAAQF,EAAEnK,KAAKsK,eACnBC,IAAQH,EAAEpK,KAAKsK;MACjB,IAAID,IAAQE,GAAO;QACjB,QAAQ;;MAEV,IAAIF,IAAQE,GAAO;QACjB,OAAO;;MAET,OAAO;AAAC;0BAjnBc;mBAKE;;mBAUK;mCAKY;;;;;;kBA8BnB;;0BAUiB;;;;;;;EA2B3C,uBAAMC;IACJ3J,IAAQsB,EAAAlB,MAAImC,GAAA,KAAUf,KAAdpB;;EAGV,uBAAMwJ;IACJrE,EAAAnF,MAAIF,SAA0B2J,EAAOC,oBAAoB1J,KAAKkF,KAAG;IACjEhE,EAAAlB,MAAI6I,GAAA,KAAiBzH,KAArBpB;IACAkB,EAAAlB,MAAI2I,GAAA,KAAsBvH,KAA1BpB;;EAGF,gBAAA2J;IACEzI,EAAAlB,MAAIiD,GAAA,KAA+B7B,KAAnCpB;IACAkB,EAAAlB,MAAII,GAAA,KAAewJ;;EAGrB,kBAAAC,IAAkB;;;SAMlB,sBAAMC,CAAiBA;IACrB,IAAIA,GAAkB;MACpB5I,EAAAlB,MAAIY,GAAA,KAAcmJ,UAAU;WACvB;MACL7I,EAAAlB,MAAIY,GAAA,KAAcmJ,UAAU;;;;;SAQhC,cAAMC;IACJ,MAAMC,IAAU;IAChB,OAAOA;;EA2fT,MAAAC;IACE,OACE5F,EAAC6F,GAAI;MAACC,YAAYlJ,EAAAlB,MAAIoD,GAAA;MAAuBmB,OAAM;OACjDD,EAAA;MAAUkB,OAAOnG;QACjBiF,EAAA;MACE2D,KAAK/G,EAAAlB,MAAIC,GAAA;MACTgF,KAAMC,KACHC,EAAAnF,MAAIY,GAAgBsE,GAA4B;QAGrDZ,EAAA;MAASC,OAAM;OACZrD,EAAAlB,MAAIqE,GAAA,KAAcjD,KAAlBpB,OACAkB,EAAAlB,MAAIiH,GAAA,KAAe7F,KAAnBpB,OACAkB,EAAAlB,MAAIuG,GAAA,KAAcnF,KAAlBpB"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["dataSelectorCss","CSS_BUNDLES","FILTER_ICON","getIconPath","category","name","colorType","GxIdeDataSelector","_GxIdeDataSelector_firstGridObjectId","set","this","_GxIdeDataSelector_loadItemsCallbackJustCalled","_GxIdeDataSelector_componentLocale","_GxIdeDataSelector_animateEmptyState","_GxIdeDataSelector_shortcutsSrc","getAssetPath","_GxIdeDataSelector_filterPatternEl","_GxIdeDataSelector_filterObjectEl","_GxIdeDataSelector_chShortcutsEl","_GxIdeDataSelector_chTabularGridObjectsEl","_GxIdeDataSelector_evaluateFirstRowSelection","__classPrivateFieldGet","selectRow","__classPrivateFieldSet","_GxIdeDataSelector_chGridKeyDownHandler","e","key","_GxIdeDataSelector_confirmCallbackHandler","call","stopPropagation","confirmCallback","selectedObjectsIds","_GxIdeDataSelector_editCallbackHandler","async","result","editCallback","_GxIdeDataSelector_refreshUIWithNewConfiguration","_GxIdeDataSelector_hostKeyPressHandler","_GxIdeDataSelector_objectsSelectionChangedHandler","event","detail","rowsId","_GxIdeDataSelector_newVariableCallbackHandler","response","newVariableCallback","objects","filters","pattern","value","object","id","loading","loadItemsCallback","then","items","length","_GxIdeDataSelector_sortObjectsByName","_GxIdeDataSelector_renderFilter","h","class","htmlFor","filter","autoFocus","part","debounce","config","inputDebounce","onInput","ref","el","defaultModule","defaultValue","selectEntityCallback","selectObjectCallback","onValueChanged","_GxIdeDataSelector_renderObjects","gridIsEmpty","displayLoader","loader","data","rowSelectionMode","selectionType","onKeyDown","onSelectionChanged","undefined","settingable","size","tabularGrid","colSize","maxContent","tableHead","common","dataType","description","map","obj","rowid","onDblClick","src","type","loaderTitle","title","show","isAnimated","stateIconSrc","stateTitle","emptyState","_GxIdeDataSelector_renderEditButtons","newVariableButtonEnabled","editButtonEnabled","disabled","onClick","footer","btnNew","btnEdit","sort","a","b","nameA","toLowerCase","nameB","componentWillLoad","Locale","getComponentStrings","connectedCallback","componentDidLoad","focus","componentDidRender","suspendShortcuts","suspend","validate","isValid","render","okButtonEnabled","footerJustifySpaceBetween","Host","onKeyPress","model","cancelCallback","btnCancel","btnConfirm"],"sources":["src/components/data-selector/data-selector.scss?tag=gx-ide-data-selector&encapsulation=shadow","src/components/data-selector/data-selector.tsx"],"sourcesContent":["@import \"../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\"; // for the tabular-grid-cell-layout mixin\n\n:host {\n display: grid;\n grid-template-rows: max-content 1fr max-content;\n overflow: auto;\n block-size: 100%;\n}\n\n.section {\n display: contents;\n}\n\n.header__field-group {\n display: grid;\n grid-template-columns: 1fr 1fr;\n}\n\n.tabular-grid {\n contain: size;\n}\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".data\",\n $tabular-grid-cell-node-type: \"text\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 2,\n 3,\n 4\n )\n);\n\nch-tabular-grid.empty-result::part(main) {\n // WA to avoid scrollbar flickering when displaying the empty-state message\n overflow: hidden;\n}\nch-tabular-grid-rowset-empty {\n // to make the loader be positioned relative to 'ch-tabular-grid-rowset-empty'\n position: relative;\n}\n","/* eslint-disable @stencil-community/own-props-must-be-private */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Method,\n getAssetPath,\n JSX\n} from \"@stencil/core\";\n\nimport { Locale } from \"../../common/locale\";\n\nimport { config } from \"../../common/config\";\nimport { EntityData } from \"../../common/types\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { TabularGridSelectionChangedEvent } from \"@genexus/chameleon-controls-library\";\n\n// Best performance bundle\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/edit\",\n \"components/tabular-grid\",\n \"components/icon\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst FILTER_ICON = getIconPath({\n category: \"window-tools\",\n name: \"filter\",\n colorType: \"on-elevation\"\n});\n\n@Component({\n tag: \"gx-ide-data-selector\",\n styleUrl: \"data-selector.scss\",\n shadow: { delegatesFocus: true },\n assetsDirs: [\"gx-ide-assets/data-selector\"]\n})\nexport class GxIdeDataSelector {\n #firstGridObjectId: string; // used to select the first item after \"loadItemsCallback\"\n #loadItemsCallbackJustCalled: boolean = false; // used to select the first item after \"loadItemsCallback\"\n\n #componentLocale: any;\n #animateEmptyState: boolean = false;\n #shortcutsSrc = getAssetPath(`./gx-ide-assets/data-selector/shortcuts.json`);\n /* References needed to collect data */\n #filterPatternEl!: HTMLChEditElement;\n #filterObjectEl!: HTMLGxIdeEntitySelectorElement;\n #chShortcutsEl: HTMLChShortcutsElement;\n #chTabularGridObjectsEl: HTMLChTabularGridElement;\n\n @Element() el: HTMLGxIdeDataSelectorElement;\n\n /**\n * True if loadItemsCallback has been called and has not been resolved yet.\n */\n @State() loading: boolean = true;\n\n /**\n * The objects rendered in the table\n */\n @State() objects: ItemData[] = [];\n\n /**\n * The selected objects in the table of objects\n */\n @State() selectedObjectsIds: string[] = [];\n\n /**\n * Callback invoked when the user wishes to cancel the selection of objects.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * Callback invoked when the user presses the 'OK' button\n */\n @Prop() readonly confirmCallback!: ConfirmCallback;\n\n /**\n * The default value for the module/folder filter\n */\n @Prop() readonly defaultModule: EntityData;\n\n /**\n * If true it displays the component title on the header\n */\n @Prop() readonly displayTitle = false;\n\n /**\n * Callback invoked when user presses the edit button. Receives the first\n * selected element id as a parameter.\n */\n @Prop() readonly editCallback: EditCallback;\n\n /**\n * Callback invoked when the component needs to reload the list of attributes.\n */\n @Prop() readonly loadItemsCallback!: LoadItemsCallback;\n\n /**\n * If true, it will display a loader when needed.\n */\n @Prop() readonly loader = false;\n\n /**\n * Callback invoked when the user presses the 'New' button.\n */\n @Prop() readonly newVariableCallback: NewVariableCallback;\n\n /**\n * Callback invoked when the action is executed in the Object filter. It returns\n * the information of the selected object (id and name) or 'undefined' if it was\n * canceled.\n */\n @Prop() readonly selectObjectCallback: SelectObjectCallback;\n\n /**\n * Single if multiple object selection is not allowed. Default is multiple\n */\n @Prop() readonly selectionType: \"single\" | \"multiple\" = \"multiple\";\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n connectedCallback() {\n this.#refreshUIWithNewConfiguration();\n }\n\n componentDidLoad() {\n this.#filterPatternEl.focus();\n }\n\n componentDidRender() {\n this.#evaluateFirstRowSelection();\n }\n\n /**\n * Suspends or reactivates the shortcuts\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n if (suspendShortcuts) {\n this.#chShortcutsEl.suspend = true;\n } else {\n this.#chShortcutsEl.suspend = false;\n }\n }\n\n /**\n * Validate necessary data input\n */\n @Method()\n async validate(): Promise<boolean> {\n const isValid = true;\n return isValid;\n }\n\n /**\n * After items have been loaded and rendered, the first row should be selected.\n */\n #evaluateFirstRowSelection = () => {\n if (this.#loadItemsCallbackJustCalled) {\n this.#chTabularGridObjectsEl.selectRow(this.#firstGridObjectId);\n }\n this.#loadItemsCallbackJustCalled = false;\n };\n\n #chGridKeyDownHandler = (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n this.#confirmCallbackHandler(e);\n }\n };\n\n #confirmCallbackHandler = (e: MouseEvent | KeyboardEvent): void => {\n e.stopPropagation();\n this.confirmCallback(this.selectedObjectsIds);\n };\n\n #editCallbackHandler = async (e: MouseEvent): Promise<void> => {\n e.stopPropagation();\n if (this.selectedObjectsIds[0]) {\n const result = await this.editCallback(this.selectedObjectsIds[0]);\n if (result) {\n this.#refreshUIWithNewConfiguration();\n }\n }\n };\n\n #hostKeyPressHandler = (e: KeyboardEvent) => {\n // TODO : revise why this is necessary\n // just prevent keypress propagation\n if (e.key === \"Enter\") {\n e.stopPropagation();\n }\n };\n\n #objectsSelectionChangedHandler = (\n event: CustomEvent<TabularGridSelectionChangedEvent>\n ) => {\n this.selectedObjectsIds = event.detail.rowsId;\n };\n\n #newVariableCallbackHandler = async () => {\n const response = await this.newVariableCallback();\n if (response) {\n this.#refreshUIWithNewConfiguration();\n }\n };\n #refreshUIWithNewConfiguration = (): void => {\n this.objects = [];\n const filters: FiltersData = {\n pattern: this.#filterPatternEl?.value,\n object: this.#filterObjectEl?.value?.id\n };\n this.loading = true;\n this.loadItemsCallback(filters).then((items: ItemData[]) => {\n if (items.length) {\n this.objects = this.#sortObjectsByName(items);\n this.#firstGridObjectId = this.objects[0].id;\n this.#loadItemsCallbackJustCalled = true;\n }\n this.selectedObjectsIds = [];\n this.loading = false;\n });\n };\n\n #renderFilter = (): Element[] => {\n return [\n <div class=\"header__field-group field-group\">\n <div class=\"field field-block pattern-field\">\n <label class=\"label\" htmlFor=\"filter-pattern\">\n {this.#componentLocale.filter.pattern}\n </label>\n <ch-edit\n autoFocus\n id=\"filter-pattern\"\n name=\"filter-pattern\"\n class=\"input pattern-input\"\n part=\"filter-pattern\"\n debounce={config.inputDebounce}\n onInput={this.#refreshUIWithNewConfiguration}\n ref={(el: HTMLChEditElement) =>\n (this.#filterPatternEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n </div>\n <gx-ide-entity-selector\n id=\"object-selector\"\n value={this.defaultModule}\n defaultValue={this.defaultModule}\n selectEntityCallback={this.selectObjectCallback}\n ref={(el: HTMLGxIdeEntitySelectorElement) =>\n (this.#filterObjectEl = el as HTMLGxIdeEntitySelectorElement)\n }\n class=\"entity\"\n onValueChanged={this.#refreshUIWithNewConfiguration}\n ></gx-ide-entity-selector>\n </div>\n ];\n };\n\n #renderObjects = (): Element => {\n const gridIsEmpty = !this.objects.length;\n const displayLoader = this.loader && this.loading;\n if (!gridIsEmpty || displayLoader) {\n this.#animateEmptyState = true; // improve performance if is first render\n }\n return (\n <ch-tabular-grid\n class={{\n \"tabular-grid\": true,\n \"empty-result\": this.objects.length === 0,\n \"data\": true\n }}\n rowSelectionMode={this.selectionType}\n onKeyDown={this.#chGridKeyDownHandler}\n part=\"ch-grid-objects\"\n onSelectionChanged={\n this.objects.length ? this.#objectsSelectionChangedHandler : undefined\n }\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chTabularGridObjectsEl = el as HTMLChTabularGridElement)\n }\n >\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.maxContent}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.name}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.dataType}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n column-name={this.#componentLocale.tableHead.description}\n column-name-position=\"text\"\n settingable={false}\n size={config.tabularGrid.colSize.common}\n class=\"tabular-grid-column\"\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n\n {!gridIsEmpty ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.objects.map((obj: ItemData) => (\n <ch-tabular-grid-row\n rowid={obj.id}\n onDblClick={this.#confirmCallbackHandler}\n class=\"tabular-grid-row\"\n >\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n <ch-image\n src={\n obj.type === \"attribute\"\n ? \"objects/attribute\"\n : \"objects-parts/variables\"\n }\n class=\"icon-md\"\n ></ch-image>\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.name}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.dataType}\n </ch-tabular-grid-cell>\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {obj.description}\n </ch-tabular-grid-cell>\n </ch-tabular-grid-row>\n ))}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n {displayLoader ? (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n show\n ></gx-ide-loader>\n ) : (\n <gx-ide-empty-state\n isAnimated={this.#animateEmptyState}\n stateIconSrc={FILTER_ICON}\n stateTitle={this.#componentLocale.emptyState.title}\n ></gx-ide-empty-state>\n )}\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #renderEditButtons = (): JSX.Element | null => {\n if (!this.editCallback && !this.newVariableCallback) {\n return null;\n }\n\n const newVariableButtonEnabled = this.newVariableCallback && !this.loading;\n const editButtonEnabled =\n this.editCallback && !this.loading && this.selectedObjectsIds.length;\n\n return (\n <div class=\"buttons-spacer\">\n {this.newVariableCallback ? (\n <button\n // New Variable Button\n class=\"button-secondary\"\n disabled={!newVariableButtonEnabled}\n part=\"button button-new\"\n type=\"button\"\n onClick={this.#newVariableCallbackHandler}\n >\n {this.#componentLocale.footer.btnNew}\n </button>\n ) : (\n []\n )}\n {this.editCallback ? (\n <button\n // Edit Button\n class=\"button-secondary\"\n disabled={!editButtonEnabled}\n part=\"button button-edit\"\n type=\"button\"\n onClick={editButtonEnabled && this.#editCallbackHandler}\n >\n {this.#componentLocale.footer.btnEdit}\n </button>\n ) : (\n []\n )}\n </div>\n );\n };\n\n #sortObjectsByName = (objects: ItemData[]): ItemData[] =>\n // TODO (make this a common helper function\n // and use it in other dialog grids that\n // require filter by name).\n objects.sort((a, b) => {\n const nameA = a.name.toLowerCase(),\n nameB = b.name.toLowerCase();\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n return 0;\n });\n\n render() {\n const okButtonEnabled = !this.loading;\n const footerJustifySpaceBetween: boolean =\n !!this.newVariableCallback || !!this.editCallback;\n\n return (\n <Host onKeyPress={this.#hostKeyPressHandler} class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.#chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border spacing-body-block-start spacing-body-inline\">\n {this.#renderFilter()}\n </header>\n {this.#renderObjects()}\n <footer\n class={{\n \"footer\": true,\n \"control-footer-with-border\": true,\n \"control-footer-space-between\": footerJustifySpaceBetween,\n \"spacing-body-inline\": true,\n \"spacing-body-block-end\": true\n }}\n >\n {this.#renderEditButtons()}\n <div class=\"buttons-spacer\">\n <button\n // Cancel Button\n class=\"button-secondary\"\n part=\"button button-cancel\"\n type=\"button\"\n onClick={this.cancelCallback}\n >\n {this.#componentLocale.footer.btnCancel}\n </button>\n <button\n // Confirm Button\n class=\"button-primary\"\n part=\"button button-ok\"\n disabled={!okButtonEnabled}\n type=\"button\"\n onClick={okButtonEnabled && this.#confirmCallbackHandler}\n >\n {this.#componentLocale.footer.btnConfirm}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type NewVariableCallback = () => Promise<boolean> | undefined;\n\nexport type CancelCallback = () => Promise<void>;\n\nexport type SelectObjectCallback = () => Promise<EntityData | undefined>;\n\nexport type EditCallback = (id: string) => Promise<boolean> | undefined;\n\nexport type ConfirmCallback = (ids: string[]) => Promise<void>;\n\nexport type LoadItemsCallback = (filters: FiltersData) => Promise<ItemData[]>;\n\nexport type FiltersData = {\n pattern?: string;\n object?: string;\n};\n\nexport type ItemData = {\n type: ItemType;\n id: string;\n name: string;\n dataType: string;\n description: string;\n};\n\nexport type ItemType = \"variable\" | \"attribute\";\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["welcomePageCss","ACTIVE_SLIDE_SELECTOR","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ESCAPE_KEY","SLIDE_FADE_DURATION","SLIDE_WORD_SELECTOR","SLIDE_WORD_SELECTOR_TIMEOUT","SLIDE_WORD_SELECTOR_VISIBLE","ICON_NEXT","getAssetPath","CLOSE_ICON","getIconPath","category","name","colorType","CSS_BUNDLES","GxIdeWelcomePage","_GxIdeWelcomePage_componentLocale","set","this","_GxIdeWelcomePage_slidesDescriptionAsChunksAlreadyDisplayed","Map","_GxIdeWelcomePage_slidesElements","_GxIdeWelcomePage_slidesElementsRef","_GxIdeWelcomePage_slideTimeOutId","_GxIdeWelcomePage_closeSlider","sliderVisible","setTimeout","el","remove","closeCallback","document","removeEventListener","__classPrivateFieldGet","_GxIdeWelcomePage_keyboardEventHandler","_GxIdeWelcomePage_initiateSlidesTransition","_GxIdeWelcomePage_slideTimeOut","call","addEventListener","_GxIdeWelcomePage_displayWords","wordsNodeList","forEach","word","index","classList","add","_GxIdeWelcomePage_dotClickedHandler","event","userHasChangedSlide","itemClicked","currentTarget","parseInt","getAttribute","_GxIdeWelcomePage_updateActiveSlide","goToPrevSlide","key","slideTransitioning","lastSlideReached","activeSlideIndex","goToNextSlide","closeSlider","_GxIdeWelcomePage_nextSlideHandler","_GxIdeWelcomePage_prevSlideHandler","newIndex","clearTimeout","autoChangeSlide","transitionType","itemsWordsCount","slides","listItems","itemsWords","map","item","title","description","length","mergedItemsWords","join","split","mergedDescription","words","timeBeforeNextSlide","_GxIdeWelcomePage_secondsToRead","__classPrivateFieldSet","wordsCount","wordsPerMinute","minutes","milliseconds","_GxIdeWelcomePage_renderSlides","slide","isLastSlide","h","class","ref","role","copyright","illustrationAriaLabel","src","illustration","url","alt","paragraph","descriptionAsChunks","_GxIdeWelcomePage_splitWords","onClick","startButtonCaption","newSlideIndex","activeSlide","nextSlideReference","displayDescriptionAsChunks","descriptionAsChunksDisplayedAlready","get","slideTimeOut","querySelectorAll","componentWillLoad","Locale","getComponentStrings","componentDidLoad","render","Host","model","main","style","slide__footer","_","slide__dot"],"sources":["src/components/welcome-page/welcome-page.scss?tag=gx-ide-welcome-page&encapsulation=shadow","src/components/welcome-page/welcome-page.tsx"],"sourcesContent":[":host {\n --slide-header-block-padding: 34px;\n --slide-footer-block: var(--mer-spacing--md) var(--mer-spacing--4xl);\n --slide-footer-block-last-slide: var(--mer-spacing--md) 42px;\n --slide-footer-navigation-hide-transition: var(--mer-timing--fast);\n display: grid;\n block-size: 100%;\n inline-size: 100%;\n overflow: auto;\n padding: var(--mer-spacing--lg);\n box-sizing: border-box;\n padding: var(--mer-spacing--xl);\n}\n\n.main {\n display: grid;\n place-self: center;\n inline-size: 100%;\n max-inline-size: 1100px;\n background-color: var(--mer-surface__elevation--01);\n border-radius: 17px;\n overflow: hidden;\n border: var(--mer-border__width--sm) solid var(--mer-surface__elevation--01);\n inset-block-start: 0;\n transition: opacity var(--slide-fade-duration);\n opacity: 0;\n pointer-events: none;\n\n &--border-glow {\n animation: borderColorCycle 2s infinite;\n }\n &--visible {\n pointer-events: visible;\n opacity: 1;\n }\n}\n\n// - - - - - - - - - - - - -\n// Slide\n// - - - - - - - - - - - - -\n\n.slide {\n display: grid;\n block-size: 100%;\n grid-template-areas:\n \"header header\"\n \"slide-wrapper slide-wrapper\"\n \"footer footer\";\n grid-template-rows: max-content 1fr max-content;\n\n // - - - - - Header\n\n &__header {\n padding-inline: 18px;\n padding-block: 24px 27px;\n display: flex;\n flex-direction: row-reverse;\n grid-area: header;\n }\n\n // - - - - - Container\n\n &__container {\n display: contents;\n }\n\n &__wrapper {\n display: grid;\n column-gap: var(--mer-spacing--3xl);\n grid-template-areas:\n \"header header\"\n \"illustration copy\"\n \"footer footer\";\n grid-template-rows: max-content 1fr max-content;\n // grid-template-columns: 411px 1fr;\n grid-template-columns: 1fr 1fr;\n grid-area: slide-wrapper;\n transition: var(--slide-fade-duration) opacity;\n transition: opacity 200ms;\n padding-inline: 48px;\n opacity: 1;\n z-index: 1;\n }\n &__wrapper:not(.active) {\n opacity: 0;\n z-index: 0;\n pointer-events: none;\n }\n\n &__illustration {\n position: relative;\n overflow: hidden;\n display: grid;\n grid-area: illustration;\n place-items: center;\n inline-size: 100%;\n\n &-img {\n object-fit: contain;\n block-size: 100%;\n inline-size: 100%;\n }\n }\n\n &__copy {\n grid-area: copy;\n place-self: center;\n justify-self: flex-start;\n }\n\n &__copy-container {\n display: grid;\n gap: var(--mer-spacing--md);\n max-inline-size: 524px;\n }\n\n &__copy-header {\n display: grid;\n gap: var(--mer-spacing--md);\n }\n\n &__copy-title {\n font-size: var(--mer-font__size--xl);\n color: var(--mer-text__on-surface);\n letter-spacing: 0.02em;\n font-weight: var(--mer-font__weight--semi-bold);\n }\n\n &__copy-description {\n display: grid;\n gap: var(--mer-spacing--md);\n font-size: var(--mer-font__size--sm);\n font-weight: var(--mer-font__weight--light);\n line-height: var(--mer-line-height--spaced);\n }\n\n &__list {\n display: grid;\n gap: var(--mer-spacing--md);\n list-style: none;\n padding: 0;\n margin: 0;\n\n &-item {\n &-title {\n font-weight: var(--mer-font__weight--medium);\n }\n }\n }\n\n // words (if 'showTextInChunks' is true)\n &__word {\n transition: var(--mer-timing--regular) opacity;\n opacity: 0;\n\n &--visible {\n opacity: 1;\n }\n }\n\n // - - - - - Footer\n\n &__footer {\n $hideDotsDuration: calc(var(--mer-timing--fast) + 200ms);\n grid-area: footer;\n display: grid;\n padding-block: var(--slide-footer-block);\n opacity: 1;\n\n &-last-slide {\n opacity: 0;\n transition: $hideDotsDuration opacity;\n pointer-events: none;\n animation: footerPaddingBlockLastSlide var(--mer-timing--regular) ease-out\n forwards $hideDotsDuration;\n }\n }\n\n &__footer-wrapper {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: max-content;\n gap: var(--mer-spacing--md);\n align-items: center;\n justify-content: center;\n transition: var(--mer-timing--regular) opacity;\n opacity: 1;\n\n &-hidden {\n opacity: 0;\n }\n }\n &__dots {\n display: grid;\n gap: var(--mer-spacing--2xs);\n list-style: none;\n padding: 0;\n margin: 0;\n grid-auto-flow: column;\n grid-auto-columns: max-content;\n justify-content: center;\n\n &-inactive {\n pointer-events: none;\n }\n }\n &__dot {\n display: grid;\n padding: var(--mer-spacing--xs);\n cursor: pointer;\n\n &::before {\n content: \"\";\n place-self: center;\n inline-size: var(--mer-spacing--sm);\n block-size: var(--mer-spacing--sm);\n border-radius: calc(var(--mer-spacing--sm) / 2);\n background-color: var(--mer-color__neutral-gray--500);\n }\n &:hover::before {\n background-color: var(--mer-icon__on-primary--hover);\n }\n\n &.active {\n cursor: auto;\n &::before {\n background-color: var(--mer-accent__primary);\n cursor: auto;\n }\n }\n\n &-inactive {\n pointer-events: none;\n }\n }\n}\n\n.close-icon {\n transition: all var(--mer-timing--fast);\n &:hover {\n filter: brightness(1.5);\n }\n}\n\n.start-button {\n justify-self: start;\n margin-block-start: 25px;\n}\n\n// - - - - - - - - - - - - - -\n// Animations\n// - - - - - - - - - - - - - -\n\n@keyframes ellipseFadeInOut {\n 0% {\n opacity: 0.3;\n }\n 100% {\n opacity: 0.7;\n }\n}\n@keyframes ellipseRotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n@keyframes polygonRotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes borderColorCycle {\n 0% {\n border-color: var(--mer-surface__elevation--01);\n }\n 50% {\n border-color: var(--mer-color__primary--400);\n }\n 100% {\n border-color: var(--mer-surface__elevation--01);\n }\n}\n\n@keyframes footerPaddingBlockLastSlide {\n 0% {\n padding-block: var(--slide-footer-block);\n }\n 100% {\n padding-block: var(--slide-footer-block-last-slide);\n }\n}\n\n.fade-out {\n animation: fadeOut 0.5s forwards 0.3s;\n}\n","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath\n} from \"@stencil/core\";\n// Other Libraries\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\n// Custom Imports\nimport { Locale } from \"../../common/locale\";\n\nconst ACTIVE_SLIDE_SELECTOR = \"active\";\nconst ARROW_LEFT_KEY = \"ArrowLeft\";\nconst ARROW_RIGHT_KEY = \"ArrowRight\";\nconst ESCAPE_KEY = \"Escape\";\nconst SLIDE_FADE_DURATION = 300;\nconst SLIDE_WORD_SELECTOR = \".slide__word\";\nconst SLIDE_WORD_SELECTOR_TIMEOUT = 70;\nconst SLIDE_WORD_SELECTOR_VISIBLE = \"slide__word--visible\";\n\n// icons\nconst ICON_NEXT = getAssetPath(\n `./gx-ide-assets/welcome-page/images/icon-next.svg`\n);\nconst CLOSE_ICON = getIconPath({\n category: \"system\",\n name: \"close\",\n colorType: \"on-elevation\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"components/icon\",\n \"components/button\"\n];\n\n@Component({\n tag: \"gx-ide-welcome-page\",\n styleUrl: \"welcome-page.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/welcome-page\"]\n})\nexport class GxIdeWelcomePage {\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 #slidesDescriptionAsChunksAlreadyDisplayed: Map<number, boolean> = new Map();\n #slidesElements: HTMLElement[] = [];\n #slidesElementsRef: HTMLElement[] = [];\n // #slidesDescriptionAsChunksAlreadyDisplayed is used to know if the description of a slide\n // that is set to be displayed as chunks, has already been displayed. Used to not display\n // as chunks after the first time.\n #slideTimeOutId: NodeJS.Timeout;\n\n @Element() el: HTMLGxIdeWelcomePageElement;\n\n /**\n * The current active slide index from 'slides' Prop. It does not considers the very first slide \"Copyright\".\n */\n @State() activeSlideIndex: number = 0;\n\n /**\n * When true the slider will be visible. Used to display and hide the slide with a smooth transition.\n */\n @State() displaySlider: boolean = false;\n\n /**\n * True if the very first slide is visible (The copyright slide)\n */\n @State() copyrightsVisible: boolean = true;\n\n /**\n * True if the user has reached the last slide. Used to hide/disable the navigation.\n */\n @State() lastSlideReached: boolean = false;\n\n /**\n * When true the slider will be visible. Used to display and hide the slider with a smooth transition.\n */\n @State() sliderVisible: boolean = false;\n\n /**\n * True if a slide is transitioning, false otherwise. Used to disable the navigation arrows while transitioning.\n */\n @State() slideTransitioning: boolean = false;\n\n /**\n * True if the user has changed slides by clicking on the navigation dots, or by using the keyboard arrows. This is used to know evaluate the slide transition setTimeOut. If the user has navigated, automatic slide transition should be turned off.\n */\n @State() userHasChangedSlide: boolean = false;\n\n /**\n * The transition type between the slides. \"static\" requires the user to navigate by clicking the navigation dots. \"auto\" will transition automatically after a calculated amount of time.\n */\n @Prop() readonly transitionType: TransitionType = \"auto\";\n\n /**\n * The estimated amount of words per minute that the user requires to read a slide. This value is used to return the time each slide is freezed before transitioning to the next one. Only evaluated when transitionType is set to \"auto\".\n */\n @Prop() readonly wordsPerMinute: number = 250;\n\n /**\n * Callback invoked when the user closes the slider by pressing the close button.\n */\n @Prop() readonly closeCallback!: CloseCallback;\n\n /**\n * An array of slides, with the information that each slide requires. This slides appear after the first slide (Copyrights) that is defined inside the component.\n */\n @Prop() readonly slides: SlideInfo[] = [];\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#renderSlides();\n }\n\n componentDidLoad() {\n this.#slidesElementsRef[this.activeSlideIndex].classList.add(\n ACTIVE_SLIDE_SELECTOR\n );\n this.sliderVisible = true;\n this.#initiateSlidesTransition();\n }\n\n #closeSlider = () => {\n this.sliderVisible = false;\n setTimeout(() => {\n // wait until the slide disappears, then remove.\n this.el.remove();\n this.closeCallback();\n document.removeEventListener(\"keydown\", this.#keyboardEventHandler);\n }, SLIDE_FADE_DURATION);\n };\n\n #initiateSlidesTransition = () => {\n this.#slideTimeOut();\n // listen to keydown events to navigate the slides with the arrows\n document.addEventListener(\"keydown\", this.#keyboardEventHandler);\n };\n\n #displayWords = (wordsNodeList: NodeListOf<HTMLElement>) => {\n wordsNodeList.forEach((word, index) => {\n setTimeout(() => {\n word.classList.add(SLIDE_WORD_SELECTOR_VISIBLE);\n }, index * SLIDE_WORD_SELECTOR_TIMEOUT);\n });\n };\n\n #dotClickedHandler = (event: MouseEvent) => {\n this.userHasChangedSlide = true;\n const itemClicked = event.currentTarget as HTMLElement;\n const index = parseInt(itemClicked.getAttribute(\"data-index\"), 10);\n this.#updateActiveSlide(index);\n };\n\n #keyboardEventHandler = (event: KeyboardEvent) => {\n this.userHasChangedSlide = true;\n const goToPrevSlide =\n event.key === ARROW_LEFT_KEY &&\n !this.slideTransitioning &&\n !this.lastSlideReached &&\n this.activeSlideIndex !== 0;\n\n const goToNextSlide =\n event.key === ARROW_RIGHT_KEY &&\n !this.slideTransitioning &&\n !this.lastSlideReached;\n\n const closeSlider =\n event.key === ESCAPE_KEY ||\n (event.key === ARROW_RIGHT_KEY &&\n !this.slideTransitioning &&\n this.lastSlideReached);\n\n if (goToNextSlide) {\n this.#nextSlideHandler();\n } else if (goToPrevSlide) {\n this.#prevSlideHandler();\n } else if (closeSlider) {\n this.#closeSlider();\n }\n };\n\n #nextSlideHandler = () => {\n const newIndex = this.activeSlideIndex + 1;\n this.#updateActiveSlide(newIndex);\n };\n\n #prevSlideHandler = () => {\n const newIndex = this.activeSlideIndex - 1;\n this.#updateActiveSlide(newIndex);\n };\n\n #slideTimeOut = () => {\n // Clear any existing timeout\n if (this.#slideTimeOutId) {\n clearTimeout(this.#slideTimeOutId);\n }\n\n const autoChangeSlide =\n this.transitionType === \"auto\" &&\n !this.lastSlideReached &&\n !this.userHasChangedSlide;\n\n if (!autoChangeSlide) {\n return;\n }\n\n let itemsWordsCount = 0;\n if (this.slides[this.activeSlideIndex].listItems) {\n const itemsWords = this.slides[this.activeSlideIndex].listItems.map(\n item => {\n return item.title + item.description;\n }\n );\n if (itemsWords.length) {\n const mergedItemsWords = itemsWords.join(\"\");\n itemsWordsCount = mergedItemsWords.split(\" \").length;\n }\n }\n\n const mergedDescription =\n this.slides[this.activeSlideIndex].description.join(\"\");\n const words = mergedDescription.split(\" \").length;\n const timeBeforeNextSlide: number = this.#secondsToRead(\n words + itemsWordsCount\n );\n\n // Set a fresh timeout\n if (timeBeforeNextSlide) {\n this.#slideTimeOutId = setTimeout(() => {\n this.#nextSlideHandler();\n }, timeBeforeNextSlide);\n }\n };\n\n #secondsToRead = (\n wordsCount: number,\n wordsPerMinute = this.wordsPerMinute\n ): number => {\n const minutes = wordsCount / wordsPerMinute;\n const milliseconds = minutes * 60000; // Convert minutes to milliseconds\n return milliseconds;\n };\n\n #renderSlides = () => {\n this.#slidesElements = this.slides.map((slide, index) => {\n const isLastSlide = index === this.slides.length - 1;\n return (\n <section\n class=\"slide__wrapper\"\n ref={(el: HTMLElement) =>\n (this.#slidesElementsRef[index] = el as HTMLElement)\n }\n >\n <div\n class=\"slide__illustration\"\n role=\"img\"\n aria-label={this.#componentLocale.copyright.illustrationAriaLabel}\n >\n <img\n class=\"slide__illustration-img\"\n src={slide.illustration.url}\n alt={slide.illustration.alt}\n />\n </div>\n <section class=\"slide__copy\">\n <div class=\"slide__copy-container\">\n <header class=\"slide__copy-header\">\n <img src={ICON_NEXT} alt=\"GeneXus Next isologotype\" />\n <h2 class=\"slide__copy-title\">{slide.title}</h2>\n </header>\n <div class=\"slide__copy-description\">\n {slide.description?.map(paragraph => {\n return (\n <p>\n {slide.descriptionAsChunks\n ? this.#splitWords(paragraph)\n : paragraph}\n </p>\n );\n })}\n {slide.listItems?.length && (\n <ul class=\"slide__list\">\n {slide.listItems.map(item => {\n return (\n <li class=\"slide__list-item\">\n <strong class=\"slide__list-item-title\">\n {item.title}\n </strong>{\" \"}\n {item.description}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n {isLastSlide && (\n <button\n class=\"button-primary start-button\"\n onClick={this.#closeSlider}\n >\n {this.#componentLocale.startButtonCaption}\n </button>\n )}\n </div>\n </section>\n </section>\n );\n });\n };\n\n #splitWords = (paragraph: string): HTMLSpanElement[] => {\n return paragraph.split(\" \").map(word => {\n // keep the space after {word} !\n return <span class=\"slide__word\">{word} </span>;\n });\n };\n\n #updateActiveSlide = (newSlideIndex: number) => {\n this.slideTransitioning = true;\n\n // unset current active slide\n const activeSlide = this.#slidesElementsRef[this.activeSlideIndex];\n activeSlide.classList.remove(ACTIVE_SLIDE_SELECTOR);\n\n const nextSlideReference = this.#slidesElementsRef[newSlideIndex];\n const displayDescriptionAsChunks =\n this.slides[newSlideIndex].descriptionAsChunks;\n const descriptionAsChunksDisplayedAlready =\n this.#slidesDescriptionAsChunksAlreadyDisplayed.get(newSlideIndex);\n let wordsCount;\n let wordsNodeList: NodeListOf<HTMLElement>;\n let slideTimeOut = 0;\n if (displayDescriptionAsChunks) {\n wordsNodeList = nextSlideReference.querySelectorAll(SLIDE_WORD_SELECTOR);\n wordsCount = wordsNodeList.length;\n slideTimeOut = wordsCount * SLIDE_WORD_SELECTOR_TIMEOUT;\n }\n\n this.lastSlideReached = newSlideIndex === this.slides.length - 1;\n\n // set new slide as active after fade out\n setTimeout(() => {\n nextSlideReference.classList.add(ACTIVE_SLIDE_SELECTOR);\n\n if (displayDescriptionAsChunks && !descriptionAsChunksDisplayedAlready) {\n this.#slidesDescriptionAsChunksAlreadyDisplayed.set(\n newSlideIndex,\n true\n );\n this.#displayWords(wordsNodeList);\n setTimeout(() => {\n this.slideTransitioning = false;\n }, slideTimeOut);\n } else {\n this.slideTransitioning = false;\n }\n }, SLIDE_FADE_DURATION);\n\n // update active slide index\n this.activeSlideIndex = newSlideIndex;\n this.#slideTimeOut(); // this has to be after this.#updateActiveSlide.\n };\n\n render() {\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div\n class={{\n \"main\": true,\n \"main--visible\": this.sliderVisible,\n \"main--border-glow\": this.lastSlideReached\n }}\n style={{ \"--slide-fade-duration\": `${SLIDE_FADE_DURATION}ms` }}\n >\n <section class=\"slide\">\n <header class=\"slide__header\">\n <button\n class=\"button-tertiary button-icon-only close-icon\"\n aria-label=\"close presentation\"\n onClick={this.#closeSlider}\n >\n <ch-image class=\"icon-md\" src={CLOSE_ICON}></ch-image>\n </button>\n </header>\n <div class=\"slide__container\">{this.#slidesElements}</div>\n <footer\n // slide common footer\n class={{\n slide__footer: true\n }}\n >\n <div\n class={{\n \"slide__footer-wrapper\": true\n }}\n >\n <ul class=\"slide__dots\" aria-label=\"Slide indicators\">\n {this.slides.map((_, index) => {\n return (\n <li\n class={{\n \"slide__dot\": true,\n \"slide__dot-inactive\": this.slideTransitioning,\n [ACTIVE_SLIDE_SELECTOR]:\n index === this.activeSlideIndex\n }}\n data-index={index}\n onClick={\n !this.slideTransitioning && this.#dotClickedHandler\n }\n ></li>\n );\n })}\n </ul>\n </div>\n </footer>\n </section>\n </div>\n </Host>\n );\n }\n}\n\nexport type SlideInfo = {\n illustration: {\n url: string;\n alt: string;\n };\n title: string;\n description?: string[];\n descriptionAsChunks?: boolean;\n listItems?: Array<{\n title: string;\n description: string;\n }>;\n};\n\nexport type CloseCallback = () => Promise<void>;\nexport type TransitionType = \"static\" | \"auto\";\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["filesToListItemsData","files","itemsData","forEach","file","itemId","name","itemValue","itemIcon","undefined","itemChecked","push","bpmImportFilesCss","GxIdeTemplate","this","renderedFirstTime","fileSelectionChangedHandler","selectedItem","selectionChanged","emit","selectedFiles","Array","isArray","detail","map","item","loadFileHandle","async","fileInput","click","handleFileInputChange","event","target","length","newFiles","from","uniqueFiles","filter","newFile","some","existingFile","value","confirmCallbackHandle","confirmCallback","data","automaticBackup","automaticBackupEl","removeFiles","filesToRemove","includes","handleRemoveButtonClick","componentWillLoad","_componentLocale","Locale","getComponentStrings","el","componentDidRender","componentDidRenderFirstTime","componentName","render","h","Host","class","containerTitle","displayTitle","slimmerFooter","config","gxIdeContainer","htmlFor","main","listLabel","id","type","listName","ordered","onSelectionChanged","renderListItems","accessibleName","automaticBackupLabel","checkedValue","unCheckedValue","ref","accept","allowedExtensions","join","onChange","multiple","onClick","addFilesButton","disabled","removeFilesButton","slot","footer","confirmButton","cancelCallback","cancelButton"],"sources":["src/components/bpm/import-files/helpers.ts","src/components/bpm/import-files/bpm-import-files.scss?tag=gx-ide-bpm-import-files&encapsulation=shadow","src/components/bpm/import-files/bpm-import-files.tsx"],"sourcesContent":["import { ItemData } from \"../../_helpers/list-selector/list-selector-item/list-selector-item\";\n\nexport const filesToListItemsData = (files: string[] | File[]): ItemData[] => {\n const itemsData: ItemData[] = [];\n files.forEach(file => {\n const itemId = typeof file === \"string\" ? file : file.name;\n const itemValue = typeof file === \"string\" ? file : file.name;\n const itemIcon: string = undefined;\n const itemChecked: boolean = false;\n itemsData.push({\n itemId: itemId,\n itemValue: itemValue,\n itemIcon: itemIcon,\n itemChecked: itemChecked\n });\n });\n return itemsData;\n};\n","@import \"../../../global/gx-ide-common.scss\";\n@import \"../../../global/gx-ide-mixins.scss\";\n@import \"../../../global/temporary-tokens-chameleon.scss\";\n\n:host {\n display: block;\n}\n\n.main {\n display: grid;\n grid-template-rows: 1fr auto;\n height: 100%;\n gap: var(--gx-ide-form-items-gap);\n}\n.path-list {\n width: 100%;\n height: 100%;\n}\ngx-ide-list-selector::part(list) {\n height: 100%;\n}\n.hidden-input {\n display: none;\n}\n.checkbox-container {\n display: flex;\n gap: 0.5rem;\n}\n.footer {\n display: flex;\n flex-direction: column;\n gap: var(--gx-ide-form-items-gap);\n}\n","/* STENCIL IMPORTS */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n Event,\n EventEmitter,\n State\n} from \"@stencil/core\";\n/* OTHER LIBRARIES IMPORTS */\nimport { CheckedItemsInfo } from \"../../_helpers/list-selector/list-selector\";\n/* CUSTOM IMPORTS */\nimport { config } from \"../../../common/config\";\nimport { Locale } from \"../../../common/locale\";\nimport { renderListItems } from \"../../../common/render-list-item\";\nimport { filesToListItemsData } from \"./helpers\";\n\n@Component({\n tag: \"gx-ide-bpm-import-files\",\n styleUrl: \"bpm-import-files.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/bpm-import-files\"]\n})\nexport class GxIdeTemplate {\n // 1.OWN PROPERTIES //\n\n /**\n * The component hard-coded strings translations.\n */\n private _componentLocale: any;\n\n private renderedFirstTime = false;\n\n // 2. REFERENCE TO ELEMENTS //\n\n @Element() el: HTMLGxIdeBpmImportFilesElement;\n\n private fileInput: HTMLInputElement;\n private automaticBackupEl: HTMLChCheckboxElement;\n\n // 3.STATE() VARIABLES //\n /**\n * Contains the list of files\n */\n @State() files: File[] = [];\n\n /**\n * Contains the list of selected files\n */\n @State() selectedFiles: string[] = [];\n\n // 4.PUBLIC PROPERTY API | WATCH'S //\n\n /**\n * If true it displays the component title on the header\n */\n @Prop() readonly displayTitle = false;\n\n /**\n * Allowed extensions when 'Add files' button is pressed\n */\n @Prop() readonly allowedExtensions: string[];\n\n /**\n * Callback invoked when user press 'OK' button\n */\n @Prop() readonly confirmCallback: (data: ImportData) => Promise<boolean>;\n\n /**\n * Callback invoked when user press 'Cancel' button.\n */\n @Prop() readonly cancelCallback: () => Promise<void>;\n\n // 5.EVENTS (EMIT) //\n\n /**\n * @description Gets fired when the component has rendered for the first time.\n */\n @Event() componentDidRenderFirstTime: EventEmitter<string>;\n\n /**\n * @description Gets fired when something changes on items section.\n */\n @Event() selectionChanged: EventEmitter<void>;\n\n // 6.COMPONENT LIFECYCLE METHODS //\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n componentDidRender() {\n if (!this.renderedFirstTime) {\n this.componentDidRenderFirstTime.emit(\n this._componentLocale.componentName\n );\n this.renderedFirstTime = true;\n }\n }\n\n // 7.LISTENERS //\n\n // 8.PUBLIC METHODS API //\n\n // 9.LOCAL METHODS //\n\n private fileSelectionChangedHandler = (\n selectedItem: CustomEvent<CheckedItemsInfo>\n ) => {\n this.selectionChanged.emit();\n\n const selectedFiles = Array.isArray(selectedItem.detail)\n ? selectedItem.detail\n : [selectedItem.detail];\n\n this.selectedFiles = selectedFiles.map(item => item.itemValue);\n };\n\n private loadFileHandle = async () => {\n this.fileInput.click();\n };\n\n private handleFileInputChange = (event: Event) => {\n const fileInput = event.target as HTMLInputElement;\n\n if (fileInput.files && fileInput.files.length > 0) {\n const newFiles: File[] = Array.from(fileInput.files);\n const uniqueFiles = newFiles.filter(\n newFile =>\n !this.files.some(existingFile => existingFile.name === newFile.name)\n );\n this.files = [...this.files, ...uniqueFiles];\n }\n\n this.fileInput.value = null;\n };\n\n private confirmCallbackHandle = async () => {\n if (this.confirmCallback && this.files.length > 0) {\n const data: ImportData = {\n automaticBackup: this.automaticBackupEl.value === \"true\",\n files: this.files\n };\n\n await this.confirmCallback(data);\n }\n };\n\n private removeFiles = (filesToRemove: string[]) => {\n this.files = this.files.filter(file => !filesToRemove.includes(file.name));\n\n this.selectedFiles = [];\n this.fileInput.value = null;\n };\n\n private handleRemoveButtonClick = () => {\n this.removeFiles(this.selectedFiles);\n };\n\n // 10.RENDER() FUNCTION //\n\n render() {\n return (\n <Host class=\"gx-ide-component\">\n <div class=\"gx-ide-main-wrapper\">\n <gx-ide-container\n containerTitle={\n this.displayTitle ? this._componentLocale.componentName : null\n }\n slimmerFooter={config.gxIdeContainer.slimmerFooter}\n >\n <div class=\"main\">\n {/* path list*/}\n <div class=\"controls-wrapper controls-wrapper--vertical\">\n <label htmlFor=\"path-list\">\n {this._componentLocale.main.listLabel}\n </label>\n <gx-ide-list-selector\n id=\"path-list\"\n type=\"multi-selection\"\n listName=\"path-list\"\n ordered\n onSelectionChanged={this.fileSelectionChangedHandler}\n class=\"path-list\"\n >\n {renderListItems(filesToListItemsData(this.files))}\n </gx-ide-list-selector>\n </div>\n\n <div class=\"footer\">\n <div class=\"checkbox-container\">\n <ch-checkbox\n id=\"automatic-backup\"\n accessibleName={\n this._componentLocale.main.automaticBackupLabel\n }\n checkedValue=\"true\"\n unCheckedValue=\"false\"\n value=\"checked\"\n ref={el =>\n (this.automaticBackupEl = el as HTMLChCheckboxElement)\n }\n ></ch-checkbox>\n <label htmlFor=\"automatic-backup\">\n {this._componentLocale.main.automaticBackupLabel}\n </label>\n </div>\n <div class=\"controls-wrapper\">\n <input\n type=\"file\"\n id=\"input_file\"\n accept={this.allowedExtensions?.join(\", \")}\n ref={el => (this.fileInput = el as HTMLInputElement)}\n onChange={this.handleFileInputChange}\n class=\"hidden-input\"\n multiple\n />\n <button onClick={this.loadFileHandle}>\n {this._componentLocale.main.addFilesButton}\n </button>\n <button\n onClick={this.handleRemoveButtonClick}\n disabled={this.selectedFiles.length === 0}\n >\n {this._componentLocale.main.removeFilesButton} (\n {this.selectedFiles.length})\n </button>\n </div>\n </div>\n </div>\n\n <button slot=\"footer-end\" onClick={this.confirmCallbackHandle}>\n {this._componentLocale.footer.confirmButton}\n </button>\n <button slot=\"footer-end\" onClick={this.cancelCallback}>\n {this._componentLocale.footer.cancelButton}\n </button>\n </gx-ide-container>\n </div>\n </Host>\n );\n }\n}\n\nexport type ImportData = {\n files: File[];\n automaticBackup: boolean;\n};\n"],"mappings":"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"}