@ukic/web-components 3.0.0-alpha.13 → 3.0.0-alpha.14
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/dist/cjs/ic-button_3.cjs.entry.js +59 -1
- package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-horizontal-scroll.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-menu-item.cjs.entry.js +1 -1
- package/dist/cjs/ic-menu-item.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-navigation-group.cjs.entry.js +6 -3
- package/dist/cjs/ic-navigation-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-navigation-menu.cjs.entry.js +36 -22
- package/dist/cjs/ic-navigation-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-popover-menu.cjs.entry.js +5 -4
- package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-select.cjs.entry.js +13 -10
- package/dist/cjs/ic-select.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-side-navigation.cjs.entry.js +7 -4
- package/dist/cjs/ic-side-navigation.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-skip-link.cjs.entry.js +10 -9
- package/dist/cjs/ic-skip-link.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-status-tag.cjs.entry.js +1 -1
- package/dist/cjs/ic-status-tag.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-step.cjs.entry.js +13 -12
- package/dist/cjs/ic-step.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-toast.cjs.entry.js +3 -3
- package/dist/cjs/ic-toast.cjs.entry.js.map +1 -1
- package/dist/collection/components/ic-button/ic-button.css +6 -0
- package/dist/collection/components/ic-button/ic-button.js +58 -0
- package/dist/collection/components/ic-button/ic-button.js.map +1 -1
- package/dist/collection/components/ic-button/ic-button.stories.js +179 -0
- package/dist/collection/components/ic-menu-item/ic-menu-item.css +1 -0
- package/dist/collection/components/ic-navigation-group/ic-navigation-group.js +30 -4
- package/dist/collection/components/ic-navigation-group/ic-navigation-group.js.map +1 -1
- package/dist/collection/components/ic-navigation-group/ic-navigation-group.types.js.map +1 -1
- package/dist/collection/components/ic-navigation-menu/ic-navigation-menu.js +36 -22
- package/dist/collection/components/ic-navigation-menu/ic-navigation-menu.js.map +1 -1
- package/dist/collection/components/ic-popover-menu/ic-popover-menu.js +5 -4
- package/dist/collection/components/ic-popover-menu/ic-popover-menu.js.map +1 -1
- package/dist/collection/components/ic-popover-menu/ic-popover-menu.stories.js +70 -1
- package/dist/collection/components/ic-select/ic-select.css +1 -0
- package/dist/collection/components/ic-select/ic-select.js +12 -9
- package/dist/collection/components/ic-select/ic-select.js.map +1 -1
- package/dist/collection/components/ic-side-navigation/ic-side-navigation.js +7 -4
- package/dist/collection/components/ic-side-navigation/ic-side-navigation.js.map +1 -1
- package/dist/collection/components/ic-side-navigation/ic-side-navigation.stories.js +12 -0
- package/dist/collection/components/ic-skip-link/ic-skip-link.css +22 -2
- package/dist/collection/components/ic-skip-link/ic-skip-link.js +13 -12
- package/dist/collection/components/ic-skip-link/ic-skip-link.js.map +1 -1
- package/dist/collection/components/ic-skip-link/ic-skip-link.stories.js +375 -31
- package/dist/collection/components/ic-status-tag/ic-status-tag.css +1 -1
- package/dist/collection/components/ic-step/ic-step.css +2 -2
- package/dist/collection/components/ic-step/ic-step.js +12 -11
- package/dist/collection/components/ic-step/ic-step.js.map +1 -1
- package/dist/collection/components/ic-stepper/ic-stepper.stories.js +5 -1
- package/dist/collection/components/ic-toast/ic-toast.js +3 -3
- package/dist/collection/components/ic-toast/ic-toast.js.map +1 -1
- package/dist/collection/components/ic-top-navigation/ic-top-navigation.stories.js +8 -19
- package/dist/components/helpers.js +1 -1
- package/dist/components/ic-button2.js +59 -1
- package/dist/components/ic-button2.js.map +1 -1
- package/dist/components/ic-menu-item2.js +1 -1
- package/dist/components/ic-menu-item2.js.map +1 -1
- package/dist/components/ic-navigation-group.js +6 -3
- package/dist/components/ic-navigation-group.js.map +1 -1
- package/dist/components/ic-navigation-menu2.js +37 -23
- package/dist/components/ic-navigation-menu2.js.map +1 -1
- package/dist/components/ic-popover-menu.js +5 -4
- package/dist/components/ic-popover-menu.js.map +1 -1
- package/dist/components/ic-radio-group.js.map +1 -1
- package/dist/components/ic-radio-option.js.map +1 -1
- package/dist/components/ic-search-bar.js.map +1 -1
- package/dist/components/ic-select.js +13 -10
- package/dist/components/ic-select.js.map +1 -1
- package/dist/components/ic-side-navigation.js +7 -4
- package/dist/components/ic-side-navigation.js.map +1 -1
- package/dist/components/ic-skeleton.js.map +1 -1
- package/dist/components/ic-skip-link.js +10 -9
- package/dist/components/ic-skip-link.js.map +1 -1
- package/dist/components/ic-status-tag.js +1 -1
- package/dist/components/ic-status-tag.js.map +1 -1
- package/dist/components/ic-step.js +13 -12
- package/dist/components/ic-step.js.map +1 -1
- package/dist/components/ic-tab-panel.js.map +1 -1
- package/dist/components/ic-toast.js +4 -4
- package/dist/components/ic-toast.js.map +1 -1
- package/dist/components/ic-top-navigation.js +1 -1
- package/dist/core/core.css +35 -29
- package/dist/core/core.esm.js +1 -1
- package/dist/core/{p-abf767e3.entry.js → p-1dc0c174.entry.js} +2 -2
- package/dist/core/p-1dc0c174.entry.js.map +1 -0
- package/dist/core/{p-e30c6d79.entry.js → p-22d88d2f.entry.js} +2 -2
- package/dist/core/p-22d88d2f.entry.js.map +1 -0
- package/dist/core/p-39bf060d.entry.js +2 -0
- package/dist/core/p-39bf060d.entry.js.map +1 -0
- package/dist/core/p-4a5ab31e.entry.js.map +1 -1
- package/dist/core/p-625f914e.entry.js +2 -0
- package/dist/core/p-625f914e.entry.js.map +1 -0
- package/dist/core/p-67d47db4.entry.js +2 -0
- package/dist/core/p-67d47db4.entry.js.map +1 -0
- package/dist/core/{p-8577de91.entry.js → p-9dbe3f3e.entry.js} +2 -2
- package/dist/core/{p-8577de91.entry.js.map → p-9dbe3f3e.entry.js.map} +1 -1
- package/dist/core/p-a9fd6dcf.entry.js +2 -0
- package/dist/core/p-a9fd6dcf.entry.js.map +1 -0
- package/dist/core/p-c7be6679.entry.js +2 -0
- package/dist/core/p-c7be6679.entry.js.map +1 -0
- package/dist/core/p-d80f3ec1.entry.js +2 -0
- package/dist/core/p-d80f3ec1.entry.js.map +1 -0
- package/dist/core/p-dce2c5e8.entry.js +2 -0
- package/dist/core/p-dce2c5e8.entry.js.map +1 -0
- package/dist/core/{p-de7542fa.entry.js → p-e3be3502.entry.js} +2 -2
- package/dist/core/p-e3be3502.entry.js.map +1 -0
- package/dist/esm/ic-button_3.entry.js +59 -1
- package/dist/esm/ic-button_3.entry.js.map +1 -1
- package/dist/esm/ic-horizontal-scroll.entry.js.map +1 -1
- package/dist/esm/ic-menu-item.entry.js +1 -1
- package/dist/esm/ic-menu-item.entry.js.map +1 -1
- package/dist/esm/ic-navigation-group.entry.js +6 -3
- package/dist/esm/ic-navigation-group.entry.js.map +1 -1
- package/dist/esm/ic-navigation-menu.entry.js +37 -23
- package/dist/esm/ic-navigation-menu.entry.js.map +1 -1
- package/dist/esm/ic-popover-menu.entry.js +5 -4
- package/dist/esm/ic-popover-menu.entry.js.map +1 -1
- package/dist/esm/ic-select.entry.js +13 -10
- package/dist/esm/ic-select.entry.js.map +1 -1
- package/dist/esm/ic-side-navigation.entry.js +7 -4
- package/dist/esm/ic-side-navigation.entry.js.map +1 -1
- package/dist/esm/ic-skip-link.entry.js +10 -9
- package/dist/esm/ic-skip-link.entry.js.map +1 -1
- package/dist/esm/ic-status-tag.entry.js +1 -1
- package/dist/esm/ic-status-tag.entry.js.map +1 -1
- package/dist/esm/ic-step.entry.js +13 -12
- package/dist/esm/ic-step.entry.js.map +1 -1
- package/dist/esm/ic-toast.entry.js +3 -3
- package/dist/esm/ic-toast.entry.js.map +1 -1
- package/dist/types/components/ic-button/ic-button.d.ts +1 -0
- package/dist/types/components/ic-navigation-group/ic-navigation-group.d.ts +6 -2
- package/dist/types/components/ic-navigation-group/ic-navigation-group.types.d.ts +3 -0
- package/dist/types/components/ic-navigation-menu/ic-navigation-menu.d.ts +2 -0
- package/dist/types/components/ic-skip-link/ic-skip-link.d.ts +4 -4
- package/dist/types/components.d.ts +11 -10
- package/hydrate/index.js +154 -70
- package/hydrate/index.mjs +154 -70
- package/package.json +2 -2
- package/vscode-data.json +4 -4
- package/dist/core/p-052d1ff0.entry.js +0 -2
- package/dist/core/p-052d1ff0.entry.js.map +0 -1
- package/dist/core/p-0b757d78.entry.js +0 -2
- package/dist/core/p-0b757d78.entry.js.map +0 -1
- package/dist/core/p-59287779.entry.js +0 -2
- package/dist/core/p-59287779.entry.js.map +0 -1
- package/dist/core/p-6c8e72b4.entry.js +0 -2
- package/dist/core/p-6c8e72b4.entry.js.map +0 -1
- package/dist/core/p-6fdb8a79.entry.js +0 -2
- package/dist/core/p-6fdb8a79.entry.js.map +0 -1
- package/dist/core/p-76bdbc98.entry.js +0 -2
- package/dist/core/p-76bdbc98.entry.js.map +0 -1
- package/dist/core/p-9bcd2c77.entry.js +0 -2
- package/dist/core/p-9bcd2c77.entry.js.map +0 -1
- package/dist/core/p-abf767e3.entry.js.map +0 -1
- package/dist/core/p-de7542fa.entry.js.map +0 -1
- package/dist/core/p-e30c6d79.entry.js.map +0 -1
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["icSideNavigationCss","IcSideNavigationStyle0","SideNavigation","constructor","hostRef","this","ANIMATION_DURATION","parseInt","getCssProperty","IC_NAVIGATION_ITEM","resizeObserver","COLLAPSED_ICON_LABELS_END","COLLAPSED_ICON_LABELS_START","deviceSize","getCurrentDeviceSize","deviceSizeAppTitle","DEVICE_SIZES","S","foregroundColor","getBrandForegroundAppearance","hasSecondaryNavigation","menuExpanded","menuOpen","collapsedIconLabels","disableAutoParentStyling","disableTopBarBehaviour","expanded","href","inline","shortAppTitle","static","emitSideNavigationExpanded","objDetails","icSideNavExpanded","emit","sideNavExpanded","sideNavMobile","toggleMenu","setMobileMenuAriaAttributes","arrangeSlottedNavigationItem","setToggleMenuFlyoutMenuVisibility","sideNav","_a","el","shadowRoot","querySelector","sideNavInner","bottomWrapper","menuVisibilityVisible","classList","add","setTimeout","remove","menuButton","setAttribute","setAndRemoveNoWrapAfterMenuExpanded","appTitle","toggleMenuExpanded","_b","style","setProperty","_d","_c","addEventListener","e","propertyName","displayTooltipWithExpandedLongLabel","animateCollapsedIconLabels","setExpandedButtonHeight","navItems","querySelectorAll","forEach","navItem","isNamedSlot","isSlotUsed","isUnnamedSlot","children","getAttribute","navItemSlot","iconWrapper","document","createElement","icon","label","textContent","trim","icTypography","height","append","styleSlottedCollapsedIconLabels","styleSlottedIconLabels","marginTop","whiteSpace","overflow","textOverflow","appStatusWrapper","offsetHeight","opacity","visibility","transition","transitionHandler","type","primaryNavigationWrapper","secondaryNavigationWrapper","classToRemove","classToAdd","transitionEndHandler","paddingIconWidth","navItemLink","navItemSVG","navStyles","gap","window","getComputedStyle","iconWidth","width","paddingLeft","Object","values","reduce","prev","curr","timer","sideNavWidth","clientWidth","navigationItems","Array","from","paddingIconDelta","length","navigationItem","icTypographyScrollWidth","scrollWidth","clearTimeout","setMenuExpanded","setParentPaddingTop","value","parentElement","setParentPaddingLeft","renderAppTitle","isAppNameSubtitleVariant","displayShortAppTitle","isEmptyString","h","variant","undefined","resizeObserverCallback","currSize","isSmallAndDisableTopBar","topBarHeight","scrollHeight","L","M","runResizeObserver","ResizeObserver","observe","body","box","setCollapsedIconLabels","styleSlottedCollapsedIconLabel","dynamicSlottedIcTypographyComps","contains","renderTopBar","isSDevice","hasTitle","isPropDefined","Component","attrs","class","id","size","theme","monochrome","onClick","ariaOwnsId","ref","slot","innerHTML","closeIcon","menuIcon","assign","name","watchExpandedHandler","componentWillLoad","componentDidLoad","checkResizeObserver","onComponentRequiredPropUndefined","prop","propName","disconnectedCallback","disconnect","removeEventListener","brandChangeHandler","detail","mode","render","status","version","isMdDevice","isLgDevice","displayExpandBtn","topBarProps","Host","key","IcBrandForegroundEnum","Dark","hasClassificationBanner","chevronIcon"],"sources":["src/components/ic-side-navigation/ic-side-navigation.css?tag=ic-side-navigation&encapsulation=shadow","src/components/ic-side-navigation/ic-side-navigation.tsx"],"sourcesContent":["/**\n * @prop --ic-z-index-side-navigation: z-index of side navigation panel\n */\n\n:host {\n display: block;\n\n --ic-typography-color: currentcolor;\n --side-navigation-position: fixed;\n --side-navigation-position-left: 0;\n --side-navigation-position-top: var(--ic-space-xxl);\n --side-navigation-height: var(--ic-space-xxl);\n --sm-side-navigation-top-bar-height: 3.5rem;\n --sm-side-navigation-collapsed-labels-width: 6rem;\n --sm-side-navigation-expand-transition-duration: var(\n --ic-transition-duration-slow\n );\n --side-navigation-width: 20rem;\n --sm-side-navigation-bottom-bar-height: 3.5rem;\n --keyline-lighten: var(--ic-space-1px) solid var(--ic-side-navigation-keyline);\n --keyline-darken: var(--ic-space-1px) solid var(--ic-state-layer-darken-20);\n\n --ic-button-secondary-text-monochrome: var(--ic-brand-text-color);\n --ic-button-secondary-border-monochrome: var(--ic-brand-text-color);\n z-index: var(--ic-z-index-side-navigation);\n}\n\n:host > * {\n box-sizing: border-box;\n}\n\n.side-navigation {\n display: flex;\n flex-direction: column;\n width: var(--side-navigation-width);\n color: var(--ic-side-navigation-text);\n position: var(--side-navigation-position);\n top: var(--side-navigation-position-top);\n left: calc(var(--side-navigation-width) * -1);\n bottom: 0;\n background-color: var(--ic-side-navigation-background);\n z-index: var(--ic-z-index-side-navigation);\n}\n\n:host(.ic-side-navigation-inline) .side-navigation {\n position: absolute;\n height: 100%;\n}\n\n:host(.anchor-right) .side-navigation {\n right: calc(var(--side-navigation-width) * -1);\n}\n\n.classification-spacing {\n margin-bottom: var(--ic-space-lg);\n}\n\n.navigation-list {\n padding: 0;\n margin: 0;\n list-style: none;\n}\n\n.side-navigation-inner {\n background-color: var(--ic-side-navigation-background);\n display: flex;\n flex-direction: column;\n flex: 1 1 0;\n overflow: auto;\n}\n\n:host(.ic-side-navigation-inline) .side-navigation-inner {\n flex: 1;\n}\n\n:host(.xs-menu-open) .side-navigation {\n transition: left var(--ic-easing-transition-slow);\n left: 0;\n}\n\n:host(:has(.xs-menu-open, .xs-menu-close)) ::slotted(ic-navigation-item) {\n --navigation-item-side-nav-right: var(--ic-space-xl);\n}\n\n:host(.xs-menu-close) .side-navigation {\n left: calc(var(--side-navigation-width) * -1);\n transition: left var(--ic-easing-transition-slow);\n}\n\n:host(.xs-menu-close) .side-navigation > * {\n visibility: hidden;\n}\n\n:host(.anchor-right.xs-menu-open) .side-navigation {\n right: 0;\n left: auto;\n}\n\n:host(.anchor-right.xs-menu-close) .side-navigation {\n right: calc(var(--side-navigation-width) * -1);\n left: auto;\n transition: right var(--ic-easing-transition-slow);\n}\n\n.bottom-wrapper {\n border-top: var(--keyline-lighten);\n bottom: 0;\n left: 0;\n z-index: 2;\n background-color: var(--ic-side-navigation-background);\n display: flex;\n flex-direction: column;\n}\n\n:host(.ic-side-navigation-inline) .bottom-wrapper {\n position: sticky;\n}\n\n:host(.ic-side-navigation-dark) .bottom-wrapper {\n border-top: var(--keyline-darken);\n}\n\n/* Mobile Top Bar */\n\n.top-bar {\n display: flex;\n flex-direction: row;\n align-items: center;\n min-height: var(--side-navigation-height);\n padding: var(--ic-space-xs);\n box-sizing: border-box;\n background-color: var(--ic-side-navigation-background);\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n border-bottom: var(--keyline-lighten);\n box-shadow: var(--ic-elevation-overlay);\n z-index: 2;\n overflow: hidden;\n visibility: visible;\n}\n\n:host(.ic-side-navigation-inline) .top-bar {\n position: absolute;\n}\n\n:host(.ic-side-navigation-dark) .top-bar {\n border-bottom: var(--keyline-darken);\n}\n\n.top-bar.dark a:focus {\n box-shadow: var(--ic-border-focus);\n}\n\n.app-title-wrapper {\n display: flex;\n margin-left: var(--ic-space-xs);\n border-left: var(--keyline-lighten);\n padding-left: var(--ic-space-xxs);\n color: var(--ic-side-navigation-text);\n align-items: center;\n}\n\n:host(.ic-side-navigation-dark) .app-title-wrapper {\n border-left: var(--keyline-darken);\n}\n\n.app-title-wrapper ic-typography h1 {\n margin: 0;\n}\n\n@media screen and (min-width: 340px) {\n .app-title-wrapper ic-typography {\n margin-left: var(--ic-space-xs);\n }\n}\n\n:host .title-link {\n display: flex;\n align-items: center;\n transition: box-shadow var(--ic-easing-transition-fast),\n background-color var(--ic-easing-transition-fast);\n text-decoration: none;\n padding: var(--ic-space-xxs);\n color: var(--ic-side-navigation-text);\n}\n\n:host .title-link:visited,\n:host .title-link:active {\n color: var(--ic-side-navigation-text);\n}\n\nslot[name=\"app-title\"]::slotted(a),\nslot[name=\"app-icon\"]::slotted(a) {\n color: var(--ic-side-navigation-text);\n outline: none;\n text-decoration: none;\n display: flex;\n}\n\nslot[name=\"app-title\"]::slotted(ic-typography),\nslot[name=\"app-title\"]::slotted(a) {\n margin-left: var(--ic-space-xs) !important;\n}\n\nslot[name=\"app-title\"]::slotted(a) {\n font: var(--ic-font-subtitle-small);\n}\n\n@media screen and (min-width: 577px) {\n :host(.sm-collapsed) slot[name=\"app-title\"]::slotted(ic-typography),\n :host(.sm-collapsed) slot[name=\"app-title\"]::slotted(a) {\n position: absolute;\n left: -9999px;\n opacity: 0;\n transition: opacity var(--ic-easing-transition-slow);\n }\n\n :host(.sm-expanded) slot[name=\"app-title\"]::slotted(a) {\n font: var(--ic-font-h3) !important;\n font-weight: var(--ic-font-weight-semibold) !important;\n margin-left: var(--ic-space-xs) !important;\n }\n}\n\n:host .title-link:hover {\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-side-navigation-hover);\n}\n\n:host .title-link:active {\n background-color: var(--ic-side-navigation-pressed);\n}\n\n:host .title-link:focus,\n:host .title-link:focus-within {\n border-radius: var(--ic-border-radius);\n box-shadow: var(--ic-border-focus);\n outline: var(--ic-hc-focus-outline);\n background-color: transparent;\n}\n\n:host .title-link ic-typography {\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.app-title-wrapper ::slotted(svg) {\n fill: var(--ic-side-navigation-text);\n}\n\n.app-icon-container {\n display: none;\n}\n\n.button-label {\n display: flex;\n align-items: center;\n}\n\n.mobile-top-bar-menu-icon {\n display: flex;\n}\n\n.menu-button {\n width: 6.5rem;\n}\n\n.app-status-wrapper {\n inset: 0 var(--ic-space-sm) 0 3.5rem;\n width: auto;\n display: flex;\n gap: var(--ic-space-xs);\n padding: var(--ic-space-sm) 0;\n justify-content: flex-end;\n align-items: flex-end;\n pointer-events: none;\n height: fit-content;\n margin: 0 var(--ic-space-xs);\n}\n\n.app-status-wrapper .app-version {\n display: flex;\n overflow-wrap: break-word;\n padding-bottom: var(--ic-space-xxs);\n}\n\n.app-status-wrapper .app-status {\n display: flex;\n border-radius: 1rem;\n background-color: var(--ic-side-navigation-text);\n color: var(--ic-side-navigation-status-tag-text);\n padding: var(--ic-space-xxs) var(--ic-space-lg);\n min-width: 1rem;\n}\n\n.app-status-wrapper .app-status-text {\n overflow-wrap: break-word;\n}\n\n:host(.ic-side-navigation-dark) .app-status-wrapper .app-status {\n --ic-typography-color: var(--ic-architectural-white);\n}\n\n.navigation-landmark-title {\n position: absolute;\n width: var(--ic-space-1px);\n height: var(--ic-space-1px);\n padding: 0;\n margin: calc(-1 * var(--ic-space-1px));\n overflow: hidden;\n}\n\n/* Navigation Group */\n\n::slotted(ic-navigation-group) {\n --navigation-group-height: 2.75rem;\n --navigation-group-width: 100%;\n --navigation-group-justify-content: space-between;\n --navigation-group-hover: var(--ic-side-navigation-hover);\n --navigation-group-text-hover: var(--ic-side-navigation-text);\n --navigation-item-child-height: 3.5rem;\n --navigation-item-child-active: var(--ic-action-dark-bg-pressed);\n --navigation-item-child-color: var(--ic-side-navigation-text);\n --navigation-group-expand-toggle-padding: 0.25rem;\n}\n\n/* Navigation Items */\n\n::slotted(ic-navigation-item),\n::slotted(ic-navigation-group) {\n --navigation-item-justify-content: flex-start;\n --navigation-item-min-height: 56px;\n --navigation-item-height: auto;\n}\n\n/* Toggle Chevron */\n\n.bottom-side-nav {\n position: relative;\n align-content: flex-end;\n min-height: var(--sm-side-navigation-top-bar-height);\n}\n\n.bottom-side-nav ic-divider {\n position: absolute;\n top: 0;\n}\n\n.primary-navigation {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n\n /* Hide scrollbar when required but keep functionality */\n scrollbar-width: none;\n}\n\n.primary-navigation::-webkit-scrollbar {\n display: none;\n}\n\n.primary-navigation,\n.secondary-navigation {\n overflow-x: hidden;\n}\n\n.bottom-side-nav .menu-expand-button {\n position: absolute;\n display: none;\n}\n\n.menu-visibility-visible {\n visibility: visible;\n width: 100%;\n}\n\n.app-title-show {\n min-width: 15.5rem;\n}\n\n:host(.side-display) {\n display: flex;\n flex-direction: column;\n height: 100vh;\n position: var(--side-navigation-position);\n left: 0;\n top: 0;\n bottom: 0;\n}\n\n:host(.side-display) .app-icon-container {\n height: 40px;\n display: flex;\n align-items: center;\n}\n\n:host(.side-display) .top-bar {\n --side-navigation-height: var(--sm-side-navigation-top-bar-height);\n\n position: relative;\n padding: 0;\n box-shadow: none;\n}\n\n:host(.ic-side-navigation-inline.side-display) .top-bar {\n position: sticky;\n}\n\n:host(.anchor-right.side-display) .top-bar {\n box-shadow: 0.188rem 0.188rem 0.5rem rgb(0 0 0 / 20%);\n}\n\n:host(.anchor-right.side-display) .bottom-wrapper {\n box-shadow: 0.188rem -0.188rem 0.5rem rgb(0 0 0 / 20%);\n}\n\n:host(.side-display) .side-navigation,\n:host(.side-display) .top-bar {\n width: var(--sm-side-navigation-top-bar-height);\n}\n\n:host(.sm-collapsed.side-display) {\n width: var(--sm-side-navigation-top-bar-height);\n transition: width var(--ic-easing-transition-slow);\n}\n\n:host(.sm-collapsed.collapsed-labels.side-display) {\n width: var(--sm-side-navigation-collapsed-labels-width);\n}\n\n:host(.sm-expanded.side-display) {\n width: var(--side-navigation-width);\n transition: width var(--ic-easing-transition-slow);\n box-shadow: var(--ic-elevation-overlay);\n}\n\n:host(.side-display) .side-navigation {\n --side-navigation-position-top: 0;\n\n flex: 1;\n position: relative;\n top: auto;\n left: auto;\n bottom: auto;\n}\n\n:host(.ic-side-navigation-inline.side-display) .side-navigation {\n position: relative;\n}\n\n:host(.anchor-right.side-display) .side-navigation {\n left: auto;\n right: 0;\n}\n\n:host(.side-display) .app-title-wrapper {\n margin-left: 0;\n border-left: none;\n padding: var(--ic-space-xs) var(--ic-space-sm);\n}\n\n:host(.side-display) .app-title-wrapper ::slotted(svg) {\n height: var(--ic-space-lg);\n width: var(--ic-space-lg);\n}\n\n:host(.side-display) .app-title-wrapper ic-typography {\n font-weight: var(--ic-font-weight-semibold);\n}\n\n:host(.sm-collapsed.side-display) .app-title-wrapper ic-typography {\n position: absolute;\n left: -9999px;\n opacity: 0;\n transition: opacity var(--ic-easing-transition-slow);\n}\n\n:host(.sm-expanded.side-display) ic-typography {\n position: relative;\n left: 0;\n}\n\n:host(.sm-expanded.side-display) :is(.side-navigation, .top-bar) {\n width: var(--side-navigation-width);\n transition: width var(--ic-easing-transition-slow);\n}\n\n:host(.sm-collapsed.side-display) :is(.side-navigation, .top-bar) {\n width: var(--sm-side-navigation-top-bar-height);\n transition: width var(--ic-easing-transition-slow);\n}\n\n:host(.anchor-right.sm-expanded.side-display) :is(.side-navigation, .top-bar) {\n left: auto;\n right: 0;\n}\n\n:host(.side-display) .app-status-wrapper,\n:host(.sm-collapsed.side-display) .app-status-wrapper {\n display: none;\n margin-left: 0;\n}\n\n:host(.sm-expanded.side-display) .app-status-wrapper {\n display: flex;\n max-width: 16rem;\n margin-right: calc(var(--ic-space-xxxs) + var(--ic-space-xs));\n}\n\n:host(.side-display) .bottom-side-nav {\n justify-items: flex-end;\n align-items: flex-end;\n justify-content: flex-end;\n display: flex;\n outline: none;\n}\n\n:host(.side-display) .bottom-side-nav .menu-expand-button {\n padding-left: var(--ic-space-md);\n height: var(--sm-side-navigation-top-bar-height);\n width: 100%;\n color: var(--ic-side-navigation-text);\n background-color: transparent;\n outline: var(--ic-hc-focus-outline);\n border: none;\n cursor: pointer;\n display: flex;\n transition: var(--ic-easing-transition-fast);\n}\n\n:host(.sm-expanded.side-display) .bottom-side-nav .menu-expand-button {\n height: 100%;\n}\n\n:host(.side-display) .bottom-side-nav .menu-expand-button svg {\n justify-items: flex-start;\n align-self: center;\n display: inline-block;\n width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n}\n\n:host(.side-display) .bottom-side-nav .menu-expand-button:hover {\n background-color: var(--ic-side-navigation-hover);\n}\n\n:host(.side-display) .bottom-side-nav .menu-expand-button:focus {\n box-shadow: var(--ic-border-focus-inset);\n border-radius: var(--ic-border-radius-inset);\n background-color: transparent;\n}\n\n:host(.sm-collapsed.side-display) .bottom-side-nav .menu-expand-button svg {\n transform: scaleX(1);\n transition: transform var(--ic-easing-transition-slow);\n}\n\n:host(.sm-expanded.side-display) .bottom-side-nav .menu-expand-button svg {\n transform: scaleX(-1);\n transition: transform var(--ic-easing-transition-slow);\n align-self: flex-end;\n margin-bottom: 0.875rem;\n}\n\n:host(.anchor-right.sm-collapsed.side-display)\n .bottom-side-nav\n .menu-expand-button\n svg {\n transform: scaleX(-1);\n}\n\n:host(.anchor-right.sm-expanded.side-display)\n .bottom-side-nav\n .menu-expand-button\n svg {\n transform: scaleX(1);\n}\n\n:host(.sm-collapsed.side-display) ::slotted(ic-navigation-item) {\n --navigation-item-label-opacity: 1;\n}\n\n:host(.sm-collapsed.side-display) ::slotted(ic-navigation-item),\n:host(.sm-collapsed.side-display) ::slotted(ic-navigation-group) {\n --navigation-item-label-opacity: 0;\n --navigation-item-min-height: 3.5rem;\n --navigation-item-height: 3.5rem;\n}\n\n:host(.sm-expanded.side-display) ::slotted(ic-navigation-item),\n:host(.sm-expanded.side-display) ::slotted(ic-navigation-group) {\n --navigation-item-label-opacity: 1;\n --navigation-item-height: auto;\n --navigation-item-min-height: 3.5rem;\n --navigation-item-width: 20rem;\n --navigation-item-side-nav-right: var(--ic-space-xl);\n}\n\n:host(.sm-collapsed.side-display) ::slotted(ic-navigation-group) {\n --navigation-group-title-position: absolute;\n --navigation-group-title-position-left: -9999px;\n --navigation-group-title-opacity: none;\n}\n\n:host(.sm-expanded.side-display) ::slotted(ic-navigation-group) {\n --navigation-group-title-position: relative;\n --navigation-group-title-position-left: 0;\n --navigation-group-expand-toggle-padding: 0.25rem;\n --navigation-group-title-opacity: flex;\n}\n\n:host(.sm-collapsed.collapsed-labels.side-display) .side-navigation,\n:host(.sm-collapsed.collapsed-labels.side-display) .top-bar {\n width: var(--sm-side-navigation-collapsed-labels-width);\n}\n\n:host(.sm-collapsed.collapsed-labels.side-display) .menu-expand-button {\n padding: 0;\n}\n\n:host(.sm-collapsed.collapsed-labels.side-display) .app-title-wrapper {\n width: 100%;\n justify-content: center;\n}\n\n:host(.sm-collapsed.collapsed-labels.side-display)\n ::slotted(ic-navigation-group) {\n --navigation-group-justify-content: center;\n --navigation-item-label-opacity: 1;\n --navigation-group-item-min-width: 100%;\n --navigation-group-expand-toggle-padding: 1rem;\n}\n\n:host(.collapsed-labels.side-display) .bottom-side-nav .menu-expand-button {\n justify-content: center;\n}\n\n:host(.side-display) .collapsed-icon-labels-start {\n visibility: hidden;\n opacity: 0;\n}\n\n:host(.side-display) .collapsed-icon-labels-end {\n visibility: visible;\n opacity: 1;\n transition: visibility 0s, opacity var(--ic-easing-transition-slow);\n}\n\n/* Media Queries */\n\n@media screen and (max-width: 419px) {\n .top-bar {\n height: var(--side-navigation-height);\n }\n .side-navigation {\n width: 100%;\n }\n}\n\n@media screen and (min-width: 340px) {\n .app-icon-container {\n display: flex;\n }\n}\n\n@media screen and (min-width: 993px) {\n :host(.side-display) {\n position: sticky;\n left: auto;\n top: 0;\n bottom: 0;\n }\n\n :host(.sm-expanded.side-display) {\n box-shadow: none;\n }\n}\n\n@media (forced-colors: active) {\n .side-navigation,\n .top-bar {\n border-right: var(--ic-border-hc);\n }\n\n .menu-expand-button {\n color: Highlight !important;\n }\n\n slot[name=\"app-icon\"]::slotted(svg) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n State,\n Element,\n Listen,\n Event,\n EventEmitter,\n Watch,\n} from \"@stencil/core\";\n\nimport menuIcon from \"../../assets/hamburger-menu-icon.svg\";\nimport closeIcon from \"../../assets/close-icon.svg\";\nimport chevronIcon from \"../../assets/chevron-icon.svg\";\nimport {\n getCurrentDeviceSize,\n DEVICE_SIZES,\n checkResizeObserver,\n isSlotUsed,\n getBrandForegroundAppearance,\n getCssProperty,\n hasClassificationBanner,\n onComponentRequiredPropUndefined,\n isEmptyString,\n isPropDefined,\n} from \"../../utils/helpers\";\nimport {\n IcBrand,\n IcBrandForeground,\n IcBrandForegroundEnum,\n} from \"../../utils/types\";\nimport { IcTopBar, IcExpandedDetail } from \"./ic-side-navigation.types\";\n\n/**\n * @slot app-icon - Content will be rendered adjacent to the app title at the very top of the side navigation.\n * @slot app-title - Handle routing by nesting a route in the app title.\n * @slot primary-navigation - Content will be rendered at the top of the side navigation.\n * @slot secondary-navigation - Content will be rendered at the bottom of the side navigation.\n */\n\n@Component({\n tag: \"ic-side-navigation\",\n styleUrl: \"ic-side-navigation.css\",\n shadow: true,\n})\nexport class SideNavigation {\n private ANIMATION_DURATION =\n parseInt(getCssProperty(\"--ic-transition-duration-slow\")) || 0;\n private IC_NAVIGATION_ITEM: string = \"ic-navigation-item\";\n private resizeObserver: ResizeObserver | null = null;\n private COLLAPSED_ICON_LABELS_END = \"collapsed-icon-labels-end\";\n private COLLAPSED_ICON_LABELS_START = \"collapsed-icon-labels-start\";\n private menuButton?: HTMLIcButtonElement;\n\n @Element() el: HTMLIcSideNavigationElement;\n\n @State() deviceSize: number = getCurrentDeviceSize();\n @State() deviceSizeAppTitle: number = DEVICE_SIZES.S;\n @State() foregroundColor: IcBrandForeground = getBrandForegroundAppearance();\n @State() hasSecondaryNavigation: boolean = false;\n @State() menuExpanded: boolean = false;\n @State() menuOpen: boolean = false;\n\n /**\n * The app title to be displayed. This is required, unless a slotted app title link is used.\n */\n @Prop() appTitle?: string;\n\n /**\n * If `true`, the icon and label will appear when side navigation is collapsed.\n */\n @Prop() collapsedIconLabels?: boolean = false;\n\n /**\n * If `true`, automatic parent wrapper styling will be disabled.\n */\n @Prop() disableAutoParentStyling?: boolean = false;\n\n /**\n * If `true`, the side navigation will not display as a top bar on small devices.\n */\n @Prop() disableTopBarBehaviour?: boolean = false;\n\n /**\n * If `true`, the side navigation will display in an expanded state.\n */\n @Prop() expanded?: boolean = false;\n\n @Watch(\"expanded\")\n watchExpandedHandler(): void {\n this.toggleMenuExpanded(this.expanded!);\n }\n\n /**\n * The URL that the app title link points to.\n */\n @Prop() href?: string = \"/\";\n\n /**\n * @internal If `true`, side navigation will be contained by its parent element.\n */\n @Prop() inline?: boolean = false;\n\n /**\n * The short title of the app to be displayed at small screen sizes in place of the app title.\n */\n @Prop() shortAppTitle?: string = \"\";\n\n /**\n * If `true`, the menu expand button will be removed (PLEASE NOTE: This takes effect on screen sizes 992px and above).\n */\n @Prop() static?: boolean = false;\n\n /**\n * The status of the app to be displayed.\n */\n @Prop() status?: string;\n\n /**\n * The version of the app to be displayed.\n */\n @Prop() version?: string;\n\n /**\n * Emitted when the side navigation is collapsed and expanded.\n */\n @Event() icSideNavExpanded: EventEmitter<IcExpandedDetail>;\n\n componentWillLoad(): void {\n this.setMenuExpanded(this.expanded!);\n\n if (this.collapsedIconLabels) {\n this.setCollapsedIconLabels();\n }\n\n this.hasSecondaryNavigation = isSlotUsed(this.el, \"secondary-navigation\");\n }\n\n componentDidLoad(): void {\n this.emitSideNavigationExpanded({\n sideNavExpanded: this.menuExpanded,\n sideNavMobile:\n this.deviceSize === DEVICE_SIZES.S && !this.disableTopBarBehaviour,\n });\n\n checkResizeObserver(this.runResizeObserver);\n this.styleSlottedCollapsedIconLabel();\n this.arrangeSlottedNavigationItem(this.menuExpanded);\n this.displayTooltipWithExpandedLongLabel(this.menuExpanded);\n\n this.setExpandedButtonHeight();\n\n !isSlotUsed(this.el, \"app-title\") &&\n onComponentRequiredPropUndefined(\n [{ prop: this.appTitle, propName: \"app-title\" }],\n \"Side Navigation\"\n );\n }\n\n disconnectedCallback(): void {\n if (this.resizeObserver !== null) {\n this.resizeObserver.disconnect();\n }\n\n this.el?.removeEventListener(\"transitionend\", this.transitionEndHandler);\n }\n\n @Listen(\"brandChange\", { target: \"document\" })\n brandChangeHandler({ detail }: CustomEvent<IcBrand>): void {\n this.foregroundColor = detail.mode;\n }\n\n private emitSideNavigationExpanded = (objDetails: {\n sideNavExpanded: boolean;\n sideNavMobile?: boolean;\n }): void => {\n this.icSideNavExpanded.emit({\n sideNavExpanded: objDetails.sideNavExpanded,\n sideNavMobile: !!objDetails.sideNavMobile,\n });\n };\n\n private toggleMenu = (): void => {\n this.menuOpen = !this.menuOpen;\n this.setMobileMenuAriaAttributes(this.menuOpen);\n\n this.arrangeSlottedNavigationItem(this.menuOpen);\n\n this.setToggleMenuFlyoutMenuVisibility(this.menuOpen);\n\n this.emitSideNavigationExpanded({\n sideNavExpanded: this.menuOpen,\n sideNavMobile: true,\n });\n };\n\n private setToggleMenuFlyoutMenuVisibility = (menuOpen: boolean) => {\n const sideNav = this.el.shadowRoot?.querySelector(\n \"#side-navigation\"\n ) as HTMLDivElement;\n const sideNavInner = sideNav.querySelector(\n \".side-navigation-inner\"\n ) as HTMLElement;\n const bottomWrapper = sideNav.querySelector(\n \".bottom-wrapper\"\n ) as HTMLElement;\n\n const menuVisibilityVisible = \"menu-visibility-visible\";\n\n if (menuOpen) {\n bottomWrapper.classList.add(menuVisibilityVisible);\n sideNavInner.classList.add(menuVisibilityVisible);\n } else {\n setTimeout(() => {\n sideNavInner.classList.remove(menuVisibilityVisible);\n bottomWrapper.classList.remove(menuVisibilityVisible);\n }, this.ANIMATION_DURATION);\n }\n };\n\n private setMobileMenuAriaAttributes = (menuOpen: boolean) => {\n if (this.menuButton) {\n this.menuButton.setAttribute(\"aria-expanded\", `${menuOpen}`);\n this.menuButton.setAttribute(\n \"aria-label\",\n `${menuOpen ? \"Close\" : \"Open\"} navigation menu`\n );\n }\n };\n\n private setAndRemoveNoWrapAfterMenuExpanded = () => {\n const appTitle =\n this.el.shadowRoot?.querySelector(\".title-link ic-typography\") ||\n this.el.querySelector(\"[slot='app-title']\");\n\n appTitle?.classList.add(\"ic-typography-no-wrap\");\n\n setTimeout(() => {\n appTitle?.classList.remove(\"ic-typography-no-wrap\");\n }, this.ANIMATION_DURATION);\n };\n\n private toggleMenuExpanded = (expanded: boolean): void => {\n if (this.deviceSize > DEVICE_SIZES.S) {\n this.menuExpanded = expanded;\n }\n\n if (this.menuExpanded) {\n this.setAndRemoveNoWrapAfterMenuExpanded();\n this.el.shadowRoot\n ?.querySelector(\".app-title-inner-wrapper\")\n ?.classList.add(\"app-title-show\");\n } else {\n this.el.style.setProperty(\"--navigation-item-width\", \"320px\");\n this.el.shadowRoot\n ?.querySelector(\".app-title-inner-wrapper\")\n ?.classList.remove(\"app-title-show\");\n\n this.el.addEventListener(\"transitionend\", (e) => {\n if (e.propertyName === \"width\") {\n this.el.style.setProperty(\"--navigation-item-width\", null);\n }\n });\n }\n\n this.arrangeSlottedNavigationItem(this.menuExpanded);\n\n this.displayTooltipWithExpandedLongLabel(this.menuExpanded);\n\n if (this.collapsedIconLabels) {\n this.animateCollapsedIconLabels();\n }\n\n this.setExpandedButtonHeight();\n this.emitSideNavigationExpanded({ sideNavExpanded: this.menuExpanded });\n };\n\n /**\n * In order to style nested slotted elements (e.g. using React Router components), this method\n * rearranges the a tag and labels and adds inline styling expand/collapsed animations as external CSS classes are not\n * do not take affect.\n * @param menuExpanded boolean - true or false depending on side navigation state\n */\n private arrangeSlottedNavigationItem = (menuExpanded?: boolean) => {\n const navItems = this.el.querySelectorAll(\"ic-navigation-item\");\n navItems.forEach((navItem) => {\n const isNamedSlot = isSlotUsed(navItem, \"navigation-item\");\n const isUnnamedSlot =\n navItem.children[0] && !navItem.children[0].getAttribute(\"slot\");\n if (isNamedSlot || isUnnamedSlot) {\n let navItemSlot;\n if (isNamedSlot) {\n navItemSlot = navItem.querySelector(\"[slot='navigation-item']\");\n } else {\n navItemSlot = navItem.children[0];\n }\n const iconWrapper = document.createElement(\"div\");\n const icon = navItemSlot?.querySelector(\"svg\");\n const label = navItem.textContent?.trim();\n const icTypography = document.createElement(\"ic-typography\");\n icTypography.classList.add(\n \"ic-typography-label\",\n \"hydrated\",\n \"navigation-item-side-nav-slotted-text\"\n );\n\n iconWrapper.style.height = \"var(--ic-space-lg)\";\n\n icon && iconWrapper.append(icon);\n\n if (label) {\n icTypography.textContent = label;\n }\n\n if (navItemSlot) {\n navItemSlot.textContent = \"\";\n navItemSlot.append(iconWrapper);\n navItemSlot.append(icTypography);\n }\n\n if (this.collapsedIconLabels) {\n this.styleSlottedCollapsedIconLabels(!!menuExpanded, icTypography);\n } else {\n this.styleSlottedIconLabels(!!menuExpanded, icTypography);\n }\n }\n });\n };\n\n private styleSlottedCollapsedIconLabels = (\n menuExpanded: boolean,\n icTypography: HTMLIcTypographyElement\n ) => {\n if (menuExpanded) {\n icTypography.style.marginTop = \"0\";\n icTypography.style.whiteSpace = \"nowrap\";\n icTypography.style.overflow = \"hidden\";\n icTypography.style.textOverflow = \"ellipsis\";\n } else {\n icTypography.style.marginTop = \"10px\";\n icTypography.style.whiteSpace = \"nowrap\";\n icTypography.style.overflow = \"hidden\";\n icTypography.style.textOverflow = \"ellipsis\";\n }\n };\n\n private setExpandedButtonHeight = () => {\n const appStatusWrapper = this.el.shadowRoot?.querySelector(\n \"#side-navigation > .bottom-wrapper > .bottom-side-nav > .app-status-wrapper\"\n ) as HTMLDivElement;\n\n if (appStatusWrapper.offsetHeight !== 0) {\n this.el.style.setProperty(\n \"--sm-side-navigation-bottom-bar-height\",\n `${appStatusWrapper.offsetHeight}px`\n );\n }\n };\n\n private styleSlottedIconLabels = (\n menuExpanded: boolean,\n icTypography: HTMLSpanElement\n ) => {\n if (menuExpanded) {\n icTypography.style.opacity = \"1\";\n icTypography.style.visibility = \"visible\";\n icTypography.style.transition =\n \"visibility 0s, opacity var(--ic-easing-transition-slow)\";\n } else {\n icTypography.style.opacity = \"0\";\n icTypography.style.visibility = \"hidden\";\n icTypography.style.transition =\n \"visibility 0s, opacity var(--ic-easing-transition-slow)\";\n }\n };\n\n private transitionHandler = (type: string) => {\n const primaryNavigationWrapper = this.el.shadowRoot?.querySelector(\n \".primary-navigation\"\n );\n\n const secondaryNavigationWrapper = this.el.shadowRoot?.querySelector(\n \".bottom-wrapper > .secondary-navigation\"\n );\n\n const classToRemove =\n type === \"start\"\n ? this.COLLAPSED_ICON_LABELS_END\n : this.COLLAPSED_ICON_LABELS_START;\n\n const classToAdd =\n type === \"start\"\n ? this.COLLAPSED_ICON_LABELS_START\n : this.COLLAPSED_ICON_LABELS_END;\n\n if (primaryNavigationWrapper) {\n primaryNavigationWrapper.classList.remove(classToRemove);\n primaryNavigationWrapper.classList.add(classToAdd);\n }\n\n if (secondaryNavigationWrapper) {\n secondaryNavigationWrapper.classList.remove(classToRemove);\n secondaryNavigationWrapper.classList.add(classToAdd);\n }\n };\n\n private transitionEndHandler = () => {\n this.transitionHandler(\"end\");\n };\n\n private animateCollapsedIconLabels = () => {\n this.transitionHandler(\"start\");\n this.transitionEndHandler();\n\n this.el.addEventListener(\"transitionend\", this.transitionEndHandler);\n };\n\n private paddingIconWidth = (\n navItems: HTMLIcNavigationItemElement[]\n ): number => {\n const navItemLink =\n (navItems[0].shadowRoot &&\n (navItems[0].shadowRoot.querySelector(\"ic-tooltip a\") ||\n navItems[0].shadowRoot.querySelector(\"ic-tooltip div\"))) ||\n navItems[0].querySelector(\"a\") ||\n navItems[0].querySelector(\"div\");\n const navItemSVG = navItems[0].querySelector(\"svg\");\n\n if (navItemLink && navItemSVG) {\n const navStyles = {\n gap: window.getComputedStyle(navItemLink).gap,\n iconWidth: window.getComputedStyle(navItemSVG).width,\n paddingLeft: window.getComputedStyle(navItemLink).paddingLeft,\n };\n\n return Object.values(navStyles).reduce((prev, curr) => {\n return (prev += parseInt(curr));\n }, 0);\n }\n\n return 0;\n };\n\n private displayTooltipWithExpandedLongLabel = (menuExpanded: boolean) => {\n let timer;\n\n if (menuExpanded) {\n timer = setTimeout(() => {\n const sideNavWidth = this.el.clientWidth;\n\n const navigationItems: HTMLIcNavigationItemElement[] = Array.from(\n this.el.querySelectorAll(this.IC_NAVIGATION_ITEM)\n );\n\n const paddingIconDelta = navigationItems.length\n ? this.paddingIconWidth(navigationItems)\n : 0;\n\n navigationItems.forEach(\n (navigationItem: HTMLIcNavigationItemElement) => {\n const icTypographyScrollWidth =\n (\n navigationItem.shadowRoot &&\n navigationItem.shadowRoot.querySelector(\n \"ic-tooltip .link ic-typography.ic-typography-label\"\n )\n )?.scrollWidth ||\n navigationItem.querySelector(\"ic-typography.ic-typography-label\")\n ?.scrollWidth;\n\n if (\n icTypographyScrollWidth &&\n icTypographyScrollWidth > sideNavWidth - paddingIconDelta\n ) {\n navigationItem.setAttribute(\"display-navigation-tooltip\", \"true\");\n }\n }\n );\n }, this.ANIMATION_DURATION);\n } else {\n clearTimeout(timer);\n\n const navigationItems: HTMLIcNavigationItemElement[] = Array.from(\n this.el.querySelectorAll(this.IC_NAVIGATION_ITEM)\n );\n navigationItems.forEach((navigationItem: HTMLIcNavigationItemElement) => {\n navigationItem.setAttribute(\"display-navigation-tooltip\", \"false\");\n });\n }\n };\n\n private setMenuExpanded = (expanded: boolean): void => {\n this.menuExpanded = expanded;\n };\n\n /**\n * As the mobile top bar is fixed, a padding top is required\n * to push main content down the height of the mobile top bar\n * @param value - padding-top css value\n */\n private setParentPaddingTop = (value: string) => {\n this.el.parentElement?.style.setProperty(\"padding-top\", value);\n };\n\n private setParentPaddingLeft = (value: string) => {\n this.el.parentElement?.style.setProperty(\"padding-left\", value);\n };\n\n private renderAppTitle = (isAppNameSubtitleVariant: boolean) => {\n const displayShortAppTitle =\n this.deviceSize <= DEVICE_SIZES.S && !isEmptyString(this.shortAppTitle!);\n return (\n <ic-typography\n variant={\n displayShortAppTitle || isAppNameSubtitleVariant\n ? \"subtitle-small\"\n : \"h3\"\n }\n aria-label={\n displayShortAppTitle\n ? `${this.appTitle} (${this.shortAppTitle})`\n : undefined\n }\n >\n <h1>{displayShortAppTitle ? this.shortAppTitle : this.appTitle}</h1>\n </ic-typography>\n );\n };\n\n private resizeObserverCallback = (currSize: number) => {\n this.deviceSize = currSize;\n\n const isSmallAndDisableTopBar =\n currSize === DEVICE_SIZES.S && !this.disableTopBarBehaviour;\n\n if (!this.disableAutoParentStyling) {\n const topBarHeight =\n this.el.shadowRoot?.querySelector(\".top-bar\")?.scrollHeight;\n this.setParentPaddingTop(\n isSmallAndDisableTopBar ? `${topBarHeight}px` : \"0\"\n );\n if (isSmallAndDisableTopBar) this.setParentPaddingLeft(\"0\");\n if (isSmallAndDisableTopBar && this.inline) {\n this.el.parentElement?.style.setProperty(\n \"height\",\n `calc(100% - ${topBarHeight}px)`\n );\n } else if (!isSmallAndDisableTopBar) {\n this.el.parentElement?.style.setProperty(\"height\", \"100%\");\n }\n }\n\n if (!this.disableAutoParentStyling) {\n const paddingLeft = `calc(var(--ic-space-xxl) ${\n this.collapsedIconLabels ? \"* 2\" : \"+ var(--ic-space-xs)\"\n })`;\n\n if (currSize > DEVICE_SIZES.L) {\n this.setParentPaddingTop(\"0\");\n this.setParentPaddingLeft(\"0\");\n } else if (\n (currSize > DEVICE_SIZES.S || this.disableTopBarBehaviour) &&\n currSize <= DEVICE_SIZES.M &&\n this.static\n ) {\n this.setParentPaddingLeft(paddingLeft);\n } else if (\n (currSize > DEVICE_SIZES.S || this.disableTopBarBehaviour) &&\n currSize <= DEVICE_SIZES.L\n ) {\n this.setParentPaddingLeft(\n this.static && this.menuExpanded\n ? \"calc(var(--ic-space-xl) * 10)\"\n : paddingLeft\n );\n }\n }\n };\n\n private runResizeObserver = () => {\n this.resizeObserver = new ResizeObserver(() => {\n const currSize = getCurrentDeviceSize();\n this.deviceSizeAppTitle = currSize;\n this.resizeObserverCallback(currSize);\n });\n\n this.resizeObserver.observe(document.body, { box: \"content-box\" });\n };\n\n private setCollapsedIconLabels = () => {\n const navigationItems: HTMLIcNavigationItemElement[] = Array.from(\n this.el.querySelectorAll(this.IC_NAVIGATION_ITEM)\n );\n navigationItems.forEach((navigationItem: HTMLIcNavigationItemElement) => {\n navigationItem.setAttribute(\"collapsed-icon-label\", \"true\");\n });\n };\n\n private styleSlottedCollapsedIconLabel = () => {\n const dynamicSlottedIcTypographyComps: HTMLIcTypographyElement[] =\n Array.from(\n this.el.querySelectorAll(\".navigation-item-side-nav-slotted-text\")\n );\n\n dynamicSlottedIcTypographyComps.forEach((icTypography) => {\n if (\n icTypography.parentElement?.parentElement?.classList.contains(\n \"navigation-item-side-nav-collapsed-with-label\"\n )\n ) {\n icTypography.style.whiteSpace = \"nowrap\";\n icTypography.style.overflow = \"hidden\";\n icTypography.style.textOverflow = \"ellipsis\";\n icTypography.style.marginTop = \"10px\";\n }\n });\n };\n\n private renderTopBar = ({\n isSDevice,\n foregroundColor,\n menuOpen,\n href,\n isAppNameSubtitleVariant,\n }: IcTopBar) => {\n const hasTitle = this.appTitle !== \"\" && isPropDefined(this.appTitle);\n\n const Component = isSlotUsed(this.el, \"app-title\") ? \"div\" : \"a\";\n\n const attrs = Component == \"a\" && {\n href: href,\n };\n\n return (\n <div\n class={{\n \"top-bar\": true,\n [this.foregroundColor]: true,\n }}\n >\n {isSDevice && (\n <nav\n aria-labelledby=\"menu-navigation-toggle-button-landmark\"\n aria-hidden=\"false\"\n >\n <ic-button\n aria-label=\"Open navigation menu\"\n class=\"menu-button\"\n id=\"menu-button\"\n variant=\"secondary\"\n size=\"small\"\n full-width=\"true\"\n theme={\n foregroundColor == \"default\" || foregroundColor == \"light\"\n ? \"light\"\n : \"dark\"\n }\n monochrome\n onClick={this.toggleMenu}\n ariaOwnsId=\"side-navigation\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n ref={(el) => (this.menuButton = el)}\n >\n <span\n class=\"mobile-top-bar-menu-icon\"\n slot=\"left-icon\"\n innerHTML={menuOpen ? closeIcon : menuIcon}\n ></span>\n {menuOpen ? \"Close\" : \"Menu\"}\n </ic-button>\n <span\n id=\"menu-navigation-toggle-button-landmark\"\n class=\"navigation-landmark-title\"\n aria-hidden=\"true\"\n >\n Navigation menu toggle button\n </span>\n </nav>\n )}\n <div class=\"app-title-wrapper\">\n {(hasTitle || isSlotUsed(this.el, \"app-title\")) && (\n <Component {...attrs} class=\"title-link\">\n <div class=\"app-icon-container\" aria-hidden=\"true\">\n <slot name=\"app-icon\"></slot>\n </div>\n <div class=\"app-title-inner-wrapper\">\n {isSlotUsed(this.el, \"app-title\") ? (\n <slot name=\"app-title\"></slot>\n ) : (\n this.renderAppTitle(isAppNameSubtitleVariant)\n )}\n </div>\n </Component>\n )}\n </div>\n </div>\n );\n };\n\n render() {\n const {\n appTitle,\n menuOpen,\n foregroundColor,\n menuExpanded,\n href,\n status,\n version,\n collapsedIconLabels,\n inline,\n } = this;\n\n const isSDevice =\n !this.disableTopBarBehaviour && this.deviceSize === DEVICE_SIZES.S;\n const isMdDevice = this.deviceSize === DEVICE_SIZES.M;\n const isLgDevice = this.deviceSize >= DEVICE_SIZES.L;\n const isAppNameSubtitleVariant = this.deviceSizeAppTitle === DEVICE_SIZES.S;\n const displayExpandBtn =\n isMdDevice || this.disableTopBarBehaviour || (isLgDevice && !this.static);\n\n const topBarProps: IcTopBar = {\n isSDevice,\n foregroundColor,\n menuOpen,\n href: href!,\n isAppNameSubtitleVariant,\n appTitle: appTitle || \"\",\n };\n\n return (\n <Host\n class={{\n \"xs-menu-open\": menuOpen && isSDevice,\n \"xs-menu-close\": !menuOpen && isSDevice,\n \"sm-collapsed\": !isSDevice && !menuExpanded,\n \"sm-expanded\": !isSDevice && menuExpanded,\n \"side-display\":\n this.deviceSize > DEVICE_SIZES.S || !!this.disableTopBarBehaviour,\n [`ic-side-navigation-${IcBrandForegroundEnum.Dark}`]:\n foregroundColor === IcBrandForegroundEnum.Dark,\n [\"collapsed-labels\"]:\n !isSDevice && !menuExpanded && !!collapsedIconLabels,\n [\"ic-side-navigation-inline\"]: !!inline,\n }}\n >\n {isSDevice && this.renderTopBar({ ...topBarProps })}\n <div class=\"side-navigation\" id=\"side-navigation\">\n {!isSDevice && this.renderTopBar({ ...topBarProps })}\n <div class=\"side-navigation-inner\">\n {isSlotUsed(this.el, \"primary-navigation\") && (\n <nav\n class=\"primary-navigation\"\n aria-labelledby=\"primary-navigation-landmark\"\n >\n <span\n aria-hidden=\"true\"\n class=\"navigation-landmark-title\"\n id=\"primary-navigation-landmark\"\n >\n Primary\n </span>\n <ul class=\"navigation-list\">\n <slot name=\"primary-navigation\"></slot>\n </ul>\n </nav>\n )}\n </div>\n <div\n class={{\n [\"bottom-wrapper\"]: true,\n [\"classification-spacing\"]: hasClassificationBanner(),\n }}\n >\n {isSlotUsed(this.el, \"secondary-navigation\") && (\n <nav\n class=\"secondary-navigation\"\n aria-labelledby=\"secondary-navigation-landmark\"\n >\n <span\n aria-hidden=\"true\"\n class=\"navigation-landmark-title\"\n id=\"secondary-navigation-landmark\"\n >\n Secondary\n </span>\n <ul class=\"navigation-list\">\n <slot name=\"secondary-navigation\"></slot>\n </ul>\n </nav>\n )}\n <div class=\"bottom-side-nav\">\n {this.hasSecondaryNavigation && <ic-divider></ic-divider>}\n {displayExpandBtn && (\n <button\n class=\"menu-expand-button\"\n innerHTML={chevronIcon}\n onClick={() => this.toggleMenuExpanded(!this.menuExpanded)}\n aria-label={`${\n menuExpanded ? \"Collapse\" : \"Expand\"\n } side navigation`}\n ></button>\n )}\n <div class=\"app-status-wrapper\">\n {status !== \"\" && (\n <div\n class={{\n [\"app-status\"]: true,\n }}\n >\n <ic-typography\n aria-label=\"app tag\"\n variant=\"label-uppercase\"\n class=\"app-status-text\"\n >\n {status}\n </ic-typography>\n </div>\n )}\n {version !== \"\" && (\n <ic-typography\n variant=\"label\"\n class=\"app-version\"\n aria-label=\"app version\"\n >\n {version}\n </ic-typography>\n )}\n </div>\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["icPopoverMenuCss","IcPopoverMenuStyle0","PopoverMenu","constructor","hostRef","this","ARIA_LABEL","popoverMenuEls","openingFromChild","openingFromParent","submenuLevel","theme","open","undefined","setButtonFocus","_a","currentFocus","focus","findAnchorEl","anchor","anchorElement","submenuId","console","error","document","querySelector","indexOf","isNotPopoverMenuEl","ev","id","tagName","target","getNextItemToSelect","currentItem","movingDown","numButtons","length","nextItem","addMenuItems","elements","i","el","push","groupSlotWrapper","shadowRoot","menuGroupElements","getSlotElements","getMenuAriaLabel","ariaLabel","getAttribute","isPropDefined","parentLabel","handleBackButtonClick","parentPopover","openFromChild","initPopperJS","anchorEl","popperInstance","createPopper","placement","modifiers","name","options","offset","fallbackPlacements","rootBoundary","watchOpenHandler","popoverArr","parentElement","querySelectorAll","forEach","popover","some","menuItem","backButton","unshift","setTimeout","destroy","disconnectedCallback","componentDidLoad","slotWrapper","popoverMenuElements","componentWillRender","componentDidRender","handleMenuItemClick","detail","submenuTriggerFor","label","closeMenu","handleSubmenuChange","childEl","openFromParent","handleClick","handleKeyDown","key","preventDefault","blur","setFocusToAnchor","menuElement","icPopoverClosed","emit","render","h","Host","class","menu","role","ref","onClick","slot","viewBox","fill","xmlns","d","variant"],"sources":["src/components/ic-popover-menu/ic-popover-menu.css?tag=ic-popover-menu&encapsulation=shadow","src/components/ic-popover-menu/ic-popover-menu.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n* @prop --ic-z-index-popover: z-index of popover menu. \n* @prop --max-height: Maximum height of the popover menu.\n* @prop --popover-width: Default width of the popover menu.\n*/\n\n@media (prefers-reduced-motion: no-preference) {\n :host .opening-from-parent {\n animation: slide-in var(--ic-transition-duration-slow) ease-in-out;\n }\n\n :host .opening-from-child {\n animation: slide-out var(--ic-transition-duration-slow) ease-in-out;\n }\n}\n\n:host {\n border-radius: var(--ic-border-radius);\n color: var(--ic-popover-nav-text);\n\n --ic-typography-color: var(--ic-popover-nav-text);\n\n position: relative;\n z-index: var(--ic-z-index-popover);\n box-sizing: border-box;\n box-shadow: var(--ic-elevation-overlay);\n display: none;\n}\n\n:host(.on-dialog) {\n inset: auto !important;\n}\n\n:host(.on-dialog-fix-translate) {\n transform: translate(0, var(--ic-space-xs)) !important;\n}\n\n:host(.on-dialog-translate-y) {\n transform: translate(0, calc(-1 * var(--translate-y))) !important;\n}\n\n.menu {\n border: var(--ic-border-default);\n border-color: var(--ic-popover-border);\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-popover-background);\n visibility: hidden;\n height: 0;\n}\n\n.button {\n text-decoration: none;\n list-style-type: none;\n}\n\n:host(:focus-within) {\n box-shadow: var(--ic-border-focus);\n}\n\n.menu:focus-visible {\n outline: none;\n}\n\n:host(.ic-popover-menu-open) {\n display: block;\n min-width: calc(20rem - var(--ic-space-xl));\n width: var(--popover-width, 20rem);\n max-width: calc(100vw - var(--ic-space-xl));\n}\n\n:host(.ic-popover-menu-open) .menu {\n visibility: visible;\n height: fit-content;\n max-height: var(--max-height, fit-content);\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n.parent-label {\n --ic-typography-color: var(--ic-popover-parent-label);\n\n margin: var(--ic-space-xs) var(--ic-space-xs) 0;\n}\n\n@keyframes slide-in {\n from {\n opacity: 0;\n transform: translateX(10rem);\n }\n\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n\n@keyframes slide-out {\n from {\n opacity: 0;\n transform: translateX(-10rem);\n }\n\n to {\n opacity: 1;\n transform: translateX(0);\n }\n}\n","import {\n Component,\n Element,\n Host,\n h,\n Prop,\n Listen,\n Watch,\n State,\n Method,\n Event,\n EventEmitter,\n} from \"@stencil/core\";\nimport { getSlotElements, isPropDefined } from \"../../utils/helpers\";\nimport { createPopper, Instance as PopperInstance } from \"@popperjs/core\";\nimport { IcThemeMode } from \"../../utils/types\";\n\n@Component({\n tag: \"ic-popover-menu\",\n styleUrl: \"ic-popover-menu.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class PopoverMenu {\n private anchorEl: HTMLElement | null;\n private ARIA_LABEL: string = \"aria-label\";\n private backButton?: HTMLIcMenuItemElement;\n private currentFocus: number;\n private popoverMenuEls: HTMLIcMenuItemElement[] = [];\n private popperInstance: PopperInstance | null;\n\n @Element() el: HTMLIcPopoverMenuElement;\n\n @State() openingFromChild: boolean = false;\n @State() openingFromParent: boolean = false;\n\n /**\n * The ID of the element the popover menu will anchor itself to. This is required unless the popover is a submenu.\n */\n @Prop() anchor?: string;\n\n /**\n * @internal The parent popover menu of a child popover menu.\n */\n @Prop() parentLabel?: string;\n\n /**\n * @internal The parent popover menu of a child popover menu.\n */\n @Prop() parentPopover?: HTMLIcPopoverMenuElement;\n\n /**\n * The unique identifier for a popover submenu.\n */\n @Prop() submenuId?: string;\n\n /**\n * @internal The level of menu being displayed.\n */\n @Prop() submenuLevel?: number = 1;\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * If `true`, the popover menu will be displayed.\n */\n @Prop({ reflect: true, mutable: true }) open?: boolean | undefined =\n undefined;\n\n @Watch(\"open\")\n watchOpenHandler(): void {\n const popoverArr = this.el.parentElement?.querySelectorAll(\n `ic-popover-menu`\n ) as NodeListOf<HTMLIcPopoverMenuElement>;\n if (this.open) {\n if (popoverArr.length > 0) {\n popoverArr.forEach((popover) => {\n if (popover !== this.el) {\n popover.open = false;\n }\n });\n }\n if (\n this.parentPopover !== undefined &&\n !this.popoverMenuEls.some((menuItem) => menuItem.id)\n ) {\n this.backButton && this.popoverMenuEls.unshift(this.backButton);\n }\n\n this.currentFocus = 0;\n // Needed so that anchorEl isn't always focused\n setTimeout(this.setButtonFocus, 50);\n } else if (this.popperInstance) {\n if (popoverArr.length > 0) {\n popoverArr.forEach((popover) => {\n if (popover !== this.el) {\n popover.open = false;\n }\n });\n }\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n }\n\n /**\n * Emitted when the popover menu is closed.\n */\n @Event() icPopoverClosed: EventEmitter<HTMLIcMenuItemElement>;\n\n disconnectedCallback(): void {\n if (this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n }\n\n componentDidLoad(): void {\n const slotWrapper = this.el.shadowRoot?.querySelector(\"ul.button\");\n if (slotWrapper) {\n const popoverMenuElements = getSlotElements(slotWrapper);\n\n if (popoverMenuElements !== null) {\n this.addMenuItems(popoverMenuElements);\n }\n }\n\n if (\n this.submenuId === undefined &&\n this.el.getAttribute(this.ARIA_LABEL) === null\n ) {\n console.error(\n `No aria-label specified for popover menu component - aria-label required`\n );\n }\n }\n\n componentWillRender(): void {\n this.anchorEl = this.findAnchorEl(this.anchor);\n }\n\n componentDidRender(): void {\n if (this.open && !this.popperInstance) {\n this.initPopperJS();\n }\n }\n\n @Listen(\"handleMenuItemClick\")\n handleMenuItemClick(ev: CustomEvent<HTMLIcMenuItemElement>): void {\n if (!ev.detail.submenuTriggerFor && ev.detail.label !== \"Back\") {\n this.closeMenu(false, ev.detail);\n }\n }\n\n // This is listening for the event emitted when a menu item is acting as a trigger button\n @Listen(\"triggerPopoverMenuInstance\", { capture: true })\n handleSubmenuChange(ev: Event): void {\n // Finds the trigger menu item that has emitted the event\n const target = ev.target as HTMLIcMenuItemElement;\n this.open = false;\n\n // Find the popover menu that the menu item triggers (i.e. submenu-trigger-for === submenu-id).\n const childEl = document.querySelector(\n `ic-popover-menu[submenu-id=${target.submenuTriggerFor}]`\n ) as HTMLIcPopoverMenuElement;\n // Set the parent popover menu of the submenu and open the submenu\n childEl.parentPopover = this.el;\n childEl.anchor = this.anchor;\n childEl.ariaLabel = this.el.getAttribute(this.ARIA_LABEL);\n childEl.openFromParent();\n childEl.submenuLevel = this.submenuLevel! + 1;\n // Set the label in the submenu using the label of the menu item that has emitted the event\n childEl.parentLabel = target.label;\n }\n\n @Listen(\"click\", { target: \"document\" })\n handleClick(ev: Event): void {\n if (this.open && this.isNotPopoverMenuEl(ev)) {\n // If menu is open and the next click on the document is not a popover El, close the popover\n this.closeMenu();\n }\n }\n\n // Manages the keyboard navigation in the popover menu\n @Listen(\"keydown\", {})\n handleKeyDown(ev: KeyboardEvent): void {\n switch (ev.key) {\n case \"ArrowDown\":\n case \"ArrowUp\":\n ev.preventDefault();\n this.currentFocus = this.getNextItemToSelect(\n this.currentFocus,\n ev.key === \"ArrowDown\"\n );\n this.setButtonFocus();\n break;\n case \"Home\":\n //Sets home focus as first element, or back button\n this.currentFocus = 0;\n this.setButtonFocus();\n break;\n case \"End\":\n //Sets end focus as last element\n this.currentFocus = this.popoverMenuEls.length - 1;\n this.setButtonFocus();\n break;\n case \"Escape\":\n case \"Tab\":\n ev.preventDefault();\n if (this.open) {\n this.closeMenu(true);\n this.el.blur();\n }\n break;\n }\n }\n\n /**\n * @internal Opens the menu from the child menu.\n */\n @Method()\n async openFromChild(): Promise<void> {\n this.open = true;\n this.openingFromChild = true;\n\n setTimeout(() => (this.openingFromChild = false), 1000);\n }\n\n /**\n * @internal Opens the menu from the parent menu.\n */\n @Method()\n async openFromParent(): Promise<void> {\n this.open = true;\n this.openingFromParent = true;\n\n setTimeout(() => (this.openingFromParent = false), 1000);\n }\n\n private setButtonFocus = () => {\n this.popoverMenuEls[this.currentFocus]?.focus();\n };\n\n // Checks that the popover menu has an anchor\n private findAnchorEl = (anchor: string | undefined): HTMLElement | null => {\n let anchorElement: HTMLElement | null = null;\n if (!anchor) {\n this.submenuId === undefined &&\n console.error(\"No anchor specified for popover component\");\n } else {\n anchorElement = document.querySelector(\n anchor.indexOf(\"#\") === 0 ? anchor : \"#\" + anchor\n );\n if (anchorElement === null) {\n console.error(`Popover anchor element '${anchor}' not found`);\n }\n }\n return anchorElement;\n };\n\n private isNotPopoverMenuEl = (ev: Event) => {\n const { id, tagName } = ev.target as HTMLElement;\n return (\n id !== this.anchor &&\n tagName !== \"IC-MENU-ITEM\" &&\n tagName !== \"IC-MENU-GROUP\" &&\n tagName !== \"IC-POPOVER-MENU\"\n );\n };\n\n /**\n * @internal Close the menu, emit icPopoverClosed of the root popover\n * @param setFocusToAnchor when true return focus to anchor element when menu is closed\n */\n @Method()\n async closeMenu(\n setFocusToAnchor = false,\n menuElement?: HTMLIcMenuItemElement\n ): Promise<void> {\n this.open = false;\n if (this.parentPopover) {\n this.parentPopover.closeMenu(setFocusToAnchor, menuElement);\n } else {\n if (setFocusToAnchor) {\n this.anchorEl?.focus();\n }\n this.icPopoverClosed.emit(menuElement);\n }\n }\n\n private getNextItemToSelect = (\n currentItem: number,\n movingDown: boolean\n ): number => {\n const numButtons = this.popoverMenuEls.length - 1;\n\n if (currentItem < 1) {\n currentItem = 0;\n }\n\n let nextItem = movingDown ? currentItem + 1 : currentItem - 1;\n\n // Check if wrap around necessary\n if (nextItem < 0) {\n nextItem = numButtons;\n } else if (nextItem > numButtons) {\n nextItem = 0;\n }\n\n return nextItem;\n };\n\n private addMenuItems = (elements: Element[] | NodeListOf<ChildNode>) => {\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i] as HTMLIcMenuItemElement;\n if (el.tagName === \"IC-MENU-ITEM\") {\n this.popoverMenuEls.push(el);\n } else if (el.tagName === \"IC-MENU-GROUP\") {\n const groupSlotWrapper = el.shadowRoot?.querySelector(\n \".menu-items-wrapper\"\n );\n if (groupSlotWrapper) {\n const menuGroupElements = getSlotElements(groupSlotWrapper);\n menuGroupElements && this.addMenuItems(menuGroupElements);\n }\n }\n }\n };\n\n private getMenuAriaLabel = (): string | null => {\n const ariaLabel = this.el.getAttribute(this.ARIA_LABEL);\n\n if (isPropDefined(this.submenuId)) {\n return `${ariaLabel}, within nested level ${this.submenuLevel} ${this.parentLabel} submenu,`;\n } else {\n return ariaLabel;\n }\n };\n\n private handleBackButtonClick = (): void => {\n this.parentPopover?.openFromChild();\n this.open = false;\n };\n\n private initPopperJS = () => {\n if (this.anchorEl) {\n this.popperInstance = createPopper(this.anchorEl, this.el, {\n placement: \"bottom-start\",\n modifiers: [\n {\n name: \"offset\",\n options: {\n offset: [0, 4],\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top-start\", \"top-end\", \"bottom-end\"],\n rootBoundary: \"viewport\",\n },\n },\n ],\n });\n }\n };\n\n render() {\n return (\n <Host\n class={{\n [\"ic-popover-menu-open\"]: !!this.open,\n [`ic-theme-${this.theme}`]: this.theme !== \"inherit\",\n }}\n >\n <div\n id={\n this.parentPopover === undefined\n ? `ic-popover-submenu-${this.submenuId}`\n : \"\"\n }\n class={{\n menu: true,\n }}\n >\n <span\n class={{\n \"opening-from-parent\": this.openingFromParent,\n \"opening-from-child\": this.openingFromChild,\n }}\n >\n {isPropDefined(this.submenuId) && (\n <span>\n <span role=\"menu\">\n <ic-menu-item\n class=\"ic-popover-submenu-back-button\"\n ref={(el) => (this.backButton = el)}\n label=\"Back\"\n onClick={this.handleBackButtonClick}\n id={`ic-popover-submenu-back-button-${this.submenuLevel}`}\n >\n <svg\n slot=\"icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"submenu-back-icon\"\n >\n <path\n d=\"M20 11H7.83L13.42 5.41L12 4L4 12L12 20L13.41 18.59L7.83 13H20V11Z\"\n fill=\"currentColor\"\n />\n </svg>\n </ic-menu-item>\n </span>\n <ic-typography variant=\"subtitle-small\" class=\"parent-label\">\n {this.parentLabel}\n </ic-typography>\n </span>\n )}\n <ul class=\"button\" aria-label={this.getMenuAriaLabel()} role=\"menu\">\n <slot></slot>\n </ul>\n </span>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["icStatusTagCss","IcStatusTagStyle0","StatusTag","constructor","hostRef","this","announced","size","status","theme","uppercase","variant","componentDidLoad","onComponentRequiredPropUndefined","prop","label","propName","render","h","Host","key","class","role"],"sources":["src/components/ic-status-tag/ic-status-tag.css?tag=ic-status-tag&encapsulation=shadow","src/components/ic-status-tag/ic-status-tag.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n.tag {\n padding: var(--ic-space-xxs) var(--ic-space-sm);\n font-size: 0.875rem;\n border-radius: var(--ic-space-md);\n display: inline-block;\n min-width: 2.5rem;\n text-align: center;\n\n --ic-typography-color: var(--ic-status-tag-text);\n}\n\n.small {\n padding: var(--ic-space-xxxs) var(--ic-space-sm);\n border-radius: calc(var(--ic-space-md) - var(--ic-space-xxxs));\n}\n\n.large {\n padding: var(--ic-space-xs) var(--ic-space-sm);\n border-radius: calc(var(--ic-space-md) + var(--ic-space-xxs));\n}\n\n.filled-neutral {\n background-color: var(--ic-status-tag-neutral);\n}\n\n.filled-success {\n background-color: var(--ic-status-tag-success);\n}\n\n.filled-warning {\n background-color: var(--ic-status-tag-warning);\n --ic-typography-color: var(--ic-status-tag-text-inverted);\n}\n\n.filled-danger {\n background-color: var(--ic-status-tag-error);\n}\n\n.outlined {\n padding: calc(var(--ic-space-xxxs) + var(--ic-space-1px))\n calc(var(--ic-space-sm) - var(--ic-space-1px));\n}\n\n.outlined.small {\n padding: var(--ic-space-1px) calc(var(--ic-space-sm) - var(--ic-space-1px));\n}\n\n.outlined.large {\n padding: calc(var(--ic-space-xs) - var(--ic-space-1px))\n calc(var(--ic-space-sm) - var(--ic-space-1px));\n}\n\n.outlined-neutral {\n background-color: var(--ic-status-tag-outlined-background-neutral);\n border: var(--ic-border-width) solid var(--ic-status-tag-outlined-neutral);\n --ic-typography-color: var(--ic-status-tag-text-inverted);\n}\n\n.outlined-success {\n background-color: var(--ic-status-tag-outlined-background-success);\n border: var(--ic-border-width) solid var(--ic-status-tag-outlined-success);\n --ic-typography-color: var(--ic-status-tag-text-inverted);\n}\n\n.outlined-warning {\n background-color: var(--ic-status-tag-outlined-background-warning);\n border: var(--ic-border-width) solid var(--ic-status-tag-outlined-warning);\n --ic-typography-color: var(--ic-status-tag-text-inverted);\n}\n\n.outlined-danger {\n background-color: var(--ic-status-tag-outlined-background-error);\n border: var(--ic-border-width) solid var(--ic-status-tag-outlined-error);\n --ic-typography-color: var(--ic-status-tag-text-inverted);\n}\n\n@media (forced-colors: active) {\n .tag {\n border: var(--ic-border-hc);\n -ms-high-contrast-adjust: none;\n forced-color-adjust: none;\n }\n}\n","import { Component, Host, h, Prop } from \"@stencil/core\";\nimport { onComponentRequiredPropUndefined } from \"../../utils/helpers\";\nimport { IcStatusTagStatuses } from \"./ic-status-tag.types\";\nimport { IcEmphasisType, IcSizes } from \"../../utils/types\";\n\n@Component({\n tag: \"ic-status-tag\",\n styleUrl: \"ic-status-tag.css\",\n shadow: true,\n})\nexport class StatusTag {\n /**\n * If `true`, role='status' is added to the component and it will act as an 'aria-live' region.\n * Screen readers will announce changes to the `label`, but not the initial value.\n */\n @Prop() announced?: boolean = false;\n\n /**\n * The content rendered within the status tag.\n */\n @Prop() label!: string;\n\n /**\n * The size of the status tag component.\n */\n @Prop() size?: IcSizes = \"medium\";\n\n /**\n * The colour of the status tag.\n */\n @Prop() status?: IcStatusTagStatuses = \"neutral\";\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: \"dark\" | \"light\" | \"inherit\" = \"inherit\";\n\n /**\n * The letter case of the status tag's label.\n */\n @Prop() uppercase?: boolean = true;\n\n /**\n * The emphasis of the status tag.\n */\n @Prop() variant?: IcEmphasisType = \"filled\";\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Status Tag\"\n );\n }\n\n render() {\n const { label, status, variant, size, announced, theme, uppercase } = this;\n return (\n <Host\n class={{ [`ic-theme-${theme}`]: theme !== \"inherit\" }}\n role={announced ? \"status\" : null}\n aria-label=\"Status\"\n >\n <strong\n class={{\n [\"tag\"]: true,\n [`${variant}-${status}`]: true,\n [\"outlined\"]: variant === \"outlined\",\n [`${size}`]: true,\n }}\n >\n <ic-typography\n variant={uppercase ? \"label-uppercase\" : \"label\"}\n apply-vertical-margins={false}\n >\n <span>{label}</span>\n </ic-typography>\n </strong>\n </Host>\n );\n }\n}\n"],"mappings":"sFAAA,MAAMA,EAAiB,o2IACvB,MAAAC,EAAeD,E,MCSFE,EAAS,MALtB,WAAAC,CAAAC,G,UAUUC,KAAAC,UAAsB,MAUtBD,KAAAE,KAAiB,SAKjBF,KAAAG,OAA+B,UAK/BH,KAAAI,MAAuC,UAKvCJ,KAAAK,UAAsB,KAKtBL,KAAAM,QAA2B,Q,CAEnC,gBAAAC,GACEC,EACE,CAAC,CAAEC,KAAMT,KAAKU,MAAOC,SAAU,UAC/B,a,CAIJ,MAAAC,GACE,MAAMF,MAAEA,EAAKP,OAAEA,EAAMG,QAAEA,EAAOJ,KAAEA,EAAID,UAAEA,EAASG,MAAEA,EAAKC,UAAEA,GAAcL,KACtE,OACEa,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CAAE,CAAC,YAAYZ,KAAUA,IAAU,WAC1Ca,KAAMhB,EAAY,SAAW,KAAI,aACtB,UAEXY,EAAA,UAAAE,IAAA,2CACEC,MAAO,CACL,CAAC,OAAQ,KACT,CAAC,GAAGV,KAAWH,KAAW,KAC1B,CAAC,YAAaG,IAAY,WAC1B,CAAC,GAAGJ,KAAS,OAGfW,EAAA,iBAAAE,IAAA,2CACET,QAASD,EAAY,kBAAoB,QAAO,yBACxB,OAExBQ,EAAA,QAAAE,IAAA,4CAAOL,K","ignoreList":[]}
|