@genexus/genexus-ide-ui 1.0.49 → 1.0.50

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 (89) hide show
  1. package/dist/cjs/code-render-9b3efb53.js +50 -0
  2. package/dist/cjs/code-render-9b3efb53.js.map +1 -0
  3. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  4. package/dist/cjs/gx-ide-chat-container.cjs.entry.js +11 -2
  5. package/dist/cjs/gx-ide-chat-container.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +7 -44
  7. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
  8. package/dist/cjs/index.cjs.js +9 -0
  9. package/dist/cjs/index.cjs.js.map +1 -1
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/collection/components/_helpers/chat-container/chat-container.js +27 -3
  12. package/dist/collection/components/_helpers/chat-container/chat-container.js.map +1 -1
  13. package/dist/collection/index.js +1 -0
  14. package/dist/collection/index.js.map +1 -1
  15. package/dist/collection/showcase/chat-container/chat.showcase.js +6 -3
  16. package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -1
  17. package/dist/components/MERCURY_ASSETS.js +0 -4
  18. package/dist/components/MERCURY_ASSETS.js.map +1 -1
  19. package/dist/components/ai-message.js +2 -1
  20. package/dist/components/ai-message.js.map +1 -1
  21. package/dist/components/assets-manager.js +5 -0
  22. package/dist/components/assets-manager.js.map +1 -0
  23. package/dist/components/chat-container.js +14 -3
  24. package/dist/components/chat-container.js.map +1 -1
  25. package/dist/components/code-render.js +47 -0
  26. package/dist/components/code-render.js.map +1 -0
  27. package/dist/components/entity-selector.js +2 -1
  28. package/dist/components/entity-selector.js.map +1 -1
  29. package/dist/components/gx-ide-create-kb-from-server.js +2 -1
  30. package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
  31. package/dist/components/gx-ide-current-user-info.js +2 -1
  32. package/dist/components/gx-ide-current-user-info.js.map +1 -1
  33. package/dist/components/gx-ide-dashboard-home.js +2 -1
  34. package/dist/components/gx-ide-dashboard-home.js.map +1 -1
  35. package/dist/components/gx-ide-data-selector.js +2 -1
  36. package/dist/components/gx-ide-data-selector.js.map +1 -1
  37. package/dist/components/gx-ide-data-type-selector.js +2 -1
  38. package/dist/components/gx-ide-data-type-selector.js.map +1 -1
  39. package/dist/components/gx-ide-design-import.js +2 -1
  40. package/dist/components/gx-ide-design-import.js.map +1 -1
  41. package/dist/components/gx-ide-kb-manager-export.js +2 -1
  42. package/dist/components/gx-ide-kb-manager-export.js.map +1 -1
  43. package/dist/components/gx-ide-kb-manager-import.js +2 -1
  44. package/dist/components/gx-ide-kb-manager-import.js.map +1 -1
  45. package/dist/components/gx-ide-manage-module-references-v2.js +2 -1
  46. package/dist/components/gx-ide-manage-module-references-v2.js.map +1 -1
  47. package/dist/components/gx-ide-manage-module-references.js +2 -1
  48. package/dist/components/gx-ide-manage-module-references.js.map +1 -1
  49. package/dist/components/gx-ide-new-kb.js +2 -1
  50. package/dist/components/gx-ide-new-kb.js.map +1 -1
  51. package/dist/components/gx-ide-object-selector.js +2 -1
  52. package/dist/components/gx-ide-object-selector.js.map +1 -1
  53. package/dist/components/gx-ide-sc-chat-container.js +8 -46
  54. package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
  55. package/dist/components/gx-ide-share-kb.js +2 -1
  56. package/dist/components/gx-ide-share-kb.js.map +1 -1
  57. package/dist/components/gx-ide-start-page.js +2 -1
  58. package/dist/components/gx-ide-start-page.js.map +1 -1
  59. package/dist/components/gx-ide-welcome-page.js +2 -1
  60. package/dist/components/gx-ide-welcome-page.js.map +1 -1
  61. package/dist/components/gx-ide-ww-attributes.js +2 -1
  62. package/dist/components/gx-ide-ww-attributes.js.map +1 -1
  63. package/dist/components/index.js +2 -0
  64. package/dist/components/index.js.map +1 -1
  65. package/dist/esm/code-render-79798e42.js +47 -0
  66. package/dist/esm/code-render-79798e42.js.map +1 -0
  67. package/dist/esm/genexus-ide-ui.js +1 -1
  68. package/dist/esm/gx-ide-chat-container.entry.js +11 -2
  69. package/dist/esm/gx-ide-chat-container.entry.js.map +1 -1
  70. package/dist/esm/gx-ide-sc-chat-container.entry.js +8 -45
  71. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
  72. package/dist/esm/index.js +4 -0
  73. package/dist/esm/index.js.map +1 -1
  74. package/dist/esm/loader.js +1 -1
  75. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  76. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  77. package/dist/genexus-ide-ui/index.esm.js +6 -0
  78. package/dist/genexus-ide-ui/index.esm.js.map +1 -1
  79. package/dist/genexus-ide-ui/{p-72867329.entry.js → p-8558e873.entry.js} +43 -99
  80. package/dist/genexus-ide-ui/p-8558e873.entry.js.map +1 -0
  81. package/dist/genexus-ide-ui/{p-5afe1477.entry.js → p-c1791757.entry.js} +27 -12
  82. package/dist/genexus-ide-ui/{p-5afe1477.entry.js.map → p-c1791757.entry.js.map} +1 -1
  83. package/dist/genexus-ide-ui/p-f3f1e1f6.js +68 -0
  84. package/dist/genexus-ide-ui/p-f3f1e1f6.js.map +1 -0
  85. package/dist/types/components/_helpers/chat-container/chat-container.d.ts +5 -1
  86. package/dist/types/components.d.ts +10 -2
  87. package/dist/types/index.d.ts +1 -0
  88. package/package.json +1 -1
  89. package/dist/genexus-ide-ui/p-72867329.entry.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
2
- import { g as getIconPath } from './MERCURY_ASSETS.js';
2
+ import { g as getIconPath } from './assets-manager.js';
3
+ import './MERCURY_ASSETS.js';
3
4
  import { L as Locale } from './locale.js';
4
5
  import { h as hiChar } from './helpers.js';
5
6
 
