@genexus/genexus-ide-ui 1.0.38 → 1.0.40

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 (75) hide show
  1. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  2. package/dist/cjs/gx-ide-ai-assistant.cjs.entry.js +26 -16
  3. package/dist/cjs/gx-ide-ai-assistant.cjs.entry.js.map +1 -1
  4. package/dist/cjs/gx-ide-ai-message.cjs.entry.js +22 -11
  5. package/dist/cjs/gx-ide-ai-message.cjs.entry.js.map +1 -1
  6. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js +42 -3
  7. package/dist/cjs/gx-ide-current-user-info.cjs.entry.js.map +1 -1
  8. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js +226 -0
  9. package/dist/cjs/gx-ide-data-type-selector.cjs.entry.js.map +1 -0
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/collection/collection-manifest.json +1 -0
  12. package/dist/collection/components/ai-assistant/ai-assistant.js +26 -35
  13. package/dist/collection/components/ai-assistant/ai-assistant.js.map +1 -1
  14. package/dist/collection/components/ai-assistant/ai-message.css +13 -11
  15. package/dist/collection/components/ai-assistant/ai-message.js +41 -13
  16. package/dist/collection/components/ai-assistant/ai-message.js.map +1 -1
  17. package/dist/collection/components/current-user-info/current-user-info.css +7 -0
  18. package/dist/collection/components/current-user-info/current-user-info.js +4 -2
  19. package/dist/collection/components/current-user-info/current-user-info.js.map +1 -1
  20. package/dist/collection/components/current-user-info/helpers.js +38 -1
  21. package/dist/collection/components/current-user-info/helpers.js.map +1 -1
  22. package/dist/collection/components/data-type-selector/data-type-selector.css +24 -0
  23. package/dist/collection/components/data-type-selector/data-type-selector.js +275 -0
  24. package/dist/collection/components/data-type-selector/data-type-selector.js.map +1 -0
  25. package/dist/collection/components/data-type-selector/gx-ide-assets/data-type-selector/langs/data-type-selector.lang.en.json +13 -0
  26. package/dist/collection/components/data-type-selector/gx-ide-assets/data-type-selector/langs/data-type-selector.lang.ja.json +13 -0
  27. package/dist/collection/components/data-type-selector/gx-ide-assets/data-type-selector/langs/data-type-selector.lang.zh.json +13 -0
  28. package/dist/collection/components/data-type-selector/helpers.js +38 -0
  29. package/dist/collection/components/data-type-selector/helpers.js.map +1 -0
  30. package/dist/collection/components/kb-manager-import/kb-manager-import.js +1 -1
  31. package/dist/collection/components/team-dev/update/update.js +1 -1
  32. package/dist/collection/testing/locale.e2e.js +1 -0
  33. package/dist/collection/testing/locale.e2e.js.map +1 -1
  34. package/dist/components/ai-message.js +23 -11
  35. package/dist/components/ai-message.js.map +1 -1
  36. package/dist/components/gx-ide-ai-assistant.js +28 -18
  37. package/dist/components/gx-ide-ai-assistant.js.map +1 -1
  38. package/dist/components/gx-ide-current-user-info.js +42 -3
  39. package/dist/components/gx-ide-current-user-info.js.map +1 -1
  40. package/dist/components/gx-ide-data-type-selector.d.ts +11 -0
  41. package/dist/components/gx-ide-data-type-selector.js +258 -0
  42. package/dist/components/gx-ide-data-type-selector.js.map +1 -0
  43. package/dist/esm/genexus-ide-ui.js +1 -1
  44. package/dist/esm/gx-ide-ai-assistant.entry.js +27 -17
  45. package/dist/esm/gx-ide-ai-assistant.entry.js.map +1 -1
  46. package/dist/esm/gx-ide-ai-message.entry.js +22 -11
  47. package/dist/esm/gx-ide-ai-message.entry.js.map +1 -1
  48. package/dist/esm/gx-ide-current-user-info.entry.js +42 -3
  49. package/dist/esm/gx-ide-current-user-info.entry.js.map +1 -1
  50. package/dist/esm/gx-ide-data-type-selector.entry.js +222 -0
  51. package/dist/esm/gx-ide-data-type-selector.entry.js.map +1 -0
  52. package/dist/esm/loader.js +1 -1
  53. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  54. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  55. package/dist/genexus-ide-ui/gx-ide-assets/data-type-selector/langs/data-type-selector.lang.en.json +13 -0
  56. package/dist/genexus-ide-ui/gx-ide-assets/data-type-selector/langs/data-type-selector.lang.ja.json +13 -0
  57. package/dist/genexus-ide-ui/gx-ide-assets/data-type-selector/langs/data-type-selector.lang.zh.json +13 -0
  58. package/dist/genexus-ide-ui/{p-798eb91a.entry.js → p-6e993843.entry.js} +42 -22
  59. package/dist/genexus-ide-ui/p-6e993843.entry.js.map +1 -0
  60. package/dist/genexus-ide-ui/p-a3a43593.entry.js +255 -0
  61. package/dist/genexus-ide-ui/p-a3a43593.entry.js.map +1 -0
  62. package/dist/genexus-ide-ui/{p-dd890eed.entry.js → p-c2ec8185.entry.js} +85 -46
  63. package/dist/genexus-ide-ui/p-c2ec8185.entry.js.map +1 -0
  64. package/dist/genexus-ide-ui/{p-a7dcfedd.entry.js → p-fdd9de33.entry.js} +62 -54
  65. package/dist/genexus-ide-ui/p-fdd9de33.entry.js.map +1 -0
  66. package/dist/types/components/ai-assistant/ai-assistant.d.ts +1 -6
  67. package/dist/types/components/ai-assistant/ai-message.d.ts +5 -0
  68. package/dist/types/components/current-user-info/helpers.d.ts +24 -1
  69. package/dist/types/components/data-type-selector/data-type-selector.d.ts +46 -0
  70. package/dist/types/components/data-type-selector/helpers.d.ts +4 -0
  71. package/dist/types/components.d.ts +47 -19
  72. package/package.json +2 -1
  73. package/dist/genexus-ide-ui/p-798eb91a.entry.js.map +0 -1
  74. package/dist/genexus-ide-ui/p-a7dcfedd.entry.js.map +0 -1
  75. package/dist/genexus-ide-ui/p-dd890eed.entry.js.map +0 -1
@@ -1,20 +1,25 @@
1
- import { r as e, c as t, h as r, H as a, g as o } from "./p-49712340.js";
1
+ import { r as e, h as t, H as r, g as a } from "./p-49712340.js";
2
2
 
3
- import { L as i } from "./p-311eedf3.js";
3
+ import { L as o } from "./p-311eedf3.js";
4
4
 
