@telekom/scale-components
Version:
Scale is the digital design system for Telekom products and experiences.
477 lines (459 loc) • 39.8 kB
JavaScript
import { r as registerInstance, h, g as getElement, c as createEvent, a as Host } from './index-6d95a4bc.js';
import { s as statusNote } from './status-note-0089e9c9.js';
import { f as findSelected, a as findRootNode } from './menu-utils-ee192675.js';
import { r as renderIcon } from './render-icon-05777d0c.js';
import { c as classnames } from './index-713f92a5.js';
const appMegaMenuCss = "app-mega-menu{--box-shadow:var(--telekom-shadow-top);--spacing-y:2.125rem;--spacing-right:var(--telekom-spacing-composition-space-06);--spacing-left:var(--telekom-spacing-composition-space-08);--background:var(--telekom-color-background-surface);--color-selected:var(--telekom-color-text-and-icon-primary-standard);--color-hover:var(--telekom-color-text-and-icon-primary-hovered);--font-size-row-title:var(--telekom-typography-font-size-body);--spacing-bottom-row-title:1.125rem;--font-weight-row-title:var(--telekom-typography-font-weight-extra-bold);--color-row-title:var(--telekom-color-text-and-icon-standard);--font-size-row-item:var(--telekom-typography-font-size-body);--line-height-row-item:var(--telekom-typography-line-spacing-loose);--font-weight-row-item:var(--telekom-typography-font-weight-medium);--color-row-item:var(--telekom-color-text-and-icon-standard);--spacing-bottom-row-item:var(--telekom-spacing-composition-space-04)}.mega-menu{width:100%;position:absolute;top:calc(var(--header-brand-height) * -1);left:0;border-radius:0 0 var(--header-border-radius) var(--header-border-radius);padding-top:calc(var(--header-nav-height) + var(--header-brand-height));display:none;pointer-events:none;transition:none;box-shadow:var(--box-shadow)}.mega-menu__wrapper{padding:var(--spacing-y) var(--spacing-right) var(--spacing-y)\n var(--spacing-left);background:var(--background);pointer-events:none;border-radius:var(--header-border-radius)}.mega-menu__container{max-width:1168px;margin:0 auto;display:grid;grid-template-columns:repeat(5, minmax(min-content, 240px));list-style:none;padding-left:var(--telekom-spacing-composition-space-10)}.mega-menu__row-title{cursor:default;font-size:var(--font-size-row-title);margin-bottom:var(--spacing-bottom-row-title);font-weight:var(--font-weight-row-title);color:var(--color-row-title)}.mega-menu__row-item{font-size:var(--font-size-row-item);line-height:var(--line-height-row-item);font-weight:var(--font-weight-row-item);color:var(--color-row-item);margin-bottom:var(--spacing-bottom-row-item);text-decoration:none;transition:color, border 0.15s ease-in-out;display:block;margin-bottom:7px}.mega-menu__row-item:hover,.mega-menu__row-item:hover span{color:var(--color-hover)}.mega-menu__row-item.active span{padding-bottom:2px;margin-bottom:-2px;display:inline-block;border-bottom:1px solid var(--color-selected)}.mega-menu__row-item.active{color:var(--color-selected)}.mega-menu__row-item.active:hover{color:var(--color-hover)}.mega-menu__row-item.active:hover span{color:var(--color-hover);border-bottom:1px solid var(--color-hover)}.mega-menu__row li{list-style:none}.mega-menu__row ul{padding-inline-start:0}@media screen and (forced-colors: active), (-ms-high-contrast: active){.mega-menu{border:1px solid hsl(0, 0%, 100%)}}";
const MegaMenu = class {
constructor(hostRef) {
registerInstance(this, hostRef);
this.navigation = [];
}
componentWillLoad() {
this.hasCustomBody = !!this.hostElement.querySelector('[slot="custom-body"]');
}
componentWillRender() {
// make sure the deprecated props overwrite the actual ones if used
// and show status note deprecated
if (this.isActive !== undefined) {
statusNote({
tag: 'deprecated',
message: 'Property "isActive" is deprecated. Please use the "active" property!',
type: 'warn',
source: this.hostElement,
});
}
}
render() {
return (h("div", { class: "mega-menu" }, h("div", { class: "mega-menu__wrapper" }, this.hasCustomBody ? (h("slot", { name: "custom-body" })) : (h("ul", { class: "mega-menu__container" }, this.navigation.map((child) => (h("li", { class: "mega-menu__row" }, h("div", { class: "mega-menu__row-title" }, child.name), h("ul", null, child.children &&
child.children.length > 0 &&
child.children.map((menuItem) => (h("li", null, h("a", { class: `mega-menu__row-item ${this.activeRouteId === menuItem.id ? 'active' : ''}`, "aria-current": this.activeRouteId === menuItem.id
? 'true'
: 'false', href: menuItem.href || 'javascript:void(0);', tabIndex: this.active || this.isActive ? 0 : -1, onClick: (event) => {
this.hide();
if (typeof menuItem.onClick === 'function') {
menuItem.onClick(event);
}
}, onKeyDown: (event) => {
if (['Escape', 'Esc'].includes(event.key)) {
this.hide();
}
} }, h("span", null, menuItem.name), this.activeRouteId === menuItem.id && (h("span", { class: "sr-only" }, "active")))))))))))))));
}
get hostElement() { return getElement(this); }
};
MegaMenu.style = appMegaMenuCss;
const appNavigationMainMobileCss = "app-navigation-main-mobile{--min-height:calc(100vh - 56px - 56px);--font-size:var(--telekom-typography-font-size-headline-3);--font-weight:var(--telekom-typography-font-weight-extra-bold);--line-height:3.333;--border-bottom:1px solid var(--telekom-color-ui-faint);--color:var(--telekom-color-text-and-icon-standard);--color-selected:var(--telekom-color-text-and-icon-primary-standard);--font-size-child:var(--telekom-typography-font-size-headline-3);--line-height-child:2.5;--font-weight-child:var(--telekom-typography-font-weight-regular);--transition:all var(--telekom-motion-duration-transition)\n var(--telekom-motion-easing-standard);width:100%}.main-navigation-mobile{width:100%;position:relative}.main-navigation-mobile__main-menu{width:100%;list-style:none;padding:0;margin:0;min-height:var(--min-height)}.main-navigation-mobile__item{font-size:var(--font-size);font-weight:var(--font-weight);line-height:var(--line-height)}.main-navigation-mobile__item--selected{border-right:2px solid var(--color-selected)}.main-navigation-mobile__item-link{text-decoration:none;color:var(--color);transition:var(--transition)}.main-navigation-mobile__item-link--selected{color:var(--color-selected);transition:var(--transition)}.main-navigation-mobile__item-link--selected svg{margin-right:-2px}.main-navigation-mobile__item-wrapper{box-sizing:border-box;width:calc(100% - 34px);display:flex;justify-content:space-between;margin-left:34px;border-bottom:var(--border-bottom);padding-right:34px;align-items:center}.main-navigation-mobile__child-menu{position:absolute;top:0;left:0;background:var(--telekom-color-background-surface);width:100%;min-height:var(--min-height)}.main-navigation-mobile__child-menu-current-item{line-height:var(--line-height)}.main-navigation-mobile__child-menu-current-item svg{margin-right:6px;margin-top:-4px}.main-navigation-mobile__child-menu-current{font-size:var(--telekom-typography-font-size-headline-3);font-weight:var(--telekom-typography-font-weight-extra-bold);color:var(--color-selected);text-decoration:none}.main-navigation-mobile__child-menu-current-wrapper{width:calc(100% - 34px);display:flex;align-items:center;border-bottom:var(--border-bottom);margin-left:34px}.main-navigation-mobile__child-menu-current app-icon{margin-right:var(--telekom-spacing-composition-space-04)}.main-navigation-mobile__child-menu-current .icon-back{fill:var(--color-selected)}.main-navigation-mobile__child-menu-items{list-style:none;margin:0;padding:0}.main-navigation-mobile__child-menu-item-link{text-decoration:none;color:var(--color)}.main-navigation-mobile__child-menu-item-link.selected{color:var(--color-selected)}.main-navigation-mobile__child-menu-item-link.selected .main-navigation-mobile__child-menu-item-wrapper{border-right:2px solid var(--color-selected)}.main-navigation-mobile__child-menu-item-link.selected svg{margin-right:38px}.main-navigation-mobile__child-menu-item{font-size:var(--font-size-child);line-height:var(--line-height-child);font-weight:var(--font-weight-child)}.main-navigation-mobile__child-menu-item-wrapper{width:calc(100% - 64px);display:flex;justify-content:space-between;align-items:center;border-bottom:var(--border-bottom);margin-left:var(--telekom-spacing-composition-space-17);box-sizing:border-box}.main-navigation-mobile__child-menu-item-wrapper svg{margin-right:var(--telekom-spacing-composition-space-12)}";
const hasChildren = (item) => Array.isArray(item.children) && item.children.length > 0;
const MainNavigationMobile = class {
constructor(hostRef) {
registerInstance(this, hostRef);
this.closeMenu = createEvent(this, "closeMenu", 7);
this.selected = undefined;
this.parent = undefined;
}
handleActiveRoute(newValue) {
this.selected = findSelected(this.navigation, newValue, null).selected;
this.parent = findSelected(this.navigation, newValue).parent;
}
componentWillLoad() {
this.selected = findSelected(this.navigation, this.activeRouteId, null).selected;
this.parent = findSelected(this.navigation, this.activeRouteId).parent;
}
closeMenuHandler() {
this.closeMenu.emit();
}
handlePrevSelected(event, item) {
event.preventDefault();
const selected = findSelected(this.navigation, item.id).parent;
this.selected = selected;
this.parent = selected;
}
handleSelect(event, item) {
const { selected, parent } = findSelected(this.navigation, item.id);
this.selected = selected;
this.parent = parent;
if (typeof item.onClick === 'function') {
item.onClick(event);
}
if (!hasChildren(selected)) {
this.closeMenuHandler();
}
}
childMenuPage() {
const section = this.selected && hasChildren(this.selected) ? this.selected : this.parent;
const { selected, parent } = findSelected(this.navigation, this.activeRouteId);
if (!section) {
return h("div", null);
}
const isActive = (child) => (selected && child.id === selected.id) ||
(parent && parent.id === child.id);
return (h("div", { class: "main-navigation-mobile__child-menu" }, h("a", { class: "main-navigation-mobile__child-menu-current", href: section.href || 'javascript:void(0);', onClick: (event) => {
this.handlePrevSelected(event, section);
}, tabIndex: 0, onKeyDown: (event) => {
if (['Enter', ' '].includes(event.key)) {
event.preventDefault();
this.handlePrevSelected(event, section);
if (!this.selected) {
// focus first main navigation item to ease tab navigation
this.mainNavigationWrapper.querySelector('a').focus();
}
}
if (['Escape', 'Esc'].includes(event.key)) {
this.hide();
}
} }, h("div", { class: "main-navigation-mobile__child-menu-current-item" }, h("div", { class: "main-navigation-mobile__child-menu-current-wrapper" }, h("scale-icon-navigation-left", null), h("div", null, section.name)))), h("ul", { class: "main-navigation-mobile__child-menu-items", ref: (el) => {
this.childrenWrapper = el;
} }, section.children.map((child) => (h("li", { class: "main-navigation-mobile__child-menu-item" }, h("a", { "aria-current": isActive(child) ? 'true' : 'false', "aria-haspopup": hasChildren(child) ? 'true' : 'false', class: `main-navigation-mobile__child-menu-item-link ${isActive(child) ? 'selected' : ''}`, href: child.href || 'javascript:void(0);', tabIndex: 0, onClick: (event) => {
this.handleSelect(event, child);
}, onKeyDown: (event) => {
if (['Enter', ' '].includes(event.key)) {
this.handleSelect(event, child);
setTimeout(() => {
// focus first child menu item link to ease tab navigation
const firstChildren = this.childrenWrapper.querySelector('a');
if (firstChildren) {
this.childrenWrapper.querySelector('a').focus();
}
});
}
if (['Escape', 'Esc'].includes(event.key)) {
this.hide();
}
} }, h("div", { class: "main-navigation-mobile__child-menu-item-wrapper" }, h("span", null, child.name), isActive(child) && h("span", { class: "sr-only" }, "active"), hasChildren(child) && (h("scale-icon-navigation-right", null))))))))));
}
render() {
const { selected } = findSelected(this.navigation, this.activeRouteId);
const rootNode = selected && findRootNode(this.navigation, selected.id);
const isActive = (itemId) => rootNode && rootNode.id === itemId;
return (h("div", { class: "main-navigation-mobile" }, this.childMenuPage(), h("ul", { class: "main-navigation-mobile__main-menu", ref: (el) => {
this.mainNavigationWrapper = el;
} }, (this.navigation || []).map((item) => (h("li", { class: `main-navigation-mobile__item${isActive(item.id)
? ' main-navigation-mobile__item--selected'
: ''}` }, h("a", { "aria-current": isActive(item.id) ? 'true' : 'false', "aria-haspopup": hasChildren(item) ? 'true' : 'false', class: `main-navigation-mobile__item-link${isActive(item.id)
? ' main-navigation-mobile__item-link--selected'
: ''}`, href: item.href || 'javascript:void(0);', onClick: (event) => {
this.handleSelect(event, item);
}, onKeyDown: (event) => {
if (['Enter', ' '].includes(event.key)) {
this.handleSelect(event, item);
setTimeout(() => {
// focus first child menu item link to ease tab navigation
const firstChildren = this.childrenWrapper.querySelector('a');
if (firstChildren) {
this.childrenWrapper.querySelector('a').focus();
}
});
}
if (['Escape', 'Esc'].includes(event.key)) {
this.hide();
}
},
// hide from tab navigation when on childMenuPage
tabIndex: this.selected ? -1 : 0 }, h("div", { class: "main-navigation-mobile__item-wrapper" }, h("span", null, item.name), isActive(item.id) && h("span", { class: "sr-only" }, "active"), hasChildren(item) && (h("scale-icon-navigation-right", null))))))))));
}
static get watchers() { return {
"activeRouteId": ["handleActiveRoute"]
}; }
};
MainNavigationMobile.style = appNavigationMainMobileCss;
const appNavigationSectorMobileCss = "app-navigation-sector-mobile{--border-bottom:1px solid var(--telekom-color-ui-subtle);--color:var(--telekom-color-text-and-icon-standard);--font-weight:var(--telekom-typography-font-weight-bold);--font-size:var(--telekom-typography-font-size-body);--transition:all var(--telekom-motion-duration-transition)\n var(--telekom-motion-easing-standard);--border-bottom-selected:1px solid var(--telekom-color-primary-standard);--color-selected:var(--telekom-color-text-and-icon-primary-standard);width:100%}.sector-navigation-mobile{display:flex;width:100%;list-style:none;padding:0;margin:0;border-bottom:var(--border-bottom)}.sector-navigation-mobile__item{width:100%}.sector-navigation-mobile__item-link{color:var(--color);text-decoration:none;font-weight:var(--font-weight);font-size:var(--font-size);width:100%;height:54px;display:flex;align-items:center;justify-content:center;transition:var(--transition)}.sector-navigation-mobile__item-link--selected{border-bottom:var(--border-bottom-selected);color:var(--color-selected);transition:var(--transition)}";
const NavigationSectorMobile = class {
constructor(hostRef) {
registerInstance(this, hostRef);
// @ts-ignore
this.selected = this.navigation
? // @ts-ignore
this.navigation.find(({ id }) => id === this.activeSectorId) ||
// @ts-ignore
this.navigation[0]
: {};
}
handleActiveSegment(newValue) {
this.selected =
this.navigation.find(({ id }) => id === newValue) || this.navigation[0];
}
handleSelected(event, item) {
this.selected = item;
if (typeof item.onClick === 'function') {
item.onClick(event);
}
}
render() {
return (h("ul", { class: "sector-navigation-mobile" }, (this.navigation || []).map((item) => (h("li", { class: "sector-navigation-mobile__item" }, h("a", { class: `sector-navigation-mobile__item-link${this.selected.id === item.id
? ' sector-navigation-mobile__item-link--selected'
: ''}`, href: item.href || 'javascript:void(0);', onClick: (event) => this.handleSelected(event, item), onKeyDown: (event) => {
if (['Escape', 'Esc'].includes(event.key)) {
this.hide();
}
}, "aria-current": this.selected.id === item.id ? 'true' : 'false' }, item.name, this.selected.id === item.id && (h("span", { class: "sr-only" }, "active"))))))));
}
static get watchers() { return {
"activeSectorId": ["handleActiveSegment"]
}; }
};
NavigationSectorMobile.style = appNavigationSectorMobileCss;
const appNavigationUserMenuCss = ":host{--border-width-divider:var(--telekom-spacing-composition-space-01);--color-divider:var(--telekom-color-ui-subtle);--color-menu-item-hover:var(--telekom-color-text-and-icon-primary-hovered);--color-menu-item-active:var(--telekom-color-text-and-icon-primary-pressed);--box-shadow-focus:0 0 0 var(--telekom-line-weight-highlight)\n var(--telekom-color-functional-focus-standard)}.app-navigation-user-menu{width:100%;position:relative;min-width:260px}.app-navigation-user-menu__divider{margin:var(--telekom-spacing-composition-space-06) 0;border:0;border-top:var(--border-width-divider) solid var(--color-divider)}@media (min-width: 1040px){.app-navigation-user-menu__user-info{margin:var(--telekom-spacing-composition-space-05)\n var(--telekom-spacing-composition-space-08) 0\n var(--telekom-spacing-composition-space-08)}}@media (max-width: 1039px){.app-navigation-user-menu__user-info{margin:var(--telekom-spacing-composition-space-08)\n var(--telekom-spacing-composition-space-06) 0\n var(--telekom-spacing-composition-space-06)}}.app-navigation-user-menu__user-info--name{font:var(--telekom-text-style-heading-5);margin-bottom:var(--telekom-spacing-composition-space-03)}.app-navigation-user-menu__user-info--email{color:var(--telekom-color-text-and-icon-additional);font:var(--telekom-text-style-body)}.app-navigation-user-menu__item{display:flex;font:var(--telekom-text-style-heading-6);padding:var(--telekom-spacing-composition-space-04)\n var(--telekom-spacing-composition-space-06);border-radius:calc(var(--telekom-radius-small) / 2);color:var(--telekom-color-text-and-icon-standard);text-decoration:none}@media (min-width: 1040px){.app-navigation-user-menu__item{padding:var(--telekom-spacing-composition-space-04)\n var(--telekom-spacing-composition-space-08)}}.app-navigation-user-menu__item:hover{color:var(--color-menu-item-hover)}.app-navigation-user-menu__item:active{color:var(--color-menu-item-active)}.app-navigation-user-menu__item:focus{outline:none;box-shadow:var(--box-shadow-focus)}.app-navigation-user-menu__item--icon-prefix{margin-right:var(--telekom-spacing-composition-space-04)}.app-navigation-user-menu__item--icon-suffix{margin-left:var(--telekom-spacing-composition-space-04)}.app-navigation-user-menu__button{padding:var(--telekom-spacing-composition-space-04)\n var(--telekom-spacing-composition-space-06)}@media (min-width: 1040px){.app-navigation-user-menu__button{padding:var(--telekom-spacing-composition-space-04)\n var(--telekom-spacing-composition-space-08)}}@media (min-width: 1040px){.app-navigation-user-menu{padding-bottom:var(--telekom-spacing-composition-space-03)}}";
const AppNavigationUserMenu = class {
constructor(hostRef) {
registerInstance(this, hostRef);
this.closeMenu = createEvent(this, "closeMenu", 7);
}
render() {
return (h(Host, null, h("div", { class: "app-navigation-user-menu" }, this.navigation.map((item) => {
if (item.type === 'divider') {
return (h("hr", { class: "app-navigation-user-menu__divider", part: "rule-horizontal" }));
}
if (item.type === 'userInfo') {
return (h("div", { class: "app-navigation-user-menu__user-info" }, h("div", { class: "app-navigation-user-menu__user-info--name scl-font-variant-heading-4" }, item.name), h("div", { class: "app-navigation-user-menu__user-info--email" }, item.email)));
}
if (item.type === 'item') {
return (h("a", { href: item.href || 'javascript:void(0);', target: item.target || '_self', tabindex: 0, class: "app-navigation-user-menu__item", onClick: (e) => {
e.stopImmediatePropagation();
if (item.onClick) {
item.onClick(e);
}
this.hide();
}, onKeyDown: (e) => {
if ([' ', 'Enter'].includes(e.key)) {
e.stopImmediatePropagation();
e.preventDefault();
if (item.onClick) {
item.onClick(e);
}
this.hide();
}
} }, item.icon &&
(!item.iconPosition || item.iconPosition === 'prefix')
? renderIcon({
tag: `scale-icon-${item.icon}`,
attributes: {
class: `app-navigation-user-menu__item--icon-prefix`,
},
})
: null, item.name, item.icon && item.iconPosition === 'suffix'
? renderIcon({
tag: `scale-icon-${item.icon}`,
attributes: {
class: `app-navigation-user-menu__item--icon-suffix`,
},
})
: null));
}
if (item.type === 'button') {
return (h("scale-button", { class: "app-navigation-user-menu__button", onClick: (e) => {
if (item.onClick) {
item.onClick(e);
}
this.hide();
}, onKeyDown: (e) => {
if ([' ', 'Enter'].includes(e.key)) {
e.stopImmediatePropagation();
e.preventDefault();
if (item.onClick) {
item.onClick(e);
}
this.hide();
}
}, href: item.href, variant: item.variant || 'primary' }, item.icon &&
(!item.iconPosition || item.iconPosition === 'prefix')
? renderIcon({
tag: `scale-icon-${item.icon}`,
attributes: {},
})
: null, item.name, item.icon && item.iconPosition === 'suffix'
? renderIcon({
tag: `scale-icon-${item.icon}`,
attributes: {},
})
: null));
}
}))));
}
get hostElement() { return getElement(this); }
};
AppNavigationUserMenu.style = appNavigationUserMenuCss;
const navIconCss = "scale-nav-icon{--spacing-mobile:var(--telekom-spacing-composition-space-00) 6px;--font-size-mobile:var(--telekom-typography-font-size-badge);--line-height-mobile:var(--telekom-typography-line-spacing-tight);--font-weight-mobile:var(--telekom-typography-font-weight-bold);--spacing-desktop:0 0 0 var(--telekom-spacing-composition-space-06);--font-size-desktop:var(--telekom-typography-font-size-small);--line-height-desktop:var(--telekom-typography-line-spacing-standard);--color:var(--telekom-color-text-and-icon-standard);--color-hover:var(--telekom-color-text-and-icon-primary-hovered);--color-active:var(--telekom-color-text-and-icon-primary-pressed);--focus-outline:var(--telekom-line-weight-highlight) solid\n var(--telekom-color-functional-focus-standard)}.meta-navigation__item-link{color:var(--color);display:flex;transition:all 0.2s ease-in-out;align-items:center;font-weight:var(--font-weight-mobile);text-decoration:none;height:var(--header-nav-height)}.meta-navigation__item--selected .meta-navigation__item-link{color:var(--color)}@media screen and (forced-colors: active), (-ms-high-contrast: active){.meta-navigation__item-link{color:var(--telekom-color-text-and-icon-inverted-standard)}}.meta-navigation__item-link:hover{color:var(--color-hover)}.meta-navigation__item-link:active{color:var(--color-active)}.meta-navigation__item-link:focus{outline:var(--focus-outline)}@media (max-width: 1039px){.meta-navigation__item-link{min-width:24px;height:auto}.meta-navigation__item-link{margin:var(--spacing-mobile);font-size:var(--font-size-mobile);line-height:var(--line-height-mobile);flex-direction:column}.meta-navigation__item.mobile-menu{width:50px;text-align:center;cursor:pointer}.meta-navigation__item-link .meta-navigation__item-link-icon{width:18px;height:18px;margin-bottom:4px}}@media (min-width: 1040px){.meta-navigation__item scale-menu-flyout{height:24px}.meta-navigation__item-link{margin:var(--spacing-desktop);font-size:var(--font-size-desktop);line-height:var(--line-height-desktop)}.meta-navigation__item-link .meta-navigation__item-link-icon{margin-right:6px}}";
const NavIcon = class {
constructor(hostRef) {
registerInstance(this, hostRef);
/** (optional) href value */
this.href = 'javascript:void(0);';
// DEPRECATED - mobileMenuOpen should replace isMobileMenuOpen
this.isMobileMenuOpen = false;
this.mobileMenuOpen = false;
this.badge = false;
}
componentWillRender() {
// make sure the deprecated props overwrite the actual ones if used
// and show status note deprecated
if (this.isActive !== undefined) {
statusNote({
tag: 'deprecated',
message: 'Property "isActive" is deprecated. Please use the "active" property!',
type: 'warn',
source: this.host,
});
}
if (this.isMobileMenuOpen !== false) {
statusNote({
tag: 'deprecated',
message: 'Property "isMobileMenuOpen" is deprecated. Please use the "mobileMenuOpen" property!',
type: 'warn',
source: this.host,
});
}
}
render() {
return (h("li", { class: this.getCssClassMap() }, h("a", { class: "meta-navigation__item-link", ref: this.refMobileMenuToggle ||
this.refMobileUserMenuToggle ||
this.refUserMenuToggle, href: this.href, role: this.href === 'javascript:void(0);' ? 'button' : null, onClick: this.clickLink, onKeyDown: (event) => {
if (!this.refMobileMenuToggle) {
return;
}
if (['Enter', ' ', 'Escape', 'Esc'].includes(event.key)) {
event.preventDefault();
this.clickLink(event);
}
} }, this.badge || (this.badgeLabel && this.badge) || this.badgeLabel ? (h("scale-notification-badge", { label: this.badgeLabel, type: "nav-icon" }, renderIcon({
tag: `scale-icon-${this.icon}`,
attributes: {
class: 'meta-navigation__item-link-icon',
selected: this.active || this.isActive,
},
}))) : (renderIcon({
tag: `scale-icon-${this.icon}`,
attributes: {
class: 'meta-navigation__item-link-icon',
selected: this.active || this.isActive,
},
})), h("span", { class: "meta-navigation__item-label" }, h("slot", null)))));
}
getCssClassMap() {
return classnames('meta-navigation__item', (this.active ||
this.isActive ||
this.mobileMenuOpen ||
this.isMobileMenuOpen) &&
'meta-navigation__item--selected', !!this.refMobileMenuToggle && 'mobile-menu');
}
get host() { return getElement(this); }
};
NavIcon.style = navIconCss;
const navMainCss = "scale-nav-main{--spacing-x:var(--telekom-typography-font-size-body);--color:var(--telekom-color-text-and-icon-standard);--color-hover:var(--telekom-color-text-and-icon-primary-hovered);--color-active:var(--telekom-color-text-and-icon-primary-hovered);--color-selected:var(--telekom-color-text-and-icon-primary-standard);--font-size:var(--telekom-typography-font-size-callout);--font-weight:var(--telekom-typography-font-weight-extra-bold);--line-height:var(--telekom-typography-line-spacing-tight);--focus-outline:var(--telekom-line-weight-highlight) solid\n var(--telekom-color-functional-focus-standard)}.main-navigation__item{height:100%;margin-left:var(--spacing-x);margin-right:var(--spacing-x)}.main-navigation__item:has(a[href]){cursor:pointer}.main-navigation__item-link-text{white-space:nowrap}.main-navigation__item.mega-menu--visible .mega-menu{display:block}.main-navigation__item.mega-menu--visible .mega-menu__wrapper{pointer-events:visible}.main-navigation__item .main-navigation__item-link{display:flex;height:100%;color:var(--color);font-size:var(--font-size);font-weight:var(--font-weight);line-height:var(--line-height);transition:color, border 0.2s ease-in-out;align-items:center;text-decoration:none}.main-navigation__item:hover .main-navigation__item-link{color:var(--color-hover)}.main-navigation__item:hover .main-navigation__item-link-text{border-bottom:2px solid var(--color-hover);color:var(--color-hover);margin-bottom:-2px;height:calc(100% - 4px);display:flex;align-items:center}.main-navigation__item-link:focus{outline:var(--focus-outline)}.main-navigation__item:active .main-navigation__item-link{color:var(--color-active)}.main-navigation__item:active .main-navigation__item-link-text{border-bottom:2px solid var(--color-active);margin-bottom:-2px;height:calc(100% - 4px);display:flex;align-items:center}.main-navigation__item.selected .main-navigation__item-link{color:var(--color-selected)}.main-navigation__item.selected:hover .main-navigation__item-link{color:var(--color-hover)}.main-navigation__item.selected .main-navigation__item-link-text{border-bottom:2px solid var(--color-selected);margin-bottom:-2px;height:calc(100% - 4px);display:flex;align-items:center}.main-navigation__item.selected:hover .main-navigation__item-link-text{color:var(--color-hover);border-bottom:2px solid var(--color-hover)}.main-navigation__item.mega-menu--visible .main-navigation__item-link-text{border-bottom:2px solid var(--color-hover);margin-bottom:-2px;height:calc(100% - 4px);display:flex;align-items:center}.sr-only{position:absolute;left:-10000px;overflow:hidden}";
const NavMain = class {
constructor(hostRef) {
registerInstance(this, hostRef);
// DEPRECATED - megaMenuVisible should replace isMegaMenuVisible
this.isMegaMenuVisible = false;
/** (optional) if this mega-menu is visible */
this.megaMenuVisible = false;
/** (optional) href value */
this.href = 'javascript:void(0);';
/** (optional) target value */
this.target = '_self';
}
componentWillLoad() {
this.hasPopup =
this.popup || !!this.hostElement.querySelector('app-mega-menu');
}
componentWillRender() {
// make sure the deprecated props overwrite the actual ones if used
// and show status note deprecated
if (this.isMegaMenuVisible !== false) {
statusNote({
tag: 'deprecated',
message: 'Property "isMegaMenuVisible" is deprecated. Please use the "megaMenuVisible" property!',
type: 'warn',
source: this.hostElement,
});
}
if (this.isActive !== undefined) {
statusNote({
tag: 'deprecated',
message: 'Property "isActive" is deprecated. Please use the "active" property!',
type: 'warn',
source: this.hostElement,
});
}
}
render() {
return (h(Host, null, h("li", { class: this.getCssClassMap() }, h("a", { class: "main-navigation__item-link", href: this.href, target: this.target || '_self', "aria-current": this.active || this.isActive ? 'true' : 'false', "aria-haspopup": this.hasPopup ? 'true' : 'false', onClick: this.clickLink, id: this.innerId }, h("span", { class: "main-navigation__item-link-text" }, this.name), (this.active || this.isActive) && (h("span", { class: "sr-only" }, "active"))), h("slot", null))));
}
getCssClassMap() {
return classnames('main-navigation__item', (this.megaMenuVisible || this.isMegaMenuVisible) && 'mega-menu--visible', (this.active || this.isActive) && 'selected');
}
get hostElement() { return getElement(this); }
};
NavMain.style = navMainCss;
const navSegmentCss = "scale-nav-segment{--transition:all 0.2s ease-in-out;--color:var(--telekom-color-text-and-icon-white-standard);--spacing-y:var(--telekom-spacing-composition-space-03);--font-size:var(--telekom-typography-font-size-caption);--font-weight:var(--telekom-typography-font-weight-extra-bold);--line-height:var(--telekom-typography-line-spacing-extra-tight);--border-bottom:1px solid var(--telekom-color-text-and-icon-white-standard);--focus-outline:var(--telekom-line-weight-highlight) solid\n var(--telekom-color-functional-focus-standard)}.sr-only{position:absolute;left:-10000px;overflow:hidden}.segment-navigation__item{list-style:none}.segment-navigation__item-link{color:var(--color);padding:var(--spacing-y) 0;font-size:var(--font-size);font-weight:var(--font-weight);line-height:var(--line-height);transition:var(--transition);text-decoration:none}.segment-navigation__item-link:hover,.segment-navigation__item-link.active{border-bottom:var(--border-bottom);transition:var(--transition)}.segment-navigation__item-link:focus{outline:var(--focus-outline)}";
const NavSegment = class {
constructor(hostRef) {
registerInstance(this, hostRef);
/** (optional) href value */
this.href = 'javascript:void(0);';
}
componentWillRender() {
// make sure the deprecated props overwrite the actual ones if used
// and show status note deprecated
if (this.isActive !== undefined) {
statusNote({
tag: 'deprecated',
message: 'Property "isActive" is deprecated. Please use the "active" property!',
type: 'warn',
source: this.host,
});
}
}
render() {
return (h("li", { class: this.getCssClassMap() }, h("a", { class: classnames('segment-navigation__item-link', (this.active || this.isActive) && 'active'), href: this.href, onFocus: () => {
window.scrollTo({ top: 0 });
}, "aria-current": this.active || this.isActive ? 'true' : 'false' }, h("slot", null), (this.active || this.isActive) && (h("span", { class: "sr-only" }, "active")))));
}
getCssClassMap() {
return classnames('segment-navigation__item');
}
get host() { return getElement(this); }
};
NavSegment.style = navSegmentCss;
const notificationBadgeCss = ":host{--padding-type-text-after-badge-slot:0 0 0 12px;--padding-type-icon-after-badge-slot:0 0 0 7px;--background-color-circle:var(--telekom-color-primary-standard);--color-circle:var(--telekom-color-text-and-icon-inverted-standard);--font-size-circle:var(--telekom-typography-font-size-badge);--font-weight-circle:bold;--border-radius-circle:var(--telekom-radius-circle);--color-notification-badge-border-focus:var(\n --telekom-color-functional-focus-standard\n );--color-notification-badge-border-hover:var(\n --telekom-color-text-and-icon-primary-hovered\n );--line-width-notification-badge-border-focus:2px;--padding-notification-badge-border:8px 5px 0 5px;--margin-notification-badge-border:-8px -5px 0 -5px}.notification-badge-border{display:inline-block;border:var(--line-width-notification-badge-border-focus) solid transparent;padding:var(--padding-notification-badge-border);margin:var(--margin-notification-badge-border)}.notification-badge-border:hover{color:var(--color-notification-badge-border-hover);cursor:pointer}.notification-badge-border:focus{border:var(--line-width-notification-badge-border-focus) solid\n var(--color-notification-badge-border-focus);outline:none;padding:var(--padding-notification-badge-border);border-radius:3px}.notification-badge{display:flex;align-items:center}.notification-badge__wrapper{text-decoration:none;position:relative;display:inline-block;justify-content:center}.notification-badge--nav-icon .notification-badge__wrapper{margin-bottom:-5px}.notification-badge__circle{display:flex;position:absolute;font-size:var(--font-size-circle);font-weight:var(--font-weight-circle);border-radius:var(--border-radius-circle);background-color:var(--background-color-circle);color:var(--color-circle);align-items:center;justify-content:center}.notification-badge.notification-badge--label .notification-badge__circle{padding:0 2px}::slotted([slot='after-badge']){padding:var(--padding-type-icon-after-badge-slot)}.notification-badge.notification-badge--text ::slotted([slot='after-badge']){padding:var(--padding-type-text-after-badge-slot)}@media (min-width: 1040px){.notification-badge.notification-badge--icon .notification-badge__circle{top:-4px;right:-2px;height:8px;min-width:8px}.notification-badge.notification-badge--label.notification-badge--icon .notification-badge__circle{top:-8px;right:-5px;height:14px;min-width:10px}.notification-badge.notification-badge--nav-icon .notification-badge__circle{top:-5px;right:4px;height:8px;min-width:8px}.notification-badge.notification-badge--label.notification-badge--nav-icon .notification-badge__circle{top:-8px;right:1px;height:14px;min-width:10px}.notification-badge.notification-badge--text .notification-badge__circle{top:-5px;right:-10px;height:8px;min-width:8px}.notification-badge.notification-badge--label.notification-badge--text .notification-badge__circle{top:-10px;right:-15px;height:14px;min-width:10px}}@media (max-width: 1039px){.notification-badge.notification-badge--icon .notification-badge__circle{top:-4px;right:-1px;height:8px;min-width:8px}.notification-badge.notification-badge--label.notification-badge--icon .notification-badge__circle{top:-6px;right:-4px;height:14px;min-width:10px}.notification-badge.notification-badge--nav-icon .notification-badge__circle{top:0px;right:-1px;height:6px;min-width:6px}.notification-badge.notification-badge--label.notification-badge--nav-icon .notification-badge__circle{top:-3px;right:-4.5px;height:12px;min-width:8px}.notification-badge.notification-badge--text .notification-badge__circle{top:-4px;right:-10px;height:6px;min-width:6px}.notification-badge.notification-badge--label.notification-badge--text .notification-badge__circle{top:-6px;right:-15px;height:14px;min-width:10px}}";
const NotificationBadge = class {
constructor(hostRef) {
registerInstance(this, hostRef);
/** (optional) Maximal number of characters displayed in the badge */
this.maxCharacters = 3;
/** (optional) Setting/Slotcontent in which the badge is used */
this.type = 'icon';
}
connectedCallback() {
statusNote({ source: this.hostElement, tag: 'beta' });
}
getBadgeLabel() {
if (this.label) {
if (!isNaN(this.label)) {
let labelNumber = '' + this.label;
if (labelNumber.length > this.maxCharacters) {
const SI_SYMBOL = ['', 'k', 'M', 'G', 'T', 'P', 'E'];
const tier = Math.floor(Math.log10(Number(this.label)) / 3) || 0;
if (tier > 0) {
const scaled = Number(this.label) / Math.pow(10, tier * 3);
labelNumber = scaled.toFixed(1).replace('.0', '') + SI_SYMBOL[tier];
}
}
return labelNumber;
}
return this.label;
}
}
getRender() {
return (h("div", { class: this.getCssClassMap() }, h("span", { class: "notification-badge__wrapper" }, h("slot", null), h("span", { class: "notification-badge__circle" }, this.getBadgeLabel())), h("slot", { name: "after-badge" })));
}
render() {
return (h(Host, null, this.type !== 'nav-icon' ? (h("div", { class: "notification-badge-border", tabIndex: 0, onClick: this.clickHandler }, this.getRender())) : (this.getRender())));
}
getCssClassMap() {
return classnames(`notification-badge`, this.label && `notification-badge--label`, this.type && `notification-badge--${this.type}`);
}
get hostElement() { return getElement(this); }
};
NotificationBadge.style = notificationBadgeCss;
export { MegaMenu as app_mega_menu, MainNavigationMobile as app_navigation_main_mobile, NavigationSectorMobile as app_navigation_sector_mobile, AppNavigationUserMenu as app_navigation_user_menu, NavIcon as scale_nav_icon, NavMain as scale_nav_main, NavSegment as scale_nav_segment, NotificationBadge as scale_notification_badge };