@@ -1 +1 @@
1
- {"file":"ai-message.js","mappings":"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","names":[],"sources":["src/components/ai-assistant/ai-message.scss?tag=gx-ide-ai-message","src/components/ai-assistant/ai-message.tsx"],"sourcesContent":["@import \"../../global/gx-ide-mixins.scss\";\n\n:host {\n font-family: var(--mer-font-family--primary);\n}\n/*--- Messages ---*/\n.message {\n color: var(--mer-color__neutral-gray--100);\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 100ms;\n transition: grid-template-rows 100ms, -ms-grid-rows 100ms;\n &__outer-wrapper {\n overflow: hidden;\n }\n &__inner-wrapper {\n padding: var(--mer-spacing--sm) var(--mer-spacing--sm);\n border-radius: var(--mer-border__radius--sm);\n border-inline-start: var(--mer-border__width--md) solid transparent;\n background-color: var(--mer-color__neutral-gray--1200);\n margin-block-start: var(--mer-spacing--xs);\n position: relative;\n }\n &__header {\n display: flex;\n gap: var(--mer-spacing--xs);\n justify-content: space-between;\n\n .icon-md {\n opacity: 0;\n }\n\n &--in-progress {\n display: contents;\n }\n }\n &__role {\n &:before {\n content: \"\";\n display: grid;\n place-self: center flex-end;\n inline-size: 4px;\n block-size: 4px;\n border-radius: 50%;\n background-color: currentcolor;\n }\n\n font-weight: var(--mer-font__weight--semi-bold);\n margin-block-end: var(--mer-spacing--xs);\n display: inline-grid;\n grid-template-columns: max-content 1fr;\n gap: 8px;\n\n &-description {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: inline-block;\n padding-block-start: 2px;\n }\n &--user {\n color: var(--mer-color__primary--300);\n }\n &--assistant {\n }\n &--hidden {\n display: none;\n }\n }\n &__caption {\n font-size: var(--mer-font__size--xs);\n line-height: var(--mer-line-height--regular);\n }\n &--visible {\n grid-template-rows: 1fr;\n }\n &--copying {\n pointer-events: none;\n span:not(.copied),\n .message__caption {\n color: transparent;\n -webkit-user-select: none; /* Safari */\n -ms-user-select: none; /* IE 10 and IE 11 */\n user-select: none; /* Standard syntax */\n }\n }\n /*--- Types of messages ---*/\n &--user {\n .message__inner-wrapper {\n background-color: rgba(91, 167, 255, 0.08);\n border-color: var(--mer-border-color__primary);\n }\n }\n &--assistant-action {\n .message__inner-wrapper {\n background-color: rgba(63, 168, 155, 0.05);\n border-color: var(--mer-border-color__success);\n }\n }\n &--assistant-chat {\n .message__inner-wrapper {\n background-color: var(--mer-surface__elevation--01);\n }\n }\n &--assistant-in-progress {\n color: var(--mer-color__neutral-gray--500);\n .message__inner-wrapper {\n font-style: italic;\n display: grid;\n grid-template-columns: 1fr auto;\n gap: var(--mer-spacing--xs);\n\n .message__caption {\n flex: 1;\n }\n .animation-wrapper {\n flex: none;\n }\n }\n }\n &--assistant-error {\n .message__inner-wrapper {\n background-color: rgba(251, 124, 132, 0.05);\n border-color: var(--mer-border-color__error);\n }\n }\n &--copyable {\n &:hover {\n filter: brightness(1.2);\n .icon-md {\n opacity: 1;\n }\n }\n }\n &:last-child {\n margin-block-end: 0;\n }\n}\n:host(:first-child) {\n .message {\n &__inner-wrapper {\n margin-block-end: 0;\n }\n }\n}\n\n/*--- Dot Pulse Sweet Animation ---*/\n.animation-wrapper {\n width: 45px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n$color: var(--mer-color__neutral-gray--400);\n.dot-pulse {\n position: relative;\n left: -9999px;\n width: 5px;\n height: 5px;\n border-radius: 2.5px;\n background-color: $color;\n color: $color;\n box-shadow: 9999px 0 0 -5px;\n animation: dot-pulse 1.5s infinite linear;\n animation-delay: 0.25s;\n &::before,\n &::after {\n content: \"\";\n display: inline-block;\n position: absolute;\n top: 0;\n width: 5px;\n height: 5px;\n border-radius: 2.5px;\n background-color: $color;\n color: $color;\n }\n &::before {\n box-shadow: 9984px 0 0 -5px;\n animation: dot-pulse-before 1.5s infinite linear;\n animation-delay: 0s;\n }\n &::after {\n box-shadow: 10014px 0 0 -5px;\n animation: dot-pulse-after 1.5s infinite linear;\n animation-delay: 0.5s;\n }\n}\n@keyframes dot-pulse-before {\n 0% {\n box-shadow: 9984px 0 0 -5px;\n }\n 30% {\n box-shadow: 9984px 0 0 2px;\n }\n 60%,\n 100% {\n box-shadow: 9984px 0 0 -5px;\n }\n}\n@keyframes dot-pulse {\n 0% {\n box-shadow: 9999px 0 0 -5px;\n }\n 30% {\n box-shadow: 9999px 0 0 2px;\n }\n 60%,\n 100% {\n box-shadow: 9999px 0 0 -5px;\n }\n}\n@keyframes dot-pulse-after {\n 0% {\n box-shadow: 10014px 0 0 -5px;\n }\n 30% {\n box-shadow: 10014px 0 0 2px;\n }\n 60%,\n 100% {\n box-shadow: 10014px 0 0 -5px;\n }\n}\n\n/*--- Copy Message ---*/\n.copied {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mer-color__neutral-gray--300);\n display: flex;\n gap: var(--mer-spacing--xs);\n opacity: 0;\n animation: fadeIn var(--mer-timing--regular) ease-out forwards;\n}\n\n@keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@include hiChar;\n","import { Component, h, Prop, Element, State } from \"@stencil/core\";\n\nimport { getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { MessageType } from \"./ai-assistant\";\nimport { hiChar } from \"../../common/helpers\";\n\nconst COPY_ICON = getIconPath({\n category: \"bpm\",\n name: \"tasks\",\n colorType: \"neutral\"\n});\n\n@Component({\n tag: \"gx-ide-ai-message\",\n styleUrl: \"ai-message.scss\",\n shadow: false,\n assetsDirs: [\"gx-ide-assets/ai-message\"]\n})\nexport class GxIdeAiMessage {\n /* The message allows to be copied*/\n private _componentLocale: any;\n private copyable = false;\n\n @Element() el: HTMLGxIdeAiMessageElement;\n\n /**\n * This wil display the message if true\n */\n @State() visible = false;\n\n /**\n * This wil show the user a text, indicating that the message has been copied\n */\n @State() showCopiedMessage = false;\n\n /**\n * A reference to the gx-ide-ai-assistant host element\n */\n @Prop() readonly aiAssistantHostRef: HTMLGxIdeAiAssistantElement;\n\n /**\n * The actual message\n */\n @Prop() readonly message: string;\n\n /**\n * The message type\n */\n @Prop() readonly messageType: MessageType;\n\n /**\n * The filter value\n */\n @Prop() readonly filterValue: string;\n\n /**\n * It hides the message (used for the filter)\n */\n @Prop() readonly hidden: boolean;\n\n /**\n * An object with the needed string translations.\n */\n @Prop() readonly translations: Translations;\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n this.evaluateMessageIsCopyable();\n }\n\n componentDidRender() {\n setTimeout(() => {\n /* Without the timeout it appears instantly (no apparent transition)*/\n this.visible = true;\n const messagesList = this.el.parentElement;\n messagesList.scrollTo(0, 0);\n }, 0);\n }\n\n private copyMessage = () => {\n navigator.clipboard.writeText(this.message);\n this.showCopiedMessage = true;\n setTimeout(() => {\n this.showCopiedMessage = false;\n }, 1500);\n };\n\n #buttonMouseDownHandler = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n private evaluateMessageIsCopyable = () => {\n this.copyable = this.messageType !== \"assistant-in-progress\";\n };\n\n private evaluateCopyIcon = () => {\n return this.copyable ? (\n <button\n class=\"button-tertiary button-icon-only\"\n aria-label=\"copy\"\n onClick={this.copyMessage}\n onMouseDown={this.#buttonMouseDownHandler}\n >\n <ch-image class=\"icon-md\" src={COPY_ICON}></ch-image>\n </button>\n ) : null;\n };\n\n render() {\n return (\n <li\n class={{\n \"message\": true,\n \"message--visible\": this.visible && !this.hidden,\n [`message--${[this.messageType]}`]: true,\n \"message--assistant\": this.messageType !== \"user\",\n \"message--copyable\": this.copyable,\n \"message--copying\": this.showCopiedMessage\n }}\n >\n <div class=\"message__outer-wrapper\">\n <div\n class={{\n \"message__inner-wrapper\": true\n }}\n >\n {this.messageType === \"user\" ? (\n <div class=\"message__header\">\n <span class=\"message__role message__role--user\">\n <span class=\"message__role-description\">\n {this._componentLocale.you}\n </span>\n </span>\n {this.evaluateCopyIcon()}\n </div>\n ) : (\n <div\n class={{\n \"message__header\": true,\n \"message__header--in-progress\":\n this.messageType === \"assistant-in-progress\"\n }}\n >\n <span\n class={{\n \"message__role\":\n this.messageType !== \"assistant-in-progress\",\n \"message__role--hidden\":\n this.messageType === \"assistant-in-progress\",\n \"message__role--assistant\": true\n }}\n >\n <span class=\"message__role-description\">\n {this._componentLocale.assistant}\n </span>\n </span>\n {this.evaluateCopyIcon()}\n </div>\n )}\n <div\n class={{\n \"message__caption\": true,\n \"message__caption--in-progress\":\n this.messageType === \"assistant-in-progress\"\n }}\n >\n {this.showCopiedMessage ? (\n <span class=\"copied\">\n <ch-image class=\"icon-md\" src={COPY_ICON}></ch-image>\n {this.translations[\"copied\"]}\n </span>\n ) : null}\n {hiChar(this.message, this.filterValue)}\n </div>\n {this.messageType === \"assistant-in-progress\" ? (\n <div class=\"animation-wrapper\">\n <div class=\"dot-pulse\"></div>\n </div>\n ) : null}\n </div>\n </div>\n </li>\n );\n }\n}\n\nexport type Translations = {\n [key: string]: string;\n};\n"],"version":3}
1
+ {"file":"ai-message.js","mappings":"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","names":[],"sources":["src/components/ai-assistant/ai-message.scss?tag=gx-ide-ai-message","src/components/ai-assistant/ai-message.tsx"],"sourcesContent":["@import \"../../global/gx-ide-mixins.scss\";\n\n:host {\n font-family: var(--mer-font-family--primary);\n}\n/*--- Messages ---*/\n.message {\n color: var(--mer-color__neutral-gray--100);\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 100ms;\n transition: grid-template-rows 100ms, -ms-grid-rows 100ms;\n &__outer-wrapper {\n overflow: hidden;\n }\n &__inner-wrapper {\n padding: var(--mer-spacing--sm) var(--mer-spacing--sm);\n border-radius: var(--mer-border__radius--sm);\n border-inline-start: var(--mer-border__width--md) solid transparent;\n background-color: var(--mer-color__neutral-gray--1200);\n margin-block-start: var(--mer-spacing--xs);\n position: relative;\n }\n &__header {\n display: flex;\n gap: var(--mer-spacing--xs);\n justify-content: space-between;\n\n .icon-md {\n opacity: 0;\n }\n\n &--in-progress {\n display: contents;\n }\n }\n &__role {\n &:before {\n content: \"\";\n display: grid;\n place-self: center flex-end;\n inline-size: 4px;\n block-size: 4px;\n border-radius: 50%;\n background-color: currentcolor;\n }\n\n font-weight: var(--mer-font__weight--semi-bold);\n margin-block-end: var(--mer-spacing--xs);\n display: inline-grid;\n grid-template-columns: max-content 1fr;\n gap: 8px;\n\n &-description {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: inline-block;\n padding-block-start: 2px;\n }\n &--user {\n color: var(--mer-color__primary--300);\n }\n &--assistant {\n }\n &--hidden {\n display: none;\n }\n }\n &__caption {\n font-size: var(--mer-font__size--xs);\n line-height: var(--mer-line-height--regular);\n }\n &--visible {\n grid-template-rows: 1fr;\n }\n &--copying {\n pointer-events: none;\n span:not(.copied),\n .message__caption {\n color: transparent;\n -webkit-user-select: none; /* Safari */\n -ms-user-select: none; /* IE 10 and IE 11 */\n user-select: none; /* Standard syntax */\n }\n }\n /*--- Types of messages ---*/\n &--user {\n .message__inner-wrapper {\n background-color: rgba(91, 167, 255, 0.08);\n border-color: var(--mer-border-color__primary);\n }\n }\n &--assistant-action {\n .message__inner-wrapper {\n background-color: rgba(63, 168, 155, 0.05);\n border-color: var(--mer-border-color__success);\n }\n }\n &--assistant-chat {\n .message__inner-wrapper {\n background-color: var(--mer-surface__elevation--01);\n }\n }\n &--assistant-in-progress {\n color: var(--mer-color__neutral-gray--500);\n .message__inner-wrapper {\n font-style: italic;\n display: grid;\n grid-template-columns: 1fr auto;\n gap: var(--mer-spacing--xs);\n\n .message__caption {\n flex: 1;\n }\n .animation-wrapper {\n flex: none;\n }\n }\n }\n &--assistant-error {\n .message__inner-wrapper {\n background-color: rgba(251, 124, 132, 0.05);\n border-color: var(--mer-border-color__error);\n }\n }\n &--copyable {\n &:hover {\n filter: brightness(1.2);\n .icon-md {\n opacity: 1;\n }\n }\n }\n &:last-child {\n margin-block-end: 0;\n }\n}\n:host(:first-child) {\n .message {\n &__inner-wrapper {\n margin-block-end: 0;\n }\n }\n}\n\n/*--- Dot Pulse Sweet Animation ---*/\n.animation-wrapper {\n width: 45px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n$color: var(--mer-color__neutral-gray--400);\n.dot-pulse {\n position: relative;\n left: -9999px;\n width: 5px;\n height: 5px;\n border-radius: 2.5px;\n background-color: $color;\n color: $color;\n box-shadow: 9999px 0 0 -5px;\n animation: dot-pulse 1.5s infinite linear;\n animation-delay: 0.25s;\n &::before,\n &::after {\n content: \"\";\n display: inline-block;\n position: absolute;\n top: 0;\n width: 5px;\n height: 5px;\n border-radius: 2.5px;\n background-color: $color;\n color: $color;\n }\n &::before {\n box-shadow: 9984px 0 0 -5px;\n animation: dot-pulse-before 1.5s infinite linear;\n animation-delay: 0s;\n }\n &::after {\n box-shadow: 10014px 0 0 -5px;\n animation: dot-pulse-after 1.5s infinite linear;\n animation-delay: 0.5s;\n }\n}\n@keyframes dot-pulse-before {\n 0% {\n box-shadow: 9984px 0 0 -5px;\n }\n 30% {\n box-shadow: 9984px 0 0 2px;\n }\n 60%,\n 100% {\n box-shadow: 9984px 0 0 -5px;\n }\n}\n@keyframes dot-pulse {\n 0% {\n box-shadow: 9999px 0 0 -5px;\n }\n 30% {\n box-shadow: 9999px 0 0 2px;\n }\n 60%,\n 100% {\n box-shadow: 9999px 0 0 -5px;\n }\n}\n@keyframes dot-pulse-after {\n 0% {\n box-shadow: 10014px 0 0 -5px;\n }\n 30% {\n box-shadow: 10014px 0 0 2px;\n }\n 60%,\n 100% {\n box-shadow: 10014px 0 0 -5px;\n }\n}\n\n/*--- Copy Message ---*/\n.copied {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mer-color__neutral-gray--300);\n display: flex;\n gap: var(--mer-spacing--xs);\n opacity: 0;\n animation: fadeIn var(--mer-timing--regular) ease-out forwards;\n}\n\n@keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@include hiChar;\n","import { Component, h, Prop, Element, State } from \"@stencil/core\";\n\nimport { getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { MessageType } from \"./ai-assistant\";\nimport { hiChar } from \"../../common/helpers\";\n\nconst COPY_ICON = getIconPath({\n category: \"bpm\",\n name: \"tasks\",\n colorType: \"neutral\"\n});\n\n@Component({\n tag: \"gx-ide-ai-message\",\n styleUrl: \"ai-message.scss\",\n shadow: false,\n assetsDirs: [\"gx-ide-assets/ai-message\"]\n})\nexport class GxIdeAiMessage {\n /* The message allows to be copied*/\n private _componentLocale: any;\n private copyable = false;\n\n @Element() el: HTMLGxIdeAiMessageElement;\n\n /**\n * This wil display the message if true\n */\n @State() visible = false;\n\n /**\n * This wil show the user a text, indicating that the message has been copied\n */\n @State() showCopiedMessage = false;\n\n /**\n * A reference to the gx-ide-ai-assistant host element\n */\n @Prop() readonly aiAssistantHostRef: HTMLGxIdeAiAssistantElement;\n\n /**\n * The actual message\n */\n @Prop() readonly message: string;\n\n /**\n * The message type\n */\n @Prop() readonly messageType: MessageType;\n\n /**\n * The filter value\n */\n @Prop() readonly filterValue: string;\n\n /**\n * It hides the message (used for the filter)\n */\n @Prop() readonly hidden: boolean;\n\n /**\n * An object with the needed string translations.\n */\n @Prop() readonly translations: Translations;\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n this.evaluateMessageIsCopyable();\n }\n\n componentDidRender() {\n setTimeout(() => {\n /* Without the timeout it appears instantly (no apparent transition)*/\n this.visible = true;\n const messagesList = this.el.parentElement;\n messagesList.scrollTo(0, 0);\n }, 0);\n }\n\n private copyMessage = () => {\n navigator.clipboard.writeText(this.message);\n this.showCopiedMessage = true;\n setTimeout(() => {\n this.showCopiedMessage = false;\n }, 1500);\n };\n\n #buttonMouseDownHandler = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n private evaluateMessageIsCopyable = () => {\n this.copyable = this.messageType !== \"assistant-in-progress\";\n };\n\n private evaluateCopyIcon = () => {\n return this.copyable ? (\n <button\n class=\"button-tertiary button-icon-only\"\n aria-label=\"copy\"\n onClick={this.copyMessage}\n onMouseDown={this.#buttonMouseDownHandler}\n >\n <ch-image class=\"icon-md\" src={COPY_ICON}></ch-image>\n </button>\n ) : null;\n };\n\n render() {\n return (\n <li\n class={{\n \"message\": true,\n \"message--visible\": this.visible && !this.hidden,\n [`message--${[this.messageType]}`]: true,\n \"message--assistant\": this.messageType !== \"user\",\n \"message--copyable\": this.copyable,\n \"message--copying\": this.showCopiedMessage\n }}\n >\n <div class=\"message__outer-wrapper\">\n <div\n class={{\n \"message__inner-wrapper\": true\n }}\n >\n {this.messageType === \"user\" ? (\n <div class=\"message__header\">\n <span class=\"message__role message__role--user\">\n <span class=\"message__role-description\">\n {this._componentLocale.you}\n </span>\n </span>\n {this.evaluateCopyIcon()}\n </div>\n ) : (\n <div\n class={{\n \"message__header\": true,\n \"message__header--in-progress\":\n this.messageType === \"assistant-in-progress\"\n }}\n >\n <span\n class={{\n \"message__role\":\n this.messageType !== \"assistant-in-progress\",\n \"message__role--hidden\":\n this.messageType === \"assistant-in-progress\",\n \"message__role--assistant\": true\n }}\n >\n <span class=\"message__role-description\">\n {this._componentLocale.assistant}\n </span>\n </span>\n {this.evaluateCopyIcon()}\n </div>\n )}\n <div\n class={{\n \"message__caption\": true,\n \"message__caption--in-progress\":\n this.messageType === \"assistant-in-progress\"\n }}\n >\n {this.showCopiedMessage ? (\n <span class=\"copied\">\n <ch-image class=\"icon-md\" src={COPY_ICON}></ch-image>\n {this.translations[\"copied\"]}\n </span>\n ) : null}\n {hiChar(this.message, this.filterValue)}\n </div>\n {this.messageType === \"assistant-in-progress\" ? (\n <div class=\"animation-wrapper\">\n <div class=\"dot-pulse\"></div>\n </div>\n ) : null}\n </div>\n </div>\n </li>\n );\n }\n}\n\nexport type Translations = {\n [key: string]: string;\n};\n"],"version":3}
@@ -0,0 +1,5 @@
1
+ const g="/";const MERCURY_ALIAS="mer",getIconPath=(e,t=MERCURY_ALIAS)=>{const r=e.colorType?`${g}${e.colorType}`:"";return `${t}${g}${e.category}${g}${e.name}${r}`};
2
+
3
+ export { getIconPath as g };
4
+
5
+ //# sourceMappingURL=assets-manager.js.map
@@ -0,0 +1 @@
1
+ {"file":"assets-manager.js","mappings":"AAAkB,MAAW,CAAC,CAAC,GAAG,CAAmB,MAAC,aAAa,CAAC,KAAK,CAAiN,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;;;","names":[],"sources":["node_modules/@genexus/mercury/dist/assets-manager.js"],"sourcesContent":["\"use strict\";const a={},d={},g=\"/\",u=\":\";export const MERCURY_ALIAS=\"mer\",registerAssets=(e,t,r)=>{a[e]||d[t]||(a[e]=r,d[t]=e)},getAsset=(e,t)=>{const r=d[e]??e,n=a[r];if(!n)return;const o=n.icons[t.category];if(!o)return;const c=o[t.name];if(c)return t.colorType?c[t.colorType]:c},getIconPath=(e,t=MERCURY_ALIAS)=>{const r=e.colorType?`${g}${e.colorType}`:\"\";return`${t}${g}${e.category}${g}${e.name}${r}`},getIconPathExpanded=(e,t,r=MERCURY_ALIAS)=>`${getIconPath(e,r)}${u}${getIconPath(t,r)}`;const l=(e,t,r)=>{const n=t===MERCURY_ALIAS?\"\":`-${t}`;return r?`var(--icon${n}__${e}--${r})`:`var(--icon${n}__${e})`},f=e=>{const t=e.split(g),r=t[0],n=d[r]??r;if(!a[n]){const i=t[0],S=t[1],p=t[2];return{vendor:MERCURY_ALIAS,category:i,name:S,colorType:p}}const c=t[1],s=t[2],m=t[3];return{vendor:r,category:c,name:s,colorType:m}};export const getImagePathCallback=e=>{const{vendor:t,category:r,name:n,colorType:o}=f(e),c=getAsset(t,o?{category:r,name:n,colorType:o}:{category:r,name:n});if(!c)return;const s={base:l(c.enabled.name,t)};return c.hover&&(s.hover=l(c.hover.name,t)),c.active&&(s.active=l(c.active.name,t)),c.disabled&&(s.disabled=l(c.disabled.name,t)),s},getActionMenuImagePathCallback=(e,t)=>{if(!e.startImgSrc&&t===\"start\"||!e.endImgSrc&&t===\"end\")return;const r=t===\"start\"?e.startImgSrc:e.endImgSrc;return getImagePathCallback(r)},getActionListImagePathCallback=e=>e.imgSrc?getImagePathCallback(e.imgSrc):void 0,getNavigationListImagePathCallback=e=>e.startImgSrc?getImagePathCallback(e.startImgSrc):void 0,getTreeViewImagePathCallback=(e,t)=>{if(!e.startImgSrc&&t===\"start\"||!e.endImgSrc&&t===\"end\")return;const n=(t===\"start\"?e.startImgSrc:e.endImgSrc).split(u),o=getImagePathCallback(n[0]);if(o)return n[1]?{default:o,expanded:getImagePathCallback(n[1])}:{default:o}},getComboBoxImagePathCallback=(e,t)=>{if(!e.startImgSrc&&t===\"start\"||!e.endImgSrc&&t===\"end\")return;const r=t===\"start\"?e.startImgSrc:e.endImgSrc;return getImagePathCallback(r)},getImagePathCallbackDefinitions={\"ch-accordion-render\":getImagePathCallback,\"ch-action-menu-render\":getActionMenuImagePathCallback,\"ch-action-list-render\":getActionListImagePathCallback,\"ch-combo-box-render\":getComboBoxImagePathCallback,\"ch-navigation-list-render\":getNavigationListImagePathCallback,\"ch-checkbox\":getImagePathCallback,\"ch-edit\":getImagePathCallback,\"ch-image\":getImagePathCallback,\"ch-tree-view-render\":getTreeViewImagePathCallback};\n"],"version":3}
@@ -1,5 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
2
- import { g as getIconPath } from './MERCURY_ASSETS.js';
2
+ import { g as getIconPath } from './assets-manager.js';
3
+ import './MERCURY_ASSETS.js';
3
4
 
