@genexus/genexus-ide-ui 1.1.36 → 1.1.38

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 (63) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +9 -3
  3. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-details-acknowledgements.cjs.entry.js +19 -34
  5. package/dist/cjs/gx-ide-details-acknowledgements.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +59 -17
  7. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-server-selector.cjs.entry.js +12 -4
  9. package/dist/cjs/gx-ide-server-selector.cjs.entry.js.map +1 -1
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/collection/components/details-acknowledgements/details-acknowledgements.js +19 -34
  12. package/dist/collection/components/details-acknowledgements/details-acknowledgements.js.map +1 -1
  13. package/dist/collection/components/details-acknowledgements/gx-ide-assets/details-acknowledgements/langs/details-acknowledgements.lang.en.json +3 -1
  14. package/dist/collection/components/details-acknowledgements/gx-ide-assets/details-acknowledgements/langs/details-acknowledgements.lang.ja.json +3 -1
  15. package/dist/collection/components/details-acknowledgements/gx-ide-assets/details-acknowledgements/langs/details-acknowledgements.lang.zh.json +3 -1
  16. package/dist/collection/components/kb-manager-import/helpers.js +6 -3
  17. package/dist/collection/components/kb-manager-import/helpers.js.map +1 -1
  18. package/dist/collection/components/kb-manager-import/kb-manager-import.css +5 -0
  19. package/dist/collection/components/kb-manager-import/kb-manager-import.js +56 -12
  20. package/dist/collection/components/kb-manager-import/kb-manager-import.js.map +1 -1
  21. package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js +9 -3
  22. package/dist/collection/components/team-dev/create-kb-from-server/create-kb-from-server.js.map +1 -1
  23. package/dist/collection/components/team-dev/server-selector/server-selector.js +12 -4
  24. package/dist/collection/components/team-dev/server-selector/server-selector.js.map +1 -1
  25. package/dist/components/gx-ide-create-kb-from-server.js +9 -3
  26. package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
  27. package/dist/components/gx-ide-details-acknowledgements.js +19 -34
  28. package/dist/components/gx-ide-details-acknowledgements.js.map +1 -1
  29. package/dist/components/gx-ide-kb-manager-import.js +59 -18
  30. package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
  31. package/dist/components/gx-ide-server-selector.js +12 -4
  32. package/dist/components/gx-ide-server-selector.js.map +1 -1
  33. package/dist/esm/genexus-ide-ui.js +1 -1
  34. package/dist/esm/gx-ide-create-kb-from-server.entry.js +9 -3
  35. package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
  36. package/dist/esm/gx-ide-details-acknowledgements.entry.js +19 -34
  37. package/dist/esm/gx-ide-details-acknowledgements.entry.js.map +1 -1
  38. package/dist/esm/gx-ide-kb-manager-import.entry.js +59 -17
  39. package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
  40. package/dist/esm/gx-ide-server-selector.entry.js +12 -4
  41. package/dist/esm/gx-ide-server-selector.entry.js.map +1 -1
  42. package/dist/esm/loader.js +1 -1
  43. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  44. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  45. package/dist/genexus-ide-ui/gx-ide-assets/details-acknowledgements/langs/details-acknowledgements.lang.en.json +3 -1
  46. package/dist/genexus-ide-ui/gx-ide-assets/details-acknowledgements/langs/details-acknowledgements.lang.ja.json +3 -1
  47. package/dist/genexus-ide-ui/gx-ide-assets/details-acknowledgements/langs/details-acknowledgements.lang.zh.json +3 -1
  48. package/dist/genexus-ide-ui/{p-56c0c556.entry.js → p-48e87e4f.entry.js} +180 -145
  49. package/dist/genexus-ide-ui/p-48e87e4f.entry.js.map +1 -0
  50. package/dist/genexus-ide-ui/{p-bee71b20.entry.js → p-970e89ac.entry.js} +55 -45
  51. package/dist/genexus-ide-ui/p-970e89ac.entry.js.map +1 -0
  52. package/dist/genexus-ide-ui/{p-9ad85231.entry.js → p-b34ecbdc.entry.js} +35 -28
  53. package/dist/genexus-ide-ui/p-b34ecbdc.entry.js.map +1 -0
  54. package/dist/genexus-ide-ui/{p-5e2f9545.entry.js → p-bd0ffc08.entry.js} +56 -72
  55. package/dist/genexus-ide-ui/p-bd0ffc08.entry.js.map +1 -0
  56. package/dist/types/components/details-acknowledgements/types.d.ts +1 -1
  57. package/dist/types/components/kb-manager-import/helpers.d.ts +2 -1
  58. package/dist/types/components/kb-manager-import/kb-manager-import.d.ts +0 -1
  59. package/package.json +1 -1
  60. package/dist/genexus-ide-ui/p-56c0c556.entry.js.map +0 -1
  61. package/dist/genexus-ide-ui/p-5e2f9545.entry.js.map +0 -1
  62. package/dist/genexus-ide-ui/p-9ad85231.entry.js.map +0 -1
  63. package/dist/genexus-ide-ui/p-bee71b20.entry.js.map +0 -1
