@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 +0,0 @@
1
- {"version":3,"names":["mcpServerCss","CSS_BUNDLES","COPY_ICON","getIconPath","category","name","colorType","GxIdeMcpServer","_GxIdeMcpServer_componentLocale","set","this","_GxIdeMcpServer_chShortcutsEl","_GxIdeMcpServer_shortcutsSrc","getAssetPath","_GxIdeMcpServer_startHandler","async","errorMessage","undefined","actionInProgress","status","result","startCallback","success","serverPort","port","serverEndpoint","endpoint","_a","__classPrivateFieldGet","errors","startFailed","_b","_GxIdeMcpServer_stopHandler","stopCallback","stopFailed","_GxIdeMcpServer_closeHandler","closeCallback","call","_GxIdeMcpServer_copyEndpointHandler","copyCallback","copying","setTimeout","componentWillLoad","__classPrivateFieldSet","Locale","getComponentStrings","el","suspendShortcuts","suspend","render","h","Host","class","model","src","ref","header","title","initialLoading","_GxIdeMcpServer_instances","_GxIdeMcpServer_renderStatusBadge","loaderTitle","loader","show","info","description","details","_GxIdeMcpServer_renderStatusCard","_GxIdeMcpServer_renderError","type","onClick","part","buttons","close","_GxIdeMcpServer_renderPrimaryButton","statusText","badgeClass","isAnimated","isDimmed","statusCard","statusLabel","portLabel","endpointLabel","disabled","copyEndpoint","copiedEndpoint","isRunning","stop","start"],"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"],"mappings":"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"}