4
5
  const chatContainerCss = ".chat-container{display:grid;block-size:100%;overflow:auto;grid-template-rows:max-content 1fr max-content;gap:var(--mer-spacing--xs);padding:var(--mer-spacing--xs);position:relative;--chat-common-border-radius:var(--mer-spacing--2xs)}.section{display:contents}.chat-container__header{padding:var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--sm);display:flex;align-items:center;gap:var(--mer-spacing--sm);justify-content:space-between}.chat-container__ch-chat{overflow:auto;position:relative;display:grid}.chat-container__header,.chat-container__footer{padding:var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--2xs) var(--mer-spacing--sm);border-radius:var(--chat-common-border-radius)}.chat-container__conversation-copied{position:absolute;z-index:1;inline-size:100%;block-size:100%;background:rgba(22, 22, 23, 0.75);backdrop-filter:saturate(180%) blur(20px);display:grid;align-items:center;justify-content:center;text-align:center;padding:32px;--mer-icon__box--md:18px;pointer-events:none;overflow:hidden;animation:fadeIn 100ms ease-in-out forwards;opacity:0}.chat-container__conversation-copied-wrapper{display:flex;align-items:center;gap:var(--mer-spacing--sm)}.chat-container__conversation-copied-wrapper{animation:liftUp var(--mer-timing--fast) ease-in-out forwards;inset-block-start:4px;opacity:0;animation-delay:var(--mer-timing--fast);position:relative}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes liftUp{from{opacity:0;inset-block-start:4px}to{opacity:1;inset-block-start:0}}.chat::part(message){position:relative;--copy-button-opacity:0;--copied-to-clipboard-opacity:0;--date-opacity:1}.chat::part(message__time),.chat::part(message__copy-button){transition:opacity var(--mer-timing--super-fast) ease-in-out}.chat::part(message__time){opacity:var(--date-opacity)}.chat::part(message):hover{position:relative;--copy-button-opacity:1;--date-opacity:0}.chat::part(message__copy-button){position:absolute;z-index:1;inset-inline-end:0;padding:var(--mer-spacing--sm);transition:opacity var(--mer-timing--fast) ease-in-out;opacity:var(--copy-button-opacity)}.chat::part(message__copy-button)::after{content:\"\";inline-size:var(--mer-icon__box--md);block-size:var(--mer-icon__box--md);background:no-repeat center/var(--mer-icon__size--md) var(--icon-path);--icon-path:var(--icon__system_copy_primary--enabled)}.chat::part(message__copy-button):hover::after{--icon-path:var(--icon__system_copy_primary--hover)}.chat::part(message__copy-button):active::after{--icon-path:var(--icon__system_copy_primary--active)}.chat::part(message__copied-feedback){transition:opacity 150ms ease-in-out;position:absolute;inline-size:100%;block-size:100%;display:flex;align-items:center;justify-content:center;z-index:2;background:rgba(22, 22, 23, 0.8);backdrop-filter:saturate(180%) blur(20px);opacity:var(--copied-to-clipboard-opacity);pointer-events:none}.chat::part(message__copied-feedback-visible){--copied-to-clipboard-opacity:1;pointer-events:visible}.chat::part(send-container){gap:var(--mer-spacing--xs)}.chat::part(send-input){--control__padding-block:7px !important}.chat::part(send-button){border-width:var(--control__border-width);border-style:var(--control__border-style);border-color:var(--control__border-color);border-radius:var(--control__border-radius);inline-size:32px;block-size:32px;background:no-repeat center/var(--mer-icon__box--md) var(--icon-path);--icon-path:var(--icon__system_send_primary--enabled)}.chat::part(send-button):hover{--icon-path:var(--icon__system_send_primary--hover);--control__border-color:var(--mer-text__primary--hover)}.chat::part(send-button):active{--icon-path:var(--icon__system_send_primary--active);--control__border-color:var(--mer-border-color__primary--active)}";
5
6
 
@@ -16,6 +17,11 @@ const COPY_ICON = getIconPath({
16
17
  name: "copy",
17
18
  colorType: "neutral"
18
19
  });
20
+ const DELETE_ICON = getIconPath({
21
+ category: "system",
22
+ name: "delete-outlined",
23
+ colorType: "error"
24
+ });
19
25
  const CONVERSATION_ICON = getIconPath({
20
26
  category: "objects",
21
27
  name: "conversational-flows"
@@ -26,6 +32,7 @@ const GxIdeChatContainer = /*@__PURE__*/ proxyCustomElement(class GxIdeChatConta
26
32
  this.__registerHost();
27
33
  this.chatTitle = undefined;
28
34
  this.copyConversationCallback = undefined;
35
+ this.deleteConversationCallback = undefined;
29
36
  this.displayConversationCopiedMessage = false;
30
37
  }
31
38
  /**
@@ -38,13 +45,17 @@ const GxIdeChatContainer = /*@__PURE__*/ proxyCustomElement(class GxIdeChatConta
38
45
  }, 2000);
39
46
  }
40
47
  render() {
41
- const renderHeader = this.chatTitle || this.copyConversationCallback;
42
- return (h(Host, { class: "chat-container" }, h("ch-theme", { model: CSS_BUNDLES }), h("section", { class: "section" }, renderHeader && (h("header", { class: "chat-container__header elevation-1 body-italic-m" }, this.chatTitle && this.chatTitle, this.copyConversationCallback && (h("button", { class: "button-secondary button-icon-only", onClick: this.copyConversationCallback }, h("ch-image", { class: "icon-md", src: COPY_ICON, onClick: this.copyConversationCallback }))))), h("section", { class: "chat-container__ch-chat" }, h("slot", null), this.displayConversationCopiedMessage && (h("div", { class: "chat-container__conversation-copied" }, h("div", { class: "chat-container__conversation-copied-wrapper" }, h("ch-image", { class: "icon-md", src: CONVERSATION_ICON }), h("p", { class: "body-regular-l" }, "conversation copied"))))))));
48
+ const renderHeader = this.chatTitle ||
49
+ this.copyConversationCallback ||
50
+ this.deleteConversationCallback;
51
+ const renderButtonsGroup = this.copyConversationCallback || this.deleteConversationCallback;
52
+ return (h(Host, { class: "chat-container" }, h("ch-theme", { model: CSS_BUNDLES }), h("section", { class: "section" }, renderHeader && (h("header", { class: "chat-container__header elevation-1 body-italic-m" }, this.chatTitle && this.chatTitle, renderButtonsGroup && (h("div", { class: "buttons-spacer" }, this.deleteConversationCallback && (h("button", { class: "button-secondary button-icon-only", onClick: this.deleteConversationCallback }, h("ch-image", { class: "icon-md", src: DELETE_ICON }))), this.copyConversationCallback && (h("button", { class: "button-secondary button-icon-only", onClick: this.copyConversationCallback }, h("ch-image", { class: "icon-md", src: COPY_ICON }))))))), h("section", { class: "chat-container__ch-chat" }, h("slot", null), this.displayConversationCopiedMessage && (h("div", { class: "chat-container__conversation-copied" }, h("div", { class: "chat-container__conversation-copied-wrapper" }, h("ch-image", { class: "icon-md", src: CONVERSATION_ICON }), h("p", { class: "body-regular-l" }, "conversation copied"))))))));
43
53
  }
44
54
  static get style() { return chatContainerCss; }
45
55
  }, [4, "gx-ide-chat-container", {
46
56
  "chatTitle": [1, "chat-title"],
47
57
  "copyConversationCallback": [16],
58
+ "deleteConversationCallback": [16],
48
59
  "displayConversationCopiedMessage": [32],
49
60
  "showCopyConversationMessage": [64]
50
61
  }]);
