@patternfly/elements 3.0.0 → 3.0.1
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/custom-elements.json +490 -484
- package/package.json +1 -1
- package/pf-accordion/BaseAccordion.js +2 -1
- package/pf-accordion/BaseAccordion.js.map +1 -1
- package/pf-accordion/BaseAccordionHeader.js +4 -1
- package/pf-accordion/BaseAccordionHeader.js.map +1 -1
- package/pf-accordion/BaseAccordionPanel.d.ts +1 -1
- package/pf-accordion/pf-accordion-header.d.ts +1 -1
- package/pf-accordion/pf-accordion.d.ts +0 -5
- package/pf-accordion/pf-accordion.js +0 -5
- package/pf-accordion/pf-accordion.js.map +1 -1
- package/pf-accordion/test/pf-accordion.e2e.d.ts +1 -0
- package/pf-accordion/test/pf-accordion.e2e.js +11 -0
- package/pf-accordion/test/pf-accordion.e2e.js.map +1 -0
- package/pf-accordion/test/pf-accordion.spec.d.ts +1 -0
- package/pf-accordion/test/pf-accordion.spec.js +1222 -0
- package/pf-accordion/test/pf-accordion.spec.js.map +1 -0
- package/pf-avatar/BaseAvatar.d.ts +1 -1
- package/pf-avatar/test/pf-avatar.e2e.d.ts +1 -0
- package/pf-avatar/test/pf-avatar.e2e.js +11 -0
- package/pf-avatar/test/pf-avatar.e2e.js.map +1 -0
- package/pf-avatar/test/pf-avatar.spec.d.ts +1 -0
- package/pf-avatar/test/pf-avatar.spec.js +45 -0
- package/pf-avatar/test/pf-avatar.spec.js.map +1 -0
- package/pf-back-to-top/demo/demo.css +25 -0
- package/pf-back-to-top/pf-back-to-top.d.ts +1 -1
- package/pf-back-to-top/test/pf-back-to-top.e2e.d.ts +1 -0
- package/pf-back-to-top/test/pf-back-to-top.e2e.js +11 -0
- package/pf-back-to-top/test/pf-back-to-top.e2e.js.map +1 -0
- package/pf-back-to-top/test/pf-back-to-top.spec.d.ts +1 -0
- package/pf-back-to-top/test/pf-back-to-top.spec.js +267 -0
- package/pf-back-to-top/test/pf-back-to-top.spec.js.map +1 -0
- package/pf-background-image/pf-background-image.d.ts +1 -4
- package/pf-background-image/pf-background-image.js +1 -4
- package/pf-background-image/pf-background-image.js.map +1 -1
- package/pf-background-image/test/pf-background-image.e2e.d.ts +1 -0
- package/pf-background-image/test/pf-background-image.e2e.js +11 -0
- package/pf-background-image/test/pf-background-image.e2e.js.map +1 -0
- package/pf-background-image/test/pf-background-image.spec.d.ts +1 -0
- package/pf-background-image/test/pf-background-image.spec.js +89 -0
- package/pf-background-image/test/pf-background-image.spec.js.map +1 -0
- package/pf-badge/BaseBadge.d.ts +1 -1
- package/pf-badge/test/pf-badge.e2e.d.ts +1 -0
- package/pf-badge/test/pf-badge.e2e.js +11 -0
- package/pf-badge/test/pf-badge.e2e.js.map +1 -0
- package/pf-badge/test/pf-badge.spec.d.ts +1 -0
- package/pf-badge/test/pf-badge.spec.js +52 -0
- package/pf-badge/test/pf-badge.spec.js.map +1 -0
- package/pf-banner/pf-banner.d.ts +1 -10
- package/pf-banner/pf-banner.js +0 -9
- package/pf-banner/pf-banner.js.map +1 -1
- package/pf-banner/test/pf-banner.e2e.d.ts +1 -0
- package/pf-banner/test/pf-banner.e2e.js +11 -0
- package/pf-banner/test/pf-banner.e2e.js.map +1 -0
- package/pf-banner/test/pf-banner.spec.d.ts +1 -0
- package/pf-banner/test/pf-banner.spec.js +81 -0
- package/pf-banner/test/pf-banner.spec.js.map +1 -0
- package/pf-button/BaseButton.d.ts +7 -2
- package/pf-button/BaseButton.js +4 -1
- package/pf-button/BaseButton.js.map +1 -1
- package/pf-button/pf-button.d.ts +1 -17
- package/pf-button/pf-button.js +10 -18
- package/pf-button/pf-button.js.map +1 -1
- package/pf-button/test/pf-button.e2e.d.ts +1 -0
- package/pf-button/test/pf-button.e2e.js +11 -0
- package/pf-button/test/pf-button.e2e.js.map +1 -0
- package/pf-button/test/pf-button.spec.d.ts +1 -0
- package/pf-button/test/pf-button.spec.js +124 -0
- package/pf-button/test/pf-button.spec.js.map +1 -0
- package/pf-card/BaseCard.d.ts +1 -1
- package/pf-card/test/pf-card.e2e.d.ts +1 -0
- package/pf-card/test/pf-card.e2e.js +11 -0
- package/pf-card/test/pf-card.e2e.js.map +1 -0
- package/pf-card/test/pf-card.spec.d.ts +1 -0
- package/pf-card/test/pf-card.spec.js +160 -0
- package/pf-card/test/pf-card.spec.js.map +1 -0
- package/pf-chip/pf-chip-group.d.ts +8 -5
- package/pf-chip/pf-chip-group.js +10 -10
- package/pf-chip/pf-chip-group.js.map +1 -1
- package/pf-chip/pf-chip.d.ts +8 -5
- package/pf-chip/pf-chip.js +4 -4
- package/pf-chip/pf-chip.js.map +1 -1
- package/pf-chip/test/pf-chip-group.spec.d.ts +1 -0
- package/pf-chip/test/pf-chip-group.spec.js +189 -0
- package/pf-chip/test/pf-chip-group.spec.js.map +1 -0
- package/pf-chip/test/pf-chip.e2e.d.ts +1 -0
- package/pf-chip/test/pf-chip.e2e.js +11 -0
- package/pf-chip/test/pf-chip.e2e.js.map +1 -0
- package/pf-chip/test/pf-chip.spec.d.ts +1 -0
- package/pf-chip/test/pf-chip.spec.js +116 -0
- package/pf-chip/test/pf-chip.spec.js.map +1 -0
- package/pf-clipboard-copy/pf-clipboard-copy.d.ts +8 -3
- package/pf-clipboard-copy/pf-clipboard-copy.js +5 -3
- package/pf-clipboard-copy/pf-clipboard-copy.js.map +1 -1
- package/pf-clipboard-copy/test/pf-clipboard-copy.e2e.d.ts +1 -0
- package/pf-clipboard-copy/test/pf-clipboard-copy.e2e.js +11 -0
- package/pf-clipboard-copy/test/pf-clipboard-copy.e2e.js.map +1 -0
- package/pf-clipboard-copy/test/pf-clipboard-copy.spec.d.ts +1 -0
- package/pf-clipboard-copy/test/pf-clipboard-copy.spec.js +103 -0
- package/pf-clipboard-copy/test/pf-clipboard-copy.spec.js.map +1 -0
- package/pf-code-block/BaseCodeBlock.js +2 -2
- package/pf-code-block/BaseCodeBlock.js.map +1 -1
- package/pf-code-block/pf-code-block.d.ts +1 -1
- package/pf-code-block/test/pf-code-block.e2e.d.ts +1 -0
- package/pf-code-block/test/pf-code-block.e2e.js +11 -0
- package/pf-code-block/test/pf-code-block.e2e.js.map +1 -0
- package/pf-code-block/test/pf-code-block.spec.d.ts +1 -0
- package/pf-code-block/test/pf-code-block.spec.js +89 -0
- package/pf-code-block/test/pf-code-block.spec.js.map +1 -0
- package/pf-dropdown/pf-dropdown-group.d.ts +1 -1
- package/pf-dropdown/pf-dropdown-group.js +4 -1
- package/pf-dropdown/pf-dropdown-group.js.map +1 -1
- package/pf-dropdown/pf-dropdown-item.d.ts +1 -2
- package/pf-dropdown/pf-dropdown-item.js +4 -2
- package/pf-dropdown/pf-dropdown-item.js.map +1 -1
- package/pf-dropdown/pf-dropdown-menu.d.ts +1 -2
- package/pf-dropdown/pf-dropdown-menu.js +8 -6
- package/pf-dropdown/pf-dropdown-menu.js.map +1 -1
- package/pf-dropdown/pf-dropdown.d.ts +8 -6
- package/pf-dropdown/pf-dropdown.js +11 -11
- package/pf-dropdown/pf-dropdown.js.map +1 -1
- package/pf-dropdown/test/pf-dropdown.e2e.d.ts +1 -0
- package/pf-dropdown/test/pf-dropdown.e2e.js +11 -0
- package/pf-dropdown/test/pf-dropdown.e2e.js.map +1 -0
- package/pf-dropdown/test/pf-dropdown.spec.d.ts +1 -0
- package/pf-dropdown/test/pf-dropdown.spec.js +129 -0
- package/pf-dropdown/test/pf-dropdown.spec.js.map +1 -0
- package/pf-icon/BaseIcon.d.ts +1 -2
- package/pf-icon/BaseIcon.js +3 -4
- package/pf-icon/BaseIcon.js.map +1 -1
- package/pf-icon/demo/icons/rh/boba-tea.js +5 -0
- package/pf-icon/demo/icons/rh/lifecycle.js +3 -0
- package/pf-icon/test/pf-icon.e2e.d.ts +1 -0
- package/pf-icon/test/pf-icon.e2e.js +11 -0
- package/pf-icon/test/pf-icon.e2e.js.map +1 -0
- package/pf-icon/test/pf-icon.spec.d.ts +1 -0
- package/pf-icon/test/pf-icon.spec.js +130 -0
- package/pf-icon/test/pf-icon.spec.js.map +1 -0
- package/pf-icon/test/rh-icon-aed.js +2 -0
- package/pf-icon/test/rh-icon-api.js +2 -0
- package/pf-icon/test/rh-icon-atom.js +2 -0
- package/pf-icon/test/rh-icon-bike.js +2 -0
- package/pf-jump-links/pf-jump-links-item.d.ts +8 -2
- package/pf-jump-links/pf-jump-links-item.js +4 -1
- package/pf-jump-links/pf-jump-links-item.js.map +1 -1
- package/pf-jump-links/pf-jump-links-list.d.ts +1 -1
- package/pf-jump-links/pf-jump-links.d.ts +1 -7
- package/pf-jump-links/pf-jump-links.js +1 -7
- package/pf-jump-links/pf-jump-links.js.map +1 -1
- package/pf-jump-links/test/pf-jump-links.e2e.d.ts +1 -0
- package/pf-jump-links/test/pf-jump-links.e2e.js +11 -0
- package/pf-jump-links/test/pf-jump-links.e2e.js.map +1 -0
- package/pf-jump-links/test/pf-jump-links.spec.d.ts +1 -0
- package/pf-jump-links/test/pf-jump-links.spec.js +85 -0
- package/pf-jump-links/test/pf-jump-links.spec.js.map +1 -0
- package/pf-label/BaseLabel.d.ts +1 -1
- package/pf-label/pf-label.d.ts +10 -24
- package/pf-label/pf-label.js +4 -21
- package/pf-label/pf-label.js.map +1 -1
- package/pf-label/test/pf-label.e2e.d.ts +1 -0
- package/pf-label/test/pf-label.e2e.js +11 -0
- package/pf-label/test/pf-label.e2e.js.map +1 -0
- package/pf-label/test/pf-label.spec.d.ts +1 -0
- package/pf-label/test/pf-label.spec.js +111 -0
- package/pf-label/test/pf-label.spec.js.map +1 -0
- package/pf-modal/pf-modal.d.ts +1 -6
- package/pf-modal/pf-modal.js +6 -8
- package/pf-modal/pf-modal.js.map +1 -1
- package/pf-modal/test/pf-modal.e2e.d.ts +1 -0
- package/pf-modal/test/pf-modal.e2e.js +13 -0
- package/pf-modal/test/pf-modal.e2e.js.map +1 -0
- package/pf-modal/test/pf-modal.spec.d.ts +1 -0
- package/pf-modal/test/pf-modal.spec.js +197 -0
- package/pf-modal/test/pf-modal.spec.js.map +1 -0
- package/pf-panel/pf-panel.d.ts +1 -1
- package/pf-panel/test/pf-panel.e2e.d.ts +1 -0
- package/pf-panel/test/pf-panel.e2e.js +11 -0
- package/pf-panel/test/pf-panel.e2e.js.map +1 -0
- package/pf-panel/test/pf-panel.spec.d.ts +1 -0
- package/pf-panel/test/pf-panel.spec.js +22 -0
- package/pf-panel/test/pf-panel.spec.js.map +1 -0
- package/pf-popover/pf-popover.d.ts +1 -5
- package/pf-popover/pf-popover.js +12 -7
- package/pf-popover/pf-popover.js.map +1 -1
- package/pf-popover/test/pf-popover.e2e.d.ts +1 -0
- package/pf-popover/test/pf-popover.e2e.js +11 -0
- package/pf-popover/test/pf-popover.e2e.js.map +1 -0
- package/pf-popover/test/pf-popover.spec.d.ts +1 -0
- package/pf-popover/test/pf-popover.spec.js +233 -0
- package/pf-popover/test/pf-popover.spec.js.map +1 -0
- package/pf-progress/demo/kitchen-sink.css +4 -0
- package/pf-progress/pf-progress.d.ts +1 -22
- package/pf-progress/pf-progress.js +1 -22
- package/pf-progress/pf-progress.js.map +1 -1
- package/pf-progress/test/pf-progress.e2e.d.ts +1 -0
- package/pf-progress/test/pf-progress.e2e.js +11 -0
- package/pf-progress/test/pf-progress.e2e.js.map +1 -0
- package/pf-progress/test/pf-progress.spec.d.ts +1 -0
- package/pf-progress/test/pf-progress.spec.js +45 -0
- package/pf-progress/test/pf-progress.spec.js.map +1 -0
- package/pf-progress-stepper/pf-progress-step.d.ts +1 -1
- package/pf-progress-stepper/pf-progress-stepper.d.ts +1 -1
- package/pf-progress-stepper/test/pf-progress-stepper.e2e.d.ts +1 -0
- package/pf-progress-stepper/test/pf-progress-stepper.e2e.js +11 -0
- package/pf-progress-stepper/test/pf-progress-stepper.e2e.js.map +1 -0
- package/pf-progress-stepper/test/pf-progress-stepper.spec.d.ts +1 -0
- package/pf-progress-stepper/test/pf-progress-stepper.spec.js +18 -0
- package/pf-progress-stepper/test/pf-progress-stepper.spec.js.map +1 -0
- package/pf-select/pf-option-group.d.ts +1 -1
- package/pf-select/pf-option-group.js +2 -0
- package/pf-select/pf-option-group.js.map +1 -1
- package/pf-select/pf-option.d.ts +1 -2
- package/pf-select/pf-option.js +3 -4
- package/pf-select/pf-option.js.map +1 -1
- package/pf-select/pf-select.d.ts +8 -3
- package/pf-select/pf-select.js +51 -21
- package/pf-select/pf-select.js.map +1 -1
- package/pf-select/test/pf-select.e2e.d.ts +1 -0
- package/pf-select/test/pf-select.e2e.js +11 -0
- package/pf-select/test/pf-select.e2e.js.map +1 -0
- package/pf-select/test/pf-select.spec.d.ts +1 -0
- package/pf-select/test/pf-select.spec.js +866 -0
- package/pf-select/test/pf-select.spec.js.map +1 -0
- package/pf-spinner/BaseSpinner.d.ts +1 -2
- package/pf-spinner/BaseSpinner.js +2 -4
- package/pf-spinner/BaseSpinner.js.map +1 -1
- package/pf-spinner/pf-spinner.d.ts +2 -2
- package/pf-spinner/pf-spinner.js +8 -1
- package/pf-spinner/pf-spinner.js.map +1 -1
- package/pf-spinner/test/pf-spinner.e2e.d.ts +1 -0
- package/pf-spinner/test/pf-spinner.e2e.js +11 -0
- package/pf-spinner/test/pf-spinner.e2e.js.map +1 -0
- package/pf-spinner/test/pf-spinner.spec.d.ts +1 -0
- package/pf-spinner/test/pf-spinner.spec.js +64 -0
- package/pf-spinner/test/pf-spinner.spec.js.map +1 -0
- package/pf-switch/BaseSwitch.d.ts +1 -1
- package/pf-switch/BaseSwitch.js +3 -3
- package/pf-switch/BaseSwitch.js.map +1 -1
- package/pf-switch/test/pf-switch.e2e.d.ts +1 -0
- package/pf-switch/test/pf-switch.e2e.js +11 -0
- package/pf-switch/test/pf-switch.e2e.js.map +1 -0
- package/pf-switch/test/pf-switch.spec.d.ts +1 -0
- package/pf-switch/test/pf-switch.spec.js +191 -0
- package/pf-switch/test/pf-switch.spec.js.map +1 -0
- package/pf-table/pf-caption.d.ts +1 -1
- package/pf-table/pf-table.d.ts +1 -3
- package/pf-table/pf-table.js +2 -4
- package/pf-table/pf-table.js.map +1 -1
- package/pf-table/pf-tbody.d.ts +1 -1
- package/pf-table/pf-td.d.ts +1 -1
- package/pf-table/pf-th.d.ts +1 -1
- package/pf-table/pf-th.js +3 -3
- package/pf-table/pf-th.js.map +1 -1
- package/pf-table/pf-thead.d.ts +1 -1
- package/pf-table/pf-tr.d.ts +1 -1
- package/pf-table/pf-tr.js +4 -4
- package/pf-table/pf-tr.js.map +1 -1
- package/pf-table/test/pf-table.e2e.d.ts +1 -0
- package/pf-table/test/pf-table.e2e.js +11 -0
- package/pf-table/test/pf-table.e2e.js.map +1 -0
- package/pf-table/test/pf-table.spec.d.ts +1 -0
- package/pf-table/test/pf-table.spec.js +17 -0
- package/pf-table/test/pf-table.spec.js.map +1 -0
- package/pf-tabs/BaseTab.d.ts +2 -2
- package/pf-tabs/BaseTab.js +4 -1
- package/pf-tabs/BaseTab.js.map +1 -1
- package/pf-tabs/BaseTabPanel.d.ts +1 -1
- package/pf-tabs/BaseTabs.d.ts +1 -3
- package/pf-tabs/BaseTabs.js +11 -12
- package/pf-tabs/BaseTabs.js.map +1 -1
- package/pf-tabs/pf-tab-panel.d.ts +1 -1
- package/pf-tabs/pf-tab.d.ts +1 -17
- package/pf-tabs/pf-tab.js +0 -16
- package/pf-tabs/pf-tab.js.map +1 -1
- package/pf-tabs/pf-tabs.d.ts +1 -12
- package/pf-tabs/pf-tabs.js +2 -13
- package/pf-tabs/pf-tabs.js.map +1 -1
- package/pf-tabs/test/pf-tabs.e2e.d.ts +1 -0
- package/pf-tabs/test/pf-tabs.e2e.js +13 -0
- package/pf-tabs/test/pf-tabs.e2e.js.map +1 -0
- package/pf-tabs/test/pf-tabs.spec.d.ts +1 -0
- package/pf-tabs/test/pf-tabs.spec.js +285 -0
- package/pf-tabs/test/pf-tabs.spec.js.map +1 -0
- package/pf-text-area/pf-text-area.d.ts +1 -2
- package/pf-text-area/pf-text-area.js +5 -5
- package/pf-text-area/pf-text-area.js.map +1 -1
- package/pf-text-area/test/pf-text-area.e2e.d.ts +1 -0
- package/pf-text-area/test/pf-text-area.e2e.js +11 -0
- package/pf-text-area/test/pf-text-area.e2e.js.map +1 -0
- package/pf-text-area/test/pf-text-area.spec.d.ts +1 -0
- package/pf-text-area/test/pf-text-area.spec.js +89 -0
- package/pf-text-area/test/pf-text-area.spec.js.map +1 -0
- package/pf-text-input/demo/demo.css +6 -0
- package/pf-text-input/pf-text-input.d.ts +8 -3
- package/pf-text-input/pf-text-input.js +4 -2
- package/pf-text-input/pf-text-input.js.map +1 -1
- package/pf-text-input/test/pf-text-input.e2e.d.ts +1 -0
- package/pf-text-input/test/pf-text-input.e2e.js +11 -0
- package/pf-text-input/test/pf-text-input.e2e.js.map +1 -0
- package/pf-text-input/test/pf-text-input.spec.d.ts +1 -0
- package/pf-text-input/test/pf-text-input.spec.js +20 -0
- package/pf-text-input/test/pf-text-input.spec.js.map +1 -0
- package/pf-tile/BaseTile.d.ts +1 -1
- package/pf-tile/pf-tile.d.ts +0 -12
- package/pf-tile/pf-tile.js +0 -12
- package/pf-tile/pf-tile.js.map +1 -1
- package/pf-tile/test/pf-tile.e2e.d.ts +1 -0
- package/pf-tile/test/pf-tile.e2e.js +11 -0
- package/pf-tile/test/pf-tile.e2e.js.map +1 -0
- package/pf-tile/test/pf-tile.spec.d.ts +1 -0
- package/pf-tile/test/pf-tile.spec.js +54 -0
- package/pf-tile/test/pf-tile.spec.js.map +1 -0
- package/pf-timestamp/pf-timestamp.d.ts +1 -1
- package/pf-timestamp/pf-timestamp.js +5 -1
- package/pf-timestamp/pf-timestamp.js.map +1 -1
- package/pf-timestamp/test/pf-timestamp.e2e.d.ts +1 -0
- package/pf-timestamp/test/pf-timestamp.e2e.js +12 -0
- package/pf-timestamp/test/pf-timestamp.e2e.js.map +1 -0
- package/pf-timestamp/test/pf-timestamp.spec.d.ts +1 -0
- package/pf-timestamp/test/pf-timestamp.spec.js +156 -0
- package/pf-timestamp/test/pf-timestamp.spec.js.map +1 -0
- package/pf-tooltip/BaseTooltip.d.ts +1 -1
- package/pf-tooltip/pf-tooltip.d.ts +1 -4
- package/pf-tooltip/pf-tooltip.js +6 -7
- package/pf-tooltip/pf-tooltip.js.map +1 -1
- package/pf-tooltip/test/pf-tooltip.e2e.d.ts +1 -0
- package/pf-tooltip/test/pf-tooltip.e2e.js +11 -0
- package/pf-tooltip/test/pf-tooltip.e2e.js.map +1 -0
- package/pf-tooltip/test/pf-tooltip.spec.d.ts +1 -0
- package/pf-tooltip/test/pf-tooltip.spec.js +53 -0
- package/pf-tooltip/test/pf-tooltip.spec.js.map +1 -0
- package/pfe.min.js +269 -266
- package/pfe.min.js.map +3 -3
- package/pf-accordion/README.md +0 -44
- package/pf-avatar/README.md +0 -31
- package/pf-back-to-top/README.md +0 -32
- package/pf-background-image/README.md +0 -37
- package/pf-badge/README.md +0 -57
- package/pf-banner/README.md +0 -60
- package/pf-button/README.md +0 -61
- package/pf-card/README.md +0 -34
- package/pf-chip/README.md +0 -20
- package/pf-clipboard-copy/README.md +0 -8
- package/pf-code-block/README.md +0 -77
- package/pf-dropdown/README.md +0 -46
- package/pf-icon/README.md +0 -86
- package/pf-icon/icons/fab/readme.svg +0 -1
- package/pf-jump-links/README.md +0 -27
- package/pf-label/README.md +0 -61
- package/pf-modal/README.md +0 -63
- package/pf-panel/README.md +0 -10
- package/pf-popover/README.md +0 -48
- package/pf-progress/README.md +0 -33
- package/pf-progress-stepper/README.md +0 -41
- package/pf-select/README.md +0 -21
- package/pf-spinner/README.md +0 -46
- package/pf-switch/README.md +0 -91
- package/pf-table/README.md +0 -43
- package/pf-tabs/README.md +0 -40
- package/pf-text-area/README.md +0 -11
- package/pf-text-input/README.md +0 -9
- package/pf-tile/README.md +0 -12
- package/pf-timestamp/README.md +0 -64
- package/pf-tooltip/README.md +0 -64
package/pf-tabs/pf-tabs.js
CHANGED
|
@@ -19,36 +19,27 @@ import { css } from "lit";
|
|
|
19
19
|
const styles = css `:host {\n display: block;\n}\n\n[part="tabs-container"] {\n position: relative;\n display: flex;\n overflow: hidden;\n}\n\n[part="tabs-container"]::before {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n border-style: solid;\n}\n\n:host button {\n opacity: 1;\n}\n\n:host button:nth-of-type(1) {\n margin-inline-end: 0;\n translate: 0 0;\n}\n\n:host button:nth-of-type(2) {\n margin-inline-start: 0;\n translate: 0 0;\n}\n\n[part="tabs"],\n[part="panels"] {\n display: block;\n}\n\n[part="tabs"] {\n scrollbar-width: none;\n position: relative;\n max-width: 100%;\n overflow-x: auto;\n}\n\n[part="tabs-container"]::before,\n[part="tabs"]::before,\nbutton::before {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n content: "";\n border-style: solid;\n}\n\n[part="tabs"]::before,\nbutton::before {\n top: 0;\n}\n\nbutton,\n[part="tabs"]::before {\n border: 0;\n}\n\nbutton {\n flex: none;\n line-height: 1;\n opacity: 0;\n}\n\nbutton::before {\n border-block-start-width: 0;\n}\n\nbutton:nth-of-type(1) {\n translate: -100% 0;\n}\n\nbutton:nth-of-type(2) {\n translate: 100% 0;\n}\n\nbutton:disabled {\n pointer-events: none;\n}\n\n[part="tabs-container"] {\n width: var(--pf-c-tabs--Width, auto);\n padding-inline-end: var(--pf-c-tabs--inset, 0);\n padding-inline-start: var(--pf-c-tabs--inset, 0);\n}\n\n[part="tabs-container"]::before {\n border-color: var(--pf-c-tabs--before--BorderColor, var(--pf-global--BorderColor--100, #d2d2d2));\n border-block-start-width: var(--pf-c-tabs--before--BorderTopWidth, 0);\n border-inline-end-width: var(--pf-c-tabs--before--BorderRightWidth, 0);\n border-block-end-width: var(--pf-c-tabs--before--BorderBottomWidth, var(--pf-c-tabs--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px)));\n border-inline-start-width: var(--pf-c-tabs--before--BorderLeftWidth, 0);\n}\n\n:host([box]) [part="tabs-container"] {\n --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs--m-box__link--BackgroundColor, var(--pf-global--BackgroundColor--200, #f0f0f0));\n --pf-c-tabs__link--disabled--BackgroundColor: var(--pf-c-tabs--m-box__link--disabled--BackgroundColor, var(--pf-global--disabled-color--200, #d2d2d2));\n --pf-c-tabs__link--before--BorderBottomWidth: var(--pf-c-tabs__link--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n --pf-c-tabs__link--before--BorderRightWidth: var(--pf-c-tabs__link--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n --pf-c-tabs__link--disabled--before--BorderRightWidth: var(--pf-c-tabs__link--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n --pf-c-tabs__link--after--Top: 0;\n --pf-c-tabs__link--after--Bottom: auto;\n}\n\n:host([box]) ::slotted(pf-tab:last-of-type) {\n --pf-c-tabs__link--before--BorderRightWidth: 0;\n}\n\n:host([box]) button:nth-of-type(2)::before {\n left: calc(var(--pf-c-tabs__link--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px)) * -1);\n}\n\n:host([box]) pf-tab[aria-selected="true"] + pf-tab {\n --pf-c-tabs__link--before--Left: 0;\n}\n\n:host([box="light"]) [part="tabs-container"] {\n --pf-c-tabs__link--BackgroundColor: var(--pf-c-tabs--m-color-scheme--light-300__link--BackgroundColor, transparent);\n --pf-c-tabs__item--m-current__link--BackgroundColor: var(--pf-c-tabs--m-color-scheme--light-300__item--m-current__link--BackgroundColor, var(--pf-global--BackgroundColor--light-300, #f0f0f0));\n --pf-c-tabs__link--disabled--BackgroundColor: var(--pf-c-tabs--m-color-scheme--light-300__link--disabled--BackgroundColor, var(--pf-global--palette--black-150, #f5f5f5));\n}\n\n:host([vertical]) [part="tabs-container"] {\n --pf-c-tabs--Width: var(--pf-c-tabs--m-vertical--Width, 100%);\n --pf-c-tabs--inset: var(--pf-c-tabs--m-vertical--inset, var(--pf-global--spacer--lg, 1.5rem));\n --pf-c-tabs--before--BorderBottomWidth: 0; /* *override user setting* border bottom should always be 0 for vertical tabs */\n --pf-c-tabs__link--PaddingTop: var(--pf-c-tabs--m-vertical__link--PaddingTop, var(--pf-global--spacer--md, 1rem));\n --pf-c-tabs__link--PaddingBottom: var(--pf-c-tabs--m-vertical__link--PaddingBottom, var(--pf-global--spacer--md, 1rem));\n --pf-c-tabs__link--before--Left: 0;\n --pf-c-tabs__link--disabled--before--BorderBottomWidth: 0; /* *override user setting* border bottom for disabled should always be 0 for vertical tabs */\n --pf-c-tabs__link--disabled--before--BorderLeftWidth: var(--pf-c-tabs--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n --pf-c-tabs__link--after--Top: 0;\n --pf-c-tabs__link--after--Right: auto;\n\n display: inline-flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n overflow: visible;\n}\n\n:host([vertical]) [part="tabs"] {\n position: relative;\n flex-direction: column;\n flex-grow: 1;\n max-width: var(--pf-c-tabs--m-vertical--MaxWidth, 15.625rem);\n}\n\n:host([vertical]) [part="tabs"]::before {\n position: absolute;\n right: auto;\n border-style: solid;\n border-color: var(--pf-c-tabs--m-vertical__list--before--BorderColor, var(--pf-c-tabs--before--BorderColor, var(--pf-global--BorderColor--100, #d2d2d2)));\n border-block-start-width: var(--pf-c-tabs--m-vertical__list--before--BorderTopWidth, 0);\n border-inline-end-width: var(--pf-c-tabs--m-vertical__list--before--BorderRightWidth, 0);\n border-block-end-width: var(--pf-c-tabs--m-vertical__list--before--BorderBottomWidth, 0);\n border-inline-start-width: var(--pf-c-tabs--m-vertical__list--before--BorderLeftWidth, var(--pf-c-tabs--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px)));\n}\n\n:host([vertical]) ::slotted(pf-tab:first-of-type) {\n margin-block-start: var(--pf-c-tabs--inset, 0);\n}\n\n:host([vertical]) ::slotted(pf-tab:last-of-type) {\n margin-block-end: var(--pf-c-tabs--inset, 0);\n}\n\n:host([box][vertical]) [part="tabs-container"] {\n --pf-c-tabs--inset: var(--pf-c-tabs--m-vertical--m-box--inset, var(--pf-global--spacer--xl, 2rem));\n --pf-c-tabs--m-vertical__list--before--BorderLeftWidth: 0; /* *override user setting* border left should be 0 for vertical box; */\n --pf-c-tabs--m-vertical__list--before--BorderRightWidth: var(--pf-c-tabs--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n --pf-c-tabs__link--disabled--before--BorderRightWidth: var(--pf-c-tabs--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n /* --pf-c-tabs__link--disabled--before--BorderBottomWidth: var(--pf-c-tabs--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px)); */\n --pf-c-tabs__link--disabled--before--BorderLeftWidth: 0; /* *override user setting* border left should be 0 for disabled ; */\n}\n\n:host([box][vertical]) [part="tabs"]::before {\n right: 0;\n left: auto;\n}\n\n:host([box][vertical]) ::slotted(pf-tab:last-of-type) {\n --pf-c-tabs__link--before--BorderBottomWidth: 0;\n --pf-c-tabs__link--before--BorderRightWidth: var(--pf-c-tabs__link--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n}\n\n:host([box][vertical]) ::slotted(pf-tab[aria-selected="true"]) {\n --pf-c-tabs__link--before--BorderRightColor: var(--pf-c-tabs__item--m-current__link--BackgroundColor, var(--pf-global--BackgroundColor--100, #ffffff));\n --pf-c-tabs__link--before--BorderBottomColor: var(--pf-c-tabs__link--before--border-color--base, var(--pf-global--BorderColor--100, #d2d2d2));\n --pf-c-tabs__link--before--BorderBottomWidth: var(--pf-c-tabs__link--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n}\n\n:host([box][vertical]) ::slotted(pf-tab[aria-selected="true"]:first-of-type) {\n --pf-c-tabs__link--before--BorderTopWidth: var(--pf-c-tabs__link--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n}\n\n[part="tabs"] {\n display: var(--pf-c-tabs__list--Display, flex);\n}\n\nbutton {\n width: var(--pf-c-tabs__scroll-button--Width, var(--pf-global--spacer--2xl, 3rem));\n color: var(--pf-c-tabs__scroll-button--Color, var(--pf-global--Color--100, #151515));\n background-color: var(--pf-c-tabs__scroll-button--BackgroundColor, var(--pf-global--BackgroundColor--100, #ffffff));\n outline-offset: var(--pf-c-tabs__scroll-button--OutlineOffset, calc(-1 * var(--pf-global--spacer--xs, 0.25rem)));\n transition:\n margin var(--pf-c-tabs__scroll-button--TransitionDuration--margin, .125s),\n translate var(--pf-c-tabs__scroll-button--TransitionDuration--transform, .125s), opacity var(--pf-c-tabs__scroll-button--TransitionDuration--opacity, .125s);\n --pf-icon--size: 16px;\n}\n\nbutton:hover {\n --pf-c-tabs__scroll-button--Color: var(--pf-c-tabs__scroll-button--hover--Color, var(--pf-global--active-color--100, #06c));\n}\n\nbutton::before {\n border-color: var(--pf-c-tabs__scroll-button--before--BorderColor, var(--pf-c-tabs--before--BorderColor, var(--pf-global--BorderColor--100, #d2d2d2)));\n border-inline-end-width: var(--pf-c-tabs__scroll-button--before--BorderRightWidth, 0);\n border-block-end-width: var(--pf-c-tabs__scroll-button--before--BorderBottomWidth, var(--pf-c-tabs__scroll-button--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px)));\n border-inline-start-width: var(--pf-c-tabs__scroll-button--before--BorderLeftWidth, 0);\n}\n\nbutton:nth-of-type(1) {\n --pf-c-tabs__scroll-button--before--BorderRightWidth: var(--pf-c-tabs__scroll-button--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n margin-inline-end: calc(var(--pf-c-tabs__scroll-button--Width, var(--pf-global--spacer--2xl, 3rem)) * -1);\n}\n\nbutton:nth-of-type(2) {\n --pf-c-tabs__scroll-button--before--BorderLeftWidth: var(--pf-c-tabs__scroll-button--before--border-width--base, var(--pf-global--BorderWidth--sm, 1px));\n margin-inline-start: calc(var(--pf-c-tabs__scroll-button--Width, var(--pf-global--spacer--2xl, 3rem)) * -1);\n}\n\nbutton:disabled {\n --pf-c-tabs__scroll-button--Color: var(--pf-c-tabs__scroll-button--disabled--Color, var(--pf-global--disabled-color--200, #d2d2d2));\n}\n\n:host(:not[vertical]) [part="tabs-container"] {\n --pf-c-tabs--inset: 0;\n --pf-c-tabs--m-vertical--inset: 0;\n --pf-c-tabs--m-vertical--m-box--inset: 0;\n}\n\n:host([fill]) [part="tabs"] {\n flex-basis: 100%;\n}\n\n:host([fill]) ::slotted(pf-tab) {\n flex-grow: 1;\n}\n\n:host([fill]) ::slotted(pf-tab:first-of-type) {\n --pf-c-tabs--m-box__item--m-current--first-child__link--before--BorderLeftWidth: 0;\n}\n\n:host([fill]) ::slotted(pf-tab:last-of-type) {\n --pf-c-tabs--m-box__item--m-current--last-child__link--before--BorderRightWidth: 0;\n}\n\n:host([border-bottom="false"]) [part="tabs-container"] {\n --pf-c-tabs--before--BorderBottomWidth: 0; /* *override user setting* when border-bottom is false border bottom styles should be 0; */\n --pf-c-tabs__link--before--BorderBottomWidth: 0;\n}\n`;
|
|
20
20
|
/**
|
|
21
21
|
* **Tabs** allow users to navigate between views within the same page or context.
|
|
22
|
-
*
|
|
23
22
|
* @csspart container - outer container
|
|
24
23
|
* @csspart tabs-container - tabs container
|
|
25
24
|
* @csspart tabs - tablist
|
|
26
25
|
* @csspart panels - panels
|
|
27
|
-
*
|
|
28
26
|
* @slot tab - Must contain one or more `<pf-tab>`
|
|
29
27
|
* @slot - Must contain one or more `<pf-panel>`
|
|
30
|
-
*
|
|
31
28
|
* @cssprop {<length>} --pf-c-tabs--Width {@default `auto`}
|
|
32
29
|
* @cssprop {<length>} --pf-c-tabs--inset {@default `0`}
|
|
33
|
-
*
|
|
34
30
|
* @cssprop {<color>} --pf-c-tabs--before--BorderColor {@default `#d2d2d2`}
|
|
35
31
|
* @cssprop {<length>} --pf-c-tabs--before--BorderTopWidth {@default `0`}
|
|
36
32
|
* @cssprop {<length>} --pf-c-tabs--before--BorderRightWidth {@default `0`}
|
|
37
33
|
* @cssprop {<length>} --pf-c-tabs--before--BorderBottomWidth {@default `1px`}
|
|
38
34
|
* @cssprop {<length>} --pf-c-tabs--before---BorderLeftWidth {@default `0`}
|
|
39
|
-
*
|
|
40
35
|
* @cssprop {<length>} --pf-c-tabs--m-vertical--MaxWidth {@default `15.625rem`}
|
|
41
|
-
*
|
|
42
36
|
* @cssprop {<color>} --pf-c-tabs--m-vertical__list--before--BorderColor {@default `#d2d2d2`}
|
|
43
37
|
* @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderTopWidth {@default `0`}
|
|
44
38
|
* @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderRightWidth {@default `0`}
|
|
45
39
|
* @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderBottomWidth {@default `0`}
|
|
46
40
|
* @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderLeftWidth {@default `1px`}
|
|
47
|
-
*
|
|
48
41
|
* @cssprop {<length>} --pf-c-tabs--m-vertical--m-box--inset {@default `2rem`}
|
|
49
|
-
*
|
|
50
42
|
* @cssprop {<display>} --pf-c-tabs__list--Display {@default `flex`}
|
|
51
|
-
*
|
|
52
43
|
* @cssprop {<length>} --pf-c-tabs__scroll-button--Width {@default `3rem`}
|
|
53
44
|
* @cssprop {<color>} --pf-c-tabs__scroll-button--Color {@default `#151515`}
|
|
54
45
|
* @cssprop {<color>} --pf-c-tabs__scroll-button--BackgroundColor {@default `#ffffff`}
|
|
@@ -56,13 +47,11 @@ const styles = css `:host {\n display: block;\n}\n\n[part="tabs-container"] {\n
|
|
|
56
47
|
* @cssprop {<time>} --pf-c-tabs__scroll-button--TransitionDuration--margin {@default `.125s`}
|
|
57
48
|
* @cssprop {<time>} --pf-c-tabs__scroll-button--TransitionDuration--transform {@default `.125s`}
|
|
58
49
|
* @cssprop {<color>} --pf-c-tabs__scroll-button--hover--Color {@default `#06c`}
|
|
59
|
-
*
|
|
60
50
|
* @cssprop {<color>} --pf-c-tabs__scroll-button--before--BorderColor {@default `#d2d2d2`}
|
|
61
51
|
* @cssprop {<length>} --pf-c-tabs__scroll-button--before--BorderRightWidth {@default `0`}
|
|
62
52
|
* @cssprop {<length>} --pf-c-tabs__scroll-button--before--BorderBottomWidth {@default `1px`}
|
|
63
53
|
* @cssprop {<length>} --pf-c-tabs__scroll-button--before--BorderLeftWidth {@default `0`}
|
|
64
54
|
* @cssprop {<length>} --pf-c-tabs__scroll-button--before--border-width--base {@default `1px`}
|
|
65
|
-
*
|
|
66
55
|
* @cssprop {<color>} --pf-c-tabs__scroll-button--disabled--Color {@default `#d2d2d2`}
|
|
67
56
|
*/
|
|
68
57
|
let PfTabs = class PfTabs extends LitElement {
|
|
@@ -214,8 +203,8 @@ _PfTabs_onSlotChange = function _PfTabs_onSlotChange() {
|
|
|
214
203
|
}
|
|
215
204
|
};
|
|
216
205
|
_PfTabs_onExpand = function _PfTabs_onExpand(event) {
|
|
217
|
-
if (event instanceof TabExpandEvent
|
|
218
|
-
!event.defaultPrevented && this.tabs.includes(event.tab)) {
|
|
206
|
+
if (event instanceof TabExpandEvent
|
|
207
|
+
&& !event.defaultPrevented && this.tabs.includes(event.tab)) {
|
|
219
208
|
this.select(event.tab);
|
|
220
209
|
}
|
|
221
210
|
};
|
package/pf-tabs/pf-tabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pf-tabs.js","sourceRoot":"","sources":["pf-tabs.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, LitElement, type PropertyValues } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { query } from 'lit/decorators/query.js';\nimport { provide } from '@lit/context';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\nimport { OverflowController } from '@patternfly/pfe-core/controllers/overflow-controller.js';\nimport { RovingTabindexController } from '@patternfly/pfe-core/controllers/roving-tabindex-controller.js';\nimport { TabsAriaController } from '@patternfly/pfe-core/controllers/tabs-aria-controller.js';\n\nimport { PfTab } from './pf-tab.js';\nimport { PfTabPanel } from './pf-tab-panel.js';\n\nimport { getRandomId } from '@patternfly/pfe-core/functions/random.js';\n\nimport { type PfTabsContext, TabExpandEvent, context } from './context.js';\n\nimport '@patternfly/elements/pf-icon/pf-icon.js';\n\nimport styles from './pf-tabs.css';\n\n/**\n * **Tabs** allow users to navigate between views within the same page or context.\n *\n * @csspart container - outer container\n * @csspart tabs-container - tabs container\n * @csspart tabs - tablist\n * @csspart panels - panels\n *\n * @slot tab - Must contain one or more `<pf-tab>`\n * @slot - Must contain one or more `<pf-panel>`\n *\n * @cssprop {<length>} --pf-c-tabs--Width {@default `auto`}\n * @cssprop {<length>} --pf-c-tabs--inset {@default `0`}\n *\n * @cssprop {<color>} --pf-c-tabs--before--BorderColor {@default `#d2d2d2`}\n * @cssprop {<length>} --pf-c-tabs--before--BorderTopWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--before--BorderRightWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--before--BorderBottomWidth {@default `1px`}\n * @cssprop {<length>} --pf-c-tabs--before---BorderLeftWidth {@default `0`}\n *\n * @cssprop {<length>} --pf-c-tabs--m-vertical--MaxWidth {@default `15.625rem`}\n *\n * @cssprop {<color>} --pf-c-tabs--m-vertical__list--before--BorderColor {@default `#d2d2d2`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderTopWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderRightWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderBottomWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderLeftWidth {@default `1px`}\n *\n * @cssprop {<length>} --pf-c-tabs--m-vertical--m-box--inset {@default `2rem`}\n *\n * @cssprop {<display>} --pf-c-tabs__list--Display {@default `flex`}\n *\n * @cssprop {<length>} --pf-c-tabs__scroll-button--Width {@default `3rem`}\n * @cssprop {<color>} --pf-c-tabs__scroll-button--Color {@default `#151515`}\n * @cssprop {<color>} --pf-c-tabs__scroll-button--BackgroundColor {@default `#ffffff`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--OutlineOffset {@default `-0.25rem`}\n * @cssprop {<time>} --pf-c-tabs__scroll-button--TransitionDuration--margin {@default `.125s`}\n * @cssprop {<time>} --pf-c-tabs__scroll-button--TransitionDuration--transform {@default `.125s`}\n * @cssprop {<color>} --pf-c-tabs__scroll-button--hover--Color {@default `#06c`}\n *\n * @cssprop {<color>} --pf-c-tabs__scroll-button--before--BorderColor {@default `#d2d2d2`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--before--BorderRightWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--before--BorderBottomWidth {@default `1px`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--before--BorderLeftWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--before--border-width--base {@default `1px`}\n *\n * @cssprop {<color>} --pf-c-tabs__scroll-button--disabled--Color {@default `#d2d2d2`}\n */\n@customElement('pf-tabs')\nexport class PfTabs extends LitElement {\n static readonly styles = [styles];\n\n protected static readonly scrollTimeoutDelay = 150;\n\n static isExpandEvent(event: Event): event is TabExpandEvent<PfTab> {\n return event instanceof TabExpandEvent;\n }\n\n /**\n * Aria Label for the left scroll button\n */\n @property({ reflect: false, attribute: 'label-scroll-left' }) labelScrollLeft = 'Scroll left';\n\n /**\n * Aria Label for the right scroll button\n */\n @property({ reflect: false, attribute: 'label-scroll-right' }) labelScrollRight = 'Scroll left';\n\n /**\n * Box styling on tabs. Defaults to null\n */\n @property({ reflect: true }) box: 'light' | 'dark' | null = null;\n\n /**\n * Set to true to enable vertical tab styling.\n */\n @property({ reflect: true, type: Boolean }) vertical = false;\n\n /**\n * Set to true to enable filled tab styling.\n */\n @property({ reflect: true, type: Boolean }) fill = false;\n\n /**\n * Border bottom tab styling on tabs. To remove the bottom border, set this prop to false.\n */\n @property({ attribute: 'border-bottom' }) borderBottom: 'true' | 'false' = 'true';\n\n /**\n * Set's the tabs to be manually activated. This means that the tabs will not automatically select\n * unless a user clicks on them or uses the keyboard space or enter key to select them. Roving\n * tabindex will still update allowing user to keyboard navigate through the tabs with arrow keys.\n */\n @property({ reflect: true, type: Boolean }) manual = false;\n\n /**\n * The index of the active tab\n */\n @property({ attribute: 'active-index', reflect: true, type: Number }) activeIndex = -1;\n\n @property({ attribute: false }) activeTab?: PfTab;\n\n get tabs(): PfTab[] {\n return this.#tabs.tabs;\n }\n\n @query('#tabs') private tabsContainer!: HTMLElement;\n\n get #ctx(): PfTabsContext {\n const { activeTab, borderBottom, box, fill, manual, vertical } = this;\n return { activeTab, borderBottom, box, fill, manual, vertical };\n }\n\n @provide({ context })\n private ctx: PfTabsContext = this.#ctx;\n\n #overflow = new OverflowController(this, { scrollTimeoutDelay: 200 });\n\n #tabs = new TabsAriaController<PfTab, PfTabPanel>(this, {\n isTab: (x): x is PfTab => (x as HTMLElement).localName === 'pf-tab',\n isPanel: (x): x is PfTabPanel => (x as HTMLElement).localName === 'pf-tab-panel',\n isActiveTab: x => x.active,\n });\n\n #tabindex = new RovingTabindexController(this, {\n getHTMLElement: () => this.shadowRoot?.getElementById('tabs') ?? null,\n getItems: () => this.tabs ?? [],\n });\n\n #logger = new Logger(this);\n\n override connectedCallback() {\n super.connectedCallback();\n this.addEventListener('expand', this.#onExpand);\n this.id ||= getRandomId(this.localName);\n }\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const here = await super.getUpdateComplete();\n const ps = await Promise.all(Array.from(\n this.querySelectorAll<LitElement>('pf-tab, pf-tab-panel'),\n x => x.updateComplete,\n ));\n return here && ps.every(x => !!x);\n }\n\n override willUpdate(changed: PropertyValues<this>): void {\n if (changed.has('activeIndex')) {\n this.select(this.activeIndex);\n } else if (changed.has('activeTab') && this.activeTab) {\n this.select(this.activeTab);\n } else {\n this.#updateActive();\n }\n this.#overflow.update();\n this.ctx = this.#ctx;\n }\n\n protected override updated(changed: PropertyValues<this>): void {\n if (changed.has('activeTab') && this.activeTab?.disabled) {\n this.#logger.warn('Active tab is disabled. Setting to first focusable tab');\n this.activeIndex = 0;\n }\n }\n\n protected override firstUpdated(): void {\n if (this.tabs.length && this.activeIndex === -1) {\n this.select(this.tabs.findIndex(x => !x.disabled));\n }\n }\n\n render() {\n return html`\n <div part=\"container\"\n class=\"${classMap({ overflow: this.#overflow.showScrollButtons })}\">\n <div part=\"tabs-container\">${!this.#overflow.showScrollButtons ? '' : html`\n <button id=\"previousTab\" tabindex=\"-1\"\n aria-label=\"${this.labelScrollLeft}\"\n ?disabled=\"${!this.#overflow.overflowLeft}\"\n @click=\"${this.#scrollLeft}\">\n <pf-icon icon=\"angle-left\" set=\"fas\" loading=\"eager\"></pf-icon>\n </button>`}\n <div id=\"tabs\" part=\"tabs\" role=\"tablist\">\n <slot name=\"tab\" @slotchange=\"${this.#onSlotChange}\" @scroll=\"${this.#overflow.onScroll}\"></slot>\n </div>\n ${!this.#overflow.showScrollButtons ? '' : html`\n <button id=\"nextTab\" tabindex=\"-1\"\n aria-label=\"${this.labelScrollRight}\"\n ?disabled=\"${!this.#overflow.overflowRight}\"\n @click=\"${this.#scrollRight}\">\n <pf-icon icon=\"angle-right\" set=\"fas\" loading=\"eager\"></pf-icon>\n </button>`}\n </div>\n <slot part=\"panels\"></slot>\n </div>\n `;\n }\n\n #scrollLeft() {\n this.#overflow.scrollLeft();\n }\n\n #scrollRight() {\n this.#overflow.scrollRight();\n }\n\n #onSlotChange() {\n if (this.tabs) {\n this.#overflow.init(this.tabsContainer, this.tabs);\n }\n }\n\n #onExpand(event: Event) {\n if (event instanceof TabExpandEvent &&\n !event.defaultPrevented && this.tabs.includes(event.tab)) {\n this.select(event.tab);\n }\n }\n\n #updateActive({ force = false } = {}) {\n if (!this.#tabindex.activeItem?.disabled) {\n this.tabs?.forEach((tab, i) => {\n if (force || !this.manual) {\n const active = tab === this.#tabindex.activeItem;\n tab.active = active;\n if (active) {\n this.activeIndex = i;\n this.activeTab = tab;\n }\n }\n this.#tabs.panelFor(tab)?.toggleAttribute('hidden', !tab.active);\n });\n }\n }\n\n select(option: PfTab | number) {\n if (typeof option === 'number') {\n const item = this.tabs[option];\n this.#tabindex.setActiveItem(item);\n } else {\n this.#tabindex.setActiveItem(option);\n }\n this.#updateActive({ force: true });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-tabs': PfTabs;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pf-tabs.js","sourceRoot":"","sources":["pf-tabs.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAuB,MAAM,KAAK,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,4CAA4C,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yDAAyD,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAE,MAAM,gEAAgE,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC;AAE9F,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAEvE,OAAO,EAAsB,cAAc,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,yCAAyC,CAAC;;;AAIjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEI,IAAM,MAAM,GAAZ,MAAM,MAAO,SAAQ,UAAU;IAA/B;;;QASL;;WAEG;QAC2D,oBAAe,GAAG,aAAa,CAAC;QAE9F;;WAEG;QAC4D,qBAAgB,GAAG,aAAa,CAAC;QAEhG;;WAEG;QAC0B,QAAG,GAA4B,IAAI,CAAC;QAEjE;;WAEG;QACyC,aAAQ,GAAG,KAAK,CAAC;QAE7D;;WAEG;QACyC,SAAI,GAAG,KAAK,CAAC;QAEzD;;WAEG;QACuC,iBAAY,GAAqB,MAAM,CAAC;QAElF;;;;WAIG;QACyC,WAAM,GAAG,KAAK,CAAC;QAE3D;;WAEG;QACmE,gBAAW,GAAG,CAAC,CAAC,CAAC;QAgB/E,QAAG,GAAkB,uBAAA,IAAI,0CAAK,CAAC;QAEvC,2BAAY,IAAI,kBAAkB,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAAC;QAEtE,uBAAQ,IAAI,kBAAkB,CAAoB,IAAI,EAAE;YACtD,KAAK,EAAE,CAAC,CAAC,EAAc,EAAE,CAAE,CAAiB,CAAC,SAAS,KAAK,QAAQ;YACnE,OAAO,EAAE,CAAC,CAAC,EAAmB,EAAE,CAAE,CAAiB,CAAC,SAAS,KAAK,cAAc;YAChF,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;SAC3B,CAAC,EAAC;QAEH,2BAAY,IAAI,wBAAwB,CAAC,IAAI,EAAE;YAC7C,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,IAAI;YACrE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;SAChC,CAAC,EAAC;QAEH,yBAAU,IAAI,MAAM,CAAC,IAAI,CAAC,EAAC;IAmH7B,CAAC;IA9LC,MAAM,CAAC,aAAa,CAAC,KAAY;QAC/B,OAAO,KAAK,YAAY,cAAc,CAAC;IACzC,CAAC;IA8CD,IAAI,IAAI;QACN,OAAO,uBAAA,IAAI,oBAAM,CAAC,IAAI,CAAC;IACzB,CAAC;IA2BQ,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,uBAAA,IAAI,2CAAU,CAAC,CAAC;QAChD,IAAI,CAAC,EAAE,KAAP,IAAI,CAAC,EAAE,GAAK,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC;IAC1C,CAAC;IAEkB,KAAK,CAAC,iBAAiB;QACxC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC7C,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CACrC,IAAI,CAAC,gBAAgB,CAAa,sBAAsB,CAAC,EACzD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CACtB,CAAC,CAAC;QACH,OAAO,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAEQ,UAAU,CAAC,OAA6B;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,uBAAA,IAAI,+CAAc,MAAlB,IAAI,CAAgB,CAAC;QACvB,CAAC;QACD,uBAAA,IAAI,wBAAU,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,uBAAA,IAAI,0CAAK,CAAC;IACvB,CAAC;IAEkB,OAAO,CAAC,OAA6B;QACtD,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;YACzD,uBAAA,IAAI,sBAAQ,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YAC5E,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAEkB,YAAY;QAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;oBAEK,QAAQ,CAAC,EAAE,QAAQ,EAAE,uBAAA,IAAI,wBAAU,CAAC,iBAAiB,EAAE,CAAC;qCACvC,CAAC,uBAAA,IAAI,wBAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;;4BAEtD,IAAI,CAAC,eAAe;2BACrB,CAAC,uBAAA,IAAI,wBAAU,CAAC,YAAY;wBAC/B,uBAAA,IAAI,6CAAY;;oBAEpB;;4CAEwB,uBAAA,IAAI,+CAAc,cAAc,uBAAA,IAAI,wBAAU,CAAC,QAAQ;;YAEvF,CAAC,uBAAA,IAAI,wBAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;;4BAE7B,IAAI,CAAC,gBAAgB;2BACtB,CAAC,uBAAA,IAAI,wBAAU,CAAC,aAAa;wBAChC,uBAAA,IAAI,8CAAa;;oBAErB;;;;KAIf,CAAC;IACJ,CAAC;IAuCD,MAAM,CAAC,MAAsB;QAC3B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/B,uBAAA,IAAI,wBAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,uBAAA,IAAI,wBAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,uBAAA,IAAI,+CAAc,MAAlB,IAAI,EAAe,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;;;;;;;;IAtIC,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACtE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAClE,CAAC;;IAwFC,uBAAA,IAAI,wBAAU,CAAC,UAAU,EAAE,CAAC;AAC9B,CAAC;;IAGC,uBAAA,IAAI,wBAAU,CAAC,WAAW,EAAE,CAAC;AAC/B,CAAC;;IAGC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,uBAAA,IAAI,wBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;6CAES,KAAY;IACpB,IAAI,KAAK,YAAY,cAAc;WAC9B,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;qDAEa,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE;IAClC,IAAI,CAAC,uBAAA,IAAI,wBAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,GAAG,KAAK,uBAAA,IAAI,wBAAU,CAAC,UAAU,CAAC;gBACjD,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBACpB,IAAI,MAAM,EAAE,CAAC;oBACX,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;oBACrB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;gBACvB,CAAC;YACH,CAAC;YACD,uBAAA,IAAI,oBAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAvLe,aAAM,GAAG,CAAC,MAAM,CAAC,AAAX,CAAY;AAER,yBAAkB,GAAG,GAAG,AAAN,CAAO;AASW;IAA7D,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;+CAAiC;AAK/B;IAA9D,QAAQ,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;gDAAkC;AAKnE;IAA5B,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mCAAqC;AAKrB;IAA3C,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;wCAAkB;AAKjB;IAA3C,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oCAAc;AAKf;IAAzC,QAAQ,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;4CAAyC;AAOtC;IAA3C,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;sCAAgB;AAKW;IAArE,QAAQ,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;2CAAkB;AAEvD;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;yCAAmB;AAM1B;IAAvB,KAAK,CAAC,OAAO,CAAC;6CAAqC;AAQ5C;IADP,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;mCACkB;AAjE5B,MAAM;IADlB,aAAa,CAAC,SAAS,CAAC;GACZ,MAAM,CAmMlB","sourcesContent":["import { html, LitElement, type PropertyValues } from 'lit';\nimport { customElement } from 'lit/decorators/custom-element.js';\nimport { property } from 'lit/decorators/property.js';\nimport { query } from 'lit/decorators/query.js';\nimport { provide } from '@lit/context';\nimport { classMap } from 'lit/directives/class-map.js';\n\nimport { Logger } from '@patternfly/pfe-core/controllers/logger.js';\nimport { OverflowController } from '@patternfly/pfe-core/controllers/overflow-controller.js';\nimport { RovingTabindexController } from '@patternfly/pfe-core/controllers/roving-tabindex-controller.js';\nimport { TabsAriaController } from '@patternfly/pfe-core/controllers/tabs-aria-controller.js';\n\nimport { PfTab } from './pf-tab.js';\nimport { PfTabPanel } from './pf-tab-panel.js';\n\nimport { getRandomId } from '@patternfly/pfe-core/functions/random.js';\n\nimport { type PfTabsContext, TabExpandEvent, context } from './context.js';\n\nimport '@patternfly/elements/pf-icon/pf-icon.js';\n\nimport styles from './pf-tabs.css';\n\n/**\n * **Tabs** allow users to navigate between views within the same page or context.\n * @csspart container - outer container\n * @csspart tabs-container - tabs container\n * @csspart tabs - tablist\n * @csspart panels - panels\n * @slot tab - Must contain one or more `<pf-tab>`\n * @slot - Must contain one or more `<pf-panel>`\n * @cssprop {<length>} --pf-c-tabs--Width {@default `auto`}\n * @cssprop {<length>} --pf-c-tabs--inset {@default `0`}\n * @cssprop {<color>} --pf-c-tabs--before--BorderColor {@default `#d2d2d2`}\n * @cssprop {<length>} --pf-c-tabs--before--BorderTopWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--before--BorderRightWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--before--BorderBottomWidth {@default `1px`}\n * @cssprop {<length>} --pf-c-tabs--before---BorderLeftWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical--MaxWidth {@default `15.625rem`}\n * @cssprop {<color>} --pf-c-tabs--m-vertical__list--before--BorderColor {@default `#d2d2d2`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderTopWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderRightWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderBottomWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical__list--before--BorderLeftWidth {@default `1px`}\n * @cssprop {<length>} --pf-c-tabs--m-vertical--m-box--inset {@default `2rem`}\n * @cssprop {<display>} --pf-c-tabs__list--Display {@default `flex`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--Width {@default `3rem`}\n * @cssprop {<color>} --pf-c-tabs__scroll-button--Color {@default `#151515`}\n * @cssprop {<color>} --pf-c-tabs__scroll-button--BackgroundColor {@default `#ffffff`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--OutlineOffset {@default `-0.25rem`}\n * @cssprop {<time>} --pf-c-tabs__scroll-button--TransitionDuration--margin {@default `.125s`}\n * @cssprop {<time>} --pf-c-tabs__scroll-button--TransitionDuration--transform {@default `.125s`}\n * @cssprop {<color>} --pf-c-tabs__scroll-button--hover--Color {@default `#06c`}\n * @cssprop {<color>} --pf-c-tabs__scroll-button--before--BorderColor {@default `#d2d2d2`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--before--BorderRightWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--before--BorderBottomWidth {@default `1px`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--before--BorderLeftWidth {@default `0`}\n * @cssprop {<length>} --pf-c-tabs__scroll-button--before--border-width--base {@default `1px`}\n * @cssprop {<color>} --pf-c-tabs__scroll-button--disabled--Color {@default `#d2d2d2`}\n */\n@customElement('pf-tabs')\nexport class PfTabs extends LitElement {\n static readonly styles = [styles];\n\n protected static readonly scrollTimeoutDelay = 150;\n\n static isExpandEvent(event: Event): event is TabExpandEvent<PfTab> {\n return event instanceof TabExpandEvent;\n }\n\n /**\n * Aria Label for the left scroll button\n */\n @property({ reflect: false, attribute: 'label-scroll-left' }) labelScrollLeft = 'Scroll left';\n\n /**\n * Aria Label for the right scroll button\n */\n @property({ reflect: false, attribute: 'label-scroll-right' }) labelScrollRight = 'Scroll left';\n\n /**\n * Box styling on tabs. Defaults to null\n */\n @property({ reflect: true }) box: 'light' | 'dark' | null = null;\n\n /**\n * Set to true to enable vertical tab styling.\n */\n @property({ reflect: true, type: Boolean }) vertical = false;\n\n /**\n * Set to true to enable filled tab styling.\n */\n @property({ reflect: true, type: Boolean }) fill = false;\n\n /**\n * Border bottom tab styling on tabs. To remove the bottom border, set this prop to false.\n */\n @property({ attribute: 'border-bottom' }) borderBottom: 'true' | 'false' = 'true';\n\n /**\n * Set's the tabs to be manually activated. This means that the tabs will not automatically select\n * unless a user clicks on them or uses the keyboard space or enter key to select them. Roving\n * tabindex will still update allowing user to keyboard navigate through the tabs with arrow keys.\n */\n @property({ reflect: true, type: Boolean }) manual = false;\n\n /**\n * The index of the active tab\n */\n @property({ attribute: 'active-index', reflect: true, type: Number }) activeIndex = -1;\n\n @property({ attribute: false }) activeTab?: PfTab;\n\n get tabs(): PfTab[] {\n return this.#tabs.tabs;\n }\n\n @query('#tabs') private tabsContainer!: HTMLElement;\n\n get #ctx(): PfTabsContext {\n const { activeTab, borderBottom, box, fill, manual, vertical } = this;\n return { activeTab, borderBottom, box, fill, manual, vertical };\n }\n\n @provide({ context })\n private ctx: PfTabsContext = this.#ctx;\n\n #overflow = new OverflowController(this, { scrollTimeoutDelay: 200 });\n\n #tabs = new TabsAriaController<PfTab, PfTabPanel>(this, {\n isTab: (x): x is PfTab => (x as HTMLElement).localName === 'pf-tab',\n isPanel: (x): x is PfTabPanel => (x as HTMLElement).localName === 'pf-tab-panel',\n isActiveTab: x => x.active,\n });\n\n #tabindex = new RovingTabindexController(this, {\n getHTMLElement: () => this.shadowRoot?.getElementById('tabs') ?? null,\n getItems: () => this.tabs ?? [],\n });\n\n #logger = new Logger(this);\n\n override connectedCallback() {\n super.connectedCallback();\n this.addEventListener('expand', this.#onExpand);\n this.id ||= getRandomId(this.localName);\n }\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const here = await super.getUpdateComplete();\n const ps = await Promise.all(Array.from(\n this.querySelectorAll<LitElement>('pf-tab, pf-tab-panel'),\n x => x.updateComplete,\n ));\n return here && ps.every(x => !!x);\n }\n\n override willUpdate(changed: PropertyValues<this>): void {\n if (changed.has('activeIndex')) {\n this.select(this.activeIndex);\n } else if (changed.has('activeTab') && this.activeTab) {\n this.select(this.activeTab);\n } else {\n this.#updateActive();\n }\n this.#overflow.update();\n this.ctx = this.#ctx;\n }\n\n protected override updated(changed: PropertyValues<this>): void {\n if (changed.has('activeTab') && this.activeTab?.disabled) {\n this.#logger.warn('Active tab is disabled. Setting to first focusable tab');\n this.activeIndex = 0;\n }\n }\n\n protected override firstUpdated(): void {\n if (this.tabs.length && this.activeIndex === -1) {\n this.select(this.tabs.findIndex(x => !x.disabled));\n }\n }\n\n render() {\n return html`\n <div part=\"container\"\n class=\"${classMap({ overflow: this.#overflow.showScrollButtons })}\">\n <div part=\"tabs-container\">${!this.#overflow.showScrollButtons ? '' : html`\n <button id=\"previousTab\" tabindex=\"-1\"\n aria-label=\"${this.labelScrollLeft}\"\n ?disabled=\"${!this.#overflow.overflowLeft}\"\n @click=\"${this.#scrollLeft}\">\n <pf-icon icon=\"angle-left\" set=\"fas\" loading=\"eager\"></pf-icon>\n </button>`}\n <div id=\"tabs\" part=\"tabs\" role=\"tablist\">\n <slot name=\"tab\" @slotchange=\"${this.#onSlotChange}\" @scroll=\"${this.#overflow.onScroll}\"></slot>\n </div>\n ${!this.#overflow.showScrollButtons ? '' : html`\n <button id=\"nextTab\" tabindex=\"-1\"\n aria-label=\"${this.labelScrollRight}\"\n ?disabled=\"${!this.#overflow.overflowRight}\"\n @click=\"${this.#scrollRight}\">\n <pf-icon icon=\"angle-right\" set=\"fas\" loading=\"eager\"></pf-icon>\n </button>`}\n </div>\n <slot part=\"panels\"></slot>\n </div>\n `;\n }\n\n #scrollLeft() {\n this.#overflow.scrollLeft();\n }\n\n #scrollRight() {\n this.#overflow.scrollRight();\n }\n\n #onSlotChange() {\n if (this.tabs) {\n this.#overflow.init(this.tabsContainer, this.tabs);\n }\n }\n\n #onExpand(event: Event) {\n if (event instanceof TabExpandEvent\n && !event.defaultPrevented && this.tabs.includes(event.tab)) {\n this.select(event.tab);\n }\n }\n\n #updateActive({ force = false } = {}) {\n if (!this.#tabindex.activeItem?.disabled) {\n this.tabs?.forEach((tab, i) => {\n if (force || !this.manual) {\n const active = tab === this.#tabindex.activeItem;\n tab.active = active;\n if (active) {\n this.activeIndex = i;\n this.activeTab = tab;\n }\n }\n this.#tabs.panelFor(tab)?.toggleAttribute('hidden', !tab.active);\n });\n }\n }\n\n select(option: PfTab | number) {\n if (typeof option === 'number') {\n const item = this.tabs[option];\n this.#tabindex.setActiveItem(item);\n } else {\n this.#tabindex.setActiveItem(option);\n }\n this.#updateActive({ force: true });\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'pf-tabs': PfTabs;\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { test } from '@playwright/test';
|
|
2
|
+
import { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';
|
|
3
|
+
const tagName = 'pf-tabs';
|
|
4
|
+
test.describe(tagName, () => {
|
|
5
|
+
// Run tests in this file with portrait-like viewport.
|
|
6
|
+
test.use({ viewport: { width: 1200, height: 1000 } });
|
|
7
|
+
test('snapshot', async ({ page }) => {
|
|
8
|
+
const componentPage = new PfeDemoPage(page, tagName);
|
|
9
|
+
await componentPage.navigate();
|
|
10
|
+
await componentPage.snapshot();
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=pf-tabs.e2e.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pf-tabs.e2e.js","sourceRoot":"","sources":["pf-tabs.e2e.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,sDAAsD,CAAC;AAEnF,MAAM,OAAO,GAAG,SAAS,CAAC;AAE1B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IAC1B,sDAAsD;IACtD,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,MAAM,aAAa,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { test } from '@playwright/test';\nimport { PfeDemoPage } from '@patternfly/pfe-tools/test/playwright/PfeDemoPage.js';\n\nconst tagName = 'pf-tabs';\n\ntest.describe(tagName, () => {\n // Run tests in this file with portrait-like viewport.\n test.use({ viewport: { width: 1200, height: 1000 } });\n test('snapshot', async ({ page }) => {\n const componentPage = new PfeDemoPage(page, tagName);\n await componentPage.navigate();\n await componentPage.snapshot();\n });\n});\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '@patternfly/pfe-tools/test/stub-logger.js';
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { expect, html, nextFrame } from '@open-wc/testing';
|
|
2
|
+
import { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';
|
|
3
|
+
import { a11ySnapshot } from '@patternfly/pfe-tools/test/a11y-snapshot.js';
|
|
4
|
+
import { setViewport, sendKeys } from '@web/test-runner-commands';
|
|
5
|
+
import { allUpdates } from '@patternfly/pfe-tools/test/utils.js';
|
|
6
|
+
import { PfTabs } from '../pf-tabs.js';
|
|
7
|
+
import { PfTab } from '../pf-tab.js';
|
|
8
|
+
import { PfTabPanel } from '../pf-tab-panel.js';
|
|
9
|
+
import '@patternfly/pfe-tools/test/stub-logger.js';
|
|
10
|
+
function press(key) {
|
|
11
|
+
return async function () {
|
|
12
|
+
await sendKeys({ press: key });
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
describe('<pf-tabs>', function () {
|
|
16
|
+
it('instantiates imperatively', function () {
|
|
17
|
+
expect(document.createElement('pf-tabs')).to.be.an.instanceof(PfTabs);
|
|
18
|
+
expect(document.createElement('pf-tab')).to.be.an.instanceof(PfTab);
|
|
19
|
+
expect(document.createElement('pf-tab-panel')).to.be.an.instanceof(PfTabPanel);
|
|
20
|
+
});
|
|
21
|
+
it('should upgrade', async function () {
|
|
22
|
+
const el = await createFixture(html `<pf-tabs></pf-tabs>`);
|
|
23
|
+
expect(el, 'pf-tabs should be an instance of PfeTabs')
|
|
24
|
+
.to.be.an.instanceOf(customElements.get('pf-tabs'))
|
|
25
|
+
.and
|
|
26
|
+
.to.be.an.instanceOf(PfTabs);
|
|
27
|
+
});
|
|
28
|
+
describe('with three valid tab pairs', function () {
|
|
29
|
+
let element;
|
|
30
|
+
const updateComplete = () => allUpdates(element);
|
|
31
|
+
beforeEach(async function () {
|
|
32
|
+
element = await createFixture(html `
|
|
33
|
+
<pf-tabs>
|
|
34
|
+
<pf-tab slot="tab">tab-1</pf-tab>
|
|
35
|
+
<pf-tab-panel>panel-1</pf-tab-panel>
|
|
36
|
+
<pf-tab slot="tab">tab-2</pf-tab>
|
|
37
|
+
<pf-tab-panel>panel-2</pf-tab-panel>
|
|
38
|
+
<pf-tab slot="tab">tab-3</pf-tab>
|
|
39
|
+
<pf-tab-panel>panel-3</pf-tab-panel>
|
|
40
|
+
</pf-tabs>
|
|
41
|
+
`);
|
|
42
|
+
});
|
|
43
|
+
beforeEach(updateComplete);
|
|
44
|
+
it('should apply aria attributes on initialization', function () {
|
|
45
|
+
const tabs = element.querySelectorAll('pf-tab');
|
|
46
|
+
const panels = element.querySelectorAll('pf-tab-panel');
|
|
47
|
+
tabs.forEach(function (tab, index) {
|
|
48
|
+
const tabId = tab.getAttribute('id');
|
|
49
|
+
const tabControls = tab.getAttribute('aria-controls');
|
|
50
|
+
panels.forEach(function (panel, pindex) {
|
|
51
|
+
if (index === pindex) {
|
|
52
|
+
expect(panel.getAttribute('aria-labelledby')).to.equal(tabId);
|
|
53
|
+
expect(panel.id).to.equal(tabControls);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('pressing Tab', function () {
|
|
59
|
+
beforeEach(press('Tab'));
|
|
60
|
+
beforeEach(updateComplete);
|
|
61
|
+
beforeEach(nextFrame);
|
|
62
|
+
it('should activate the first focusable tab', function () {
|
|
63
|
+
expect(element.querySelector('pf-tab')).to.have.attribute('active');
|
|
64
|
+
});
|
|
65
|
+
it('should activate the first tab panel', function () {
|
|
66
|
+
expect(element.querySelector('pf-tab')).to.not.have.attribute('hidden');
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('setting the `vertical` attribute', function () {
|
|
70
|
+
beforeEach(function () {
|
|
71
|
+
element.setAttribute('vertical', '');
|
|
72
|
+
});
|
|
73
|
+
beforeEach(updateComplete);
|
|
74
|
+
it('should have vertical styles', function () {
|
|
75
|
+
// WARNING: asserting on shadow root content;
|
|
76
|
+
const tabs = element.shadowRoot.querySelector('[part="tabs"]');
|
|
77
|
+
const tabsVerticalStyles = getComputedStyle(tabs).flexDirection;
|
|
78
|
+
expect(tabsVerticalStyles).to.be.equal('column');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('setting the second tab\'s `active` attribute', function () {
|
|
82
|
+
beforeEach(function () {
|
|
83
|
+
const [, tab] = element.querySelectorAll('pf-tab');
|
|
84
|
+
tab.active = true;
|
|
85
|
+
});
|
|
86
|
+
beforeEach(updateComplete);
|
|
87
|
+
beforeEach(nextFrame);
|
|
88
|
+
it('should activate the second tab', function () {
|
|
89
|
+
const [, tab] = element.querySelectorAll('pf-tab');
|
|
90
|
+
expect(tab).to.have.attribute('active');
|
|
91
|
+
});
|
|
92
|
+
it('should activate its panel', function () {
|
|
93
|
+
const [, tab] = element.querySelectorAll('pf-tab');
|
|
94
|
+
expect(tab).to.not.have.attribute('hidden');
|
|
95
|
+
});
|
|
96
|
+
it('should deactivate previously active tab', function () {
|
|
97
|
+
expect(element.querySelector('pf-tab')).to.not.have.attribute('active');
|
|
98
|
+
});
|
|
99
|
+
it('should hide previously active panel', function () {
|
|
100
|
+
expect(element.querySelector('pf-tab-panel')).to.have.attribute('hidden');
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
describe('setting `activeIndex` to 2', function () {
|
|
104
|
+
beforeEach(function () {
|
|
105
|
+
element.activeIndex = 2;
|
|
106
|
+
});
|
|
107
|
+
beforeEach(updateComplete);
|
|
108
|
+
beforeEach(nextFrame);
|
|
109
|
+
it('should activate the third tab', function () {
|
|
110
|
+
const [, , tab] = element.querySelectorAll('pf-tab');
|
|
111
|
+
expect(tab).to.have.attribute('active');
|
|
112
|
+
});
|
|
113
|
+
it('should activate the third panel', async function () {
|
|
114
|
+
const snapshot = await a11ySnapshot();
|
|
115
|
+
expect(snapshot.children?.find(x => x.role === 'tabpanel')?.name).to.equal('tab-3');
|
|
116
|
+
});
|
|
117
|
+
describe('then setting the first tab\'s `disabled` attribute', function () {
|
|
118
|
+
beforeEach(async function () {
|
|
119
|
+
element.querySelector('pf-tab').disabled = true;
|
|
120
|
+
});
|
|
121
|
+
beforeEach(updateComplete);
|
|
122
|
+
it('should disable the button', async function () {
|
|
123
|
+
const snapshot = await a11ySnapshot();
|
|
124
|
+
const disabledTab = snapshot.children?.find(x => x.role === 'tab' && x.disabled);
|
|
125
|
+
expect(disabledTab).to.be.ok;
|
|
126
|
+
});
|
|
127
|
+
describe('and clicking the disabled tab', function () {
|
|
128
|
+
beforeEach(async function () {
|
|
129
|
+
element.querySelector('pf-tab').click();
|
|
130
|
+
});
|
|
131
|
+
beforeEach(updateComplete);
|
|
132
|
+
it('should not activate', function () {
|
|
133
|
+
const [first] = element.querySelectorAll('pf-tab');
|
|
134
|
+
expect(first).to.not.have.attribute('active');
|
|
135
|
+
});
|
|
136
|
+
it('should present the third panel to the ax tree', async function () {
|
|
137
|
+
const snapshot = await a11ySnapshot();
|
|
138
|
+
expect(snapshot.children?.find(x => x.role === 'tabpanel')?.name).to.equal('tab-3');
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('then setting `activeIndex` to 0 (i.e. the disabled tab\'s index)', function () {
|
|
142
|
+
beforeEach(function () {
|
|
143
|
+
element.activeIndex = 0;
|
|
144
|
+
});
|
|
145
|
+
beforeEach(updateComplete);
|
|
146
|
+
it('should not activate the first tab', function () {
|
|
147
|
+
expect(element.querySelector('pf-tab')).to.not.have.attribute('active');
|
|
148
|
+
});
|
|
149
|
+
it('should present the third panel to the ax tree', async function () {
|
|
150
|
+
const snapshot = await a11ySnapshot();
|
|
151
|
+
expect(snapshot.children?.find(x => x.role === 'tabpanel')?.name).to.equal('tab-3');
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
describe('when viewed in a small viewport', function () {
|
|
157
|
+
beforeEach(async function () {
|
|
158
|
+
// this is a comically narrow viewport, but our tabs have quite short
|
|
159
|
+
// labels, so viewport must be itsy-pitsy in order to cause overflow
|
|
160
|
+
await setViewport({ width: 100, height: 640 });
|
|
161
|
+
});
|
|
162
|
+
beforeEach(nextFrame);
|
|
163
|
+
beforeEach(updateComplete);
|
|
164
|
+
beforeEach(nextFrame);
|
|
165
|
+
beforeEach(updateComplete);
|
|
166
|
+
it('should have visible scroll buttons if overflowed', function () {
|
|
167
|
+
// Note: overflow buttons are not included in the accessibility tree otherwise we'd test
|
|
168
|
+
// for buttons there. tabindex="-1" is used on the buttons to prevent focus and was a
|
|
169
|
+
// decision made to keep logical keyboard navigation order flow between tabs and panels
|
|
170
|
+
// as the next overflow button exists in the DOM between the tabs container and the open panel
|
|
171
|
+
// and would disrupt the expected flow. For keyboard users they are able to scroll using the
|
|
172
|
+
// left and right arrows keys and do not need direct access to the overflow buttons but still
|
|
173
|
+
// exist as visual cues for which direction is overflowed
|
|
174
|
+
const previousTab = element.shadowRoot.querySelector('#previousTab');
|
|
175
|
+
const nextTab = element.shadowRoot.querySelector('#nextTab');
|
|
176
|
+
expect(previousTab).to.not.be.null;
|
|
177
|
+
expect(nextTab).to.not.be.null;
|
|
178
|
+
const prevDisplayStyle = getComputedStyle(previousTab).display;
|
|
179
|
+
const nextDisplayStyle = getComputedStyle(nextTab).display;
|
|
180
|
+
expect(prevDisplayStyle).to.not.equal('none');
|
|
181
|
+
expect(nextDisplayStyle).to.not.equal('none');
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe(`when navigated by keyboard`, function () {
|
|
185
|
+
describe('when focused on the first tab', function () {
|
|
186
|
+
beforeEach(async function () {
|
|
187
|
+
element.querySelector('pf-tab').focus();
|
|
188
|
+
});
|
|
189
|
+
describe('pressing ArrowRight', function () {
|
|
190
|
+
beforeEach(async function () {
|
|
191
|
+
await sendKeys({ down: 'ArrowRight' });
|
|
192
|
+
});
|
|
193
|
+
beforeEach(updateComplete);
|
|
194
|
+
it('should activate the next tab', function () {
|
|
195
|
+
const [first, second, third] = element.querySelectorAll('pf-tab');
|
|
196
|
+
expect(first).to.not.have.attribute('active');
|
|
197
|
+
expect(second).to.have.attribute('active');
|
|
198
|
+
expect(third).to.not.have.attribute('active');
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
describe('pressing ArrowLeft', function () {
|
|
202
|
+
beforeEach(async function () {
|
|
203
|
+
await sendKeys({ down: 'ArrowLeft' });
|
|
204
|
+
});
|
|
205
|
+
it('should activate the last tab', function () {
|
|
206
|
+
const [first, second, third] = element.querySelectorAll('pf-tab');
|
|
207
|
+
expect(first).to.not.have.attribute('active');
|
|
208
|
+
expect(second).to.not.have.attribute('active');
|
|
209
|
+
expect(third).to.have.attribute('active');
|
|
210
|
+
});
|
|
211
|
+
describe('then pressing ArrowRight', function () {
|
|
212
|
+
beforeEach(async function () {
|
|
213
|
+
await sendKeys({ down: 'ArrowRight' });
|
|
214
|
+
});
|
|
215
|
+
beforeEach(updateComplete);
|
|
216
|
+
it('should activate the first tab', function () {
|
|
217
|
+
const [first, second, third] = element.querySelectorAll('pf-tab');
|
|
218
|
+
expect(first).to.have.attribute('active');
|
|
219
|
+
expect(second).to.not.have.attribute('active');
|
|
220
|
+
expect(third).to.not.have.attribute('active');
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
describe('setting the `manual` attribute', function () {
|
|
227
|
+
beforeEach(function () {
|
|
228
|
+
element.setAttribute('manual', '');
|
|
229
|
+
});
|
|
230
|
+
beforeEach(updateComplete);
|
|
231
|
+
describe('pressing Tab', function () {
|
|
232
|
+
beforeEach(press('Tab'));
|
|
233
|
+
describe('pressing ArrowRight key', function () {
|
|
234
|
+
beforeEach(press('ArrowRight'));
|
|
235
|
+
beforeEach(updateComplete);
|
|
236
|
+
it('should not activate second tab', function () {
|
|
237
|
+
const [first, second, third] = element.querySelectorAll('pf-tab');
|
|
238
|
+
expect(first).to.have.attribute('active');
|
|
239
|
+
expect(second).to.not.have.attribute('active');
|
|
240
|
+
expect(third).to.not.have.attribute('active');
|
|
241
|
+
});
|
|
242
|
+
it('should focus the second tab', function () {
|
|
243
|
+
const [, second] = element.querySelectorAll('pf-tab');
|
|
244
|
+
expect(document.activeElement).to.equal(second);
|
|
245
|
+
});
|
|
246
|
+
describe('pressing enter key', function () {
|
|
247
|
+
beforeEach(press('Enter'));
|
|
248
|
+
beforeEach(updateComplete);
|
|
249
|
+
it('should activate second tab', function () {
|
|
250
|
+
const [first, second, third] = element.querySelectorAll('pf-tab');
|
|
251
|
+
expect(first).to.not.have.attribute('active');
|
|
252
|
+
expect(second).to.have.attribute('active');
|
|
253
|
+
expect(third).to.not.have.attribute('active');
|
|
254
|
+
expect(document.activeElement).to.equal(second);
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
describe('when no active tab is given and the first tab is disabled', function () {
|
|
262
|
+
let element;
|
|
263
|
+
beforeEach(async function () {
|
|
264
|
+
element = await createFixture(html `
|
|
265
|
+
<pf-tabs>
|
|
266
|
+
<pf-tab slot="tab" disabled>Users</pf-tab>
|
|
267
|
+
<pf-tab-panel>Users</pf-tab-panel>
|
|
268
|
+
<pf-tab slot="tab">Containers</pf-tab>
|
|
269
|
+
<pf-tab-panel>Containers</pf-tab-panel>
|
|
270
|
+
<pf-tab slot="tab">Database</pf-tab>
|
|
271
|
+
<pf-tab-panel>Database</pf-tab-panel>
|
|
272
|
+
<pf-tab slot="tab" disabled>Disabled</pf-tab>
|
|
273
|
+
<pf-tab-panel>Disabled</pf-tab-panel>
|
|
274
|
+
<pf-tab slot="tab" aria-disabled="true">Aria Disabled</pf-tab>
|
|
275
|
+
<pf-tab-panel>Aria Disabled</pf-tab-panel>
|
|
276
|
+
</pf-tabs>
|
|
277
|
+
`);
|
|
278
|
+
});
|
|
279
|
+
it('should activate the next focusable tab', function () {
|
|
280
|
+
const [, second] = element.querySelectorAll('pf-tab');
|
|
281
|
+
expect(second).to.have.attribute('active');
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
//# sourceMappingURL=pf-tabs.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pf-tabs.spec.js","sourceRoot":"","sources":["pf-tabs.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, html, nextFrame } from '@open-wc/testing';\nimport { createFixture } from '@patternfly/pfe-tools/test/create-fixture.js';\nimport { a11ySnapshot } from '@patternfly/pfe-tools/test/a11y-snapshot.js';\nimport { setViewport, sendKeys } from '@web/test-runner-commands';\n\nimport { allUpdates } from '@patternfly/pfe-tools/test/utils.js';\n\nimport { PfTabs } from '../pf-tabs.js';\nimport { PfTab } from '../pf-tab.js';\nimport { PfTabPanel } from '../pf-tab-panel.js';\n\nimport '@patternfly/pfe-tools/test/stub-logger.js';\n\nfunction press(key: string) {\n return async function() {\n await sendKeys({ press: key });\n };\n}\n\ndescribe('<pf-tabs>', function() {\n it('instantiates imperatively', function() {\n expect(document.createElement('pf-tabs')).to.be.an.instanceof(PfTabs);\n expect(document.createElement('pf-tab')).to.be.an.instanceof(PfTab);\n expect(document.createElement('pf-tab-panel')).to.be.an.instanceof(PfTabPanel);\n });\n\n it('should upgrade', async function() {\n const el = await createFixture<PfTabs>(html`<pf-tabs></pf-tabs>`);\n expect(el, 'pf-tabs should be an instance of PfeTabs')\n .to.be.an.instanceOf(customElements.get('pf-tabs'))\n .and\n .to.be.an.instanceOf(PfTabs);\n });\n\n describe('with three valid tab pairs', function() {\n let element: PfTabs;\n\n const updateComplete = () => allUpdates(element);\n\n beforeEach(async function() {\n element = await createFixture<PfTabs>(html`\n <pf-tabs>\n <pf-tab slot=\"tab\">tab-1</pf-tab>\n <pf-tab-panel>panel-1</pf-tab-panel>\n <pf-tab slot=\"tab\">tab-2</pf-tab>\n <pf-tab-panel>panel-2</pf-tab-panel>\n <pf-tab slot=\"tab\">tab-3</pf-tab>\n <pf-tab-panel>panel-3</pf-tab-panel>\n </pf-tabs>\n `);\n });\n\n beforeEach(updateComplete);\n\n it('should apply aria attributes on initialization', function() {\n const tabs = element.querySelectorAll('pf-tab');\n const panels = element.querySelectorAll('pf-tab-panel');\n tabs.forEach(function(tab: Element, index: number) {\n const tabId = tab.getAttribute('id');\n const tabControls = tab.getAttribute('aria-controls');\n panels.forEach(function(panel: Element, pindex: number) {\n if (index === pindex) {\n expect(panel.getAttribute('aria-labelledby')).to.equal(tabId);\n expect(panel.id).to.equal(tabControls);\n }\n });\n });\n });\n\n describe('pressing Tab', function() {\n beforeEach(press('Tab'));\n beforeEach(updateComplete);\n beforeEach(nextFrame);\n it('should activate the first focusable tab', function() {\n expect(element.querySelector('pf-tab')).to.have.attribute('active');\n });\n\n it('should activate the first tab panel', function() {\n expect(element.querySelector('pf-tab')).to.not.have.attribute('hidden');\n });\n });\n\n describe('setting the `vertical` attribute', function() {\n beforeEach(function() {\n element.setAttribute('vertical', '');\n });\n\n beforeEach(updateComplete);\n\n it('should have vertical styles', function() {\n // WARNING: asserting on shadow root content;\n const tabs = element.shadowRoot!.querySelector('[part=\"tabs\"]')!;\n const tabsVerticalStyles = getComputedStyle(tabs).flexDirection;\n expect(tabsVerticalStyles).to.be.equal('column');\n });\n });\n\n describe('setting the second tab\\'s `active` attribute', function() {\n beforeEach(function() {\n const [, tab] = element.querySelectorAll('pf-tab');\n tab!.active = true;\n });\n\n beforeEach(updateComplete);\n beforeEach(nextFrame);\n\n it('should activate the second tab', function() {\n const [, tab] = element.querySelectorAll('pf-tab');\n expect(tab).to.have.attribute('active');\n });\n\n it('should activate its panel', function() {\n const [, tab] = element.querySelectorAll('pf-tab');\n expect(tab).to.not.have.attribute('hidden');\n });\n\n it('should deactivate previously active tab', function() {\n expect(element.querySelector('pf-tab')).to.not.have.attribute('active');\n });\n\n it('should hide previously active panel', function() {\n expect(element.querySelector('pf-tab-panel')).to.have.attribute('hidden');\n });\n });\n\n describe('setting `activeIndex` to 2', function() {\n beforeEach(function() {\n element.activeIndex = 2;\n });\n\n beforeEach(updateComplete);\n beforeEach(nextFrame);\n\n it('should activate the third tab', function() {\n const [,, tab] = element.querySelectorAll('pf-tab');\n expect(tab).to.have.attribute('active');\n });\n\n it('should activate the third panel', async function() {\n const snapshot = await a11ySnapshot();\n expect(snapshot.children?.find(x => x.role === 'tabpanel')?.name).to.equal('tab-3');\n });\n\n describe('then setting the first tab\\'s `disabled` attribute', function() {\n beforeEach(async function() {\n element.querySelector('pf-tab')!.disabled = true;\n });\n\n beforeEach(updateComplete);\n\n it('should disable the button', async function() {\n const snapshot = await a11ySnapshot();\n const disabledTab = snapshot.children?.find(x => x.role === 'tab' && x.disabled);\n expect(disabledTab).to.be.ok;\n });\n\n describe('and clicking the disabled tab', function() {\n beforeEach(async function() {\n element.querySelector('pf-tab')!.click();\n });\n\n beforeEach(updateComplete);\n\n it('should not activate', function() {\n const [first] = element.querySelectorAll('pf-tab');\n expect(first).to.not.have.attribute('active');\n });\n\n it('should present the third panel to the ax tree', async function() {\n const snapshot = await a11ySnapshot();\n expect(snapshot.children?.find(x => x.role === 'tabpanel')?.name).to.equal('tab-3');\n });\n });\n\n describe('then setting `activeIndex` to 0 (i.e. the disabled tab\\'s index)', function() {\n beforeEach(function() {\n element.activeIndex = 0;\n });\n\n beforeEach(updateComplete);\n\n it('should not activate the first tab', function() {\n expect(element.querySelector('pf-tab')).to.not.have.attribute('active');\n });\n\n it('should present the third panel to the ax tree', async function() {\n const snapshot = await a11ySnapshot();\n expect(snapshot.children?.find(x => x.role === 'tabpanel')?.name).to.equal('tab-3');\n });\n });\n });\n });\n\n describe('when viewed in a small viewport', function() {\n beforeEach(async function() {\n // this is a comically narrow viewport, but our tabs have quite short\n // labels, so viewport must be itsy-pitsy in order to cause overflow\n await setViewport({ width: 100, height: 640 });\n });\n\n beforeEach(nextFrame);\n beforeEach(updateComplete);\n beforeEach(nextFrame);\n beforeEach(updateComplete);\n\n\n it('should have visible scroll buttons if overflowed', function() {\n // Note: overflow buttons are not included in the accessibility tree otherwise we'd test\n // for buttons there. tabindex=\"-1\" is used on the buttons to prevent focus and was a\n // decision made to keep logical keyboard navigation order flow between tabs and panels\n // as the next overflow button exists in the DOM between the tabs container and the open panel\n // and would disrupt the expected flow. For keyboard users they are able to scroll using the\n // left and right arrows keys and do not need direct access to the overflow buttons but still\n // exist as visual cues for which direction is overflowed\n const previousTab = element.shadowRoot!.querySelector('#previousTab')!;\n const nextTab = element.shadowRoot!.querySelector('#nextTab')!;\n expect(previousTab).to.not.be.null;\n expect(nextTab).to.not.be.null;\n const prevDisplayStyle = getComputedStyle(previousTab).display;\n const nextDisplayStyle = getComputedStyle(nextTab).display;\n expect(prevDisplayStyle ).to.not.equal('none');\n expect(nextDisplayStyle).to.not.equal('none');\n });\n });\n\n describe(`when navigated by keyboard`, function() {\n describe('when focused on the first tab', function() {\n beforeEach(async function() {\n element.querySelector('pf-tab')!.focus();\n });\n\n describe('pressing ArrowRight', function() {\n beforeEach(async function() {\n await sendKeys({ down: 'ArrowRight' });\n });\n\n beforeEach(updateComplete);\n\n it('should activate the next tab', function() {\n const [first, second, third] = element.querySelectorAll('pf-tab');\n expect(first).to.not.have.attribute('active');\n expect(second).to.have.attribute('active');\n expect(third).to.not.have.attribute('active');\n });\n });\n\n describe('pressing ArrowLeft', function() {\n beforeEach(async function() {\n await sendKeys({ down: 'ArrowLeft' });\n });\n\n it('should activate the last tab', function() {\n const [first, second, third] = element.querySelectorAll('pf-tab');\n expect(first).to.not.have.attribute('active');\n expect(second).to.not.have.attribute('active');\n expect(third).to.have.attribute('active');\n });\n describe('then pressing ArrowRight', function() {\n beforeEach(async function() {\n await sendKeys({ down: 'ArrowRight' });\n });\n\n beforeEach(updateComplete);\n\n it('should activate the first tab', function() {\n const [first, second, third] = element.querySelectorAll('pf-tab');\n expect(first).to.have.attribute('active');\n expect(second).to.not.have.attribute('active');\n expect(third).to.not.have.attribute('active');\n });\n });\n });\n });\n });\n\n describe('setting the `manual` attribute', function() {\n beforeEach(function() {\n element.setAttribute('manual', '');\n });\n\n beforeEach(updateComplete);\n\n describe('pressing Tab', function() {\n beforeEach(press('Tab'));\n describe('pressing ArrowRight key', function() {\n beforeEach(press('ArrowRight'));\n\n beforeEach(updateComplete);\n\n it('should not activate second tab', function() {\n const [first, second, third] = element.querySelectorAll('pf-tab');\n expect(first).to.have.attribute('active');\n expect(second).to.not.have.attribute('active');\n expect(third).to.not.have.attribute('active');\n });\n\n it('should focus the second tab', function() {\n const [, second] = element.querySelectorAll('pf-tab');\n expect(document.activeElement).to.equal(second);\n });\n\n describe('pressing enter key', function() {\n beforeEach(press('Enter'));\n\n beforeEach(updateComplete);\n\n it('should activate second tab', function() {\n const [first, second, third] = element.querySelectorAll('pf-tab');\n expect(first).to.not.have.attribute('active');\n expect(second).to.have.attribute('active');\n expect(third).to.not.have.attribute('active');\n expect(document.activeElement).to.equal(second);\n });\n });\n });\n });\n });\n });\n\n describe('when no active tab is given and the first tab is disabled', function() {\n let element: PfTabs;\n\n beforeEach(async function() {\n element = await createFixture<PfTabs>(html`\n <pf-tabs>\n <pf-tab slot=\"tab\" disabled>Users</pf-tab>\n <pf-tab-panel>Users</pf-tab-panel>\n <pf-tab slot=\"tab\">Containers</pf-tab>\n <pf-tab-panel>Containers</pf-tab-panel>\n <pf-tab slot=\"tab\">Database</pf-tab>\n <pf-tab-panel>Database</pf-tab-panel>\n <pf-tab slot=\"tab\" disabled>Disabled</pf-tab>\n <pf-tab-panel>Disabled</pf-tab-panel>\n <pf-tab slot=\"tab\" aria-disabled=\"true\">Aria Disabled</pf-tab>\n <pf-tab-panel>Aria Disabled</pf-tab-panel>\n </pf-tabs>\n `);\n });\n\n it('should activate the next focusable tab', function() {\n const [, second] = element.querySelectorAll('pf-tab');\n expect(second).to.have.attribute('active');\n });\n });\n});\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { LitElement } from 'lit';
|
|
2
2
|
/**
|
|
3
3
|
* A **text area** component is used for entering a paragraph of text that is longer than one line.
|
|
4
|
-
*
|
|
5
4
|
* @cssprop --pf-c-form-control--Color - {@default var(--pf-global--Color--100, #151515)}
|
|
6
5
|
* @cssprop --pf-c-form-control--FontSize - {@default var(--pf-global--FontSize--md, 1rem)}
|
|
7
6
|
* @cssprop --pf-c-form-control--LineHeight - {@default var(--pf-global--LineHeight--md, 1.5)}
|
|
@@ -163,7 +162,7 @@ export declare class PfTextArea extends LitElement {
|
|
|
163
162
|
/** Flag to modify height based on contents. */
|
|
164
163
|
autoResize: boolean;
|
|
165
164
|
willUpdate(): void;
|
|
166
|
-
render(): import("lit").TemplateResult<1>;
|
|
165
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
167
166
|
firstUpdated(): void;
|
|
168
167
|
formDisabledCallback(): Promise<void>;
|
|
169
168
|
setCustomValidity(message: string): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var _PfTextArea_instances,
|
|
1
|
+
var _PfTextArea_instances, _PfTextArea_logger, _PfTextArea_internals, _PfTextArea_derivedLabel, _PfTextArea_input_get, _PfTextArea_onInput, _PfTextArea_autoSetHeight, _PfTextArea_setValidityFromInput;
|
|
2
2
|
import { __classPrivateFieldGet, __classPrivateFieldSet, __decorate } from "tslib";
|
|
3
3
|
import { LitElement, html } from 'lit';
|
|
4
4
|
import { customElement } from 'lit/decorators/custom-element.js';
|
|
@@ -11,7 +11,6 @@ const styles = css `:host {\n display: block;\n\n /* .pf-c-form-control */\n
|
|
|
11
11
|
import { Logger } from '@patternfly/pfe-core/controllers/logger.js';
|
|
12
12
|
/**
|
|
13
13
|
* A **text area** component is used for entering a paragraph of text that is longer than one line.
|
|
14
|
-
*
|
|
15
14
|
* @cssprop --pf-c-form-control--Color - {@default var(--pf-global--Color--100, #151515)}
|
|
16
15
|
* @cssprop --pf-c-form-control--FontSize - {@default var(--pf-global--FontSize--md, 1rem)}
|
|
17
16
|
* @cssprop --pf-c-form-control--LineHeight - {@default var(--pf-global--LineHeight--md, 1.5)}
|
|
@@ -152,7 +151,6 @@ let PfTextArea = class PfTextArea extends LitElement {
|
|
|
152
151
|
this.value = '';
|
|
153
152
|
/** Flag to modify height based on contents. */
|
|
154
153
|
this.autoResize = false;
|
|
155
|
-
_PfTextArea_style.set(this, void 0);
|
|
156
154
|
_PfTextArea_logger.set(this, new Logger(this));
|
|
157
155
|
_PfTextArea_internals.set(this, InternalsController.of(this));
|
|
158
156
|
_PfTextArea_derivedLabel.set(this, '');
|
|
@@ -196,7 +194,6 @@ let PfTextArea = class PfTextArea extends LitElement {
|
|
|
196
194
|
return __classPrivateFieldGet(this, _PfTextArea_internals, "f").reportValidity();
|
|
197
195
|
}
|
|
198
196
|
};
|
|
199
|
-
_PfTextArea_style = new WeakMap();
|
|
200
197
|
_PfTextArea_logger = new WeakMap();
|
|
201
198
|
_PfTextArea_internals = new WeakMap();
|
|
202
199
|
_PfTextArea_derivedLabel = new WeakMap();
|
|
@@ -228,7 +225,10 @@ _PfTextArea_setValidityFromInput = function _PfTextArea_setValidityFromInput() {
|
|
|
228
225
|
};
|
|
229
226
|
PfTextArea.styles = [styles];
|
|
230
227
|
PfTextArea.formAssociated = true;
|
|
231
|
-
PfTextArea.shadowRootOptions = {
|
|
228
|
+
PfTextArea.shadowRootOptions = {
|
|
229
|
+
...LitElement.shadowRootOptions,
|
|
230
|
+
delegatesFocus: true,
|
|
231
|
+
};
|
|
232
232
|
__decorate([
|
|
233
233
|
property({ reflect: true, attribute: 'accessible-label' })
|
|
234
234
|
], PfTextArea.prototype, "accessibleLabel", void 0);
|