@gitlab/ui 92.5.0 → 93.1.0

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 (32) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/components/base/broadcast_message/broadcast_message.js +1 -1
  3. package/dist/components/base/form/form_fields/form_fields.js +3 -2
  4. package/dist/components/base/toast/toast.js +1 -1
  5. package/dist/components/base/token/token.js +1 -1
  6. package/dist/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.js +2 -1
  7. package/dist/components/experimental/duo/chat/components/duo_chat_loader/duo_chat_loader.js +4 -3
  8. package/dist/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.js +8 -8
  9. package/dist/components/experimental/duo/chat/components/duo_chat_message_sources/duo_chat_message_sources.js +7 -4
  10. package/dist/components/experimental/duo/chat/duo_chat.js +13 -12
  11. package/dist/index.css +2 -2
  12. package/dist/index.css.map +1 -1
  13. package/dist/utils/set_utils.js +25 -0
  14. package/package.json +1 -1
  15. package/src/components/base/broadcast_message/broadcast_message.scss +1 -0
  16. package/src/components/base/broadcast_message/broadcast_message.vue +1 -1
  17. package/src/components/base/form/form_fields/form_fields.vue +3 -2
  18. package/src/components/base/new_dropdowns/dropdown.scss +4 -0
  19. package/src/components/base/toast/toast.js +1 -1
  20. package/src/components/base/toast/toast.scss +1 -0
  21. package/src/components/base/token/token.scss +1 -5
  22. package/src/components/base/token/token.vue +1 -6
  23. package/src/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.md +10 -0
  24. package/src/components/experimental/duo/chat/components/duo_chat_conversation/duo_chat_conversation.vue +2 -1
  25. package/src/components/experimental/duo/chat/components/duo_chat_loader/duo_chat_loader.vue +12 -3
  26. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.vue +20 -9
  27. package/src/components/experimental/duo/chat/components/duo_chat_message_sources/duo_chat_message_sources.vue +5 -4
  28. package/src/components/experimental/duo/chat/duo_chat.vue +43 -16
  29. package/src/scss/components.scss +0 -1
  30. package/src/utils/set_utils.js +24 -0
  31. package/translations.js +33 -0
  32. package/src/components/shared_components/close_button/close_button.scss +0 -21
