@genexus/genexus-ide-ui 3.2.8 → 3.2.10

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 (67) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-db-instance-selector.cjs.entry.js +147 -0
  3. package/dist/cjs/gx-ide-db-instance-selector.cjs.entry.js.map +1 -0
  4. package/dist/cjs/gx-ide-mcp-server.cjs.entry.js +6 -20
  5. package/dist/cjs/gx-ide-mcp-server.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +261 -138
  7. package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/collection/collection-manifest.json +1 -0
  10. package/dist/collection/components/db-instance-selector/db-instance-selector.css +20 -0
  11. package/dist/collection/components/db-instance-selector/db-instance-selector.js +262 -0
  12. package/dist/collection/components/db-instance-selector/db-instance-selector.js.map +1 -0
  13. package/dist/collection/components/db-instance-selector/gx-ide-assets/db-instance-selector/langs/db-instance-selector.lang.en.json +14 -0
  14. package/dist/collection/components/db-instance-selector/gx-ide-assets/db-instance-selector/langs/db-instance-selector.lang.ja.json +14 -0
  15. package/dist/collection/components/db-instance-selector/gx-ide-assets/db-instance-selector/langs/db-instance-selector.lang.zh.json +14 -0
  16. package/dist/collection/components/db-instance-selector/gx-ide-assets/db-instance-selector/shortcuts.json +15 -0
  17. package/dist/collection/components/mcp-server/mcp-server.js +6 -20
  18. package/dist/collection/components/mcp-server/mcp-server.js.map +1 -1
  19. package/dist/collection/components/mcp-server/types.js.map +1 -1
  20. package/dist/collection/components/new-kb/gx-ide-assets/new-kb/langs/new-kb.lang.en.json +17 -4
  21. package/dist/collection/components/new-kb/gx-ide-assets/new-kb/langs/new-kb.lang.ja.json +17 -4
  22. package/dist/collection/components/new-kb/gx-ide-assets/new-kb/langs/new-kb.lang.zh.json +17 -4
  23. package/dist/collection/components/new-kb/new-kb.css +122 -17
  24. package/dist/collection/components/new-kb/new-kb.js +320 -193
  25. package/dist/collection/components/new-kb/new-kb.js.map +1 -1
  26. package/dist/collection/components/new-kb/tests/new-kb.e2e.js +48 -60
  27. package/dist/collection/components/new-kb/tests/new-kb.e2e.js.map +1 -1
  28. package/dist/collection/testing/locale.e2e.js +1 -0
  29. package/dist/collection/testing/locale.e2e.js.map +1 -1
  30. package/dist/components/gx-ide-db-instance-selector.d.ts +11 -0
  31. package/dist/components/gx-ide-db-instance-selector.js +168 -0
  32. package/dist/components/gx-ide-db-instance-selector.js.map +1 -0
  33. package/dist/components/gx-ide-mcp-server.js +6 -20
  34. package/dist/components/gx-ide-mcp-server.js.map +1 -1
  35. package/dist/components/gx-ide-new-kb.js +281 -152
  36. package/dist/components/gx-ide-new-kb.js.map +1 -1
  37. package/dist/esm/genexus-ide-ui.js +1 -1
  38. package/dist/esm/gx-ide-db-instance-selector.entry.js +143 -0
  39. package/dist/esm/gx-ide-db-instance-selector.entry.js.map +1 -0
  40. package/dist/esm/gx-ide-mcp-server.entry.js +6 -20
  41. package/dist/esm/gx-ide-mcp-server.entry.js.map +1 -1
  42. package/dist/esm/gx-ide-new-kb.entry.js +261 -138
  43. package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
  44. package/dist/esm/loader.js +1 -1
  45. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  46. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  47. package/dist/genexus-ide-ui/gx-ide-assets/db-instance-selector/langs/db-instance-selector.lang.en.json +14 -0
  48. package/dist/genexus-ide-ui/gx-ide-assets/db-instance-selector/langs/db-instance-selector.lang.ja.json +14 -0
  49. package/dist/genexus-ide-ui/gx-ide-assets/db-instance-selector/langs/db-instance-selector.lang.zh.json +14 -0
  50. package/dist/genexus-ide-ui/gx-ide-assets/db-instance-selector/shortcuts.json +15 -0
  51. package/dist/genexus-ide-ui/gx-ide-assets/new-kb/langs/new-kb.lang.en.json +17 -4
  52. package/dist/genexus-ide-ui/gx-ide-assets/new-kb/langs/new-kb.lang.ja.json +17 -4
  53. package/dist/genexus-ide-ui/gx-ide-assets/new-kb/langs/new-kb.lang.zh.json +17 -4
  54. package/dist/genexus-ide-ui/{p-45b6dc45.entry.js → p-a456237f.entry.js} +7 -19
  55. package/dist/genexus-ide-ui/p-a456237f.entry.js.map +1 -0
  56. package/dist/genexus-ide-ui/p-c1db7f38.entry.js +182 -0
  57. package/dist/genexus-ide-ui/p-c1db7f38.entry.js.map +1 -0
  58. package/dist/genexus-ide-ui/p-eeae9dd5.entry.js +1020 -0
  59. package/dist/genexus-ide-ui/p-eeae9dd5.entry.js.map +1 -0
  60. package/dist/types/components/db-instance-selector/db-instance-selector.d.ts +39 -0
  61. package/dist/types/components/mcp-server/types.d.ts +0 -2
  62. package/dist/types/components/new-kb/new-kb.d.ts +51 -23
  63. package/dist/types/components.d.ts +135 -84
  64. package/package.json +1 -1
  65. package/dist/genexus-ide-ui/p-45b6dc45.entry.js.map +0 -1
  66. package/dist/genexus-ide-ui/p-76e1c357.entry.js +0 -802
  67. package/dist/genexus-ide-ui/p-76e1c357.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"locale.e2e.js","sourceRoot":"","sources":["../../src/testing/locale.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EPage, newE2EPage } from \"@stencil/core/testing\";\nimport { GeneXusIdeUIControlsTagName } from \"../common/types\";\nimport { haveSameStructure } from \"./same-structure.e2e\";\n\nconst COMPONENT_PREFIX = \"gx-ide-\";\nconst languages: { name: string; attr: string }[] = [\n { name: \"chinese\", attr: \"zh\" },\n { name: \"english\", attr: \"en\" },\n { name: \"japanese\", attr: \"ja\" }\n];\n\nconst testLocale = (componentNameWithPrefix: GeneXusIdeUIControlsTagName) => {\n describe(`[locale][${componentNameWithPrefix}]`, () => {\n let page: E2EPage;\n const componentName = componentNameWithPrefix.replace(COMPONENT_PREFIX, \"\");\n\n // This implementation is a WA since we can't evaluate JS classes in the page.\n // TODO: Implement the locale utility as a function, which can be evaluated\n // in the page\n const getTranslations = () =>\n page.evaluate(component => {\n const ASSETS_FOLDER = \"gx-ide-assets/\";\n const DEFAULT_LANGUAGE = \"en\";\n const LANGS_FOLDER = \"langs/\";\n const LANG_PREFIX = \".lang.\";\n const LANG_EXTENSION = \".json\";\n const lang =\n document\n .getElementsByTagName(\"html\")[0]\n .getAttribute(\"lang\")\n ?.valueOf() ?? DEFAULT_LANGUAGE;\n const folder = `${component}/`;\n\n const path =\n `/build/${ASSETS_FOLDER}${folder}${LANGS_FOLDER}${component}${LANG_PREFIX}${lang}${LANG_EXTENSION}` as const;\n\n return new Promise(resolve => {\n fetch(path)\n .then(async langFile => {\n if (langFile.ok) {\n const fileObject = await langFile.json();\n resolve(fileObject);\n } else {\n resolve(undefined);\n }\n })\n .catch(() => resolve(undefined));\n });\n }, componentName);\n\n beforeEach(async () => {\n page = await newE2EPage({\n failOnConsoleError: true,\n html: \"\" // Necessary\n });\n });\n\n it(\"should work without specifying the language (lang attr) in the browser\", async () => {\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n });\n\n it(\"should default to english language when there is no language (lang attr) in the browser\", async () => {\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n\n await page.evaluate(() =>\n document.documentElement.setAttribute(\"lang\", \"en\")\n );\n\n const languageEnglishFile: any | undefined = await getTranslations();\n expect(languageEnglishFile).toBeTruthy();\n expect(languageFile).toEqual(languageEnglishFile);\n });\n\n languages.forEach(language => {\n it(`should work with ${language.name} language`, async () => {\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language.attr\n );\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n });\n });\n\n for (let index = 0; index < languages.length - 1; index++) {\n const language1 = languages[index];\n const language2 = languages[index + 1];\n\n // TODO: Complete all translations. At this moment, Japanese and Chinese\n // translations have missing literals\n it(`should translate the same literals (${language1.name} and ${language2.name})`, async () => {\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language1.attr\n );\n const language1File: any | undefined = await getTranslations();\n\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language2.attr\n );\n const language2File: any | undefined = await getTranslations();\n\n expect(language1File).toBeTruthy();\n expect(language2File).toBeTruthy();\n expect(haveSameStructure(language1File, language2File)).toBe(true);\n });\n }\n });\n};\n\n// TypeScript does not have a built-in type to exhaust a list with union types\nconst allGeneXusIdeUIComponents: { [key in GeneXusIdeUIControlsTagName]: 0 } = {\n \"gx-ide-about\": 0,\n \"gx-ide-bpm-app-declaration\": 0,\n \"gx-ide-bpm-assign-roles\": 0,\n \"gx-ide-bpm-import-files\": 0,\n \"gx-ide-bpm-import-gxpm\": 0,\n \"gx-ide-bpm-objects-selector\": 0,\n \"gx-ide-bpm-sync-gam-roles\": 0,\n \"gx-ide-bpm-task-documents\": 0,\n \"gx-ide-bpm-timer-duration\": 0,\n \"gx-ide-chat-container\": 0,\n \"gx-ide-chat-welcome\": 0,\n \"gx-ide-sc-chat-container\": 0,\n \"gx-ide-connect-gx-server\": 0,\n \"gx-ide-container\": 0,\n \"gx-ide-create-kb-from-server\": 0,\n \"gx-ide-current-user-info\": 0,\n \"gx-ide-data-selector\": 0,\n \"gx-ide-data-type-selector\": 0,\n \"gx-ide-deployment-tool\": 0,\n \"gx-ide-details-acknowledgements\": 0,\n \"gx-ide-design-import\": 0,\n \"gx-ide-edit-module-server\": 0,\n \"gx-ide-empty-state\": 0,\n \"gx-ide-entity-selector\": 0,\n \"gx-ide-file-item\": 0,\n \"gx-ide-file-uploader\": 0,\n \"gx-ide-gam-installation-settings\": 0,\n \"gx-ide-json-import\": 0,\n \"gx-ide-kb-manager-export\": 0,\n \"gx-ide-kb-manager-import\": 0,\n \"gx-ide-list-selector\": 0,\n \"gx-ide-list-selector-item\": 0,\n \"gx-ide-loader\": 0,\n \"gx-ide-manage-module-references\": 0,\n \"gx-ide-mcp-server\": 0,\n \"gx-ide-multi-select\": 0,\n \"gx-ide-name-picker\": 0,\n \"gx-ide-new-environment\": 0,\n \"gx-ide-new-kb\": 0,\n \"gx-ide-new-object\": 0,\n \"gx-ide-new-version\": 0,\n \"gx-ide-object-selector\": 0,\n \"gx-ide-open-api-import\": 0,\n \"gx-ide-progress-bar\": 0,\n \"gx-ide-plugin-explorer\": 0,\n \"gx-ide-plugin-details\": 0,\n \"gx-ide-references\": 0,\n \"gx-ide-server-selector\": 0,\n \"gx-ide-select-kb-items\": 0,\n \"gx-ide-select-user-team\": 0,\n \"gx-ide-sign-in\": 0,\n \"gx-ide-sign-in-team\": 0,\n \"gx-ide-share-kb\": 0,\n \"gx-ide-start-page\": 0,\n \"gx-ide-sign-in-result\": 0,\n \"gx-ide-status-buttons\": 0,\n \"gx-ide-team-dev-bring-changes\": 0,\n \"gx-ide-team-dev-bring-all-changes-selector\": 0,\n \"gx-ide-team-dev-commit\": 0,\n \"gx-ide-team-dev-history\": 0,\n \"gx-ide-team-dev-preview\": 0,\n \"gx-ide-team-dev-select-recent-comment\": 0,\n \"gx-ide-team-dev-update\": 0,\n \"gx-ide-team-dev-update-partial-selection\": 0,\n \"gx-ide-team-dev-update-to-revision\": 0,\n \"gx-ide-starting-template\": 0,\n \"gx-ide-test\": 0,\n \"gx-ide-wf-settings\": 0,\n \"gx-ide-ww-images\": 0,\n \"gx-ide-ww-attributes\": 0,\n \"gx-ide-ww-files\": 0,\n \"gx-ide-navigation-report\": 0,\n \"gx-ide-splash\": 0,\n \"gx-ide-welcome-page\": 0,\n \"gx-ide-bpm-export-xpdl\": 0,\n \"gx-ide-curl-inspector\": 0,\n \"gx-ide-launchpad\": 0,\n \"gx-ide-launchpad-web-apps\": 0,\n \"gx-ide-launchpad-native-apps\": 0,\n \"gx-ide-launchpad-apis\": 0,\n \"gx-ide-launchpad-api\": 0,\n \"gx-ide-comments-viewer\": 0,\n \"gx-ide-restore-version\": 0,\n \"gx-ide-search\": 0,\n \"gx-ide-breadcrumb\": 0,\n \"gx-ide-breadcrumb-item\": 0\n};\n\nconst componentsWithoutTranslations = new Set<GeneXusIdeUIControlsTagName>([\n \"gx-ide-chat-container\",\n \"gx-ide-container\",\n \"gx-ide-sc-chat-container\",\n \"gx-ide-empty-state\",\n \"gx-ide-list-selector\",\n \"gx-ide-list-selector-item\",\n \"gx-ide-loader\",\n \"gx-ide-test\",\n \"gx-ide-file-item\",\n \"gx-ide-breadcrumb\",\n \"gx-ide-breadcrumb-item\",\n \"gx-ide-multi-select\"\n]);\n\nconst componentsWithTranslations = Object.keys(\n allGeneXusIdeUIComponents\n).filter(\n component =>\n !componentsWithoutTranslations.has(component as GeneXusIdeUIControlsTagName)\n);\n\ncomponentsWithTranslations.forEach(testLocale);\n"]}
