@genexus/genexus-ide-ui 1.0.47 → 1.0.49

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 (168) hide show
  1. package/dist/{esm/MERCURY_ASSETS-91a1db9c.js → cjs/MERCURY_ASSETS-ac982891.js} +2 -4
  2. package/dist/cjs/MERCURY_ASSETS-ac982891.js.map +1 -0
  3. package/dist/cjs/assets-manager-7227a74b.js +7 -0
  4. package/dist/cjs/assets-manager-7227a74b.js.map +1 -0
  5. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  6. package/dist/cjs/gx-ide-ai-message.cjs.entry.js +3 -2
  7. package/dist/cjs/gx-ide-ai-message.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-chat-container.cjs.entry.js +53 -0
  9. package/dist/cjs/gx-ide-chat-container.cjs.entry.js.map +1 -0
  10. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +4 -3
  11. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
  12. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +3 -2
  13. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
  14. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js +3 -2
  15. package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js.map +1 -1
  16. package/dist/cjs/gx-ide-data-selector.cjs.entry.js +3 -2
  17. package/dist/cjs/gx-ide-data-selector.cjs.entry.js.map +1 -1
  18. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +3 -2
  19. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -1
  20. package/dist/cjs/gx-ide-design-import.cjs.entry.js +8 -7
  21. package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
  22. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +4 -3
  23. package/dist/cjs/gx-ide-entity-selector.cjs.entry.js.map +1 -1
  24. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +7 -6
  25. package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js.map +1 -1
  26. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +6 -5
  27. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
  28. package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js +4 -3
  29. package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js.map +1 -1
  30. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +4 -3
  31. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -1
  32. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +3 -2
  33. package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
  34. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +4 -3
  35. package/dist/cjs/gx-ide-object-selector.cjs.entry.js.map +1 -1
  36. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +323 -0
  37. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -0
  38. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +3 -2
  39. package/dist/cjs/gx-ide-share-kb.cjs.entry.js.map +1 -1
  40. package/dist/cjs/gx-ide-start-page.cjs.entry.js +6 -5
  41. package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
  42. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js +3 -2
  43. package/dist/cjs/gx-ide-welcome-page.cjs.entry.js.map +1 -1
  44. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js +3 -2
  45. package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js.map +1 -1
  46. package/dist/cjs/loader.cjs.js +1 -1
  47. package/dist/collection/collection-manifest.json +3 -1
  48. package/dist/collection/components/_helpers/chat-container/chat-container.css +178 -0
  49. package/dist/collection/components/_helpers/chat-container/chat-container.js +113 -0
  50. package/dist/collection/components/_helpers/chat-container/chat-container.js.map +1 -0
  51. package/dist/collection/components/_helpers/chat-container/code-render.js +42 -0
  52. package/dist/collection/components/_helpers/chat-container/code-render.js.map +1 -0
  53. package/dist/collection/showcase/chat-container/callbacks.js +247 -0
  54. package/dist/collection/showcase/chat-container/callbacks.js.map +1 -0
  55. package/dist/collection/showcase/chat-container/chat-showcase.css +4 -0
  56. package/dist/collection/showcase/chat-container/chat.showcase.js +54 -0
  57. package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -0
  58. package/dist/collection/testing/locale.e2e.js +4 -0
  59. package/dist/collection/testing/locale.e2e.js.map +1 -1
  60. package/dist/components/chat-container.js +67 -0
  61. package/dist/components/chat-container.js.map +1 -0
  62. package/dist/components/gx-ide-chat-container.d.ts +11 -0
  63. package/dist/components/gx-ide-chat-container.js +8 -0
  64. package/dist/components/gx-ide-chat-container.js.map +1 -0
  65. package/dist/components/gx-ide-sc-chat-container.d.ts +11 -0
  66. package/dist/components/gx-ide-sc-chat-container.js +346 -0
  67. package/dist/components/gx-ide-sc-chat-container.js.map +1 -0
  68. package/dist/{cjs/MERCURY_ASSETS-fbc83c8c.js → esm/MERCURY_ASSETS-9e4e8ebc.js} +1 -7
  69. package/dist/esm/MERCURY_ASSETS-9e4e8ebc.js.map +1 -0
  70. package/dist/esm/assets-manager-0d129105.js +5 -0
  71. package/dist/esm/assets-manager-0d129105.js.map +1 -0
  72. package/dist/esm/genexus-ide-ui.js +1 -1
  73. package/dist/esm/gx-ide-ai-message.entry.js +2 -1
  74. package/dist/esm/gx-ide-ai-message.entry.js.map +1 -1
  75. package/dist/esm/gx-ide-chat-container.entry.js +49 -0
  76. package/dist/esm/gx-ide-chat-container.entry.js.map +1 -0
  77. package/dist/esm/gx-ide-create-kb-from-server.entry.js +2 -1
  78. package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
  79. package/dist/esm/gx-ide-current-user-info.entry.js +2 -1
  80. package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
  81. package/dist/esm/gx-ide-dashboard-home.entry.js +2 -1
  82. package/dist/esm/gx-ide-dashboard-home.entry.js.map +1 -1
  83. package/dist/esm/gx-ide-data-selector.entry.js +2 -1
  84. package/dist/esm/gx-ide-data-selector.entry.js.map +1 -1
  85. package/dist/esm/gx-ide-data-type-selector.entry.js +2 -1
  86. package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -1
  87. package/dist/esm/gx-ide-design-import.entry.js +2 -1
  88. package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
  89. package/dist/esm/gx-ide-entity-selector.entry.js +2 -1
  90. package/dist/esm/gx-ide-entity-selector.entry.js.map +1 -1
  91. package/dist/esm/gx-ide-kb-manager-export.entry.js +2 -1
  92. package/dist/esm/gx-ide-kb-manager-export.entry.js.map +1 -1
  93. package/dist/esm/gx-ide-kb-manager-import.entry.js +2 -1
  94. package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
  95. package/dist/esm/gx-ide-manage-module-references-v2.entry.js +2 -1
  96. package/dist/esm/gx-ide-manage-module-references-v2.entry.js.map +1 -1
  97. package/dist/esm/gx-ide-manage-module-references.entry.js +2 -1
  98. package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -1
  99. package/dist/esm/gx-ide-new-kb.entry.js +2 -1
  100. package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
  101. package/dist/esm/gx-ide-object-selector.entry.js +2 -1
  102. package/dist/esm/gx-ide-object-selector.entry.js.map +1 -1
  103. package/dist/esm/gx-ide-sc-chat-container.entry.js +319 -0
  104. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -0
  105. package/dist/esm/gx-ide-share-kb.entry.js +2 -1
  106. package/dist/esm/gx-ide-share-kb.entry.js.map +1 -1
  107. package/dist/esm/gx-ide-start-page.entry.js +2 -1
  108. package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
  109. package/dist/esm/gx-ide-welcome-page.entry.js +2 -1
  110. package/dist/esm/gx-ide-welcome-page.entry.js.map +1 -1
  111. package/dist/esm/gx-ide-ww-attributes.entry.js +2 -1
  112. package/dist/esm/gx-ide-ww-attributes.entry.js.map +1 -1
  113. package/dist/esm/loader.js +1 -1
  114. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  115. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  116. package/dist/genexus-ide-ui/{p-aa324232.entry.js → p-1a629aa9.entry.js} +4 -2
  117. package/dist/genexus-ide-ui/{p-aa324232.entry.js.map → p-1a629aa9.entry.js.map} +1 -1
  118. package/dist/genexus-ide-ui/{p-18317dd7.entry.js → p-1e29cd30.entry.js} +4 -2
  119. package/dist/genexus-ide-ui/{p-18317dd7.entry.js.map → p-1e29cd30.entry.js.map} +1 -1
  120. package/dist/genexus-ide-ui/{p-af05e095.entry.js → p-1ea6c3fe.entry.js} +13 -11
  121. package/dist/genexus-ide-ui/{p-af05e095.entry.js.map → p-1ea6c3fe.entry.js.map} +1 -1
  122. package/dist/genexus-ide-ui/{p-a1c5775d.entry.js → p-2145674e.entry.js} +4 -2
  123. package/dist/genexus-ide-ui/{p-a1c5775d.entry.js.map → p-2145674e.entry.js.map} +1 -1
  124. package/dist/genexus-ide-ui/{p-ec6129c7.entry.js → p-2cefd33a.entry.js} +4 -2
  125. package/dist/genexus-ide-ui/{p-ec6129c7.entry.js.map → p-2cefd33a.entry.js.map} +1 -1
  126. package/dist/genexus-ide-ui/{p-f252dd07.entry.js → p-36fecdcb.entry.js} +10 -8
  127. package/dist/genexus-ide-ui/{p-f252dd07.entry.js.map → p-36fecdcb.entry.js.map} +1 -1
  128. package/dist/genexus-ide-ui/{p-f827b9b8.entry.js → p-3ca45936.entry.js} +4 -2
  129. package/dist/genexus-ide-ui/{p-f827b9b8.entry.js.map → p-3ca45936.entry.js.map} +1 -1
  130. package/dist/genexus-ide-ui/{p-a8739942.entry.js → p-440742f3.entry.js} +4 -2
  131. package/dist/genexus-ide-ui/{p-a8739942.entry.js.map → p-440742f3.entry.js.map} +1 -1
  132. package/dist/genexus-ide-ui/{p-a40648dc.entry.js → p-442e30e3.entry.js} +4 -2
  133. package/dist/genexus-ide-ui/{p-a40648dc.entry.js.map → p-442e30e3.entry.js.map} +1 -1
  134. package/dist/genexus-ide-ui/{p-2dcfa6ef.entry.js → p-47d4ec9a.entry.js} +33 -31
  135. package/dist/genexus-ide-ui/{p-2dcfa6ef.entry.js.map → p-47d4ec9a.entry.js.map} +1 -1
  136. package/dist/genexus-ide-ui/p-5afe1477.entry.js +72 -0
  137. package/dist/genexus-ide-ui/p-5afe1477.entry.js.map +1 -0
  138. package/dist/genexus-ide-ui/p-6e4208d8.js +9 -0
  139. package/dist/genexus-ide-ui/p-6e4208d8.js.map +1 -0
  140. package/dist/genexus-ide-ui/p-72867329.entry.js +280 -0
  141. package/dist/genexus-ide-ui/p-72867329.entry.js.map +1 -0
  142. package/dist/genexus-ide-ui/{p-64f2a9f4.entry.js → p-7be438dc.entry.js} +10 -8
  143. package/dist/genexus-ide-ui/{p-64f2a9f4.entry.js.map → p-7be438dc.entry.js.map} +1 -1
  144. package/dist/genexus-ide-ui/{p-8cebb078.entry.js → p-8942f4b6.entry.js} +4 -2
  145. package/dist/genexus-ide-ui/{p-8cebb078.entry.js.map → p-8942f4b6.entry.js.map} +1 -1
  146. package/dist/genexus-ide-ui/{p-9e34f166.entry.js → p-9cfd7800.entry.js} +4 -2
  147. package/dist/genexus-ide-ui/{p-9e34f166.entry.js.map → p-9cfd7800.entry.js.map} +1 -1
  148. package/dist/genexus-ide-ui/{p-1986d34d.js → p-ad5caf61.js} +1 -10
  149. package/dist/genexus-ide-ui/p-ad5caf61.js.map +1 -0
  150. package/dist/genexus-ide-ui/{p-c1162623.entry.js → p-b1eb312d.entry.js} +15 -13
  151. package/dist/genexus-ide-ui/{p-c1162623.entry.js.map → p-b1eb312d.entry.js.map} +1 -1
  152. package/dist/genexus-ide-ui/{p-1feae6ef.entry.js → p-c4c48a1e.entry.js} +4 -2
  153. package/dist/genexus-ide-ui/{p-1feae6ef.entry.js.map → p-c4c48a1e.entry.js.map} +1 -1
  154. package/dist/genexus-ide-ui/{p-e4bbec21.entry.js → p-cfef5956.entry.js} +4 -2
  155. package/dist/genexus-ide-ui/{p-e4bbec21.entry.js.map → p-cfef5956.entry.js.map} +1 -1
  156. package/dist/genexus-ide-ui/{p-92c51f3e.entry.js → p-e14affde.entry.js} +4 -2
  157. package/dist/genexus-ide-ui/{p-92c51f3e.entry.js.map → p-e14affde.entry.js.map} +1 -1
  158. package/dist/genexus-ide-ui/{p-0c60c76f.entry.js → p-f7d2a39a.entry.js} +11 -9
  159. package/dist/genexus-ide-ui/{p-0c60c76f.entry.js.map → p-f7d2a39a.entry.js.map} +1 -1
  160. package/dist/types/components/_helpers/chat-container/chat-container.d.ts +19 -0
  161. package/dist/types/components/_helpers/chat-container/code-render.d.ts +4 -0
  162. package/dist/types/components.d.ts +46 -0
  163. package/dist/types/showcase/chat-container/callbacks.d.ts +6 -0
  164. package/dist/types/showcase/chat-container/chat.showcase.d.ts +6 -0
  165. package/package.json +1 -1
  166. package/dist/cjs/MERCURY_ASSETS-fbc83c8c.js.map +0 -1
  167. package/dist/esm/MERCURY_ASSETS-91a1db9c.js.map +0 -1
  168. package/dist/genexus-ide-ui/p-1986d34d.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["KB_OBJECT","KB_CATEGORY","STATUS_REGEXP_KEY","convertImportCategoryItemToTreeItem","importCatIcon","importItems","importTreeItems","forEach","importItem","push","id","caption","name","expanded","leaf","startImgSrc","metadata","convertImportCategoryDataToTreeView","importCategoryData","treeData","importCategory","importCategoryTreeItem","items","length","icon","createImportResultDataMessages","importItemId","messagesArray","status","messages","message","i","JSON","stringify","createImportResultItem","categoryData","importItemResultData","resultItemId","importResultItem","parts","addImportItemResultDataItem","categoryItemMap","objectCategoryItemMap","importTreeActualState","updatedImportTreeModel","objectCategoryId","get","categoryIndex","findIndex","treeItem","category","resultItem","newItemsLength","kbManagerImportCss","CSS_BUNDLES","NOTICE_ICON","getIconPath","colorType","FILE_ICON","GEMINI_TOOLS_SETTINGS","MENU_DELETE","CHECKBOX_ALL_CHECKED_VALUE","CHECKBOX_ALL_UNCHECKED_VALUE","GxIdeKbManagerImport","_GxIdeKbManagerImport_componentLocale","set","this","_GxIdeKbManagerImport_selectedObjectsInFileIds","_GxIdeKbManagerImport_fileInputEl","_GxIdeKbManagerImport_fileInputHiddenEl","_GxIdeKbManagerImport_objectsTreeEl","_GxIdeKbManagerImport_successItemsIds","Set","_GxIdeKbManagerImport_warningItemsIds","_GxIdeKbManagerImport_errorItemsIds","_GxIdeKbManagerImport_categoryItemMap","Map","_GxIdeKbManagerImport_objectCategoryItemMap","_GxIdeKbManagerImport_cancelImportHandler","cancelCallback","_GxIdeKbManagerImport_clearStatusHandler","importTreeState","statusInfo","error","number","warning","success","_GxIdeKbManagerImport_evaluateImport","noImport","_a","_GxIdeKbManagerImport_evaluateImportStatusMessage","someStatusVisible","display","_GxIdeKbManagerImport_importObjectsHandler","async","__classPrivateFieldGet","call","importingIsInProcess","importCallback","checkedObjectsIds","then","_GxIdeKbManagerImport_loadFileHandler","file","importedCategoryData","loadCallback","clear","object","importCategoryTreeData","objectsTreeModel","_GxIdeKbManagerImport_objectsTreeCheckedItemsChangedHandler","event","allItems","detail","checkedItemIds","item","checked","size","selectAllCheckboxValue","selectAllCheckboxIndeterminate","_GxIdeKbManagerImport_objectsTreeContextMenuHandler","objectContextMenuCallback","selection","clientX","contextmenuEvent","screenX","clientY","screenY","_GxIdeKbManagerImport_objectsTreeSelectedItemsChangedHandler","__classPrivateFieldSet","map","_GxIdeKbManagerImport_optionsHandler","optionsCallback","_GxIdeKbManagerImport_removeFileSelection","selectedFile","value","_GxIdeKbManagerImport_selectFileInputHandler","click","_GxIdeKbManagerImport_selectFileInputChangedHandler","target","files","_GxIdeKbManagerImport_statusButtonsSelectionChangedHandler","activeStates","statuses","errorIndex","state","itemId","warningIndex","successIndex","pattern","statusOptions","join","importedTreeFilterRegExp","RegExp","_GxIdeKbManagerImport_toggleSelectionClickHandler","updateAllItemsProperties","_GxIdeKbManagerImport_updateStatusItemsState","child","add","importTreeStateChanged","watchImportTreeStateHandler","importStatusMessage","main","importStatus","noImportedFiles","importedButHidden","watchObjectsTreeModelHandler","newState","noObjects","selectedFileChanged","newFile","componentDidLoad","focus","componentDidRender","componentWillLoad","Locale","getComponentStrings","el","componentDidLoadEvent","emit","addResultItem","render","h","Host","class","model","slot","htmlFor","header","fileNameLabel","autoFocus","part","type","readonly","placeholder","fileNamePlaceholder","ref","hidden","accept","onChange","removeFileSelection","title","onClick","src","disabled","selectFileButton","objectsInFile","showLines","dragDisabled","dropDisabled","toggleCheckboxes","checkbox","onCheckedItemsChange","onSelectedItemsChange","onItemContextmenu","isAnimated","stateTitle","key","selectFile","checkedValue","unCheckedValue","selectUnselect","onInput","_b","importButton","cancelButton","filter","filterType","filterOptions","autoExpand","hideMatchesAndShowNonMatches","stateIconSrc","clearButton","errors","warnings","successes","hideMessage","compact","minimal","statusMinimal","onSelectionChanged"],"sources":["src/components/kb-manager-import/helpers.ts","src/components/kb-manager-import/kb-manager-import.scss?tag=gx-ide-kb-manager-import&encapsulation=shadow","src/components/kb-manager-import/kb-manager-import.tsx"],"sourcesContent":["/* Tree View */\nimport {\n TreeViewItemModel,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\n\n/* Kb Manager Import Types*/\nimport {\n ImportItemData,\n CategoryItemMap,\n CategoryItemMapValue,\n ObjectCategoryItemMap,\n Status\n} from \"./kb-manager-import\";\nimport { ImportCategoryData, ImportItemResultData } from \"../../common/types\";\n\n/* objects in file metadata*/\nexport const KB_OBJECT = \"object\";\nexport const KB_CATEGORY = \"category\";\n\nexport const STATUS_REGEXP_KEY = \"status\";\n\n// - - - - - - - - - - - - - - - - -\n// Objects In File Tree Model\n// - - - - - - - - - - - - - - - - -\n\nconst convertImportCategoryItemToTreeItem = (\n importCatIcon: string,\n importItems: ImportItemData[]\n) => {\n const importTreeItems: TreeViewItemModel[] = [];\n importItems.forEach(importItem => {\n importTreeItems.push({\n id: importItem.id,\n caption: importItem.name,\n expanded: true,\n leaf: true,\n startImgSrc: importCatIcon,\n metadata: KB_OBJECT\n });\n });\n return importTreeItems;\n};\n\nexport const convertImportCategoryDataToTreeView = (\n importCategoryData: ImportCategoryData[]\n): TreeViewModel => {\n const treeData: TreeViewModel = [];\n if (!importCategoryData) {\n return treeData;\n }\n importCategoryData.forEach(importCategory => {\n const importCategoryTreeItem: TreeViewItemModel = {\n id: importCategory.id,\n caption: `${importCategory.name} (${importCategory.items.length})`,\n expanded: true,\n leaf: false,\n startImgSrc: importCategory.icon,\n metadata: KB_CATEGORY,\n items: convertImportCategoryItemToTreeItem(\n importCategory.icon,\n importCategory.items\n )\n };\n treeData.push(importCategoryTreeItem);\n });\n return treeData;\n};\n\n// - - - - - - - - - - - - - - - - -\n// Import Status Tree Model\n// - - - - - - - - - - - - - - - - -\n\nconst createImportResultDataMessages = (\n importItemId: string,\n messagesArray: string[],\n status: Status\n): TreeViewItemModel[] => {\n const messages: TreeViewItemModel[] = [];\n messagesArray.forEach((message, i) => {\n messages.push({\n id: `${importItemId}-message-${i}`,\n caption: message,\n startImgSrc: \"gemini-tools/list-view/on-surface\",\n leaf: true,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: status\n })\n });\n });\n return messages;\n};\n\nconst createImportResultItem = (\n categoryData: CategoryItemMapValue,\n importItemResultData: ImportItemResultData\n): TreeViewItemModel => {\n const resultItemId = `${importItemResultData.id}-${importItemResultData.name}`;\n const importResultItem: TreeViewItemModel = {\n id: resultItemId,\n startImgSrc: categoryData.icon,\n caption: importItemResultData.name,\n parts: `tree-view-item tree-view-item--status tree-view-item--${importItemResultData.status}`,\n expanded: true,\n leaf: importItemResultData.messages.length === 0,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: importItemResultData.status\n }),\n items: createImportResultDataMessages(\n resultItemId,\n importItemResultData.messages,\n importItemResultData.status\n )\n };\n return importResultItem;\n};\n\n// This functions updates the \"Import Status\" model, by adding a new result item.\nexport const addImportItemResultDataItem = (\n importItemResultData: ImportItemResultData,\n categoryItemMap: CategoryItemMap,\n objectCategoryItemMap: ObjectCategoryItemMap,\n importTreeActualState: TreeViewItemModel[]\n) => {\n const updatedImportTreeModel: TreeViewModel = [...importTreeActualState];\n\n // Use the resultItem.id to find the corresponding category in the categoryMap\n const objectCategoryId = objectCategoryItemMap.get(importItemResultData.id);\n const categoryData = categoryItemMap.get(objectCategoryId);\n\n const categoryIndex: number = updatedImportTreeModel.findIndex(\n treeItem => treeItem.id === objectCategoryId\n );\n\n if (categoryIndex === -1) {\n // category does not exists yet.\n const category: TreeViewItemModel = {\n id: objectCategoryId,\n caption: `${categoryData.name} (1)`,\n startImgSrc: `${categoryData.icon}`,\n expanded: true,\n items: [createImportResultItem(categoryData, importItemResultData)]\n };\n\n updatedImportTreeModel.push(category);\n return updatedImportTreeModel;\n }\n\n // else category already exists. Just insert the result item in the category.\n const resultItem: TreeViewItemModel = createImportResultItem(\n categoryData,\n importItemResultData\n );\n updatedImportTreeModel[categoryIndex].items = [\n ...updatedImportTreeModel[categoryIndex].items,\n resultItem\n ];\n\n // update category caption length\n const newItemsLength = updatedImportTreeModel[categoryIndex].items.length;\n updatedImportTreeModel[\n categoryIndex\n ].caption = `${categoryData.name} (${newItemsLength})`;\n\n return updatedImportTreeModel;\n};\n","@import \"../../global/gx-ide-mixins.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n grid-template:\n \"header header\" max-content\n \"objects-in-file import-status\" 1fr\n \"footer footer\" max-content;\n grid-template-columns: 1fr 1fr;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n grid-template-columns: 1fr max-content;\n grid-area: header;\n}\n\n// objects in file\n.objects-in-file__section {\n grid-area: objects-in-file;\n}\n.objects-in-file__main {\n border-inline-end: var(--section-common-border);\n grid-template-rows: 1fr max-content;\n}\n.objects-in-file__footer {\n display: grid;\n}\n\n// import status\n.import-status__section {\n grid-area: import-status;\n}\n.import-status__main {\n grid-template-rows: 1fr max-content;\n}\n.import-status__footer {\n display: flex;\n}\n.import-clear-status-btn {\n margin-inline-start: auto;\n}\n\n// objects in file & import status\n.objects-in-file__section,\n.import-status__section {\n display: grid;\n grid-template-rows: max-content 1fr;\n}\n.control-header__objects-in-file,\n.control-header__import-status {\n padding-block-start: var(--mer-spacing--md);\n}\n.objects-in-file__main,\n.import-status__main {\n grid-auto-rows: max-content;\n padding-block: var(--content-block-spacing);\n overflow: auto;\n}\n\n// footer\n.footer {\n display: flex;\n grid-area: footer;\n border-block-start: var(--section-common-border);\n}\n\n// WA / TODO: Add a helper class in Mercury to justify text.\n.text-align-center {\n text-align: center; // should be resolved on mercury\n}\n\n.tree-view::part(item__action tree-view-item--status) {\n grid-template: \"first-img left-img text right-img\" / max-content max-content 1fr max-content;\n &::before {\n grid-area: first-img;\n content: \"\";\n width: var(--mer-spacing--xs);\n height: var(--mer-spacing--xs);\n border-radius: 50%;\n background-color: var(--gray-03);\n margin-inline-end: var(--mer-spacing--xxs);\n }\n}\n\n.tree-view::part(item__action tree-view-item--success) {\n @include tree-item-status(\"success\");\n}\n.tree-view::part(item__action tree-view-item--warning) {\n @include tree-item-status(\"warning\");\n}\n.tree-view::part(item__action tree-view-item--error) {\n @include tree-item-status(\"error\");\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n h,\n Method,\n Prop,\n State,\n Watch\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n // ChEditCustomEvent,\n TreeViewItemContextMenu\n} from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModelExtended } from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\n\nimport {\n ImportCategoryData,\n ImportItemResultData,\n ContextMenuInfo\n} from \"../../common/types\";\nimport {\n convertImportCategoryDataToTreeView,\n addImportItemResultDataItem\n} from \"./helpers\";\nimport { CheckedItemsInfo } from \"../_helpers/list-selector/list-selector\";\n\nimport { KB_OBJECT, STATUS_REGEXP_KEY } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/checkbox\",\n \"components/edit\",\n \"components/icon\",\n \"components/tree-view\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\nconst NOTICE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"notice\",\n colorType: \"on-elevation\"\n});\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst GEMINI_TOOLS_SETTINGS = getIconPath({\n category: \"gemini-tools\",\n name: \"settings\",\n colorType: \"primary\"\n});\n\nconst MENU_DELETE = getIconPath({\n category: \"menus\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CHECKBOX_ALL_CHECKED_VALUE = \"allChecked\";\nconst CHECKBOX_ALL_UNCHECKED_VALUE = \"allUnchecked\";\n\n@Component({\n tag: \"gx-ide-kb-manager-import\",\n styleUrl: \"kb-manager-import.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/kb-manager-import\"]\n})\nexport class GxIdeKbManagerImport {\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 #selectedObjectsInFileIds: string[] = [];\n\n @Element() el: HTMLGxIdeKbManagerImportElement;\n\n #fileInputEl!: HTMLChEditElement;\n #fileInputHiddenEl!: HTMLInputElement;\n #objectsTreeEl!: HTMLChTreeViewRenderElement;\n #successItemsIds: Set<string> = new Set();\n #warningItemsIds: Set<string> = new Set();\n #errorItemsIds: Set<string> = new Set();\n // #categoryItemMap maps a category id, with the name and icon.\n // required for the \"import status\" tree.\n #categoryItemMap: CategoryItemMap = new Map();\n #objectCategoryItemMap: ObjectCategoryItemMap = new Map();\n\n @State() checkedObjectsIds: string[] = [];\n @State() selectAllCheckboxValue: string;\n @State() selectAllCheckboxIndeterminate: boolean = false;\n @State() importStatusMessage: string;\n @State() importTreeState: TreeViewItemModel[] = [];\n @State() importedTreeFilterRegExp: RegExp;\n @Watch(\"importTreeState\")\n importTreeStateChanged() {\n // this.#filterImportedHandler();\n }\n @State() importingIsInProcess = false;\n @State() importTreeFilterList: string[] = [];\n @State() noImport: boolean;\n @State() noObjects: boolean = true;\n @State() objectsTreeModel: TreeViewItemModel[] = [];\n @State() showHiddenImportsMessage = false;\n @State() someStatusVisible: boolean;\n @State() statusInfo: StatusInfo = {\n error: {\n display: true,\n number: 0\n },\n warning: {\n display: true,\n number: 0\n },\n success: {\n display: true,\n number: 0\n }\n };\n\n @Watch(\"importTreeState\")\n watchImportTreeStateHandler() {\n this.#evaluateImport();\n if (this.noImport) {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n } else {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.importedButHidden;\n }\n }\n @Watch(\"objectsTreeModel\")\n watchObjectsTreeModelHandler(newState: TreeViewItemModel[]) {\n this.noObjects = !newState || newState.length === 0;\n }\n\n /**\n * Callback invoked when user wants to cancel the export process.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * Callback invoked when user wants to initiate the import process.\n */\n @Prop() readonly importCallback!: ImportCallback;\n\n /**\n * Callback invoked when user wants to load the xpz information\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Displays status buttons (errors, warning, succeeded) with minimal UI (no captions)\n */\n @Prop() readonly objectContextMenuCallback!: ObjectContextMenuCallback;\n\n /**\n * Callback invoked when user wants to access the export options.\n */\n @Prop() readonly optionsCallback!: OptionsCallback;\n\n /**\n * Imported xml or xps file name\n */\n @Prop({ mutable: true }) selectedFile: File;\n @Watch(\"selectedFile\")\n selectedFileChanged(newFile: File) {\n if (newFile) {\n this.#loadFileHandler(newFile);\n }\n }\n\n /**\n * Displays status buttons (error, warning, success) with minimal UI (no captions).\n */\n @Prop() readonly statusMinimal = false;\n\n /**\n * Emitted once just after the component is fully loaded.\n */\n @Event() componentDidLoadEvent: EventEmitter<boolean>;\n\n /**\n * Emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.#fileInputEl.focus();\n }\n\n componentDidRender() {}\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.componentDidLoadEvent.emit(true);\n // this.#evaluateObjects();\n this.#evaluateImport();\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n this.#evaluateImportStatusMessage();\n }\n\n /**\n * Add the result of importing an item\n */\n @Method()\n async addResultItem(item: ImportItemResultData) {\n this.importTreeState = addImportItemResultDataItem(\n item,\n this.#categoryItemMap,\n this.#objectCategoryItemMap,\n this.importTreeState\n );\n this.statusInfo[item.status].number++;\n this.#updateStatusItemsState();\n }\n\n #cancelImportHandler = () => {\n this.cancelCallback();\n };\n\n #clearStatusHandler = () => {\n this.importTreeState = [];\n this.statusInfo.error.number = 0;\n this.statusInfo.warning.number = 0;\n this.statusInfo.success.number = 0;\n };\n\n #evaluateImport = () => {\n this.noImport = !!(\n this.importTreeState?.length === 0 || !this.importTreeState\n );\n };\n\n #evaluateImportStatusMessage = () => {\n this.someStatusVisible =\n this.statusInfo.error.display ||\n this.statusInfo.warning.display ||\n this.statusInfo.success.display;\n };\n\n #importObjectsHandler = async () => {\n /* first clear imported objects (this clears errors/warnings/success counts as well)*/\n this.#clearStatusHandler();\n /* then do the import*/\n this.importingIsInProcess = true;\n this.importCallback(this.checkedObjectsIds).then(() => {\n this.importingIsInProcess = false;\n });\n };\n\n #loadFileHandler = async (file: File) => {\n const importedCategoryData = await this.loadCallback(file);\n this.#categoryItemMap.clear();\n this.#objectCategoryItemMap.clear();\n\n importedCategoryData.forEach(category => {\n this.#categoryItemMap.set(category.id, {\n name: category.name,\n icon: category.icon\n });\n category.items.forEach(object => {\n this.#objectCategoryItemMap.set(object.id, category.id);\n });\n });\n\n const importCategoryTreeData =\n convertImportCategoryDataToTreeView(importedCategoryData);\n this.objectsTreeModel = importCategoryTreeData;\n };\n\n #objectsTreeCheckedItemsChangedHandler = (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const allItems = event.detail;\n const checkedItemIds: string[] = [];\n const checkedObjectsIds: string[] = [];\n allItems.forEach(item => {\n if (item.item.checked) {\n checkedItemIds.push(item.item.id);\n }\n if (item.item.checked && item.item.metadata === KB_OBJECT) {\n checkedObjectsIds.push(item.item.id);\n }\n });\n this.checkedObjectsIds = checkedObjectsIds;\n\n // Evaluate \"Select All / Unselect All\" checkbox state\n if (allItems.size === checkedItemIds.length) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_CHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else if (checkedItemIds.length === 0) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_UNCHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else {\n this.selectAllCheckboxIndeterminate = true;\n }\n };\n\n #objectsTreeContextMenuHandler = (\n event: CustomEvent<TreeViewItemContextMenu>\n ) => {\n if (event.detail.metadata === KB_OBJECT) {\n this.objectContextMenuCallback(\"imported\", {\n selection: this.#selectedObjectsInFileIds,\n clientX: event.detail.contextmenuEvent.screenX,\n clientY: event.detail.contextmenuEvent.screenY\n });\n }\n };\n\n #objectsTreeSelectedItemsChangedHandler = (\n event: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n this.#selectedObjectsInFileIds = event.detail.map(item => item.item.id);\n };\n\n #optionsHandler = () => {\n if (this.optionsCallback) {\n this.optionsCallback();\n // returns boolean\n }\n };\n\n #removeFileSelection = () => {\n this.selectedFile = null;\n this.#fileInputHiddenEl.value = null;\n };\n\n #selectFileInputHandler = () => {\n this.#fileInputHiddenEl.click();\n };\n\n #selectFileInputChangedHandler = (event: InputEvent) => {\n const target = event.target as HTMLInputElement;\n if (target.files?.length > 0) {\n this.selectedFile = target.files[0];\n }\n };\n\n #statusButtonsSelectionChangedHandler = (\n event: CustomEvent<CheckedItemsInfo>\n ) => {\n const activeStates = event.detail;\n const statuses: Status[] = [];\n\n const errorIndex = activeStates.findIndex(\n state => state.itemId === \"errors\"\n );\n const warningIndex = activeStates.findIndex(\n state => state.itemId === \"warnings\"\n );\n const successIndex = activeStates.findIndex(\n state => state.itemId === \"successes\"\n );\n\n if (errorIndex !== -1) {\n statuses.push(\"error\");\n }\n if (warningIndex !== -1) {\n statuses.push(\"warning\");\n }\n if (successIndex !== -1) {\n statuses.push(\"success\");\n }\n\n let pattern = `\"${STATUS_REGEXP_KEY}\":\"\"`;\n if (statuses.length) {\n const statusOptions = statuses.join(\"|\");\n pattern = `\"${STATUS_REGEXP_KEY}\":\"(${statusOptions})\"`;\n }\n this.importedTreeFilterRegExp = new RegExp(pattern, \"i\");\n\n // Update statusInfo for the status-buttons\n this.statusInfo = {\n error: {\n display: errorIndex !== -1,\n number: this.statusInfo.error.number\n },\n warning: {\n display: warningIndex !== -1,\n number: this.statusInfo.warning.number\n },\n success: {\n display: successIndex !== -1,\n number: this.statusInfo.success.number\n }\n };\n\n this.#evaluateImportStatusMessage();\n };\n\n #toggleSelectionClickHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n if (this.#objectsTreeEl) {\n const checked = event.detail === CHECKBOX_ALL_CHECKED_VALUE;\n this.#objectsTreeEl.updateAllItemsProperties({ checked: checked });\n }\n };\n\n #updateStatusItemsState = () => {\n this.#errorItemsIds.clear();\n this.#warningItemsIds.clear();\n this.#successItemsIds.clear();\n this.importTreeState.forEach(item => {\n const items = item.items;\n items.forEach(child => {\n if (child.metadata === \"error\") {\n this.#errorItemsIds.add(child.id);\n }\n if (child.metadata === \"warning\") {\n this.#warningItemsIds.add(child.id);\n }\n if (child.metadata === \"success\") {\n this.#successItemsIds.add(child.id);\n }\n });\n });\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section class=\"section\">\n <header\n // header\n class=\"field-group control-header-with-border header header-two-cols spacing-body-block-start spacing-body-inline\"\n slot=\"header\"\n >\n <div\n // select a file\n class=\"field field-inline\"\n >\n <label class=\"label\" htmlFor=\"file-name\">\n {this.#componentLocale.header.fileNameLabel}\n </label>\n <ch-edit\n autoFocus\n id=\"file-name\"\n class=\"input\"\n part=\"file-name\"\n type=\"text\"\n readonly\n value={this.selectedFile?.name}\n placeholder={this.#componentLocale.header.fileNamePlaceholder}\n startImgSrc={FILE_ICON}\n ref={(el: HTMLChEditElement) =>\n (this.#fileInputEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n <input\n hidden\n type=\"file\"\n accept=\".xpz, .xml\"\n onChange={this.#selectFileInputChangedHandler}\n ref={(el: HTMLInputElement) =>\n (this.#fileInputHiddenEl = el as HTMLInputElement)\n }\n />\n </div>\n\n <div class=\"buttons-spacer\">\n <button\n // remove file selection\n aria-label={this.#componentLocale.header.removeFileSelection}\n title={this.#componentLocale.header.removeFileSelection}\n id=\"reset-all-button\"\n class=\"button-tertiary button-icon-only\"\n part=\"reset-all-button\"\n onClick={this.#removeFileSelection}\n >\n <ch-image class=\"icon-md\" src={MENU_DELETE}></ch-image>\n </button>\n\n <button\n // select file\n id=\"select-file-load-button\"\n class=\"button-primary\"\n part=\"select-file-load-button\"\n onClick={this.#selectFileInputHandler}\n disabled={this.importingIsInProcess}\n >\n {this.#componentLocale.header.selectFileButton}\n </button>\n </div>\n </header>\n\n <section\n // objects in file\n class=\"objects-in-file__section\"\n >\n <h2 class=\"control-header control-header-with-border control-header__objects-in-file subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.objectsInFile.title}\n </h2>\n\n <div class=\"field-group objects-in-file__main\">\n {!this.noObjects ? (\n <ch-tree-view-render\n // objects in file tree\n showLines=\"last\"\n class=\"tree-view\"\n model={this.objectsTreeModel}\n dragDisabled={true}\n dropDisabled={true}\n toggleCheckboxes={true}\n checkbox={true}\n checked={true}\n onCheckedItemsChange={\n this.#objectsTreeCheckedItemsChangedHandler\n }\n onSelectedItemsChange={\n this.#objectsTreeSelectedItemsChangedHandler\n }\n onItemContextmenu={this.#objectsTreeContextMenuHandler}\n ref={el =>\n (this.#objectsTreeEl = el as HTMLChTreeViewRenderElement)\n }\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateTitle={\n this.#componentLocale.main.objectsInFile.noObjects\n }\n key=\"no-objects-empty-state\"\n >\n <button\n // begin by selecting a file\n class=\"button-secondary\"\n onClick={this.#selectFileInputHandler}\n >\n {this.#componentLocale.main.objectsInFile.selectFile}\n </button>\n </gx-ide-empty-state>\n )}\n\n <footer class=\"field-group objects-in-file__footer spacing-body-inline\">\n <ch-checkbox\n // select all / unselect all checkbox\n id=\"select-all-checkbox\"\n class=\"checkbox create-data-in-kb\"\n checkedValue={CHECKBOX_ALL_CHECKED_VALUE}\n unCheckedValue={CHECKBOX_ALL_UNCHECKED_VALUE}\n caption={\n this.#componentLocale.main.objectsInFile.selectUnselect\n }\n value={this.selectAllCheckboxValue}\n onInput={this.#toggleSelectionClickHandler}\n disabled={\n this.importingIsInProcess ||\n this.objectsTreeModel.length === 0\n }\n part=\"select-all-checkbox\"\n ></ch-checkbox>\n\n <div class=\"buttons-spacer\">\n <button\n // import objects button\n id=\"import-btn\"\n class=\"button-primary \"\n onClick={this.#importObjectsHandler}\n disabled={\n this.objectsTreeModel?.length === 0 ||\n this.importingIsInProcess\n }\n >\n {this.#componentLocale.main.objectsInFile.importButton}\n </button>\n\n <button\n // cancel-import button\n id=\"cancel-import-btn\"\n class=\"button-secondary \"\n onClick={this.#cancelImportHandler}\n disabled={!this.importingIsInProcess}\n part=\"cancel-import-button\"\n >\n {this.#componentLocale.main.objectsInFile.cancelButton}\n </button>\n\n <button\n // settings/options button\n id=\"select-kb-btn\"\n class=\"button-tertiary button-icon-only\"\n part=\"select-kb-btn\"\n onClick={this.#optionsHandler}\n >\n <ch-image\n class=\"icon-md\"\n src={GEMINI_TOOLS_SETTINGS}\n ></ch-image>\n </button>\n </div>\n </footer>\n </div>\n </section>\n\n <section\n // import status\n class=\"import-status__section\"\n >\n <h2 class=\"control-header control-header-with-border control-header__import-status subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.importStatus.title}\n </h2>\n\n <div class=\"field-group import-status__main\">\n {!this.noImport && this.someStatusVisible ? (\n <ch-tree-view-render\n // import status tree\n model={this.importTreeState}\n toggleCheckboxes={true}\n showLines=\"last\"\n class=\"tree-view\"\n filter={this.importedTreeFilterRegExp}\n filterType=\"metadata\"\n filterOptions={{\n autoExpand: true,\n hideMatchesAndShowNonMatches: false\n }}\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateIconSrc={NOTICE_ICON}\n stateTitle={this.importStatusMessage}\n key=\"no-objects-empty-state\"\n ></gx-ide-empty-state>\n )}\n\n <footer class=\"import-status__footer spacing-body-inline\">\n <button\n // clear status button\n class=\"button-secondary import-clear-status-btn\"\n onClick={this.#clearStatusHandler}\n disabled={this.noImport || this.importingIsInProcess}\n part=\"clear-status-btn\"\n >\n {this.#componentLocale.main.importStatus.clearButton}\n </button>\n </footer>\n </div>\n </section>\n\n <footer\n // footer\n class=\"footer\"\n >\n <gx-ide-status-buttons\n errors={this.statusInfo.error.number}\n warnings={this.statusInfo.warning.number}\n successes={this.statusInfo.success.number}\n hideMessage\n compact\n minimal={this.statusMinimal}\n onSelectionChanged={this.#statusButtonsSelectionChangedHandler}\n ></gx-ide-status-buttons>\n </footer>\n </section>\n </Host>\n );\n }\n}\nexport type CancelCallback = () => Promise<boolean>;\n\nexport type ImportCallback = (itemIds: string[]) => Promise<boolean>;\n\nexport type ImportItemData = {\n id: string;\n name: string;\n};\n\nexport type LoadCallback = (file: File) => Promise<ImportCategoryData[]>;\n\nexport type ObjectContextMenuCallback = (\n tree: ObjectsSourceType,\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type ObjectsSourceType = \"in-file\" | \"imported\";\n\nexport type OptionsCallback = () => Promise<void>;\n\nexport interface SelectedObject {\n itemId: string;\n subItemsIds: string[];\n}\n\nexport type StatusItemsState = {\n error: string[];\n warning: string[];\n success: string[];\n};\n\ntype StatusInfo = {\n error: {\n display: boolean;\n number: number;\n };\n warning: {\n display: boolean;\n number: number;\n };\n success: {\n display: boolean;\n number: number;\n };\n};\n\nexport type CategoryItemMap = Map<string, CategoryItemMapValue>;\nexport type CategoryItemMapValue = { name: string; icon: string };\nexport type ObjectCategoryItemMap = Map<string, string>;\nexport type Status = \"success\" | \"error\" | \"warning\";\n"],"mappings":"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"}