@@ -1 +1 @@
1
- {"file":"chat-container.js","mappings":";;;AAAA,MAAM,gBAAgB,GAAG,isHAAisH;;ACG1tH,MAAM,WAAW,GAAmB;IAClC,mBAAmB;IACnB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;CAClB,CAAC;AAEF,MAAM,SAAS,GAAG,WAAW,CAAC;IAC5B,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,SAAS;CACrB,CAAC,CAAC;AACH,MAAM,iBAAiB,GAAG,WAAW,CAAC;IACpC,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,sBAAsB;CAC7B,CAAC,CAAC;MAOU,kBAAkB;;;;;;gDAcwB,KAAK;;;;;IAM1D,MAAM,2BAA2B;QAC/B,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC;QAC7C,UAAU,CAAC;YACT,IAAI,CAAC,gCAAgC,GAAG,KAAK,CAAC;SAC/C,EAAE,IAAI,CAAC,CAAC;KACV;IAED,MAAM;QACJ,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,wBAAwB,CAAC;QACrE,QACE,EAAC,IAAI,IAAC,KAAK,EAAC,gBAAgB,IAC1B,gBAAU,KAAK,EAAE,WAAW,GAAa,EACzC,eAAS,KAAK,EAAC,SAAS,IACrB,YAAY,KACX,cAAQ,KAAK,EAAC,kDAAkD,IAC7D,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAChC,IAAI,CAAC,wBAAwB,KAC5B,cACE,KAAK,EAAC,mCAAmC,EACzC,OAAO,EAAE,IAAI,CAAC,wBAAwB,IAEtC,gBACE,KAAK,EAAC,SAAS,EACf,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,IAAI,CAAC,wBAAwB,GAC5B,CACL,CACV,CACM,CACV,EACD,eAAS,KAAK,EAAC,yBAAyB,IACtC,eAAa,EACZ,IAAI,CAAC,gCAAgC,KACpC,WAAK,KAAK,EAAC,qCAAqC,IAC9C,WAAK,KAAK,EAAC,6CAA6C,IACtD,gBAAU,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,iBAAiB,GAAa,EAC7D,SAAG,KAAK,EAAC,gBAAgB,0BAAwB,CAC7C,CACF,CACP,CACO,CAEF,CACL,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/_helpers/chat-container/chat-container.scss?tag=gx-ide-chat-container","src/components/_helpers/chat-container/chat-container.tsx"],"sourcesContent":[".chat-container {\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n gap: var(--mer-spacing--xs);\n padding: var(--mer-spacing--xs);\n position: relative;\n --chat-common-border-radius: var(--mer-spacing--2xs);\n}\n.section {\n display: contents;\n}\n\n// header\n.chat-container__header {\n padding: var(--mer-spacing--2xs) var(--mer-spacing--2xs)\n var(--mer-spacing--2xs) var(--mer-spacing--sm);\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n justify-content: space-between;\n}\n\n// ch-chat container\n.chat-container__ch-chat {\n overflow: auto;\n position: relative;\n display: grid;\n}\n\n// footer\n\n// header & footer (common styles)\n.chat-container__header,\n.chat-container__footer {\n padding: var(--mer-spacing--2xs) var(--mer-spacing--2xs)\n var(--mer-spacing--2xs) var(--mer-spacing--sm);\n border-radius: var(--chat-common-border-radius);\n}\n\n.chat-container__conversation-copied {\n position: absolute;\n z-index: 1;\n inline-size: 100%;\n block-size: 100%;\n background: rgba(22, 22, 23, 0.75);\n backdrop-filter: saturate(180%) blur(20px);\n display: grid;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 32px;\n --mer-icon__box--md: 18px;\n pointer-events: none;\n overflow: hidden;\n animation: fadeIn 100ms ease-in-out forwards;\n opacity: 0;\n}\n.chat-container__conversation-copied-wrapper {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n}\n.chat-container__conversation-copied-wrapper {\n animation: liftUp var(--mer-timing--fast) ease-in-out forwards;\n inset-block-start: 4px;\n opacity: 0;\n animation-delay: var(--mer-timing--fast);\n position: relative;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes liftUp {\n from {\n opacity: 0;\n inset-block-start: 4px;\n }\n to {\n opacity: 1;\n inset-block-start: 0;\n }\n}\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - -\n// ch-chat overrides TODO: move this styles to Mercury\n// - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n.chat::part(message) {\n position: relative;\n --copy-button-opacity: 0;\n --copied-to-clipboard-opacity: 0;\n --date-opacity: 1;\n}\n.chat::part(message__time),\n.chat::part(message__copy-button) {\n transition: opacity var(--mer-timing--super-fast) ease-in-out;\n}\n.chat::part(message__time) {\n opacity: var(--date-opacity);\n}\n.chat::part(message):hover {\n position: relative;\n --copy-button-opacity: 1;\n --date-opacity: 0;\n}\n.chat::part(message__copy-button) {\n position: absolute;\n z-index: 1;\n inset-inline-end: 0;\n padding: var(--mer-spacing--sm); // same as part::(message)\n transition: opacity var(--mer-timing--fast) ease-in-out;\n opacity: var(--copy-button-opacity);\n\n &::after {\n content: \"\";\n inline-size: var(--mer-icon__box--md);\n block-size: var(--mer-icon__box--md);\n background: no-repeat center / var(--mer-icon__size--md) var(--icon-path);\n --icon-path: var(--icon__system_copy_primary--enabled);\n }\n &:hover::after {\n --icon-path: var(--icon__system_copy_primary--hover);\n }\n &:active::after {\n --icon-path: var(--icon__system_copy_primary--active);\n }\n}\n\n// // copy button effect\n.chat::part(message__copied-feedback) {\n transition: opacity 150ms ease-in-out;\n position: absolute;\n inline-size: 100%;\n block-size: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n background: rgba(22, 22, 23, 0.8);\n backdrop-filter: saturate(180%) blur(20px);\n opacity: var(--copied-to-clipboard-opacity);\n pointer-events: none;\n}\n\n.chat::part(message__copied-feedback-visible) {\n --copied-to-clipboard-opacity: 1;\n pointer-events: visible;\n}\n\n// send button\n\n.chat::part(send-container) {\n gap: var(--mer-spacing--xs);\n}\n.chat::part(send-input) {\n --control__padding-block: 7px !important;\n}\n\n.chat::part(send-button) {\n border-width: var(--control__border-width);\n border-style: var(--control__border-style);\n border-color: var(--control__border-color);\n border-radius: var(--control__border-radius);\n inline-size: 32px;\n block-size: 32px;\n background: no-repeat center / var(--mer-icon__box--md) var(--icon-path);\n --icon-path: var(--icon__system_send_primary--enabled);\n}\n.chat::part(send-button):hover {\n --icon-path: var(--icon__system_send_primary--hover);\n --control__border-color: var(--mer-text__primary--hover);\n}\n.chat::part(send-button):active {\n --icon-path: var(--icon__system_send_primary--active);\n --control__border-color: var(--mer-border-color__primary--active);\n}\n","import { Component, Host, h, Prop, Method, State } from \"@stencil/core\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"chameleon/scrollbar\",\n \"components/button\",\n \"components/icon\",\n \"utils/elevation\"\n];\n\nconst COPY_ICON = getIconPath({\n category: \"system\",\n name: \"copy\",\n colorType: \"neutral\"\n});\nconst CONVERSATION_ICON = getIconPath({\n category: \"objects\",\n name: \"conversational-flows\"\n});\n\n@Component({\n tag: \"gx-ide-chat-container\",\n styleUrl: \"chat-container.scss\",\n shadow: false\n})\nexport class GxIdeChatContainer {\n /**\n * The chat title\n */\n @Prop() readonly chatTitle?: string;\n\n /**\n * If true a button for copying the conversation will be render on the header.s\n */\n @Prop() readonly copyConversationCallback: () => void;\n\n /**\n * Coneration Copied\n */\n @State() displayConversationCopiedMessage: boolean = false;\n\n /**\n * It will display a feedback message that the conversation has been copied\n */\n @Method()\n async showCopyConversationMessage() {\n this.displayConversationCopiedMessage = true;\n setTimeout(() => {\n this.displayConversationCopiedMessage = false;\n }, 2000);\n }\n\n render() {\n const renderHeader = this.chatTitle || this.copyConversationCallback;\n return (\n <Host class=\"chat-container\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n {renderHeader && (\n <header class=\"chat-container__header elevation-1 body-italic-m\">\n {this.chatTitle && this.chatTitle}\n {this.copyConversationCallback && (\n <button\n class=\"button-secondary button-icon-only\"\n onClick={this.copyConversationCallback}\n >\n <ch-image\n class=\"icon-md\"\n src={COPY_ICON}\n onClick={this.copyConversationCallback}\n ></ch-image>\n </button>\n )}\n </header>\n )}\n <section class=\"chat-container__ch-chat\">\n <slot></slot>\n {this.displayConversationCopiedMessage && (\n <div class=\"chat-container__conversation-copied\">\n <div class=\"chat-container__conversation-copied-wrapper\">\n <ch-image class=\"icon-md\" src={CONVERSATION_ICON}></ch-image>\n <p class=\"body-regular-l\">conversation copied</p>\n </div>\n </div>\n )}\n </section>\n {/* <footer class=\"chat-container__footer elevation-1\">footer</footer> */}\n </section>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"chat-container.js","mappings":";;;;AAAA,MAAM,gBAAgB,GAAG,isHAAisH;;ACG1tH,MAAM,WAAW,GAAmB;IAClC,mBAAmB;IACnB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;CAClB,CAAC;AAEF,MAAM,SAAS,GAAG,WAAW,CAAC;IAC5B,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,SAAS;CACrB,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,WAAW,CAAC;IAC9B,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,iBAAiB;IACvB,SAAS,EAAE,OAAO;CACnB,CAAC,CAAC;AACH,MAAM,iBAAiB,GAAG,WAAW,CAAC;IACpC,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,sBAAsB;CAC7B,CAAC,CAAC;MAOU,kBAAkB;;;;;;;gDAmBwB,KAAK;;;;;IAM1D,MAAM,2BAA2B;QAC/B,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC;QAC7C,UAAU,CAAC;YACT,IAAI,CAAC,gCAAgC,GAAG,KAAK,CAAC;SAC/C,EAAE,IAAI,CAAC,CAAC;KACV;IAED,MAAM;QACJ,MAAM,YAAY,GAChB,IAAI,CAAC,SAAS;YACd,IAAI,CAAC,wBAAwB;YAC7B,IAAI,CAAC,0BAA0B,CAAC;QAElC,MAAM,kBAAkB,GACtB,IAAI,CAAC,wBAAwB,IAAI,IAAI,CAAC,0BAA0B,CAAC;QACnE,QACE,EAAC,IAAI,IAAC,KAAK,EAAC,gBAAgB,IAC1B,gBAAU,KAAK,EAAE,WAAW,GAAa,EACzC,eAAS,KAAK,EAAC,SAAS,IACrB,YAAY,KACX,cAAQ,KAAK,EAAC,kDAAkD,IAC7D,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAEhC,kBAAkB,KACjB,WAAK,KAAK,EAAC,gBAAgB,IACxB,IAAI,CAAC,0BAA0B,KAC9B,cACE,KAAK,EAAC,mCAAmC,EACzC,OAAO,EAAE,IAAI,CAAC,0BAA0B,IAExC,gBAAU,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,WAAW,GAAa,CAChD,CACV,EAEA,IAAI,CAAC,wBAAwB,KAC5B,cACE,KAAK,EAAC,mCAAmC,EACzC,OAAO,EAAE,IAAI,CAAC,wBAAwB,IAEtC,gBAAU,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,SAAS,GAAa,CAC9C,CACV,CACG,CACP,CACM,CACV,EACD,eAAS,KAAK,EAAC,yBAAyB,IACtC,eAAa,EACZ,IAAI,CAAC,gCAAgC,KACpC,WAAK,KAAK,EAAC,qCAAqC,IAC9C,WAAK,KAAK,EAAC,6CAA6C,IACtD,gBAAU,KAAK,EAAC,SAAS,EAAC,GAAG,EAAE,iBAAiB,GAAa,EAC7D,SAAG,KAAK,EAAC,gBAAgB,0BAAwB,CAC7C,CACF,CACP,CACO,CAEF,CACL,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/_helpers/chat-container/chat-container.scss?tag=gx-ide-chat-container","src/components/_helpers/chat-container/chat-container.tsx"],"sourcesContent":[".chat-container {\n display: grid;\n block-size: 100%;\n overflow: auto;\n grid-template-rows: max-content 1fr max-content;\n gap: var(--mer-spacing--xs);\n padding: var(--mer-spacing--xs);\n position: relative;\n --chat-common-border-radius: var(--mer-spacing--2xs);\n}\n.section {\n display: contents;\n}\n\n// header\n.chat-container__header {\n padding: var(--mer-spacing--2xs) var(--mer-spacing--2xs)\n var(--mer-spacing--2xs) var(--mer-spacing--sm);\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n justify-content: space-between;\n}\n\n// ch-chat container\n.chat-container__ch-chat {\n overflow: auto;\n position: relative;\n display: grid;\n}\n\n// footer\n\n// header & footer (common styles)\n.chat-container__header,\n.chat-container__footer {\n padding: var(--mer-spacing--2xs) var(--mer-spacing--2xs)\n var(--mer-spacing--2xs) var(--mer-spacing--sm);\n border-radius: var(--chat-common-border-radius);\n}\n\n.chat-container__conversation-copied {\n position: absolute;\n z-index: 1;\n inline-size: 100%;\n block-size: 100%;\n background: rgba(22, 22, 23, 0.75);\n backdrop-filter: saturate(180%) blur(20px);\n display: grid;\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 32px;\n --mer-icon__box--md: 18px;\n pointer-events: none;\n overflow: hidden;\n animation: fadeIn 100ms ease-in-out forwards;\n opacity: 0;\n}\n.chat-container__conversation-copied-wrapper {\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--sm);\n}\n.chat-container__conversation-copied-wrapper {\n animation: liftUp var(--mer-timing--fast) ease-in-out forwards;\n inset-block-start: 4px;\n opacity: 0;\n animation-delay: var(--mer-timing--fast);\n position: relative;\n}\n\n@keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes liftUp {\n from {\n opacity: 0;\n inset-block-start: 4px;\n }\n to {\n opacity: 1;\n inset-block-start: 0;\n }\n}\n\n// - - - - - - - - - - - - - - - - - - - - - - - - - -\n// ch-chat overrides TODO: move this styles to Mercury\n// - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n.chat::part(message) {\n position: relative;\n --copy-button-opacity: 0;\n --copied-to-clipboard-opacity: 0;\n --date-opacity: 1;\n}\n.chat::part(message__time),\n.chat::part(message__copy-button) {\n transition: opacity var(--mer-timing--super-fast) ease-in-out;\n}\n.chat::part(message__time) {\n opacity: var(--date-opacity);\n}\n.chat::part(message):hover {\n position: relative;\n --copy-button-opacity: 1;\n --date-opacity: 0;\n}\n.chat::part(message__copy-button) {\n position: absolute;\n z-index: 1;\n inset-inline-end: 0;\n padding: var(--mer-spacing--sm); // same as part::(message)\n transition: opacity var(--mer-timing--fast) ease-in-out;\n opacity: var(--copy-button-opacity);\n\n &::after {\n content: \"\";\n inline-size: var(--mer-icon__box--md);\n block-size: var(--mer-icon__box--md);\n background: no-repeat center / var(--mer-icon__size--md) var(--icon-path);\n --icon-path: var(--icon__system_copy_primary--enabled);\n }\n &:hover::after {\n --icon-path: var(--icon__system_copy_primary--hover);\n }\n &:active::after {\n --icon-path: var(--icon__system_copy_primary--active);\n }\n}\n\n// // copy button effect\n.chat::part(message__copied-feedback) {\n transition: opacity 150ms ease-in-out;\n position: absolute;\n inline-size: 100%;\n block-size: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n background: rgba(22, 22, 23, 0.8);\n backdrop-filter: saturate(180%) blur(20px);\n opacity: var(--copied-to-clipboard-opacity);\n pointer-events: none;\n}\n\n.chat::part(message__copied-feedback-visible) {\n --copied-to-clipboard-opacity: 1;\n pointer-events: visible;\n}\n\n// send button\n\n.chat::part(send-container) {\n gap: var(--mer-spacing--xs);\n}\n.chat::part(send-input) {\n --control__padding-block: 7px !important;\n}\n\n.chat::part(send-button) {\n border-width: var(--control__border-width);\n border-style: var(--control__border-style);\n border-color: var(--control__border-color);\n border-radius: var(--control__border-radius);\n inline-size: 32px;\n block-size: 32px;\n background: no-repeat center / var(--mer-icon__box--md) var(--icon-path);\n --icon-path: var(--icon__system_send_primary--enabled);\n}\n.chat::part(send-button):hover {\n --icon-path: var(--icon__system_send_primary--hover);\n --control__border-color: var(--mer-text__primary--hover);\n}\n.chat::part(send-button):active {\n --icon-path: var(--icon__system_send_primary--active);\n --control__border-color: var(--mer-border-color__primary--active);\n}\n","import { Component, Host, h, Prop, Method, State } from \"@stencil/core\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"chameleon/scrollbar\",\n \"components/button\",\n \"components/icon\",\n \"utils/elevation\"\n];\n\nconst COPY_ICON = getIconPath({\n category: \"system\",\n name: \"copy\",\n colorType: \"neutral\"\n});\nconst DELETE_ICON = getIconPath({\n category: \"system\",\n name: \"delete-outlined\",\n colorType: \"error\"\n});\nconst CONVERSATION_ICON = getIconPath({\n category: \"objects\",\n name: \"conversational-flows\"\n});\n\n@Component({\n tag: \"gx-ide-chat-container\",\n styleUrl: \"chat-container.scss\",\n shadow: false\n})\nexport class GxIdeChatContainer {\n /**\n * The chat title\n */\n @Prop() readonly chatTitle?: string;\n\n /**\n * If true a button for copying the conversation will be render on the header\n */\n @Prop() readonly copyConversationCallback: () => void;\n\n /**\n * If true a button for deleting the conversation will be render on the header\n */\n @Prop() readonly deleteConversationCallback: () => void;\n\n /**\n * Coneration Copied\n */\n @State() displayConversationCopiedMessage: boolean = false;\n\n /**\n * It will display a feedback message that the conversation has been copied\n */\n @Method()\n async showCopyConversationMessage() {\n this.displayConversationCopiedMessage = true;\n setTimeout(() => {\n this.displayConversationCopiedMessage = false;\n }, 2000);\n }\n\n render() {\n const renderHeader =\n this.chatTitle ||\n this.copyConversationCallback ||\n this.deleteConversationCallback;\n\n const renderButtonsGroup =\n this.copyConversationCallback || this.deleteConversationCallback;\n return (\n <Host class=\"chat-container\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n {renderHeader && (\n <header class=\"chat-container__header elevation-1 body-italic-m\">\n {this.chatTitle && this.chatTitle}\n\n {renderButtonsGroup && (\n <div class=\"buttons-spacer\">\n {this.deleteConversationCallback && (\n <button\n class=\"button-secondary button-icon-only\"\n onClick={this.deleteConversationCallback}\n >\n <ch-image class=\"icon-md\" src={DELETE_ICON}></ch-image>\n </button>\n )}\n\n {this.copyConversationCallback && (\n <button\n class=\"button-secondary button-icon-only\"\n onClick={this.copyConversationCallback}\n >\n <ch-image class=\"icon-md\" src={COPY_ICON}></ch-image>\n </button>\n )}\n </div>\n )}\n </header>\n )}\n <section class=\"chat-container__ch-chat\">\n <slot></slot>\n {this.displayConversationCopiedMessage && (\n <div class=\"chat-container__conversation-copied\">\n <div class=\"chat-container__conversation-copied-wrapper\">\n <ch-image class=\"icon-md\" src={CONVERSATION_ICON}></ch-image>\n <p class=\"body-regular-l\">conversation copied</p>\n </div>\n </div>\n )}\n </section>\n {/* <footer class=\"chat-container__footer elevation-1\">footer</footer> */}\n </section>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -0,0 +1,47 @@
1
+ import { h } from '@stencil/core/internal/client';
2
+ import './MERCURY_ASSETS.js';
3
+
4
+ const MESSAGE_COPIED_PART_SELECTOR = "message__copied-feedback";
5
+ const MESSAGE_COPIED_VISIBLE_PART_SELECTOR = "message__copied-feedback-visible";
6
+ const copy = (text) => (event) => {
7
+ event.stopPropagation();
8
+ // 1. Copy message
9
+ navigator.clipboard.writeText(text);
10
+ // 2. Display "copied" message (expects to be the next sibling!)
11
+ const copiedFeedbackRef = event.target
12
+ .nextSibling;
13
+ const copiedFeedbackPart = copiedFeedbackRef.getAttribute("part");
14
+ if (copiedFeedbackPart === MESSAGE_COPIED_PART_SELECTOR) {
15
+ copiedFeedbackRef.setAttribute("part", `${MESSAGE_COPIED_PART_SELECTOR} ${MESSAGE_COPIED_VISIBLE_PART_SELECTOR}`);
16
+ setTimeout(() => {
17
+ copiedFeedbackRef.setAttribute("part", `${MESSAGE_COPIED_PART_SELECTOR}`);
18
+ }, 1000);
19
+ }
20
+ };
21
+ const copyButton = (textToCopy, accessibleName, additionalPart) => {
22
+ return (h("button", { "aria-label": accessibleName, title: accessibleName, class: "button-copy-code", type: "button", onClick: copy(textToCopy), part: `message__copy-button ${additionalPart}` }));
23
+ };
24
+ const mercuryCodeRender = (copyButtonAccessibleName) => (options) => (h("div", { class: "code-block-container" },
25
+ h("div", { class: "code-block-header" }, copyButton(options.plainText, copyButtonAccessibleName, "code-render")),
26
+ h("ch-code", { language: options.language, lastNestedChildClass: options.lastNestedChildClass, value: options.plainText })));
27
+ const mercuryChatMessageRender = (theme) => (messageModel) => messageModel.role === "assistant" && messageModel.status === "waiting"
28
+ ? [
29
+ h("span", { part: "message__processing" }, "Processing request"),
30
+ h("div", { class: "processing-animation", part: "processing-animation" })
31
+ ]
32
+ : [
33
+ // "copy button" before "role" and "time" to hide both on button:focus
34
+ copyButton(messageModel.content, "Copy code", "common-message"),
35
+ h("p", { part: MESSAGE_COPIED_PART_SELECTOR }, "message copied to clipboard"),
36
+ h("span", { part: `message__role ${messageModel.role}` }, messageModel.role === "user" ? "You" : "GeneXus Code Fixer"),
37
+ h("time", { dateTime: messageModel.metadata, part: "message__time" }, messageModel.metadata),
38
+ messageModel.role === "user" ? (h("span", { part: "message__content user" }, messageModel.content)) : (h("ch-markdown-viewer", { part: messageModel.role === "assistant" &&
39
+ (messageModel.status === "complete" || !messageModel.status) &&
40
+ !messageModel.parts
41
+ ? `message__content no-error`
42
+ : "message__content", theme: theme, showIndicator: false, renderCode: mercuryCodeRender("Copy code"), value: messageModel.content }))
43
+ ];
44
+
45
+ export { mercuryCodeRender as a, mercuryChatMessageRender as m };
46
+
47
+ //# sourceMappingURL=code-render.js.map
@@ -0,0 +1 @@
1
+ {"file":"code-render.js","mappings":";;;AASA,MAAM,4BAA4B,GAAG,0BAA0B,CAAC;AAChE,MAAM,oCAAoC,GAAG,kCAAkC,CAAC;AAEhF,MAAM,IAAI,GAAG,CAAC,IAAY,KAAK,CAAC,KAAY;IAC1C,KAAK,CAAC,eAAe,EAAE,CAAC;;IAGxB,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;IAGpC,MAAM,iBAAiB,GAAI,KAAK,CAAC,MAAsB;SACpD,WAA0B,CAAC;IAC9B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,kBAAkB,KAAK,4BAA4B,EAAE;QACvD,iBAAiB,CAAC,YAAY,CAC5B,MAAM,EACN,GAAG,4BAA4B,IAAI,oCAAoC,EAAE,CAC1E,CAAC;QAEF,UAAU,CAAC;YACT,iBAAiB,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,4BAA4B,EAAE,CAAC,CAAC;SAC3E,EAAE,IAAI,CAAC,CAAC;KACV;AACH,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CACjB,UAAkB,EAClB,cAAsB,EACtB,cAAsB;IAEtB,QACE,4BACc,cAAc,EAC1B,KAAK,EAAE,cAAc,EACrB,KAAK,EAAC,kBAAkB,EACxB,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,EACzB,IAAI,EAAE,wBAAwB,cAAc,EAAE,GACtC,EACV;AACJ,CAAC,CAAC;MAEW,iBAAiB,GAC5B,CAAC,wBAAgC,KACjC,CAAC,OAAwC,MAErC,WAAK,KAAK,EAAC,sBAAsB;IAC/B,WAAK,KAAK,EAAC,mBAAmB,IAC3B,UAAU,CACT,OAAO,CAAC,SAAS,EACjB,wBAAwB,EACxB,aAAa,CACd,CACG;IACN,eACE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAClD,KAAK,EAAE,OAAO,CAAC,SAAS,GACf,CACP,EACN;MAEO,wBAAwB,GACnC,CAAC,KAAa,KACd,CAAC,YAA+D,KAC9D,YAAY,CAAC,IAAI,KAAK,WAAW,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS;MAClE;QACE,YAAM,IAAI,EAAC,qBAAqB,yBAA0B;QAE1D,WAAK,KAAK,EAAC,sBAAsB,EAAC,IAAI,EAAC,sBAAsB,GAAO;KACrE;MACD;;QAEE,UAAU,CACR,YAAY,CAAC,OAAiB,EAC9B,WAAW,EACX,gBAAgB,CACjB;QACD,SAAG,IAAI,EAAE,4BAA4B,kCAEjC;QACJ,YAAM,IAAI,EAAE,iBAAiB,YAAY,CAAC,IAAI,EAAE,IAC7C,YAAY,CAAC,IAAI,KAAK,MAAM,GAAG,KAAK,GAAG,oBAAoB,CACvD;QACP,YAAM,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAC,eAAe,IACxD,YAAY,CAAC,QAAQ,CACjB;QAEP,YAAY,CAAC,IAAI,KAAK,MAAM,IAC1B,YAAM,IAAI,EAAC,uBAAuB,IAAE,YAAY,CAAC,OAAO,CAAQ,KAEhE,0BACE,IAAI,EACF,YAAY,CAAC,IAAI,KAAK,WAAW;iBAChC,YAAY,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC5D,CAAC,YAAY,CAAC,KAAK;kBACf,2BAA2B;kBAC3B,kBAAkB,EAExB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,KAAK,EACpB,UAAU,EAAE,iBAAiB,CAAC,WAAW,CAAC,EAC1C,KAAK,EAAE,YAAY,CAAC,OAAiB,GACjB,CACvB;;;;;","names":[],"sources":["src/components/_helpers/chat-container/code-render.tsx"],"sourcesContent":["import { h } from \"@stencil/core\";\nimport {\n MarkdownViewerCodeRender,\n ChatMessageByRole\n} from \"@genexus/chameleon-controls-library\";\nimport { MarkdownViewerCodeRenderOptions } from \"@genexus/chameleon-controls-library/dist/types/components/markdown-viewer/parsers/types\";\nimport { getIconPath } from \"@genexus/mercury\";\ngetIconPath;\n\nconst MESSAGE_COPIED_PART_SELECTOR = \"message__copied-feedback\";\nconst MESSAGE_COPIED_VISIBLE_PART_SELECTOR = \"message__copied-feedback-visible\";\n\nconst copy = (text: string) => (event: Event) => {\n event.stopPropagation();\n\n // 1. Copy message\n navigator.clipboard.writeText(text);\n\n // 2. Display \"copied\" message (expects to be the next sibling!)\n const copiedFeedbackRef = (event.target as HTMLElement)\n .nextSibling as HTMLElement;\n const copiedFeedbackPart = copiedFeedbackRef.getAttribute(\"part\");\n if (copiedFeedbackPart === MESSAGE_COPIED_PART_SELECTOR) {\n copiedFeedbackRef.setAttribute(\n \"part\",\n `${MESSAGE_COPIED_PART_SELECTOR} ${MESSAGE_COPIED_VISIBLE_PART_SELECTOR}`\n );\n\n setTimeout(() => {\n copiedFeedbackRef.setAttribute(\"part\", `${MESSAGE_COPIED_PART_SELECTOR}`);\n }, 1000);\n }\n};\n\nconst copyButton = (\n textToCopy: string,\n accessibleName: string,\n additionalPart: string\n) => {\n return (\n <button\n aria-label={accessibleName}\n title={accessibleName}\n class=\"button-copy-code\"\n type=\"button\"\n onClick={copy(textToCopy)}\n part={`message__copy-button ${additionalPart}`}\n ></button>\n );\n};\n\nexport const mercuryCodeRender =\n (copyButtonAccessibleName: string) =>\n (options: MarkdownViewerCodeRenderOptions): MarkdownViewerCodeRender =>\n (\n <div class=\"code-block-container\">\n <div class=\"code-block-header\">\n {copyButton(\n options.plainText,\n copyButtonAccessibleName,\n \"code-render\"\n )}\n </div>\n <ch-code\n language={options.language}\n lastNestedChildClass={options.lastNestedChildClass}\n value={options.plainText}\n ></ch-code>\n </div>\n );\n\nexport const mercuryChatMessageRender =\n (theme: string) =>\n (messageModel: ChatMessageByRole<\"assistant\" | \"error\" | \"user\">) =>\n messageModel.role === \"assistant\" && messageModel.status === \"waiting\"\n ? [\n <span part=\"message__processing\">Processing request</span>,\n\n <div class=\"processing-animation\" part=\"processing-animation\"></div>\n ]\n : [\n // \"copy button\" before \"role\" and \"time\" to hide both on button:focus\n copyButton(\n messageModel.content as string,\n \"Copy code\",\n \"common-message\"\n ),\n <p part={MESSAGE_COPIED_PART_SELECTOR}>\n message copied to clipboard\n </p>,\n <span part={`message__role ${messageModel.role}`}>\n {messageModel.role === \"user\" ? \"You\" : \"GeneXus Code Fixer\"}\n </span>,\n <time dateTime={messageModel.metadata} part=\"message__time\">\n {messageModel.metadata}\n </time>,\n\n messageModel.role === \"user\" ? (\n <span part=\"message__content user\">{messageModel.content}</span>\n ) : (\n <ch-markdown-viewer\n part={\n messageModel.role === \"assistant\" &&\n (messageModel.status === \"complete\" || !messageModel.status) &&\n !messageModel.parts\n ? `message__content no-error`\n : \"message__content\"\n }\n theme={theme}\n showIndicator={false}\n renderCode={mercuryCodeRender(\"Copy code\")}\n value={messageModel.content as string}\n ></ch-markdown-viewer>\n )\n ];\n"],"version":3}
@@ -1,5 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
- import { g as getIconPath } from './MERCURY_ASSETS.js';
2
+ import { g as getIconPath } from './assets-manager.js';
3
+ import './MERCURY_ASSETS.js';
3
4
  import { L as Locale } from './locale.js';
4
5
 
5
6
  const entitySelectorCss = ".wrapper{display:grid;grid-template-columns:1fr max-content max-content;gap:var(--mer-spacing--xs);border-radius:var(--control__border-radius);border:var(--control__border-width) var(--control__border-style) var(--control__border-color);padding:var(--control__padding-block) var(--control__padding-inline)}.wrapper:hover{--control__border-color:var(--control__border-color--hover)}.input{--control__padding-block:0;--control__padding-inline:0;--control__border-width:0;--focus__outline-width:0}:host(:focus-within) .wrapper{--control__border-color:var(--focus__outline-color)}:host(.entity-selector--button-has-focus) .wrapper{outline:none}:host([disabled]){pointer-events:none}:host([disabled]) .wrapper{background-color:var(--control__background-color--disabled);border-color:var(--control__border-color--disabled)}";
@@ -1 +1 @@
1
- {"file":"entity-selector.js","mappings":"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","names":[],"sources":["src/components/_helpers/entity-selector/entity-selector.scss?tag=gx-ide-entity-selector&encapsulation=shadow","src/components/_helpers/entity-selector/entity-selector.tsx"],"sourcesContent":["/*wrapper*/\n.wrapper {\n display: grid;\n grid-template-columns: 1fr max-content max-content;\n gap: var(--mer-spacing--xs);\n border-radius: var(--control__border-radius);\n border: var(--control__border-width) var(--control__border-style)\n var(--control__border-color);\n padding: var(--control__padding-block) var(--control__padding-inline);\n\n &:hover {\n --control__border-color: var(--control__border-color--hover);\n }\n &:focus {\n }\n}\n/*input*/\n.input {\n --control__padding-block: 0;\n --control__padding-inline: 0;\n // Remove control border. We want to simulate a input that includes two buttons at the end.\n --control__border-width: 0;\n --focus__outline-width: 0;\n}\n:host(:focus-within) {\n .wrapper {\n --control__border-color: var(--focus__outline-color);\n }\n}\n:host(.entity-selector--button-has-focus) {\n .wrapper {\n outline: none;\n }\n}\n\n:host([disabled]) {\n pointer-events: none;\n .wrapper {\n background-color: var(--control__background-color--disabled);\n border-color: var(--control__border-color--disabled);\n }\n}\n/*custom button icon*/\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n Watch\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../../common/locale\";\nimport { LabelPosition } from \"../../../common/types\";\nimport { EntityData } from \"../../../common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/edit\",\n \"components/button\",\n \"components/icon\",\n \"utils/form\"\n];\nconst SELECT_DEFAULT_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"primary\"\n});\nconst CLEAR_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"primary\"\n});\n\n@Component({\n tag: \"gx-ide-entity-selector\",\n styleUrl: \"entity-selector.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/entity-selector\"]\n})\nexport class GxIdeEntitySelector {\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeEntitySelectorElement;\n\n /**\n * Adds/removes a CSS class on the host. It removes focus-within styles when\n * focus is on a button.\n */\n @State() buttonHasFocus = false;\n\n @State() iconSrc: string = null;\n\n /**\n * Default value for the component. Used when the 'X' button is pressed.\n */\n @Prop() readonly defaultValue?: EntityData | null | undefined;\n\n /**\n * This attribute lets you specify if the element is disabled.\n */\n @Prop({ reflect: true }) readonly disabled: boolean = false;\n\n /**\n * The label caption. Only visible if \"labelPosition\" is not \"none\".\n * I no \"labelCaption\" is provided, a generic caption \"Select Entity\" will be provided\n */\n @Prop() readonly labelCaption?: string;\n\n /**\n * The label position\n */\n @Prop({ reflect: true }) readonly labelPosition?: LabelPosition =\n \"block-start\";\n\n /**\n * This property specifies the `name` of the control when used in a form.\n */\n @Prop({ reflect: true }) readonly name?: string;\n\n /**\n * Callback invoked when the action button is pressed. Returns the new value.\n */\n @Prop() readonly selectEntityCallback!: () => Promise<EntityData> | null;\n\n /**\n * Value currently assigned.\n */\n @Prop({ mutable: true }) value: EntityData | null | undefined;\n @Watch(\"value\")\n valueChangedHandler() {\n this.valueChanged.emit(this.value);\n this.#updateIconSrc();\n }\n\n /**\n * Emits the input value every time it changes\n */\n @Event() valueChanged: EventEmitter<EntityData>;\n\n // 6.Component Lifecycle Events\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n connectedCallback() {\n this.#updateIconSrc();\n }\n\n #btnClearClickHandler = () => {\n this.value = this.defaultValue;\n this.iconSrc = this.defaultValue?.iconSrc;\n };\n\n #btnSelectClickHandler = () => {\n this.selectEntityCallback().then(result => {\n if (result) {\n this.value = result;\n }\n });\n };\n\n #buttonFocusHandler = (e: FocusEvent) => {\n if (e.type === \"focus\") {\n this.buttonHasFocus = true;\n } else if (e.type === \"blur\") {\n this.buttonHasFocus = false;\n }\n };\n\n #renderControl = (): HTMLDivElement => {\n return (\n <div part=\"wrapper\" class=\"wrapper\">\n <ch-edit\n accessibleName={\n this.labelPosition === \"none\" &&\n this.#componentLocale.entitySelectorInputAccessibleName\n }\n class=\"input\"\n disabled={this.disabled}\n name={this.name || this.#componentLocale.entitySelectorNameAttribute}\n startImgSrc={this.iconSrc}\n readonly\n value={this.value?.name || this.defaultValue?.name}\n id=\"entity-input\"\n ></ch-edit>\n\n <button\n part=\"button-clear\"\n class=\"icon-button\"\n aria-label={this.#componentLocale.clearButtonLabel}\n title={this.#componentLocale.clearButtonLabel}\n type=\"button\"\n disabled={this.disabled}\n onClick={this.#btnClearClickHandler}\n onFocus={this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n onBlur={!this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n >\n <ch-image\n class=\"icon-md\"\n src={CLEAR_ICON}\n disabled={this.disabled}\n ></ch-image>\n </button>\n\n <button\n class=\"icon-button\"\n aria-label={this.#componentLocale.selectButtonLabel}\n title={this.#componentLocale.selectButtonLabel}\n type=\"button\"\n disabled={!this.selectEntityCallback || this.disabled}\n onClick={this.#btnSelectClickHandler}\n onBlur={!this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n onFocus={this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n >\n <ch-image\n class=\"icon-md\"\n src={SELECT_DEFAULT_ICON}\n disabled={this.disabled}\n ></ch-image>\n </button>\n </div>\n );\n };\n\n #updateIconSrc = () => {\n if (this.value && this.value.iconSrc) {\n this.iconSrc = this.value.iconSrc;\n }\n };\n\n render() {\n return (\n <Host\n class={{\n \"entity-selector--button-has-focus\": this.buttonHasFocus\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n {this.labelPosition !== \"none\" ? (\n <div\n class={{\n \"field\": true,\n \"field-block\": this.labelPosition === \"block-start\",\n \"field-inline\": this.labelPosition === \"inline-start\"\n }}\n >\n <label class=\"label\" htmlFor=\"entity-input\">\n {this.labelCaption ||\n this.#componentLocale.entitySelectorInputAccessibleName}\n </label>\n {this.#renderControl()}\n </div>\n ) : (\n this.#renderControl()\n )}\n </Host>\n );\n }\n}\n\nexport type EntitySelectorLabels = {\n buttonClearLabel: string;\n buttonSelectLabel: string;\n};\n"],"version":3}
1
+ {"file":"entity-selector.js","mappings":"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","names":[],"sources":["src/components/_helpers/entity-selector/entity-selector.scss?tag=gx-ide-entity-selector&encapsulation=shadow","src/components/_helpers/entity-selector/entity-selector.tsx"],"sourcesContent":["/*wrapper*/\n.wrapper {\n display: grid;\n grid-template-columns: 1fr max-content max-content;\n gap: var(--mer-spacing--xs);\n border-radius: var(--control__border-radius);\n border: var(--control__border-width) var(--control__border-style)\n var(--control__border-color);\n padding: var(--control__padding-block) var(--control__padding-inline);\n\n &:hover {\n --control__border-color: var(--control__border-color--hover);\n }\n &:focus {\n }\n}\n/*input*/\n.input {\n --control__padding-block: 0;\n --control__padding-inline: 0;\n // Remove control border. We want to simulate a input that includes two buttons at the end.\n --control__border-width: 0;\n --focus__outline-width: 0;\n}\n:host(:focus-within) {\n .wrapper {\n --control__border-color: var(--focus__outline-color);\n }\n}\n:host(.entity-selector--button-has-focus) {\n .wrapper {\n outline: none;\n }\n}\n\n:host([disabled]) {\n pointer-events: none;\n .wrapper {\n background-color: var(--control__background-color--disabled);\n border-color: var(--control__border-color--disabled);\n }\n}\n/*custom button icon*/\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n Watch\n} from \"@stencil/core\";\n\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../../common/locale\";\nimport { LabelPosition } from \"../../../common/types\";\nimport { EntityData } from \"../../../common/types\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/edit\",\n \"components/button\",\n \"components/icon\",\n \"utils/form\"\n];\nconst SELECT_DEFAULT_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"show-more-horizontal\",\n colorType: \"primary\"\n});\nconst CLEAR_ICON = getIconPath({\n category: \"gemini-tools\",\n name: \"reset\",\n colorType: \"primary\"\n});\n\n@Component({\n tag: \"gx-ide-entity-selector\",\n styleUrl: \"entity-selector.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/entity-selector\"]\n})\nexport class GxIdeEntitySelector {\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeEntitySelectorElement;\n\n /**\n * Adds/removes a CSS class on the host. It removes focus-within styles when\n * focus is on a button.\n */\n @State() buttonHasFocus = false;\n\n @State() iconSrc: string = null;\n\n /**\n * Default value for the component. Used when the 'X' button is pressed.\n */\n @Prop() readonly defaultValue?: EntityData | null | undefined;\n\n /**\n * This attribute lets you specify if the element is disabled.\n */\n @Prop({ reflect: true }) readonly disabled: boolean = false;\n\n /**\n * The label caption. Only visible if \"labelPosition\" is not \"none\".\n * I no \"labelCaption\" is provided, a generic caption \"Select Entity\" will be provided\n */\n @Prop() readonly labelCaption?: string;\n\n /**\n * The label position\n */\n @Prop({ reflect: true }) readonly labelPosition?: LabelPosition =\n \"block-start\";\n\n /**\n * This property specifies the `name` of the control when used in a form.\n */\n @Prop({ reflect: true }) readonly name?: string;\n\n /**\n * Callback invoked when the action button is pressed. Returns the new value.\n */\n @Prop() readonly selectEntityCallback!: () => Promise<EntityData> | null;\n\n /**\n * Value currently assigned.\n */\n @Prop({ mutable: true }) value: EntityData | null | undefined;\n @Watch(\"value\")\n valueChangedHandler() {\n this.valueChanged.emit(this.value);\n this.#updateIconSrc();\n }\n\n /**\n * Emits the input value every time it changes\n */\n @Event() valueChanged: EventEmitter<EntityData>;\n\n // 6.Component Lifecycle Events\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\n\n connectedCallback() {\n this.#updateIconSrc();\n }\n\n #btnClearClickHandler = () => {\n this.value = this.defaultValue;\n this.iconSrc = this.defaultValue?.iconSrc;\n };\n\n #btnSelectClickHandler = () => {\n this.selectEntityCallback().then(result => {\n if (result) {\n this.value = result;\n }\n });\n };\n\n #buttonFocusHandler = (e: FocusEvent) => {\n if (e.type === \"focus\") {\n this.buttonHasFocus = true;\n } else if (e.type === \"blur\") {\n this.buttonHasFocus = false;\n }\n };\n\n #renderControl = (): HTMLDivElement => {\n return (\n <div part=\"wrapper\" class=\"wrapper\">\n <ch-edit\n accessibleName={\n this.labelPosition === \"none\" &&\n this.#componentLocale.entitySelectorInputAccessibleName\n }\n class=\"input\"\n disabled={this.disabled}\n name={this.name || this.#componentLocale.entitySelectorNameAttribute}\n startImgSrc={this.iconSrc}\n readonly\n value={this.value?.name || this.defaultValue?.name}\n id=\"entity-input\"\n ></ch-edit>\n\n <button\n part=\"button-clear\"\n class=\"icon-button\"\n aria-label={this.#componentLocale.clearButtonLabel}\n title={this.#componentLocale.clearButtonLabel}\n type=\"button\"\n disabled={this.disabled}\n onClick={this.#btnClearClickHandler}\n onFocus={this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n onBlur={!this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n >\n <ch-image\n class=\"icon-md\"\n src={CLEAR_ICON}\n disabled={this.disabled}\n ></ch-image>\n </button>\n\n <button\n class=\"icon-button\"\n aria-label={this.#componentLocale.selectButtonLabel}\n title={this.#componentLocale.selectButtonLabel}\n type=\"button\"\n disabled={!this.selectEntityCallback || this.disabled}\n onClick={this.#btnSelectClickHandler}\n onBlur={!this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n onFocus={this.buttonHasFocus ? this.#buttonFocusHandler : undefined}\n >\n <ch-image\n class=\"icon-md\"\n src={SELECT_DEFAULT_ICON}\n disabled={this.disabled}\n ></ch-image>\n </button>\n </div>\n );\n };\n\n #updateIconSrc = () => {\n if (this.value && this.value.iconSrc) {\n this.iconSrc = this.value.iconSrc;\n }\n };\n\n render() {\n return (\n <Host\n class={{\n \"entity-selector--button-has-focus\": this.buttonHasFocus\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n {this.labelPosition !== \"none\" ? (\n <div\n class={{\n \"field\": true,\n \"field-block\": this.labelPosition === \"block-start\",\n \"field-inline\": this.labelPosition === \"inline-start\"\n }}\n >\n <label class=\"label\" htmlFor=\"entity-input\">\n {this.labelCaption ||\n this.#componentLocale.entitySelectorInputAccessibleName}\n </label>\n {this.#renderControl()}\n </div>\n ) : (\n this.#renderControl()\n )}\n </Host>\n );\n }\n}\n\nexport type EntitySelectorLabels = {\n buttonClearLabel: string;\n buttonSelectLabel: string;\n};\n"],"version":3}
@@ -1,5 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, getAssetPath, h, Host } from '@stencil/core/internal/client';
2
- import { g as getIconPath } from './MERCURY_ASSETS.js';
2
+ import { g as getIconPath } from './assets-manager.js';
3
+ import './MERCURY_ASSETS.js';
3
4
  import { c as config } from './config.js';