package/CHANGELOG.md CHANGED
@@ -1,3 +1,32 @@
1
+ # [93.1.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v93.0.0...v93.1.0) (2024-09-18)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **GlDisclosureDropdown:** Add spacing after loading icon ([82eef91](https://gitlab.com/gitlab-org/gitlab-ui/commit/82eef91560f54092dfbc4fcd67e22324c59603fa))
7
+
8
+
9
+ ### Features
10
+
11
+ * **i18n:** Setup translation for Duo Chat component and all sub-components ([0b766ef](https://gitlab.com/gitlab-org/gitlab-ui/commit/0b766ef6ec405ca2c13f9d3ead8d546a16e99f5d))
12
+
13
+ # [93.0.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v92.5.0...v93.0.0) (2024-09-18)
14
+
15
+
16
+ ### Features
17
+
18
+ * **CloseButton:** Replace close btn class with util class ([0cf9a37](https://gitlab.com/gitlab-org/gitlab-ui/commit/0cf9a373c7caa1ff2d517f2eac5b7c1fbc711322))
19
+
20
+
21
+ ### BREAKING CHANGES
22
+
23
+ * **CloseButton:** Remove CSS Class .gl-close-btn-color-inherit
24
+
25
+ This CSS Class was applying mix-blend styles. This style was creating
26
+ an unwanted design on some background colors. Also, it makes it harder
27
+ to use with design tokens. This CSS class is now replaced by using
28
+ the Util CSS class !text-color-inherit.
29
+
1
30
  # [92.5.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v92.4.0...v92.5.0) (2024-09-17)
2
31
 
3
32
 
@@ -78,7 +78,7 @@ var script = {
78
78
  const __vue_script__ = script;
79
79
 
80
80
  /* template */
81
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-broadcast-message",class:(_vm.theme + " " + _vm.type)},[_c('div',{staticClass:"gl-broadcast-message-content"},[_c('div',{staticClass:"gl-broadcast-message-icon"},[_c('gl-icon',{attrs:{"name":_vm.iconName}})],1),_vm._v(" "),_c('div',{staticClass:"gl-broadcast-message-text"},[_c('h2',{staticClass:"gl-sr-only"},[_vm._v("Admin message")]),_vm._v(" "),_vm._t("default")],2)]),_vm._v(" "),(_vm.showDismissButton)?_c('close-button',{ref:"dismiss",staticClass:"gl-close-btn-color-inherit gl-broadcast-message-dismiss",attrs:{"label":_vm.dismissLabel},on:{"click":_vm.onDismiss}}):_vm._e()],1)};
81
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-broadcast-message",class:(_vm.theme + " " + _vm.type)},[_c('div',{staticClass:"gl-broadcast-message-content"},[_c('div',{staticClass:"gl-broadcast-message-icon"},[_c('gl-icon',{attrs:{"name":_vm.iconName}})],1),_vm._v(" "),_c('div',{staticClass:"gl-broadcast-message-text"},[_c('h2',{staticClass:"gl-sr-only"},[_vm._v("Admin message")]),_vm._v(" "),_vm._t("default")],2)]),_vm._v(" "),(_vm.showDismissButton)?_c('close-button',{ref:"dismiss",staticClass:"gl-broadcast-message-dismiss",attrs:{"label":_vm.dismissLabel},on:{"click":_vm.onDismiss}}):_vm._e()],1)};
82
82
  var __vue_staticRenderFns__ = [];
83
83
 
84
84
  /* style */
@@ -3,6 +3,7 @@ import mapValues from 'lodash/mapValues';
3
3
  import uniqueId from 'lodash/uniqueId';
4
4
  import GlFormGroup from '../form_group/form_group';
5
5
  import GlFormInput from '../form_input/form_input';
6
+ import { setObjectProperty } from '../../../../utils/set_utils';
6
7
  import GlFormFieldValidator from './form_field_validator';
7
8
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
8
9
 
@@ -138,7 +139,7 @@ var script = {
138
139
  },
139
140
  methods: {
140
141
  setFieldDirty(fieldName) {
141
- this.$set(this.fieldDirtyStatuses, fieldName, true);
142
+ this.fieldDirtyStatuses = setObjectProperty(this.fieldDirtyStatuses, fieldName, true);
142
143
  },
143
144
  setAllFieldsDirty() {
144
145
  this.fieldNames.forEach(fieldName => this.setFieldDirty(fieldName));
@@ -160,7 +161,7 @@ var script = {
160
161
  return val;
161
162
  },
162
163
  onFieldValidationUpdate(fieldName, invalidFeedback) {
163
- this.$set(this.fieldValidations, fieldName, invalidFeedback);
164
+ this.fieldValidations = setObjectProperty(this.fieldValidations, fieldName, invalidFeedback);
164
165
  },
165
166
  onFieldBlur(fieldName) {
166
167
  this.setFieldDirty(fieldName);
@@ -13,7 +13,7 @@ const DEFAULT_OPTIONS = {
13
13
  let toastsCount = 0;
14
14
  function renderTitle(h, toast, options) {
15
15
  const nodes = [h(CloseButton, {
16
- class: ['gl-toast-close-button', 'gl-close-btn-color-inherit'],
16
+ class: ['gl-toast-close-button'],
17
17
  on: {
18
18
  click: toast.hide
19
19
  }
@@ -59,7 +59,7 @@ var script = {
59
59
  const __vue_script__ = script;
60
60
 
61
61
  /* template */
62
- var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._g({class:['gl-token', _vm.variantClass, _vm.viewOnlyClass]},_vm.$listeners),[_c('span',{staticClass:"gl-token-content"},[_vm._t("default"),_vm._v(" "),(!_vm.viewOnly)?_c('close-button',{staticClass:"gl-token-close gl-close-btn-color-inherit",attrs:{"label":_vm.removeLabel},on:{"click":_vm.close}}):_vm._e()],2)])};
62
+ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',_vm._g({class:['gl-token', _vm.variantClass, _vm.viewOnlyClass]},_vm.$listeners),[_c('span',{staticClass:"gl-token-content"},[_vm._t("default"),_vm._v(" "),(!_vm.viewOnly)?_c('close-button',{staticClass:"gl-token-close",attrs:{"label":_vm.removeLabel},on:{"click":_vm.close}}):_vm._e()],2)])};
63
63
  var __vue_staticRenderFns__ = [];
64
64
 
65
65
  /* style */
@@ -1,8 +1,9 @@
1
1
  import GlDuoChatMessage from '../duo_chat_message/duo_chat_message';
2
+ import { translate } from '../../../../../../utils/i18n';
2
3
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
3
4
 
4
5
  const i18n = {
5
- CONVERSATION_NEW_CHAT: 'New chat'
6
+ CONVERSATION_NEW_CHAT: translate('GlDuoChatConversation.newChat', 'New chat')
6
7
  };
7
8
  const isMessage = item => Boolean(item) && (item === null || item === void 0 ? void 0 : item.role);
8
9
 
@@ -1,11 +1,12 @@
1
+ import { translate } from '../../../../../../utils/i18n';
1
2
  import GlSprintf from '../../../../../utilities/sprintf/sprintf';
2
3
  import { LOADING_TRANSITION_DURATION } from '../../constants';
3
4
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
4
5
 
5
6
  const i18n = {
6
- LOADER_LOADING_MESSAGE: '%{tool} is %{transition} an answer',
7
- LOADER_LOADING_TRANSITIONS: ['finding', 'working on', 'generating', 'producing'],
8
- GITLAB_DUO: 'GitLab Duo'
7
+ LOADER_LOADING_MESSAGE: translate('GlDuoChatLoader.loaderLoadingMessage', '%{tool} is %{transition} an answer'),
8
+ LOADER_LOADING_TRANSITIONS: [translate('GlDuoChatLoader.loaderLoadingTransitionsFinding', 'finding'), translate('GlDuoChatLoader.loaderLoadingTransitionsWorkingOn', 'working on'), translate('GlDuoChatLoader.loaderLoadingTransitionsGenerating', 'generating'), translate('GlDuoChatLoader.loaderLoadingTransitionsProducing', 'producing')],
9
+ GITLAB_DUO: translate('GlDuoChatLoader.gitlabDuo', 'GitLab Duo')
9
10
  };
10
11
  var script = {
11
12
  name: 'GlDuoChatLoader',
@@ -6,8 +6,8 @@ import GlDuoUserFeedback from '../../../user_feedback/user_feedback';
6
6
  import GlFormGroup from '../../../../../base/form/form_group/form_group';
7
7
  import GlFormTextarea from '../../../../../base/form/form_textarea/form_textarea';
8
8
  import { SafeHtmlDirective } from '../../../../../../directives/safe_html/safe_html';
9
- import { translatePlural, sprintf } from '../../../../../../utils/i18n';
10
9
  import { SELECTED_CONTEXT_ITEMS_DEFAULT_COLLAPSED, MESSAGE_MODEL_ROLES } from '../../constants';
10
+ import { translate, translatePlural, sprintf } from '../../../../../../utils/i18n';
11
11
  import DocumentationSources from '../duo_chat_message_sources/duo_chat_message_sources';
12
12
  import { renderDuoChatMarkdownPreview } from '../../markdown_renderer';
13
13
  import { CopyCodeElement } from './copy_code_element';
@@ -17,13 +17,13 @@ import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
17
17
 
18
18
  const i18n = {
19
19
  MODAL: {
20
- TITLE: 'Give feedback on GitLab Duo Chat',
21
- ALERT_TEXT: 'GitLab team members cannot view your conversation. Please be as descriptive as possible.',
22
- DID_WHAT: 'What were you doing?',
23
- INTERACTION: 'The situation in which you interacted with GitLab Duo Chat.',
24
- IMPROVE_WHAT: 'How could the response be improved?',
25
- BETTER_RESPONSE: 'How the response might better meet your needs.',
26
- MESSAGE_ERROR: 'Error sending the message'
20
+ TITLE: translate('GlDuoChatMessage.modalTitle', 'Give feedback on GitLab Duo Chat'),
21
+ ALERT_TEXT: translate('GlDuoChatMessage.modalAlertText', 'GitLab team members cannot view your conversation. Please be as descriptive as possible.'),
22
+ DID_WHAT: translate('GlDuoChatMessage.modalDidWhat', 'What were you doing?'),
23
+ INTERACTION: translate('GlDuoChatMessage.modalInteraction', 'The situation in which you interacted with GitLab Duo Chat.'),
24
+ IMPROVE_WHAT: translate('GlDuoChatMessage.modalImproveWhat', 'How could the response be improved?'),
25
+ BETTER_RESPONSE: translate('GlDuoChatMessage.modalBetterResponse', 'How the response might better meet your needs.'),
26
+ MESSAGE_ERROR: translate('GlDuoChatMessage.modalMessageError', 'Error sending the message')
27
27
  }
28
28
  };
29
29
  var script = {
@@ -1,11 +1,14 @@
1
+ import { translatePlural } from '../../../../../../utils/i18n';
1
2
  import GlIcon from '../../../../../base/icon/icon';
2
3
  import GlLink from '../../../../../base/link/link';
3
4
  import { DOCUMENTATION_SOURCE_TYPES } from '../../constants';
4
5
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
5
6
 
6
7
  const i18n = {
7
- MESSAGE_SOURCE: 'Source',
8
- MESSAGE_SOURCES: 'Sources'
8
+ MESSAGE_SOURCE: function () {
9
+ let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
10
+ return translatePlural('GlDuoChatMessageSources.messageSources', 'Source', 'Sources')(count);
11
+ }
9
12
  };
10
13
  var script = {
11
14
  name: 'GlDuoChatMessageSources',
@@ -24,7 +27,7 @@ var script = {
24
27
  },
25
28
  computed: {
26
29
  sourceLabel() {
27
- return this.sources.length > 1 ? i18n.MESSAGE_SOURCES : i18n.MESSAGE_SOURCES;
30
+ return i18n.MESSAGE_SOURCE(this.sources.length);
28
31
  }
29
32
  },
30
33
  methods: {
@@ -59,7 +62,7 @@ var script = {
59
62
  return `${date} / ${author}`;
60
63
  }
61
64
  }
62
- return i18n.MESSAGE_SOURCE;
65
+ return this.sourceLabel;
63
66
  }
64
67
  }
65
68
  };
@@ -11,6 +11,7 @@ import GlForm from '../../../base/form/form';
11
11
  import GlExperimentBadge from '../../experiment_badge/experiment_badge';
12
12
  import { badgeTypes, badgeTypeValidator } from '../../experiment_badge/constants';
13
13
  import { SafeHtmlDirective } from '../../../../directives/safe_html/safe_html';
14
+ import { translate } from '../../../../utils/i18n';
14
15
  import GlDuoChatLoader from './components/duo_chat_loader/duo_chat_loader';
15
16
  import GlDuoChatPredefinedPrompts from './components/duo_chat_predefined_prompts/duo_chat_predefined_prompts';
16
17
  import GlDuoChatConversation from './components/duo_chat_conversation/duo_chat_conversation';
@@ -19,18 +20,18 @@ import { INCLUDE_SLASH_COMMAND } from './mock_data';
19
20
  import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
20
21
 
21
22
  const i18n = {
22
- CHAT_DEFAULT_TITLE: 'GitLab Duo Chat',
23
- CHAT_CLOSE_LABEL: 'Close the Code Explanation',
24
- CHAT_LEGAL_GENERATED_BY_AI: 'Responses generated by AI',
25
- CHAT_EMPTY_STATE_TITLE: 'Ask a question',
26
- CHAT_EMPTY_STATE_DESC: 'GitLab Duo Chat is your AI-powered assistant.',
27
- CHAT_EMPTY_STATE_SECONDARY_DESC: 'Responses may be inaccurate. Verify before use.',
28
- CHAT_PROMPT_PLACEHOLDER_DEFAULT: 'GitLab Duo Chat',
29
- CHAT_PROMPT_PLACEHOLDER_WITH_COMMANDS: 'Type "/" for slash commands',
30
- CHAT_SUBMIT_LABEL: 'Send chat message.',
31
- CHAT_CANCEL_LABEL: 'Cancel',
32
- CHAT_LEGAL_DISCLAIMER: "May provide inappropriate responses not representative of GitLab's views. Do not input personal data.",
33
- CHAT_DEFAULT_PREDEFINED_PROMPTS: ['How do I change my password in GitLab?', 'How do I fork a project?', 'How do I clone a repository?', 'How do I create a template?']
23
+ CHAT_DEFAULT_TITLE: translate('GlDuoChat.chatDefaultTitle', 'GitLab Duo Chat'),
24
+ CHAT_CLOSE_LABEL: translate('GlDuoChat.chatCloseLabel', 'Close the Code Explanation'),
25
+ CHAT_LEGAL_GENERATED_BY_AI: translate('GlDuoChat.chatLegalGeneratedByAI', 'Responses generated by AI'),
26
+ CHAT_EMPTY_STATE_TITLE: translate('GlDuoChat.chatEmptyStateTitle', 'Ask a question'),
27
+ CHAT_EMPTY_STATE_DESC: translate('GlDuoChat.chatEmptyStateDesc', 'GitLab Duo Chat is your AI-powered assistant.'),
28
+ CHAT_EMPTY_STATE_SECONDARY_DESC: translate('GlDuoChat.chatEmptyStateSecondaryDesc', 'Responses may be inaccurate. Verify before use.'),
29
+ CHAT_PROMPT_PLACEHOLDER_DEFAULT: translate('GlDuoChat.chatPromptPlaceholderDefault', 'GitLab Duo Chat'),
30
+ CHAT_PROMPT_PLACEHOLDER_WITH_COMMANDS: translate('GlDuoChat.chatPromptPlaceholderWithCommands', 'Type "/" for slash commands'),
31
+ CHAT_SUBMIT_LABEL: translate('GlDuoChat.chatSubmitLabel', 'Send chat message.'),
32
+ CHAT_CANCEL_LABEL: translate('GlDuoChat.chatCancelLabel', 'Cancel'),
33
+ CHAT_LEGAL_DISCLAIMER: translate('GlDuoChat.chatLegalDisclaimer', "May provide inappropriate responses not representative of GitLab's views. Do not input personal data."),
34
+ CHAT_DEFAULT_PREDEFINED_PROMPTS: [translate('GlDuoChat.chatDefaultPredefinedPromptsChangePassword', 'How do I change my password in GitLab?'), translate('GlDuoChat.chatDefaultPredefinedPromptsForkProject', 'How do I fork a project?'), translate('GlDuoChat.chatDefaultPredefinedPromptsCloneRepository', 'How do I clone a repository?'), translate('GlDuoChat.chatDefaultPredefinedPromptsCreateTemplate', 'How do I create a template?')]
34
35
  };
35
36
  const isMessage = item => Boolean(item) && (item === null || item === void 0 ? void 0 : item.role);
36
37
  const isSlashCommand = command => Boolean(command) && (command === null || command === void 0 ? void 0 : command.name) && command.description;