5
- const s = ":root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-01--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-02{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-02--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--color-on-primary)}.gxg-title-03{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-03--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-04{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-04--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-05{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-05--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable)}.gxg-text--negative{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text--gray{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--dimmed)}.gxg-quote{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);font-style:italic}.gxg-quote--negative{color:var(--ds-base-font-color--negative)}.gxg-link{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--ds-base-font-color--link-hover)}.gxg-link:active{color:var(--ds-base-font-color--link-active)}.gxg-link-gray{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed)}.gxg-link-gray:hover{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed);filter:brightness(1.4)}.gxg-alert-error{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--error);display:inline-block}.gxg-alert-warning{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--warning);display:inline-block}.gxg-alert-success{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--success);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(--ds-base-font-family-primary);font-weight:var(--gxg-label-font-weight);font-size:var(--gxg-label-font-size);color:var(--gxg-label-color);text-align:center;line-height:1.455em;display:flex;align-items:center}.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-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gxg-scrollbar::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}:host{display:grid;block-size:100%}.card-regular{background-color:var(--mer-surface__elevation--01);border:var(--mer-border__width--sm) solid var(--mer-border-color__on-elevation--01);border-radius:var(--mer-border__radius--md);padding:var(--mer-spacing--md) var(--mer-spacing--md);display:grid}.card-small{background-color:var(--mer-surface__elevation--02);border-radius:var(--mer-border__radius--sm);padding:var(--mer-spacing--sm) var(--mer-spacing--sm)}.card-small--actionable:hover{background-color:var(--mer-color__neutral-gray--600)}.card-small--actionable:active{background-color:var(--mer-color__neutral-gray--650)}.card-small:focus-visible{outline:var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color);outline-offset:var(--focus__outline-offset)}.empty-state{block-size:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:var(--mer-spacing--sm);text-align:center}.empty-state__title,.empty-state__button,.empty-state__link{max-inline-size:300px}.opacity-0{opacity:0}.opacity-1{opacity:1}.display-contents{display:contents}.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}.justify-start{display:flex;justify-content:start}.justify-center{display:flex;justify-content:center}.justify-end{display:flex;justify-content:end}.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(--mer-color__neutral-gray--800)}ch-grid-column:first-child{padding-inline-start:var(--gx-ide-container__padding) !important}ch-grid-column:last-child{padding-inline-end:var(--gx-ide-container__padding) !important}ch-grid-cell{--mer-spacing--xs:var(--gx-ide-container__padding)}.layout{display:grid;gap:var(--mer-spacing--lg);box-sizing:border-box}.layout--two-cols{grid-template-columns:1fr 1fr}.layout--space-above{padding-block-start:var(--mer-spacing--lg)}gxg-tabs{box-shadow:none}:host(.gx-ide-component){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(--mer-font__weight--regular);font-size:var(--mer-font__size--xs);font-family:var(--mer-font-family--primary);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:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gx-ide-main::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gx-ide-main::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gx-ide-main::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gx-ide-main::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}.gx-ide-overflow{overflow-y:auto;}.gx-ide-overflow::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gx-ide-overflow::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gx-ide-overflow::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gx-ide-overflow::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gx-ide-overflow::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}.tree-view-primary{font-size:var(--mer-font__size--2xs)}p{margin:0;font-size:var(--mer-font__size--xxs)}.buttons-container{display:flex;gap:var(--mer-spacing--xs)}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-01--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-02{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-02--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--color-on-primary)}.gxg-title-03{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-03--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-04{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-04--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-05{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-05--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable)}.gxg-text--negative{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text--gray{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--dimmed)}.gxg-quote{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);font-style:italic}.gxg-quote--negative{color:var(--ds-base-font-color--negative)}.gxg-link{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--ds-base-font-color--link-hover)}.gxg-link:active{color:var(--ds-base-font-color--link-active)}.gxg-link-gray{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed)}.gxg-link-gray:hover{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed);filter:brightness(1.4)}.gxg-alert-error{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--error);display:inline-block}.gxg-alert-warning{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--warning);display:inline-block}.gxg-alert-success{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--success);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(--ds-base-font-family-primary);font-weight:var(--gxg-label-font-weight);font-size:var(--gxg-label-font-size);color:var(--gxg-label-color);text-align:center;line-height:1.455em;display:flex;align-items:center}.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-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gxg-scrollbar::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}:host{font-family:var(--mer-font-family--primary);display:block;height:100%;flex-basis:286px;flex-shrink:0;height:100%;overflow-y:auto}.gx-ide-main-wrapper{padding:0 10px 52px 10px;background-color:var(--mer-surface);height:100%;display:grid;grid-template-rows:auto 1fr auto;gap:var(--mer-spacing--sm)}.header{padding-block-start:var(--mer-spacing--sm);display:flex;flex-direction:column}.header__actions-wrapper{display:flex;gap:var(--ai-assistant-header-actions-gap);margin-inline-start:auto}.header__first-row{display:flex;gap:var(--mer-spacing--xs);align-items:center;justify-content:space-between}.header__filter{margin-block-start:var(--mer-spacing--xs)}.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;scroll-behavior:smooth;}.messages-wrapper::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.messages-wrapper::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.messages-wrapper::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.messages-wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.messages-wrapper::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}.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}.prompt__textarea::part(textarea){border:none;background-color:var(--mer-color__neutral-gray--800)}.prompt__shortcuts{position:absolute;display:flex;align-items:center;gap:var(--mer-spacing--2xs);padding-inline-end:var(--mer-spacing--xs);right:0;top:0;height:100%}.prompt__shortcut{color:var(--mer-color__neutral-gray--400);font-size:var(--mer-font__size--2xs);padding:var(--mer-spacing--3xs) var(--mer-spacing--xs);background-color:var(--mer-color__neutral-gray--700);border-radius:var(--mer-border__radius--xs)}";
5
+ const i = ":root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-01--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-02{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-02--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--color-on-primary)}.gxg-title-03{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-03--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-04{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-04--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-05{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-05--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable)}.gxg-text--negative{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text--gray{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--dimmed)}.gxg-quote{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);font-style:italic}.gxg-quote--negative{color:var(--ds-base-font-color--negative)}.gxg-link{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--ds-base-font-color--link-hover)}.gxg-link:active{color:var(--ds-base-font-color--link-active)}.gxg-link-gray{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed)}.gxg-link-gray:hover{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed);filter:brightness(1.4)}.gxg-alert-error{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--error);display:inline-block}.gxg-alert-warning{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--warning);display:inline-block}.gxg-alert-success{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--success);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(--ds-base-font-family-primary);font-weight:var(--gxg-label-font-weight);font-size:var(--gxg-label-font-size);color:var(--gxg-label-color);text-align:center;line-height:1.455em;display:flex;align-items:center}.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-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gxg-scrollbar::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}:host{display:grid;block-size:100%}.card-regular{background-color:var(--mer-surface__elevation--01);border:var(--mer-border__width--sm) solid var(--mer-border-color__on-elevation--01);border-radius:var(--mer-border__radius--md);padding:var(--mer-spacing--md) var(--mer-spacing--md);display:grid}.card-small{background-color:var(--mer-surface__elevation--02);border-radius:var(--mer-border__radius--sm);padding:var(--mer-spacing--sm) var(--mer-spacing--sm)}.card-small--actionable:hover{background-color:var(--mer-color__neutral-gray--600)}.card-small--actionable:active{background-color:var(--mer-color__neutral-gray--650)}.card-small:focus-visible{outline:var(--focus__outline-width) var(--focus__outline-style) var(--focus__outline-color);outline-offset:var(--focus__outline-offset)}.empty-state{block-size:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:var(--mer-spacing--sm);text-align:center}.empty-state__title,.empty-state__button,.empty-state__link{max-inline-size:300px}.opacity-0{opacity:0}.opacity-1{opacity:1}.display-contents{display:contents}.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}.justify-start{display:flex;justify-content:start}.justify-center{display:flex;justify-content:center}.justify-end{display:flex;justify-content:end}.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(--mer-color__neutral-gray--800)}ch-grid-column:first-child{padding-inline-start:var(--gx-ide-container__padding) !important}ch-grid-column:last-child{padding-inline-end:var(--gx-ide-container__padding) !important}ch-grid-cell{--mer-spacing--xs:var(--gx-ide-container__padding)}.layout{display:grid;gap:var(--mer-spacing--lg);box-sizing:border-box}.layout--two-cols{grid-template-columns:1fr 1fr}.layout--space-above{padding-block-start:var(--mer-spacing--lg)}gxg-tabs{box-shadow:none}:host(.gx-ide-component){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(--mer-font__weight--regular);font-size:var(--mer-font__size--xs);font-family:var(--mer-font-family--primary);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:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gx-ide-main::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gx-ide-main::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gx-ide-main::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gx-ide-main::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}.gx-ide-overflow{overflow-y:auto;}.gx-ide-overflow::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gx-ide-overflow::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gx-ide-overflow::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gx-ide-overflow::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gx-ide-overflow::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}.tree-view-primary{font-size:var(--mer-font__size--2xs)}p{margin:0;font-size:var(--mer-font__size--xxs)}.buttons-container{display:flex;gap:var(--mer-spacing--xs)}:root{--ui-animaton-speed:0.2s}.gxg-title-01{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-01--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-01-font-weight);font-size:var(--ds-title-01-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-02{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-02--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-02-font-weight);font-size:var(--ds-title-02-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--color-on-primary)}.gxg-title-03{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-03--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-03-font-weight);font-size:var(--ds-title-03-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;text-transform:uppercase;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-04{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-04--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-04-font-weight);font-size:var(--ds-title-04-font-size);letter-spacing:var(--ds-base-font-letter-spacing--comfortable);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-title-05{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable)}.gxg-title-05--negative{font-family:var(--ds-base-font-family-primary);font-weight:var(--ds-title-05-font-weight);font-size:var(--ds-title-05-font-size);letter-spacing:var(--ds-base-font-letter-spacing--regular);color:var(--ds-base-font-color);text-align:start;line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable)}.gxg-text--negative{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--negative)}.gxg-text--gray{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--dimmed)}.gxg-quote{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);font-style:italic}.gxg-quote--negative{color:var(--ds-base-font-color--negative)}.gxg-link{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block}.gxg-link:hover{color:var(--ds-base-font-color--link-hover)}.gxg-link:active{color:var(--ds-base-font-color--link-active)}.gxg-link-gray{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed)}.gxg-link-gray:hover{line-height:unset;font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--link);text-decoration:underline;cursor:pointer;display:inline-block;color:var(--ds-base-font-color--dimmed);filter:brightness(1.4)}.gxg-alert-error{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--error);display:inline-block}.gxg-alert-warning{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--warning);display:inline-block}.gxg-alert-success{font-family:var(--ds-base-font-family-primary);font-size:var(--ds-base-font-size);color:var(--ds-base-font-size-color);font-weight:var(--ds-base-font-size-weight);line-height:var(--ds-base-font-line-height--comfortable);color:var(--ds-base-font-color--success);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(--ds-base-font-family-primary);font-weight:var(--gxg-label-font-weight);font-size:var(--gxg-label-font-size);color:var(--gxg-label-color);text-align:center;line-height:1.455em;display:flex;align-items:center}.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-scrollbar{}.gxg-scrollbar::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.gxg-scrollbar::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.gxg-scrollbar::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.gxg-scrollbar::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}:host{font-family:var(--mer-font-family--primary);display:block;height:100%;flex-basis:286px;flex-shrink:0;height:100%;overflow-y:auto}.gx-ide-main-wrapper{padding:0 10px 52px 10px;background-color:var(--mer-surface);height:100%;display:grid;grid-template-rows:auto 1fr auto;gap:var(--mer-spacing--sm)}.header{padding-block-start:var(--mer-spacing--sm);display:flex;flex-direction:column}.header__actions-wrapper{display:flex;gap:var(--ai-assistant-header-actions-gap);margin-inline-start:auto}.header__first-row{display:flex;gap:var(--mer-spacing--xs);align-items:center;justify-content:space-between}.header__filter{margin-block-start:var(--mer-spacing--xs)}.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;scroll-behavior:smooth;}.messages-wrapper::-webkit-scrollbar{width:var(--gxg-scrollbar-width);height:var(--gxg-scrollbar-width)}.messages-wrapper::-webkit-scrollbar-track{background-color:var(--gxg-scrollbar-track-background);border-radius:var(--gxg-scrollbar-track-border-radius)}.messages-wrapper::-webkit-scrollbar-thumb{background-color:var(--gxg-scrollbar-track-thumb-background);border-radius:var(--gxg-scrollbar-track-thumb-radius)}.messages-wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--gxg-scrollbar-track-thumb-hover-background)}.messages-wrapper::-webkit-scrollbar-corner{background:rgba(0, 0, 0, 0)}.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}.prompt__textarea::part(textarea){border:none;background-color:var(--mer-color__neutral-gray--800)}.prompt__shortcuts{position:absolute;display:flex;align-items:center;gap:var(--mer-spacing--2xs);padding-inline-end:var(--mer-spacing--xs);right:0;top:0;height:100%}.prompt__shortcut{color:var(--mer-color__neutral-gray--400);font-size:var(--mer-font__size--2xs);padding:var(--mer-spacing--3xs) var(--mer-spacing--xs);background-color:var(--mer-color__neutral-gray--700);border-radius:var(--mer-border__radius--xs)}";
6
6
 
