@sapudex/web-components 2.48.0 → 2.49.0
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/bundle.esm.js +2 -0
- package/cypress/specs/AccordionSpotlight.cy.tsx +402 -0
- package/cypress/specs/BusyIndicator.cy.tsx +15 -0
- package/cypress/specs/Carousel.cy.tsx +142 -0
- package/cypress/specs/FilterMenu.cy.tsx +968 -10
- package/cypress/specs/List.cy.tsx +106 -0
- package/cypress/specs/ListItem.cy.tsx +291 -1
- package/cypress/specs/MediaPlayer.cy.tsx +32 -0
- package/cypress/specs/SelectBox.cy.tsx +134 -3
- package/cypress/support/component-imports.instrumented.ts +6 -0
- package/cypress/support/component-imports.src.ts +6 -0
- package/dist/AccordionSpotlight.d.ts +149 -0
- package/dist/AccordionSpotlight.js +284 -0
- package/dist/AccordionSpotlight.js.map +1 -0
- package/dist/AccordionSpotlightItem.d.ts +76 -0
- package/dist/AccordionSpotlightItem.js +115 -0
- package/dist/AccordionSpotlightItem.js.map +1 -0
- package/dist/AccordionSpotlightItemTemplate.d.ts +2 -0
- package/dist/AccordionSpotlightItemTemplate.js +5 -0
- package/dist/AccordionSpotlightItemTemplate.js.map +1 -0
- package/dist/AccordionSpotlightTemplate.d.ts +2 -0
- package/dist/AccordionSpotlightTemplate.js +10 -0
- package/dist/AccordionSpotlightTemplate.js.map +1 -0
- package/dist/BusyIndicator.d.ts +9 -0
- package/dist/BusyIndicator.js +7 -1
- package/dist/BusyIndicator.js.map +1 -1
- package/dist/Carousel.d.ts +26 -15
- package/dist/Carousel.js +71 -55
- package/dist/Carousel.js.map +1 -1
- package/dist/FilterMenu.d.ts +12 -2
- package/dist/FilterMenu.js +24 -4
- package/dist/FilterMenu.js.map +1 -1
- package/dist/FilterMenuTemplate.js +1 -1
- package/dist/FilterMenuTemplate.js.map +1 -1
- package/dist/List.d.ts +1 -0
- package/dist/List.js +24 -11
- package/dist/List.js.map +1 -1
- package/dist/ListGroupHeader.js +5 -1
- package/dist/ListGroupHeader.js.map +1 -1
- package/dist/ListGroupHeaderBase.d.ts +22 -0
- package/dist/ListGroupHeaderBase.js +44 -0
- package/dist/ListGroupHeaderBase.js.map +1 -1
- package/dist/ListItem.d.ts +4 -0
- package/dist/ListItem.js +32 -0
- package/dist/ListItem.js.map +1 -1
- package/dist/MediaPlayer.d.ts +2 -0
- package/dist/MediaPlayer.js +12 -0
- package/dist/MediaPlayer.js.map +1 -1
- package/dist/PromoTile.js +1 -1
- package/dist/PromoTile.js.map +1 -1
- package/dist/SearchableListBase.d.ts +10 -1
- package/dist/SearchableListBase.js +23 -7
- package/dist/SearchableListBase.js.map +1 -1
- package/dist/SearchableListBaseTemplate.js +3 -2
- package/dist/SearchableListBaseTemplate.js.map +1 -1
- package/dist/SelectBase.d.ts +14 -0
- package/dist/SelectBase.js +56 -3
- package/dist/SelectBase.js.map +1 -1
- package/dist/SelectBoxTemplate.js +1 -1
- package/dist/SelectBoxTemplate.js.map +1 -1
- package/dist/TabNavigation.d.ts +6 -0
- package/dist/TabNavigation.js +5 -0
- package/dist/TabNavigation.js.map +1 -1
- package/dist/assets/{InputSuggestions-BcK6O4Bk.js → InputSuggestions-DaB1A6jW.js} +1 -1
- package/dist/assets/{ListItemStandardExpandableTextTemplate-u600dmHC.js → ListItemStandardExpandableTextTemplate-Co4KQuVw.js} +1 -1
- package/dist/assets/{bundle-JYo3bV8v.css → bundle-CkxyEA8c.css} +1 -1
- package/dist/assets/{bundle.esm-C6Ie2WeI.js → bundle.esm-al3NYhoB.js} +241 -238
- package/dist/assets/messagebundle_ar-BUZ_gTvQ.js +1 -0
- package/dist/assets/messagebundle_no-BZQfeWxT.js +1 -0
- package/dist/css/themes/Accordion.css +1 -1
- package/dist/css/themes/AccordionItem.css +1 -1
- package/dist/css/themes/AccordionSpotlight.css +1 -0
- package/dist/css/themes/AccordionSpotlightItem.css +1 -0
- package/dist/css/themes/Badge.css +1 -1
- package/dist/css/themes/BusyIndicator.css +1 -0
- package/dist/css/themes/Button.css +1 -1
- package/dist/css/themes/Divider.css +1 -1
- package/dist/css/themes/Dropdown.css +1 -1
- package/dist/css/themes/FilterMenu.css +1 -1
- package/dist/css/themes/Footer.css +1 -1
- package/dist/css/themes/ImageGridTableItem.css +1 -1
- package/dist/css/themes/MastheadShell.css +1 -1
- package/dist/css/themes/MediaPlayer.css +1 -1
- package/dist/css/themes/PhoneNumberField.css +1 -1
- package/dist/css/themes/ProgressBar.css +1 -1
- package/dist/css/themes/PromoTile.css +1 -1
- package/dist/css/themes/Review.css +1 -1
- package/dist/css/themes/ReviewItem.css +1 -1
- package/dist/css/themes/Search.css +1 -1
- package/dist/css/themes/SelectBase.css +1 -1
- package/dist/css/themes/SelectBox.css +1 -1
- package/dist/css/themes/SideNavigation.css +1 -1
- package/dist/css/themes/SideNavigationGroup.css +1 -1
- package/dist/css/themes/SocialMediaButton.css +1 -1
- package/dist/css/themes/StepInput.css +1 -1
- package/dist/css/themes/Switch.css +1 -1
- package/dist/css/themes/TabNavigation.css +1 -1
- package/dist/css/themes/Tag.css +1 -1
- package/dist/css/themes/TagGroup.css +1 -1
- package/dist/css/themes/TextArea.css +1 -1
- package/dist/css/themes/TextField.css +1 -1
- package/dist/css/themes/Toast.css +1 -1
- package/dist/custom-elements-internal.json +426 -35
- package/dist/custom-elements.json +384 -49
- package/dist/generated/assets/i18n/messagebundle_ar.json +1 -1
- package/dist/generated/assets/i18n/messagebundle_no.json +1 -1
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js +24 -21
- package/dist/generated/templates/ListGroupHeaderTemplate.lit.js.map +1 -1
- package/dist/generated/templates/ListItemTemplate.lit.js +2 -2
- package/dist/generated/templates/ListItemTemplate.lit.js.map +1 -1
- package/dist/generated/themes/Accordion.css.d.ts +1 -1
- package/dist/generated/themes/Accordion.css.js +1 -1
- package/dist/generated/themes/Accordion.css.js.map +1 -1
- package/dist/generated/themes/AccordionItem.css.d.ts +1 -1
- package/dist/generated/themes/AccordionItem.css.js +1 -1
- package/dist/generated/themes/AccordionItem.css.js.map +1 -1
- package/dist/generated/themes/AccordionSpotlight.css.d.ts +2 -0
- package/dist/generated/themes/AccordionSpotlight.css.js +8 -0
- package/dist/generated/themes/AccordionSpotlight.css.js.map +1 -0
- package/dist/generated/themes/AccordionSpotlightItem.css.d.ts +2 -0
- package/dist/generated/themes/AccordionSpotlightItem.css.js +8 -0
- package/dist/generated/themes/AccordionSpotlightItem.css.js.map +1 -0
- package/dist/generated/themes/Badge.css.d.ts +1 -1
- package/dist/generated/themes/Badge.css.js +1 -1
- package/dist/generated/themes/Badge.css.js.map +1 -1
- package/dist/generated/themes/BusyIndicator.css.d.ts +2 -0
- package/dist/generated/themes/BusyIndicator.css.js +8 -0
- package/dist/generated/themes/BusyIndicator.css.js.map +1 -0
- 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/Divider.css.d.ts +1 -1
- package/dist/generated/themes/Divider.css.js +1 -1
- package/dist/generated/themes/Divider.css.js.map +1 -1
- package/dist/generated/themes/Dropdown.css.d.ts +1 -1
- package/dist/generated/themes/Dropdown.css.js +1 -1
- package/dist/generated/themes/Dropdown.css.js.map +1 -1
- package/dist/generated/themes/FilterMenu.css.d.ts +1 -1
- package/dist/generated/themes/FilterMenu.css.js +1 -1
- package/dist/generated/themes/FilterMenu.css.js.map +1 -1
- package/dist/generated/themes/Footer.css.d.ts +1 -1
- package/dist/generated/themes/Footer.css.js +1 -1
- package/dist/generated/themes/Footer.css.js.map +1 -1
- package/dist/generated/themes/ImageGridTableItem.css.d.ts +1 -1
- package/dist/generated/themes/ImageGridTableItem.css.js +1 -1
- package/dist/generated/themes/ImageGridTableItem.css.js.map +1 -1
- package/dist/generated/themes/MastheadShell.css.d.ts +1 -1
- package/dist/generated/themes/MastheadShell.css.js +1 -1
- package/dist/generated/themes/MastheadShell.css.js.map +1 -1
- package/dist/generated/themes/MediaPlayer.css.d.ts +1 -1
- package/dist/generated/themes/MediaPlayer.css.js +1 -1
- package/dist/generated/themes/MediaPlayer.css.js.map +1 -1
- package/dist/generated/themes/PhoneNumberField.css.d.ts +1 -1
- package/dist/generated/themes/PhoneNumberField.css.js +1 -1
- package/dist/generated/themes/PhoneNumberField.css.js.map +1 -1
- package/dist/generated/themes/ProgressBar.css.d.ts +1 -1
- package/dist/generated/themes/ProgressBar.css.js +1 -1
- package/dist/generated/themes/ProgressBar.css.js.map +1 -1
- package/dist/generated/themes/PromoTile.css.d.ts +1 -1
- package/dist/generated/themes/PromoTile.css.js +1 -1
- package/dist/generated/themes/PromoTile.css.js.map +1 -1
- package/dist/generated/themes/Review.css.d.ts +1 -1
- package/dist/generated/themes/Review.css.js +1 -1
- package/dist/generated/themes/Review.css.js.map +1 -1
- package/dist/generated/themes/ReviewItem.css.d.ts +1 -1
- package/dist/generated/themes/ReviewItem.css.js +1 -1
- package/dist/generated/themes/ReviewItem.css.js.map +1 -1
- package/dist/generated/themes/Search.css.d.ts +1 -1
- package/dist/generated/themes/Search.css.js +1 -1
- package/dist/generated/themes/Search.css.js.map +1 -1
- package/dist/generated/themes/SelectBase.css.d.ts +1 -1
- package/dist/generated/themes/SelectBase.css.js +1 -1
- package/dist/generated/themes/SelectBase.css.js.map +1 -1
- package/dist/generated/themes/SelectBox.css.d.ts +1 -1
- package/dist/generated/themes/SelectBox.css.js +1 -1
- package/dist/generated/themes/SelectBox.css.js.map +1 -1
- package/dist/generated/themes/SideNavigation.css.d.ts +1 -1
- package/dist/generated/themes/SideNavigation.css.js +1 -1
- package/dist/generated/themes/SideNavigation.css.js.map +1 -1
- package/dist/generated/themes/SideNavigationGroup.css.d.ts +1 -1
- package/dist/generated/themes/SideNavigationGroup.css.js +1 -1
- package/dist/generated/themes/SideNavigationGroup.css.js.map +1 -1
- package/dist/generated/themes/SocialMediaButton.css.d.ts +1 -1
- package/dist/generated/themes/SocialMediaButton.css.js +1 -1
- package/dist/generated/themes/SocialMediaButton.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/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/TabNavigation.css.d.ts +1 -1
- package/dist/generated/themes/TabNavigation.css.js +1 -1
- package/dist/generated/themes/TabNavigation.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/TagGroup.css.d.ts +1 -1
- package/dist/generated/themes/TagGroup.css.js +1 -1
- package/dist/generated/themes/TagGroup.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/TextField.css.d.ts +1 -1
- package/dist/generated/themes/TextField.css.js +1 -1
- package/dist/generated/themes/TextField.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/messagebundle_ar.properties +99 -0
- package/dist/messagebundle_no.properties +126 -1
- package/dist/vscode.html-custom-data.json +76 -11
- package/dist/web-types.json +194 -26
- package/package.json +1 -1
- package/src/AccordionSpotlight.ts +321 -0
- package/src/AccordionSpotlightItem.ts +117 -0
- package/src/AccordionSpotlightItemTemplate.tsx +7 -0
- package/src/AccordionSpotlightTemplate.tsx +107 -0
- package/src/BusyIndicator.ts +17 -2
- package/src/Carousel.ts +118 -80
- package/src/FilterMenu.ts +25 -4
- package/src/FilterMenuTemplate.tsx +1 -1
- package/src/List.ts +23 -11
- package/src/ListGroupHeader.hbs +11 -10
- package/src/ListGroupHeader.ts +5 -1
- package/src/ListGroupHeaderBase.ts +48 -0
- package/src/ListItem.hbs +5 -1
- package/src/ListItem.ts +36 -0
- package/src/MediaPlayer.ts +11 -0
- package/src/PromoTile.ts +1 -1
- package/src/SearchableListBase.ts +24 -7
- package/src/SearchableListBaseTemplate.tsx +5 -2
- package/src/SelectBase.ts +58 -3
- package/src/SelectBoxTemplate.tsx +1 -0
- package/src/TabNavigation.ts +6 -0
- package/src/generated/templates/ListGroupHeaderTemplate.lit.ts +24 -21
- package/src/generated/templates/ListItemTemplate.lit.ts +2 -2
- package/src/generated/themes/Accordion.css.ts +1 -1
- package/src/generated/themes/AccordionItem.css.ts +1 -1
- package/src/generated/themes/AccordionSpotlight.css.ts +9 -0
- package/src/generated/themes/AccordionSpotlightItem.css.ts +9 -0
- package/src/generated/themes/Badge.css.ts +1 -1
- package/src/generated/themes/BusyIndicator.css.ts +9 -0
- package/src/generated/themes/Button.css.ts +1 -1
- package/src/generated/themes/Divider.css.ts +1 -1
- package/src/generated/themes/Dropdown.css.ts +1 -1
- package/src/generated/themes/FilterMenu.css.ts +1 -1
- package/src/generated/themes/Footer.css.ts +1 -1
- package/src/generated/themes/ImageGridTableItem.css.ts +1 -1
- package/src/generated/themes/MastheadShell.css.ts +1 -1
- package/src/generated/themes/MediaPlayer.css.ts +1 -1
- package/src/generated/themes/PhoneNumberField.css.ts +1 -1
- package/src/generated/themes/ProgressBar.css.ts +1 -1
- package/src/generated/themes/PromoTile.css.ts +1 -1
- package/src/generated/themes/Review.css.ts +1 -1
- package/src/generated/themes/ReviewItem.css.ts +1 -1
- package/src/generated/themes/Search.css.ts +1 -1
- package/src/generated/themes/SelectBase.css.ts +1 -1
- package/src/generated/themes/SelectBox.css.ts +1 -1
- package/src/generated/themes/SideNavigation.css.ts +1 -1
- package/src/generated/themes/SideNavigationGroup.css.ts +1 -1
- package/src/generated/themes/SocialMediaButton.css.ts +1 -1
- package/src/generated/themes/StepInput.css.ts +1 -1
- package/src/generated/themes/Switch.css.ts +1 -1
- package/src/generated/themes/TabNavigation.css.ts +1 -1
- package/src/generated/themes/Tag.css.ts +1 -1
- package/src/generated/themes/TagGroup.css.ts +1 -1
- package/src/generated/themes/TextArea.css.ts +1 -1
- package/src/generated/themes/TextField.css.ts +1 -1
- package/src/generated/themes/Toast.css.ts +1 -1
- package/src/i18n/messagebundle_ar.properties +99 -0
- package/src/i18n/messagebundle_no.properties +126 -1
- package/src/themes/Accordion.css +1 -1
- package/src/themes/AccordionItem.css +4 -4
- package/src/themes/AccordionSpotlight.css +264 -0
- package/src/themes/AccordionSpotlightItem.css +3 -0
- package/src/themes/Badge.css +7 -7
- package/src/themes/BusyIndicator.css +24 -0
- package/src/themes/Button.css +57 -57
- package/src/themes/Divider.css +1 -1
- package/src/themes/Dropdown.css +1 -1
- package/src/themes/FilterMenu.css +2 -2
- package/src/themes/Footer.css +1 -1
- package/src/themes/ImageGridTableItem.css +1 -1
- package/src/themes/MastheadShell.css +2 -2
- package/src/themes/MediaPlayer.css +5 -34
- package/src/themes/PhoneNumberField.css +6 -6
- package/src/themes/ProgressBar.css +4 -0
- package/src/themes/PromoTile.css +4 -4
- package/src/themes/Review.css +2 -2
- package/src/themes/ReviewItem.css +2 -2
- package/src/themes/Search.css +5 -5
- package/src/themes/SelectBase.css +14 -14
- package/src/themes/SelectBox.css +1 -1
- package/src/themes/SideNavigation.css +1 -1
- package/src/themes/SideNavigationGroup.css +1 -1
- package/src/themes/SocialMediaButton.css +2 -2
- package/src/themes/StepInput.css +8 -8
- package/src/themes/Switch.css +9 -9
- package/src/themes/TabNavigation.css +1 -1
- package/src/themes/Tag.css +4 -4
- package/src/themes/TagGroup.css +1 -0
- package/src/themes/TextArea.css +4 -4
- package/src/themes/TextField.css +13 -13
- package/src/themes/Toast.css +1 -1
- package/dist/assets/messagebundle_ar-BNhVFt1-.js +0 -1
- package/dist/assets/messagebundle_no-BIUfmTWJ.js +0 -1
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
8
|
+
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
9
|
+
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
10
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
11
|
+
import event from "@ui5/webcomponents-base/dist/decorators/event-strict.js";
|
|
12
|
+
import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
|
|
13
|
+
import { isDesktop } from "@ui5/webcomponents-base/dist/Device.js";
|
|
14
|
+
import AccordionSpotlightTemplate from "./AccordionSpotlightTemplate.js";
|
|
15
|
+
import AccordionSpotlightItem from "./AccordionSpotlightItem.js";
|
|
16
|
+
import UDExButton from "./Button.js";
|
|
17
|
+
import "@ui5/webcomponents-icons/dist/play.js";
|
|
18
|
+
import "@ui5/webcomponents-icons/dist/pause.js";
|
|
19
|
+
import ResizeHandler from "@ui5/webcomponents-base/dist/delegate/ResizeHandler.js";
|
|
20
|
+
import { BreakpointUtils } from "./utils/Breakpoints.js";
|
|
21
|
+
// Styles
|
|
22
|
+
import AccordionSpotlightCss from "./generated/themes/AccordionSpotlight.css.js";
|
|
23
|
+
export var UDExAccordionSpotlightVerticalAlignment;
|
|
24
|
+
(function (UDExAccordionSpotlightVerticalAlignment) {
|
|
25
|
+
UDExAccordionSpotlightVerticalAlignment["Top"] = "Top";
|
|
26
|
+
UDExAccordionSpotlightVerticalAlignment["Center"] = "Center";
|
|
27
|
+
})(UDExAccordionSpotlightVerticalAlignment || (UDExAccordionSpotlightVerticalAlignment = {}));
|
|
28
|
+
export var UDExAccordionSpotlightPlacement;
|
|
29
|
+
(function (UDExAccordionSpotlightPlacement) {
|
|
30
|
+
UDExAccordionSpotlightPlacement["Start"] = "Start";
|
|
31
|
+
UDExAccordionSpotlightPlacement["End"] = "End";
|
|
32
|
+
})(UDExAccordionSpotlightPlacement || (UDExAccordionSpotlightPlacement = {}));
|
|
33
|
+
export var UDExAccordionSpotlightMediaMode;
|
|
34
|
+
(function (UDExAccordionSpotlightMediaMode) {
|
|
35
|
+
UDExAccordionSpotlightMediaMode["Dynamic"] = "Dynamic";
|
|
36
|
+
UDExAccordionSpotlightMediaMode["Static"] = "Static";
|
|
37
|
+
})(UDExAccordionSpotlightMediaMode || (UDExAccordionSpotlightMediaMode = {}));
|
|
38
|
+
/**
|
|
39
|
+
* @class
|
|
40
|
+
*
|
|
41
|
+
* <h3 class="comment-api-title">Overview</h3>
|
|
42
|
+
*
|
|
43
|
+
* Vertical accordion navigation with spotlight layout. Items are listed on the
|
|
44
|
+
* left; the expanded panel is displayed on the right (desktop) or inline below
|
|
45
|
+
* the heading (mobile). Follows the WAI-ARIA APG Accordion pattern.
|
|
46
|
+
*
|
|
47
|
+
* <h3>Usage</h3>
|
|
48
|
+
*
|
|
49
|
+
* For the <code>udex-accordion-spotlight</code>
|
|
50
|
+
* <h3>ES6 Module Import</h3>
|
|
51
|
+
*
|
|
52
|
+
* <code>import "@sapudex/web-components/dist/AccordionSpotlight.js";</code>
|
|
53
|
+
*
|
|
54
|
+
* @constructor
|
|
55
|
+
* @extends UI5Element
|
|
56
|
+
* @public
|
|
57
|
+
*/
|
|
58
|
+
let UDExAccordionSpotlight = class UDExAccordionSpotlight extends UI5Element {
|
|
59
|
+
constructor() {
|
|
60
|
+
super();
|
|
61
|
+
/**
|
|
62
|
+
* The index of the currently expanded item (0-based).
|
|
63
|
+
* Derived from items' <code>selected</code> attribute; kept in sync by the parent.
|
|
64
|
+
*
|
|
65
|
+
* @private
|
|
66
|
+
*/
|
|
67
|
+
this._selectedIndex = 0;
|
|
68
|
+
/**
|
|
69
|
+
* Vertical alignment of the navigation sidebar relative to the content panel.
|
|
70
|
+
*
|
|
71
|
+
* @default "Top"
|
|
72
|
+
* @public
|
|
73
|
+
*/
|
|
74
|
+
this.verticalAlignment = UDExAccordionSpotlightVerticalAlignment.Top;
|
|
75
|
+
/**
|
|
76
|
+
* Placement of the navigation sidebar — "Start" (left) or "End" (right).
|
|
77
|
+
*
|
|
78
|
+
* @default "Start"
|
|
79
|
+
* @public
|
|
80
|
+
*/
|
|
81
|
+
this.placement = UDExAccordionSpotlightPlacement.Start;
|
|
82
|
+
/**
|
|
83
|
+
* Enables automatic cycling through items on an interval.
|
|
84
|
+
*
|
|
85
|
+
* @default false
|
|
86
|
+
* @public
|
|
87
|
+
*/
|
|
88
|
+
this.autoPlay = false;
|
|
89
|
+
/**
|
|
90
|
+
* Interval in milliseconds between automatic item advances. Applies only when autoPlay is enabled.
|
|
91
|
+
*
|
|
92
|
+
* @default 5000
|
|
93
|
+
* @public
|
|
94
|
+
*/
|
|
95
|
+
this.autoPlayInterval = 5000;
|
|
96
|
+
/**
|
|
97
|
+
* Defines the width of the navigation panel.
|
|
98
|
+
*
|
|
99
|
+
* @default "auto"
|
|
100
|
+
* @public
|
|
101
|
+
*/
|
|
102
|
+
this.tabWidth = "auto";
|
|
103
|
+
/**
|
|
104
|
+
* Controls how the media area behaves. In <code>Static</code> mode a single
|
|
105
|
+
* persistent media element (image or video) is displayed alongside the nav
|
|
106
|
+
* list and never changes when items are expanded. In <code>Dynamic</code>
|
|
107
|
+
* mode (default) each item provides its own content panel.
|
|
108
|
+
*
|
|
109
|
+
* @default "Dynamic"
|
|
110
|
+
* @public
|
|
111
|
+
*/
|
|
112
|
+
this.mediaMode = UDExAccordionSpotlightMediaMode.Dynamic;
|
|
113
|
+
/**
|
|
114
|
+
* @private
|
|
115
|
+
*/
|
|
116
|
+
this._isMobile = false;
|
|
117
|
+
/**
|
|
118
|
+
* @private
|
|
119
|
+
*/
|
|
120
|
+
this._isPaused = false;
|
|
121
|
+
this._handleResizeBound = this._handleResize.bind(this);
|
|
122
|
+
}
|
|
123
|
+
onBeforeRendering() {
|
|
124
|
+
this._syncItemStates();
|
|
125
|
+
}
|
|
126
|
+
onAfterRendering() {
|
|
127
|
+
this._checkMobile();
|
|
128
|
+
}
|
|
129
|
+
onEnterDOM() {
|
|
130
|
+
ResizeHandler.register(this, this._handleResizeBound);
|
|
131
|
+
if (isDesktop()) {
|
|
132
|
+
this.setAttribute("desktop", "");
|
|
133
|
+
}
|
|
134
|
+
if (this.autoPlay) {
|
|
135
|
+
const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
136
|
+
if (prefersReducedMotion) {
|
|
137
|
+
this._isPaused = true;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
this._startAutoPlay();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
onExitDOM() {
|
|
145
|
+
ResizeHandler.deregister(this, this._handleResizeBound);
|
|
146
|
+
this._stopAutoPlay();
|
|
147
|
+
}
|
|
148
|
+
_handleResize() {
|
|
149
|
+
this._checkMobile();
|
|
150
|
+
}
|
|
151
|
+
_checkMobile() {
|
|
152
|
+
const isMobile = BreakpointUtils.isAtMost("S");
|
|
153
|
+
if (isMobile !== this._isMobile) {
|
|
154
|
+
this._isMobile = isMobile;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
_syncItemStates() {
|
|
158
|
+
if (this.items.length === 0) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const foundIndex = this.items.findIndex(item => item.selected);
|
|
162
|
+
const activeIndex = foundIndex === -1 ? 0 : foundIndex;
|
|
163
|
+
this._selectedIndex = activeIndex;
|
|
164
|
+
this.items.forEach((item, index) => {
|
|
165
|
+
item.selected = index === activeIndex;
|
|
166
|
+
item._isMobile = this._isMobile;
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
_startAutoPlay() {
|
|
170
|
+
this._stopAutoPlay();
|
|
171
|
+
this._isPaused = false;
|
|
172
|
+
this._autoPlayTimer = window.setInterval(() => {
|
|
173
|
+
this._advanceItem();
|
|
174
|
+
}, this.autoPlayInterval);
|
|
175
|
+
}
|
|
176
|
+
_stopAutoPlay() {
|
|
177
|
+
if (this._autoPlayTimer !== undefined) {
|
|
178
|
+
window.clearInterval(this._autoPlayTimer);
|
|
179
|
+
this._autoPlayTimer = undefined;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
_advanceItem() {
|
|
183
|
+
const count = this.items.length;
|
|
184
|
+
if (count === 0) {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const next = (this._selectedIndex + 1) % count;
|
|
188
|
+
this._selectItem(next);
|
|
189
|
+
}
|
|
190
|
+
onPlayButtonClick() {
|
|
191
|
+
if (this._isPaused) {
|
|
192
|
+
this._startAutoPlay();
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
this._stopAutoPlay();
|
|
196
|
+
this._isPaused = true;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
handleNavItemClick(e) {
|
|
200
|
+
const btn = e.target.closest("[data-index]");
|
|
201
|
+
if (!btn) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const index = Number.parseInt(btn.dataset.index);
|
|
205
|
+
this._selectItem(index);
|
|
206
|
+
}
|
|
207
|
+
_selectItem(index) {
|
|
208
|
+
if (index === this._selectedIndex) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
this._selectedIndex = index;
|
|
212
|
+
this.items.forEach((item, i) => { item.selected = i === index; });
|
|
213
|
+
const item = this.items[index];
|
|
214
|
+
this.fireDecoratorEvent("item-click", { item });
|
|
215
|
+
}
|
|
216
|
+
get playBtnIcon() {
|
|
217
|
+
return this._isPaused ? "play" : "pause";
|
|
218
|
+
}
|
|
219
|
+
get showFooterSlot() {
|
|
220
|
+
return this.footer?.length > 0;
|
|
221
|
+
}
|
|
222
|
+
get isStaticMedia() {
|
|
223
|
+
return this.mediaMode === UDExAccordionSpotlightMediaMode.Static;
|
|
224
|
+
}
|
|
225
|
+
get showMediaSlot() {
|
|
226
|
+
return this.isStaticMedia && this.media?.length > 0;
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
__decorate([
|
|
230
|
+
property({ type: Number, noAttribute: true })
|
|
231
|
+
], UDExAccordionSpotlight.prototype, "_selectedIndex", void 0);
|
|
232
|
+
__decorate([
|
|
233
|
+
property()
|
|
234
|
+
], UDExAccordionSpotlight.prototype, "verticalAlignment", void 0);
|
|
235
|
+
__decorate([
|
|
236
|
+
property()
|
|
237
|
+
], UDExAccordionSpotlight.prototype, "placement", void 0);
|
|
238
|
+
__decorate([
|
|
239
|
+
property({ type: Boolean })
|
|
240
|
+
], UDExAccordionSpotlight.prototype, "autoPlay", void 0);
|
|
241
|
+
__decorate([
|
|
242
|
+
property({ type: Number })
|
|
243
|
+
], UDExAccordionSpotlight.prototype, "autoPlayInterval", void 0);
|
|
244
|
+
__decorate([
|
|
245
|
+
property({ type: String })
|
|
246
|
+
], UDExAccordionSpotlight.prototype, "tabWidth", void 0);
|
|
247
|
+
__decorate([
|
|
248
|
+
property()
|
|
249
|
+
], UDExAccordionSpotlight.prototype, "mediaMode", void 0);
|
|
250
|
+
__decorate([
|
|
251
|
+
property({ type: Boolean, noAttribute: true })
|
|
252
|
+
], UDExAccordionSpotlight.prototype, "_isMobile", void 0);
|
|
253
|
+
__decorate([
|
|
254
|
+
property({ type: Boolean, noAttribute: true })
|
|
255
|
+
], UDExAccordionSpotlight.prototype, "_isPaused", void 0);
|
|
256
|
+
__decorate([
|
|
257
|
+
slot({ type: HTMLElement, "default": true, individualSlots: true })
|
|
258
|
+
], UDExAccordionSpotlight.prototype, "items", void 0);
|
|
259
|
+
__decorate([
|
|
260
|
+
slot({ type: HTMLElement })
|
|
261
|
+
], UDExAccordionSpotlight.prototype, "footer", void 0);
|
|
262
|
+
__decorate([
|
|
263
|
+
slot({ type: HTMLElement })
|
|
264
|
+
], UDExAccordionSpotlight.prototype, "media", void 0);
|
|
265
|
+
UDExAccordionSpotlight = __decorate([
|
|
266
|
+
customElement({
|
|
267
|
+
tag: "udex-accordion-spotlight",
|
|
268
|
+
renderer: jsxRenderer,
|
|
269
|
+
styles: AccordionSpotlightCss,
|
|
270
|
+
template: AccordionSpotlightTemplate,
|
|
271
|
+
dependencies: [AccordionSpotlightItem, UDExButton],
|
|
272
|
+
})
|
|
273
|
+
/**
|
|
274
|
+
* Fired when the expanded item clicked.
|
|
275
|
+
*
|
|
276
|
+
* @public
|
|
277
|
+
* @param {AccordionSpotlightItem} [item] The accordion spotlight item that was clicked
|
|
278
|
+
*/
|
|
279
|
+
,
|
|
280
|
+
event("item-click", { bubbles: true })
|
|
281
|
+
], UDExAccordionSpotlight);
|
|
282
|
+
UDExAccordionSpotlight.define();
|
|
283
|
+
export default UDExAccordionSpotlight;
|
|
284
|
+
//# sourceMappingURL=AccordionSpotlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionSpotlight.js","sourceRoot":"","sources":["../src/AccordionSpotlight.ts"],"names":[],"mappings":"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","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport type { DefaultSlot, Slot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport event from \"@ui5/webcomponents-base/dist/decorators/event-strict.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\nimport { isDesktop } from \"@ui5/webcomponents-base/dist/Device.js\";\nimport AccordionSpotlightTemplate from \"./AccordionSpotlightTemplate.js\";\nimport AccordionSpotlightItem from \"./AccordionSpotlightItem.js\";\nimport UDExButton from \"./Button.js\";\nimport \"@ui5/webcomponents-icons/dist/play.js\";\nimport \"@ui5/webcomponents-icons/dist/pause.js\";\nimport type { ResizeObserverCallback } from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport ResizeHandler from \"@ui5/webcomponents-base/dist/delegate/ResizeHandler.js\";\nimport { BreakpointUtils } from \"./utils/Breakpoints.js\";\n\n// Styles\nimport AccordionSpotlightCss from \"./generated/themes/AccordionSpotlight.css.js\";\n\nexport enum UDExAccordionSpotlightVerticalAlignment {\n Top = \"Top\",\n Center = \"Center\",\n}\n\nexport enum UDExAccordionSpotlightPlacement {\n Start = \"Start\",\n End = \"End\",\n}\n\nexport enum UDExAccordionSpotlightMediaMode {\n Dynamic = \"Dynamic\",\n Static = \"Static\",\n}\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n * Vertical accordion navigation with spotlight layout. Items are listed on the\n * left; the expanded panel is displayed on the right (desktop) or inline below\n * the heading (mobile). Follows the WAI-ARIA APG Accordion pattern.\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-accordion-spotlight</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/AccordionSpotlight.js\";</code>\n *\n * @constructor\n * @extends UI5Element\n * @public\n */\n@customElement({\n tag: \"udex-accordion-spotlight\",\n renderer: jsxRenderer,\n styles: AccordionSpotlightCss,\n template: AccordionSpotlightTemplate,\n dependencies: [AccordionSpotlightItem, UDExButton],\n})\n\n/**\n * Fired when the expanded item clicked.\n *\n * @public\n * @param {AccordionSpotlightItem} [item] The accordion spotlight item that was clicked\n */\n@event(\"item-click\", { bubbles: true })\n\nclass UDExAccordionSpotlight extends UI5Element {\n eventDetails!: {\n \"item-click\": { item: AccordionSpotlightItem },\n };\n\n /**\n * The index of the currently expanded item (0-based).\n * Derived from items' <code>selected</code> attribute; kept in sync by the parent.\n *\n * @private\n */\n @property({ type: Number, noAttribute: true })\n _selectedIndex: number = 0;\n\n /**\n * Vertical alignment of the navigation sidebar relative to the content panel.\n *\n * @default \"Top\"\n * @public\n */\n @property()\n verticalAlignment: `${UDExAccordionSpotlightVerticalAlignment}` = UDExAccordionSpotlightVerticalAlignment.Top;\n\n /**\n * Placement of the navigation sidebar — \"Start\" (left) or \"End\" (right).\n *\n * @default \"Start\"\n * @public\n */\n @property()\n placement: `${UDExAccordionSpotlightPlacement}` = UDExAccordionSpotlightPlacement.Start;\n\n /**\n * Enables automatic cycling through items on an interval.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n autoPlay: boolean = false;\n\n /**\n * Interval in milliseconds between automatic item advances. Applies only when autoPlay is enabled.\n *\n * @default 5000\n * @public\n */\n @property({ type: Number })\n autoPlayInterval: number = 5000;\n\n /**\n * Defines the width of the navigation panel.\n *\n * @default \"auto\"\n * @public\n */\n @property({ type: String })\n tabWidth: string = \"auto\";\n\n /**\n * Controls how the media area behaves. In <code>Static</code> mode a single\n * persistent media element (image or video) is displayed alongside the nav\n * list and never changes when items are expanded. In <code>Dynamic</code>\n * mode (default) each item provides its own content panel.\n *\n * @default \"Dynamic\"\n * @public\n */\n @property()\n mediaMode: `${UDExAccordionSpotlightMediaMode}` = UDExAccordionSpotlightMediaMode.Dynamic;\n\n /**\n * @private\n */\n @property({ type: Boolean, noAttribute: true })\n _isMobile: boolean = false;\n\n /**\n * @private\n */\n @property({ type: Boolean, noAttribute: true })\n _isPaused: boolean = false;\n\n /**\n * The slotted AccordionSpotlightItem elements.\n *\n * @public\n */\n @slot({ type: HTMLElement, \"default\": true, individualSlots: true })\n items!: DefaultSlot<AccordionSpotlightItem>;\n\n /**\n * Defines optional content rendered below the navigation items.\n * Use to place a button or any action element beneath the items.\n *\n * @slot footer\n * @public\n */\n @slot({ type: HTMLElement })\n footer!: Slot<HTMLElement>;\n\n /**\n * Persistent media area shown in <code>Static</code> media mode.\n * Place an <code><img></code> or <code><video></code> element here;\n * it remains visible regardless of which item is currently expanded.\n *\n * @slot media\n * @public\n */\n @slot({ type: HTMLElement })\n media!: Slot<HTMLElement>;\n\n _handleResizeBound: ResizeObserverCallback;\n _autoPlayTimer?: number;\n\n constructor() {\n super();\n this._handleResizeBound = this._handleResize.bind(this);\n }\n\n onBeforeRendering() {\n this._syncItemStates();\n }\n\n onAfterRendering() {\n this._checkMobile();\n }\n\n onEnterDOM() {\n ResizeHandler.register(this, this._handleResizeBound);\n\n if (isDesktop()) {\n this.setAttribute(\"desktop\", \"\");\n }\n\n if (this.autoPlay) {\n const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (prefersReducedMotion) {\n this._isPaused = true;\n } else {\n this._startAutoPlay();\n }\n }\n }\n\n onExitDOM() {\n ResizeHandler.deregister(this, this._handleResizeBound);\n this._stopAutoPlay();\n }\n\n _handleResize(): void {\n this._checkMobile();\n }\n\n _checkMobile() {\n const isMobile = BreakpointUtils.isAtMost(\"S\");\n if (isMobile !== this._isMobile) {\n this._isMobile = isMobile;\n }\n }\n\n _syncItemStates() {\n if (this.items.length === 0) {\n return;\n }\n\n const foundIndex = this.items.findIndex(item => item.selected);\n const activeIndex = foundIndex === -1 ? 0 : foundIndex;\n this._selectedIndex = activeIndex;\n\n this.items.forEach((item, index) => {\n item.selected = index === activeIndex;\n item._isMobile = this._isMobile;\n });\n }\n\n _startAutoPlay(): void {\n this._stopAutoPlay();\n this._isPaused = false;\n this._autoPlayTimer = window.setInterval(() => {\n this._advanceItem();\n }, this.autoPlayInterval);\n }\n\n _stopAutoPlay(): void {\n if (this._autoPlayTimer !== undefined) {\n window.clearInterval(this._autoPlayTimer);\n this._autoPlayTimer = undefined;\n }\n }\n\n _advanceItem(): void {\n const count = this.items.length;\n if (count === 0) {\n return;\n }\n\n const next = (this._selectedIndex + 1) % count;\n this._selectItem(next);\n }\n\n onPlayButtonClick(): void {\n if (this._isPaused) {\n this._startAutoPlay();\n } else {\n this._stopAutoPlay();\n this._isPaused = true;\n }\n }\n\n handleNavItemClick(e: MouseEvent) {\n const btn = (e.target as HTMLElement).closest<HTMLElement>(\"[data-index]\");\n if (!btn) {\n return;\n }\n const index = Number.parseInt(btn.dataset.index!);\n this._selectItem(index);\n }\n\n private _selectItem(index: number) {\n if (index === this._selectedIndex) {\n return;\n }\n\n this._selectedIndex = index;\n this.items.forEach((item, i) => { item.selected = i === index; });\n const item = this.items[index];\n this.fireDecoratorEvent(\"item-click\", { item });\n }\n\n get playBtnIcon(): string {\n return this._isPaused ? \"play\" : \"pause\";\n }\n\n get showFooterSlot(): boolean {\n return this.footer?.length > 0;\n }\n\n get isStaticMedia(): boolean {\n return this.mediaMode === UDExAccordionSpotlightMediaMode.Static;\n }\n\n get showMediaSlot(): boolean {\n return this.isStaticMedia && this.media?.length > 0;\n }\n}\n\nUDExAccordionSpotlight.define();\n\nexport default UDExAccordionSpotlight;\n"]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
2
|
+
import type { DefaultSlot, Slot } from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
3
|
+
/**
|
|
4
|
+
* @class
|
|
5
|
+
*
|
|
6
|
+
* <h3 class="comment-api-title">Overview</h3>
|
|
7
|
+
*
|
|
8
|
+
* A single item within the <code>udex-accordion-spotlight</code> component.
|
|
9
|
+
* Provides a heading button (<code>aria-expanded</code>) and an associated
|
|
10
|
+
* content region (<code>role="region"</code>).
|
|
11
|
+
*
|
|
12
|
+
* <h3>Usage</h3>
|
|
13
|
+
*
|
|
14
|
+
* For the <code>udex-accordion-spotlight-item</code>
|
|
15
|
+
* <h3>ES6 Module Import</h3>
|
|
16
|
+
*
|
|
17
|
+
* <code>import "@sapudex/web-components/dist/AccordionSpotlightItem.js";</code>
|
|
18
|
+
*
|
|
19
|
+
* @constructor
|
|
20
|
+
* @extends UI5Element
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
declare class UDExAccordionSpotlightItem extends UI5Element {
|
|
24
|
+
/**
|
|
25
|
+
* The label text shown in the heading button.
|
|
26
|
+
*
|
|
27
|
+
* @default ""
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
heading: string;
|
|
31
|
+
/**
|
|
32
|
+
* Optional descriptive subtext visible when the item is expanded.
|
|
33
|
+
*
|
|
34
|
+
* @default ""
|
|
35
|
+
* @public
|
|
36
|
+
*/
|
|
37
|
+
subheading: string;
|
|
38
|
+
/**
|
|
39
|
+
* Whether this item is currently expanded.
|
|
40
|
+
* Set on the element directly to control the initial selection.
|
|
41
|
+
*
|
|
42
|
+
* @default false
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
selected: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the parent is in mobile layout mode (managed by the parent component).
|
|
48
|
+
*
|
|
49
|
+
* @default false
|
|
50
|
+
* @private
|
|
51
|
+
*/
|
|
52
|
+
_isMobile: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Zero-based index within the parent (managed by the parent component).
|
|
55
|
+
*
|
|
56
|
+
* @private
|
|
57
|
+
*/
|
|
58
|
+
_index: number;
|
|
59
|
+
/**
|
|
60
|
+
* The slotted content for this item's panel.
|
|
61
|
+
*
|
|
62
|
+
* @public
|
|
63
|
+
*/
|
|
64
|
+
content: DefaultSlot<Node>;
|
|
65
|
+
/**
|
|
66
|
+
* Defines the link(s) to be displayed in the tab header (vertical orientation only).
|
|
67
|
+
* Use this slot to add one or more udex-link elements to the tab button.
|
|
68
|
+
*
|
|
69
|
+
* @slot link
|
|
70
|
+
* @public
|
|
71
|
+
*/
|
|
72
|
+
link: Slot<HTMLElement>;
|
|
73
|
+
get hasLinkSlot(): boolean;
|
|
74
|
+
get linkSlotHtml(): string;
|
|
75
|
+
}
|
|
76
|
+
export default UDExAccordionSpotlightItem;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js";
|
|
8
|
+
import slot from "@ui5/webcomponents-base/dist/decorators/slot-strict.js";
|
|
9
|
+
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
10
|
+
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
11
|
+
import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
|
|
12
|
+
import AccordionSpotlightItemTemplate from "./AccordionSpotlightItemTemplate.js";
|
|
13
|
+
// Styles
|
|
14
|
+
import AccordionSpotlightItemCss from "./generated/themes/AccordionSpotlightItem.css.js";
|
|
15
|
+
/**
|
|
16
|
+
* @class
|
|
17
|
+
*
|
|
18
|
+
* <h3 class="comment-api-title">Overview</h3>
|
|
19
|
+
*
|
|
20
|
+
* A single item within the <code>udex-accordion-spotlight</code> component.
|
|
21
|
+
* Provides a heading button (<code>aria-expanded</code>) and an associated
|
|
22
|
+
* content region (<code>role="region"</code>).
|
|
23
|
+
*
|
|
24
|
+
* <h3>Usage</h3>
|
|
25
|
+
*
|
|
26
|
+
* For the <code>udex-accordion-spotlight-item</code>
|
|
27
|
+
* <h3>ES6 Module Import</h3>
|
|
28
|
+
*
|
|
29
|
+
* <code>import "@sapudex/web-components/dist/AccordionSpotlightItem.js";</code>
|
|
30
|
+
*
|
|
31
|
+
* @constructor
|
|
32
|
+
* @extends UI5Element
|
|
33
|
+
* @public
|
|
34
|
+
*/
|
|
35
|
+
let UDExAccordionSpotlightItem = class UDExAccordionSpotlightItem extends UI5Element {
|
|
36
|
+
constructor() {
|
|
37
|
+
super(...arguments);
|
|
38
|
+
/**
|
|
39
|
+
* The label text shown in the heading button.
|
|
40
|
+
*
|
|
41
|
+
* @default ""
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
44
|
+
this.heading = "";
|
|
45
|
+
/**
|
|
46
|
+
* Optional descriptive subtext visible when the item is expanded.
|
|
47
|
+
*
|
|
48
|
+
* @default ""
|
|
49
|
+
* @public
|
|
50
|
+
*/
|
|
51
|
+
this.subheading = "";
|
|
52
|
+
/**
|
|
53
|
+
* Whether this item is currently expanded.
|
|
54
|
+
* Set on the element directly to control the initial selection.
|
|
55
|
+
*
|
|
56
|
+
* @default false
|
|
57
|
+
* @public
|
|
58
|
+
*/
|
|
59
|
+
this.selected = false;
|
|
60
|
+
/**
|
|
61
|
+
* Whether the parent is in mobile layout mode (managed by the parent component).
|
|
62
|
+
*
|
|
63
|
+
* @default false
|
|
64
|
+
* @private
|
|
65
|
+
*/
|
|
66
|
+
this._isMobile = false;
|
|
67
|
+
/**
|
|
68
|
+
* Zero-based index within the parent (managed by the parent component).
|
|
69
|
+
*
|
|
70
|
+
* @private
|
|
71
|
+
*/
|
|
72
|
+
this._index = 0;
|
|
73
|
+
}
|
|
74
|
+
get hasLinkSlot() {
|
|
75
|
+
return this.link && this.link.length > 0;
|
|
76
|
+
}
|
|
77
|
+
get linkSlotHtml() {
|
|
78
|
+
if (!this.link || this.link.length === 0) {
|
|
79
|
+
return "";
|
|
80
|
+
}
|
|
81
|
+
return this.link.map(l => l.outerHTML).join("");
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
__decorate([
|
|
85
|
+
property()
|
|
86
|
+
], UDExAccordionSpotlightItem.prototype, "heading", void 0);
|
|
87
|
+
__decorate([
|
|
88
|
+
property()
|
|
89
|
+
], UDExAccordionSpotlightItem.prototype, "subheading", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
property({ type: Boolean })
|
|
92
|
+
], UDExAccordionSpotlightItem.prototype, "selected", void 0);
|
|
93
|
+
__decorate([
|
|
94
|
+
property({ type: Boolean, noAttribute: true })
|
|
95
|
+
], UDExAccordionSpotlightItem.prototype, "_isMobile", void 0);
|
|
96
|
+
__decorate([
|
|
97
|
+
property({ type: Number, noAttribute: true })
|
|
98
|
+
], UDExAccordionSpotlightItem.prototype, "_index", void 0);
|
|
99
|
+
__decorate([
|
|
100
|
+
slot({ type: Node, "default": true })
|
|
101
|
+
], UDExAccordionSpotlightItem.prototype, "content", void 0);
|
|
102
|
+
__decorate([
|
|
103
|
+
slot({ type: HTMLElement })
|
|
104
|
+
], UDExAccordionSpotlightItem.prototype, "link", void 0);
|
|
105
|
+
UDExAccordionSpotlightItem = __decorate([
|
|
106
|
+
customElement({
|
|
107
|
+
tag: "udex-accordion-spotlight-item",
|
|
108
|
+
renderer: jsxRenderer,
|
|
109
|
+
styles: AccordionSpotlightItemCss,
|
|
110
|
+
template: AccordionSpotlightItemTemplate,
|
|
111
|
+
})
|
|
112
|
+
], UDExAccordionSpotlightItem);
|
|
113
|
+
UDExAccordionSpotlightItem.define();
|
|
114
|
+
export default UDExAccordionSpotlightItem;
|
|
115
|
+
//# sourceMappingURL=AccordionSpotlightItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionSpotlightItem.js","sourceRoot":"","sources":["../src/AccordionSpotlightItem.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,UAAU,MAAM,4CAA4C,CAAC;AAEpE,OAAO,IAAI,MAAM,wDAAwD,CAAC;AAC1E,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAE/E,OAAO,8BAA8B,MAAM,qCAAqC,CAAC;AAEjF,SAAS;AACT,OAAO,yBAAyB,MAAM,kDAAkD,CAAC;AAEzF;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,UAAU;IAAnD;;QACE;;;;;WAKG;QAED,YAAO,GAAW,EAAE,CAAC;QAEvB;;;;;WAKG;QAED,eAAU,GAAW,EAAE,CAAC;QAE1B;;;;;;WAMG;QAED,aAAQ,GAAY,KAAK,CAAC;QAE5B;;;;;WAKG;QAED,cAAS,GAAY,KAAK,CAAC;QAE7B;;;;WAIG;QAED,WAAM,GAAW,CAAC,CAAC;IA8BvB,CAAC;IAVC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,YAAY;QACd,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClD,CAAC;CACF,CAAA;AAlEG;IADD,QAAQ,EAAE;2DACY;AASrB;IADD,QAAQ,EAAE;8DACe;AAUxB;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;4DACA;AAS1B;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;6DAClB;AAQ3B;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;0DACzB;AAQnB;IADD,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;2DACR;AAU5B;IADD,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;wDACD;AA9DvB,0BAA0B;IAN/B,aAAa,CAAC;QACb,GAAG,EAAE,+BAA+B;QACpC,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,yBAAyB;QACjC,QAAQ,EAAE,8BAA8B;KACzC,CAAC;GACI,0BAA0B,CA0E/B;AAED,0BAA0B,CAAC,MAAM,EAAE,CAAC;AAEpC,eAAe,0BAA0B,CAAC","sourcesContent":["import UI5Element from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport type { DefaultSlot, Slot } from \"@ui5/webcomponents-base/dist/UI5Element.js\";\nimport slot from \"@ui5/webcomponents-base/dist/decorators/slot-strict.js\";\nimport customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\n\nimport AccordionSpotlightItemTemplate from \"./AccordionSpotlightItemTemplate.js\";\n\n// Styles\nimport AccordionSpotlightItemCss from \"./generated/themes/AccordionSpotlightItem.css.js\";\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n * A single item within the <code>udex-accordion-spotlight</code> component.\n * Provides a heading button (<code>aria-expanded</code>) and an associated\n * content region (<code>role=\"region\"</code>).\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-accordion-spotlight-item</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/AccordionSpotlightItem.js\";</code>\n *\n * @constructor\n * @extends UI5Element\n * @public\n */\n@customElement({\n tag: \"udex-accordion-spotlight-item\",\n renderer: jsxRenderer,\n styles: AccordionSpotlightItemCss,\n template: AccordionSpotlightItemTemplate,\n})\nclass UDExAccordionSpotlightItem extends UI5Element {\n /**\n * The label text shown in the heading button.\n *\n * @default \"\"\n * @public\n */\n @property()\n heading: string = \"\";\n\n /**\n * Optional descriptive subtext visible when the item is expanded.\n *\n * @default \"\"\n * @public\n */\n @property()\n subheading: string = \"\";\n\n /**\n * Whether this item is currently expanded.\n * Set on the element directly to control the initial selection.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n selected: boolean = false;\n\n /**\n * Whether the parent is in mobile layout mode (managed by the parent component).\n *\n * @default false\n * @private\n */\n @property({ type: Boolean, noAttribute: true })\n _isMobile: boolean = false;\n\n /**\n * Zero-based index within the parent (managed by the parent component).\n *\n * @private\n */\n @property({ type: Number, noAttribute: true })\n _index: number = 0;\n\n /**\n * The slotted content for this item's panel.\n *\n * @public\n */\n @slot({ type: Node, \"default\": true })\n content!: DefaultSlot<Node>;\n\n /**\n * Defines the link(s) to be displayed in the tab header (vertical orientation only).\n * Use this slot to add one or more udex-link elements to the tab button.\n *\n * @slot link\n * @public\n */\n @slot({ type: HTMLElement })\n link!: Slot<HTMLElement>;\n\n get hasLinkSlot(): boolean {\n return this.link && this.link.length > 0;\n }\n\n get linkSlotHtml(): string {\n if (!this.link || this.link.length === 0) {\n return \"\";\n }\n return this.link.map(l => l.outerHTML).join(\"\");\n }\n}\n\nUDExAccordionSpotlightItem.define();\n\nexport default UDExAccordionSpotlightItem;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionSpotlightItemTemplate.js","sourceRoot":"","sources":["../src/AccordionSpotlightItemTemplate.tsx"],"names":[],"mappings":";AAEA,MAAM,CAAC,OAAO,UAAU,8BAA8B;IACpD,OAAO,CACL,gBAAa,CACd,CAAC;AACJ,CAAC","sourcesContent":["import type AccordionSpotlightItem from \"./AccordionSpotlightItem.js\";\n\nexport default function AccordionSpotlightItemTemplate(this: AccordionSpotlightItem) {\n return (\n <slot></slot>\n );\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@ui5/webcomponents-base/jsx-runtime";
|
|
2
|
+
import UDExButton from "./Button.js";
|
|
3
|
+
import UDExButtonSize from "./types/ButtonSize.js";
|
|
4
|
+
import UDExButtonDesign from "./types/ButtonDesign.js";
|
|
5
|
+
export default function AccordionSpotlightTemplate() {
|
|
6
|
+
const rootClass = "udex-accordion-spotlight";
|
|
7
|
+
return (_jsxs("div", { class: `${rootClass}`, children: [_jsxs("div", { class: `${rootClass}__nav`, children: [this.autoPlay && (_jsx(UDExButton, { class: `${rootClass}__play-button`, design: UDExButtonDesign.Tertiary, size: UDExButtonSize.Large, icon: this.playBtnIcon, onClick: this.onPlayButtonClick.bind(this) })), _jsx("div", { class: `${rootClass}__nav-holder`, children: this.items.map((item, index) => (_jsxs(_Fragment, { children: [_jsxs("div", { class: `${rootClass}__nav-item`, children: [_jsx("button", { id: item._id, class: `${rootClass}-item__button ${item.selected ? ` ${rootClass}-item__button--active` : ""}`, type: "button", "aria-expanded": item.selected, "aria-controls": `${item._id}-controls`, "data-index": String(index), onClick: this.handleNavItemClick.bind(this), children: item.heading }), (!!item.subheading || item.hasLinkSlot) && (_jsx("div", { class: `${rootClass}-item__expand${item.selected ? ` ${rootClass}-item__expand--open` : ""}`, "aria-hidden": item.selected ? undefined : "true", inert: !item.selected, children: _jsxs("div", { class: `${rootClass}-item__expand-inner`, children: [!!item.subheading && (_jsx("span", { class: `${rootClass}-item__subheading`, children: item.subheading })), item.hasLinkSlot &&
|
|
8
|
+
_jsx("div", { class: `${rootClass}-item__links`, dangerouslySetInnerHTML: { __html: item.linkSlotHtml } })] }) }))] }), this._isMobile && !this.isStaticMedia && (_jsx("div", { id: `${item._id}-controls`, class: `${rootClass}__panel${item.selected ? ` ${rootClass}__panel--open` : ""}`, role: "region", "aria-labelledby": item._id, "aria-hidden": item.selected ? undefined : "true", inert: !item.selected, children: _jsx("div", { class: `${rootClass}__panel-inner`, children: _jsx("slot", { name: item._individualSlot }) }) }))] }))) }), this.showFooterSlot && (_jsx("div", { class: `${rootClass}__footer`, children: _jsx("slot", { name: "footer" }) }))] }), this.showMediaSlot && (_jsx("div", { class: `${rootClass}__media`, children: _jsx("slot", { name: "media" }) })), !this._isMobile && !this.isStaticMedia && (_jsx("div", { class: `${rootClass}__content`, children: this.items.map(item => (_jsx("div", { id: `${item._id}-controls`, class: `${rootClass}__panel${item.selected ? ` ${rootClass}__panel--open` : ""}`, role: "region", "aria-labelledby": item._id, "aria-hidden": item.selected ? undefined : "true", inert: !item.selected, children: _jsx("div", { class: `${rootClass}__panel-inner`, children: _jsx("slot", { name: item._individualSlot }) }) }, item.__id))) }))] }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=AccordionSpotlightTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AccordionSpotlightTemplate.js","sourceRoot":"","sources":["../src/AccordionSpotlightTemplate.tsx"],"names":[],"mappings":";AACA,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,gBAAgB,MAAM,yBAAyB,CAAC;AAEvD,MAAM,CAAC,OAAO,UAAU,0BAA0B;IAChD,MAAM,SAAS,GAAG,0BAA0B,CAAC;IAE7C,OAAO,CACL,eAAK,KAAK,EAAE,GAAG,SAAS,EAAE,aACxB,eACE,KAAK,EAAE,GAAG,SAAS,OAAO,aACzB,IAAI,CAAC,QAAQ,IAAI,CAChB,KAAC,UAAU,IACT,KAAK,EAAE,GAAG,SAAS,eAAe,EAClC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,EACjC,IAAI,EAAE,cAAc,CAAC,KAAK,EAC1B,IAAI,EAAE,IAAI,CAAC,WAAW,EACtB,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,GAC1C,CACH,EAED,cAAK,KAAK,EAAE,GAAG,SAAS,cAAc,YACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAC/B,8BACE,eAAK,KAAK,EAAE,GAAG,SAAS,YAAY,aAClC,iBACE,EAAE,EAAE,IAAI,CAAC,GAAG,EACZ,KAAK,EAAE,GAAG,SAAS,iBAAiB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,EAAE,EAC/F,IAAI,EAAC,QAAQ,mBACE,IAAI,CAAC,QAAQ,mBACb,GAAG,IAAI,CAAC,GAAG,WAAW,gBACzB,MAAM,CAAC,KAAK,CAAC,EACzB,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,YAC1C,IAAI,CAAC,OAAO,GACN,EAER,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1C,cACE,KAAK,EAAE,GAAG,SAAS,gBAAgB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,qBAAqB,CAAC,CAAC,CAAC,EAAE,EAAE,iBAC/E,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAC/C,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,YACrB,eAAK,KAAK,EAAE,GAAG,SAAS,qBAAqB,aAC1C,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CACpB,eAAM,KAAK,EAAE,GAAG,SAAS,mBAAmB,YACzC,IAAI,CAAC,UAAU,GACX,CACR,EACA,IAAI,CAAC,WAAW;wDACf,cACE,KAAK,EAAE,GAAG,SAAS,cAAc,EACjC,uBAAuB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,GAClD,IAEJ,GACF,CACP,IACG,EAEL,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CACxC,cACE,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,EAC1B,KAAK,EAAE,GAAG,SAAS,UAAU,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,EAChF,IAAI,EAAC,QAAQ,qBACI,IAAI,CAAC,GAAG,iBACZ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAC/C,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,YACrB,cAAK,KAAK,EAAE,GAAG,SAAS,eAAe,YACrC,eAAM,IAAI,EAAE,IAAI,CAAC,eAAe,GAAS,GACrC,GACF,CACP,IACA,CACJ,CAAC,GACE,EACL,IAAI,CAAC,cAAc,IAAI,CACtB,cAAK,KAAK,EAAE,GAAG,SAAS,UAAU,YAAE,eAAM,IAAI,EAAC,QAAQ,GAAQ,GAAM,CACtE,IACG,EAEL,IAAI,CAAC,aAAa,IAAI,CACrB,cAAK,KAAK,EAAE,GAAG,SAAS,SAAS,YAC/B,eAAM,IAAI,EAAC,OAAO,GAAQ,GACtB,CACP,EAEA,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CACzC,cAAK,KAAK,EAAE,GAAG,SAAS,WAAW,YAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACtB,cAEE,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,EAC1B,KAAK,EAAE,GAAG,SAAS,UAAU,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,EAChF,IAAI,EAAC,QAAQ,qBACI,IAAI,CAAC,GAAG,iBACZ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAC/C,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,YACrB,cAAK,KAAK,EAAE,GAAG,SAAS,eAAe,YACrC,eAAM,IAAI,EAAE,IAAI,CAAC,eAAe,GAAS,GACrC,IATD,IAAI,CAAC,IAAI,CAUV,CACP,CAAC,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC","sourcesContent":["import type AccordionSpotlight from \"./AccordionSpotlight.js\";\nimport UDExButton from \"./Button.js\";\nimport UDExButtonSize from \"./types/ButtonSize.js\";\nimport UDExButtonDesign from \"./types/ButtonDesign.js\";\n\nexport default function AccordionSpotlightTemplate(this: AccordionSpotlight) {\n const rootClass = \"udex-accordion-spotlight\";\n\n return (\n <div class={`${rootClass}`}>\n <div\n class={`${rootClass}__nav`}>\n {this.autoPlay && (\n <UDExButton\n class={`${rootClass}__play-button`}\n design={UDExButtonDesign.Tertiary}\n size={UDExButtonSize.Large}\n icon={this.playBtnIcon}\n onClick={this.onPlayButtonClick.bind(this)}\n />\n )}\n\n <div class={`${rootClass}__nav-holder`}>\n {this.items.map((item, index) => (\n <>\n <div class={`${rootClass}__nav-item`}>\n <button\n id={item._id}\n class={`${rootClass}-item__button ${item.selected ? ` ${rootClass}-item__button--active` : \"\"}`}\n type=\"button\"\n aria-expanded={item.selected}\n aria-controls={`${item._id}-controls`}\n data-index={String(index)}\n onClick={this.handleNavItemClick.bind(this)}>\n {item.heading}\n </button>\n\n {(!!item.subheading || item.hasLinkSlot) && (\n <div\n class={`${rootClass}-item__expand${item.selected ? ` ${rootClass}-item__expand--open` : \"\"}`}\n aria-hidden={item.selected ? undefined : \"true\"}\n inert={!item.selected}>\n <div class={`${rootClass}-item__expand-inner`}>\n {!!item.subheading && (\n <span class={`${rootClass}-item__subheading`}>\n {item.subheading}\n </span>\n )}\n {item.hasLinkSlot &&\n <div\n class={`${rootClass}-item__links`}\n dangerouslySetInnerHTML={{ __html: item.linkSlotHtml }}>\n </div>\n }\n </div>\n </div>\n )}\n </div>\n\n {this._isMobile && !this.isStaticMedia && (\n <div\n id={`${item._id}-controls`}\n class={`${rootClass}__panel${item.selected ? ` ${rootClass}__panel--open` : \"\"}`}\n role=\"region\"\n aria-labelledby={item._id}\n aria-hidden={item.selected ? undefined : \"true\"}\n inert={!item.selected}>\n <div class={`${rootClass}__panel-inner`}>\n <slot name={item._individualSlot}></slot>\n </div>\n </div>\n )}\n </>\n ))}\n </div>\n {this.showFooterSlot && (\n <div class={`${rootClass}__footer`}><slot name=\"footer\"></slot></div>\n )}\n </div>\n\n {this.showMediaSlot && (\n <div class={`${rootClass}__media`}>\n <slot name=\"media\"></slot>\n </div>\n )}\n\n {!this._isMobile && !this.isStaticMedia && (\n <div class={`${rootClass}__content`}>\n {this.items.map(item => (\n <div\n key={item.__id}\n id={`${item._id}-controls`}\n class={`${rootClass}__panel${item.selected ? ` ${rootClass}__panel--open` : \"\"}`}\n role=\"region\"\n aria-labelledby={item._id}\n aria-hidden={item.selected ? undefined : \"true\"}\n inert={!item.selected}>\n <div class={`${rootClass}__panel-inner`}>\n <slot name={item._individualSlot}></slot>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
|
package/dist/BusyIndicator.d.ts
CHANGED
|
@@ -18,5 +18,14 @@ import BusyIndicator from "@ui5/webcomponents/dist/BusyIndicator.js";
|
|
|
18
18
|
* @public
|
|
19
19
|
*/
|
|
20
20
|
declare class UDExBusyIndicator extends BusyIndicator {
|
|
21
|
+
/**
|
|
22
|
+
* Renders the busy indicator inside a surface container — a semi-transparent backdrop
|
|
23
|
+
* with a white rounded card holding the indicator dots. Use this when the indicator
|
|
24
|
+
* overlays content where the dots alone would not meet accessibility contrast requirements.
|
|
25
|
+
*
|
|
26
|
+
* @default false
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
surfaceContainer: boolean;
|
|
21
30
|
}
|
|
22
31
|
export default UDExBusyIndicator;
|
package/dist/BusyIndicator.js
CHANGED
|
@@ -5,8 +5,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import customElement from "@ui5/webcomponents-base/dist/decorators/customElement.js";
|
|
8
|
+
import property from "@ui5/webcomponents-base/dist/decorators/property.js";
|
|
8
9
|
import BusyIndicator from "@ui5/webcomponents/dist/BusyIndicator.js";
|
|
9
10
|
import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
|
|
11
|
+
// Styles
|
|
12
|
+
import BusyIndicatorCss from "./generated/themes/BusyIndicator.css.js";
|
|
10
13
|
/**
|
|
11
14
|
* @class
|
|
12
15
|
*
|
|
@@ -27,11 +30,14 @@ import jsxRenderer from "@ui5/webcomponents-base/dist/renderer/JsxRenderer.js";
|
|
|
27
30
|
*/
|
|
28
31
|
let UDExBusyIndicator = class UDExBusyIndicator extends BusyIndicator {
|
|
29
32
|
};
|
|
33
|
+
__decorate([
|
|
34
|
+
property({ type: Boolean })
|
|
35
|
+
], UDExBusyIndicator.prototype, "surfaceContainer", void 0);
|
|
30
36
|
UDExBusyIndicator = __decorate([
|
|
31
37
|
customElement({
|
|
32
38
|
tag: "udex-busy-indicator",
|
|
33
39
|
renderer: jsxRenderer,
|
|
34
|
-
styles: [BusyIndicator.styles],
|
|
40
|
+
styles: [BusyIndicator.styles, BusyIndicatorCss],
|
|
35
41
|
})
|
|
36
42
|
], UDExBusyIndicator);
|
|
37
43
|
UDExBusyIndicator.define();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BusyIndicator.js","sourceRoot":"","sources":["../src/BusyIndicator.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAE/E;;;;;;;;;;;;;;;;;GAiBG;AAOH,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;
|
|
1
|
+
{"version":3,"file":"BusyIndicator.js","sourceRoot":"","sources":["../src/BusyIndicator.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,aAAa,MAAM,0DAA0D,CAAC;AACrF,OAAO,QAAQ,MAAM,qDAAqD,CAAC;AAC3E,OAAO,aAAa,MAAM,0CAA0C,CAAC;AACrE,OAAO,WAAW,MAAM,sDAAsD,CAAC;AAE/E,SAAS;AACT,OAAO,gBAAgB,MAAM,yCAAyC,CAAC;AAEvE;;;;;;;;;;;;;;;;;GAiBG;AAOH,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,aAAa;CAW5C,CAAA;AADG;IADD,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;2DACC;AAVzB,iBAAiB;IANtB,aAAa,CAAC;QACb,GAAG,EAAE,qBAAqB;QAC1B,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,gBAAgB,CAAC;KACjD,CAAC;GAEI,iBAAiB,CAWtB;AAED,iBAAiB,CAAC,MAAM,EAAE,CAAC;AAE3B,eAAe,iBAAiB,CAAC","sourcesContent":["import customElement from \"@ui5/webcomponents-base/dist/decorators/customElement.js\";\nimport property from \"@ui5/webcomponents-base/dist/decorators/property.js\";\nimport BusyIndicator from \"@ui5/webcomponents/dist/BusyIndicator.js\";\nimport jsxRenderer from \"@ui5/webcomponents-base/dist/renderer/JsxRenderer.js\";\n\n// Styles\nimport BusyIndicatorCss from \"./generated/themes/BusyIndicator.css.js\";\n\n/**\n * @class\n *\n * <h3 class=\"comment-api-title\">Overview</h3>\n *\n *\n * <h3>Usage</h3>\n *\n * For the <code>udex-busy-indicator</code>\n * <h3>ES6 Module Import</h3>\n *\n * <code>import \"@sapudex/web-components/dist/BusyIndicator.js\";</code>\n *\n * @constructor\n * @extends BusyIndicator\n * @tagname udex-busy-indicator\n * @public\n */\n@customElement({\n tag: \"udex-busy-indicator\",\n renderer: jsxRenderer,\n styles: [BusyIndicator.styles, BusyIndicatorCss],\n})\n\nclass UDExBusyIndicator extends BusyIndicator {\n /**\n * Renders the busy indicator inside a surface container — a semi-transparent backdrop\n * with a white rounded card holding the indicator dots. Use this when the indicator\n * overlays content where the dots alone would not meet accessibility contrast requirements.\n *\n * @default false\n * @public\n */\n @property({ type: Boolean })\n surfaceContainer!: boolean;\n}\n\nUDExBusyIndicator.define();\n\nexport default UDExBusyIndicator;\n"]}
|