dimsum-e2e-tests 3.70.0-next.7 → 3.70.0-next.71

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 (297) hide show
  1. package/CHANGELOG.md +1079 -721
  2. package/ds-accordion/DSAccordion.visual.spec.js +6 -0
  3. package/ds-accordion/DSAccordionCO.js +15 -3
  4. package/ds-accordion/QA_NOTES.md +105 -0
  5. package/ds-accordion/controlled/DSAccordion.controlled.func.spec.js +23 -0
  6. package/ds-accordion/header-structure/DSAccordion.header-structure.func.spec.js +65 -0
  7. package/ds-accordion/input-inside/DSAccordion.input-inside.func.spec.js +19 -0
  8. package/ds-apppicker/DSAppPickerCO.js +101 -3
  9. package/ds-apppicker/aria-pattern/DSAppPicker.aria-pattern.func.spec.js +100 -0
  10. package/ds-apppicker/basic/DSAppPicker.basic.keyboard-nav.func.spec.js +18 -7
  11. package/ds-apppicker/closeAfterSelection/DSAppPicker.closeAfterSelection.func.spec.js +1 -1
  12. package/ds-apppicker/custom-trigger-focus/DSAppPicker.custom-trigger-focus.func.spec.js +82 -0
  13. package/ds-apppicker/label-expansion-dismissal/DSAppPicker.label-expansion-dismissal.visual.spec.js +108 -0
  14. package/ds-apppicker/reflow/DSAppPicker.reflow.func.spec.js +32 -0
  15. package/ds-apppicker/reflow/DSAppPicker.reflow.visual.spec.js +5 -6
  16. package/ds-apppicker/truncation/DSAppPicker.truncation.visual.spec.js +5 -9
  17. package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
  18. package/ds-autocomplete/DSAutocompleteCO.js +36 -1
  19. package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.axe-core.func.spec.js +50 -0
  20. package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.func.spec.js +122 -0
  21. package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.visual.spec.js +48 -0
  22. package/ds-autocomplete/slots/DSAutocomplete.slots.func.spec.js +6 -1
  23. package/ds-banner/DSBanner.text-resize.visual.spec.js +5 -2
  24. package/ds-banner/DSBannerCO.js +4 -0
  25. package/ds-button-v3/DSButtonV3.aria-disabled-attribute.func.spec.js +33 -0
  26. package/ds-button-v3/DSButtonV3CO.js +10 -0
  27. package/ds-button-v3/theme-font/DSButtonV3.theme-font.func.spec.js +30 -0
  28. package/ds-card/DSCard.cardv2_v1.func.spec.js +54 -0
  29. package/ds-card/DSCard.cardv2_v1.visual.spec.js +29 -0
  30. package/ds-card/DSCardCO.js +50 -0
  31. package/ds-card/detail-slots/DSCard.detail-slots.axe-core.func.spec.js +29 -0
  32. package/ds-card/detail-slots/DSCard.detail-slots.func.spec.js +72 -0
  33. package/ds-card/detail-slots/DSCard.detail-slots.visual.spec.js +19 -0
  34. package/ds-card-v3/DSCardV3CO.js +93 -1
  35. package/ds-card-v3/accordion/DSCardV3.accordion-aria-structure.func.spec.js +41 -0
  36. package/ds-card-v3/accordion/DSCardV3.accordion-aria.keyboard.func.spec.js +49 -0
  37. package/ds-card-v3/accordion/DSCardV3.accordion.axe-core.func.spec.js +28 -0
  38. package/ds-card-v3/accordion/DSCardV3.accordion.visual.spec.js +4 -6
  39. package/ds-card-v3/action/DSCardV3.action.axe-core.func.spec.js +24 -0
  40. package/ds-card-v3/action/DSCardV3.action.func.spec.js +53 -0
  41. package/ds-card-v3/action/DSCardV3.action.visual.spec.js +28 -0
  42. package/ds-card-v3/drag-n-drop/DSCardV3.DnD.axe-core.func.spec.js +42 -0
  43. package/ds-card-v3/drag-n-drop/DSCardV3.DnD.func.spec.js +129 -0
  44. package/ds-card-v3/drag-n-drop/DSCardV3.DnD.reorder.func.spec.js +73 -0
  45. package/ds-card-v3/drag-n-drop/DSCardV3.DnD.visual.spec.js +5 -12
  46. package/ds-card-v3/global-attributes/DSCardV3.global-attributes.axe-core.func.spec.js +33 -0
  47. package/ds-card-v3/global-attributes/DSCardV3.global-attributes.visual.spec.js +20 -0
  48. package/ds-card-v3/multi-select/DSCardV3.multi-select.aria-grouping.func.spec.js +24 -0
  49. package/ds-card-v3/multi-select/DSCardV3.multiselect.axe-core.func.spec.js +47 -0
  50. package/ds-card-v3/multi-select/DSCardV3.multiselect.keyboard.func.spec.js +65 -0
  51. package/ds-card-v3/multi-select/DSCardV3.multiselect.visual.spec.js +17 -0
  52. package/ds-card-v3/multiple-action/DSCardV3.multiple-action.axe-core.func.spec.js +35 -0
  53. package/ds-card-v3/multiple-action/DSCardV3.multiple-action.func.spec.js +53 -0
  54. package/ds-card-v3/multiple-action/DSCardV3.multiple-action.visual.spec.js +18 -0
  55. package/ds-card-v3/multiple-control/DSCardV3.multi-control.axe-core.func.spec.js +34 -0
  56. package/ds-card-v3/multiple-control/DSCardV3.multi-control.func.spec.js +26 -0
  57. package/ds-card-v3/multiple-control/DSCardV3.multi-control.visual.spec.js +29 -0
  58. package/ds-card-v3/no-action/DSCardV3.no-action.axe-core.func.spec.js +22 -0
  59. package/ds-card-v3/no-action/DSCardV3.no-action.func.spec.js +23 -0
  60. package/ds-card-v3/no-action/DSCardV3.no-action.visual.spec.js +15 -0
  61. package/ds-card-v3/notification-badges/DSCardV3.notification-badges.axe-core.func.spec.js +33 -0
  62. package/ds-card-v3/notification-badges/DSCardV3.notification-badges.func.spec.js +19 -0
  63. package/ds-card-v3/notification-badges/DSCardV3.notification-badges.visual.spec.js +28 -0
  64. package/ds-card-v3/reflow/DSCardV3.reflow.axe-core.func.spec.js +28 -0
  65. package/ds-card-v3/reflow/DSCardV3.reflow.func.spec.js +36 -0
  66. package/ds-card-v3/reflow/DSCardV3.reflow.visual.spec.js +3 -2
  67. package/ds-card-v3/single-select/DSCardV3.single-select.aria-grouping.func.spec.js +24 -0
  68. package/ds-card-v3/single-select/DSCardV3.single-select.axe-core.func.spec.js +37 -0
  69. package/ds-card-v3/single-select/DSCardV3.single-select.visual.spec.js +1 -2
  70. package/ds-card-v3/slots/DSCardV3.slots.visual.spec.js +1 -2
  71. package/ds-card-v3/variant-accented/DSCardV3.variant-accented.axe-core.func.spec.js +45 -0
  72. package/ds-card-v3/variant-accented/DSCardV3.variant-accented.func.spec.js +28 -0
  73. package/ds-card-v3/variant-accented/DSCardV3.variant-accented.visual.spec.js +35 -0
  74. package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.axe-core.func.spec.js +35 -0
  75. package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.func.spec.js +53 -0
  76. package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.visual.spec.js +28 -0
  77. package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.axe-core.func.spec.js +22 -0
  78. package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.func.spec.js +61 -0
  79. package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.visual.spec.js +20 -0
  80. package/ds-card-v3/variant-disabled/DSCardV3.variantDisabled-non-interactive.func.spec.js +25 -0
  81. package/ds-chat/DSChat.axe-core.func.spec.js +2 -2
  82. package/ds-chat/DSChat.visual.spec.js +4 -4
  83. package/ds-chat/DSChatCO.js +18 -24
  84. package/ds-chat/bubbles/slots/DSChatBubble.slots.axe-core.func.spec.js +24 -0
  85. package/ds-chat/bubbles/slots/DSChatBubble.slots.func.spec.js +49 -0
  86. package/ds-chat/bubbles/slots/DSChatBubble.slots.visual.spec.js +25 -0
  87. package/ds-chat/card/slots/DSChatCard.slots.axe-core.func.spec.js +24 -0
  88. package/ds-chat/card/slots/DSChatCard.slots.func.spec.js +47 -0
  89. package/ds-chat/card/slots/DSChatCard.slots.visual.spec.js +18 -0
  90. package/ds-chat/card/truncated-text/DSChatCard.truncated-text.func.spec.js +32 -0
  91. package/ds-chat/card/truncated-text/DSChatCard.truncated-text.visual.spec.js +26 -0
  92. package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.axe-core.func.spec.js +23 -0
  93. package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.visual.spec.js +17 -0
  94. package/ds-chat/components/BubbleCO.js +46 -3
  95. package/ds-chat/components/CardCO.js +75 -0
  96. package/ds-chat/components/ComposerCO.js +6 -6
  97. package/ds-chat/components/FloatingButtonCO.js +5 -3
  98. package/ds-chat/components/HeaderCO.js +2 -2
  99. package/ds-chat/components/TileCO.js +82 -0
  100. package/ds-chat/components/index.js +3 -2
  101. package/ds-chat/floatingbutton/DSChat-floating-button.visual.spec.js +1 -1
  102. package/ds-chat/loadmore/DSChat-loadmore.func.spec.js +1 -1
  103. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.axe-core.func.spec.js +2 -2
  104. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.func.spec.js +1 -1
  105. package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.visual.spec.js +2 -2
  106. package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.axe-core.func.spec.js +2 -2
  107. package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js +1 -1
  108. package/ds-chat/tile/slots/DSChatTile.slots.func.spec.js +53 -0
  109. package/ds-chat/tile/slots/DSChatTile.slots.visual.spec.js +18 -0
  110. package/ds-chip/label-expansion-dismissal/DSChip.label-expansion-dismissal.visual.spec.js +84 -0
  111. package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable-tooltip.func.spec.js +47 -0
  112. package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable.visual.spec.js +12 -21
  113. package/ds-controlled-form/ds-combobox/disabled/DSCombobox.disabled.visual.spec.js +6 -1
  114. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.axe-core.basic.func.spec.js +4 -4
  115. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.basic.visual.spec.js +56 -0
  116. package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +54 -1
  117. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.axe-core.disabled.func.spec.js +1 -1
  118. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.disabled.visual.spec.js +1 -1
  119. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.axe-core.hasError.func.spec.js +4 -4
  120. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.has-error.visual.spec.js +71 -1
  121. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.axe-core.mixed.func.spec.js +4 -4
  122. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.visual.spec.js +1 -1
  123. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.axe-core.read-only.func.spec.js +3 -3
  124. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.read-only.visual.spec.js +1 -1
  125. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.axe-core.with-tooltip.func.spec.js +1 -1
  126. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.with-tooltip.visual.spec.js +1 -3
  127. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.axe-core.wrap-label.func.spec.js +1 -1
  128. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.wrap-label.visual.spec.js +1 -1
  129. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.aria-disabled.visual.spec.js +2 -6
  130. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.axe-core.aria-disabled.func.spec.js +1 -1
  131. package/ds-controlled-form/ds-controlled-checkbox/slots/DSControlledCheckbox.slots.func.spec.js +78 -0
  132. package/ds-controlled-form/ds-controlled-checkbox/theme-font/DSControlledCheckbox.theme-font.func.spec.js +30 -0
  133. package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.axe-core.func.spec.js +4 -4
  134. package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.visual.spec.js +1 -1
  135. package/ds-controlled-form/ds-controlled-radio/DSControlledRadioCO.js +50 -1
  136. package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.axe-core.func.spec.js +16 -2
  137. package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.func.spec.js +37 -0
  138. package/ds-controlled-form/ds-controlled-radio/slots/DSControlledRadio.slots.func.spec.js +78 -0
  139. package/ds-controlled-form/ds-controlled-radio/theme-font/DSControlledRadio.theme-font.func.spec.js +30 -0
  140. package/ds-controlled-form/react-hook-form/ReactHook.func.spec.js +1 -3
  141. package/ds-data-table-async/DSDataTableCO.js +187 -10
  142. package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
  143. package/ds-data-table-async/components/FilterBarCO.js +7 -0
  144. package/ds-data-table-async/components/FiltersCO.js +1 -1
  145. package/ds-data-table-async/components/HeaderCO.js +37 -1
  146. package/ds-data-table-async/dnd/DSDataTable.dnd-keyboard-scroll.func.spec.js +51 -0
  147. package/ds-data-table-async/filter-menu-close/DSDataTable.filter-menu-close.func.spec.js +77 -0
  148. package/ds-data-table-async/filter-popover-boundary/DSDataTable.filter-popover-boundary.func.spec.js +98 -0
  149. package/ds-data-table-async/filters/DSDataTable.filters-creatable-active-descendant.func.spec.js +51 -0
  150. package/ds-data-table-async/filters/DSDataTable.filters-creatable.func.spec.js +55 -0
  151. package/ds-data-table-async/filters/DSDataTable.filters.axe-core.func.spec.js +11 -9
  152. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatablemultiselect.keyboard.func.spec.js +2 -2
  153. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatableselect.keyboard.func.spec.js +2 -2
  154. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2.axe-core.func.spec.js +45 -29
  155. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.axe-core.func.spec.js +23 -0
  156. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.func.spec.js +50 -0
  157. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.visual.spec.js +21 -0
  158. package/ds-data-table-async/header-affordances/DSDataTable.header-affordances.func.spec.js +92 -0
  159. package/ds-data-table-async/helpers/getInputSelection.js +6 -0
  160. package/ds-data-table-async/helpers/index.js +1 -0
  161. package/ds-data-table-async/keyboard-scroll/DSDataTable.keyboard-scroll.func.spec.js +39 -0
  162. package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +8 -7
  163. package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +6 -7
  164. package/ds-data-table-async/pagination/DSDataTable.pagination.func.spec.js +3 -2
  165. package/ds-data-table-async/resizable/DSDataTable.resize-min-clamp.func.spec.js +72 -0
  166. package/ds-data-table-async/resizable/DSDataTable.resizerA11y.axe-core.func.spec.js +42 -0
  167. package/ds-data-table-async/resizable/DSDataTable.resizerA11y.func.spec.js +98 -0
  168. package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js +23 -0
  169. package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.visual.spec.js +106 -0
  170. package/ds-data-table-async/textwrapping/DSDataTable.text-wrap-toolbar.visual.spec.js +27 -0
  171. package/ds-data-table-async/toggle-cell-focus/DSDataTable.toggle-cell-enter-focus.func.spec.js +31 -0
  172. package/ds-data-table-async/vissibility/DSDataTable.vissibility.visual.spec.js +2 -0
  173. package/ds-dataviz/DSDataViz.axis.visual.spec.js +1 -2
  174. package/ds-dataviz/DSDataViz.ticks.visual.spec.js +1 -2
  175. package/ds-dataviz/DSDataVizCO.js +2 -0
  176. package/ds-dataviz/axecore/DSDataViz.axis.axe-core.func.spec.js +1 -1
  177. package/ds-floating-context/DSFloatingContextCO.js +10 -0
  178. package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
  179. package/ds-form-combobox-multi/DSComboboxMultiCO.js +36 -9
  180. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
  181. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
  182. package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +19 -2
  183. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
  184. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.mouse.func.spec.js +0 -2
  185. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.visual.spec.js +22 -0
  186. package/ds-form-combobox-multi/grouped/DSComboboxMulti.grouped.visual.spec.js +42 -0
  187. package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
  188. package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.func.spec.js +59 -0
  189. package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.visual.spec.js +39 -0
  190. package/ds-form-combobox-multi/skeleton/DSComboboxMulti.skeleton.visual.spec.js +25 -0
  191. package/ds-form-combobox-multi/theme-font/DSComboboxMulti.theme-font.func.spec.js +38 -0
  192. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.axe-core.func.spec.js +39 -0
  193. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.func.spec.js +39 -0
  194. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.visual.spec.js +29 -0
  195. package/ds-form-combobox-single/DSComboboxSingleCO.js +25 -9
  196. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
  197. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
  198. package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
  199. package/ds-form-combobox-single/creatable/DSComboboxSingle.creatable.visual.spec.js +30 -0
  200. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
  201. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.mouse.func.spec.js +0 -2
  202. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.visual.spec.js +22 -0
  203. package/ds-form-combobox-single/grouped/DSComboboxSingle.grouped.visual.spec.js +45 -0
  204. package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
  205. package/ds-form-combobox-single/skeleton/DSComboboxSingle.skeleton.visual.spec.js +25 -0
  206. package/ds-form-combobox-single/theme-font/DSComboboxSingle.theme-font.func.spec.js +34 -0
  207. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.axe-core.func.spec.js +39 -0
  208. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.func.spec.js +39 -0
  209. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.visual.spec.js +29 -0
  210. package/ds-form-date-range-picker/DateRangePicker.axe-core.spec.js +5 -0
  211. package/ds-form-date-range-picker/DateRangePicker.functional.spec.js +80 -18
  212. package/ds-form-date-range-picker/DateRangePickerCO.js +19 -0
  213. package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +66 -0
  214. package/ds-form-date-range-picker/grouped-field-error-announcement/DateRangePicker.grouped-field-error-announcement.func.spec.js +59 -0
  215. package/ds-form-date-range-picker/picker-callbacks/DateRangePicker.picker-callbacks.func.spec.js +36 -0
  216. package/ds-form-date-time-picker/DSControlledDateTimePickerCO.js +7 -0
  217. package/ds-form-date-time-picker/date-time-full/DateTimeFull.axe-core.func.spec.js +8 -1
  218. package/ds-form-date-time-picker/date-time-full/DateTimePicker.DateTimeFull.visual.spec.js +9 -0
  219. package/ds-form-date-time-picker/partial-date-open-focus/DateTimePicker.partial-date-open-focus.func.spec.js +45 -0
  220. package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
  221. package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
  222. package/ds-form-native-select/NativeSelectCO.js +6 -0
  223. package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
  224. package/ds-form-toggle/DSToggle.func.spec.js +20 -23
  225. package/ds-form-toggle/DSToggleCO.js +11 -2
  226. package/ds-global-header/GlobalHeader.announcements.func.spec.js +27 -0
  227. package/ds-global-header/GlobalHeader.axe-core.func.spec.js +15 -15
  228. package/ds-global-header/GlobalHeader.func.spec.js +70 -1
  229. package/ds-global-header/GlobalHeaderCO.js +120 -2
  230. package/ds-global-header/app-picker-passthrough/GlobalHeader.app-picker-passthrough.func.spec.js +113 -0
  231. package/ds-global-header/popup-menu-focus/GlobalHeader.popup-menu-focus.func.spec.js +63 -0
  232. package/ds-global-header/popup-menu-slots/GlobalHeader.popup-menu-slots.func.spec.js +70 -0
  233. package/ds-global-header/search-toggle-slots/GlobalHeader.search-toggle-slots.func.spec.js +118 -0
  234. package/ds-global-header/toolbar-item-attributes/GlobalHeader.toolbar-item-attributes.func.spec.js +53 -0
  235. package/ds-grid/DSGridCO.js +20 -0
  236. package/ds-grid/layout-mode/DSGrid.layout-mode.func.spec.js +51 -0
  237. package/ds-grid/layout-mode/DSGrid.layout-mode.visual.spec.js +22 -0
  238. package/ds-hooks/DSHook.UseFontSizeMedia.visual.spec.js +5 -2
  239. package/ds-hooks/DSHook.usetree.func.spec.js +3 -2
  240. package/ds-hooks/DSHookCO.js +56 -23
  241. package/ds-hooks/useFocusStack/DSHook.useFocusStack.func.spec.js +83 -0
  242. package/ds-hooks/useFocusTrap/UseFocusTrapCO.js +2 -0
  243. package/ds-hooks/useFocusTrap/UseFocusTrapToggle.func.spec.js +48 -0
  244. package/ds-hooks/useMask/Number/UseNumberMask.axe-core.func.spec.js +48 -0
  245. package/ds-menu-button/DSMenuButtonCO.js +23 -0
  246. package/ds-menu-button/slots/DSMenuButton.slots.axe-core.func.spec.js +28 -0
  247. package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +59 -0
  248. package/ds-menu-button/slots/DSMenuButton.slots.visual.spec.js +26 -0
  249. package/ds-modal-slide/ModalSlideCO.js +7 -0
  250. package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
  251. package/ds-modal-slide/heading-level/ModalSlide.headingLevel.axe-core.func.spec.js +25 -0
  252. package/ds-modal-slide/heading-level/ModalSlide.headingLevel.func.spec.js +25 -0
  253. package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +18 -0
  254. package/ds-notification-badge/DSNotificationBadge.visual.spec.js +17 -20
  255. package/ds-page-layout/PageLayoutCO.js +4 -4
  256. package/ds-pills-v2/DSPillsV2CO.js +12 -0
  257. package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.func.spec.js +53 -0
  258. package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.visual.spec.js +26 -0
  259. package/ds-pills-v2/disabled/DSPills.disabled.func.spec.js +53 -0
  260. package/ds-pills-v2/disabled/DSPills.disabled.visual.spec.js +33 -0
  261. package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
  262. package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
  263. package/ds-query-builder/DSQueryBuilder.visual.spec.js +6 -6
  264. package/ds-shuttle-v2/DSShuttleV2CO.js +15 -1
  265. package/ds-shuttle-v2/breadcrumb-a11y/DSShuttleV2.breadcrumb-a11y.func.spec.js +43 -0
  266. package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
  267. package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +30 -0
  268. package/ds-shuttle-v2/extra/DSShuttleV2.extra.visual.spec.js +8 -3
  269. package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +4 -2
  270. package/ds-shuttle-v2/skipped/DSShuttleV2.extra.axe-core.skipped.js +1 -1
  271. package/ds-shuttle-v2/skipped/DSShuttleV2.filter.axe-core.skipped.js +1 -1
  272. package/ds-shuttle-v2/skipped/DSShuttleV2.globalcheckbox.axe-core.skipped.js +1 -1
  273. package/ds-shuttle-v2/skipped/DSShuttleV2.items.axe-core.skipped.js +3 -3
  274. package/ds-shuttle-v2/skipped/DSShuttleV2.skipped.js +5 -5
  275. package/ds-slider-v2/DSSliderV2.func.spec.js +36 -25
  276. package/ds-slider-v2/DSSliderV2CO.js +10 -0
  277. package/ds-slider-v2/min-range/DSSliderV2.min-range.func.spec.js +69 -0
  278. package/ds-tab-button/DSTabButton.func.spec.js +1 -1
  279. package/ds-tabs/DSTabsCO.js +4 -0
  280. package/ds-tabs/notification-badge/DSTabs.notification-badge.axe-core.func.spec.js +28 -0
  281. package/ds-tabs/notification-badge/DSTabs.notification-badge.func.spec.js +51 -0
  282. package/ds-tooltip-v3/DSTooltipV3CO.js +21 -0
  283. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
  284. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
  285. package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.func.spec.js +45 -0
  286. package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.visual.spec.js +29 -0
  287. package/ds-treeview/DSTreeViewCO.js +23 -0
  288. package/ds-treeview/dragAndDrop/TreeView-dnd_keyboard.func.spec.js +96 -0
  289. package/ds-typography/DSTypographyCO.js +10 -0
  290. package/ds-typography/theme-font/DSTypography.theme-font.func.spec.js +30 -0
  291. package/package.json +150 -153
  292. package/paths.js +16 -6
  293. package/ds-card-v3/disabled/DSCardV3.disabled.visual.spec.js +0 -17
  294. package/ds-chat-tile/TileCO.js +0 -35
  295. package/ds-hooks/DSHook.func.spec.js +0 -60
  296. package/ds-hooks/useFocusStack/DSHook.useFocusStack.skipped.js +0 -57
  297. package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +0 -61