4
5
  import { v as validateControls } from './form-validation.js';
5
6
  import { L as Locale } from './locale.js';
@@ -1 +1 @@
1
- {"file":"gx-ide-create-kb-from-server.js","mappings":"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","names":["GxIdeCreateKbFromServer"],"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}\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","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath\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\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\" } TODO: display once \"gx-ide-select-kb-versions\" is ready.\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n #kbsActionListModel: ActionListItemModel[] = [];\n #kbVersionsIds: string[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/create-kb-from-server/shortcuts.json`\n );\n #selectedKbId: string;\n #kbNameAlreadyEditedByUser: boolean = false;\n\n #searchKbsEl!: HTMLChEditElement;\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 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 componentDidLoad() {\n (this.#searchKbsEl as HTMLElement).focus();\n\n this.versionSelectedType = this.#versionSelectedTypeEl\n .value as VersionOption;\n\n this.#initializeValidatableControls();\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n await this.#init();\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.#kbVersionsIds = [];\n }\n this.createKBCallback({\n selectedKB: this.#selectedKbId,\n versionSelected: this.versionSelectedType,\n localKBName: this.localKbNameInputValue,\n versionList: this.#kbVersionsIds\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.versionsValueInput = result.length\n .toString()\n .concat(this.#_componentLocale.kb.versionSelectedFieldValue);\n this.#kbVersionsIds = result.map(kbVersion =>\n kbVersion.id.toString()\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 };\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\n <section class=\"main field-group spacing-body\">\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 ref={el => (this.#searchKbsEl = el as HTMLChEditElement)}\n ></ch-edit>\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 =>\n (this.#versionSelectedTypeEl =\n el as HTMLChRadioGroupRenderElement)\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={this.#_componentLocale.kb.localKbNamePlaceholder}\n ref={(el: HTMLChEditElement) =>\n (this.#localKBNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#localKBNameEl)}\n </div>\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: string[];\n};\n\nexport type VersionOption = \"Trunk\" | \"All\" | \"Select\";\n\nexport type VersionType = \"Branch\" | \"Frozen\";\n"],"version":3}
1
+ {"file":"gx-ide-create-kb-from-server.js","mappings":";;;;;;;AAGO,MAAM,4BAA4B,GAAG,CAC1C,OAAiB;IAEjB,MAAM,YAAY,GAA0B,EAAE,CAAC;IAC/C,OAAO,CAAC,OAAO,CAAC,EAAE;QAChB,YAAY,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,EAAE,CAAC,IAAI;SACjB,CAAC,CAAC;KACJ,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC;;ACfD,MAAM,qBAAqB,GAAG,yhBAAyhB;;;;;;;;;;;;;;;;;;;ACiCvjB,MAAM,WAAW,GAAmB;IAClC,mBAAmB;IACnB,kBAAkB;IAClB,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,qBAAqB;IACrB,oBAAoB;IACpB,qBAAqB;CACtB,CAAC;MAQWA,yBAAuB;;;;;QAClC,gDAAgB,WAAW,CAAC;YAC1B,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,YAAY;SACxB,CAAC,EAAC;QAEH,gDAAgB,WAAW,CAAC;YAC1B,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,sBAAsB;YAC5B,SAAS,EAAE,cAAc;SAC1B,CAAC,EAAC;QAEH,kDAAyC;YACvC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE;YAC5C,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE;;SAE1C,EAAC;QAIF,4DAAuB;QACvB,sDAA6C,EAAE,EAAC;QAChD,iDAA2B,EAAE,EAAC;QAC9B,gDAAgB,YAAY,CAC1B,sDAAsD,CACvD,EAAC;QACF,wDAAsB;QACtB,6DAAsC,KAAK,EAAC;QAE5C,uDAAiC;QACjC,iEAAsD;QAItD,yDAAmC;QAsFnC,iDAAiB;YACf,IAAI,CAAC,cAAc,EAAE,CAAC;SACvB,EAAC;QAEF,2DAA2B;YACzB,IAAI,CAAC,wBAAwB,CAAC;gBAC5B,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,kBAAkB;gBAC1D,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS;gBACxC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;gBACtC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY;aAC/C,CAAC,CAAC;SACJ,EAAC;QAEF,iDAAiB;YACf,IAAI,IAAI,CAAC,mBAAmB,KAAK,QAAQ,EAAE;gBACzC,uBAAA,IAAI,0CAAkB,EAAE,MAAA,CAAC;aAC1B;YACD,IAAI,CAAC,gBAAgB,CAAC;gBACpB,UAAU,EAAE,uBAAA,IAAI,6CAAc;gBAC9B,eAAe,EAAE,IAAI,CAAC,mBAAmB;gBACzC,WAAW,EAAE,IAAI,CAAC,qBAAqB;gBACvC,WAAW,EAAE,uBAAA,IAAI,8CAAe;aACjC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAkC;gBACzC,IAAI,CAAC,mBAAmB,GAAG,gBAAgB,CACzC,gBAAgB,EAChB,IAAI,CAAC,mBAAmB,CACzB,CAAC;aACH,CAAC,CAAC;SACJ,EAAC;;;QAIF,yDAAyB,CACvB,gBAA6B;;YAE7B,OAAA,CAAA,MAAA,MAAA,IAAI,CAAC,mBAAmB,0CAAE,GAAG,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,EAAE,CAAC,0CAAE,QAAQ;iBAC7D,MAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,0CAAE,OAAO,CAAA,KACxD,kBACE,KAAK,EAAC,SAAS,EACf,aAAa,EAAE,gBAAgD,EAC/D,UAAU,EAAE,MAAM,CAAC,eAAe,CAAC,UAAU,EAC7C,WAAW,EAAE,MAAM,CAAC,eAAe,CAAC,WAAW,EAC/C,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,IAElC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,OAAO,CAC/C,CACd,CAAA;SAAA,EAAC;QAEJ,6DAA6B,CAC3B,KAA6C;YAE7C,IAAI,CAAC,WAAW,GAAI,KAAK,CAAC,MAAiB,CAAC,WAAW,EAAE,CAAC;YAC1D,IAAI,CAAC,0BAA0B,GAAG,uBAAA,IAAI,mDAAoB,CAAC,MAAM,CAC/D,CAAC,IAA8B,KAC7B,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CACxD,CAAC;SACH,EAAC;QAEF,wCAAQ;YACN,MAAM,IAAI,CAAC,sBAAsB,CAAC;gBAChC,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,kBAAkB;gBAC1D,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,SAAS;gBACxC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;gBACtC,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,YAAY;aAC/C,CAAC,CAAC,IAAI,CAAC,MAAM;gBACZ,uBAAA,IAAI,+CAAuB,4BAA4B,CAAC,MAAM,CAAC,MAAA,CAAC;gBAChE,IAAI,CAAC,0BAA0B,GAAG,uBAAA,IAAI,mDAAoB,CAAC;gBAC3D,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;aACvB,CAAC,CAAC;SACJ,EAAC;QAEF,iEAAiC;;YAE/B,MAAM,mBAAmB,GAAkB,CAAC,uBAAA,IAAI,8CAAe,CAAC,CAAC;YACjE,mBAAmB,CAAC,OAAO,CAAC,kBAAkB;gBAC5C,IAAI,kBAAkB,CAAC,EAAE,EAAE;oBACzB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,EAAE;wBAClD,SAAS,EAAE,kBAAkB;wBAC7B,QAAQ,EAAE,KAAK;wBACf,OAAO,EAAE,SAAS;qBACnB,CAAC,CAAC;iBACJ;aACF,CAAC,CAAC;SACJ,EAAC;QAEF,2DAA2B,CACzB,KAA6C;YAE7C,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC,MAAgB,CAAC;YACpD,uBAAA,IAAI,sDAA8B,IAAI,MAAA,CAAC;SACxC,EAAC;QAEF,0DAA0B;YACxB,IAAI,IAAI,CAAC,wBAAwB,EAAE;gBACjC,MAAM,IAAI,CAAC,wBAAwB,CAAC,uBAAA,IAAI,6CAAc,CAAC,CAAC,IAAI,CAAC,MAAM;oBACjE,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE;wBAClB,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM;6BACpC,QAAQ,EAAE;6BACV,MAAM,CAAC,uBAAA,IAAI,iDAAkB,CAAC,EAAE,CAAC,yBAAyB,CAAC,CAAC;wBAC/D,uBAAA,IAAI,0CAAkB,MAAM,CAAC,GAAG,CAAC,SAAS,IACxC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,CACxB,MAAA,CAAC;qBACH;iBACF,CAAC,CAAC;aACJ;SACF,EAAC;QAEF,yDAAyB,CACvB,KAAmE;;YAEnE,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,0CAAE,IAAgC,CAAC;YAC/D,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;gBACxC,uBAAA,IAAI,yCAAiB,SAAS,MAAA,CAAC;gBAC/B,OAAO;aACR;YACD,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC;YACvC,uBAAA,IAAI,yCAAiB,IAAI,CAAC,EAAE,MAAA,CAAC;YAC7B,IAAI,uBAAA,IAAI,0DAA2B,EAAE;gBACnC,OAAO;aACR;YACD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC;SAC3C,EAAC;QAEF,0DAA0B,CAAC,KAA0B;YACnD,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,MAAuB,CAAC;SAC1D,EAAC;QAEF,gDAAgB;YACd,QACE,cAAQ,KAAK,EAAC,8EAA8E,IAC1F,WAAK,KAAK,EAAC,gBAAgB,IACzB;;gBAEE,KAAK,EAAC,kBAAkB,EACxB,OAAO,EAAE,uBAAA,IAAI,8CAAe,EAC5B,IAAI,EAAC,sBAAsB;eAE1B,uBAAA,IAAI,iDAAkB,CAAC,MAAM,CAAC,MAAM,CAC9B,EAET;;gBAEE,KAAK,EAAC,gBAAgB,EACtB,OAAO,EAAE,IAAI,CAAC,0BAA0B,IAAI,uBAAA,IAAI,8CAAe,EAC/D,QAAQ,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAC1C,IAAI,EAAC,yBAAyB;eAE7B,uBAAA,IAAI,iDAAkB,CAAC,MAAM,CAAC,QAAQ,CAChC,CACL,CACC,EACT;SACH,EAAC;0CA1O6C,KAAK;qCAKX,EAAE;2BAKZ,EAAE;0CAK4B,EAAE;mCAEhC,IAAI,GAAG,EAA6B;;kCAU7B,EAAE;;;;;;;;IAwCxC,gBAAgB;QACb,uBAAA,IAAI,4CAA6B,CAAC,KAAK,EAAE,CAAC;QAE3C,IAAI,CAAC,mBAAmB,GAAG,uBAAA,IAAI,sDAAuB;aACnD,KAAsB,CAAC;QAE1B,uBAAA,IAAI,8DAA+B,MAAnC,IAAI,CAAiC,CAAC;KACvC;IAED,MAAM,iBAAiB;QACrB,uBAAA,IAAI,6CAAqB,MAAM,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,CAAC;QACnE,MAAM,uBAAA,IAAI,qCAAM,MAAV,IAAI,CAAQ,CAAC;KACpB;IA6JD,MAAM;QACJ,QACE,EAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,IAClB,gBAAU,KAAK,EAAE,WAAW,GAAa,EACzC,oBACE,GAAG,EAAE,uBAAA,IAAI,6CAAc,EACvB,GAAG,EAAE,CAAC,EAA0B,MAC7B,IAAI,CAAC,aAAa,GAAG,EAA4B,CAAC,GAEvC,EAEhB,eAAS,KAAK,EAAC,SAAS,IACtB,cAAQ,KAAK,EAAC,2FAA2F,IACvG,WAAK,KAAK,EAAC,mBAAmB,IAC5B,aAAO,KAAK,EAAC,OAAO,IACjB,uBAAA,IAAI,iDAAkB,CAAC,MAAM,CAAC,SAAS,CAClC,EACR,aAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAK,CAClC,EAEN,WAAK,KAAK,EAAC,mBAAmB,IAC5B,aAAO,KAAK,EAAC,OAAO,IAAE,uBAAA,IAAI,iDAAkB,CAAC,MAAM,CAAC,IAAI,CAAS,EACjE,aAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAK,CACjC,EAEN,cACE,KAAK,EAAC,+BAA+B,EACrC,OAAO,EAAE,uBAAA,IAAI,wDAAyB,IAErC,uBAAA,IAAI,iDAAkB,CAAC,MAAM,CAAC,MAAM,CAC9B,CACF,EAET,eAAS,KAAK,EAAC,+BAA+B,IAC5C,eACE,KAAK,EAAC,kBAAkB,EACxB,EAAE,EAAC,eAAe,EAClB,WAAW,EAAE,uBAAA,IAAI,6CAAc,EAC/B,OAAO,EAAE,uBAAA,IAAI,0DAA2B,EACxC,WAAW,EAAE,uBAAA,IAAI,iDAAkB,CAAC,EAAE,CAAC,oBAAoB,EAC3D,GAAG,EAAE,EAAE,KAAK,uBAAA,IAAI,wCAAgB,EAAuB,MAAA,CAAC,GAC/C,EAEX,6BACE,SAAS,EAAC,QAAQ,EAClB,KAAK,EAAC,UAAU,EAChB,qBAAqB,EAAE,uBAAA,IAAI,sDAAuB,EAClD,KAAK,EAAE,IAAI,CAAC,0BAA0B,GACf,EAEzB,WAAK,KAAK,EAAC,gCAAgC,IACzC,6BACE,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,uBAAA,IAAI,+CAAgB,EAC3B,QAAQ,EAAE,uBAAA,IAAI,uDAAwB,EACtC,KAAK,EAAE,uBAAA,IAAI,+CAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,EACpC,GAAG,EAAE,EAAE,KACJ,uBAAA,IAAI,kDACH,EAAmC,MAAA,CAAC,GAEjB,EAExB,IAAI,CAAC,mBAAmB,KAAK,QAAQ,KACpC,WAAK,KAAK,EAAC,sCAAsC,IAC/C,WAAK,KAAK,EAAC,mBAAmB,IAC5B,aAAO,KAAK,EAAC,OAAO,EAAC,OAAO,EAAC,cAAc,IACxC,uBAAA,IAAI,iDAAkB,CAAC,EAAE,CAAC,aAAa,CAClC,EACR,WAAK,KAAK,EAAC,2BAA2B,IACpC,eACE,KAAK,EAAC,OAAO,EACb,QAAQ,QACR,WAAW,EACT,IAAI,CAAC,0BAA0B;kBAC3B,uBAAA,IAAI,iDAAkB,CAAC,EAAE,CAAC,mBAAmB;kBAC7C,uBAAA,IAAI,iDAAkB,CAAC,EAAE;qBACtB,2BAA2B,EAEpC,KAAK,EAAE,IAAI,CAAC,kBAAkB,GACrB,EACX,cACE,KAAK,EAAC,kCAAkC,EACxC,OAAO,EAAE,uBAAA,IAAI,uDAAwB,EACrC,QAAQ,EAAE,CAAC,IAAI,CAAC,0BAA0B,IAE1C,gBACE,GAAG,EAAE,uBAAA,IAAI,6CAAc,EACvB,KAAK,EAAC,SAAS,GACL,CACL,CACL,CACF,CACF,CACP,CACG,EAEN,WAAK,KAAK,EAAC,mBAAmB,IAC5B,aAAO,KAAK,EAAC,OAAO,EAAC,OAAO,EAAC,aAAa,IACvC,uBAAA,IAAI,iDAAkB,CAAC,EAAE,CAAC,gBAAgB,CACrC,EACR;;YAEE,KAAK,EAAC,OAAO,EACb,EAAE,EAAC,eAAe,EAClB,KAAK,EAAE,IAAI,CAAC,qBAAqB,EACjC,OAAO,EAAE,uBAAA,IAAI,wDAAyB,EACtC,WAAW,EAAE,uBAAA,IAAI,iDAAkB,CAAC,EAAE,CAAC,sBAAsB,EAC7D,GAAG,EAAE,CAAC,EAAqB,MACxB,uBAAA,IAAI,0CAAkB,EAAuB,MAAA,CAAC;UAExC,EACV,uBAAA,IAAI,sDAAuB,MAA3B,IAAI,EAAwB,uBAAA,IAAI,8CAAe,CAAC,CAC7C,CACE,EAET,uBAAA,IAAI,6CAAc,MAAlB,IAAI,CAAgB,CACb,CACL,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":["GxIdeCreateKbFromServer"],"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}\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","// Stencil\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath\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\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\" } TODO: display once \"gx-ide-select-kb-versions\" is ready.\n ];\n\n [key: string]: any;\n\n #_componentLocale: any;\n #kbsActionListModel: ActionListItemModel[] = [];\n #kbVersionsIds: string[] = [];\n #shortcutsSrc = getAssetPath(\n `./gx-ide-assets/create-kb-from-server/shortcuts.json`\n );\n #selectedKbId: string;\n #kbNameAlreadyEditedByUser: boolean = false;\n\n #searchKbsEl!: HTMLChEditElement;\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 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 componentDidLoad() {\n (this.#searchKbsEl as HTMLElement).focus();\n\n this.versionSelectedType = this.#versionSelectedTypeEl\n .value as VersionOption;\n\n this.#initializeValidatableControls();\n }\n\n async componentWillLoad() {\n this.#_componentLocale = await Locale.getComponentStrings(this.el);\n await this.#init();\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.#kbVersionsIds = [];\n }\n this.createKBCallback({\n selectedKB: this.#selectedKbId,\n versionSelected: this.versionSelectedType,\n localKBName: this.localKbNameInputValue,\n versionList: this.#kbVersionsIds\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.versionsValueInput = result.length\n .toString()\n .concat(this.#_componentLocale.kb.versionSelectedFieldValue);\n this.#kbVersionsIds = result.map(kbVersion =>\n kbVersion.id.toString()\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 };\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\n <section class=\"main field-group spacing-body\">\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 ref={el => (this.#searchKbsEl = el as HTMLChEditElement)}\n ></ch-edit>\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 =>\n (this.#versionSelectedTypeEl =\n el as HTMLChRadioGroupRenderElement)\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={this.#_componentLocale.kb.localKbNamePlaceholder}\n ref={(el: HTMLChEditElement) =>\n (this.#localKBNameEl = el as HTMLChEditElement)\n }\n ></ch-edit>\n {this.#evaluateTooltipRender(this.#localKBNameEl)}\n </div>\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: string[];\n};\n\nexport type VersionOption = \"Trunk\" | \"All\" | \"Select\";\n\nexport type VersionType = \"Branch\" | \"Frozen\";\n"],"version":3}
@@ -1,5 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
2
- import { g as getIconPath } from './MERCURY_ASSETS.js';
2
+ import { g as getIconPath } from './assets-manager.js';
3
+ import './MERCURY_ASSETS.js';
3
4
  import { L as Locale } from './locale.js';
