@genexus/genexus-ide-ui 1.1.31 → 1.1.33

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 (49) hide show
  1. package/dist/cjs/gx-ide-about.cjs.entry.js +1 -1
  2. package/dist/cjs/gx-ide-about.cjs.entry.js.map +1 -1
  3. package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js +9 -2
  4. package/dist/cjs/gx-ide-chat-container_2.cjs.entry.js.map +1 -1
  5. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +2 -1
  6. package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -1
  7. package/dist/cjs/gx-ide-sign-in-team.cjs.entry.js +1 -1
  8. package/dist/cjs/gx-ide-sign-in-team.cjs.entry.js.map +1 -1
  9. package/dist/collection/components/about/about.css +0 -1
  10. package/dist/collection/components/chat/chat-container/chat-container.js +10 -2
  11. package/dist/collection/components/chat/chat-container/chat-container.js.map +1 -1
  12. package/dist/collection/components/chat/chat-container/gx-ide-assets/chat-container/chat-lit.css +376 -0
  13. package/dist/collection/components/chat/chat-welcome/chat-welcome.js +0 -1
  14. package/dist/collection/components/chat/chat-welcome/chat-welcome.js.map +1 -1
  15. package/dist/collection/components/sign-in-team/sign-in-team.css +1 -2
  16. package/dist/collection/showcase/chat-container/chat.showcase.js +2 -1
  17. package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -1
  18. package/dist/components/chat-container.js +10 -2
  19. package/dist/components/chat-container.js.map +1 -1
  20. package/dist/components/chat-welcome.js +0 -1
  21. package/dist/components/chat-welcome.js.map +1 -1
  22. package/dist/components/gx-ide-about.js +1 -1
  23. package/dist/components/gx-ide-about.js.map +1 -1
  24. package/dist/components/gx-ide-sc-chat-container.js +2 -1
  25. package/dist/components/gx-ide-sc-chat-container.js.map +1 -1
  26. package/dist/components/gx-ide-sign-in-team.js +1 -1
  27. package/dist/components/gx-ide-sign-in-team.js.map +1 -1
  28. package/dist/esm/gx-ide-about.entry.js +1 -1
  29. package/dist/esm/gx-ide-about.entry.js.map +1 -1
  30. package/dist/esm/gx-ide-chat-container_2.entry.js +10 -3
  31. package/dist/esm/gx-ide-chat-container_2.entry.js.map +1 -1
  32. package/dist/esm/gx-ide-sc-chat-container.entry.js +2 -1
  33. package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -1
  34. package/dist/esm/gx-ide-sign-in-team.entry.js +1 -1
  35. package/dist/esm/gx-ide-sign-in-team.entry.js.map +1 -1
  36. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  37. package/dist/genexus-ide-ui/gx-ide-assets/chat-container/chat-lit.css +376 -0
  38. package/dist/genexus-ide-ui/{p-c3e410cc.entry.js → p-04308eaa.entry.js} +2 -2
  39. package/dist/genexus-ide-ui/p-04308eaa.entry.js.map +1 -0
  40. package/dist/genexus-ide-ui/{p-61343e93.entry.js → p-203f0417.entry.js} +8 -8
  41. package/dist/genexus-ide-ui/p-203f0417.entry.js.map +1 -0
  42. package/dist/genexus-ide-ui/{p-137130ad.entry.js → p-8d6f2b4f.entry.js} +4 -2
  43. package/dist/genexus-ide-ui/{p-137130ad.entry.js.map → p-8d6f2b4f.entry.js.map} +1 -1
  44. package/dist/genexus-ide-ui/{p-1477d49a.entry.js → p-9270c80f.entry.js} +102 -90
  45. package/dist/genexus-ide-ui/p-9270c80f.entry.js.map +1 -0
  46. package/package.json +3 -3
  47. package/dist/genexus-ide-ui/p-1477d49a.entry.js.map +0 -1
  48. package/dist/genexus-ide-ui/p-61343e93.entry.js.map +0 -1
  49. package/dist/genexus-ide-ui/p-c3e410cc.entry.js.map +0 -1
@@ -15,9 +15,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
15
15
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
16
16
  };
17
17
  var _GxIdeChatContainer_menuItems, _GxIdeChatContainer_componentLocale, _GxIdeChatContainer_showMenuHandler, _GxIdeChatContainer_menuExpandedChangeHandler, _GxIdeChatContainer_copyConversationHandler, _GxIdeChatContainer_deleteConversationHandler;
18
- import { Host, h } from "@stencil/core";
18
+ import { Host, h, getAssetPath } from "@stencil/core";
19
19
  import { getIconPath } from "@genexus/mercury";
20
20
  import { Locale } from "../../../common/locale";
21
+ // TODO: Remove this once update chat bundle for lit is ready
22
+ // on a new Mercury version
23
+ const CHAT_LIT_PATH = getAssetPath(`./gx-ide-assets/chat-container/chat-lit.css`);
21
24
  const CSS_BUNDLES = [
22
25
  "resets/box-sizing",
23
26
  "utils/typography",
@@ -27,6 +30,11 @@ const CSS_BUNDLES = [
27
30
  "components/icon",
28
31
  "utils/elevation"
29
32
  ];
33
+ const CSS_BUNDLE_CHAT_LIT = {
34
+ // styleSheet: chatListCss,
35
+ url: CHAT_LIT_PATH,
36
+ name: "components/chat-lit"
37
+ };
30
38
  const COPY_ICON = getIconPath({
31
39
  category: "system",
32
40
  name: "copy",
@@ -102,7 +110,7 @@ export class GxIdeChatContainer {
102
110
  return (h(Host, { class: {
103
111
  "chat-container": true,
104
112
  "with-header": !!renderHeader
105
- } }, h("ch-theme", { model: CSS_BUNDLES }), h("section", { class: "section" }, renderHeader && (h("header", { class: "header tiny-semi-bold-l" }, this.chatTitle && this.chatTitle, renderButtonsGroup && (h("ch-action-menu-render", { class: "dropdown", blockAlign: "inside-start", inlineAlign: "inside-end", model: __classPrivateFieldGet(this, _GxIdeChatContainer_menuItems, "f"), expanded: this.menuIsExpanded, onExpandedChange: __classPrivateFieldGet(this, _GxIdeChatContainer_menuExpandedChangeHandler, "f") }, h("button", { class: "button-tertiary button-icon-only", onClick: __classPrivateFieldGet(this, _GxIdeChatContainer_showMenuHandler, "f"), type: "button", "aria-label": __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").showMenuAriaLabel, title: __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").showMenuAriaLabel }, h("ch-image", { class: "icon-md", src: MORE_HORIZONTAL_ICON })), this.copyConversationCallback && (h("button", { class: "button-tertiary button-icon-and-text button-copy-chat", slot: "copy-chat-button", onClick: __classPrivateFieldGet(this, _GxIdeChatContainer_copyConversationHandler, "f"), type: "button", "aria-label": __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").copyConversationAriaLabel, title: __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").copyConversationAriaLabel }, h("ch-image", { class: "icon-md", src: COPY_ICON }), __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").copyConversationLabel)), this.deleteConversationCallback && (h("button", { class: "button-tertiary button-icon-and-text button-delete-chat", slot: "delete-chat-button", onClick: __classPrivateFieldGet(this, _GxIdeChatContainer_deleteConversationHandler, "f"), type: "button", "aria-label": __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").deleteConversationAriaLabel, title: __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").deleteConversationAriaLabel }, h("ch-image", { class: "icon-md", src: DELETE_ICON }), __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").clearConversationLabel)))))), h("section", { class: "ch-chat-container" }, 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"))))))));
113
+ } }, h("ch-theme", { model: CSS_BUNDLES }), h("ch-theme", { model: CSS_BUNDLE_CHAT_LIT }), h("section", { class: "section" }, renderHeader && (h("header", { class: "header tiny-semi-bold-l" }, this.chatTitle && this.chatTitle, renderButtonsGroup && (h("ch-action-menu-render", { class: "dropdown", blockAlign: "inside-start", inlineAlign: "inside-end", model: __classPrivateFieldGet(this, _GxIdeChatContainer_menuItems, "f"), expanded: this.menuIsExpanded, onExpandedChange: __classPrivateFieldGet(this, _GxIdeChatContainer_menuExpandedChangeHandler, "f") }, h("button", { class: "button-tertiary button-icon-only", onClick: __classPrivateFieldGet(this, _GxIdeChatContainer_showMenuHandler, "f"), type: "button", "aria-label": __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").showMenuAriaLabel, title: __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").showMenuAriaLabel }, h("ch-image", { class: "icon-md", src: MORE_HORIZONTAL_ICON })), this.copyConversationCallback && (h("button", { class: "button-tertiary button-icon-and-text button-copy-chat", slot: "copy-chat-button", onClick: __classPrivateFieldGet(this, _GxIdeChatContainer_copyConversationHandler, "f"), type: "button", "aria-label": __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").copyConversationAriaLabel, title: __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").copyConversationAriaLabel }, h("ch-image", { class: "icon-md", src: COPY_ICON }), __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").copyConversationLabel)), this.deleteConversationCallback && (h("button", { class: "button-tertiary button-icon-and-text button-delete-chat", slot: "delete-chat-button", onClick: __classPrivateFieldGet(this, _GxIdeChatContainer_deleteConversationHandler, "f"), type: "button", "aria-label": __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").deleteConversationAriaLabel, title: __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").deleteConversationAriaLabel }, h("ch-image", { class: "icon-md", src: DELETE_ICON }), __classPrivateFieldGet(this, _GxIdeChatContainer_componentLocale, "f").clearConversationLabel)))))), h("section", { class: "ch-chat-container" }, 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"))))))));
106
114
  }