@@ -0,0 +1,75 @@
1
+ import { PATH_E2E_CHAT_CARD } from '../../paths';
2
+ import { PageObject, Urlbuilder } from '../../helpers';
3
+
4
+ export default class CardCO extends PageObject {
5
+ static cardBasicURL = new Urlbuilder(PATH_E2E_CHAT_CARD, 'basic-test');
6
+
7
+ static cardWithNotificationBadgesURL = new Urlbuilder(PATH_E2E_CHAT_CARD, 'with-notification-badges-test');
8
+
9
+ static cardTruncatedURL = new Urlbuilder(PATH_E2E_CHAT_CARD, 'truncated-text-test');
10
+
11
+ static cardSlotsURL = new Urlbuilder(PATH_E2E_CHAT_CARD, 'slots-test');
12
+
13
+ static async getCards() {
14
+ return $$('[data-testid="chat-card-wrapper"]');
15
+ }
16
+
17
+ static async getCardRoot(cardId) {
18
+ return $(`[data-testid="chat-card-wrapper-${cardId}"]`);
19
+ }
20
+
21
+ static async getCardTitle(cardId) {
22
+ return $(`[data-testid="chat-card-title-${cardId}"]`);
23
+ }
24
+
25
+ static async getCardContent(cardId) {
26
+ return $(`[data-testid="chat-card-content-${cardId}"]`);
27
+ }
28
+
29
+ static async getCardTime(cardId) {
30
+ return $(`[data-testid="chat-card-time-${cardId}"]`);
31
+ }
32
+
33
+ // Truncated text selectors
34
+ static async getTruncatedSpan(index = 0) {
35
+ return $$('[data-dimsum-slot="dsChatcardTruncatedSpan"]')[index];
36
+ }
37
+
38
+ static async getTooltipContainer() {
39
+ return $('[data-dimsum-slot="dsChatcardTooltipContainer"]');
40
+ }
41
+
42
+ // Slot selectors (used by slots func spec — one card per story)
43
+ static async getRootSlot() {
44
+ return $('[data-dimsum-slot="dsChatcardRoot"]');
45
+ }
46
+
47
+ static async getMainContentSlot() {
48
+ return $('[data-dimsum-slot="dsChatcardMainContent"]');
49
+ }
50
+
51
+ static async getTitleSlot() {
52
+ return $('[data-dimsum-slot="dsChatcardTitle"]');
53
+ }
54
+
55
+ static async getContentSlot() {
56
+ return $('[data-dimsum-slot="dsChatcardContent"]');
57
+ }
58
+
59
+ static async getTimeSlot() {
60
+ return $('[data-dimsum-slot="dsChatcardTime"]');
61
+ }
62
+
63
+ static async getRightAddonSlot() {
64
+ return $('[data-dimsum-slot="dsChatcardRightAddon"]');
65
+ }
66
+
67
+ static async getTruncatedSpanSlot() {
68
+ return $('[data-dimsum-slot="dsChatcardTruncatedSpan"]');
69
+ }
70
+
71
+ // Snapshots
72
+ static snapshotPath(example = 'basic') {
73
+ return PageObject.getSnapshotPathBuilder('Card', example, 'ds-chat');
74
+ }
75
+ }
@@ -1,19 +1,19 @@
1
1
  /* eslint-disable import/no-relative-packages */
