{"version":3,"names":["IMAGE_LOCALIZATION","en","ariaLabel","phone","mail","download","de","sv","nl","it","hu","da","fr","es","pl","ro","hr","cs","sl","imageCss","EonUiImageStyle0","Image","this","resizeThrottleMs","dimensionInSrcPath","localization","IMAGE_DEFAULT_VIOLATOR_VERTICAL_POSITION","IMAGE_DEFAULT_VIOLATOR_HORIZONTAL_POSITION","TARGET_SELF","componentWillLoad","setCurrentLocalization","computeObjectPosition","imageLazyLoading","hostElement","rootMargin","setCaption","setAlt","setTitle","setWidth","setAspectRatio","computeAriaLabel","handleImageDimensionsIfPossible","hasViolator","getFirstNestedChild","componentDidLoad","setPlaceHolderDimensionCssVars","imageLoaded","emit","removeContextMenu","objectPositionX","positionX","objectPositionY","positionY","objectPosition","preventUserInteraction","removeEventListener","event","preventUserInteractionOnImage","addEventListener","setCurrentLocalizationDelegate","handleResize","resizeTimeout","setTimeout","setPlaceHolderDimension","preventDefault","imageDimensionSplitCharacter","getImageDimensionsFromSource","extractImageDimensionFromSource","src","dimension","patterNumber","patterSeparator","rx","RegExp","dimensionString","exec","tempDimensionArr","length","split","width","height","srcDimension","srcMobile","srcMobileDimension","srcTablet","srcTabletDimension","srcDesktop","srcDesktopDimension","srcDesktopL","srcDesktopLDimension","placeHolderDimensionWidth","getValueForScreenSize","_a","mobile","_b","tablet","_c","desktop","_d","desktopL","_e","placeHolderDimensionHeight","_f","_g","_h","_j","_k","setCssVariable","element","lazy","window","IntersectionObserver","imageObserver","entries","forEach","entry","isIntersecting","image","target","isVisible","unobserve","observe","handleClick","_event","openModalId","openModal","imageClick","finalCaption","caption","captionMobile","captionTablet","captionDesktop","captionDesktopL","finalAlt","alt","altMobile","altTablet","altDesktop","altDesktopL","finalTitle","titleDefault","titleMobile","titleTablet","titleDesktop","titleDesktopL","finalWidth","widthMobile","widthTablet","widthDesktop","widthDesktopL","finalAspectRatio","aspectRatio","aspectRatioMobile","aspectRatioTablet","aspectRatioDesktop","aspectRatioDesktopL","linkAriaLabel","currentLocalization","currentAriaLabel","computeLinkAriaLabel","linkHref","render","autoWidth","Boolean","isCover","isPlaceholder","useAsBackground","isFixedRatio","isBackground","hostWidth","h","Host","key","style","class","pfx","onClick","ConditionalWrapper","condition","wrapper","imageTag","title","linkTitle","href","linkTarget","defaultWrapper","srcSet","media","objectFit","onLoad","imageSrcLoaded","shadowOnImage","brightShadowOnImage","violatorVerticalPosition","violatorHorizontalPosition","name","captionCopyright","copyright","captionVerticalBreakpoint","createSchemes","newSchemes","AllColors.PROGRESS_CIRCLE_SCHEMES","schemeName","textColor","AllColors","toConstantCase","iconColor","backgroundColor","progressBackgroundColor","progressColor","iconColorOnHover","progressBackgroundColorOnHover","progressColorOnHover","progressSuccessColor","iconSuccessColor","scheme","PROGRESS_CIRCLE_SCHEME_CONFIG","PROGRESS_CIRCLE_SCHEME_MAP","Map","Object","createProgressCircleMapDefinition","map","background","config","progressCircleCss","EonUiProgressCircleStyle0","ProgressCircle","schemeConfig","schemeMap","applyScheme","handleIconColor","setCssVariables","initProgressText","applySchemeDelegate","setCssVariablesDelegate","animateText","animateProgress","progress","progressText","toString","newValue","oldValue","animateProgressText","start","end","duration","range","current","increment","stepTime","Math","abs","floor","timer","setInterval","clearInterval","handleIconClick","iconClick","iconName","size","showProgressText","circle","full","error"],"sources":["src/components/image/constants/image-i18n.ts","src/components/image/image.scss?tag=eon-ui-image&encapsulation=shadow","src/components/image/image.tsx","src/components/progress-circle/constants/progress-cirlce-constants.ts","src/components/progress-circle/progress-circle.scss?tag=eon-ui-progress-circle&encapsulation=shadow","src/components/progress-circle/progress-circle.tsx"],"sourcesContent":["import { Localization } from \"../../../common/localizable-component\";\nimport { ImageLocalization } from \"./image-types\";\n\nexport const IMAGE_LOCALIZATION: Localization = {\n en: {\n ariaLabel: {\n phone: \"Call phone number {0}\",\n mail: \"Send a mail to {0}\",\n download: \"Download {0}\"\n }\n },\n de: {\n ariaLabel: {\n phone: \"Rufe {0} an\",\n mail: \"Verfasse eine E-Mail an {0}\",\n download: \"{0} herunterladen\"\n }\n },\n sv: {\n ariaLabel: {\n phone: \"Ring telefonnummer {0}\",\n mail: \"Skicka e-post till {0}\",\n download: \"Ladda ner {0}\"\n }\n },\n nl: {\n ariaLabel: {\n phone: \"Bel telefoonnummer {0}\",\n mail: \"Stuur een mail naar {0}\",\n download: \"Download {0}\"\n }\n },\n it: {\n ariaLabel: {\n phone: \"Chiama il numero di telefono {0}\",\n mail: \"Manda una mail a {0}\",\n download: \"Scarica {0}\"\n }\n },\n hu: {\n ariaLabel: {\n phone: \"Telefonszám hívása {0}\",\n mail: \"E-mail küldése {0}\",\n download: \"{0} db fájl letöltése\"\n }\n },\n da: {\n ariaLabel: {\n phone: \"Ring til nummer {0}\",\n mail: \"Send mail til {0}\",\n download: \"Download {0}\"\n }\n },\n fr: {\n ariaLabel: {\n phone: \"Appeler le numéro de téléphone {0}\",\n mail: \"Envoyer un mail à {0}\",\n download: \"Télécharger {0}\"\n }\n },\n es: {\n ariaLabel: {\n phone: \"Llama al número de teléfono {0}\",\n mail: \"Enviar un email a {0}\",\n download: \"Descargar {0}\"\n }\n },\n pl: {\n ariaLabel: {\n phone: \"Zadzwoń pod numer telefonu {0}\",\n mail: \"Wyślij maila na adres {0}\",\n download: \"Pobierz {0}\"\n }\n },\n ro: {\n ariaLabel: {\n phone: \"Sună la numărul de telefon {0}\",\n mail: \"Trimiteți un e-mail la {0}\",\n download: \"Descărcați {0}\"\n }\n },\n hr: {\n ariaLabel: {\n phone: \"Nazovi telefonski broj {0}\",\n mail: \"Pošalji e-poštu na {0}\",\n download: \"Preuzmi {0}\"\n }\n },\n cs: {\n ariaLabel: {\n phone: \"Volejte na telefonní číslo {0}\",\n mail: \"Pošlete mail na {0}\",\n download: \"Stáhnout {0}\"\n }\n },\n sl: {\n ariaLabel: {\n phone: \"Pokličite telefonsko številko {0}\",\n mail: \"Pošljite pošto na {0}\",\n download: \"Prenesite {0}\"\n }\n }\n};\n","/**\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$image-radius: 0 !default;\n$image-shadow: none !default;\n\n/* END THEME JSON CONFIG CSS VARS ******************************************************* */\n\n$background-gradient: linear-gradient(rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.2) 0%);\n$background-gradient-bright: linear-gradient(rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.4) 0%);\n\n:host {\n display: flex;\n max-width: 100%;\n font-family: $font-family-base;\n}\n\n:host([use-as-background=\"\"]),\n:host([use-as-background=\"true\"]) {\n @include position-absolute();\n width: 100%;\n height: 100%;\n z-index: auto;\n\n .#{$prefix}image-caption-container,\n .#{$prefix}image-container {\n width: 100% !important;\n height: 100% !important;\n }\n}\n\n.#{$prefix}image-caption-container {\n position: relative;\n width: 100%;\n max-width: 100%;\n display: flex;\n flex-direction: column;\n box-shadow: $image-shadow;\n border-radius: $image-radius;\n\n @if $image-radius != 0 {\n overflow: hidden;\n }\n\n .#{$prefix}image-container {\n position: relative;\n width: 100%;\n max-width: 100%;\n height: auto;\n overflow: hidden;\n display: block;\n\n &.#{$prefix}cover,\n &.#{$prefix}fixedRatio,\n &.#{$prefix}background {\n figure {\n width: 100%;\n height: 100%;\n\n picture {\n width: 100%;\n height: 100%;\n display: flex;\n\n img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n }\n }\n }\n\n figure {\n position: relative;\n margin: 0;\n display: inline;\n\n picture {\n position: relative;\n display: inline;\n\n img {\n width: 100%;\n max-width: 100%;\n display: block;\n }\n }\n }\n\n &.#{$prefix}ratio-2x1 {\n &::after {\n @include aspect-ratio(2, 1);\n }\n }\n\n &.#{$prefix}ratio-2x3 {\n &::after {\n @include aspect-ratio(2, 3);\n }\n }\n\n &.#{$prefix}ratio-16x9 {\n &::after {\n @include aspect-ratio(16, 9);\n }\n }\n\n &.#{$prefix}ratio-1x1 {\n &::after {\n @include aspect-ratio(1, 1);\n }\n }\n\n &.#{$prefix}ratio-3x4 {\n &::after {\n @include aspect-ratio(3, 4);\n }\n }\n\n &.#{$prefix}ratio-4x3 {\n &::after {\n @include aspect-ratio(4, 3);\n }\n }\n\n &.#{$prefix}ratio-3x1 {\n &::after {\n @include aspect-ratio(3, 1);\n }\n }\n\n &.#{$prefix}placeholder {\n &::after {\n content: \"\";\n padding-top: calc((var(--placeholderDimensionHeight) / var(--placeholderDimensionWidth)) * 100%);\n display: block;\n }\n }\n\n &.#{$prefix}ratio-2x1,\n &.#{$prefix}ratio-2x3,\n &.#{$prefix}ratio-16x9,\n &.#{$prefix}ratio-1x1,\n &.#{$prefix}ratio-3x4,\n &.#{$prefix}ratio-4x3,\n &.#{$prefix}ratio-3x1,\n &.#{$prefix}placeholder {\n figure {\n @include position-absolute();\n }\n }\n\n .#{$prefix}image-shadow-overlay {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background: $background-gradient;\n }\n\n .#{$prefix}image-shadow-overlay-bright {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background: $background-gradient-bright;\n }\n\n .#{$prefix}image-violator {\n position: absolute;\n\n @mixin setMargin($margin) {\n &.#{$prefix}v-top {\n top: $margin;\n }\n\n &.#{$prefix}v-bottom {\n bottom: $margin;\n }\n\n &.#{$prefix}v-center {\n top: 50%;\n transform: translateY(-50%);\n }\n\n &.#{$prefix}left {\n left: $margin;\n }\n\n &.#{$prefix}center {\n left: 50%;\n transform: translateX(-50%);\n }\n\n &.#{$prefix}center {\n &.#{$prefix}v-center {\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n }\n }\n\n &.#{$prefix}right {\n right: $margin;\n }\n }\n\n @include for-size(desktop-l-or-larger) {\n @include setMargin(32px);\n }\n\n @include for-size(desktop) {\n @include setMargin(24px);\n }\n\n @include for-size(tablet-or-smaller) {\n @include setMargin(16px);\n }\n }\n }\n}\n\n::slotted(eon-ui-violator) {\n display: block;\n}\n","import { Component, Element, h, Prop, Watch, State, Listen, Event, EventEmitter, Host } from \"@stencil/core\";\nimport { AspectRatio } from \"../../common/types\";\nimport { ImageLocalization, ImageBackgroundSize } from \"./constants/image-types\";\nimport pfx from \"../../utils/style-class-prefix-helper\";\nimport { openModal } from \"../../utils/openModal\";\nimport { getValueForScreenSize } from \"../../utils/screen-helper\";\nimport { LinkTarget } from \"../link/constants/link-types\";\nimport { TARGET_SELF } from \"../link/constants/link-constants\";\nimport { LocalizableComponent, Localization, setCurrentLocalizationDelegate } from \"../../common/localizable-component\";\nimport { computeLinkAriaLabel } from \"../../utils/link-helper\";\nimport { IMAGE_LOCALIZATION } from \"./constants/image-i18n\";\nimport { ConditionalWrapper } from \"../../common/conditional-wrapper\";\nimport { getFirstNestedChild } from \"../../utils/dom-helper\";\nimport { setCssVariable } from \"../../utils/css-variables\";\nimport {\n ImageViolatorVerticalPosition,\n ImageViolatorHorizontalPosition,\n IMAGE_DEFAULT_VIOLATOR_VERTICAL_POSITION,\n IMAGE_DEFAULT_VIOLATOR_HORIZONTAL_POSITION\n} from \"../../constants/global-constants\";\n// import { InitLogging } from \"../../decorators/init-logging\";\n\n/**\n * @slot violator - Holds a single eon-ui-violator element\n */\n@Component({\n tag: \"eon-ui-image\",\n styleUrl: \"image.scss\",\n assetsDirs: [\"assets-image\"],\n shadow: true\n})\nexport class Image implements LocalizableComponent {\n // @InitLogging() sentryTransaction;\n resizeTimeout: NodeJS.Timeout;\n resizeThrottleMs = 300;\n\n private dimensionInSrcPath: boolean = false;\n private srcDimension;\n private srcMobileDimension;\n private srcTabletDimension;\n private srcDesktopDimension;\n private srcDesktopLDimension;\n private placeHolderDimensionWidth;\n private placeHolderDimensionHeight;\n private hasViolator: boolean;\n\n @State() private objectPosition: string;\n @State() private isVisible = false;\n\n /**\n * Caption can be different in each screen size. This holds the current one.\n */\n @State() private finalCaption: string;\n\n /**\n * Alt attribute can be different in each screen size. This holds the current one.\n */\n @State() private finalAlt: string;\n\n /**\n * Title attribute can be different in each screen size. This holds the current one.\n */\n @State() private finalTitle: string;\n\n /**\n * Title attribute can be different in each screen size. This holds the current one.\n */\n @State() private finalWidth: string;\n\n /**\n * Alt attribute can be different in each screen size. This holds the current one.\n */\n @State() private finalAspectRatio: string;\n\n localization: Localization = IMAGE_LOCALIZATION;\n currentLocalization: ImageLocalization;\n\n private currentAriaLabel: string;\n\n @Element() hostElement: HTMLEonUiImageElement;\n\n /**\n * Can be set to provide further information about the image, e.g. if it's appearance is bright or dark.\n */\n @Prop() appearance: \"bright\" | \"dark\";\n\n /**\n * Defines vertical position of the violator\n */\n // eslint-disable-next-line @stencil-community/decorators-style\n @Prop({ mutable: true })\n violatorVerticalPosition: ImageViolatorVerticalPosition = IMAGE_DEFAULT_VIOLATOR_VERTICAL_POSITION;\n\n /**\n * Defines horizontal position of the violator\n */\n // eslint-disable-next-line @stencil-community/decorators-style\n @Prop({ mutable: true })\n violatorHorizontalPosition: ImageViolatorHorizontalPosition = IMAGE_DEFAULT_VIOLATOR_HORIZONTAL_POSITION;\n\n /**\n * Defines the image source that should be displayed on the desktop-large viewport.\n */\n @Prop() srcDesktopL: string;\n\n /**\n * Defines the image source that should be displayed on the desktop viewport.\n */\n @Prop() srcDesktop: string;\n\n /**\n * Defines the image source that should be displayed on the tablet viewport.\n */\n @Prop() srcTablet: string;\n\n /**\n * Defines the image source that should be displayed on the mobile/phone viewport.\n */\n @Prop() srcMobile: string;\n\n /**\n * Defines the original image source that is used by the image. Use this if you\n * don't need src values dependant on the screen size. If any of the size-aware\n * src values is not set, the image will fall to the value of \"src\".\n */\n @Prop() src: string;\n\n /**\n * Defines the value of the alt attribute for the image passed to \"src\" (default one).\n */\n @Prop() alt: string;\n\n /**\n * Defines the alt that should be displayed on the desktop-large viewport.\n */\n @Prop() altDesktopL: string;\n\n /**\n * Defines the alt that should be displayed on the desktop viewport.\n */\n @Prop() altDesktop: string;\n\n /**\n * Defines the alt that should be displayed on the tablet viewport.\n */\n @Prop() altTablet: string;\n\n /**\n * Defines the alt that should be displayed on the mobile/phone viewport.\n */\n @Prop() altMobile: string;\n\n /**\n * Defines the width of the image. If not set, image width sticks to the format of the image on the desktop-large viewport.\n * Image can adapt full width of the container it is placed in, Only when value of width is \"100%\"\n * @example \"200px\", \"100%\"\n */\n @Prop({ mutable: true }) widthDesktopL: string;\n\n /**\n * Defines the width of the image. If not set, image width sticks to the format of the image on the desktop viewport.\n * Image can adapt full width of the container it is placed in, Only when value of width is \"100%\"\n * @example \"200px\", \"100%\"\n */\n @Prop({ mutable: true }) widthDesktop: string;\n\n /**\n * Defines the width of the image. If not set, image width sticks to the format of the image on the tablet viewport.\n * Image can adapt full width of the container it is placed in, Only when value of width is \"100%\"\n * @example \"200px\", \"100%\"\n */\n @Prop({ mutable: true }) widthTablet: string;\n\n /**\n * Defines the width of the image. If not set, image width sticks to the format of the image on the mobile/phone viewport.\n * Image can adapt full width of the container it is placed in, Only when value of width is \"100%\"\n * @example \"200px\", \"100%\"\n */\n @Prop({ mutable: true }) widthMobile: string;\n\n /**\n * Defines the width of the image. If not set, image width sticks to the format of the image.\n * Image can adapt full width of the container it is placed in, Only when value of width is \"100%\"\n * @example \"200px\", \"100%\"\n */\n @Prop({ mutable: true }) width: string = \"100%\";\n\n /**\n * Defines the height of the image. If not set, image height sticks to the format of the image.\n * Image can adapt full height of the container it is placed inside, Only when value of height is \"auto\"\n * @example \"200px\", \"100px\"\n */\n @Prop() height: string;\n\n /**\n * Defines the horizontal image position.\n * @example \"left\", \"center\", \"right\", \"30px\"\n * @default \"center\"\n */\n @Prop({ mutable: true }) positionX: string = \"center\";\n\n /**\n * Defines the vertical image position.\n * @example \"top\", \"center\", \"bottom\", \"30px\"\n * @default \"center\"\n */\n @Prop({ mutable: true }) positionY: string = \"center\";\n\n /**\n * Set this to true if the image will be used as a full size background image of the parent div.\n */\n @Prop({ reflect: true }) useAsBackground: boolean;\n\n /**\n * If image is used in background mode you can define if css background-size \"cover\" or \"contain\" should be set.\n */\n @Prop({ reflect: true, mutable: true }) objectFit: ImageBackgroundSize;\n\n /**\n * Defines the aspect ratio of the image.\n */\n @Prop() aspectRatio: AspectRatio;\n\n /**\n * Defines the aspect ratio for desktop breakpoint.\n */\n @Prop() aspectRatioDesktop: AspectRatio;\n\n /**\n * Defines the aspect ratio for desktop large breakpoint.\n */\n @Prop() aspectRatioDesktopL: AspectRatio;\n\n /**\n * Defines the aspect ratio for tablet breakpoint.\n */\n @Prop() aspectRatioTablet: AspectRatio;\n\n /**\n * Defines the aspect ratio for mobile breakpoint.\n */\n @Prop() aspectRatioMobile: AspectRatio;\n\n /**\n * Defines the caption for the image passed to \"src\" (default one).\n */\n @Prop() caption: string;\n\n /**\n * Defines the caption that should be displayed on the desktop-large viewport.\n */\n @Prop() captionDesktopL: string;\n\n /**\n * Defines the caption that should be displayed on the desktop viewport.\n */\n @Prop() captionDesktop: string;\n\n /**\n * Defines the caption that should be displayed on the tablet viewport.\n */\n @Prop() captionTablet: string;\n\n /**\n * Defines the caption that should be displayed on the mobile/phone viewport.\n */\n @Prop() captionMobile: string;\n\n /**\n * Allows to set a copyright text for caption component.\n */\n @Prop() captionCopyright: string;\n\n /**\n * If this is set, copywrite will come in a new line beneath the caption at the defined pixel value. By that it is possible to control line wrap independently of breakpoint, but based on the image width.\n */\n @Prop() captionVerticalBreakpoint: number;\n\n /**\n * If enabled, the image will be loaded lazily when it's visible in the viewport. Defaults to false.\n */\n @Prop({ mutable: true }) lazy: boolean = false;\n\n /**\n * rootMargin: the image will be loaded lazily when it is \"rootMargin\" pixels away from entering the viewport.\n * Instead of loading the image just when they exactly enter the viewport,\n * load the images when they are, suppose 300px away from entering the viewport.\n * This provides additional time, between the load trigger and the actual entry in the viewport, for the images to load.\n */\n @Prop({ mutable: true }) rootMargin: string = \"100\";\n\n /**\n * If enabled, the image is overlaid with a 20% opacity E.ON darkgrey tint.\n */\n @Prop({ mutable: true }) shadowOnImage: boolean = false;\n\n /**\n * If enabled, the image is overlaid with a 40% opacity E.ON white tint.\n */\n @Prop({ mutable: true }) brightShadowOnImage: boolean = false;\n\n /**\n * use this property to open a modal, the modal must have the same modal-id
\n * see component: Modal\n */\n\n @Prop() openModalId: string;\n\n /**\n * Defines the value of the title attribute for the image passed to \"title\" (default one).\n */\n @Prop() titleDefault: string;\n\n /**\n * Defines the title that should be displayed on the desktop-large viewport\n */\n @Prop() titleDesktopL: string;\n\n /**\n * Defines the title that should be displayed on the desktop viewport.\n */\n @Prop() titleDesktop: string;\n\n /**\n * Defines the title that should be displayed on the tablet viewport\n */\n @Prop() titleTablet: string;\n\n /**\n * Defines the title that should be displayed on the mobile/phone viewport\n */\n @Prop() titleMobile: string;\n\n /**\n * Specifies the label to use for accessibility.\n * If not set a computed aria label will set. It depends on the closet lang attribute-\n */\n @Prop() linkAriaLabel: string;\n\n /**\n * Defines the target url of a image.\n * Valid protocols are \"http://\", \"https://\", \"mailto:\" and \"tel:\".\n */\n @Prop() linkHref: string;\n\n /**\n * Specifies how the link is opened in the browser, e.g. in new window/tab.\n * @example \"_blank\", \"_self\", \"_parent\", \"_top\"\n * @default \"_self\"\n */\n @Prop({ mutable: true }) linkTarget: LinkTarget = TARGET_SELF;\n\n /**\n * this property sets the title of the link\n */\n @Prop({ mutable: true }) linkTitle: string;\n\n /**\n * this property disable the context menu of this image (disable right click, dragging, mousedown on image)\n */\n @Prop() preventUserInteraction: boolean = false;\n\n /**\n * Triggered when the component has been loaded\n */\n @Event() imageLoaded: EventEmitter;\n\n /**\n * Triggered when the image src has been loaded\n */\n @Event() imageSrcLoaded: EventEmitter;\n\n /**\n * Raised when the image has been clicked.\n */\n @Event() imageClick: EventEmitter;\n\n /**\n * If defined, component will parse image src strings based on the given character to get dimensions.\n * sizes should be available in the following format with a flexible character inbetween: [WIDTH][CHARACTER][HEIGHT].\n * e.g. 1024x768, 1024.768\n * \\d{1,}\\x\\d{1,}\n */\n @Prop() imageDimensionSplitCharacter: string;\n\n componentWillLoad() {\n this.setCurrentLocalization();\n this.computeObjectPosition();\n this.imageLazyLoading(this.hostElement, `${this.rootMargin}px`);\n this.setCaption();\n this.setAlt();\n this.setTitle();\n this.setWidth();\n this.setAspectRatio();\n this.computeAriaLabel();\n this.handleImageDimensionsIfPossible();\n this.hasViolator = !!getFirstNestedChild(this.hostElement, \"eon-ui-violator\");\n }\n\n componentDidLoad() {\n this.setPlaceHolderDimensionCssVars();\n this.imageLoaded.emit();\n this.removeContextMenu();\n }\n\n @Watch(\"positionX\")\n @Watch(\"positionY\")\n private computeObjectPosition() {\n const objectPositionX: string = this.positionX ? this.positionX : \"center\";\n const objectPositionY: string = this.positionY ? this.positionY : \"center\";\n this.objectPosition = `${objectPositionX} ${objectPositionY}`;\n }\n\n @Watch(\"preventUserInteraction\")\n removeContextMenu() {\n if (!this.preventUserInteraction) {\n this.hostElement.removeEventListener(\"contextmenu\", (event) => {\n this.preventUserInteractionOnImage(event);\n });\n this.hostElement.removeEventListener(\"mousedown\", (event) => {\n this.preventUserInteractionOnImage(event);\n });\n } else {\n this.hostElement.addEventListener(\"contextmenu\", (event) => {\n this.preventUserInteractionOnImage(event);\n });\n this.hostElement.addEventListener(\"mousedown\", (event) => {\n this.preventUserInteractionOnImage(event);\n });\n }\n }\n\n setCurrentLocalization() {\n setCurrentLocalizationDelegate(this);\n }\n\n @Listen(\"resize\", { target: \"window\" })\n handleResize() {\n if (!this.resizeTimeout) {\n this.resizeTimeout = setTimeout(() => {\n this.setCaption();\n this.setAlt();\n this.setTitle();\n this.setWidth();\n this.setAspectRatio();\n this.resizeTimeout = null;\n if (this.dimensionInSrcPath) this.setPlaceHolderDimension();\n this.setPlaceHolderDimensionCssVars();\n }, this.resizeThrottleMs);\n }\n }\n\n preventUserInteractionOnImage(event: Event) {\n if (this.preventUserInteraction) event.preventDefault();\n }\n\n handleImageDimensionsIfPossible() {\n if (this.imageDimensionSplitCharacter) {\n this.getImageDimensionsFromSource();\n if (this.dimensionInSrcPath) this.setPlaceHolderDimension();\n }\n }\n\n private extractImageDimensionFromSource(src: string) {\n let dimension;\n let patterNumber = \"\\\\d{1,}\";\n let patterSeparator = `\\\\${this.imageDimensionSplitCharacter}`;\n let rx = new RegExp(`${patterNumber}${patterSeparator}${patterNumber}`, \"g\");\n let dimensionString = rx.exec(src);\n\n if (dimensionString) {\n // get last image dimension available in string\n let tempDimensionArr = dimensionString[dimensionString.length - 1].split(this.imageDimensionSplitCharacter);\n\n dimension = {\n width: tempDimensionArr[0],\n height: tempDimensionArr[1]\n };\n }\n\n return dimension;\n }\n\n private getImageDimensionsFromSource() {\n this.src && (this.srcDimension = this.extractImageDimensionFromSource(this.src));\n this.srcMobile && (this.srcMobileDimension = this.extractImageDimensionFromSource(this.srcMobile));\n this.srcTablet && (this.srcTabletDimension = this.extractImageDimensionFromSource(this.srcTablet));\n this.srcDesktop && (this.srcDesktopDimension = this.extractImageDimensionFromSource(this.srcDesktop));\n this.srcDesktopL && (this.srcDesktopLDimension = this.extractImageDimensionFromSource(this.srcDesktopL));\n\n if (this.srcDimension) this.dimensionInSrcPath = true;\n }\n\n private setPlaceHolderDimension() {\n this.placeHolderDimensionWidth = getValueForScreenSize(this.srcDimension?.width, {\n mobile: this.srcMobileDimension?.width,\n tablet: this.srcTabletDimension?.width,\n desktop: this.srcDesktopDimension?.width,\n desktopL: this.srcDesktopLDimension?.width\n });\n\n this.placeHolderDimensionHeight = getValueForScreenSize(this.srcDimension?.height, {\n mobile: this.srcMobileDimension?.height,\n tablet: this.srcTabletDimension?.height,\n desktop: this.srcDesktopDimension?.height,\n desktopL: this.srcDesktopLDimension?.height\n });\n }\n\n private setPlaceHolderDimensionCssVars() {\n if (this.placeHolderDimensionWidth && this.placeHolderDimensionHeight) {\n setCssVariable(this.hostElement, `--placeholderDimensionWidth`, `${this.placeHolderDimensionWidth}`);\n setCssVariable(this.hostElement, `--placeholderDimensionHeight`, `${this.placeHolderDimensionHeight}`);\n }\n }\n\n private imageLazyLoading(element: HTMLElement, rootMargin: string) {\n if (this.lazy && window && window.IntersectionObserver) {\n const imageObserver = new window.IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n let image = entry.target;\n this.isVisible = true;\n imageObserver.unobserve(image);\n }\n });\n },\n { rootMargin }\n );\n imageObserver.observe(element);\n }\n }\n\n handleClick(_event: Event) {\n if (!!this.openModalId) {\n openModal(this.openModalId);\n }\n this.imageClick.emit();\n }\n\n @Watch(\"caption\")\n @Watch(\"captionMobile\")\n @Watch(\"captionTablet\")\n @Watch(\"captionDesktop\")\n @Watch(\"captionDesktopL\")\n private setCaption() {\n this.finalCaption = getValueForScreenSize(this.caption, {\n mobile: this.captionMobile,\n tablet: this.captionTablet,\n desktop: this.captionDesktop,\n desktopL: this.captionDesktopL\n });\n }\n\n @Watch(\"alt\")\n @Watch(\"altMobile\")\n @Watch(\"altTablet\")\n @Watch(\"altDesktop\")\n @Watch(\"altDesktopL\")\n private setAlt() {\n this.finalAlt = getValueForScreenSize(this.alt, {\n mobile: this.altMobile,\n tablet: this.altTablet,\n desktop: this.altDesktop,\n desktopL: this.altDesktopL\n });\n }\n\n @Watch(\"titleDefault\")\n @Watch(\"titleMobile\")\n @Watch(\"titleTablet\")\n @Watch(\"titleDesktop\")\n @Watch(\"titleDesktopL\")\n private setTitle() {\n this.finalTitle = getValueForScreenSize(this.titleDefault, {\n mobile: this.titleMobile,\n tablet: this.titleTablet,\n desktop: this.titleDesktop,\n desktopL: this.titleDesktopL\n });\n }\n\n @Watch(\"width\")\n @Watch(\"widthMobile\")\n @Watch(\"widthTablet\")\n @Watch(\"widthDesktop\")\n @Watch(\"widthDesktopL\")\n private setWidth() {\n this.finalWidth = getValueForScreenSize(this.width, {\n mobile: this.widthMobile,\n tablet: this.widthTablet,\n desktop: this.widthDesktop,\n desktopL: this.widthDesktopL\n });\n }\n\n @Watch(\"aspectRatio\")\n @Watch(\"aspectRatioDesktop\")\n @Watch(\"aspectRatioDesktopL\")\n @Watch(\"aspectRatioTablet\")\n @Watch(\"aspectRatioMobile\")\n private setAspectRatio() {\n this.finalAspectRatio = getValueForScreenSize(this.aspectRatio, {\n mobile: this.aspectRatioMobile,\n tablet: this.aspectRatioTablet,\n desktop: this.aspectRatioDesktop,\n desktopL: this.aspectRatioDesktopL\n });\n }\n\n @Watch(\"linkHref\")\n private computeAriaLabel() {\n if (this.linkAriaLabel || !this.currentLocalization) {\n this.currentAriaLabel = this.linkAriaLabel;\n return;\n }\n this.currentAriaLabel = computeLinkAriaLabel(this.currentLocalization, this.linkHref, null);\n }\n\n render() {\n let autoWidth: boolean = Boolean(this.finalWidth === \"auto\" || !this.finalWidth);\n let isCover: boolean = Boolean(this.width && this.height);\n let isPlaceholder: boolean =\n this.imageDimensionSplitCharacter &&\n this.lazy &&\n !this.aspectRatio &&\n !this.useAsBackground &&\n this.dimensionInSrcPath;\n let isFixedRatio: boolean = Boolean(this.aspectRatio) || isPlaceholder;\n let isBackground: boolean = Boolean(this.useAsBackground);\n let ariaLabel = this.linkAriaLabel || this.currentAriaLabel;\n let hostWidth;\n\n // This calculation takes the sizes of the dimensionInSrcPath anytime they are available.\n // Nevertheless, that causes issues when a ratio (2x1) is provided instead of an actual image size.\n if (!isBackground) {\n if (autoWidth) {\n if (this.dimensionInSrcPath) {\n hostWidth = this.placeHolderDimensionWidth + \"px\";\n } else if (this.aspectRatio) {\n hostWidth = \"100%\";\n }\n } else {\n hostWidth = this.finalWidth;\n }\n }\n\n return (\n \n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}\n
this.handleClick(event)}>\n \n (\n \n {imageTag}\n \n )}\n defaultWrapper={(imageTag) => imageTag}\n >\n {/*{this is the image tag}*/}\n
\n \n {(!this.lazy || this.isVisible) && this.srcDesktopL ? (\n \n ) : null}\n {(!this.lazy || this.isVisible) && (this.srcDesktop || this.src) ? (\n \n ) : null}\n {(!this.lazy || this.isVisible) && this.srcTablet ? (\n \n ) : null}\n {(!this.lazy || this.isVisible) && this.srcMobile ? (\n \n ) : null}\n this.imageSrcLoaded.emit()}\n />\n \n
\n {this.shadowOnImage &&
}\n {this.brightShadowOnImage &&
}\n \n {this.hasViolator && (\n \n \n
\n )}\n \n {!isBackground && (this.finalCaption || this.captionCopyright) && (\n \n )}\n \n
\n );\n }\n}\n","import { BackgroundColor } from \"./../../background/constants/background-types\";\nimport { ProgressCircleSchemeDefinition } from \"./progress-circle-types\";\nimport * as AllColors from \"../../../constants/colors\";\nimport { toConstantCase } from \"../../../utils/string-format\";\nimport { createProgressCircleMapDefinition } from \"../../../utils/scheme-helper\";\n\nfunction createSchemes() {\n let newSchemes: AllColors.ProgressCircleSchemeConfiguration = {};\n\n AllColors.PROGRESS_CIRCLE_SCHEMES.forEach((element) => {\n newSchemes[element.schemeName] = {\n textColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n iconColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n backgroundColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}`],\n progressBackgroundColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_OPACITY_10`],\n progressColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_OPACITY_10`],\n iconColorOnHover: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`],\n progressBackgroundColorOnHover: AllColors[`COLOR_${toConstantCase(element.schemeName)}_OPACITY_10`],\n progressColorOnHover: AllColors[`COLOR_${toConstantCase(element.schemeName)}_OPACITY_10`],\n progressSuccessColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_OPACITY_10`],\n iconSuccessColor: AllColors[`COLOR_${toConstantCase(element.schemeName)}_FONT`]\n };\n if (element.scheme) {\n newSchemes[element.schemeName] = { ...newSchemes[element.schemeName], ...element.scheme };\n }\n });\n return newSchemes;\n}\nexport const PROGRESS_CIRCLE_SCHEME_CONFIG: AllColors.ProgressCircleSchemeConfiguration = createSchemes();\n\nexport const PROGRESS_CIRCLE_SCHEME_MAP: Map = new Map(\n Object.entries(createProgressCircleMapDefinition()).map(([background, config]) => [\n background as BackgroundColor,\n PROGRESS_CIRCLE_SCHEME_CONFIG[config as string]\n ])\n);\n","/**\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$circle-size: 44px;\n$circle-background: v(progressBackgroundColor);\n$circle-color: v(progressColor);\n$inset-size: 36px;\n$inset-color: v(backgroundColor);\n$transition-length: 1s;\n\n.#{$prefix}circle-center-wrapper {\n position: absolute;\n z-index: 5;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n\n &__icon {\n color: v(iconColor);\n }\n &__text {\n color: v(textColor);\n }\n}\n\n.#{$prefix}progress-circle {\n //margin: 20px auto;\n width: $circle-size;\n height: $circle-size;\n position: relative;\n overflow: hidden;\n\n &--icon {\n &:hover {\n background-color: v(progressBackgroundColorOnHover);\n\n eon-ui-icon {\n color: var(--iconColorOnHover);\n }\n\n .#{$prefix}progress-circle__slice {\n .#{$prefix}progress-circle__fill {\n background-color: v(progressColorOnHover);\n }\n }\n }\n }\n\n background-color: $circle-background;\n border-radius: 50%;\n .#{$prefix}progress-circle__slice,\n .#{$prefix}progress-circle__fill {\n width: $circle-size;\n height: $circle-size;\n position: absolute;\n -webkit-backface-visibility: hidden;\n transition: transform $transition-length;\n border-radius: 50%;\n }\n\n .#{$prefix}progress-circle__slice {\n clip: rect(0px, $circle-size, $circle-size, $circle-size * 0.5);\n\n .#{$prefix}progress-circle__fill {\n clip: rect(0px, $circle-size * 0.5, $circle-size, 0px);\n background-color: $circle-color;\n\n &--error {\n background-color: v(eon-red);\n }\n }\n }\n\n .#{$prefix}progress-circle__overlay {\n width: $inset-size;\n height: $inset-size;\n position: absolute;\n margin-left: ($circle-size - $inset-size) * 0.5;\n margin-top: ($circle-size - $inset-size) * 0.5;\n background-color: $inset-color;\n border-radius: 50%;\n }\n\n $i: 0;\n $increment: customDivide(180deg, 100);\n\n @while $i <= 100 {\n &[data-progress=\"#{$i}\"] {\n .#{$prefix}progress-circle__slice.#{$prefix}full,\n .#{$prefix}progress-circle__fill {\n transform: rotate($increment * $i);\n }\n\n .#{$prefix}progress-circle__fill.#{$prefix}progress-circle__bar {\n transform: rotate($increment * $i * 2);\n }\n\n $i: $i + 1;\n }\n }\n &[data-progress=\"100\"] {\n .#{$prefix}progress-circle__slice {\n .#{$prefix}progress-circle__fill {\n background-color: v(progressSuccessColor);\n }\n }\n\n .#{$prefix}circle-center-wrapper {\n &__icon {\n color: v(iconSuccessColor);\n }\n &__text {\n color: v(iconSuccessColor);\n }\n }\n }\n}\n","import { Component, Host, Element, h, Prop, Watch, State, Event, EventEmitter } from \"@stencil/core\";\nimport { applySchemeDelegate, ColorableComponent, setCssVariablesDelegate } from \"../../common/colorable-component\";\nimport pfx from \"../../utils/style-class-prefix-helper\";\nimport { ProgressCircleSchemeDefinition, ProgressCircleSchemeName } from \"./constants/progress-circle-types\";\nimport { PROGRESS_CIRCLE_SCHEME_CONFIG, PROGRESS_CIRCLE_SCHEME_MAP } from \"./constants/progress-cirlce-constants\";\nimport { ProgressCircleSchemeConfiguration } from \"../../constants/colors\";\nimport { setCssVariable } from \"../../utils/css-variables\";\n// import { InitLogging } from \"../../decorators/init-logging\";\n@Component({\n tag: \"eon-ui-progress-circle\",\n styleUrl: \"progress-circle.scss\",\n shadow: true\n})\nexport class ProgressCircle\n implements ColorableComponent> {\n // @InitLogging() sentryTransaction;\n schemeConfig: ProgressCircleSchemeConfiguration = PROGRESS_CIRCLE_SCHEME_CONFIG;\n schemeMap = PROGRESS_CIRCLE_SCHEME_MAP;\n // private _iconColor: string;\n\n @Element() hostElement: HTMLEonUiProgressCircleElement;\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: ProgressCircleSchemeName;\n\n /**\n * The components active scheme. If {@link scheme} is set, it will be set to the corresponding scheme.\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 @State() activeScheme: ProgressCircleSchemeDefinition;\n\n /**\n * The progress the circle should show in percent\n */\n @Prop() progress: number;\n /**\n * The icon which should be shown in the middle (only works when no text is provided)\n */\n @Prop() iconName: string;\n /**\n * Sets the progress circular in error mode\n */\n @Prop() error: boolean;\n /**\n * Shows the current progress as text in the center\n */\n @Prop() showProgressText: boolean;\n\n /**\n * The icon color as inline style (can be HEX or RGB Code)\n */\n @Prop() iconColor: string;\n\n /**\n * Controls whether the text should be animated counting up or not\n */\n @Prop() animateText: boolean = true;\n\n @State() progressText: string = \"\";\n\n /**\n * Fires when a user clicks on the icon inside the circle\n */\n @Event() iconClick: EventEmitter;\n\n componentWillLoad() {\n this.applyScheme();\n this.handleIconColor();\n }\n\n componentDidLoad() {\n this.setCssVariables();\n this.initProgressText();\n this.handleIconColor();\n }\n\n @Watch(\"scheme\")\n applyScheme() {\n applySchemeDelegate(this);\n this.handleIconColor();\n }\n\n @Watch(\"activeScheme\")\n setCssVariables(): void {\n setCssVariablesDelegate(this);\n }\n @Watch(\"iconColor\")\n handleIconColor() {\n // this._iconColor = !!this.iconColor ? this.iconColor : `var(--${this.activeScheme.iconColor})`;\n !!this.iconColor && setCssVariable(this.hostElement, \"--iconColor\", `var(--eon-${this.iconColor}`);\n }\n\n /**\n * Sets the progress text to the current provided progress\n */\n initProgressText() {\n if (this.animateText) {\n this.animateProgress(this.progress, 0); //initially count up the value from zero\n } else {\n this.progressText = this.progress.toString();\n }\n }\n\n @Watch(\"progress\")\n animateProgress(newValue: number, oldValue: number) {\n if (this.animateText) {\n this.animateProgressText(oldValue, newValue, 500);\n } else {\n this.progressText = newValue.toString();\n }\n }\n\n /**\n * Counts from given start to end an changes the progressText on each step so the text is shown animated\n * @param start start of the number Animation\n * @param end end of the number Animation\n * @param duration animation duration\n */\n animateProgressText(start: number, end: number, duration) {\n if (start === end || !start || !end) return;\n const range = end - start;\n let current = start;\n const increment = end > start ? 1 : -1;\n const stepTime = Math.abs(Math.floor(duration / range));\n\n var timer = setInterval(() => {\n current += increment;\n this.progressText = current.toString();\n if (current == end) {\n clearInterval(timer);\n }\n }, stepTime);\n }\n\n /**\n * Event fires when the icon is clicked\n */\n handleIconClick() {\n this.iconClick.emit();\n }\n\n render() {\n return (\n \n \n \n {this.iconName && (\n this.handleIconClick()}\n // style={{ color: this._iconColor }}\n >\n )}\n {this.showProgressText && (\n {`${this.progressText}%`}\n )}\n \n\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n \n
\n );\n }\n}\n"],"mappings":"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"}