107
115
  static get is() { return "gx-ide-chat-container"; }
108
116
  static get originalStyleUrls() {
@@ -1 +1 @@
1
- {"version":3,"file":"chat-container.js","sourceRoot":"","sources":["../../../../src/components/chat/chat-container/chat-container.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n h,\n Prop,\n Element,\n Method,\n State\n} from \"@stencil/core\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { ActionMenuModel } from \"@genexus/chameleon-controls-library\";\n\nimport { Locale } from \"../../../common/locale\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"chameleon/scrollbar\",\n \"components/button\",\n \"components/dropdown\",\n \"components/icon\",\n \"utils/elevation\"\n];\n\nconst COPY_ICON = getIconPath({\n category: \"system\",\n name: \"copy\",\n colorType: \"primary\"\n});\nconst DELETE_ICON = getIconPath({\n category: \"system\",\n name: \"delete-outlined\",\n colorType: \"primary\"\n});\nconst CONVERSATION_ICON = getIconPath({\n category: \"objects\",\n name: \"conversational-flows\"\n});\nconst MORE_HORIZONTAL_ICON = getIconPath({\n category: \"system\",\n name: \"more-horizontal\",\n colorType: \"neutral\"\n});\n\n@Component({\n tag: \"gx-ide-chat-container\",\n styleUrl: \"chat-container.scss\",\n shadow: false,\n assetsDirs: [\"gx-ide-assets/chat-container\"]\n})\nexport class GxIdeChatContainer {\n #menuItems: ActionMenuModel = [\n { type: \"slot\", id: \"delete-chat-button\" },\n { type: \"slot\", id: \"copy-chat-button\" }\n ];\n\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeChatContainerElement;\n\n /**\n * Coneration Copied\n */\n @State() displayConversationCopiedMessage: boolean = false;\n\n /**\n * Displays or hides the menu\n */\n @State() menuIsExpanded: boolean = false;\n\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 * If true a the welcome screen will be rendered\n */\n @Prop() readonly displayWelcomeScreen: boolean = false;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\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 #showMenuHandler = () => {\n this.menuIsExpanded = true;\n };\n\n #menuExpandedChangeHandler = (event: CustomEvent<boolean>) => {\n this.menuIsExpanded = event.detail;\n };\n\n #copyConversationHandler = () => {\n if (this.copyConversationCallback) {\n this.copyConversationCallback();\n this.menuIsExpanded = false;\n }\n };\n #deleteConversationHandler = () => {\n if (this.deleteConversationCallback) {\n this.deleteConversationCallback();\n this.menuIsExpanded = false;\n }\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\n class={{\n \"chat-container\": true,\n \"with-header\": !!renderHeader\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <section class=\"section\">\n {renderHeader && (\n <header class=\"header tiny-semi-bold-l\">\n {this.chatTitle && this.chatTitle}\n {renderButtonsGroup && (\n <ch-action-menu-render\n class=\"dropdown\"\n blockAlign=\"inside-start\"\n inlineAlign=\"inside-end\"\n model={this.#menuItems}\n expanded={this.menuIsExpanded}\n onExpandedChange={this.#menuExpandedChangeHandler}\n >\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#showMenuHandler}\n type=\"button\"\n aria-label={this.#componentLocale.showMenuAriaLabel}\n title={this.#componentLocale.showMenuAriaLabel}\n >\n <ch-image\n class=\"icon-md\"\n src={MORE_HORIZONTAL_ICON}\n ></ch-image>\n </button>\n {this.copyConversationCallback && (\n <button\n class=\"button-tertiary button-icon-and-text button-copy-chat\"\n slot=\"copy-chat-button\"\n onClick={this.#copyConversationHandler}\n type=\"button\"\n aria-label={\n this.#componentLocale.copyConversationAriaLabel\n }\n title={this.#componentLocale.copyConversationAriaLabel}\n >\n <ch-image class=\"icon-md\" src={COPY_ICON}></ch-image>\n {this.#componentLocale.copyConversationLabel}\n </button>\n )}\n {this.deleteConversationCallback && (\n <button\n class=\"button-tertiary button-icon-and-text button-delete-chat\"\n slot=\"delete-chat-button\"\n onClick={this.#deleteConversationHandler}\n type=\"button\"\n aria-label={\n this.#componentLocale.deleteConversationAriaLabel\n }\n title={this.#componentLocale.deleteConversationAriaLabel}\n >\n <ch-image class=\"icon-md\" src={DELETE_ICON}></ch-image>\n {this.#componentLocale.clearConversationLabel}\n </button>\n )}\n </ch-action-menu-render>\n )}\n </header>\n )}\n <section class=\"ch-chat-container\">\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=\"footer elevation-1\">footer</footer> */}\n </section>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"chat-container.js","sourceRoot":"","sources":["../../../../src/components/chat/chat-container/chat-container.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Host,\n h,\n Prop,\n Element,\n Method,\n State,\n getAssetPath\n} from \"@stencil/core\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\nimport { ActionMenuModel } from \"@genexus/chameleon-controls-library\";\n\nimport { Locale } from \"../../../common/locale\";\nimport { ThemeItemModel } from \"@genexus/chameleon-controls-library/dist/types/components/theme/theme-types\";\n\n// TODO: Remove this once update chat bundle for lit is ready\n// on a new Mercury version\nconst CHAT_LIT_PATH = getAssetPath(\n `./gx-ide-assets/chat-container/chat-lit.css`\n);\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/typography\",\n \"chameleon/scrollbar\",\n \"components/button\",\n \"components/dropdown\",\n \"components/icon\",\n \"utils/elevation\"\n];\nconst CSS_BUNDLE_CHAT_LIT: ThemeItemModel = {\n // styleSheet: chatListCss,\n url: CHAT_LIT_PATH,\n name: \"components/chat-lit\"\n};\n\nconst COPY_ICON = getIconPath({\n category: \"system\",\n name: \"copy\",\n colorType: \"primary\"\n});\nconst DELETE_ICON = getIconPath({\n category: \"system\",\n name: \"delete-outlined\",\n colorType: \"primary\"\n});\nconst CONVERSATION_ICON = getIconPath({\n category: \"objects\",\n name: \"conversational-flows\"\n});\nconst MORE_HORIZONTAL_ICON = getIconPath({\n category: \"system\",\n name: \"more-horizontal\",\n colorType: \"neutral\"\n});\n\n@Component({\n tag: \"gx-ide-chat-container\",\n styleUrl: \"chat-container.scss\",\n shadow: false,\n assetsDirs: [\"gx-ide-assets/chat-container\"]\n})\nexport class GxIdeChatContainer {\n #menuItems: ActionMenuModel = [\n { type: \"slot\", id: \"delete-chat-button\" },\n { type: \"slot\", id: \"copy-chat-button\" }\n ];\n\n /**\n * The component hard-coded strings translations.\n */\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeChatContainerElement;\n\n /**\n * Coneration Copied\n */\n @State() displayConversationCopiedMessage: boolean = false;\n\n /**\n * Displays or hides the menu\n */\n @State() menuIsExpanded: boolean = false;\n\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 * If true a the welcome screen will be rendered\n */\n @Prop() readonly displayWelcomeScreen: boolean = false;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n }\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 #showMenuHandler = () => {\n this.menuIsExpanded = true;\n };\n\n #menuExpandedChangeHandler = (event: CustomEvent<boolean>) => {\n this.menuIsExpanded = event.detail;\n };\n\n #copyConversationHandler = () => {\n if (this.copyConversationCallback) {\n this.copyConversationCallback();\n this.menuIsExpanded = false;\n }\n };\n #deleteConversationHandler = () => {\n if (this.deleteConversationCallback) {\n this.deleteConversationCallback();\n this.menuIsExpanded = false;\n }\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\n class={{\n \"chat-container\": true,\n \"with-header\": !!renderHeader\n }}\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <ch-theme model={CSS_BUNDLE_CHAT_LIT}></ch-theme>\n <section class=\"section\">\n {renderHeader && (\n <header class=\"header tiny-semi-bold-l\">\n {this.chatTitle && this.chatTitle}\n {renderButtonsGroup && (\n <ch-action-menu-render\n class=\"dropdown\"\n blockAlign=\"inside-start\"\n inlineAlign=\"inside-end\"\n model={this.#menuItems}\n expanded={this.menuIsExpanded}\n onExpandedChange={this.#menuExpandedChangeHandler}\n >\n <button\n class=\"button-tertiary button-icon-only\"\n onClick={this.#showMenuHandler}\n type=\"button\"\n aria-label={this.#componentLocale.showMenuAriaLabel}\n title={this.#componentLocale.showMenuAriaLabel}\n >\n <ch-image\n class=\"icon-md\"\n src={MORE_HORIZONTAL_ICON}\n ></ch-image>\n </button>\n {this.copyConversationCallback && (\n <button\n class=\"button-tertiary button-icon-and-text button-copy-chat\"\n slot=\"copy-chat-button\"\n onClick={this.#copyConversationHandler}\n type=\"button\"\n aria-label={\n this.#componentLocale.copyConversationAriaLabel\n }\n title={this.#componentLocale.copyConversationAriaLabel}\n >\n <ch-image class=\"icon-md\" src={COPY_ICON}></ch-image>\n {this.#componentLocale.copyConversationLabel}\n </button>\n )}\n {this.deleteConversationCallback && (\n <button\n class=\"button-tertiary button-icon-and-text button-delete-chat\"\n slot=\"delete-chat-button\"\n onClick={this.#deleteConversationHandler}\n type=\"button\"\n aria-label={\n this.#componentLocale.deleteConversationAriaLabel\n }\n title={this.#componentLocale.deleteConversationAriaLabel}\n >\n <ch-image class=\"icon-md\" src={DELETE_ICON}></ch-image>\n {this.#componentLocale.clearConversationLabel}\n </button>\n )}\n </ch-action-menu-render>\n )}\n </header>\n )}\n <section class=\"ch-chat-container\">\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=\"footer elevation-1\">footer</footer> */}\n </section>\n </Host>\n );\n }\n}\n"]}
@@ -0,0 +1,376 @@
1
+ .chat-lit::part(header__time assistant),
2
+ .chat-lit::part(send-input),
3
+ .chat-lit::part(assistant content waiting),
4
+ .chat-lit::part(send-button),
5
+ .chat-lit::part(stop-generating-answer-button) {
6
+ line-height: var(--line-height-tight);
7
+ }
8
+ .chat-lit::part(send-input),
9
+ .chat-lit::part(send-button),
10
+ .chat-lit::part(stop-generating-answer-button) {
11
+ font-size: var(--font-size-body-m);
12
+ }
13
+ .chat-lit::part(header__time assistant),
14
+ .chat-lit::part(assistant content waiting) {
15
+ font-size: var(--font-size-body-s);
16
+ }
17
+ .chat-lit::part(send-input) {
18
+ font-weight: var(--font-weight-regular);
19
+ }
20
+ .chat-lit::part(message),
21
+ .chat-lit::part(assistant copy-message-content) {
22
+ font-size: var(--font-size-body-m);
23
+ line-height: var(--line-height-tight);
24
+ font-weight: var(--font-weight-regular);
25
+ }
26
+ .chat-lit::part(send-button),
27
+ .chat-lit::part(stop-generating-answer-button) {
28
+ font-weight: var(--font-weight-semi-bold);
29
+ }
30
+ .chat-lit::part(header__time assistant),
31
+ .chat-lit::part(assistant content waiting) {
32
+ font-weight: var(--font-weight-regular);
33
+ font-style: italic;
34
+ }
35
+ .chat-lit::part(assistant copy-message-content),
36
+ .chat-lit::part(send-button),
37
+ .chat-lit::part(stop-generating-answer-button) {
38
+ display: inline-grid;
39
+ grid-auto-flow: column;
40
+ grid-auto-columns: max-content;
41
+ justify-content: center;
42
+ border-width: var(--control__border-width);
43
+ border-style: var(--control__border-style);
44
+ border-color: var(--control__border-color);
45
+ border-radius: var(--control__border-radius);
46
+ padding-block: var(--control__padding-block);
47
+ padding-inline: var(--control__padding-inline);
48
+ box-sizing: border-box;
49
+ background-color: var(--button-background-color);
50
+ color: var(--button-color);
51
+ }
52
+ .chat-lit::part(assistant copy-message-content):focus-visible,
53
+ .chat-lit::part(send-button):focus-visible,
54
+ .chat-lit::part(stop-generating-answer-button):focus-visible {
55
+ outline: var(--focus__outline-width) var(--focus__outline-style)
56
+ var(--focus__outline-color);
57
+ outline-offset: var(--focus__outline-offset);
58
+ }
59
+ .chat-lit::part(send-button),
60
+ .chat-lit::part(stop-generating-answer-button) {
61
+ --button-background-color: transparent;
62
+ --control__border-color: var(--button-color);
63
+ --button-color: var(--mer-text__neutral);
64
+ --button-color--enabled: var(--mer-text__neutral);
65
+ --button-color--active: var(--mer-text__on-primary--active);
66
+ }
67
+ .chat-lit::part(send-button):hover,
68
+ .chat-lit::part(stop-generating-answer-button):hover {
69
+ --button-color: var(--mer-text__primary--hover);
70
+ }
71
+ .chat-lit::part(send-button):active,
72
+ .chat-lit::part(stop-generating-answer-button):active {
73
+ --control__border-color: var(--mer-border-color__primary--active);
74
+ --button-color: var(--button-color--active);
75
+ }
76
+ .chat-lit::part(send-button):disabled,
77
+ .chat-lit::part(stop-generating-answer-button):disabled {
78
+ --button-color: var(--mer-text__on-disabled);
79
+ }
80
+ .chat-lit::part(assistant copy-message-content) {
81
+ --button-background-color: transparent;
82
+ --control__border-color: transparent;
83
+ --button-color: var(--mer-text__primary);
84
+ }
85
+ .chat-lit::part(assistant copy-message-content):hover {
86
+ --button-color: var(--mer-text__primary--hover);
87
+ }
88
+ .chat-lit::part(assistant copy-message-content):active {
89
+ --button-color: var(--mer-text__primary--active);
90
+ }
91
+ .chat-lit::part(assistant copy-message-content):disabled {
92
+ --button-color: var(--mer-text__on-disabled);
93
+ }
94
+ .chat-lit::part(assistant copy-message-content),
95
+ .chat-lit::part(send-button),
96
+ .chat-lit::part(stop-generating-answer-button) {
97
+ padding: calc(
98
+ (
99
+ var(--control__block-size) - 2 * var(--control__border-width) -
100
+ var(--mer-icon__box--md)
101
+ ) /
102
+ 2
103
+ );
104
+ border-width: var(--control__border-width);
105
+ border-style: var(--control__border-style);
106
+ border-color: var(--control__border-color);
107
+ border-radius: var(--control__border-radius);
108
+ }
109
+ .chat-lit::part(send-input) {
110
+ --ch-edit-gap: var(--control__icon-gap);
111
+ --ch-edit__image-size: var(--mer-icon__box--md);
112
+ --ch-placeholder-color: var(--mer-color__neutral-gray--400);
113
+ border-width: var(--control__border-width);
114
+ border-style: var(--control__border-style);
115
+ border-color: var(--control__border-color);
116
+ border-radius: var(--control__border-radius);
117
+ background-color: var(--control__bg-color);
118
+ color: var(--control__color);
119
+ --ch-placeholder-color: var(--control-placeholder__color);
120
+ padding-block: var(--control__padding-block);
121
+ padding-inline: var(--control__padding-inline);
122
+ }
123
+ .chat-lit::part(send-input):focus {
124
+ outline: var(--focus__outline-width) var(--focus__outline-style)
125
+ var(--focus__outline-color);
126
+ outline-offset: var(--focus__outline-offset);
127
+ }
128
+ .chat-lit::part(send-input):hover {
129
+ --control__border-color: var(--control__border-color--hover);
130
+ }
131
+ .chat-lit {
132
+ --button-block-size: 31px;
133
+ --button-margin-block: var(--mer-spacing--md);
134
+ --font-weight-regular: 100;
135
+ --line-height-tight: 1.4;
136
+ --send-input-block-padding: 16px;
137
+ --send-input-inline-start-padding: 10px;
138
+ --send-input-inline-end-padding: 10px;
139
+ --send-input-inline-size: 32px;
140
+ }
141
+ .chat-lit::part(messages-container) {
142
+ gap: var(--mer-spacing--md);
143
+ padding: var(--mer-spacing--md);
144
+ }
145
+ .chat-lit-with-file-upload {
146
+ --send-input-block-padding: 10px;
147
+ --send-input-inline-start-padding: 2px;
148
+ }
149
+ .chat-lit-with-file-upload::part(send-input) {
150
+ grid-template: "file-upload-menu ch-edit-content live-audio-button" 1fr / max-content 1fr max-content;
151
+ }
152
+ .chat-lit-with-file-viewer::part(send-input) {
153
+ grid-template: "file-upload-menu ch-edit-content live-audio-button" 1fr "file-viewer file-viewer file-viewer" max-content/max-content 1fr;
154
+ }
155
+ .chat-lit::part(message) {
156
+ --message-content-border-color: transparent;
157
+ --time-display: initial;
158
+ color: var(--mer-color__neutral-gray--100);
159
+ }
160
+ .chat-lit::part(message user) {
161
+ background-color: var(--mer-color__chat-message--user);
162
+ max-inline-size: 90%;
163
+ justify-self: end;
164
+ }
165
+ .chat-lit::part(message user),
166
+ .chat-lit::part(error content),
167
+ .chat-lit::part(assistant content warning),
168
+ .chat-lit::part(assistant content success) {
169
+ padding: var(--mer-spacing--sm);
170
+ border-radius: var(--mer-border__radius--sm);
171
+ }
172
+ .chat-lit::part(assistant copy-message-content)::before {
173
+ --button-icon: var(--icon__system_copy_primary--enabled);
174
+ content: "";
175
+ inline-size: var(--mer-icon__box--md);
176
+ block-size: var(--mer-icon__box--md);
177
+ content: "";
178
+ display: grid;
179
+ -webkit-mask: no-repeat center/100% var(--button-icon);
180
+ background-color: currentColor;
181
+ }
182
+ .chat-lit::part(assistant copy-message-content copying)::before {
183
+ --button-icon: var(--icon__system_check_on-elevation--enabled);
184
+ }
185
+ .chat-lit::part(header assistant) {
186
+ align-items: center;
187
+ display: flex;
188
+ font-size: 12px;
189
+ justify-content: space-between;
190
+ margin-block-end: var(--mer-spacing--sm);
191
+ }
192
+ .chat-lit::part(header__start assistant) {
193
+ align-items: center;
194
+ display: flex;
195
+ gap: var(--mer-spacing--xs);
196
+ }
197
+ .chat-lit::part(header__avatar-container assistant) {
198
+ position: relative;
199
+ inline-size: 26px;
200
+ block-size: 26px;
201
+ display: flex;
202
+ align-items: center;
203
+ justify-content: center;
204
+ }
205
+ .chat-lit::part(header__avatar-border assistant) {
206
+ position: absolute;
207
+ overflow: hidden;
208
+ inline-size: 100%;
209
+ block-size: 100%;
210
+ background: linear-gradient(
211
+ 90deg,
212
+ var(
213
+ --chat-avatar-border-color-from,
214
+ var(--mer-color__chat-avatar-circle-from)
215
+ )
216
+ 0%,
217
+ var(--chat-avatar-border-color-to, var(--mer-color__chat-avatar-circle-to))
218
+ 100%
219
+ );
220
+ border-radius: 50%;
221
+ -webkit-mask-image: radial-gradient(
222
+ circle 12px at center,
223
+ transparent 98%,
224
+ black 100%
225
+ );
226
+ mask-image: radial-gradient(
227
+ circle 12px at center,
228
+ transparent 98%,
229
+ black 100%
230
+ );
231
+ }
232
+ .chat-lit::part(header__avatar-image assistant) {
233
+ position: absolute;
234
+ display: block;
235
+ width: calc(100% - 6px);
236
+ height: calc(100% - 6px);
237
+ border-radius: 50%;
238
+ background-image: var(--icon__system_assistant-fill_primary--active);
239
+ background-color: var(
240
+ --chat-avatar-background-color,
241
+ var(--mer-color__primary--300)
242
+ );
243
+ background-size: 80%;
244
+ background-repeat: no-repeat;
245
+ background-position: center center;
246
+ }
247
+ .chat-lit::part(header__role assistant) {
248
+ display: inline-grid;
249
+ gap: 6px;
250
+ grid-template-columns: max-content max-content;
251
+ }
252
+ .chat-lit::part(header__role assistant)::before {
253
+ align-self: center;
254
+ background-color: currentColor;
255
+ block-size: var(--mer-spacing--2xs);
256
+ border-radius: 50%;
257
+ content: "";
258
+ display: grid;
259
+ inline-size: var(--mer-spacing--2xs);
260
+ justify-self: flex-end;
261
+ }
262
+ .chat-lit::part(header__time assistant) {
263
+ display: var(--time-display);
264
+ color: var(--mer-text__complementary);
265
+ }
266
+ .chat-lit::part(error content),
267
+ .chat-lit::part(assistant content warning),
268
+ .chat-lit::part(assistant content success) {
269
+ display: grid;
270
+ grid-template-columns: max-content 1fr;
271
+ gap: var(--mer-spacing--sm);
272
+ align-items: center;
273
+ }
274
+ .chat-lit::part(error content)::before,
275
+ .chat-lit::part(assistant content warning)::before,
276
+ .chat-lit::part(assistant content success)::before {
277
+ block-size: var(--mer-spacing--md);
278
+ content: "";
279
+ display: grid;
280
+ inline-size: var(--mer-spacing--md);
281
+ justify-self: flex-end;
282
+ background: var(--chat-message-icon) no-repeat center center/contain;
283
+ }
284
+ .chat-lit::part(error content) {
285
+ background-color: var(--mer-color__chat-message--error);
286
+ --chat-message-icon: var(--icon__system_warning_error--enabled);
287
+ }
288
+ .chat-lit::part(assistant content warning) {
289
+ background-color: var(--mer-color__chat-message--warning);
290
+ --chat-message-icon: var(--icon__system_warning_warning--enabled);
291
+ }
292
+ .chat-lit::part(assistant content success) {
293
+ background-color: var(--mer-color__chat-message--success);
294
+ --chat-message-icon: var(--icon__system_check_success--enabled);
295
+ }
296
+ .chat-lit::part(assistant content waiting) {
297
+ display: flex;
298
+ gap: var(--mer-spacing--xs);
299
+ }
300
+ .chat-lit::part(send-container) {
301
+ background-color: var(--mer-surface__elevation--02);
302
+ border-radius: var(--mer-spacing--2xs);
303
+ position: relative;
304
+ margin: var(--mer-spacing--md);
305
+ }
306
+ .chat-lit::part(send-input-wrapper) {
307
+ position: relative;
308
+ }
309
+ .chat-lit::part(send-input) {
310
+ --ch-edit-gap: var(--control__icon-gap);
311
+ --ch-edit__image-size: var(--mer-icon__box--md);
312
+ --ch-placeholder-color: var(--control-placeholder__color);
313
+ border-width: 0 !important;
314
+ background-color: rgba(0, 0, 0, 0) !important;
315
+ border-color: var(--mer-color__neutral-gray--900);
316
+ border-radius: var(--control__border-radius);
317
+ border-style: var(--control__border-style);
318
+ color: var(--control__color);
319
+ padding-block: var(--send-input-block-padding);
320
+ padding-inline-start: var(--send-input-inline-start-padding);
321
+ padding-inline-end: calc(
322
+ var(--send-input-inline-end-padding) * 2 + var(--send-input-inline-size)
323
+ );
324
+ }
325
+ .chat-lit::part(send-input):hover {
326
+ --control__border-color: var(--control__border-color--hover);
327
+ }
328
+ .chat-lit::part(send-input):focus {
329
+ outline: var(--focus__outline-width) var(--focus__outline-style)
330
+ var(--focus__outline-color);
331
+ outline-offset: var(--focus__outline-offset);
332
+ }
333
+ .chat-lit::part(send-button),
334
+ .chat-lit::part(stop-generating-answer-button) {
335
+ position: absolute;
336
+ inset-inline-end: var(--send-input-inline-end-padding);
337
+ inset-block-end: var(--send-input-inline-end-padding);
338
+ }
339
+ .chat-lit::part(send-button) {
340
+ --icon-path: var(--icon__system_send_neutral--enabled);
341
+ z-index: 1;
342
+ }
343
+ .chat-lit::part(send-button):hover {
344
+ --icon-path: var(--icon__system_send_neutral--hover);
345
+ }
346
+ .chat-lit::part(send-button):active {
347
+ --icon-path: var(--icon__system_send_neutral--active);
348
+ }
349
+ .chat-lit::part(stop-generating-answer-button) {
350
+ --icon-path: var(--icon__system_cancel-circle_neutral--enabled);
351
+ font-size: 0 !important;
352
+ background-color: var(--mer-surface__elevation--02);
353
+ z-index: 2;
354
+ }
355
+ .chat-lit::part(stop-generating-answer-button):hover {
356
+ --icon-path: var(--icon__system_cancel-circle_neutral--hover);
357
+ }
358
+ .chat-lit::part(stop-generating-answer-button):active {
359
+ --icon-path: var(--icon__system_cancel-circle_neutral--active);
360
+ }
361
+ .chat-lit::part(send-button)::before,
362
+ .chat-lit::part(stop-generating-answer-button)::before {
363
+ content: "";
364
+ display: inline-block;
365
+ inline-size: var(--mer-icon__box--md);
366
+ block-size: var(--mer-icon__box--md);
367
+ background: no-repeat center/var(--mer-icon__size--md) var(--icon-path);
368
+ }
369
+ @keyframes spin {
370
+ 0% {
371
+ transform: rotate(0deg);
372
+ }
373
+ 100% {
374
+ transform: rotate(360deg);
375
+ }
376
+ }
@@ -38,7 +38,6 @@ const ARROW_RIGHT_ICON = getIconPath({
38
38
  });