4
5
 
5
6
  /**
@@ -1 +1 @@
1
- {"file":"gx-ide-current-user-info.js","mappings":";;;;AAAA;;;;;;;;;;;AAWO,MAAM,mBAAmB,GAAG,CAAC,IAAY;IAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAClD,OAAO,GAAG,CAAC;KACZ;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;QACzB,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;KACrC;SAAM;QACL,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;KACzE;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;AAWO,MAAM,aAAa,GAAG,CAAC,QAAgB;IAC5C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC1D,OAAO,IAAI,CAAC;KACb;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;KACxB;SAAM;QACL,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD;AACH,CAAC;;AC9CD,MAAM,kBAAkB,GAAG,miDAAmiD;;;;;;;;;;;;;;;;;;;ACc9jD,MAAM,WAAW,GAAmB;;IAElC,mBAAmB;IACnB,oBAAoB;IACpB,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,cAAc;IACd,kBAAkB;IAClB,eAAe;IACf,qBAAqB;CACtB,CAAC;AAEF,MAAM,iBAAiB,GAAG,WAAW,CAAC;IACpC,QAAQ,EAAE,YAAY;IACtB,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,SAAS;CACrB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,YAAY,CAAC;AACnC,MAAM,cAAc,GAAG,aAAa,CAAC;AACrC,MAAM,WAAW,GAAG,UAAU,CAAC;AAC/B,MAAM,WAAW,GAAG,UAAU,CAAC;MAQlB,mBAAmB;;;;;QAC9B,uDAAsB;QACtB,wCAAoB,EAAE,EAAC;;QAEvB,yDAAoC;QAGpC,uDAAoC;;;;;;;QAmFpC,wDAA4B,CAC1B,KAAmE;YAEnE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,IAAI,EAAE,KAAK,aAAa,EAAE,CAEzB;iBAAM,IAAI,EAAE,KAAK,cAAc,EAAE;gBAChC,IAAI,CAAC,kBAAkB,EAAE,CAAC;aAC3B;iBAAM,IAAI,EAAE,KAAK,WAAW,EAAE;gBAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB;iBAAM,IAAI,EAAE,KAAK,WAAW,EAAE;gBAC7B,IAAI,CAAC,sBAAsB,EAAE,CAAC;aAC/B;SACF,EAAC;wBA9F2B,KAAK;;;;;;;;;;;IA+ClC,MAAM,iBAAiB;QACrB,uBAAA,IAAI,wCAAoB,MAAM,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAA,CAAC;QAClE,uBAAA,IAAI,iCAAa,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAA,CAAC;QACzD,uBAAA,IAAI,0CAAsB;;;;;;YAMxB;gBACE,EAAE,EAAE,cAAc;gBAClB,OAAO,EAAE,uBAAA,IAAI,4CAAiB,CAAC,eAAe;aAC/C;YACD;gBACE,EAAE,EAAE,WAAW;gBACf,OAAO,EAAE,uBAAA,IAAI,4CAAiB,CAAC,YAAY;aAC5C;YACD;gBACE,IAAI,EAAE,WAAW;aAClB;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,WAAW;aAChB;SACF,MAAA,CAAC;KACH;IAwBD,MAAM;;QACJ,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,CAAC,CAAC;QACpD,QACE,EAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,IAClB,gBAAU,KAAK,EAAE,WAAW,GAAa,EACzC,6BACE,KAAK,EAAC,6BAA6B,EACnC,KAAK,EAAE,uBAAA,IAAI,8CAAmB,EAC9B,WAAW,EAAC,YAAY,EACxB,UAAU,EAAC,aAAa,EACxB,aAAa,EAAE,uBAAA,IAAI,qDAA0B,IAE7C,WAAK,KAAK,EAAC,qBAAqB,IAC7B,QAAQ,GAAG,YAAM,KAAK,EAAC,kBAAkB,IAAE,QAAQ,CAAQ,GAAG,IAAI,EAClE,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,IAAI,KAClB,YAAM,KAAK,EAAC,0BAA0B,IAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAQ,IAChE,IAAI,CACJ,EACN,WAAK,KAAK,EAAC,oBAAoB,IAAE,uBAAA,IAAI,qCAAU,CAAO,EACtD,gBACE,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAC,SAAS,EACf,YAAY,EAAE,uBAAA,IAAI,4CAAiB,GACzB,EACZ,WAAK,KAAK,EAAC,gCAAgC,EAAC,IAAI,EAAC,WAAW,IAC1D,cACE,KAAK,EAAC,+BAA+B,EACrC,OAAO,EAAE,IAAI,CAAC,aAAa,IAE1B,uBAAA,IAAI,4CAAiB,CAAC,yBAAyB,CACzC,EACT,cACE,KAAK,EAAC,gCAA+B,EACrC,OAAO,EAAE,IAAI,CAAC,eAAe,IAE5B,uBAAA,IAAI,4CAAiB,CAAC,oBAAoB,CACpC,CACL,CACgB,CACnB,EACP;KACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","names":[],"sources":["src/components/current-user-info/helpers.tsx","src/components/current-user-info/current-user-info.scss?tag=gx-ide-current-user-info&encapsulation=shadow","src/components/current-user-info/current-user-info.tsx"],"sourcesContent":["/**\n * Returns initials from the first two words of a name. Returns \"X\" for invalid input.\n *\n * @param name - The full name string.\n * @returns Initials of the first two words, or \"X\" if invalid.\n *\n * Example:\n * getInitialsFromName(\"John Doe\") -> \"JD\"\n * getInitialsFromName(\"Jane\") -> \"J\"\n * getInitialsFromName(\"\") -> \"X\"\n */\nexport const getInitialsFromName = (name: string): string | null => {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"X\";\n }\n\n const nameData = name.split(\" \").filter(Boolean); // Remove any empty strings from splitting\n if (nameData.length === 1) {\n return nameData[0][0].toUpperCase();\n } else {\n return `${nameData[0][0].toUpperCase()}${nameData[1][0].toUpperCase()}`;\n }\n};\n\n/**\n * Limits the full name to the first two words. Returns null for invalid input.\n *\n * @param fullName - The full name string to be limited.\n * @returns The first two words of the full name, or null if invalid.\n *\n * Example:\n * limitFullName(\"John Doe Smith\") -> \"John Doe\"\n * limitFullName(\"Jane\") -> \"Jane\"\n * limitFullName(\"\") -> null\n */\nexport const limitFullName = (fullName: string): string | null => {\n if (typeof fullName !== \"string\" || fullName.trim() === \"\") {\n return null;\n }\n\n const fullNameData = fullName.split(\" \").filter(Boolean); // Remove any empty strings from splitting\n if (fullNameData.length === 1) {\n return fullNameData[0];\n } else {\n return `${fullNameData[0]} ${fullNameData[1]}`;\n }\n};\n","@import \"../../../node_modules/@genexus/mercury/dist/mercury.scss\";\n\n:host {\n display: inline-grid;\n justify-items: end;\n block-size: 100%;\n}\n\n.dropdown::part(expandable-button) {\n display: grid;\n grid-template-columns: max-content max-content max-content;\n align-items: center;\n gap: var(--mer-spacing--sm);\n block-size: auto;\n cursor: pointer;\n}\n.user-login {\n &__details {\n display: grid;\n grid-template-rows: max-content max-content;\n gap: var(--mer-spacing--3xs);\n justify-items: end;\n }\n &__name {\n font-weight: var(--mer-font__weight--medium);\n font-size: var(--mer-font__size--3xs);\n color: var(--mer-text__on-elevation);\n }\n &__organization {\n font-weight: var(--mer-font__weight--light);\n font-size: var(--mer-font__size--4xs);\n color: var(--mer-text__neutral);\n }\n &__name,\n &__organization {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-inline-size: 120px;\n display: inline-block;\n }\n &__avatar {\n font-size: 9px;\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n block-size: var(--mer-spacing--lg);\n inline-size: var(--mer-spacing--lg);\n color: var(--mer-text__on-elevation);\n border-radius: 50%;\n background-color: var(--mer-color__tinted-primary--10);\n border: var(--mer-border__width--sm) solid var(--mer-color__primary--200);\n }\n\n &__footer {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n @include button-reset();\n\n .agreement-link {\n text-decoration: underline;\n cursor: pointer; /* Ensure it still looks clickable */\n }\n }\n}\n","/* STENCIL IMPORTS */\nimport { Component, Element, Host, Prop, State, h } from \"@stencil/core\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { getInitialsFromName, limitFullName } from \"./helpers\";\nimport {\n ActionMenuItemActionableModel,\n ActionMenuModel,\n ChActionMenuRenderCustomEvent,\n ChPopoverAlign\n} from \"@genexus/chameleon-controls-library\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n // TODO: review if \"utils/form--full\" is required.\n \"resets/box-sizing\",\n \"components/tooltip\",\n \"components/switch\",\n \"components/icon\",\n \"components/dropdown\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst CHEVRON_DOWN_ICON = getIconPath({\n category: \"navigation\",\n name: \"chevron-down\",\n colorType: \"neutral\"\n});\n\nconst MY_ACCOUNT_ID = \"my-account\";\nconst CHANGE_TEAM_ID = \"change-team\";\nconst SIGN_OUT_ID = \"sign-out\";\nconst LANGUAGE_ID = \"language\";\n\n@Component({\n tag: \"gx-ide-current-user-info\",\n styleUrl: \"current-user-info.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/current-user-info\"]\n})\nexport class GxIdeNewEnvironment {\n #componentLocale: any;\n #initials: string = \"\";\n // #mode: Mode;\n #menuDropdownModel: ActionMenuModel;\n\n @Element() el: HTMLGxIdeCurrentUserInfoElement;\n #userLoginButton: HTMLButtonElement;\n\n @State() showMenu: boolean = false;\n\n /**\n * User data\n */\n @Prop() readonly userInfo: UserInfo;\n\n /**\n * Callback executed when the user click \"My Account\" link\n */\n @Prop() readonly myAccountCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"change team\" link\n */\n @Prop() readonly changeTeamCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"Language\" link\n */\n @Prop() readonly changeLanguageCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user switch the \"Mode\" status\n */\n @Prop() readonly changeModeCallback!: (mode: Mode) => Promise<void>;\n\n /**\n * Defines the menu block and inline alignment\n */\n @Prop() readonly menuAlign: MenuAlign;\n\n /**\n * Callback executed when the user click \"Sign Out\" link\n */\n @Prop() readonly signOutCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user clicks on the \"term and conditions\" link\n */\n @Prop() readonly termsCallback: () => Promise<void>;\n\n /**\n * Callback executed when the user clicks on the \"privacy policy\" link\n */\n @Prop() readonly privacyCallback: () => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#initials = getInitialsFromName(this.userInfo.name);\n this.#menuDropdownModel = [\n // {\n // id: MY_ACCOUNT_ID,\n // caption: this.#componentLocale.myAccountLabel,\n // showSeparator: false\n // },\n {\n id: CHANGE_TEAM_ID,\n caption: this.#componentLocale.changeTeamLabel\n },\n {\n id: SIGN_OUT_ID,\n caption: this.#componentLocale.signOutLabel\n },\n {\n type: \"separator\"\n },\n {\n type: \"slot\",\n id: \"agreement\"\n }\n ];\n }\n\n // #handleModeSwitch = () => {\n // this.#mode = this.#mode === \"dark\" ? \"light\" : \"dark\";\n // if (this.changeModeCallback) {\n // this.changeModeCallback(this.#mode);\n // }\n // };\n\n #dropDownitemClickHandler = (\n event: ChActionMenuRenderCustomEvent<ActionMenuItemActionableModel>\n ): void => {\n const id = event.detail.id;\n if (id === MY_ACCOUNT_ID) {\n // this.myAccountCallback();\n } else if (id === CHANGE_TEAM_ID) {\n this.changeTeamCallback();\n } else if (id === SIGN_OUT_ID) {\n this.signOutCallback();\n } else if (id === LANGUAGE_ID) {\n this.changeLanguageCallback();\n }\n };\n\n render() {\n const userName = limitFullName(this.userInfo?.name);\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-action-menu-render\n class=\"dropdown user-login__button\"\n model={this.#menuDropdownModel}\n inlineAlign=\"inside-end\"\n blockAlign=\"outside-end\"\n onButtonClick={this.#dropDownitemClickHandler}\n >\n <div class=\"user-login__details\">\n {userName ? <span class=\"user-login__name\">{userName}</span> : null}\n {this.userInfo?.team ? (\n <span class=\"user-login__organization\">{this.userInfo.team}</span>\n ) : null}\n </div>\n <div class=\"user-login__avatar\">{this.#initials}</div>\n <ch-image\n src={CHEVRON_DOWN_ICON}\n class=\"icon-md\"\n containerRef={this.#userLoginButton}\n ></ch-image>\n <div class=\"user-login__footer footer-slot\" slot=\"agreement\">\n <button\n class=\"body-regular-s agreement-link\"\n onClick={this.termsCallback}\n >\n {this.#componentLocale.termsAndConditionsCaption}\n </button>\n <button\n class=\"body-regular-s\tagreement-link\"\n onClick={this.privacyCallback}\n >\n {this.#componentLocale.privacyPolicyCaption}\n </button>\n </div>\n </ch-action-menu-render>\n </Host>\n );\n }\n}\n\nexport type MenuAlign = {\n blockAlign: ChPopoverAlign;\n inlineAlign: ChPopoverAlign;\n};\n\nexport type UserInfo = {\n name: string;\n team: string;\n};\n\nexport type Mode = \"dark\" | \"light\";\n"],"version":3}
1
+ {"file":"gx-ide-current-user-info.js","mappings":"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","names":[],"sources":["src/components/current-user-info/helpers.tsx","src/components/current-user-info/current-user-info.scss?tag=gx-ide-current-user-info&encapsulation=shadow","src/components/current-user-info/current-user-info.tsx"],"sourcesContent":["/**\n * Returns initials from the first two words of a name. Returns \"X\" for invalid input.\n *\n * @param name - The full name string.\n * @returns Initials of the first two words, or \"X\" if invalid.\n *\n * Example:\n * getInitialsFromName(\"John Doe\") -> \"JD\"\n * getInitialsFromName(\"Jane\") -> \"J\"\n * getInitialsFromName(\"\") -> \"X\"\n */\nexport const getInitialsFromName = (name: string): string | null => {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"X\";\n }\n\n const nameData = name.split(\" \").filter(Boolean); // Remove any empty strings from splitting\n if (nameData.length === 1) {\n return nameData[0][0].toUpperCase();\n } else {\n return `${nameData[0][0].toUpperCase()}${nameData[1][0].toUpperCase()}`;\n }\n};\n\n/**\n * Limits the full name to the first two words. Returns null for invalid input.\n *\n * @param fullName - The full name string to be limited.\n * @returns The first two words of the full name, or null if invalid.\n *\n * Example:\n * limitFullName(\"John Doe Smith\") -> \"John Doe\"\n * limitFullName(\"Jane\") -> \"Jane\"\n * limitFullName(\"\") -> null\n */\nexport const limitFullName = (fullName: string): string | null => {\n if (typeof fullName !== \"string\" || fullName.trim() === \"\") {\n return null;\n }\n\n const fullNameData = fullName.split(\" \").filter(Boolean); // Remove any empty strings from splitting\n if (fullNameData.length === 1) {\n return fullNameData[0];\n } else {\n return `${fullNameData[0]} ${fullNameData[1]}`;\n }\n};\n","@import \"../../../node_modules/@genexus/mercury/dist/mercury.scss\";\n\n:host {\n display: inline-grid;\n justify-items: end;\n block-size: 100%;\n}\n\n.dropdown::part(expandable-button) {\n display: grid;\n grid-template-columns: max-content max-content max-content;\n align-items: center;\n gap: var(--mer-spacing--sm);\n block-size: auto;\n cursor: pointer;\n}\n.user-login {\n &__details {\n display: grid;\n grid-template-rows: max-content max-content;\n gap: var(--mer-spacing--3xs);\n justify-items: end;\n }\n &__name {\n font-weight: var(--mer-font__weight--medium);\n font-size: var(--mer-font__size--3xs);\n color: var(--mer-text__on-elevation);\n }\n &__organization {\n font-weight: var(--mer-font__weight--light);\n font-size: var(--mer-font__size--4xs);\n color: var(--mer-text__neutral);\n }\n &__name,\n &__organization {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-inline-size: 120px;\n display: inline-block;\n }\n &__avatar {\n font-size: 9px;\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n justify-content: center;\n block-size: var(--mer-spacing--lg);\n inline-size: var(--mer-spacing--lg);\n color: var(--mer-text__on-elevation);\n border-radius: 50%;\n background-color: var(--mer-color__tinted-primary--10);\n border: var(--mer-border__width--sm) solid var(--mer-color__primary--200);\n }\n\n &__footer {\n display: flex;\n flex-direction: column;\n gap: var(--mer-spacing--xs);\n @include button-reset();\n\n .agreement-link {\n text-decoration: underline;\n cursor: pointer; /* Ensure it still looks clickable */\n }\n }\n}\n","/* STENCIL IMPORTS */\nimport { Component, Element, Host, Prop, State, h } from \"@stencil/core\";\n\nimport { getIconPath, MercuryBundles } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../common/locale\";\nimport { getInitialsFromName, limitFullName } from \"./helpers\";\nimport {\n ActionMenuItemActionableModel,\n ActionMenuModel,\n ChActionMenuRenderCustomEvent,\n ChPopoverAlign\n} from \"@genexus/chameleon-controls-library\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n // TODO: review if \"utils/form--full\" is required.\n \"resets/box-sizing\",\n \"components/tooltip\",\n \"components/switch\",\n \"components/icon\",\n \"components/dropdown\",\n \"utils/layout\",\n \"utils/typography\",\n \"utils/spacing\",\n \"chameleon/scrollbar\"\n];\n\nconst CHEVRON_DOWN_ICON = getIconPath({\n category: \"navigation\",\n name: \"chevron-down\",\n colorType: \"neutral\"\n});\n\nconst MY_ACCOUNT_ID = \"my-account\";\nconst CHANGE_TEAM_ID = \"change-team\";\nconst SIGN_OUT_ID = \"sign-out\";\nconst LANGUAGE_ID = \"language\";\n\n@Component({\n tag: \"gx-ide-current-user-info\",\n styleUrl: \"current-user-info.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/current-user-info\"]\n})\nexport class GxIdeNewEnvironment {\n #componentLocale: any;\n #initials: string = \"\";\n // #mode: Mode;\n #menuDropdownModel: ActionMenuModel;\n\n @Element() el: HTMLGxIdeCurrentUserInfoElement;\n #userLoginButton: HTMLButtonElement;\n\n @State() showMenu: boolean = false;\n\n /**\n * User data\n */\n @Prop() readonly userInfo: UserInfo;\n\n /**\n * Callback executed when the user click \"My Account\" link\n */\n @Prop() readonly myAccountCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"change team\" link\n */\n @Prop() readonly changeTeamCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user click \"Language\" link\n */\n @Prop() readonly changeLanguageCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user switch the \"Mode\" status\n */\n @Prop() readonly changeModeCallback!: (mode: Mode) => Promise<void>;\n\n /**\n * Defines the menu block and inline alignment\n */\n @Prop() readonly menuAlign: MenuAlign;\n\n /**\n * Callback executed when the user click \"Sign Out\" link\n */\n @Prop() readonly signOutCallback!: () => Promise<void>;\n\n /**\n * Callback executed when the user clicks on the \"term and conditions\" link\n */\n @Prop() readonly termsCallback: () => Promise<void>;\n\n /**\n * Callback executed when the user clicks on the \"privacy policy\" link\n */\n @Prop() readonly privacyCallback: () => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n this.#initials = getInitialsFromName(this.userInfo.name);\n this.#menuDropdownModel = [\n // {\n // id: MY_ACCOUNT_ID,\n // caption: this.#componentLocale.myAccountLabel,\n // showSeparator: false\n // },\n {\n id: CHANGE_TEAM_ID,\n caption: this.#componentLocale.changeTeamLabel\n },\n {\n id: SIGN_OUT_ID,\n caption: this.#componentLocale.signOutLabel\n },\n {\n type: \"separator\"\n },\n {\n type: \"slot\",\n id: \"agreement\"\n }\n ];\n }\n\n // #handleModeSwitch = () => {\n // this.#mode = this.#mode === \"dark\" ? \"light\" : \"dark\";\n // if (this.changeModeCallback) {\n // this.changeModeCallback(this.#mode);\n // }\n // };\n\n #dropDownitemClickHandler = (\n event: ChActionMenuRenderCustomEvent<ActionMenuItemActionableModel>\n ): void => {\n const id = event.detail.id;\n if (id === MY_ACCOUNT_ID) {\n // this.myAccountCallback();\n } else if (id === CHANGE_TEAM_ID) {\n this.changeTeamCallback();\n } else if (id === SIGN_OUT_ID) {\n this.signOutCallback();\n } else if (id === LANGUAGE_ID) {\n this.changeLanguageCallback();\n }\n };\n\n render() {\n const userName = limitFullName(this.userInfo?.name);\n return (\n <Host class=\"widget\">\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-action-menu-render\n class=\"dropdown user-login__button\"\n model={this.#menuDropdownModel}\n inlineAlign=\"inside-end\"\n blockAlign=\"outside-end\"\n onButtonClick={this.#dropDownitemClickHandler}\n >\n <div class=\"user-login__details\">\n {userName ? <span class=\"user-login__name\">{userName}</span> : null}\n {this.userInfo?.team ? (\n <span class=\"user-login__organization\">{this.userInfo.team}</span>\n ) : null}\n </div>\n <div class=\"user-login__avatar\">{this.#initials}</div>\n <ch-image\n src={CHEVRON_DOWN_ICON}\n class=\"icon-md\"\n containerRef={this.#userLoginButton}\n ></ch-image>\n <div class=\"user-login__footer footer-slot\" slot=\"agreement\">\n <button\n class=\"body-regular-s agreement-link\"\n onClick={this.termsCallback}\n >\n {this.#componentLocale.termsAndConditionsCaption}\n </button>\n <button\n class=\"body-regular-s\tagreement-link\"\n onClick={this.privacyCallback}\n >\n {this.#componentLocale.privacyPolicyCaption}\n </button>\n </div>\n </ch-action-menu-render>\n </Host>\n );\n }\n}\n\nexport type MenuAlign = {\n blockAlign: ChPopoverAlign;\n inlineAlign: ChPopoverAlign;\n};\n\nexport type UserInfo = {\n name: string;\n team: string;\n};\n\nexport type Mode = \"dark\" | \"light\";\n"],"version":3}
@@ -1,5 +1,6 @@
1
1
  import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
- import { g as getIconPath } from './MERCURY_ASSETS.js';
2
+ import { g as getIconPath } from './assets-manager.js';
3
+ import './MERCURY_ASSETS.js';
3
4
  import { L as Locale } from './locale.js';
4
5
  import { f as formatDate } from './helpers.js';
5
6
  import { d as defineCustomElement$2 } from './gx-ide-empty-state2.js';