@ui5/webcomponents 2.7.3 → 2.7.4
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 +17 -0
- package/cypress/specs/Table.cy.tsx +255 -61
- package/cypress/specs/TableNavigation.cy.tsx +223 -0
- package/cypress/specs/TableNavigationFixedHeader.cy.tsx +199 -0
- package/cypress/specs/TableSelection.cy.tsx +243 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/Table.d.ts +14 -9
- package/dist/Table.js +36 -31
- package/dist/Table.js.map +1 -1
- package/dist/TableCell.d.ts +1 -2
- package/dist/TableCell.js +13 -5
- package/dist/TableCell.js.map +1 -1
- package/dist/TableCellBase.d.ts +1 -0
- package/dist/TableCellBase.js +4 -0
- package/dist/TableCellBase.js.map +1 -1
- package/dist/TableHeaderCell.d.ts +33 -0
- package/dist/TableHeaderCell.js +45 -2
- package/dist/TableHeaderCell.js.map +1 -1
- package/dist/TableHeaderCellActionAI.d.ts +27 -0
- package/dist/TableHeaderCellActionAI.js +44 -0
- package/dist/TableHeaderCellActionAI.js.map +1 -0
- package/dist/TableHeaderCellActionBase.d.ts +33 -0
- package/dist/TableHeaderCellActionBase.js +58 -0
- package/dist/TableHeaderCellActionBase.js.map +1 -0
- package/dist/TableHeaderRow.d.ts +1 -0
- package/dist/TableHeaderRow.js +7 -5
- package/dist/TableHeaderRow.js.map +1 -1
- package/dist/TableNavigation.js +1 -2
- package/dist/TableNavigation.js.map +1 -1
- package/dist/TableRow.js +1 -1
- package/dist/TableRow.js.map +1 -1
- package/dist/TableRowActionBase.d.ts +0 -2
- package/dist/TableRowActionBase.js +0 -4
- package/dist/TableRowActionBase.js.map +1 -1
- package/dist/TableRowActionNavigation.d.ts +11 -1
- package/dist/TableRowActionNavigation.js +17 -6
- package/dist/TableRowActionNavigation.js.map +1 -1
- package/dist/TableRowBase.js +1 -1
- package/dist/TableRowBase.js.map +1 -1
- package/dist/bundle.esm.js +1 -0
- package/dist/bundle.esm.js.map +1 -1
- package/dist/css/themes/Avatar.css +1 -1
- package/dist/css/themes/AvatarGroup.css +1 -1
- package/dist/css/themes/Bar.css +1 -1
- package/dist/css/themes/Breadcrumbs.css +1 -1
- package/dist/css/themes/BusyIndicator.css +1 -1
- package/dist/css/themes/Button.css +1 -1
- package/dist/css/themes/ButtonBadge.css +1 -1
- package/dist/css/themes/Calendar.css +1 -1
- package/dist/css/themes/CalendarHeader.css +1 -1
- package/dist/css/themes/CalendarLegend.css +1 -1
- package/dist/css/themes/CalendarLegendItem.css +1 -1
- package/dist/css/themes/Card.css +1 -1
- package/dist/css/themes/CardHeader.css +1 -1
- package/dist/css/themes/Carousel.css +1 -1
- package/dist/css/themes/CheckBox.css +1 -1
- package/dist/css/themes/ColorPalette.css +1 -1
- package/dist/css/themes/ColorPaletteItem.css +1 -1
- package/dist/css/themes/ColorPalettePopover.css +1 -1
- package/dist/css/themes/ColorPicker.css +1 -1
- package/dist/css/themes/ComboBox.css +1 -1
- package/dist/css/themes/ComboBoxItem.css +1 -1
- package/dist/css/themes/DatePicker.css +1 -1
- package/dist/css/themes/DateTimePickerPopover.css +1 -1
- package/dist/css/themes/DayPicker.css +1 -1
- package/dist/css/themes/Dialog.css +1 -1
- package/dist/css/themes/FileUploader.css +1 -1
- package/dist/css/themes/Form.css +1 -1
- package/dist/css/themes/FormItem.css +1 -1
- package/dist/css/themes/FormItemSpan.css +1 -1
- package/dist/css/themes/GrowingButton.css +1 -1
- package/dist/css/themes/Icon.css +1 -1
- package/dist/css/themes/Input.css +1 -1
- package/dist/css/themes/InputIcon.css +1 -1
- package/dist/css/themes/InputSharedStyles.css +1 -1
- package/dist/css/themes/Link.css +1 -1
- package/dist/css/themes/List.css +1 -1
- package/dist/css/themes/ListItem.css +1 -1
- package/dist/css/themes/ListItemBase.css +1 -1
- package/dist/css/themes/ListItemCustom.css +1 -1
- package/dist/css/themes/ListItemGroup.css +1 -1
- package/dist/css/themes/ListItemGroupHeader.css +1 -1
- package/dist/css/themes/ListItemIcon.css +1 -1
- package/dist/css/themes/Menu.css +1 -1
- package/dist/css/themes/MenuItem.css +1 -1
- package/dist/css/themes/MessageStrip.css +1 -1
- package/dist/css/themes/MonthPicker.css +1 -1
- package/dist/css/themes/MultiComboBox.css +1 -1
- package/dist/css/themes/MultiComboBoxItem.css +1 -1
- package/dist/css/themes/MultiComboBoxPopover.css +1 -1
- package/dist/css/themes/MultiInput.css +1 -1
- package/dist/css/themes/OptionBase.css +1 -1
- package/dist/css/themes/Panel.css +1 -1
- package/dist/css/themes/Popover.css +1 -1
- package/dist/css/themes/PopupsCommon.css +1 -1
- package/dist/css/themes/ProgressIndicator.css +1 -1
- package/dist/css/themes/RadioButton.css +1 -1
- package/dist/css/themes/RangeSlider.css +1 -1
- package/dist/css/themes/RatingIndicator.css +1 -1
- package/dist/css/themes/ResponsivePopover.css +1 -1
- package/dist/css/themes/ResponsivePopoverCommon.css +1 -1
- package/dist/css/themes/SegmentedButton.css +1 -1
- package/dist/css/themes/SegmentedButtonItem.css +1 -1
- package/dist/css/themes/Select.css +1 -1
- package/dist/css/themes/SliderBase.css +1 -1
- package/dist/css/themes/SplitButton.css +1 -1
- package/dist/css/themes/StepInput.css +1 -1
- package/dist/css/themes/SuggestionItem.css +1 -1
- package/dist/css/themes/SuggestionItemCustom.css +1 -1
- package/dist/css/themes/Switch.css +1 -1
- package/dist/css/themes/TabContainer.css +1 -1
- package/dist/css/themes/TabInOverflow.css +1 -1
- package/dist/css/themes/TabInStrip.css +1 -1
- package/dist/css/themes/TabSemanticIcon.css +1 -1
- package/dist/css/themes/TabSeparatorInOverflow.css +1 -1
- package/dist/css/themes/Table.css +1 -1
- package/dist/css/themes/TableCell.css +1 -1
- package/dist/css/themes/TableCellBase.css +1 -1
- package/dist/css/themes/TableHeaderCell.css +1 -1
- package/dist/css/themes/TableHeaderCellActionBase.css +1 -0
- package/dist/css/themes/TableHeaderRow.css +1 -1
- package/dist/css/themes/TableRow.css +1 -1
- package/dist/css/themes/TableRowActionBase.css +1 -1
- package/dist/css/themes/TableRowBase.css +1 -1
- package/dist/css/themes/Tag.css +1 -1
- package/dist/css/themes/Text.css +1 -1
- package/dist/css/themes/TextArea.css +1 -1
- package/dist/css/themes/TimePicker.css +1 -1
- package/dist/css/themes/Toast.css +1 -1
- package/dist/css/themes/ToggleButton.css +1 -1
- package/dist/css/themes/Token.css +1 -1
- package/dist/css/themes/Tokenizer.css +1 -1
- package/dist/css/themes/TokenizerPopover.css +1 -1
- package/dist/css/themes/Toolbar.css +1 -1
- package/dist/css/themes/ToolbarPopover.css +1 -1
- package/dist/css/themes/TreeItem.css +1 -1
- package/dist/css/themes/ValueStateMessage.css +1 -1
- package/dist/css/themes/YearPicker.css +1 -1
- package/dist/css/themes/sap_fiori_3/parameters-bundle.css +1 -1
- package/dist/css/themes/sap_fiori_3_dark/parameters-bundle.css +1 -1
- package/dist/css/themes/sap_fiori_3_hcb/parameters-bundle.css +1 -1
- package/dist/css/themes/sap_fiori_3_hcw/parameters-bundle.css +1 -1
- package/dist/css/themes/sap_horizon/parameters-bundle.css +1 -1
- package/dist/css/themes/sap_horizon_dark/parameters-bundle.css +1 -1
- package/dist/css/themes/sap_horizon_hcb/parameters-bundle.css +1 -1
- package/dist/css/themes/sap_horizon_hcw/parameters-bundle.css +1 -1
- package/dist/custom-elements-internal.json +134 -162
- package/dist/custom-elements.json +115 -59
- package/dist/generated/assets/themes/sap_fiori_3/parameters-bundle.css.json +1 -1
- package/dist/generated/assets/themes/sap_fiori_3_dark/parameters-bundle.css.json +1 -1
- package/dist/generated/assets/themes/sap_fiori_3_hcb/parameters-bundle.css.json +1 -1
- package/dist/generated/assets/themes/sap_fiori_3_hcw/parameters-bundle.css.json +1 -1
- package/dist/generated/assets/themes/sap_horizon/parameters-bundle.css.json +1 -1
- package/dist/generated/assets/themes/sap_horizon_dark/parameters-bundle.css.json +1 -1
- package/dist/generated/assets/themes/sap_horizon_hcb/parameters-bundle.css.json +1 -1
- package/dist/generated/assets/themes/sap_horizon_hcw/parameters-bundle.css.json +1 -1
- package/dist/generated/i18n/i18n-defaults.d.ts +3 -1
- package/dist/generated/i18n/i18n-defaults.js +3 -1
- package/dist/generated/i18n/i18n-defaults.js.map +1 -1
- package/dist/generated/templates/TableCellTemplate.lit.js +3 -6
- package/dist/generated/templates/TableCellTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TableHeaderCellActionBaseTemplate.lit.d.ts +3 -0
- package/dist/generated/templates/TableHeaderCellActionBaseTemplate.lit.js +7 -0
- package/dist/generated/templates/TableHeaderCellActionBaseTemplate.lit.js.map +1 -0
- package/dist/generated/templates/TableHeaderCellTemplate.lit.js +2 -1
- package/dist/generated/templates/TableHeaderCellTemplate.lit.js.map +1 -1
- package/dist/generated/templates/TableRowActionBaseTemplate.lit.js +2 -2
- package/dist/generated/templates/TableRowActionBaseTemplate.lit.js.map +1 -1
- package/dist/generated/themes/Avatar.css.d.ts +1 -1
- package/dist/generated/themes/Avatar.css.js +1 -1
- package/dist/generated/themes/Avatar.css.js.map +1 -1
- package/dist/generated/themes/AvatarGroup.css.d.ts +1 -1
- package/dist/generated/themes/AvatarGroup.css.js +1 -1
- package/dist/generated/themes/AvatarGroup.css.js.map +1 -1
- package/dist/generated/themes/Bar.css.d.ts +1 -1
- package/dist/generated/themes/Bar.css.js +1 -1
- package/dist/generated/themes/Bar.css.js.map +1 -1
- package/dist/generated/themes/Breadcrumbs.css.d.ts +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js +1 -1
- package/dist/generated/themes/Breadcrumbs.css.js.map +1 -1
- package/dist/generated/themes/BusyIndicator.css.d.ts +1 -1
- package/dist/generated/themes/BusyIndicator.css.js +1 -1
- package/dist/generated/themes/BusyIndicator.css.js.map +1 -1
- package/dist/generated/themes/Button.css.d.ts +1 -1
- package/dist/generated/themes/Button.css.js +1 -1
- package/dist/generated/themes/Button.css.js.map +1 -1
- package/dist/generated/themes/ButtonBadge.css.d.ts +1 -1
- package/dist/generated/themes/ButtonBadge.css.js +1 -1
- package/dist/generated/themes/ButtonBadge.css.js.map +1 -1
- package/dist/generated/themes/Calendar.css.d.ts +1 -1
- package/dist/generated/themes/Calendar.css.js +1 -1
- package/dist/generated/themes/Calendar.css.js.map +1 -1
- package/dist/generated/themes/CalendarHeader.css.d.ts +1 -1
- package/dist/generated/themes/CalendarHeader.css.js +1 -1
- package/dist/generated/themes/CalendarHeader.css.js.map +1 -1
- package/dist/generated/themes/CalendarLegend.css.d.ts +1 -1
- package/dist/generated/themes/CalendarLegend.css.js +1 -1
- package/dist/generated/themes/CalendarLegend.css.js.map +1 -1
- package/dist/generated/themes/CalendarLegendItem.css.d.ts +1 -1
- package/dist/generated/themes/CalendarLegendItem.css.js +1 -1
- package/dist/generated/themes/CalendarLegendItem.css.js.map +1 -1
- package/dist/generated/themes/Card.css.d.ts +1 -1
- package/dist/generated/themes/Card.css.js +1 -1
- package/dist/generated/themes/Card.css.js.map +1 -1
- package/dist/generated/themes/CardHeader.css.d.ts +1 -1
- package/dist/generated/themes/CardHeader.css.js +1 -1
- package/dist/generated/themes/CardHeader.css.js.map +1 -1
- package/dist/generated/themes/Carousel.css.d.ts +1 -1
- package/dist/generated/themes/Carousel.css.js +1 -1
- package/dist/generated/themes/Carousel.css.js.map +1 -1
- package/dist/generated/themes/CheckBox.css.d.ts +1 -1
- package/dist/generated/themes/CheckBox.css.js +1 -1
- package/dist/generated/themes/CheckBox.css.js.map +1 -1
- package/dist/generated/themes/ColorPalette.css.d.ts +1 -1
- package/dist/generated/themes/ColorPalette.css.js +1 -1
- package/dist/generated/themes/ColorPalette.css.js.map +1 -1
- package/dist/generated/themes/ColorPaletteItem.css.d.ts +1 -1
- package/dist/generated/themes/ColorPaletteItem.css.js +1 -1
- package/dist/generated/themes/ColorPaletteItem.css.js.map +1 -1
- package/dist/generated/themes/ColorPalettePopover.css.d.ts +1 -1
- package/dist/generated/themes/ColorPalettePopover.css.js +1 -1
- package/dist/generated/themes/ColorPalettePopover.css.js.map +1 -1
- package/dist/generated/themes/ColorPicker.css.d.ts +1 -1
- package/dist/generated/themes/ColorPicker.css.js +1 -1
- package/dist/generated/themes/ColorPicker.css.js.map +1 -1
- package/dist/generated/themes/ComboBox.css.d.ts +1 -1
- package/dist/generated/themes/ComboBox.css.js +1 -1
- package/dist/generated/themes/ComboBox.css.js.map +1 -1
- package/dist/generated/themes/ComboBoxItem.css.d.ts +1 -1
- package/dist/generated/themes/ComboBoxItem.css.js +1 -1
- package/dist/generated/themes/ComboBoxItem.css.js.map +1 -1
- package/dist/generated/themes/DatePicker.css.d.ts +1 -1
- package/dist/generated/themes/DatePicker.css.js +1 -1
- package/dist/generated/themes/DatePicker.css.js.map +1 -1
- package/dist/generated/themes/DateTimePickerPopover.css.d.ts +1 -1
- package/dist/generated/themes/DateTimePickerPopover.css.js +1 -1
- package/dist/generated/themes/DateTimePickerPopover.css.js.map +1 -1
- package/dist/generated/themes/DayPicker.css.d.ts +1 -1
- package/dist/generated/themes/DayPicker.css.js +1 -1
- package/dist/generated/themes/DayPicker.css.js.map +1 -1
- package/dist/generated/themes/Dialog.css.d.ts +1 -1
- package/dist/generated/themes/Dialog.css.js +1 -1
- package/dist/generated/themes/Dialog.css.js.map +1 -1
- package/dist/generated/themes/FileUploader.css.d.ts +1 -1
- package/dist/generated/themes/FileUploader.css.js +1 -1
- package/dist/generated/themes/FileUploader.css.js.map +1 -1
- package/dist/generated/themes/Form.css.d.ts +1 -1
- package/dist/generated/themes/Form.css.js +1 -1
- package/dist/generated/themes/Form.css.js.map +1 -1
- package/dist/generated/themes/FormItem.css.d.ts +1 -1
- package/dist/generated/themes/FormItem.css.js +1 -1
- package/dist/generated/themes/FormItem.css.js.map +1 -1
- package/dist/generated/themes/FormItemSpan.css.d.ts +1 -1
- package/dist/generated/themes/FormItemSpan.css.js +1 -1
- package/dist/generated/themes/FormItemSpan.css.js.map +1 -1
- package/dist/generated/themes/GrowingButton.css.d.ts +1 -1
- package/dist/generated/themes/GrowingButton.css.js +1 -1
- package/dist/generated/themes/GrowingButton.css.js.map +1 -1
- package/dist/generated/themes/Icon.css.d.ts +1 -1
- package/dist/generated/themes/Icon.css.js +1 -1
- package/dist/generated/themes/Icon.css.js.map +1 -1
- package/dist/generated/themes/Input.css.d.ts +1 -1
- package/dist/generated/themes/Input.css.js +1 -1
- package/dist/generated/themes/Input.css.js.map +1 -1
- package/dist/generated/themes/InputIcon.css.d.ts +1 -1
- package/dist/generated/themes/InputIcon.css.js +1 -1
- package/dist/generated/themes/InputIcon.css.js.map +1 -1
- package/dist/generated/themes/InputSharedStyles.css.d.ts +1 -1
- package/dist/generated/themes/InputSharedStyles.css.js +1 -1
- package/dist/generated/themes/InputSharedStyles.css.js.map +1 -1
- package/dist/generated/themes/Link.css.d.ts +1 -1
- package/dist/generated/themes/Link.css.js +1 -1
- package/dist/generated/themes/Link.css.js.map +1 -1
- package/dist/generated/themes/List.css.d.ts +1 -1
- package/dist/generated/themes/List.css.js +1 -1
- package/dist/generated/themes/List.css.js.map +1 -1
- package/dist/generated/themes/ListItem.css.d.ts +1 -1
- package/dist/generated/themes/ListItem.css.js +1 -1
- package/dist/generated/themes/ListItem.css.js.map +1 -1
- package/dist/generated/themes/ListItemBase.css.d.ts +1 -1
- package/dist/generated/themes/ListItemBase.css.js +1 -1
- package/dist/generated/themes/ListItemBase.css.js.map +1 -1
- package/dist/generated/themes/ListItemCustom.css.d.ts +1 -1
- package/dist/generated/themes/ListItemCustom.css.js +1 -1
- package/dist/generated/themes/ListItemCustom.css.js.map +1 -1
- package/dist/generated/themes/ListItemGroup.css.d.ts +1 -1
- package/dist/generated/themes/ListItemGroup.css.js +1 -1
- package/dist/generated/themes/ListItemGroup.css.js.map +1 -1
- package/dist/generated/themes/ListItemGroupHeader.css.d.ts +1 -1
- package/dist/generated/themes/ListItemGroupHeader.css.js +1 -1
- package/dist/generated/themes/ListItemGroupHeader.css.js.map +1 -1
- package/dist/generated/themes/ListItemIcon.css.d.ts +1 -1
- package/dist/generated/themes/ListItemIcon.css.js +1 -1
- package/dist/generated/themes/ListItemIcon.css.js.map +1 -1
- package/dist/generated/themes/Menu.css.d.ts +1 -1
- package/dist/generated/themes/Menu.css.js +1 -1
- package/dist/generated/themes/Menu.css.js.map +1 -1
- package/dist/generated/themes/MenuItem.css.d.ts +1 -1
- package/dist/generated/themes/MenuItem.css.js +1 -1
- package/dist/generated/themes/MenuItem.css.js.map +1 -1
- package/dist/generated/themes/MessageStrip.css.d.ts +1 -1
- package/dist/generated/themes/MessageStrip.css.js +1 -1
- package/dist/generated/themes/MessageStrip.css.js.map +1 -1
- package/dist/generated/themes/MonthPicker.css.d.ts +1 -1
- package/dist/generated/themes/MonthPicker.css.js +1 -1
- package/dist/generated/themes/MonthPicker.css.js.map +1 -1
- package/dist/generated/themes/MultiComboBox.css.d.ts +1 -1
- package/dist/generated/themes/MultiComboBox.css.js +1 -1
- package/dist/generated/themes/MultiComboBox.css.js.map +1 -1
- package/dist/generated/themes/MultiComboBoxItem.css.d.ts +1 -1
- package/dist/generated/themes/MultiComboBoxItem.css.js +1 -1
- package/dist/generated/themes/MultiComboBoxItem.css.js.map +1 -1
- package/dist/generated/themes/MultiComboBoxPopover.css.d.ts +1 -1
- package/dist/generated/themes/MultiComboBoxPopover.css.js +1 -1
- package/dist/generated/themes/MultiComboBoxPopover.css.js.map +1 -1
- package/dist/generated/themes/MultiInput.css.d.ts +1 -1
- package/dist/generated/themes/MultiInput.css.js +1 -1
- package/dist/generated/themes/MultiInput.css.js.map +1 -1
- package/dist/generated/themes/OptionBase.css.d.ts +1 -1
- package/dist/generated/themes/OptionBase.css.js +1 -1
- package/dist/generated/themes/OptionBase.css.js.map +1 -1
- package/dist/generated/themes/Panel.css.d.ts +1 -1
- package/dist/generated/themes/Panel.css.js +1 -1
- package/dist/generated/themes/Panel.css.js.map +1 -1
- package/dist/generated/themes/Popover.css.d.ts +1 -1
- package/dist/generated/themes/Popover.css.js +1 -1
- package/dist/generated/themes/Popover.css.js.map +1 -1
- package/dist/generated/themes/PopupsCommon.css.d.ts +1 -1
- package/dist/generated/themes/PopupsCommon.css.js +1 -1
- package/dist/generated/themes/PopupsCommon.css.js.map +1 -1
- package/dist/generated/themes/ProgressIndicator.css.d.ts +1 -1
- package/dist/generated/themes/ProgressIndicator.css.js +1 -1
- package/dist/generated/themes/ProgressIndicator.css.js.map +1 -1
- package/dist/generated/themes/RadioButton.css.d.ts +1 -1
- package/dist/generated/themes/RadioButton.css.js +1 -1
- package/dist/generated/themes/RadioButton.css.js.map +1 -1
- package/dist/generated/themes/RangeSlider.css.d.ts +1 -1
- package/dist/generated/themes/RangeSlider.css.js +1 -1
- package/dist/generated/themes/RangeSlider.css.js.map +1 -1
- package/dist/generated/themes/RatingIndicator.css.d.ts +1 -1
- package/dist/generated/themes/RatingIndicator.css.js +1 -1
- package/dist/generated/themes/RatingIndicator.css.js.map +1 -1
- package/dist/generated/themes/ResponsivePopover.css.d.ts +1 -1
- package/dist/generated/themes/ResponsivePopover.css.js +1 -1
- package/dist/generated/themes/ResponsivePopover.css.js.map +1 -1
- package/dist/generated/themes/ResponsivePopoverCommon.css.d.ts +1 -1
- package/dist/generated/themes/ResponsivePopoverCommon.css.js +1 -1
- package/dist/generated/themes/ResponsivePopoverCommon.css.js.map +1 -1
- package/dist/generated/themes/SegmentedButton.css.d.ts +1 -1
- package/dist/generated/themes/SegmentedButton.css.js +1 -1
- package/dist/generated/themes/SegmentedButton.css.js.map +1 -1
- package/dist/generated/themes/SegmentedButtonItem.css.d.ts +1 -1
- package/dist/generated/themes/SegmentedButtonItem.css.js +1 -1
- package/dist/generated/themes/SegmentedButtonItem.css.js.map +1 -1
- package/dist/generated/themes/Select.css.d.ts +1 -1
- package/dist/generated/themes/Select.css.js +1 -1
- package/dist/generated/themes/Select.css.js.map +1 -1
- package/dist/generated/themes/SliderBase.css.d.ts +1 -1
- package/dist/generated/themes/SliderBase.css.js +1 -1
- package/dist/generated/themes/SliderBase.css.js.map +1 -1
- package/dist/generated/themes/SplitButton.css.d.ts +1 -1
- package/dist/generated/themes/SplitButton.css.js +1 -1
- package/dist/generated/themes/SplitButton.css.js.map +1 -1
- package/dist/generated/themes/StepInput.css.d.ts +1 -1
- package/dist/generated/themes/StepInput.css.js +1 -1
- package/dist/generated/themes/StepInput.css.js.map +1 -1
- package/dist/generated/themes/SuggestionItem.css.d.ts +1 -1
- package/dist/generated/themes/SuggestionItem.css.js +1 -1
- package/dist/generated/themes/SuggestionItem.css.js.map +1 -1
- package/dist/generated/themes/SuggestionItemCustom.css.d.ts +1 -1
- package/dist/generated/themes/SuggestionItemCustom.css.js +1 -1
- package/dist/generated/themes/SuggestionItemCustom.css.js.map +1 -1
- package/dist/generated/themes/Switch.css.d.ts +1 -1
- package/dist/generated/themes/Switch.css.js +1 -1
- package/dist/generated/themes/Switch.css.js.map +1 -1
- package/dist/generated/themes/TabContainer.css.d.ts +1 -1
- package/dist/generated/themes/TabContainer.css.js +1 -1
- package/dist/generated/themes/TabContainer.css.js.map +1 -1
- package/dist/generated/themes/TabInOverflow.css.d.ts +1 -1
- package/dist/generated/themes/TabInOverflow.css.js +1 -1
- package/dist/generated/themes/TabInOverflow.css.js.map +1 -1
- package/dist/generated/themes/TabInStrip.css.d.ts +1 -1
- package/dist/generated/themes/TabInStrip.css.js +1 -1
- package/dist/generated/themes/TabInStrip.css.js.map +1 -1
- package/dist/generated/themes/TabSemanticIcon.css.d.ts +1 -1
- package/dist/generated/themes/TabSemanticIcon.css.js +1 -1
- package/dist/generated/themes/TabSemanticIcon.css.js.map +1 -1
- package/dist/generated/themes/TabSeparatorInOverflow.css.d.ts +1 -1
- package/dist/generated/themes/TabSeparatorInOverflow.css.js +1 -1
- package/dist/generated/themes/TabSeparatorInOverflow.css.js.map +1 -1
- package/dist/generated/themes/Table.css.d.ts +1 -1
- package/dist/generated/themes/Table.css.js +1 -1
- package/dist/generated/themes/Table.css.js.map +1 -1
- package/dist/generated/themes/TableCell.css.d.ts +1 -1
- package/dist/generated/themes/TableCell.css.js +1 -1
- package/dist/generated/themes/TableCell.css.js.map +1 -1
- package/dist/generated/themes/TableCellBase.css.d.ts +1 -1
- package/dist/generated/themes/TableCellBase.css.js +1 -1
- package/dist/generated/themes/TableCellBase.css.js.map +1 -1
- package/dist/generated/themes/TableHeaderCell.css.d.ts +1 -1
- package/dist/generated/themes/TableHeaderCell.css.js +1 -1
- package/dist/generated/themes/TableHeaderCell.css.js.map +1 -1
- package/dist/generated/themes/TableHeaderCellActionBase.css.d.ts +2 -0
- package/dist/generated/themes/TableHeaderCellActionBase.css.js +8 -0
- package/dist/generated/themes/TableHeaderCellActionBase.css.js.map +1 -0
- package/dist/generated/themes/TableHeaderRow.css.d.ts +1 -1
- package/dist/generated/themes/TableHeaderRow.css.js +1 -1
- package/dist/generated/themes/TableHeaderRow.css.js.map +1 -1
- package/dist/generated/themes/TableRow.css.d.ts +1 -1
- package/dist/generated/themes/TableRow.css.js +1 -1
- package/dist/generated/themes/TableRow.css.js.map +1 -1
- package/dist/generated/themes/TableRowActionBase.css.d.ts +1 -1
- package/dist/generated/themes/TableRowActionBase.css.js +1 -1
- package/dist/generated/themes/TableRowActionBase.css.js.map +1 -1
- package/dist/generated/themes/TableRowBase.css.d.ts +1 -1
- package/dist/generated/themes/TableRowBase.css.js +1 -1
- package/dist/generated/themes/TableRowBase.css.js.map +1 -1
- package/dist/generated/themes/Tag.css.d.ts +1 -1
- package/dist/generated/themes/Tag.css.js +1 -1
- package/dist/generated/themes/Tag.css.js.map +1 -1
- package/dist/generated/themes/Text.css.d.ts +1 -1
- package/dist/generated/themes/Text.css.js +1 -1
- package/dist/generated/themes/Text.css.js.map +1 -1
- package/dist/generated/themes/TextArea.css.d.ts +1 -1
- package/dist/generated/themes/TextArea.css.js +1 -1
- package/dist/generated/themes/TextArea.css.js.map +1 -1
- package/dist/generated/themes/TimePicker.css.d.ts +1 -1
- package/dist/generated/themes/TimePicker.css.js +1 -1
- package/dist/generated/themes/TimePicker.css.js.map +1 -1
- package/dist/generated/themes/Toast.css.d.ts +1 -1
- package/dist/generated/themes/Toast.css.js +1 -1
- package/dist/generated/themes/Toast.css.js.map +1 -1
- package/dist/generated/themes/ToggleButton.css.d.ts +1 -1
- package/dist/generated/themes/ToggleButton.css.js +1 -1
- package/dist/generated/themes/ToggleButton.css.js.map +1 -1
- package/dist/generated/themes/Token.css.d.ts +1 -1
- package/dist/generated/themes/Token.css.js +1 -1
- package/dist/generated/themes/Token.css.js.map +1 -1
- package/dist/generated/themes/Tokenizer.css.d.ts +1 -1
- package/dist/generated/themes/Tokenizer.css.js +1 -1
- package/dist/generated/themes/Tokenizer.css.js.map +1 -1
- package/dist/generated/themes/TokenizerPopover.css.d.ts +1 -1
- package/dist/generated/themes/TokenizerPopover.css.js +1 -1
- package/dist/generated/themes/TokenizerPopover.css.js.map +1 -1
- package/dist/generated/themes/Toolbar.css.d.ts +1 -1
- package/dist/generated/themes/Toolbar.css.js +1 -1
- package/dist/generated/themes/Toolbar.css.js.map +1 -1
- package/dist/generated/themes/ToolbarPopover.css.d.ts +1 -1
- package/dist/generated/themes/ToolbarPopover.css.js +1 -1
- package/dist/generated/themes/ToolbarPopover.css.js.map +1 -1
- package/dist/generated/themes/TreeItem.css.d.ts +1 -1
- package/dist/generated/themes/TreeItem.css.js +1 -1
- package/dist/generated/themes/TreeItem.css.js.map +1 -1
- package/dist/generated/themes/ValueStateMessage.css.d.ts +1 -1
- package/dist/generated/themes/ValueStateMessage.css.js +1 -1
- package/dist/generated/themes/ValueStateMessage.css.js.map +1 -1
- package/dist/generated/themes/YearPicker.css.d.ts +1 -1
- package/dist/generated/themes/YearPicker.css.js +1 -1
- package/dist/generated/themes/YearPicker.css.js.map +1 -1
- package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_fiori_3/parameters-bundle.css.js.map +1 -1
- package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_fiori_3_dark/parameters-bundle.css.js.map +1 -1
- package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_fiori_3_hcb/parameters-bundle.css.js.map +1 -1
- package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_fiori_3_hcw/parameters-bundle.css.js.map +1 -1
- package/dist/generated/themes/sap_horizon/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_horizon/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_horizon/parameters-bundle.css.js.map +1 -1
- package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_horizon_dark/parameters-bundle.css.js.map +1 -1
- package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_horizon_hcb/parameters-bundle.css.js.map +1 -1
- package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.d.ts +1 -1
- package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js +1 -1
- package/dist/generated/themes/sap_horizon_hcw/parameters-bundle.css.js.map +1 -1
- package/dist/vscode.html-custom-data.json +29 -3
- package/dist/web-types.json +43 -40
- package/package.json +9 -9
- package/src/TableCell.hbs +6 -11
- package/src/TableHeaderCell.hbs +5 -1
- package/src/TableHeaderCellActionBase.hbs +6 -0
- package/src/TableRowActionBase.hbs +1 -2
- package/src/i18n/messagebundle.properties +4 -0
- package/src/themes/TableCell.css +1 -0
- package/src/themes/TableHeaderCell.css +20 -3
- package/src/themes/TableHeaderCellActionBase.css +23 -0
- package/src/themes/TableRowActionBase.css +1 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import Table from "../../src/Table.js";
|
|
2
|
+
import TableHeaderRow from "../../src/TableHeaderRow.js";
|
|
3
|
+
import TableHeaderCell from "../../src/TableHeaderCell.js";
|
|
4
|
+
import TableRow from "../../src/TableRow.js";
|
|
5
|
+
import TableCell from "../../src/TableCell.js";
|
|
6
|
+
import TableGrowing from "../../src/TableGrowing.js";
|
|
7
|
+
|
|
8
|
+
describe("Table - Keyboard Navigation", () => {
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
cy.mount(
|
|
11
|
+
<>
|
|
12
|
+
<input id="before-table1" type="Number" value="0"/>
|
|
13
|
+
<Table id="table0">
|
|
14
|
+
<TableGrowing id="growing" type="Button" slot="features"></TableGrowing>
|
|
15
|
+
<TableHeaderRow slot="headerRow">
|
|
16
|
+
<TableHeaderCell><a id="row0-link" href="test.html">Link</a></TableHeaderCell>
|
|
17
|
+
<TableHeaderCell>Header2</TableHeaderCell>
|
|
18
|
+
<TableHeaderCell>Header3</TableHeaderCell>
|
|
19
|
+
<TableHeaderCell>Header4</TableHeaderCell>
|
|
20
|
+
</TableHeaderRow>
|
|
21
|
+
<TableRow>
|
|
22
|
+
<TableCell>Row1Cell0</TableCell>
|
|
23
|
+
<TableCell><input id="row1-input"/></TableCell>
|
|
24
|
+
<TableCell><button id="row1-button">Button 1</button></TableCell>
|
|
25
|
+
<TableCell>Row1Cell3</TableCell>
|
|
26
|
+
</TableRow>
|
|
27
|
+
<TableRow id="interactive-row" interactive>
|
|
28
|
+
<TableCell>Row2Cell0</TableCell>
|
|
29
|
+
<TableCell><input id="row2-input"/></TableCell>
|
|
30
|
+
<TableCell><button id="row2-button">Button 2</button></TableCell>
|
|
31
|
+
<TableCell>Row2Cell3</TableCell>
|
|
32
|
+
</TableRow>
|
|
33
|
+
<TableRow id="notinteractive-row"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
34
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
35
|
+
<TableRow> <TableCell> Here the table structure is broken. There is only one cell in row 5. </TableCell> </TableRow>
|
|
36
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
37
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
38
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
39
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
40
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
41
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
42
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
43
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
44
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
45
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
46
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
47
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
48
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
49
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
50
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
51
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
52
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
53
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
54
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
55
|
+
<TableRow> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
56
|
+
</Table>
|
|
57
|
+
<input id="after-table1"/>
|
|
58
|
+
</>
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
cy.document().then(doc => {
|
|
62
|
+
const table = doc.getElementById("table0");
|
|
63
|
+
const input = doc.getElementById("before-table1");
|
|
64
|
+
table?.addEventListener("ui5-row-click", () => {
|
|
65
|
+
if (input instanceof HTMLInputElement) {
|
|
66
|
+
input.valueAsNumber++;
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
cy.get("#table0").children("ui5-table-row").as("rows");
|
|
72
|
+
cy.get("#table0").children("ui5-table-header-row").as("headerRow");
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
function getCell(row: number, cell: number, headerRow: boolean) {
|
|
76
|
+
if (headerRow) {
|
|
77
|
+
return cy.get("@headerRow").children("ui5-table-header-cell").eq(cell);
|
|
78
|
+
}
|
|
79
|
+
return cy.get("@rows").eq(row)
|
|
80
|
+
.children("ui5-table-cell")
|
|
81
|
+
.eq(cell);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function performActions(actions: { element: Cypress.Chainable, click?: string, condition?: string, conditionValue?:string, type?: string, press?: string | string[] }[]) {
|
|
85
|
+
actions.forEach(action => {
|
|
86
|
+
if (action.click) {
|
|
87
|
+
// @ts-ignore
|
|
88
|
+
action.element.click(action.click);
|
|
89
|
+
}
|
|
90
|
+
if (action.condition) {
|
|
91
|
+
if (action.conditionValue) {
|
|
92
|
+
// timing issue - without wait the check is failing
|
|
93
|
+
action.element.wait(0).should(action.condition, action.conditionValue);
|
|
94
|
+
} else {
|
|
95
|
+
action.element.wait(0).should(action.condition);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (action.type) {
|
|
99
|
+
action.element.type(action.type);
|
|
100
|
+
}
|
|
101
|
+
if (action.press) {
|
|
102
|
+
// @ts-ignore
|
|
103
|
+
action.element.realPress(action.press);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
it("should navigate on rows", () => {
|
|
109
|
+
performActions([
|
|
110
|
+
// left click is needed to focus the row
|
|
111
|
+
// otherwise the it would click in the center of the row where an input is
|
|
112
|
+
// resulting in a focus on the input instead of the row
|
|
113
|
+
{ element: cy.get("@rows").eq(0), click: "left" },
|
|
114
|
+
{ element: cy.get("@rows").eq(0), type: "{leftarrow}", condition: "be.focused" },
|
|
115
|
+
{ element: cy.get("@rows").eq(0), type: "{uparrow}", condition: "be.focused" },
|
|
116
|
+
{ element: cy.get("@headerRow"), type: "{uparrow}", condition: "be.focused" },
|
|
117
|
+
{ element: cy.get("@headerRow"), type: "{downarrow}{downarrow}", condition: "be.focused" },
|
|
118
|
+
{ element: cy.get("@rows").eq(1), type: "{pagedown}", condition: "be.focused" },
|
|
119
|
+
{ element: cy.get("@rows").eq(21), type: "{pagedown}", condition: "be.focused" },
|
|
120
|
+
{ element: cy.get("@rows").eq(24), type: "{pagedown}", condition: "be.focused" },
|
|
121
|
+
{ element: cy.get("#growing").shadow().find("#growing-button"), type: "{pageup}", condition: "be.focused" },
|
|
122
|
+
{ element: cy.get("@rows").eq(5), type: "{pageup}", condition: "be.focused" },
|
|
123
|
+
{ element: cy.get("@rows").eq(0), type: "{end}", condition: "be.focused" },
|
|
124
|
+
{ element: cy.get("@rows").eq(24), type: "{end}", condition: "be.focused" },
|
|
125
|
+
{ element: cy.get("#growing").shadow().find("#growing-button"), type: "{home}", condition: "be.focused" },
|
|
126
|
+
{ element: cy.get("@rows").eq(0), type: "{home}", condition: "be.focused" },
|
|
127
|
+
{ element: cy.get("@headerRow"), condition: "be.focused" }
|
|
128
|
+
]);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it("should navigate on cells", () => {
|
|
132
|
+
performActions([
|
|
133
|
+
{ element: cy.get("@rows").eq(0), click: "left" },
|
|
134
|
+
{ element: cy.get("@rows").eq(0), type: "{rightarrow}", condition: "be.focused" },
|
|
135
|
+
{ element: getCell(0, 0, false), type: "{leftarrow}", condition: "be.focused" },
|
|
136
|
+
{ element: cy.get("@rows").eq(0), type: "{rightarrow}{rightarrow}", condition: "be.focused" },
|
|
137
|
+
{ element: getCell(0, 1, false), type: "{home}", condition: "be.focused" },
|
|
138
|
+
{ element: getCell(0, 0, false), type: "{end}", condition: "be.focused" },
|
|
139
|
+
{ element: getCell(0, 3, false), type: "{rightarrow}", condition: "be.focused" },
|
|
140
|
+
{ element: getCell(0, 3, false), type: "{end}", condition: "be.focused" },
|
|
141
|
+
{ element: cy.get("@rows").eq(0), type: "{end}", condition: "be.focused" },
|
|
142
|
+
{ element: cy.get("@rows").eq(24), type: "{rightarrow}{rightarrow}{rightarrow}", condition: "be.focused" },
|
|
143
|
+
{ element: getCell(24, 2, false), type: "{pageup}", condition: "be.focused" },
|
|
144
|
+
{ element: getCell(4, 0, false), type: "{pageup}", condition: "be.focused" },
|
|
145
|
+
{ element: getCell(0, 0, false), type: "{pageup}", condition: "be.focused" },
|
|
146
|
+
{ element: getCell(0, 0, true), type: "{pagedown}", condition: "be.focused" },
|
|
147
|
+
{ element: getCell(19, 0, false), type: "{pagedown}", condition: "be.focused" },
|
|
148
|
+
{ element: getCell(24, 0, false), type: "{pagedown}", condition: "be.focused" },
|
|
149
|
+
{ element: cy.get("#growing").shadow().find("#growing-button"), type: "{home}", condition: "be.focused" },
|
|
150
|
+
{ element: cy.get("@rows").eq(0), type: "{home}", condition: "be.focused" },
|
|
151
|
+
{ element: cy.get("@headerRow"), type: "{downarrow}{rightarrow}", condition: "be.focused" },
|
|
152
|
+
{ element: getCell(0, 0, false), type: "{downarrow}{rightarrow}", condition: "be.focused" },
|
|
153
|
+
{ element: getCell(1, 1, false), type: "{downarrow}{rightarrow}", condition: "be.focused" },
|
|
154
|
+
{ element: getCell(2, 2, false), type: "{downarrow}{rightarrow}", condition: "be.focused" },
|
|
155
|
+
{ element: getCell(3, 3, false), type: "{downarrow}", condition: "be.focused" },
|
|
156
|
+
{ element: getCell(4, 0, false), condition: "be.focused" }
|
|
157
|
+
]);
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
it("should handle F2/F7/Enter/Tab/Up/Down", () => {
|
|
161
|
+
cy.get("@rows").eq(0).get("#row1-input").as("row1Input");
|
|
162
|
+
cy.get("@rows").eq(1).get("#row2-input").as("row2Input");
|
|
163
|
+
|
|
164
|
+
performActions([
|
|
165
|
+
{ element: cy.get("@rows").eq(0), click: "left" },
|
|
166
|
+
{ element: cy.get("@rows").eq(0), press: "F2", condition: "be.focused" },
|
|
167
|
+
{ element: cy.get("@row1Input"), press: "F2", condition: "be.focused" },
|
|
168
|
+
{ element: getCell(0, 1, false), press: "F2", condition: "be.focused" },
|
|
169
|
+
{ element: cy.get("@row1Input"), press: "F7", condition: "be.focused" },
|
|
170
|
+
{ element: cy.get("@rows").eq(0), press: "F7", condition: "be.focused" },
|
|
171
|
+
{ element: cy.get("@row1Input").eq(0), type: "{downarrow}", condition: "be.focused" },
|
|
172
|
+
{ element: cy.get("@row1Input").eq(0), type: "{uparrow}", condition: "be.focused" },
|
|
173
|
+
{ element: cy.get("@row1Input").eq(0), press: ["F2", "{uparrow}"], condition: "be.focused" },
|
|
174
|
+
{ element: getCell(0, 1, true), press: "F2", condition: "be.focused" },
|
|
175
|
+
{ element: getCell(0, 1, true), type: "{leftarrow}", condition: "be.focused" },
|
|
176
|
+
{ element: getCell(0, 0, true), type: "{enter}", condition: "be.focused" },
|
|
177
|
+
{ element: cy.get("@headerRow").get("#row0-link"), type: "{downarrow}", condition: "be.focused" },
|
|
178
|
+
{ element: getCell(0, 0, false), press: "Tab", condition: "be.focused" },
|
|
179
|
+
{ element: cy.get("#after-table1"), press: ["Shift", "Tab"], condition: "be.focused" },
|
|
180
|
+
{ element: cy.get("@rows").eq(0), type: "{downarrow}", condition: "be.focused" },
|
|
181
|
+
{ element: cy.get("@rows").eq(1), press: "F7", condition: "be.focused" },
|
|
182
|
+
{ element: cy.get("@row2Input").eq(0), press: "Tab", condition: "be.focused" },
|
|
183
|
+
{ element: cy.get("@rows").eq(1).get("#row2-button"), press: "F7", condition: "be.focused" },
|
|
184
|
+
{ element: cy.get("@rows").eq(1), type: "{uparrow}", condition: "be.focused" },
|
|
185
|
+
{ element: cy.get("@rows").eq(0), press: "F7", condition: "be.focused" },
|
|
186
|
+
{ element: cy.get("@rows").eq(0).get("#row1-button"), type: "{uparrow}", condition: "be.focused" },
|
|
187
|
+
{ element: getCell(0, 2, true), press: "F7", condition: "be.focused" },
|
|
188
|
+
{ element: cy.get("@headerRow"), type: "{downarrow}", condition: "be.focused" },
|
|
189
|
+
{ element: cy.get("@rows").eq(0), press: "F7", condition: "be.focused" },
|
|
190
|
+
{ element: getCell(0, 2, false), press: "F7", condition: "be.focused" },
|
|
191
|
+
{ element: cy.get("@rows").eq(0), type: "{downarrow}", condition: "be.focused" },
|
|
192
|
+
{ element: cy.get("@rows").eq(1), press: "F7", condition: "be.focused" },
|
|
193
|
+
{ element: getCell(1, 2, false), press: ["Shift", "Tab"], condition: "be.focused" },
|
|
194
|
+
{ element: cy.get("#before-table1"), press: "Tab", condition: "be.focused" },
|
|
195
|
+
{ element: cy.get("@rows").eq(1), press: "Tab", condition: "be.focused" }
|
|
196
|
+
]);
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it("should should work correctly for interactive rows", () => {
|
|
200
|
+
cy.get("@rows").eq(1).get("#row2-button").as("row2Button");
|
|
201
|
+
cy.get("#table0").get("#before-table1").as("input");
|
|
202
|
+
cy.get("@rows").get("#interactive-row").as("row");
|
|
203
|
+
|
|
204
|
+
performActions([
|
|
205
|
+
{ element: cy.get("@row"), click: "left" },
|
|
206
|
+
{ element: cy.get("@input"), condition: "have.value", conditionValue: "1" },
|
|
207
|
+
{ element: cy.get("@row"), type: "{enter}" },
|
|
208
|
+
{ element: cy.get("@input"), condition: "have.value", conditionValue: "2" },
|
|
209
|
+
{ element: cy.get("@rows").get("#notinteractive-row"), click: "left" },
|
|
210
|
+
{ element: cy.get("@input"), condition: "have.value", conditionValue: "2" },
|
|
211
|
+
{ element: cy.get("@row2Button"), click: "left" },
|
|
212
|
+
{ element: cy.get("@input"), condition: "have.value", conditionValue: "2" },
|
|
213
|
+
{ element: cy.get("@row2Button"), type: "{enter}" },
|
|
214
|
+
{ element: cy.get("@input"), condition: "have.value", conditionValue: "2" },
|
|
215
|
+
{ element: cy.get("@row2Button"), press: "F7" },
|
|
216
|
+
{ element: cy.get("@row"), condition: "be.focused" },
|
|
217
|
+
{ element: cy.get("@row"), press: "Space" },
|
|
218
|
+
{ element: cy.get("@input"), condition: "have.value", conditionValue: "2" },
|
|
219
|
+
{ element: cy.get("@row"), type: "{enter}" },
|
|
220
|
+
{ element: cy.get("@input"), condition: "have.value", conditionValue: "3" }
|
|
221
|
+
]);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import Table from "../../src/Table.js";
|
|
2
|
+
import TableHeaderRow from "../../src/TableHeaderRow.js";
|
|
3
|
+
import TableHeaderCell from "../../src/TableHeaderCell.js";
|
|
4
|
+
import TableRow from "../../src/TableRow.js";
|
|
5
|
+
import TableCell from "../../src/TableCell.js";
|
|
6
|
+
import Label from "../../src/Label.js";
|
|
7
|
+
import Bar from "../../src/Bar.js";
|
|
8
|
+
import Title from "../../src/Title.js";
|
|
9
|
+
import Slider from "../../src/Slider.js";
|
|
10
|
+
|
|
11
|
+
describe("Table - Keyboard Navigation with Fixed Headers", () => {
|
|
12
|
+
function isDisplayedInsideViewport(element: string) {
|
|
13
|
+
cy.get(element).then($el => {
|
|
14
|
+
const el = $el[0];
|
|
15
|
+
const rect = el.getBoundingClientRect();
|
|
16
|
+
|
|
17
|
+
expect(rect.top).to.be.at.least(0);
|
|
18
|
+
expect(rect.left).to.be.at.least(0);
|
|
19
|
+
expect(rect.bottom).to.be.lessThan(Cypress.config("viewportHeight"));
|
|
20
|
+
expect(rect.right).to.be.lessThan(Cypress.config("viewportWidth"));
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
it("scrollable container - focused row should always be below the header", () => {
|
|
25
|
+
cy.mount(
|
|
26
|
+
<div style="height:300px; overflow:auto;">
|
|
27
|
+
<Bar id="toolbar" design="Header" accessible-name-ref="title" style="position: sticky; top: 0; z-index: 2; height: 50px;">
|
|
28
|
+
<Title tabindex={0} level="H3" id="title" slot="startContent">My Selectable Products (3)</Title>
|
|
29
|
+
<Slider id="slider" min={0} max={100} step={1} value={100}
|
|
30
|
+
label-interval="0"/>
|
|
31
|
+
</Bar>
|
|
32
|
+
<Table id="table0" overflow-mode="Popin" sticky-top="50px" accessible-name-ref="title" no-data-text="No data found">
|
|
33
|
+
<TableHeaderRow sticky slot="headerRow">
|
|
34
|
+
<TableHeaderCell id="colA" min-width="300px"><span>ColumnA</span></TableHeaderCell>
|
|
35
|
+
<TableHeaderCell id="colB" min-width="200px">Column B</TableHeaderCell>
|
|
36
|
+
<TableHeaderCell id="colC" min-width="200px">Column C</TableHeaderCell>
|
|
37
|
+
<TableHeaderCell id="colD" min-width="150px">Column D</TableHeaderCell>
|
|
38
|
+
</TableHeaderRow>
|
|
39
|
+
<TableRow id="row-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
40
|
+
<TableRow id="row-2"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
41
|
+
<TableRow id="row-3"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
42
|
+
<TableRow id="row-4"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
43
|
+
<TableRow id="row-5"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
44
|
+
<TableRow id="row-6"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
45
|
+
<TableRow id="row-7"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
46
|
+
<TableRow id="row-8"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
47
|
+
<TableRow id="row-9"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
48
|
+
<TableRow id="row-10"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
49
|
+
<TableRow id="row-11"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
50
|
+
<TableRow id="row-12"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
51
|
+
<TableRow id="row-13"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
52
|
+
<TableRow id="row-14"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
53
|
+
<TableRow id="row-15"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
54
|
+
<TableRow id="row-16"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
55
|
+
<TableRow id="row-17"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
56
|
+
<TableRow id="row-18"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
57
|
+
<TableRow id="row-19"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
58
|
+
<TableRow id="row-20"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
59
|
+
<TableRow id="row-21"> <TableCell>A</TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
60
|
+
</Table>
|
|
61
|
+
</div>
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
cy.get("#table0").children("ui5-table-row").as("rows");
|
|
65
|
+
cy.get("#table0").children("ui5-table-header-row").as("headerRow");
|
|
66
|
+
cy.get("@rows").get("#row-21").as("lastRow");
|
|
67
|
+
|
|
68
|
+
cy.get("@lastRow").scrollIntoView();
|
|
69
|
+
cy.get("@lastRow").click("left");
|
|
70
|
+
cy.get("@lastRow").should("be.focused");
|
|
71
|
+
|
|
72
|
+
for (let i = 20; i > 0; i--) {
|
|
73
|
+
cy.realPress("{uparrow}");
|
|
74
|
+
cy.get("@rows").get(`#row-${i}`).should("be.focused");
|
|
75
|
+
|
|
76
|
+
isDisplayedInsideViewport("@headerRow");
|
|
77
|
+
|
|
78
|
+
cy.get("@headerRow").then($headerRow => {
|
|
79
|
+
cy.get("@rows").get(`#row-${i}`).then($row => {
|
|
80
|
+
const headerRowBottom = $headerRow[0].getBoundingClientRect().bottom;
|
|
81
|
+
const focusedRowTop = $row[0].getBoundingClientRect().top;
|
|
82
|
+
|
|
83
|
+
expect(focusedRowTop).to.be.at.least(headerRowBottom);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("scrollable table - focused row should always be below the header", () => {
|
|
90
|
+
cy.mount(
|
|
91
|
+
<Table id="table1" overflow-mode="Popin" sticky-top="0" accessible-name-ref="title" no-data-text="No data found" style="height: 300px; overflow: auto;">
|
|
92
|
+
<TableHeaderRow sticky slot="headerRow">
|
|
93
|
+
<TableHeaderCell id="colA" min-width="300px"><span>ColumnA</span></TableHeaderCell>
|
|
94
|
+
<TableHeaderCell id="colB" min-width="200px">Column B</TableHeaderCell>
|
|
95
|
+
<TableHeaderCell id="colC" min-width="200px">Column C</TableHeaderCell>
|
|
96
|
+
<TableHeaderCell id="colD" min-width="150px">Column D</TableHeaderCell>
|
|
97
|
+
</TableHeaderRow>
|
|
98
|
+
<TableRow id="row-1-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
99
|
+
<TableRow id="row-2-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
100
|
+
<TableRow id="row-3-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
101
|
+
<TableRow id="row-4-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
102
|
+
<TableRow id="row-5-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
103
|
+
<TableRow id="row-6-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
104
|
+
<TableRow id="row-7-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
105
|
+
<TableRow id="row-8-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
106
|
+
<TableRow id="row-9-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
107
|
+
<TableRow id="row-10-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
108
|
+
<TableRow id="row-11-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
109
|
+
<TableRow id="row-12-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
110
|
+
<TableRow id="row-13-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
111
|
+
<TableRow id="row-14-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
112
|
+
<TableRow id="row-15-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
113
|
+
<TableRow id="row-16-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
114
|
+
<TableRow id="row-17-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
115
|
+
<TableRow id="row-18-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
116
|
+
<TableRow id="row-19-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
117
|
+
<TableRow id="row-20-1"> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
118
|
+
<TableRow id="row-21-1"> <TableCell>A</TableCell> <TableCell></TableCell> <TableCell></TableCell> <TableCell></TableCell> </TableRow>
|
|
119
|
+
</Table>
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
cy.get("#table1").children("ui5-table-row").as("rows");
|
|
123
|
+
cy.get("#table1").children("ui5-table-header-row").as("headerRow");
|
|
124
|
+
cy.get("@rows").get("#row-21-1").as("lastRow");
|
|
125
|
+
|
|
126
|
+
cy.get("@lastRow").scrollIntoView();
|
|
127
|
+
cy.get("@lastRow").click("left");
|
|
128
|
+
cy.get("@lastRow").should("be.focused");
|
|
129
|
+
|
|
130
|
+
for (let i = 20; i > 0; i--) {
|
|
131
|
+
cy.realPress("{uparrow}");
|
|
132
|
+
cy.get("@rows").get(`#row-${i}-1`).should("be.focused");
|
|
133
|
+
|
|
134
|
+
isDisplayedInsideViewport("@headerRow");
|
|
135
|
+
|
|
136
|
+
cy.get("@headerRow").then($headerRow => {
|
|
137
|
+
cy.get("@rows").get(`#row-${i}-1`).then($row => {
|
|
138
|
+
const headerRowBottom = $headerRow[0].getBoundingClientRect().bottom;
|
|
139
|
+
const focusedRowTop = $row[0].getBoundingClientRect().top;
|
|
140
|
+
|
|
141
|
+
expect(focusedRowTop).to.be.at.least(headerRowBottom);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it("body as scroll container - focused row should always be below the header", () => {
|
|
148
|
+
cy.mount(
|
|
149
|
+
<>
|
|
150
|
+
<Bar id="toolbar2" design="Header" accessible-name-ref="title" style="position: sticky; top: 0; z-index: 2; height: 50px;">
|
|
151
|
+
<Title tabindex={0} level="H3" id="title" slot="startContent">My Selectable Products (3)</Title>
|
|
152
|
+
<Slider id="slider" min={0} max={100} step={1} value={100}
|
|
153
|
+
label-interval="0"></Slider>
|
|
154
|
+
</Bar>
|
|
155
|
+
<Table id="table2" overflow-mode="Popin" sticky-top="50px" accessible-name-ref="title" no-data-text="No data found">
|
|
156
|
+
<TableHeaderRow sticky slot="headerRow">
|
|
157
|
+
<TableHeaderCell id="colA" min-width="300px"><span>ColumnA</span></TableHeaderCell>
|
|
158
|
+
<TableHeaderCell id="colB" min-width="200px">Column B</TableHeaderCell>
|
|
159
|
+
<TableHeaderCell id="colC" min-width="200px">Column C</TableHeaderCell>
|
|
160
|
+
<TableHeaderCell id="colD" min-width="150px">Column D</TableHeaderCell>
|
|
161
|
+
</TableHeaderRow>
|
|
162
|
+
${Array.from({ length: 100 }).map((row, index) =>
|
|
163
|
+
<TableRow id={`row-${index + 1}-2`}>
|
|
164
|
+
<TableCell><Label><b>Notebook Basic ${index + 1}</b><br/>HT-100${index + 1}</Label></TableCell>
|
|
165
|
+
<TableCell><Label>Technocom</Label></TableCell>
|
|
166
|
+
<TableCell><Label>32 x 21 x 4 cm</Label></TableCell>
|
|
167
|
+
<TableCell><Label style="color: #2b7c2b"><b>3.7</b> KG</Label></TableCell>
|
|
168
|
+
<TableCell style="text-align: end;"><Label style="text-align: end;"><b>29</b> EUR</Label></TableCell>
|
|
169
|
+
</TableRow>
|
|
170
|
+
)}
|
|
171
|
+
</Table>
|
|
172
|
+
</>
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
cy.get("#table2").children("ui5-table-row").as("rows");
|
|
176
|
+
cy.get("#table2").children("ui5-table-header-row").as("headerRow");
|
|
177
|
+
cy.get("@rows").get("#row-100-2").as("lastRow");
|
|
178
|
+
|
|
179
|
+
cy.get("@lastRow").scrollIntoView();
|
|
180
|
+
cy.get("@lastRow").click("left");
|
|
181
|
+
cy.get("@lastRow").should("be.focused");
|
|
182
|
+
|
|
183
|
+
for (let i = 99; i > 0; i--) {
|
|
184
|
+
cy.realPress("{uparrow}");
|
|
185
|
+
cy.get("@rows").get(`#row-${i}-2`).should("be.focused");
|
|
186
|
+
|
|
187
|
+
isDisplayedInsideViewport("@headerRow");
|
|
188
|
+
|
|
189
|
+
cy.get("@headerRow").then($headerRow => {
|
|
190
|
+
cy.get("@rows").get(`#row-${i}-2`).then($row => {
|
|
191
|
+
const headerRowBottom = $headerRow[0].getBoundingClientRect().bottom;
|
|
192
|
+
const focusedRowTop = $row[0].getBoundingClientRect().top;
|
|
193
|
+
|
|
194
|
+
expect(focusedRowTop).to.be.at.least(headerRowBottom);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
});
|