39
39
  const CSS_BUNDLES = [
40
40
  "resets/box-sizing",
41
- "components/chat",
42
41
  "components/icon",
43
42
  "utils/typography"
44
43
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"chat-welcome.js","sourceRoot":"","sources":["../../../../src/components/chat/chat-welcome/chat-welcome.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @stencil-community/strict-mutable */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath,\n Method\n} from \"@stencil/core\";\nimport { MercuryBundles, getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../../common/locale\";\n\nconst HEADER_ILLUSTRATION = getAssetPath(\n `./gx-ide-assets/chat-welcome/images/header-illustration.svg`\n);\nconst AI_AVATAR = getAssetPath(\n `./gx-ide-assets/chat-welcome/images/ai-avatar-welcome.svg`\n);\n\nconst HEADER_TRANSITION_DELAY: number = 100;\nconst HEADER_TRANSITION_DURATION: number = 500;\nconst SUGGESTED_PROMPT_BUTTON_INTERVAL: number = 200;\nconst SUGGESTED_PROMPT_BUTTONS_DELAY: number = 500;\nconst WELCOME_EXIT_DURATION: number = 100;\n\nconst AI_ICON = getIconPath({\n category: \"system\",\n name: \"assistant\",\n colorType: \"primary\"\n});\nconst ARROW_RIGHT_ICON = getIconPath({\n category: \"system\",\n name: \"arrow-right\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/chat\",\n \"components/icon\",\n \"utils/typography\"\n];\n\n@Component({\n tag: \"gx-ide-chat-welcome\",\n styleUrl: \"chat-welcome.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/chat-welcome\"]\n})\nexport class GxIdeChatWelcome {\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeChatWelcomeElement;\n\n /**\n * When true, it will display the welcome elements (title, greeting, and buttons)\n */\n @State() showHeader: boolean = false;\n\n /**\n * When true, it will display the suggested prompts buttons\n */\n @State() showSuggestedPrompts: boolean = false;\n\n /**\n * When true, it will hide entire welcome layout\n */\n @State() hideWelcome: boolean = false;\n\n /**\n * The welcome title, if not provided, the default title will be used.\n */\n @Prop({ mutable: true }) welcomeTitle?: string;\n\n /**\n * The welcome greeting description, if not provided, the default title will be used.\n */\n @Prop({ mutable: true }) welcomeGreeting?: string;\n\n /**\n * The suggested prompts, if not provided, the default title will be used.\n */\n @Prop({ mutable: true }) suggestedPrompts?: string[];\n\n /**\n * Fired when the user clicks on a suggested prompt button\n */\n @Prop() readonly suggestedPrompRequestedCallback: (\n prompt: string\n ) => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // Set defaults\n if (!this.welcomeTitle) {\n this.welcomeTitle = this.#componentLocale.welcomeTitle;\n }\n if (!this.welcomeGreeting) {\n this.welcomeGreeting = this.#componentLocale.welcomeGreeting;\n }\n if (!this.suggestedPrompts) {\n this.suggestedPrompts = this.#componentLocale.suggestedPrompts;\n }\n }\n\n componentDidRender() {\n if (!this.hideWelcome) {\n this.#animationEntrance();\n }\n }\n\n /**\n * It will exit the wellcome screen and remove it from the dom.\n */\n @Method()\n async exitWelcome() {\n this.#animationExit();\n }\n\n #animationEntrance = () => {\n setTimeout(() => {\n this.showHeader = true;\n setTimeout(() => {\n this.showSuggestedPrompts = true;\n }, SUGGESTED_PROMPT_BUTTONS_DELAY);\n }, HEADER_TRANSITION_DELAY + HEADER_TRANSITION_DURATION);\n };\n\n #sendPromptToChat = async (e: MouseEvent) => {\n const prompt = (e.currentTarget as HTMLButtonElement).dataset[\"prommpt\"];\n await this.#animationExit();\n this.suggestedPrompRequestedCallback(prompt);\n };\n\n #animationExit = async (): Promise<void> => {\n this.hideWelcome = true;\n await new Promise(resolve => setTimeout(resolve, WELCOME_EXIT_DURATION));\n };\n\n render() {\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div\n class={{ \"welcome-container\": true, \"hidden\": this.hideWelcome }}\n style={{\n \"backgroundImage\": `url(${HEADER_ILLUSTRATION})`,\n \"--transition-duration\": `${WELCOME_EXIT_DURATION}ms`\n }}\n >\n <header\n class={{ \"header\": true, \"header--visible\": this.showHeader }}\n style={{\n \"--transition-delay\": `${HEADER_TRANSITION_DELAY}ms`,\n \"--transition-duration\": `${HEADER_TRANSITION_DURATION}ms`\n }}\n >\n <span\n class=\"header__circle\"\n style={{ backgroundImage: `url(${AI_AVATAR})` }}\n ></span>\n <h2 class=\"header__title\">{this.welcomeTitle}</h2>\n <p class=\"header__greeting\">{this.welcomeGreeting}</p>\n </header>\n\n {this.suggestedPrompts && this.showSuggestedPrompts && (\n <ul class=\"suggested-prompts\">\n {this.suggestedPrompts.map((prompt, i) => (\n <li class=\"suggested-prompts__item\">\n <button\n class={{\n \"suggested-prompts__button\": true\n }}\n onClick={this.#sendPromptToChat}\n style={{\n \"--delay\": `${SUGGESTED_PROMPT_BUTTON_INTERVAL * i}ms`\n }}\n data-prommpt={prompt}\n >\n <ch-image\n src={AI_ICON}\n class=\"icon-md suggested-prompts__icon\"\n ></ch-image>\n {prompt}\n <ch-image\n src={ARROW_RIGHT_ICON}\n class=\"icon-md suggested-prompts__icon\"\n ></ch-image>\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"chat-welcome.js","sourceRoot":"","sources":["../../../../src/components/chat/chat-welcome/chat-welcome.tsx"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @stencil-community/strict-mutable */\nimport {\n Component,\n Host,\n h,\n Prop,\n Element,\n State,\n getAssetPath,\n Method\n} from \"@stencil/core\";\nimport { getIconPath } from \"@genexus/mercury\";\n\nimport { Locale } from \"../../../common/locale\";\n\nconst HEADER_ILLUSTRATION = getAssetPath(\n `./gx-ide-assets/chat-welcome/images/header-illustration.svg`\n);\nconst AI_AVATAR = getAssetPath(\n `./gx-ide-assets/chat-welcome/images/ai-avatar-welcome.svg`\n);\n\nconst HEADER_TRANSITION_DELAY: number = 100;\nconst HEADER_TRANSITION_DURATION: number = 500;\nconst SUGGESTED_PROMPT_BUTTON_INTERVAL: number = 200;\nconst SUGGESTED_PROMPT_BUTTONS_DELAY: number = 500;\nconst WELCOME_EXIT_DURATION: number = 100;\n\nconst AI_ICON = getIconPath({\n category: \"system\",\n name: \"assistant\",\n colorType: \"primary\"\n});\nconst ARROW_RIGHT_ICON = getIconPath({\n category: \"system\",\n name: \"arrow-right\",\n colorType: \"primary\"\n});\n\nconst CSS_BUNDLES = [\n \"resets/box-sizing\",\n \"components/icon\",\n \"utils/typography\"\n];\n\n@Component({\n tag: \"gx-ide-chat-welcome\",\n styleUrl: \"chat-welcome.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/chat-welcome\"]\n})\nexport class GxIdeChatWelcome {\n // eslint-disable-next-line @stencil-community/own-props-must-be-private\n #componentLocale: any;\n\n @Element() el: HTMLGxIdeChatWelcomeElement;\n\n /**\n * When true, it will display the welcome elements (title, greeting, and buttons)\n */\n @State() showHeader: boolean = false;\n\n /**\n * When true, it will display the suggested prompts buttons\n */\n @State() showSuggestedPrompts: boolean = false;\n\n /**\n * When true, it will hide entire welcome layout\n */\n @State() hideWelcome: boolean = false;\n\n /**\n * The welcome title, if not provided, the default title will be used.\n */\n @Prop({ mutable: true }) welcomeTitle?: string;\n\n /**\n * The welcome greeting description, if not provided, the default title will be used.\n */\n @Prop({ mutable: true }) welcomeGreeting?: string;\n\n /**\n * The suggested prompts, if not provided, the default title will be used.\n */\n @Prop({ mutable: true }) suggestedPrompts?: string[];\n\n /**\n * Fired when the user clicks on a suggested prompt button\n */\n @Prop() readonly suggestedPrompRequestedCallback: (\n prompt: string\n ) => Promise<void>;\n\n async componentWillLoad() {\n this.#componentLocale = await Locale.getComponentStrings(this.el);\n\n // Set defaults\n if (!this.welcomeTitle) {\n this.welcomeTitle = this.#componentLocale.welcomeTitle;\n }\n if (!this.welcomeGreeting) {\n this.welcomeGreeting = this.#componentLocale.welcomeGreeting;\n }\n if (!this.suggestedPrompts) {\n this.suggestedPrompts = this.#componentLocale.suggestedPrompts;\n }\n }\n\n componentDidRender() {\n if (!this.hideWelcome) {\n this.#animationEntrance();\n }\n }\n\n /**\n * It will exit the wellcome screen and remove it from the dom.\n */\n @Method()\n async exitWelcome() {\n this.#animationExit();\n }\n\n #animationEntrance = () => {\n setTimeout(() => {\n this.showHeader = true;\n setTimeout(() => {\n this.showSuggestedPrompts = true;\n }, SUGGESTED_PROMPT_BUTTONS_DELAY);\n }, HEADER_TRANSITION_DELAY + HEADER_TRANSITION_DURATION);\n };\n\n #sendPromptToChat = async (e: MouseEvent) => {\n const prompt = (e.currentTarget as HTMLButtonElement).dataset[\"prommpt\"];\n await this.#animationExit();\n this.suggestedPrompRequestedCallback(prompt);\n };\n\n #animationExit = async (): Promise<void> => {\n this.hideWelcome = true;\n await new Promise(resolve => setTimeout(resolve, WELCOME_EXIT_DURATION));\n };\n\n render() {\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div\n class={{ \"welcome-container\": true, \"hidden\": this.hideWelcome }}\n style={{\n \"backgroundImage\": `url(${HEADER_ILLUSTRATION})`,\n \"--transition-duration\": `${WELCOME_EXIT_DURATION}ms`\n }}\n >\n <header\n class={{ \"header\": true, \"header--visible\": this.showHeader }}\n style={{\n \"--transition-delay\": `${HEADER_TRANSITION_DELAY}ms`,\n \"--transition-duration\": `${HEADER_TRANSITION_DURATION}ms`\n }}\n >\n <span\n class=\"header__circle\"\n style={{ backgroundImage: `url(${AI_AVATAR})` }}\n ></span>\n <h2 class=\"header__title\">{this.welcomeTitle}</h2>\n <p class=\"header__greeting\">{this.welcomeGreeting}</p>\n </header>\n\n {this.suggestedPrompts && this.showSuggestedPrompts && (\n <ul class=\"suggested-prompts\">\n {this.suggestedPrompts.map((prompt, i) => (\n <li class=\"suggested-prompts__item\">\n <button\n class={{\n \"suggested-prompts__button\": true\n }}\n onClick={this.#sendPromptToChat}\n style={{\n \"--delay\": `${SUGGESTED_PROMPT_BUTTON_INTERVAL * i}ms`\n }}\n data-prommpt={prompt}\n >\n <ch-image\n src={AI_ICON}\n class=\"icon-md suggested-prompts__icon\"\n ></ch-image>\n {prompt}\n <ch-image\n src={ARROW_RIGHT_ICON}\n class=\"icon-md suggested-prompts__icon\"\n ></ch-image>\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n </Host>\n );\n }\n}\n"]}
@@ -6,7 +6,6 @@
6
6
  inline-size: 100%;