7
- /* OTHER LIBRARIES IMPORTS */ const l = [ "resets/box-sizing", "components/icon" ];
7
+ var s = undefined && undefined.__classPrivateFieldGet || function(e, t, r, a) {
8
+ if (r === "a" && !a) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof t === "function" ? e !== t || !a : !t.has(e)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return r === "m" ? a : r === "a" ? a.call(e) : a ? a.value : t.get(e);
11
+ };
12
+
13
+ var l, n;
8
14
 
9
- const n = class {
10
- constructor(a) {
11
- e(this, a);
12
- this.componentDidRenderFirstTime = t(this, "componentDidRenderFirstTime", 7);
13
- this.renderedFirstTime = false;
15
+ const g = [ "resets/box-sizing", "components/icon", "components/button" ];
16
+
17
+ const c = class {
18
+ constructor(r) {
19
+ e(this, r);
14
20
  this.setFocus = true;
15
21
  this.scrollToBottomFlag = true;
16
- // 9.LOCAL METHODS //
17
- this.evaluateAiInProgress = () => {
22
+ this.evaluateAiInProgress = () => {
18
23
  var e;
19
24
  if (((e = this.messages) === null || e === void 0 ? void 0 : e.length) > 0 && this.messages[this.messages.length - 1].type === "assistant-in-progress") {
20
25
  this.aIInProgress = true;
@@ -36,15 +41,19 @@ const n = class {
36
41
  this.assistantStatus = "success";
37
42
  }
38
43
  };
39
- this.renderMessage = (e, t) => {
44
+ this.renderMessage = (e, r) => {
40
45
  if (e.text.length > 0) {
41
- return r("gx-ide-ai-message", {
46
+ return t("gx-ide-ai-message", {
47
+ style: {
48
+ "--primary-color": "lightblue"
49
+ },
42
50
  message: e.text,
43
51
  messageType: e.type,
44
52
  hidden: e.hidden,
45
53
  filterValue: this.filterValue,
46
- key: `${t.toString()}-${e.type}`,
47
- translations: this._componentLocale.aiMessage
54
+ key: `${r.toString()}-${e.type}`,
55
+ translations: this._componentLocale.aiMessage,
56
+ aiAssistantHostRef: this.el
48
57
  });
49
58
  }
50
59
  };
@@ -145,6 +154,12 @@ const n = class {
145
154
  this.messagesWrapperEl.scrollTop = this.messagesWrapperEl.scrollHeight - this.messagesWrapperEl.clientHeight;
146
155
  }
147
156
  };
157
+ l.set(this, (() => {
158
+ this.el.removeAttribute("tabindex");
159
+ }));
160
+ n.set(this, (() => {
161
+ this.el.setAttribute("tabindex", "0");
162
+ }));
148
163
  this.userHasTyped = false;
149
164
  this.aIInProgress = false;
150
165
  this.showFilter = false;
@@ -168,21 +183,18 @@ const n = class {
168
183
  this.evaluateAiInProgress();
169
184
  this.evaluateAiStatus();
170
185
  }
171
- // 6.COMPONENT LIFECYCLE METHODS //
172
186
  async componentWillLoad() {
173
- this._componentLocale = await i.getComponentStrings(this.el);
187
+ this._componentLocale = await o.getComponentStrings(this.el);
174
188
  this.evaluateAiInProgress();
175
189
  this.evaluateAiStatus();
176
190
  this.attachShortcuts();
177
191
  }
178
192
  componentDidLoad() {
179
193
  this.textareaShadowPart = this.textAreaEl.shadowRoot.querySelector("textarea");
194
+ this.el.addEventListener("mousedown", s(this, l, "f"));
195
+ this.el.addEventListener("mouseup", s(this, n, "f"));
180
196
  }
181
197
  componentDidRender() {
182
- if (!this.renderedFirstTime) {
183
- this.componentDidRenderFirstTime.emit(this._componentLocale.componentName);
184
- this.renderedFirstTime = true;
185
- }
186
198
  if (this.setFocus) {
187
199
  setTimeout((() => {
188
200
  /* Doesn't seems to work without the setTimeout */
@@ -194,18 +206,15 @@ const n = class {
194
206
  this.scrollToBottom();
195
207
  }), 200);
196
208
  }
197
- // 7.LISTENERS //
198
209
  handleFocus(e) {
199
210
  if (this.textAreaEl) {
200
211
  e.preventDefault();
201
212
  this.textAreaEl.focus();
202
213
  }
203
214
  }
204
- // 8.PUBLIC METHODS API //
205
215
  /**
206
216
  * Clear the list of messages
207
- */
208
- async clear() {
217
+ */ async clear() {
209
218
  this.messages = [];
210
219
  }
211
220
  /**
@@ -222,64 +231,64 @@ const n = class {
222
231
  this.messages = t;
223
232
  }
224
233
  }
225
- // 10.RENDER() FUNCTION //
226
234
  render() {
227
- var e, t;
228
- return r(a, {
235
+ var e, a;
236
+ return t(r, {
229
237
  class: {
230
238
  [`assistant--${this.assistantStatus}`]: true,
231
239
  "assistant--in-progress": this.aIInProgress
232
- }
233
- }, r("ch-theme", {
234
- model: l
235
- }), r("div", {
240
+ },
241
+ tabindex: "0"
242
+ }, t("ch-theme", {
243
+ model: g
244
+ }), t("div", {
236
245
  class: "gx-ide-main-wrapper"
237
- }, r("header", {
246
+ }, t("slot", null), t("header", {
238
247
  class: "header"
239
- }, r("div", {
248
+ }, t("div", {
240
249
  class: "header__first-row"
241
- }, r("gxg-title", {
250
+ }, t("gxg-title", {
242
251
  type: "title-02"
243
- }, this._componentLocale.componentName), r("div", {
252
+ }, this._componentLocale.componentName), t("div", {
244
253
  class: "header__actions-wrapper"
245
- }, this.filter ? r("gxg-button", {
254
+ }, this.filter ? t("gxg-button", {
246
255
  class: "header__filter-button",
247
256
  type: "tertiary",
248
257
  icon: "menus/find",
249
258
  onClick: this.toggleFilterHandler,
250
259
  disabled: this.messages.length === 0
251
- }) : null, r("gxg-button", {
260
+ }) : null, t("gxg-button", {
252
261
  class: "header__clear-button",
253
262
  type: "tertiary",
254
263
  icon: "bpm/delete",
255
264
  onClick: this.clearMessages,
256
265
  disabled: this.messages.length === 0
257
- }))), this.filter ? r("div", {
266
+ }))), this.filter ? t("div", {
258
267
  class: {
259
268
  "header__second-row": true,
260
269
  "header__second-row--visible": this.showFilter
261
270
  }
262
- }, r("div", {
271
+ }, t("div", {
263
272
  class: "filter-inner-wrapper"
264
- }, r("gxg-form-text", {
273
+ }, t("gxg-form-text", {
265
274
  class: "header__filter",
266
275
  onInput: this.filterMessagesHandler,
267
276
  ref: e => this.filterEl = e
268
- }))) : null), r("div", {
277
+ }))) : null), t("div", {
269
278
  class: {
270
279
  "messages-wrapper": true,
271
280
  scrollable: true
272
281
  },
273
282
  ref: e => this.messagesWrapperEl = e
274
- }, ((e = this.messages) === null || e === void 0 ? void 0 : e.length) ? r("ol", {
283
+ }, ((e = this.messages) === null || e === void 0 ? void 0 : e.length) ? t("ol", {
275
284
  class: {
276
285
  messages: true
277
286
  }
278
- }, this.messages.map(((e, t) => this.renderMessage(e, t)))) : null), r("div", {
287
+ }, this.messages.map(((e, t) => this.renderMessage(e, t)))) : null), t("div", {
279
288
  class: {
280
289
  prompt: true
281
290
  }
282
- }, r("gxg-form-textarea", {
291
+ }, t("gxg-form-textarea", {
283
292
  ai: true,
284
293
  class: "prompt__textarea",
285
294
  value: this.promptValue,
@@ -292,22 +301,19 @@ const n = class {
292
301
  onFocus: this.promptFocusHandler,
293
302
  disabled: this.aIInProgress,
294
303
  ref: e => this.textAreaEl = e
295
- }), !this.userHasTyped && !this.aIInProgress && !this.promptHasFocus && ((t = this.focusShortcuts) === null || t === void 0 ? void 0 : t.length) > 0 ? r("div", {
304
+ }), !this.userHasTyped && !this.aIInProgress && !this.promptHasFocus && ((a = this.focusShortcuts) === null || a === void 0 ? void 0 : a.length) > 0 ? t("div", {
296
305
  class: {
297
306
  prompt__shortcuts: true
298
307
  }
299
- }, this.focusShortcuts.map(((e, t) => t <= 2 ? r("span", {
308
+ }, this.focusShortcuts.map(((e, r) => r <= 2 ? t("span", {
300
309
  class: "prompt__shortcut"
301
310
  }, e) : null))) : null)));
302
311
  }
303
- static get delegatesFocus() {
304
- return true;
305
- }
306
312
  static get assetsDirs() {
307
313
  return [ "gx-ide-assets/ai-assistant" ];
308
314
  }
309
315
  get el() {
310
- return o(this);
316
+ return a(this);
311
317
  }
312
318
  static get watchers() {
313
319
  return {
@@ -317,7 +323,9 @@ const n = class {
317
323
  }
318
324
  };
319
325
 
320
- n.style = s;
326
+ l = new WeakMap, n = new WeakMap;
327
+
328
+ c.style = i;
321
329
 
322
- export { n as gx_ide_ai_assistant };
323
- //# sourceMappingURL=p-a7dcfedd.entry.js.map
330
+ export { c as gx_ide_ai_assistant };
331
+ //# sourceMappingURL=p-fdd9de33.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["aiAssistantCss","CSS_BUNDLES","GxIdeTemplate","this","setFocus","scrollToBottomFlag","evaluateAiInProgress","_a","messages","length","type","aIInProgress","evaluateAiStatus","assistantStatus","renderMessage","message","i","text","h","style","messageType","hidden","filterValue","key","toString","translations","_componentLocale","aiMessage","aiAssistantHostRef","el","textAreaInputHandler","userHasTyped","showFilter","filterEl","value","promptEnterHandler","async","prompt","promptTrimmed","detail","replace","textAreaEl","setTimeout","lastUserMessageHeight","offsetHeight","addMessage","userMessageCallback","then","filterMessagesHandler","e","toLowerCase","filteredMessages","forEach","includes","clearMessages","focus","clearCallback","attachShortcuts","focusShortcuts","ctrlFocusIndex","findIndex","toLocaleLowerCase","shiftFocusIndex","cmdKeyIndex","keyFocus","find","document","addEventListener","ctrlKey","shiftKey","metaKey","promptArrowUpHandler","lastUserMessage","textareaShadowPart","height","toggleFilterHandler","promptFocusHandler","promptHasFocus","promptBlurHandler","scrollToBottom","messagesWrapperEl","scrollTo","scrollHeight","scrollTop","clientHeight","_GxIdeTemplate_mouseDownListener","set","removeAttribute","_GxIdeTemplate_mouseUpListener","setAttribute","watchAIInProgressHandler","aiInProgress","watchMessagesHandler","componentWillLoad","Locale","getComponentStrings","componentDidLoad","shadowRoot","querySelector","__classPrivateFieldGet","componentDidRender","handleFocus","event","preventDefault","clear","updateInProgressMessage","pop","push","render","Host","class","tabindex","model","componentName","filter","icon","onClick","disabled","onInput","ref","scrollable","map","ai","promptValue","maxHeight","promptMaxHeight","placeholder","processingQueryPlaceholder","promptPlaceholder","onEnter","onArrowUpPressed","onBlur","onFocus","_b","prompt__shortcuts","shortcut"],"sources":["src/components/ai-assistant/ai-assistant.scss?tag=gx-ide-ai-assistant&encapsulation=shadow","src/components/ai-assistant/ai-assistant.tsx"],"sourcesContent":["@import \"../../global/gx-ide-common.scss\";\n@import \"../../global/gx-ide-mixins.scss\";\n@import \"../../../node_modules/@genexus/gemini/dist/gemini/globals/mixins.scss\";\n\n:host {\n font-family: var(--mer-font-family--primary);\n display: block;\n height: 100%;\n flex-basis: 286px;\n flex-shrink: 0;\n height: 100%;\n overflow-y: auto;\n}\n.gx-ide-main-wrapper {\n padding: 0 10px 52px 10px;\n background-color: var(--mer-surface);\n height: 100%;\n display: grid;\n grid-template-rows: auto 1fr auto;\n gap: var(--mer-spacing--sm);\n}\n\n/*--- Header ---*/\n.header {\n padding-block-start: var(--mer-spacing--sm);\n display: flex;\n flex-direction: column;\n\n &__actions-wrapper {\n display: flex;\n gap: var(--ai-assistant-header-actions-gap);\n margin-inline-start: auto;\n }\n &__first-row {\n display: flex;\n gap: var(--mer-spacing--xs);\n align-items: center;\n justify-content: space-between;\n }\n &__filter {\n margin-block-start: var(--mer-spacing--xs);\n }\n &__second-row {\n transition: 100ms grid-template-rows;\n display: grid;\n grid-template-rows: 0fr;\n\n &--visible {\n grid-template-rows: 1fr;\n }\n }\n .filter-inner-wrapper {\n overflow: hidden;\n }\n}\n\n/*--- Messages ---*/\n.messages-wrapper {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n scroll-behavior: smooth;\n @include gxg-scrollbar();\n}\n.messages {\n display: flex;\n flex-direction: column;\n list-style-type: none;\n padding: 0;\n margin: 0;\n}\n\n/*--- Prompt ---*/\n.prompt {\n position: relative;\n margin-top: auto;\n\n &__textarea {\n &::part(textarea-wrapper) {\n border: none;\n }\n &::part(textarea) {\n border: none;\n background-color: var(--mer-color__neutral-gray--800);\n }\n }\n &__shortcuts {\n position: absolute;\n display: flex;\n align-items: center;\n gap: var(--mer-spacing--2xs);\n padding-inline-end: var(--mer-spacing--xs);\n right: 0;\n top: 0;\n height: 100%;\n }\n &__shortcut {\n color: var(--mer-color__neutral-gray--400);\n font-size: var(--mer-font__size--2xs);\n padding: var(--mer-spacing--3xs) var(--mer-spacing--xs);\n background-color: var(--mer-color__neutral-gray--700);\n border-radius: var(--mer-border__radius--xs);\n }\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n Method,\n State,\n Watch,\n Listen\n} from \"@stencil/core\";\n\nconst CSS_BUNDLES: MercuryBundles = [\n \"resets/box-sizing\",\n \"components/icon\",\n \"components/button\"\n];\n\nimport { Locale } from \"../../common/locale\";\n\nimport { MercuryBundles } from \"@genexus/mercury\";\n\n@Component({\n tag: \"gx-ide-ai-assistant\",\n styleUrl: \"ai-assistant.scss\",\n shadow: true,\n assetsDirs: [\"gx-ide-assets/ai-assistant\"]\n})\nexport class GxIdeTemplate {\n /**\n * The component hard-coded strings translations.\n */\n private _componentLocale: any;\n /* lastUserMessageHeight is used to set the appropriate height on the textarea, if user presses arrowUp (recover last message)*/\n private lastUserMessageHeight: number;\n private setFocus = true;\n private scrollToBottomFlag = true;\n\n @Element() el: HTMLGxIdeAiAssistantElement;\n private textAreaEl!: HTMLGxgFormTextareaElement;\n private textareaShadowPart: HTMLTextAreaElement;\n private filterEl: HTMLGxgFormTextElement;\n private messagesWrapperEl!: HTMLDivElement;\n\n /**\n * Flag used to hide the shortcuts\n */\n @State() userHasTyped = false;\n\n /**\n * This is true if the last message is of type 'assistant-in-progress'\n */\n @State() aIInProgress = false;\n @Watch(\"aIInProgress\")\n watchAIInProgressHandler(aiInProgress: boolean) {\n if (!aiInProgress) {\n this.setFocus = true;\n }\n }\n\n /**\n * This displays or hides the messages filter\n */\n @State() showFilter = false;\n\n /**\n * True if the prompt textbox has focus\n */\n @State() promptHasFocus = false;\n\n /**\n * The filter value\n */\n @State() filterValue: string;\n\n /**\n * List of messages displayed by the component\n */\n @Prop({ mutable: true }) messages: Message[] = [];\n @Watch(\"messages\")\n watchMessagesHandler() {\n this.evaluateAiInProgress();\n this.evaluateAiStatus();\n }\n\n /**\n * The prompt textarea max-height\n */\n @Prop() readonly promptMaxHeight = \"128px\";\n\n /**\n * A temporary property to illustrate the assistant status\n */\n @Prop({ mutable: true }) assistantStatus: AiStatus = \"indeterminate\";\n\n /**\n * List of keys that make up the shortcut to focus on the component's text input\n */\n @Prop() readonly focusShortcuts: string[];\n\n /**\n * List of keys that make up the shortcut to focus on the component's text input\n */\n @Prop() readonly userMessageCallback: UserMessageCallback;\n\n /**\n * Callback that must be invoked when the conversation is cleared, using the header button.\n */\n @Prop() readonly clearCallback: () => Promise<void>;\n\n /**\n * the prompt value\n */\n @Prop() readonly promptValue: string;\n\n /**\n * If tue, it will display a filter.\n */\n @Prop() readonly filter = true;\n\n async componentWillLoad() {\n this._componentLocale = await Locale.getComponentStrings(this.el);\n this.evaluateAiInProgress();\n this.evaluateAiStatus();\n this.attachShortcuts();\n }\n\n componentDidLoad() {\n this.textareaShadowPart =\n this.textAreaEl.shadowRoot.querySelector(\"textarea\");\n this.el.addEventListener(\"mousedown\", this.#mouseDownListener);\n this.el.addEventListener(\"mouseup\", this.#mouseUpListener);\n }\n\n componentDidRender() {\n if (this.setFocus) {\n setTimeout(() => {\n /* Doesn't seems to work without the setTimeout */\n this.textAreaEl.focus();\n this.setFocus = false;\n }, 50);\n }\n setTimeout(() => {\n this.scrollToBottom();\n }, 200);\n }\n\n @Listen(\"focus\", { capture: true })\n handleFocus(event: FocusEvent) {\n if (this.textAreaEl) {\n event.preventDefault();\n this.textAreaEl.focus();\n }\n }\n\n /**\n * Clear the list of messages\n */\n @Method()\n async clear() {\n this.messages = [];\n }\n\n /**\n * Add a message. This method will be used by the host to add messages from the assistant\n */\n @Method()\n async addMessage(message: Message) {\n if (message.text?.length > 0) {\n const messages = [...this.messages];\n const updateInProgressMessage =\n messages?.length > 0 &&\n messages[messages.length - 1].type === \"assistant-in-progress\";\n if (updateInProgressMessage) {\n messages.pop();\n }\n messages.push(message);\n this.messages = messages;\n }\n }\n\n private evaluateAiInProgress = () => {\n if (\n this.messages?.length > 0 &&\n this.messages[this.messages.length - 1].type === \"assistant-in-progress\"\n ) {\n this.aIInProgress = true;\n } else {\n this.aIInProgress = false;\n }\n };\n\n private evaluateAiStatus = () => {\n if (this.messages?.length === 0) {\n this.assistantStatus = \"indeterminate\";\n return;\n }\n if (\n this.messages[this.messages.length - 1].type ===\n \"assistant-in-progress\" ||\n this.messages[this.messages.length - 1].type === \"user\"\n ) {\n this.assistantStatus = \"indeterminate\";\n } else if (\n this.messages[this.messages.length - 1].type === \"assistant-error\"\n ) {\n this.assistantStatus = \"error\";\n } else {\n this.assistantStatus = \"success\";\n }\n };\n\n private renderMessage = (\n message: Message,\n i: number\n ): HTMLLIElement | void => {\n if (message.text.length > 0) {\n return (\n <gx-ide-ai-message\n style={{\n \"--primary-color\": \"lightblue\"\n }}\n message={message.text}\n messageType={message.type}\n hidden={message.hidden}\n filterValue={this.filterValue}\n key={`${i.toString()}-${message.type}`}\n translations={this._componentLocale.aiMessage}\n aiAssistantHostRef={this.el}\n ></gx-ide-ai-message>\n );\n }\n };\n\n private textAreaInputHandler = () => {\n this.userHasTyped = true;\n this.showFilter = false;\n this.filterEl.value = \"\";\n this.filterValue = \"\";\n this.scrollToBottomFlag = true;\n };\n\n private promptEnterHandler = async (prompt: CustomEvent<string>) => {\n /* First remove double spaces */\n const promptTrimmed = prompt.detail.replace(/\\s+/g, \" \");\n /* Update textarea value to get the proper height */\n this.textAreaEl.value = promptTrimmed;\n setTimeout(() => {\n /* Then save the actual height (setTimeOut required) */\n this.lastUserMessageHeight = this.textAreaEl.offsetHeight;\n }, 0);\n /* The clear the textarea */\n this.textAreaEl.value = \"\";\n /* Insert the user message */\n this.addMessage({\n type: \"user\",\n text: promptTrimmed\n });\n /* Call the callback */\n if (this.userMessageCallback && !this.aIInProgress) {\n this.aIInProgress = true;\n this.userMessageCallback(promptTrimmed).then(() => {\n this.aIInProgress = false;\n });\n }\n };\n\n private filterMessagesHandler = (e: CustomEvent<string>) => {\n this.scrollToBottomFlag = false;\n this.filterValue = e.detail.toLowerCase();\n const filteredMessages = [...this.messages];\n filteredMessages.forEach(message => {\n if (message.text.toLowerCase().includes(this.filterValue)) {\n message.hidden = false;\n } else {\n message.hidden = true;\n }\n });\n this.messages = filteredMessages;\n };\n\n private clearMessages = () => {\n this.messages = [];\n this.textAreaEl.focus();\n if (this.clearCallback) {\n this.clearCallback();\n }\n };\n\n private attachShortcuts = () => {\n if (this.focusShortcuts?.length > 0) {\n const ctrlFocusIndex = this.focusShortcuts.findIndex(\n key => key.toLocaleLowerCase() === \"ctrl\"\n );\n const shiftFocusIndex = this.focusShortcuts.findIndex(\n key => key.toLocaleLowerCase() === \"shift\"\n );\n const cmdKeyIndex = this.focusShortcuts.findIndex(\n key => key.toLocaleLowerCase() === \"cmd\"\n );\n const keyFocus = this.focusShortcuts\n .find(key => {\n return (\n key.toLocaleLowerCase() !== \"ctrl\" &&\n key.toLocaleLowerCase() !== \"shift\" &&\n key.toLocaleLowerCase() !== \"cmd\"\n );\n })\n .toLowerCase();\n document.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (e.key === keyFocus && ctrlFocusIndex !== -1 && e.ctrlKey) {\n this.textAreaEl.focus();\n this.userHasTyped = true;\n } else if (e.key === keyFocus && shiftFocusIndex !== -1 && e.shiftKey) {\n this.textAreaEl.focus();\n this.userHasTyped = true;\n } else if (e.key === keyFocus && cmdKeyIndex !== -1 && e.metaKey) {\n this.textAreaEl.focus();\n this.userHasTyped = true;\n }\n });\n }\n };\n\n private promptArrowUpHandler = () => {\n this.userHasTyped = true;\n const lastUserMessage = this.messages?.find(message => {\n return message.type === \"user\";\n });\n if (lastUserMessage) {\n if (this.lastUserMessageHeight) {\n this.textareaShadowPart.style.height = `${this.lastUserMessageHeight}px`;\n }\n this.textAreaEl.value = lastUserMessage.text;\n }\n };\n\n private toggleFilterHandler = () => {\n this.showFilter = !this.showFilter;\n if (this.showFilter) {\n this.filterEl.focus();\n }\n };\n\n private promptFocusHandler = () => {\n this.promptHasFocus = true;\n };\n\n private promptBlurHandler = () => {\n this.promptHasFocus = false;\n };\n\n private scrollToBottom = () => {\n if (this.scrollToBottomFlag) {\n this.messagesWrapperEl.scrollTo(0, this.messagesWrapperEl.scrollHeight);\n this.messagesWrapperEl.scrollTop =\n this.messagesWrapperEl.scrollHeight -\n this.messagesWrapperEl.clientHeight;\n }\n };\n\n #mouseDownListener = () => {\n this.el.removeAttribute(\"tabindex\");\n };\n\n #mouseUpListener = () => {\n this.el.setAttribute(\"tabindex\", \"0\");\n };\n\n render() {\n return (\n <Host\n class={{\n [`assistant--${this.assistantStatus}`]: true,\n \"assistant--in-progress\": this.aIInProgress\n }}\n tabindex=\"0\"\n >\n <ch-theme model={CSS_BUNDLES}></ch-theme>\n <div class=\"gx-ide-main-wrapper\">\n <slot></slot>\n <header class=\"header\">\n <div class=\"header__first-row\">\n <gxg-title type=\"title-02\">\n {this._componentLocale.componentName}\n </gxg-title>\n <div class=\"header__actions-wrapper\">\n {this.filter ? (\n <gxg-button\n class=\"header__filter-button\"\n type=\"tertiary\"\n icon=\"menus/find\"\n onClick={this.toggleFilterHandler}\n disabled={this.messages.length === 0}\n ></gxg-button>\n ) : null}\n\n <gxg-button\n class=\"header__clear-button\"\n type=\"tertiary\"\n icon=\"bpm/delete\"\n onClick={this.clearMessages}\n disabled={this.messages.length === 0}\n ></gxg-button>\n </div>\n </div>\n {this.filter ? (\n <div\n class={{\n \"header__second-row\": true,\n \"header__second-row--visible\": this.showFilter\n }}\n >\n <div class=\"filter-inner-wrapper\">\n <gxg-form-text\n class=\"header__filter\"\n onInput={this.filterMessagesHandler as any}\n ref={el => (this.filterEl = el as HTMLGxgFormTextElement)}\n ></gxg-form-text>\n </div>\n </div>\n ) : null}\n </header>\n\n <div\n class={{\n \"messages-wrapper\": true,\n \"scrollable\": true\n }}\n ref={el => (this.messagesWrapperEl = el as HTMLDivElement)}\n >\n {this.messages?.length ? (\n <ol class={{ messages: true }}>\n {this.messages.map((message, i) => {\n return this.renderMessage(message, i);\n })}\n </ol>\n ) : null}\n </div>\n\n <div\n class={{\n prompt: true\n }}\n >\n <gxg-form-textarea\n ai\n class=\"prompt__textarea\"\n value={this.promptValue}\n maxHeight={this.promptMaxHeight}\n placeholder={\n this.aIInProgress\n ? this._componentLocale.processingQueryPlaceholder\n : this._componentLocale.promptPlaceholder\n }\n onInput={this.textAreaInputHandler}\n onEnter={this.promptEnterHandler}\n onArrowUpPressed={this.promptArrowUpHandler}\n onBlur={this.promptBlurHandler}\n onFocus={this.promptFocusHandler}\n disabled={this.aIInProgress}\n ref={el => (this.textAreaEl = el as HTMLGxgFormTextareaElement)}\n ></gxg-form-textarea>\n {!this.userHasTyped &&\n !this.aIInProgress &&\n !this.promptHasFocus &&\n this.focusShortcuts?.length > 0 ? (\n <div\n class={{\n prompt__shortcuts: true\n }}\n >\n {this.focusShortcuts.map((shortcut, i) => {\n /* Up to three keys allowed*/\n return i <= 2 ? (\n <span class=\"prompt__shortcut\">{shortcut}</span>\n ) : null;\n })}\n </div>\n ) : null}\n </div>\n </div>\n </Host>\n );\n }\n}\n\nexport type AiStatus = \"indeterminate\" | \"success\" | \"error\";\n\nexport type Message = {\n type: MessageType;\n text: string;\n hidden?: boolean;\n filterValue?: string;\n};\n\nexport type MessageType =\n | \"user\"\n | \"assistant-chat\"\n | \"assistant-action\"\n | \"assistant-in-progress\"\n | \"assistant-error\";\n\nexport type UserMessageCallback = (text: string) => Promise<void>;\n"],"mappings":"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"}
@@ -1,10 +1,9 @@
1
- import { EventEmitter } from "../../stencil-public-runtime";
2
1
  export declare class GxIdeTemplate {
2
+ #private;
3
3
  /**
4
4
  * The component hard-coded strings translations.
5
5
  */
6
6
  private _componentLocale;
7
- private renderedFirstTime;
8
7
  private lastUserMessageHeight;
9
8
  private setFocus;
10
9
  private scrollToBottomFlag;
@@ -67,10 +66,6 @@ export declare class GxIdeTemplate {
67
66
  * If tue, it will display a filter.
68
67
  */
69
68
  readonly filter = true;
70
- /**
71
- * This event is emitted once just after the component is fully loaded and the first render() occurs
72
- */
73
- componentDidRenderFirstTime: EventEmitter<boolean>;
74
69
  componentWillLoad(): Promise<void>;
75
70
  componentDidLoad(): void;
76
71
  componentDidRender(): void;
@@ -1,5 +1,6 @@
1
1
  import { MessageType } from "./ai-assistant";
2
2
  export declare class GxIdeAiMessage {
3
+ #private;
3
4
  private _componentLocale;
4
5
  private copyable;
5
6
  el: HTMLGxIdeAiMessageElement;
@@ -11,6 +12,10 @@ export declare class GxIdeAiMessage {
11
12
  * This wil show the user a text, indicating that the message has been copied
12
13
  */
13
14
  showCopiedMessage: boolean;
15
+ /**
16
+ * A reference to the gx-ide-ai-assistant host element
17
+ */
18
+ readonly aiAssistantHostRef: HTMLGxIdeAiAssistantElement;
14
19
  /**
15
20
  * The actual message
16
21
  */
@@ -1 +1,24 @@
1
- export declare const getInitialsFromName: (name: string) => string;
1
+ /**
2
+ * Returns initials from the first two words of a name. Returns "X" for invalid input.
3
+ *
4
+ * @param name - The full name string.
5
+ * @returns Initials of the first two words, or "X" if invalid.
6
+ *
7
+ * Example:
8
+ * getInitialsFromName("John Doe") -> "JD"
9
+ * getInitialsFromName("Jane") -> "J"
10
+ * getInitialsFromName("") -> "X"
11
+ */
12
+ export declare const getInitialsFromName: (name: string) => string | null;
13
+ /**
14
+ * Limits the full name to the first two words. Returns null for invalid input.
15
+ *
16
+ * @param fullName - The full name string to be limited.
17
+ * @returns The first two words of the full name, or null if invalid.
18
+ *
19
+ * Example:
20
+ * limitFullName("John Doe Smith") -> "John Doe"
21
+ * limitFullName("Jane") -> "Jane"
22
+ * limitFullName("") -> null
23
+ */
24
+ export declare const limitFullName: (fullName: string) => string | null;
@@ -0,0 +1,46 @@
1
+ import { ActionListItemModel, ActionListModel } from "@genexus/chameleon-controls-library";
2
+ export declare class GxIdeKbManagerImport {
3
+ #private;
4
+ el: HTMLGxIdeDataTypeSelectorElement;
5
+ categoriesListBoxModel: ActionListItemModel[];
6
+ selectedCategory: string;
7
+ statusInfo: StatusInfo[];
8
+ recentlyUsedActionListModel: ActionListModel;
9
+ loading: boolean;
10
+ /**
11
+ * All possible types and its category
12
+ */
13
+ readonly categories: DataTypeCategoryData[];
14
+ categoriesChanged(newCategories: DataTypeCategoryData[]): void;
15
+ /**
16
+ * Callback invoked when user select an item type
17
+ */
18
+ readonly dataTypeSelectedCallback: DataTypeSelectedCallback;
19
+ /**
20
+ * All recently used types list
21
+ */
22
+ readonly recentlyUsed: DataTypeData[];
23
+ recentlyUsedChanged(newRecentlyUsed: DataTypeData[]): void;
24
+ componentWillLoad(): Promise<void>;
25
+ private selectedCategoryHandler;
26
+ render(): void;
27
+ }
28
+ type StatusInfo = {
29
+ [key: string]: {
30
+ display: boolean;
31
+ };
32
+ };
33
+ export type DataTypeCategoryData = {
34
+ name: string;
35
+ icon: string;
36
+ types: DataTypeData[];
37
+ };
38
+ export type DataTypeData = {
39
+ name: string;
40
+ icon: string;
41
+ };
42
+ export type DataTypeSelectedCallback = (data: {
43
+ name: string;
44
+ icon: string;
45
+ }) => Promise<void>;
46
+ export {};
@@ -0,0 +1,4 @@
1
+ import { DataTypeCategoryData, DataTypeData } from "./data-type-selector";
2
+ import { ActionListItemGroup, ActionListModel } from "@genexus/chameleon-controls-library/dist/types/components/action-list/types";
3
+ export declare const mapCategoryToListItemGroup: (category: DataTypeCategoryData) => ActionListItemGroup;
4
+ export declare const mapDataTypesToList: (dataTypes: DataTypeData[]) => ActionListModel;