@gitlab/ui 79.1.1 → 79.3.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 (36) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/components/base/new_dropdowns/base_dropdown/base_dropdown.js +9 -6
  3. package/dist/components/base/new_dropdowns/constants.js +2 -2
  4. package/dist/components/base/pagination/pagination.js +3 -3
  5. package/dist/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.js +17 -8
  6. package/dist/index.css +1 -1
  7. package/dist/index.css.map +1 -1
  8. package/dist/tokens/css/tokens.css +12 -4
  9. package/dist/tokens/css/tokens.dark.css +10 -4
  10. package/dist/tokens/js/tokens.dark.js +10 -4
  11. package/dist/tokens/js/tokens.js +12 -4
  12. package/dist/tokens/json/tokens.dark.grouped.json +9 -1
  13. package/dist/tokens/json/tokens.dark.json +182 -0
  14. package/dist/tokens/json/tokens.grouped.json +9 -1
  15. package/dist/tokens/json/tokens.json +182 -0
  16. package/dist/tokens/scss/_tokens.dark.scss +10 -4
  17. package/dist/tokens/scss/_tokens.scss +12 -4
  18. package/dist/tokens/tokens_story.js +7 -1
  19. package/dist/utils/utils.js +19 -1
  20. package/package.json +1 -1
  21. package/src/components/base/new_dropdowns/base_dropdown/base_dropdown.spec.js +31 -26
  22. package/src/components/base/new_dropdowns/base_dropdown/base_dropdown.vue +16 -6
  23. package/src/components/base/new_dropdowns/constants.js +1 -1
  24. package/src/components/base/pagination/pagination.vue +6 -0
  25. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.scss +15 -1
  26. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.spec.js +51 -45
  27. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.stories.js +8 -0
  28. package/src/components/experimental/duo/chat/components/duo_chat_message/duo_chat_message.vue +52 -28
  29. package/src/tokens/text.dark.tokens.json +44 -0
  30. package/src/tokens/text.dark.tokens.stories.js +6 -1
  31. package/src/tokens/text.tokens.json +56 -0
  32. package/src/tokens/text.tokens.stories.js +6 -1
  33. package/src/tokens/tokens_story.vue +12 -1
  34. package/src/utils/utils.js +18 -0
  35. package/src/utils/utils.spec.js +52 -0
  36. package/tailwind.defaults.js +10 -5