7
7
  align-items: center;
8
8
  justify-content: center;
9
- padding: var(--mer-spacing--xl);
10
9
  }
11
10
 
12
11
  .slide {
@@ -16,7 +15,7 @@
16
15
  max-block-size: 700px;
17
16
  max-inline-size: 1100px;
18
17
  background-color: var(--mer-surface__elevation--01);
19
- border-radius: var(--mer-spacing--md);
18
+ border-radius: var(--dialog-border-radius, var(--mer-spacing--md));
20
19
  overflow: hidden;
21
20
  }
22
21
  .slide__illustration {
@@ -18,10 +18,11 @@ var _GxIdeScChatContainer_chatContainerRef, _GxIdeScChatContainer_chatWelcomeRef
18
18
  import { Host, h } from "@stencil/core";
19
19
  import { renderItemMercury } from "../../components/chat/lit-custom-render/render-item.lit";
20
20
  import { codeFixerRecord } from "./models";
21
+ // TODO: Add back "components/chat-lit" once chat bundle for lit is ready
22
+ // on a new Mercury version
21
23
  const CSS_BUNDLES = [
22
24
  "resets/box-sizing",
23
25
  "utils/elevation",
24
- "components/chat-lit",
25
26
  "components/markdown-viewer"
26
27
  ];
27
28
  import { chatCallbacksWithChatRef, chatTranslations } from "./callbacks";
@@ -1 +1 @@
1
- {"version":3,"file":"chat.showcase.js","sourceRoot":"","sources":["../../../src/showcase/chat-container/chat.showcase.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yDAAyD,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,MAAM,WAAW,GAAmB;IAClC,mBAAmB;IACnB,iBAAiB;IACjB,qBAAqB;IACrB,4BAA4B;CAC7B,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYzE,MAAM,OAAO,oBAAoB;;QAC/B,yDAAkD;QAClD,uDAA8C;QAC9C,kDAA+B;QAC/B,sDAA8B;QA6B9B,gEAAmC,GAAG,EAAE;YACtC,uBAAA,IAAI,8CAAkB,CAAC,2BAA2B,EAAE,CAAC;QACvD,CAAC,EAAC;QAEF,kEAAqC,GAAG,EAAE,GAAE,CAAC,EAAC;QA+B9C,uEAA0C,KAAK,EAC7C,MAAc,EACC,EAAE;YACjB,IAAI,sBAA8B,CAAC;YACnC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBAChD,sBAAsB;oBACpB,wjBAAwjB,CAAC;aAC5jB;iBAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAClD,sBAAsB;oBACpB,wdAAwd,CAAC;aAC5d;iBAAM;gBACL,sBAAsB;oBACpB,mDAAmD,CAAC;aACvD;YAED,MAAM,UAAU,GAAoB;gBAClC,EAAE,EAAE,GAAG;gBACP,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM;aAChB,CAAC;YACF,uBAAA,IAAI,uCAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1C,UAAU,CAAC,GAAG,EAAE;gBACd,uBAAA,IAAI,uCAAW,CAAC,aAAa,CAAC;oBAC5B,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;oBAC7B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,WAAW;oBACpB,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;gBACH,UAAU,CAAC,GAAG,EAAE;oBACd,uBAAA,IAAI,uCAAW,CAAC,iBAAiB,CAC/B;wBACE,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,gCAAgC;wBACzC,MAAM,EAAE,SAAS;qBAClB,EACD,SAAS,CACV,CAAC;oBACF,UAAU,CAAC,GAAG,EAAE;wBACd,uBAAA,IAAI,uCAAW,CAAC,iBAAiB,CAC/B;4BACE,IAAI,EAAE,WAAW;4BACjB,OAAO,EAAE,qBAAqB;4BAC9B,MAAM,EAAE,SAAS;yBAClB,EACD,SAAS,CACV,CAAC;wBACF,uBAAA,IAAI,uCAAW,CAAC,iBAAiB,CAC/B;4BACE,IAAI,EAAE,WAAW;4BACjB,OAAO,EAAE,sBAAsB;4BAC/B,MAAM,EAAE,UAAU;yBACnB,EACD,SAAS,CACV,CAAC;oBACJ,CAAC,EAAE,IAAI,CAAC,CAAC;gBACX,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,EAAC;oBAlHA,iBAAiB;kCAEoB,KAAK;4BAKjB,oBAAoB;qCACL,KAAK;kCACR,KAAK;+BACT,cAAc;yBACb,EAAE;;IAEtC;;OAEG;IAEH,KAAK,CAAC,WAAW;QACf,0CAA0C;QAC1C,uBAAA,IAAI,4CAAgB,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAQD,gBAAgB;QACd,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,eAAe,GAAG,sBAAsB,CAAC;QAChD,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,uBAAA,IAAI,2CAAe,IAAI,uBAAA,IAAI,uCAAW,EAAE;YAC3C,uBAAA,IAAI,uCAAkB,wBAAwB,CAAC,uBAAA,IAAI,uCAAW,CAAC,MAAA,CAAC;SACjE;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE;YACnC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;SAClC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;SACrB;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,SAAS,GAAG;gBACf;oBACE,EAAE,EAAE,GAAG;oBACP,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,6BAA6B;oBACtC,QAAQ,EAAE,OAAO;iBAClB;aACF,CAAC;SACH;IACH,CAAC;IA4DD,MAAM;QACJ,OAAO,CACL,EAAC,IAAI;YACH,gBAAU,KAAK,EAAE,WAAW,GAAa;YACzC,6BACE,SAAS,EAAC,mBAAmB,EAC7B,wBAAwB,EAAE,uBAAA,IAAI,6DAAiC,EAC/D,0BAA0B,EAAE,uBAAA,IAAI,+DAAmC,EACnE,GAAG,EAAE,EAAE,CAAC,EAAE,CACR,CAAC,uBAAA,IAAI,0CAAqB,EAAmC,MAAA,CAAC,EAEhE,KAAK,EAAC,aAAa;gBAEnB,eACE,SAAS,EAAE,uBAAA,IAAI,2CAAe,EAC9B,KAAK,EAAC,UAAU,EAChB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAC3C,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,UAAU,EAAE,iBAAiB,EAC7B,KAAK,EAAE,IAAI,CAAC,SAAS,EACrB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EACjD,YAAY,EAAE,gBAAgB,EAC9B,GAAG,EAAE,CAAC,EAAqB,EAAE,EAAE,CAC7B,CAAC,uBAAA,IAAI,mCAAc,EAAuB,MAAA,CAAC,EAE7C,aAAa,EAAC,4BAA4B;oBAE1C,2BACE,GAAG,EAAE,EAAE,CAAC,EAAE,CACR,CAAC,uBAAA,IAAI,wCAAmB,EAAiC,MAAA,CAAC,EAE5D,IAAI,EAAC,YAAY,EACjB,+BAA+B,EAC7B,uBAAA,IAAI,oEAAwC,GAEzB;oBACvB,WAAK,IAAI,EAAC,oBAAoB,oEAExB,CACE,CACY,CACnB,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, State, Prop, Method } from \"@stencil/core\";\nimport { MercuryBundles } from \"@genexus/mercury\";\nimport { renderItemMercury } from \"../../components/chat/lit-custom-render/render-item.lit\";\nimport { codeFixerRecord } from \"./models\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"utils/elevation\",\n \"components/chat-lit\",\n \"components/markdown-viewer\"\n];\n\nimport { chatCallbacksWithChatRef, chatTranslations } from \"./callbacks\";\nimport {\n ChatMessage,\n ChatCallbacks\n} from \"@genexus/chameleon-controls-library\";\nimport { ChatMessageUser } from \"@genexus/chameleon-controls-library/dist/types/components/chat/types\";\n\n@Component({\n tag: \"gx-ide-sc-chat-container\",\n styleUrl: \"chat-showcase.scss\",\n shadow: true\n})\nexport class GxIdeScChatContainer {\n #chatContainerRef!: HTMLGxIdeChatContainerElement;\n #chatWelcomeRef!: HTMLGxIdeChatWelcomeElement;\n #chChatRef!: HTMLChChatElement;\n #chatCallbacks: ChatCallbacks;\n\n /**\n * If true, the chat items length will be 0, since this is a requirement for dipslaying the ch-chat\n * \"empty-chat\" slot that welcome screen uses to display.\n */\n @Prop() readonly mode: \"welcome\" | \"messages-sample\" | \"empty\" =\n \"messages-sample\";\n\n @State() generatingResponse: boolean = false;\n @State() loadingState:\n | \"all-records-loaded\"\n | \"initial\"\n | \"loading\"\n | \"more-data-to-fetch\" = \"all-records-loaded\";\n @State() showAdditionalContent: boolean = false;\n @State() conversationCopied: boolean = false;\n @State() assistantStatus: string = \"Getting Data\";\n @State() chatItems: ChatMessage[] = [];\n\n /**\n * It will exit the wellcome screen and remove it from the dom.\n */\n @Method()\n async exitWelcome() {\n // hand exitWelcome to gx-ide-chat-welcome\n this.#chatWelcomeRef.exitWelcome();\n }\n\n #copyConversationCallbackHandler = () => {\n this.#chatContainerRef.showCopyConversationMessage();\n };\n\n #deleteConversationCallbackHandler = () => {};\n\n componentDidLoad() {\n setTimeout(() => {\n this.assistantStatus = \"Creating Data Base..\";\n }, 1000);\n }\n\n componentDidRender() {\n if (!this.#chatCallbacks && this.#chChatRef) {\n this.#chatCallbacks = chatCallbacksWithChatRef(this.#chChatRef);\n }\n }\n\n async componentWillLoad() {\n if (this.mode === \"messages-sample\") {\n this.chatItems = codeFixerRecord;\n } else if (this.mode === \"welcome\") {\n this.chatItems = [];\n } else if (this.mode === \"empty\") {\n this.chatItems = [\n {\n id: \"1\",\n role: \"assistant\",\n status: \"complete\",\n content: \"Hello! I am your assistant.\",\n metadata: \"14:56\"\n }\n ];\n }\n }\n #suggestedPrompRequestedCallbackHandler = async (\n prompt: string\n ): Promise<void> => {\n let assistantFinalResponse: string;\n if (prompt.toLowerCase().includes(\"transaction\")) {\n assistantFinalResponse =\n 'To create a transaction in GeneXus, start by opening your KB (Knowledge Base) and selecting \"Transaction\" from the \"New Object\" options. Give it a name and define its attributes, starting with a primary key followed by the related data fields. GeneXus will automatically infer the data structure and relationships based on how you define the attributes and their nesting. Once saved, it generates the necessary database tables and forms for inserting, updating, and deleting records. You can then run the application to test the transaction directly in your browser.';\n } else if (prompt.toLowerCase().includes(\"entity\")) {\n assistantFinalResponse =\n 'In GeneXus, creating an entity usually means defining a Transaction object that represents a real-world concept like \"Customer\" or \"Product.\" To do this, create a new Transaction, name it after the entity, and define its attributes—starting with a unique identifier (like CustomerId) and then adding other fields (like CustomerName, CustomerEmail). GeneXus treats this Transaction as an entity and uses it to generate the corresponding table and interface automatically.';\n } else {\n assistantFinalResponse =\n \"Sorry, I didn’t catch that—mind rephrasing it? 😅\";\n }\n\n const userPrompt: ChatMessageUser = {\n id: \"1\",\n role: \"user\",\n content: prompt\n };\n this.#chChatRef.addNewMessage(userPrompt);\n setTimeout(() => {\n this.#chChatRef.addNewMessage({\n id: `${new Date().getTime()}`,\n role: \"assistant\",\n content: \"Analyzing\",\n status: \"waiting\"\n });\n setTimeout(() => {\n this.#chChatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: \"Processing with Chat with LLMs\",\n status: \"waiting\"\n },\n \"replace\"\n );\n setTimeout(() => {\n this.#chChatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: \"Getting information\",\n status: \"waiting\"\n },\n \"replace\"\n );\n this.#chChatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: assistantFinalResponse,\n status: \"complete\"\n },\n \"replace\"\n );\n }, 1500);\n }, 1500);\n }, 100);\n };\n\n render() {\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <gx-ide-chat-container\n chatTitle=\"GeneXus Assistant\"\n copyConversationCallback={this.#copyConversationCallbackHandler}\n deleteConversationCallback={this.#deleteConversationCallbackHandler}\n ref={el =>\n (this.#chatContainerRef = el as HTMLGxIdeChatContainerElement)\n }\n class=\"elevation-1\"\n >\n <ch-chat\n callbacks={this.#chatCallbacks}\n class=\"chat-lit\"\n generatingResponse={this.generatingResponse}\n loadingState={this.loadingState} // \"all-records-loaded\" to display the welcome screen\n renderItem={renderItemMercury}\n items={this.chatItems} // length 0 to display the welcome screen\n showAdditionalContent={this.showAdditionalContent}\n translations={chatTranslations}\n ref={(el: HTMLChChatElement) =>\n (this.#chChatRef = el as HTMLChChatElement)\n }\n markdownTheme=\"components/markdown-viewer\"\n >\n <gx-ide-chat-welcome\n ref={el =>\n (this.#chatWelcomeRef = el as HTMLGxIdeChatWelcomeElement)\n }\n slot=\"empty-chat\"\n suggestedPrompRequestedCallback={\n this.#suggestedPrompRequestedCallbackHandler\n }\n ></gx-ide-chat-welcome>\n <div slot=\"additional-content\">\n Custom content that is rendered when the chat renders content\n </div>\n </ch-chat>\n </gx-ide-chat-container>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"chat.showcase.js","sourceRoot":"","sources":["../../../src/showcase/chat-container/chat.showcase.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yDAAyD,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,yEAAyE;AACzE,2BAA2B;AAC3B,MAAM,WAAW,GAAG;IAClB,mBAAmB;IACnB,iBAAiB;IACjB,4BAA4B;CAC7B,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAYzE,MAAM,OAAO,oBAAoB;;QAC/B,yDAAkD;QAClD,uDAA8C;QAC9C,kDAA+B;QAC/B,sDAA8B;QA6B9B,gEAAmC,GAAG,EAAE;YACtC,uBAAA,IAAI,8CAAkB,CAAC,2BAA2B,EAAE,CAAC;QACvD,CAAC,EAAC;QAEF,kEAAqC,GAAG,EAAE,GAAE,CAAC,EAAC;QA+B9C,uEAA0C,KAAK,EAC7C,MAAc,EACC,EAAE;YACjB,IAAI,sBAA8B,CAAC;YACnC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;gBAChD,sBAAsB;oBACpB,wjBAAwjB,CAAC;aAC5jB;iBAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAClD,sBAAsB;oBACpB,wdAAwd,CAAC;aAC5d;iBAAM;gBACL,sBAAsB;oBACpB,mDAAmD,CAAC;aACvD;YAED,MAAM,UAAU,GAAoB;gBAClC,EAAE,EAAE,GAAG;gBACP,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,MAAM;aAChB,CAAC;YACF,uBAAA,IAAI,uCAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1C,UAAU,CAAC,GAAG,EAAE;gBACd,uBAAA,IAAI,uCAAW,CAAC,aAAa,CAAC;oBAC5B,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;oBAC7B,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,WAAW;oBACpB,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;gBACH,UAAU,CAAC,GAAG,EAAE;oBACd,uBAAA,IAAI,uCAAW,CAAC,iBAAiB,CAC/B;wBACE,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,gCAAgC;wBACzC,MAAM,EAAE,SAAS;qBAClB,EACD,SAAS,CACV,CAAC;oBACF,UAAU,CAAC,GAAG,EAAE;wBACd,uBAAA,IAAI,uCAAW,CAAC,iBAAiB,CAC/B;4BACE,IAAI,EAAE,WAAW;4BACjB,OAAO,EAAE,qBAAqB;4BAC9B,MAAM,EAAE,SAAS;yBAClB,EACD,SAAS,CACV,CAAC;wBACF,uBAAA,IAAI,uCAAW,CAAC,iBAAiB,CAC/B;4BACE,IAAI,EAAE,WAAW;4BACjB,OAAO,EAAE,sBAAsB;4BAC/B,MAAM,EAAE,UAAU;yBACnB,EACD,SAAS,CACV,CAAC;oBACJ,CAAC,EAAE,IAAI,CAAC,CAAC;gBACX,CAAC,EAAE,IAAI,CAAC,CAAC;YACX,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC,EAAC;oBAlHA,iBAAiB;kCAEoB,KAAK;4BAKjB,oBAAoB;qCACL,KAAK;kCACR,KAAK;+BACT,cAAc;yBACb,EAAE;;IAEtC;;OAEG;IAEH,KAAK,CAAC,WAAW;QACf,0CAA0C;QAC1C,uBAAA,IAAI,4CAAgB,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAQD,gBAAgB;QACd,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,eAAe,GAAG,sBAAsB,CAAC;QAChD,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,uBAAA,IAAI,2CAAe,IAAI,uBAAA,IAAI,uCAAW,EAAE;YAC3C,uBAAA,IAAI,uCAAkB,wBAAwB,CAAC,uBAAA,IAAI,uCAAW,CAAC,MAAA,CAAC;SACjE;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE;YACnC,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC;SAClC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;SACrB;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,SAAS,GAAG;gBACf;oBACE,EAAE,EAAE,GAAG;oBACP,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,UAAU;oBAClB,OAAO,EAAE,6BAA6B;oBACtC,QAAQ,EAAE,OAAO;iBAClB;aACF,CAAC;SACH;IACH,CAAC;IA4DD,MAAM;QACJ,OAAO,CACL,EAAC,IAAI;YACH,gBAAU,KAAK,EAAE,WAAW,GAAa;YACzC,6BACE,SAAS,EAAC,mBAAmB,EAC7B,wBAAwB,EAAE,uBAAA,IAAI,6DAAiC,EAC/D,0BAA0B,EAAE,uBAAA,IAAI,+DAAmC,EACnE,GAAG,EAAE,EAAE,CAAC,EAAE,CACR,CAAC,uBAAA,IAAI,0CAAqB,EAAmC,MAAA,CAAC,EAEhE,KAAK,EAAC,aAAa;gBAEnB,eACE,SAAS,EAAE,uBAAA,IAAI,2CAAe,EAC9B,KAAK,EAAC,UAAU,EAChB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAC3C,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,UAAU,EAAE,iBAAiB,EAC7B,KAAK,EAAE,IAAI,CAAC,SAAS,EACrB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EACjD,YAAY,EAAE,gBAAgB,EAC9B,GAAG,EAAE,CAAC,EAAqB,EAAE,EAAE,CAC7B,CAAC,uBAAA,IAAI,mCAAc,EAAuB,MAAA,CAAC,EAE7C,aAAa,EAAC,4BAA4B;oBAE1C,2BACE,GAAG,EAAE,EAAE,CAAC,EAAE,CACR,CAAC,uBAAA,IAAI,wCAAmB,EAAiC,MAAA,CAAC,EAE5D,IAAI,EAAC,YAAY,EACjB,+BAA+B,EAC7B,uBAAA,IAAI,oEAAwC,GAEzB;oBACvB,WAAK,IAAI,EAAC,oBAAoB,oEAExB,CACE,CACY,CACnB,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, State, Prop, Method } from \"@stencil/core\";\nimport { renderItemMercury } from \"../../components/chat/lit-custom-render/render-item.lit\";\nimport { codeFixerRecord } from \"./models\";\n\n// TODO: Add back \"components/chat-lit\" once chat bundle for lit is ready\n// on a new Mercury version\nconst CSS_BUNDLES = [\n \"resets/box-sizing\",\n \"utils/elevation\",\n \"components/markdown-viewer\"\n];\n\nimport { chatCallbacksWithChatRef, chatTranslations } from \"./callbacks\";\nimport {\n ChatMessage,\n ChatCallbacks\n} from \"@genexus/chameleon-controls-library\";\nimport { ChatMessageUser } from \"@genexus/chameleon-controls-library/dist/types/components/chat/types\";\n\n@Component({\n tag: \"gx-ide-sc-chat-container\",\n styleUrl: \"chat-showcase.scss\",\n shadow: true\n})\nexport class GxIdeScChatContainer {\n #chatContainerRef!: HTMLGxIdeChatContainerElement;\n #chatWelcomeRef!: HTMLGxIdeChatWelcomeElement;\n #chChatRef!: HTMLChChatElement;\n #chatCallbacks: ChatCallbacks;\n\n /**\n * If true, the chat items length will be 0, since this is a requirement for dipslaying the ch-chat\n * \"empty-chat\" slot that welcome screen uses to display.\n */\n @Prop() readonly mode: \"welcome\" | \"messages-sample\" | \"empty\" =\n \"messages-sample\";\n\n @State() generatingResponse: boolean = false;\n @State() loadingState:\n | \"all-records-loaded\"\n | \"initial\"\n | \"loading\"\n | \"more-data-to-fetch\" = \"all-records-loaded\";\n @State() showAdditionalContent: boolean = false;\n @State() conversationCopied: boolean = false;\n @State() assistantStatus: string = \"Getting Data\";\n @State() chatItems: ChatMessage[] = [];\n\n /**\n * It will exit the wellcome screen and remove it from the dom.\n */\n @Method()\n async exitWelcome() {\n // hand exitWelcome to gx-ide-chat-welcome\n this.#chatWelcomeRef.exitWelcome();\n }\n\n #copyConversationCallbackHandler = () => {\n this.#chatContainerRef.showCopyConversationMessage();\n };\n\n #deleteConversationCallbackHandler = () => {};\n\n componentDidLoad() {\n setTimeout(() => {\n this.assistantStatus = \"Creating Data Base..\";\n }, 1000);\n }\n\n componentDidRender() {\n if (!this.#chatCallbacks && this.#chChatRef) {\n this.#chatCallbacks = chatCallbacksWithChatRef(this.#chChatRef);\n }\n }\n\n async componentWillLoad() {\n if (this.mode === \"messages-sample\") {\n this.chatItems = codeFixerRecord;\n } else if (this.mode === \"welcome\") {\n this.chatItems = [];\n } else if (this.mode === \"empty\") {\n this.chatItems = [\n {\n id: \"1\",\n role: \"assistant\",\n status: \"complete\",\n content: \"Hello! I am your assistant.\",\n metadata: \"14:56\"\n }\n ];\n }\n }\n #suggestedPrompRequestedCallbackHandler = async (\n prompt: string\n ): Promise<void> => {\n let assistantFinalResponse: string;\n if (prompt.toLowerCase().includes(\"transaction\")) {\n assistantFinalResponse =\n 'To create a transaction in GeneXus, start by opening your KB (Knowledge Base) and selecting \"Transaction\" from the \"New Object\" options. Give it a name and define its attributes, starting with a primary key followed by the related data fields. GeneXus will automatically infer the data structure and relationships based on how you define the attributes and their nesting. Once saved, it generates the necessary database tables and forms for inserting, updating, and deleting records. You can then run the application to test the transaction directly in your browser.';\n } else if (prompt.toLowerCase().includes(\"entity\")) {\n assistantFinalResponse =\n 'In GeneXus, creating an entity usually means defining a Transaction object that represents a real-world concept like \"Customer\" or \"Product.\" To do this, create a new Transaction, name it after the entity, and define its attributes—starting with a unique identifier (like CustomerId) and then adding other fields (like CustomerName, CustomerEmail). GeneXus treats this Transaction as an entity and uses it to generate the corresponding table and interface automatically.';\n } else {\n assistantFinalResponse =\n \"Sorry, I didn’t catch that—mind rephrasing it? 😅\";\n }\n\n const userPrompt: ChatMessageUser = {\n id: \"1\",\n role: \"user\",\n content: prompt\n };\n this.#chChatRef.addNewMessage(userPrompt);\n setTimeout(() => {\n this.#chChatRef.addNewMessage({\n id: `${new Date().getTime()}`,\n role: \"assistant\",\n content: \"Analyzing\",\n status: \"waiting\"\n });\n setTimeout(() => {\n this.#chChatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: \"Processing with Chat with LLMs\",\n status: \"waiting\"\n },\n \"replace\"\n );\n setTimeout(() => {\n this.#chChatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: \"Getting information\",\n status: \"waiting\"\n },\n \"replace\"\n );\n this.#chChatRef.updateLastMessage(\n {\n role: \"assistant\",\n content: assistantFinalResponse,\n status: \"complete\"\n },\n \"replace\"\n );\n }, 1500);\n }, 1500);\n }, 100);\n };\n\n render() {\n return (\n <Host>\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <gx-ide-chat-container\n chatTitle=\"GeneXus Assistant\"\n copyConversationCallback={this.#copyConversationCallbackHandler}\n deleteConversationCallback={this.#deleteConversationCallbackHandler}\n ref={el =>\n (this.#chatContainerRef = el as HTMLGxIdeChatContainerElement)\n }\n class=\"elevation-1\"\n >\n <ch-chat\n callbacks={this.#chatCallbacks}\n class=\"chat-lit\"\n generatingResponse={this.generatingResponse}\n loadingState={this.loadingState} // \"all-records-loaded\" to display the welcome screen\n renderItem={renderItemMercury}\n items={this.chatItems} // length 0 to display the welcome screen\n showAdditionalContent={this.showAdditionalContent}\n translations={chatTranslations}\n ref={(el: HTMLChChatElement) =>\n (this.#chChatRef = el as HTMLChChatElement)\n }\n markdownTheme=\"components/markdown-viewer\"\n >\n <gx-ide-chat-welcome\n ref={el =>\n (this.#chatWelcomeRef = el as HTMLGxIdeChatWelcomeElement)\n }\n slot=\"empty-chat\"\n suggestedPrompRequestedCallback={\n this.#suggestedPrompRequestedCallbackHandler\n }\n ></gx-ide-chat-welcome>\n <div slot=\"additional-content\">\n Custom content that is rendered when the chat renders content\n </div>\n </ch-chat>\n </gx-ide-chat-container>\n </Host>\n );\n }\n}\n"]}