2
- import { PATH_CHAT_EXAMPLES, PATH_E2E_CHAT, PATH_CHAT_PARTS } from '../../paths';
2
+ import { PATH_E2E_CHAT } from '../../paths';
3
3
  import { PageObject, Urlbuilder } from '../../helpers';
4
4
 
5
5
  export default class ComposerCO extends PageObject {
6
- static composerURL = new Urlbuilder(PATH_CHAT_PARTS, 'composer');
6
+ static composerURL = new Urlbuilder(PATH_E2E_CHAT, 'composer');
7
7
 
8
- static mobileComposerURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'mobile-container');
8
+ static mobileComposerURL = new Urlbuilder(PATH_E2E_CHAT, 'mobile-container-test');
9
9
 
10
- static characterCountURL = new Urlbuilder(PATH_CHAT_PARTS, 'composer-character-count');
10
+ static characterCountURL = new Urlbuilder(PATH_E2E_CHAT, 'composer-character-count');
11
11
 
12
- static characterCountCustomURL = new Urlbuilder(PATH_CHAT_PARTS, 'composer-character-count-custom-message');
12
+ static characterCountCustomURL = new Urlbuilder(PATH_E2E_CHAT, 'composer-character-count-custom-message');
13
13
 
14
14
  static responsiveContainerUCURL = new Urlbuilder(PATH_E2E_CHAT, 'responsive-container');