package/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ # [79.3.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v79.2.0...v79.3.0) (2024-04-25)
2
+
3
+
4
+ ### Features
5
+
6
+ * **DesignTokens:** add new text colors and deprecate pilot text colors ([818f109](https://gitlab.com/gitlab-org/gitlab-ui/commit/818f109b4151319a7d51025a8eae9bcf2a6e37e4))
7
+
8
+ # [79.2.0](https://gitlab.com/gitlab-org/gitlab-ui/compare/v79.1.1...v79.2.0) (2024-04-24)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **dropdowns:** ignore vertical boundaries ([3fec816](https://gitlab.com/gitlab-org/gitlab-ui/commit/3fec81641a0f625810a89a05129737767792df13))
14
+
15
+
16
+ ### Features
17
+
18
+ * **GlDuoChatMessage:** output errors ([f4c804a](https://gitlab.com/gitlab-org/gitlab-ui/commit/f4c804abc033a7b23823366d2b1fa1e065abf056))
19
+
1
20
  ## [79.1.1](https://gitlab.com/gitlab-org/gitlab-ui/compare/v79.1.0...v79.1.1) (2024-04-24)
2
21
 
3
22
 
@@ -1,8 +1,8 @@
1
1
  import uniqueId from 'lodash/uniqueId';
2
2
  import { offset, autoPlacement, shift, size, autoUpdate, computePosition } from '@floating-ui/dom';
3
3
  import { buttonCategoryOptions, dropdownVariantOptions, buttonSizeOptions, dropdownPlacements, dropdownAllowedAutoPlacements } from '../../../../utils/constants';
4
- import { POSITION_ABSOLUTE, POSITION_FIXED, GL_DROPDOWN_BOUNDARY_SELECTOR, GL_DROPDOWN_CONTENTS_CLASS, GL_DROPDOWN_BEFORE_CLOSE, GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, ENTER, SPACE, ARROW_DOWN, GL_DROPDOWN_FOCUS_CONTENT } from '../constants';
5
- import { logWarning, isElementFocusable, isElementTabbable } from '../../../../utils/utils';
4
+ import { POSITION_ABSOLUTE, POSITION_FIXED, GL_DROPDOWN_HORIZONTAL_BOUNDARY_SELECTOR, GL_DROPDOWN_CONTENTS_CLASS, GL_DROPDOWN_BEFORE_CLOSE, GL_DROPDOWN_SHOWN, GL_DROPDOWN_HIDDEN, ENTER, SPACE, ARROW_DOWN, GL_DROPDOWN_FOCUS_CONTENT } from '../constants';
5
+ import { logWarning, getHorizontalBoundingClientRect, isElementFocusable, isElementTabbable } from '../../../../utils/utils';
6
6
  import GlButton from '../../button/button';
7
7
  import GlIcon from '../../icon/icon';
8
8
  import { OutsideDirective } from '../../../../directives/outside/outside';
@@ -250,10 +250,13 @@ var script = {
250
250
  return {
251
251
  placement,
252
252
  strategy: this.positioningStrategy,
253
- middleware: [offset(this.offset), autoPlacement({
254
- alignment,
255
- boundary: this.$el.closest(GL_DROPDOWN_BOUNDARY_SELECTOR) || 'clippingAncestors',
256
- allowedPlacements: dropdownAllowedAutoPlacements[this.placement]
253
+ middleware: [offset(this.offset), autoPlacement(() => {
254
+ const autoHorizontalBoundary = getHorizontalBoundingClientRect(this.$el.closest(GL_DROPDOWN_HORIZONTAL_BOUNDARY_SELECTOR));
255
+ return {
256
+ alignment,
257
+ boundary: autoHorizontalBoundary || 'clippingAncestors',
258
+ allowedPlacements: dropdownAllowedAutoPlacements[this.placement]
259
+ };
257
260
  }), shift(), size({
258
261
  apply: _ref => {
259
262
  var _this$nonScrollableCo;
@@ -1,5 +1,5 @@
1
1
  // base dropdown events
2
- const GL_DROPDOWN_BOUNDARY_SELECTOR = 'main';
2
+ const GL_DROPDOWN_HORIZONTAL_BOUNDARY_SELECTOR = 'main';
3
3
  const GL_DROPDOWN_SHOWN = 'shown';
4
4
  const GL_DROPDOWN_HIDDEN = 'hidden';
5
5
  const GL_DROPDOWN_BEFORE_CLOSE = 'beforeClose';
@@ -19,4 +19,4 @@ const POSITION_ABSOLUTE = 'absolute';
19
19
  const POSITION_FIXED = 'fixed';
20
20
  const GL_DROPDOWN_CONTENTS_CLASS = 'gl-new-dropdown-contents';
21
21
 
22
- export { ARROW_DOWN, ARROW_UP, END, ENTER, GL_DROPDOWN_BEFORE_CLOSE, GL_DROPDOWN_BOUNDARY_SELECTOR, GL_DROPDOWN_CONTENTS_CLASS, GL_DROPDOWN_FOCUS_CONTENT, GL_DROPDOWN_HIDDEN, GL_DROPDOWN_SHOWN, HOME, POSITION_ABSOLUTE, POSITION_FIXED, SPACE };
22
+ export { ARROW_DOWN, ARROW_UP, END, ENTER, GL_DROPDOWN_BEFORE_CLOSE, GL_DROPDOWN_CONTENTS_CLASS, GL_DROPDOWN_FOCUS_CONTENT, GL_DROPDOWN_HIDDEN, GL_DROPDOWN_HORIZONTAL_BOUNDARY_SELECTOR, GL_DROPDOWN_SHOWN, HOME, POSITION_ABSOLUTE, POSITION_FIXED, SPACE };
@@ -358,13 +358,13 @@ const __vue_script__ = script;
358
358
  var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.isVisible)?_c('nav',{staticClass:"gl-pagination text-nowrap",attrs:{"aria-label":"Pagination"}},[_c('ul',{staticClass:"pagination",class:_vm.wrapperClasses},[_c('li',{staticClass:"page-item",class:{
359
359
  disabled: _vm.prevPageIsDisabled,
360
360
  'flex-fill': _vm.isFillAlign,
361
- },attrs:{"aria-hidden":_vm.prevPageIsDisabled}},[_c(_vm.prevPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-link page-link prev-page-item gl-display-flex",attrs:{"aria-label":_vm.prevPageAriaLabel,"href":_vm.prevPageHref},on:{"click":function($event){return _vm.handlePrevious($event, _vm.value - 1)}}},[_vm._t("previous",function(){return [_c('gl-icon',{attrs:{"name":"chevron-left"}}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.prevText))])]},null,{ page: _vm.value - 1, disabled: _vm.prevPageIsDisabled })],2)],1),_vm._v(" "),_vm._l((_vm.visibleItems),function(item){return _c('li',{key:item.key,staticClass:"page-item",class:{
361
+ },attrs:{"data-testid":"page-item","aria-hidden":_vm.prevPageIsDisabled}},[_c(_vm.prevPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-link page-link prev-page-item gl-display-flex",attrs:{"data-testid":"page-link","aria-label":_vm.prevPageAriaLabel,"href":_vm.prevPageHref},on:{"click":function($event){return _vm.handlePrevious($event, _vm.value - 1)}}},[_vm._t("previous",function(){return [_c('gl-icon',{attrs:{"name":"chevron-left"}}),_vm._v(" "),_c('span',[_vm._v(_vm._s(_vm.prevText))])]},null,{ page: _vm.value - 1, disabled: _vm.prevPageIsDisabled })],2)],1),_vm._v(" "),_vm._l((_vm.visibleItems),function(item){return _c('li',{key:item.key,staticClass:"page-item",class:{
362
362
  disabled: item.disabled,
363
363
  'flex-fill': _vm.isFillAlign,
364
- }},[_c(item.component,_vm._g(_vm._b({tag:"component",staticClass:"page-link",attrs:{"size":"md","aria-disabled":item.disabled}},'component',item.attrs,false),item.listeners),[_vm._t(item.slot,function(){return [_vm._v(_vm._s(item.content))]},null,item.slotData)],2)],1)}),_vm._v(" "),_c('li',{staticClass:"page-item",class:{
364
+ },attrs:{"data-testid":"page-item"}},[_c(item.component,_vm._g(_vm._b({tag:"component",staticClass:"page-link",attrs:{"data-testid":"page-link","size":"md","aria-disabled":item.disabled}},'component',item.attrs,false),item.listeners),[_vm._t(item.slot,function(){return [_vm._v(_vm._s(item.content))]},null,item.slotData)],2)],1)}),_vm._v(" "),_c('li',{staticClass:"page-item",class:{
365
365
  disabled: _vm.nextPageIsDisabled,
366
366
  'flex-fill': _vm.isFillAlign,
367
- },attrs:{"aria-hidden":_vm.nextPageIsDisabled}},[_c(_vm.nextPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-link page-link next-page-item gl-display-flex",attrs:{"aria-label":_vm.nextPageAriaLabel,"href":_vm.nextPageHref},on:{"click":function($event){return _vm.handleNext($event, _vm.value + 1)}}},[_vm._t("next",function(){return [_c('span',[_vm._v(_vm._s(_vm.nextText))]),_vm._v(" "),_c('gl-icon',{attrs:{"name":"chevron-right"}})]},null,{ page: _vm.value + 1, disabled: _vm.nextPageIsDisabled })],2)],1)],2)]):_vm._e()};
367
+ },attrs:{"data-testid":"page-item","aria-hidden":_vm.nextPageIsDisabled}},[_c(_vm.nextPageIsDisabled ? 'span' : 'a',{tag:"component",staticClass:"gl-link page-link next-page-item gl-display-flex",attrs:{"data-testid":"page-link","aria-label":_vm.nextPageAriaLabel,"href":_vm.nextPageHref},on:{"click":function($event){return _vm.handleNext($event, _vm.value + 1)}}},[_vm._t("next",function(){return [_c('span',[_vm._v(_vm._s(_vm.nextText))]),_vm._v(" "),_c('gl-icon',{attrs:{"name":"chevron-right"}})]},null,{ page: _vm.value + 1, disabled: _vm.nextPageIsDisabled })],2)],1)],2)]):_vm._e()};
368
368
  var __vue_staticRenderFns__ = [];
369
369
 
370
370
  /* style */
@@ -1,3 +1,5 @@
1
+ import GlIcon from '../../../../../base/icon/icon';
2
+ import { GlTooltipDirective } from '../../../../../../directives/tooltip';
1
3
  import GlDuoUserFeedback from '../../../user_feedback/user_feedback';
2
4
  import GlFormGroup from '../../../../../base/form/form_group/form_group';
3
5
  import GlFormTextarea from '../../../../../base/form/form_textarea/form_textarea';
@@ -16,11 +18,13 @@ const i18n = {
16
18
  DID_WHAT: 'What were you doing?',
17
19
  INTERACTION: 'The situation in which you interacted with GitLab Duo Chat.',
18
20
  IMPROVE_WHAT: 'How could the response be improved?',
19
- BETTER_RESPONSE: 'How the response might better meet your needs.'
21
+ BETTER_RESPONSE: 'How the response might better meet your needs.',
22
+ MESSAGE_ERROR: 'Error sending the message'
20
23
  }
21
24
  };
22
25
  var script = {
23
26
  name: 'GlDuoChatMessage',
27
+ i18n,
24
28
  safeHtmlConfigExtension: {
25
29
  ADD_TAGS: ['copy-code']
26
30
  },
@@ -28,10 +32,12 @@ var script = {
28
32
  DocumentationSources,
29
33
  GlDuoUserFeedback,
30
34
  GlFormGroup,
31
- GlFormTextarea
35
+ GlFormTextarea,
36
+ GlIcon
32
37
  },
33
38
  directives: {
34
- SafeHtml: SafeHtmlDirective
39
+ SafeHtml: SafeHtmlDirective,
40
+ GlTooltip: GlTooltipDirective
35
41
  },
36
42
  provide() {
37
43
  return {
@@ -92,7 +98,6 @@ var script = {
92
98
  return (_this$message$extras2 = this.message.extras) === null || _this$message$extras2 === void 0 ? void 0 : _this$message$extras2.hasFeedback;
93
99
  },
94
100
  defaultContent() {
95
- if (this.message.errors.length > 0) return this.renderMarkdown(this.message.errors.join('; '));
96
101
  if (this.message.contentHtml) {
97
102
  return this.message.contentHtml;
98
103
  }
@@ -103,6 +108,10 @@ var script = {
103
108
  return this.renderMarkdown(concatUntilEmpty(this.messageChunks));
104
109
  }
105
110
  return this.defaultContent || this.renderMarkdown(concatUntilEmpty(this.message.chunks));
111
+ },
112
+ error() {
113
+ var _this$message, _this$message$errors;
114
+ return Boolean((_this$message = this.message) === null || _this$message === void 0 ? void 0 : (_this$message$errors = _this$message.errors) === null || _this$message$errors === void 0 ? void 0 : _this$message$errors.length) && this.message.errors.join('; ');
106
115
  }
107
116
  },
108
117
  beforeCreate() {
@@ -142,7 +151,7 @@ var script = {
142
151
  }
143
152
  },
144
153
  hydrateContentWithGFM() {
145
- if (!this.isChunk) {
154
+ if (!this.isChunk && this.$refs.content) {
146
155
  this.$nextTick(this.renderGFM(this.$refs.content));
147
156
  }
148
157
  },
@@ -160,8 +169,7 @@ var script = {
160
169
  this.stopWatchingMessage();
161
170
  }
162
171
  }
163
- },
164
- i18n
172
+ }
165
173
  };
166
174
 
167
175
  /* script */
@@ -172,7 +180,8 @@ var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=
172
180
  'gl-ml-auto gl-bg-blue-100 gl-text-blue-900 gl-rounded-bottom-right-none': _vm.isUserMessage,
173
181
  'gl-rounded-bottom-left-none gl-text-gray-900 gl-bg-white gl-border-1 gl-border-solid gl-border-gray-50':
174
182
  _vm.isAssistantMessage,
175
- }},[_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.messageContent),expression:"messageContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content"}),_vm._v(" "),(_vm.isAssistantMessage)?[(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-display-flex gl-align-items-flex-end gl-mt-4 duo-chat-message-feedback"},[_c('gl-duo-user-feedback',{attrs:{"feedback-received":_vm.hasFeedback,"modal-title":_vm.$options.i18n.MODAL.TITLE,"modal-alert":_vm.$options.i18n.MODAL.ALERT_TEXT},on:{"feedback":_vm.logEvent},scopedSlots:_vm._u([{key:"feedback-extra-fields",fn:function(){return [_c('gl-form-group',{attrs:{"label":_vm.$options.i18n.MODAL.DID_WHAT,"optional":""}},[_c('gl-form-textarea',{attrs:{"placeholder":_vm.$options.i18n.MODAL.INTERACTION},model:{value:(_vm.didWhat),callback:function ($$v) {_vm.didWhat=$$v;},expression:"didWhat"}})],1),_vm._v(" "),_c('gl-form-group',{attrs:{"label":_vm.$options.i18n.MODAL.IMPROVE_WHAT,"optional":""}},[_c('gl-form-textarea',{attrs:{"placeholder":_vm.$options.i18n.MODAL.BETTER_RESPONSE},model:{value:(_vm.improveWhat),callback:function ($$v) {_vm.improveWhat=$$v;},expression:"improveWhat"}})],1)]},proxy:true}],null,false,419229417)})],1)]:_vm._e()],2)};
183
+ 'gl-bg-red-50 gl-border-none!': _vm.error,
184
+ }},[(_vm.error)?_c('gl-icon',{staticClass:"gl-text-red-600 gl-border gl-border-red-500 gl-rounded-full gl-mr-3 gl-flex-shrink-0 error-icon",attrs:{"aria-label":_vm.$options.i18n.MESSAGE_ERROR,"name":"status_warning_borderless","size":16,"data-testid":"error"}}):_vm._e(),_vm._v(" "),_c('div',{ref:"content-wrapper",class:{ 'has-error': _vm.error }},[(_vm.error)?_c('div',{ref:"error-message",staticClass:"error-message"},[_vm._v(_vm._s(_vm.error))]):_c('div',[_c('div',{directives:[{name:"safe-html",rawName:"v-safe-html:[$options.safeHtmlConfigExtension]",value:(_vm.messageContent),expression:"messageContent",arg:_vm.$options.safeHtmlConfigExtension}],ref:"content"}),_vm._v(" "),(_vm.isAssistantMessage)?[(_vm.sources)?_c('documentation-sources',{attrs:{"sources":_vm.sources}}):_vm._e(),_vm._v(" "),_c('div',{staticClass:"gl-display-flex gl-align-items-flex-end gl-mt-4 duo-chat-message-feedback"},[_c('gl-duo-user-feedback',{attrs:{"feedback-received":_vm.hasFeedback,"modal-title":_vm.$options.i18n.MODAL.TITLE,"modal-alert":_vm.$options.i18n.MODAL.ALERT_TEXT},on:{"feedback":_vm.logEvent},scopedSlots:_vm._u([{key:"feedback-extra-fields",fn:function(){return [_c('gl-form-group',{attrs:{"label":_vm.$options.i18n.MODAL.DID_WHAT,"optional":""}},[_c('gl-form-textarea',{attrs:{"placeholder":_vm.$options.i18n.MODAL.INTERACTION},model:{value:(_vm.didWhat),callback:function ($$v) {_vm.didWhat=$$v;},expression:"didWhat"}})],1),_vm._v(" "),_c('gl-form-group',{attrs:{"label":_vm.$options.i18n.MODAL.IMPROVE_WHAT,"optional":""}},[_c('gl-form-textarea',{attrs:{"placeholder":_vm.$options.i18n.MODAL.BETTER_RESPONSE},model:{value:(_vm.improveWhat),callback:function ($$v) {_vm.improveWhat=$$v;},expression:"improveWhat"}})],1)]},proxy:true}],null,false,419229417)})],1)]:_vm._e()],2)])],1)};
176
185
  var __vue_staticRenderFns__ = [];
177
186
 
178
187
  /* style */