1
+ {"version":3,"names":["KB_OBJECT","KB_CATEGORY","STATUS_REGEXP_KEY","convertImportCategoryItemToTreeItem","importCatIcon","importItems","importTreeItems","forEach","importItem","push","id","caption","name","expanded","leaf","startImgSrc","metadata","convertImportCategoryDataToTreeView","importCategoryData","treeData","importCategory","importCategoryTreeItem","items","length","icon","createImportResultDataMessages","importItemId","messagesArray","status","messages","message","i","JSON","stringify","createImportResultItem","categoryData","importItemResultData","resultItemId","importResultItem","parts","addImportItemResultDataItem","categoryItemMap","objectCategoryItemMap","importTreeActualState","updatedImportTreeModel","objectCategoryId","get","categoryIndex","findIndex","treeItem","category","resultItem","newItemsLength","kbManagerImportCss","CSS_BUNDLES","NOTICE_ICON","getIconPath","colorType","FILE_ICON","GEMINI_TOOLS_SETTINGS","MENU_DELETE","CHECKBOX_ALL_CHECKED_VALUE","CHECKBOX_ALL_UNCHECKED_VALUE","GxIdeKbManagerImport","_GxIdeKbManagerImport_componentLocale","set","this","_GxIdeKbManagerImport_selectedObjectsInFileIds","_GxIdeKbManagerImport_fileInputEl","_GxIdeKbManagerImport_fileInputHiddenEl","_GxIdeKbManagerImport_objectsTreeEl","_GxIdeKbManagerImport_successItemsIds","Set","_GxIdeKbManagerImport_warningItemsIds","_GxIdeKbManagerImport_errorItemsIds","_GxIdeKbManagerImport_categoryItemMap","Map","_GxIdeKbManagerImport_objectCategoryItemMap","_GxIdeKbManagerImport_cancelImportHandler","cancelCallback","_GxIdeKbManagerImport_clearStatusHandler","importTreeState","statusInfo","error","number","warning","success","_GxIdeKbManagerImport_evaluateImport","noImport","_a","_GxIdeKbManagerImport_evaluateImportStatusMessage","someStatusVisible","display","_GxIdeKbManagerImport_importObjectsHandler","async","__classPrivateFieldGet","call","importingIsInProcess","importCallback","checkedObjectsIds","then","_GxIdeKbManagerImport_loadFileHandler","file","importedCategoryData","loadCallback","clear","object","importCategoryTreeData","objectsTreeModel","_GxIdeKbManagerImport_objectsTreeCheckedItemsChangedHandler","event","allItems","detail","checkedItemIds","item","checked","size","selectAllCheckboxValue","selectAllCheckboxIndeterminate","_GxIdeKbManagerImport_objectsTreeContextMenuHandler","objectContextMenuCallback","selection","clientX","contextmenuEvent","screenX","clientY","screenY","_GxIdeKbManagerImport_objectsTreeSelectedItemsChangedHandler","__classPrivateFieldSet","map","_GxIdeKbManagerImport_optionsHandler","optionsCallback","_GxIdeKbManagerImport_removeFileSelection","selectedFile","value","_GxIdeKbManagerImport_selectFileInputHandler","click","_GxIdeKbManagerImport_selectFileInputChangedHandler","target","files","_GxIdeKbManagerImport_statusButtonsSelectionChangedHandler","activeStates","statuses","errorIndex","state","itemId","warningIndex","successIndex","pattern","statusOptions","join","importedTreeFilterRegExp","RegExp","_GxIdeKbManagerImport_toggleSelectionClickHandler","updateAllItemsProperties","_GxIdeKbManagerImport_updateStatusItemsState","child","add","importTreeStateChanged","watchImportTreeStateHandler","importStatusMessage","main","importStatus","noImportedFiles","importedButHidden","watchObjectsTreeModelHandler","newState","noObjects","selectedFileChanged","newFile","componentDidLoad","focus","componentDidRender","componentWillLoad","Locale","getComponentStrings","el","componentDidLoadEvent","emit","addResultItem","render","h","Host","class","model","slot","htmlFor","header","fileNameLabel","autoFocus","part","type","readonly","placeholder","fileNamePlaceholder","ref","hidden","accept","onChange","removeFileSelection","title","onClick","src","disabled","selectFileButton","objectsInFile","showLines","dragDisabled","dropDisabled","toggleCheckboxes","checkbox","onCheckedItemsChange","onSelectedItemsChange","onItemContextmenu","isAnimated","stateTitle","key","selectFile","checkedValue","unCheckedValue","selectUnselect","onInput","_b","importButton","cancelButton","filter","filterType","filterOptions","autoExpand","hideMatchesAndShowNonMatches","stateIconSrc","clearButton","errors","warnings","successes","hideMessage","compact","minimal","statusMinimal","onSelectionChanged"],"sources":["src/components/kb-manager-import/helpers.ts","src/components/kb-manager-import/kb-manager-import.scss?tag=gx-ide-kb-manager-import&encapsulation=shadow","src/components/kb-manager-import/kb-manager-import.tsx"],"sourcesContent":["/* Tree View */\nimport {\n TreeViewItemModel,\n TreeViewModel\n} from \"@genexus/chameleon-controls-library\";\n\n/* Kb Manager Import Types*/\nimport {\n ImportItemData,\n CategoryItemMap,\n CategoryItemMapValue,\n ObjectCategoryItemMap,\n Status\n} from \"./kb-manager-import\";\nimport { ImportCategoryData, ImportItemResultData } from \"../../common/types\";\n\n/* objects in file metadata*/\nexport const KB_OBJECT = \"object\";\nexport const KB_CATEGORY = \"category\";\n\nexport const STATUS_REGEXP_KEY = \"status\";\n\n// - - - - - - - - - - - - - - - - -\n// Objects In File Tree Model\n// - - - - - - - - - - - - - - - - -\n\nconst convertImportCategoryItemToTreeItem = (\n importCatIcon: string,\n importItems: ImportItemData[]\n) => {\n const importTreeItems: TreeViewItemModel[] = [];\n importItems.forEach(importItem => {\n importTreeItems.push({\n id: importItem.id,\n caption: importItem.name,\n expanded: true,\n leaf: true,\n startImgSrc: importCatIcon,\n metadata: KB_OBJECT\n });\n });\n return importTreeItems;\n};\n\nexport const convertImportCategoryDataToTreeView = (\n importCategoryData: ImportCategoryData[]\n): TreeViewModel => {\n const treeData: TreeViewModel = [];\n if (!importCategoryData) {\n return treeData;\n }\n importCategoryData.forEach(importCategory => {\n const importCategoryTreeItem: TreeViewItemModel = {\n id: importCategory.id,\n caption: `${importCategory.name} (${importCategory.items.length})`,\n expanded: true,\n leaf: false,\n startImgSrc: importCategory.icon,\n metadata: KB_CATEGORY,\n items: convertImportCategoryItemToTreeItem(\n importCategory.icon,\n importCategory.items\n )\n };\n treeData.push(importCategoryTreeItem);\n });\n return treeData;\n};\n\n// - - - - - - - - - - - - - - - - -\n// Import Status Tree Model\n// - - - - - - - - - - - - - - - - -\n\nconst createImportResultDataMessages = (\n importItemId: string,\n messagesArray: string[],\n status: Status\n): TreeViewItemModel[] => {\n const messages: TreeViewItemModel[] = [];\n messagesArray.forEach((message, i) => {\n messages.push({\n id: `${importItemId}-message-${i}`,\n caption: message,\n startImgSrc: \"gemini-tools/list-view/on-surface\",\n leaf: true,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: status\n })\n });\n });\n return messages;\n};\n\nconst createImportResultItem = (\n categoryData: CategoryItemMapValue,\n importItemResultData: ImportItemResultData\n): TreeViewItemModel => {\n const resultItemId = `${importItemResultData.id}-${importItemResultData.name}`;\n const importResultItem: TreeViewItemModel = {\n id: resultItemId,\n startImgSrc: categoryData.icon,\n caption: importItemResultData.name,\n parts: `tree-view-item tree-view-item--status tree-view-item--${importItemResultData.status}`,\n expanded: true,\n leaf: importItemResultData.messages.length === 0,\n metadata: JSON.stringify({\n [STATUS_REGEXP_KEY]: importItemResultData.status\n }),\n items: createImportResultDataMessages(\n resultItemId,\n importItemResultData.messages,\n importItemResultData.status\n )\n };\n return importResultItem;\n};\n\n// This functions updates the \"Import Status\" model, by adding a new result item.\nexport const addImportItemResultDataItem = (\n importItemResultData: ImportItemResultData,\n categoryItemMap: CategoryItemMap,\n objectCategoryItemMap: ObjectCategoryItemMap,\n importTreeActualState: TreeViewItemModel[]\n) => {\n const updatedImportTreeModel: TreeViewModel = [...importTreeActualState];\n\n // Use the resultItem.id to find the corresponding category in the categoryMap\n const objectCategoryId = objectCategoryItemMap.get(importItemResultData.id);\n const categoryData = categoryItemMap.get(objectCategoryId);\n\n const categoryIndex: number = updatedImportTreeModel.findIndex(\n treeItem => treeItem.id === objectCategoryId\n );\n\n if (categoryIndex === -1) {\n // category does not exists yet.\n const category: TreeViewItemModel = {\n id: objectCategoryId,\n caption: `${categoryData.name} (1)`,\n startImgSrc: `${categoryData.icon}`,\n expanded: true,\n items: [createImportResultItem(categoryData, importItemResultData)]\n };\n\n updatedImportTreeModel.push(category);\n return updatedImportTreeModel;\n }\n\n // else category already exists. Just insert the result item in the category.\n const resultItem: TreeViewItemModel = createImportResultItem(\n categoryData,\n importItemResultData\n );\n updatedImportTreeModel[categoryIndex].items = [\n ...updatedImportTreeModel[categoryIndex].items,\n resultItem\n ];\n\n // update category caption length\n const newItemsLength = updatedImportTreeModel[categoryIndex].items.length;\n updatedImportTreeModel[\n categoryIndex\n ].caption = `${categoryData.name} (${newItemsLength})`;\n\n return updatedImportTreeModel;\n};\n","@import \"../../global/gx-ide-mixins.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n grid-template:\n \"header header\" max-content\n \"objects-in-file import-status\" 1fr\n \"footer footer\" max-content;\n grid-template-columns: 1fr 1fr;\n}\n\n.section {\n display: contents;\n}\n\n// header\n.header {\n grid-template-columns: 1fr max-content;\n grid-area: header;\n}\n\n// objects in file\n.objects-in-file__section {\n grid-area: objects-in-file;\n}\n.objects-in-file__main {\n border-inline-end: var(--section-common-border);\n grid-template-rows: 1fr max-content;\n}\n.objects-in-file__footer {\n display: grid;\n}\n\n// import status\n.import-status__section {\n grid-area: import-status;\n}\n.import-status__main {\n grid-template-rows: 1fr max-content;\n}\n.import-status__footer {\n display: flex;\n}\n.import-clear-status-btn {\n margin-inline-start: auto;\n}\n\n// objects in file & import status\n.objects-in-file__section,\n.import-status__section {\n display: grid;\n grid-template-rows: max-content 1fr;\n}\n.control-header__objects-in-file,\n.control-header__import-status {\n padding-block-start: var(--mer-spacing--md);\n}\n.objects-in-file__main,\n.import-status__main {\n grid-auto-rows: max-content;\n padding-block: var(--content-block-spacing);\n overflow: auto;\n}\n\n// footer\n.footer {\n display: flex;\n grid-area: footer;\n border-block-start: var(--section-common-border);\n}\n\n// WA / TODO: Add a helper class in Mercury to justify text.\n.text-align-center {\n text-align: center; // should be resolved on mercury\n}\n\n.tree-view::part(item__action tree-view-item--status) {\n grid-template: \"first-img left-img text right-img\" / max-content max-content 1fr max-content;\n &::before {\n grid-area: first-img;\n content: \"\";\n width: var(--mer-spacing--xs);\n height: var(--mer-spacing--xs);\n border-radius: 50%;\n background-color: var(--gray-03);\n margin-inline-end: var(--mer-spacing--xxs);\n }\n}\n\n.tree-view::part(item__action tree-view-item--success) {\n @include tree-item-status(\"success\");\n}\n.tree-view::part(item__action tree-view-item--warning) {\n @include tree-item-status(\"warning\");\n}\n.tree-view::part(item__action tree-view-item--error) {\n @include tree-item-status(\"error\");\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n h,\n Method,\n Prop,\n State,\n Watch\n} from \"@stencil/core\";\n\nimport {\n ChCheckboxCustomEvent,\n // ChEditCustomEvent,\n TreeViewItemContextMenu\n} from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModel } from \"@genexus/chameleon-controls-library\";\nimport { TreeViewItemModelExtended } from \"@genexus/chameleon-controls-library\";\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\n\nimport {\n ImportCategoryData,\n ImportItemResultData,\n ContextMenuInfo\n} from \"../../common/types\";\nimport {\n convertImportCategoryDataToTreeView,\n addImportItemResultDataItem\n} from \"./helpers\";\nimport { CheckedItemsInfo } from \"../_helpers/list-selector/list-selector\";\n\nimport { KB_OBJECT, STATUS_REGEXP_KEY } from \"./helpers\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/checkbox\",\n \"components/edit\",\n \"components/icon\",\n \"components/tree-view\",\n \"utils/form\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\"\n];\n\nconst NOTICE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"notice\",\n colorType: \"on-elevation\"\n});\n\nconst FILE_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"file\",\n colorType: \"primary\"\n});\n\nconst GEMINI_TOOLS_SETTINGS = getIconPath({\n category: \"gemini-tools\",\n name: \"settings\",\n colorType: \"primary\"\n});\n\nconst MENU_DELETE = getIconPath({\n category: \"menus\",\n name: \"delete\",\n colorType: \"primary\"\n});\n\nconst CHECKBOX_ALL_CHECKED_VALUE = \"allChecked\";\nconst CHECKBOX_ALL_UNCHECKED_VALUE = \"allUnchecked\";\n\n@Component({\n tag: \"gx-ide-kb-manager-import\",\n styleUrl: \"kb-manager-import.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/kb-manager-import\"]\n})\nexport class GxIdeKbManagerImport {\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 #selectedObjectsInFileIds: string[] = [];\n\n @Element() el: HTMLGxIdeKbManagerImportElement;\n\n #fileInputEl!: HTMLChEditElement;\n #fileInputHiddenEl!: HTMLInputElement;\n #objectsTreeEl!: HTMLChTreeViewRenderElement;\n #successItemsIds: Set<string> = new Set();\n #warningItemsIds: Set<string> = new Set();\n #errorItemsIds: Set<string> = new Set();\n // #categoryItemMap maps a category id, with the name and icon.\n // required for the \"import status\" tree.\n #categoryItemMap: CategoryItemMap = new Map();\n #objectCategoryItemMap: ObjectCategoryItemMap = new Map();\n\n @State() checkedObjectsIds: string[] = [];\n @State() selectAllCheckboxValue: string;\n @State() selectAllCheckboxIndeterminate: boolean = false;\n @State() importStatusMessage: string;\n @State() importTreeState: TreeViewItemModel[] = [];\n @State() importedTreeFilterRegExp: RegExp;\n @Watch(\"importTreeState\")\n importTreeStateChanged() {\n // this.#filterImportedHandler();\n }\n @State() importingIsInProcess = false;\n @State() importTreeFilterList: string[] = [];\n @State() noImport: boolean;\n @State() noObjects: boolean = true;\n @State() objectsTreeModel: TreeViewItemModel[] = [];\n @State() showHiddenImportsMessage = false;\n @State() someStatusVisible: boolean;\n @State() statusInfo: StatusInfo = {\n error: {\n display: true,\n number: 0\n },\n warning: {\n display: true,\n number: 0\n },\n success: {\n display: true,\n number: 0\n }\n };\n\n @Watch(\"importTreeState\")\n watchImportTreeStateHandler() {\n this.#evaluateImport();\n if (this.noImport) {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n } else {\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.importedButHidden;\n }\n }\n @Watch(\"objectsTreeModel\")\n watchObjectsTreeModelHandler(newState: TreeViewItemModel[]) {\n this.noObjects = !newState || newState.length === 0;\n }\n\n /**\n * Callback invoked when user wants to cancel the export process.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * Callback invoked when user wants to initiate the import process.\n */\n @Prop() readonly importCallback!: ImportCallback;\n\n /**\n * Callback invoked when user wants to load the xpz information\n */\n @Prop() readonly loadCallback!: LoadCallback;\n\n /**\n * Displays status buttons (errors, warning, succeeded) with minimal UI (no captions)\n */\n @Prop() readonly objectContextMenuCallback!: ObjectContextMenuCallback;\n\n /**\n * Callback invoked when user wants to access the export options.\n */\n @Prop() readonly optionsCallback!: OptionsCallback;\n\n /**\n * Imported xml or xps file name\n */\n @Prop({ mutable: true }) selectedFile: File;\n @Watch(\"selectedFile\")\n selectedFileChanged(newFile: File) {\n if (newFile) {\n this.#loadFileHandler(newFile);\n }\n }\n\n /**\n * Displays status buttons (error, warning, success) with minimal UI (no captions).\n */\n @Prop() readonly statusMinimal = false;\n\n /**\n * Emitted once just after the component is fully loaded.\n */\n @Event() componentDidLoadEvent: EventEmitter<boolean>;\n\n /**\n * Emitted once just after the component is fully loaded and the first render() occurs\n */\n @Event() componentDidRenderFirstTime: EventEmitter<boolean>;\n\n componentDidLoad() {\n this.#fileInputEl.focus();\n }\n\n componentDidRender() {}\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.componentDidLoadEvent.emit(true);\n // this.#evaluateObjects();\n this.#evaluateImport();\n this.importStatusMessage =\n this.#componentLocale.main.importStatus.noImportedFiles;\n this.#evaluateImportStatusMessage();\n }\n\n /**\n * Add the result of importing an item\n */\n @Method()\n async addResultItem(item: ImportItemResultData) {\n this.importTreeState = addImportItemResultDataItem(\n item,\n this.#categoryItemMap,\n this.#objectCategoryItemMap,\n this.importTreeState\n );\n this.statusInfo[item.status].number++;\n this.#updateStatusItemsState();\n }\n\n #cancelImportHandler = () => {\n this.cancelCallback();\n };\n\n #clearStatusHandler = () => {\n this.importTreeState = [];\n this.statusInfo.error.number = 0;\n this.statusInfo.warning.number = 0;\n this.statusInfo.success.number = 0;\n };\n\n #evaluateImport = () => {\n this.noImport = !!(\n this.importTreeState?.length === 0 || !this.importTreeState\n );\n };\n\n #evaluateImportStatusMessage = () => {\n this.someStatusVisible =\n this.statusInfo.error.display ||\n this.statusInfo.warning.display ||\n this.statusInfo.success.display;\n };\n\n #importObjectsHandler = async () => {\n /* first clear imported objects (this clears errors/warnings/success counts as well)*/\n this.#clearStatusHandler();\n /* then do the import*/\n this.importingIsInProcess = true;\n this.importCallback(this.checkedObjectsIds).then(() => {\n this.importingIsInProcess = false;\n });\n };\n\n #loadFileHandler = async (file: File) => {\n const importedCategoryData = await this.loadCallback(file);\n this.#categoryItemMap.clear();\n this.#objectCategoryItemMap.clear();\n\n importedCategoryData.forEach(category => {\n this.#categoryItemMap.set(category.id, {\n name: category.name,\n icon: category.icon\n });\n category.items.forEach(object => {\n this.#objectCategoryItemMap.set(object.id, category.id);\n });\n });\n\n const importCategoryTreeData =\n convertImportCategoryDataToTreeView(importedCategoryData);\n this.objectsTreeModel = importCategoryTreeData;\n };\n\n #objectsTreeCheckedItemsChangedHandler = (\n event: CustomEvent<Map<string, TreeViewItemModelExtended>>\n ) => {\n const allItems = event.detail;\n const checkedItemIds: string[] = [];\n const checkedObjectsIds: string[] = [];\n allItems.forEach(item => {\n if (item.item.checked) {\n checkedItemIds.push(item.item.id);\n }\n if (item.item.checked && item.item.metadata === KB_OBJECT) {\n checkedObjectsIds.push(item.item.id);\n }\n });\n this.checkedObjectsIds = checkedObjectsIds;\n\n // Evaluate \"Select All / Unselect All\" checkbox state\n if (allItems.size === checkedItemIds.length) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_CHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else if (checkedItemIds.length === 0) {\n this.selectAllCheckboxValue = CHECKBOX_ALL_UNCHECKED_VALUE;\n this.selectAllCheckboxIndeterminate = false;\n } else {\n this.selectAllCheckboxIndeterminate = true;\n }\n };\n\n #objectsTreeContextMenuHandler = (\n event: CustomEvent<TreeViewItemContextMenu>\n ) => {\n if (event.detail.metadata === KB_OBJECT) {\n this.objectContextMenuCallback(\"imported\", {\n selection: this.#selectedObjectsInFileIds,\n clientX: event.detail.contextmenuEvent.screenX,\n clientY: event.detail.contextmenuEvent.screenY\n });\n }\n };\n\n #objectsTreeSelectedItemsChangedHandler = (\n event: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n this.#selectedObjectsInFileIds = event.detail.map(item => item.item.id);\n };\n\n #optionsHandler = () => {\n if (this.optionsCallback) {\n this.optionsCallback();\n // returns boolean\n }\n };\n\n #removeFileSelection = () => {\n this.selectedFile = null;\n this.#fileInputHiddenEl.value = null;\n };\n\n #selectFileInputHandler = () => {\n this.#fileInputHiddenEl.click();\n };\n\n #selectFileInputChangedHandler = (event: InputEvent) => {\n const target = event.target as HTMLInputElement;\n if (target.files?.length > 0) {\n this.selectedFile = target.files[0];\n }\n };\n\n #statusButtonsSelectionChangedHandler = (\n event: CustomEvent<CheckedItemsInfo>\n ) => {\n const activeStates = event.detail;\n const statuses: Status[] = [];\n\n const errorIndex = activeStates.findIndex(\n state => state.itemId === \"errors\"\n );\n const warningIndex = activeStates.findIndex(\n state => state.itemId === \"warnings\"\n );\n const successIndex = activeStates.findIndex(\n state => state.itemId === \"successes\"\n );\n\n if (errorIndex !== -1) {\n statuses.push(\"error\");\n }\n if (warningIndex !== -1) {\n statuses.push(\"warning\");\n }\n if (successIndex !== -1) {\n statuses.push(\"success\");\n }\n\n let pattern = `\"${STATUS_REGEXP_KEY}\":\"\"`;\n if (statuses.length) {\n const statusOptions = statuses.join(\"|\");\n pattern = `\"${STATUS_REGEXP_KEY}\":\"(${statusOptions})\"`;\n }\n this.importedTreeFilterRegExp = new RegExp(pattern, \"i\");\n\n // Update statusInfo for the status-buttons\n this.statusInfo = {\n error: {\n display: errorIndex !== -1,\n number: this.statusInfo.error.number\n },\n warning: {\n display: warningIndex !== -1,\n number: this.statusInfo.warning.number\n },\n success: {\n display: successIndex !== -1,\n number: this.statusInfo.success.number\n }\n };\n\n this.#evaluateImportStatusMessage();\n };\n\n #toggleSelectionClickHandler = (\n event: ChCheckboxCustomEvent<any> | InputEvent\n ) => {\n if (this.#objectsTreeEl) {\n const checked = event.detail === CHECKBOX_ALL_CHECKED_VALUE;\n this.#objectsTreeEl.updateAllItemsProperties({ checked: checked });\n }\n };\n\n #updateStatusItemsState = () => {\n this.#errorItemsIds.clear();\n this.#warningItemsIds.clear();\n this.#successItemsIds.clear();\n this.importTreeState.forEach(item => {\n const items = item.items;\n items.forEach(child => {\n if (child.metadata === \"error\") {\n this.#errorItemsIds.add(child.id);\n }\n if (child.metadata === \"warning\") {\n this.#warningItemsIds.add(child.id);\n }\n if (child.metadata === \"success\") {\n this.#successItemsIds.add(child.id);\n }\n });\n });\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n\n <section class=\"section\">\n <header\n // header\n class=\"field-group control-header-with-border header header-two-cols spacing-body-block-start spacing-body-inline\"\n slot=\"header\"\n >\n <div\n // select a file\n class=\"field field-inline\"\n >\n <label class=\"label\" htmlFor=\"file-name\">\n {this.#componentLocale.header.fileNameLabel}\n </label>\n <ch-edit\n autoFocus\n id=\"file-name\"\n class=\"input\"\n part=\"file-name\"\n type=\"text\"\n readonly\n value={this.selectedFile?.name}\n placeholder={this.#componentLocale.header.fileNamePlaceholder}\n startImgSrc={FILE_ICON}\n ref={(el: HTMLChEditElement) =>\n (this.#fileInputEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n <input\n hidden\n type=\"file\"\n accept=\".xpz, .xml\"\n onChange={this.#selectFileInputChangedHandler}\n ref={(el: HTMLInputElement) =>\n (this.#fileInputHiddenEl = el as HTMLInputElement)\n }\n />\n </div>\n\n <div class=\"buttons-spacer\">\n <button\n // remove file selection\n aria-label={this.#componentLocale.header.removeFileSelection}\n title={this.#componentLocale.header.removeFileSelection}\n id=\"reset-all-button\"\n class=\"button-tertiary button-icon-only\"\n part=\"reset-all-button\"\n onClick={this.#removeFileSelection}\n >\n <ch-image class=\"icon-md\" src={MENU_DELETE}></ch-image>\n </button>\n\n <button\n // select file\n id=\"select-file-load-button\"\n class=\"button-primary\"\n part=\"select-file-load-button\"\n onClick={this.#selectFileInputHandler}\n disabled={this.importingIsInProcess}\n >\n {this.#componentLocale.header.selectFileButton}\n </button>\n </div>\n </header>\n\n <section\n // objects in file\n class=\"objects-in-file__section\"\n >\n <h2 class=\"control-header control-header-with-border control-header__objects-in-file subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.objectsInFile.title}\n </h2>\n\n <div class=\"field-group objects-in-file__main\">\n {!this.noObjects ? (\n <ch-tree-view-render\n // objects in file tree\n showLines=\"last\"\n class=\"tree-view\"\n model={this.objectsTreeModel}\n dragDisabled={true}\n dropDisabled={true}\n toggleCheckboxes={true}\n checkbox={true}\n checked={true}\n onCheckedItemsChange={\n this.#objectsTreeCheckedItemsChangedHandler\n }\n onSelectedItemsChange={\n this.#objectsTreeSelectedItemsChangedHandler\n }\n onItemContextmenu={this.#objectsTreeContextMenuHandler}\n ref={el =>\n (this.#objectsTreeEl = el as HTMLChTreeViewRenderElement)\n }\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateTitle={\n this.#componentLocale.main.objectsInFile.noObjects\n }\n key=\"no-objects-empty-state\"\n >\n <button\n // begin by selecting a file\n class=\"button-secondary\"\n onClick={this.#selectFileInputHandler}\n >\n {this.#componentLocale.main.objectsInFile.selectFile}\n </button>\n </gx-ide-empty-state>\n )}\n\n <footer class=\"field-group objects-in-file__footer spacing-body-inline\">\n <ch-checkbox\n // select all / unselect all checkbox\n id=\"select-all-checkbox\"\n class=\"checkbox create-data-in-kb\"\n checkedValue={CHECKBOX_ALL_CHECKED_VALUE}\n unCheckedValue={CHECKBOX_ALL_UNCHECKED_VALUE}\n caption={\n this.#componentLocale.main.objectsInFile.selectUnselect\n }\n value={this.selectAllCheckboxValue}\n onInput={this.#toggleSelectionClickHandler}\n disabled={\n this.importingIsInProcess ||\n this.objectsTreeModel.length === 0\n }\n part=\"select-all-checkbox\"\n ></ch-checkbox>\n\n <div class=\"buttons-spacer\">\n <button\n // import objects button\n id=\"import-btn\"\n class=\"button-primary \"\n onClick={this.#importObjectsHandler}\n disabled={\n this.objectsTreeModel?.length === 0 ||\n this.importingIsInProcess\n }\n >\n {this.#componentLocale.main.objectsInFile.importButton}\n </button>\n\n <button\n // cancel-import button\n id=\"cancel-import-btn\"\n class=\"button-secondary \"\n onClick={this.#cancelImportHandler}\n disabled={!this.importingIsInProcess}\n part=\"cancel-import-button\"\n >\n {this.#componentLocale.main.objectsInFile.cancelButton}\n </button>\n\n <button\n // settings/options button\n id=\"select-kb-btn\"\n class=\"button-tertiary button-icon-only\"\n part=\"select-kb-btn\"\n onClick={this.#optionsHandler}\n >\n <ch-image\n class=\"icon-md\"\n src={GEMINI_TOOLS_SETTINGS}\n ></ch-image>\n </button>\n </div>\n </footer>\n </div>\n </section>\n\n <section\n // import status\n class=\"import-status__section\"\n >\n <h2 class=\"control-header control-header-with-border control-header__import-status subtitle-regular-xs\t text-align-center spacing-body-inline\">\n {this.#componentLocale.main.importStatus.title}\n </h2>\n\n <div class=\"field-group import-status__main\">\n {!this.noImport && this.someStatusVisible ? (\n <ch-tree-view-render\n // import status tree\n model={this.importTreeState}\n toggleCheckboxes={true}\n showLines=\"last\"\n class=\"tree-view\"\n filter={this.importedTreeFilterRegExp}\n filterType=\"metadata\"\n filterOptions={{\n autoExpand: true,\n hideMatchesAndShowNonMatches: false\n }}\n ></ch-tree-view-render>\n ) : (\n <gx-ide-empty-state\n isAnimated={false}\n stateIconSrc={NOTICE_ICON}\n stateTitle={this.importStatusMessage}\n key=\"no-objects-empty-state\"\n ></gx-ide-empty-state>\n )}\n\n <footer class=\"import-status__footer spacing-body-inline\">\n <button\n // clear status button\n class=\"button-secondary import-clear-status-btn\"\n onClick={this.#clearStatusHandler}\n disabled={this.noImport || this.importingIsInProcess}\n part=\"clear-status-btn\"\n >\n {this.#componentLocale.main.importStatus.clearButton}\n </button>\n </footer>\n </div>\n </section>\n\n <footer\n // footer\n class=\"footer\"\n >\n <gx-ide-status-buttons\n errors={this.statusInfo.error.number}\n warnings={this.statusInfo.warning.number}\n successes={this.statusInfo.success.number}\n hideMessage\n compact\n minimal={this.statusMinimal}\n onSelectionChanged={this.#statusButtonsSelectionChangedHandler}\n ></gx-ide-status-buttons>\n </footer>\n </section>\n </Host>\n );\n }\n}\nexport type CancelCallback = () => Promise<boolean>;\n\nexport type ImportCallback = (itemIds: string[]) => Promise<boolean>;\n\nexport type ImportItemData = {\n id: string;\n name: string;\n};\n\nexport type LoadCallback = (file: File) => Promise<ImportCategoryData[]>;\n\nexport type ObjectContextMenuCallback = (\n tree: ObjectsSourceType,\n contextMenuInfo: ContextMenuInfo\n) => Promise<void>;\n\nexport type ObjectsSourceType = \"in-file\" | \"imported\";\n\nexport type OptionsCallback = () => Promise<void>;\n\nexport interface SelectedObject {\n itemId: string;\n subItemsIds: string[];\n}\n\nexport type StatusItemsState = {\n error: string[];\n warning: string[];\n success: string[];\n};\n\ntype StatusInfo = {\n error: {\n display: boolean;\n number: number;\n };\n warning: {\n display: boolean;\n number: number;\n };\n success: {\n display: boolean;\n number: number;\n };\n};\n\nexport type CategoryItemMap = Map<string, CategoryItemMapValue>;\nexport type CategoryItemMapValue = { name: string; icon: string };\nexport type ObjectCategoryItemMap = Map<string, string>;\nexport type Status = \"success\" | \"error\" | \"warning\";\n"],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ import { r as t, h as a, H as e } from "./p-49712340.js";
2
+
3
+ import { g as o } from "./p-6e4208d8.js";
4
+
5
+ import "./p-ad5caf61.js";
6
+
7
+ const r = '.chat-container{display:grid;block-size:100%;overflow:auto;grid-template-rows:max-content 1fr max-content;gap:var(--mer-spacing--xs);padding:var(--mer-spacing--xs);position:relative;--chat-common-border-radius:var(--mer-spacing--2xs)}.section{display:contents}.chat-container__header{padding:var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--sm);display:flex;align-items:center;gap:var(--mer-spacing--sm);justify-content:space-between}.chat-container__ch-chat{overflow:auto;position:relative;display:grid}.chat-container__header,.chat-container__footer{padding:var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--sm);border-radius:var(--chat-common-border-radius)}.chat-container__conversation-copied{position:absolute;z-index:1;inline-size:100%;block-size:100%;background:rgba(22, 22, 23, 0.75);backdrop-filter:saturate(180%) blur(20px);display:grid;align-items:center;justify-content:center;text-align:center;padding:32px;--mer-icon__box--md:18px;pointer-events:none;overflow:hidden;animation:fadeIn 100ms ease-in-out forwards;opacity:0}.chat-container__conversation-copied-wrapper{display:flex;align-items:center;gap:var(--mer-spacing--sm)}.chat-container__conversation-copied-wrapper{animation:liftUp var(--mer-timing--fast) ease-in-out forwards;inset-block-start:4px;opacity:0;animation-delay:var(--mer-timing--fast);position:relative}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes liftUp{from{opacity:0;inset-block-start:4px}to{opacity:1;inset-block-start:0}}.chat::part(message){position:relative;--copy-button-opacity:0;--copied-to-clipboard-opacity:0;--date-opacity:1}.chat::part(message__time),.chat::part(message__copy-button){transition:opacity var(--mer-timing--super-fast) ease-in-out}.chat::part(message__time){opacity:var(--date-opacity)}.chat::part(message):hover{position:relative;--copy-button-opacity:1;--date-opacity:0}.chat::part(message__copy-button){position:absolute;z-index:1;inset-inline-end:0;padding:var(--mer-spacing--sm);transition:opacity var(--mer-timing--fast) ease-in-out;opacity:var(--copy-button-opacity)}.chat::part(message__copy-button)::after{content:"";inline-size:var(--mer-icon__box--md);block-size:var(--mer-icon__box--md);background:no-repeat center/var(--mer-icon__size--md) var(--icon-path);--icon-path:var(--icon__system_copy_primary--enabled)}.chat::part(message__copy-button):hover::after{--icon-path:var(--icon__system_copy_primary--hover)}.chat::part(message__copy-button):active::after{--icon-path:var(--icon__system_copy_primary--active)}.chat::part(message__copied-feedback){transition:opacity 150ms ease-in-out;position:absolute;inline-size:100%;block-size:100%;display:flex;align-items:center;justify-content:center;z-index:2;background:rgba(22, 22, 23, 0.8);backdrop-filter:saturate(180%) blur(20px);opacity:var(--copied-to-clipboard-opacity);pointer-events:none}.chat::part(message__copied-feedback-visible){--copied-to-clipboard-opacity:1;pointer-events:visible}.chat::part(send-container){gap:var(--mer-spacing--xs)}.chat::part(send-input){--control__padding-block:7px !important}.chat::part(send-button){border-width:var(--control__border-width);border-style:var(--control__border-style);border-color:var(--control__border-color);border-radius:var(--control__border-radius);inline-size:32px;block-size:32px;background:no-repeat center/var(--mer-icon__box--md) var(--icon-path);--icon-path:var(--icon__system_send_primary--enabled)}.chat::part(send-button):hover{--icon-path:var(--icon__system_send_primary--hover);--control__border-color:var(--mer-text__primary--hover)}.chat::part(send-button):active{--icon-path:var(--icon__system_send_primary--active);--control__border-color:var(--mer-border-color__primary--active)}';
8
+
9
+ const i = [ "resets/box-sizing", "utils/typography", "chameleon/scrollbar", "components/button", "components/icon", "utils/elevation" ];
10
+
11
+ const n = o({
12
+ category: "system",
13
+ name: "copy",
14
+ colorType: "neutral"
15
+ });
16
+
17
+ const c = o({
18
+ category: "objects",
19
+ name: "conversational-flows"
20
+ });
21
+
22
+ const s = class {
23
+ constructor(a) {
24
+ t(this, a);
25
+ this.chatTitle = undefined;
26
+ this.copyConversationCallback = undefined;
27
+ this.displayConversationCopiedMessage = false;
28
+ }
29
+ /**
30
+ * It will display a feedback message that the conversation has been copied
31
+ */ async showCopyConversationMessage() {
32
+ this.displayConversationCopiedMessage = true;
33
+ setTimeout((() => {
34
+ this.displayConversationCopiedMessage = false;
35
+ }), 2e3);
36
+ }
37
+ render() {
38
+ const t = this.chatTitle || this.copyConversationCallback;
39
+ return a(e, {
40
+ class: "chat-container"
41
+ }, a("ch-theme", {
42
+ model: i
43
+ }), a("section", {
44
+ class: "section"
45
+ }, t && a("header", {
46
+ class: "chat-container__header elevation-1 body-italic-m"
47
+ }, this.chatTitle && this.chatTitle, this.copyConversationCallback && a("button", {
48
+ class: "button-secondary button-icon-only",
49
+ onClick: this.copyConversationCallback
50
+ }, a("ch-image", {
51
+ class: "icon-md",
52
+ src: n,
53
+ onClick: this.copyConversationCallback
54
+ }))), a("section", {
55
+ class: "chat-container__ch-chat"
56
+ }, a("slot", null), this.displayConversationCopiedMessage && a("div", {
57
+ class: "chat-container__conversation-copied"
58
+ }, a("div", {
59
+ class: "chat-container__conversation-copied-wrapper"
60
+ }, a("ch-image", {
61
+ class: "icon-md",
62
+ src: c
63
+ }), a("p", {
64
+ class: "body-regular-l"
65
+ }, "conversation copied"))))));
66
+ }
67
+ };
68
+
69
+ s.style = r;
70
+
71
+ export { s as gx_ide_chat_container };
72
+ //# sourceMappingURL=p-5afe1477.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["chatContainerCss","CSS_BUNDLES","COPY_ICON","getIconPath","category","name","colorType","CONVERSATION_ICON","GxIdeChatContainer","showCopyConversationMessage","this","displayConversationCopiedMessage","setTimeout","render","renderHeader","chatTitle","copyConversationCallback","h","Host","class","model","onClick","src"],"sources":["src/components/_helpers/chat-container/chat-container.scss?tag=gx-ide-chat-container","src/components/_helpers/chat-container/chat-container.tsx"],"sourcesContent":[".chat-container {\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n gap: var(--mer-spacing--xs);\n padding: var(--mer-spacing--xs);\n position: relative;\n --chat-common-border-radius: var(--mer-spacing--2xs);\n}\n.section {\n display: contents;\n}\n\n// header\n.chat-container__header {\n padding: var(--mer-spacing--2xs) var(--mer-spacing--2xs)\n var(--mer-spacing--2xs) var(--mer-spacing--sm);\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n justify-content: space-between;\n}\n\n// ch-chat container\n.chat-container__ch-chat {\n overflow: auto;\n position: relative;\n display: grid;\n}\n\n// footer\n\n// header & footer (common styles)\n.chat-container__header,\n.chat-container__footer {\n padding: var(--mer-spacing--2xs) var(--mer-spacing--2xs)\n var(--mer-spacing--2xs) var(--mer-spacing--sm);\n border-radius: var(--chat-common-border-radius);\n}\n\n.chat-container__conversation-copied {\n position: absolute;\n z-index: 1;\n inline-size: 100%;\n block-size: 100%;\n background: rgba(22, 22, 23, 0.75);\n backdrop-filter: saturate(180%) blur(20px);\n display: grid;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 32px;\n --mer-icon__box--md: 18px;\n pointer-events: none;\n overflow: hidden;\n animation: fadeIn 100ms ease-in-out forwards;\n opacity: 0;\n}\n.chat-container__conversation-copied-wrapper {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n}\n.chat-container__conversation-copied-wrapper {\n animation: liftUp var(--mer-timing--fast) ease-in-out forwards;\n inset-block-start: 4px;\n opacity: 0;\n animation-delay: var(--mer-timing--fast);\n position: relative;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes liftUp {\n from {\n opacity: 0;\n inset-block-start: 4px;\n }\n to {\n opacity: 1;\n inset-block-start: 0;\n }\n}\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - -\n// ch-chat overrides TODO: move this styles to Mercury\n// - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n.chat::part(message) {\n position: relative;\n --copy-button-opacity: 0;\n --copied-to-clipboard-opacity: 0;\n --date-opacity: 1;\n}\n.chat::part(message__time),\n.chat::part(message__copy-button) {\n transition: opacity var(--mer-timing--super-fast) ease-in-out;\n}\n.chat::part(message__time) {\n opacity: var(--date-opacity);\n}\n.chat::part(message):hover {\n position: relative;\n --copy-button-opacity: 1;\n --date-opacity: 0;\n}\n.chat::part(message__copy-button) {\n position: absolute;\n z-index: 1;\n inset-inline-end: 0;\n padding: var(--mer-spacing--sm); // same as part::(message)\n transition: opacity var(--mer-timing--fast) ease-in-out;\n opacity: var(--copy-button-opacity);\n\n &::after {\n content: \"\";\n inline-size: var(--mer-icon__box--md);\n block-size: var(--mer-icon__box--md);\n background: no-repeat center / var(--mer-icon__size--md) var(--icon-path);\n --icon-path: var(--icon__system_copy_primary--enabled);\n }\n &:hover::after {\n --icon-path: var(--icon__system_copy_primary--hover);\n }\n &:active::after {\n --icon-path: var(--icon__system_copy_primary--active);\n }\n}\n\n// // copy button effect\n.chat::part(message__copied-feedback) {\n transition: opacity 150ms ease-in-out;\n position: absolute;\n inline-size: 100%;\n block-size: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n background: rgba(22, 22, 23, 0.8);\n backdrop-filter: saturate(180%) blur(20px);\n opacity: var(--copied-to-clipboard-opacity);\n pointer-events: none;\n}\n\n.chat::part(message__copied-feedback-visible) {\n --copied-to-clipboard-opacity: 1;\n pointer-events: visible;\n}\n\n// send button\n\n.chat::part(send-container) {\n gap: var(--mer-spacing--xs);\n}\n.chat::part(send-input) {\n --control__padding-block: 7px !important;\n}\n\n.chat::part(send-button) {\n border-width: var(--control__border-width);\n border-style: var(--control__border-style);\n border-color: var(--control__border-color);\n border-radius: var(--control__border-radius);\n inline-size: 32px;\n block-size: 32px;\n background: no-repeat center / var(--mer-icon__box--md) var(--icon-path);\n --icon-path: var(--icon__system_send_primary--enabled);\n}\n.chat::part(send-button):hover {\n --icon-path: var(--icon__system_send_primary--hover);\n --control__border-color: var(--mer-text__primary--hover);\n}\n.chat::part(send-button):active {\n --icon-path: var(--icon__system_send_primary--active);\n --control__border-color: var(--mer-border-color__primary--active);\n}\n","import { Component, Host, h, Prop, Method, State } from \"@stencil/core\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"chameleon/scrollbar\",\n \"components/button\",\n \"components/icon\",\n \"utils/elevation\"\n];\n\nconst COPY_ICON = getIconPath({\n category: \"system\",\n name: \"copy\",\n colorType: \"neutral\"\n});\nconst CONVERSATION_ICON = getIconPath({\n category: \"objects\",\n name: \"conversational-flows\"\n});\n\n@Component({\n tag: \"gx-ide-chat-container\",\n styleUrl: \"chat-container.scss\",\n shadow: false\n})\nexport class GxIdeChatContainer {\n /**\n * The chat title\n */\n @Prop() readonly chatTitle?: string;\n\n /**\n * If true a button for copying the conversation will be render on the header.s\n */\n @Prop() readonly copyConversationCallback: () => void;\n\n /**\n * Coneration Copied\n */\n @State() displayConversationCopiedMessage: boolean = false;\n\n /**\n * It will display a feedback message that the conversation has been copied\n */\n @Method()\n async showCopyConversationMessage() {\n this.displayConversationCopiedMessage = true;\n setTimeout(() => {\n this.displayConversationCopiedMessage = false;\n }, 2000);\n }\n\n render() {\n const renderHeader = this.chatTitle || this.copyConversationCallback;\n return (\n <Host class=\"chat-container\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n {renderHeader && (\n <header class=\"chat-container__header elevation-1 body-italic-m\">\n {this.chatTitle && this.chatTitle}\n {this.copyConversationCallback && (\n <button\n class=\"button-secondary button-icon-only\"\n onClick={this.copyConversationCallback}\n >\n <ch-image\n class=\"icon-md\"\n src={COPY_ICON}\n onClick={this.copyConversationCallback}\n ></ch-image>\n </button>\n )}\n </header>\n )}\n <section class=\"chat-container__ch-chat\">\n <slot></slot>\n {this.displayConversationCopiedMessage && (\n <div class=\"chat-container__conversation-copied\">\n <div class=\"chat-container__conversation-copied-wrapper\">\n <ch-image class=\"icon-md\" src={CONVERSATION_ICON}></ch-image>\n <p class=\"body-regular-l\">conversation copied</p>\n </div>\n </div>\n )}\n </section>\n {/* <footer class=\"chat-container__footer elevation-1\">footer</footer> */}\n </section>\n </Host>\n );\n }\n}\n"],"mappings":";;;;;;AAAA,MAAMA,IAAmB;;ACGzB,MAAMC,IAA8B,EAClC,qBACA,oBACA,uBACA,qBACA,mBACA;;AAGF,MAAMC,IAAYC,EAAY;EAC5BC,UAAU;EACVC,MAAM;EACNC,WAAW;;;AAEb,MAAMC,IAAoBJ,EAAY;EACpCC,UAAU;EACVC,MAAM;;;MAQKG,IAAkB;;;;;4CAcwB;;;;SAMrD,iCAAMC;IACJC,KAAKC,mCAAmC;IACxCC,YAAW;MACTF,KAAKC,mCAAmC;AAAK,QAC5C;;EAGL,MAAAE;IACE,MAAMC,IAAeJ,KAAKK,aAAaL,KAAKM;IAC5C,OACEC,EAACC,GAAI;MAACC,OAAM;OACVF,EAAA;MAAUG,OAAOnB;QACjBgB,EAAA;MAASE,OAAM;OACZL,KACCG,EAAA;MAAQE,OAAM;OACXT,KAAKK,aAAaL,KAAKK,WACvBL,KAAKM,4BACJC,EAAA;MACEE,OAAM;MACNE,SAASX,KAAKM;OAEdC,EAAA;MACEE,OAAM;MACNG,KAAKpB;MACLmB,SAASX,KAAKM;UAMxBC,EAAA;MAASE,OAAM;OACbF,EAAA,eACCP,KAAKC,oCACJM,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAUE,OAAM;MAAUG,KAAKf;QAC/BU,EAAA;MAAGE,OAAM;OAAgB"}
@@ -0,0 +1,9 @@
1
+ const $ = "/";
2
+
3
+ const t = "mer", getIconPath = (n, o = t) => {
4
+ const r = n.colorType ? `${$}${n.colorType}` : "";
5
+ return `${o}${$}${n.category}${$}${n.name}${r}`;
6
+ };
7
+
8
+ export { getIconPath as g };
9
+ //# sourceMappingURL=p-6e4208d8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["g","MERCURY_ALIAS","getIconPath","e","t","r","colorType","category","name"],"sources":["node_modules/@genexus/mercury/dist/assets-manager.js"],"sourcesContent":["\"use strict\";const a={},d={},g=\"/\",u=\":\";export const MERCURY_ALIAS=\"mer\",registerAssets=(e,t,r)=>{a[e]||d[t]||(a[e]=r,d[t]=e)},getAsset=(e,t)=>{const r=d[e]??e,n=a[r];if(!n)return;const o=n.icons[t.category];if(!o)return;const c=o[t.name];if(c)return t.colorType?c[t.colorType]:c},getIconPath=(e,t=MERCURY_ALIAS)=>{const r=e.colorType?`${g}${e.colorType}`:\"\";return`${t}${g}${e.category}${g}${e.name}${r}`},getIconPathExpanded=(e,t,r=MERCURY_ALIAS)=>`${getIconPath(e,r)}${u}${getIconPath(t,r)}`;const l=(e,t,r)=>{const n=t===MERCURY_ALIAS?\"\":`-${t}`;return r?`var(--icon${n}__${e}--${r})`:`var(--icon${n}__${e})`},f=e=>{const t=e.split(g),r=t[0],n=d[r]??r;if(!a[n]){const i=t[0],S=t[1],p=t[2];return{vendor:MERCURY_ALIAS,category:i,name:S,colorType:p}}const c=t[1],s=t[2],m=t[3];return{vendor:r,category:c,name:s,colorType:m}};export const getImagePathCallback=e=>{const{vendor:t,category:r,name:n,colorType:o}=f(e),c=getAsset(t,o?{category:r,name:n,colorType:o}:{category:r,name:n});if(!c)return;const s={base:l(c.enabled.name,t)};return c.hover&&(s.hover=l(c.hover.name,t)),c.active&&(s.active=l(c.active.name,t)),c.disabled&&(s.disabled=l(c.disabled.name,t)),s},getActionMenuImagePathCallback=(e,t)=>{if(!e.startImgSrc&&t===\"start\"||!e.endImgSrc&&t===\"end\")return;const r=t===\"start\"?e.startImgSrc:e.endImgSrc;return getImagePathCallback(r)},getActionListImagePathCallback=e=>e.imgSrc?getImagePathCallback(e.imgSrc):void 0,getNavigationListImagePathCallback=e=>e.startImgSrc?getImagePathCallback(e.startImgSrc):void 0,getTreeViewImagePathCallback=(e,t)=>{if(!e.startImgSrc&&t===\"start\"||!e.endImgSrc&&t===\"end\")return;const n=(t===\"start\"?e.startImgSrc:e.endImgSrc).split(u),o=getImagePathCallback(n[0]);if(o)return n[1]?{default:o,expanded:getImagePathCallback(n[1])}:{default:o}},getComboBoxImagePathCallback=(e,t)=>{if(!e.startImgSrc&&t===\"start\"||!e.endImgSrc&&t===\"end\")return;const r=t===\"start\"?e.startImgSrc:e.endImgSrc;return getImagePathCallback(r)},getImagePathCallbackDefinitions={\"ch-accordion-render\":getImagePathCallback,\"ch-action-menu-render\":getActionMenuImagePathCallback,\"ch-action-list-render\":getActionListImagePathCallback,\"ch-combo-box-render\":getComboBoxImagePathCallback,\"ch-navigation-list-render\":getNavigationListImagePathCallback,\"ch-checkbox\":getImagePathCallback,\"ch-edit\":getImagePathCallback,\"ch-image\":getImagePathCallback,\"ch-tree-view-render\":getTreeViewImagePathCallback};\n"],"mappings":"AAAkB,MAAWA,IAAE;;AAAsB,MAACC,IAAc,OAAsNC,cAAY,CAACC,GAAEC,IAAEH;EAAiB,MAAMI,IAAEF,EAAEG,YAAU,GAAGN,IAAIG,EAAEG,cAAY;EAAG,OAAM,GAAGF,IAAIJ,IAAIG,EAAEI,WAAWP,IAAIG,EAAEK,OAAOH;AAAC"}
@@ -0,0 +1,280 @@
1
+ import { h as e, r as t, H as n } from "./p-49712340.js";
2
+
3
+ import "./p-ad5caf61.js";
4
+
5
+ const a = "message__copied-feedback";
6
+
7
+ const o = "message__copied-feedback-visible";
8
+
9
+ const copy = e => t => {
10
+ t.stopPropagation();
11
+ // 1. Copy message
12
+ navigator.clipboard.writeText(e);
13
+ // 2. Display "copied" message (expects to be the next sibling!)
14
+ const n = t.target.nextSibling;
15
+ const s = n.getAttribute("part");
16
+ if (s === a) {
17
+ n.setAttribute("part", `${a} ${o}`);
18
+ setTimeout((() => {
19
+ n.setAttribute("part", `${a}`);
20
+ }), 1e3);
21
+ }
22
+ };
23
+
24
+ const copyButton = (t, n, a) => e("button", {
25
+ "aria-label": n,
26
+ title: n,
27
+ class: "button-copy-code",
28
+ type: "button",
29
+ onClick: copy(t),
30
+ part: `message__copy-button ${a}`
31
+ });
32
+
33
+ const mercuryCodeRender = t => n => e("div", {
34
+ class: "code-block-container"
35
+ }, e("div", {
36
+ class: "code-block-header"
37
+ }, copyButton(n.plainText, t, "code-render")), e("ch-code", {
38
+ language: n.language,
39
+ lastNestedChildClass: n.lastNestedChildClass,
40
+ value: n.plainText
41
+ }));
42
+
43
+ const mercuryChatMessageRender = t => n => n.role === "assistant" && n.status === "waiting" ? [ e("span", {
44
+ part: "message__processing"
45
+ }, "Processing request"), e("div", {
46
+ class: "processing-animation",
47
+ part: "processing-animation"
48
+ }) ] : [
49
+ // "copy button" before "role" and "time" to hide both on button:focus
50
+ copyButton(n.content, "Copy code", "common-message"), e("p", {
51
+ part: a
52
+ }, "message copied to clipboard"), e("span", {
53
+ part: `message__role ${n.role}`
54
+ }, n.role === "user" ? "You" : "GeneXus Code Fixer"), e("time", {
55
+ dateTime: n.metadata,
56
+ part: "message__time"
57
+ }, n.metadata), n.role === "user" ? e("span", {
58
+ part: "message__content user"
59
+ }, n.content) : e("ch-markdown-viewer", {
60
+ part: n.role === "assistant" && (n.status === "complete" || !n.status) && !n.parts ? `message__content no-error` : "message__content",
61
+ theme: t,
62
+ showIndicator: false,
63
+ renderCode: mercuryCodeRender("Copy code"),
64
+ value: n.content
65
+ }) ];
66
+
67
+ const s = "{{ASSISTANT_NAME}}";
68
+
69
+ let r;
70
+
71
+ const i = `\n ### Code block {#code-block}\n To create code blocks, you’ll use three backticks (\` \`\`\` \`) or three tildes (\`~~~\`) on the lines before and after the code block.\n \n \`\`\`\n {\n "firstName": "John",\n "lastName": "Smith",\n "age": 25\n }\n \`\`\`\n \n Another way to create code blocks is to indent every line of the block by at least four spaces or one tab.\n \n <html>\n <head>\n </head>\n </html>\n \n \n #### Syntax Highlighting {#syntax-highlighting}\n This feature allows you to add color highlighting for whatever language your code was written in.\n To add syntax highlighting, specify a language next to the backticks before the fenced code block.\n \n \`\`\`json\n {\n "firstName": "John",\n "lastName": "Smith",\n "age": 25\n }\n \`\`\`\n \n \`\`\`javascript\n import React from 'react'\n import ReactDOM from 'react-dom'\n import Markdown from 'react-markdown'\n import rehypeHighlight from 'rehype-highlight'\n \n const markdown = \`\n # Your markdown here\n \`\n \n ReactDOM.render(\n <Markdown rehypePlugins={[rehypeHighlight]}>{markdown}</Markdown>,\n document.querySelector('#content')\n )\n \`\`\`\n \n ### Horizontal Rules {#horizontal-rules}\n To create a horizontal rule, use three or more asterisks (\`***\`), dashes (\`---\`), or underscores (\`___\`) on a line by themselves.\n `;
72
+
73
+ const c = `\n ### Code block {#code-block}\n To create code blocks, you’ll use three backticks (\` \`\`\` \`) or three tildes (\`~~~\`) on the lines before and after the code block.\n \n \`\`\`json\n {\n "firstName": "John",\n "lastName": "Smith",\n "age": 25\n }\n \`\`\`\n `;
74
+
75
+ const sendChatToLLM = () => {
76
+ // This is a WA to get the chat reference
77
+ const e = document.querySelector("ch-chat");
78
+ e.addNewMessage({
79
+ id: `${(new Date).getTime()}`,
80
+ role: "assistant",
81
+ content: "Analyzing",
82
+ status: "waiting"
83
+ });
84
+ r = setTimeout((() => {
85
+ e.updateLastMessage({
86
+ role: "assistant",
87
+ content: "Processing with Chat with LLMs",
88
+ status: "waiting"
89
+ }, "replace");
90
+ r = setTimeout((() => {
91
+ dummyStreaming(e, 20, i, "replace");
92
+ }), 200);
93
+ }), 200);
94
+ };
95
+
96
+ function dummyStreaming(e, t, n, a) {
97
+ r = setTimeout((() => {
98
+ const o = t >= n.length;
99
+ e.updateLastMessage({
100
+ role: "assistant",
101
+ content: {
102
+ message: n.substring(t - 20, t),
103
+ files: o ? [ {
104
+ url: "https://next.genexus.ai",
105
+ caption: "Mars Exploration Contract"
106
+ }, {
107
+ url: "https://gx-chameleon.netlify.app",
108
+ caption: "Venus Exploration Contract"
109
+ } ] : undefined
110
+ },
111
+ status: o ? "complete" : "streaming"
112
+ }, a);
113
+ if (!o) {
114
+ dummyStreaming(e, t + 20, n, "concat");
115
+ }
116
+ }), t % 200 === 0 ? 50 : 40);
117
+ }
118
+
119
+ const d = {
120
+ clear: () => new Promise((e => e())),
121
+ sendChatToLLM,
122
+ uploadImage: () => new Promise((e => e(""))),
123
+ stopGeneratingAnswer: () => {
124
+ clearTimeout(r);
125
+ // This is a WA to get the chat reference
126
+ const e = document.querySelector("ch-chat");
127
+ e.updateLastMessage({
128
+ role: "assistant",
129
+ content: "",
130
+ status: "complete"
131
+ }, "concat");
132
+ return new Promise((e => setTimeout((() => e), 10)));
133
+ }
134
+ };
135
+
136
+ const l = {
137
+ accessibleName: {
138
+ clearChat: "Clear chat",
139
+ copyResponseButton: "Copy assistant response",
140
+ downloadCodeButton: "Download code",
141
+ imagePicker: "Select images",
142
+ removeUploadedImage: "Remove uploaded image",
143
+ sendButton: "Send",
144
+ sendInput: "Message",
145
+ stopGeneratingAnswerButton: "Stop generating answer"
146
+ },
147
+ placeholder: {
148
+ sendInput: "Ask me a question..."
149
+ },
150
+ text: {
151
+ copyCodeButton: "Copy code",
152
+ processing: `Processing with ${s}`,
153
+ sourceFiles: "Source files:"
154
+ }
155
+ };
156
+
157
+ Array.from({
158
+ length: 40
159
+ }, ((e, t) => t % 2 === 0 ? {
160
+ id: `index: ${t}`,
161
+ role: "user",
162
+ content: `index: ${t}` + `index: ${t}\n` + `index: ${t}\n` + `index: ${t}\n` + `index: ${t}\n` + `index: ${t}\n` + `index: ${t}\n`
163
+ } : {
164
+ id: `index: ${t}`,
165
+ role: "assistant",
166
+ content: c + `\nindex: ${t}\n` + `index: ${t}\n` + `index: ${t}\n` + `index: ${t}\n` + `index: ${t}\n` + `index: ${t}\n` + `index: ${t}\n`
167
+ }));
168
+
169
+ const m = [ {
170
+ id: "1",
171
+ role: "user",
172
+ content: "Please give me an example about...",
173
+ metadata: "14:55"
174
+ }, {
175
+ id: "2",
176
+ role: "assistant",
177
+ status: "complete",
178
+ content: "Action required example. Action required example. Action required example.",
179
+ metadata: "14:56"
180
+ }, {
181
+ id: "3",
182
+ role: "assistant",
183
+ status: "complete",
184
+ content: "Warning in request",
185
+ metadata: "14:57",
186
+ parts: "warning"
187
+ }, {
188
+ id: "4",
189
+ role: "error",
190
+ content: "Error in Request",
191
+ metadata: "14:58"
192
+ }, {
193
+ id: "5",
194
+ role: "assistant",
195
+ status: "complete",
196
+ content: "Warning in request",
197
+ metadata: "14:59",
198
+ parts: "success"
199
+ }, {
200
+ id: "6",
201
+ role: "user",
202
+ content: "Implement the function calculate_average_grade in grades.py that takes a list of grades as input and returns the average grade as a floating-point number",
203
+ metadata: "15:00"
204
+ }, {
205
+ id: "7",
206
+ role: "assistant",
207
+ status: "complete",
208
+ content: "You can provide further details or updates regarding your support ticket and its associated code. Your input here helps us better understand and address your issue effectively.",
209
+ metadata: "15:01"
210
+ }, {
211
+ id: "8",
212
+ role: "assistant",
213
+ status: "waiting",
214
+ content: "Processing Request"
215
+ }, {
216
+ id: "9",
217
+ role: "assistant",
218
+ status: "complete",
219
+ content: c
220
+ } ];
221
+
222
+ const u = ":host{block-size:100%;display:grid}";
223
+
224
+ var h = undefined && undefined.__classPrivateFieldGet || function(e, t, n, a) {
225
+ if (n === "a" && !a) throw new TypeError("Private accessor was defined without a getter");
226
+ if (typeof t === "function" ? e !== t || !a : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
227
+ return n === "m" ? a : n === "a" ? a.call(e) : a ? a.value : t.get(e);
228
+ };
229
+
230
+ var p = undefined && undefined.__classPrivateFieldSet || function(e, t, n, a, o) {
231
+ if (a === "m") throw new TypeError("Private method is not writable");
232
+ if (a === "a" && !o) throw new TypeError("Private accessor was defined without a setter");
233
+ if (typeof t === "function" ? e !== t || !o : !t.has(e)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
234
+ return a === "a" ? o.call(e, n) : o ? o.value = n : t.set(e, n), n;
235
+ };
236
+
237
+ var g, f;
238
+
239
+ const w = [ "resets/box-sizing", "components/chat" ];
240
+
241
+ const y = class {
242
+ constructor(e) {
243
+ t(this, e);
244
+ g.set(this, void 0);
245
+ f.set(this, (() => {
246
+ h(this, g, "f").showCopyConversationMessage();
247
+ }));
248
+ this.showAdditionalContent = false;
249
+ this.conversationCopied = false;
250
+ }
251
+ render() {
252
+ return e(n, null, e("ch-theme", {
253
+ model: w
254
+ }), e("gx-ide-chat-container", {
255
+ chatTitle: "GeneXus Assistant",
256
+ copyConversationCallback: h(this, f, "f"),
257
+ ref: e => p(this, g, e, "f")
258
+ }, e("ch-chat", {
259
+ callbacks: d,
260
+ class: "chat",
261
+ generatingResponse: false,
262
+ loadingState: "all-records-loaded",
263
+ markdownTheme: "mercury/markdown-viewer",
264
+ renderItem: mercuryChatMessageRender("mercury/markdown-viewer"),
265
+ isMobile: false,
266
+ items: m,
267
+ showAdditionalContent: this.showAdditionalContent,
268
+ translations: l
269
+ }, e("div", {
270
+ slot: "additional-content"
271
+ }, "Custom content that is rendered when the chat renders content"))));
272
+ }
273
+ };
274
+
275
+ g = new WeakMap, f = new WeakMap;
276
+
277
+ y.style = u;
278
+
279
+ export { y as gx_ide_sc_chat_container };
280
+ //# sourceMappingURL=p-72867329.entry.js.map