@genexus/genexus-ide-ui 0.0.75 → 0.0.76
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/cjs/genexus-ide-ui.cjs.js +1 -1
- package/dist/cjs/gx-ide-ai-assistant.cjs.entry.js +35 -7
- package/dist/cjs/gx-ide-ai-message.cjs.entry.js +19 -6
- package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-new-environment.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-object-selector.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +1 -1
- package/dist/cjs/gx-ide-ww-images.cjs.entry.js +1 -1
- package/dist/cjs/{helpers-0a984c76.js → helpers-e25e57cb.js} +12 -3
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/common/helpers.js +12 -3
- package/dist/collection/components/ai-assistant/ai-assistant.css +3 -21
- package/dist/collection/components/ai-assistant/ai-assistant.js +37 -6
- package/dist/collection/components/ai-assistant/ai-message.css +9 -12
- package/dist/collection/components/ai-assistant/ai-message.js +36 -4
- package/dist/collection/components/ai-assistant/gx-ide-assets/ai-assistant/langs/ai-assistant.lang.en.json +3 -1
- package/dist/components/ai-message.js +19 -5
- package/dist/components/gx-ide-ai-assistant.js +36 -7
- package/dist/components/helpers2.js +12 -3
- package/dist/esm/genexus-ide-ui.js +1 -1
- package/dist/esm/gx-ide-ai-assistant.entry.js +35 -7
- package/dist/esm/gx-ide-ai-message.entry.js +19 -6
- package/dist/esm/gx-ide-kb-manager-import.entry.js +1 -1
- package/dist/esm/gx-ide-new-environment.entry.js +1 -1
- package/dist/esm/gx-ide-object-selector.entry.js +1 -1
- package/dist/esm/gx-ide-team-dev-commit.entry.js +1 -1
- package/dist/esm/gx-ide-team-dev-update.entry.js +1 -1
- package/dist/esm/gx-ide-ww-images.entry.js +1 -1
- package/dist/esm/{helpers-91494352.js → helpers-a11a19fb.js} +12 -3
- package/dist/esm/loader.js +1 -1
- package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
- package/dist/genexus-ide-ui/gx-ide-assets/ai-assistant/langs/ai-assistant.lang.en.json +3 -1
- package/dist/genexus-ide-ui/p-0f3c3a5e.entry.js +1 -0
- package/dist/genexus-ide-ui/{p-cb07fc99.entry.js → p-1b1fd856.entry.js} +1 -1
- package/dist/genexus-ide-ui/{p-440fe7b3.entry.js → p-1da59907.entry.js} +1 -1
- package/dist/genexus-ide-ui/{p-8c5919ec.entry.js → p-2b6a3afa.entry.js} +1 -1
- package/dist/genexus-ide-ui/{p-3d410e77.entry.js → p-33961b41.entry.js} +1 -1
- package/dist/genexus-ide-ui/p-4a8187c1.entry.js +1 -0
- package/dist/genexus-ide-ui/{p-4758d51e.js → p-64d3885f.js} +1 -1
- package/dist/genexus-ide-ui/{p-13085dd7.entry.js → p-72fad9dd.entry.js} +1 -1
- package/dist/genexus-ide-ui/{p-e13a299b.entry.js → p-a43dc4e7.entry.js} +1 -1
- package/dist/types/common/helpers.d.ts +1 -0
- package/dist/types/components/ai-assistant/ai-assistant.d.ts +8 -0
- package/dist/types/components/ai-assistant/ai-message.d.ts +7 -4
- package/dist/types/components.d.ts +9 -0
- package/package.json +1 -1
- package/dist/collection/components/ai-assistant/gx-ide-assets/ai-message/langs/ai-message.lang.en.json +0 -4
- package/dist/collection/components/ai-assistant/gx-ide-assets/ai-message/langs/ai-message.lang.ja.json +0 -3
- package/dist/collection/components/ai-assistant/gx-ide-assets/ai-message/langs/ai-message.lang.zh.json +0 -3
- package/dist/genexus-ide-ui/gx-ide-assets/ai-message/langs/ai-message.lang.en.json +0 -4
- package/dist/genexus-ide-ui/gx-ide-assets/ai-message/langs/ai-message.lang.ja.json +0 -3
- package/dist/genexus-ide-ui/gx-ide-assets/ai-message/langs/ai-message.lang.zh.json +0 -3
- package/dist/genexus-ide-ui/p-38dacc01.entry.js +0 -1
- package/dist/genexus-ide-ui/p-47f3b15b.entry.js +0 -1
|
@@ -106,10 +106,19 @@ export const setInitialComboValue = (options) => {
|
|
|
106
106
|
return options[0].value || options[0].id;
|
|
107
107
|
}
|
|
108
108
|
};
|
|
109
|
+
export const escapeRegExp = (str) => {
|
|
110
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
111
|
+
};
|
|
109
112
|
export const hiChar = function (text, filterValue) {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
+
if (text && filterValue) {
|
|
114
|
+
/* this function highlights the character(s) that match(es) the filter value. (hi)light (Char)acters */
|
|
115
|
+
const escapedFilterValue = escapeRegExp(filterValue);
|
|
116
|
+
const re = new RegExp(escapedFilterValue, "gi");
|
|
117
|
+
return (h("span", { innerHTML: text.replace(re, '<span class="hiChar">$&</span>') }));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return text;
|
|
121
|
+
}
|
|
113
122
|
};
|
|
114
123
|
export const closeOnOutsideClickHandler = (eventInfo, ref) => {
|
|
115
124
|
if (!eventInfo.composedPath().includes(ref)) {
|
|
@@ -531,18 +531,6 @@ FORM ELEMENTS
|
|
|
531
531
|
height: 100%;
|
|
532
532
|
overflow-y: auto;
|
|
533
533
|
}
|
|
534
|
-
:host .header::before {
|
|
535
|
-
transition: 200ms background-color;
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
/*--- Assistant Status ---*/
|
|
539
|
-
:host(.assistant--success) .header__first-row::before {
|
|
540
|
-
background-color: var(--ai-dot-bg-color);
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
:host(.assistant--error) .header__first-row::before {
|
|
544
|
-
background-color: var(--color-error-dark);
|
|
545
|
-
}
|
|
546
534
|
|
|
547
535
|
.gx-ide-main-wrapper {
|
|
548
536
|
padding: 106px 10px 52px 10px;
|
|
@@ -571,14 +559,6 @@ FORM ELEMENTS
|
|
|
571
559
|
align-items: center;
|
|
572
560
|
justify-content: space-between;
|
|
573
561
|
}
|
|
574
|
-
.header__first-row::before {
|
|
575
|
-
content: "";
|
|
576
|
-
width: var(--spacing-comp-02);
|
|
577
|
-
height: var(--spacing-comp-02);
|
|
578
|
-
display: block;
|
|
579
|
-
border-radius: calc(var(--spacing-comp-02) / 2);
|
|
580
|
-
background-color: var(--ai-dot-bg-color);
|
|
581
|
-
}
|
|
582
562
|
.header__filter {
|
|
583
563
|
margin-block-start: var(--spacing-comp-02);
|
|
584
564
|
}
|
|
@@ -598,6 +578,8 @@ FORM ELEMENTS
|
|
|
598
578
|
.messages-wrapper {
|
|
599
579
|
position: relative;
|
|
600
580
|
overflow: auto;
|
|
581
|
+
display: flex;
|
|
582
|
+
flex-direction: column;
|
|
601
583
|
/* Track */
|
|
602
584
|
/* Handle */
|
|
603
585
|
/* Handle on hover */
|
|
@@ -623,7 +605,7 @@ FORM ELEMENTS
|
|
|
623
605
|
|
|
624
606
|
.messages {
|
|
625
607
|
display: flex;
|
|
626
|
-
flex-direction: column
|
|
608
|
+
flex-direction: column;
|
|
627
609
|
list-style-type: none;
|
|
628
610
|
padding: 0;
|
|
629
611
|
margin: 0;
|
|
@@ -6,6 +6,7 @@ import { Locale } from "../../common/locale";
|
|
|
6
6
|
export class GxIdeTemplate {
|
|
7
7
|
constructor() {
|
|
8
8
|
this.renderedFirstTime = false;
|
|
9
|
+
this.setFocus = true;
|
|
9
10
|
// 9.LOCAL METHODS //
|
|
10
11
|
this.evaluateAiInProgress = () => {
|
|
11
12
|
var _a;
|
|
@@ -37,7 +38,7 @@ export class GxIdeTemplate {
|
|
|
37
38
|
};
|
|
38
39
|
this.renderMessage = (message, i) => {
|
|
39
40
|
if (message.text.length > 0) {
|
|
40
|
-
return (h("gx-ide-ai-message", { message: message.text, messageType: message.type, hidden: message.hidden, filterValue: this.filterValue, key: `${i.toString()}-${message.type}
|
|
41
|
+
return (h("gx-ide-ai-message", { message: message.text, messageType: message.type, hidden: message.hidden, filterValue: this.filterValue, key: `${i.toString()}-${message.type}`, translations: this._componentLocale.aiMessage }));
|
|
41
42
|
}
|
|
42
43
|
};
|
|
43
44
|
this.textAreaInputHandler = () => {
|
|
@@ -47,16 +48,22 @@ export class GxIdeTemplate {
|
|
|
47
48
|
this.filterValue = "";
|
|
48
49
|
};
|
|
49
50
|
this.promptEnterHandler = async (prompt) => {
|
|
50
|
-
/* First remove double spaces*/
|
|
51
|
+
/* First remove double spaces */
|
|
51
52
|
const promptTrimmed = prompt.detail.replace(/\s+/g, " ");
|
|
52
|
-
/* Update textarea value to get the proper height*/
|
|
53
|
+
/* Update textarea value to get the proper height */
|
|
53
54
|
this.textAreaEl.value = promptTrimmed;
|
|
54
55
|
setTimeout(() => {
|
|
55
|
-
/* Then save the actual height (setTimeOut required)*/
|
|
56
|
+
/* Then save the actual height (setTimeOut required) */
|
|
56
57
|
this.lastUserMessageHeight = this.textAreaEl.offsetHeight;
|
|
57
58
|
}, 0);
|
|
58
|
-
/* The clear the textarea*/
|
|
59
|
+
/* The clear the textarea */
|
|
59
60
|
this.textAreaEl.value = "";
|
|
61
|
+
/* Insert the user message */
|
|
62
|
+
this.addMessage({
|
|
63
|
+
type: "user",
|
|
64
|
+
text: promptTrimmed
|
|
65
|
+
});
|
|
66
|
+
/* Call the callback */
|
|
60
67
|
if (this.userMessageCallback && !this.aIInProgress) {
|
|
61
68
|
this.aIInProgress = true;
|
|
62
69
|
this.userMessageCallback(promptTrimmed).then(() => {
|
|
@@ -129,9 +136,16 @@ export class GxIdeTemplate {
|
|
|
129
136
|
this.filterEl.focus();
|
|
130
137
|
}
|
|
131
138
|
};
|
|
139
|
+
this.promptFocusHandler = () => {
|
|
140
|
+
this.promptHasFocus = true;
|
|
141
|
+
};
|
|
142
|
+
this.promptBlurHandler = () => {
|
|
143
|
+
this.promptHasFocus = false;
|
|
144
|
+
};
|
|
132
145
|
this.userHasTyped = false;
|
|
133
146
|
this.aIInProgress = false;
|
|
134
147
|
this.showFilter = false;
|
|
148
|
+
this.promptHasFocus = false;
|
|
135
149
|
this.filterValue = undefined;
|
|
136
150
|
this.messages = [];
|
|
137
151
|
this.promptMaxHeight = "128px";
|
|
@@ -141,6 +155,11 @@ export class GxIdeTemplate {
|
|
|
141
155
|
this.promptValue = undefined;
|
|
142
156
|
this.filter = true;
|
|
143
157
|
}
|
|
158
|
+
watchAIInProgressHandler(aiInProgress) {
|
|
159
|
+
if (!aiInProgress) {
|
|
160
|
+
this.setFocus = true;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
144
163
|
watchMessagesHandler() {
|
|
145
164
|
this.evaluateAiInProgress();
|
|
146
165
|
this.evaluateAiStatus();
|
|
@@ -161,6 +180,13 @@ export class GxIdeTemplate {
|
|
|
161
180
|
this.componentDidRenderFirstTime.emit(this._componentLocale.componentName);
|
|
162
181
|
this.renderedFirstTime = true;
|
|
163
182
|
}
|
|
183
|
+
if (this.setFocus) {
|
|
184
|
+
setTimeout(() => {
|
|
185
|
+
/* Doesn't seems to work without the setTimeout */
|
|
186
|
+
this.textAreaEl.focus();
|
|
187
|
+
this.setFocus = false;
|
|
188
|
+
}, 0);
|
|
189
|
+
}
|
|
164
190
|
}
|
|
165
191
|
// 7.LISTENERS //
|
|
166
192
|
// 8.PUBLIC METHODS API //
|
|
@@ -203,8 +229,9 @@ export class GxIdeTemplate {
|
|
|
203
229
|
prompt: true
|
|
204
230
|
} }, h("gxg-form-textarea", { ai: true, class: "prompt__textarea", value: this.promptValue, maxHeight: this.promptMaxHeight, placeholder: this.aIInProgress
|
|
205
231
|
? this._componentLocale.processingQueryPlaceholder
|
|
206
|
-
: this._componentLocale.promptPlaceholder, onInput: this.textAreaInputHandler, onEnter: this.promptEnterHandler, onArrowUpPressed: this.promptArrowUpHandler, disabled: this.aIInProgress, ref: el => (this.textAreaEl = el) }), !this.userHasTyped &&
|
|
232
|
+
: this._componentLocale.promptPlaceholder, onInput: this.textAreaInputHandler, onEnter: this.promptEnterHandler, onArrowUpPressed: this.promptArrowUpHandler, onBlur: this.promptBlurHandler, onFocus: this.promptFocusHandler, disabled: this.aIInProgress, ref: el => (this.textAreaEl = el) }), !this.userHasTyped &&
|
|
207
233
|
!this.aIInProgress &&
|
|
234
|
+
!this.promptHasFocus &&
|
|
208
235
|
((_b = this.focusShortcuts) === null || _b === void 0 ? void 0 : _b.length) > 0 ? (h("div", { class: {
|
|
209
236
|
prompt__shortcuts: true
|
|
210
237
|
} }, this.focusShortcuts.map((shortcut, i) => {
|
|
@@ -363,6 +390,7 @@ export class GxIdeTemplate {
|
|
|
363
390
|
"userHasTyped": {},
|
|
364
391
|
"aIInProgress": {},
|
|
365
392
|
"showFilter": {},
|
|
393
|
+
"promptHasFocus": {},
|
|
366
394
|
"filterValue": {}
|
|
367
395
|
};
|
|
368
396
|
}
|
|
@@ -429,6 +457,9 @@ export class GxIdeTemplate {
|
|
|
429
457
|
static get elementRef() { return "el"; }
|
|
430
458
|
static get watchers() {
|
|
431
459
|
return [{
|
|
460
|
+
"propName": "aIInProgress",
|
|
461
|
+
"methodName": "watchAIInProgressHandler"
|
|
462
|
+
}, {
|
|
432
463
|
"propName": "messages",
|
|
433
464
|
"methodName": "watchMessagesHandler"
|
|
434
465
|
}];
|
|
@@ -6,7 +6,9 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
|
|
|
6
6
|
*/
|
|
7
7
|
/*--- Messages ---*/
|
|
8
8
|
.message {
|
|
9
|
-
--ai-
|
|
9
|
+
--ai-bg-color: #242d36;
|
|
10
|
+
--ai-error-bg-color: #272124;
|
|
11
|
+
--ai-error-border-color: #a3585e;
|
|
10
12
|
--ai-message-error-color: var(--color-error-dark);
|
|
11
13
|
display: grid;
|
|
12
14
|
grid-template-rows: 0fr;
|
|
@@ -19,11 +21,10 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
|
|
|
19
21
|
}
|
|
20
22
|
.message__inner-wrapper {
|
|
21
23
|
padding: var(--spacing-comp-01) var(--spacing-comp-02);
|
|
22
|
-
border-radius: var(--border-radius-
|
|
24
|
+
border-radius: var(--border-radius-sm);
|
|
23
25
|
border: var(--border-width-sm) solid transparent;
|
|
24
26
|
background-color: var(--assistant-bg-color);
|
|
25
|
-
|
|
26
|
-
margin-block-end: var(--spacing-comp-02);
|
|
27
|
+
margin-block-start: var(--spacing-comp-02);
|
|
27
28
|
}
|
|
28
29
|
.message__caption {
|
|
29
30
|
font-size: var(--mc-font-size-xxs);
|
|
@@ -36,6 +37,7 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
|
|
|
36
37
|
.message--copying {
|
|
37
38
|
pointer-events: none;
|
|
38
39
|
}
|
|
40
|
+
.message--copying span:not(.copied),
|
|
39
41
|
.message--copying .message__caption {
|
|
40
42
|
color: transparent;
|
|
41
43
|
-webkit-user-select: none;
|
|
@@ -48,11 +50,6 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
|
|
|
48
50
|
.message--user .message__inner-wrapper {
|
|
49
51
|
background-color: var(--gray-12);
|
|
50
52
|
}
|
|
51
|
-
.message--user .message__inner-wrapper {
|
|
52
|
-
/*override default message border radius*/
|
|
53
|
-
border-top-left-radius: var(--border-radius-sm);
|
|
54
|
-
border-bottom-left-radius: var(--border-radius-sm);
|
|
55
|
-
}
|
|
56
53
|
.message--assistant-action .message__inner-wrapper {
|
|
57
54
|
font-style: italic;
|
|
58
55
|
}
|
|
@@ -61,7 +58,6 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
|
|
|
61
58
|
display: grid;
|
|
62
59
|
grid-template-columns: 1fr auto;
|
|
63
60
|
gap: var(--spacing-comp-02);
|
|
64
|
-
border-inline-start-color: var(--gray-02);
|
|
65
61
|
}
|
|
66
62
|
.message--assistant-in-progress .message__inner-wrapper .message__caption {
|
|
67
63
|
overflow: hidden;
|
|
@@ -73,10 +69,11 @@ Found on /common/helpers.tsx hiChar function is used to add a span/class to ever
|
|
|
73
69
|
flex: none;
|
|
74
70
|
}
|
|
75
71
|
.message--assistant-chat .message__inner-wrapper, .message--assistant-action .message__inner-wrapper {
|
|
76
|
-
|
|
72
|
+
background-color: var(--ai-bg-color);
|
|
77
73
|
}
|
|
78
74
|
.message--assistant-error .message__inner-wrapper {
|
|
79
|
-
|
|
75
|
+
background-color: var(--ai-error-bg-color);
|
|
76
|
+
border-color: var(--ai-error-border-color);
|
|
80
77
|
}
|
|
81
78
|
.message--copyable {
|
|
82
79
|
cursor: pointer;
|
|
@@ -1,9 +1,22 @@
|
|
|
1
1
|
/* STENCIL IMPORTS */
|
|
2
2
|
import { h } from "@stencil/core";
|
|
3
|
-
import { Locale } from "../../common/locale";
|
|
4
3
|
import { hiChar } from "../../common/helpers";
|
|
5
4
|
export class GxIdeAiMessage {
|
|
6
5
|
constructor() {
|
|
6
|
+
/*
|
|
7
|
+
INDEX:
|
|
8
|
+
1.OWN PROPERTIES
|
|
9
|
+
2.REFERENCE TO ELEMENTS
|
|
10
|
+
3.STATE() VARIABLES
|
|
11
|
+
4.PUBLIC PROPERTY API | WATCH'S
|
|
12
|
+
5.EVENTS (EMIT)
|
|
13
|
+
6.COMPONENT LIFECYCLE METHODS
|
|
14
|
+
7.LISTENERS
|
|
15
|
+
8.PUBLIC METHODS API
|
|
16
|
+
9.LOCAL METHODS
|
|
17
|
+
10.RENDER() FUNCTION
|
|
18
|
+
*/
|
|
19
|
+
// 1.OWN PROPERTIES //
|
|
7
20
|
/* The message allows to be copied*/
|
|
8
21
|
this.copyable = false;
|
|
9
22
|
// 7.LISTENERS //
|
|
@@ -19,7 +32,7 @@ export class GxIdeAiMessage {
|
|
|
19
32
|
this.showCopiedMessage = true;
|
|
20
33
|
setTimeout(() => {
|
|
21
34
|
this.showCopiedMessage = false;
|
|
22
|
-
},
|
|
35
|
+
}, 1500);
|
|
23
36
|
};
|
|
24
37
|
this.visible = false;
|
|
25
38
|
this.showCopiedMessage = false;
|
|
@@ -27,11 +40,11 @@ export class GxIdeAiMessage {
|
|
|
27
40
|
this.messageType = undefined;
|
|
28
41
|
this.filterValue = undefined;
|
|
29
42
|
this.hidden = undefined;
|
|
43
|
+
this.translations = undefined;
|
|
30
44
|
}
|
|
31
45
|
// 5.EVENTS (EMIT) //
|
|
32
46
|
// 6.COMPONENT LIFECYCLE METHODS //
|
|
33
47
|
async componentWillLoad() {
|
|
34
|
-
this._componentLocale = await Locale.getComponentStrings(this.el);
|
|
35
48
|
this.evaluateMessageIsCopyable();
|
|
36
49
|
}
|
|
37
50
|
componentDidRender() {
|
|
@@ -58,7 +71,7 @@ export class GxIdeAiMessage {
|
|
|
58
71
|
"message__caption--in-progress": this.messageType === "assistant-in-progress"
|
|
59
72
|
} }, this.showCopiedMessage ? (h("span", { class: {
|
|
60
73
|
copied: true
|
|
61
|
-
} }, h("gxg-icon", { color: "mercury", type: "bpm/tasks" }), this.
|
|
74
|
+
} }, h("gxg-icon", { color: "mercury", type: "bpm/tasks" }), this.translations["copied"])) : null, hiChar(this.message, this.filterValue)), this.messageType === "assistant-in-progress" ? (h("div", { class: "animation-wrapper" }, h("div", { class: "dot-pulse" }))) : null))));
|
|
62
75
|
}
|
|
63
76
|
static get is() { return "gx-ide-ai-message"; }
|
|
64
77
|
static get encapsulation() { return "shadow"; }
|
|
@@ -147,6 +160,25 @@ export class GxIdeAiMessage {
|
|
|
147
160
|
},
|
|
148
161
|
"attribute": "hidden",
|
|
149
162
|
"reflect": false
|
|
163
|
+
},
|
|
164
|
+
"translations": {
|
|
165
|
+
"type": "unknown",
|
|
166
|
+
"mutable": false,
|
|
167
|
+
"complexType": {
|
|
168
|
+
"original": "Translations",
|
|
169
|
+
"resolved": "{ [key: string]: string; }",
|
|
170
|
+
"references": {
|
|
171
|
+
"Translations": {
|
|
172
|
+
"location": "local"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"required": false,
|
|
177
|
+
"optional": false,
|
|
178
|
+
"docs": {
|
|
179
|
+
"tags": [],
|
|
180
|
+
"text": "An object with the needed string translations."
|
|
181
|
+
}
|
|
150
182
|
}
|
|
151
183
|
};
|
|
152
184
|
}
|
|
@@ -1,16 +1,29 @@
|
|
|
1
1
|
import { proxyCustomElement, HTMLElement, h } from '@stencil/core/internal/client';
|
|
2
|
-
import { L as Locale } from './locale.js';
|
|
3
2
|
import { h as hiChar } from './helpers2.js';
|
|
4
3
|
import { d as defineCustomElement$2 } from './icon.js';
|
|
5
4
|
import { d as defineCustomElement$1 } from './icon2.js';
|
|
6
5
|
|
|
7
|
-
const aiMessageCss = ".message{--ai-
|
|
6
|
+
const aiMessageCss = ".message{--ai-bg-color:#242d36;--ai-error-bg-color:#272124;--ai-error-border-color:#a3585e;--ai-message-error-color:var(--color-error-dark);display:grid;grid-template-rows:0fr;transition:grid-template-rows 100ms;transition:grid-template-rows 100ms, -ms-grid-rows 100ms;}.message__outer-wrapper{overflow:hidden}.message__inner-wrapper{padding:var(--spacing-comp-01) var(--spacing-comp-02);border-radius:var(--border-radius-sm);border:var(--border-width-sm) solid transparent;background-color:var(--assistant-bg-color);margin-block-start:var(--spacing-comp-02)}.message__caption{font-size:var(--mc-font-size-xxs);line-height:1.6em;position:relative}.message--visible{grid-template-rows:1fr}.message--copying{pointer-events:none}.message--copying span:not(.copied),.message--copying .message__caption{color:transparent;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.message--user .message__inner-wrapper{background-color:var(--gray-12)}.message--assistant-action .message__inner-wrapper{font-style:italic}.message--assistant-in-progress .message__inner-wrapper{font-style:italic;display:grid;grid-template-columns:1fr auto;gap:var(--spacing-comp-02)}.message--assistant-in-progress .message__inner-wrapper .message__caption{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1}.message--assistant-in-progress .message__inner-wrapper .animation-wrapper{flex:none}.message--assistant-chat .message__inner-wrapper,.message--assistant-action .message__inner-wrapper{background-color:var(--ai-bg-color)}.message--assistant-error .message__inner-wrapper{background-color:var(--ai-error-bg-color);border-color:var(--ai-error-border-color)}.message--copyable{cursor:pointer}.message--copyable:hover{filter:brightness(1.2)}.message:last-child{margin-block-end:0}:host(:first-child) .message__inner-wrapper{margin-block-end:0}.animation-wrapper{width:45px;display:flex;align-items:center;justify-content:center}.dot-pulse{position:relative;left:-9999px;width:5px;height:5px;border-radius:2.5px;background-color:var(--gray-03);color:var(--gray-03);box-shadow:9999px 0 0 -5px;animation:dot-pulse 1.5s infinite linear;animation-delay:0.25s}.dot-pulse::before,.dot-pulse::after{content:\"\";display:inline-block;position:absolute;top:0;width:5px;height:5px;border-radius:2.5px;background-color:var(--gray-03);color:var(--gray-03)}.dot-pulse::before{box-shadow:9984px 0 0 -5px;animation:dot-pulse-before 1.5s infinite linear;animation-delay:0s}.dot-pulse::after{box-shadow:10014px 0 0 -5px;animation:dot-pulse-after 1.5s infinite linear;animation-delay:0.5s}@keyframes dot-pulse-before{0%{box-shadow:9984px 0 0 -5px}30%{box-shadow:9984px 0 0 2px}60%,100%{box-shadow:9984px 0 0 -5px}}@keyframes dot-pulse{0%{box-shadow:9999px 0 0 -5px}30%{box-shadow:9999px 0 0 2px}60%,100%{box-shadow:9999px 0 0 -5px}}@keyframes dot-pulse-after{0%{box-shadow:10014px 0 0 -5px}30%{box-shadow:10014px 0 0 2px}60%,100%{box-shadow:10014px 0 0 -5px}}.copied{position:absolute;width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--color-on-background);display:flex;gap:var(--spacing-comp-01)}.hiChar{color:var(--gx-ide-hi-char-color);font-weight:600}";
|
|
8
7
|
|
|
9
8
|
const GxIdeAiMessage = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
10
9
|
constructor() {
|
|
11
10
|
super();
|
|
12
11
|
this.__registerHost();
|
|
13
12
|
this.__attachShadow();
|
|
13
|
+
/*
|
|
14
|
+
INDEX:
|
|
15
|
+
1.OWN PROPERTIES
|
|
16
|
+
2.REFERENCE TO ELEMENTS
|
|
17
|
+
3.STATE() VARIABLES
|
|
18
|
+
4.PUBLIC PROPERTY API | WATCH'S
|
|
19
|
+
5.EVENTS (EMIT)
|
|
20
|
+
6.COMPONENT LIFECYCLE METHODS
|
|
21
|
+
7.LISTENERS
|
|
22
|
+
8.PUBLIC METHODS API
|
|
23
|
+
9.LOCAL METHODS
|
|
24
|
+
10.RENDER() FUNCTION
|
|
25
|
+
*/
|
|
26
|
+
// 1.OWN PROPERTIES //
|
|
14
27
|
/* The message allows to be copied*/
|
|
15
28
|
this.copyable = false;
|
|
16
29
|
// 7.LISTENERS //
|
|
@@ -26,7 +39,7 @@ const GxIdeAiMessage = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
26
39
|
this.showCopiedMessage = true;
|
|
27
40
|
setTimeout(() => {
|
|
28
41
|
this.showCopiedMessage = false;
|
|
29
|
-
},
|
|
42
|
+
}, 1500);
|
|
30
43
|
};
|
|
31
44
|
this.visible = false;
|
|
32
45
|
this.showCopiedMessage = false;
|
|
@@ -34,11 +47,11 @@ const GxIdeAiMessage = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
34
47
|
this.messageType = undefined;
|
|
35
48
|
this.filterValue = undefined;
|
|
36
49
|
this.hidden = undefined;
|
|
50
|
+
this.translations = undefined;
|
|
37
51
|
}
|
|
38
52
|
// 5.EVENTS (EMIT) //
|
|
39
53
|
// 6.COMPONENT LIFECYCLE METHODS //
|
|
40
54
|
async componentWillLoad() {
|
|
41
|
-
this._componentLocale = await Locale.getComponentStrings(this.el);
|
|
42
55
|
this.evaluateMessageIsCopyable();
|
|
43
56
|
}
|
|
44
57
|
componentDidRender() {
|
|
@@ -65,7 +78,7 @@ const GxIdeAiMessage = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
65
78
|
"message__caption--in-progress": this.messageType === "assistant-in-progress"
|
|
66
79
|
} }, this.showCopiedMessage ? (h("span", { class: {
|
|
67
80
|
copied: true
|
|
68
|
-
} }, h("gxg-icon", { color: "mercury", type: "bpm/tasks" }), this.
|
|
81
|
+
} }, h("gxg-icon", { color: "mercury", type: "bpm/tasks" }), this.translations["copied"])) : null, hiChar(this.message, this.filterValue)), this.messageType === "assistant-in-progress" ? (h("div", { class: "animation-wrapper" }, h("div", { class: "dot-pulse" }))) : null))));
|
|
69
82
|
}
|
|
70
83
|
static get assetsDirs() { return ["gx-ide-assets/ai-message"]; }
|
|
71
84
|
get el() { return this; }
|
|
@@ -75,6 +88,7 @@ const GxIdeAiMessage = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
75
88
|
"messageType": [1, "message-type"],
|
|
76
89
|
"filterValue": [1, "filter-value"],
|
|
77
90
|
"hidden": [4],
|
|
91
|
+
"translations": [16],
|
|
78
92
|
"visible": [32],
|
|
79
93
|
"showCopiedMessage": [32]
|
|
80
94
|
}]);
|
|
@@ -10,7 +10,7 @@ import { d as defineCustomElement$4 } from './gxg-label2.js';
|
|
|
10
10
|
import { d as defineCustomElement$3 } from './title2.js';
|
|
11
11
|
import { d as defineCustomElement$2 } from './tooltip.js';
|
|
12
12
|
|
|
13
|
-
const aiAssistantCss = ".gxi-hidden{display:none !important}.gxi-full-height{height:100%}.gxi-overflow-auto{overflow:auto}.gxi-display-flex{display:flex}.align-start{display:flex;align-items:start}.align-center{display:flex;align-items:center}.align-end{display:flex;align-items:end}.overflow-auto{overflow:auto}.grid{display:grid;grid-row-gap:var(--gx-ide-grid-row-gap);grid-column-gap:var(--gx-ide-grid-column-gap);grid-template-rows:auto}ch-grid-cell{display:flex}ch-grid{overflow:auto;height:100%}ch-grid-column{z-index:99;border-bottom:1px solid var(--gray-01)}ch-grid-column:first-child{padding-inline-start:var(--gxg-container--padding) !important}ch-grid-column:last-child{padding-inline-end:var(--gxg-container--padding) !important}ch-grid-cell{--spacing-comp-02:var(--gxg-container--padding)}gxg-tabs{box-shadow:none}:host(.gx-ide-component){box-shadow:var(--box-shadow-01) !important;height:100% !important;display:flex !important;flex-direction:column !important}:host(:focus-within) gx-ide-top-bar::part(wrapper){background-color:var(--color-secondary-enabled)}.gx-ide-main-wrapper{color:var(--gx-ide-component-text-color);font-weight:var(--font-weight-regular);font-size:var(--font-size-lg);font-family:var(--font-family-primary);line-height:1.6em;height:100%;background-color:var(--gx-ide-component-background-color);display:flex;flex-direction:column;flex-grow:1;box-sizing:border-box}.gx-ide-main{flex-grow:1;overflow-y:auto;}.gx-ide-main::-webkit-scrollbar{width:6px;height:6px}.gx-ide-main::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gx-ide-main::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gx-ide-main::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}.gx-ide-main .gxg-scroll{display:block;overflow-y:auto;padding-inline-end:2px}.gx-ide-overflow{overflow-y:auto;}.gx-ide-overflow::-webkit-scrollbar{width:6px;height:6px}.gx-ide-overflow::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gx-ide-overflow::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gx-ide-overflow::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}.gx-ide-overflow .gxg-scroll{display:block;overflow-y:auto;padding-inline-end:2px}.tree-container{display:flex;height:100%;width:100%;box-sizing:border-box}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{cursor:initial}.gxg-scrollbar::-webkit-scrollbar{width:var(--gxg-scrollbar-width, 6px);height:var(--gxg-scrollbar-width, 6px)}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background, --gray-02);border-radius:var(--gxg-scrollbar-track-border-radius, 10px)}.gxg-scrollbar::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background, --gray-05);border-radius:var(--gxg-scrollbar-track-thumb-radius, 10px);border:var(--gxg-scrollbar-track-thumb-border);background-clip:padding-box}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background, --gray-04)}:host{--ai-dot-bg-color:var(--color-success-dark);display:block;height:100%;--assistant-bg-color:var(--gray-11);flex-basis:286px;flex-shrink:0;height:100%;overflow-y:auto}:host .header::before{transition:200ms background-color}:host(.assistant--success) .header__first-row::before{background-color:var(--ai-dot-bg-color)}:host(.assistant--error) .header__first-row::before{background-color:var(--color-error-dark)}.gx-ide-main-wrapper{padding:106px 10px 52px 10px;background-color:var(--gray-10);height:100%;display:grid;grid-template-rows:auto 1fr auto;gap:var(--spacing-comp-03)}.header{border-block-start:1px solid var(--gray-13);padding-block-start:var(--spacing-comp-03);display:flex;flex-direction:column}.header__actions-wrapper{display:flex;gap:var(--spacing-comp-02);margin-inline-start:auto}.header__first-row{display:flex;gap:var(--spacing-comp-02);align-items:center;justify-content:space-between}.header__first-row::before{content:\"\";width:var(--spacing-comp-02);height:var(--spacing-comp-02);display:block;border-radius:calc(var(--spacing-comp-02) / 2);background-color:var(--ai-dot-bg-color)}.header__filter{margin-block-start:var(--spacing-comp-02)}.header__second-row{transition:100ms grid-template-rows;display:grid;grid-template-rows:0fr}.header__second-row--visible{grid-template-rows:1fr}.header .filter-inner-wrapper{overflow:hidden}.messages-wrapper{position:relative;overflow:auto;cursor:initial}.messages-wrapper::-webkit-scrollbar{width:var(--gxg-scrollbar-width, 6px);height:var(--gxg-scrollbar-width, 6px)}.messages-wrapper::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background, --gray-02);border-radius:var(--gxg-scrollbar-track-border-radius, 10px)}.messages-wrapper::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background, --gray-05);border-radius:var(--gxg-scrollbar-track-thumb-radius, 10px);border:var(--gxg-scrollbar-track-thumb-border);background-clip:padding-box}.messages-wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background, --gray-04)}.messages{display:flex;flex-direction:column-reverse;list-style-type:none;padding:0;margin:0}.prompt{position:relative;margin-top:auto}.prompt__textarea::part(textarea-wrapper){border:none;background-color:var(--assistant-bg-color)}.prompt__shortcuts{position:absolute;display:flex;align-items:center;gap:var(--spacing-comp-01);padding-right:var(--spacing-comp-02);right:0;top:0;height:100%}.prompt__shortcut{padding:var(--spacing-comp-00) var(--spacing-comp-02);background-color:var(--gray-00);border-radius:var(--border-width-md)}";
|
|
13
|
+
const aiAssistantCss = ".gxi-hidden{display:none !important}.gxi-full-height{height:100%}.gxi-overflow-auto{overflow:auto}.gxi-display-flex{display:flex}.align-start{display:flex;align-items:start}.align-center{display:flex;align-items:center}.align-end{display:flex;align-items:end}.overflow-auto{overflow:auto}.grid{display:grid;grid-row-gap:var(--gx-ide-grid-row-gap);grid-column-gap:var(--gx-ide-grid-column-gap);grid-template-rows:auto}ch-grid-cell{display:flex}ch-grid{overflow:auto;height:100%}ch-grid-column{z-index:99;border-bottom:1px solid var(--gray-01)}ch-grid-column:first-child{padding-inline-start:var(--gxg-container--padding) !important}ch-grid-column:last-child{padding-inline-end:var(--gxg-container--padding) !important}ch-grid-cell{--spacing-comp-02:var(--gxg-container--padding)}gxg-tabs{box-shadow:none}:host(.gx-ide-component){box-shadow:var(--box-shadow-01) !important;height:100% !important;display:flex !important;flex-direction:column !important}:host(:focus-within) gx-ide-top-bar::part(wrapper){background-color:var(--color-secondary-enabled)}.gx-ide-main-wrapper{color:var(--gx-ide-component-text-color);font-weight:var(--font-weight-regular);font-size:var(--font-size-lg);font-family:var(--font-family-primary);line-height:1.6em;height:100%;background-color:var(--gx-ide-component-background-color);display:flex;flex-direction:column;flex-grow:1;box-sizing:border-box}.gx-ide-main{flex-grow:1;overflow-y:auto;}.gx-ide-main::-webkit-scrollbar{width:6px;height:6px}.gx-ide-main::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gx-ide-main::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gx-ide-main::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}.gx-ide-main .gxg-scroll{display:block;overflow-y:auto;padding-inline-end:2px}.gx-ide-overflow{overflow-y:auto;}.gx-ide-overflow::-webkit-scrollbar{width:6px;height:6px}.gx-ide-overflow::-webkit-scrollbar-track{background-color:var(--gray-02);border-radius:10px}.gx-ide-overflow::-webkit-scrollbar-thumb{background:var(--gray-05);border-radius:10px}.gx-ide-overflow::-webkit-scrollbar-thumb:hover{background:var(--gray-04);cursor:pointer}.gx-ide-overflow .gxg-scroll{display:block;overflow-y:auto;padding-inline-end:2px}.tree-container{display:flex;height:100%;width:100%;box-sizing:border-box}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-01--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-02{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-02--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-03{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em}.gxg-title-03--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;text-transform:uppercase;line-height:1.556em;color:var(--color-on-primary)}.gxg-title-04{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-title-04--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-md);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-title-05{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em}.gxg-title-05--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-sm);color:var(--color-on-background);text-align:start;line-height:1.556em;color:var(--color-on-primary)}.gxg-text{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em}.gxg-text--negative{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-on-primary)}.gxg-text--gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--gray-05)}.gxg-quote{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;font-style:italic}.gxg-quote--negative{color:var(--color-on-primary)}.gxg-link{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--color-primary-hover)}.gxg-link:active{color:var(--color-primary-active)}.gxg-link-gray{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04)}.gxg-link-gray:hover{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-primary);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--gray-04);color:var(--gray-06)}.gxg-alert-error{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-error-dark);display:inline-block}.gxg-alert-warning{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-warning-dark);display:inline-block}.gxg-alert-success{font-family:var(--font-family-primary);font-weight:var(--font-weight-regular);font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-xs);color:var(--color-on-background);text-align:start;line-height:1.455em;color:var(--color-success-dark);display:inline-block}.gxg-tab--disabled{color:var(--color-primary-disabled);pointer-events:none}.gxg-tab--disabled[disabled]{color:var(--color-primary-disabled);pointer-events:none}.gxg-label{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-label:hover{color:var(--color-primary-hover)}.gxg-label:focus{color:var(--color-primary-active)}.gxg-label:active{color:var(--color-primary-active)}.gxg-label[disabled]{color:var(--color-primary-disabled)}.gxg-label--negative{color:var(--color-on-primary)}.gxg-label--negative[disabled]{color:var(--color-on-disabled)}.gxg-button-styles{font-family:var(--font-family-primary) !important;font-weight:var(--font-weight-semibold);font-size:var(--font-size-sm) !important;letter-spacing:var(--letter-spacing-xs);color:var(--color-primary-enabled);text-align:center;line-height:1.455em}.gxg-scrollbar{cursor:initial}.gxg-scrollbar::-webkit-scrollbar{width:var(--gxg-scrollbar-width, 6px);height:var(--gxg-scrollbar-width, 6px)}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background, --gray-02);border-radius:var(--gxg-scrollbar-track-border-radius, 10px)}.gxg-scrollbar::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background, --gray-05);border-radius:var(--gxg-scrollbar-track-thumb-radius, 10px);border:var(--gxg-scrollbar-track-thumb-border);background-clip:padding-box}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background, --gray-04)}:host{--ai-dot-bg-color:var(--color-success-dark);display:block;height:100%;--assistant-bg-color:var(--gray-11);flex-basis:286px;flex-shrink:0;height:100%;overflow-y:auto}.gx-ide-main-wrapper{padding:106px 10px 52px 10px;background-color:var(--gray-10);height:100%;display:grid;grid-template-rows:auto 1fr auto;gap:var(--spacing-comp-03)}.header{border-block-start:1px solid var(--gray-13);padding-block-start:var(--spacing-comp-03);display:flex;flex-direction:column}.header__actions-wrapper{display:flex;gap:var(--spacing-comp-02);margin-inline-start:auto}.header__first-row{display:flex;gap:var(--spacing-comp-02);align-items:center;justify-content:space-between}.header__filter{margin-block-start:var(--spacing-comp-02)}.header__second-row{transition:100ms grid-template-rows;display:grid;grid-template-rows:0fr}.header__second-row--visible{grid-template-rows:1fr}.header .filter-inner-wrapper{overflow:hidden}.messages-wrapper{position:relative;overflow:auto;display:flex;flex-direction:column;cursor:initial}.messages-wrapper::-webkit-scrollbar{width:var(--gxg-scrollbar-width, 6px);height:var(--gxg-scrollbar-width, 6px)}.messages-wrapper::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background, --gray-02);border-radius:var(--gxg-scrollbar-track-border-radius, 10px)}.messages-wrapper::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background, --gray-05);border-radius:var(--gxg-scrollbar-track-thumb-radius, 10px);border:var(--gxg-scrollbar-track-thumb-border);background-clip:padding-box}.messages-wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background, --gray-04)}.messages{display:flex;flex-direction:column;list-style-type:none;padding:0;margin:0}.prompt{position:relative;margin-top:auto}.prompt__textarea::part(textarea-wrapper){border:none;background-color:var(--assistant-bg-color)}.prompt__shortcuts{position:absolute;display:flex;align-items:center;gap:var(--spacing-comp-01);padding-right:var(--spacing-comp-02);right:0;top:0;height:100%}.prompt__shortcut{padding:var(--spacing-comp-00) var(--spacing-comp-02);background-color:var(--gray-00);border-radius:var(--border-width-md)}";
|
|
14
14
|
|
|
15
15
|
const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
16
16
|
constructor() {
|
|
@@ -19,6 +19,7 @@ const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
19
19
|
this.__attachShadow();
|
|
20
20
|
this.componentDidRenderFirstTime = createEvent(this, "componentDidRenderFirstTime", 7);
|
|
21
21
|
this.renderedFirstTime = false;
|
|
22
|
+
this.setFocus = true;
|
|
22
23
|
// 9.LOCAL METHODS //
|
|
23
24
|
this.evaluateAiInProgress = () => {
|
|
24
25
|
var _a;
|
|
@@ -50,7 +51,7 @@ const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
50
51
|
};
|
|
51
52
|
this.renderMessage = (message, i) => {
|
|
52
53
|
if (message.text.length > 0) {
|
|
53
|
-
return (h("gx-ide-ai-message", { message: message.text, messageType: message.type, hidden: message.hidden, filterValue: this.filterValue, key: `${i.toString()}-${message.type}
|
|
54
|
+
return (h("gx-ide-ai-message", { message: message.text, messageType: message.type, hidden: message.hidden, filterValue: this.filterValue, key: `${i.toString()}-${message.type}`, translations: this._componentLocale.aiMessage }));
|
|
54
55
|
}
|
|
55
56
|
};
|
|
56
57
|
this.textAreaInputHandler = () => {
|
|
@@ -60,16 +61,22 @@ const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
60
61
|
this.filterValue = "";
|
|
61
62
|
};
|
|
62
63
|
this.promptEnterHandler = async (prompt) => {
|
|
63
|
-
/* First remove double spaces*/
|
|
64
|
+
/* First remove double spaces */
|
|
64
65
|
const promptTrimmed = prompt.detail.replace(/\s+/g, " ");
|
|
65
|
-
/* Update textarea value to get the proper height*/
|
|
66
|
+
/* Update textarea value to get the proper height */
|
|
66
67
|
this.textAreaEl.value = promptTrimmed;
|
|
67
68
|
setTimeout(() => {
|
|
68
|
-
/* Then save the actual height (setTimeOut required)*/
|
|
69
|
+
/* Then save the actual height (setTimeOut required) */
|
|
69
70
|
this.lastUserMessageHeight = this.textAreaEl.offsetHeight;
|
|
70
71
|
}, 0);
|
|
71
|
-
/* The clear the textarea*/
|
|
72
|
+
/* The clear the textarea */
|
|
72
73
|
this.textAreaEl.value = "";
|
|
74
|
+
/* Insert the user message */
|
|
75
|
+
this.addMessage({
|
|
76
|
+
type: "user",
|
|
77
|
+
text: promptTrimmed
|
|
78
|
+
});
|
|
79
|
+
/* Call the callback */
|
|
73
80
|
if (this.userMessageCallback && !this.aIInProgress) {
|
|
74
81
|
this.aIInProgress = true;
|
|
75
82
|
this.userMessageCallback(promptTrimmed).then(() => {
|
|
@@ -142,9 +149,16 @@ const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
142
149
|
this.filterEl.focus();
|
|
143
150
|
}
|
|
144
151
|
};
|
|
152
|
+
this.promptFocusHandler = () => {
|
|
153
|
+
this.promptHasFocus = true;
|
|
154
|
+
};
|
|
155
|
+
this.promptBlurHandler = () => {
|
|
156
|
+
this.promptHasFocus = false;
|
|
157
|
+
};
|
|
145
158
|
this.userHasTyped = false;
|
|
146
159
|
this.aIInProgress = false;
|
|
147
160
|
this.showFilter = false;
|
|
161
|
+
this.promptHasFocus = false;
|
|
148
162
|
this.filterValue = undefined;
|
|
149
163
|
this.messages = [];
|
|
150
164
|
this.promptMaxHeight = "128px";
|
|
@@ -154,6 +168,11 @@ const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
154
168
|
this.promptValue = undefined;
|
|
155
169
|
this.filter = true;
|
|
156
170
|
}
|
|
171
|
+
watchAIInProgressHandler(aiInProgress) {
|
|
172
|
+
if (!aiInProgress) {
|
|
173
|
+
this.setFocus = true;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
157
176
|
watchMessagesHandler() {
|
|
158
177
|
this.evaluateAiInProgress();
|
|
159
178
|
this.evaluateAiStatus();
|
|
@@ -174,6 +193,13 @@ const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
174
193
|
this.componentDidRenderFirstTime.emit(this._componentLocale.componentName);
|
|
175
194
|
this.renderedFirstTime = true;
|
|
176
195
|
}
|
|
196
|
+
if (this.setFocus) {
|
|
197
|
+
setTimeout(() => {
|
|
198
|
+
/* Doesn't seems to work without the setTimeout */
|
|
199
|
+
this.textAreaEl.focus();
|
|
200
|
+
this.setFocus = false;
|
|
201
|
+
}, 0);
|
|
202
|
+
}
|
|
177
203
|
}
|
|
178
204
|
// 7.LISTENERS //
|
|
179
205
|
// 8.PUBLIC METHODS API //
|
|
@@ -216,8 +242,9 @@ const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
216
242
|
prompt: true
|
|
217
243
|
} }, h("gxg-form-textarea", { ai: true, class: "prompt__textarea", value: this.promptValue, maxHeight: this.promptMaxHeight, placeholder: this.aIInProgress
|
|
218
244
|
? this._componentLocale.processingQueryPlaceholder
|
|
219
|
-
: this._componentLocale.promptPlaceholder, onInput: this.textAreaInputHandler, onEnter: this.promptEnterHandler, onArrowUpPressed: this.promptArrowUpHandler, disabled: this.aIInProgress, ref: el => (this.textAreaEl = el) }), !this.userHasTyped &&
|
|
245
|
+
: this._componentLocale.promptPlaceholder, onInput: this.textAreaInputHandler, onEnter: this.promptEnterHandler, onArrowUpPressed: this.promptArrowUpHandler, onBlur: this.promptBlurHandler, onFocus: this.promptFocusHandler, disabled: this.aIInProgress, ref: el => (this.textAreaEl = el) }), !this.userHasTyped &&
|
|
220
246
|
!this.aIInProgress &&
|
|
247
|
+
!this.promptHasFocus &&
|
|
221
248
|
((_b = this.focusShortcuts) === null || _b === void 0 ? void 0 : _b.length) > 0 ? (h("div", { class: {
|
|
222
249
|
prompt__shortcuts: true
|
|
223
250
|
} }, this.focusShortcuts.map((shortcut, i) => {
|
|
@@ -228,6 +255,7 @@ const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
228
255
|
static get assetsDirs() { return ["gx-ide-assets/ai-assistant"]; }
|
|
229
256
|
get el() { return this; }
|
|
230
257
|
static get watchers() { return {
|
|
258
|
+
"aIInProgress": ["watchAIInProgressHandler"],
|
|
231
259
|
"messages": ["watchMessagesHandler"]
|
|
232
260
|
}; }
|
|
233
261
|
static get style() { return aiAssistantCss; }
|
|
@@ -242,6 +270,7 @@ const GxIdeTemplate = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
242
270
|
"userHasTyped": [32],
|
|
243
271
|
"aIInProgress": [32],
|
|
244
272
|
"showFilter": [32],
|
|
273
|
+
"promptHasFocus": [32],
|
|
245
274
|
"filterValue": [32],
|
|
246
275
|
"clear": [64],
|
|
247
276
|
"addMessage": [64]
|
|
@@ -52,10 +52,19 @@ const setInitialComboValue = (options) => {
|
|
|
52
52
|
return options[0].value || options[0].id;
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
|
+
const escapeRegExp = (str) => {
|
|
56
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
57
|
+
};
|
|
55
58
|
const hiChar = function (text, filterValue) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
if (text && filterValue) {
|
|
60
|
+
/* this function highlights the character(s) that match(es) the filter value. (hi)light (Char)acters */
|
|
61
|
+
const escapedFilterValue = escapeRegExp(filterValue);
|
|
62
|
+
const re = new RegExp(escapedFilterValue, "gi");
|
|
63
|
+
return (h("span", { innerHTML: text.replace(re, '<span class="hiChar">$&</span>') }));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
return text;
|
|
67
|
+
}
|
|
59
68
|
};
|
|
60
69
|
const closeOnOutsideClickHandler = (eventInfo, ref) => {
|
|
61
70
|
if (!eventInfo.composedPath().includes(ref)) {
|