15
15
 
16
- static containerFocusCasesURL = new Urlbuilder(PATH_CHAT_EXAMPLES, 'container-focus-cases');
16
+ static containerFocusCasesURL = new Urlbuilder(PATH_E2E_CHAT, 'container-focus-cases-test');
17
17
 
18
18
  static LONG_STRING = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vehicula bibendum nulla';
19
19
 
@@ -1,9 +1,11 @@
1
- import { PATH_CHAT_PARTS, PATH_E2E_CHAT } from '../../paths';
1
+ import { PATH_E2E_CHAT } from '../../paths';
2
2
  import { PageObject, Urlbuilder } from '../../helpers';
3
3
 
4
4
  export default class FloatingButtonCO extends PageObject {
5
- static floatingButtonURL = new Urlbuilder(PATH_CHAT_PARTS, 'float-button');
6
-
5
+ // FloatingExampleTest renders the floating button alone at rest (its chat panel is gated behind
6
+ // `show`, initially false), so it covers both the isolated-button visual states and the in-context
7
+ // axe-core run. The former dedicated `float-button` story was removed in the
8
+ // ds-chat-floating-button compliance retrofit and is not coming back.
7
9
  static floatingExampleURL = new Urlbuilder(PATH_E2E_CHAT, 'floating-example-test');
8
10
 
9
11
  // selectors
@@ -1,9 +1,9 @@
1
1
  /* eslint-disable import/no-relative-packages */
2
- import { PATH_CHAT_PARTS, PATH_E2E_CHAT } from '../../paths';
2
+ import { PATH_E2E_CHAT } from '../../paths';
3
3
  import { PageObject, Urlbuilder } from '../../helpers';
4
4
 
5
5
  export default class HeaderCO extends PageObject {
6
- static headerURL = new Urlbuilder(PATH_CHAT_PARTS, 'header');
6
+ static headerURL = new Urlbuilder(PATH_E2E_CHAT, 'with-dropdown-menu-test');
7
7
 
8
8
  static withConditionalRenderingUCURL = new Urlbuilder(PATH_E2E_CHAT, 'conditional-rendering-header-buttons');
9
9
 
@@ -0,0 +1,82 @@
1
+ import { PATH_E2E_CHAT, PATH_E2E_CHAT_TILE } from '../../paths';
2
+ import { PageObject, Urlbuilder } from '../../helpers';
3
+
4
+ export default class TileCO extends PageObject {
5
+ static tilesURL = new Urlbuilder(PATH_E2E_CHAT, 'tile');
6
+
7
+ static sidebarURL = new Urlbuilder(PATH_E2E_CHAT, 'sidebar');
8
+
9
+ static applyAriaDisabledURL = new Urlbuilder(PATH_E2E_CHAT_TILE, 'apply-aria-disabled-test');
10
+
11
+ static slotsTestURL = new Urlbuilder(PATH_E2E_CHAT_TILE, 'slots-test');
12
+
13
+ static async getChatTile(tileId) {
14
+ return $(`[data-testid="tile-button-${tileId}"]`);
15
+ }
16
+
17
+ static async getChatTileButtonItem(tileId) {
18
+ return $(`[data-testid="tile-button-item-id-${tileId}"]`);
19
+ }
20
+
21
+ static async getSideBarSelectedTile() {
22
+ return $(`[data-testid="selected-tile"]`).getText();
23
+ }
24
+
25
+ static async getTileTooltip(id) {
26
+ return $(`[data-testid="ds-tooltip-v3-trigger-wrapper_ds-chat-tile-tooltip-button-item-id-${id}"]`);
27
+ }
28
+
29
+ static async getCounter() {
30
+ return $('[data-testid="counter"]');
31
+ }
32
+
33
+ static async getTileBadge(tileId) {
34
+ return $(`[data-testid="tile-badge-${tileId}"]`);
35
+ }
36
+
37
+ static async getTileCloseButton(tileId) {
38
+ return $(`[data-testid="tile-close-btn-${tileId}"]`);
39
+ }
40
+
41
+ // Slot selectors (used by slots func spec — one tile per story)
42
+ static async getRootSlot() {
43
+ return $('[data-dimsum-slot="dsChattilebuttonRoot"]');
44
+ }
45
+
46
+ static async getTooltipWrapperSlot() {
47
+ return $('[data-dimsum-slot="dsChattilebuttonTooltipWrapper"]');
48
+ }
49
+
50
+ static async getWrapperSlot() {
51
+ return $('[data-dimsum-slot="dsChattilebuttonWrapper"]');
52
+ }
53
+
54
+ static async getLeftBorderSlot() {
55
+ return $('[data-dimsum-slot="dsChattilebuttonLeftBorder"]');
56
+ }
57
+
58
+ static async getCentralContentSlot() {
59
+ return $('[data-dimsum-slot="dsChattilebuttonCentralContent"]');
60
+ }
61
+
62
+ static async getIconSlot() {
63
+ return $('[data-dimsum-slot="dsChattilebuttonIcon"]');
64
+ }
65
+
66
+ static async getLabelSlot() {
67
+ return $('[data-dimsum-slot="dsChattilebuttonLabel"]');
68
+ }
69
+
70
+ static async getBadgeSlot() {
71
+ return $('[data-dimsum-slot="dsChattilebuttonBadge"]');
72
+ }
73
+
74
+ static async getCloseButtonSlot() {
75
+ return $('[data-dimsum-slot="dsChattilebuttonCloseButton"]');
76
+ }
77
+
78
+ // Snapshots
79
+ static snapshotPath(example = 'basic') {
80
+ return PageObject.getSnapshotPathBuilder('Tile', example, 'ds-chat');
81
+ }
82
+ }
@@ -1,8 +1,9 @@
1
1
  import BubbleCO from './BubbleCO';
2
+ import CardCO from './CardCO';
2
3
  import FloatingButtonCO from './FloatingButtonCO';
3
- import TileCO from '../../ds-chat-tile/TileCO';
4
+ import TileCO from './TileCO';
4
5
  import HeaderCO from './HeaderCO';
5
6
  import ComposerCO from './ComposerCO';
6
7
  import ChatCO from '../DSChatCO';
7
8
  import StoryBtnsCO from './StoryBtnsCO';
8
- export { BubbleCO, FloatingButtonCO, TileCO, HeaderCO, ComposerCO, ChatCO, StoryBtnsCO };
9
+ export { BubbleCO, CardCO, FloatingButtonCO, TileCO, HeaderCO, ComposerCO, ChatCO, StoryBtnsCO };
@@ -5,7 +5,7 @@ import { mouseOver, keyboardActions, tickActions, performKeyboardAction } from '
5
5
  if (!browser.capabilities['ice:options'].isPhone) {
6
6
  describe('PUI-6669 - Chat, Floating Button, States - Visual Tests', () => {
7
7
  beforeEach('loading page', async () => {
8
- const errorOnGo = await FloatingButtonCO.floatingButtonURL.go();
8
+ const errorOnGo = await FloatingButtonCO.floatingExampleURL.go();
9
9
  if (errorOnGo) throw errorOnGo;
10
10
  });
11
11
  it('should display the floating button in default state', async () => {
@@ -21,7 +21,7 @@ if (!browser.capabilities['ice:options'].isPhone) {
21
21
  await browser.pause(2000);
22
22
  const howManyMsgs = (await DSChatCO.getBubbleContainers()).length;
23
23
  await expect(howManyMsgs).toEqual(20);
24
- await expect(bubble0).toBeDisplayedInViewport();
24
+ await expect(bubble0).toBeDisplayed();
25
25
  });
26
26
  });
27
27
  }
@@ -1,6 +1,6 @@
1
1
  import { Key } from 'webdriverio';
2
- import { axeCoreCheck } from '../helpers';
3
- import TileCO from './TileCO';
2
+ import { axeCoreCheck } from '../../helpers';
3
+ import { TileCO } from '../components';
4
4
 
5
5
  if (
6
6
  (!browser.capabilities['ice:options'].isPhone &&
@@ -1,5 +1,5 @@
1
1
  import { Key } from 'webdriverio';
2
- import TileCO from './TileCO';
2
+ import { TileCO } from '../components';
3
3
 
4
4
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
5
  describe('PUI-6684 - Chat, Tile, Keyboard Navigation', () => {
@@ -1,6 +1,6 @@
1
1
  import { Key } from 'webdriverio';
2
- import TileCO from './TileCO';
3
- import { mouseOver, keyboardActions, tickActions, performKeyboardAction } from '../helpers';
2
+ import { TileCO } from '../components';
3
+ import { mouseOver, keyboardActions, tickActions, performKeyboardAction } from '../../helpers';
4
4
 
5
5
  if (!browser.capabilities['ice:options'].isPhone) {
6
6
  describe('PUI-6674 - Chat, Tile, Visual Tests', () => {
@@ -1,5 +1,5 @@
1
- import { axeCoreCheck } from '../../helpers';
2
- import TileCO from '../TileCO';
1
+ import { axeCoreCheck } from '../../../helpers';
2
+ import { TileCO } from '../../components';
3
3
 
4
4
  if (
5
5
  (!browser.capabilities['ice:options'].isPhone &&
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable max-len */
2
2
  import { Key } from 'webdriverio';
3
- import TileCO from '../TileCO';
3
+ import { TileCO } from '../../components';
4
4
 
5
5
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
6
  describe('PUI-14368 - [Tile] applyAriaDisabled prop - visual Test', () => {
@@ -0,0 +1,53 @@
1
+ // Tests for PUI-17908 (ds-chat-tile slots implementation)
2
+ import { TileCO } from '../../components';
3
+
4
+ if (
5
+ (!browser.capabilities['ice:options'].isPhone &&
6
+ !browser.capabilities['ice:options'].isTablet &&
7
+ browser.capabilities.browserName === 'chrome') ||
8
+ browser.capabilities.browserName === 'Chrome'
9
+ ) {
10
+ describe('PUI-18465 - DSChatTile:: slot wiring - Func', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await TileCO.slotsTestURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should have custom aria-* for each slot', async () => {
17
+ await (await TileCO.getRootSlot()).waitForDisplayed();
18
+ await expect(await TileCO.getRootSlot()).toHaveAttribute('aria-label', 'root aria');
19
+ await expect(await TileCO.getTooltipWrapperSlot()).toHaveAttribute('aria-label', 'tooltip-wrapper aria');
20
+ await expect(await TileCO.getWrapperSlot()).toHaveAttribute('aria-label', 'wrapper aria');
21
+ await expect(await TileCO.getLeftBorderSlot()).toHaveAttribute('aria-label', 'left-border aria');
22
+ await expect(await TileCO.getCentralContentSlot()).toHaveAttribute('aria-label', 'central-content aria');
23
+ await expect(await TileCO.getIconSlot()).toHaveAttribute('aria-label', 'icon aria');
24
+ await expect(await TileCO.getLabelSlot()).toHaveAttribute('aria-label', 'label aria');
25
+ await expect(await TileCO.getBadgeSlot()).toHaveAttribute('aria-label', 'badge aria');
26
+ await expect(await TileCO.getCloseButtonSlot()).toHaveAttribute('aria-label', 'close-button aria');
27
+ });
28
+
29
+ it('02: should have custom data-testid for each slot', async () => {
30
+ await expect(await TileCO.getRootSlot()).toHaveAttribute('data-testid', 'root data');
31
+ await expect(await TileCO.getTooltipWrapperSlot()).toHaveAttribute('data-testid', 'tooltip-wrapper data');
32
+ await expect(await TileCO.getWrapperSlot()).toHaveAttribute('data-testid', 'wrapper data');
33
+ await expect(await TileCO.getLeftBorderSlot()).toHaveAttribute('data-testid', 'left-border data');
34
+ await expect(await TileCO.getCentralContentSlot()).toHaveAttribute('data-testid', 'central-content data');
35
+ await expect(await TileCO.getIconSlot()).toHaveAttribute('data-testid', 'icon data');
36
+ await expect(await TileCO.getLabelSlot()).toHaveAttribute('data-testid', 'label data');
37
+ await expect(await TileCO.getBadgeSlot()).toHaveAttribute('data-testid', 'badge data');
38
+ await expect(await TileCO.getCloseButtonSlot()).toHaveAttribute('data-testid', 'close-button data');
39
+ });
40
+
41
+ it('03: should have custom lang for each slot', async () => {
42
+ await expect(await TileCO.getRootSlot()).toHaveAttribute('lang', 'pt');
43
+ await expect(await TileCO.getTooltipWrapperSlot()).toHaveAttribute('lang', 'es');
44
+ await expect(await TileCO.getWrapperSlot()).toHaveAttribute('lang', 'de');
45
+ await expect(await TileCO.getLeftBorderSlot()).toHaveAttribute('lang', 'en');
46
+ await expect(await TileCO.getCentralContentSlot()).toHaveAttribute('lang', 'fr');
47
+ await expect(await TileCO.getIconSlot()).toHaveAttribute('lang', 'it');
48
+ await expect(await TileCO.getLabelSlot()).toHaveAttribute('lang', 'nl');
49
+ await expect(await TileCO.getBadgeSlot()).toHaveAttribute('lang', 'sv');
50
+ await expect(await TileCO.getCloseButtonSlot()).toHaveAttribute('lang', 'ja');
51
+ });
52
+ });
53
+ }
@@ -0,0 +1,18 @@
1
+ // Tests for PUI-17908 (ds-chat-tile slots implementation)
2
+ import { TileCO } from '../../components';
3
+
4
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
+ describe('PUI-18464 - DSChatTile:: slot variants - Visual', () => {
6
+ before(async () => {
7
+ const errorOnGo = await TileCO.slotsTestURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should display all tile slot variants', async () => {
12
+ const firstTile = await TileCO.getRootSlot();
13
+ await firstTile.waitForDisplayed();
14
+ const snapshot = await browser.percyCheckScreenshot(TileCO.snapshotPath('tile-slot-variants'));
15
+ await expect(snapshot).toEqual(0);
16
+ });
17
+ });
18
+ }
@@ -0,0 +1,84 @@
1
+ import { Key } from 'webdriverio';
2
+ import DSChipCO from '../DSChipCO';
3
+ import { mouseOver } from '../../helpers';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ const PARKED_X = 10;
7
+ const PARKED_Y = 10;
8
+
9
+ // Indexes into the basic-test story grid:
10
+ // 0 Large | 1 Small | 2 Selected | 3 Truncated with large label | 4 Disabled | 5 wrapText with large label
11
+ const TRUNCATING_CHIP = 3;
12
+ const WRAP_TEXT_CHIP = 5;
13
+
14
+ // DSChipCO deliberately has no label lookup, so the tab target is reached by walking the tab order.
15
+ // The natively disabled chip drops out of it on its own, which keeps this independent of the story's
16
+ // exact number of focus stops.
17
+ const MAX_TAB_STOPS = 12;
18
+ const tabUntilFocused = async (index) => {
19
+ const target = await DSChipCO.getChipButtonByIndex(index);
20
+ for (let i = 0; i < MAX_TAB_STOPS; i += 1) {
21
+ // eslint-disable-next-line no-await-in-loop
22
+ if (await target.isFocused()) return target;
23
+ // eslint-disable-next-line no-await-in-loop
24
+ await browser.keys(Key.Tab);
25
+ }
26
+ throw new Error(`chip ${index} never took focus within ${MAX_TAB_STOPS} tab stops`);
27
+ };
28
+
29
+ describe('PUI-19009 - DSChip:: Escape dismisses the expanded truncated chip label - Visual', () => {
30
+ before('loading page', async () => {
31
+ const errorOnGo = await DSChipCO.basicURL.go();
32
+ if (errorOnGo) throw errorOnGo;
33
+ await browser.maximizeWindow();
34
+ await (await DSChipCO.getChipByIndex(TRUNCATING_CHIP)).waitForDisplayed();
35
+ });
36
+
37
+ it('01: truncated chip expands its label on hover', async () => {
38
+ await mouseOver(await DSChipCO.getChipByIndex(TRUNCATING_CHIP));
39
+ const snapshot = await browser.percyCheckScreenshot(DSChipCO.snapshotPath('esc-dismiss-hover-expanded'));
40
+ await expect(snapshot).toEqual(0);
41
+ });
42
+
43
+ it('02: Escape collapses the hover-expanded label without moving the pointer', async () => {
44
+ await browser.keys(Key.Escape);
45
+ const snapshot = await browser.percyCheckScreenshot(DSChipCO.snapshotPath('esc-dismiss-hover-collapsed'));
46
+ await expect(snapshot).toEqual(0);
47
+ });
48
+
49
+ it('03: label stays collapsed while the pointer remains on the chip', async () => {
50
+ await mouseOver(await DSChipCO.getChipByIndex(TRUNCATING_CHIP), 12, 12);
51
+ const snapshot = await browser.percyCheckScreenshot(DSChipCO.snapshotPath('esc-dismiss-hover-still-collapsed'));
52
+ await expect(snapshot).toEqual(0);
53
+ });
54
+
55
+ it('04: label expands again once the pointer leaves and returns', async () => {
56
+ await mouseOver(null, PARKED_X, PARKED_Y);
57
+ await mouseOver(await DSChipCO.getChipByIndex(TRUNCATING_CHIP));
58
+ const snapshot = await browser.percyCheckScreenshot(DSChipCO.snapshotPath('esc-dismiss-rehover-expanded'));
59
+ await expect(snapshot).toEqual(0);
60
+ });
61
+
62
+ it('05: truncated chip expands its label on focus alone', async () => {
63
+ await mouseOver(null, PARKED_X, PARKED_Y);
64
+ const chipButton = await tabUntilFocused(TRUNCATING_CHIP);
65
+ await expect(chipButton).toBeFocused();
66
+ const snapshot = await browser.percyCheckScreenshot(DSChipCO.snapshotPath('esc-dismiss-focus-expanded'));
67
+ await expect(snapshot).toEqual(0);
68
+ });
69
+
70
+ it('06: Escape collapses the focus-expanded label without moving focus', async () => {
71
+ await browser.keys(Key.Escape);
72
+ await expect(await DSChipCO.getChipButtonByIndex(TRUNCATING_CHIP)).toBeFocused();
73
+ const snapshot = await browser.percyCheckScreenshot(DSChipCO.snapshotPath('esc-dismiss-focus-collapsed'));
74
+ await expect(snapshot).toEqual(0);
75
+ });
76
+
77
+ it('07: a wrapText chip never expands, so Escape leaves it untouched', async () => {
78
+ await mouseOver(await DSChipCO.getChipByIndex(WRAP_TEXT_CHIP));
79
+ await browser.keys(Key.Escape);
80
+ const snapshot = await browser.percyCheckScreenshot(DSChipCO.snapshotPath('esc-dismiss-wrap-text-unchanged'));
81
+ await expect(snapshot).toEqual(0);
82
+ });
83
+ });
84
+ }
@@ -0,0 +1,47 @@
1
+ import { Key } from 'webdriverio';
2
+ import DSComboboxCO from '../DSComboboxCO';
3
+ import { mouseOver } from '../../../helpers';
4
+
5
+ const longText =
6
+ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore ' +
7
+ 'magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo.';
8
+
9
+ // Tests for the fix introduced in PUI-16693 (ComboboxMulti suppresses the inaccessible
10
+ // truncated-pill tooltip via the disableTruncationTooltip flag; the full value stays
11
+ // readable from the list box). Hovering a truncated selected pill must NOT open a tooltip.
12
+ // The open menu renders its own ds-floating-wrapper-root, so it is closed before asserting.
13
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
14
+ describe('PUI-18659 - ComboboxV3:: truncated selected pill tooltip suppression - func', () => {
15
+ before('loading page and creating a truncated pill', async () => {
16
+ const errorOnGo = await DSComboboxCO.multiSelectCreatable.go();
17
+ if (errorOnGo) throw errorOnGo;
18
+
19
+ const combobox = await DSComboboxCO.getComboboxInput();
20
+ await combobox.setValue(longText);
21
+
22
+ const optionCreated = await DSComboboxCO.getOptionByIndex(0);
23
+ await optionCreated.click();
24
+
25
+ // close the menu so its FloatingWrapper (shares ds-floating-wrapper-root) is gone
26
+ await browser.keys(Key.Escape);
27
+ const menuList = await DSComboboxCO.getMenuList();
28
+ await menuList.waitForDisplayed({ reverse: true });
29
+ });
30
+
31
+ it('01: should not render a tooltip wrapper for the truncated selected pill', async () => {
32
+ const pill = await DSComboboxCO.getSelectedValues();
33
+ await expect(pill).toBeDisplayed();
34
+
35
+ const tooltip = await DSComboboxCO.getTooltip();
36
+ await expect(tooltip).not.toBeExisting();
37
+ });
38
+
39
+ it('02: should not open a tooltip when hovering the truncated pill', async () => {
40
+ const pill = await DSComboboxCO.getSimpleTruncateText();
41
+ await mouseOver(pill);
42
+
43
+ const tooltip = await DSComboboxCO.getTooltip();
44
+ await expect(tooltip).not.toBeExisting();
45
+ });
46
+ });
47
+ }
@@ -2,7 +2,7 @@
2
2
  /* eslint-disable max-len */
3
3
  /* eslint-disable max-lines */
4
4
  import DSComboboxCO from '../DSComboboxCO';
5
- import { type, mouseOver } from '../../../helpers';
5
+ import { type } from '../../../helpers';
6
6
 
7
7
  if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
8
8
  describe('PUI-8449 - ComboboxV3:: Multi Select Creatable - basic - visual', () => {
@@ -28,30 +28,21 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
28
28
  );
29
29
  await expect(snapshot).toEqual(0);
30
30
  });
31
- // Defect PUI-16693 has been created to track this issue
32
- it.skip('03: display tooltip for new option created', async () => {
31
+ // PUI-16693 (tooltip suppression on truncated pills) is now fixed; these creatable
32
+ // snapshots are reactivated. The tooltip-absence behavior is covered separately in
33
+ // DSCombobox.creatable-tooltip.func.spec.js.
34
+ it('03: should create and display a second long option in the menu', async () => {
33
35
  await browser.eyesOpen();
34
- const pill = await DSComboboxCO.getSimpleTruncateText();
35
- await mouseOver(pill);
36
- const tooltip = await DSComboboxCO.getTooltip();
37
- await tooltip.waitForDisplayed();
38
- const snapshot = await browser.eyesCheckSnapshot(
39
- DSComboboxCO.snapshotPath('comboboxV3-createable-option-created-tooltip'),
40
- );
41
- await expect(snapshot).toEqual(0);
42
- });
43
- // Defect PUI-16693 has been created to track this issue
44
- it.skip('04: create a new long option', async () => {
45
- await browser.eyesOpen();
46
- const pill = await DSComboboxCO.getSelectedValues();
47
- await mouseOver(pill, 400, 0);
48
- const longText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
49
- await type(longText);
36
+ // the input keeps focus and the menu stays open after selecting in test 02, so type
37
+ // directly — clicking the input is intercepted by the overlapping aria-hidden input.
38
+ const secondLongText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit';
39
+ await type(secondLongText);
40
+ const menuList = await DSComboboxCO.getMenuList();
41
+ await menuList.waitForDisplayed();
50
42
  const snapshot = await browser.eyesCheckSnapshot(DSComboboxCO.snapshotPath('comboboxV3-createable--new-option'));
51
43
  await expect(snapshot).toEqual(0);
52
44
  });
53
- // Defect PUI-16693 has been created to track this issue
54
- it.skip('05: should select new option', async () => {
45
+ it('04: should select the second created option', async () => {
55
46
  await browser.eyesOpen();
56
47
  const optionCreated = await DSComboboxCO.getOptionByIndex(0);
57
48
  await optionCreated.click();
@@ -14,7 +14,12 @@ if (!browser.capabilities['ice:options'].isPhone) {
14
14
  await expect(snapshot).toEqual(0);
15
15
  });
16
16
  if (!browser.capabilities['ice:options'].isTablet) {
17
- it('should display tooltip when hover truncated pill', async () => {
17
+ // SKIPPED pending PUI-18660 (defect): the PUI-16693 fix applies disableTruncationTooltip
18
+ // to every ComboboxMulti selected pill, including disabled/readOnly pills. In the disabled
19
+ // state the menu cannot be opened, so suppressing the tooltip leaves the truncated value
20
+ // inaccessible. Re-enable (asserting tooltip presence) once the flag is scoped to
21
+ // interactive pills only.
22
+ it.skip('should display tooltip when hover truncated pill', async () => {
18
23
  const truncatedPill = await DSComboboxCO.getPillByLabel('Luke Skywalker too long this text is super long');
19
24
  await mouseOver(truncatedPill, 20, 5);
20
25
  const tooltip = await DSComboboxCO.getTooltip();
@@ -19,24 +19,24 @@ if (
19
19
  const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
20
20
  await checkbox.waitForExist();
21
21
  const result = await axeCoreCheck();
22
- expect(result.length).toBe(0);
22
+ await expect(result).toHaveLength(0);
23
23
  });
24
24
  it('02: Evaluate checkbox accessibility with axe-core (focused)', async () => {
25
25
  await browser.keys(Key.Tab);
26
26
  const result = await axeCoreCheck();
27
- expect(result.length).toBe(0);
27
+ await expect(result).toHaveLength(0);
28
28
  });
29
29
  it('03: Evaluate checkbox accessibility with axe-core (hovered)', async () => {
30
30
  const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
31
31
  await mouseOver(checkbox);
32
32
  const result = await axeCoreCheck();
33
- expect(result.length).toBe(0);
33
+ await expect(result).toHaveLength(0);
34
34
  });
35
35
  it('04: Evaluate checkbox accessibility with axe-core (clicked)', async () => {
36
36
  const checkbox = await DSControlledCheckboxCO.getCustomCheckbox();
37
37
  await checkbox.click();
38
38
  const result = await axeCoreCheck();
39
- expect(result.length).toBe(0);
39
+ await expect(result).toHaveLength(0);
40
40
  });
41
41
  });
42
42
  }