@@ -1 +0,0 @@
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: HTMLChTreeViewRenderElement) =>\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":";;;;;;6BAiBO,OAAMA,IAAY;;AAClB,MAAMC,IAAc;;AAEpB,MAAMC,IAAoB;;;;oCAMjC;MAAMC,sCAAsC,CAC1CC,GACAC;EAEA,MAAMC,IAAuC;EAC7CD,EAAYE,SAAQC;IAClBF,EAAgBG,KAAK;MACnBC,IAAIF,EAAWE;MACfC,SAASH,EAAWI;MACpBC,UAAU;MACVC,MAAM;MACNC,aAAaX;MACbY,UAAUhB;;AACV;EAEJ,OAAOM;AAAe;;AAGjB,MAAMW,sCACXC;EAEA,MAAMC,IAA0B;EAChC,KAAKD,GAAoB;IACvB,OAAOC;;EAETD,EAAmBX,SAAQa;IACzB,MAAMC,IAA4C;MAChDX,IAAIU,EAAeV;MACnBC,SAAS,GAAGS,EAAeR,SAASQ,EAAeE,MAAMC;MACzDV,UAAU;MACVC,MAAM;MACNC,aAAaK,EAAeI;MAC5BR,UAAUf;MACVqB,OAAOnB,oCACLiB,EAAeI,MACfJ,EAAeE;;IAGnBH,EAASV,KAAKY;AAAuB;EAEvC,OAAOF;AAAQ;;;;oCAOjB;MAAMM,iCAAiC,CACrCC,GACAC,GACAC;EAEA,MAAMC,IAAgC;EACtCF,EAAcpB,SAAQ,CAACuB,GAASC;IAC9BF,EAASpB,KAAK;MACZC,IAAI,GAAGgB,aAAwBK;MAC/BpB,SAASmB;MACTf,aAAa;MACbD,MAAM;MACNE,UAAUgB,KAAKC,UAAU;QACvB/B,CAACA,IAAoB0B;;;AAEvB;EAEJ,OAAOC;AAAQ;;AAGjB,MAAMK,yBAAyB,CAC7BC,GACAC;EAEA,MAAMC,IAAe,GAAGD,EAAqB1B,MAAM0B,EAAqBxB;EACxE,MAAM0B,IAAsC;IAC1C5B,IAAI2B;IACJtB,aAAaoB,EAAaX;IAC1Bb,SAASyB,EAAqBxB;IAC9B2B,OAAO,yDAAyDH,EAAqBR;IACrFf,UAAU;IACVC,MAAMsB,EAAqBP,SAASN,WAAW;IAC/CP,UAAUgB,KAAKC,UAAU;MACvB/B,CAACA,IAAoBkC,EAAqBR;;IAE5CN,OAAOG,+BACLY,GACAD,EAAqBP,UACrBO,EAAqBR;;EAGzB,OAAOU;AAAgB;;iFAIlB;MAAME,8BAA8B,CACzCJ,GACAK,GACAC,GACAC;EAEA,MAAMC,IAAwC,KAAID;;IAGlD,MAAME,IAAmBH,EAAsBI,IAAIV,EAAqB1B;EACxE,MAAMyB,IAAeM,EAAgBK,IAAID;EAEzC,MAAME,IAAwBH,EAAuBI,WACnDC,KAAYA,EAASvC,OAAOmC;EAG9B,IAAIE,OAAmB,GAAG;;IAExB,MAAMG,IAA8B;MAClCxC,IAAImC;MACJlC,SAAS,GAAGwB,EAAavB;MACzBG,aAAa,GAAGoB,EAAaX;MAC7BX,UAAU;MACVS,OAAO,EAACY,uBAAuBC,GAAcC;;IAG/CQ,EAAuBnC,KAAKyC;IAC5B,OAAON;;;IAIT,MAAMO,IAAgCjB,uBACpCC,GACAC;EAEFQ,EAAuBG,GAAezB,QAAQ,KACzCsB,EAAuBG,GAAezB,OACzC6B;;IAIF,MAAMC,IAAiBR,EAAuBG,GAAezB,MAAMC;EACnEqB,EACEG,GACApC,UAAU,GAAGwB,EAAavB,SAASwC;EAErC,OAAOR;AAAsB;;ACpK/B,MAAMS,IAAqB;;;;;;;;;;;;;;;;;ACqC3B,MAAMC,IAA8B,EAClC,qBACA,qBACA,uBACA,mBACA,mBACA,wBACA,cACA,gBACA,oBACA;;AAGF,MAAMC,IAAcC,EAAY;EAC9BN,UAAU;EACVtC,MAAM;EACN6C,WAAW;;;AAGb,MAAMC,IAAYF,EAAY;EAC5BN,UAAU;EACVtC,MAAM;EACN6C,WAAW;;;AAGb,MAAME,IAAwBH,EAAY;EACxCN,UAAU;EACVtC,MAAM;EACN6C,WAAW;;;AAGb,MAAMG,IAAcJ,EAAY;EAC9BN,UAAU;EACVtC,MAAM;EACN6C,WAAW;;;AAGb,MAAMI,IAA6B;;AACnC,MAAMC,IAA+B;;MAQxBC,IAAoB;;;;;;;;;QAK/BC,EAAAC,IAAAC,WAAA;IAEAC,EAAAF,IAAAC,MAAsC;IAItCE,EAAAH,IAAAC,WAAA;IACAG,EAAAJ,IAAAC,WAAA;IACAI,EAAAL,IAAAC,WAAA;IACAK,EAAAN,IAAAC,MAAgC,IAAIM;IACpCC,EAAAR,IAAAC,MAAgC,IAAIM;IACpCE,EAAAT,IAAAC,MAA8B,IAAIM;;;QAGlCG,EAAAV,IAAAC,MAAoC,IAAIU;IACxCC,EAAAZ,IAAAC,MAAgD,IAAIU;IAoIpDE,EAAAb,IAAAC,OAAuB;MACrBA,KAAKa;AAAgB;IAGvBC,EAAAf,IAAAC,OAAsB;MACpBA,KAAKe,kBAAkB;MACvBf,KAAKgB,WAAWC,MAAMC,SAAS;MAC/BlB,KAAKgB,WAAWG,QAAQD,SAAS;MACjClB,KAAKgB,WAAWI,QAAQF,SAAS;AAAC;IAGpCG,EAAAtB,IAAAC,OAAkB;;MAChBA,KAAKsB,gBACHC,IAAAvB,KAAKe,qBAAe,QAAAQ,WAAA,aAAAA,EAAElE,YAAW,MAAM2C,KAAKe;AAC7C;IAGHS,EAAAzB,IAAAC,OAA+B;MAC7BA,KAAKyB,oBACHzB,KAAKgB,WAAWC,MAAMS,WACtB1B,KAAKgB,WAAWG,QAAQO,WACxB1B,KAAKgB,WAAWI,QAAQM;AAAO;IAGnCC,EAAA5B,IAAAC,OAAwB4B;;MAEtBC,EAAA7B,MAAIc,GAAA,KAAoBgB,KAAxB9B;mCAEAA,KAAK+B,uBAAuB;MAC5B/B,KAAKgC,eAAehC,KAAKiC,mBAAmBC,MAAK;QAC/ClC,KAAK+B,uBAAuB;AAAK;AACjC;IAGJI,EAAApC,IAAAC,OAAmB4B,MAAOQ;MACxB,MAAMC,UAA6BrC,KAAKsC,aAAaF;MACrDP,EAAA7B,MAAIS,GAAA,KAAkB8B;MACtBV,EAAA7B,MAAIW,GAAA,KAAwB4B;MAE5BF,EAAqBhG,SAAQ2C;QAC3B6C,EAAA7B,MAAIS,GAAA,KAAkBV,IAAIf,EAASxC,IAAI;UACrCE,MAAMsC,EAAStC;UACfY,MAAM0B,EAAS1B;;QAEjB0B,EAAS5B,MAAMf,SAAQmG;UACrBX,EAAA7B,MAAIW,GAAA,KAAwBZ,IAAIyC,EAAOhG,IAAIwC,EAASxC;AAAG;AACvD;MAGJ,MAAMiG,IACJ1F,oCAAoCsF;MACtCrC,KAAK0C,mBAAmBD;AAAsB;IAGhDE,EAAA5C,IAAAC,OACE4C;MAEA,MAAMC,IAAWD,EAAME;MACvB,MAAMC,IAA2B;MACjC,MAAMd,IAA8B;MACpCY,EAASxG,SAAQ2G;QACf,IAAIA,EAAKA,KAAKC,SAAS;UACrBF,EAAexG,KAAKyG,EAAKA,KAAKxG;;QAEhC,IAAIwG,EAAKA,KAAKC,WAAWD,EAAKA,KAAKlG,aAAahB,GAAW;UACzDmG,EAAkB1F,KAAKyG,EAAKA,KAAKxG;;;MAGrCwD,KAAKiC,oBAAoBA;;YAGzB,IAAIY,EAASK,SAASH,EAAe1F,QAAQ;QAC3C2C,KAAKmD,yBAAyBxD;QAC9BK,KAAKoD,iCAAiC;aACjC,IAAIL,EAAe1F,WAAW,GAAG;QACtC2C,KAAKmD,yBAAyBvD;QAC9BI,KAAKoD,iCAAiC;aACjC;QACLpD,KAAKoD,iCAAiC;;;IAI1CC,EAAAtD,IAAAC,OACE4C;MAEA,IAAIA,EAAME,OAAOhG,aAAahB,GAAW;QACvCkE,KAAKsD,0BAA0B,YAAY;UACzCC,WAAW1B,EAAA7B,MAAIC,GAAA;UACfuD,SAASZ,EAAME,OAAOW,iBAAiBC;UACvCC,SAASf,EAAME,OAAOW,iBAAiBG;;;;IAK7CC,EAAA9D,IAAAC,OACE4C;MAEAkB,EAAA9D,MAAIC,GAA6B2C,EAAME,OAAOiB,KAAIf,KAAQA,EAAKA,KAAKxG,MAAG;AAAA;IAGzEwH,EAAAjE,IAAAC,OAAkB;MAChB,IAAIA,KAAKiE,iBAAiB;QACxBjE,KAAKiE;;;;IAKTC,EAAAnE,IAAAC,OAAuB;MACrBA,KAAKmE,eAAe;MACpBtC,EAAA7B,MAAIG,GAAA,KAAoBiE,QAAQ;AAAI;IAGtCC,EAAAtE,IAAAC,OAA0B;MACxB6B,EAAA7B,MAAIG,GAAA,KAAoBmE;AAAO;IAGjCC,EAAAxE,IAAAC,OAAkC4C;;MAChC,MAAM4B,IAAS5B,EAAM4B;MACrB,MAAIjD,IAAAiD,EAAOC,WAAK,QAAAlD,WAAA,aAAAA,EAAElE,UAAS,GAAG;QAC5B2C,KAAKmE,eAAeK,EAAOC,MAAM;;;IAIrCC,EAAA3E,IAAAC,OACE4C;MAEA,MAAM+B,IAAe/B,EAAME;MAC3B,MAAM8B,IAAqB;MAE3B,MAAMC,IAAaF,EAAa7F,WAC9BgG,KAASA,EAAMC,WAAW;MAE5B,MAAMC,IAAeL,EAAa7F,WAChCgG,KAASA,EAAMC,WAAW;MAE5B,MAAME,IAAeN,EAAa7F,WAChCgG,KAASA,EAAMC,WAAW;MAG5B,IAAIF,OAAgB,GAAG;QACrBD,EAASrI,KAAK;;MAEhB,IAAIyI,OAAkB,GAAG;QACvBJ,EAASrI,KAAK;;MAEhB,IAAI0I,OAAkB,GAAG;QACvBL,EAASrI,KAAK;;MAGhB,IAAI2I,IAAU,IAAIlJ;MAClB,IAAI4I,EAASvH,QAAQ;QACnB,MAAM8H,IAAgBP,EAASQ,KAAK;QACpCF,IAAU,IAAIlJ,QAAwBmJ;;MAExCnF,KAAKqF,2BAA2B,IAAIC,OAAOJ,GAAS;;YAGpDlF,KAAKgB,aAAa;QAChBC,OAAO;UACLS,SAASmD,OAAgB;UACzB3D,QAAQlB,KAAKgB,WAAWC,MAAMC;;QAEhCC,SAAS;UACPO,SAASsD,OAAkB;UAC3B9D,QAAQlB,KAAKgB,WAAWG,QAAQD;;QAElCE,SAAS;UACPM,SAASuD,OAAkB;UAC3B/D,QAAQlB,KAAKgB,WAAWI,QAAQF;;;MAIpCW,EAAA7B,MAAIwB,GAAA,KAA6BM,KAAjC9B;AAAmC;IAGrCuF,EAAAxF,IAAAC,OACE4C;MAEA,IAAIf,EAAA7B,MAAII,GAAA,MAAiB;QACvB,MAAM6C,IAAUL,EAAME,WAAWnD;QACjCkC,EAAA7B,MAAII,GAAA,KAAgBoF,yBAAyB;UAAEvC,SAASA;;;;IAI5DwC,EAAA1F,IAAAC,OAA0B;MACxB6B,EAAA7B,MAAIQ,GAAA,KAAgB+B;MACpBV,EAAA7B,MAAIO,GAAA,KAAkBgC;MACtBV,EAAA7B,MAAIK,GAAA,KAAkBkC;MACtBvC,KAAKe,gBAAgB1E,SAAQ2G;QAC3B,MAAM5F,IAAQ4F,EAAK5F;QACnBA,EAAMf,SAAQqJ;UACZ,IAAIA,EAAM5I,aAAa,SAAS;YAC9B+E,EAAA7B,MAAIQ,GAAA,KAAgBmF,IAAID,EAAMlJ;;UAEhC,IAAIkJ,EAAM5I,aAAa,WAAW;YAChC+E,EAAA7B,MAAIO,GAAA,KAAkBoF,IAAID,EAAMlJ;;UAElC,IAAIkJ,EAAM5I,aAAa,WAAW;YAChC+E,EAAA7B,MAAIK,GAAA,KAAkBsF,IAAID,EAAMlJ;;;AAElC;AACF;6BA3UmC;;0CAEY;;2BAEH;;gCAMhB;gCACU;;qBAEZ;4BACmB;oCACb;;sBAEF;MAChCyE,OAAO;QACLS,SAAS;QACTR,QAAQ;;MAEVC,SAAS;QACPO,SAAS;QACTR,QAAQ;;MAEVE,SAAS;QACPM,SAAS;QACTR,QAAQ;;;;;;;;;yBA2DqB;;EAhFjC,sBAAA0E;;;EA0BA,2BAAAC;IACEhE,EAAA7B,MAAIqB,GAAA,KAAgBS,KAApB9B;IACA,IAAIA,KAAKsB,UAAU;MACjBtB,KAAK8F,sBACHjE,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAKC,aAAaC;WACrC;MACLjG,KAAK8F,sBACHjE,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAKC,aAAaE;;;EAI9C,4BAAAC,CAA6BC;IAC3BpG,KAAKqG,aAAaD,KAAYA,EAAS/I,WAAW;;EAiCpD,mBAAAiJ,CAAoBC;IAClB,IAAIA,GAAS;MACX1E,EAAA7B,MAAImC,GAAA,KAAiBL,KAArB9B,MAAsBuG;;;EAmB1B,gBAAAC;IACE3E,EAAA7B,MAAIE,GAAA,KAAcuG;;EAGpB,kBAAAC,IAAkB;EAElB,uBAAMC;IACJ7C,EAAA9D,MAAIF,SAA0B8G,EAAOC,oBAAoB7G,KAAK8G,KAAG;IACjE9G,KAAK+G,sBAAsBC,KAAK;;QAEhCnF,EAAA7B,MAAIqB,GAAA,KAAgBS,KAApB9B;IACAA,KAAK8F,sBACHjE,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAKC,aAAaC;IAC1CpE,EAAA7B,MAAIwB,GAAA,KAA6BM,KAAjC9B;;;;SAOF,mBAAMiH,CAAcjE;IAClBhD,KAAKe,kBAAkBzC,4BACrB0E,GACAnB,EAAA7B,MAAIS,GAAA,MACJoB,EAAA7B,MAAIW,GAAA,MACJX,KAAKe;IAEPf,KAAKgB,WAAWgC,EAAKtF,QAAQwD;IAC7BW,EAAA7B,MAAIyF,GAAA,KAAwB3D,KAA5B9B;;EA+MF,MAAAkH;;IACE,OACEC,EAACC,GAAI;MAACC,OAAM;OACVF,EAAA;MAAUG,OAAOlI;QAEjB+H,EAAA;MAASE,OAAM;OACbF,EAAA;;MAEEE,OAAM;MACNE,MAAK;OAELJ,EAAA;;MAEEE,OAAM;OAENF,EAAA;MAAOE,OAAM;MAAQG,SAAQ;OAC1B3F,EAAA7B,MAAIF,GAAA,KAAkB2H,OAAOC,gBAEhCP,EAAA;MACEQ,WAAS;MACTnL,IAAG;MACH6K,OAAM;MACNO,MAAK;MACLC,MAAK;MACLC,UAAQ;MACR1D,QAAO7C,IAAAvB,KAAKmE,kBAAY,QAAA5C,WAAA,aAAAA,EAAE7E;MAC1BqL,aAAalG,EAAA7B,MAAIF,GAAA,KAAkB2H,OAAOO;MAC1CnL,aAAa2C;MACbyI,KAAMnB,KACHhD,EAAA9D,MAAIE,GAAgB4G,GAAuB;QAGhDK,EAAA;MACEe,QAAM;MACNL,MAAK;MACLM,QAAO;MACPC,UAAUvG,EAAA7B,MAAIuE,GAAA;MACd0D,KAAMnB,KACHhD,EAAA9D,MAAIG,GAAsB2G,GAAsB;SAKvDK,EAAA;MAAKE,OAAM;OACTF,EAAA;MAAA,cAEctF,EAAA7B,MAAIF,GAAA,KAAkB2H,OAAOY;MACzCC,OAAOzG,EAAA7B,MAAIF,GAAA,KAAkB2H,OAAOY;MACpC7L,IAAG;MACH6K,OAAM;MACNO,MAAK;MACLW,SAAS1G,EAAA7B,MAAIkE,GAAA;OAEbiD,EAAA;MAAUE,OAAM;MAAUmB,KAAK9I;SAGjCyH,EAAA;;MAEE3K,IAAG;MACH6K,OAAM;MACNO,MAAK;MACLW,SAAS1G,EAAA7B,MAAIqE,GAAA;MACboE,UAAUzI,KAAK+B;OAEdF,EAAA7B,MAAIF,GAAA,KAAkB2H,OAAOiB,qBAKpCvB,EAAA;;MAEEE,OAAM;OAENF,EAAA;MAAIE,OAAM;OACPxF,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAK4C,cAAcL,QAG5CnB,EAAA;MAAKE,OAAM;QACPrH,KAAKqG,YACLc,EAAA;;MAEEyB,WAAU;MACVvB,OAAM;MACNC,OAAOtH,KAAK0C;MACZmG,cAAc;MACdC,cAAc;MACdC,kBAAkB;MAClBC,UAAU;MACV/F,SAAS;MACTgG,sBACEpH,EAAA7B,MAAI2C,GAAA;MAENuG,uBACErH,EAAA7B,MAAI6D,GAAA;MAENsF,mBAAmBtH,EAAA7B,MAAIqD,GAAA;MACvB4E,KAAMnB,KACHhD,EAAA9D,MAAII,GAAkB0G,GAAiC;SAI5DK,EAAA;MACEiC,YAAY;MACZC,YACExH,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAK4C,cAActC;MAE3CiD,KAAI;OAEJnC,EAAA;;MAEEE,OAAM;MACNkB,SAAS1G,EAAA7B,MAAIqE,GAAA;OAEZxC,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAK4C,cAAcY,cAKhDpC,EAAA;MAAQE,OAAM;OACZF,EAAA;;MAEE3K,IAAG;MACH6K,OAAM;MACNmC,cAAc7J;MACd8J,gBAAgB7J;MAChBnD,SACEoF,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAK4C,cAAce;MAE3CtF,OAAOpE,KAAKmD;MACZwG,SAAS9H,EAAA7B,MAAIuF,GAAA;MACbkD,UACEzI,KAAK+B,wBACL/B,KAAK0C,iBAAiBrF,WAAW;MAEnCuK,MAAK;QAGPT,EAAA;MAAKE,OAAM;OACTF,EAAA;;MAEE3K,IAAG;MACH6K,OAAM;MACNkB,SAAS1G,EAAA7B,MAAI2B,GAAA;MACb8G,YACEmB,IAAA5J,KAAK0C,sBAAgB,QAAAkH,WAAA,aAAAA,EAAEvM,YAAW,KAClC2C,KAAK+B;OAGNF,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAK4C,cAAckB,eAG5C1C,EAAA;;MAEE3K,IAAG;MACH6K,OAAM;MACNkB,SAAS1G,EAAA7B,MAAIY,GAAA;MACb6H,WAAWzI,KAAK+B;MAChB6F,MAAK;OAEJ/F,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAK4C,cAAcmB,eAG5C3C,EAAA;;MAEE3K,IAAG;MACH6K,OAAM;MACNO,MAAK;MACLW,SAAS1G,EAAA7B,MAAIgE,GAAA;OAEbmD,EAAA;MACEE,OAAM;MACNmB,KAAK/I;aAQjB0H,EAAA;;MAEEE,OAAM;OAENF,EAAA;MAAIE,OAAM;OACPxF,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAKC,aAAasC,QAG3CnB,EAAA;MAAKE,OAAM;QACPrH,KAAKsB,YAAYtB,KAAKyB,oBACtB0F,EAAA;;MAEEG,OAAOtH,KAAKe;MACZgI,kBAAkB;MAClBH,WAAU;MACVvB,OAAM;MACN0C,QAAQ/J,KAAKqF;MACb2E,YAAW;MACXC,eAAe;QACbC,YAAY;QACZC,8BAA8B;;SAIlChD,EAAA;MACEiC,YAAY;MACZgB,cAAc/K;MACdgK,YAAYrJ,KAAK8F;MACjBwD,KAAI;QAIRnC,EAAA;MAAQE,OAAM;OACZF,EAAA;;MAEEE,OAAM;MACNkB,SAAS1G,EAAA7B,MAAIc,GAAA;MACb2H,UAAUzI,KAAKsB,YAAYtB,KAAK+B;MAChC6F,MAAK;OAEJ/F,EAAA7B,MAAIF,GAAA,KAAkBiG,KAAKC,aAAaqE,iBAMjDlD,EAAA;;MAEEE,OAAM;OAENF,EAAA;MACEmD,QAAQtK,KAAKgB,WAAWC,MAAMC;MAC9BqJ,UAAUvK,KAAKgB,WAAWG,QAAQD;MAClCsJ,WAAWxK,KAAKgB,WAAWI,QAAQF;MACnCuJ,aAAW;MACXC,SAAO;MACPC,SAAS3K,KAAK4K;MACdC,oBAAoBhJ,EAAA7B,MAAI0E,GAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["detailsAcknowledgementsCss","OPEN_WINDOW_ICON","getIconPath","category","name","colorType","EXPAND_ICON","COLLAPSE_ICON","IMAGES_PATH","BACKGROUND_SIZE","GENEXUS_NEXT_LOGO_SRC","getAssetPath","BG_IMAGE_TOP_START","BG_IMAGE_BOTTOM_START","BG_IMAGE_BOTTOM_END","CSS_BUNDLES","GxIdeDetailsAcknowledgements","_GxIdeDetailsAcknowledgements_getFormatedDate","set","this","date","toISOString","split","_GxIdeDetailsAcknowledgements_renderLicensesInfo","licenses","type","packageData","h","class","map","license","licenseId","__classPrivateFieldGet","_GxIdeDetailsAcknowledgements_getLicenseId","call","showDescription","expandedLicenseId","key","description","_GxIdeDetailsAcknowledgements_renderLicensesViewButtons","visibleLicenseButton","icon","viewLicenseButtonLabel","_componentLocale","packageCard","licenseLabel","onClick","_GxIdeDetailsAcknowledgements_viewLicenseClickedHandler","src","licenseName","packageName","packageVersion","undefined","_GxIdeDetailsAcknowledgements_openLinkClickedHandler","url","e","openPackageUrlCallback","preventDefault","componentWillLoad","Locale","getComponentStrings","el","render","formatedDate","dateGenerated","Host","style","backgroundImage","backgroundPosition","backgroundRepeat","backgroundSize","model","detailsCard","title","mainDescription","secondaryDescription","dateTime","_a","packages","packageItem","headingContent","packageURL","href","target","declaredLicenses"],"sources":["src/components/details-acknowledgements/details-acknowledgements.scss?tag=gx-ide-details-acknowledgements&encapsulation=shadow","src/components/details-acknowledgements/details-acknowledgements.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n grid-auto-rows: max-content;\n justify-content: center;\n padding: 95px var(--mer-spacing--lg) 95px var(--mer-spacing--lg);\n overflow: auto;\n}\n\n%resetList {\n // TODO: Use mixin from common\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.main-wrapper {\n max-inline-size: 1000px;\n display: grid;\n gap: var(--mer-spacing--xl);\n}\n\n.logo {\n inline-size: 200px;\n margin: 0 auto;\n margin-block-end: var(--mer-spacing--2xl);\n opacity: 0;\n transform: translateY(var(--mer-spacing--2xs));\n animation: showLogo var(--mer-timing--regular) ease-out forwards;\n animation-delay: var(--mer-timing--regular);\n}\n@keyframes showLogo {\n 100% {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n// general\n\n.card {\n display: grid;\n border-radius: var(--mer-border__radius--sm);\n border-width: var(--mer-border__width--sm);\n border-color: var(--elevation-border-color);\n border-style: solid;\n padding: var(--mer-spacing--lg);\n gap: var(--mer-spacing--md);\n opacity: 0;\n animation: showCard var(--mer-timing--fast) ease-out forwards;\n animation-delay: calc(var(--mer-timing--regular) * 2);\n}\n@keyframes showCard {\n 100% {\n opacity: 1;\n }\n}\n\n// details card\n\nh1.title {\n font-weight: 600;\n}\n\n.intro-container {\n display: grid;\n gap: var(--mer-spacing--md);\n}\n\n.date-container {\n display: grid;\n gap: var(--mer-spacing--sm);\n}\n\n// package card\n\n.card-package {\n opacity: 0;\n transition: opacity var(--mer-timing--fast);\n}\n\n.package-name {\n --package-name-color: var(--mer-text__primary);\n color: var(--package-name-color);\n\n a {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n &.has-link {\n // TODO: This should be a class in Mercury\n &:hover {\n --package-name-color: var(--mer-text__primary--hover);\n }\n &:active {\n --package-name-color: var(--mer-text__primary--active);\n }\n }\n}\n.package-link {\n display: inline-block;\n}\n\n.licenses-names-list {\n @extend %resetList;\n display: flex;\n align-items: center;\n}\n.licenses-names-item:not(:first-child)::before {\n content: \"•\";\n padding-inline: 8px;\n}\n\n.licenses-descriptions-list {\n @extend %resetList;\n}\n.licenses-descriptions-description {\n white-space: break-spaces;\n max-block-size: 940px;\n overflow: auto;\n line-height: 1.5;\n}\n.licenses-descriptions-item {\n display: grid;\n gap: var(--mer-spacing--md);\n}\n\n.code-box {\n border-radius: var(--mer-border__radius--sm);\n background-color: var(--mer-surface);\n border: 1px solid var(--mer-border-color__on-elevation--01);\n padding: var(--mer-spacing--md);\n font-family: var(--font-family-code);\n font-size: var(--font-size-body-s);\n display: grid;\n gap: var(--mer-spacing--lg);\n}\n\n.description-list {\n display: grid;\n gap: var(--mer-spacing--xs);\n max-inline-size: 400px;\n margin: 0 auto;\n}\n\n.show-more-button {\n justify-self: start;\n}\n\n// utilities\n// WA/TODO: This should be defined on Mercury\n.color-default {\n color: var(--mer-text__highlighted);\n}\n.color-neutral {\n color: var(--mer-color__neutral-gray--400);\n}\n.color-primary {\n color: var(--mer-text__primary);\n}\n\np {\n // TODO: Update line-height values on Mercury\n --line-height-tight: 1.5;\n --font-weight-regular: 300;\n}\n\nhr {\n // WA/TODO: A style for hr should be defined on Mercury\n border-block-start: 0;\n border-color: var(--mer-border-color__on-elevation--01);\n inline-size: 100%;\n margin: 0;\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath,\n JSX\n} from \"@stencil/core\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { Locale } from \"../../common/locale\";\n\nimport type { PackageData, License, OpenPackageURLCallback } from \"./types\";\n\nconst OPEN_WINDOW_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"open-window\",\n colorType: \"primary\"\n});\nconst EXPAND_ICON = getIconPath({\n category: \"system\",\n name: \"expand\",\n colorType: \"on-primary\"\n});\nconst COLLAPSE_ICON = getIconPath({\n category: \"system\",\n name: \"collapse-content\",\n colorType: \"on-primary\"\n});\n\nconst IMAGES_PATH = \"./gx-ide-assets/details-acknowledgements/images\";\nconst BACKGROUND_SIZE = \"300px\";\n\nconst GENEXUS_NEXT_LOGO_SRC = getAssetPath(\n `${IMAGES_PATH}/genexus-next-logo.svg`\n);\nconst BG_IMAGE_TOP_START = getAssetPath(`${IMAGES_PATH}/top-start.svg`);\nconst BG_IMAGE_BOTTOM_START = getAssetPath(`${IMAGES_PATH}/bottom-start.svg`);\nconst BG_IMAGE_BOTTOM_END = getAssetPath(`${IMAGES_PATH}/bottom-end.svg`);\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"utils/elevation\",\n \"components/button\",\n \"components/icon\",\n \"chameleon/scrollbar\"\n];\n\n@Component({\n tag: \"gx-ide-details-acknowledgements\",\n styleUrl: \"details-acknowledgements.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/details-acknowledgements\"]\n})\nexport class GxIdeDetailsAcknowledgements {\n /**\n * The component hard-coded strings translations.\n */\n _componentLocale: any;\n\n @Element() el: HTMLGxIdeDetailsAcknowledgementsElement;\n\n /**\n * Identifier of the currently expanded license. Should combine:\n * packageName + packageVersion + license.name. Example:\n * @sentry/core-6.7.1-mit\n */\n @State() expandedLicenseId?: string;\n\n /** The date when the current release was published */\n @Prop() readonly dateGenerated?: Date;\n\n /** The version of the current release*/\n @Prop() readonly release?: string;\n\n /** The list of packages that the current release contains*/\n @Prop() readonly packages: PackageData[];\n\n /**\n * Callback invoked when the user clicks a package with a packageURL.\n * If openPackageUrlCallback is defined, the default link action is\n * prevented and the URL is passed to the host via the callback.\n * Otherwise, the link opens in a new tab as usual.\n */\n @Prop() readonly openPackageUrlCallback: OpenPackageURLCallback;\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n #getFormatedDate = (date: Date) => {\n return date?.toISOString().split(\"T\")[0];\n };\n\n #renderLicensesInfo = (\n licenses: License[],\n type: \"name\" | \"description\" = \"name\",\n packageData?: PackageData\n ): JSX.Element => {\n return type === \"name\" ? (\n <ul class=\"licenses-names-list\">\n {licenses.map(license => {\n return (\n <li class=\"color-default body-regular-m licenses-names-item\">\n {license.name}\n </li>\n );\n })}\n </ul>\n ) : (\n <ul class=\"licenses-descriptions-list\">\n {licenses.map(license => {\n const licenseId = this.#getLicenseId(packageData, license.name);\n const showDescription = licenseId === this.expandedLicenseId;\n\n return (\n <li class=\"licenses-descriptions-item\" key={licenseId}>\n {showDescription ? (\n <p class=\"code-box color-neutral licenses-descriptions-description scrollable\">\n {license.description}\n </p>\n ) : null}\n </li>\n );\n })}\n </ul>\n );\n };\n\n #renderLicensesViewButtons = (\n licenses: License[],\n packageData?: PackageData\n ): JSX.Element => {\n return (\n <div class=\"licenses-buttons-container buttons-spacer\">\n {licenses.map(license => {\n const licenseId = this.#getLicenseId(packageData, license.name);\n const visibleLicenseButton = licenseId === this.expandedLicenseId;\n const icon = visibleLicenseButton ? COLLAPSE_ICON : EXPAND_ICON;\n\n const viewLicenseButtonLabel = `${license.name} ${this._componentLocale.packageCard.licenseLabel}`;\n\n return (\n <button\n class={{\n \"button-icon-and-text\": true,\n \"button-primary\": !visibleLicenseButton,\n \"button-secondary\": visibleLicenseButton,\n \"show-more-button\": true\n }}\n onClick={this.#viewLicenseClickedHandler(licenseId)}\n >\n <ch-image src={icon} class=\"package-icon icon-md\"></ch-image>\n {viewLicenseButtonLabel}\n </button>\n );\n })}\n </div>\n );\n };\n\n #getLicenseId = (packageData: PackageData, licenseName: string): string => {\n return `${packageData.packageName}-${packageData.packageVersion}-${licenseName}`;\n };\n\n #viewLicenseClickedHandler = (licenseId: string) => () => {\n if (licenseId === this.expandedLicenseId) {\n // collapse\n this.expandedLicenseId = undefined;\n } else {\n // expand collapse\n this.expandedLicenseId = licenseId;\n }\n };\n\n #openLinkClickedHandler = (url: string) => (e: MouseEvent) => {\n if (this.openPackageUrlCallback) {\n e.preventDefault();\n this.openPackageUrlCallback(url);\n }\n };\n\n render() {\n const formatedDate = this.#getFormatedDate(this.dateGenerated);\n return (\n <Host\n class=\"scrollable\"\n style={{\n backgroundImage: `url(${BG_IMAGE_TOP_START}), url(${BG_IMAGE_BOTTOM_START}), url(${BG_IMAGE_BOTTOM_END})`,\n backgroundPosition: \"left top, left bottom, right bottom\",\n backgroundRepeat: \"no-repeat, no-repeat, no-repeat\",\n backgroundSize: `${BACKGROUND_SIZE}, ${BACKGROUND_SIZE}, ${BACKGROUND_SIZE}`\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"main-wrapper\">\n <img src={GENEXUS_NEXT_LOGO_SRC} class=\"logo\"></img>\n <div class=\"card card-details elevation-1\">\n <div class=\"intro-container\">\n <h1 class=\"title heading-3 color-default\">\n {this._componentLocale.detailsCard.title}\n </h1>\n <p class=\"color-default body-regular-m\">\n {this._componentLocale.detailsCard.mainDescription}\n </p>\n <p class=\"color-neutral body-italic-s\">\n {this._componentLocale.detailsCard.secondaryDescription}\n </p>\n </div>\n\n <hr />\n\n <div class=\"date-container\">\n <p class=\"color-neutral\">\n {this._componentLocale.detailsCard.dateGenerated}\n </p>\n <time class=\"color-default\" dateTime={formatedDate}>\n {formatedDate}\n </time>\n </div>\n </div>\n\n {this.packages?.map(packageItem => {\n let packageName = `${packageItem.packageName} ${packageItem.packageVersion}`;\n const headingContent = packageItem.packageURL ? (\n <a\n href={packageItem.packageURL}\n target=\"_blank\"\n onClick={this.#openLinkClickedHandler(packageItem.packageURL)}\n class=\"package-link\"\n >\n {packageName}\n <ch-image\n src={OPEN_WINDOW_ICON}\n class=\"package-icon icon-md\"\n ></ch-image>\n </a>\n ) : (\n packageName\n );\n\n return (\n <article class=\"card card-package elevation-1\">\n <h2\n class={{\n \"subtitle-semi-bold-s\": true,\n \"package-name\": true,\n \"has-link\": !!packageItem.packageURL\n }}\n >\n {headingContent}\n </h2>\n <p class=\"color-default subtitle-semi-bold-s\">\n {this._componentLocale.packageCard.declaredLicenses}\n </p>\n {this.#renderLicensesInfo(packageItem.declaredLicenses, \"name\")}\n\n {this.#renderLicensesInfo(\n packageItem.declaredLicenses,\n \"description\",\n packageItem\n )}\n\n {this.#renderLicensesViewButtons(\n packageItem.declaredLicenses,\n packageItem\n )}\n </article>\n );\n })}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["mapKbsModelToActionListModel","kbsData","listBoxItems","forEach","kb","push","id","type","caption","name","createKbFromServerCss","CSS_BUNDLES","INFO_ICON","getIconPath","category","colorType","GxIdeCreateKbFromServer","_GxIdeCreateKbFromServer_chSearchIcon","set","this","_GxIdeCreateKbFromServer_showMoreIcon","_GxIdeCreateKbFromServer_versionsSelect","value","_GxIdeCreateKbFromServer__componentLocale","_GxIdeCreateKbFromServer_kbsActionListModel","_GxIdeCreateKbFromServer_kbVersions","_GxIdeCreateKbFromServer_shortcutsSrc","getAssetPath","_GxIdeCreateKbFromServer_selectedKbId","_GxIdeCreateKbFromServer_kbNameAlreadyEditedByUser","_GxIdeCreateKbFromServer_versionSelectedTypeEl","_GxIdeCreateKbFromServer_localKBNameEl","_GxIdeCreateKbFromServer_cancelHandler","cancelCallback","_GxIdeCreateKbFromServer_changeConnectionHandler","async","changeConnectionCallback","authenticationType","connectionData","serverUrl","userName","userPassword","_GxIdeCreateKbFromServer_createHandler","versionSelectedType","__classPrivateFieldSet","createKBCallback","selectedKB","__classPrivateFieldGet","versionSelected","localKBName","localKbNameInputValue","versionList","then","formSubmitResult","validatableControls","validateControls","_GxIdeCreateKbFromServer_evaluateTooltipRender","controlReference","_b","_a","get","hasError","_c","message","h","class","actionElement","blockAlign","config","tooltipSettings","inlineAlign","delay","_GxIdeCreateKbFromServer_filterValueChangedHandler","event","filterValue","detail","toLowerCase","kbsFilteredActionListModel","filter","item","includes","_GxIdeCreateKbFromServer_init","getGXserverKBsCallback","result","_GxIdeCreateKbFromServer_initializeValidatableControls","validatableControl","reference","undefined","_GxIdeCreateKbFromServer_inputLocalKbNameHandler","_GxIdeCreateKbFromServer_selectedVersionHandler","selectKBVersionsCallback","length","map","kbVersion","versionsValueInput","versionsPlaceholder","toString","versionSelectedFieldValue","oneVersionSelectedFieldValue","_GxIdeCreateKbFromServer_selectKbChangeHandler","enableSelectVersionsButton","_GxIdeCreateKbFromServer_versionsChangedHandler","_GxIdeCreateKbFromServer_renderFooter","onClick","part","footer","cancel","disabled","createKb","Map","componentDidLoad","call","loading","componentWillLoad","Locale","getComponentStrings","el","render","Host","model","src","ref","chShortcutsEl","header","user","change","loaderTitle","loader","title","description","show","Fragment","startImgSrc","onInput","placeholder","searchKbsPlaceholder","stateIconSrc","stateTitle","emptyKBsText","isAnimated","selection","onSelectedItemsChange","onChange","htmlFor","versionsLabel","readonly","versionsPlaceholderDisabled","localKbNameLabel","localKbNamePlaceholder"],"sources":["src/components/team-dev/create-kb-from-server/helpers.ts","src/components/team-dev/create-kb-from-server/create-kb-from-server.scss?tag=gx-ide-create-kb-from-server&encapsulation=shadow","src/components/team-dev/create-kb-from-server/create-kb-from-server.tsx"],"sourcesContent":["import { ActionListItemModel } from \"@genexus/chameleon-controls-library\";\nimport { KBData } from \"./create-kb-from-server\";\n\nexport const mapKbsModelToActionListModel = (\n kbsData: KBData[]\n): ActionListItemModel[] => {\n const listBoxItems: ActionListItemModel[] = [];\n kbsData.forEach(kb => {\n listBoxItems.push({\n id: kb.id,\n type: \"actionable\",\n caption: kb.name\n });\n });\n return listBoxItems;\n};\n",":host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n// - - - - - - - - - - -\n// Header\n// - - - - - - - - - - -\n\nheader {\n display: grid;\n grid-template-rows: max-content;\n grid-template-columns: 1fr 1fr max-content;\n}\n\n.button-change {\n align-self: center;\n justify-self: end;\n}\n\n// - - - - - - - - - - -\n// Main\n// - - - - - - - - - - -\n\n.main {\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: max-content 1fr max-content max-content;\n position: relative;\n}\n\n.search-kbs {\n inline-size: 50%;\n}\n\n.versions-container {\n grid-auto-rows: max-content;\n\n &__input {\n display: grid;\n grid-template-columns: 1fr max-content;\n gap: var(--mer-spacing--xs);\n }\n\n .button-icon-only {\n border-color: var(--mer-color__neutral-gray--500);\n border-width: var(--mer-border__width--sm);\n border-radius: var(--mer-border__radius--sm);\n }\n\n .button-icon-only:hover {\n border-color: var(--mer-color__neutral-gray--100);\n }\n}\n","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath,\n Fragment\n} from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport { config } from \"../../../common/config\";\nimport { GXServerConnectionData } from \"../connect-gx-server/connect-gx-server\";\nimport { FormSubmitResult } from \"../../../common/types\";\nimport {\n ControlValidation,\n validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { mapKbsModelToActionListModel } from \"./helpers\";\nimport {\n ActionListItemActionable,\n ActionListItemModel,\n ActionListItemModelExtended,\n ChActionListRenderCustomEvent,\n ChEditCustomEvent\n} from \"@genexus/chameleon-controls-library\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/list-box\",\n \"components/tooltip\",\n \"chameleon/scrollbar\"\n];\n\nconst INFO_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-surface\"\n});\n\n@Component({\n tag: \"gx-ide-create-kb-from-server\",\n styleUrl: \"create-kb-from-server.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/create-kb-from-server\"]\n})\nexport class GxIdeCreateKbFromServer {\n #chSearchIcon = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n });\n\n #showMoreIcon = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"on-elevation\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"Trunk\", caption: \"Trunk Version\" },\n { value: \"All\", caption: \"All Versions\" },\n { value: \"Select\", caption: \"Select Version\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n #kbsActionListModel: ActionListItemModel[] = [];\n #kbVersions: KBVersion[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/create-kb-from-server/shortcuts.json`\n );\n #selectedKbId: string;\n #kbNameAlreadyEditedByUser: boolean = false;\n\n #versionSelectedTypeEl: HTMLChRadioGroupRenderElement;\n\n @Element() el: HTMLGxIdeCreateKbFromServerElement;\n\n #localKBNameEl!: HTMLChEditElement;\n\n /**\n * State to enable/disable the select versions button\n */\n @State() enableSelectVersionsButton: boolean = false;\n\n /**\n * The current kbn name value.\n */\n @State() localKbNameInputValue: string = \"\";\n\n /**\n * State to store the loading state of the component\n */\n @State() loading = true;\n\n /**\n * State to store the filter input value to filter the list-box\n */\n @State() filterValue: string = \"\";\n\n /**\n * KBs filtered\n */\n @State() kbsFilteredActionListModel: ActionListItemModel[] = [];\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The version selected type\n */\n @State() versionSelectedType: VersionOption;\n\n /**\n * String value to show the number of versions selected (\"N versions selected\")\n */\n @State() versionsValueInput: string = \"\";\n\n /**\n * Set of data required when executing any of the callbacks that require a connection to the server.\n */\n @Prop() readonly connectionData: GXServerConnectionData;\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * The host reopens the gx-ide-connect-server login modal with the previous data, and closes the current modal\n */\n @Prop() readonly changeConnectionCallback: (\n data: GXServerConnectionData\n ) => Promise<void>;\n\n /**\n * Callback that must be invoked when the 'Create KB' button is pressed. Receives the user's parameter selection to create the remote KB locally and ends the dialog.\n */\n @Prop() readonly createKBCallback!: (\n kbInfo: KnowledgeBaseInfo\n ) => Promise<FormSubmitResult>;\n\n /**\n * Callback that must be invoked when invoking the dialog\n */\n @Prop() readonly getGXserverKBsCallback!: (\n data: GXServerConnectionData\n ) => Promise<KBData[]>;\n\n /**\n * Callback invoked by pressing the ellipsis in the version selector. Receives the KB selected by the user, and displays the version selector dialog. Returns a list of versions chosen by the user.\n */\n @Prop() readonly selectKBVersionsCallback: (\n selectedKB: string\n ) => Promise<KBVersion[]>;\n\n async componentDidLoad() {\n await this.#init();\n this.loading = false;\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #changeConnectionHandler = async (): Promise<void> => {\n this.changeConnectionCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n });\n };\n\n #createHandler = async (): Promise<void> => {\n if (this.versionSelectedType !== \"Select\") {\n this.#kbVersions = [];\n }\n this.createKBCallback({\n selectedKB: this.#selectedKbId,\n versionSelected: this.versionSelectedType,\n localKBName: this.localKbNameInputValue,\n versionList: this.#kbVersions\n }).then((formSubmitResult: FormSubmitResult) => {\n this.validatableControls = validateControls(\n formSubmitResult,\n this.validatableControls\n );\n });\n };\n\n // TODO: evaluate if this should be a global helper function.\n // It is used on other dialogs as well.\n #evaluateTooltipRender = (\n controlReference: HTMLElement\n ): HTMLChTooltipElement =>\n this.validatableControls?.get(controlReference?.id)?.hasError &&\n this.validatableControls.get(controlReference.id)?.message && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={controlReference as unknown as HTMLButtonElement}\n blockAlign={config.tooltipSettings.blockAlign}\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.validatableControls.get(controlReference.id).message}\n </ch-tooltip>\n );\n\n #filterValueChangedHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.filterValue = (event.detail as string).toLowerCase();\n this.kbsFilteredActionListModel = this.#kbsActionListModel.filter(\n (item: ActionListItemActionable) =>\n item.caption.toLowerCase().includes(this.filterValue)\n );\n };\n\n #init = async () => {\n await this.getGXserverKBsCallback({\n authenticationType: this.connectionData.authenticationType,\n serverUrl: this.connectionData.serverUrl,\n userName: this.connectionData.userName,\n userPassword: this.connectionData.userPassword\n }).then(result => {\n this.#kbsActionListModel = mapKbsModelToActionListModel(result);\n this.kbsFilteredActionListModel = this.#kbsActionListModel;\n this.filterValue = \"\";\n });\n };\n\n #initializeValidatableControls = () => {\n // populate validatableControls with the controls that could have errors.\n const validatableControls: HTMLElement[] = [this.#localKBNameEl];\n validatableControls.forEach(validatableControl => {\n if (validatableControl.id) {\n this.validatableControls.set(validatableControl.id, {\n reference: validatableControl,\n hasError: false,\n message: undefined\n });\n }\n });\n };\n\n #inputLocalKbNameHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.localKbNameInputValue = event.detail as string;\n this.#kbNameAlreadyEditedByUser = true;\n };\n\n #selectedVersionHandler = async () => {\n if (this.selectKBVersionsCallback) {\n await this.selectKBVersionsCallback(this.#selectedKbId).then(result => {\n if (result?.length) {\n this.#kbVersions = result.map(kbVersion => ({\n id: kbVersion.id,\n name: kbVersion.name\n }));\n\n if (result.length === 1 && this.#kbVersions[0].id === 0) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput =\n this.#_componentLocale.kb.versionsPlaceholder;\n } else if (result.length > 1) {\n this.localKbNameInputValue = this.#selectedKbId;\n this.versionsValueInput = `${result.length.toString()} ${\n this.#_componentLocale.kb.versionSelectedFieldValue\n }`;\n } else {\n this.localKbNameInputValue = `${this.#selectedKbId}_${\n this.#kbVersions[0].name\n }`;\n this.versionsValueInput = `${result[0].name} ${\n this.#_componentLocale.kb.oneVersionSelectedFieldValue\n }`;\n }\n }\n });\n }\n };\n\n #selectKbChangeHandler = (\n event: ChActionListRenderCustomEvent<ActionListItemModelExtended[]>\n ): void => {\n const item = event.detail[0]?.item as ActionListItemActionable;\n if (item === undefined) {\n this.enableSelectVersionsButton = false;\n this.#selectedKbId = undefined;\n return;\n }\n this.enableSelectVersionsButton = true;\n this.#selectedKbId = item.id;\n if (this.#kbNameAlreadyEditedByUser) {\n return;\n }\n this.localKbNameInputValue = item.caption;\n if (this.versionSelectedType === \"Select\") {\n this.versionsValueInput = \"\";\n this.#kbVersions = [];\n }\n };\n\n #versionsChangedHandler = (event: CustomEvent<string>) => {\n this.versionSelectedType = event.detail as VersionOption;\n };\n\n #renderFooter = () => {\n return (\n <footer class=\"footer control-footer-with-border spacing-body-inline spacing-body-block-end\">\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n part=\"button button-cancel\"\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // create kb button\n class=\"button-primary\"\n onClick={this.enableSelectVersionsButton && this.#createHandler}\n disabled={!this.enableSelectVersionsButton}\n part=\"button button-create-kb\"\n >\n {this.#_componentLocale.footer.createKb}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-shortcuts\n src={this.#shortcutsSrc}\n ref={(el: HTMLChShortcutsElement) =>\n (this.chShortcutsEl = el as HTMLChShortcutsElement)\n }\n ></ch-shortcuts>\n\n <section class=\"section\">\n <header class=\"header control-header-with-border space-body spacing-body-inline spacing-body-block-start\">\n <div class=\"field field-block\">\n <label class=\"label\">\n {this.#_componentLocale.header.serverUrl}\n </label>\n <p>{this.connectionData.serverUrl}</p>\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\">{this.#_componentLocale.header.user}</label>\n <p>{this.connectionData.userName}</p>\n </div>\n\n <button\n class=\"button-tertiary button-change\"\n onClick={this.#changeConnectionHandler}\n >\n {this.#_componentLocale.header.change}\n </button>\n </header>\n <section class=\"main field-group spacing-body\">\n {this.loading ? (\n <gx-ide-loader\n loaderTitle={this.#_componentLocale.loader.title}\n description={this.#_componentLocale.loader.description}\n show\n ></gx-ide-loader>\n ) : (\n <Fragment>\n <ch-edit\n class=\"input search-kbs\"\n id=\"local-kb-name\"\n startImgSrc={this.#chSearchIcon}\n onInput={this.#filterValueChangedHandler}\n placeholder={this.#_componentLocale.kb.searchKbsPlaceholder}\n ></ch-edit>\n {this.#kbsActionListModel.length === 0 ||\n this.kbsFilteredActionListModel.length === 0 ? (\n <div class=\"list-box\">\n <gx-ide-empty-state\n stateIconSrc={INFO_ICON}\n stateTitle={this.#_componentLocale.emptyKBsText}\n isAnimated={true}\n ></gx-ide-empty-state>\n </div>\n ) : (\n <ch-action-list-render\n selection=\"single\"\n class=\"list-box\"\n onSelectedItemsChange={this.#selectKbChangeHandler}\n model={this.kbsFilteredActionListModel}\n ></ch-action-list-render>\n )}\n <div class=\"versions-container field-group\">\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#versionsChangedHandler}\n value={this.#versionsSelect[0].value}\n ref={(el: HTMLChRadioGroupRenderElement) => {\n this.#versionSelectedTypeEl =\n el as HTMLChRadioGroupRenderElement;\n if (this.#versionSelectedTypeEl) {\n this.versionSelectedType = this.#versionSelectedTypeEl\n .value as VersionOption;\n }\n }}\n ></ch-radio-group-render>\n\n {this.versionSelectedType === \"Select\" && (\n <div class=\"versions-container__item field-group\">\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"control-id-1\">\n {this.#_componentLocale.kb.versionsLabel}\n </label>\n <div class=\"versions-container__input\">\n <ch-edit\n class=\"input\"\n readonly\n placeholder={\n this.enableSelectVersionsButton\n ? this.#_componentLocale.kb.versionsPlaceholder\n : this.#_componentLocale.kb\n .versionsPlaceholderDisabled\n }\n value={this.versionsValueInput}\n ></ch-edit>\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#selectedVersionHandler}\n disabled={!this.enableSelectVersionsButton}\n >\n <ch-image\n src={this.#showMoreIcon}\n class=\"icon-sm\"\n ></ch-image>\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n\n <div class=\"field field-block\">\n <label class=\"label\" htmlFor=\"localKbName\">\n {this.#_componentLocale.kb.localKbNameLabel}\n </label>\n <ch-edit\n // local kb name\n class=\"input\"\n id=\"local-kb-name\"\n value={this.localKbNameInputValue}\n onInput={this.#inputLocalKbNameHandler}\n placeholder={\n this.#_componentLocale.kb.localKbNamePlaceholder\n }\n ref={(el: HTMLChEditElement) => {\n this.#localKBNameEl = el as HTMLChEditElement;\n if (this.#localKBNameEl) {\n this.#initializeValidatableControls();\n }\n }}\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#localKBNameEl)}\n </div>\n </Fragment>\n )}\n </section>\n\n {this.#renderFooter()}\n </section>\n </Host>\n );\n }\n}\n\nexport type KBData = {\n id: string;\n name: string;\n};\n\nexport type KBVersion = {\n id: number;\n name: string;\n type?: VersionType;\n};\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n kbs: KBData[];\n};\n\nexport type KnowledgeBaseInfo = {\n selectedKB: string;\n versionSelected: VersionOption;\n localKBName: string;\n versionList: KBVersion[];\n};\n\nexport type VersionOption = \"Trunk\" | \"All\" | \"Select\";\n\nexport type VersionType = \"Branch\" | \"Frozen\";\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["serverSelectorCss","CSS_BUNDLES","INFO_ICON","getIconPath","category","name","colorType","LOCK_ICON","LANGUAGE_ICON","GxIdeServerSelector","_GxIdeServerSelector_chSearchIcon","set","this","_GxIdeServerSelector_versionsSelect","value","caption","_GxIdeServerSelector__componentLocale","_GxIdeServerSelector_chGridRecentlyUsedServersEl","_GxIdeServerSelector_chGridConnectedServersEl","_GxIdeServerSelector_previousSelectedRowId","_GxIdeServerSelector_selectedRowId","_GxIdeServerSelector_serverUrlEL","_GxIdeServerSelector_cancelHandler","cancelCallback","_GxIdeServerSelector_confirmHandler","async","selectedConnectionType","selectServerCallback","uri","selectedServerUri","selectedServerName","isValidUrl","__classPrivateFieldGet","_GxIdeServerSelector_validateUrl","call","serverUrlInputValue","serverNameInputValue","_GxIdeServerSelector_filterValueChangedHandler","event","filterValue","detail","toLowerCase","filteredConnectedServersData","connectedServersData","filter","item","serverName","includes","_GxIdeServerSelector_inputHandler","field","enableConfirmButton","_GxIdeServerSelector_enableConfirmButton","url","serverUrl","URL","protocolValid","protocol","startsWith","ex","length","_GxIdeServerSelector_selectConnectedServersHandler","_GxIdeServerSelector_handleServerSelection","_GxIdeServerSelector_selectRecentlyUsedServersHandler","recentlyUsedServersData","serversData","otherGridEl","isFirstSelection","__classPrivateFieldSet","rowId","undefined","selectedServer","find","server","id","userName","gxServerUsername","selectRow","_GxIdeServerSelector_connectionTypeChangedHandler","_GxIdeServerSelector_renderTabularGridColumnSet","hideColumnName","h","class","columnId","columnName","settingable","columnNameHidden","size","config","tabularGrid","colSize","maxContent","resizable","sortable","onColumnSortChanged","_GxIdeServerSelector_handleColumnSortChanged","auto","_GxIdeServerSelector_renderTooltip","text","actionElement","blockAlign","inlineAlign","tooltipSettings","delay","_GxIdeServerSelector_renderTabularGridCommonCells","_GxIdeServerSelector_renderIcon","accessLevel","isConnected","_GxIdeServerSelector_renderRecentlyUsedServersGrid","rowSelectionMode","ref","el","allowColumnReorder","onRowClicked","map","rowid","stateIconSrc","stateTitle","emptyConnectedServers","isAnimated","_GxIdeServerSelector_renderConnectedServersGrid","e","sortDirection","aux","sort","a","b","icon","src","_GxIdeServerSelector_renderFooter","isSelectionMode","onClick","footer","cancel","disabled","confirm","Map","componentWillLoad","Locale","getComponentStrings","_a","_b","render","connectionTypeClass","recentlyUsedEmptyClass","Host","model","header","title","onChange","startImgSrc","onInput","placeholder","placeholders","searchServers","accessibleName","type","htmlFor","recentlyUsed","allServers","labels","input","maxLength","errors","serverUrlInvalid"],"sources":["src/components/team-dev/server-selector/server-selector.scss?tag=gx-ide-server-selector&encapsulation=shadow","src/components/team-dev/server-selector/server-selector.tsx"],"sourcesContent":["@import \"../../../../node_modules/@genexus/mercury/dist/assets/scss/helpers.scss\";\n\n:host {\n display: grid;\n block-size: 100%;\n grid-template-rows: max-content max-content 1fr max-content;\n row-gap: var(--mer-spacing--md);\n overflow: auto;\n}\n\n:host(.new-connection) {\n grid-template-rows: max-content 1fr;\n}\n\n:host(.recently-used-empty) {\n grid-template-rows: max-content 1fr;\n}\n\n.section {\n display: contents;\n}\n\n// General\n\n.tabular-grid {\n border-radius: var(--mer-border__radius--sm);\n overflow: hidden;\n border-inline: 1px solid var(--grid-cell__border-color);\n --grid-cell__box-shadow-inline-block:\n inset 0 0px var(--grid-cell__border-color),\n inset 0 -1px var(--grid-cell__border-color);\n overflow: auto;\n}\n\n.tabular-grid-rowset-empty {\n border-block-end: 1px solid var(--grid-cell__border-color);\n overflow: hidden;\n}\n\n@include tabular-grid-cell-layout(\n $tabular-grid-selector: \".tabular-grid\",\n $tabular-grid-cell-apply-ellipsis: true,\n $tabular-grid-affected-columns-nth-list: (\n 2,\n 3,\n 4\n )\n);\n\n.text-neutral-gray-400,\n.tabular-grid-cell.text-neutral-gray-400 {\n // WA: colors for text should be defined in Mercury\n color: var(--mer-color__neutral-gray--400);\n}\n// Header\n\n.search-server {\n inline-size: 50%;\n}\n\n// Recently Used\n\n.tabular-grid-recently-used .tabular-grid-column::part(bar) {\n --grid-cell__padding-block: 0;\n --grid-cell__padding-inline: 0;\n}\n\n.tabular-grid.tabular-grid-recently-used {\n border-block-end: 1px solid var(--grid-cell__border-color);\n max-block-size: 100px;\n}\n\n// All Servers\n\n.tabular-grid-all-servers {\n overflow: auto;\n}\n\n.field-block-all-servers {\n overflow: auto;\n}\n\n.tabular-grid-all-servers {\n border-block: 1px solid var(--grid-cell__border-color);\n\n .tabular-grid-column:first-child::part(bar-name-icon) {\n background-image: var(\n --icon__system_order-alphabetically_on-elevation--enabled\n );\n block-size: var(--mer-icon__box--md);\n inline-size: var(--mer-icon__box--md);\n background-size: var(--mer-icon__size--md);\n }\n .tabular-grid-rowset-empty {\n border-block-end: none;\n overflow: hidden;\n }\n}\n\n.tabular-grid-all-servers .tabular-grid-column:first-child::part(bar) {\n --grid-common__gap: 0;\n}\n","// Stencil\nimport { Component, Element, h, Host, Prop, State } from \"@stencil/core\";\n\n// Other Libraries\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\n// Custom Imports\nimport {\n ChEditCustomEvent,\n TabularGridRowClickedEvent\n} from \"@genexus/chameleon-controls-library\";\nimport { RadioGroupItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/radio-group/types\";\nimport { JSX } from \"@stencil/core/internal\";\nimport { config } from \"../../../common/config\";\nimport {\n ControlValidation\n // validateControls\n} from \"../../../common/form-validation\";\nimport { Locale } from \"../../../common/locale\";\nimport { FormSubmitResult } from \"../../../common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"components/tooltip\",\n \"chameleon/scrollbar\",\n \"components/tabular-grid\"\n];\n\nconst INFO_ICON = getIconPath({\n category: \"system\",\n name: \"information\",\n colorType: \"on-surface\"\n});\n\nconst LOCK_ICON = getIconPath({\n category: \"system\",\n name: \"lock\",\n colorType: \"on-surface\"\n});\n\nconst LANGUAGE_ICON = getIconPath({\n category: \"system\",\n name: \"language\",\n colorType: \"on-surface\"\n});\n\n@Component({\n tag: \"gx-ide-server-selector\",\n styleUrl: \"server-selector.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/server-selector\"]\n})\nexport class GxIdeServerSelector {\n #chSearchIcon = getIconPath({\n category: \"system\",\n name: \"search\",\n colorType: \"on-surface\"\n });\n\n #versionsSelect: RadioGroupItemModel[] = [\n { value: \"select\", caption: \"Select a server from the list below\" },\n { value: \"new\", caption: \"Enter a server URL manually\" }\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n\n #chGridRecentlyUsedServersEl: HTMLChTabularGridElement;\n #chGridConnectedServersEl: HTMLChTabularGridElement;\n #previousSelectedRowId: string | undefined;\n #selectedRowId: string | undefined;\n #serverUrlEL: HTMLChEditElement;\n\n @Element() el: HTMLGxIdeServerSelectorElement;\n\n /**\n * State to enable/disable confirm button.\n */\n @State() enableConfirmButton: boolean = false;\n\n /**\n * State to track if this is the first selection made by the user.\n */\n @State() isFirstSelection: boolean = true;\n\n /**\n * State to track if the server URL is valid.\n */\n @State() isValidUrl: boolean = true;\n\n /**\n * The current server URL input value.\n */\n @State() serverUrlInputValue: string = \"\";\n\n /**\n * The current server URL input value.\n */\n @State() serverNameInputValue: string = \"\";\n\n /**\n * The selected server URI.\n */\n @State() selectedServerUri: string | undefined;\n\n /**\n * The selected server name.\n */\n @State() selectedServerName: string | undefined = \"None\";\n\n /**\n * The user name of the selected server.\n */\n @State() userName: string;\n\n /**\n * State to store the filter input value to filter the list-box\n */\n @State() filterValue: string = \"\";\n\n /**\n * Servers filtered\n */\n @State() filteredConnectedServersData: ConnectedGXServerData[] = [];\n\n @State() validatableControls = new Map<string, ControlValidation>();\n\n /**\n * The selected connection type\n */\n @State() selectedConnectionType: ConnectionOption = \"select\";\n\n /**\n * The list of connected GX servers.\n */\n @Prop({ mutable: true }) connectedServersData: ConnectedGXServerData[] = [];\n\n /**\n * The list of recently used servers.\n */\n @Prop() readonly recentlyUsedServersData: ConnectedGXServerData[] = [];\n\n /**\n * Callback that is invoked when the dialog is closed\n */\n @Prop() readonly cancelCallback!: () => Promise<void>;\n\n /**\n * Callback that must be invoked when the 'Confirm' button is pressed and the Select Server option is checked.\n */\n @Prop() readonly selectServerCallback!: (\n authenticationSessionOrigin: AuthenticationSessionOrigin\n ) => Promise<void>;\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n this.selectedServerUri = this.connectedServersData[0]?.serverUrl;\n this.userName = this.connectedServersData[0]?.gxServerUsername;\n\n this.filteredConnectedServersData = this.connectedServersData;\n }\n\n #cancelHandler = (): void => {\n this.cancelCallback();\n };\n\n #confirmHandler = async (): Promise<void | ServerType> => {\n if (this.selectedConnectionType === \"select\") {\n await this.selectServerCallback({\n uri: this.selectedServerUri,\n name: this.selectedServerName\n });\n } else if (this.selectedConnectionType === \"new\") {\n this.isValidUrl = this.#validateUrl(this.serverUrlInputValue);\n if (this.isValidUrl) {\n await this.selectServerCallback({\n uri: this.serverUrlInputValue,\n name: this.serverNameInputValue\n });\n }\n }\n };\n\n #filterValueChangedHandler = (\n event: ChEditCustomEvent<string> | InputEvent\n ) => {\n this.filterValue = (event.detail as string).toLowerCase();\n this.filteredConnectedServersData = this.connectedServersData.filter(item =>\n item.serverName.toLowerCase().includes(this.filterValue)\n );\n };\n\n #inputHandler = (\n event: ChEditCustomEvent<string> | InputEvent,\n field: \"serverUrlInputValue\" | \"serverNameInputValue\"\n ) => {\n this.enableConfirmButton = false;\n this[field] = event.detail as string;\n this.#enableConfirmButton();\n };\n\n #validateUrl = (url: string): boolean => {\n try {\n const serverUrl = new URL(url);\n const protocolValid =\n (serverUrl.protocol === \"http:\" || serverUrl.protocol === \"https:\") &&\n url.startsWith(`${serverUrl.protocol}//`);\n return protocolValid;\n } catch (ex) {\n return false;\n }\n };\n\n #enableConfirmButton = () => {\n if (\n this.serverUrlInputValue &&\n this.serverUrlInputValue.length > 0 &&\n this.serverNameInputValue &&\n this.serverNameInputValue.length > 0\n ) {\n this.enableConfirmButton = true;\n } else {\n this.enableConfirmButton = false;\n }\n };\n\n #selectConnectedServersHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) =>\n this.#handleServerSelection(\n event,\n this.connectedServersData,\n this.#chGridRecentlyUsedServersEl\n );\n\n #selectRecentlyUsedServersHandler = (\n event: CustomEvent<TabularGridRowClickedEvent>\n ) =>\n this.#handleServerSelection(\n event,\n this.recentlyUsedServersData,\n this.#chGridConnectedServersEl\n );\n\n #handleServerSelection = async (\n event: CustomEvent<TabularGridRowClickedEvent>,\n serversData: ConnectedGXServerData[],\n otherGridEl: HTMLChTabularGridElement\n ): Promise<void> => {\n if (!this.isFirstSelection) {\n this.#previousSelectedRowId = this.#selectedRowId;\n }\n this.#selectedRowId = event.detail.rowId;\n if (this.#selectedRowId === undefined) {\n this.enableConfirmButton = false;\n this.selectedServerUri = undefined;\n this.selectedServerName = undefined;\n return;\n } else {\n const selectedServer = serversData.find(\n server => server.id === this.#selectedRowId\n );\n this.enableConfirmButton = true;\n this.selectedServerName = selectedServer?.serverName;\n this.selectedServerUri = selectedServer?.serverUrl;\n this.userName = selectedServer?.gxServerUsername || \"\";\n this.isFirstSelection = false;\n await otherGridEl?.selectRow(this.#previousSelectedRowId, false);\n }\n };\n\n #connectionTypeChangedHandler = (event: CustomEvent<string>) => {\n this.selectedConnectionType = event.detail as ConnectionOption;\n if (this.selectedConnectionType === \"new\") {\n this.enableConfirmButton = false;\n this.serverUrlInputValue = \"\";\n }\n this.selectedServerName = \"None\";\n };\n\n #renderTabularGridColumnSet = (\n hideColumnName: boolean = false\n ): HTMLChTabularGridColumnsetElement => {\n return (\n <ch-tabular-grid-columnset class=\"tabular-grid-column-set\">\n <ch-tabular-grid-column\n columnId=\"icon\"\n class=\"tabular-grid-column\"\n columnName=\"Icon\"\n settingable={false}\n columnNameHidden={true}\n size={config.tabularGrid.colSize.maxContent}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"serverName\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Server Name\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.serverName}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"serverUrl\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Server Url\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.auto}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"userName\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Username\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.userName}\n resizable={false}\n ></ch-tabular-grid-column>\n <ch-tabular-grid-column\n columnId=\"status\"\n class=\"tabular-grid-column\"\n sortable\n columnName=\"Status\"\n settingable={false}\n columnNameHidden={hideColumnName}\n onColumnSortChanged={this.#handleColumnSortChanged}\n size={config.tabularGrid.colSize.maxContent}\n resizable={false}\n ></ch-tabular-grid-column>\n </ch-tabular-grid-columnset>\n );\n };\n\n #renderTooltip = (text: string): JSX.Element | null => {\n return text !== \"\" ? (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={null}\n blockAlign=\"outside-end\"\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {text}\n </ch-tooltip>\n ) : null;\n };\n\n #renderTabularGridCommonCells = (server: ConnectedGXServerData) => {\n return [\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {this.#renderIcon(server.accessLevel)}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-server-name\">\n {server.serverName}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell tabular-grid-cell-server-url\">\n {server.serverUrl}\n {this.#renderTooltip(server.serverUrl)}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell\">\n {server.gxServerUsername}\n </ch-tabular-grid-cell>,\n <ch-tabular-grid-cell class=\"tabular-grid-cell text-neutral-gray-400 body-italic-s\">\n {server.isConnected && \"Connected\"}\n </ch-tabular-grid-cell>\n ];\n };\n\n #renderRecentlyUsedServersGrid = (hideColumnName: boolean): Element => {\n return (\n <ch-tabular-grid\n class={\"tabular-grid-recently-used tabular-grid\"}\n rowSelectionMode=\"single\"\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridRecentlyUsedServersEl = el)\n }\n allowColumnReorder={false}\n onRowClicked={this.#selectRecentlyUsedServersHandler}\n id=\"recently-used-servers\"\n >\n {this.#renderTabularGridColumnSet(hideColumnName)}\n {this.recentlyUsedServersData.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.recentlyUsedServersData.map(\n (server: ConnectedGXServerData) => (\n <ch-tabular-grid-row rowid={server.id} class=\"tabular-grid-row\">\n {this.#renderTabularGridCommonCells(server)}\n </ch-tabular-grid-row>\n )\n )}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty>\n <gx-ide-empty-state\n stateIconSrc={INFO_ICON}\n stateTitle={this.#_componentLocale.emptyConnectedServers}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #renderConnectedServersGrid = (): Element => {\n return (\n <ch-tabular-grid\n class={\"tabular-grid tabular-grid-all-servers\"}\n rowSelectionMode=\"single\"\n ref={(el: HTMLChTabularGridElement) =>\n (this.#chGridConnectedServersEl = el)\n }\n allowColumnReorder={false}\n onRowClicked={this.#selectConnectedServersHandler}\n id=\"all-servers\"\n >\n {this.#renderTabularGridColumnSet()}\n {this.filteredConnectedServersData.length > 0 ? (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n {this.filteredConnectedServersData.map(\n (server: ConnectedGXServerData) => (\n <ch-tabular-grid-row rowid={server.id} class=\"tabular-grid-row\">\n {this.#renderTabularGridCommonCells(server)}\n </ch-tabular-grid-row>\n )\n )}\n </ch-tabular-grid-rowset>\n ) : (\n <ch-tabular-grid-rowset class=\"tabular-grid-rowset\">\n <ch-tabular-grid-rowset-empty class=\"tabular-grid-rowset-empty\">\n <gx-ide-empty-state\n stateIconSrc={INFO_ICON}\n stateTitle={this.#_componentLocale.emptyConnectedServers}\n isAnimated={true}\n ></gx-ide-empty-state>\n </ch-tabular-grid-rowset-empty>\n </ch-tabular-grid-rowset>\n )}\n </ch-tabular-grid>\n );\n };\n\n #handleColumnSortChanged = (e: CustomEvent) => {\n const { columnId, sortDirection } = e.detail;\n\n const aux = this.connectedServersData;\n aux.sort((a: any, b: any) => {\n if (a[columnId] < b[columnId]) {\n return sortDirection === \"asc\" ? -1 : 1;\n }\n if (a[columnId] > b[columnId]) {\n return sortDirection === \"asc\" ? 1 : -1;\n }\n return 0;\n });\n\n this.connectedServersData = [...aux];\n };\n\n #renderIcon = (accessLevel: string): JSX.Element => {\n const icon = accessLevel === \"private\" ? LOCK_ICON : LANGUAGE_ICON;\n return <ch-image class=\"icon-md\" src={icon}></ch-image>;\n };\n\n #renderFooter = () => {\n const isSelectionMode = this.selectedConnectionType === \"select\";\n return (\n <footer\n class={{\n \"control-footer-with-border\": true,\n \"control-footer-space-between\":\n this.selectedConnectionType === \"select\",\n \"space-between\": isSelectionMode,\n \"spacing-body-inline\": true,\n \"spacing-body-block\": true\n }}\n >\n {isSelectionMode && (\n <p class=\"body-italic-m\">Selected: {this.selectedServerName}</p>\n )}\n <div class=\"buttons-spacer\">\n <button\n // cancel button\n class=\"button-secondary\"\n onClick={this.#cancelHandler}\n >\n {this.#_componentLocale.footer.cancel}\n </button>\n\n <button\n // confirm button\n class=\"button-primary\"\n onClick={this.enableConfirmButton && this.#confirmHandler}\n disabled={!this.enableConfirmButton}\n >\n {this.#_componentLocale.footer.confirm}\n </button>\n </div>\n </footer>\n );\n };\n\n render(): void {\n const connectionTypeClass =\n this.selectedConnectionType === \"new\" && \"new-connection\";\n const recentlyUsedEmptyClass =\n this.recentlyUsedServersData.length === 0 && \"recently-used-empty\";\n return (\n <Host\n class={`widget elevation-1 ${connectionTypeClass} ${recentlyUsedEmptyClass}`}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <main class=\"section\">\n <header class=\"header spacing-body-block-start spacing-body-inline\">\n <div class=\"field-group\">\n <label class=\"body-regular-m text-neutral-gray-400\">\n {this.#_componentLocale.header.title}\n </label>\n <ch-radio-group-render\n class=\"radio-group\"\n model={this.#versionsSelect}\n onChange={this.#connectionTypeChangedHandler}\n value={this.#versionsSelect[0].value}\n ></ch-radio-group-render>\n\n {this.selectedConnectionType === \"select\" && (\n <ch-edit\n class=\"input search-server\"\n id=\"server-name-search\"\n startImgSrc={this.#chSearchIcon}\n onInput={this.#filterValueChangedHandler}\n placeholder={\n this.#_componentLocale.placeholders.searchServers\n }\n accessibleName=\"search server\"\n type=\"search\"\n ></ch-edit>\n )}\n </div>\n </header>\n {this.selectedConnectionType === \"select\" && [\n this.recentlyUsedServersData.length > 0 && (\n <div class=\"field field-block spacing-body-inline\">\n <label class=\"label\" htmlFor=\"recently-used-servers\">\n {this.#_componentLocale.recentlyUsed.title}\n </label>\n {this.#renderRecentlyUsedServersGrid(true)}\n </div>\n ),\n <div class=\"field field-block field-block-all-servers spacing-body-inline\">\n <label class=\"label\" htmlFor=\"all-servers\">\n {this.#_componentLocale.allServers.title}\n </label>\n {this.#renderConnectedServersGrid()}\n </div>\n ]}\n\n {this.selectedConnectionType === \"new\" && (\n <section class=\"spacing-body-inline\">\n <div class=\"layout layout--cols-2\">\n <div class=\"field field-block layout__panel\">\n <label class=\"label\" htmlFor=\"server-url\">\n {this.#_componentLocale.labels.serverUrl}\n </label>\n <ch-edit\n // server url\n class={{ \"input\": true, \"input-error\": !this.isValidUrl }}\n id=\"server-url\"\n value={this.serverUrlInputValue}\n onInput={event =>\n this.#inputHandler(event, \"serverUrlInputValue\")\n }\n placeholder={this.#_componentLocale.placeholders.serverUrl}\n ref={el => (this.#serverUrlEL = el as HTMLChEditElement)}\n ></ch-edit>\n </div>\n <div class=\"field field-block layout__panel\">\n <label class=\"label\" htmlFor=\"server-name\">\n {this.#_componentLocale.labels.serverName}\n </label>\n <ch-edit\n // server friendly name\n class=\"input\"\n id=\"server-name\"\n value={this.serverNameInputValue}\n onInput={event =>\n this.#inputHandler(event, \"serverNameInputValue\")\n }\n placeholder={this.#_componentLocale.placeholders.serverName}\n maxLength={18}\n ></ch-edit>\n </div>\n {!this.isValidUrl && (\n <ch-tooltip\n class=\"tooltip\"\n actionElement={\n this.#serverUrlEL as unknown as HTMLButtonElement\n }\n blockAlign=\"outside-end\"\n inlineAlign={config.tooltipSettings.inlineAlign}\n delay={config.tooltipSettings.delay}\n >\n {this.#_componentLocale.errors.serverUrlInvalid}\n </ch-tooltip>\n )}\n </div>\n </section>\n )}\n\n {this.#renderFooter()}\n </main>\n </Host>\n );\n }\n}\n\nexport type ConnectionResultData = {\n formResult: FormSubmitResult;\n};\n\nexport type ConnectionOption = \"select\" | \"new\";\n\nexport type ServerType = \"legacy\" | \"next\";\n\nexport type ServerAccessLevel = \"public\" | \"private\";\n\nexport type AuthenticationSessionOrigin = {\n uri: string;\n name: string;\n};\n\nexport type ConnectedGXServerData = {\n id: string;\n serverUrl: string;\n accessLevel: ServerAccessLevel;\n masterSessionUsername: string;\n serverName?: string;\n gxServerUsername: string;\n isConnected: boolean;\n};\n\nexport type NewServerConnectionData = {\n serverUrl: string;\n serverName: string;\n};\n"],"mappings":"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"}