dimsum-e2e-tests 3.62.1 → 3.70.0-alpha.10

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 (325) hide show
  1. package/CHANGELOG.md +2238 -286
  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/DSComboboxCO.js +2 -2
  112. package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable-tooltip.func.spec.js +47 -0
  113. package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable.visual.spec.js +12 -21
  114. package/ds-controlled-form/ds-combobox/disabled/DSCombobox.disabled.visual.spec.js +6 -1
  115. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.axe-core.basic.func.spec.js +4 -4
  116. package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.basic.visual.spec.js +56 -0
  117. package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +55 -2
  118. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.axe-core.disabled.func.spec.js +1 -1
  119. package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.disabled.visual.spec.js +1 -1
  120. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.axe-core.hasError.func.spec.js +4 -4
  121. package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.has-error.visual.spec.js +71 -1
  122. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.axe-core.mixed.func.spec.js +4 -4
  123. package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.visual.spec.js +1 -1
  124. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.axe-core.read-only.func.spec.js +3 -3
  125. package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.read-only.visual.spec.js +1 -1
  126. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.axe-core.with-tooltip.func.spec.js +1 -1
  127. package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.with-tooltip.visual.spec.js +1 -3
  128. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.axe-core.wrap-label.func.spec.js +1 -1
  129. package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.wrap-label.visual.spec.js +1 -1
  130. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.aria-disabled.visual.spec.js +2 -6
  131. package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.axe-core.aria-disabled.func.spec.js +1 -1
  132. package/ds-controlled-form/ds-controlled-checkbox/slots/DSControlledCheckbox.slots.func.spec.js +78 -0
  133. package/ds-controlled-form/ds-controlled-checkbox/theme-font/DSControlledCheckbox.theme-font.func.spec.js +30 -0
  134. package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.axe-core.func.spec.js +4 -4
  135. package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.visual.spec.js +1 -1
  136. package/ds-controlled-form/ds-controlled-inputgroup/DSControlledInputGroupCO.js +1 -1
  137. package/ds-controlled-form/ds-controlled-radio/DSControlledRadioCO.js +50 -1
  138. package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.axe-core.func.spec.js +16 -2
  139. package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.func.spec.js +37 -0
  140. package/ds-controlled-form/ds-controlled-radio/slots/DSControlledRadio.slots.func.spec.js +78 -0
  141. package/ds-controlled-form/ds-controlled-radio/theme-font/DSControlledRadio.theme-font.func.spec.js +30 -0
  142. package/ds-controlled-form/react-hook-form/ReactHook.func.spec.js +1 -3
  143. package/ds-data-table-async/DSDataTableCO.js +189 -12
  144. package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
  145. package/ds-data-table-async/components/FilterBarCO.js +7 -0
  146. package/ds-data-table-async/components/FiltersCO.js +1 -1
  147. package/ds-data-table-async/components/HeaderCO.js +59 -11
  148. package/ds-data-table-async/dnd/DSDataTable.dnd-keyboard-scroll.func.spec.js +51 -0
  149. package/ds-data-table-async/filter-menu-close/DSDataTable.filter-menu-close.func.spec.js +77 -0
  150. package/ds-data-table-async/filter-popover-boundary/DSDataTable.filter-popover-boundary.func.spec.js +98 -0
  151. package/ds-data-table-async/filters/DSDataTable.filters-creatable-active-descendant.func.spec.js +51 -0
  152. package/ds-data-table-async/filters/DSDataTable.filters-creatable.func.spec.js +55 -0
  153. package/ds-data-table-async/filters/DSDataTable.filters.axe-core.func.spec.js +11 -9
  154. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatablemultiselect.keyboard.func.spec.js +2 -2
  155. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatableselect.keyboard.func.spec.js +2 -2
  156. package/ds-data-table-async/filtersV2/DSDataTable.filtersV2.axe-core.func.spec.js +45 -29
  157. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.axe-core.func.spec.js +23 -0
  158. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.func.spec.js +50 -0
  159. package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.visual.spec.js +21 -0
  160. package/ds-data-table-async/header-affordances/DSDataTable.header-affordances.func.spec.js +92 -0
  161. package/ds-data-table-async/helpers/getInputSelection.js +6 -0
  162. package/ds-data-table-async/helpers/index.js +1 -0
  163. package/ds-data-table-async/keyboard-scroll/DSDataTable.keyboard-scroll.func.spec.js +39 -0
  164. package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +8 -7
  165. package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +6 -7
  166. package/ds-data-table-async/pagination/DSDataTable.pagination.func.spec.js +3 -2
  167. package/ds-data-table-async/resizable/DSDataTable.resize-min-clamp.func.spec.js +72 -0
  168. package/ds-data-table-async/resizable/DSDataTable.resizerA11y.axe-core.func.spec.js +42 -0
  169. package/ds-data-table-async/resizable/DSDataTable.resizerA11y.func.spec.js +98 -0
  170. package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js +23 -0
  171. package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.visual.spec.js +106 -0
  172. package/ds-data-table-async/textwrapping/DSDataTable.text-wrap-toolbar.visual.spec.js +27 -0
  173. package/ds-data-table-async/toggle-cell-focus/DSDataTable.toggle-cell-enter-focus.func.spec.js +31 -0
  174. package/ds-data-table-async/vissibility/DSDataTable.vissibility.visual.spec.js +2 -0
  175. package/ds-dataviz/DSDataViz.axis.visual.spec.js +1 -2
  176. package/ds-dataviz/DSDataViz.ticks.visual.spec.js +1 -2
  177. package/ds-dataviz/DSDataVizCO.js +2 -0
  178. package/ds-dataviz/axecore/DSDataViz.axis.axe-core.func.spec.js +1 -1
  179. package/ds-dialog/DSDialog.visual.spec.js +16 -31
  180. package/ds-dialog/DSDialogCO.js +58 -0
  181. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.axe-core.func.spec.js +27 -0
  182. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.func.spec.js +56 -0
  183. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-critical.visual.spec.js +20 -0
  184. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.axe-core.func.spec.js +25 -0
  185. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.func.spec.js +52 -0
  186. package/ds-dialog/alert-dialog/DSDialog.alert-dialog-dismissible.visual.spec.js +20 -0
  187. package/ds-dialog/axe-core/DSDialog.accessible-form.axe-core.func.spec.js +25 -0
  188. package/ds-dialog/axe-core/DSDialog.basic.axe-core.func.spec.js +25 -0
  189. package/ds-dialog/axe-core/DSDialog.centered.axe-core.func.spec.js +25 -0
  190. package/ds-dialog/axe-core/DSDialog.decision.axe-core.func.spec.js +57 -0
  191. package/ds-dialog/axe-core/DSDialog.long-body.axe-core.func.spec.js +25 -0
  192. package/ds-dialog/axe-core/DSDialog.warning.axe-core.func.spec.js +24 -0
  193. package/ds-dialog/axe-core/DSDialog.wizard.axe-core.func.spec.js +28 -0
  194. package/ds-dialog/click-outside/DSDialog.click-outside.func.spec.js +31 -0
  195. package/ds-dialog/esc-close/DSDialog.esc-close.func.spec.js +31 -0
  196. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.axe-core.func.spec.js +46 -0
  197. package/ds-dialog/flexible-heading-level/DSDialog.flexible-heading-level.func.spec.js +50 -0
  198. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.axe-core.func.spec.js +25 -0
  199. package/ds-dialog/form-dialog-datepicker/DSDialog.form-datepicker.visual.spec.js +37 -0
  200. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.axe-core.func.spec.js +25 -0
  201. package/ds-dialog/single-button-footer/DSDialog.single-button-footer.visual.spec.js +20 -0
  202. package/ds-dialog/size-variants/DSDialog.size-variants.visual.spec.js +116 -0
  203. package/ds-floating-context/DSFloatingContextCO.js +10 -0
  204. package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
  205. package/ds-form-combobox-multi/DSComboboxMultiCO.js +38 -11
  206. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
  207. package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
  208. package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +19 -2
  209. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
  210. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.mouse.func.spec.js +0 -2
  211. package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.visual.spec.js +22 -0
  212. package/ds-form-combobox-multi/grouped/DSComboboxMulti.grouped.visual.spec.js +42 -0
  213. package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
  214. package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.func.spec.js +59 -0
  215. package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.visual.spec.js +39 -0
  216. package/ds-form-combobox-multi/skeleton/DSComboboxMulti.skeleton.visual.spec.js +25 -0
  217. package/ds-form-combobox-multi/theme-font/DSComboboxMulti.theme-font.func.spec.js +38 -0
  218. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.axe-core.func.spec.js +39 -0
  219. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.func.spec.js +39 -0
  220. package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.visual.spec.js +29 -0
  221. package/ds-form-combobox-single/DSComboboxSingleCO.js +27 -11
  222. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
  223. package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
  224. package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
  225. package/ds-form-combobox-single/creatable/DSComboboxSingle.creatable.visual.spec.js +30 -0
  226. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
  227. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.mouse.func.spec.js +0 -2
  228. package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.visual.spec.js +22 -0
  229. package/ds-form-combobox-single/grouped/DSComboboxSingle.grouped.visual.spec.js +45 -0
  230. package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
  231. package/ds-form-combobox-single/skeleton/DSComboboxSingle.skeleton.visual.spec.js +25 -0
  232. package/ds-form-combobox-single/theme-font/DSComboboxSingle.theme-font.func.spec.js +34 -0
  233. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.axe-core.func.spec.js +39 -0
  234. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.func.spec.js +39 -0
  235. package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.visual.spec.js +29 -0
  236. package/ds-form-date-range-picker/DateRangePicker.axe-core.spec.js +5 -0
  237. package/ds-form-date-range-picker/DateRangePicker.functional.spec.js +80 -18
  238. package/ds-form-date-range-picker/DateRangePickerCO.js +19 -0
  239. package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +66 -0
  240. package/ds-form-date-range-picker/grouped-field-error-announcement/DateRangePicker.grouped-field-error-announcement.func.spec.js +59 -0
  241. package/ds-form-date-range-picker/picker-callbacks/DateRangePicker.picker-callbacks.func.spec.js +36 -0
  242. package/ds-form-date-time-picker/DSControlledDateTimePickerCO.js +7 -0
  243. package/ds-form-date-time-picker/date-time-full/DateTimeFull.axe-core.func.spec.js +8 -1
  244. package/ds-form-date-time-picker/date-time-full/DateTimePicker.DateTimeFull.visual.spec.js +9 -0
  245. package/ds-form-date-time-picker/partial-date-open-focus/DateTimePicker.partial-date-open-focus.func.spec.js +45 -0
  246. package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
  247. package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
  248. package/ds-form-native-select/NativeSelectCO.js +6 -0
  249. package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
  250. package/ds-form-toggle/DSToggle.func.spec.js +20 -23
  251. package/ds-form-toggle/DSToggleCO.js +11 -2
  252. package/ds-global-header/GlobalHeader.announcements.func.spec.js +27 -0
  253. package/ds-global-header/GlobalHeader.axe-core.func.spec.js +41 -11
  254. package/ds-global-header/GlobalHeader.func.spec.js +70 -1
  255. package/ds-global-header/GlobalHeader.visual.spec.js +31 -0
  256. package/ds-global-header/GlobalHeaderCO.js +120 -2
  257. package/ds-global-header/app-picker-passthrough/GlobalHeader.app-picker-passthrough.func.spec.js +113 -0
  258. package/ds-global-header/popup-menu-focus/GlobalHeader.popup-menu-focus.func.spec.js +63 -0
  259. package/ds-global-header/popup-menu-slots/GlobalHeader.popup-menu-slots.func.spec.js +70 -0
  260. package/ds-global-header/search-toggle-slots/GlobalHeader.search-toggle-slots.func.spec.js +118 -0
  261. package/ds-global-header/toolbar-item-attributes/GlobalHeader.toolbar-item-attributes.func.spec.js +53 -0
  262. package/ds-grid/DSGridCO.js +20 -0
  263. package/ds-grid/layout-mode/DSGrid.layout-mode.func.spec.js +51 -0
  264. package/ds-grid/layout-mode/DSGrid.layout-mode.visual.spec.js +22 -0
  265. package/ds-hooks/DSHook.UseFontSizeMedia.visual.spec.js +5 -2
  266. package/ds-hooks/DSHook.usetree.func.spec.js +3 -2
  267. package/ds-hooks/DSHookCO.js +56 -23
  268. package/ds-hooks/useFocusStack/DSHook.useFocusStack.func.spec.js +83 -0
  269. package/ds-hooks/useFocusTrap/UseFocusTrapCO.js +2 -0
  270. package/ds-hooks/useFocusTrap/UseFocusTrapToggle.func.spec.js +48 -0
  271. package/ds-hooks/useMask/Number/UseNumberMask.axe-core.func.spec.js +48 -0
  272. package/ds-leftnavigation/LeftNavigationCO.js +2 -2
  273. package/ds-menu-button/slots/DSMenuButton.slots.axe-core.func.spec.js +28 -0
  274. package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +19 -0
  275. package/ds-modal-slide/ModalSlideCO.js +46 -0
  276. package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
  277. package/ds-modal-slide/heading-level/ModalSlide.headingLevel.axe-core.func.spec.js +25 -0
  278. package/ds-modal-slide/heading-level/ModalSlide.headingLevel.func.spec.js +25 -0
  279. package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +74 -0
  280. package/ds-modal-slide/slots/ModalSlide.slots.visual.spec.js +27 -0
  281. package/ds-notification-badge/DSNotificationBadge.visual.spec.js +17 -20
  282. package/ds-page-layout/PageLayoutCO.js +4 -4
  283. package/ds-pills-v2/DSPillsV2CO.js +12 -0
  284. package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.func.spec.js +53 -0
  285. package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.visual.spec.js +26 -0
  286. package/ds-pills-v2/disabled/DSPills.disabled.func.spec.js +53 -0
  287. package/ds-pills-v2/disabled/DSPills.disabled.visual.spec.js +33 -0
  288. package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
  289. package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
  290. package/ds-query-builder/DSQueryBuilder.visual.spec.js +6 -6
  291. package/ds-shuttle-v2/DSShuttleV2CO.js +15 -1
  292. package/ds-shuttle-v2/breadcrumb-a11y/DSShuttleV2.breadcrumb-a11y.func.spec.js +43 -0
  293. package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
  294. package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +30 -0
  295. package/ds-shuttle-v2/extra/DSShuttleV2.extra.visual.spec.js +8 -3
  296. package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +4 -2
  297. package/ds-shuttle-v2/skipped/DSShuttleV2.extra.axe-core.skipped.js +1 -1
  298. package/ds-shuttle-v2/skipped/DSShuttleV2.filter.axe-core.skipped.js +1 -1
  299. package/ds-shuttle-v2/skipped/DSShuttleV2.globalcheckbox.axe-core.skipped.js +1 -1
  300. package/ds-shuttle-v2/skipped/DSShuttleV2.items.axe-core.skipped.js +3 -3
  301. package/ds-shuttle-v2/skipped/DSShuttleV2.skipped.js +5 -5
  302. package/ds-slider-v2/DSSliderV2.func.spec.js +36 -25
  303. package/ds-slider-v2/DSSliderV2CO.js +10 -0
  304. package/ds-slider-v2/min-range/DSSliderV2.min-range.func.spec.js +69 -0
  305. package/ds-tab-button/DSTabButton.func.spec.js +1 -1
  306. package/ds-tabs/DSTabs.visual.spec.js +1 -2
  307. package/ds-tabs/DSTabsCO.js +2 -2
  308. package/ds-tabs/with-carousel/DSTabs.with-carousel.func.spec.js +22 -7
  309. package/ds-tabs/with-carousel/DSTabs.with-carousel.visual.spec.js +9 -9
  310. package/ds-tooltip-v3/DSTooltipV3CO.js +21 -0
  311. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
  312. package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
  313. package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.func.spec.js +45 -0
  314. package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.visual.spec.js +29 -0
  315. package/ds-treeview/DSTreeViewCO.js +25 -2
  316. package/ds-treeview/dragAndDrop/TreeView-dnd_keyboard.func.spec.js +96 -0
  317. package/ds-typography/DSTypographyCO.js +10 -0
  318. package/ds-typography/theme-font/DSTypography.theme-font.func.spec.js +30 -0
  319. package/package.json +149 -154
  320. package/paths.js +12 -6
  321. package/ds-card-v3/disabled/DSCardV3.disabled.visual.spec.js +0 -17
  322. package/ds-chat-tile/TileCO.js +0 -35
  323. package/ds-hooks/DSHook.func.spec.js +0 -60
  324. package/ds-hooks/useFocusStack/DSHook.useFocusStack.skipped.js +0 -57
  325. package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +0 -61
