{"version":3,"names":["iconCss","EonUiIconStyle0","Icon","constructor","hostRef","this","schemeConfig","ICON_SCHEME_CONFIG","schemeMap","ICON_SCHEME_MAP","svgType","SvgType","ICON","ICONSIZE_NORMAL","loader","SvgLoader","componentWillLoad","applyScheme","initContextMenu","getTooltipElement","componentDidLoad","setCssVariables","delegateSvgWidthVariable","connectedCallback","waitUntilVisible","hostElement","isVisible","loadSvgContentAndMetadata","disconnectedCallback","interactionObserver","disconnect","undefined","applySchemeDelegate","setCssVariablesDelegate","onNameChanged","onSizeChanged","name","loadedSvgContent","getSvg","svgContent","requestSvg","then","catch","e","console","error","message","iconSrcLoaded","emit","svgMetadata","getSvgMetadata","requestSvgSizes","element","rootMargin","callback","lazy","window","IntersectionObserver","io","data","isIntersecting","observe","_a","iconWrapper","children","iconWidth","getAttribute","setCssVariable","contextMenu","querySelector","tooltipElement","isVisibilityOnClick","visibility","TOOLTIP_VISIBILITY_ON_CLICK","handleClick","_event","visible","ariaExpanded","handleKeyDown","key","KeyIds","ENTER","SPACE","preventDefault","handleFocusEvent","tooltipElements","Array","from","document","querySelectorAll","map","item","TOOLTIP_VISIBILITY_ALWAYS","TOOLTIP_VISIBILITY_ON_HOVER","parentElement","onDocumentClick","event","target","getTooltipProps","props","role","tabIndex","onClick","onKeyDown","onFocus","render","sanatizedSvgHtml","sanitizeHtml","allowedTags","allowedAttributes","svg","path","classes","pfx","size","ICONSIZE_SMALL","ICONSIZE_TINY","noSpace","defaultHeight","alignmentY","alignmentX","hidden","h","Host","class","ref","el","innerHTML","getContextMenuProps","ariaLabel"],"sources":["src/components/icon/icon.scss?tag=eon-ui-icon&encapsulation=shadow","src/components/icon/icon.tsx"],"sourcesContent":["/**\n * THEME JSON CONFIG CSS VARS\n * The following default component scss variables can be overwritten via theme configuration per brand.\n * If you need to add new one, please make sure to set a default value.\n * JSON Definition for Component with name \"Example\": testCssVar: \"20px\"\n * Resulting CSS var: $example-test-css-var: 20px;\n */\n\n/* END THEME JSON CONFIG CSS VARS ******************************************************* */\n\n$tiny-width: 18;\n$small-width: 24;\n$normal-width: 32;\n$big-width: 96;\n\n:host {\n position: relative;\n color: v(color);\n fill: currentColor;\n display: flex;\n}\n\n.#{$prefix}icon-wrapper {\n align-self: center;\n background-color: transparent;\n border: 0;\n display: inline-flex;\n height: 32px;\n justify-self: center;\n position: relative;\n width: 32px;\n\n &.#{$prefix}hidden {\n display: none;\n }\n\n &.#{$prefix}size-big {\n width: 96px;\n height: 96px;\n\n svg {\n -webkit-transform: scale(calc(96 / 32));\n transform: scale(calc(96 / 32));\n }\n }\n\n &.#{$prefix}size-small {\n width: 24px;\n height: 24px;\n -webkit-transform: scale(0.75, 0.75);\n transform: scale(0.75, 0.75);\n }\n\n &.#{$prefix}size-tiny {\n width: 18px;\n height: 18px;\n -webkit-transform: scale(0.56, 0.56);\n transform: scale(0.56, 0.56);\n }\n\n svg {\n display: block; // Included due to a MS Edge (pre-chromium) bug. Icons were displaced inside the button without this.#{$prefix}\n overflow: visible;\n }\n\n &.#{$prefix}no-spacing.#{$prefix}size-big {\n width: calc(var(--iconWidth) * 96px / 32);\n }\n\n &.#{$prefix}no-spacing.#{$prefix}size-small {\n width: calc(var(--iconWidth) * 24px / 32);\n }\n\n &.#{$prefix}no-spacing.#{$prefix}size-tiny {\n width: calc(var(--iconWidth) * 18px / 32);\n }\n\n &.#{$prefix}x-left {\n justify-content: flex-start;\n }\n\n &.#{$prefix}x-center {\n justify-content: center;\n }\n\n &.#{$prefix}x-right {\n justify-content: flex-end;\n }\n\n &.#{$prefix}y-top {\n align-items: flex-start;\n }\n\n &.#{$prefix}y-center {\n align-items: center;\n }\n\n &.#{$prefix}y-bottom {\n align-items: flex-end;\n }\n\n &.#{$prefix}no-spacing {\n width: auto;\n }\n\n &.#{$prefix}default-height {\n height: auto;\n }\n\n &.#{$prefix}x-left.#{$prefix}y-top svg {\n transform-origin: left top;\n }\n\n &.#{$prefix}x-left.#{$prefix}y-center svg {\n transform-origin: left center;\n }\n\n &.#{$prefix}x-left.#{$prefix}y-bottom svg {\n transform-origin: left bottom;\n }\n\n &.#{$prefix}x-center.#{$prefix}y-top svg {\n transform-origin: center top;\n }\n\n &.#{$prefix}x-center.#{$prefix}y-center svg {\n transform-origin: center center;\n }\n\n &.#{$prefix}x-center.#{$prefix}y-bottom svg {\n transform-origin: center bottom;\n }\n\n &.#{$prefix}x-right.#{$prefix}y-top svg {\n transform-origin: right top;\n }\n\n &.#{$prefix}x-right.#{$prefix}y-center svg {\n transform-origin: right center;\n }\n\n &.#{$prefix}x-right.#{$prefix}y-bottom svg {\n transform-origin: right bottom;\n }\n\n &.#{$prefix}context-menu {\n cursor: pointer;\n\n &:focus-visible {\n outline: 5px auto $eon-system-highlight;\n }\n }\n\n &.#{$prefix}tooltip-icon {\n &:focus {\n @include focusBorder(v(iconFocusColor), 2px);\n }\n\n &:focus-within {\n @include focusBorder(v(iconFocusColor), 2px);\n }\n }\n\n &:focus-visible {\n outline: none;\n }\n\n &.#{$prefix}visibility-on-click {\n cursor: pointer;\n }\n}\n","import { Component, Element, h, Host, Listen, Prop, State, Watch, Event, EventEmitter } from \"@stencil/core\";\nimport { SvgLoader } from \"../../common/svg-loader\";\nimport { SvgMetadata } from \"../../common/svg-metadata\";\nimport { SvgType } from \"../../common/svg-type\";\nimport { IconSchemeDefinition, IconSchemeName, IconSize } from \"./constants/icon-types\";\nimport {\n ICON_SCHEME_CONFIG,\n ICON_SCHEME_MAP,\n ICONSIZE_NORMAL,\n ICONSIZE_SMALL,\n ICONSIZE_TINY\n} from \"./constants/icon-constants\";\nimport { applySchemeDelegate, ColorableComponent, setCssVariablesDelegate } from \"../../common/colorable-component\";\nimport { setCssVariable } from \"../../utils/css-variables\";\nimport pfx from \"../../utils/style-class-prefix-helper\";\nimport { IconSchemeConfiguration } from \"../../constants/colors\";\nimport { KeyIds } from \"../../constants/keys\";\nimport {\n TOOLTIP_VISIBILITY_ALWAYS,\n TOOLTIP_VISIBILITY_ON_CLICK,\n TOOLTIP_VISIBILITY_ON_HOVER\n} from \"../tooltip/constants/tooltip-constants\";\nimport sanitizeHtml from \"sanitize-html\";\nimport { getContextMenuProps } from \"../../utils/context-menu-helper\";\n// import { InitLogging } from \"../../decorators/init-logging\";\n\n/**\n * @slot context-menu - holds eon-ui-context-menu component\n * @slot tooltip - holds eon-ui-tooltip component\n */\n@Component({\n tag: \"eon-ui-icon\",\n styleUrl: \"icon.scss\",\n shadow: true\n})\nexport class Icon implements ColorableComponent> {\n // @InitLogging() sentryTransaction;\n schemeConfig: IconSchemeConfiguration = ICON_SCHEME_CONFIG;\n schemeMap = ICON_SCHEME_MAP;\n iconWrapper: HTMLElement;\n contextMenu: HTMLEonUiContextMenuElement;\n tooltipElement: HTMLEonUiTooltipElement;\n\n private interactionObserver?: IntersectionObserver;\n private readonly loader: SvgLoader;\n private svgType: SvgType = SvgType.ICON;\n\n @Element() hostElement!: HTMLEonUiIconElement;\n\n @State() activeScheme: IconSchemeDefinition;\n @State() private svgContent?: string;\n @State() private svgMetadata?: SvgMetadata;\n @State() private isVisible = false;\n @State() private isVisibilityOnClick: boolean;\n\n /**\n * The name of the color scheme of the component.\n * If not set, the component will try to calculate it based on the nearest enclosing background information given by inner-background attribute or eon-ui-background component.\n */\n @Prop({ reflect: true }) scheme: IconSchemeName;\n\n /**\n * Specifies the label to use for accessibility. Defaults to the icon name.\n */\n @Prop({ mutable: true, reflect: true }) ariaLabel: string;\n\n /**\n * Specifies which icon to use from the built-in set of icons.\n */\n @Prop() name: string;\n\n /**\n * Specifies the vertical position of the icon inside the wrapper.\n * Possible Options are top, center, bottom.\n * Default is center.\n */\n @Prop() alignmentY: \"center\" | \"bottom\" | \"top\" = \"center\";\n\n /**\n * Specifies the horizontal position of the icon inside the wrapper.\n * Possible Options are left, center, right.\n * Default is center.\n */\n @Prop() alignmentX: \"center\" | \"left\" | \"right\" = \"center\";\n\n /**\n * A boolean that specifies whether or not the icon does have space around inside the wrapper.\n * Default is true.\n */\n @Prop() noSpace: boolean = true;\n\n /**\n * A boolean that specifies whether or not the icon has the default svg hight.\n * Default is false.\n */\n @Prop() defaultHeight: boolean = false;\n\n /**\n * The size of the icon.\n */\n @Prop() size: IconSize = ICONSIZE_NORMAL;\n\n /**\n * If enabled, the icon will be loaded lazily when it's visible in the viewport. Defaults to false.\n */\n @Prop() lazy = false;\n\n /**\n * Triggered when the image src has been loaded\n */\n @Event() iconSrcLoaded: EventEmitter;\n\n constructor() {\n this.loader = new SvgLoader();\n }\n\n componentWillLoad() {\n this.applyScheme();\n this.initContextMenu();\n this.getTooltipElement();\n }\n\n componentDidLoad() {\n this.setCssVariables();\n this.delegateSvgWidthVariable();\n }\n\n connectedCallback() {\n // Purposely do not return the promise here because loading the SVG file should not hold up loading the app.\n // Only load the SVG if it's visible.\n this.waitUntilVisible(this.hostElement as HTMLElement, \"48px\", () => {\n this.isVisible = true;\n this.loadSvgContentAndMetadata();\n });\n }\n\n disconnectedCallback() {\n if (this.interactionObserver) {\n this.interactionObserver.disconnect();\n this.interactionObserver = undefined;\n }\n }\n\n @Watch(\"scheme\")\n applyScheme(): void {\n applySchemeDelegate(this);\n }\n\n @Watch(\"activeScheme\")\n setCssVariables(): void {\n setCssVariablesDelegate(this);\n }\n\n @Watch(\"name\")\n onNameChanged() {\n this.loadSvgContentAndMetadata();\n this.delegateSvgWidthVariable();\n }\n\n @Watch(\"size\")\n onSizeChanged() {\n this.loadSvgContentAndMetadata();\n this.delegateSvgWidthVariable();\n }\n\n /**\n * Normal icons have height=\"32px\" (which is already specified in the svg content) and small icons have height=\"24px\".\n * If this icon is small, the function will update the width property of the svg and set it to the small height.\n *\n * We can't do this in CSS using a \".small\" class because the svgContent is set as innerHTML and doesn't get the IE/Edge polyfill class \"sc-eon-ui-icon\".\n * This means that the transcluded svg can't be accessed using CSS in IE/Edge.\n * @param svgContent the current SVG content\n */\n\n private loadSvgContentAndMetadata() {\n if (this.isVisible && !!this.name) {\n // Load SVG content\n let loadedSvgContent = this.loader.getSvg(this.name, this.svgType);\n if (loadedSvgContent) {\n this.svgContent = loadedSvgContent;\n } else {\n // async if it hasn't been loaded\n void this.loader\n .requestSvg(this.name, this.svgType)\n .then(() => {\n this.svgContent = this.loader.getSvg(this.name, this.svgType);\n })\n .catch((e) => {\n this.svgContent = null;\n console.error(e.message); // \"oh, no!\"\n });\n }\n\n if (this.svgContent) {\n this.iconSrcLoaded.emit();\n // load SVG size\n this.svgMetadata = this.loader.getSvgMetadata(this.name, this.svgType);\n\n if (!this.svgMetadata) {\n // async if it hasn't been loaded\n void this.loader.requestSvgSizes(this.svgType).then(() => {\n this.svgMetadata = this.loader.getSvgMetadata(this.name, this.svgType);\n });\n }\n }\n }\n }\n\n private waitUntilVisible(element: HTMLElement, rootMargin: string, callback: () => void) {\n if (this.lazy && window && window.IntersectionObserver) {\n const io = (this.interactionObserver = new window.IntersectionObserver(\n (data: IntersectionObserverEntry[]) => {\n if (data[0].isIntersecting) {\n io.disconnect();\n this.interactionObserver = undefined;\n callback();\n }\n },\n { rootMargin }\n ));\n io.observe(element);\n } else {\n // browser doesn't support IntersectionObserver, so just show the icon\n callback();\n }\n }\n\n /* Gets the svg width and height and make it available as a scss variable*/\n private delegateSvgWidthVariable() {\n if (this.iconWrapper?.children[0]) {\n const iconWidth = this.iconWrapper.children[0].getAttribute(\"width\");\n setCssVariable(this.hostElement as HTMLElement, \"--iconWidth\", iconWidth);\n }\n }\n\n /**\n * Context Menu Setup including getter, click events, keyboard events and properties\n */\n private initContextMenu() {\n this.contextMenu = this.hostElement.querySelector('[slot=\"context-menu\"]');\n }\n\n /**\n * Tooltip Check for OnClick visibility property\n */\n private getTooltipElement() {\n this.tooltipElement = this.hostElement.querySelector('[slot=\"tooltip\"]');\n this.isVisibilityOnClick =\n ((this.tooltipElement as unknown) as HTMLEonUiTooltipElement)?.visibility === TOOLTIP_VISIBILITY_ON_CLICK;\n }\n\n private handleClick(_event: MouseEvent) {\n this.contextMenu && (this.contextMenu.visible = true);\n this.iconWrapper.ariaExpanded = \"true\";\n }\n\n private handleKeyDown(e: KeyboardEvent) {\n if (e.key == KeyIds.ENTER || e.key == KeyIds.SPACE) {\n e.key == KeyIds.SPACE && e.preventDefault();\n this.contextMenu && (this.contextMenu.visible = true);\n this.tooltipElement && (this.tooltipElement.visible = true);\n }\n }\n\n handleFocusEvent() {\n const tooltipElements = Array.from(document.querySelectorAll(\"eon-ui-tooltip\"));\n tooltipElements.map((item) => {\n item.visibility !== TOOLTIP_VISIBILITY_ALWAYS && (item.visible = false);\n item.visibility === TOOLTIP_VISIBILITY_ON_HOVER &&\n item.parentElement === this.hostElement &&\n (item.visible = true);\n });\n }\n\n @Listen(\"click\", { target: \"window\" })\n onDocumentClick(event) {\n if (\n event.target !== this.hostElement &&\n event.target !== this.tooltipElement &&\n event.target.parentElement !== this.tooltipElement\n ) {\n this.tooltipElement &&\n this.tooltipElement.visibility === TOOLTIP_VISIBILITY_ON_CLICK &&\n (this.tooltipElement.visible = false);\n }\n }\n\n private getTooltipProps() {\n const props = {\n role: \"button\",\n tabIndex: 0\n };\n\n return this.contextMenu\n ? props\n : {\n ...props,\n onClick: (event: MouseEvent) => this.handleClick(event),\n onKeyDown: (event: KeyboardEvent) => this.handleKeyDown(event),\n onFocus: () => this.handleFocusEvent()\n };\n }\n\n render() {\n const sanatizedSvgHtml = sanitizeHtml(this.svgContent, {\n allowedTags: [\"svg\", \"path\"],\n allowedAttributes: {\n svg: [\"xmlns\", \"width\", \"height\"],\n path: [\"d\", \"fill-rule\", \"clip-rule\"]\n }\n });\n\n const classes = pfx({\n \"icon-wrapper\": true,\n \"size-small\": this.size === ICONSIZE_SMALL,\n \"size-normal\": this.size === ICONSIZE_NORMAL,\n \"size-tiny\": this.size === ICONSIZE_TINY,\n \"no-spacing\": this.noSpace,\n \"default-height\": this.defaultHeight,\n \"y-top\": this.alignmentY === \"top\",\n \"y-center\": this.alignmentY === \"center\",\n \"y-bottom\": this.alignmentY === \"bottom\",\n \"x-left\": this.alignmentX === \"left\",\n \"x-center\": this.alignmentX === \"center\",\n \"x-right\": this.alignmentX === \"right\",\n \"context-menu\": this.contextMenu,\n \"tooltip-icon\": this.tooltipElement,\n \"visibility-on-click\": !!this.isVisibilityOnClick,\n hidden: !this.svgContent\n });\n\n return (\n \n {this.contextMenu || this.tooltipElement ? (\n (this.iconWrapper = el as HTMLElement)}\n innerHTML={sanatizedSvgHtml}\n onFocus={() => this.handleFocusEvent()}\n onClick={(event: MouseEvent) => this.handleClick(event)}\n onKeyDown={(event: KeyboardEvent) => this.handleKeyDown(event)}\n {...(this.contextMenu && getContextMenuProps(this.hostElement, this.contextMenu.visible, this.ariaLabel))}\n {...(this.tooltipElement && this.getTooltipProps())}\n />\n ) : (\n
(this.iconWrapper = el as HTMLElement)} innerHTML={sanatizedSvgHtml}>
\n )}\n \n \n
\n );\n }\n}\n"],"mappings":"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"}