{"version":3,"file":"rb_wixui.thunderbolt[WPhoto_CirclePhoto].3f25cc39.bundle.min.js","mappings":"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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///external umd {\"amd\":\"react\",\"commonjs\":\"react\",\"commonjs2\":\"react\",\"root\":\"React\"}","webpack:///../../../node_modules/@babel/runtime/helpers/extends.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///../../editor-elements-common-utils/dist/esm/commons/vectorImageUtils.js","webpack:///../../thunderbolt-elements/src/components/WPhoto/constants.ts","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/WPhotoBase.tsx","webpack:///../../thunderbolt-elements/src/components/WPhoto/utils/url.ts","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/skinComps/BasicWPhoto/styles/CirclePhoto.scss","webpack:///../../../node_modules/clsx/dist/clsx.mjs","webpack:///../../editor-elements-common-utils/dist/esm/commons/utils.js","webpack:///../../editor-elements-common-utils/dist/esm/cssEditing/class-names-formmater.js","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/WPhotoWrapper.scss","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/WPhotoWrapper.tsx","webpack:///../../editor-elements-common-utils/dist/esm/commons/a11y.js","webpack:///../../thunderbolt-elements/src/components/Link/constants.ts","webpack:///../../thunderbolt-elements/src/components/Link/viewer/Link.tsx","webpack:///../../thunderbolt-elements/src/components/WPhoto/WPhoto.semanticClassNames.ts","webpack:///../../../node_modules/@wix/image/dist/esm/Image.module.scss","webpack:///../../../node_modules/@wix/image-kit/dist/esm/helpers/imageServiceConstants.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/helpers/utils.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/helpers/imageServiceUtils.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/helpers/imageServiceFeatureSupportObject.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/helpers/populateFeatureSupport.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/engines/attributes/backgroundAttributes.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/engines/attributes/imgAttributes.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/engines/attributes/SVGAttributes.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/helpers/imageTransformParts.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/helpers/imageTransformOptions.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/api/transform.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/helpers/browserFeatureSupport.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/engines/transforms.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/api/uri.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/helpers/imagePlaceholderUtils.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/api/max/api.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/api/srcset.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/engines/attributes.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/sdk/api.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/sdk/index.js","webpack:///../../../node_modules/@wix/image-kit/dist/esm/api/max/index.js","webpack:///../../../node_modules/@wix/image/dist/esm/Image.js","webpack:///../../thunderbolt-elements/src/components/Image/viewer/style/Image.module.scss","webpack:///../../thunderbolt-elements/src/components/Image/viewer/Image.tsx","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/assets/zoom-in.svg","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/style/zoomedImage.scss","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/assets/zoom-out.svg","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/ZoomedImageUtils.ts","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/ZoomedImage.tsx","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/skinComps/BasicWPhoto/styles/BasicWPhotoSkin.scss","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/skinComps/BasicWPhoto/BasicWPhotoSkin.tsx","webpack:///../../thunderbolt-elements/src/components/WPhoto/utils/index.tsx","webpack:///../../editor-elements-common-utils/dist/esm/bi/analytics/hooks.js","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/skinComps/BasicWPhoto/CirclePhoto.skin.tsx","webpack:///../../editor-elements-integrations/dist/esm/thunderbolt/createComponentMapper.js","webpack:///../../editor-elements-common-utils/dist/esm/bi/analytics/utils.js","webpack:///../../editor-elements-common-utils/dist/esm/bi/analytics/consts.js","webpack:///../../editor-elements-common-utils/dist/esm/bi/analytics/types.js","webpack:///../../editor-elements-common-utils/dist/esm/commons/experiments.js","webpack:///../../thunderbolt-elements/src/components/WPhoto/viewer/WPhoto.controller.ts","webpack:///./entries/rb_wixui.thunderbolt[WPhoto_CirclePhoto].ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"rb_wixui.thunderbolt[WPhoto_CirclePhoto]\", [\"react\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rb_wixui.thunderbolt[WPhoto_CirclePhoto]\"] = factory(require(\"react\"));\n\telse\n\t\troot[\"rb_wixui.thunderbolt[WPhoto_CirclePhoto]\"] = factory(root[\"React\"]);\n})((typeof self !== 'undefined' ? self : this), function(__WEBPACK_EXTERNAL_MODULE_Xdf___) {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE_Xdf___;","function _extends() {\n  return module.exports = _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _extends.apply(null, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export const COMP_ID_PLACEHOLDER = '<%= compId %>';\nconst COMP_ID_PLACEHOLDER_REGEX = new RegExp(COMP_ID_PLACEHOLDER, 'g');\nexport const replaceCompIdPlaceholder = (str, compId) => str.replace(COMP_ID_PLACEHOLDER_REGEX, compId);\nexport const replaceCompIdPlaceholderInSvgContent = (vectorImageProps, id) => {\n    if (vectorImageProps && vectorImageProps.svgContent) {\n        vectorImageProps.svgContent = replaceCompIdPlaceholder(vectorImageProps.svgContent, id);\n    }\n};\nexport const getFilterEffectStyle = (id, filterEffectSvgUrl) => {\n    return filterEffectSvgUrl\n        ? {\n            '--filter-effect-svg-url': replaceCompIdPlaceholder(filterEffectSvgUrl, id),\n        }\n        : {};\n};\nexport const replaceContentIds = (svg, compId) => {\n    const idMap = {};\n    // need to account for compId placeholder `<%= compId %>`\n    const result = svg.replace(/\\sid=\"([^\"<]+)\"/g, (match, id) => {\n        const unique = id.endsWith(compId) ? id : `${id}_${compId}`;\n        idMap[id] = unique;\n        return ` id=\"${unique}\"`;\n    });\n    return Object.keys(idMap).reduce((current, key) => current.replace(new RegExp(`(${key})(?!_${compId})`, 'g'), idMap[key]), result);\n};\nexport const modifyA11YAttributes = (svg, ariaLabel) => {\n    let result = svg;\n    const ariaLabelMatcher = /aria-label=\"[^\"]*\"/;\n    const ariaHiddenMatcher = /aria-hidden=\"?true\"?/;\n    const roleMatcher = /role=\"?presentation\"?/;\n    // if the svg contains an aria-label modify it, else append it\n    if (svg.match(ariaLabelMatcher)) {\n        result = svg.replace(ariaLabelMatcher, `aria-label=\"${ariaLabel}\"`);\n    }\n    else {\n        result = svg.replace(/(<svg[^>]*)>/, `$1 aria-label=\"${ariaLabel}\">`);\n    }\n    result = result.replace(ariaHiddenMatcher, '');\n    result = result.replace(roleMatcher, `role=\"img\"`);\n    return result;\n};\n//# sourceMappingURL=vectorImageUtils.js.map","export const TRANSPARENT_BASE64_PIXEL =\n  'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';\n\nexport const TestIds = {\n  expandButton: 'expandButton',\n  zoomButton: 'zoomButton',\n};\n\nexport const TranslationKeys = {\n  ARIA_LABEL_NAMESPACE: 'ariaLabels',\n  EXPAND_LABEL_KEY: 'WPhoto_AriaLabel_Expand',\n  EXPAND_FALLBACK_LABEL: 'Expand',\n  ZOOM_IN_LABEL_KEY: 'WPhoto_AriaLabel_ZoomIn',\n  ZOOM_IN_FALLBACK_LABEL: 'Zoom in',\n};\n","import * as React from 'react';\nimport { replaceCompIdPlaceholder } from '@wix/editor-elements-common-utils';\nimport type { IWPhotoProps } from '../WPhoto.types';\nimport { TRANSPARENT_BASE64_PIXEL } from '../constants';\nimport { isExternalUrl } from '../utils/url';\n\nconst WPhoto: React.FC<IWPhotoProps> = props => {\n  const {\n    skin: WPhotoClass,\n    id,\n    uri,\n    alt,\n    name,\n    width,\n    height,\n    displayMode,\n    focalPoint,\n    filterEffectSvgUrl: originalFilterEffectSvgUrl,\n    quality,\n    crop,\n    onSizeChange,\n    onLoad,\n    getPlaceholder,\n    containerWidth,\n    containerHeight,\n    isInFirstFold,\n    hasAnimation,\n    responsiveImageProps,\n    zoomedImageResponsiveOverride,\n    encoding,\n  } = props;\n\n  // This only runs for external image URLs set using SDK code. Once the image\n  // is loaded we update original width/height props so fit mode can use correct\n  // aspect ratio with the new external image source.\n  const handleExternalImageLoad: React.ReactEventHandler = event => {\n    const { naturalWidth, naturalHeight } = event.target as HTMLImageElement;\n    if (\n      !naturalWidth ||\n      !naturalHeight ||\n      (naturalWidth === width && naturalHeight === height)\n    ) {\n      return;\n    }\n\n    onSizeChange(naturalWidth, naturalHeight);\n    onLoad?.();\n  };\n\n  const imageProps = {\n    containerId: id,\n    uri: uri || TRANSPARENT_BASE64_PIXEL,\n    alt,\n    name,\n    width,\n    height,\n    displayMode,\n    focalPoint,\n    quality,\n    crop,\n    onLoad: onLoad && isExternalUrl(uri) ? handleExternalImageLoad : undefined,\n    getPlaceholder,\n    containerWidth,\n    containerHeight,\n    isInFirstFold,\n    hasAnimation,\n    responsiveImageProps,\n    zoomedImageResponsiveOverride,\n    encoding,\n  };\n  const filterEffectSvgUrl = originalFilterEffectSvgUrl\n    ? replaceCompIdPlaceholder(originalFilterEffectSvgUrl, id)\n    : undefined;\n  return (\n    <WPhotoClass\n      {...props}\n      imageProps={imageProps}\n      filterEffectSvgUrl={filterEffectSvgUrl}\n    />\n  );\n};\n\nexport default WPhoto;\n","export const isExternalUrl = (url: string) =>\n  /(^https?)|(^data)|(^blob)|(^\\/\\/)/.test(url);\n","// extracted by mini-css-extract-plugin\nexport default {\"link\":\"mGoGm2\",\"image\":\"lDHlrQ\",\"root\":\"dWLwCn\"};","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { keyCodes } from './a11y';\nexport const isThemeFont = (value) => /^font_\\d+$/.test(value);\nexport const debounce = (fn, ms = 0, { leading = false, trailing = true } = {}) => {\n    let timeoutId = null;\n    return function (...args) {\n        if (leading && timeoutId === null) {\n            fn.apply(this, args);\n        }\n        if (timeoutId) {\n            clearTimeout(timeoutId);\n        }\n        if (!trailing || !leading || timeoutId) {\n            timeoutId = setTimeout(() => {\n                if (trailing) {\n                    fn.apply(this, args);\n                }\n                timeoutId = null;\n            }, ms);\n        }\n        else {\n            // Special case for a single call with both leading and trailing (see tests)\n            timeoutId = setTimeout(() => {\n                timeoutId = null;\n            }, ms);\n        }\n    };\n};\nexport const throttle = (func, ms = 0) => {\n    let isThrottled = false, savedArgs;\n    function wrapper(...args) {\n        if (isThrottled) {\n            savedArgs = args;\n            return;\n        }\n        func.apply(this, args);\n        isThrottled = true;\n        setTimeout(() => {\n            isThrottled = false;\n            if (savedArgs) {\n                wrapper.apply(this, savedArgs);\n                savedArgs = null;\n            }\n        }, ms);\n    }\n    return wrapper;\n};\nexport const isBrowser = () => typeof window !== `undefined`;\nexport const performOnEnter = (fn) => {\n    return function (event) {\n        if (event.keyCode === keyCodes.enter) {\n            fn(event);\n        }\n    };\n};\nexport const isCSSMaskSupported = () => {\n    if (!isBrowser()) {\n        return true;\n    }\n    return (window.CSS &&\n        window.CSS.supports('(mask-repeat: no-repeat) or (-webkit-mask-repeat: no-repeat)'));\n};\nexport const isEmptyObject = (obj) => !obj || (Object.keys(obj).length === 0 && obj.constructor === Object);\nexport const isSafari = () => /^((?!chrome|android).)*safari/i.test(navigator?.userAgent);\n// even though navigator.platform is deprecated, it's still the most reliable way to detect the OS\n// suggested by https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform\n// this function is not working in SSR environment\n// should be used only in the browser environment\nexport const isMac = () => navigator?.platform?.toLowerCase().startsWith('mac');\nexport const getDataAttributes = (props) => {\n    return Object.entries(props).reduce((acc, [key, val]) => {\n        if (key.includes('data-')) {\n            acc[key] = val;\n        }\n        return acc;\n    }, {});\n};\nexport function pick(source, keys) {\n    return keys.reduce((acc, key) => {\n        if (!source.hasOwnProperty(key)) {\n            return acc;\n        }\n        return {\n            ...acc,\n            [key]: source[key],\n        };\n    }, {});\n}\nexport const idToCompRef = (id) => ({ id, type: 'DESKTOP' });\nexport const isWixDomain = (url) => ['editorx.io', 'wixsite.com', 'wix.com', 'wixstudio.io'].some(domain => url.includes(domain));\n//# sourceMappingURL=utils.js.map","export const CSS_PREFIX = 'wixui-';\nexport const formatClassNames = (semanticClassName, ...customClassNames) => {\n    const result = [];\n    if (semanticClassName) {\n        result.push(`${CSS_PREFIX}${semanticClassName}`);\n    }\n    customClassNames.forEach(className => {\n        if (className) {\n            // add each custom class with and without the prefix\n            result.push(`${CSS_PREFIX}${className}`);\n            result.push(className);\n        }\n    });\n    return result.join(' ');\n};\n// remove when https://github.com/search?q=repo%3Awix-private%2Fthunderbolt%20customCssClasses&type=code has no usages\nexport const customCssClasses = (...classNames) => {\n    // eslint-disable-next-line no-console\n    console.warn('customCssClasses is deprecated, please use formatClassNames instead');\n    const [semantic, ...rest] = classNames;\n    return formatClassNames(semantic, ...rest);\n};\n//# sourceMappingURL=class-names-formmater.js.map","// extracted by mini-css-extract-plugin\nexport default {\"withOnClickHandler\":\"rYiAuL\",\"filter-effect-svg\":\"gSXewE\",\"filterEffectSvg\":\"gSXewE\"};","import * as React from 'react';\nimport classNames from 'clsx';\nimport type {\n  IElementPropsSDKActions,\n  IClickPropsSDKActions,\n} from '@wix/editor-elements-corvid-utils';\nimport {\n  getDataAttributes,\n  replaceCompIdPlaceholder,\n} from '@wix/editor-elements-common-utils';\nimport styles from './WPhotoWrapper.scss';\n\ntype WPhotoWrapperProps = {\n  id: string;\n  className: string;\n  title?: string;\n  withOnClickHandler: boolean;\n  filterEffectSvgString?: string;\n  filterEffectSvgUrl?: string;\n  children?: React.ReactNode;\n  shouldHideTooltip?: boolean;\n} & Partial<IElementPropsSDKActions> &\n  Partial<IClickPropsSDKActions>;\n\nexport const WPhotoWrapper: React.FC<WPhotoWrapperProps> = props => {\n  const {\n    id,\n    children,\n    className,\n    title,\n    onClick,\n    onDblClick,\n    withOnClickHandler,\n    onMouseEnter,\n    onMouseLeave,\n    filterEffectSvgString,\n    filterEffectSvgUrl,\n    shouldHideTooltip,\n  } = props;\n  const withOnClickHandlerClass = withOnClickHandler\n    ? styles.withOnClickHandler\n    : '';\n\n  const inlineStyle = filterEffectSvgUrl\n    ? {\n        style: {\n          '--filter-effect-svg-url': filterEffectSvgUrl,\n        } as React.CSSProperties,\n      }\n    : {};\n\n  const filterEffectSvg = filterEffectSvgString ? (\n    <svg id={`svg_${id}`} className={styles.filterEffectSvg}>\n      <defs\n        dangerouslySetInnerHTML={{\n          __html: replaceCompIdPlaceholder(filterEffectSvgString, id),\n        }}\n      />\n    </svg>\n  ) : null;\n\n  return (\n    <div\n      id={id}\n      {...getDataAttributes(props)}\n      className={classNames(className, withOnClickHandlerClass)}\n      title={shouldHideTooltip ? undefined : title}\n      onClick={onClick}\n      onDoubleClick={onDblClick}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      {...inlineStyle}\n    >\n      {filterEffectSvg}\n      {children}\n    </div>\n  );\n};\n","export const keyCodes = {\n    enter: 13,\n    space: 32,\n    end: 35,\n    home: 36,\n    escape: 27,\n    arrowLeft: 37,\n    arrowUp: 38,\n    arrowRight: 39,\n    arrowDown: 40,\n    tab: 9,\n    delete: 46,\n    a: 65,\n    z: 90,\n    pageUp: 33,\n    pageDown: 34,\n};\nexport const keyboardShortcuts = {\n    confirmKey: 'Enter',\n    spaceKey: ' ',\n    arrowDownKey: 'ArrowDown',\n    arrowUpKey: 'ArrowUp',\n    escapeKey: 'Escape',\n};\n// see: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\nexport const keys = {\n    space: ['Spacebar', ' '],\n    enter: ['Enter'],\n};\nfunction activateByKey(key) {\n    return event => {\n        if (event.keyCode === key) {\n            event.preventDefault();\n            event.stopPropagation();\n            event.currentTarget.click();\n        }\n    };\n}\nexport const activateBySpaceButton = activateByKey(keyCodes.space);\nexport const activateByEnterButton = activateByKey(keyCodes.enter);\nexport const activateBySpaceOrEnterButton = event => {\n    activateByEnterButton(event);\n    activateBySpaceButton(event);\n};\nexport const activateByEscapeButton = activateByKey(keyCodes.escape);\nexport const HAS_CUSTOM_FOCUS_CLASSNAME = 'has-custom-focus';\nexport const a11yBlackList = ['aria-id', 'aria-metadata', 'aria-type'];\nexport const filteredA11y = (a11y, blacklist) => {\n    return Object.entries(a11y).reduce((acc, [key, value]) => {\n        if (!blacklist.includes(key)) {\n            acc[key] = value;\n        }\n        return acc;\n    }, {});\n};\n/**\n * @deprecated use getAccessibilityAttributes instead wherever you can\n */\nexport const getAriaAttributes = ({ role, tabIndex, tabindex, ...ariaProps } = {}) => {\n    const result = Object.entries(ariaProps).reduce((prev, [key, value]) => {\n        return { ...prev, [`aria-${key}`.toLowerCase()]: value };\n    }, { role, tabIndex: tabIndex ?? tabindex });\n    Object.keys(result).forEach(key => {\n        if (result[key] === undefined || result[key] === null) {\n            // eslint-disable-next-line\n            delete result[key];\n        }\n    });\n    return filteredA11y(result, a11yBlackList);\n};\nexport const getTabIndexAttribute = (a11y = {}) => {\n    const tabIndex = a11y.tabIndex ?? a11y.tabindex ?? undefined;\n    return tabIndex !== undefined ? { tabIndex: Number(tabIndex) } : {};\n};\nexport const INNER_FOCUS_RING_CLASSNAME = 'has-inner-focus-ring';\nconst LINE1 = '0 0 0 1px';\nconst LINE2 = '0 0 0 3px';\nconst COLOR1 = '#ffffff';\nconst COLOR2 = '#116dff';\nconst OUTER_FOCUS_RING = `${LINE1}${COLOR1}, ${LINE2}${COLOR2}`;\nconst INNER_FOCUS_RING = `inset ${LINE1}${COLOR2}, inset ${LINE2}${COLOR1}`;\nexport const getFocusRingValue = (isOuter = true) => isOuter ? OUTER_FOCUS_RING : INNER_FOCUS_RING;\nexport const getAccessibilityAttributes = (attributes) => {\n    const { role, tabIndex, tabindex, screenReader, lang, ariaAttributes = {}, } = attributes;\n    const prefixedAriaAttributes = Object.entries(ariaAttributes).reduce((prev, [key, value]) => {\n        return { ...prev, [`aria-${key}`.toLowerCase()]: value };\n    }, {});\n    return {\n        role,\n        tabIndex: tabIndex ?? tabindex,\n        screenReader,\n        ariaAttributes: filteredA11y(prefixedAriaAttributes, a11yBlackList),\n        lang,\n    };\n};\nexport const getAccessibilityAttributesSpread = (attributes) => {\n    const a11yProps = getAccessibilityAttributes(attributes);\n    return {\n        ...a11yProps.ariaAttributes,\n        tabIndex: a11yProps.tabIndex,\n        screenReader: a11yProps.screenReader,\n        lang: a11yProps.lang,\n        role: a11yProps.role,\n    };\n};\n//# sourceMappingURL=a11y.js.map","export const TestIds = {\n  root: 'linkElement',\n} as const;\n","'use-client';\nimport * as React from 'react';\nimport {\n  activateByEnterButton,\n  activateBySpaceButton,\n  activateBySpaceOrEnterButton,\n  getDataAttributes,\n} from '@wix/editor-elements-common-utils';\nimport { TestIds } from '../constants';\nimport type { LinkProps } from '../Link.types';\n\n// If connected to popup, open with either space or enter keys\nconst getDefaultActivateByKey = (linkPopupId: string | undefined) =>\n  linkPopupId ? 'SpaceOrEnter' : 'Enter';\n\nexport type LinkRef = HTMLAnchorElement | HTMLDivElement;\n\nconst Link: React.ForwardRefRenderFunction<LinkRef, LinkProps> = (\n  props,\n  ref,\n) => {\n  const {\n    href,\n    role,\n    target,\n    rel,\n    className = '',\n    children,\n    linkPopupId,\n    anchorDataId,\n    anchorCompId,\n    tabIndex,\n    dataTestId = TestIds.root,\n    title,\n    onClick,\n    onDoubleClick,\n    onMouseEnter,\n    onMouseLeave,\n    onFocus,\n    onFocusCapture,\n    onBlurCapture,\n    'aria-live': ariaLive,\n    'aria-disabled': ariaDisabled,\n    'aria-label': ariaLabel,\n    'aria-labelledby': ariaLabelledBy,\n    'aria-pressed': ariaPressed,\n    'aria-expanded': ariaExpended,\n    'aria-describedby': ariaDescribedBy,\n    'aria-haspopup': ariaHasPopup,\n    'aria-current': ariaCurrent,\n    dataPreview,\n    dataPart,\n  } = props;\n\n  const activateByKey =\n    props.activateByKey !== undefined\n      ? props.activateByKey\n      : getDefaultActivateByKey(linkPopupId);\n\n  let onKeyDown;\n  switch (activateByKey) {\n    case 'Enter':\n      onKeyDown = activateByEnterButton;\n      break;\n    case 'Space':\n      onKeyDown = activateBySpaceButton;\n      break;\n    case 'SpaceOrEnter':\n      onKeyDown = activateBySpaceOrEnterButton;\n      break;\n    default:\n      onKeyDown = undefined;\n      break;\n  }\n\n  // eslint-disable-next-line jsx-a11y/role-supports-aria-props\n  return href !== undefined || linkPopupId ? (\n    <a\n      {...getDataAttributes(props)}\n      data-testid={dataTestId}\n      data-popupid={linkPopupId}\n      data-anchor={anchorDataId}\n      data-anchor-comp-id={anchorCompId}\n      data-preview={dataPreview}\n      data-part={dataPart}\n      href={href || undefined}\n      target={target}\n      role={linkPopupId ? 'button' : role}\n      rel={rel}\n      className={className}\n      onKeyDown={onKeyDown}\n      aria-live={ariaLive}\n      aria-disabled={ariaDisabled}\n      aria-label={ariaLabel}\n      aria-labelledby={ariaLabelledBy}\n      aria-pressed={ariaPressed}\n      aria-expanded={ariaExpended}\n      aria-haspopup={ariaHasPopup}\n      aria-describedby={ariaDescribedBy}\n      aria-current={ariaCurrent}\n      title={title}\n      onClick={onClick}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      onDoubleClick={onDoubleClick}\n      onFocus={onFocus}\n      onFocusCapture={onFocusCapture}\n      onBlurCapture={onBlurCapture}\n      ref={ref as React.MutableRefObject<HTMLAnchorElement>}\n      tabIndex={linkPopupId ? 0 : tabIndex}\n    >\n      {children}\n    </a>\n  ) : (\n    <div\n      {...getDataAttributes(props)}\n      data-testid={dataTestId}\n      data-preview={dataPreview}\n      data-part={dataPart}\n      className={className}\n      tabIndex={tabIndex}\n      aria-label={ariaLabel}\n      aria-labelledby={ariaLabelledBy}\n      aria-haspopup={ariaHasPopup}\n      aria-disabled={ariaDisabled}\n      aria-expanded={ariaExpended}\n      title={title}\n      role={role}\n      onClick={onClick}\n      onDoubleClick={onDoubleClick}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      ref={ref as React.MutableRefObject<HTMLDivElement>}\n    >\n      {children}\n    </div>\n  );\n};\n\nexport default React.forwardRef(Link);\n\nexport const isValidLink = (link?: LinkProps): boolean => {\n  return Boolean(link && (link.href || link.linkPopupId));\n};\n","const semanticClassNames = {\n  root: 'image',\n} as const;\n\nexport default semanticClassNames;\n","// extracted by mini-css-extract-plugin\nexport default {\"image\":\"jhxvbR\"};","/**\n * image service api version\n */\nconst API_VERSION = 'v1';\n/**\nthe maximum retina factor\n */\nconst MAX_DEVICE_PIXEL_RATIO = 2;\n/**\n site BG legacy max width x height\n */\nconst DSKTP_MAX_BG_SITE_LEGACY_WIDTH = 1920;\nconst DSKTP_MAX_BG_SITE_LEGACY_HEIGHT = 1920;\nconst MOBILE_MAX_BG_SITE_LEGACY_WIDTH = 1000;\nconst MOBILE_MAX_BG_SITE_LEGACY_HEIGHT = 1000;\n/**\n * Enum string values of requested image fitting types\n * Note: TILE_HORIZONTAL, TILE_VERTICAL, FIT_AND_TILE are supported for legacy purposes but are not exposed\n * in the documentation because they should not be exposed for new features\n */\nconst fittingTypes = {\n    SCALE_TO_FILL: 'fill',\n    SCALE_TO_FIT: 'fit',\n    STRETCH: 'stretch',\n    ORIGINAL_SIZE: 'original_size',\n    TILE: 'tile',\n    TILE_HORIZONTAL: 'tile_horizontal',\n    TILE_VERTICAL: 'tile_vertical',\n    FIT_AND_TILE: 'fit_and_tile',\n    LEGACY_STRIP_TILE: 'legacy_strip_tile',\n    LEGACY_STRIP_TILE_HORIZONTAL: 'legacy_strip_tile_horizontal',\n    LEGACY_STRIP_TILE_VERTICAL: 'legacy_strip_tile_vertical',\n    LEGACY_STRIP_SCALE_TO_FILL: 'legacy_strip_fill',\n    LEGACY_STRIP_SCALE_TO_FIT: 'legacy_strip_fit',\n    LEGACY_STRIP_FIT_AND_TILE: 'legacy_strip_fit_and_tile',\n    LEGACY_STRIP_ORIGINAL_SIZE: 'legacy_strip_original_size',\n    LEGACY_ORIGINAL_SIZE: 'actual_size',\n    LEGACY_FIT_WIDTH: 'fitWidth',\n    LEGACY_FIT_HEIGHT: 'fitHeight',\n    LEGACY_FULL: 'full',\n    LEGACY_BG_FIT_AND_TILE: 'legacy_tile',\n    LEGACY_BG_FIT_AND_TILE_HORIZONTAL: 'legacy_tile_horizontal',\n    LEGACY_BG_FIT_AND_TILE_VERTICAL: 'legacy_tile_vertical',\n    LEGACY_BG_NORMAL: 'legacy_normal',\n};\n/**\n * Enum string values of image transform types as passed to the image service api\n */\nconst transformTypes = {\n    FIT: 'fit',\n    FILL: 'fill',\n    FILL_FOCAL: 'fill_focal',\n    CROP: 'crop',\n    LEGACY_CROP: 'legacy_crop',\n    LEGACY_FILL: 'legacy_fill',\n};\n/**\n * Enum string values of requested image align types\n * @type {{CENTER: string, RIGHT: string, LEFT: string, TOP: string, BOTTOM: string, TOP_RIGHT: string, TOP_LEFT: string, BOTTOM_RIGHT: string, BOTTOM_LEFT: string}}\n */\nconst alignTypes = {\n    CENTER: 'center',\n    TOP: 'top',\n    TOP_LEFT: 'top_left',\n    TOP_RIGHT: 'top_right',\n    BOTTOM: 'bottom',\n    BOTTOM_LEFT: 'bottom_left',\n    BOTTOM_RIGHT: 'bottom_right',\n    LEFT: 'left',\n    RIGHT: 'right',\n};\n/**\n * Enum 9Grid alignment to focal point\n */\nconst ALIGN_TYPE_TO_FOCAL_POINT = {\n    [alignTypes.CENTER]: { x: 0.5, y: 0.5 },\n    [alignTypes.TOP_LEFT]: { x: 0, y: 0 },\n    [alignTypes.TOP_RIGHT]: { x: 1.0, y: 0 },\n    [alignTypes.TOP]: { x: 0.5, y: 0 },\n    [alignTypes.BOTTOM_LEFT]: { x: 0, y: 1.0 },\n    [alignTypes.BOTTOM_RIGHT]: { x: 1.0, y: 1.0 },\n    [alignTypes.BOTTOM]: { x: 0.5, y: 1.0 },\n    [alignTypes.RIGHT]: { x: 1.0, y: 0.5 },\n    [alignTypes.LEFT]: { x: 0, y: 0.5 },\n};\n/**\n * Enum string values of image align types as passed to the image service\n */\nconst alignTypesMap = {\n    center: 'c',\n    top: 't',\n    top_left: 'tl',\n    top_right: 'tr',\n    bottom: 'b',\n    bottom_left: 'bl',\n    bottom_right: 'br',\n    left: 'l',\n    right: 'r',\n};\n/**\n * Enum string values of html tag used to construct the css or svg attributes\n *  @type {{BG: string, IMG: string, SVG: string}}\n */\nconst htmlTag = {\n    BG: 'bg',\n    IMG: 'img',\n    SVG: 'svg',\n};\n/**\n * Enum string values of upscale method\n *  @type {{DEFAULT: string, SUPER: string}}\n */\nconst upscaleMethods = {\n    AUTO: 'auto',\n    CLASSIC: 'classic',\n    SUPER: 'super',\n};\n/**\n *  api values of upscale method\n *  @type {{default: number, super: number}}\n */\nconst upscaleMethodsValues = {\n    classic: 1,\n    super: 2,\n};\n/**\n * default unsharp mask values\n *  @type {{radius: number, amount: number, threshold: number}}\n */\nconst defaultUSM = {\n    radius: '0.66',\n    amount: '1.00',\n    threshold: '0.01',\n};\n/**\n * default empty data\n */\nconst emptyData = {\n    uri: '',\n    css: {\n        img: {},\n        container: {},\n    },\n    attr: {\n        img: {},\n        container: {},\n    },\n    transformed: false,\n};\nconst MAX_TRANSFORMED_IMAGE_WIDTH = 5000;\nconst MAX_TRANSFORMED_IMAGE_HEIGHT = 5000;\nconst SAFE_TRANSFORMED_AREA = MAX_TRANSFORMED_IMAGE_WIDTH * MAX_TRANSFORMED_IMAGE_HEIGHT;\n/**\n * super res machine learning upscale factor models -\n * @type {number[]}\n */\nconst SUPER_UPSCALE_MODELS = [1.5, 2, 4];\n/**\n * image qualities\n */\nconst imageScaleDefaults = {\n    HIGH: {\n        size: 1400 * 1400,\n        quality: 90,\n        maxUpscale: 1,\n    },\n    MEDIUM: {\n        size: 600 * 600,\n        quality: 85,\n        maxUpscale: 1,\n    },\n    LOW: {\n        size: 400 * 400,\n        quality: 80,\n        maxUpscale: 1.2,\n    },\n    TINY: {\n        size: 0,\n        quality: 80,\n        maxUpscale: 1.4,\n    },\n};\n/**\n * image quality\n * @type {{HIGH: string, MEDIUM: string, LOW: string, TINY: string}}\n */\nconst imageQuality = {\n    HIGH: 'HIGH',\n    MEDIUM: 'MEDIUM',\n    LOW: 'LOW',\n    TINY: 'TINY',\n};\n/**\n * image filters\n * @type {{CONTRAST: string, BRIGHTNESS: string, SATURATION: string, HUE: string, BLUR: string}}\n */\nconst imageFilters = {\n    CONTRAST: 'contrast',\n    BRIGHTNESS: 'brightness',\n    SATURATION: 'saturation',\n    HUE: 'hue',\n    BLUR: 'blur',\n};\nconst fileType = {\n    JPG: 'jpg',\n    JPEG: 'jpeg',\n    JPE: 'jpe',\n    PNG: 'png',\n    WEBP: 'webp',\n    WIX_ICO_MP: 'wix_ico_mp',\n    WIX_MP: 'wix_mp',\n    GIF: 'gif',\n    SVG: 'svg',\n    AVIF: 'avif',\n    UNRECOGNIZED: 'unrecognized',\n};\nconst encodingTypes = {\n    AVIF: 'AVIF',\n    PAVIF: 'PAVIF',\n};\nconst supportedExtensions = [\n    fileType.JPG,\n    fileType.JPEG,\n    fileType.JPE,\n    fileType.PNG,\n    fileType.GIF,\n    fileType.WEBP,\n];\nexport { alignTypes, alignTypesMap, transformTypes, encodingTypes, fittingTypes, htmlTag, upscaleMethods, upscaleMethodsValues, defaultUSM, emptyData, imageQuality, imageFilters, imageScaleDefaults, fileType, supportedExtensions, DSKTP_MAX_BG_SITE_LEGACY_WIDTH, MOBILE_MAX_BG_SITE_LEGACY_WIDTH, DSKTP_MAX_BG_SITE_LEGACY_HEIGHT, MOBILE_MAX_BG_SITE_LEGACY_HEIGHT, SAFE_TRANSFORMED_AREA, SUPER_UPSCALE_MODELS, MAX_DEVICE_PIXEL_RATIO, ALIGN_TYPE_TO_FOCAL_POINT, API_VERSION, };\n//# sourceMappingURL=imageServiceConstants.js.map","/**\n * Simple templates.\n * Receives a string with es6 ${...} style template arguments and returns a transformed string.\n * @param string\n * @returns {Function}\n */\nfunction template(strings, ...keys) {\n    return function (...values) {\n        const dict = values[values.length - 1] || {};\n        const result = [strings[0]];\n        keys.forEach(function (key, i) {\n            const value = Number.isInteger(key) ? values[key] : dict[key];\n            result.push(value, strings[i + 1]);\n        });\n        return result.join('');\n    };\n}\n/**\n * Get the last element in an array\n * @param array\n * @returns {*}\n */\nfunction last(array) {\n    return array[array.length - 1];\n}\nexport { last, template };\n//# sourceMappingURL=utils.js.map","import { alignTypes, alignTypesMap, fileType, fittingTypes, imageQuality, imageScaleDefaults, transformTypes, upscaleMethods, upscaleMethodsValues, ALIGN_TYPE_TO_FOCAL_POINT, MAX_DEVICE_PIXEL_RATIO, SUPER_UPSCALE_MODELS, SAFE_TRANSFORMED_AREA, } from './imageServiceConstants';\nimport { last } from './utils';\nconst SUPPORTED_IMAGE_EXTENSIONS = [\n    fileType.PNG,\n    fileType.JPEG,\n    fileType.JPG,\n    fileType.JPE,\n    fileType.WIX_ICO_MP,\n    fileType.WIX_MP,\n    fileType.WEBP,\n    fileType.AVIF,\n];\nconst JPG_EXTENSIONS = [\n    fileType.JPEG,\n    fileType.JPG,\n    fileType.JPE,\n];\n/**\n * checks if image type is supported\n * @param {string}     uri      image source uri\n *\n * @returns {boolean}\n */\nfunction isImageTypeSupported(uri) {\n    return SUPPORTED_IMAGE_EXTENSIONS.includes(getFileExtension(uri));\n}\n/**\n * check request integrity\n * @param {FittingType}             fittingType         imageService.fittingTypes\n * @param {ImageTransformSource}    src\n * @param {ImageTransformTarget}    target\n *\n * @returns {boolean}\n */\nfunction isValidRequest(fittingType, src, target) {\n    return (target &&\n        src &&\n        !isUrlEmptyOrNone(src.id) &&\n        Object.values(fittingTypes).includes(fittingType));\n}\n/**\n * returns true unless image is animated webp and allowAnimatedTransform is false\n */\nfunction canTransformIfAnimatedImage(uri, hasAnimation, allowAnimatedTransform = false) {\n    const isAvifWebpFormat = isWEBP(uri) || isAVIF(uri);\n    return !(isAvifWebpFormat && hasAnimation && !allowAnimatedTransform);\n}\n/**\n * returns true if image is a gif and allowAnimatedTransform is true\n */\nfunction isTransformableGIF(uri, allowAnimatedTransform = false) {\n    return isGIF(uri) && allowAnimatedTransform;\n}\n/**\n * check if image transform is supported for source image\n */\nfunction isImageTransformApplicable(uri, hasAnimation, allowAnimatedTransform) {\n    return (canTransformIfAnimatedImage(uri, hasAnimation, allowAnimatedTransform) &&\n        (isImageTypeSupported(uri) ||\n            isTransformableGIF(uri, allowAnimatedTransform)) &&\n        !isExternalUrl(uri));\n}\n/**\n * returns true if image is of JPG type\n * @param {string}  uri\n *\n * @returns {boolean}\n */\nfunction isJPG(uri) {\n    return JPG_EXTENSIONS.includes(getFileExtension(uri));\n}\n/**\n * returns true if image is of PNG type\n * @param {string}  uri\n *\n * @returns {boolean}\n */\nfunction isPNG(uri) {\n    return getFileExtension(uri) === fileType.PNG;\n}\n/**\n * returns true if image is of webP type\n * @param {string}  uri\n *\n * @returns {boolean}\n */\nfunction isWEBP(uri) {\n    return getFileExtension(uri) === fileType.WEBP;\n}\n/**\n * returns true if image is of GIF type\n * @param {string}  uri\n *\n * @returns {boolean}\n */\nfunction isGIF(uri) {\n    return getFileExtension(uri) === fileType.GIF;\n}\n/**\n * returns true if image is of webP type\n * @param {string}  uri\n *\n * @returns {boolean}\n */\nfunction isAVIF(uri) {\n    return getFileExtension(uri) === fileType.AVIF;\n}\n/**\n * returns true if the url starts with http, https, // or data\n * @param {string}  url\n *\n * @returns {boolean}\n */\nfunction isExternalUrl(url) {\n    return /(^https?)|(^data)|(^\\/\\/)/.test(url);\n}\n/**\n * returns true if the url empty or none string\n * @param {string}  url\n *\n * @returns {boolean}\n */\nfunction isUrlEmptyOrNone(url) {\n    return !url || !url.trim() || url.toLowerCase() === 'none';\n}\n/**\n * returns search bot true or false as indicated in options\n * @param {ImageTransformOptions}   options\n *\n * @returns {boolean}\n */\nfunction isSEOBot(options) {\n    return options?.isSEOBot ?? false;\n}\n// https://jira.wixpress.com/browse/WEED-12667\n// const illegalChars = ['/', '\\\\', '#', '^', '?', '{', '}', '<', '>', '|', '`', '“', ':', '\"'].map(encodeURIComponent)\nconst ILLEGAL_CHARS = ['/', '\\\\', '?', '<', '>', '|', '“', ':', '\"'].map(encodeURIComponent);\nconst URL_SAFE_ILLEGAL_CHARS = ['\\\\.', '\\\\*'];\nconst ILLEGAL_CHARS_REPLACEMENT = '_';\n/**\n * returns source image file name (no extension)\n * @param {string}     uri      image source uri\n * @param {string}     [name]   optional image source name\n *\n * @returns {string}\n */\nfunction getFileName(uri, name) {\n    const beforeLeadingSlashRegexp = /\\/(.*?)$/;\n    const fileExtensionRegexp = /\\.([^.]*)$/;\n    const illegalCharsRegex = new RegExp(`(${ILLEGAL_CHARS.concat(URL_SAFE_ILLEGAL_CHARS).join('|')})`, 'g');\n    // if name is a non empty string, remove only supported extension if exists and url encode the string\n    if (name && name.length) {\n        let fileName = name;\n        const extension = name.match(fileExtensionRegexp);\n        if (extension &&\n            SUPPORTED_IMAGE_EXTENSIONS.includes(extension[1])) {\n            fileName = name.replace(fileExtensionRegexp, '');\n        }\n        return encodeURIComponent(fileName).replace(illegalCharsRegex, ILLEGAL_CHARS_REPLACEMENT);\n    }\n    // else, trim any preceding media structure from the uri string (like \"media/\" etc.) and remove extension\n    const trimmed = uri.match(beforeLeadingSlashRegexp);\n    const fileName = trimmed ? trimmed[1] : uri;\n    return fileName.replace(fileExtensionRegexp, '');\n}\n/**\n * returns source image file name (no extension)\n * @param {string}     uri      image source uri\n *\n * @returns {FileType}\n */\nfunction getFileType(uri) {\n    if (isJPG(uri)) {\n        return fileType.JPG;\n    }\n    else if (isPNG(uri)) {\n        return fileType.PNG;\n    }\n    else if (isWEBP(uri)) {\n        return fileType.WEBP;\n    }\n    else if (isGIF(uri)) {\n        return fileType.GIF;\n    }\n    else if (isAVIF(uri)) {\n        return fileType.AVIF;\n    }\n    return fileType.UNRECOGNIZED;\n}\n/**\n * returns source image file extension\n * @param {string}     uri      image source uri\n *\n * @returns {string}\n */\nfunction getFileExtension(uri) {\n    const splitURI = /[.]([^.]+)$/.exec(uri);\n    return ((splitURI && /[.]([^.]+)$/.exec(uri)[1]) || '').toLowerCase();\n}\n/**\n * returns scale factor needed if FIT fitting\n * @param {number}  sWidth\n * @param {number}  sHeight\n * @param {number}  dWidth\n * @param {number}  dHeight\n *\n * @returns {number}\n */\nfunction getFitScaleFactor(sWidth, sHeight, dWidth, dHeight) {\n    return Math.min(dWidth / sWidth, dHeight / sHeight);\n}\n/**\n * returns scale factor needed if FILL fitting\n * @param {number}  sWidth\n * @param {number}  sHeight\n * @param {number}  dWidth\n * @param {number}  dHeight\n *\n * @returns {number}\n */\nfunction getFillScaleFactor(sWidth, sHeight, dWidth, dHeight) {\n    return Math.max(dWidth / sWidth, dHeight / sHeight);\n}\n/**\n * returns scale factor source target\n * @param {number}  sWidth\n * @param {number}  sHeight\n * @param {number}  dWidth\n * @param {number}  dHeight\n * @param {string}  transformType\n *\n * @returns {number}\n */\nfunction getScaleFactor(sWidth, sHeight, dWidth, dHeight, transformType) {\n    let scaleFactor;\n    if (transformType === transformTypes.FILL) {\n        scaleFactor = getFillScaleFactor(sWidth, sHeight, dWidth, dHeight);\n    }\n    else if (transformType === transformTypes.FIT) {\n        scaleFactor = getFitScaleFactor(sWidth, sHeight, dWidth, dHeight);\n    }\n    else {\n        scaleFactor = 1;\n    }\n    return scaleFactor;\n}\n/**\n * get calculated scale factor , width and height while considering wixmp image transform dimension limits\n * @param sWidth\n * @param sHeight\n * @param dWidth\n * @param dHeight\n * @param transformType\n * @returns {{scaleFactor: *, width: *, height: *}}\n */\nfunction getSafeTransformData(sWidth, sHeight, dWidth, dHeight, transformType) {\n    let scaleFactor;\n    // defaults for FILL transform type\n    let width = dWidth;\n    let height = dHeight;\n    // calculate safe image transformed area\n    scaleFactor = getScaleFactor(sWidth, sHeight, dWidth, dHeight, transformType);\n    if (transformType === transformTypes.FIT) {\n        width = sWidth * scaleFactor;\n        height = sHeight * scaleFactor;\n    }\n    // adjust target width & height & scaleFactor\n    if (width && height && width * height > SAFE_TRANSFORMED_AREA) {\n        const dimensionScaleFactor = Math.sqrt(SAFE_TRANSFORMED_AREA / (width * height));\n        width *= dimensionScaleFactor;\n        height *= dimensionScaleFactor;\n        // get the new scale factor\n        scaleFactor = getScaleFactor(sWidth, sHeight, width, height, transformType);\n    }\n    return {\n        scaleFactor,\n        width,\n        height,\n    };\n}\n/**\n * returns the destination rectangle\n * @param {number}                  sWidth\n * @param {number}                  sHeight\n * @param {TransformType}           transformType\n * @param {ImageTransformTarget}    target\n * @param {number}                  dpr - device pixel ratio\n * @param {UpscaleMethod}           upscaleMethod\n *\n * @returns {ImageTransformData & {upscaleMethodValue: number}}\n */\nfunction getTransformData(sWidth, sHeight, transformType, target, dpr, upscaleMethod) {\n    // use target dimension is src not provided\n    sWidth = sWidth || target.width;\n    sHeight = sHeight || target.height;\n    // adjust image transform values considering server side transform limitations and performance\n    const { scaleFactor, width, height } = getSafeTransformData(sWidth, sHeight, target.width * dpr, target.height * dpr, transformType);\n    // adjust image transform values to optimizing upsacle quality and payload\n    return getOptimizedTransformData(sWidth, sHeight, width, height, upscaleMethod, scaleFactor, transformType);\n}\n/**\n * converts 9 grid alignment to Focal point position\n * @param {string}  [alignment]\n *\n * @returns {x:number,y:number}\n */\nfunction getFocalPointFrom9GridAlignment(alignment = alignTypes.CENTER) {\n    return ALIGN_TYPE_TO_FOCAL_POINT[alignment];\n}\n/**\n * returns overlapping rectangle where sRect\n * id aligned (according to alignment) within dRect\n * @param {{ width: number; height: number }} sRect rect 1\n * @param {{ width: number, height: number }} dRect rect 2\n * @param {{x: number, y: number}|undefined}  sFP   source image focal point\n * @param {string}                            alignment\n *\n * @returns {{x: number, y: number, width: number, height: number}}\n */\nfunction getAlignedRect(sRect, dRect, sFP, alignment) {\n    const fp = getFocalPoint(sFP) ||\n        getFocalPointFrom9GridAlignment(alignment);\n    const x = Math.max(0, Math.min(sRect.width - dRect.width, fp.x * sRect.width - dRect.width / 2));\n    const y = Math.max(0, Math.min(sRect.height - dRect.height, fp.y * sRect.height - dRect.height / 2));\n    // rect\n    return {\n        x,\n        y,\n        width: Math.min(sRect.width, dRect.width),\n        height: Math.min(sRect.height, dRect.height),\n    };\n}\n/**\n * returns overlapping rectangle between sRect and dRect\n * @param {object}      sRect         rect 1\n * @param {object}      dRect         rect 2\n *\n * @returns {{x:number,y:number,width:number, height:number} || null}\n */\nfunction getOverlappingRect(sRect, dRect) {\n    const width = Math.max(0, Math.min(sRect.width, dRect.x + dRect.width) - Math.max(0, dRect.x));\n    const height = Math.max(0, Math.min(sRect.height, dRect.y + dRect.height) - Math.max(0, dRect.y));\n    const isValidRect = width && height && (sRect.width !== width || sRect.height !== height);\n    // return overlapping sRect/dRect rectangle(x, y, width, height)\n    return isValidRect\n        ? {\n            x: Math.max(0, dRect.x),\n            y: Math.max(0, dRect.y),\n            width,\n            height,\n        }\n        : null;\n}\n/**\n * returns pixel aspect ratio value\n * @param {ImageTransformTarget}    target\n *\n * @returns {number}\n */\nfunction getDevicePixelRatio(target) {\n    return Math.min(target.pixelAspectRatio || 1, MAX_DEVICE_PIXEL_RATIO);\n}\n/**\n * returns target alignment value\n * @param {ImageTransformTarget}    target\n *\n * @returns {string}\n */\nfunction getAlignment(target) {\n    return ((target.alignment && alignTypesMap[target.alignment]) ||\n        alignTypesMap[alignTypes.CENTER]);\n}\n/**\n * returns the focal point value, if no focal point passed use alignment\n * @param {{x: number, y: number}|undefined} focalPoint\n */\nfunction getFocalPoint(focalPoint) {\n    let fp;\n    if (focalPoint &&\n        typeof focalPoint.x === 'number' &&\n        !isNaN(focalPoint.x) &&\n        typeof focalPoint.y === 'number' &&\n        !isNaN(focalPoint.y)) {\n        fp = {\n            x: roundToFixed(Math.max(0, Math.min(100, focalPoint.x)) / 100, 2),\n            y: roundToFixed(Math.max(0, Math.min(100, focalPoint.y)) / 100, 2),\n        };\n    }\n    return fp;\n}\n/**\n * returns preferred image quality value\n * @param {number}    imageWidth\n * @param {number}    imageHeight\n *\n * @returns {number}\n */\nfunction getPreferredImageQuality(imageWidth, imageHeight) {\n    return imageScaleDefaults[getImageQualityKey(imageWidth, imageHeight)]\n        .quality;\n}\n/**\n * returns the scale descriptor of CLASSIC upscale method\n * @param sWidth\n * @param sHeight\n * @returns {{optimizedScaleFactor: number, upscaleMethodValue: number, forceUSM: boolean}}\n */\nfunction getClassicScaleData(sWidth, sHeight) {\n    const imageKey = getImageQualityKey(sWidth, sHeight);\n    return {\n        optimizedScaleFactor: imageScaleDefaults[imageKey].maxUpscale,\n        upscaleMethodValue: upscaleMethodsValues.classic,\n        forceUSM: false,\n    };\n}\n/**\n * returns the scale descriptor of AUTO upscale method\n * @param sWidth\n * @param sHeight\n * @returns {{optimizedScaleFactor: number, upscaleMethodValue: number, forceUSM: boolean}}\n */\nfunction getAutoScaleData(sWidth, sHeight) {\n    const imageKey = getImageQualityKey(sWidth, sHeight);\n    return {\n        optimizedScaleFactor: imageScaleDefaults[imageKey].maxUpscale,\n        upscaleMethodValue: upscaleMethodsValues.classic,\n        forceUSM: false,\n    };\n}\n/**\n * returns the scale descriptor of SUPER upscale method\n * @param scaleFactor\n * @returns {{optimizedScaleFactor: number, upscaleMethodValue: number, forceUSM: boolean}}\n */\nfunction getSuperScaleData(scaleFactor) {\n    return {\n        optimizedScaleFactor: last(SUPER_UPSCALE_MODELS),\n        upscaleMethodValue: upscaleMethodsValues.super,\n        forceUSM: !(SUPER_UPSCALE_MODELS.includes(scaleFactor) ||\n            scaleFactor > last(SUPER_UPSCALE_MODELS)),\n    };\n}\n/**\n * returns upscale descriptor object\n * @param {number}    sWidth\n * @param {number}    sHeight\n * @param {string}    upscaleMethod\n * @param {number}    scaleFactor\n *\n * @returns  {{maxScale: number, upscaleMethodValue: number, forceUSM: boolean}}\n */\nfunction getOptimizedScaleData(sWidth, sHeight, scaleFactor, upscaleMethod) {\n    if (upscaleMethod === 'auto') {\n        return getAutoScaleData(sWidth, sHeight);\n    }\n    else if (upscaleMethod === 'super') {\n        return getSuperScaleData(scaleFactor);\n    }\n    // assuming 'classic' method\n    return getClassicScaleData(sWidth, sHeight);\n}\n/**\n * returns optimized upscale data, considering requested upscale method , optimize upscale for best quality and bandwidth\n * @param {number}    sWidth\n * @param {number}    sHeight\n * @param {number}    tWidth\n * @param {number}    tHeight\n * @param {UpscaleMethod}    upscaleMethod\n * @param {number}    scaleFactor\n * @param {TransformType}    transformType\n *\n * @returns  {ImageTransformData}\n */\nfunction getOptimizedTransformData(sWidth, sHeight, tWidth, tHeight, upscaleMethod, scaleFactor, transformType) {\n    const { optimizedScaleFactor, upscaleMethodValue, forceUSM } = getOptimizedScaleData(sWidth, sHeight, scaleFactor, upscaleMethod);\n    let width = tWidth;\n    let height = tHeight;\n    if (scaleFactor <= optimizedScaleFactor) {\n        // target upscale within limits or downscale\n        return {\n            width,\n            height,\n            scaleFactor,\n            upscaleMethodValue,\n            forceUSM,\n            cssUpscaleNeeded: false,\n        };\n    }\n    // limited upscale\n    switch (transformType) {\n        case transformTypes.FILL:\n            width = tWidth * (optimizedScaleFactor / scaleFactor);\n            height = tHeight * (optimizedScaleFactor / scaleFactor);\n            break;\n        case transformTypes.FIT:\n            width = sWidth * optimizedScaleFactor;\n            height = sHeight * optimizedScaleFactor;\n            break;\n        default:\n            break;\n    }\n    // adjust transform values\n    return {\n        width,\n        height,\n        scaleFactor: optimizedScaleFactor,\n        upscaleMethodValue,\n        forceUSM,\n        cssUpscaleNeeded: true,\n    };\n}\n/**\n * returns image quality key\n * @param {number}    imageWidth\n * @param {number}    imageHeight\n *\n * @returns {ImageQuality}\n */\nfunction getImageQualityKey(imageWidth, imageHeight) {\n    const size = imageWidth * imageHeight;\n    if (size > imageScaleDefaults[imageQuality.HIGH].size) {\n        return imageQuality.HIGH;\n    }\n    else if (size > imageScaleDefaults[imageQuality.MEDIUM].size) {\n        return imageQuality.MEDIUM;\n    }\n    else if (size > imageScaleDefaults[imageQuality.LOW].size) {\n        return imageQuality.LOW;\n    }\n    return imageQuality.TINY;\n}\n/**\n * return the actual rounded dimension of a scaled rectangle\n * @param sWidth\n * @param sHeight\n * @param tWidth\n * @param tHeight\n * @param transformType\n * @returns {{width: number, height: number}}\n */\nfunction getDimension(sWidth, sHeight, tWidth, tHeight, transformType) {\n    const scaleFactor = getScaleFactor(sWidth, sHeight, tWidth, tHeight, transformType);\n    return {\n        width: Math.round(sWidth * scaleFactor),\n        height: Math.round(sHeight * scaleFactor),\n    };\n}\n/**\n * rounds number n digit precision and converts to string\n * @param {number}      value\n * @param {number}      precision\n *\n * @returns {string}\n */\nfunction roundToFixed(value, precision) {\n    const truncatePrecision = Math.pow(10, precision || 0);\n    return ((value * truncatePrecision) / truncatePrecision).toFixed(precision);\n}\n/**\n * get normalize scale method\n * @param {ImageTransformOptions} [options]\n * @returns {UpscaleMethod}\n */\nfunction getUpscaleString(options) {\n    if (!options || !options.upscaleMethod) {\n        return upscaleMethods.AUTO;\n    }\n    return (upscaleMethods[options.upscaleMethod.toUpperCase()] || upscaleMethods.AUTO);\n}\nfunction imageIsAnimated(uri, hasAnimation) {\n    const isAvifWebpFormat = isWEBP(uri) || isAVIF(uri);\n    return (getFileExtension(uri) === fileType.GIF || (isAvifWebpFormat && hasAnimation));\n}\nexport { getAlignedRect, getAlignment, getDevicePixelRatio, getDimension, getFileExtension, getFileName, getFileType, getFocalPoint, getOverlappingRect, getPreferredImageQuality, getScaleFactor, getTransformData, getUpscaleString, imageIsAnimated, isExternalUrl, isImageTransformApplicable, isImageTypeSupported, isSEOBot, isValidRequest, isPNG, isWEBP, isGIF, isAVIF, roundToFixed, };\n//# sourceMappingURL=imageServiceUtils.js.map","const globalFeaturesSupportObj = {\n    /**\n     * @type {object<boolean>}\n     */\n    isMobile: false,\n};\nconst getFeature = function (feature) {\n    return globalFeaturesSupportObj[feature];\n};\nconst setFeature = function (feature, value) {\n    globalFeaturesSupportObj[feature] = value;\n};\nexport { getFeature, setFeature };\n//# sourceMappingURL=imageServiceFeatureSupportObject.js.map","import { setFeature } from './imageServiceFeatureSupportObject';\n/**\n * Populate the global feature support object with browser specific values\n */\nfunction populateGlobalFeatureSupport() {\n    if (typeof window !== 'undefined' && typeof navigator !== 'undefined') {\n        const isSmallScreen = window.matchMedia && window.matchMedia('(max-width: 767px)').matches;\n        const isMobileAgent = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n        // set is mobile\n        setFeature('isMobile', isSmallScreen && isMobileAgent);\n    }\n}\nexport { populateGlobalFeatureSupport };\n//# sourceMappingURL=populateFeatureSupport.js.map","import { alignTypes, fittingTypes } from '../../helpers/imageServiceConstants';\n/**\n * returns BG tag CSS data\n * @param {ImageTransformObject}    transformsObj    transform parts object\n * @param {ImageTransformTarget}    target\n *\n * @returns {BackgroundImageAttributes}\n */\nfunction getCSS(transformsObj, target) {\n    const attributes = {\n        css: {\n            container: {},\n        },\n    };\n    const { css } = attributes;\n    const { fittingType } = transformsObj;\n    // set fitting\n    switch (fittingType) {\n        case fittingTypes.ORIGINAL_SIZE:\n        case fittingTypes.LEGACY_ORIGINAL_SIZE:\n        case fittingTypes.LEGACY_STRIP_ORIGINAL_SIZE:\n            css.container.backgroundSize = 'auto';\n            css.container.backgroundRepeat = 'no-repeat';\n            break;\n        case fittingTypes.SCALE_TO_FIT:\n        case fittingTypes.LEGACY_STRIP_SCALE_TO_FIT:\n            css.container.backgroundSize = 'contain';\n            css.container.backgroundRepeat = 'no-repeat';\n            break;\n        case fittingTypes.STRETCH:\n            css.container.backgroundSize = '100% 100%';\n            css.container.backgroundRepeat = 'no-repeat';\n            break;\n        case fittingTypes.SCALE_TO_FILL:\n        case fittingTypes.LEGACY_STRIP_SCALE_TO_FILL:\n            css.container.backgroundSize = 'cover';\n            css.container.backgroundRepeat = 'no-repeat';\n            break;\n        case fittingTypes.TILE_HORIZONTAL:\n        case fittingTypes.LEGACY_STRIP_TILE_HORIZONTAL:\n            css.container.backgroundSize = 'auto';\n            css.container.backgroundRepeat = 'repeat-x';\n            break;\n        case fittingTypes.TILE_VERTICAL:\n        case fittingTypes.LEGACY_STRIP_TILE_VERTICAL:\n            css.container.backgroundSize = 'auto';\n            css.container.backgroundRepeat = 'repeat-y';\n            break;\n        case fittingTypes.TILE:\n        case fittingTypes.LEGACY_STRIP_TILE:\n            css.container.backgroundSize = 'auto';\n            css.container.backgroundRepeat = 'repeat';\n            break;\n        case fittingTypes.LEGACY_STRIP_FIT_AND_TILE:\n            css.container.backgroundSize = 'contain';\n            css.container.backgroundRepeat = 'repeat';\n            break;\n        case fittingTypes.FIT_AND_TILE:\n            css.container.backgroundSize = 'auto';\n            css.container.backgroundRepeat = 'repeat';\n            break;\n        // Legacy old editor bg types.\n        case fittingTypes.LEGACY_BG_FIT_AND_TILE:\n            css.container.backgroundSize = 'auto';\n            css.container.backgroundRepeat = 'repeat';\n            break;\n        case fittingTypes.LEGACY_BG_FIT_AND_TILE_HORIZONTAL:\n            css.container.backgroundSize = 'auto';\n            css.container.backgroundRepeat = 'repeat-x';\n            break;\n        case fittingTypes.LEGACY_BG_FIT_AND_TILE_VERTICAL:\n            css.container.backgroundSize = 'auto';\n            css.container.backgroundRepeat = 'repeat-y';\n            break;\n        case fittingTypes.LEGACY_BG_NORMAL:\n            css.container.backgroundSize = 'auto';\n            css.container.backgroundRepeat = 'no-repeat';\n            break;\n    }\n    // set alignment\n    switch (target.alignment) {\n        case alignTypes.CENTER:\n            css.container.backgroundPosition = 'center center'; // 50% 50%\n            break;\n        case alignTypes.LEFT:\n            css.container.backgroundPosition = 'left center'; // 0% 50%\n            break;\n        case alignTypes.RIGHT:\n            css.container.backgroundPosition = 'right center'; // 100% 50%\n            break;\n        case alignTypes.TOP:\n            css.container.backgroundPosition = 'center top'; // 50% 0%\n            break;\n        case alignTypes.BOTTOM:\n            css.container.backgroundPosition = 'center bottom'; // 50% 100%\n            break;\n        case alignTypes.TOP_RIGHT:\n            css.container.backgroundPosition = 'right top'; // 100% 0%\n            break;\n        case alignTypes.TOP_LEFT:\n            css.container.backgroundPosition = 'left top'; // 0% 0%\n            break;\n        case alignTypes.BOTTOM_RIGHT:\n            css.container.backgroundPosition = 'right bottom'; // 100% 100%\n            break;\n        case alignTypes.BOTTOM_LEFT:\n            css.container.backgroundPosition = 'left bottom'; // 0% 100%\n            break;\n    }\n    // return background CSS\n    return attributes;\n}\nexport { getCSS as get };\n//# sourceMappingURL=backgroundAttributes.js.map","import { alignTypes, fittingTypes } from '../../helpers/imageServiceConstants';\n/**\n * align type to position\n * @param verticalMiddle\n * @param horizontalMiddle\n * @param target\n * @returns {{}}\n */\nfunction alignTypeToPosition(verticalMiddle, horizontalMiddle, target) {\n    return {\n        [alignTypes.TOP_LEFT]: { top: 0, left: 0 },\n        [alignTypes.TOP_RIGHT]: { top: 0, right: 0 },\n        [alignTypes.TOP]: { top: 0, left: horizontalMiddle },\n        [alignTypes.BOTTOM_LEFT]: { bottom: 0, left: 0 },\n        [alignTypes.BOTTOM_RIGHT]: { bottom: 0, right: 0 },\n        [alignTypes.BOTTOM]: { bottom: 0, left: horizontalMiddle },\n        [alignTypes.RIGHT]: { top: verticalMiddle, right: 0 },\n        [alignTypes.LEFT]: { top: verticalMiddle, left: 0 },\n        [alignTypes.CENTER]: {\n            width: target.width,\n            height: target.height,\n            objectFit: 'none',\n        },\n    };\n}\nconst alignTypeToPositionStr = {\n    [alignTypes.CENTER]: 'center',\n    [alignTypes.TOP]: 'top',\n    [alignTypes.TOP_LEFT]: 'top left',\n    [alignTypes.TOP_RIGHT]: 'top right',\n    [alignTypes.BOTTOM]: 'bottom',\n    [alignTypes.BOTTOM_LEFT]: 'bottom left',\n    [alignTypes.BOTTOM_RIGHT]: 'bottom right',\n    [alignTypes.LEFT]: 'left',\n    [alignTypes.RIGHT]: 'right',\n};\nconst aligmentDefaults = {\n    position: 'absolute',\n    top: 'auto',\n    right: 'auto',\n    bottom: 'auto',\n    left: 'auto',\n};\n/**\n * returns image tag CSS data\n * @param {ImageTransformObject}    transformsObj    transform parts object\n * @param {ImageTransformTarget}    target\n *\n * @returns {ImageAttributes}\n */\nfunction getCSS(transformsObj, target) {\n    const attributes = {\n        css: {\n            container: {},\n            img: {},\n        },\n    };\n    const { css } = attributes;\n    const { fittingType } = transformsObj;\n    const alignType = target.alignment;\n    css.container.position = 'relative';\n    switch (fittingType) {\n        case fittingTypes.ORIGINAL_SIZE:\n        case fittingTypes.LEGACY_ORIGINAL_SIZE:\n            if (transformsObj.parts && transformsObj.parts.length) {\n                css.img.width = transformsObj.parts[0].width;\n                css.img.height = transformsObj.parts[0].height;\n            }\n            else {\n                css.img.width = transformsObj.src.width;\n                css.img.height = transformsObj.src.height;\n            }\n            break;\n        case fittingTypes.SCALE_TO_FIT:\n        case fittingTypes.LEGACY_FIT_WIDTH:\n        case fittingTypes.LEGACY_FIT_HEIGHT:\n        case fittingTypes.LEGACY_FULL:\n            css.img.width = target.width;\n            css.img.height = target.height;\n            css.img.objectFit = 'contain';\n            css.img.objectPosition =\n                alignTypeToPositionStr[alignType] || 'unset';\n            break;\n        // BG_NORMAL is a sitebackground legacy for original size fitting type.\n        // target width and height were modified in transform.js\n        case fittingTypes.LEGACY_BG_NORMAL:\n            css.img.width = '100%';\n            css.img.height = '100%';\n            css.img.objectFit = 'none';\n            css.img.objectPosition =\n                alignTypeToPositionStr[alignType] || 'unset';\n            break;\n        case fittingTypes.STRETCH:\n            css.img.width = target.width;\n            css.img.height = target.height;\n            css.img.objectFit = 'fill';\n            break;\n        case fittingTypes.SCALE_TO_FILL:\n            css.img.width = target.width;\n            css.img.height = target.height;\n            css.img.objectFit = 'cover';\n            break;\n    }\n    // set alignment in a private case where the image src is smaller than the image container,\n    if (typeof css.img.width === 'number' &&\n        typeof css.img.height === 'number' &&\n        (css.img.width !== target.width || css.img.height !== target.height)) {\n        const verticalMiddle = Math.round((target.height - css.img.height) / 2);\n        const horizontalMiddle = Math.round((target.width - css.img.width) / 2);\n        Object.assign(css.img, aligmentDefaults, alignTypeToPosition(verticalMiddle, horizontalMiddle, target)[alignType]);\n    }\n    return attributes;\n}\nexport { getCSS as get };\n//# sourceMappingURL=imgAttributes.js.map","import { fittingTypes, alignTypes, transformTypes, } from '../../helpers/imageServiceConstants';\nimport { getDimension, isImageTransformApplicable, } from '../../helpers/imageServiceUtils';\n/* eslint-disable indent */\n/**\n * get CSS or SVG attributes to be used in the browser\n * @param {ImageTransformObject}  transformsObj  transform parts object\n * @param {ImageTransformTarget}  target\n *\n * @returns {SVGImageAttributes}\n */\nfunction getSvgAttr(transformsObj, target) {\n    const attributes = {\n        css: {\n            container: {},\n        },\n        attr: {\n            container: {},\n            img: {},\n        },\n    };\n    const { css, attr } = attributes;\n    const { fittingType } = transformsObj;\n    const alignType = target.alignment;\n    const { width: sourceWidth, height: sourceHeight } = transformsObj.src;\n    let imageScale;\n    css.container.position = 'relative';\n    // populate SVG attributes object\n    // eslint-disable-line indent\n    switch (fittingType) {\n        case fittingTypes.ORIGINAL_SIZE:\n        case fittingTypes.LEGACY_ORIGINAL_SIZE:\n        case fittingTypes.TILE:\n            if (transformsObj.parts && transformsObj.parts.length) {\n                attr.img.width = transformsObj.parts[0].width;\n                attr.img.height = transformsObj.parts[0].height;\n            }\n            else {\n                attr.img.width = sourceWidth;\n                attr.img.height = sourceHeight;\n            }\n            attr.img.preserveAspectRatio = 'xMidYMid slice';\n            break;\n        case fittingTypes.SCALE_TO_FIT:\n        case fittingTypes.LEGACY_FIT_WIDTH:\n        case fittingTypes.LEGACY_FIT_HEIGHT:\n        case fittingTypes.LEGACY_FULL:\n            attr.img.width = '100%';\n            attr.img.height = '100%';\n            attr.img.transform = '';\n            attr.img.preserveAspectRatio = '';\n            break;\n        case fittingTypes.STRETCH:\n            attr.img.width = target.width;\n            attr.img.height = target.height;\n            attr.img.x = 0;\n            attr.img.y = 0;\n            attr.img.transform = '';\n            attr.img.preserveAspectRatio = 'none';\n            break;\n        case fittingTypes.SCALE_TO_FILL:\n            if (!isImageTransformApplicable(transformsObj.src.id)) {\n                imageScale = getDimension(sourceWidth, sourceHeight, target.width, target.height, transformTypes.FILL);\n                attr.img.width = imageScale.width;\n                attr.img.height = imageScale.height;\n            }\n            else {\n                attr.img.width = target.width;\n                attr.img.height = target.height;\n            }\n            attr.img.x = 0;\n            attr.img.y = 0;\n            attr.img.transform = '';\n            attr.img.preserveAspectRatio = 'xMidYMid slice';\n            break;\n    }\n    // set alignment for cases where the requested src is smaller or bigger than the target element,\n    if (typeof attr.img.width === 'number' &&\n        typeof attr.img.height === 'number' &&\n        (attr.img.width !== target.width || attr.img.height !== target.height)) {\n        // x and y to use in svg <pattern> element\n        let x = 0;\n        let y = 0;\n        let right;\n        let bottom;\n        if (fittingType === fittingTypes.TILE) {\n            right = target.width % attr.img.width;\n            bottom = target.height % attr.img.height;\n        }\n        else {\n            right = target.width - attr.img.width;\n            bottom = target.height - attr.img.height;\n        }\n        const center = Math.round(right / 2);\n        const middle = Math.round(bottom / 2);\n        switch (alignType) {\n            case alignTypes.TOP_LEFT:\n                x = 0;\n                y = 0;\n                break;\n            case alignTypes.TOP:\n                x = center;\n                y = 0;\n                break;\n            case alignTypes.TOP_RIGHT:\n                x = right;\n                y = 0;\n                break;\n            case alignTypes.LEFT:\n                x = 0;\n                y = middle;\n                break;\n            case alignTypes.CENTER:\n                x = center;\n                y = middle;\n                break;\n            case alignTypes.RIGHT:\n                x = right;\n                y = middle;\n                break;\n            case alignTypes.BOTTOM_LEFT:\n                x = 0;\n                y = bottom;\n                break;\n            case alignTypes.BOTTOM:\n                x = center;\n                y = bottom;\n                break;\n            case alignTypes.BOTTOM_RIGHT:\n                x = right;\n                y = bottom;\n                break;\n        }\n        attr.img.x = x;\n        attr.img.y = y;\n    }\n    attr.container.width = target.width;\n    attr.container.height = target.height;\n    attr.container.viewBox = [0, 0, target.width, target.height].join(' ');\n    // return attributes object\n    return attributes;\n}\n/* eslint-enable indent */\nexport { getSvgAttr as get };\n//# sourceMappingURL=SVGAttributes.js.map","import { fittingTypes, transformTypes, alignTypesMap, } from './imageServiceConstants';\nimport { getAlignment, getScaleFactor, getOverlappingRect, getAlignedRect, getTransformData, getFocalPoint, } from './imageServiceUtils';\n/**\n * request analysis, returns parsed transforms object\n * @param {object}                  transformsObj\n * @param {ImageTransformSource}    src\n * @param {ImageTransformTarget}    target\n */\nfunction setTransformParts(transformsObj, src, target) {\n    let rect;\n    // crop source image if needed\n    // set crop part and adjust source dimensions\n    if (src.crop) {\n        rect = getOverlappingRect(src, src.crop);\n        if (rect) {\n            transformsObj.src.width = rect.width;\n            transformsObj.src.height = rect.height;\n            transformsObj.src.isCropped = true;\n            transformsObj.parts.push(getCropPart(rect));\n        }\n    }\n    // set additional transform part\n    switch (transformsObj.fittingType) {\n        case fittingTypes.SCALE_TO_FIT:\n        case fittingTypes.LEGACY_FIT_WIDTH:\n        case fittingTypes.LEGACY_FIT_HEIGHT:\n        case fittingTypes.LEGACY_FULL:\n        case fittingTypes.FIT_AND_TILE:\n        case fittingTypes.LEGACY_BG_FIT_AND_TILE:\n        case fittingTypes.LEGACY_BG_FIT_AND_TILE_HORIZONTAL:\n        case fittingTypes.LEGACY_BG_FIT_AND_TILE_VERTICAL:\n        case fittingTypes.LEGACY_BG_NORMAL:\n            // fit\n            transformsObj.parts.push(getFitPart(transformsObj, target));\n            break;\n        case fittingTypes.SCALE_TO_FILL:\n            // fill\n            transformsObj.parts.push(getFillPart(transformsObj, target));\n            break;\n        case fittingTypes.STRETCH:\n            // stretch\n            transformsObj.parts.push(getStretchPart(transformsObj, target));\n            break;\n        case fittingTypes.TILE_HORIZONTAL:\n        case fittingTypes.TILE_VERTICAL:\n        case fittingTypes.TILE:\n        case fittingTypes.LEGACY_ORIGINAL_SIZE:\n        case fittingTypes.ORIGINAL_SIZE:\n            // use crop transform\n            // if crop of source image was requested adjust cropping rectangle\n            rect = getAlignedRect(transformsObj.src, target, transformsObj.focalPoint, target.alignment);\n            if (transformsObj.src.isCropped) {\n                Object.assign(transformsObj.parts[0], rect);\n                // update source width & height accordingly\n                transformsObj.src.width = rect.width;\n                transformsObj.src.height = rect.height;\n            }\n            else {\n                transformsObj.parts.push(getCropPart(rect));\n            }\n            break;\n        // ---------------------------------------------------------------------------------------\n        // handles a legacy bug on bgImageStrip, background html tag\n        // component Full Width Strip stored incorrect image source width and height\n        // ---------------------------------------------------------------------------------------\n        case fittingTypes.LEGACY_STRIP_TILE_HORIZONTAL:\n        case fittingTypes.LEGACY_STRIP_TILE_VERTICAL:\n        case fittingTypes.LEGACY_STRIP_TILE:\n        case fittingTypes.LEGACY_STRIP_ORIGINAL_SIZE:\n            // crop request of source image is not supported\n            // use legacy crop\n            transformsObj.parts.push(getLegacyCropPart(target));\n            break;\n        case fittingTypes.LEGACY_STRIP_SCALE_TO_FIT:\n        case fittingTypes.LEGACY_STRIP_FIT_AND_TILE:\n            // legacy fit\n            transformsObj.parts.push(getLegacyFitPart(target));\n            break;\n        case fittingTypes.LEGACY_STRIP_SCALE_TO_FILL:\n            // legacy fill\n            transformsObj.parts.push(getLegacyFillPart(target));\n            break;\n    }\n}\n/**\n * returns fit part of the image transform uri\n * @param {object}                  transformsObj\n * @param {ImageTransformTarget}    target\n *\n * @returns {TransformFitPart}\n */\nfunction getFitPart(transformsObj, target) {\n    // calculate the transformed image size needed\n    const transformedData = getTransformData(transformsObj.src.width, transformsObj.src.height, transformTypes.FIT, target, transformsObj.devicePixelRatio, transformsObj.upscaleMethod);\n    const isMissingSrcDimensions = !transformsObj.src.width || !transformsObj.src.height;\n    const transformType = isMissingSrcDimensions\n        ? transformTypes.FIT\n        : transformTypes.FILL;\n    // return fit transform data\n    return {\n        transformType,\n        width: Math.round(transformedData.width),\n        height: Math.round(transformedData.height),\n        alignment: alignTypesMap.center,\n        upscale: transformedData.scaleFactor > 1,\n        forceUSM: transformedData.forceUSM,\n        scaleFactor: transformedData.scaleFactor,\n        cssUpscaleNeeded: transformedData.cssUpscaleNeeded,\n        upscaleMethodValue: transformedData.upscaleMethodValue,\n    };\n}\n/**\n * returns fill part of the image transform uri\n * @param {ImageTransformObject} transformsObj\n * @param {ImageTransformTarget} target\n *\n * @returns {TransformFillPart}\n */\nfunction getFillPart(transformsObj, target) {\n    // calculate the transformed image size needed\n    const transformedData = getTransformData(transformsObj.src.width, transformsObj.src.height, transformTypes.FILL, target, transformsObj.devicePixelRatio, transformsObj.upscaleMethod);\n    const focalPoint = getFocalPoint(transformsObj.focalPoint);\n    const transformType = focalPoint\n        ? transformTypes.FILL_FOCAL\n        : transformTypes.FILL;\n    return {\n        transformType,\n        width: Math.round(transformedData.width),\n        height: Math.round(transformedData.height),\n        alignment: getAlignment(target),\n        focalPointX: focalPoint && focalPoint.x,\n        focalPointY: focalPoint && focalPoint.y,\n        upscale: transformedData.scaleFactor > 1,\n        forceUSM: transformedData.forceUSM,\n        scaleFactor: transformedData.scaleFactor,\n        cssUpscaleNeeded: transformedData.cssUpscaleNeeded,\n        upscaleMethodValue: transformedData.upscaleMethodValue,\n    };\n}\n/**\n * returns fill part of the image transform uri\n * @param {ImageTransformObject} transformsObj\n * @param {ImageTransformTarget} target\n *\n * @returns {TransformFitPart}\n */\nfunction getStretchPart(transformsObj, target) {\n    // stretch data\n    const scaleFactor = getScaleFactor(transformsObj.src.width, transformsObj.src.height, target.width, target.height, transformTypes.FILL);\n    const clonedTarget = { ...target };\n    clonedTarget.width = transformsObj.src.width * scaleFactor;\n    clonedTarget.height = transformsObj.src.height * scaleFactor;\n    // return stretch part\n    return getFitPart(transformsObj, clonedTarget);\n}\n/**\n * returns crop part of the image transform uri\n * @param {{x: number, y: number, width: number, height: number}}  rect     x, y, width, height\n *\n * @returns {TransformCropPart}\n */\nfunction getCropPart(rect) {\n    return {\n        transformType: transformTypes.CROP,\n        x: Math.round(rect.x),\n        y: Math.round(rect.y),\n        width: Math.round(rect.width),\n        height: Math.round(rect.height),\n        upscale: false,\n        forceUSM: false,\n        scaleFactor: 1,\n        cssUpscaleNeeded: false,\n    };\n}\n// ---------------------------------------------------------------------------------------\n// handles a legacy bug on bgImageStrip, background html tag\n// component Full Width Strip stored incorrect image source width and height\n// ---------------------------------------------------------------------------------------\n/**\n * returns fit part of the image transform uri\n * @param {ImageTransformTarget}    target\n *\n * @returns {TransformLegacyFitPart}\n */\nfunction getLegacyFitPart(target) {\n    return {\n        transformType: transformTypes.FIT,\n        width: Math.round(target.width),\n        height: Math.round(target.height),\n        upscale: false,\n        forceUSM: true,\n        scaleFactor: 1,\n        cssUpscaleNeeded: false,\n    };\n}\n/**\n * returns fill part of the image transform uri\n * @param {ImageTransformTarget}    target\n *\n * @returns {TransformLegacyFillPart}\n */\nfunction getLegacyFillPart(target) {\n    return {\n        transformType: transformTypes.LEGACY_FILL,\n        width: Math.round(target.width),\n        height: Math.round(target.height),\n        alignment: getAlignment(target),\n        upscale: false,\n        forceUSM: true,\n        scaleFactor: 1,\n        cssUpscaleNeeded: false,\n    };\n}\n/**\n * returns legacy crop part of the image transform uri\n * @param {ImageTransformTarget}     target\n *\n * @returns {TransformLegacyCropPart}\n */\nfunction getLegacyCropPart(target) {\n    return {\n        transformType: transformTypes.LEGACY_CROP,\n        width: Math.round(target.width),\n        height: Math.round(target.height),\n        alignment: getAlignment(target),\n        upscale: false,\n        forceUSM: false,\n        scaleFactor: 1,\n        cssUpscaleNeeded: false,\n    };\n}\nexport { setTransformParts };\n//# sourceMappingURL=imageTransformParts.js.map","import { last } from './utils';\nimport { getPreferredImageQuality, roundToFixed } from './imageServiceUtils';\nimport { defaultUSM, fileType, imageFilters, transformTypes, } from './imageServiceConstants';\n/**\n * returns image filters part of the image transform uri\n * @param {ImageTransformObject}    transformsObj    transform parts object\n * @param {ImageTransformOptions}   [options]\n */\nfunction setTransformOptions(transformsObj, options) {\n    options = options || {};\n    // options - general\n    transformsObj.quality = getQuality(transformsObj, options);\n    transformsObj.progressive = getProgressive(options);\n    transformsObj.watermark = getWatermark(options);\n    transformsObj.autoEncode = options.autoEncode ?? true;\n    transformsObj.encoding = options?.encoding;\n    // options - filters & adjustments\n    transformsObj.unsharpMask = getUnsharpMask(transformsObj, options);\n    transformsObj.filters = getFilters(options);\n}\n/**\n *\n * @param {ImageTransformOptions}   options\n * @returns {string}\n */\nfunction getWatermark(options) {\n    return options.watermark;\n}\n/**\n * returns progressive if required\n * @param {ImageTransformOptions}   options\n *\n * @returns {boolean}\n */\nfunction getProgressive(options) {\n    return options.progressive !== false;\n}\n/**\n * returns image filters part of the image transform uri\n * @param {ImageTransformObject}    transformsObj    transform parts object\n * @param {ImageTransformOptions}   options\n *\n * @returns {number}\n */\nfunction getQuality(transformsObj, options) {\n    const isPNG = transformsObj.fileType === fileType.PNG;\n    const isJPG = transformsObj.fileType === fileType.JPG;\n    const isWEBP = transformsObj.fileType === fileType.WEBP;\n    const isAVIF = transformsObj.fileType === fileType.AVIF;\n    const isQualitySupported = isJPG || isPNG || isWEBP || isAVIF;\n    if (isQualitySupported) {\n        const transformData = last(transformsObj.parts);\n        const defaultQuality = getPreferredImageQuality(transformData.width, transformData.height);\n        let quality = options.quality && options.quality >= 5 && options.quality <= 90\n            ? options.quality\n            : defaultQuality;\n        // increase quality by 5 for webp images\n        quality = isPNG ? quality + 5 : quality;\n        return quality;\n    }\n    // quality not supported\n    return 0;\n}\n/**\n * returns the desired transformed image filters\n * @param {ImageTransformOptions}   options\n *\n * @returns {object}\n */\nfunction getFilters(options) {\n    const filterOptions = options.filters || {};\n    const filters = {};\n    // contrast\n    if (isValidImageFilter(filterOptions[imageFilters.CONTRAST], -100, 100)) {\n        filters[imageFilters.CONTRAST] = filterOptions[imageFilters.CONTRAST];\n    }\n    // brightness\n    if (isValidImageFilter(filterOptions[imageFilters.BRIGHTNESS], -100, 100)) {\n        filters[imageFilters.BRIGHTNESS] = filterOptions[imageFilters.BRIGHTNESS];\n    }\n    // saturation\n    if (isValidImageFilter(filterOptions[imageFilters.SATURATION], -100, 100)) {\n        filters[imageFilters.SATURATION] = filterOptions[imageFilters.SATURATION];\n    }\n    // hue\n    if (isValidImageFilter(filterOptions[imageFilters.HUE], -180, 180)) {\n        filters[imageFilters.HUE] = filterOptions[imageFilters.HUE];\n    }\n    // blur\n    if (isValidImageFilter(filterOptions[imageFilters.BLUR], 0, 100)) {\n        filters[imageFilters.BLUR] = filterOptions[imageFilters.BLUR];\n    }\n    return filters;\n}\n/**\n * indicates if requested filter value is valid\n * @param {number|undefined}  filterValue     filter's value\n * @param {number}  minValue        min range\n * @param {number}  maxValue        max range\n *\n * @returns {boolean}\n */\nfunction isValidImageFilter(filterValue, minValue, maxValue) {\n    // check if filter name and filter values range valid\n    return (typeof filterValue === 'number' &&\n        !isNaN(filterValue) &&\n        filterValue !== 0 &&\n        filterValue >= minValue &&\n        filterValue <= maxValue);\n}\n/**\n * returns the desired transformed image unSharpMask values\n * @param {ImageTransformObject}    transformsObj    transform parts object\n * @param {ImageTransformOptions}   options\n *\n * @returns {object}\n */\nfunction getUnsharpMask(transformsObj, options) {\n    // If options.unsharpMask is a valid value, use it\n    if (isUSMValid(options.unsharpMask)) {\n        // If we got usm, change values to have trailing zeros (.00), else return undefined\n        return {\n            radius: roundToFixed(options.unsharpMask?.radius, 2),\n            amount: roundToFixed(options.unsharpMask?.amount, 2),\n            threshold: roundToFixed(options.unsharpMask?.threshold, 2),\n        };\n        // if options.unsharpMask is not all zeros and not valid and usm should be used, use default\n    }\n    else if (!isZeroUSM(options.unsharpMask) && isUSMNeeded(transformsObj)) {\n        return defaultUSM;\n    }\n    return;\n}\n/**\n * indicates if usm is needed\n * @param {ImageTransformObject}      transformsObj   transform parts object\n *\n * @returns {boolean}\n */\nfunction isUSMNeeded(transformsObj) {\n    // ---------------------------------------------------------------------------------------\n    // do not apply usm if transformed image width & height is same as source image or larger\n    // and no force usm is desired\n    // and transform type is not fit\n    // ---------------------------------------------------------------------------------------\n    const transformPart = last(transformsObj.parts);\n    const upscale = transformPart.scaleFactor >= 1;\n    // return if usm is needed\n    return (!upscale ||\n        transformPart.forceUSM ||\n        transformPart.transformType === transformTypes.FIT);\n}\n/**\n * indicates if all usm values are presented and in range\n * @param {OptionUnsharpMask|undefined}  usm     unsharp mask\n *\n * @returns {boolean}\n */\nfunction isUSMValid(usm) {\n    usm = usm || {};\n    const radius = typeof usm.radius === 'number' &&\n        !isNaN(usm.radius) &&\n        usm.radius >= 0.1 &&\n        usm.radius <= 500;\n    const amount = typeof usm.amount === 'number' &&\n        !isNaN(usm.amount) &&\n        usm.amount >= 0 &&\n        usm.amount <= 10;\n    const threshold = typeof usm.threshold === 'number' &&\n        !isNaN(usm.threshold) &&\n        usm.threshold >= 0 &&\n        usm.threshold <= 255;\n    // return is a valid USM data\n    return radius && amount && threshold;\n}\n/**\n * indicates if all usm values are presented and are zero. an explicit request to not apply usm\n * @param {OptionUnsharpMask|undefined}  usm     unsharp mask\n *\n * @returns {boolean}\n */\nfunction isZeroUSM(usm) {\n    usm = usm || {};\n    return (typeof usm.radius === 'number' &&\n        !isNaN(usm.radius) &&\n        usm.radius === 0 &&\n        typeof usm.amount === 'number' &&\n        !isNaN(usm.amount) &&\n        usm.amount === 0 &&\n        typeof usm.threshold === 'number' &&\n        !isNaN(usm.threshold) &&\n        usm.threshold === 0);\n}\nexport { setTransformOptions };\n//# sourceMappingURL=imageTransformOptions.js.map","import { isSEOBot, getFileType, getFileName, getFileExtension, getDevicePixelRatio, getUpscaleString, isImageTransformApplicable, imageIsAnimated, } from '../helpers/imageServiceUtils';\nimport { isMobile } from '../helpers/browserFeatureSupport';\nimport { setTransformParts } from '../helpers/imageTransformParts';\nimport { setTransformOptions } from '../helpers/imageTransformOptions';\nimport { MOBILE_MAX_BG_SITE_LEGACY_WIDTH, DSKTP_MAX_BG_SITE_LEGACY_WIDTH, MOBILE_MAX_BG_SITE_LEGACY_HEIGHT, DSKTP_MAX_BG_SITE_LEGACY_HEIGHT, fittingTypes, } from '../helpers/imageServiceConstants';\n/**\n * returns image transform data\n *\n * @param {FittingType}             fittingType         imageServicesTypes.fittingTypes\n * @param {ImageTransformSource}    src                 source image\n * @param {ImageTransformTarget}    target              target component\n * @param {ImageTransformOptions}   [options]           transform options\n *\n * @returns {ImageTransformObject}\n */\nfunction getTransform(fittingType, src, target, options) {\n    const _isSEOBot = isSEOBot(options);\n    const fileType = getFileType(src.id);\n    const fileName = getFileName(src.id, src.name);\n    const devicePixelRatio = _isSEOBot ? 1 : getDevicePixelRatio(target);\n    const fileExtension = getFileExtension(src.id);\n    const preferredExtension = fileExtension;\n    const canTransformImage = isImageTransformApplicable(src.id, options?.hasAnimation, options?.allowAnimatedTransform);\n    const transformsObj = {\n        fileName,\n        fileExtension,\n        fileType,\n        fittingType,\n        preferredExtension,\n        src: {\n            id: src.id,\n            width: src.width,\n            height: src.height,\n            isCropped: false,\n            isAnimated: imageIsAnimated(src.id, options?.hasAnimation),\n        },\n        focalPoint: {\n            x: src.focalPoint && src.focalPoint.x,\n            y: src.focalPoint && src.focalPoint.y,\n        },\n        parts: [],\n        // options - general\n        devicePixelRatio,\n        quality: 0,\n        upscaleMethod: getUpscaleString(options),\n        progressive: true,\n        watermark: '',\n        unsharpMask: {},\n        filters: {},\n        transformed: canTransformImage,\n    };\n    if (canTransformImage) {\n        setTransformParts(transformsObj, src, target);\n        setTransformOptions(transformsObj, options);\n    }\n    return transformsObj;\n}\n/**\n * returns target data\n * handle legacy BG site if needed\n *\n * @param {FittingType}             fittingType         imageServicesTypes.fittingTypes\n * @param {ImageTransformSource}    src                 source image\n * @param {ImageTransformTarget}    target              target component\n *\n * @returns {Object}\n */\nfunction getTarget(fittingType, src, target) {\n    const targetObj = { ...target };\n    const _isMobile = isMobile();\n    // handle site BG legacy fitting types (desktop & mobile)\n    switch (fittingType) {\n        case fittingTypes.LEGACY_BG_FIT_AND_TILE:\n        case fittingTypes.LEGACY_BG_FIT_AND_TILE_HORIZONTAL:\n        case fittingTypes.LEGACY_BG_FIT_AND_TILE_VERTICAL:\n        case fittingTypes.LEGACY_BG_NORMAL:\n            const maxBGSiteLegacyWidth = _isMobile\n                ? MOBILE_MAX_BG_SITE_LEGACY_WIDTH\n                : DSKTP_MAX_BG_SITE_LEGACY_WIDTH;\n            const maxBGSiteLegacyHeight = _isMobile\n                ? MOBILE_MAX_BG_SITE_LEGACY_HEIGHT\n                : DSKTP_MAX_BG_SITE_LEGACY_HEIGHT;\n            targetObj.width = Math.min(maxBGSiteLegacyWidth, src.width);\n            targetObj.height = Math.min(maxBGSiteLegacyHeight, Math.round(targetObj.width / (src.width / src.height)));\n            // for legacy types force htmlTag='bg' and devicePixelRatio=1\n            targetObj.pixelAspectRatio = 1;\n    }\n    return targetObj;\n}\nexport { getTransform, getTarget };\n//# sourceMappingURL=transform.js.map","import { getFeature } from './imageServiceFeatureSupportObject';\n/**\n * get a browser detection if running on mobile device\n *\n * @returns {boolean}\n */\nfunction isMobile() {\n    return getFeature('isMobile');\n}\nexport { isMobile };\n//# sourceMappingURL=browserFeatureSupport.js.map","import { template } from '../helpers/utils';\nimport { imageFilters, transformTypes, API_VERSION, fileType, encodingTypes, } from '../helpers/imageServiceConstants';\n// transform templates\nconst fitTemplate = template `fit/w_${'width'},h_${'height'}`;\nconst fillTemplate = template `fill/w_${'width'},h_${'height'},al_${'alignment'}`;\nconst fillFocalTemplate = template `fill/w_${'width'},h_${'height'},fp_${'focalPointX'}_${'focalPointY'}`;\nconst cropTemplate = template `crop/x_${'x'},y_${'y'},w_${'width'},h_${'height'}`;\n// legacy templates\nconst legacyCropTemplate = template `crop/w_${'width'},h_${'height'},al_${'alignment'}`;\nconst legacyFillTemplate = template `fill/w_${'width'},h_${'height'},al_${'alignment'}`;\n// upscale template\nconst upscaleTemplate = template `,lg_${'upscaleMethodValue'}`;\n// options templates\nconst qualityTemplate = template `,q_${'quality'}`;\nconst qualityAutoTemplate = template `,quality_auto`;\nconst unSharpMaskTemplate = template `,usm_${'radius'}_${'amount'}_${'threshold'}`;\nconst nonProgressiveTemplate = template `,bl`;\nconst watermarkTemplate = template `,wm_${'watermark'}`;\nconst filterTemplatesMap = {\n    [imageFilters.CONTRAST]: template `,con_${'contrast'}`,\n    [imageFilters.BRIGHTNESS]: template `,br_${'brightness'}`,\n    [imageFilters.SATURATION]: template `,sat_${'saturation'}`,\n    [imageFilters.HUE]: template `,hue_${'hue'}`,\n    [imageFilters.BLUR]: template `,blur_${'blur'}`,\n};\nconst autoEncodeTemplate = template `,enc_auto`;\nconst AVIFEncodeTemplate = template `,enc_avif`;\nconst pAVIFEncodeTemplate = template `,enc_pavif`;\nconst animatedTransformTemplate = template `,pstr`;\n/**\n * returns image transform uri\n * @param {object}  transformsObj\n *\n * @returns {string}\n */\nfunction getImageURI(transformsObj) {\n    // construct image transforms\n    const transformsObjStrArr = [];\n    // construct transform\n    transformsObj.parts.forEach((transformPart) => {\n        switch (transformPart.transformType) {\n            case transformTypes.CROP:\n                transformsObjStrArr.push(cropTemplate(transformPart));\n                break;\n            case transformTypes.LEGACY_CROP:\n                transformsObjStrArr.push(legacyCropTemplate(transformPart));\n                break;\n            case transformTypes.LEGACY_FILL:\n                let legacyFillStr = legacyFillTemplate(transformPart);\n                if (transformPart.upscale) {\n                    legacyFillStr += upscaleTemplate(transformPart);\n                }\n                transformsObjStrArr.push(legacyFillStr);\n                break;\n            case transformTypes.FIT:\n                let fitStr = fitTemplate(transformPart);\n                if (transformPart.upscale) {\n                    fitStr += upscaleTemplate(transformPart);\n                }\n                transformsObjStrArr.push(fitStr);\n                break;\n            case transformTypes.FILL:\n                let fillStr = fillTemplate(transformPart);\n                if (transformPart.upscale) {\n                    fillStr += upscaleTemplate(transformPart);\n                }\n                transformsObjStrArr.push(fillStr);\n                break;\n            case transformTypes.FILL_FOCAL:\n                let fillFocalStr = fillFocalTemplate(transformPart);\n                if (transformPart.upscale) {\n                    fillFocalStr += upscaleTemplate(transformPart);\n                }\n                transformsObjStrArr.push(fillFocalStr);\n                break;\n        }\n    });\n    let transformsStr = transformsObjStrArr.join('/');\n    // construct transform options\n    // quality\n    if (transformsObj.quality) {\n        transformsStr += qualityTemplate(transformsObj);\n    }\n    // un-sharp mask\n    if (transformsObj.unsharpMask) {\n        transformsStr += unSharpMaskTemplate(transformsObj.unsharpMask);\n    }\n    // progressive\n    if (!transformsObj.progressive) {\n        transformsStr += nonProgressiveTemplate(transformsObj);\n    }\n    // watermark\n    if (transformsObj.watermark) {\n        transformsStr += watermarkTemplate(transformsObj);\n    }\n    // filters\n    if (transformsObj.filters) {\n        transformsStr += Object.keys(transformsObj.filters)\n            .map((filterName) => filterTemplatesMap[filterName](transformsObj.filters))\n            .join('');\n    }\n    // encoding\n    if (transformsObj.fileType !== fileType.GIF) {\n        if (transformsObj.encoding === encodingTypes.AVIF) {\n            transformsStr += AVIFEncodeTemplate(transformsObj);\n            transformsStr += qualityAutoTemplate(transformsObj);\n        }\n        else if (transformsObj.encoding === encodingTypes.PAVIF) {\n            transformsStr += pAVIFEncodeTemplate(transformsObj);\n            transformsStr += qualityAutoTemplate(transformsObj);\n        }\n        else if (transformsObj.autoEncode) {\n            transformsStr += autoEncodeTemplate(transformsObj);\n        }\n    }\n    // animated image poster transform\n    if (transformsObj.src?.isAnimated && transformsObj.transformed) {\n        transformsStr += animatedTransformTemplate(transformsObj);\n    }\n    // image url string\n    return `${transformsObj.src.id}/${API_VERSION}/${transformsStr}/${transformsObj.fileName}.${transformsObj.preferredExtension}`;\n}\nexport { getImageURI };\n//# sourceMappingURL=transforms.js.map","import { isAVIF, isImageTransformApplicable, isWEBP, } from '../helpers/imageServiceUtils';\nimport { getImageURI } from '../engines/transforms';\nimport { getTransform } from './transform';\n/**\n * returns image transform uri\n *\n * @param {string}                  fittingType         imageServicesTypes.fittingTypes\n * @param {ImageTransformSource}    src                 source image\n * @param {ImageTransformTarget}    target              target component\n * @param {ImageTransformOptions}   options             transform options\n * @param {Object}                  [transformObj]      transform data object to use\n *\n * @returns {string}\n */\nfunction getURI(fittingType, src, target, options = {}, transformObj) {\n    // check if image transformation is applicable (e.g. .gif, .wix_mp)\n    if (isImageTransformApplicable(src.id, options?.hasAnimation, options?.allowAnimatedTransform)) {\n        if (isWEBP(src.id) || isAVIF(src.id)) {\n            // exclude alignment, focalPoint and crop from webp and avif transformation in order not to break webp or avif images before transformation was enabled\n            const { alignment, ...transformTarget } = target;\n            src.focalPoint = { x: undefined, y: undefined };\n            delete src?.crop;\n            transformObj = getTransform(fittingType, src, transformTarget, options);\n        }\n        else {\n            transformObj =\n                transformObj || getTransform(fittingType, src, target, options);\n        }\n        // set the uri property\n        return getImageURI(transformObj);\n    }\n    return src.id;\n}\nexport { getURI };\n//# sourceMappingURL=uri.js.map","import { alignTypes, fittingTypes } from './imageServiceConstants';\nimport { isPNG } from './imageServiceUtils';\nconst ALIGN_TYPE_TO_POSITION = {\n    [alignTypes.CENTER]: '50% 50%',\n    [alignTypes.TOP_LEFT]: '0% 0%',\n    [alignTypes.TOP_RIGHT]: '100% 0%',\n    [alignTypes.TOP]: '50% 0%',\n    [alignTypes.BOTTOM_LEFT]: '0% 100%',\n    [alignTypes.BOTTOM_RIGHT]: '100% 100%',\n    [alignTypes.BOTTOM]: '50% 100%',\n    [alignTypes.RIGHT]: '100% 50%',\n    [alignTypes.LEFT]: '0% 50%',\n};\nconst POSITION_TO_ALIGN_TYPE = Object.entries(ALIGN_TYPE_TO_POSITION).reduce((acc, [align, position]) => {\n    acc[position] = align;\n    return acc;\n}, {});\nconst TILE_FITTING_TYPES = [\n    fittingTypes.TILE,\n    fittingTypes.TILE_HORIZONTAL,\n    fittingTypes.TILE_VERTICAL,\n    fittingTypes.LEGACY_BG_FIT_AND_TILE,\n    fittingTypes.LEGACY_BG_FIT_AND_TILE_HORIZONTAL,\n    fittingTypes.LEGACY_BG_FIT_AND_TILE_VERTICAL,\n];\nconst NON_SCALING_FITTING_TYPES = [\n    fittingTypes.LEGACY_ORIGINAL_SIZE,\n    fittingTypes.ORIGINAL_SIZE,\n    fittingTypes.LEGACY_BG_NORMAL,\n];\nfunction getIsFakeTile(fittingType, src, { width: targetWidth, height: targetHeight, }) {\n    return (fittingType === fittingTypes.TILE &&\n        src.width > targetWidth &&\n        src.height > targetHeight);\n}\n/**\n *\n * @param {FittingType}             fittingType      imageServicesTypes.fittingTypes\n * @param {ImageTransformSource}    src              source image\n * @param {Dimensions}              target           target container dimensions\n * @param {boolean}                 [isSEOBot=false] whether it is a render for a bot request\n * @returns {Dimensions} scaled dimensions\n */\nfunction getScaledDimensions(fittingType, src, { width, height }, isSEOBot = false) {\n    if (isSEOBot) {\n        return { width, height };\n    }\n    const isScalable = !NON_SCALING_FITTING_TYPES.includes(fittingType);\n    const isFakeTile = getIsFakeTile(fittingType, src, { width, height });\n    const isTile = !isFakeTile && TILE_FITTING_TYPES.includes(fittingType);\n    const _width = isTile ? src.width : width;\n    const _height = isTile ? src.height : height;\n    const scaleFactor = isScalable\n        ? getScaleFactorByWidth(_width, isPNG(src.id))\n        : 1;\n    return {\n        width: isFakeTile ? 1920 : _width * scaleFactor,\n        height: _height * scaleFactor,\n    };\n}\n/**\n *\n * @param {FittingType} fittingType  imageServicesTypes.fittingTypes\n * @param {boolean} isFakeTile\n * @returns {string} fittingType\n */\nfunction getConvertedFitting(fittingType, isFakeTile) {\n    const isTile = TILE_FITTING_TYPES.includes(fittingType) && !isFakeTile;\n    const isFill = fittingType === fittingTypes.SCALE_TO_FILL;\n    return isFill || isTile ? fittingTypes.SCALE_TO_FIT : fittingType;\n}\n/**\n *\n * @param {ImageTransformSource}    src                 source image\n * @param {number || ''}            width\n * @param {number || ''}            height\n * @returns {Dimensions}    width, height\n */\nfunction validateTargetDimensions(src, { width, height }) {\n    if (!width || !height) {\n        const _width = width || Math.min(980, src.width);\n        const heightRatio = _width / src.width;\n        return {\n            width: _width,\n            height: height || src.height * heightRatio,\n        };\n    }\n    return { width, height };\n}\n/**\n *\n * @param {number} width\n * @param {boolean} isHighQuality\n * @return {number}\n */\nfunction getScaleFactorByWidth(width, isHighQuality) {\n    if (width > 900) {\n        return isHighQuality ? 0.05 : 0.15;\n    }\n    else if (width > 500) {\n        return isHighQuality ? 0.1 : 0.18;\n    }\n    else if (width > 200) {\n        return 0.25;\n    }\n    return 1;\n}\n/**\n *\n * @param {number} width\n * @param {FittingType} fittingType imageServicesTypes.fittingTypes\n * @param {boolean} isSEOBot\n * @return {number}\n */\nfunction getBlurValue(width, fittingType, isSEOBot) {\n    if (isSEOBot) {\n        return 0;\n    }\n    if (TILE_FITTING_TYPES.includes(fittingType)) {\n        return 1;\n    }\n    if (width > 200) {\n        return 2;\n    }\n    return 3;\n}\n/**\n *\n * @param {FittingType}                       fittingType\n * @param {ImageTransformSource}              src                  source image\n * @param {{width?: number; height?: number}} target               target element\n * @param {string}                            [alignment='center']\n * @returns {{img}, {container}}\n */\nfunction getCSSOverrides(fittingType, src, target, alignment = 'center') {\n    const returnValue = {\n        img: {},\n        container: {},\n    };\n    if (fittingType === fittingTypes.SCALE_TO_FILL) {\n        const alignTypeFromFocalPoint = src.focalPoint && convertFocalPointToAlignType(src.focalPoint);\n        const alignType = alignTypeFromFocalPoint || alignment;\n        if (src.focalPoint && !alignTypeFromFocalPoint) {\n            returnValue.img = {\n                objectPosition: convertFillFocalToPosition(src, target, src.focalPoint),\n            };\n        }\n        else {\n            returnValue.img = {\n                objectPosition: ALIGN_TYPE_TO_POSITION[alignType],\n            };\n        }\n    }\n    else if ([fittingTypes.LEGACY_ORIGINAL_SIZE, fittingTypes.ORIGINAL_SIZE].includes(fittingType)) {\n        returnValue.img = {\n            objectFit: 'none',\n            top: 'auto',\n            left: 'auto',\n            right: 'auto',\n            bottom: 'auto',\n        };\n    }\n    else if (TILE_FITTING_TYPES.includes(fittingType)) {\n        returnValue.container = {\n            backgroundSize: `${src.width}px ${src.height}px`,\n        };\n    }\n    return returnValue;\n}\n/**\n * Try to convert focal point value to 9 grid alignment value\n *\n * @param {Point}    focalPoint\n * @returns {AlignType} align type\n */\nfunction convertFocalPointToAlignType(focalPoint) {\n    const position = `${focalPoint.x}% ${focalPoint.y}%`;\n    return POSITION_TO_ALIGN_TYPE[position] || '';\n}\n/**\n *\n * @param {Dimensions} src source dimensions\n * @param {width?: number; height?: number} target target dimensions\n * @param {Point} focalPoint x/y as 0-100 percentages\n * @returns {string} in 'x% y%' format\n */\nfunction convertFillFocalToPosition(src, target, focalPoint) {\n    const { width: sW, height: sH } = src;\n    const { width: tW, height: tH } = target;\n    const { x: fpX, y: fpY } = focalPoint;\n    if (!tW || !tH) {\n        return `${fpX}% ${fpY}%`;\n    }\n    const fillScaleFactor = Math.max(tW / sW, tH / sH);\n    const imgScaledW = sW * fillScaleFactor;\n    const imgScaledH = sH * fillScaleFactor;\n    const x = Math.max(0, Math.min(imgScaledW - tW, imgScaledW * (fpX / 100) - tW / 2));\n    const y = Math.max(0, Math.min(imgScaledH - tH, imgScaledH * (fpY / 100) - tH / 2));\n    const posX = x && Math.floor((x / (imgScaledW - tW)) * 100);\n    const posY = y && Math.floor((y / (imgScaledH - tH)) * 100);\n    return `${posX}% ${posY}%`;\n}\nexport { getBlurValue, getConvertedFitting, getCSSOverrides, getIsFakeTile, getScaledDimensions, validateTargetDimensions, };\n//# sourceMappingURL=imagePlaceholderUtils.js.map","import { emptyData } from '../../helpers/imageServiceConstants';\nimport { isImageTransformApplicable, isValidRequest, } from '../../helpers/imageServiceUtils';\nimport { getAttributes } from '../../engines/attributes';\nimport { getTransform, getTarget } from '../transform';\nimport { getURI } from '../uri';\nimport { getSrcset } from '../srcset';\nimport { getScaledDimensions, getBlurValue, getCSSOverrides, validateTargetDimensions, getIsFakeTile, getConvertedFitting, } from '../../helpers/imagePlaceholderUtils';\nconst PLACEHOLDER_IMG_CSS_OVERRIDES = { width: '100%', height: '100%' };\n/**\n * returns image _placeholder_ transform uri and the\n * needed css for alignment and positioning\n *\n * @param {FittingType}             fittingType imageServicesTypes.fittingTypes\n * @param {ImageTransformSource}    src         image\n * @param {ImagePlaceholderTransformTarget}    target      target dimensions\n * @param {ImageTransformOptions} [options]   environment / transformation  options\n *\n * @returns {ImageDataAttributes}\n */\nfunction getPlaceholder(fittingType, src, target, options = {}) {\n    const { autoEncode = true, isSEOBot, shouldLoadHQImage, hasAnimation, allowAnimatedTransform, encoding, } = options;\n    if (!isValidRequest(fittingType, src, target)) {\n        return emptyData;\n    }\n    const IS_IN_PLACEHOLDER_FLOW = typeof allowAnimatedTransform === 'undefined'\n        ? true\n        : allowAnimatedTransform;\n    const canTransformImage = isImageTransformApplicable(src.id, hasAnimation, IS_IN_PLACEHOLDER_FLOW);\n    if (!canTransformImage || shouldLoadHQImage) {\n        /* Either:\n         * 1. Transform isn't applicable so target is original size applied with fluid CSS\n         * 2. User asked for an HQ image, so they must have supplied target size (width/height)\n         */\n        return getData(fittingType, src, target, {\n            ...options,\n            autoEncode,\n            useSrcset: canTransformImage,\n        });\n    }\n    // If there aren't dimensions, we make them up\n    const newTarget = {\n        ...target,\n        ...validateTargetDimensions(src, target),\n    };\n    const { alignment, htmlTag } = newTarget;\n    const isFakeTile = getIsFakeTile(fittingType, src, newTarget);\n    const scaledDimensions = getScaledDimensions(fittingType, src, newTarget, isSEOBot);\n    const blur = getBlurValue(newTarget.width, fittingType, isSEOBot);\n    const convertedFittingType = getConvertedFitting(fittingType, isFakeTile);\n    const overrideCSS = getCSSOverrides(fittingType, src, target, alignment);\n    const { uri } = getData(convertedFittingType, src, {\n        ...scaledDimensions,\n        alignment,\n        htmlTag,\n    }, {\n        autoEncode,\n        filters: blur ? { blur } : {},\n        hasAnimation,\n        allowAnimatedTransform: IS_IN_PLACEHOLDER_FLOW,\n        encoding,\n    });\n    const { attr = {}, css } = getData(fittingType, src, {\n        ...newTarget,\n        alignment,\n        htmlTag,\n    }, {});\n    css.img = css.img || {};\n    css.container = css.container || {};\n    Object.assign(css.img, overrideCSS.img, PLACEHOLDER_IMG_CSS_OVERRIDES);\n    Object.assign(css.container, overrideCSS.container);\n    return { uri, css, attr, transformed: true };\n}\n/**\n * returns image transform uri and the\n * needed css for alignment and positioning\n *\n * @param {FittingType}             fittingType         imageServicesTypes.fittingTypes\n * @param {ImageTransformSource}    src                 source image\n * @param {ImageTransformTarget}    target              target component\n * @param {ImageTransformOptions}   [options]          transform options\n *\n * @returns {ImageDataAttributes}\n */\nfunction getData(fittingType, src, target, options) {\n    let data = {};\n    // check if valid request\n    if (isValidRequest(fittingType, src, target)) {\n        // handle site BG legacy fitting types if needed\n        const targetObj = getTarget(fittingType, src, target);\n        // parse request and create working OBJ\n        const transformObj = getTransform(fittingType, src, targetObj, options);\n        data.uri = getURI(fittingType, src, targetObj, options, transformObj);\n        if (options?.useSrcset) {\n            data.srcset = getSrcset(fittingType, src, targetObj, options, data);\n        }\n        // set the CSS or the SVG property\n        Object.assign(data, getAttributes(transformObj, targetObj), {\n            transformed: transformObj.transformed,\n        });\n    }\n    else {\n        // empty data\n        data = emptyData;\n    }\n    // return data to be used in html\n    return data;\n}\nexport { getData, getPlaceholder };\n//# sourceMappingURL=api.js.map","import { getURI } from './uri';\nfunction getSrcset(fittingType, src, target, options, data) {\n    const dpr = target.pixelAspectRatio || 1;\n    return {\n        dpr: [\n            `${dpr === 1\n                ? data.uri\n                : getURI(fittingType, src, {\n                    ...target,\n                    pixelAspectRatio: 1,\n                }, options)} 1x`,\n            `${dpr === 2\n                ? data.uri\n                : getURI(fittingType, src, {\n                    ...target,\n                    pixelAspectRatio: 2,\n                }, options)} 2x`,\n        ],\n    };\n}\nexport { getSrcset };\n//# sourceMappingURL=srcset.js.map","import { htmlTag } from '../helpers/imageServiceConstants';\nimport { get as backgroundAttributes } from './attributes/backgroundAttributes';\nimport { get as imgAttributes } from './attributes/imgAttributes';\nimport { get as SVGAttributes } from './attributes/SVGAttributes';\n/**\n * get CSS or SVG attributes to be used in the browser\n * @param {ImageTransformObject}    transformsObj    transform parts object\n * @param {ImageTransformTarget}    target\n *\n * @returns object\n */\nfunction getAttributes(transformsObj, target) {\n    let attributesGetter;\n    if (target.htmlTag === htmlTag.BG) {\n        attributesGetter = backgroundAttributes;\n    }\n    else if (target.htmlTag === htmlTag.SVG) {\n        attributesGetter = SVGAttributes;\n    }\n    else {\n        attributesGetter = imgAttributes;\n    }\n    return attributesGetter(transformsObj, target);\n}\nexport { getAttributes };\n//# sourceMappingURL=attributes.js.map","import { getData, populateGlobalFeatureSupport } from '../api/uri/index';\nimport { fittingTypes, htmlTag, alignTypes, } from '../helpers/imageServiceConstants';\nconst wixStatic = 'https://static.wixstatic.com/';\nconst wixStaticWithMedia = 'https://static.wixstatic.com/media/';\nconst HAS_MEDIA_PREFIX_RE = /^media\\//i;\nconst devicePixelRatio = typeof window !== 'undefined' ? window.devicePixelRatio : 1;\nconst getWixStaticURL = (uri) => HAS_MEDIA_PREFIX_RE.test(uri)\n    ? `${wixStatic}${uri}`\n    : `${wixStaticWithMedia}${uri}`;\nconst getURL = (uri, options) => {\n    const baseHostURL = options && options.baseHostURL;\n    return baseHostURL ? `${baseHostURL}${uri}` : getWixStaticURL(uri);\n};\nfunction getScaleToFitImageURL(relativeUrl, sourceWidth, sourceHeight, targetWidth, targetHeight, options) {\n    const data = getData(fittingTypes.SCALE_TO_FIT, {\n        id: relativeUrl,\n        width: sourceWidth,\n        height: sourceHeight,\n        name: options && options.name,\n    }, {\n        width: targetWidth,\n        height: targetHeight,\n        htmlTag: htmlTag.IMG,\n        alignment: alignTypes.CENTER,\n        pixelAspectRatio: options?.devicePixelRatio ?? devicePixelRatio,\n    }, options);\n    return getURL(data.uri, options);\n}\nfunction getScaleToFillImageURL(relativeUrl, sourceWidth, sourceHeight, targetWidth, targetHeight, options) {\n    const data = getData(fittingTypes.SCALE_TO_FILL, {\n        id: relativeUrl,\n        width: sourceWidth,\n        height: sourceHeight,\n        name: options && options.name,\n        focalPoint: {\n            x: options && options.focalPoint && options.focalPoint.x,\n            y: options && options.focalPoint && options.focalPoint.y,\n        },\n    }, {\n        width: targetWidth,\n        height: targetHeight,\n        htmlTag: htmlTag.IMG,\n        alignment: alignTypes.CENTER,\n        pixelAspectRatio: options?.devicePixelRatio ?? devicePixelRatio,\n    }, options);\n    return getURL(data.uri, options);\n}\nfunction getCropImageURL(relativeUrl, sourceWidth, sourceHeight, cropX, cropY, cropWidth, cropHeight, targetWidth, targetHeight, options) {\n    const data = getData(fittingTypes.SCALE_TO_FILL, {\n        id: relativeUrl,\n        width: sourceWidth,\n        height: sourceHeight,\n        name: options && options.name,\n        crop: {\n            x: cropX,\n            y: cropY,\n            width: cropWidth,\n            height: cropHeight,\n        },\n    }, {\n        width: targetWidth,\n        height: targetHeight,\n        htmlTag: htmlTag.IMG,\n        alignment: alignTypes.CENTER,\n        pixelAspectRatio: options?.devicePixelRatio ?? devicePixelRatio,\n    }, options);\n    return getURL(data.uri, options);\n}\nexport { populateGlobalFeatureSupport, getScaleToFitImageURL, getScaleToFillImageURL, getCropImageURL, wixStatic, wixStaticWithMedia, };\n//# sourceMappingURL=api.js.map","import { populateGlobalFeatureSupport, getScaleToFitImageURL, getScaleToFillImageURL, getCropImageURL, wixStatic, wixStaticWithMedia, } from './api';\npopulateGlobalFeatureSupport();\nexport { getScaleToFitImageURL, getScaleToFillImageURL, getCropImageURL, wixStatic, wixStaticWithMedia, };\n//# sourceMappingURL=index.js.map","import { alignTypes, fittingTypes, htmlTag, upscaleMethods, fileType, } from '../../helpers/imageServiceConstants';\nimport { isWEBP, getFileExtension } from '../../helpers/imageServiceUtils';\nimport { populateGlobalFeatureSupport } from '../../helpers/populateFeatureSupport';\nimport { getData, getPlaceholder } from './api';\nimport { getScaleToFitImageURL, getScaleToFillImageURL, getCropImageURL, wixStaticWithMedia, } from '../../sdk';\nimport { getResponsiveImageProps } from '../../helpers/responsiveImageUtils';\npopulateGlobalFeatureSupport();\nconst sdk = {\n    getScaleToFitImageURL,\n    getScaleToFillImageURL,\n    getCropImageURL,\n};\nexport * from '../../types';\nconst STATIC_MEDIA_URL = wixStaticWithMedia;\nexport { STATIC_MEDIA_URL, alignTypes, fittingTypes, getData, getPlaceholder, htmlTag, populateGlobalFeatureSupport, sdk, upscaleMethods, isWEBP, getFileExtension, fileType, getResponsiveImageProps, };\n//# sourceMappingURL=index.js.map","import * as React from 'react';\nimport styles from './Image.module.scss';\nimport * as imageKit from '@wix/image-kit';\nconst { STATIC_MEDIA_URL } = imageKit;\nconst fetchLQIP = ({ fittingType, src, target, options, }) => {\n    const placeholder = imageKit.getPlaceholder(fittingType, src, target, {\n        ...options,\n        autoEncode: true,\n    });\n    if (placeholder?.uri && !/^[a-z]+:/.test(placeholder.uri)) {\n        placeholder.uri = `${STATIC_MEDIA_URL}${placeholder.uri}`;\n    }\n    return placeholder;\n};\nconst SCHEME_RE = /^[a-z]+:/;\nconst Image = (props) => {\n    const { id, containerId, uri, alt, name = '', role, width, height, displayMode, devicePixelRatio, quality, alignType, bgEffectName = '', focalPoint, upscaleMethod, className = '', crop, imageStyles = {}, targetWidth, targetHeight, targetScale, onLoad = () => { }, onError = () => { }, shouldUseLQIP, containerWidth, containerHeight, getPlaceholder, isInFirstFold, placeholderTransition, socialAttrs, isSEOBot, skipMeasure, hasAnimation, encoding, isFluidLayout, } = props;\n    const imageRef = React.useRef(null);\n    // fix containerId and id to support hoverBox component\n    let hasSsrSrc = '';\n    const hasBlurTransition = placeholderTransition === 'blur';\n    const ssrImageData = React.useRef(null);\n    if (!ssrImageData.current) {\n        if (getPlaceholder || shouldUseLQIP || isInFirstFold || isSEOBot) {\n            const options = {\n                upscaleMethod,\n                ...(quality ? quality : {}),\n                shouldLoadHQImage: isInFirstFold,\n                isSEOBot,\n                hasAnimation,\n                encoding,\n            };\n            ssrImageData.current = (getPlaceholder || fetchLQIP)({\n                fittingType: displayMode,\n                src: {\n                    id: uri,\n                    width,\n                    height,\n                    crop,\n                    name,\n                    focalPoint,\n                },\n                target: {\n                    width: containerWidth,\n                    height: containerHeight,\n                    alignment: alignType,\n                    htmlTag: 'img',\n                },\n                options,\n            });\n            hasSsrSrc =\n                !ssrImageData.current.transformed || isInFirstFold || isSEOBot\n                    ? ''\n                    : 'true';\n        }\n        else {\n            // to keep an empty placeholder data\n            ssrImageData.current = {\n                uri: undefined,\n                css: { img: {} },\n                attr: { img: {}, container: {} },\n                transformed: false,\n            };\n        }\n    }\n    const isLQIP = !isSEOBot &&\n        (getPlaceholder || shouldUseLQIP) &&\n        !isInFirstFold &&\n        ssrImageData.current.transformed;\n    const imageInfo = React.useMemo(() => JSON.stringify({\n        containerId,\n        ...(containerId && { containerId }),\n        ...(alignType && { alignType }),\n        ...(skipMeasure && { skipMeasure: true }),\n        displayMode,\n        ...(containerWidth && { targetWidth: containerWidth }),\n        ...(containerHeight && { targetHeight: containerHeight }),\n        ...(targetWidth && { targetWidth }),\n        ...(targetHeight && { targetHeight }),\n        ...(targetScale && { targetScale }),\n        isLQIP,\n        isSEOBot,\n        lqipTransition: placeholderTransition,\n        encoding,\n        imageData: {\n            width,\n            height,\n            uri,\n            name,\n            displayMode,\n            hasAnimation,\n            ...(quality && { quality }),\n            ...(devicePixelRatio && { devicePixelRatio }),\n            ...(focalPoint && { focalPoint }),\n            ...(crop && { crop }),\n            ...(upscaleMethod && { upscaleMethod }),\n        },\n    }), [\n        containerId,\n        alignType,\n        skipMeasure,\n        displayMode,\n        containerWidth,\n        containerHeight,\n        targetWidth,\n        targetHeight,\n        targetScale,\n        isLQIP,\n        isSEOBot,\n        placeholderTransition,\n        encoding,\n        width,\n        height,\n        uri,\n        name,\n        hasAnimation,\n        quality,\n        devicePixelRatio,\n        focalPoint,\n        crop,\n        upscaleMethod,\n    ]);\n    const ssrResult = ssrImageData.current;\n    const src = ssrResult?.uri;\n    const srcset = ssrResult?.srcset;\n    const placeholderStyle = ssrResult.css?.img;\n    const classNames = `${styles.image} ${className}`;\n    React.useEffect(() => {\n        // When image comes from cache onLoad not trigger on native HTML element\n        const imgElement = imageRef.current;\n        if (onLoad && imgElement?.currentSrc && imgElement?.complete) {\n            onLoad({\n                target: imgElement,\n            });\n        }\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n    const maxWidth = ssrResult && !ssrResult?.transformed\n        ? `max(${width}px, 100%)`\n        : targetWidth\n            ? `${targetWidth}px`\n            : null;\n    return (React.createElement(\"wow-image\", { id: id, class: classNames, \"data-image-info\": imageInfo, \"data-motion-part\": `BG_IMG ${containerId}`, \"data-bg-effect-name\": bgEffectName, \"data-has-ssr-src\": hasSsrSrc, \"data-animate-blur\": !isSEOBot && isLQIP && hasBlurTransition ? '' : undefined, \"data-is-responsive\": isFluidLayout ? 'true' : undefined, style: maxWidth ? { '--wix-img-max-width': maxWidth } : {} },\n        React.createElement(\"img\", { src: src, ref: imageRef, alt: alt || '', role: role, style: { ...placeholderStyle, ...imageStyles }, onLoad: onLoad, onError: onError, width: containerWidth ? containerWidth : undefined, height: containerHeight ? containerHeight : undefined, ...socialAttrs, srcSet: isInFirstFold\n                ? srcset?.dpr\n                    ?.map((s) => SCHEME_RE.test(s) ? s : `${STATIC_MEDIA_URL}${s}`)\n                    .join(', ')\n                : undefined, \n            // @ts-expect-error fetchpriority type should work in react > 18.3 https://github.com/facebook/react/pull/25927\n            fetchpriority: isInFirstFold ? 'high' : undefined, loading: isInFirstFold === false ? 'lazy' : undefined, \n            // The src attribute triggers a mismatch warning because wow-image updates its src outside of the React lifecycle. This causes React to retain the old value in the virtual DOM, which could potentially lead to a bug where the old value is re-rendered during updates. However, we’re confident that this issue is not reproducing in current (16-18) React versions\n            suppressHydrationWarning: true })));\n};\nexport { Image, imageKit };\n//# sourceMappingURL=Image.js.map","// extracted by mini-css-extract-plugin\nexport default {\"image\":\"Tj01hh\"};","'use-client';\nimport * as React from 'react';\nimport { Image as PixelPerfectImage } from '@wix/image';\nimport type { ImageProps } from '@wix/image';\nimport styles from './style/Image.module.scss';\nimport classNames from 'clsx';\nimport type { ResponsiveImageProps } from '@wix/editor-elements-definitions';\n\nconst Image: React.FC<\n  ImageProps & {\n    responsiveImageProps?: ResponsiveImageProps;\n    zoomedImageResponsiveOverride?: ResponsiveImageProps;\n  }\n> = props => {\n  const {\n    id,\n    alt,\n    role,\n    className,\n    imageStyles = {},\n    targetWidth,\n    targetHeight,\n    onLoad,\n    onError,\n    containerWidth,\n    containerHeight,\n    isInFirstFold,\n    socialAttrs,\n    skipMeasure,\n    responsiveImageProps,\n    zoomedImageResponsiveOverride,\n    displayMode,\n  } = props;\n\n  const effectiveWidth = targetWidth || containerWidth;\n  const effectiveHeight = targetHeight || containerHeight;\n\n  const { fallbackSrc, srcset, sources, css } = responsiveImageProps || {};\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  const { width, height, ...responsiveImgCssNoHeightAndWidth } =\n    responsiveImageProps?.css?.img || {};\n\n  const responsiveImagesStyle =\n    displayMode === 'original_size'\n      ? responsiveImageProps?.css?.img\n      : responsiveImgCssNoHeightAndWidth;\n\n  if (fallbackSrc && srcset && css) {\n    return (\n      <img\n        // @ts-expect-error fetchpriority type should work in react > 18.3 https://github.com/facebook/react/pull/25927\n        fetchpriority={isInFirstFold ? 'high' : undefined}\n        loading={isInFirstFold === false ? 'lazy' : undefined}\n        sizes={`${effectiveWidth}px`}\n        srcSet={\n          skipMeasure\n            ? zoomedImageResponsiveOverride?.srcset\n            : responsiveImageProps?.srcset\n        }\n        id={id}\n        src={fallbackSrc}\n        alt={alt || ''}\n        role={role}\n        style={{\n          ...imageStyles,\n          ...(skipMeasure\n            ? { ...zoomedImageResponsiveOverride?.css?.img }\n            : { ...responsiveImagesStyle }),\n        }}\n        onLoad={onLoad}\n        onError={onError}\n        className={classNames(className, styles.image)}\n        width={effectiveWidth}\n        height={effectiveHeight}\n        {...socialAttrs}\n      />\n    );\n  }\n\n  if (fallbackSrc && sources && css) {\n    return (\n      <picture>\n        {sources.map(\n          ({\n            srcset: sourceSrcset,\n            media,\n            sizes,\n          }: {\n            srcset: string;\n            media: string;\n            sizes: string;\n          }) => {\n            return (\n              <source\n                key={media}\n                srcSet={sourceSrcset}\n                media={media}\n                sizes={sizes}\n              />\n            );\n          },\n        )}\n        <img\n          // @ts-expect-error fetchpriority type should work in react > 18.3 https://github.com/facebook/react/pull/25927\n          fetchpriority={isInFirstFold ? 'high' : undefined}\n          loading={isInFirstFold === false ? 'lazy' : undefined}\n          id={id}\n          src={sources[0].fallbackSrc}\n          alt={alt || ''}\n          role={role}\n          style={{\n            ...imageStyles,\n            objectFit: sources[0].imgStyle.objectFit,\n            objectPosition: sources[0].imgStyle.objectPosition,\n          }}\n          onLoad={onLoad}\n          onError={onError}\n          className={classNames(className, styles.image)}\n          width={effectiveWidth}\n          height={effectiveHeight}\n          {...socialAttrs}\n        />\n      </picture>\n    );\n  }\n\n  return <PixelPerfectImage {...props} />;\n};\n\nexport default Image;\n","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgZoomIn = function SvgZoomIn(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: 40,\n    height: 40,\n    viewBox: \"0 0 40 40\",\n    fill: \"none\",\n    xmlns: \"http://www.w3.org/2000/svg\"\n  }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M16.611 23.389A5.464 5.464 0 0 1 15 19.5c0-1.468.572-2.849 1.611-3.888A5.465 5.465 0 0 1 20.5 14c1.469 0 2.85.573 3.889 1.612A5.463 5.463 0 0 1 26 19.5c0 1.469-.572 2.85-1.611 3.889A5.464 5.464 0 0 1 20.5 25a5.464 5.464 0 0 1-3.889-1.611Zm13.392 4.907-4.57-4.571A6.446 6.446 0 0 0 27 19.5a6.453 6.453 0 0 0-1.904-4.595A6.456 6.456 0 0 0 20.5 13a6.458 6.458 0 0 0-4.596 1.905A6.453 6.453 0 0 0 14 19.5c0 1.737.676 3.368 1.904 4.596A6.457 6.457 0 0 0 20.5 26a6.446 6.446 0 0 0 4.226-1.568l4.57 4.571.707-.707Z\",\n    fill: \"#000624\"\n  })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#000\",\n    d: \"M20 17h1v5h-1z\"\n  })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n    fill: \"#000\",\n    d: \"M18 20v-1h5v1z\"\n  })));\n};\nexport default SvgZoomIn;","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"nTOEE9\",\"zoomIn\":\"sqUyGm\",\"zoomOut\":\"C_JY0G\",\"zoom-button\":\"RZQnmg\",\"zoomButton\":\"RZQnmg\"};","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgZoomOut = function SvgZoomOut(props) {\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: 40,\n    height: 40,\n    viewBox: \"0 0 40 40\",\n    fill: \"none\",\n    xmlns: \"http://www.w3.org/2000/svg\"\n  }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    fillRule: \"evenodd\",\n    clipRule: \"evenodd\",\n    d: \"M16.611 23.389A5.464 5.464 0 0 1 15 19.5c0-1.468.572-2.849 1.611-3.888A5.465 5.465 0 0 1 20.5 14c1.469 0 2.85.573 3.889 1.612A5.463 5.463 0 0 1 26 19.5c0 1.469-.572 2.85-1.611 3.889A5.464 5.464 0 0 1 20.5 25a5.464 5.464 0 0 1-3.889-1.611Zm13.392 4.907-4.57-4.571A6.446 6.446 0 0 0 27 19.5a6.453 6.453 0 0 0-1.904-4.595A6.456 6.456 0 0 0 20.5 13a6.458 6.458 0 0 0-4.596 1.905A6.453 6.453 0 0 0 14 19.5c0 1.737.676 3.368 1.904 4.596A6.457 6.457 0 0 0 20.5 26a6.446 6.446 0 0 0 4.226-1.568l4.57 4.571.707-.707Z\",\n    fill: \"#000624\"\n  })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M18 20v-1h5v1z\"\n  })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"m20 4-3 3h6l-3-3ZM20 36l-3-3h6l-3 3ZM4 19l3-3v6l-3-3ZM36 19l-3-3v6l3-3Z\",\n    fill: \"#000624\"\n  })));\n};\nexport default SvgZoomOut;","import type * as React from 'react';\n\nexport const handleButtonKeyDown = (\n  event: KeyboardEvent,\n  toggleZoom: () => void,\n  resetZoom: () => void,\n) => {\n  if (event.key === 'Enter' || event.key === ' ') {\n    event.preventDefault();\n    toggleZoom();\n  } else if (event.key === 'Escape') {\n    resetZoom();\n  }\n};\n\nexport const handleKeyDown = (\n  // @ts-expect-error\n  event: ReactKeyboardEvent<HTMLDivElement>,\n  isZoomedByKeyboard: boolean,\n  setPosition: React.Dispatch<React.SetStateAction<{ x: number; y: number }>>,\n  containerRef: React.RefObject<HTMLDivElement>,\n  zoomImageMeasures: { width: number; height: number },\n) => {\n  if (!isZoomedByKeyboard) {\n    return;\n  }\n\n  type ArrowKeys = 'ArrowUp' | 'ArrowDown' | 'ArrowLeft' | 'ArrowRight';\n  if (['ArrowRight', 'ArrowLeft', 'ArrowUp', 'ArrowDown'].includes(event.key)) {\n    event.preventDefault();\n  }\n\n  const measurements = containerRef.current!.getBoundingClientRect();\n\n  const containerWidth = measurements.width;\n  const containerHeight = measurements.height;\n\n  const scaledWidth = zoomImageMeasures.width;\n  const scaledHeight = zoomImageMeasures.height;\n\n  const heightMoveStep = scaledHeight / 20;\n  const widthMoveStep = scaledWidth / 20;\n\n  const key = event.key as ArrowKeys;\n\n  setPosition(prev => {\n    const { x, y } = prev;\n    const actions = {\n      ArrowUp: { x, y: Math.min(y + heightMoveStep, 0) },\n      ArrowDown: {\n        x,\n        y: Math.max(y - heightMoveStep, containerHeight - scaledHeight),\n      },\n      ArrowLeft: { x: Math.min(x + widthMoveStep, 0), y },\n      ArrowRight: {\n        x: Math.max(x - widthMoveStep, containerWidth - scaledWidth),\n        y,\n      },\n    } as const;\n    const action = actions[key];\n    return action ?? prev;\n  });\n};\n\nexport const toggleKeyboardZoom = (\n  isZoomedByKeyboard: boolean,\n  setIsZoomedByKeyboard: React.Dispatch<React.SetStateAction<boolean>>,\n  setPosition: React.Dispatch<React.SetStateAction<{ x: number; y: number }>>,\n) => {\n  setIsZoomedByKeyboard(!isZoomedByKeyboard);\n  if (!isZoomedByKeyboard) {\n    setPosition({ x: 0, y: 0 });\n  }\n};\n","import * as React from 'react';\nimport classNames from 'clsx';\nimport type { ZoomedImageProps } from '../ZoomedImage.types';\nimport Image from '../../Image/viewer/Image';\nimport styles from './style/zoomedImage.scss';\nimport ZoomIn from './assets/zoom-in.svg';\nimport ZoomOut from './assets/zoom-out.svg';\nimport {\n  handleKeyDown,\n  handleButtonKeyDown,\n  toggleKeyboardZoom,\n} from './ZoomedImageUtils';\nimport { TestIds } from '../constants';\n\nconst CANCEL_ZOOM_TIMEOUT = 1200;\nlet tick: boolean = false,\n  moveX: number,\n  moveY: number,\n  zoomTimer: ReturnType<typeof setTimeout>;\n\nconst ZoomedImage: React.FC<ZoomedImageProps> = props => {\n  const {\n    width: imageWidth,\n    height: imageHeight,\n    className: skinStyle,\n    magnifyKeyboardOperabilityEnabled,\n    translations,\n    zoomedImageResponsiveOverride,\n  } = props;\n\n  const [isZoomed, setIsZoomed] = React.useState(false);\n  const [positionOnZoomedImage, setPosition] = React.useState({ x: 0, y: 0 });\n  const useRef = React.useRef<HTMLDivElement>(null);\n  const buttonRef = React.useRef<HTMLButtonElement>(null);\n  const [isZoomedByKeyboard, setIsZoomedByKeyboard] = React.useState(false);\n\n  const handleBlur = () => setIsZoomedByKeyboard(false);\n\n  const toggleZoom = (ev: React.MouseEvent) => {\n    const event = ev.nativeEvent;\n\n    if (isZoomed) {\n      setIsZoomed(false);\n    } else if (!isZoomed && event && event.type === 'click') {\n      setIsZoomed(true);\n\n      const { offsetX, offsetY } = getCoordinatesOnTarget(\n        event.clientX,\n        event.clientY,\n      );\n      const { x, y } = getCoordinatesOnFullImage(offsetX, offsetY);\n      setPosition({ x, y });\n    }\n  };\n\n  const waitBeforeZoomOut = (ev: React.MouseEvent) => {\n    zoomTimer = setTimeout(() => toggleZoom(ev), CANCEL_ZOOM_TIMEOUT);\n  };\n\n  const clearZoomTimer = () => {\n    clearTimeout(zoomTimer);\n  };\n\n  const getCoordinatesOnFullImage = (x: number, y: number) => {\n    const CONTAINER_WIDTH = useRef.current!.offsetWidth;\n    const CONTAINER_HEIGHT = useRef.current!.offsetHeight;\n\n    const percentageOffsetX = x / CONTAINER_WIDTH;\n    const percentageOffsetY = y / CONTAINER_HEIGHT;\n\n    return {\n      x: percentageOffsetX * (imageWidth - CONTAINER_WIDTH),\n      y: percentageOffsetY * (imageHeight - CONTAINER_HEIGHT),\n    };\n  };\n\n  const getCoordinatesOnTarget = (clientX: number, clientY: number) => {\n    const measurements = useRef.current!.getBoundingClientRect();\n\n    return {\n      offsetX: clientX - measurements.left,\n      offsetY: clientY - measurements.top,\n    };\n  };\n\n  const requestTick = (ev: React.MouseEvent) => {\n    const event = ev.nativeEvent;\n\n    const { offsetX, offsetY } = getCoordinatesOnTarget(\n      event.clientX,\n      event.clientY,\n    );\n    ({ x: moveX, y: moveY } = getCoordinatesOnFullImage(offsetX, offsetY));\n\n    if (!tick) {\n      requestAnimationFrame(drag);\n    }\n    tick = true;\n  };\n\n  const drag = () => {\n    setPosition({ x: moveX, y: moveY });\n    tick = false;\n  };\n\n  const zoomedInEventsHandlers = {\n    onMouseLeave: waitBeforeZoomOut,\n    onMouseEnter: clearZoomTimer,\n    onMouseMove: requestTick,\n  };\n  let imageInlineStyles = {};\n  if (isZoomed && !isZoomedByKeyboard) {\n    imageInlineStyles = {\n      transform: `translate(-${positionOnZoomedImage.x}px, -${positionOnZoomedImage.y}px)`,\n      transitionTimingFunction: 'ease-out',\n      transitionDuration: '0.2s',\n      willChange: 'transform',\n    };\n  } else if (isZoomedByKeyboard && !isZoomed) {\n    imageInlineStyles = {\n      transform: `translate(${positionOnZoomedImage.x}px, ${positionOnZoomedImage.y}px)`,\n      transition: 'transform 0.3s ease',\n      willChange: 'transform',\n    };\n  }\n\n  const handlers = isZoomed\n    ? { onClick: toggleZoom, ...zoomedInEventsHandlers }\n    : { onClick: toggleZoom };\n\n  const zoomedOverrides =\n    isZoomed || isZoomedByKeyboard\n      ? {\n          targetWidth: props.width,\n          targetHeight: props.height,\n          skipMeasure: true,\n          zoomedImageResponsiveOverride,\n        }\n      : {\n          skipMeasure: false,\n        };\n\n  return (\n    <div\n      {...handlers}\n      className={classNames(\n        styles.container,\n        `${isZoomed ? styles.zoomOut : styles.zoomIn}`,\n      )}\n      ref={useRef}\n      onKeyDown={event =>\n        handleKeyDown(event, isZoomedByKeyboard, setPosition, useRef, {\n          width: imageWidth,\n          height: imageHeight,\n        })\n      }\n      onBlur={handleBlur}\n      tabIndex={0}\n    >\n      <Image\n        {...props}\n        className={skinStyle}\n        imageStyles={imageInlineStyles}\n        {...zoomedOverrides}\n      />\n      {magnifyKeyboardOperabilityEnabled && (\n        <button\n          className={styles.zoomButton}\n          data-testid={TestIds.zoomButton}\n          aria-label={translations?.zoomInButtonAriaLabel}\n          aria-pressed={isZoomedByKeyboard}\n          onClick={() =>\n            toggleKeyboardZoom(\n              isZoomedByKeyboard,\n              setIsZoomedByKeyboard,\n              setPosition,\n            )\n          }\n          onKeyDown={event =>\n            handleButtonKeyDown(\n              // @ts-expect-error\n              event,\n              () =>\n                toggleKeyboardZoom(\n                  isZoomedByKeyboard,\n                  setIsZoomedByKeyboard,\n                  setPosition,\n                ),\n              () => setIsZoomedByKeyboard(false),\n            )\n          }\n          ref={buttonRef}\n        >\n          {isZoomedByKeyboard ? <ZoomOut /> : <ZoomIn />}\n        </button>\n      )}\n    </div>\n  );\n};\n\nexport default ZoomedImage;\n","// extracted by mini-css-extract-plugin\nexport default {\"expandButton\":\"OJQ_3L\"};","import * as React from 'react';\nimport classNames from 'clsx';\nimport {\n  formatClassNames,\n  getDataAttributes,\n  isEmptyObject,\n} from '@wix/editor-elements-common-utils';\nimport { useAnalyticsReportClicks } from '@wix/editor-elements-common-utils/hooks';\nimport { WPhotoWrapper } from '../../WPhotoWrapper';\nimport Link from '../../../../Link/viewer/Link';\nimport semanticClassNames from '../../../WPhoto.semanticClassNames';\nimport type { BaseWPhotoSkinProps } from '../../../WPhoto.types';\nimport { selectProperComponent, getPropsForLink } from '../../../utils';\nimport styles from './styles/BasicWPhotoSkin.scss';\nimport { TestIds } from '../../../constants';\n\nconst BasicWPhotoSkin: React.FC<BaseWPhotoSkinProps> = props => {\n  const {\n    skinsStyle,\n    id,\n    className,\n    customClassNames = [],\n    link,\n    imageProps,\n    title,\n    onClick: originalOnClick,\n    hasPlatformClickHandler = false,\n    onClickBehavior,\n    onDblClick,\n    onMouseEnter,\n    onMouseLeave,\n    reportBiOnClick,\n    filterEffectSvgString,\n    filterEffectSvgUrl,\n    magnifyKeyboardOperabilityEnabled,\n    popupA11yExperimentEnabled,\n    translations,\n    shouldHideTooltip,\n  } = props;\n\n  const ImageComp = selectProperComponent(onClickBehavior);\n\n  const isPopUp = onClickBehavior === 'zoomMode';\n\n  let imageLink;\n  if (isPopUp) {\n    imageLink = link;\n  }\n\n  const hasLink = !isEmptyObject(link);\n  const withOnClickHandler = hasLink || hasPlatformClickHandler || isPopUp;\n\n  const handleClick = useAnalyticsReportClicks({\n    onClick: originalOnClick,\n    reportBiOnClick,\n  });\n\n  let onClickHandler;\n  if (withOnClickHandler || Boolean(originalOnClick)) {\n    onClickHandler = handleClick;\n  }\n\n  const shouldShowPopupButton = isPopUp && popupA11yExperimentEnabled;\n\n  const linkProps = getPropsForLink({\n    onClickBehavior,\n    className: skinsStyle.link,\n    link,\n  });\n\n  return (\n    <WPhotoWrapper\n      id={id}\n      {...getDataAttributes(props)}\n      className={classNames(\n        skinsStyle.root,\n        className,\n        formatClassNames(semanticClassNames.root, ...customClassNames),\n      )}\n      title={title}\n      onClick={onClickHandler}\n      onDblClick={onDblClick}\n      onMouseEnter={onMouseEnter}\n      onMouseLeave={onMouseLeave}\n      withOnClickHandler={withOnClickHandler}\n      filterEffectSvgString={filterEffectSvgString}\n      filterEffectSvgUrl={filterEffectSvgUrl}\n      shouldHideTooltip={shouldHideTooltip}\n    >\n      <Link {...linkProps}>\n        <ImageComp\n          id={`img_${id}`}\n          {...imageProps}\n          className={skinsStyle.image}\n          magnifyKeyboardOperabilityEnabled={magnifyKeyboardOperabilityEnabled}\n          translations={translations}\n          link={imageLink}\n        />\n      </Link>\n      {shouldShowPopupButton && (\n        <button\n          data-testid={TestIds.expandButton}\n          onClick={onClickHandler}\n          className={styles.expandButton}\n          aria-haspopup=\"dialog\"\n          aria-label={translations?.expandAriaLabel}\n          aria-describedby={imageProps.alt ? imageProps.containerId : undefined}\n        >\n          <svg\n            width=\"24px\"\n            height=\"24px\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n          >\n            <path\n              fill-rule=\"evenodd\"\n              clip-rule=\"evenodd\"\n              d=\"M12 4V5H5.5C5.224 5 5 5.225 5 5.5V18.5C5 18.775 5.224 19 5.5 19H18.5C18.776 19 19 18.775 19 18.5V12H20V18.5C20 19.327 19.327 20 18.5 20H5.5C4.673 20 4 19.327 4 18.5V5.5C4 4.673 4.673 4 5.5 4H12ZM20 4V9H19V5.707L12.71 11.997L12.003 11.29L18.293 5H15V4H20Z\"\n            />\n          </svg>\n        </button>\n      )}\n    </WPhotoWrapper>\n  );\n};\n\nexport default BasicWPhotoSkin;\n","import ZoomedImage from '../viewer/ZoomedImage';\nimport Image from '../../Image/viewer/Image';\nimport type { IWPhotoProps } from '../WPhoto.types';\n\nexport const selectProperComponent: (selectedMode: string) => React.FC<any> = (\n  selectedMode: string,\n) => (selectedMode === 'zoomAndPanMode' ? ZoomedImage : Image);\n\nexport const getPropsForLink = ({\n  onClickBehavior,\n  className,\n  link,\n}: {\n  onClickBehavior: string;\n  className: string;\n  link?: IWPhotoProps['link'];\n}) => {\n  const isPopUp = onClickBehavior === 'zoomMode';\n  const isMagnification = onClickBehavior === 'zoomAndPanMode';\n  const basicLinkProps = { className };\n\n  return isPopUp || isMagnification\n    ? basicLinkProps\n    : { ...link, ...basicLinkProps };\n};\n","import { useCallback } from 'react';\nexport const useAnalyticsReportClicks = ({ reportBiOnClick, onClick: propsOnClick, }) => {\n    return useCallback(event => {\n        reportBiOnClick?.(event);\n        propsOnClick?.(event);\n    }, [reportBiOnClick, propsOnClick]);\n};\n//# sourceMappingURL=hooks.js.map","'use-client';\nimport * as React from 'react';\nimport WPhoto from '../../WPhotoBase';\nimport type { SkinWPhotoProps } from '../SkinWPhoto';\nimport type { BaseWPhotoSkinProps } from '../../../WPhoto.types';\nimport skinsStyles from './styles/CirclePhoto.scss';\nimport BasicWPhotoSkin from './BasicWPhotoSkin';\n\nconst CirclePhotoSkin: React.FC<\n  Omit<BaseWPhotoSkinProps, 'skinsStyle'>\n> = props => <BasicWPhotoSkin {...props} skinsStyle={skinsStyles} />;\n\nconst CirclePhoto: React.FC<SkinWPhotoProps> = props => (\n  <WPhoto {...props} skin={CirclePhotoSkin} />\n);\n\nexport default CirclePhoto;\n","import { isExperimentOpen } from '@wix/editor-elements-common-utils';\nexport const withCompInfo = () => (depsArray, resolver, enhancers = []) => {\n    const deps = depsArray.reduce((acc, key) => ({ ...acc, [key]: true }), {});\n    return {\n        deps,\n        resolver: enhancers.length\n            ? (rawCompInfo, carmiData) => {\n                const enhancedCompInfo = enhancers.reduce((compInfo, enhancer) => enhancer(compInfo), rawCompInfo);\n                return resolver(enhancedCompInfo, carmiData);\n            }\n            : resolver,\n    };\n};\nexport const isStylableComponent = (styleProperties) => {\n    // in Editor || in TB\n    return Boolean(styleProperties['$st-css'] || styleProperties['st-css']);\n};\nexport const createUDPUiTypeMapper = (stylableSkinName, udpSkinName) => withCompInfo()(['styleProperties', 'experiments'], ({ styleProperties, experiments }) => {\n    const BUILDER_SPEC = 'specs.thunderbolt.renderPlatformBuilderComponent';\n    const isBuilderEnv = isExperimentOpen(experiments, BUILDER_SPEC);\n    if (!isStylableComponent(styleProperties) || isBuilderEnv) {\n        return udpSkinName;\n    }\n    return stylableSkinName;\n});\nexport const withUiTypeCompInfo = withCompInfo;\nexport const withStateRefs = () => (depsArray, resolver) => {\n    const refApiKey = 'refApi';\n    const deps = [...depsArray, refApiKey];\n    const withCompInfoFunc = withCompInfo();\n    return withCompInfoFunc(deps, resolver);\n};\nconst getStateRefGetters = (stateRefsKeys, refApi) => {\n    const stateRefsGetters = Object.values(refApi).reduce((acc, featureDomain) => ({\n        ...acc,\n        ...featureDomain,\n    }), {});\n    return stateRefsKeys.reduce((acc, key) => {\n        if (!stateRefsGetters[key]) {\n            return acc;\n        }\n        return {\n            ...acc,\n            [key]: stateRefsGetters[key](),\n        };\n    }, {});\n};\nexport const withStateRefsValues = (stateRefsKeys) => {\n    return withCompInfo()(['refApi'], ({ refApi }) => {\n        return getStateRefGetters(stateRefsKeys, refApi);\n    });\n};\nexport function createComponentMapperModel(mapper) {\n    return mapper;\n}\nconst isCSSVariable = (str) => str.startsWith('--');\nconst camelCaseToDashCase = (str) => str.replace(/([A-Z])/g, val => `-${val.toLowerCase()}`);\nconst patchControllerUtils = (controllerUtils) => {\n    /**\n     * From this: { marginTop: 10 }\n     * to this { margin-top: 10 }\n     */\n    const patchedUpdateStyles = (reactStyles) => {\n        const styles = Object.entries(reactStyles).reduce((acc, [key, value]) => ({\n            ...acc,\n            [isCSSVariable(key) ? key : camelCaseToDashCase(key)]: value === undefined ? null : value,\n        }), {});\n        controllerUtils.updateStyles(styles);\n    };\n    return {\n        ...controllerUtils,\n        updateStyles: patchedUpdateStyles,\n    };\n};\nexport const withCompController = (componentPropsCreator) => {\n    return {\n        useComponentProps: (mapperProps, stateValues, controllerUtils) => {\n            const patchedUtils = patchControllerUtils(controllerUtils);\n            return componentPropsCreator({\n                mapperProps,\n                stateValues,\n                controllerUtils: patchedUtils,\n            });\n        },\n    };\n};\n//# sourceMappingURL=createComponentMapper.js.map","import { AnalyticsPromoteEndpoint, AnalyticsPromoteSrc, ElementsClick, } from './consts';\nexport const checkLightboxLink = (link) => 'linkPopupId' in link;\nexport const checkIsTopBottomLink = (link) => 'anchorDataId' in link &&\n    (link.anchorDataId === 'SCROLL_TO_TOP' ||\n        link.anchorDataId === 'SCROLL_TO_BOTTOM');\nexport const extractPageLinkId = (link, metadata) => {\n    if (checkLightboxLink(link)) {\n        return link.linkPopupId;\n    }\n    else {\n        const { pagesMap, mainPageId } = metadata || {};\n        if (!pagesMap) {\n            return undefined;\n        }\n        const pageUrl = new URL(link.href ?? '');\n        let value = Object.values(pagesMap).find(({ pageUriSEO }) => {\n            return pageUriSEO ? pageUrl.pathname?.includes(pageUriSEO) : false;\n        });\n        // empty page in pathname - find main page entry\n        if (!value) {\n            value = mainPageId ? pagesMap[mainPageId] : undefined;\n        }\n        return value?.pageId;\n    }\n};\nexport const extractAnalyticsClicksActionName = (link) => {\n    if (link === undefined) {\n        return undefined;\n    }\n    return link === null ? 'None' : link.type;\n};\nexport const createAnalyticsClicksCommonParams = () => ({\n    bl: navigator.language,\n    url: window.location.href,\n});\nexport const createAnalyticsClicksDetails = (link, metadata) => {\n    if (!link?.type) {\n        return undefined;\n    }\n    const { type } = link;\n    switch (type) {\n        case 'AnchorLink':\n            return !checkIsTopBottomLink(link)\n                ? { id: link.anchorDataId }\n                : undefined;\n        case 'DocumentLink':\n            return { id: link.docInfo?.docId };\n        case 'PageLink':\n            return {\n                id: extractPageLinkId(link, metadata),\n                isLightbox: checkLightboxLink(link),\n            };\n        default:\n            return undefined;\n    }\n};\nexport const createAnalyticsClicksValue = (link, metadata) => {\n    if (!link?.type) {\n        return undefined;\n    }\n    const { type } = link;\n    switch (type) {\n        case 'AnchorLink':\n            return link.anchorDataId;\n        case 'DocumentLink':\n            return link.docInfo?.name;\n        case 'PageLink':\n            const id = extractPageLinkId(link, metadata);\n            return id && metadata?.pagesMap?.[id]?.title;\n        default:\n            return link.href;\n    }\n};\nexport const tryReportAnalyticsClicksBi = (reportBi, params, context) => {\n    const { link, value, details, actionName, elementType, trackClicksAnalytics, pagesMetadata: paramsPagesMetadata, ...restParams } = params;\n    if (!trackClicksAnalytics || typeof reportBi !== 'function') {\n        return;\n    }\n    const pagesMetadata = paramsPagesMetadata && {\n        ...paramsPagesMetadata,\n        pagesMap: window.viewerModel?.siteFeaturesConfigs?.router?.pagesMap,\n    };\n    const linkDetails = createAnalyticsClicksDetails(link, pagesMetadata);\n    const biParamsDetails = details || linkDetails\n        ? JSON.stringify({ ...linkDetails, ...details })\n        : undefined;\n    const biParams = {\n        ...restParams,\n        ...createAnalyticsClicksCommonParams(),\n        details: biParamsDetails,\n        elementType: elementType ?? 'Unknown',\n        actionName: actionName ?? extractAnalyticsClicksActionName(link),\n        value: value ?? createAnalyticsClicksValue(link, pagesMetadata),\n    };\n    void reportBi({ src: AnalyticsPromoteSrc, evid: ElementsClick, ...biParams }, { endpoint: AnalyticsPromoteEndpoint, ...context });\n};\n//# sourceMappingURL=utils.js.map","export const AnalyticsPromoteSrc = 76;\nexport const AnalyticsPromoteEndpoint = 'pa';\nexport const ElementsClick = 1113;\nexport const AnalyticsClicksCollapsibleTextExpandActionName = 'Expand';\n//# sourceMappingURL=consts.js.map","export var AnalyticsClicksGroups;\n(function (AnalyticsClicksGroups) {\n    AnalyticsClicksGroups[\"Text\"] = \"Text\";\n    AnalyticsClicksGroups[\"Menu\"] = \"Menu\";\n    AnalyticsClicksGroups[\"Image\"] = \"Image\";\n    AnalyticsClicksGroups[\"Input\"] = \"Input\";\n    AnalyticsClicksGroups[\"Login\"] = \"Login\";\n    AnalyticsClicksGroups[\"Button\"] = \"Button\";\n    AnalyticsClicksGroups[\"Social\"] = \"Social\";\n    AnalyticsClicksGroups[\"Gallery\"] = \"Gallery\";\n    AnalyticsClicksGroups[\"Community\"] = \"Community\";\n    AnalyticsClicksGroups[\"Decorative\"] = \"Decorative\";\n    AnalyticsClicksGroups[\"MenuAndSearch\"] = \"MenuAndSearch\";\n    AnalyticsClicksGroups[\"MenuAndAnchor\"] = \"MenuAndAnchor\";\n})(AnalyticsClicksGroups || (AnalyticsClicksGroups = {}));\n//# sourceMappingURL=types.js.map","export const isExperimentOpen = (experiments, experimentName) => experiments[experimentName] === true ||\n    experiments[experimentName] === 'true' ||\n    experiments[experimentName] === 'new';\n//# sourceMappingURL=experiments.js.map","import { withCompController } from '@wix/editor-elements-integrations';\nimport {\n  AnalyticsClicksGroups,\n  tryReportAnalyticsClicksBi,\n  isExperimentOpen,\n} from '@wix/editor-elements-common-utils';\nimport type {\n  IWPhotoProps,\n  IWPhotoControllerProps,\n  IWPhotoStateValues,\n  IWPhotoMapperProps,\n} from '../WPhoto.types';\n\nexport default withCompController<\n  IWPhotoMapperProps,\n  IWPhotoControllerProps,\n  IWPhotoProps,\n  IWPhotoStateValues\n>(({ controllerUtils, mapperProps, stateValues }) => {\n  const { reportBi } = stateValues;\n  const {\n    compId,\n    language,\n    mainPageId,\n    fullNameCompType,\n    trackClicksAnalytics,\n    ...restMapperProps\n  } = mapperProps;\n\n  const reportBiOnClick: IWPhotoControllerProps['reportBiOnClick'] = () => {\n    const { link, title, uri } = restMapperProps;\n\n    tryReportAnalyticsClicksBi(reportBi, {\n      link,\n      language,\n      trackClicksAnalytics,\n      details: { uri },\n      element_id: compId,\n      elementTitle: title,\n      elementType: fullNameCompType,\n      pagesMetadata: { mainPageId },\n      elementGroup: AnalyticsClicksGroups.Image,\n    });\n  };\n\n  const magnifyKeyboardOperabilityEnabled = isExperimentOpen(\n    stateValues.experiments,\n    'specs.thunderbolt.magnifyKeyboardOperability',\n  );\n\n  const shouldHideTooltip = isExperimentOpen(\n    stateValues.experiments,\n    'specs.thunderbolt.hideWPhotoTooltip',\n  );\n\n  return {\n    ...restMapperProps,\n    reportBiOnClick,\n    onSizeChange: (width, height) => {\n      controllerUtils.updateProps({ width, height });\n    },\n    magnifyKeyboardOperabilityEnabled,\n    shouldHideTooltip,\n  };\n});\n","import WPhoto_CirclePhotoComponent from '@wix/thunderbolt-elements/src/components/WPhoto/viewer/skinComps/BasicWPhoto/CirclePhoto.skin';\nimport WPhoto_CirclePhotoController from '@wix/thunderbolt-elements/src/components/WPhoto/viewer/WPhoto.controller';\n\n\nconst WPhoto_CirclePhoto = {\n  component: WPhoto_CirclePhotoComponent,\n  controller: WPhoto_CirclePhotoController\n};\n\n\nexport const components = {\n  ['WPhoto_CirclePhoto']: WPhoto_CirclePhoto\n};\n\n"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE_Xdf___","_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","__esModule","apply","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","d","a","definition","key","o","defineProperty","enumerable","get","obj","prop","prototype","Symbol","toStringTag","value","COMP_ID_PLACEHOLDER_REGEX","RegExp","replaceCompIdPlaceholder","str","compId","replace","TestIds","props","skin","WPhotoClass","id","uri","alt","name","width","height","displayMode","focalPoint","filterEffectSvgUrl","originalFilterEffectSvgUrl","quality","crop","onSizeChange","onLoad","getPlaceholder","containerWidth","containerHeight","isInFirstFold","hasAnimation","responsiveImageProps","zoomedImageResponsiveOverride","encoding","imageProps","containerId","url","test","event","naturalWidth","naturalHeight","target","React","f","Array","isArray","getDataAttributes","entries","reduce","acc","val","includes","CSS_PREFIX","formatClassNames","semanticClassName","customClassNames","result","push","forEach","className","join","WPhotoWrapper","children","title","onClick","onDblClick","withOnClickHandler","onMouseEnter","onMouseLeave","filterEffectSvgString","shouldHideTooltip","withOnClickHandlerClass","styles","inlineStyle","style","filterEffectSvg","dangerouslySetInnerHTML","__html","classNames","onDoubleClick","activateByKey","keyCode","preventDefault","stopPropagation","currentTarget","click","activateBySpaceButton","activateByEnterButton","activateBySpaceOrEnterButton","Link","ref","href","role","rel","linkPopupId","anchorDataId","anchorCompId","tabIndex","dataTestId","onFocus","onFocusCapture","onBlurCapture","ariaLive","ariaDisabled","ariaLabel","ariaLabelledBy","ariaPressed","ariaExpended","ariaDescribedBy","ariaHasPopup","ariaCurrent","dataPreview","dataPart","getDefaultActivateByKey","onKeyDown","API_VERSION","MAX_DEVICE_PIXEL_RATIO","DSKTP_MAX_BG_SITE_LEGACY_WIDTH","DSKTP_MAX_BG_SITE_LEGACY_HEIGHT","MOBILE_MAX_BG_SITE_LEGACY_WIDTH","MOBILE_MAX_BG_SITE_LEGACY_HEIGHT","fittingTypes","SCALE_TO_FILL","SCALE_TO_FIT","STRETCH","ORIGINAL_SIZE","TILE","TILE_HORIZONTAL","TILE_VERTICAL","FIT_AND_TILE","LEGACY_STRIP_TILE","LEGACY_STRIP_TILE_HORIZONTAL","LEGACY_STRIP_TILE_VERTICAL","LEGACY_STRIP_SCALE_TO_FILL","LEGACY_STRIP_SCALE_TO_FIT","LEGACY_STRIP_FIT_AND_TILE","LEGACY_STRIP_ORIGINAL_SIZE","LEGACY_ORIGINAL_SIZE","LEGACY_FIT_WIDTH","LEGACY_FIT_HEIGHT","LEGACY_FULL","LEGACY_BG_FIT_AND_TILE","LEGACY_BG_FIT_AND_TILE_HORIZONTAL","LEGACY_BG_FIT_AND_TILE_VERTICAL","LEGACY_BG_NORMAL","transformTypes","FIT","FILL","FILL_FOCAL","CROP","LEGACY_CROP","LEGACY_FILL","alignTypes","CENTER","TOP","TOP_LEFT","TOP_RIGHT","BOTTOM","BOTTOM_LEFT","BOTTOM_RIGHT","LEFT","RIGHT","ALIGN_TYPE_TO_FOCAL_POINT","x","y","alignTypesMap","center","top","top_left","top_right","bottom","bottom_left","bottom_right","left","right","htmlTag","BG","IMG","SVG","upscaleMethods","AUTO","CLASSIC","SUPER","upscaleMethodsValues","classic","super","defaultUSM","radius","amount","threshold","emptyData","css","img","container","attr","transformed","SAFE_TRANSFORMED_AREA","MAX_TRANSFORMED_IMAGE_WIDTH","SUPER_UPSCALE_MODELS","imageScaleDefaults","HIGH","size","maxUpscale","MEDIUM","LOW","TINY","imageQuality","imageFilters","CONTRAST","BRIGHTNESS","SATURATION","HUE","BLUR","fileType","JPG","JPEG","JPE","PNG","WEBP","WIX_ICO_MP","WIX_MP","GIF","AVIF","UNRECOGNIZED","encodingTypes","PAVIF","template","strings","keys","values","dict","i","Number","isInteger","last","array","SUPPORTED_IMAGE_EXTENSIONS","JPG_EXTENSIONS","isValidRequest","fittingType","src","trim","toLowerCase","isImageTransformApplicable","allowAnimatedTransform","isWEBP","isAVIF","canTransformIfAnimatedImage","getFileExtension","isImageTypeSupported","isGIF","isTransformableGIF","isPNG","ILLEGAL_CHARS","map","encodeURIComponent","URL_SAFE_ILLEGAL_CHARS","ILLEGAL_CHARS_REPLACEMENT","getFileType","isJPG","exec","getScaleFactor","sWidth","sHeight","dWidth","dHeight","transformType","scaleFactor","Math","max","getFillScaleFactor","min","getFitScaleFactor","getTransformData","dpr","upscaleMethod","dimensionScaleFactor","sqrt","getSafeTransformData","tWidth","tHeight","optimizedScaleFactor","upscaleMethodValue","forceUSM","imageKey","getImageQualityKey","getAutoScaleData","getSuperScaleData","getClassicScaleData","getOptimizedScaleData","cssUpscaleNeeded","getOptimizedTransformData","getAlignedRect","sRect","dRect","sFP","alignment","fp","getFocalPoint","getFocalPointFrom9GridAlignment","getAlignment","isNaN","roundToFixed","imageWidth","imageHeight","precision","truncatePrecision","pow","toFixed","getUpscaleString","options","toUpperCase","imageIsAnimated","isAvifWebpFormat","globalFeaturesSupportObj","isMobile","getFeature","feature","populateGlobalFeatureSupport","window","navigator","isSmallScreen","matchMedia","matches","isMobileAgent","userAgent","getCSS","transformsObj","attributes","backgroundSize","backgroundRepeat","backgroundPosition","alignTypeToPositionStr","aligmentDefaults","position","alignType","parts","objectFit","objectPosition","verticalMiddle","round","horizontalMiddle","alignTypeToPosition","getSvgAttr","sourceWidth","sourceHeight","imageScale","preserveAspectRatio","transform","getDimension","middle","viewBox","setTransformParts","rect","getOverlappingRect","isCropped","getCropPart","getFitPart","transformedData","devicePixelRatio","focalPointX","focalPointY","upscale","getFillPart","clonedTarget","getStretchPart","getLegacyCropPart","getLegacyFitPart","getLegacyFillPart","setTransformOptions","isQualitySupported","transformData","defaultQuality","getQuality","progressive","getProgressive","watermark","getWatermark","autoEncode","unsharpMask","usm","isUSMValid","transformPart","isUSMNeeded","getUnsharpMask","filters","filterOptions","isValidImageFilter","getFilters","filterValue","minValue","maxValue","getTransform","_isSEOBot","isSEOBot","fileName","fileExtensionRegexp","illegalCharsRegex","concat","extension","match","trimmed","getFileName","pixelAspectRatio","getDevicePixelRatio","fileExtension","preferredExtension","canTransformImage","isAnimated","getTarget","targetObj","_isMobile","maxBGSiteLegacyWidth","maxBGSiteLegacyHeight","fitTemplate","fillTemplate","fillFocalTemplate","cropTemplate","legacyCropTemplate","legacyFillTemplate","upscaleTemplate","qualityTemplate","qualityAutoTemplate","unSharpMaskTemplate","nonProgressiveTemplate","watermarkTemplate","filterTemplatesMap","autoEncodeTemplate","AVIFEncodeTemplate","pAVIFEncodeTemplate","animatedTransformTemplate","getURI","transformObj","transformTarget","transformsObjStrArr","legacyFillStr","fitStr","fillStr","fillFocalStr","transformsStr","filterName","getImageURI","ALIGN_TYPE_TO_POSITION","POSITION_TO_ALIGN_TYPE","align","TILE_FITTING_TYPES","NON_SCALING_FITTING_TYPES","getIsFakeTile","targetWidth","targetHeight","validateTargetDimensions","_width","heightRatio","getCSSOverrides","returnValue","alignTypeFromFocalPoint","convertFocalPointToAlignType","convertFillFocalToPosition","sW","sH","tW","tH","fpX","fpY","fillScaleFactor","imgScaledW","imgScaledH","floor","PLACEHOLDER_IMG_CSS_OVERRIDES","shouldLoadHQImage","IS_IN_PLACEHOLDER_FLOW","useSrcset","newTarget","isFakeTile","scaledDimensions","isScalable","isTile","_height","isHighQuality","getScaleFactorByWidth","getScaledDimensions","blur","getBlurValue","convertedFittingType","getConvertedFitting","overrideCSS","data","srcset","getSrcset","attributesGetter","getAttributes","wixStaticWithMedia","STATIC_MEDIA_URL","fetchLQIP","placeholder","SCHEME_RE","Image","bgEffectName","imageStyles","targetScale","onError","shouldUseLQIP","placeholderTransition","socialAttrs","skipMeasure","isFluidLayout","imageRef","hasSsrSrc","hasBlurTransition","ssrImageData","current","isLQIP","imageInfo","JSON","stringify","lqipTransition","imageData","ssrResult","placeholderStyle","imgElement","currentSrc","complete","maxWidth","class","srcSet","s","fetchpriority","loading","suppressHydrationWarning","_path","_path2","_path3","_responsiveImageProps","_responsiveImageProps2","effectiveWidth","effectiveHeight","fallbackSrc","sources","responsiveImgCssNoHeightAndWidth","responsiveImagesStyle","_zoomedImageResponsiv","sizes","_ref","sourceSrcset","media","imgStyle","PixelPerfectImage","fill","xmlns","fillRule","clipRule","toggleKeyboardZoom","isZoomedByKeyboard","setIsZoomedByKeyboard","setPosition","moveX","moveY","zoomTimer","tick","skinStyle","magnifyKeyboardOperabilityEnabled","translations","isZoomed","setIsZoomed","positionOnZoomedImage","useRef","buttonRef","toggleZoom","ev","nativeEvent","type","offsetX","offsetY","getCoordinatesOnTarget","clientX","clientY","getCoordinatesOnFullImage","CONTAINER_WIDTH","offsetWidth","CONTAINER_HEIGHT","offsetHeight","measurements","getBoundingClientRect","drag","zoomedInEventsHandlers","setTimeout","clearZoomTimer","clearTimeout","onMouseMove","requestAnimationFrame","imageInlineStyles","transitionTimingFunction","transitionDuration","willChange","transition","handlers","zoomedOverrides","handleKeyDown","containerRef","zoomImageMeasures","scaledWidth","scaledHeight","heightMoveStep","widthMoveStep","prev","action","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","onBlur","handleBlur","zoomInButtonAriaLabel","handleButtonKeyDown","resetZoom","ZoomOut","ZoomIn","skinsStyle","link","originalOnClick","hasPlatformClickHandler","onClickBehavior","reportBiOnClick","popupA11yExperimentEnabled","ImageComp","ZoomedImage","isPopUp","imageLink","constructor","handleClick","propsOnClick","useCallback","useAnalyticsReportClicks","onClickHandler","Boolean","shouldShowPopupButton","linkProps","basicLinkProps","getPropsForLink","semanticClassNames","image","expandAriaLabel","CirclePhotoSkin","BasicWPhotoSkin","skinsStyles","WPhoto","camelCaseToDashCase","checkLightboxLink","extractPageLinkId","metadata","pagesMap","mainPageId","pageUrl","URL","find","pageUriSEO","pathname","pageId","extractAnalyticsClicksActionName","createAnalyticsClicksValue","docInfo","tryReportAnalyticsClicksBi","reportBi","params","context","details","actionName","elementType","trackClicksAnalytics","pagesMetadata","paramsPagesMetadata","restParams","viewerModel","siteFeaturesConfigs","router","linkDetails","checkIsTopBottomLink","docId","isLightbox","createAnalyticsClicksDetails","biParamsDetails","evid","bl","language","location","endpoint","AnalyticsClicksGroups","experiments","experimentName","componentPropsCreator","components","component","WPhoto_CirclePhotoComponent","controller","controllerUtils","mapperProps","stateValues","fullNameCompType","restMapperProps","isExperimentOpen","element_id","elementTitle","elementGroup","updateProps","useComponentProps","patchedUtils","updateStyles","reactStyles","startsWith","patchControllerUtils"],"sourceRoot":""}