@@ -0,0 +1,28 @@
1
+ import DSDialog from '../DSDialogCO';
2
+ import DSWizardCO from '../../ds-wizard/DSWizardCO';
3
+ import { axeCoreCheck } from '../../helpers';
4
+
5
+ if (
6
+ (!browser.capabilities['ice:options'].isPhone &&
7
+ !browser.capabilities['ice:options'].isTablet &&
8
+ browser.capabilities.browserName === 'chrome') ||
9
+ browser.capabilities.browserName === 'Chrome'
10
+ ) {
11
+ describe('PUI-18396 - DSDialog:: Wizard dialog -Axe-Core', () => {
12
+ before('loading page', async () => {
13
+ const errorOnGo = await DSDialog.wizardURL.go();
14
+ if (errorOnGo) throw errorOnGo;
15
+ });
16
+
17
+ it('01: should pass axe-core scan', async () => {
18
+ const triggerBtn = await DSDialog.getTriggerBtn();
19
+ await triggerBtn.click();
20
+ const dialog = await DSDialog.getDialog();
21
+ await dialog.waitForDisplayed();
22
+ const step1 = await DSWizardCO.getStep(1);
23
+ await step1.waitForDisplayed();
24
+ const result = await axeCoreCheck();
25
+ expect(result.length).toBe(0);
26
+ });
27
+ });
28
+ }
@@ -0,0 +1,31 @@
1
+ import DSDialog from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // Tests for click-outside close behavior (onClickOutside callback)
5
+ describe('PUI-18397 - DSDialog:: click outside close -Func', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSDialog.clickOutsideURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should open dialog after clicking trigger', async () => {
12
+ const triggerBtn = await DSDialog.getTriggerBtn();
13
+ await triggerBtn.click();
14
+ const dialog = await DSDialog.getDialog();
15
+ await dialog.waitForDisplayed();
16
+ await expect(dialog).toBeDisplayedInViewport();
17
+ });
18
+
19
+ it('02: should close dialog on click outside', async () => {
20
+ const background = await DSDialog.getDialogBackground();
21
+ await background.click({ x: 10, y: 10 });
22
+ const dialog = await DSDialog.getDialog();
23
+ await expect(dialog).not.toBeDisplayed();
24
+ });
25
+
26
+ it('03: should return focus to trigger after close', async () => {
27
+ const triggerBtn = await DSDialog.getTriggerBtn();
28
+ await expect(triggerBtn).toBeFocused();
29
+ });
30
+ });
31
+ }
@@ -0,0 +1,31 @@
1
+ import { Key } from 'webdriverio';
2
+ import DSDialog from '../DSDialogCO';
3
+
4
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
5
+ // Tests for ESC key close behavior (onClose callback)
6
+ describe('PUI-18382 - DSDialog:: ESC key close -Func', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSDialog.escCloseURL.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+
12
+ it('01: should open dialog after clicking trigger', async () => {
13
+ const triggerBtn = await DSDialog.getTriggerBtn();
14
+ await triggerBtn.click();
15
+ const dialog = await DSDialog.getDialog();
16
+ await dialog.waitForDisplayed();
17
+ await expect(dialog).toBeDisplayedInViewport();
18
+ });
19
+
20
+ it('02: should close dialog on ESC key press', async () => {
21
+ await browser.keys(Key.Escape);
22
+ const dialog = await DSDialog.getDialog();
23
+ await expect(dialog).not.toBeDisplayed();
24
+ });
25
+
26
+ it('03: should return focus to trigger after ESC close', async () => {
27
+ const triggerBtn = await DSDialog.getTriggerBtn();
28
+ await expect(triggerBtn).toBeFocused();
29
+ });
30
+ });
31
+ }
@@ -0,0 +1,46 @@
1
+ import DSDialogCO from '../DSDialogCO';
2
+ import { axeCoreCheck } from '../../helpers';
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-18398 - DSDialog:: flexible heading level - Axe-Core', () => {
11
+ beforeEach(async () => {
12
+ const errorOnGo = await DSDialogCO.flexibleHeadingLevelURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should have no accessibility violations with h2 title', async () => {
17
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h2-button');
18
+ await triggerBtn.click();
19
+ const dialog = await DSDialogCO.getDialog();
20
+ await dialog.waitForDisplayed();
21
+
22
+ const result = await axeCoreCheck();
23
+ expect(result.length).toBe(0);
24
+ });
25
+
26
+ it('02: should have no accessibility violations with default h3 title', async () => {
27
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h3-button');
28
+ await triggerBtn.click();
29
+ const dialog = await DSDialogCO.getDialog();
30
+ await dialog.waitForDisplayed();
31
+
32
+ const result = await axeCoreCheck();
33
+ expect(result.length).toBe(0);
34
+ });
35
+
36
+ it('03: should have no accessibility violations with h4 title', async () => {
37
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h4-button');
38
+ await triggerBtn.click();
39
+ const dialog = await DSDialogCO.getDialog();
40
+ await dialog.waitForDisplayed();
41
+
42
+ const result = await axeCoreCheck();
43
+ expect(result.length).toBe(0);
44
+ });
45
+ });
46
+ }
@@ -0,0 +1,50 @@
1
+ import DSDialogCO from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ describe('PUI-18399 - DSDialog:: flexible heading level - Func', () => {
5
+ before('loading page', async () => {
6
+ const errorOnGo = await DSDialogCO.flexibleHeadingLevelURL.go();
7
+ if (errorOnGo) throw errorOnGo;
8
+ });
9
+
10
+ afterEach(async () => {
11
+ await browser.keys('Escape');
12
+ });
13
+
14
+ it('01: should render DSDialogTitle as h2 when as="h2" is passed', async () => {
15
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h2-button');
16
+ await triggerBtn.click();
17
+ const dialog = await DSDialogCO.getDialog();
18
+ await dialog.waitForDisplayed();
19
+
20
+ const title = await DSDialogCO.getDialogTitleByTestId('dialog-title-h2');
21
+ await expect(title).toBeExisting();
22
+ await expect((await title.getTagName()).toLowerCase()).toBe('h2');
23
+ await expect(title).toHaveText('Dialog title as h2');
24
+ });
25
+
26
+ it('02: should render DSDialogTitle as h3 by default', async () => {
27
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h3-button');
28
+ await triggerBtn.click();
29
+ const dialog = await DSDialogCO.getDialog();
30
+ await dialog.waitForDisplayed();
31
+
32
+ const title = await DSDialogCO.getDialogTitleByTestId('dialog-title-h3');
33
+ await expect(title).toBeExisting();
34
+ await expect((await title.getTagName()).toLowerCase()).toBe('h3');
35
+ await expect(title).toHaveText('Dialog title as h3 (default)');
36
+ });
37
+
38
+ it('03: should render DSDialogTitle as h4 when as="h4" is passed', async () => {
39
+ const triggerBtn = await DSDialogCO.getOpenDialogBtnByTestId('open-dialog-h4-button');
40
+ await triggerBtn.click();
41
+ const dialog = await DSDialogCO.getDialog();
42
+ await dialog.waitForDisplayed();
43
+
44
+ const title = await DSDialogCO.getDialogTitleByTestId('dialog-title-h4');
45
+ await expect(title).toBeExisting();
46
+ await expect((await title.getTagName()).toLowerCase()).toBe('h4');
47
+ await expect(title).toHaveText('Dialog title as h4');
48
+ });
49
+ });
50
+ }
@@ -0,0 +1,25 @@
1
+ import DSDialog from '../DSDialogCO';
2
+ import { axeCoreCheck } from '../../helpers';
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-18400 - DSDialog:: form dialog date picker -Axe-Core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.formDialogDatePickerURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should pass axe-core scan', async () => {
17
+ const triggerBtn = await DSDialog.getTriggerBtn();
18
+ await triggerBtn.click();
19
+ const dialog = await DSDialog.getDialog();
20
+ await dialog.waitForDisplayed();
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }
@@ -0,0 +1,37 @@
1
+ import DSDialog from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // Tests for form dialog with date picker integration
5
+ describe('PUI-18401 - DSDialog:: form dialog with date picker -Visual', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSDialog.formDialogDatePickerURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should display form dialog with date picker correctly', async () => {
12
+ const triggerBtn = await DSDialog.getTriggerBtn();
13
+ await triggerBtn.click();
14
+ const dialog = await DSDialog.getDialog();
15
+ await dialog.waitForDisplayed();
16
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('form-dialog-datepicker'));
17
+ await expect(snapshot).toEqual(0);
18
+ });
19
+ });
20
+
21
+ // Tests for form dialog with date picker workaround
22
+ describe('PUI-18402 - DSDialog:: form dialog date picker workaround -Visual', () => {
23
+ before('loading page', async () => {
24
+ const errorOnGo = await DSDialog.formDialogDatePickerWorkaroundURL.go();
25
+ if (errorOnGo) throw errorOnGo;
26
+ });
27
+
28
+ it('01: should display form dialog with workaround correctly', async () => {
29
+ const triggerBtn = await DSDialog.getTriggerBtn();
30
+ await triggerBtn.click();
31
+ const dialog = await DSDialog.getDialog();
32
+ await dialog.waitForDisplayed();
33
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('form-dialog-datepicker-workaround'));
34
+ await expect(snapshot).toEqual(0);
35
+ });
36
+ });
37
+ }
@@ -0,0 +1,25 @@
1
+ import DSDialog from '../DSDialogCO';
2
+ import { axeCoreCheck } from '../../helpers';
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-18403 - DSDialog:: single button footer -Axe-Core', () => {
11
+ before('loading page', async () => {
12
+ const errorOnGo = await DSDialog.singleButtonFooterURL.go();
13
+ if (errorOnGo) throw errorOnGo;
14
+ });
15
+
16
+ it('01: should pass axe-core scan', async () => {
17
+ const triggerBtn = await DSDialog.getTriggerBtn();
18
+ await triggerBtn.click();
19
+ const dialog = await DSDialog.getDialog();
20
+ await dialog.waitForDisplayed();
21
+ const result = await axeCoreCheck();
22
+ expect(result.length).toBe(0);
23
+ });
24
+ });
25
+ }
@@ -0,0 +1,20 @@
1
+ import DSDialog from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // Tests for UX use case: Modal Dialog with single button footer
5
+ describe('PUI-18404 - DSDialog:: single button footer layout -Visual', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSDialog.singleButtonFooterURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should display single button footer dialog correctly', async () => {
12
+ const triggerBtn = await DSDialog.getTriggerBtn();
13
+ await triggerBtn.click();
14
+ const dialog = await DSDialog.getDialog();
15
+ await dialog.waitForDisplayed();
16
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('single-button-footer'));
17
+ await expect(snapshot).toEqual(0);
18
+ });
19
+ });
20
+ }
@@ -0,0 +1,116 @@
1
+ import DSDialog from '../DSDialogCO';
2
+
3
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
4
+ // Visual tests for all dialog size/width variants
5
+ describe('PUI-18405 - DSDialog:: size small layout -Visual', () => {
6
+ before('loading page', async () => {
7
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
8
+ if (errorOnGo) throw errorOnGo;
9
+ });
10
+
11
+ it('01: should display small (320px) dialog correctly', async () => {
12
+ const btn = await DSDialog.getOpenDialogBySize('small');
13
+ await btn.click();
14
+ const dialog = await DSDialog.getDialog();
15
+ await dialog.waitForDisplayed();
16
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-small'));
17
+ await expect(snapshot).toEqual(0);
18
+ });
19
+ });
20
+
21
+ describe('PUI-18406 - DSDialog:: size default layout -Visual', () => {
22
+ before('loading page', async () => {
23
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
24
+ if (errorOnGo) throw errorOnGo;
25
+ });
26
+
27
+ it('01: should display default (576px) dialog correctly', async () => {
28
+ const btn = await DSDialog.getOpenDialogBySize('default');
29
+ await btn.click();
30
+ const dialog = await DSDialog.getDialog();
31
+ await dialog.waitForDisplayed();
32
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-default'));
33
+ await expect(snapshot).toEqual(0);
34
+ });
35
+ });
36
+
37
+ describe('PUI-18407 - DSDialog:: size medium layout -Visual', () => {
38
+ before('loading page', async () => {
39
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
40
+ if (errorOnGo) throw errorOnGo;
41
+ });
42
+
43
+ it('01: should display medium (656px) dialog correctly', async () => {
44
+ const btn = await DSDialog.getOpenDialogBySize('medium');
45
+ await btn.click();
46
+ const dialog = await DSDialog.getDialog();
47
+ await dialog.waitForDisplayed();
48
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-medium'));
49
+ await expect(snapshot).toEqual(0);
50
+ });
51
+ });
52
+
53
+ describe('PUI-18408 - DSDialog:: size large layout -Visual', () => {
54
+ before('loading page', async () => {
55
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
56
+ if (errorOnGo) throw errorOnGo;
57
+ });
58
+
59
+ it('01: should display large (848px) dialog correctly', async () => {
60
+ const btn = await DSDialog.getOpenDialogBySize('large');
61
+ await btn.click();
62
+ const dialog = await DSDialog.getDialog();
63
+ await dialog.waitForDisplayed();
64
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-large'));
65
+ await expect(snapshot).toEqual(0);
66
+ });
67
+ });
68
+
69
+ describe('PUI-18409 - DSDialog:: size x-large layout -Visual', () => {
70
+ before('loading page', async () => {
71
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
72
+ if (errorOnGo) throw errorOnGo;
73
+ });
74
+
75
+ it('01: should display x-large (1042px) dialog correctly', async () => {
76
+ const btn = await DSDialog.getOpenDialogBySize('x-large');
77
+ await btn.click();
78
+ const dialog = await DSDialog.getDialog();
79
+ await dialog.waitForDisplayed();
80
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-x-large'));
81
+ await expect(snapshot).toEqual(0);
82
+ });
83
+ });
84
+
85
+ describe('PUI-18410 - DSDialog:: size xx-large layout -Visual', () => {
86
+ before('loading page', async () => {
87
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
88
+ if (errorOnGo) throw errorOnGo;
89
+ });
90
+
91
+ it('01: should display xx-large (1440px) dialog correctly', async () => {
92
+ const btn = await DSDialog.getOpenDialogBySize('xx-large');
93
+ await btn.click();
94
+ const dialog = await DSDialog.getDialog();
95
+ await dialog.waitForDisplayed();
96
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-xx-large'));
97
+ await expect(snapshot).toEqual(0);
98
+ });
99
+ });
100
+
101
+ describe('PUI-18411 - DSDialog:: custom width layout -Visual', () => {
102
+ before('loading page', async () => {
103
+ const errorOnGo = await DSDialog.sizeVariantsURL.go();
104
+ if (errorOnGo) throw errorOnGo;
105
+ });
106
+
107
+ it('01: should display custom width (700px) dialog correctly', async () => {
108
+ const btn = await DSDialog.getOpenDialogBySize('custom');
109
+ await btn.click();
110
+ const dialog = await DSDialog.getDialog();
111
+ await dialog.waitForDisplayed();
112
+ const snapshot = await browser.percyCheckScreenshot(DSDialog.snapshotPath('size-custom-700'));
113
+ await expect(snapshot).toEqual(0);
114
+ });
115
+ });
116
+ }
@@ -10,6 +10,8 @@ export default class DSFloatingContextCO extends PageObject {
10
10
 
11
11
  static slotsURL = new Urlbuilder(PATH_E2E_FLOATING_CONTEXT, 'slots-test');
12
12
 
13
+ static positionsTestURL = new Urlbuilder(PATH_E2E_FLOATING_CONTEXT, 'positions-test');
14
+
13
15
  static async getFloatingContextWrapper() {
14
16
  return $('[data-testid="ds-floating-wrapper-root"]');
15
17
  }
@@ -18,6 +20,14 @@ export default class DSFloatingContextCO extends PageObject {
18
20
  return $('[data-testid="ds-floatingwrapper-content"]');
19
21
  }
20
22
 
23
+ static async getFloatingContextContents() {
24
+ return $$('[data-testid="ds-floatingwrapper-content"]');
25
+ }
26
+
27
+ static async getHelpButtons() {
28
+ return $$('[aria-label="Help"]');
29
+ }
30
+
21
31
  static async getFloatingContextArrowSlot() {
22
32
  return $('[data-dimsum-slot="dsFloatingwrapperArrow"]');
23
33
  }
@@ -0,0 +1,48 @@
1
+ // Tests for the fix introduced in PUI-14527 (useFloatingContext placement string type mismatch)
2
+ import { mouseOver } from '../../helpers';
3
+ import DSFloatingContextCO from '../DSFloatingContextCO';
4
+
5
+ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:options'].isTablet) {
6
+ describe('PUI-18529 - DSFloatingContext:: useFloatingContext placement directions - visual', () => {
7
+ before('loading page', async () => {
8
+ const errorOnGo = await DSFloatingContextCO.positionsTestURL.go();
9
+ if (errorOnGo) throw errorOnGo;
10
+ });
11
+
12
+ it('01: should display tooltip with right placement on hover', async () => {
13
+ const buttons = await DSFloatingContextCO.getHelpButtons();
14
+ await mouseOver(buttons[0]);
15
+ const contents = await DSFloatingContextCO.getFloatingContextContents();
16
+ await contents[0].waitForDisplayed();
17
+ const snapshot = await browser.percyCheckScreenshot(DSFloatingContextCO.snapshotPath('placement-right'));
18
+ await expect(snapshot).toEqual(0);
19
+ });
20
+
21
+ it('02: should display tooltip with top placement on hover', async () => {
22
+ const buttons = await DSFloatingContextCO.getHelpButtons();
23
+ await mouseOver(buttons[1]);
24
+ const contents = await DSFloatingContextCO.getFloatingContextContents();
25
+ await contents[0].waitForDisplayed();
26
+ const snapshot = await browser.percyCheckScreenshot(DSFloatingContextCO.snapshotPath('placement-top'));
27
+ await expect(snapshot).toEqual(0);
28
+ });
29
+
30
+ it('03: should display tooltip with bottom placement on hover', async () => {
31
+ const buttons = await DSFloatingContextCO.getHelpButtons();
32
+ await mouseOver(buttons[2]);
33
+ const contents = await DSFloatingContextCO.getFloatingContextContents();
34
+ await contents[0].waitForDisplayed();
35
+ const snapshot = await browser.percyCheckScreenshot(DSFloatingContextCO.snapshotPath('placement-bottom'));
36
+ await expect(snapshot).toEqual(0);
37
+ });
38
+
39
+ it('04: should display tooltip with left placement on hover', async () => {
40
+ const buttons = await DSFloatingContextCO.getHelpButtons();
41
+ await mouseOver(buttons[3]);
42
+ const contents = await DSFloatingContextCO.getFloatingContextContents();
43
+ await contents[0].waitForDisplayed();
44
+ const snapshot = await browser.percyCheckScreenshot(DSFloatingContextCO.snapshotPath('placement-left'));
45
+ await expect(snapshot).toEqual(0);
46
+ });
47
+ });
48
+ }
@@ -6,6 +6,10 @@ export default class DSComboboxMultiCO extends PageObject {
6
6
  // STORIES
7
7
  static basicTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'basic-test');
