dimsum-e2e-tests 3.70.0-next.6 → 3.70.0-next.60
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.
- package/CHANGELOG.md +300 -0
- package/ds-accordion/DSAccordion.visual.spec.js +6 -0
- package/ds-accordion/DSAccordionCO.js +15 -3
- package/ds-accordion/QA_NOTES.md +105 -0
- package/ds-accordion/controlled/DSAccordion.controlled.func.spec.js +23 -0
- package/ds-accordion/header-structure/DSAccordion.header-structure.func.spec.js +65 -0
- package/ds-accordion/input-inside/DSAccordion.input-inside.func.spec.js +19 -0
- package/ds-apppicker/DSAppPickerCO.js +1 -1
- package/ds-apppicker/truncation/DSAppPicker.truncation.visual.spec.js +5 -9
- package/ds-autocomplete/DSAutocomplete.visual.spec.js +34 -0
- package/ds-autocomplete/DSAutocompleteCO.js +36 -1
- package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.axe-core.func.spec.js +50 -0
- package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.func.spec.js +122 -0
- package/ds-autocomplete/aria-busy-loading/DSAutocomplete.aria-busy-loading.visual.spec.js +48 -0
- package/ds-autocomplete/slots/DSAutocomplete.slots.func.spec.js +6 -1
- package/ds-button-v3/DSButtonV3.aria-disabled-attribute.func.spec.js +33 -0
- package/ds-button-v3/DSButtonV3CO.js +10 -0
- package/ds-button-v3/theme-font/DSButtonV3.theme-font.func.spec.js +30 -0
- package/ds-card/DSCard.cardv2_v1.func.spec.js +54 -0
- package/ds-card/DSCard.cardv2_v1.visual.spec.js +29 -0
- package/ds-card/DSCardCO.js +50 -0
- package/ds-card/detail-slots/DSCard.detail-slots.axe-core.func.spec.js +29 -0
- package/ds-card/detail-slots/DSCard.detail-slots.func.spec.js +72 -0
- package/ds-card/detail-slots/DSCard.detail-slots.visual.spec.js +19 -0
- package/ds-card-v3/DSCardV3CO.js +93 -1
- package/ds-card-v3/accordion/DSCardV3.accordion-aria-structure.func.spec.js +41 -0
- package/ds-card-v3/accordion/DSCardV3.accordion-aria.keyboard.func.spec.js +49 -0
- package/ds-card-v3/accordion/DSCardV3.accordion.axe-core.func.spec.js +28 -0
- package/ds-card-v3/accordion/DSCardV3.accordion.visual.spec.js +4 -6
- package/ds-card-v3/action/DSCardV3.action.axe-core.func.spec.js +24 -0
- package/ds-card-v3/action/DSCardV3.action.func.spec.js +53 -0
- package/ds-card-v3/action/DSCardV3.action.visual.spec.js +28 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.axe-core.func.spec.js +42 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.func.spec.js +129 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.reorder.func.spec.js +73 -0
- package/ds-card-v3/drag-n-drop/DSCardV3.DnD.visual.spec.js +5 -12
- package/ds-card-v3/global-attributes/DSCardV3.global-attributes.axe-core.func.spec.js +33 -0
- package/ds-card-v3/global-attributes/DSCardV3.global-attributes.visual.spec.js +20 -0
- package/ds-card-v3/multi-select/DSCardV3.multi-select.aria-grouping.func.spec.js +24 -0
- package/ds-card-v3/multi-select/DSCardV3.multiselect.axe-core.func.spec.js +47 -0
- package/ds-card-v3/multi-select/DSCardV3.multiselect.keyboard.func.spec.js +65 -0
- package/ds-card-v3/multi-select/DSCardV3.multiselect.visual.spec.js +17 -0
- package/ds-card-v3/multiple-action/DSCardV3.multiple-action.axe-core.func.spec.js +35 -0
- package/ds-card-v3/multiple-action/DSCardV3.multiple-action.func.spec.js +53 -0
- package/ds-card-v3/multiple-action/DSCardV3.multiple-action.visual.spec.js +18 -0
- package/ds-card-v3/multiple-control/DSCardV3.multi-control.axe-core.func.spec.js +34 -0
- package/ds-card-v3/multiple-control/DSCardV3.multi-control.func.spec.js +26 -0
- package/ds-card-v3/multiple-control/DSCardV3.multi-control.visual.spec.js +29 -0
- package/ds-card-v3/no-action/DSCardV3.no-action.axe-core.func.spec.js +22 -0
- package/ds-card-v3/no-action/DSCardV3.no-action.func.spec.js +23 -0
- package/ds-card-v3/no-action/DSCardV3.no-action.visual.spec.js +15 -0
- package/ds-card-v3/notification-badges/DSCardV3.notification-badges.axe-core.func.spec.js +33 -0
- package/ds-card-v3/notification-badges/DSCardV3.notification-badges.func.spec.js +19 -0
- package/ds-card-v3/notification-badges/DSCardV3.notification-badges.visual.spec.js +28 -0
- package/ds-card-v3/reflow/DSCardV3.reflow.axe-core.func.spec.js +28 -0
- package/ds-card-v3/reflow/DSCardV3.reflow.func.spec.js +36 -0
- package/ds-card-v3/reflow/DSCardV3.reflow.visual.spec.js +1 -2
- package/ds-card-v3/single-select/DSCardV3.single-select.aria-grouping.func.spec.js +24 -0
- package/ds-card-v3/single-select/DSCardV3.single-select.axe-core.func.spec.js +37 -0
- package/ds-card-v3/single-select/DSCardV3.single-select.visual.spec.js +1 -2
- package/ds-card-v3/slots/DSCardV3.slots.visual.spec.js +1 -2
- package/ds-card-v3/variant-accented/DSCardV3.variant-accented.axe-core.func.spec.js +45 -0
- package/ds-card-v3/variant-accented/DSCardV3.variant-accented.func.spec.js +28 -0
- package/ds-card-v3/variant-accented/DSCardV3.variant-accented.visual.spec.js +35 -0
- package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.axe-core.func.spec.js +35 -0
- package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.func.spec.js +53 -0
- package/ds-card-v3/variant-accented-disabled/DSCardV3.variant-accented-disabled.visual.spec.js +28 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.axe-core.func.spec.js +22 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.func.spec.js +61 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variant-disabled.visual.spec.js +20 -0
- package/ds-card-v3/variant-disabled/DSCardV3.variantDisabled-non-interactive.func.spec.js +25 -0
- package/ds-chat/DSChat.axe-core.func.spec.js +2 -2
- package/ds-chat/DSChat.visual.spec.js +4 -4
- package/ds-chat/DSChatCO.js +18 -24
- package/ds-chat/bubbles/slots/DSChatBubble.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.func.spec.js +49 -0
- package/ds-chat/bubbles/slots/DSChatBubble.slots.visual.spec.js +25 -0
- package/ds-chat/card/slots/DSChatCard.slots.axe-core.func.spec.js +24 -0
- package/ds-chat/card/slots/DSChatCard.slots.func.spec.js +47 -0
- package/ds-chat/card/slots/DSChatCard.slots.visual.spec.js +18 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.func.spec.js +32 -0
- package/ds-chat/card/truncated-text/DSChatCard.truncated-text.visual.spec.js +26 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.axe-core.func.spec.js +23 -0
- package/ds-chat/card/with-notification-badges/DSChatCard.with-notification-badges.visual.spec.js +17 -0
- package/ds-chat/components/BubbleCO.js +46 -3
- package/ds-chat/components/CardCO.js +75 -0
- package/ds-chat/components/ComposerCO.js +6 -6
- package/ds-chat/components/FloatingButtonCO.js +5 -3
- package/ds-chat/components/HeaderCO.js +2 -2
- package/ds-chat/components/TileCO.js +82 -0
- package/ds-chat/components/index.js +3 -2
- package/ds-chat/floatingbutton/DSChat-floating-button.visual.spec.js +1 -1
- package/ds-chat/loadmore/DSChat-loadmore.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.func.spec.js +1 -1
- package/{ds-chat-tile → ds-chat/tile}/DSChat-tile.visual.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.axe-core.func.spec.js +2 -2
- package/{ds-chat-tile → ds-chat/tile}/aria-disabled/DSChat-tile.aria-disabled.visual.spec.js +1 -1
- package/ds-chat/tile/slots/DSChatTile.slots.func.spec.js +53 -0
- package/ds-chat/tile/slots/DSChatTile.slots.visual.spec.js +18 -0
- package/ds-controlled-form/ds-combobox/DSComboboxCO.js +2 -2
- package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable-tooltip.func.spec.js +47 -0
- package/ds-controlled-form/ds-combobox/creatable/DSCombobox.creatable.visual.spec.js +12 -21
- package/ds-controlled-form/ds-combobox/disabled/DSCombobox.disabled.visual.spec.js +6 -1
- package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.axe-core.basic.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox/Basic/DSControlledCheckbox.basic.visual.spec.js +56 -0
- package/ds-controlled-form/ds-controlled-checkbox/DSControlledCheckboxCO.js +15 -1
- package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.axe-core.disabled.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/Disabled/DSControlledCheckbox.disabled.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.axe-core.hasError.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox/HasError/DSControlledCheckbox.has-error.visual.spec.js +71 -1
- package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.axe-core.mixed.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.axe-core.read-only.func.spec.js +3 -3
- package/ds-controlled-form/ds-controlled-checkbox/ReadOnly/DSControlledCheckbox.read-only.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.axe-core.with-tooltip.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/WithTooltip/DSControlledCheckbox.with-tooltip.visual.spec.js +1 -3
- package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.axe-core.wrap-label.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/WrapLabel/DSControlledCheckbox.wrap-label.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.aria-disabled.visual.spec.js +2 -6
- package/ds-controlled-form/ds-controlled-checkbox/aria-disabled/DSControlledCheckbox.axe-core.aria-disabled.func.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-checkbox/theme-font/DSControlledCheckbox.theme-font.func.spec.js +30 -0
- package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.axe-core.func.spec.js +4 -4
- package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.visual.spec.js +1 -1
- package/ds-controlled-form/ds-controlled-inputgroup/DSControlledInputGroupCO.js +1 -1
- package/ds-controlled-form/ds-controlled-radio/DSControlledRadioCO.js +10 -0
- package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.axe-core.func.spec.js +16 -2
- package/ds-controlled-form/ds-controlled-radio/aria-disabled/DSControlledRadio.aria-disabled.func.spec.js +37 -0
- package/ds-controlled-form/ds-controlled-radio/theme-font/DSControlledRadio.theme-font.func.spec.js +30 -0
- package/ds-controlled-form/react-hook-form/ReactHook.func.spec.js +1 -3
- package/ds-data-table-async/DSDataTableCO.js +189 -12
- package/ds-data-table-async/basic/DSDataTable.basic.visual.spec.js +1 -1
- package/ds-data-table-async/components/FilterBarCO.js +7 -0
- package/ds-data-table-async/components/FiltersCO.js +1 -1
- package/ds-data-table-async/components/HeaderCO.js +45 -1
- package/ds-data-table-async/dnd/DSDataTable.dnd-keyboard-scroll.func.spec.js +51 -0
- package/ds-data-table-async/filter-menu-close/DSDataTable.filter-menu-close.func.spec.js +77 -0
- package/ds-data-table-async/filter-popover-boundary/DSDataTable.filter-popover-boundary.func.spec.js +98 -0
- package/ds-data-table-async/filters/DSDataTable.filters-creatable-active-descendant.func.spec.js +51 -0
- package/ds-data-table-async/filters/DSDataTable.filters-creatable.func.spec.js +39 -0
- package/ds-data-table-async/filters/DSDataTable.filters.axe-core.func.spec.js +11 -9
- package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatablemultiselect.keyboard.func.spec.js +2 -2
- package/ds-data-table-async/filtersV2/DSDataTable.filtersV2-creatableselect.keyboard.func.spec.js +2 -2
- package/ds-data-table-async/filtersV2/DSDataTable.filtersV2.axe-core.func.spec.js +45 -29
- package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.axe-core.func.spec.js +23 -0
- package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.func.spec.js +50 -0
- package/ds-data-table-async/filtersV2/pill-label/DSDataTable.pillLabel.visual.spec.js +21 -0
- package/ds-data-table-async/header-affordances/DSDataTable.header-affordances.func.spec.js +92 -0
- package/ds-data-table-async/helpers/getInputSelection.js +6 -0
- package/ds-data-table-async/helpers/index.js +1 -0
- package/ds-data-table-async/keyboard-scroll/DSDataTable.keyboard-scroll.func.spec.js +39 -0
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.keyboard.func.spec.js +8 -7
- package/ds-data-table-async/menubutton/DSDataTable.MenuButton.mouse.func.spec.js +6 -7
- package/ds-data-table-async/pagination/DSDataTable.pagination.func.spec.js +3 -2
- package/ds-data-table-async/resizable/DSDataTable.resize-min-clamp.func.spec.js +72 -0
- package/ds-data-table-async/resizable/DSDataTable.resizerA11y.axe-core.func.spec.js +43 -0
- package/ds-data-table-async/resizable/DSDataTable.resizerA11y.func.spec.js +92 -0
- package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.axe-core.func.spec.js +23 -0
- package/ds-data-table-async/textwrapping/DSDataTable.header-wrap-alignment.visual.spec.js +106 -0
- package/ds-data-table-async/textwrapping/DSDataTable.text-wrap-toolbar.visual.spec.js +27 -0
- package/ds-data-table-async/toggle-cell-focus/DSDataTable.toggle-cell-enter-focus.func.spec.js +31 -0
- package/ds-data-table-async/vissibility/DSDataTable.vissibility.visual.spec.js +2 -0
- package/ds-dataviz/DSDataVizCO.js +2 -0
- package/ds-dataviz/axecore/DSDataViz.axis.axe-core.func.spec.js +1 -1
- package/ds-floating-context/DSFloatingContextCO.js +10 -0
- package/ds-floating-context/placement/DSFloatingContext.placement.visual.spec.js +48 -0
- package/ds-form-combobox-multi/DSComboboxMultiCO.js +22 -3
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.axe-core.func.spec.js +55 -0
- package/ds-form-combobox-multi/aria-busy-loading/DSComboboxMulti.aria-busy-loading.func.spec.js +57 -0
- package/ds-form-combobox-multi/aria-disabled/DSComboboxMulti.aria-disabled.visual.spec.js +15 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-multi/disabled/DSComboboxMulti.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-multi/grouped/DSComboboxMulti.grouped.visual.spec.js +42 -0
- package/ds-form-combobox-multi/inline/DSComboboxMulti.inline.visual.spec.js +21 -0
- package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.func.spec.js +59 -0
- package/ds-form-combobox-multi/pills/DSComboboxMulti.pills.visual.spec.js +39 -0
- package/ds-form-combobox-multi/skeleton/DSComboboxMulti.skeleton.visual.spec.js +25 -0
- package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.axe-core.func.spec.js +39 -0
- package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.func.spec.js +39 -0
- package/ds-form-combobox-multi/with-tooltip/DSComboboxMulti.with-tooltip.visual.spec.js +29 -0
- package/ds-form-combobox-single/DSComboboxSingleCO.js +15 -3
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.axe-core.func.spec.js +49 -0
- package/ds-form-combobox-single/aria-busy-loading/DSComboboxSingle.aria-busy-loading.func.spec.js +54 -0
- package/ds-form-combobox-single/aria-disabled/DSComboboxSingle.aria-disabled.visual.spec.js +18 -0
- package/ds-form-combobox-single/creatable/DSComboboxSingle.creatable.visual.spec.js +30 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.axe-core.func.spec.js +24 -0
- package/ds-form-combobox-single/disabled/DSComboboxSingle.disabled.visual.spec.js +22 -0
- package/ds-form-combobox-single/grouped/DSComboboxSingle.grouped.visual.spec.js +45 -0
- package/ds-form-combobox-single/inline/DSComboboxSingle.inline.visual.spec.js +23 -0
- package/ds-form-combobox-single/skeleton/DSComboboxSingle.skeleton.visual.spec.js +25 -0
- package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.axe-core.func.spec.js +39 -0
- package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.func.spec.js +39 -0
- package/ds-form-combobox-single/with-tooltip/DSComboboxSingle.with-tooltip.visual.spec.js +29 -0
- package/ds-form-date-range-picker/DateRangePicker.axe-core.spec.js +5 -0
- package/ds-form-date-range-picker/DateRangePicker.functional.spec.js +80 -18
- package/ds-form-date-range-picker/DateRangePickerCO.js +13 -0
- package/ds-form-date-range-picker/date-segment-aria-labels/DateRangePicker.date-segment-aria-labels.func.spec.js +66 -0
- package/ds-form-date-range-picker/grouped-field-error-announcement/DateRangePicker.grouped-field-error-announcement.func.spec.js +59 -0
- package/ds-form-date-time-picker/DSControlledDateTimePickerCO.js +7 -0
- package/ds-form-date-time-picker/date-time-full/DateTimeFull.axe-core.func.spec.js +8 -1
- package/ds-form-date-time-picker/date-time-full/DateTimePicker.DateTimeFull.visual.spec.js +9 -0
- package/ds-form-date-time-picker/partial-date-open-focus/DateTimePicker.partial-date-open-focus.func.spec.js +45 -0
- package/ds-form-native-select/NativeSelect.axe-core.func.spec.js +39 -0
- package/ds-form-native-select/NativeSelect.visual.spec.js +33 -0
- package/ds-form-native-select/NativeSelectCO.js +6 -0
- package/ds-form-native-select/option-selection/NativeSelect.option-selection.func.spec.js +25 -0
- package/ds-form-toggle/DSToggle.func.spec.js +20 -23
- package/ds-form-toggle/DSToggleCO.js +11 -2
- package/ds-global-header/GlobalHeader.announcements.func.spec.js +27 -0
- package/ds-global-header/GlobalHeader.axe-core.func.spec.js +15 -15
- package/ds-global-header/GlobalHeader.func.spec.js +70 -1
- package/ds-global-header/GlobalHeaderCO.js +25 -1
- package/ds-hooks/DSHook.usetree.func.spec.js +3 -2
- package/ds-hooks/DSHookCO.js +1 -22
- package/ds-hooks/useFocusStack/DSHook.useFocusStack.func.spec.js +83 -0
- package/ds-hooks/useFocusTrap/UseFocusTrapCO.js +2 -0
- package/ds-hooks/useFocusTrap/UseFocusTrapToggle.func.spec.js +48 -0
- package/ds-hooks/useMask/Number/UseNumberMask.axe-core.func.spec.js +48 -0
- package/ds-leftnavigation/LeftNavigationCO.js +2 -2
- package/ds-menu-button/DSMenuButtonCO.js +23 -0
- package/ds-menu-button/slots/DSMenuButton.slots.axe-core.func.spec.js +28 -0
- package/ds-menu-button/slots/DSMenuButton.slots.func.spec.js +59 -0
- package/ds-menu-button/slots/DSMenuButton.slots.visual.spec.js +26 -0
- package/ds-modal-slide/ModalSlideCO.js +46 -0
- package/ds-modal-slide/custom-header/ModalSlide.customHeader.focusRing.visual.spec.js +2 -1
- package/ds-modal-slide/heading-level/ModalSlide.headingLevel.axe-core.func.spec.js +25 -0
- package/ds-modal-slide/heading-level/ModalSlide.headingLevel.func.spec.js +25 -0
- package/ds-modal-slide/slots/ModalSlide.slots.func.spec.js +74 -0
- package/ds-modal-slide/slots/ModalSlide.slots.visual.spec.js +27 -0
- package/ds-notification-badge/DSNotificationBadge.visual.spec.js +17 -20
- package/ds-page-layout/PageLayoutCO.js +4 -4
- package/ds-pills-v2/DSPillsV2CO.js +12 -0
- package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.func.spec.js +53 -0
- package/ds-pills-v2/apply-aria-disabled/DSPills.applyAriaDisabled.visual.spec.js +26 -0
- package/ds-pills-v2/disabled/DSPills.disabled.func.spec.js +53 -0
- package/ds-pills-v2/disabled/DSPills.disabled.visual.spec.js +33 -0
- package/ds-progress-indicator/DSProgressIndicator.axe-core.func.spec.js +2 -0
- package/ds-progress-indicator/DSProgressIndicatorCO.js +1 -1
- package/ds-shuttle-v2/DSShuttleV2CO.js +15 -1
- package/ds-shuttle-v2/breadcrumb-a11y/DSShuttleV2.breadcrumb-a11y.func.spec.js +43 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.func.spec.js +37 -0
- package/ds-shuttle-v2/explicit-selection-ui/DSShuttleV2.explicit-selection-ui.visual.spec.js +30 -0
- package/ds-shuttle-v2/extra/DSShuttleV2.extra.visual.spec.js +8 -3
- package/ds-shuttle-v2/items/DSShuttleV2.items.func.spec.js +4 -2
- package/ds-shuttle-v2/skipped/DSShuttleV2.extra.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.filter.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.globalcheckbox.axe-core.skipped.js +1 -1
- package/ds-shuttle-v2/skipped/DSShuttleV2.items.axe-core.skipped.js +3 -3
- package/ds-shuttle-v2/skipped/DSShuttleV2.skipped.js +5 -5
- package/ds-slider-v2/DSSliderV2.func.spec.js +36 -25
- package/ds-slider-v2/DSSliderV2CO.js +10 -0
- package/ds-slider-v2/min-range/DSSliderV2.min-range.func.spec.js +69 -0
- package/ds-tab-button/DSTabButton.func.spec.js +1 -1
- package/ds-tooltip-v3/DSTooltipV3CO.js +21 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.axe-core.func.spec.js +23 -0
- package/ds-tooltip-v3/aria-tooltip-pattern/DSTooltipV3.aria-tooltip-pattern.func.spec.js +29 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.func.spec.js +45 -0
- package/ds-tooltip-v3/dialog/DSTooltipV3.dialog.visual.spec.js +29 -0
- package/ds-treeview/DSTreeViewCO.js +25 -2
- package/ds-treeview/dragAndDrop/TreeView-dnd_keyboard.func.spec.js +96 -0
- package/ds-typography/DSTypographyCO.js +10 -0
- package/ds-typography/theme-font/DSTypography.theme-font.func.spec.js +30 -0
- package/package.json +150 -153
- package/paths.js +9 -6
- package/ds-card-v3/disabled/DSCardV3.disabled.visual.spec.js +0 -17
- package/ds-chat-tile/TileCO.js +0 -35
- package/ds-hooks/DSHook.func.spec.js +0 -60
- package/ds-hooks/useFocusStack/DSHook.useFocusStack.skipped.js +0 -57
- package/ds-treeview/dragAndDrop/TreeView-dnd_mouse.func.spec.js +0 -61
|
@@ -19,24 +19,24 @@ if (
|
|
|
19
19
|
const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
|
|
20
20
|
await checkbox.waitForExist();
|
|
21
21
|
const result = await axeCoreCheck();
|
|
22
|
-
expect(result
|
|
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
|
|
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.getCheckboxByIndex(0);
|
|
31
31
|
await mouseOver(checkbox);
|
|
32
32
|
const result = await axeCoreCheck();
|
|
33
|
-
expect(result
|
|
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.getCheckboxByIndex(2);
|
|
37
37
|
await checkbox.click();
|
|
38
38
|
const result = await axeCoreCheck();
|
|
39
|
-
expect(result
|
|
39
|
+
await expect(result).toHaveLength(0);
|
|
40
40
|
});
|
|
41
41
|
});
|
|
42
42
|
}
|
package/ds-controlled-form/ds-controlled-checkbox/Mixed/DSControlledCheckbox.mixed.visual.spec.js
CHANGED
|
@@ -12,7 +12,7 @@ describe('PUI-7100 - DSControlledCheckbox - Visual Test - mixed', () => {
|
|
|
12
12
|
await checkbox1.click();
|
|
13
13
|
await checkbox1.click();
|
|
14
14
|
await mouseOver(checkbox2);
|
|
15
|
-
const snapshot = await browser.
|
|
15
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
16
16
|
await expect(snapshot).toEqual(0);
|
|
17
17
|
});
|
|
18
18
|
});
|
|
@@ -17,18 +17,18 @@ if (
|
|
|
17
17
|
const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
|
|
18
18
|
await checkbox.waitForExist();
|
|
19
19
|
const result = await axeCoreCheck();
|
|
20
|
-
expect(result
|
|
20
|
+
await expect(result).toHaveLength(0);
|
|
21
21
|
});
|
|
22
22
|
it('02: Evaluate checkbox accessibility with axe-core (focused)', async () => {
|
|
23
23
|
await browser.keys(Key.Tab);
|
|
24
24
|
const result = await axeCoreCheck();
|
|
25
|
-
expect(result
|
|
25
|
+
await expect(result).toHaveLength(0);
|
|
26
26
|
});
|
|
27
27
|
it('03: Evaluate checkbox accessibility with axe-core (hovered)', async () => {
|
|
28
28
|
const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
|
|
29
29
|
await mouseOver(checkbox);
|
|
30
30
|
const result = await axeCoreCheck();
|
|
31
|
-
expect(result
|
|
31
|
+
await expect(result).toHaveLength(0);
|
|
32
32
|
});
|
|
33
33
|
});
|
|
34
34
|
}
|
|
@@ -14,7 +14,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
14
14
|
await checkbox1.click();
|
|
15
15
|
await checkbox1.click();
|
|
16
16
|
await mouseOver(checkbox2);
|
|
17
|
-
const snapshot = await browser.
|
|
17
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
18
18
|
await expect(snapshot).toEqual(0);
|
|
19
19
|
});
|
|
20
20
|
});
|
|
@@ -11,9 +11,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
11
11
|
await browser.eyesOpen();
|
|
12
12
|
const checkboxLabel = await DSControlledCheckboxCO.getCheckboxLabelByIndex(4);
|
|
13
13
|
await mouseOver(checkboxLabel);
|
|
14
|
-
const snapshot = await browser.
|
|
15
|
-
DSControlledCheckboxCO.snapshotPath('checkbox-tooltip-longword'),
|
|
16
|
-
);
|
|
14
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
17
15
|
await expect(snapshot).toEqual(0);
|
|
18
16
|
});
|
|
19
17
|
});
|
|
@@ -10,7 +10,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
10
10
|
await browser.eyesOpen();
|
|
11
11
|
const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(1);
|
|
12
12
|
await checkbox.waitForExist();
|
|
13
|
-
const snapshot = await browser.
|
|
13
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
14
14
|
await expect(snapshot).toEqual(0);
|
|
15
15
|
});
|
|
16
16
|
});
|
|
@@ -11,18 +11,14 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
11
11
|
await browser.eyesOpen();
|
|
12
12
|
const firstcheckbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
|
|
13
13
|
await firstcheckbox.click();
|
|
14
|
-
const snapshot = await browser.
|
|
15
|
-
DSControlledCheckboxCO.snapshotPath('checkbox-aria-disabled-mouse'),
|
|
16
|
-
);
|
|
14
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
17
15
|
await expect(snapshot).toEqual(0);
|
|
18
16
|
});
|
|
19
17
|
it('02: The second aria-disabled checkbox should be focused - KB nav', async () => {
|
|
20
18
|
await browser.eyesOpen();
|
|
21
19
|
await browser.keys(Key.Tab);
|
|
22
20
|
await browser.keys(Key.Enter);
|
|
23
|
-
const snapshot = await browser.
|
|
24
|
-
DSControlledCheckboxCO.snapshotPath('checkbox-aria-disabled-kb-nav'),
|
|
25
|
-
);
|
|
21
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
26
22
|
await expect(snapshot).toEqual(0);
|
|
27
23
|
});
|
|
28
24
|
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import DSControlledCheckboxCO from '../DSControlledCheckboxCO';
|
|
2
|
+
|
|
3
|
+
// Tests the theme-driven font-family mechanism shipped under PUI-18210
|
|
4
|
+
// (the checkbox label renders through DSTypography, which reads theme.fonts.default,
|
|
5
|
+
// falling back to proxima-nova). Theme-agnostic: uses a sentinel font, never the
|
|
6
|
+
// dsConsumer POC theme values, so it survives any future theme change.
|
|
7
|
+
if (
|
|
8
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
9
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
10
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
11
|
+
browser.capabilities.browserName === 'Chrome'
|
|
12
|
+
) {
|
|
13
|
+
describe('PUI-18799 - DSControlledCheckbox:: theme font-family wiring - Func', () => {
|
|
14
|
+
before('loading page', async () => {
|
|
15
|
+
const errorOnGo = await DSControlledCheckboxCO.themeFontURL.go();
|
|
16
|
+
if (errorOnGo) throw errorOnGo;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('01: should read label font-family from theme with proxima-nova fallback', async () => {
|
|
20
|
+
const themed = await DSControlledCheckboxCO.getThemedCheckboxLabel();
|
|
21
|
+
await themed.waitForDisplayed();
|
|
22
|
+
const themedFont = (await themed.getCSSProperty('font-family')).value.toLowerCase();
|
|
23
|
+
await expect(themedFont).toContain('sentinelfont');
|
|
24
|
+
|
|
25
|
+
const fallback = await DSControlledCheckboxCO.getFallbackCheckboxLabel();
|
|
26
|
+
const fallbackFont = (await fallback.getCSSProperty('font-family')).value.toLowerCase();
|
|
27
|
+
await expect(fallbackFont).toContain('proxima-nova');
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -18,24 +18,24 @@ if (
|
|
|
18
18
|
const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(0);
|
|
19
19
|
await checkbox.waitForExist();
|
|
20
20
|
const result = await axeCoreCheck();
|
|
21
|
-
expect(result
|
|
21
|
+
await expect(result).toHaveLength(0);
|
|
22
22
|
});
|
|
23
23
|
it('02: Evaluate checkbox accessibility with axe-core (focused)', async () => {
|
|
24
24
|
await browser.keys(Key.Tab);
|
|
25
25
|
const result = await axeCoreCheck();
|
|
26
|
-
expect(result
|
|
26
|
+
await expect(result).toHaveLength(0);
|
|
27
27
|
});
|
|
28
28
|
it('03: Evaluate checkbox accessibility with axe-core (hovered)', async () => {
|
|
29
29
|
const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(10);
|
|
30
30
|
await mouseOver(checkbox);
|
|
31
31
|
const result = await axeCoreCheck();
|
|
32
|
-
expect(result
|
|
32
|
+
await expect(result).toHaveLength(0);
|
|
33
33
|
});
|
|
34
34
|
it('04: Evaluate checkbox accessibility with axe-core (clicked)', async () => {
|
|
35
35
|
const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(10);
|
|
36
36
|
await checkbox.click();
|
|
37
37
|
const result = await axeCoreCheck();
|
|
38
|
-
expect(result
|
|
38
|
+
await expect(result).toHaveLength(0);
|
|
39
39
|
});
|
|
40
40
|
});
|
|
41
41
|
}
|
package/ds-controlled-form/ds-controlled-checkbox-group/DSControlledCheckboxGroup.visual.spec.js
CHANGED
|
@@ -11,7 +11,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
11
11
|
await browser.eyesOpen();
|
|
12
12
|
const checkbox = await DSControlledCheckboxCO.getCheckboxByIndex(1);
|
|
13
13
|
await checkbox.waitForExist();
|
|
14
|
-
const snapshot = await browser.
|
|
14
|
+
const snapshot = await browser.percyCheckScreenshot();
|
|
15
15
|
await expect(snapshot).toEqual(0);
|
|
16
16
|
});
|
|
17
17
|
});
|
|
@@ -47,7 +47,7 @@ export default class DSControlledInputGroupCO extends PageObject {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
static async getComboSelectedOptText() {
|
|
50
|
-
return $('[data-testid="
|
|
50
|
+
return $('[data-testid="combobox-selected-values"]');
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
static async getComboboxInput() {
|
|
@@ -16,6 +16,8 @@ export default class DSControlledRadioCO extends PageObject {
|
|
|
16
16
|
|
|
17
17
|
static wrapLabel = new Urlbuilder(PATH_E2E_RADIO, 'wrap-label');
|
|
18
18
|
|
|
19
|
+
static themeFontURL = new Urlbuilder(PATH_E2E_RADIO, 'theme-font-family-test');
|
|
20
|
+
|
|
19
21
|
static async getRadio() {
|
|
20
22
|
return $('[data-testid="ds-radio"]');
|
|
21
23
|
}
|
|
@@ -43,4 +45,12 @@ export default class DSControlledRadioCO extends PageObject {
|
|
|
43
45
|
static snapshotPath(example = 'basic') {
|
|
44
46
|
return PageObject.getSnapshotPathBuilder('DSControlledRadio', example, 'ds-controlled-radio');
|
|
45
47
|
}
|
|
48
|
+
|
|
49
|
+
static async getThemedRadioLabel() {
|
|
50
|
+
return $('[data-testid="theme-font-sentinel"] [data-testid="ds-radio-label-typography"]');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
static async getFallbackRadioLabel() {
|
|
54
|
+
return $('[data-testid="theme-font-fallback"] [data-testid="ds-radio-label-typography"]');
|
|
55
|
+
}
|
|
46
56
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
1
2
|
import { axeCoreCheck } from '../../../helpers';
|
|
2
3
|
import DSControlledRadioCO from '../DSControlledRadioCO';
|
|
3
4
|
|
|
@@ -13,10 +14,23 @@ if (
|
|
|
13
14
|
if (errorOnGo) throw errorOnGo;
|
|
14
15
|
});
|
|
15
16
|
it('01: should display radio with aria-disabled and pass axe-core scann', async () => {
|
|
16
|
-
const
|
|
17
|
+
const result = await axeCoreCheck();
|
|
18
|
+
await expect(result).toHaveLength(0);
|
|
19
|
+
});
|
|
20
|
+
it('02: should focus and select first radio with aria-disabled and pass axe-core scann', async () => {
|
|
21
|
+
const radio = await DSControlledRadioCO.getRadioByIndex(0);
|
|
17
22
|
await radio.click();
|
|
23
|
+
await expect(radio).toBeFocused();
|
|
24
|
+
await expect(radio).toBeSelected();
|
|
25
|
+
const result = await axeCoreCheck();
|
|
26
|
+
await expect(result).toHaveLength(0);
|
|
27
|
+
});
|
|
28
|
+
it('03: should focus second radio with aria-disabled and pass axe-core scann', async () => {
|
|
29
|
+
await browser.keys(Key.ArrowDown);
|
|
30
|
+
const radio = await DSControlledRadioCO.getRadioByIndex(1);
|
|
31
|
+
await expect(radio).toBeFocused();
|
|
18
32
|
const result = await axeCoreCheck();
|
|
19
|
-
expect(result
|
|
33
|
+
await expect(result).toHaveLength(0);
|
|
20
34
|
});
|
|
21
35
|
});
|
|
22
36
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Key } from 'webdriverio';
|
|
2
|
+
import DSControlledRadioCO from '../DSControlledRadioCO';
|
|
3
|
+
|
|
4
|
+
if (
|
|
5
|
+
!browser.capabilities['ice:options'].isPhone &&
|
|
6
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
7
|
+
(browser.capabilities.browserName === 'Chrome' || browser.capabilities.browserName === 'chrome')
|
|
8
|
+
) {
|
|
9
|
+
describe('PUI-18777 - DSControlledRadio:: aria-disabled group Tab navigation - Func', () => {
|
|
10
|
+
before('loading page', async () => {
|
|
11
|
+
const errorOnGo = await DSControlledRadioCO.applyAriaDisabled.go();
|
|
12
|
+
if (errorOnGo) throw errorOnGo;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('01: should focus the checked option when tabbing into the aria-disabled group', async () => {
|
|
16
|
+
const firstRadio = await DSControlledRadioCO.getRadioByIndex(0);
|
|
17
|
+
await browser.keys(Key.Tab);
|
|
18
|
+
await expect(firstRadio).toBeFocused();
|
|
19
|
+
await expect(firstRadio).toBeSelected();
|
|
20
|
+
});
|
|
21
|
+
it('02: should focus the second option when arrow down is pressed', async () => {
|
|
22
|
+
const secondRadio = await DSControlledRadioCO.getRadioByIndex(1);
|
|
23
|
+
await browser.keys(Key.ArrowDown);
|
|
24
|
+
await expect(secondRadio).toBeFocused();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('03: should tab out of the group instead of moving to the next option', async () => {
|
|
28
|
+
const firstRadio = await DSControlledRadioCO.getRadioByIndex(0);
|
|
29
|
+
const secondRadio = await DSControlledRadioCO.getRadioByIndex(1);
|
|
30
|
+
const thirdRadio = await DSControlledRadioCO.getRadioByIndex(2);
|
|
31
|
+
await browser.keys(Key.Tab);
|
|
32
|
+
await expect(firstRadio).not.toBeFocused();
|
|
33
|
+
await expect(secondRadio).not.toBeFocused();
|
|
34
|
+
await expect(thirdRadio).not.toBeFocused();
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
package/ds-controlled-form/ds-controlled-radio/theme-font/DSControlledRadio.theme-font.func.spec.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import DSControlledRadioCO from '../DSControlledRadioCO';
|
|
2
|
+
|
|
3
|
+
// Tests the theme-driven font-family mechanism shipped under PUI-18210
|
|
4
|
+
// (the radio label renders through DSTypography, which reads theme.fonts.default,
|
|
5
|
+
// falling back to proxima-nova). Theme-agnostic: uses a sentinel font, never the
|
|
6
|
+
// dsConsumer POC theme values, so it survives any future theme change.
|
|
7
|
+
if (
|
|
8
|
+
(!browser.capabilities['ice:options'].isPhone &&
|
|
9
|
+
!browser.capabilities['ice:options'].isTablet &&
|
|
10
|
+
browser.capabilities.browserName === 'chrome') ||
|
|
11
|
+
browser.capabilities.browserName === 'Chrome'
|
|
12
|
+
) {
|
|
13
|
+
describe('PUI-18800 - DSControlledRadio:: theme font-family wiring - Func', () => {
|
|
14
|
+
before('loading page', async () => {
|
|
15
|
+
const errorOnGo = await DSControlledRadioCO.themeFontURL.go();
|
|
16
|
+
if (errorOnGo) throw errorOnGo;
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('01: should read label font-family from theme with proxima-nova fallback', async () => {
|
|
20
|
+
const themed = await DSControlledRadioCO.getThemedRadioLabel();
|
|
21
|
+
await themed.waitForDisplayed();
|
|
22
|
+
const themedFont = (await themed.getCSSProperty('font-family')).value.toLowerCase();
|
|
23
|
+
await expect(themedFont).toContain('sentinelfont');
|
|
24
|
+
|
|
25
|
+
const fallback = await DSControlledRadioCO.getFallbackRadioLabel();
|
|
26
|
+
const fallbackFont = (await fallback.getCSSProperty('font-family')).value.toLowerCase();
|
|
27
|
+
await expect(fallbackFont).toContain('proxima-nova');
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -67,9 +67,7 @@ if (!browser.capabilities['ice:options'].isPhone && !browser.capabilities['ice:o
|
|
|
67
67
|
const input = await ReactHookCO.getMonthInputsByIndex(2);
|
|
68
68
|
const inputValue = await input.getAttribute('aria-label');
|
|
69
69
|
// eslint-disable-next-line max-len
|
|
70
|
-
await expect(inputValue).toEqual(
|
|
71
|
-
'month input field, current values: November, twenty second, 3333, 4, 45, ante meridiem',
|
|
72
|
-
);
|
|
70
|
+
await expect(inputValue).toEqual('month');
|
|
73
71
|
});
|
|
74
72
|
});
|
|
75
73
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable import/no-relative-packages */
|
|
2
2
|
/* eslint-disable max-lines */
|
|
3
|
+
import { Key } from 'webdriverio';
|
|
3
4
|
import {
|
|
4
5
|
PATH_E2E_DATATABLE,
|
|
5
6
|
PATH_E2E_DATATABLE_DND,
|
|
@@ -32,6 +33,8 @@ export default class DataTableCO extends PageObject {
|
|
|
32
33
|
|
|
33
34
|
static DndColumnsFixedWidth = new Urlbuilder(PATH_E2E_DATATABLE_DND, 'dnd-columns-fixed-width');
|
|
34
35
|
|
|
36
|
+
static keyboardDragScroll = new Urlbuilder(PATH_E2E_DATATABLE_DND, 'keyboard-drag-scroll-test');
|
|
37
|
+
|
|
35
38
|
// Filters
|
|
36
39
|
|
|
37
40
|
static singleSelect = new Urlbuilder(PATH_E2E_DATATABLE_FILTERS, 'single-select-filter');
|
|
@@ -134,6 +137,8 @@ export default class DataTableCO extends PageObject {
|
|
|
134
137
|
|
|
135
138
|
static allFiltersV2 = new Urlbuilder(PATH_E2E_DATATABLE_FILTERS_V2, 'all-filters-v-2');
|
|
136
139
|
|
|
140
|
+
static pillLabelCustomization = new Urlbuilder(PATH_E2E_DATATABLE_FILTERS_V2, 'pill-label-customization-test');
|
|
141
|
+
|
|
137
142
|
// ADVANCED
|
|
138
143
|
|
|
139
144
|
static groupByCol = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'group-by-column');
|
|
@@ -142,12 +147,10 @@ export default class DataTableCO extends PageObject {
|
|
|
142
147
|
|
|
143
148
|
static performance = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'performance');
|
|
144
149
|
|
|
145
|
-
static emptyStateFullCustom = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'empty-state-full-custom');
|
|
146
|
-
|
|
147
|
-
static customCellRowHeader = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'custom-cell-row-and-header');
|
|
148
|
-
|
|
149
150
|
static responsive = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'responsive');
|
|
150
151
|
|
|
152
|
+
static keyboardScrollIntoView = new Urlbuilder(PATH_E2E_DATATABLE_ADVANCED, 'keyboard-scroll-into-view-test');
|
|
153
|
+
|
|
151
154
|
// ROW
|
|
152
155
|
|
|
153
156
|
static selectWithNoControl = new Urlbuilder(PATH_E2E_DATATABLE_ROW, 'select-without-column');
|
|
@@ -162,10 +165,15 @@ export default class DataTableCO extends PageObject {
|
|
|
162
165
|
|
|
163
166
|
static singleSelectDisabledSelectionUC = new Urlbuilder(PATH_E2E_DATATABLE, 'single-select-disabled-selection');
|
|
164
167
|
|
|
165
|
-
static multiSelectDisabledSelectionUC = new Urlbuilder(
|
|
168
|
+
static multiSelectDisabledSelectionUC = new Urlbuilder(PATH_E2E_DATATABLE_ROW, 'multi-select-disabled-selection');
|
|
166
169
|
|
|
167
170
|
static multiSelectEmpty = new Urlbuilder(PATH_E2E_DATATABLE_ROW, 'multi-select-empty');
|
|
168
171
|
|
|
172
|
+
static multiSelectDisabledWithUniqueRowAccessor = new Urlbuilder(
|
|
173
|
+
PATH_E2E_DATATABLE_ROW,
|
|
174
|
+
'multi-select-disabled-selection-with-unique-row-accessor',
|
|
175
|
+
);
|
|
176
|
+
|
|
169
177
|
// Column
|
|
170
178
|
|
|
171
179
|
static columnLayout = new Urlbuilder(PATH_E2E_DATATABLE_COLUMN, 'basic-column-layout');
|
|
@@ -194,10 +202,18 @@ export default class DataTableCO extends PageObject {
|
|
|
194
202
|
'grouping-with-hidden-and-resizable-columns',
|
|
195
203
|
);
|
|
196
204
|
|
|
205
|
+
// PUI-18812 removed the resizerA11yMode prop, so there is one resizer shape and one story. The
|
|
206
|
+
// "SeparatorMode" name is historical — kept to avoid churning this URL and every spec using it.
|
|
207
|
+
static resizerSeparatorMode = new Urlbuilder(PATH_E2E_DATATABLE_COLUMN, 'resizer-separator-mode-test');
|
|
208
|
+
|
|
197
209
|
// Text Wrapping
|
|
198
210
|
|
|
199
211
|
static textWrapTruncColumn = new Urlbuilder(PATH_E2E_DATATABLE_TEXT_WRAPPING, 'text-wrap-truncate-column');
|
|
200
212
|
|
|
213
|
+
static headerWrapAlignment = new Urlbuilder(PATH_E2E_DATATABLE_TEXT_WRAPPING, 'header-wrap-alignment-test');
|
|
214
|
+
|
|
215
|
+
static textWrapGlobalWithToolbar = new Urlbuilder(PATH_E2E_DATATABLE_TEXT_WRAPPING, 'text-wrap-global');
|
|
216
|
+
|
|
201
217
|
// Toolbar
|
|
202
218
|
|
|
203
219
|
static toolbarIntegration = new Urlbuilder(PATH_E2E_DATATABLE_TOOLBAR, 'toolbar-integration');
|
|
@@ -242,6 +258,8 @@ export default class DataTableCO extends PageObject {
|
|
|
242
258
|
|
|
243
259
|
static pui16461SkeletonAndNoResults = new Urlbuilder(PATH_E2E_DATATABLE_STATES, 'pui-16461-skeleton-and-no-results');
|
|
244
260
|
|
|
261
|
+
static emptyStateFullCustom = new Urlbuilder(PATH_E2E_DATATABLE_STATES, 'empty-state-full-custom');
|
|
262
|
+
|
|
245
263
|
// Cell
|
|
246
264
|
static editableCells = new Urlbuilder(PATH_E2E_DATATABLE_CELL, 'editable-cells');
|
|
247
265
|
|
|
@@ -249,6 +267,8 @@ export default class DataTableCO extends PageObject {
|
|
|
249
267
|
|
|
250
268
|
static customCellRowAndHeaderTest = new Urlbuilder(PATH_E2E_DATATABLE_CELL, 'custom-cell-row-and-header');
|
|
251
269
|
|
|
270
|
+
static toggleCellEnterFocus = new Urlbuilder(PATH_E2E_DATATABLE_CELL, 'toggle-cell-enter-focus-test');
|
|
271
|
+
|
|
252
272
|
// Use Cases
|
|
253
273
|
|
|
254
274
|
static integratedExampleWithFilters = new Urlbuilder(PATH_E2E_DATATABLE_USE_CASES, 'integrated-example-with-filters');
|
|
@@ -297,11 +317,6 @@ export default class DataTableCO extends PageObject {
|
|
|
297
317
|
|
|
298
318
|
// eslint-disable-next-line max-len
|
|
299
319
|
|
|
300
|
-
static multiSelectDisabledWithUniqueRowAccessor = new Urlbuilder(
|
|
301
|
-
PATH_E2E_DATATABLE,
|
|
302
|
-
'multi-select-disabled-selection-with-unique-row-accessor',
|
|
303
|
-
);
|
|
304
|
-
|
|
305
320
|
static resizableWithConstrains = new Urlbuilder(PATH_E2E_DATATABLE, 'pui-8896-resizable-with-constrains');
|
|
306
321
|
|
|
307
322
|
static memoizedSearchFilterTest = new Urlbuilder(PATH_E2E_DATATABLE, 'pui-12253-memoized-filter-component');
|
|
@@ -392,17 +407,21 @@ export default class DataTableCO extends PageObject {
|
|
|
392
407
|
}
|
|
393
408
|
|
|
394
409
|
static getPopoverContainer() {
|
|
395
|
-
return $('[data-testid="
|
|
410
|
+
return $('[data-testid="ds-floating-wrapper-root"]');
|
|
396
411
|
}
|
|
397
412
|
|
|
398
413
|
static getPopoverContainers() {
|
|
399
|
-
return $$('[data-testid="
|
|
414
|
+
return $$('[data-testid="ds-floating-wrapper-root"]');
|
|
400
415
|
}
|
|
401
416
|
|
|
402
417
|
static getButtons(index) {
|
|
403
418
|
return $$('[data-testid="ds-button"]')[index];
|
|
404
419
|
}
|
|
405
420
|
|
|
421
|
+
static getRowActionResult() {
|
|
422
|
+
return $('[data-testid="datatable-row-action-result"]');
|
|
423
|
+
}
|
|
424
|
+
|
|
406
425
|
static async getSkipToButton() {
|
|
407
426
|
return $(`[id="storybook-root"] button`);
|
|
408
427
|
}
|
|
@@ -415,6 +434,164 @@ export default class DataTableCO extends PageObject {
|
|
|
415
434
|
return $('[data-testid="ds-datatable-empty-state-wrapper"]');
|
|
416
435
|
}
|
|
417
436
|
|
|
437
|
+
// PUI-18626 — keyboard scroll-into-view
|
|
438
|
+
|
|
439
|
+
static getRows = async () => $$('[data-testid="data-table-row"]');
|
|
440
|
+
|
|
441
|
+
static getFirstRow = async () => (await this.getRows())[0];
|
|
442
|
+
|
|
443
|
+
static pressArrow = async (direction = 'down', times = 1) => {
|
|
444
|
+
const key = direction === 'up' ? Key.ArrowUp : Key.ArrowDown;
|
|
445
|
+
for (let i = 0; i < times; i += 1) {
|
|
446
|
+
// eslint-disable-next-line no-await-in-loop
|
|
447
|
+
await browser.keys(key);
|
|
448
|
+
}
|
|
449
|
+
};
|
|
450
|
+
|
|
451
|
+
/**
|
|
452
|
+
* Reads live layout to verify the currently focused row is scrolled fully below the sticky
|
|
453
|
+
* header (not clipped) after keyboard navigation. Returns viewport-relative tops/bottom in px
|
|
454
|
+
* plus the scroll container scrollTop. Selectors live here (not in the spec) by convention.
|
|
455
|
+
*/
|
|
456
|
+
static getUpwardNavGeometry = async () =>
|
|
457
|
+
browser.execute(() => {
|
|
458
|
+
const rowSel = '[data-testid="data-table-row"], [data-testid="ds-datatable-row"]';
|
|
459
|
+
const headSel = '[data-testid="ds-datatable-head-wrapper"]';
|
|
460
|
+
const vwSel = '[data-testid="data-table-scrollable-container"]';
|
|
461
|
+
const active = document.activeElement;
|
|
462
|
+
const row = active && active.closest ? active.closest(rowSel) : null;
|
|
463
|
+
const focused = row || active;
|
|
464
|
+
const head = document.querySelector(headSel);
|
|
465
|
+
const vw = document.querySelector(vwSel);
|
|
466
|
+
return {
|
|
467
|
+
hasRow: Boolean(row),
|
|
468
|
+
rowTop: focused ? focused.getBoundingClientRect().top : null,
|
|
469
|
+
headerBottom: head ? head.getBoundingClientRect().bottom : null,
|
|
470
|
+
containerTop: vw ? vw.getBoundingClientRect().top : null,
|
|
471
|
+
scrollTop: vw ? vw.scrollTop : null,
|
|
472
|
+
};
|
|
473
|
+
});
|
|
474
|
+
|
|
475
|
+
// PUI-15735 — creatable filter aria-activedescendant validity
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* Returns the combobox input's aria-activedescendant together with the ids of every option
|
|
479
|
+
* currently rendered in the listbox, in one round-trip. Valid states are an empty
|
|
480
|
+
* aria-activedescendant or one whose value appears in optionIds.
|
|
481
|
+
*/
|
|
482
|
+
static getFilterActiveDescendantState = async () =>
|
|
483
|
+
browser.execute(() => {
|
|
484
|
+
const input = document.querySelector('[data-testid="combobox-input"]');
|
|
485
|
+
const options = Array.from(document.querySelectorAll('[data-testid="combobox-option"]'));
|
|
486
|
+
return {
|
|
487
|
+
activeDescendant: input ? input.getAttribute('aria-activedescendant') : null,
|
|
488
|
+
optionIds: options.map((option) => option.id),
|
|
489
|
+
};
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
// PUI-8826 — keyboard row drag must not smooth-scroll
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Patches the DOM scroll APIs so every programmatic scroll from this point on records its
|
|
496
|
+
* `behavior`. dnd-kit calls scrollTo/scrollBy directly on the scroll container's DOM node rather
|
|
497
|
+
* than through React, so patching the shared prototype captures every call the drag makes.
|
|
498
|
+
* Install after the story is loaded and before the drag starts.
|
|
499
|
+
*/
|
|
500
|
+
static installScrollSpy = async () =>
|
|
501
|
+
browser.execute(() => {
|
|
502
|
+
window.dimsumScrollCalls = [];
|
|
503
|
+
['scrollTo', 'scrollBy'].forEach((methodName) => {
|
|
504
|
+
const original = Element.prototype[methodName];
|
|
505
|
+
// A function expression, not an arrow, so `this` stays the scrolled element.
|
|
506
|
+
Element.prototype[methodName] = function scrollSpy(...args) {
|
|
507
|
+
const [options] = args;
|
|
508
|
+
if (options && typeof options === 'object') {
|
|
509
|
+
window.dimsumScrollCalls.push({ method: methodName, behavior: options.behavior });
|
|
510
|
+
}
|
|
511
|
+
return original.apply(this, args);
|
|
512
|
+
};
|
|
513
|
+
});
|
|
514
|
+
});
|
|
515
|
+
|
|
516
|
+
static getScrollSpyCalls = async () => browser.execute(() => window.dimsumScrollCalls || []);
|
|
517
|
+
|
|
518
|
+
/** Scroll offset of the virtualized viewport — proves the drag actually scrolled the list. */
|
|
519
|
+
static getScrollableContainerScrollTop = async () =>
|
|
520
|
+
browser.execute(() => {
|
|
521
|
+
const container = document.querySelector('[data-testid="data-table-scrollable-container"]');
|
|
522
|
+
return container ? container.scrollTop : null;
|
|
523
|
+
});
|
|
524
|
+
|
|
525
|
+
/** Id-cell text of whichever row currently owns focus — the dragged row after a keyboard drop. */
|
|
526
|
+
static getFocusedRowIdCellText = async () =>
|
|
527
|
+
browser.execute(() => {
|
|
528
|
+
const active = document.activeElement;
|
|
529
|
+
const row = active && active.closest ? active.closest('[data-testid="data-table-row"]') : null;
|
|
530
|
+
const cells = row ? row.querySelectorAll('[data-testid="data-table-cell"]') : [];
|
|
531
|
+
// Cell 0 is the drag-handle cell; the id column follows it.
|
|
532
|
+
return cells.length > 1 ? cells[1].textContent.trim() : null;
|
|
533
|
+
});
|
|
534
|
+
|
|
535
|
+
// PUI-17187 — filter popover clamped to the table's own scrollport during horizontal scroll
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Horizontal-scroll geometry of one column, read live instead of hardcoded. Returns the header
|
|
539
|
+
* cell's offset range inside the scrolled content plus the scrollport's own width, which is what
|
|
540
|
+
* the two scroll targets are derived from: colLeft - clientWidth + a sliver still leaves the
|
|
541
|
+
* column partially visible at the left edge, while colRight puts it fully out of view. Fixed-layout
|
|
542
|
+
* column widths shift with viewport and theme, so a hardcoded scrollLeft would be silently wrong
|
|
543
|
+
* on another browser or breakpoint.
|
|
544
|
+
*/
|
|
545
|
+
static getColumnScrollGeometry = async (columnName) =>
|
|
546
|
+
browser.execute((name) => {
|
|
547
|
+
const container = document.querySelector('[data-testid="data-table-scrollable-container"]');
|
|
548
|
+
const headers = Array.from(document.querySelectorAll('[data-testid="data-table-header"]'));
|
|
549
|
+
const target = headers.find((header) => (header.textContent || '').toLowerCase().includes(name.toLowerCase()));
|
|
550
|
+
if (!container || !target) return null;
|
|
551
|
+
// Derived from bounding rects plus the CURRENT scrollLeft, not offsetLeft/offsetWidth:
|
|
552
|
+
// offsetLeft is measured against the nearest positioned ancestor, which is not guaranteed to
|
|
553
|
+
// be the scrolled content, so it silently yields the wrong scroll target. This form is exact
|
|
554
|
+
// regardless of which ancestor happens to be positioned.
|
|
555
|
+
const targetRect = target.getBoundingClientRect();
|
|
556
|
+
const containerRect = container.getBoundingClientRect();
|
|
557
|
+
const colLeft = targetRect.left - containerRect.left + container.scrollLeft;
|
|
558
|
+
return {
|
|
559
|
+
colLeft,
|
|
560
|
+
colRight: colLeft + targetRect.width,
|
|
561
|
+
clientWidth: container.clientWidth,
|
|
562
|
+
maxScrollLeft: container.scrollWidth - container.clientWidth,
|
|
563
|
+
};
|
|
564
|
+
}, columnName);
|
|
565
|
+
|
|
566
|
+
static setScrollableContainerScrollLeft = async (value) =>
|
|
567
|
+
browser.execute((next) => {
|
|
568
|
+
const container = document.querySelector('[data-testid="data-table-scrollable-container"]');
|
|
569
|
+
if (container) container.scrollLeft = next;
|
|
570
|
+
}, value);
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* Popover and scrollport horizontal bounds in one round-trip, so the two rects are always sampled
|
|
574
|
+
* from the same frame — reading them separately can straddle a reposition and compare a stale
|
|
575
|
+
* popover x against a fresh container x.
|
|
576
|
+
*/
|
|
577
|
+
static getFilterPopoverBoundaryRects = async () =>
|
|
578
|
+
browser.execute(() => {
|
|
579
|
+
const popover = document.querySelector('[data-testid="data-table-filter-menu-content"]');
|
|
580
|
+
const container = document.querySelector('[data-testid="data-table-scrollable-container"]');
|
|
581
|
+
if (!popover || !container) return null;
|
|
582
|
+
const popoverRect = popover.getBoundingClientRect();
|
|
583
|
+
const containerRect = container.getBoundingClientRect();
|
|
584
|
+
const styles = window.getComputedStyle(popover);
|
|
585
|
+
return {
|
|
586
|
+
popoverLeft: popoverRect.left,
|
|
587
|
+
popoverRight: popoverRect.right,
|
|
588
|
+
containerLeft: containerRect.left,
|
|
589
|
+
containerRight: containerRect.right,
|
|
590
|
+
opacity: styles.opacity,
|
|
591
|
+
pointerEvents: styles.pointerEvents,
|
|
592
|
+
};
|
|
593
|
+
});
|
|
594
|
+
|
|
418
595
|
// Snapshots
|
|
419
596
|
static snapshotPath(example = 'basic') {
|
|
420
597
|
return PageObject.getSnapshotPathBuilder('DataTable', example, 'ds-data-table');
|