1
+ {"version":3,"file":"locale.e2e.js","sourceRoot":"","sources":["../../src/testing/locale.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EPage, newE2EPage } from \"@stencil/core/testing\";\nimport { GeneXusIdeUIControlsTagName } from \"../common/types\";\nimport { haveSameStructure } from \"./same-structure.e2e\";\n\nconst COMPONENT_PREFIX = \"gx-ide-\";\nconst languages: { name: string; attr: string }[] = [\n { name: \"chinese\", attr: \"zh\" },\n { name: \"english\", attr: \"en\" },\n { name: \"japanese\", attr: \"ja\" }\n];\n\nconst testLocale = (componentNameWithPrefix: GeneXusIdeUIControlsTagName) => {\n describe(`[locale][${componentNameWithPrefix}]`, () => {\n let page: E2EPage;\n const componentName = componentNameWithPrefix.replace(COMPONENT_PREFIX, \"\");\n\n // This implementation is a WA since we can't evaluate JS classes in the page.\n // TODO: Implement the locale utility as a function, which can be evaluated\n // in the page\n const getTranslations = () =>\n page.evaluate(component => {\n const ASSETS_FOLDER = \"gx-ide-assets/\";\n const DEFAULT_LANGUAGE = \"en\";\n const LANGS_FOLDER = \"langs/\";\n const LANG_PREFIX = \".lang.\";\n const LANG_EXTENSION = \".json\";\n const lang =\n document\n .getElementsByTagName(\"html\")[0]\n .getAttribute(\"lang\")\n ?.valueOf() ?? DEFAULT_LANGUAGE;\n const folder = `${component}/`;\n\n const path =\n `/build/${ASSETS_FOLDER}${folder}${LANGS_FOLDER}${component}${LANG_PREFIX}${lang}${LANG_EXTENSION}` as const;\n\n return new Promise(resolve => {\n fetch(path)\n .then(async langFile => {\n if (langFile.ok) {\n const fileObject = await langFile.json();\n resolve(fileObject);\n } else {\n resolve(undefined);\n }\n })\n .catch(() => resolve(undefined));\n });\n }, componentName);\n\n beforeEach(async () => {\n page = await newE2EPage({\n failOnConsoleError: true,\n html: \"\" // Necessary\n });\n });\n\n it(\"should work without specifying the language (lang attr) in the browser\", async () => {\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n });\n\n it(\"should default to english language when there is no language (lang attr) in the browser\", async () => {\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n\n await page.evaluate(() =>\n document.documentElement.setAttribute(\"lang\", \"en\")\n );\n\n const languageEnglishFile: any | undefined = await getTranslations();\n expect(languageEnglishFile).toBeTruthy();\n expect(languageFile).toEqual(languageEnglishFile);\n });\n\n languages.forEach(language => {\n it(`should work with ${language.name} language`, async () => {\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language.attr\n );\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n });\n });\n\n for (let index = 0; index < languages.length - 1; index++) {\n const language1 = languages[index];\n const language2 = languages[index + 1];\n\n // TODO: Complete all translations. At this moment, Japanese and Chinese\n // translations have missing literals\n it(`should translate the same literals (${language1.name} and ${language2.name})`, async () => {\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language1.attr\n );\n const language1File: any | undefined = await getTranslations();\n\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language2.attr\n );\n const language2File: any | undefined = await getTranslations();\n\n expect(language1File).toBeTruthy();\n expect(language2File).toBeTruthy();\n expect(haveSameStructure(language1File, language2File)).toBe(true);\n });\n }\n });\n};\n\n// TypeScript does not have a built-in type to exhaust a list with union types\nconst allGeneXusIdeUIComponents: { [key in GeneXusIdeUIControlsTagName]: 0 } = {\n \"gx-ide-about\": 0,\n \"gx-ide-bpm-app-declaration\": 0,\n \"gx-ide-bpm-assign-roles\": 0,\n \"gx-ide-bpm-import-files\": 0,\n \"gx-ide-bpm-import-gxpm\": 0,\n \"gx-ide-bpm-objects-selector\": 0,\n \"gx-ide-bpm-sync-gam-roles\": 0,\n \"gx-ide-bpm-task-documents\": 0,\n \"gx-ide-bpm-timer-duration\": 0,\n \"gx-ide-chat-container\": 0,\n \"gx-ide-chat-welcome\": 0,\n \"gx-ide-sc-chat-container\": 0,\n \"gx-ide-connect-gx-server\": 0,\n \"gx-ide-container\": 0,\n \"gx-ide-create-kb-from-server\": 0,\n \"gx-ide-current-user-info\": 0,\n \"gx-ide-data-selector\": 0,\n \"gx-ide-data-type-selector\": 0,\n \"gx-ide-db-instance-selector\": 0,\n \"gx-ide-deployment-tool\": 0,\n \"gx-ide-details-acknowledgements\": 0,\n \"gx-ide-design-import\": 0,\n \"gx-ide-edit-module-server\": 0,\n \"gx-ide-empty-state\": 0,\n \"gx-ide-entity-selector\": 0,\n \"gx-ide-file-item\": 0,\n \"gx-ide-file-uploader\": 0,\n \"gx-ide-gam-installation-settings\": 0,\n \"gx-ide-json-import\": 0,\n \"gx-ide-kb-manager-export\": 0,\n \"gx-ide-kb-manager-import\": 0,\n \"gx-ide-list-selector\": 0,\n \"gx-ide-list-selector-item\": 0,\n \"gx-ide-loader\": 0,\n \"gx-ide-manage-module-references\": 0,\n \"gx-ide-mcp-server\": 0,\n \"gx-ide-multi-select\": 0,\n \"gx-ide-name-picker\": 0,\n \"gx-ide-new-environment\": 0,\n \"gx-ide-new-kb\": 0,\n \"gx-ide-new-object\": 0,\n \"gx-ide-new-version\": 0,\n \"gx-ide-object-selector\": 0,\n \"gx-ide-open-api-import\": 0,\n \"gx-ide-progress-bar\": 0,\n \"gx-ide-plugin-explorer\": 0,\n \"gx-ide-plugin-details\": 0,\n \"gx-ide-references\": 0,\n \"gx-ide-server-selector\": 0,\n \"gx-ide-select-kb-items\": 0,\n \"gx-ide-select-user-team\": 0,\n \"gx-ide-sign-in\": 0,\n \"gx-ide-sign-in-team\": 0,\n \"gx-ide-share-kb\": 0,\n \"gx-ide-start-page\": 0,\n \"gx-ide-sign-in-result\": 0,\n \"gx-ide-status-buttons\": 0,\n \"gx-ide-team-dev-bring-changes\": 0,\n \"gx-ide-team-dev-bring-all-changes-selector\": 0,\n \"gx-ide-team-dev-commit\": 0,\n \"gx-ide-team-dev-history\": 0,\n \"gx-ide-team-dev-preview\": 0,\n \"gx-ide-team-dev-select-recent-comment\": 0,\n \"gx-ide-team-dev-update\": 0,\n \"gx-ide-team-dev-update-partial-selection\": 0,\n \"gx-ide-team-dev-update-to-revision\": 0,\n \"gx-ide-starting-template\": 0,\n \"gx-ide-test\": 0,\n \"gx-ide-wf-settings\": 0,\n \"gx-ide-ww-images\": 0,\n \"gx-ide-ww-attributes\": 0,\n \"gx-ide-ww-files\": 0,\n \"gx-ide-navigation-report\": 0,\n \"gx-ide-splash\": 0,\n \"gx-ide-welcome-page\": 0,\n \"gx-ide-bpm-export-xpdl\": 0,\n \"gx-ide-curl-inspector\": 0,\n \"gx-ide-launchpad\": 0,\n \"gx-ide-launchpad-web-apps\": 0,\n \"gx-ide-launchpad-native-apps\": 0,\n \"gx-ide-launchpad-apis\": 0,\n \"gx-ide-launchpad-api\": 0,\n \"gx-ide-comments-viewer\": 0,\n \"gx-ide-restore-version\": 0,\n \"gx-ide-search\": 0,\n \"gx-ide-breadcrumb\": 0,\n \"gx-ide-breadcrumb-item\": 0\n};\n\nconst componentsWithoutTranslations = new Set<GeneXusIdeUIControlsTagName>([\n \"gx-ide-chat-container\",\n \"gx-ide-container\",\n \"gx-ide-sc-chat-container\",\n \"gx-ide-empty-state\",\n \"gx-ide-list-selector\",\n \"gx-ide-list-selector-item\",\n \"gx-ide-loader\",\n \"gx-ide-test\",\n \"gx-ide-file-item\",\n \"gx-ide-breadcrumb\",\n \"gx-ide-breadcrumb-item\",\n \"gx-ide-multi-select\"\n]);\n\nconst componentsWithTranslations = Object.keys(\n allGeneXusIdeUIComponents\n).filter(\n component =>\n !componentsWithoutTranslations.has(component as GeneXusIdeUIControlsTagName)\n);\n\ncomponentsWithTranslations.forEach(testLocale);\n"]}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface GxIdeDbInstanceSelector extends Components.GxIdeDbInstanceSelector, HTMLElement {}
4
+ export const GxIdeDbInstanceSelector: {
5
+ prototype: GxIdeDbInstanceSelector;
6
+ new (): GxIdeDbInstanceSelector;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1,168 @@
1
+ import { proxyCustomElement, HTMLElement, getAssetPath, h, Host } from '@stencil/core/internal/client';
2
+ import { g as getIconPath } from './mer-animated-dots.js';
3
+ import 'lit';
4
+ import 'lit/directives/when.js';
5
+ import 'lit/directives/if-defined.js';
6
+ import { L as Locale } from './locale.js';
7
+
8
+ const dbInstanceSelectorCss = ":host{display:grid;block-size:100%;overflow:auto;grid-template-rows:max-content 1fr max-content}.section{display:contents}.main{overflow:auto}.tree-view{display:block;block-size:100%;overflow:hidden}";
9
+
10
+ var __classPrivateFieldSet = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
11
+ if (kind === "m")
12
+ throw new TypeError("Private method is not writable");
13
+ if (kind === "a" && !f)
14
+ throw new TypeError("Private accessor was defined without a setter");
15
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
16
+ throw new TypeError("Cannot write private member to an object whose class did not declare it");
17
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
18
+ };
19
+ var __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
20
+ if (kind === "a" && !f)
21
+ throw new TypeError("Private accessor was defined without a getter");
22
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
23
+ throw new TypeError("Cannot read private member from an object whose class did not declare it");
24
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
25
+ };
26
+ var _GxIdeDbInstanceSelector_componentLocale, _GxIdeDbInstanceSelector_chShortcutsEl, _GxIdeDbInstanceSelector_shortcutsSrc, _GxIdeDbInstanceSelector_selectedInstanceName, _GxIdeDbInstanceSelector_lazyLoadTreeItems, _GxIdeDbInstanceSelector_selectedItemsChangeHandler, _GxIdeDbInstanceSelector_cancelButtonClickedHandler, _GxIdeDbInstanceSelector_confirmButtonClickedHandler;
27
+ const CSS_BUNDLES = [
28
+ "resets/box-sizing",
29
+ "components/tree-view",
30
+ "utils/form--full",
31
+ "utils/layout",
32
+ "utils/typography",
33
+ "utils/spacing",
34
+ "chameleon/scrollbar"
35
+ ];
36
+ const SERVER_ICON = getIconPath({
37
+ category: "system",
38
+ name: "computer",
39
+ colorType: "primary"
40
+ });
41
+ const DATABASE_ICON = getIconPath({
42
+ category: "system",
43
+ name: "database",
44
+ colorType: "success"
45
+ });
46
+ const LOCAL_SERVERS_NODE_ID = "local-servers";
47
+ const NETWORK_SERVERS_NODE_ID = "network-servers";
48
+ const GxIdeDbInstanceSelector$1 = /*@__PURE__*/ proxyCustomElement(class GxIdeDbInstanceSelector extends HTMLElement {
49
+ constructor() {
50
+ super();
51
+ this.__registerHost();
52
+ this.__attachShadow();
53
+ // eslint-disable-next-line @stencil-community/own-props-must-be-private
54
+ _GxIdeDbInstanceSelector_componentLocale.set(this, void 0);
55
+ _GxIdeDbInstanceSelector_chShortcutsEl.set(this, void 0);
56
+ _GxIdeDbInstanceSelector_shortcutsSrc.set(this, getAssetPath(`./gx-ide-assets/db-instance-selector/shortcuts.json`));
57
+ _GxIdeDbInstanceSelector_selectedInstanceName.set(this, void 0);
58
+ _GxIdeDbInstanceSelector_lazyLoadTreeItems.set(this, async (treeItemId) => {
59
+ var _a, _b, _c, _d;
60
+ let servers = [];
61
+ if (treeItemId === LOCAL_SERVERS_NODE_ID) {
62
+ servers = (_b = (await ((_a = this.getLocalServersCallback) === null || _a === void 0 ? void 0 : _a.call(this)))) !== null && _b !== void 0 ? _b : [];
63
+ }
64
+ else if (treeItemId === NETWORK_SERVERS_NODE_ID) {
65
+ servers = (_d = (await ((_c = this.getNetworkServersCallback) === null || _c === void 0 ? void 0 : _c.call(this)))) !== null && _d !== void 0 ? _d : [];
66
+ }
67
+ return servers.map(server => ({
68
+ id: `${treeItemId}__${server.id}`,
69
+ caption: server.name,
70
+ startImgSrc: DATABASE_ICON,
71
+ leaf: true,
72
+ metadata: server.name
73
+ }));
74
+ });
75
+ _GxIdeDbInstanceSelector_selectedItemsChangeHandler.set(this, (event) => {
76
+ var _a;
77
+ const selected = event.detail.find(node => node.item.leaf);
78
+ if (selected) {
79
+ this.selectedInstanceId = selected.item.id;
80
+ __classPrivateFieldSet(this, _GxIdeDbInstanceSelector_selectedInstanceName, (_a = selected.item.metadata) !== null && _a !== void 0 ? _a : selected.item.caption, "f");
81
+ }
82
+ else {
83
+ this.selectedInstanceId = undefined;
84
+ __classPrivateFieldSet(this, _GxIdeDbInstanceSelector_selectedInstanceName, undefined, "f");
85
+ }
86
+ });
87
+ _GxIdeDbInstanceSelector_cancelButtonClickedHandler.set(this, () => {
88
+ var _a;
89
+ (_a = this.cancelCallback) === null || _a === void 0 ? void 0 : _a.call(this);
90
+ });
91
+ _GxIdeDbInstanceSelector_confirmButtonClickedHandler.set(this, () => {
92
+ var _a;
93
+ if (__classPrivateFieldGet(this, _GxIdeDbInstanceSelector_selectedInstanceName, "f")) {
94
+ (_a = this.confirmCallback) === null || _a === void 0 ? void 0 : _a.call(this, __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_selectedInstanceName, "f"));
95
+ }
96
+ });
97
+ this.treeModel = [];
98
+ this.selectedInstanceId = undefined;
99
+ this.getLocalServersCallback = undefined;
100
+ this.getNetworkServersCallback = undefined;
101
+ this.cancelCallback = undefined;
102
+ this.confirmCallback = undefined;
103
+ }
104
+ async componentWillLoad() {
105
+ __classPrivateFieldSet(this, _GxIdeDbInstanceSelector_componentLocale, await Locale.getComponentStrings(this.el), "f");
106
+ this.treeModel = [
107
+ {
108
+ id: LOCAL_SERVERS_NODE_ID,
109
+ caption: __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_componentLocale, "f").tree.localServers,
110
+ startImgSrc: SERVER_ICON,
111
+ leaf: false,
112
+ lazy: true,
113
+ expanded: false,
114
+ items: []
115
+ },
116
+ {
117
+ id: NETWORK_SERVERS_NODE_ID,
118
+ caption: __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_componentLocale, "f").tree.networkServers,
119
+ startImgSrc: SERVER_ICON,
120
+ leaf: false,
121
+ lazy: true,
122
+ expanded: false,
123
+ items: []
124
+ }
125
+ ];
126
+ }
127
+ /**
128
+ * Suspends or reactivates the shortcuts.
129
+ */
130
+ async suspendShortcuts(suspendShortcuts) {
131
+ __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_chShortcutsEl, "f").suspend = suspendShortcuts;
132
+ }
133
+ render() {
134
+ return (h(Host, { class: "widget" }, h("ch-theme", { model: CSS_BUNDLES }), h("ch-shortcuts", { src: __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_shortcutsSrc, "f"), ref: (el) => (__classPrivateFieldSet(this, _GxIdeDbInstanceSelector_chShortcutsEl, el, "f")) }), h("section", { class: "section" }, h("header", { class: "dialog-header spacing-body dialog-header" }, h("h1", { class: "label" }, __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_componentLocale, "f").header.title)), h("div", { class: "main" }, h("ch-tree-view-render", { class: "tree-view", model: this.treeModel, dragDisabled: true, dropDisabled: true, showLines: "all", lazyLoadTreeItemsCallback: __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_lazyLoadTreeItems, "f"), onSelectedItemsChange: __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_selectedItemsChangeHandler, "f") })), h("footer", { class: "dialog-footer dialog-footer-with-border spacing-body-block-end spacing-body-inline" }, h("div", { class: "buttons-spacer" }, h("button", { class: "button-secondary", id: "button-cancel", onClick: __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_cancelButtonClickedHandler, "f"), part: "button-cancel" }, __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_componentLocale, "f").footer.btnCancel), h("button", { class: "button-primary", id: "button-confirm", onClick: __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_confirmButtonClickedHandler, "f"), disabled: !this.selectedInstanceId, part: "button-confirm" }, __classPrivateFieldGet(this, _GxIdeDbInstanceSelector_componentLocale, "f").footer.btnConfirm))))));
135
+ }
136
+ static get assetsDirs() { return ["gx-ide-assets/db-instance-selector"]; }
137
+ get el() { return this; }
138
+ static get style() { return dbInstanceSelectorCss; }
139
+ }, [1, "gx-ide-db-instance-selector", {
140
+ "getLocalServersCallback": [16],
141
+ "getNetworkServersCallback": [16],
142
+ "cancelCallback": [16],
143
+ "confirmCallback": [16],
144
+ "treeModel": [32],
145
+ "selectedInstanceId": [32],
146
+ "suspendShortcuts": [64]
147
+ }]);
148
+ _GxIdeDbInstanceSelector_componentLocale = new WeakMap(), _GxIdeDbInstanceSelector_chShortcutsEl = new WeakMap(), _GxIdeDbInstanceSelector_shortcutsSrc = new WeakMap(), _GxIdeDbInstanceSelector_selectedInstanceName = new WeakMap(), _GxIdeDbInstanceSelector_lazyLoadTreeItems = new WeakMap(), _GxIdeDbInstanceSelector_selectedItemsChangeHandler = new WeakMap(), _GxIdeDbInstanceSelector_cancelButtonClickedHandler = new WeakMap(), _GxIdeDbInstanceSelector_confirmButtonClickedHandler = new WeakMap();
149
+ function defineCustomElement$1() {
150
+ if (typeof customElements === "undefined") {
151
+ return;
152
+ }
153
+ const components = ["gx-ide-db-instance-selector"];
154
+ components.forEach(tagName => { switch (tagName) {
155
+ case "gx-ide-db-instance-selector":
156
+ if (!customElements.get(tagName)) {
157
+ customElements.define(tagName, GxIdeDbInstanceSelector$1);
158
+ }
159
+ break;
160
+ } });
161
+ }
162
+
163
+ const GxIdeDbInstanceSelector = GxIdeDbInstanceSelector$1;
164
+ const defineCustomElement = defineCustomElement$1;
165
+
166
+ export { GxIdeDbInstanceSelector, defineCustomElement };
167
+
168
+ //# sourceMappingURL=gx-ide-db-instance-selector.js.map
@@ -0,0 +1 @@
1
+ {"file":"gx-ide-db-instance-selector.js","mappings":"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","names":["GxIdeDbInstanceSelector"],"sources":["src/components/db-instance-selector/db-instance-selector.scss?tag=gx-ide-db-instance-selector&encapsulation=shadow","src/components/db-instance-selector/db-instance-selector.tsx"],"sourcesContent":[":host {\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n.main {\n overflow: auto;\n}\n\n.tree-view {\n display: block;\n block-size: 100%;\n overflow: hidden;\n}\n","import {\n Component,\n Host,\n Prop,\n Element,\n State,\n getAssetPath,\n Method,\n h\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport {\n TreeViewItemModel,\n TreeViewItemModelExtended\n} from \"@genexus/chameleon-controls-library\";\n\nimport { Locale } from \"../../common/locale\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/tree-view\",\n \"utils/form--full\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst SERVER_ICON = getIconPath({\n category: \"system\",\n name: \"computer\",\n colorType: \"primary\"\n});\n\nconst DATABASE_ICON = getIconPath({\n category: \"system\",\n name: \"database\",\n colorType: \"success\"\n});\n\nconst LOCAL_SERVERS_NODE_ID = \"local-servers\";\nconst NETWORK_SERVERS_NODE_ID = \"network-servers\";\n\n@Component({\n tag: \"gx-ide-db-instance-selector\",\n styleUrl: \"db-instance-selector.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/db-instance-selector\"]\n})\nexport class GxIdeDbInstanceSelector {\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n #chShortcutsEl: HTMLChShortcutsElement;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/db-instance-selector/shortcuts.json`\n );\n\n #selectedInstanceName: string | undefined;\n\n @Element() el: HTMLGxIdeDbInstanceSelectorElement;\n\n @State() treeModel: TreeViewItemModel[] = [];\n @State() selectedInstanceId: string | undefined;\n\n /**\n * Callback invoked to load the available local server instances.\n * Should return the list of database instances available on local servers.\n */\n @Prop() readonly getLocalServersCallback!: GetServersCallback;\n\n /**\n * Callback invoked to load the available network server instances.\n * Should return the list of database instances available on network servers.\n */\n @Prop() readonly getNetworkServersCallback!: GetServersCallback;\n\n /**\n * Callback invoked when the user cancels the selection.\n */\n @Prop() readonly cancelCallback!: CancelCallback;\n\n /**\n * Callback invoked when the user confirms the selection. Receives the name\n * of the selected database instance.\n */\n @Prop() readonly confirmCallback!: ConfirmCallback;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.treeModel = [\n {\n id: LOCAL_SERVERS_NODE_ID,\n caption: this.#componentLocale.tree.localServers,\n startImgSrc: SERVER_ICON,\n leaf: false,\n lazy: true,\n expanded: false,\n items: []\n },\n {\n id: NETWORK_SERVERS_NODE_ID,\n caption: this.#componentLocale.tree.networkServers,\n startImgSrc: SERVER_ICON,\n leaf: false,\n lazy: true,\n expanded: false,\n items: []\n }\n ];\n }\n\n /**\n * Suspends or reactivates the shortcuts.\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n this.#chShortcutsEl.suspend = suspendShortcuts;\n }\n\n #lazyLoadTreeItems = async (\n treeItemId: string\n ): Promise<TreeViewItemModel[]> => {\n let servers: DbServerInstance[] = [];\n\n if (treeItemId === LOCAL_SERVERS_NODE_ID) {\n servers = (await this.getLocalServersCallback?.()) ?? [];\n } else if (treeItemId === NETWORK_SERVERS_NODE_ID) {\n servers = (await this.getNetworkServersCallback?.()) ?? [];\n }\n\n return servers.map(server => ({\n id: `${treeItemId}__${server.id}`,\n caption: server.name,\n startImgSrc: DATABASE_ICON,\n leaf: true,\n metadata: server.name\n }));\n };\n\n #selectedItemsChangeHandler = (\n event: CustomEvent<TreeViewItemModelExtended[]>\n ) => {\n const selected = event.detail.find(node => node.item.leaf);\n if (selected) {\n this.selectedInstanceId = selected.item.id;\n this.#selectedInstanceName =\n (selected.item.metadata as string) ?? selected.item.caption;\n } else {\n this.selectedInstanceId = undefined;\n this.#selectedInstanceName = undefined;\n }\n };\n\n #cancelButtonClickedHandler = () => {\n this.cancelCallback?.();\n };\n\n #confirmButtonClickedHandler = () => {\n if (this.#selectedInstanceName) {\n this.confirmCallback?.(this.#selectedInstanceName);\n }\n };\n\n render() {\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 <section class=\"section\">\n <header class=\"dialog-header spacing-body dialog-header\">\n <h1 class=\"label\">{this.#componentLocale.header.title}</h1>\n </header>\n\n <div class=\"main\">\n <ch-tree-view-render\n class=\"tree-view\"\n model={this.treeModel}\n dragDisabled={true}\n dropDisabled={true}\n showLines=\"all\"\n lazyLoadTreeItemsCallback={this.#lazyLoadTreeItems}\n onSelectedItemsChange={this.#selectedItemsChangeHandler}\n ></ch-tree-view-render>\n </div>\n\n <footer class=\"dialog-footer dialog-footer-with-border spacing-body-block-end spacing-body-inline\">\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary\"\n id=\"button-cancel\"\n onClick={this.#cancelButtonClickedHandler}\n part=\"button-cancel\"\n >\n {this.#componentLocale.footer.btnCancel}\n </button>\n <button\n class=\"button-primary\"\n id=\"button-confirm\"\n onClick={this.#confirmButtonClickedHandler}\n disabled={!this.selectedInstanceId}\n part=\"button-confirm\"\n >\n {this.#componentLocale.footer.btnConfirm}\n </button>\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type DbServerInstance = {\n id: string;\n name: string;\n};\n\nexport type GetServersCallback = () =>\n | Promise<DbServerInstance[]>\n | DbServerInstance[];\n\nexport type CancelCallback = () => void | Promise<void>;\n\nexport type ConfirmCallback = (\n selectedInstanceName: string\n) => void | Promise<void>;\n"],"version":3}
@@ -54,22 +54,14 @@ const GxIdeMcpServer$1 = /*@__PURE__*/ proxyCustomElement(class GxIdeMcpServer e
54
54
  var _a;
55
55
  this.errorMessage = undefined;
56
56
  this.actionInProgress = true;
57
- this.status = "starting";
58
57
  try {
59
58
  const result = await this.startCallback();
60
- if (result.success) {
61
- this.status = "running";
62
- this.serverPort = result.port;
63
- this.serverEndpoint = result.endpoint;
64
- }
65
- else {
66
- this.status = "error";
59
+ if (!result.success) {
67
60
  this.errorMessage =
68
61
  (_a = result.errorMessage) !== null && _a !== void 0 ? _a : __classPrivateFieldGet(this, _GxIdeMcpServer_componentLocale, "f").errors.startFailed;
69
62
  }
70
63
  }
71
64
  catch (_b) {
72
- this.status = "error";
73
65
  this.errorMessage = __classPrivateFieldGet(this, _GxIdeMcpServer_componentLocale, "f").errors.startFailed;
74
66
  }
75
67
  finally {
@@ -80,22 +72,14 @@ const GxIdeMcpServer$1 = /*@__PURE__*/ proxyCustomElement(class GxIdeMcpServer e
80
72
  var _a;
81
73
  this.errorMessage = undefined;
82
74
  this.actionInProgress = true;
83
- this.status = "stopping";
84
75
  try {
85
76
  const result = await this.stopCallback();
86
- if (result.success) {
87
- this.status = "stopped";
88
- this.serverPort = undefined;
89
- this.serverEndpoint = undefined;
90
- }
91
- else {
92
- this.status = "error";
77
+ if (!result.success) {
93
78
  this.errorMessage =
94
79
  (_a = result.errorMessage) !== null && _a !== void 0 ? _a : __classPrivateFieldGet(this, _GxIdeMcpServer_componentLocale, "f").errors.stopFailed;
95
80
  }
96
81
  }
97
82
  catch (_b) {
98
- this.status = "error";
99
83
  this.errorMessage = __classPrivateFieldGet(this, _GxIdeMcpServer_componentLocale, "f").errors.stopFailed;
100
84
  }
101
85
  finally {
@@ -181,10 +165,12 @@ _GxIdeMcpServer_componentLocale = new WeakMap(), _GxIdeMcpServer_chShortcutsEl =
181
165
  return h("div", { class: "error-message body-regular-s" }, this.errorMessage);
182
166
  }, _GxIdeMcpServer_renderPrimaryButton = function _GxIdeMcpServer_renderPrimaryButton() {
183
167
  const isRunning = this.status === "running" || this.status === "stopping";
168
+ const isTransitioning = this.status === "starting" || this.status === "stopping";
169
+ const isDisabled = this.actionInProgress || isTransitioning;
184
170
  if (isRunning) {
185
- return (h("button", { class: "button-primary primary-action", type: "button", onClick: __classPrivateFieldGet(this, _GxIdeMcpServer_stopHandler, "f"), disabled: this.actionInProgress, part: "button-confirm" }, __classPrivateFieldGet(this, _GxIdeMcpServer_componentLocale, "f").buttons.stop));
171
+ return (h("button", { class: "button-primary primary-action", type: "button", onClick: __classPrivateFieldGet(this, _GxIdeMcpServer_stopHandler, "f"), disabled: isDisabled, part: "button-confirm" }, __classPrivateFieldGet(this, _GxIdeMcpServer_componentLocale, "f").buttons.stop));
186
172
  }
187
- return (h("button", { class: "button-primary primary-action", type: "button", onClick: __classPrivateFieldGet(this, _GxIdeMcpServer_startHandler, "f"), disabled: this.actionInProgress, part: "button-confirm" }, __classPrivateFieldGet(this, _GxIdeMcpServer_componentLocale, "f").buttons.start));
173
+ return (h("button", { class: "button-primary primary-action", type: "button", onClick: __classPrivateFieldGet(this, _GxIdeMcpServer_startHandler, "f"), disabled: isDisabled, part: "button-confirm" }, __classPrivateFieldGet(this, _GxIdeMcpServer_componentLocale, "f").buttons.start));
188
174
  };
189
175
  function defineCustomElement$1() {
190
176
  if (typeof customElements === "undefined") {
@@ -1 +1 @@
1
- {"file":"gx-ide-mcp-server.js","mappings":"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","names":["GxIdeMcpServer"],"sources":["src/components/mcp-server/mcp-server.scss?tag=gx-ide-mcp-server&encapsulation=shadow","src/components/mcp-server/mcp-server.tsx"],"sourcesContent":["@import \"../../global/temporary-mercury-overrides/_button.scss\";\n\n:host {\n display: grid;\n inline-size: 100%;\n block-size: 100%;\n min-inline-size: 480px;\n min-block-size: 320px;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.title {\n margin: 0;\n}\n\n.main {\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-xl);\n padding-block: var(--spacing-padding-l);\n}\n\n\n.info-section {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-m);\n color: var(--color-text-neutral-default);\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-gap-xs);\n}\n\n.status-dot {\n $dot-size: 8px;\n\n display: inline-block;\n inline-size: $dot-size;\n block-size: $dot-size;\n border-radius: 50%;\n background-color: var(--color-text-neutral-disabled);\n flex-shrink: 0;\n\n .status-badge--running & {\n background-color: var(--color-text-success-default, #22c55e);\n }\n\n .status-badge--error & {\n background-color: var(--color-text-error-default, #ef4444);\n }\n\n .status-badge--starting &,\n .status-badge--stopping & {\n background-color: var(--color-text-warning-default, #f59e0b);\n }\n\n &--animated {\n animation: pulse 1.2s ease-in-out infinite;\n }\n}\n\n@keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.3;\n }\n}\n\n.status-card {\n border: 1px solid var(--color-border-surface-on-elevation-1);\n border-radius: 4px;\n padding: var(--spacing-gap-l);\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-m);\n\n &--dimmed {\n opacity: 0.5;\n }\n\n &__row {\n display: flex;\n align-items: flex-start;\n gap: var(--spacing-gap-l);\n\n > :first-child {\n min-inline-size: 80px;\n flex-shrink: 0;\n }\n }\n\n &__endpoint {\n display: flex;\n align-items: flex-start;\n gap: var(--spacing-gap-m);\n flex-wrap: wrap;\n\n > .button-icon-only {\n padding: 0;\n block-size: auto;\n }\n }\n}\n\n.endpoint-value {\n word-break: break-all;\n color: var(--color-text-neutral-default);\n}\n\n.loader {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n}\n\n.error-message {\n color: var(--color-text-error-default, #ef4444);\n padding: var(--spacing-gap-m);\n border: 1px solid var(--color-border-error-default, #ef4444);\n border-radius: 4px;\n background-color: var(--color-surface-error-default, rgba(239, 68, 68, 0.08));\n}\n\n","import {\n Component,\n Host,\n h,\n Prop,\n State,\n Element,\n getAssetPath,\n Method\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport {\n McpServerStatus,\n McpStartResult,\n McpStopResult\n} from \"./types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/elevation\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst COPY_ICON = getIconPath({\n category: \"system\",\n name: \"copy\",\n colorType: \"primary\"\n});\n\n\n@Component({\n tag: \"gx-ide-mcp-server\",\n styleUrl: \"mcp-server.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/mcp-server\"]\n})\nexport class GxIdeMcpServer {\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n #chShortcutsEl: HTMLChShortcutsElement;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/mcp-server/shortcuts.json`\n );\n\n @Element() el: HTMLGxIdeMcpServerElement;\n\n @State() actionInProgress: boolean = false;\n @State() errorMessage: string | undefined;\n @State() copying: boolean = false;\n\n /**\n * When `true` the component shows a loader instead of content.\n * The host sets this to `false` once the initial status is known.\n */\n @Prop({ mutable: true }) initialLoading: boolean = true;\n\n /**\n * Current MCP server status. The host is responsible for keeping\n * this prop up to date (e.g. via polling or event-driven updates).\n * The component only mutates it internally during start/stop\n * transitions (`starting`, `stopping`, result states).\n */\n @Prop({ mutable: true }) status!: McpServerStatus;\n\n /**\n * Port the MCP server is listening on (shown when running).\n */\n @Prop({ mutable: true }) serverPort: number | undefined;\n\n /**\n * Full endpoint URL (shown when running).\n */\n @Prop({ mutable: true }) serverEndpoint: string | undefined;\n\n /**\n * Callback to start the MCP server. Returns result with connection info.\n */\n @Prop() readonly startCallback!: StartCallback;\n\n /**\n * Callback to stop the MCP server.\n */\n @Prop() readonly stopCallback!: StopCallback;\n\n /**\n * Callback to copy text to the clipboard. Delegated to the IDE clipboard\n * service so the host environment controls the copy behavior.\n */\n @Prop() readonly copyCallback!: CopyCallback;\n\n /**\n * Callback to close/dismiss the dialog.\n */\n @Prop() readonly closeCallback!: CloseCallback;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n /**\n * Suspends or reactivates the shortcuts.\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n this.#chShortcutsEl.suspend = suspendShortcuts;\n }\n\n #startHandler = async () => {\n this.errorMessage = undefined;\n this.actionInProgress = true;\n this.status = \"starting\";\n\n try {\n const result = await this.startCallback();\n\n if (result.success) {\n this.status = \"running\";\n this.serverPort = result.port;\n this.serverEndpoint = result.endpoint;\n } else {\n this.status = \"error\";\n this.errorMessage =\n result.errorMessage ??\n this.#componentLocale.errors.startFailed;\n }\n } catch {\n this.status = \"error\";\n this.errorMessage = this.#componentLocale.errors.startFailed;\n } finally {\n this.actionInProgress = false;\n }\n };\n\n #stopHandler = async () => {\n this.errorMessage = undefined;\n this.actionInProgress = true;\n this.status = \"stopping\";\n\n try {\n const result = await this.stopCallback();\n\n if (result.success) {\n this.status = \"stopped\";\n this.serverPort = undefined;\n this.serverEndpoint = undefined;\n } else {\n this.status = \"error\";\n this.errorMessage =\n result.errorMessage ??\n this.#componentLocale.errors.stopFailed;\n }\n } catch {\n this.status = \"error\";\n this.errorMessage = this.#componentLocale.errors.stopFailed;\n } finally {\n this.actionInProgress = false;\n }\n };\n\n #closeHandler = () => {\n this.closeCallback?.();\n };\n\n #copyEndpointHandler = () => {\n if (this.serverEndpoint && this.copyCallback) {\n this.copying = true;\n this.copyCallback(this.serverEndpoint);\n setTimeout(() => {\n this.copying = false;\n }, 1000);\n }\n };\n\n #renderStatusBadge() {\n const statusText =\n this.#componentLocale.status[this.status] ?? this.status;\n\n const badgeClass = `status-badge status-badge--${this.status}`;\n const isAnimated =\n this.status === \"starting\" || this.status === \"stopping\";\n\n return (\n <span class={badgeClass}>\n <span\n class={`status-dot ${isAnimated ? \"status-dot--animated\" : \"\"}`}\n ></span>\n <span class=\"body-regular-s\">{statusText}</span>\n </span>\n );\n }\n\n #renderStatusCard() {\n if (this.status !== \"running\" && this.status !== \"stopping\") {\n return null;\n }\n\n const isDimmed = this.status === \"stopping\";\n\n return (\n <div\n class={`status-card elevation-1 ${isDimmed ? \"status-card--dimmed\" : \"\"}`}\n >\n <div class=\"status-card__row\">\n <span class=\"body-semi-bold-s\">\n {this.#componentLocale.statusCard.statusLabel}\n </span>\n <span class=\"body-regular-s\">\n {this.#componentLocale.status[this.status]}\n </span>\n </div>\n\n {this.serverPort !== undefined && (\n <div class=\"status-card__row\">\n <span class=\"body-semi-bold-s\">\n {this.#componentLocale.statusCard.portLabel}\n </span>\n <span class=\"body-regular-s\">{this.serverPort}</span>\n </div>\n )}\n\n {this.serverEndpoint && (\n <div class=\"status-card__row\">\n <span class=\"body-semi-bold-s\">\n {this.#componentLocale.statusCard.endpointLabel}\n </span>\n <span class=\"status-card__endpoint\">\n <span class=\"body-regular-s endpoint-value\">\n {this.serverEndpoint}\n </span>\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#copyEndpointHandler}\n disabled={this.copying}\n aria-label={this.#componentLocale.statusCard.copyEndpoint}\n title={\n this.copying\n ? this.#componentLocale.statusCard.copiedEndpoint\n : this.#componentLocale.statusCard.copyEndpoint\n }\n >\n <ch-image class=\"icon-m\" src={COPY_ICON}></ch-image>\n </button>\n </span>\n </div>\n )}\n </div>\n );\n }\n\n #renderError() {\n if (!this.errorMessage) {\n return null;\n }\n\n return <div class=\"error-message body-regular-s\">{this.errorMessage}</div>;\n }\n\n #renderPrimaryButton() {\n const isRunning =\n this.status === \"running\" || this.status === \"stopping\";\n\n if (isRunning) {\n return (\n <button\n class=\"button-primary primary-action\"\n type=\"button\"\n onClick={this.#stopHandler}\n disabled={this.actionInProgress}\n part=\"button-confirm\"\n >\n {this.#componentLocale.buttons.stop}\n </button>\n );\n }\n\n return (\n <button\n class=\"button-primary primary-action\"\n type=\"button\"\n onClick={this.#startHandler}\n disabled={this.actionInProgress}\n part=\"button-confirm\"\n >\n {this.#componentLocale.buttons.start}\n </button>\n );\n }\n\n render() {\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 <section class=\"section\">\n <header class=\"header dialog-header-with-border spacing-body-inline spacing-body-block-start\">\n <h1 class=\"heading-s title\">\n {this.#componentLocale.header.title}\n </h1>\n {!this.initialLoading && this.#renderStatusBadge()}\n </header>\n\n <div class=\"main spacing-body-inline\">\n {this.initialLoading ? (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n show\n class=\"loader\"\n ></gx-ide-loader>\n ) : ([\n <div class=\"info-section\">\n <p class=\"body-regular-m\">\n {this.#componentLocale.info.description}\n </p>\n <p class=\"body-regular-m\">\n {this.#componentLocale.info.details}\n </p>\n </div>,\n\n this.#renderStatusCard(),\n this.#renderError()\n ])}\n </div>\n\n <footer class=\"footer dialog-footer-with-border spacing-body-inline spacing-body-block-end\">\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#closeHandler}\n part=\"button-cancel\"\n >\n {this.#componentLocale.buttons.close}\n </button>\n {!this.initialLoading && this.#renderPrimaryButton()}\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type StartCallback = () => Promise<McpStartResult>;\nexport type StopCallback = () => Promise<McpStopResult>;\nexport type CopyCallback = (text: string) => void;\nexport type CloseCallback = () => void;\n"],"version":3}
1
+ {"file":"gx-ide-mcp-server.js","mappings":"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","names":["GxIdeMcpServer"],"sources":["src/components/mcp-server/mcp-server.scss?tag=gx-ide-mcp-server&encapsulation=shadow","src/components/mcp-server/mcp-server.tsx"],"sourcesContent":["@import \"../../global/temporary-mercury-overrides/_button.scss\";\n\n:host {\n display: grid;\n inline-size: 100%;\n block-size: 100%;\n min-inline-size: 480px;\n min-block-size: 320px;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n}\n\n.section {\n display: contents;\n}\n\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.title {\n margin: 0;\n}\n\n.main {\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-xl);\n padding-block: var(--spacing-padding-l);\n}\n\n\n.info-section {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-m);\n color: var(--color-text-neutral-default);\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-gap-xs);\n}\n\n.status-dot {\n $dot-size: 8px;\n\n display: inline-block;\n inline-size: $dot-size;\n block-size: $dot-size;\n border-radius: 50%;\n background-color: var(--color-text-neutral-disabled);\n flex-shrink: 0;\n\n .status-badge--running & {\n background-color: var(--color-text-success-default, #22c55e);\n }\n\n .status-badge--error & {\n background-color: var(--color-text-error-default, #ef4444);\n }\n\n .status-badge--starting &,\n .status-badge--stopping & {\n background-color: var(--color-text-warning-default, #f59e0b);\n }\n\n &--animated {\n animation: pulse 1.2s ease-in-out infinite;\n }\n}\n\n@keyframes pulse {\n 0%,\n 100% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.3;\n }\n}\n\n.status-card {\n border: 1px solid var(--color-border-surface-on-elevation-1);\n border-radius: 4px;\n padding: var(--spacing-gap-l);\n display: flex;\n flex-direction: column;\n gap: var(--spacing-gap-m);\n\n &--dimmed {\n opacity: 0.5;\n }\n\n &__row {\n display: flex;\n align-items: flex-start;\n gap: var(--spacing-gap-l);\n\n > :first-child {\n min-inline-size: 80px;\n flex-shrink: 0;\n }\n }\n\n &__endpoint {\n display: flex;\n align-items: flex-start;\n gap: var(--spacing-gap-m);\n flex-wrap: wrap;\n\n > .button-icon-only {\n padding: 0;\n block-size: auto;\n }\n }\n}\n\n.endpoint-value {\n word-break: break-all;\n color: var(--color-text-neutral-default);\n}\n\n.loader {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n}\n\n.error-message {\n color: var(--color-text-error-default, #ef4444);\n padding: var(--spacing-gap-m);\n border: 1px solid var(--color-border-error-default, #ef4444);\n border-radius: 4px;\n background-color: var(--color-surface-error-default, rgba(239, 68, 68, 0.08));\n}\n\n","import {\n Component,\n Host,\n h,\n Prop,\n State,\n Element,\n getAssetPath,\n Method\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport {\n McpServerStatus,\n McpStartResult,\n McpStopResult\n} from \"./types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/button\",\n \"components/icon\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/elevation\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst COPY_ICON = getIconPath({\n category: \"system\",\n name: \"copy\",\n colorType: \"primary\"\n});\n\n\n@Component({\n tag: \"gx-ide-mcp-server\",\n styleUrl: \"mcp-server.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/mcp-server\"]\n})\nexport class GxIdeMcpServer {\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n #chShortcutsEl: HTMLChShortcutsElement;\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/mcp-server/shortcuts.json`\n );\n\n @Element() el: HTMLGxIdeMcpServerElement;\n\n @State() actionInProgress: boolean = false;\n @State() errorMessage: string | undefined;\n @State() copying: boolean = false;\n\n /**\n * When `true` the component shows a loader instead of content.\n * The host sets this to `false` once the initial status is known.\n */\n @Prop({ mutable: true }) initialLoading: boolean = true;\n\n /**\n * Current MCP server status. The host is responsible for keeping\n * this prop up to date (e.g. via polling or event-driven updates).\n * The component only mutates it internally during start/stop\n * transitions (`starting`, `stopping`, result states).\n */\n @Prop({ mutable: true }) status!: McpServerStatus;\n\n /**\n * Port the MCP server is listening on (shown when running).\n */\n @Prop({ mutable: true }) serverPort: number | undefined;\n\n /**\n * Full endpoint URL (shown when running).\n */\n @Prop({ mutable: true }) serverEndpoint: string | undefined;\n\n /**\n * Callback to start the MCP server. Returns result with connection info.\n */\n @Prop() readonly startCallback!: StartCallback;\n\n /**\n * Callback to stop the MCP server.\n */\n @Prop() readonly stopCallback!: StopCallback;\n\n /**\n * Callback to copy text to the clipboard. Delegated to the IDE clipboard\n * service so the host environment controls the copy behavior.\n */\n @Prop() readonly copyCallback!: CopyCallback;\n\n /**\n * Callback to close/dismiss the dialog.\n */\n @Prop() readonly closeCallback!: CloseCallback;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n /**\n * Suspends or reactivates the shortcuts.\n */\n @Method()\n async suspendShortcuts(suspendShortcuts: boolean) {\n this.#chShortcutsEl.suspend = suspendShortcuts;\n }\n\n #startHandler = async () => {\n this.errorMessage = undefined;\n this.actionInProgress = true;\n\n try {\n const result = await this.startCallback();\n\n if (!result.success) {\n this.errorMessage =\n result.errorMessage ??\n this.#componentLocale.errors.startFailed;\n }\n } catch {\n this.errorMessage = this.#componentLocale.errors.startFailed;\n } finally {\n this.actionInProgress = false;\n }\n };\n\n #stopHandler = async () => {\n this.errorMessage = undefined;\n this.actionInProgress = true;\n\n try {\n const result = await this.stopCallback();\n\n if (!result.success) {\n this.errorMessage =\n result.errorMessage ??\n this.#componentLocale.errors.stopFailed;\n }\n } catch {\n this.errorMessage = this.#componentLocale.errors.stopFailed;\n } finally {\n this.actionInProgress = false;\n }\n };\n\n #closeHandler = () => {\n this.closeCallback?.();\n };\n\n #copyEndpointHandler = () => {\n if (this.serverEndpoint && this.copyCallback) {\n this.copying = true;\n this.copyCallback(this.serverEndpoint);\n setTimeout(() => {\n this.copying = false;\n }, 1000);\n }\n };\n\n #renderStatusBadge() {\n const statusText =\n this.#componentLocale.status[this.status] ?? this.status;\n\n const badgeClass = `status-badge status-badge--${this.status}`;\n const isAnimated =\n this.status === \"starting\" || this.status === \"stopping\";\n\n return (\n <span class={badgeClass}>\n <span\n class={`status-dot ${isAnimated ? \"status-dot--animated\" : \"\"}`}\n ></span>\n <span class=\"body-regular-s\">{statusText}</span>\n </span>\n );\n }\n\n #renderStatusCard() {\n if (this.status !== \"running\" && this.status !== \"stopping\") {\n return null;\n }\n\n const isDimmed = this.status === \"stopping\";\n\n return (\n <div\n class={`status-card elevation-1 ${isDimmed ? \"status-card--dimmed\" : \"\"}`}\n >\n <div class=\"status-card__row\">\n <span class=\"body-semi-bold-s\">\n {this.#componentLocale.statusCard.statusLabel}\n </span>\n <span class=\"body-regular-s\">\n {this.#componentLocale.status[this.status]}\n </span>\n </div>\n\n {this.serverPort !== undefined && (\n <div class=\"status-card__row\">\n <span class=\"body-semi-bold-s\">\n {this.#componentLocale.statusCard.portLabel}\n </span>\n <span class=\"body-regular-s\">{this.serverPort}</span>\n </div>\n )}\n\n {this.serverEndpoint && (\n <div class=\"status-card__row\">\n <span class=\"body-semi-bold-s\">\n {this.#componentLocale.statusCard.endpointLabel}\n </span>\n <span class=\"status-card__endpoint\">\n <span class=\"body-regular-s endpoint-value\">\n {this.serverEndpoint}\n </span>\n <button\n class=\"button-tertiary button-icon-only\"\n type=\"button\"\n onClick={this.#copyEndpointHandler}\n disabled={this.copying}\n aria-label={this.#componentLocale.statusCard.copyEndpoint}\n title={\n this.copying\n ? this.#componentLocale.statusCard.copiedEndpoint\n : this.#componentLocale.statusCard.copyEndpoint\n }\n >\n <ch-image class=\"icon-m\" src={COPY_ICON}></ch-image>\n </button>\n </span>\n </div>\n )}\n </div>\n );\n }\n\n #renderError() {\n if (!this.errorMessage) {\n return null;\n }\n\n return <div class=\"error-message body-regular-s\">{this.errorMessage}</div>;\n }\n\n #renderPrimaryButton() {\n const isRunning =\n this.status === \"running\" || this.status === \"stopping\";\n const isTransitioning =\n this.status === \"starting\" || this.status === \"stopping\";\n const isDisabled = this.actionInProgress || isTransitioning;\n\n if (isRunning) {\n return (\n <button\n class=\"button-primary primary-action\"\n type=\"button\"\n onClick={this.#stopHandler}\n disabled={isDisabled}\n part=\"button-confirm\"\n >\n {this.#componentLocale.buttons.stop}\n </button>\n );\n }\n\n return (\n <button\n class=\"button-primary primary-action\"\n type=\"button\"\n onClick={this.#startHandler}\n disabled={isDisabled}\n part=\"button-confirm\"\n >\n {this.#componentLocale.buttons.start}\n </button>\n );\n }\n\n render() {\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 <section class=\"section\">\n <header class=\"header dialog-header-with-border spacing-body-inline spacing-body-block-start\">\n <h1 class=\"heading-s title\">\n {this.#componentLocale.header.title}\n </h1>\n {!this.initialLoading && this.#renderStatusBadge()}\n </header>\n\n <div class=\"main spacing-body-inline\">\n {this.initialLoading ? (\n <gx-ide-loader\n loaderTitle={this.#componentLocale.loader.title}\n show\n class=\"loader\"\n ></gx-ide-loader>\n ) : ([\n <div class=\"info-section\">\n <p class=\"body-regular-m\">\n {this.#componentLocale.info.description}\n </p>\n <p class=\"body-regular-m\">\n {this.#componentLocale.info.details}\n </p>\n </div>,\n\n this.#renderStatusCard(),\n this.#renderError()\n ])}\n </div>\n\n <footer class=\"footer dialog-footer-with-border spacing-body-inline spacing-body-block-end\">\n <div class=\"buttons-spacer\">\n <button\n class=\"button-secondary\"\n type=\"button\"\n onClick={this.#closeHandler}\n part=\"button-cancel\"\n >\n {this.#componentLocale.buttons.close}\n </button>\n {!this.initialLoading && this.#renderPrimaryButton()}\n </div>\n </footer>\n </section>\n </Host>\n );\n }\n}\n\nexport type StartCallback = () => Promise<McpStartResult>;\nexport type StopCallback = () => Promise<McpStopResult>;\nexport type CopyCallback = (text: string) => void;\nexport type CloseCallback = () => void;\n"],"version":3}