8
8
 
9
+ static loadingTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'loading-test');
10
+
11
+ static skeletonTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'skeleton-test');
12
+
9
13
  static applyAriaDisabled = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'apply-aria-disabled-test');
10
14
 
11
15
  static readOnly = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'read-only-test');
@@ -29,6 +33,14 @@ export default class DSComboboxMultiCO extends PageObject {
29
33
 
30
34
  static disabled = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'disabled-test');
31
35
 
36
+ static grouped = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'grouped-test');
37
+
38
+ static inlineTest = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'inline-test');
39
+
40
+ static withTooltip = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'with-tooltip-test');
41
+
42
+ static themeFontURL = new Urlbuilder(PATH_E2E_COMBOBOX_MULTI, 'theme-font-family-test');
43
+
32
44
  static controlledMenuStateWithSectionsSlotsTest = new Urlbuilder(
33
45
  PATH_E2E_COMBOBOX_MULTI_SLOTS,
34
46
  'controlled-menu-state-with-section-slots-test',
@@ -71,14 +83,6 @@ export default class DSComboboxMultiCO extends PageObject {
71
83
  return $$('[data-testid="combobox-input"]')[index];
72
84
  }
73
85
 
74
- static async getComboboxHiddenInput() {
75
- return $('input[aria-hidden="true"]');
76
- }
77
-
78
- static async getComboboxHiddenInputByIndex(index) {
79
- return $$('input[aria-hidden="true"]')[index];
80
- }
81
-
82
86
  static async getSelectedValues() {
83
87
  return $('[data-testid="combobox-selected-values"]');
84
88
  }
@@ -128,6 +132,15 @@ export default class DSComboboxMultiCO extends PageObject {
128
132
  return $$('[data-testid="ds-pill-close-icon"]')[index];
129
133
  }
130
134
 
135
+ static async getPillsByComboboxIndex(index) {
136
+ const selectedValues = await this.getSelectedValuesByIndex(index);
137
+ return selectedValues.$$('[data-testid="ds-pill-wrapper"]');
138
+ }
139
+
140
+ static async getPillCloseBtnByPillLabel(label) {
141
+ return $(`[data-testid="ds-pill-wrapper"][data-label="${label}"] [data-testid="ds-pill-close-icon"]`);
142
+ }
143
+
131
144
  // OPTIONS
132
145
  static async getOptionByLabel(label) {
133
146
  return $(`//li[@data-testid="combobox-option"]//span[contains(text(), "${label}")]/ancestor::li`);
@@ -142,7 +155,7 @@ export default class DSComboboxMultiCO extends PageObject {
142
155
  }
143
156
 
144
157
  static async getSimpleTruncateText() {
145
- return $('[data-testid="DS-SimpleTruncateText"]');
158
+ return $('[data-testid="combobox-selected-values"]');
146
159
  }
147
160
 
148
161
  static async getNumberOptions() {
@@ -191,7 +204,7 @@ export default class DSComboboxMultiCO extends PageObject {
191
204
  }
192
205
 
193
206
  static async getTooltip() {
194
- return $('[data-testid="popover-container"]');
207
+ return $('[data-testid="ds-floating-wrapper-root"]');
195
208
  }
196
209
 
197
210
  // actions
@@ -273,7 +286,7 @@ export default class DSComboboxMultiCO extends PageObject {
273
286
  }
274
287
 
275
288
  static async getComboboxSectionLabelByIndex(index) {
276
- return $$('[data-dimsum-slot="dsComboboxSectionLabel"]')[index];
289
+ return $$('[data-dimsum-parent-slot="dsComboboxSectionLabel"]')[index];
277
290
  }
278
291
 
279
292
  static async getComboboxSectionWrapperSlotByIndex(index) {
@@ -283,4 +296,18 @@ export default class DSComboboxMultiCO extends PageObject {
283
296
  static snapshotPath(example = 'basic') {
284
297
  return PageObject.getSnapshotPathBuilder('DSComboboxMulti', example, 'ds-combobox-multi');
285
298
  }
299
+
300
+ // The selection wrapper and the selected pills' labels both render through
301
+ // styled(DSTypography), so the owner slot lands on `data-dimsum-parent-slot`.
302
+ static async getThemedSelection() {
303
+ return $('[data-testid="theme-font-sentinel"] [data-dimsum-parent-slot="dsComboboxSelection"]');
304
+ }
305
+
306
+ static async getFallbackSelection() {
307
+ return $('[data-testid="theme-font-fallback"] [data-dimsum-parent-slot="dsComboboxSelection"]');
308
+ }
309
+
310
+ static async getThemedPillLabel() {
311
+ return $('[data-testid="theme-font-sentinel"] [data-dimsum-parent-slot="dsPillLabel"]');
312
+ }
286
313
  }
@@ -0,0 +1,55 @@
1
+ import DSComboboxMultiCO from '../DSComboboxMultiCO';
2
+ import { axeCoreCheck } from '../../helpers';
3
+
4
+ // Tests for the fix introduced in PUI-18034
5
+ // (busy listbox with aria-busy + aria-label so screen readers announce the
6
+ // in-progress state via the input's aria-controls linkage; this spec verifies
7
+ // the busy listbox surface passes axe-core).
8
+ if (
9
+ (!browser.capabilities['ice:options'].isPhone &&
10
+ !browser.capabilities['ice:options'].isTablet &&
11
+ browser.capabilities.browserName === 'chrome') ||
12
+ browser.capabilities.browserName === 'Chrome'
13
+ ) {
14
+ describe('PUI-18471 - ComboboxMulti:: busy listbox while isLoading - axe-core', () => {
15
+ before('loading page', async () => {
16
+ const errorOnGo = await DSComboboxMultiCO.loadingTest.go();
17
+ if (errorOnGo) throw errorOnGo;
18
+ });
19
+
20
+ it('01: busy listbox while isLoading should pass axe-core scan', async () => {
21
+ const dropdownMenuBtn = await DSComboboxMultiCO.getDropDownMenuBtn();
22
+ await dropdownMenuBtn.click();
23
+
24
+ const listbox = await DSComboboxMultiCO.getComboListbox();
25
+ await listbox.waitForExist();
26
+
27
+ // `scrollable-region-focusable` is disabled here as a documented false positive:
28
+ // in the busy/isLoading state the fast-list container is empty, so the region is
29
+ // not authentically scrollable from a user's perspective — TanStack Virtual leaves
30
+ // a residual scrollHeight that triggers the rule. The container's tabindex=-1 is a
31
+ // long-standing Firefox scroll-prevention workaround. The rule remains active for
32
+ // all other states (open menu with items, read-only, etc.).
33
+ const result = await axeCoreCheck({ extraDisabledRules: ['scrollable-region-focusable'] });
34
+ expect(result.length).toBe(0);
35
+ });
36
+ });
37
+
38
+ describe('PUI-18472 - ComboboxMulti:: busy listbox while isSkeleton - axe-core', () => {
39
+ before('loading page', async () => {
40
+ const errorOnGo = await DSComboboxMultiCO.skeletonTest.go();
41
+ if (errorOnGo) throw errorOnGo;
42
+ });
43
+
44
+ it('01: busy listbox while isSkeleton should pass axe-core scan', async () => {
45
+ const dropdownMenuBtn = await DSComboboxMultiCO.getDropDownMenuBtn();
46
+ await dropdownMenuBtn.click();
47
+
48
+ const listbox = await DSComboboxMultiCO.getComboListbox();
49
+ await listbox.waitForExist();
50
+
51
+ const result = await axeCoreCheck();
52
+ expect(result.length).toBe(0);
53
+ });
54
+ });
55
+ }