@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.
Files changed (56) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-ai-assistant.cjs.entry.js +35 -7
  3. package/dist/cjs/gx-ide-ai-message.cjs.entry.js +19 -6
  4. package/dist/cjs/gx-ide-kb-manager-import.cjs.entry.js +1 -1
  5. package/dist/cjs/gx-ide-new-environment.cjs.entry.js +1 -1
  6. package/dist/cjs/gx-ide-object-selector.cjs.entry.js +1 -1
  7. package/dist/cjs/gx-ide-team-dev-commit.cjs.entry.js +1 -1
  8. package/dist/cjs/gx-ide-team-dev-update.cjs.entry.js +1 -1
  9. package/dist/cjs/gx-ide-ww-images.cjs.entry.js +1 -1
  10. package/dist/cjs/{helpers-0a984c76.js → helpers-e25e57cb.js} +12 -3
  11. package/dist/cjs/loader.cjs.js +1 -1
  12. package/dist/collection/collection-manifest.json +2 -2
  13. package/dist/collection/common/helpers.js +12 -3
  14. package/dist/collection/components/ai-assistant/ai-assistant.css +3 -21
  15. package/dist/collection/components/ai-assistant/ai-assistant.js +37 -6
  16. package/dist/collection/components/ai-assistant/ai-message.css +9 -12
  17. package/dist/collection/components/ai-assistant/ai-message.js +36 -4
  18. package/dist/collection/components/ai-assistant/gx-ide-assets/ai-assistant/langs/ai-assistant.lang.en.json +3 -1
  19. package/dist/components/ai-message.js +19 -5
  20. package/dist/components/gx-ide-ai-assistant.js +36 -7
  21. package/dist/components/helpers2.js +12 -3
  22. package/dist/esm/genexus-ide-ui.js +1 -1
  23. package/dist/esm/gx-ide-ai-assistant.entry.js +35 -7
  24. package/dist/esm/gx-ide-ai-message.entry.js +19 -6
  25. package/dist/esm/gx-ide-kb-manager-import.entry.js +1 -1
  26. package/dist/esm/gx-ide-new-environment.entry.js +1 -1
  27. package/dist/esm/gx-ide-object-selector.entry.js +1 -1
  28. package/dist/esm/gx-ide-team-dev-commit.entry.js +1 -1
  29. package/dist/esm/gx-ide-team-dev-update.entry.js +1 -1
  30. package/dist/esm/gx-ide-ww-images.entry.js +1 -1
  31. package/dist/esm/{helpers-91494352.js → helpers-a11a19fb.js} +12 -3
  32. package/dist/esm/loader.js +1 -1
  33. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  34. package/dist/genexus-ide-ui/gx-ide-assets/ai-assistant/langs/ai-assistant.lang.en.json +3 -1
  35. package/dist/genexus-ide-ui/p-0f3c3a5e.entry.js +1 -0
  36. package/dist/genexus-ide-ui/{p-cb07fc99.entry.js → p-1b1fd856.entry.js} +1 -1
  37. package/dist/genexus-ide-ui/{p-440fe7b3.entry.js → p-1da59907.entry.js} +1 -1
  38. package/dist/genexus-ide-ui/{p-8c5919ec.entry.js → p-2b6a3afa.entry.js} +1 -1
  39. package/dist/genexus-ide-ui/{p-3d410e77.entry.js → p-33961b41.entry.js} +1 -1
  40. package/dist/genexus-ide-ui/p-4a8187c1.entry.js +1 -0
  41. package/dist/genexus-ide-ui/{p-4758d51e.js → p-64d3885f.js} +1 -1
  42. package/dist/genexus-ide-ui/{p-13085dd7.entry.js → p-72fad9dd.entry.js} +1 -1
  43. package/dist/genexus-ide-ui/{p-e13a299b.entry.js → p-a43dc4e7.entry.js} +1 -1
  44. package/dist/types/common/helpers.d.ts +1 -0
  45. package/dist/types/components/ai-assistant/ai-assistant.d.ts +8 -0
  46. package/dist/types/components/ai-assistant/ai-message.d.ts +7 -4
  47. package/dist/types/components.d.ts +9 -0
  48. package/package.json +1 -1
  49. package/dist/collection/components/ai-assistant/gx-ide-assets/ai-message/langs/ai-message.lang.en.json +0 -4
  50. package/dist/collection/components/ai-assistant/gx-ide-assets/ai-message/langs/ai-message.lang.ja.json +0 -3
  51. package/dist/collection/components/ai-assistant/gx-ide-assets/ai-message/langs/ai-message.lang.zh.json +0 -3
  52. package/dist/genexus-ide-ui/gx-ide-assets/ai-message/langs/ai-message.lang.en.json +0 -4
  53. package/dist/genexus-ide-ui/gx-ide-assets/ai-message/langs/ai-message.lang.ja.json +0 -3
  54. package/dist/genexus-ide-ui/gx-ide-assets/ai-message/langs/ai-message.lang.zh.json +0 -3
  55. package/dist/genexus-ide-ui/p-38dacc01.entry.js +0 -1
  56. 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
- /* this function highlights the character(s) that match(es) the filter value. (hi)light (Char)acters */
111
- const re = new RegExp(filterValue, "gi");
112
- return (h("span", { innerHTML: text.replace(re, '<span class="hiChar">$&</span>') }));
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-reverse;
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-message-success-color: var(--color-success-dark);
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-xs) var(--border-radius-sm) var(--border-radius-sm) var(--border-radius-xs);
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
- border-inline-start-width: var(--border-width-md);
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
- border-inline-start-color: var(--ai-message-success-color);
72
+ background-color: var(--ai-bg-color);
77
73
  }
78
74
  .message--assistant-error .message__inner-wrapper {
79
- border-inline-start-color: var(--ai-message-error-color);
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
- }, 1000);
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._componentLocale.copied)) : null, hiChar(this.message, this.filterValue)), this.messageType === "assistant-in-progress" ? (h("div", { class: "animation-wrapper" }, h("div", { class: "dot-pulse" }))) : null))));
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
  }
@@ -3,5 +3,7 @@
3
3
  "greeting": "✨ Greetings!, ¿How may I assist you?",
4
4
  "promptPlaceholder": "Ask anything...",
5
5
  "processingQueryPlaceholder": "Processing query...",
6
- "copied": "Copied"
6
+ "aiMessage": {
7
+ "copied": "Copied"
8
+ }
7
9
  }
@@ -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-message-success-color:var(--color-success-dark);--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-xs) var(--border-radius-sm) var(--border-radius-sm) var(--border-radius-xs);border:var(--border-width-sm) solid transparent;background-color:var(--assistant-bg-color);border-inline-start-width:var(--border-width-md);margin-block-end: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 .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--user .message__inner-wrapper{border-top-left-radius:var(--border-radius-sm);border-bottom-left-radius:var(--border-radius-sm)}.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);border-inline-start-color:var(--gray-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{border-inline-start-color:var(--ai-message-success-color)}.message--assistant-error .message__inner-wrapper{border-inline-start-color:var(--ai-message-error-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}";
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
- }, 1000);
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._componentLocale.copied)) : null, hiChar(this.message, this.filterValue)), this.messageType === "assistant-in-progress" ? (h("div", { class: "animation-wrapper" }, h("div", { class: "dot-pulse" }))) : null))));
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
- /* this function highlights the character(s) that match(es) the filter value. (hi)light (Char)acters */
57
- const re = new RegExp(filterValue, "gi");
58
- return (h("span", { innerHTML: text.replace(re, '<span class="hiChar">$&</span>') }));
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)) {