@genexus/genexus-ide-ui 1.0.47 → 1.0.49
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.
- package/dist/{esm/MERCURY_ASSETS-91a1db9c.js → cjs/MERCURY_ASSETS-ac982891.js} +2 -4
- package/dist/cjs/MERCURY_ASSETS-ac982891.js.map +1 -0
- package/dist/cjs/assets-manager-7227a74b.js +7 -0
- package/dist/cjs/assets-manager-7227a74b.js.map +1 -0
- package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-ai-message.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-ai-message.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-chat-container.cjs.entry.js +53 -0
- package/dist/cjs/gx-ide-chat-container.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +4 -3
- package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-dashboard-home.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-data-selector.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-data-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-design-import.cjs.entry.js +8 -7
- package/dist/cjs/gx-ide-design-import.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-entity-selector.cjs.entry.js +4 -3
- package/dist/cjs/gx-ide-entity-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js +7 -6
- package/dist/cjs/gx-ide-kb-manager-export.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +6 -5
- package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js +4 -3
- package/dist/cjs/gx-ide-manage-module-references-v2.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +4 -3
- package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-new-kb.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-new-kb.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-object-selector.cjs.entry.js +4 -3
- package/dist/cjs/gx-ide-object-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js +323 -0
- package/dist/cjs/gx-ide-sc-chat-container.cjs.entry.js.map +1 -0
- package/dist/cjs/gx-ide-share-kb.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-share-kb.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-start-page.cjs.entry.js +6 -5
- package/dist/cjs/gx-ide-start-page.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-welcome-page.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-welcome-page.cjs.entry.js.map +1 -1
- package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js +3 -2
- package/dist/cjs/gx-ide-ww-attributes.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +3 -1
- package/dist/collection/components/_helpers/chat-container/chat-container.css +178 -0
- package/dist/collection/components/_helpers/chat-container/chat-container.js +113 -0
- package/dist/collection/components/_helpers/chat-container/chat-container.js.map +1 -0
- package/dist/collection/components/_helpers/chat-container/code-render.js +42 -0
- package/dist/collection/components/_helpers/chat-container/code-render.js.map +1 -0
- package/dist/collection/showcase/chat-container/callbacks.js +247 -0
- package/dist/collection/showcase/chat-container/callbacks.js.map +1 -0
- package/dist/collection/showcase/chat-container/chat-showcase.css +4 -0
- package/dist/collection/showcase/chat-container/chat.showcase.js +54 -0
- package/dist/collection/showcase/chat-container/chat.showcase.js.map +1 -0
- package/dist/collection/testing/locale.e2e.js +4 -0
- package/dist/collection/testing/locale.e2e.js.map +1 -1
- package/dist/components/chat-container.js +67 -0
- package/dist/components/chat-container.js.map +1 -0
- package/dist/components/gx-ide-chat-container.d.ts +11 -0
- package/dist/components/gx-ide-chat-container.js +8 -0
- package/dist/components/gx-ide-chat-container.js.map +1 -0
- package/dist/components/gx-ide-sc-chat-container.d.ts +11 -0
- package/dist/components/gx-ide-sc-chat-container.js +346 -0
- package/dist/components/gx-ide-sc-chat-container.js.map +1 -0
- package/dist/{cjs/MERCURY_ASSETS-fbc83c8c.js → esm/MERCURY_ASSETS-9e4e8ebc.js} +1 -7
- package/dist/esm/MERCURY_ASSETS-9e4e8ebc.js.map +1 -0
- package/dist/esm/assets-manager-0d129105.js +5 -0
- package/dist/esm/assets-manager-0d129105.js.map +1 -0
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-ai-message.entry.js +2 -1
- package/dist/esm/gx-ide-ai-message.entry.js.map +1 -1
- package/dist/esm/gx-ide-chat-container.entry.js +49 -0
- package/dist/esm/gx-ide-chat-container.entry.js.map +1 -0
- package/dist/esm/gx-ide-create-kb-from-server.entry.js +2 -1
- package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
- package/dist/esm/gx-ide-current-user-info.entry.js +2 -1
- package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
- package/dist/esm/gx-ide-dashboard-home.entry.js +2 -1
- package/dist/esm/gx-ide-dashboard-home.entry.js.map +1 -1
- package/dist/esm/gx-ide-data-selector.entry.js +2 -1
- package/dist/esm/gx-ide-data-selector.entry.js.map +1 -1
- package/dist/esm/gx-ide-data-type-selector.entry.js +2 -1
- package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -1
- package/dist/esm/gx-ide-design-import.entry.js +2 -1
- package/dist/esm/gx-ide-design-import.entry.js.map +1 -1
- package/dist/esm/gx-ide-entity-selector.entry.js +2 -1
- package/dist/esm/gx-ide-entity-selector.entry.js.map +1 -1
- package/dist/esm/gx-ide-kb-manager-export.entry.js +2 -1
- package/dist/esm/gx-ide-kb-manager-export.entry.js.map +1 -1
- package/dist/esm/gx-ide-kb-manager-import.entry.js +2 -1
- package/dist/esm/gx-ide-kb-manager-import.entry.js.map +1 -1
- package/dist/esm/gx-ide-manage-module-references-v2.entry.js +2 -1
- package/dist/esm/gx-ide-manage-module-references-v2.entry.js.map +1 -1
- package/dist/esm/gx-ide-manage-module-references.entry.js +2 -1
- package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -1
- package/dist/esm/gx-ide-new-kb.entry.js +2 -1
- package/dist/esm/gx-ide-new-kb.entry.js.map +1 -1
- package/dist/esm/gx-ide-object-selector.entry.js +2 -1
- package/dist/esm/gx-ide-object-selector.entry.js.map +1 -1
- package/dist/esm/gx-ide-sc-chat-container.entry.js +319 -0
- package/dist/esm/gx-ide-sc-chat-container.entry.js.map +1 -0
- package/dist/esm/gx-ide-share-kb.entry.js +2 -1
- package/dist/esm/gx-ide-share-kb.entry.js.map +1 -1
- package/dist/esm/gx-ide-start-page.entry.js +2 -1
- package/dist/esm/gx-ide-start-page.entry.js.map +1 -1
- package/dist/esm/gx-ide-welcome-page.entry.js +2 -1
- package/dist/esm/gx-ide-welcome-page.entry.js.map +1 -1
- package/dist/esm/gx-ide-ww-attributes.entry.js +2 -1
- package/dist/esm/gx-ide-ww-attributes.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
- package/dist/genexus-ide-ui/{p-aa324232.entry.js → p-1a629aa9.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-aa324232.entry.js.map → p-1a629aa9.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-18317dd7.entry.js → p-1e29cd30.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-18317dd7.entry.js.map → p-1e29cd30.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-af05e095.entry.js → p-1ea6c3fe.entry.js} +13 -11
- package/dist/genexus-ide-ui/{p-af05e095.entry.js.map → p-1ea6c3fe.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-a1c5775d.entry.js → p-2145674e.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-a1c5775d.entry.js.map → p-2145674e.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-ec6129c7.entry.js → p-2cefd33a.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-ec6129c7.entry.js.map → p-2cefd33a.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-f252dd07.entry.js → p-36fecdcb.entry.js} +10 -8
- package/dist/genexus-ide-ui/{p-f252dd07.entry.js.map → p-36fecdcb.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-f827b9b8.entry.js → p-3ca45936.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-f827b9b8.entry.js.map → p-3ca45936.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-a8739942.entry.js → p-440742f3.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-a8739942.entry.js.map → p-440742f3.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-a40648dc.entry.js → p-442e30e3.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-a40648dc.entry.js.map → p-442e30e3.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-2dcfa6ef.entry.js → p-47d4ec9a.entry.js} +33 -31
- package/dist/genexus-ide-ui/{p-2dcfa6ef.entry.js.map → p-47d4ec9a.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/p-5afe1477.entry.js +72 -0
- package/dist/genexus-ide-ui/p-5afe1477.entry.js.map +1 -0
- package/dist/genexus-ide-ui/p-6e4208d8.js +9 -0
- package/dist/genexus-ide-ui/p-6e4208d8.js.map +1 -0
- package/dist/genexus-ide-ui/p-72867329.entry.js +280 -0
- package/dist/genexus-ide-ui/p-72867329.entry.js.map +1 -0
- package/dist/genexus-ide-ui/{p-64f2a9f4.entry.js → p-7be438dc.entry.js} +10 -8
- package/dist/genexus-ide-ui/{p-64f2a9f4.entry.js.map → p-7be438dc.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-8cebb078.entry.js → p-8942f4b6.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-8cebb078.entry.js.map → p-8942f4b6.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-9e34f166.entry.js → p-9cfd7800.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-9e34f166.entry.js.map → p-9cfd7800.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-1986d34d.js → p-ad5caf61.js} +1 -10
- package/dist/genexus-ide-ui/p-ad5caf61.js.map +1 -0
- package/dist/genexus-ide-ui/{p-c1162623.entry.js → p-b1eb312d.entry.js} +15 -13
- package/dist/genexus-ide-ui/{p-c1162623.entry.js.map → p-b1eb312d.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-1feae6ef.entry.js → p-c4c48a1e.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-1feae6ef.entry.js.map → p-c4c48a1e.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-e4bbec21.entry.js → p-cfef5956.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-e4bbec21.entry.js.map → p-cfef5956.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-92c51f3e.entry.js → p-e14affde.entry.js} +4 -2
- package/dist/genexus-ide-ui/{p-92c51f3e.entry.js.map → p-e14affde.entry.js.map} +1 -1
- package/dist/genexus-ide-ui/{p-0c60c76f.entry.js → p-f7d2a39a.entry.js} +11 -9
- package/dist/genexus-ide-ui/{p-0c60c76f.entry.js.map → p-f7d2a39a.entry.js.map} +1 -1
- package/dist/types/components/_helpers/chat-container/chat-container.d.ts +19 -0
- package/dist/types/components/_helpers/chat-container/code-render.d.ts +4 -0
- package/dist/types/components.d.ts +46 -0
- package/dist/types/showcase/chat-container/callbacks.d.ts +6 -0
- package/dist/types/showcase/chat-container/chat.showcase.d.ts +6 -0
- package/package.json +1 -1
- package/dist/cjs/MERCURY_ASSETS-fbc83c8c.js.map +0 -1
- package/dist/esm/MERCURY_ASSETS-91a1db9c.js.map +0 -1
- package/dist/genexus-ide-ui/p-1986d34d.js.map +0 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f)
|
|
3
|
+
throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
|
|
5
|
+
throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
6
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
9
|
+
if (kind === "m")
|
|
10
|
+
throw new TypeError("Private method is not writable");
|
|
11
|
+
if (kind === "a" && !f)
|
|
12
|
+
throw new TypeError("Private accessor was defined without a setter");
|
|
13
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
|
|
14
|
+
throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
15
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
16
|
+
};
|
|
17
|
+
var _GxIdeScChatContainer_chatContainerRef, _GxIdeScChatContainer_copyConversationCallbackHandler;
|
|
18
|
+
import { Host, h } from "@stencil/core";
|
|
19
|
+
import { mercuryChatMessageRender } from "../../components/_helpers/chat-container/code-render";
|
|
20
|
+
const CSS_BUNDLES = ["resets/box-sizing", "components/chat"];
|
|
21
|
+
import { chatCallbacks, chatTranslations, codeFixerRecord } from "./callbacks";
|
|
22
|
+
export class GxIdeScChatContainer {
|
|
23
|
+
constructor() {
|
|
24
|
+
_GxIdeScChatContainer_chatContainerRef.set(this, void 0);
|
|
25
|
+
_GxIdeScChatContainer_copyConversationCallbackHandler.set(this, () => {
|
|
26
|
+
__classPrivateFieldGet(this, _GxIdeScChatContainer_chatContainerRef, "f").showCopyConversationMessage();
|
|
27
|
+
});
|
|
28
|
+
this.showAdditionalContent = false;
|
|
29
|
+
this.conversationCopied = false;
|
|
30
|
+
}
|
|
31
|
+
render() {
|
|
32
|
+
return (h(Host, null, h("ch-theme", { model: CSS_BUNDLES }), h("gx-ide-chat-container", { chatTitle: "GeneXus Assistant", copyConversationCallback: __classPrivateFieldGet(this, _GxIdeScChatContainer_copyConversationCallbackHandler, "f"), ref: el => (__classPrivateFieldSet(this, _GxIdeScChatContainer_chatContainerRef, el, "f")) }, h("ch-chat", { callbacks: chatCallbacks, class: "chat", generatingResponse: false, loadingState: "all-records-loaded", markdownTheme: "mercury/markdown-viewer", renderItem: mercuryChatMessageRender("mercury/markdown-viewer"), isMobile: false, items: codeFixerRecord, showAdditionalContent: this.showAdditionalContent, translations: chatTranslations }, h("div", { slot: "additional-content" }, "Custom content that is rendered when the chat renders content")))));
|
|
33
|
+
}
|
|
34
|
+
static get is() { return "gx-ide-sc-chat-container"; }
|
|
35
|
+
static get encapsulation() { return "shadow"; }
|
|
36
|
+
static get originalStyleUrls() {
|
|
37
|
+
return {
|
|
38
|
+
"$": ["chat-showcase.scss"]
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
static get styleUrls() {
|
|
42
|
+
return {
|
|
43
|
+
"$": ["chat-showcase.css"]
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
static get states() {
|
|
47
|
+
return {
|
|
48
|
+
"showAdditionalContent": {},
|
|
49
|
+
"conversationCopied": {}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
_GxIdeScChatContainer_chatContainerRef = new WeakMap(), _GxIdeScChatContainer_copyConversationCallbackHandler = new WeakMap();
|
|
54
|
+
//# sourceMappingURL=chat.showcase.js.map
|
|
@@ -0,0 +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,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sDAAsD,CAAC;AAGhG,MAAM,WAAW,GAAmB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO/E,MAAM,OAAO,oBAAoB;;QAC/B,yDAAkD;QAKlD,gEAAmC,GAAG,EAAE;YACtC,uBAAA,IAAI,8CAAkB,CAAC,2BAA2B,EAAE,CAAC;QACvD,CAAC,EAAC;qCALwC,KAAK;kCACR,KAAK;;IAM5C,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,GAAG,EAAE,EAAE,CAAC,EAAE,CACR,CAAC,uBAAA,IAAI,0CAAqB,EAAmC,MAAA,CAAC;gBAGhE,eACE,SAAS,EAAE,aAAa,EACxB,KAAK,EAAC,MAAM,EACZ,kBAAkB,EAAE,KAAK,EACzB,YAAY,EAAC,oBAAoB,EACjC,aAAa,EAAC,yBAAyB,EACvC,UAAU,EAAE,wBAAwB,CAAC,yBAAyB,CAAC,EAC/D,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,eAAe,EACtB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,EACjD,YAAY,EAAE,gBAAgB;oBAE9B,WAAK,IAAI,EAAC,oBAAoB,oEAExB,CACE,CACY,CACnB,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, Host, h, State } from \"@stencil/core\";\nimport { mercuryChatMessageRender } from \"../../components/_helpers/chat-container/code-render\";\nimport { MercuryBundles } from \"@genexus/mercury\";\n\nconst CSS_BUNDLES: MercuryBundles = [\"resets/box-sizing\", \"components/chat\"];\n\nimport { chatCallbacks, chatTranslations, codeFixerRecord } from \"./callbacks\";\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\n @State() showAdditionalContent: boolean = false;\n @State() conversationCopied: boolean = false;\n\n #copyConversationCallbackHandler = () => {\n this.#chatContainerRef.showCopyConversationMessage();\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 ref={el =>\n (this.#chatContainerRef = el as HTMLGxIdeChatContainerElement)\n }\n >\n <ch-chat\n callbacks={chatCallbacks}\n class=\"chat\"\n generatingResponse={false}\n loadingState=\"all-records-loaded\"\n markdownTheme=\"mercury/markdown-viewer\"\n renderItem={mercuryChatMessageRender(\"mercury/markdown-viewer\")}\n isMobile={false}\n items={codeFixerRecord}\n showAdditionalContent={this.showAdditionalContent}\n translations={chatTranslations}\n >\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"]}
|
|
@@ -92,6 +92,8 @@ const allGeneXusIdeUIComponents = {
|
|
|
92
92
|
"gx-ide-bpm-objects-selector": 0,
|
|
93
93
|
"gx-ide-bpm-timer-duration": 0,
|
|
94
94
|
"gx-ide-card": 0,
|
|
95
|
+
"gx-ide-chat-container": 0,
|
|
96
|
+
"gx-ide-sc-chat-container": 0,
|
|
95
97
|
"gx-ide-connect-gx-server": 0,
|
|
96
98
|
"gx-ide-container": 0,
|
|
97
99
|
"gx-ide-create-kb-from-server": 0,
|
|
@@ -144,7 +146,9 @@ const allGeneXusIdeUIComponents = {
|
|
|
144
146
|
};
|
|
145
147
|
const componentsWithoutTranslations = new Set([
|
|
146
148
|
"gx-ide-ai-message",
|
|
149
|
+
"gx-ide-chat-container",
|
|
147
150
|
"gx-ide-container",
|
|
151
|
+
"gx-ide-sc-chat-container",
|
|
148
152
|
"gx-ide-directory-selector",
|
|
149
153
|
"gx-ide-empty-state",
|
|
150
154
|
"gx-ide-list-selector",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.e2e.js","sourceRoot":"","sources":["../../src/testing/locale.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EPage, newE2EPage } from \"@stencil/core/testing\";\nimport { GeneXusIdeUIControlsTagName } from \"../common/types\";\nimport { haveSameStructure } from \"./same-structure.e2e\";\n\nconst COMPONENT_PREFIX = \"gx-ide-\";\nconst languages: { name: string; attr: string }[] = [\n { name: \"chinese\", attr: \"zh\" },\n { name: \"english\", attr: \"en\" },\n { name: \"japanese\", attr: \"ja\" }\n];\n\nconst testLocale = (componentNameWithPrefix: GeneXusIdeUIControlsTagName) => {\n describe(`[locale][${componentNameWithPrefix}]`, () => {\n let page: E2EPage;\n const componentName = componentNameWithPrefix.replace(COMPONENT_PREFIX, \"\");\n\n // This implementation is a WA since we can't evaluate JS classes in the page.\n // TODO: Implement the locale utility as a function, which can be evaluated\n // in the page\n const getTranslations = () =>\n page.evaluate(component => {\n const ASSETS_FOLDER = \"gx-ide-assets/\";\n const DEFAULT_LANGUAGE = \"en\";\n const LANGS_FOLDER = \"langs/\";\n const LANG_PREFIX = \".lang.\";\n const LANG_EXTENSION = \".json\";\n const lang =\n document\n .getElementsByTagName(\"html\")[0]\n .getAttribute(\"lang\")\n ?.valueOf() ?? DEFAULT_LANGUAGE;\n const folder = `${component}/`;\n\n const path =\n `/build/${ASSETS_FOLDER}${folder}${LANGS_FOLDER}${component}${LANG_PREFIX}${lang}${LANG_EXTENSION}` as const;\n\n return new Promise(resolve => {\n fetch(path)\n .then(async langFile => {\n if (langFile.ok) {\n const fileObject = await langFile.json();\n resolve(fileObject);\n } else {\n resolve(undefined);\n }\n })\n .catch(() => resolve(undefined));\n });\n }, componentName);\n\n beforeEach(async () => {\n page = await newE2EPage({\n failOnConsoleError: true,\n html: \"\" // Necessary\n });\n });\n\n it(\"should work without specifying the language (lang attr) in the browser\", async () => {\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n });\n\n it(\"should default to english language when there is no language (lang attr) in the browser\", async () => {\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n\n await page.evaluate(() =>\n document.documentElement.setAttribute(\"lang\", \"en\")\n );\n\n const languageEnglishFile: any | undefined = await getTranslations();\n expect(languageEnglishFile).toBeTruthy();\n expect(languageFile).toEqual(languageEnglishFile);\n });\n\n languages.forEach(language => {\n it(`should work with ${language.name} language`, async () => {\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language.attr\n );\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n });\n });\n\n for (let index = 0; index < languages.length - 1; index++) {\n const language1 = languages[index];\n const language2 = languages[index + 1];\n\n // TODO: Complete all translations. At this moment, Japanese and Chinese\n // translations have missing literals\n it(`should translate the same literals (${language1.name} and ${language2.name})`, async () => {\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language1.attr\n );\n const language1File: any | undefined = await getTranslations();\n\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language2.attr\n );\n const language2File: any | undefined = await getTranslations();\n\n expect(language1File).toBeTruthy();\n expect(language2File).toBeTruthy();\n expect(haveSameStructure(language1File, language2File)).toBe(true);\n });\n }\n });\n};\n\n// TypeScript does not have a built-in type to exhaust a list with union types\nconst allGeneXusIdeUIComponents: { [key in GeneXusIdeUIControlsTagName]: 0 } = {\n \"gx-ide-ai-assistant\": 0,\n \"gx-ide-ai-message\": 0,\n \"gx-ide-bpm-app-declaration\": 0,\n \"gx-ide-bpm-assign-roles\": 0,\n \"gx-ide-bpm-import-files\": 0,\n \"gx-ide-bpm-import-gxpm\": 0,\n \"gx-ide-bpm-objects-selector\": 0,\n \"gx-ide-bpm-timer-duration\": 0,\n \"gx-ide-card\": 0,\n \"gx-ide-connect-gx-server\": 0,\n \"gx-ide-container\": 0,\n \"gx-ide-create-kb-from-server\": 0,\n \"gx-ide-current-user-info\": 0,\n \"gx-ide-dashboard-home\": 0,\n \"gx-ide-data-selector\": 0,\n \"gx-ide-data-type-selector\": 0,\n \"gx-ide-design-import\": 0,\n \"gx-ide-directory-selector\": 0,\n \"gx-ide-edit-module-server\": 0,\n \"gx-ide-empty-state\": 0,\n \"gx-ide-entity-selector\": 0,\n \"gx-ide-gam-installation-settings\": 0,\n \"gx-ide-kb-manager-export\": 0,\n \"gx-ide-kb-manager-import\": 0,\n \"gx-ide-list-selector\": 0,\n \"gx-ide-list-selector-item\": 0,\n \"gx-ide-loader\": 0,\n \"gx-ide-manage-module-references\": 0,\n \"gx-ide-manage-module-references-v2\": 0,\n \"gx-ide-new-environment\": 0,\n \"gx-ide-new-kb\": 0,\n \"gx-ide-new-object\": 0,\n \"gx-ide-object-selector\": 0,\n \"gx-ide-references\": 0,\n \"gx-ide-select-user-team\": 0,\n \"gx-ide-sign-in\": 0,\n \"gx-ide-sign-in-team\": 0,\n \"gx-ide-share-kb\": 0,\n \"gx-ide-start-page\": 0,\n \"gx-ide-status-buttons\": 0,\n \"gx-ide-switch-panel\": 0,\n \"gx-ide-switcher\": 0,\n \"gx-ide-team-dev-commit\": 0,\n \"gx-ide-team-dev-select-recent-comment\": 0,\n \"gx-ide-team-dev-update\": 0,\n \"gx-ide-team-dev-update-partial-selection\": 0,\n \"gx-ide-team-dev-update-to-revision\": 0,\n \"gx-ide-template\": 0,\n \"gx-ide-test\": 0,\n \"gx-ide-title\": 0,\n \"gx-ide-top-bar\": 0,\n \"gx-ide-wf-settings\": 0,\n \"gx-ide-ww-images\": 0,\n \"gx-ide-ww-attributes\": 0,\n \"gx-ide-navigation-report\": 0,\n \"gx-ide-splash\": 0,\n \"gx-ide-welcome-page\": 0,\n \"gx-ide-bpm-export-xpdl\": 0\n};\n\nconst componentsWithoutTranslations = new Set<GeneXusIdeUIControlsTagName>([\n \"gx-ide-ai-message\",\n \"gx-ide-container\",\n \"gx-ide-directory-selector\",\n \"gx-ide-empty-state\",\n \"gx-ide-list-selector\",\n \"gx-ide-list-selector-item\",\n \"gx-ide-loader\",\n \"gx-ide-switch-panel\",\n \"gx-ide-switcher\",\n \"gx-ide-test\",\n \"gx-ide-title\",\n \"gx-ide-top-bar\"\n]);\n\nconst componentsWithTranslations = Object.keys(\n allGeneXusIdeUIComponents\n).filter(\n component =>\n !componentsWithoutTranslations.has(component as GeneXusIdeUIControlsTagName)\n);\n\ncomponentsWithTranslations.forEach(testLocale);\n"]}
|
|
1
|
+
{"version":3,"file":"locale.e2e.js","sourceRoot":"","sources":["../../src/testing/locale.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EPage, newE2EPage } from \"@stencil/core/testing\";\nimport { GeneXusIdeUIControlsTagName } from \"../common/types\";\nimport { haveSameStructure } from \"./same-structure.e2e\";\n\nconst COMPONENT_PREFIX = \"gx-ide-\";\nconst languages: { name: string; attr: string }[] = [\n { name: \"chinese\", attr: \"zh\" },\n { name: \"english\", attr: \"en\" },\n { name: \"japanese\", attr: \"ja\" }\n];\n\nconst testLocale = (componentNameWithPrefix: GeneXusIdeUIControlsTagName) => {\n describe(`[locale][${componentNameWithPrefix}]`, () => {\n let page: E2EPage;\n const componentName = componentNameWithPrefix.replace(COMPONENT_PREFIX, \"\");\n\n // This implementation is a WA since we can't evaluate JS classes in the page.\n // TODO: Implement the locale utility as a function, which can be evaluated\n // in the page\n const getTranslations = () =>\n page.evaluate(component => {\n const ASSETS_FOLDER = \"gx-ide-assets/\";\n const DEFAULT_LANGUAGE = \"en\";\n const LANGS_FOLDER = \"langs/\";\n const LANG_PREFIX = \".lang.\";\n const LANG_EXTENSION = \".json\";\n const lang =\n document\n .getElementsByTagName(\"html\")[0]\n .getAttribute(\"lang\")\n ?.valueOf() ?? DEFAULT_LANGUAGE;\n const folder = `${component}/`;\n\n const path =\n `/build/${ASSETS_FOLDER}${folder}${LANGS_FOLDER}${component}${LANG_PREFIX}${lang}${LANG_EXTENSION}` as const;\n\n return new Promise(resolve => {\n fetch(path)\n .then(async langFile => {\n if (langFile.ok) {\n const fileObject = await langFile.json();\n resolve(fileObject);\n } else {\n resolve(undefined);\n }\n })\n .catch(() => resolve(undefined));\n });\n }, componentName);\n\n beforeEach(async () => {\n page = await newE2EPage({\n failOnConsoleError: true,\n html: \"\" // Necessary\n });\n });\n\n it(\"should work without specifying the language (lang attr) in the browser\", async () => {\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n });\n\n it(\"should default to english language when there is no language (lang attr) in the browser\", async () => {\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n\n await page.evaluate(() =>\n document.documentElement.setAttribute(\"lang\", \"en\")\n );\n\n const languageEnglishFile: any | undefined = await getTranslations();\n expect(languageEnglishFile).toBeTruthy();\n expect(languageFile).toEqual(languageEnglishFile);\n });\n\n languages.forEach(language => {\n it(`should work with ${language.name} language`, async () => {\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language.attr\n );\n const languageFile: any | undefined = await getTranslations();\n expect(languageFile).toBeTruthy();\n });\n });\n\n for (let index = 0; index < languages.length - 1; index++) {\n const language1 = languages[index];\n const language2 = languages[index + 1];\n\n // TODO: Complete all translations. At this moment, Japanese and Chinese\n // translations have missing literals\n it(`should translate the same literals (${language1.name} and ${language2.name})`, async () => {\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language1.attr\n );\n const language1File: any | undefined = await getTranslations();\n\n await page.evaluate(\n (attr: string) => document.documentElement.setAttribute(\"lang\", attr),\n language2.attr\n );\n const language2File: any | undefined = await getTranslations();\n\n expect(language1File).toBeTruthy();\n expect(language2File).toBeTruthy();\n expect(haveSameStructure(language1File, language2File)).toBe(true);\n });\n }\n });\n};\n\n// TypeScript does not have a built-in type to exhaust a list with union types\nconst allGeneXusIdeUIComponents: { [key in GeneXusIdeUIControlsTagName]: 0 } = {\n \"gx-ide-ai-assistant\": 0,\n \"gx-ide-ai-message\": 0,\n \"gx-ide-bpm-app-declaration\": 0,\n \"gx-ide-bpm-assign-roles\": 0,\n \"gx-ide-bpm-import-files\": 0,\n \"gx-ide-bpm-import-gxpm\": 0,\n \"gx-ide-bpm-objects-selector\": 0,\n \"gx-ide-bpm-timer-duration\": 0,\n \"gx-ide-card\": 0,\n \"gx-ide-chat-container\": 0,\n \"gx-ide-sc-chat-container\": 0,\n \"gx-ide-connect-gx-server\": 0,\n \"gx-ide-container\": 0,\n \"gx-ide-create-kb-from-server\": 0,\n \"gx-ide-current-user-info\": 0,\n \"gx-ide-dashboard-home\": 0,\n \"gx-ide-data-selector\": 0,\n \"gx-ide-data-type-selector\": 0,\n \"gx-ide-design-import\": 0,\n \"gx-ide-directory-selector\": 0,\n \"gx-ide-edit-module-server\": 0,\n \"gx-ide-empty-state\": 0,\n \"gx-ide-entity-selector\": 0,\n \"gx-ide-gam-installation-settings\": 0,\n \"gx-ide-kb-manager-export\": 0,\n \"gx-ide-kb-manager-import\": 0,\n \"gx-ide-list-selector\": 0,\n \"gx-ide-list-selector-item\": 0,\n \"gx-ide-loader\": 0,\n \"gx-ide-manage-module-references\": 0,\n \"gx-ide-manage-module-references-v2\": 0,\n \"gx-ide-new-environment\": 0,\n \"gx-ide-new-kb\": 0,\n \"gx-ide-new-object\": 0,\n \"gx-ide-object-selector\": 0,\n \"gx-ide-references\": 0,\n \"gx-ide-select-user-team\": 0,\n \"gx-ide-sign-in\": 0,\n \"gx-ide-sign-in-team\": 0,\n \"gx-ide-share-kb\": 0,\n \"gx-ide-start-page\": 0,\n \"gx-ide-status-buttons\": 0,\n \"gx-ide-switch-panel\": 0,\n \"gx-ide-switcher\": 0,\n \"gx-ide-team-dev-commit\": 0,\n \"gx-ide-team-dev-select-recent-comment\": 0,\n \"gx-ide-team-dev-update\": 0,\n \"gx-ide-team-dev-update-partial-selection\": 0,\n \"gx-ide-team-dev-update-to-revision\": 0,\n \"gx-ide-template\": 0,\n \"gx-ide-test\": 0,\n \"gx-ide-title\": 0,\n \"gx-ide-top-bar\": 0,\n \"gx-ide-wf-settings\": 0,\n \"gx-ide-ww-images\": 0,\n \"gx-ide-ww-attributes\": 0,\n \"gx-ide-navigation-report\": 0,\n \"gx-ide-splash\": 0,\n \"gx-ide-welcome-page\": 0,\n \"gx-ide-bpm-export-xpdl\": 0\n};\n\nconst componentsWithoutTranslations = new Set<GeneXusIdeUIControlsTagName>([\n \"gx-ide-ai-message\",\n \"gx-ide-chat-container\",\n \"gx-ide-container\",\n \"gx-ide-sc-chat-container\",\n \"gx-ide-directory-selector\",\n \"gx-ide-empty-state\",\n \"gx-ide-list-selector\",\n \"gx-ide-list-selector-item\",\n \"gx-ide-loader\",\n \"gx-ide-switch-panel\",\n \"gx-ide-switcher\",\n \"gx-ide-test\",\n \"gx-ide-title\",\n \"gx-ide-top-bar\"\n]);\n\nconst componentsWithTranslations = Object.keys(\n allGeneXusIdeUIComponents\n).filter(\n component =>\n !componentsWithoutTranslations.has(component as GeneXusIdeUIControlsTagName)\n);\n\ncomponentsWithTranslations.forEach(testLocale);\n"]}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { proxyCustomElement, HTMLElement, h, Host } from '@stencil/core/internal/client';
|
|
2
|
+
import { g as getIconPath } from './MERCURY_ASSETS.js';
|
|
3
|
+
|
|
4
|
+
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
|
+
const CSS_BUNDLES = [
|
|
7
|
+
"resets/box-sizing",
|
|
8
|
+
"utils/typography",
|
|
9
|
+
"chameleon/scrollbar",
|
|
10
|
+
"components/button",
|
|
11
|
+
"components/icon",
|
|
12
|
+
"utils/elevation"
|
|
13
|
+
];
|
|
14
|
+
const COPY_ICON = getIconPath({
|
|
15
|
+
category: "system",
|
|
16
|
+
name: "copy",
|
|
17
|
+
colorType: "neutral"
|
|
18
|
+
});
|
|
19
|
+
const CONVERSATION_ICON = getIconPath({
|
|
20
|
+
category: "objects",
|
|
21
|
+
name: "conversational-flows"
|
|
22
|
+
});
|
|
23
|
+
const GxIdeChatContainer = /*@__PURE__*/ proxyCustomElement(class GxIdeChatContainer extends HTMLElement {
|
|
24
|
+
constructor() {
|
|
25
|
+
super();
|
|
26
|
+
this.__registerHost();
|
|
27
|
+
this.chatTitle = undefined;
|
|
28
|
+
this.copyConversationCallback = undefined;
|
|
29
|
+
this.displayConversationCopiedMessage = false;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* It will display a feedback message that the conversation has been copied
|
|
33
|
+
*/
|
|
34
|
+
async showCopyConversationMessage() {
|
|
35
|
+
this.displayConversationCopiedMessage = true;
|
|
36
|
+
setTimeout(() => {
|
|
37
|
+
this.displayConversationCopiedMessage = false;
|
|
38
|
+
}, 2000);
|
|
39
|
+
}
|
|
40
|
+
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"))))))));
|
|
43
|
+
}
|
|
44
|
+
static get style() { return chatContainerCss; }
|
|
45
|
+
}, [4, "gx-ide-chat-container", {
|
|
46
|
+
"chatTitle": [1, "chat-title"],
|
|
47
|
+
"copyConversationCallback": [16],
|
|
48
|
+
"displayConversationCopiedMessage": [32],
|
|
49
|
+
"showCopyConversationMessage": [64]
|
|
50
|
+
}]);
|
|
51
|
+
function defineCustomElement() {
|
|
52
|
+
if (typeof customElements === "undefined") {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const components = ["gx-ide-chat-container"];
|
|
56
|
+
components.forEach(tagName => { switch (tagName) {
|
|
57
|
+
case "gx-ide-chat-container":
|
|
58
|
+
if (!customElements.get(tagName)) {
|
|
59
|
+
customElements.define(tagName, GxIdeChatContainer);
|
|
60
|
+
}
|
|
61
|
+
break;
|
|
62
|
+
} });
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export { GxIdeChatContainer as G, defineCustomElement as d };
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=chat-container.js.map
|
|
@@ -0,0 +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}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../types/components";
|
|
2
|
+
|
|
3
|
+
interface GxIdeChatContainer extends Components.GxIdeChatContainer, HTMLElement {}
|
|
4
|
+
export const GxIdeChatContainer: {
|
|
5
|
+
prototype: GxIdeChatContainer;
|
|
6
|
+
new (): GxIdeChatContainer;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { G as GxIdeChatContainer$1, d as defineCustomElement$1 } from './chat-container.js';
|
|
2
|
+
|
|
3
|
+
const GxIdeChatContainer = GxIdeChatContainer$1;
|
|
4
|
+
const defineCustomElement = defineCustomElement$1;
|
|
5
|
+
|
|
6
|
+
export { GxIdeChatContainer, defineCustomElement };
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=gx-ide-chat-container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"gx-ide-chat-container.js","mappings":";;;;;;;","names":[],"sources":[],"sourcesContent":[],"version":3}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../types/components";
|
|
2
|
+
|
|
3
|
+
interface GxIdeScChatContainer extends Components.GxIdeScChatContainer, HTMLElement {}
|
|
4
|
+
export const GxIdeScChatContainer: {
|
|
5
|
+
prototype: GxIdeScChatContainer;
|
|
6
|
+
new (): GxIdeScChatContainer;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import { h, proxyCustomElement, HTMLElement, Host } from '@stencil/core/internal/client';
|
|
2
|
+
import './MERCURY_ASSETS.js';
|
|
3
|
+
import { d as defineCustomElement$2 } from './chat-container.js';
|
|
4
|
+
|
|
5
|
+
const MESSAGE_COPIED_PART_SELECTOR = "message__copied-feedback";
|
|
6
|
+
const MESSAGE_COPIED_VISIBLE_PART_SELECTOR = "message__copied-feedback-visible";
|
|
7
|
+
const copy = (text) => (event) => {
|
|
8
|
+
event.stopPropagation();
|
|
9
|
+
// 1. Copy message
|
|
10
|
+
navigator.clipboard.writeText(text);
|
|
11
|
+
// 2. Display "copied" message (expects to be the next sibling!)
|
|
12
|
+
const copiedFeedbackRef = event.target
|
|
13
|
+
.nextSibling;
|
|
14
|
+
const copiedFeedbackPart = copiedFeedbackRef.getAttribute("part");
|
|
15
|
+
if (copiedFeedbackPart === MESSAGE_COPIED_PART_SELECTOR) {
|
|
16
|
+
copiedFeedbackRef.setAttribute("part", `${MESSAGE_COPIED_PART_SELECTOR} ${MESSAGE_COPIED_VISIBLE_PART_SELECTOR}`);
|
|
17
|
+
setTimeout(() => {
|
|
18
|
+
copiedFeedbackRef.setAttribute("part", `${MESSAGE_COPIED_PART_SELECTOR}`);
|
|
19
|
+
}, 1000);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const copyButton = (textToCopy, accessibleName, additionalPart) => {
|
|
23
|
+
return (h("button", { "aria-label": accessibleName, title: accessibleName, class: "button-copy-code", type: "button", onClick: copy(textToCopy), part: `message__copy-button ${additionalPart}` }));
|
|
24
|
+
};
|
|
25
|
+
const mercuryCodeRender = (copyButtonAccessibleName) => (options) => (h("div", { class: "code-block-container" },
|
|
26
|
+
h("div", { class: "code-block-header" }, copyButton(options.plainText, copyButtonAccessibleName, "code-render")),
|
|
27
|
+
h("ch-code", { language: options.language, lastNestedChildClass: options.lastNestedChildClass, value: options.plainText })));
|
|
28
|
+
const mercuryChatMessageRender = (theme) => (messageModel) => messageModel.role === "assistant" && messageModel.status === "waiting"
|
|
29
|
+
? [
|
|
30
|
+
h("span", { part: "message__processing" }, "Processing request"),
|
|
31
|
+
h("div", { class: "processing-animation", part: "processing-animation" })
|
|
32
|
+
]
|
|
33
|
+
: [
|
|
34
|
+
// "copy button" before "role" and "time" to hide both on button:focus
|
|
35
|
+
copyButton(messageModel.content, "Copy code", "common-message"),
|
|
36
|
+
h("p", { part: MESSAGE_COPIED_PART_SELECTOR }, "message copied to clipboard"),
|
|
37
|
+
h("span", { part: `message__role ${messageModel.role}` }, messageModel.role === "user" ? "You" : "GeneXus Code Fixer"),
|
|
38
|
+
h("time", { dateTime: messageModel.metadata, part: "message__time" }, messageModel.metadata),
|
|
39
|
+
messageModel.role === "user" ? (h("span", { part: "message__content user" }, messageModel.content)) : (h("ch-markdown-viewer", { part: messageModel.role === "assistant" &&
|
|
40
|
+
(messageModel.status === "complete" || !messageModel.status) &&
|
|
41
|
+
!messageModel.parts
|
|
42
|
+
? `message__content no-error`
|
|
43
|
+
: "message__content", theme: theme, showIndicator: false, renderCode: mercuryCodeRender("Copy code"), value: messageModel.content }))
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
const PROCESSING_PLACEHOLDER = "{{ASSISTANT_NAME}}";
|
|
47
|
+
let timeOut;
|
|
48
|
+
const ASSISTANT_RESPONSE_MARKDOWN = `
|
|
49
|
+
### Code block {#code-block}
|
|
50
|
+
To create code blocks, you’ll use three backticks (\` \`\`\` \`) or three tildes (\`~~~\`) on the lines before and after the code block.
|
|
51
|
+
|
|
52
|
+
\`\`\`
|
|
53
|
+
{
|
|
54
|
+
"firstName": "John",
|
|
55
|
+
"lastName": "Smith",
|
|
56
|
+
"age": 25
|
|
57
|
+
}
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
Another way to create code blocks is to indent every line of the block by at least four spaces or one tab.
|
|
61
|
+
|
|
62
|
+
<html>
|
|
63
|
+
<head>
|
|
64
|
+
</head>
|
|
65
|
+
</html>
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
#### Syntax Highlighting {#syntax-highlighting}
|
|
69
|
+
This feature allows you to add color highlighting for whatever language your code was written in.
|
|
70
|
+
To add syntax highlighting, specify a language next to the backticks before the fenced code block.
|
|
71
|
+
|
|
72
|
+
\`\`\`json
|
|
73
|
+
{
|
|
74
|
+
"firstName": "John",
|
|
75
|
+
"lastName": "Smith",
|
|
76
|
+
"age": 25
|
|
77
|
+
}
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
\`\`\`javascript
|
|
81
|
+
import React from 'react'
|
|
82
|
+
import ReactDOM from 'react-dom'
|
|
83
|
+
import Markdown from 'react-markdown'
|
|
84
|
+
import rehypeHighlight from 'rehype-highlight'
|
|
85
|
+
|
|
86
|
+
const markdown = \`
|
|
87
|
+
# Your markdown here
|
|
88
|
+
\`
|
|
89
|
+
|
|
90
|
+
ReactDOM.render(
|
|
91
|
+
<Markdown rehypePlugins={[rehypeHighlight]}>{markdown}</Markdown>,
|
|
92
|
+
document.querySelector('#content')
|
|
93
|
+
)
|
|
94
|
+
\`\`\`
|
|
95
|
+
|
|
96
|
+
### Horizontal Rules {#horizontal-rules}
|
|
97
|
+
To create a horizontal rule, use three or more asterisks (\`***\`), dashes (\`---\`), or underscores (\`___\`) on a line by themselves.
|
|
98
|
+
`;
|
|
99
|
+
const ASSISTANT_RESPONSE_SHORT_MARKDOWN = `
|
|
100
|
+
### Code block {#code-block}
|
|
101
|
+
To create code blocks, you’ll use three backticks (\` \`\`\` \`) or three tildes (\`~~~\`) on the lines before and after the code block.
|
|
102
|
+
|
|
103
|
+
\`\`\`json
|
|
104
|
+
{
|
|
105
|
+
"firstName": "John",
|
|
106
|
+
"lastName": "Smith",
|
|
107
|
+
"age": 25
|
|
108
|
+
}
|
|
109
|
+
\`\`\`
|
|
110
|
+
`;
|
|
111
|
+
const sendChatToLLM = () => {
|
|
112
|
+
// This is a WA to get the chat reference
|
|
113
|
+
const chatRef = document.querySelector("ch-chat");
|
|
114
|
+
chatRef.addNewMessage({
|
|
115
|
+
id: `${new Date().getTime()}`,
|
|
116
|
+
role: "assistant",
|
|
117
|
+
content: "Analyzing",
|
|
118
|
+
status: "waiting"
|
|
119
|
+
});
|
|
120
|
+
timeOut = setTimeout(() => {
|
|
121
|
+
chatRef.updateLastMessage({
|
|
122
|
+
role: "assistant",
|
|
123
|
+
content: "Processing with Chat with LLMs",
|
|
124
|
+
status: "waiting"
|
|
125
|
+
}, "replace");
|
|
126
|
+
timeOut = setTimeout(() => {
|
|
127
|
+
dummyStreaming(chatRef, 20, ASSISTANT_RESPONSE_MARKDOWN, "replace");
|
|
128
|
+
}, 200);
|
|
129
|
+
}, 200);
|
|
130
|
+
};
|
|
131
|
+
function dummyStreaming(chatRef, counter, stringToDisplay, mode) {
|
|
132
|
+
timeOut = setTimeout(() => {
|
|
133
|
+
const streamingCompleted = counter >= stringToDisplay.length;
|
|
134
|
+
chatRef.updateLastMessage({
|
|
135
|
+
role: "assistant",
|
|
136
|
+
content: {
|
|
137
|
+
message: stringToDisplay.substring(counter - 20, counter),
|
|
138
|
+
files: streamingCompleted
|
|
139
|
+
? [
|
|
140
|
+
{
|
|
141
|
+
url: "https://next.genexus.ai",
|
|
142
|
+
caption: "Mars Exploration Contract"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
url: "https://gx-chameleon.netlify.app",
|
|
146
|
+
caption: "Venus Exploration Contract"
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
: undefined
|
|
150
|
+
},
|
|
151
|
+
status: streamingCompleted ? "complete" : "streaming"
|
|
152
|
+
}, mode);
|
|
153
|
+
if (!streamingCompleted) {
|
|
154
|
+
dummyStreaming(chatRef, counter + 20, stringToDisplay, "concat");
|
|
155
|
+
}
|
|
156
|
+
}, counter % 200 === 0 ? 50 : 40);
|
|
157
|
+
}
|
|
158
|
+
const chatCallbacks = {
|
|
159
|
+
clear: () => new Promise(resolve => resolve()),
|
|
160
|
+
sendChatToLLM: sendChatToLLM,
|
|
161
|
+
uploadImage: () => new Promise(resolve => resolve("")),
|
|
162
|
+
stopGeneratingAnswer: () => {
|
|
163
|
+
clearTimeout(timeOut);
|
|
164
|
+
// This is a WA to get the chat reference
|
|
165
|
+
const chatRef = document.querySelector("ch-chat");
|
|
166
|
+
chatRef.updateLastMessage({
|
|
167
|
+
role: "assistant",
|
|
168
|
+
content: "",
|
|
169
|
+
status: "complete"
|
|
170
|
+
}, "concat");
|
|
171
|
+
return new Promise(resolve => setTimeout(() => resolve, 10));
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
const chatTranslations = {
|
|
175
|
+
accessibleName: {
|
|
176
|
+
clearChat: "Clear chat",
|
|
177
|
+
copyResponseButton: "Copy assistant response",
|
|
178
|
+
downloadCodeButton: "Download code",
|
|
179
|
+
imagePicker: "Select images",
|
|
180
|
+
removeUploadedImage: "Remove uploaded image",
|
|
181
|
+
sendButton: "Send",
|
|
182
|
+
sendInput: "Message",
|
|
183
|
+
stopGeneratingAnswerButton: "Stop generating answer"
|
|
184
|
+
},
|
|
185
|
+
placeholder: {
|
|
186
|
+
sendInput: "Ask me a question..."
|
|
187
|
+
},
|
|
188
|
+
text: {
|
|
189
|
+
copyCodeButton: "Copy code",
|
|
190
|
+
processing: `Processing with ${PROCESSING_PLACEHOLDER}`,
|
|
191
|
+
sourceFiles: "Source files:"
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
Array.from({ length: 40 }, (_, index) => index % 2 === 0
|
|
195
|
+
? {
|
|
196
|
+
id: `index: ${index}`,
|
|
197
|
+
role: "user",
|
|
198
|
+
content: `index: ${index}` +
|
|
199
|
+
`index: ${index}\n` +
|
|
200
|
+
`index: ${index}\n` +
|
|
201
|
+
`index: ${index}\n` +
|
|
202
|
+
`index: ${index}\n` +
|
|
203
|
+
`index: ${index}\n` +
|
|
204
|
+
`index: ${index}\n`
|
|
205
|
+
}
|
|
206
|
+
: {
|
|
207
|
+
id: `index: ${index}`,
|
|
208
|
+
role: "assistant",
|
|
209
|
+
content: ASSISTANT_RESPONSE_SHORT_MARKDOWN +
|
|
210
|
+
`\nindex: ${index}\n` +
|
|
211
|
+
`index: ${index}\n` +
|
|
212
|
+
`index: ${index}\n` +
|
|
213
|
+
`index: ${index}\n` +
|
|
214
|
+
`index: ${index}\n` +
|
|
215
|
+
`index: ${index}\n` +
|
|
216
|
+
`index: ${index}\n`
|
|
217
|
+
});
|
|
218
|
+
const codeFixerRecord = [
|
|
219
|
+
{
|
|
220
|
+
id: "1",
|
|
221
|
+
role: "user",
|
|
222
|
+
content: "Please give me an example about...",
|
|
223
|
+
metadata: "14:55"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
id: "2",
|
|
227
|
+
role: "assistant",
|
|
228
|
+
status: "complete",
|
|
229
|
+
content: "Action required example. Action required example. Action required example.",
|
|
230
|
+
metadata: "14:56"
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: "3",
|
|
234
|
+
role: "assistant",
|
|
235
|
+
status: "complete",
|
|
236
|
+
content: "Warning in request",
|
|
237
|
+
metadata: "14:57",
|
|
238
|
+
parts: "warning"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
id: "4",
|
|
242
|
+
role: "error",
|
|
243
|
+
content: "Error in Request",
|
|
244
|
+
metadata: "14:58"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
id: "5",
|
|
248
|
+
role: "assistant",
|
|
249
|
+
status: "complete",
|
|
250
|
+
content: "Warning in request",
|
|
251
|
+
metadata: "14:59",
|
|
252
|
+
parts: "success"
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
id: "6",
|
|
256
|
+
role: "user",
|
|
257
|
+
content: "Implement the function calculate_average_grade in grades.py that takes a list of grades as input and returns the average grade as a floating-point number",
|
|
258
|
+
metadata: "15:00"
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
id: "7",
|
|
262
|
+
role: "assistant",
|
|
263
|
+
status: "complete",
|
|
264
|
+
content: "You can provide further details or updates regarding your support ticket and its associated code. Your input here helps us better understand and address your issue effectively.",
|
|
265
|
+
metadata: "15:01"
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
id: "8",
|
|
269
|
+
role: "assistant",
|
|
270
|
+
status: "waiting",
|
|
271
|
+
content: "Processing Request"
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
id: "9",
|
|
275
|
+
role: "assistant",
|
|
276
|
+
status: "complete",
|
|
277
|
+
content: ASSISTANT_RESPONSE_SHORT_MARKDOWN
|
|
278
|
+
}
|
|
279
|
+
];
|
|
280
|
+
|
|
281
|
+
const chatShowcaseCss = ":host{block-size:100%;display:grid}";
|
|
282
|
+
|
|
283
|
+
var __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
284
|
+
if (kind === "a" && !f)
|
|
285
|
+
throw new TypeError("Private accessor was defined without a getter");
|
|
286
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
|
|
287
|
+
throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
288
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
289
|
+
};
|
|
290
|
+
var __classPrivateFieldSet = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
291
|
+
if (kind === "m")
|
|
292
|
+
throw new TypeError("Private method is not writable");
|
|
293
|
+
if (kind === "a" && !f)
|
|
294
|
+
throw new TypeError("Private accessor was defined without a setter");
|
|
295
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
|
|
296
|
+
throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
297
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
298
|
+
};
|
|
299
|
+
var _GxIdeScChatContainer_chatContainerRef, _GxIdeScChatContainer_copyConversationCallbackHandler;
|
|
300
|
+
const CSS_BUNDLES = ["resets/box-sizing", "components/chat"];
|
|
301
|
+
const GxIdeScChatContainer$1 = /*@__PURE__*/ proxyCustomElement(class GxIdeScChatContainer extends HTMLElement {
|
|
302
|
+
constructor() {
|
|
303
|
+
super();
|
|
304
|
+
this.__registerHost();
|
|
305
|
+
this.__attachShadow();
|
|
306
|
+
_GxIdeScChatContainer_chatContainerRef.set(this, void 0);
|
|
307
|
+
_GxIdeScChatContainer_copyConversationCallbackHandler.set(this, () => {
|
|
308
|
+
__classPrivateFieldGet(this, _GxIdeScChatContainer_chatContainerRef, "f").showCopyConversationMessage();
|
|
309
|
+
});
|
|
310
|
+
this.showAdditionalContent = false;
|
|
311
|
+
this.conversationCopied = false;
|
|
312
|
+
}
|
|
313
|
+
render() {
|
|
314
|
+
return (h(Host, null, h("ch-theme", { model: CSS_BUNDLES }), h("gx-ide-chat-container", { chatTitle: "GeneXus Assistant", copyConversationCallback: __classPrivateFieldGet(this, _GxIdeScChatContainer_copyConversationCallbackHandler, "f"), ref: el => (__classPrivateFieldSet(this, _GxIdeScChatContainer_chatContainerRef, el, "f")) }, h("ch-chat", { callbacks: chatCallbacks, class: "chat", generatingResponse: false, loadingState: "all-records-loaded", markdownTheme: "mercury/markdown-viewer", renderItem: mercuryChatMessageRender("mercury/markdown-viewer"), isMobile: false, items: codeFixerRecord, showAdditionalContent: this.showAdditionalContent, translations: chatTranslations }, h("div", { slot: "additional-content" }, "Custom content that is rendered when the chat renders content")))));
|
|
315
|
+
}
|
|
316
|
+
static get style() { return chatShowcaseCss; }
|
|
317
|
+
}, [1, "gx-ide-sc-chat-container", {
|
|
318
|
+
"showAdditionalContent": [32],
|
|
319
|
+
"conversationCopied": [32]
|
|
320
|
+
}]);
|
|
321
|
+
_GxIdeScChatContainer_chatContainerRef = new WeakMap(), _GxIdeScChatContainer_copyConversationCallbackHandler = new WeakMap();
|
|
322
|
+
function defineCustomElement$1() {
|
|
323
|
+
if (typeof customElements === "undefined") {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const components = ["gx-ide-sc-chat-container", "gx-ide-chat-container"];
|
|
327
|
+
components.forEach(tagName => { switch (tagName) {
|
|
328
|
+
case "gx-ide-sc-chat-container":
|
|
329
|
+
if (!customElements.get(tagName)) {
|
|
330
|
+
customElements.define(tagName, GxIdeScChatContainer$1);
|
|
331
|
+
}
|
|
332
|
+
break;
|
|
333
|
+
case "gx-ide-chat-container":
|
|
334
|
+
if (!customElements.get(tagName)) {
|
|
335
|
+
defineCustomElement$2();
|
|
336
|
+
}
|
|
337
|
+
break;
|
|
338
|
+
} });
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const GxIdeScChatContainer = GxIdeScChatContainer$1;
|
|
342
|
+
const defineCustomElement = defineCustomElement$1;
|
|
343
|
+
|
|
344
|
+
export { GxIdeScChatContainer, defineCustomElement };
|
|
345
|
+
|
|
346
|
+
//# sourceMappingURL=gx-ide-sc-chat-container.js.map
|