{"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","setAriaLabel","initContextMenu","getTooltipElement","componentDidLoad","setCssVariables","delegateSvgWidthVariable","connectedCallback","waitUntilVisible","hostElement","isVisible","loadSvgContentAndMetadata","disconnectedCallback","interactionObserver","disconnect","undefined","applySchemeDelegate","setCssVariablesDelegate","onNameChanged","onSizeChanged","ariaLabel","_a","name","toLowerCase","replace","loadedSvgContent","getSvg","svgContent","requestSvg","then","catch","e","console","error","message","svgMetadata","getSvgMetadata","requestSvgSizes","element","rootMargin","callback","lazy","window","IntersectionObserver","io","data","isIntersecting","observe","iconWrapper","children","iconWidth","getAttribute","setCssVariable","contextMenu","querySelector","tooltipElement","isVisibilityOnClick","visibility","TOOLTIP_VISIBILITY_ON_CLICK","handleClick","_event","visible","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","getContextMenuAndTooltipProps","props","role","tabIndex","onFocus","onClick","onKeyDown","render","sanatizedSvgHtml","sanitizeHtml","allowedTags","allowedAttributes","svg","path","h","Host","class","pfx","size","ICONSIZE_SMALL","ICONSIZE_TINY","noSpace","defaultHeight","alignmentY","alignmentX","hidden","ref","el","innerHTML"],"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 position: relative;\n justify-self: center;\n align-self: center;\n width: 32px;\n height: 32px;\n display: inline-flex;\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\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 } 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\";\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 constructor() {\n this.loader = new SvgLoader();\n }\n\n componentWillLoad() {\n this.applyScheme();\n this.setAriaLabel();\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 this.setAriaLabel();\n }\n\n @Watch(\"size\")\n onSizeChanged() {\n this.loadSvgContentAndMetadata();\n this.delegateSvgWidthVariable();\n }\n\n private setAriaLabel() {\n this.ariaLabel = this.ariaLabel || this.name?.toLowerCase().replace(/\\-/g, \" \");\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 // 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 }\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 getContextMenuAndTooltipProps() {\n let props = {};\n if (this.contextMenu || this.tooltipElement) {\n props = {\n role: \"button\",\n tabIndex: 0,\n onFocus: () => this.handleFocusEvent(),\n onClick: (event: MouseEvent) => this.handleClick(event),\n onKeyDown: (event: KeyboardEvent) => this.handleKeyDown(event)\n };\n }\n\n return props;\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 return (\n \n (this.iconWrapper = el as HTMLElement)}\n innerHTML={sanatizedSvgHtml}\n {...this.getContextMenuAndTooltipProps()}\n >\n \n \n \n );\n }\n}\n"],"mappings":"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"}