{"version":3,"names":["zdsNavigationCss","ZdsNavigationStyle0","ZdsNavigation","this","wasLastBodyKeyboardActivated","onActiveBodyChange","newValue","oldValue","opened","Promise","all","toggleBody","onActivePanelChange","hostElement","querySelectorAll","forEach","element","active","togglePanel","onSkipToContentIdChange","skipToContentId","parseSpecialFalseProp","openBody","identifier","shouldAnimate","activeBody","closeBody","openPanel","activePanel","closePanel","zdsNavigationActivateBodyHandler","event","detail","isKeyboardActivated","newBody","zdsNavigationActivatePanelHandler","newPanel","navigationChildOpenHandler","updateBodyHeights","toggleScrollLock","navigationBodyOpenedHandler","enableNavigationBodyScroll","navigationPanelOpenedHandler","navigationBodyCloseHandler","backdropCloseHandler","onZdsLocaleChange","forceUpdate","componentWillLoad","isInStorybook","console","warn","componentDidLoad","window","addEventListener","handleWindowResize","disconnectedCallback","removeEventListener","toggledBodyElement","Array","from","find","navigationBodyElement","style","getComputedStyle","display","getPropertyValue","handleFocusOut","relatedTarget","contains","navigationElement","onSkipButtonClick","render","navigationClasses","generateCssClasses","storybook","h","Fragment","key","show","class","onFocusout","ref","renderMainBar","renderSuperBar","renderBodyBackground","mainBarCssClasses","fullWidth","renderSkipButton","name","bodyCssClasses","bodyElement","onZdsClick","link","skipToContentText","LocaleService","t","hasSlotted","superBarWrapperContentClasses","setBodyHeights","newHeight","height","setBodyHeight","toggle","toggleBodyFunc","async","querySelector","togglePanelFunc","isTablet","initialActiveBodyLink","activate","toggledPanelElement","navigationPanel","transition","scrollHeight","requestAnimationFrame","bottomOffset","getBoundingClientRect","bottom","innerHeight","__decorate","Bind","FocusEvent"],"sources":["../src/components/zds-navigation/zds-navigation.scss?tag=zds-navigation&encapsulation=shadow","../src/components/zds-navigation/zds-navigation.tsx"],"sourcesContent":["@import '../../../../style/lib/scss';\n@import '../../../../style/src/grid-system/variables';\n@import '../../../../style/src/grid-system/mixins';\n@import '../../../../style/src/typography/mixins';\n\n:host {\n\t@include zds-typography('body');\n\n\tcolor: var(--zds-navigation-color);\n\tdisplay: block;\n\toverflow: visible;\n}\n\n::slotted(*) {\n\tmin-width: 0; // Prevent slotted elements overflowing flex container\n}\n\n::slotted(zds-navigation-body) {\n\tgrid-column-start: 1;\n\tgrid-row-start: 1;\n}\n\n.zds-navigation {\n\theight: auto;\n\toverflow: visible;\n\tposition: relative;\n\twidth: 100%;\n\tz-index: 1100;\n\n\t&--storybook {\n\t\twidth: 100%;\n\t}\n\n\t/* Shared */\n\n\t&__bar {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n\n\t&__main-bar,\n\t&__body-content,\n\t&__super-bar-wrapper-content {\n\t\t@include make-container;\n\n\t\t@each $breakpoint, $width in $zds-breakpoints {\n\t\t\t@include make-container-breakpoint($breakpoint, $width);\n\t\t}\n\n\t\t// Remove the max width for LG viewports\n\t\t@include zds-media-breakpoint-down('lg') {\n\t\t\tmax-width: 100%;\n\t\t}\n\t}\n\n\t&__main-bar-wrapper,\n\t&__body-wrapper {\n\t\tbackground: var(--zds-navigation-background);\n\t}\n\n\t/* Super navigation bar */\n\n\t&__super-bar-wrapper {\n\t\t--zds-link-color: var(--zds-super-navigation-link-color);\n\t\t--zds-link-color-hover: var(--zds-super-navigation-link-color-hover);\n\t\t--zds-link-color-visited: var(--zds-super-navigation-link-color);\n\n\t\tbackground: white; // To show colours with opacity nicely (e.g. subtle colours)\n\t\tdisplay: none;\n\t\tfont-size: var(--zds-super-navigation-font-size);\n\t\torder: 0; // Display super-bar above main-bar, while the tab navigation order is reversed\n\n\t\t@include zds-media-breakpoint-up('md') {\n\t\t\tdisplay: initial;\n\t\t}\n\t}\n\n\t&__super-bar {\n\t\tbackground: var(--zds-super-navigation-background);\n\t}\n\n\t&__super-bar-wrapper-content {\n\t\tdisplay: flex;\n\t\tgap: var(--zds-space-6);\n\t\tjustify-content: flex-start;\n\t\tpadding-bottom: var(--zds-space-3);\n\t\tpadding-top: var(--zds-space-3);\n\n\t\t&--full-width {\n\t\t\tmax-width: 100%;\n\t\t}\n\n\t\t@include zds-media-breakpoint-up('md') {\n\t\t\tgap: var(--zds-space-12);\n\t\t\tjustify-content: flex-end;\n\t\t}\n\t}\n\n\t/* Main navigation bar */\n\n\t&__main-bar-wrapper {\n\t\torder: 1;\n\t}\n\n\t&__main-bar {\n\t\tpadding-bottom: var(--zds-space-4);\n\t\tpadding-top: var(--zds-space-4);\n\n\t\t@include zds-media-breakpoint-up('md') {\n\t\t\tpadding-bottom: var(--zds-space-6);\n\t\t\tpadding-top: var(--zds-space-6);\n\t\t}\n\n\t\t&--full-width {\n\t\t\tmax-width: 100%;\n\t\t}\n\n\t\t::slotted([slot='link']) {\n\t\t\tmargin-left: var(--zds-space-6);\n\t\t}\n\t}\n\n\t&__skip-button-wrapper {\n\t\tmargin-bottom: var(--zds-space-4);\n\n\t\t&:not(:focus-within) {\n\t\t\t// As recommended by webaim.org: https://webaim.org/techniques/css/invisiblecontent/\n\t\t\t// We skip the height and width, which are rather unnecessary, to avoid issues with border-radius/padding calculation\n\t\t\tleft: -10000px;\n\t\t\toverflow: hidden;\n\t\t\tposition: absolute;\n\t\t\ttop: auto;\n\t\t}\n\t}\n\n\t&__main-bar-content {\n\t\talign-items: center;\n\t\tdisplay: flex;\n\t}\n\n\t/* Navigation body background */\n\n\t&__body-background {\n\t\tbackground: var(--zds-navigation-background);\n\t\theight: 0;\n\t\tleft: 0;\n\t\tposition: absolute;\n\t\tright: 0;\n\t\ttransition: height 400ms var(--zds-transition-type-ease-in);\n\n\t\t@include zds-media-breakpoint-down('sm') {\n\t\t\ttransition-duration: 300ms;\n\t\t}\n\n\t\t&--opened {\n\t\t\ttransition: height 500ms var(--zds-transition-type-ease-out);\n\n\t\t\t@include zds-media-breakpoint-down('sm') {\n\t\t\t\ttransition-duration: 400ms;\n\t\t\t}\n\t\t}\n\t}\n}\n","import { Component, Element, Fragment, Listen, Prop, State, Watch, h, Method, forceUpdate } from '@stencil/core';\nimport Bind from 'bind-decorator';\nimport { generateCssClasses } from '../../utils/generate-css-classes';\nimport { isInStorybook } from '../../utils/is-in-storybook';\nimport { isTablet } from '../../utils/responsive';\nimport { toggleScrollLock } from '../../utils/scroll-lock';\nimport { hasSlotted } from '../../utils/slotted';\nimport { parseSpecialFalseProp } from '../../utils/special-boolean-prop';\nimport { LocaleService } from '../zds-config/locale-service';\n\nexport interface NavigationEventDetail {\n\tidentifier: string;\n}\n\nexport interface NavigationMaybeKeyboardEventDetail {\n\tidentifier: string;\n\tisKeyboardActivated: boolean;\n}\n\ntype NavigationMaybeKeyboardEvent = CustomEvent;\n\nexport interface NavigationAnimateEventDetail extends NavigationEventDetail {\n\tshouldAnimate?: boolean;\n}\n\ntype NavigationAnimateEvent = CustomEvent;\n\n@Component({\n\tshadow: true,\n\tstyleUrl: 'zds-navigation.scss',\n\ttag: 'zds-navigation',\n})\nexport class ZdsNavigation {\n\tbodyElement?: HTMLDivElement;\n\tisInStorybook: boolean;\n\tnavigationElement?: HTMLDivElement;\n\twasLastBodyKeyboardActivated: boolean | null = null;\n\n\t@Element() hostElement: HTMLDivElement;\n\n\t@Prop() fullWidth: boolean;\n\t@Prop() skipToContentId: string | false = false;\n\t@Prop() skipToContentText: string; // Deprecated\n\n\t@State() activeBody: string;\n\t@State() activePanel: string;\n\t@State() enableNavigationBodyScroll: boolean;\n\t@State() opened: boolean;\n\t@State() shouldAnimate: boolean;\n\n\t@Watch('activeBody')\n\tasync onActiveBodyChange(newValue: string, oldValue: string) {\n\t\tthis.opened = !!newValue;\n\n\t\t// Hide old and show new body, simultaneously\n\t\tawait Promise.all([\n\t\t\tthis.toggleBody(oldValue, false, this.wasLastBodyKeyboardActivated),\n\t\t\tthis.toggleBody(newValue, true, this.wasLastBodyKeyboardActivated),\n\t\t]);\n\n\t\tthis.wasLastBodyKeyboardActivated = null;\n\t}\n\n\t@Watch('activePanel')\n\tasync onActivePanelChange(newValue: string, oldValue: string) {\n\t\t// Make sure any previously active main links are marked as not active, necessary for links that are marked\n\t\t//\tas active but do not actually have a corresponding panel to toggle\n\t\tthis.hostElement\n\t\t\t.querySelectorAll(`zds-navigation-body-link[active]`)\n\t\t\t.forEach((element) => {\n\t\t\t\telement.active = false;\n\t\t\t});\n\n\t\t// Hide old and show new panel, simultaneously\n\t\tawait Promise.all([this.togglePanel(oldValue, false), this.togglePanel(newValue, true)]);\n\t}\n\n\t@Watch('skipToContentId')\n\tonSkipToContentIdChange(newValue: ZdsNavigation['skipToContentId']) {\n\t\tthis.skipToContentId = parseSpecialFalseProp(newValue);\n\t}\n\n\t@Method()\n\tasync openBody(identifier: string, shouldAnimate: boolean = true) {\n\t\tthis.shouldAnimate = shouldAnimate;\n\t\tthis.activeBody = identifier;\n\t}\n\n\t@Method()\n\tasync closeBody(shouldAnimate: boolean = true) {\n\t\tthis.shouldAnimate = shouldAnimate;\n\t\tthis.activeBody = null;\n\t}\n\n\t@Method()\n\tasync openPanel(identifier: string) {\n\t\tthis.activePanel = identifier;\n\t}\n\n\t@Method()\n\tasync closePanel() {\n\t\tthis.activePanel = null;\n\t}\n\n\t@Listen('zdsNavigationActivateBody')\n\tzdsNavigationActivateBodyHandler(event: NavigationMaybeKeyboardEvent) {\n\t\tthis.wasLastBodyKeyboardActivated = event.detail?.isKeyboardActivated;\n\n\t\t// activeBody should be set to null if the same button was activated twice\n\t\tconst newBody = event.detail?.identifier;\n\t\tthis.activeBody = newBody === this.activeBody ? null : newBody;\n\t}\n\n\t@Listen('zdsNavigationActivatePanel')\n\tzdsNavigationActivatePanelHandler(event: NavigationMaybeKeyboardEvent) {\n\t\t// activePanel should be set to null if the same button was activated twice, but only if done using a keyboard\n\t\tconst newPanel = event.detail?.identifier;\n\t\tthis.activePanel = event.detail?.isKeyboardActivated && newPanel === this.activePanel ? null : newPanel;\n\t}\n\n\t@Listen('zdsNavigationBodyOpen')\n\t@Listen('zdsNavigationPanelOpen')\n\tnavigationChildOpenHandler() {\n\t\tthis.updateBodyHeights();\n\n\t\ttoggleScrollLock(true);\n\t}\n\n\t@Listen('zdsNavigationBodyOpened')\n\tnavigationBodyOpenedHandler() {\n\t\t// Only enable body navigation scroll after body opened, if there is no panel\n\t\tif (!this.activePanel) {\n\t\t\tthis.enableNavigationBodyScroll = true;\n\t\t}\n\t}\n\n\t@Listen('zdsNavigationPanelOpened')\n\tnavigationPanelOpenedHandler() {\n\t\t// Always enable navigation body scroll after panel opened\n\t\tthis.enableNavigationBodyScroll = true;\n\t}\n\n\t@Listen('zdsNavigationBodyClose')\n\tnavigationBodyCloseHandler(event: NavigationAnimateEvent) {\n\t\t// Should only set new body height when no other body has been opened\n\t\tif (this.activeBody) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.enableNavigationBodyScroll = false;\n\t\tthis.updateBodyHeights(event.detail?.shouldAnimate);\n\t\ttoggleScrollLock(false);\n\t}\n\n\t@Listen('zdsBackdropClosed')\n\tbackdropCloseHandler() {\n\t\tthis.activeBody = null;\n\t}\n\n\t@Listen('zdsLocaleChange', { target: 'window' })\n\tonZdsLocaleChange() {\n\t\tforceUpdate(this.hostElement);\n\t}\n\n\tcomponentWillLoad() {\n\t\tthis.isInStorybook = isInStorybook();\n\n\t\t// Force initial call of special boolean watchers\n\t\tthis.onSkipToContentIdChange(this.skipToContentId);\n\n\t\t// Warn when no skip-to-content target ID set\n\t\tif (!this.skipToContentId) {\n\t\t\tconsole.warn(\n\t\t\t\t'zds-navigation: no `skip-to-content-id` set, so the skip to content button will not be shown!',\n\t\t\t);\n\t\t}\n\t}\n\n\tcomponentDidLoad() {\n\t\twindow.addEventListener('resize', this.handleWindowResize);\n\t}\n\n\tdisconnectedCallback() {\n\t\twindow.removeEventListener('resize', this.handleWindowResize);\n\t}\n\n\t@Bind\n\thandleWindowResize() {\n\t\t// if there is an active body, Check if it's display is changed to none, if it does close the navigation\n\t\tif (this.activeBody) {\n\t\t\tconst toggledBodyElement = Array.from(\n\t\t\t\tthis.hostElement.querySelectorAll('zds-navigation-body[slot=\"link\"]'),\n\t\t\t).find((navigationBodyElement) => navigationBodyElement.identifier === this.activeBody);\n\n\t\t\tif (toggledBodyElement) {\n\t\t\t\tconst style = window.getComputedStyle(toggledBodyElement);\n\t\t\t\tconst display = style.getPropertyValue('display');\n\t\t\t\tif (display === 'none') {\n\t\t\t\t\tthis.closeBody();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.updateBodyHeights(false);\n\t}\n\n\t@Bind\n\thandleFocusOut(event: FocusEvent) {\n\t\t// If using tab navigation to leave the navigation, close it\n\t\tif (\n\t\t\tevent.relatedTarget &&\n\t\t\t!this.hostElement.contains(event.relatedTarget as Node) &&\n\t\t\t!this.navigationElement.contains(event.relatedTarget as Node)\n\t\t) {\n\t\t\tthis.closeBody();\n\t\t}\n\t}\n\n\t@Bind\n\tonSkipButtonClick() {\n\t\tthis.closeBody();\n\t}\n\n\trender() {\n\t\tconst navigationClasses = generateCssClasses('zds-navigation', {\n\t\t\tstorybook: this.isInStorybook,\n\t\t});\n\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t (this.navigationElement = element)}\n\t\t\t\t>\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.renderMainBar()}\n\t\t\t\t\t\t{this.renderSuperBar()}\n\t\t\t\t\t
\n\t\t\t\t\t{this.renderBodyBackground()}\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n\n\trenderMainBar() {\n\t\tconst mainBarCssClasses = generateCssClasses('zds-navigation__main-bar', {\n\t\t\tfullWidth: this.fullWidth,\n\t\t});\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{this.renderSkipButton()}\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n\trenderBodyBackground() {\n\t\tconst bodyCssClasses = generateCssClasses('zds-navigation__body-background', {\n\t\t\topened: this.opened,\n\t\t});\n\n\t\treturn
(this.bodyElement = element)}>
;\n\t}\n\n\trenderSkipButton() {\n\t\tif (!this.skipToContentId) return;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t{this.skipToContentText ?? LocaleService.t('zdsNavigation.skipToContent')}\n\t\t\t\t\n\t\t\t
\n\t\t);\n\t}\n\n\trenderSuperBar() {\n\t\tif (!hasSlotted(this.hostElement, 'super-navigation')) return null;\n\n\t\tconst superBarWrapperContentClasses = generateCssClasses('zds-navigation__super-bar-wrapper-content', {\n\t\t\tfullWidth: this.fullWidth,\n\t\t});\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n\n\tsetBodyHeights(newHeight: number) {\n\t\tthis.bodyElement.style.height = newHeight + 'px';\n\n\t\tthis.hostElement\n\t\t\t.querySelectorAll('zds-navigation-body[slot=link]')\n\t\t\t.forEach((bodyElement: HTMLZdsNavigationBodyElement) => {\n\t\t\t\tbodyElement.setBodyHeight(newHeight);\n\t\t\t});\n\t}\n\n\tasync toggleBody(identifier: string, toggle: boolean, isKeyboardActivated: boolean) {\n\t\tif (!identifier) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Find the body element\n\t\tconst toggledBodyElement = Array.from(\n\t\t\tthis.hostElement.querySelectorAll('zds-navigation-body[slot=\"link\"]'),\n\t\t).find((navigationBodyElement) => navigationBodyElement.identifier === identifier);\n\n\t\t// Toggle the body element\n\t\tconst toggleBodyFunc = async () => {\n\t\t\tawait toggledBodyElement.toggle(toggle, this.shouldAnimate);\n\n\t\t\tif (!toggle && !this.activeBody) {\n\t\t\t\t// Wait until animation finished, then close active panel to reset animations\n\t\t\t\tawait this.closePanel();\n\t\t\t}\n\t\t};\n\n\t\t// Toggle the corresponding navigation-link element\n\t\ttoggledBodyElement.querySelector(`[slot=\"navigation-link\"]`).active = toggle;\n\n\t\t// Open the initial panel\n\t\tlet togglePanelFunc: () => Promise | null = null;\n\t\tif (toggle && !isKeyboardActivated && !isTablet()) {\n\t\t\tconst initialActiveBodyLink =\n\t\t\t\ttoggledBodyElement.querySelector(\n\t\t\t\t\t'zds-navigation-body-link[active]',\n\t\t\t\t) ?? toggledBodyElement.querySelector('zds-navigation-panel zds-navigation-body-link');\n\n\t\t\ttogglePanelFunc = async () => {\n\t\t\t\tawait initialActiveBodyLink?.activate();\n\t\t\t};\n\t\t}\n\n\t\t// Fade in body and panel simultaneously\n\t\tawait Promise.all([toggleBodyFunc(), togglePanelFunc?.()]);\n\n\t\tthis.shouldAnimate = true;\n\t}\n\n\tasync togglePanel(identifier: string, toggle: boolean) {\n\t\tif (!identifier) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Find the panel element\n\t\tconst toggledPanelElement = Array.from(\n\t\t\tthis.hostElement.querySelectorAll('zds-navigation-panel'),\n\t\t).find((navigationPanel) => navigationPanel.identifier === identifier);\n\n\t\t// Toggle the panel element\n\t\tawait toggledPanelElement.toggle(toggle);\n\n\t\t// Toggle the corresponding navigation-link element\n\t\ttoggledPanelElement.querySelector(`[slot=\"body-link\"]`).active = toggle;\n\t}\n\n\t@Bind\n\tupdateBodyHeights(shouldAnimate: boolean = true) {\n\t\tif (!shouldAnimate) {\n\t\t\tthis.bodyElement.style.transition = 'none';\n\t\t}\n\n\t\t// Make sure to set the height to an actual value, as setting height from 'auto' to a different value does not\n\t\t//\tanimate.\n\t\tif (this.bodyElement.style.height === 'auto') {\n\t\t\tthis.bodyElement.style.height = `${this.bodyElement.scrollHeight}px`;\n\t\t}\n\n\t\t// use requestAnimationFrame to make sure the height was changed from auto to something else\n\t\trequestAnimationFrame(() => {\n\t\t\tif (!this.opened) {\n\t\t\t\tthis.setBodyHeights(0);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Body height should be page-filling\n\t\t\tconst bottomOffset = this.hostElement.getBoundingClientRect().bottom;\n\t\t\tthis.setBodyHeights(window.innerHeight - bottomOffset);\n\n\t\t\tthis.bodyElement.style.transition = null;\n\t\t});\n\t}\n}\n"],"mappings":"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","ignoreList":[]}