a||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","// 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};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\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__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\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};","__webpack_require__.p = \"/\";","import \"./Doors.css\";\n\ninterface DoorsProps {\n image: string;\n alt: string;\n className?: string;\n}\n\nexport function Doors({ image, alt, className }: DoorsProps) {\n return (\n \n
Scaling an image
Cropping with automatic focus(Gravity)
\n * all original image parts are visible but might be stretched or shrunk.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ScaleAction}\n */\nfunction scale(width, height) {\n return new ResizeScaleAction('scale', width, height);\n}\n/**\n * @summary action\n * @description Extracts a region of the given width and height out of the original image.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeCropAction}\n */\nfunction crop(width, height) {\n return new ResizeCropAction('crop', width, height);\n}\n/**\n * @summary action\n * @description\n * Creates an image with the exact given width and height without distorting the image.
\n * This option first scales up or down as much as needed to at least fill both of the given dimensions.
\n * If the requested aspect ratio is different than the original, cropping will occur on the dimension that exceeds the requested size after scaling.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizeFillAction}\n */\nfunction fill(width, height) {\n return new ResizeFillAction('fill', width, height);\n}\n/**\n * @summary action\n * @description\n * Resizes the asset to fill the given width and height while retaining the original aspect ratio.\n *\n * If the proportions of the original asset do not match the given width and height, padding is added to the asset\n * to reach the required size.\n * @memberOf Actions.Resize\n * @param {number|string} width The required width of a transformed asset.\n * @param {number|string} height The required height of a transformed asset.\n * @return {Actions.Resize.ResizePadAction}\n */\nfunction pad(width, height) {\n return new ResizePadAction('pad', width, height);\n}\n\n/**\n * @description Controls the quality of the delivered image or video.\n * @memberOf Actions.Delivery\n * @extends {Actions.Delivery.DeliveryAction}\n * @see Visit {@link Actions.Delivery|Delivery} for an example\n */\nclass DeliveryQualityAction extends DeliveryAction {\n /**\n * @param {Qualifiers.Quality} qualityValue a Quality value\n */\n constructor(qualityValue) {\n super('q', qualityValue.toString(), 'level');\n }\n /**\n * Selet the Chroma sub sampling\n * Learn more: {@link https://cloudinary.com/documentation/image_optimization#toggle_chroma_subsampling|Toggling chroma subsampling}\n * @param {420 | 444 | number} type The chroma sub sampling type\n */\n chromaSubSampling(type) {\n this._actionModel.chromaSubSampling = CHROMA_VALUE_TO_CHROMA_MODEL_ENUM[type];\n const qualityWithSubSampling = new QualifierValue([this._actionModel.level, type]);\n qualityWithSubSampling.setDelimiter(':');\n // We either have chroma or quantization, but not both\n return this.addQualifier(new Qualifier('q', qualityWithSubSampling));\n }\n /**\n * Controls the final quality by setting a maximum quantization percentage\n * @param {number} val\n */\n quantization(val) {\n this._actionModel.quantization = val;\n const qualityWithQuantization = new QualifierValue([this._actionModel.level, `qmax_${val}`]).setDelimiter(':');\n // We either have chroma or quantization, but not both\n return this.addQualifier(new Qualifier('q', qualityWithQuantization));\n }\n static fromJson(actionModel) {\n const { level, chromaSubSampling, quantization } = actionModel;\n const levelType = ACTION_TYPE_TO_QUALITY_MODE_MAP[level] || level;\n const result = new this(levelType);\n if (chromaSubSampling) {\n //Turn strings like 'CHROMA_420' to 420\n const chromaValue = CHROMA_MODEL_ENUM_TO_CHROMA_VALUE[chromaSubSampling.toUpperCase()];\n chromaValue && result.chromaSubSampling(+chromaValue);\n }\n quantization && result.quantization(quantization);\n return result;\n }\n}\n\n/**\n * @description Defines transformations for delivering your assets without changing the visual or audio experience for the end user.\n * @memberOf Actions\n * @namespace Delivery\n * @example\n * See the examples under every method\n */\n/**\n * @summary action\n * @description Defines the format of the delivered asset.\n *\n * Learn more:\n * {@link https://cloudinary.com/documentation/image_transformations#image_format_support|Image formats}\n * {@link https://cloudinary.com/documentation/video_manipulation_and_delivery#transcoding_video_to_other_formats|Video formats}\n *\n * @memberOf Actions.Delivery\n * @param {string} format The file format. For a list of supported format types see {@link Qualifiers.Format| format types} for\n * possible values\n * @return {Actions.Delivery.DeliveryFormat}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {format} from \"@cloudinary/url-gen/actions/delivery\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(\n * format('jpg'),\n * );\n *\n */\nfunction format(format) {\n return new DeliveryFormatAction('f', format);\n}\n/**\n * @summary action\n * @description Controls the quality of the delivered image or video.\n *\n * Learn more: {@link https://cloudinary.com/documentation/image_optimization#how_to_optimize_image_quality|Image quality}\n * {@link https://cloudinary.com/documentation/video_optimization#how_to_optimize_video_quality|Video quality}\n * @memberOf Actions.Delivery\n * @param {QualityTypes | string | number | Qualifiers.Quality} qualityType For a list of supported quality types see\n * {@link Qualifiers.Quality| quality types} for\n * possible values.\n * @return {Actions.Delivery.DeliveryQualityAction}\n * @example\n * import {Cloudinary} from \"@cloudinary/url-gen\";\n * import {quality} from \"@cloudinary/url-gen/actions/delivery\";\n * import {quality} from \"@cloudinary/url-gen/qualifiers/quantity\";\n *\n * const yourCldInstance = new Cloudinary({cloud:{cloudName:'demo'}});\n * const image = yourCldInstance.image('woman');\n * image.delivery(\n * quality('auto'),\n * );\n */\nfunction quality(qualityType) {\n return new DeliveryQualityAction(qualityType);\n}\n\n/**\n * @summary qualifier\n * @memberOf Qualifiers.Compass\n * @description North east corner (top right).\n * @return {Qualifiers.Compass.CompassQualifier} Compass\n */\nfunction northEast() {\n return new CompassQualifier('north_east');\n}\n\n/**\r\n * Predefined accessibility transformations\r\n * @const {Object} Cloudinary.ACCESSIBILITY_MODES\r\n */\r\nvar ACCESSIBILITY_MODES = {\r\n 'darkmode': colorize(70).color('black'),\r\n 'brightmode': colorize(40).color('white'),\r\n 'monochrome': grayscale(),\r\n 'colorblind': assistColorBlind()\r\n};\r\n/**\r\n * Predefined vectorize placeholder transformation\r\n */\r\nvar VECTORIZE = new Transformation()\r\n .effect(vectorize())\r\n .delivery(quality('auto'))\r\n .delivery(format(svg()));\r\n/**\r\n * Predefined pixelate placeholder transformation\r\n */\r\nvar PIXELATE = new Transformation()\r\n .effect(pixelate())\r\n .delivery(quality('auto'))\r\n .delivery(format(auto$1()));\r\n/**\r\n * Predefined blur placeholder transformation\r\n */\r\nvar BLUR = new Transformation()\r\n .effect(blur(2000))\r\n .delivery(quality('auto'))\r\n .delivery(format(auto$1()));\r\n/**\r\n * Predefined predominant color placeholder transformation\r\n */\r\nvar PREDOMINANT_COLOR_TRANSFORM = new Transformation()\r\n .resize(pad('iw_div_2').aspectRatio(1).background(Background.auto()))\r\n .resize(crop(1, 1).gravity(compass(northEast())))\r\n .resize(fill().height('ih').width('iw'))\r\n .delivery(quality('auto'))\r\n .delivery(format(auto$1()));\r\n/**\r\n * Predefined placeholder image options\r\n */\r\nvar PLACEHOLDER_IMAGE_OPTIONS = {\r\n 'vectorize': VECTORIZE,\r\n 'pixelate': PIXELATE,\r\n 'blur': BLUR,\r\n 'predominant-color': PREDOMINANT_COLOR_TRANSFORM\r\n};\r\n/**\r\n * transparent gif\r\n */\r\nvar singleTransparentPixel = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\r\n/**\r\n * Convert common video file extensions to mime types\r\n * Most other common video file extensions have an identical mime type so do not need conversion.\r\n */\r\nvar VIDEO_MIME_TYPES = {\r\n 'flv': 'x-flv',\r\n '3gp': '3gpp',\r\n 'mov': 'quicktime',\r\n 'mpg': 'mpeg',\r\n 'avi': 'x-msvideo',\r\n 'wmv': 'x-ms-wmv',\r\n 'ogv': 'ogg',\r\n 'webm': 'webm',\r\n 'mp4': 'mp4',\r\n};\n\nvar ANALYTICS_DELIMITER = '?_a=';\r\nvar HtmlVideoLayer = /** @class */ (function () {\r\n function HtmlVideoLayer(element, userCloudinaryVideo, sources, plugins, videoAttributes, userCloudinaryPoster, videoOptions) {\r\n var _this = this;\r\n this.mimeType = 'video';\r\n this.mimeSubTypes = VIDEO_MIME_TYPES;\r\n this.videoElement = element;\r\n this.originalVideo = userCloudinaryVideo;\r\n this.videoOptions = videoOptions;\r\n this.htmlPluginState = { cleanupCallbacks: [], pluginEventSubscription: [] };\r\n var pluginCloudinaryVideo = cloneDeep(userCloudinaryVideo);\r\n render(element, userCloudinaryVideo, plugins, this.htmlPluginState)\r\n .then(function () {\r\n _this.htmlPluginState.pluginEventSubscription.forEach(function (fn) { fn(); });\r\n _this.setVideoAttributes(videoAttributes, userCloudinaryPoster);\r\n _this.handleSourceToVideo(pluginCloudinaryVideo, sources);\r\n });\r\n }\r\n /**\r\n * Handles user supplied sources or default sources\r\n * @param userCloudinaryVideo {CloudinaryVideo}\r\n * @param sources\r\n */\r\n HtmlVideoLayer.prototype.handleSourceToVideo = function (userCloudinaryVideo, sources) {\r\n var _this = this;\r\n // checks if user supplied sources\r\n if (sources) {\r\n this.generateUserSources(userCloudinaryVideo, sources);\r\n }\r\n else {\r\n var defaultTypes = ['webm', 'mp4', 'ogv'];\r\n defaultTypes.forEach(function (type) {\r\n _this.appendSourceTag(cloneDeep(userCloudinaryVideo), type);\r\n });\r\n }\r\n };\r\n /**\r\n * Generate sources based on user input\r\n * @param userCloudinaryVideo {CloudinaryVideo}\r\n * @param sources\r\n */\r\n HtmlVideoLayer.prototype.generateUserSources = function (userCloudinaryVideo, sources) {\r\n var _this = this;\r\n sources.map(function (_a) {\r\n var type = _a.type, codecs = _a.codecs, transcode = _a.transcode;\r\n return (_this.appendSourceTag(cloneDeep(userCloudinaryVideo)\r\n .transcode(transcode), type, _this.buildMimeType(type, codecs)));\r\n });\r\n };\r\n /**\r\n * Appends source tag to html video element\r\n * @param userCloudinaryVideo {CloudinaryVideo}\r\n * @param type {string}\r\n * @param mimeType {string}\r\n */\r\n HtmlVideoLayer.prototype.appendSourceTag = function (userCloudinaryVideo, type, mimeType) {\r\n var _a;\r\n var source = document.createElement('source');\r\n var shouldUseFetchFormat = (_a = this.videoOptions) === null || _a === void 0 ? void 0 : _a.useFetchFormat;\r\n if (shouldUseFetchFormat) {\r\n userCloudinaryVideo.format(type);\r\n }\r\n var url = userCloudinaryVideo.toURL();\r\n // Split url to get analytics string so that we can insert the file extension (type) before it\r\n // To simplify this we could add a .getPublicId to CloudinaryVideo and do vid.setPublicId(vid.getPublicId+type)\r\n // Another option could be to add a .setExtension, which will allow to do vid.setExtension(type)\r\n var srcParts = url.split(ANALYTICS_DELIMITER);\r\n var analyticsStr = srcParts[1] ? \"\".concat(ANALYTICS_DELIMITER).concat(srcParts[1]) : '';\r\n var ext = shouldUseFetchFormat ? '' : \".\".concat(type);\r\n source.src = \"\".concat(srcParts[0]).concat(ext).concat(analyticsStr);\r\n // Ideally, we want to use the VIDEO_MIME_TYPE to detect the mime of the extension\r\n // For future proofing of simple formats (say .foo and mimetype of video/foo), we also fallback to the actual type\r\n source.type = mimeType ? mimeType : \"video/\".concat(VIDEO_MIME_TYPES[type] || type);\r\n this.videoElement.appendChild(source);\r\n };\r\n /**\r\n * Determines MIME type of given source type and codecs.\r\n * @param type - format of the video\r\n * @param codecs - optional information about codecs of the video\r\n */\r\n HtmlVideoLayer.prototype.buildMimeType = function (type, codecs) {\r\n var mimeType = \"\".concat(this.mimeType, \"/\").concat(this.mimeSubTypes[type] || type);\r\n if (codecs) {\r\n mimeType += \"; codecs=\" + (Array.isArray(codecs) ? codecs.join(', ') : codecs);\r\n }\r\n return mimeType;\r\n };\r\n /**\r\n * Iterates through the video attributes and sets to true if passed in by the user.\r\n * In case of poster, sets the poster.\r\n * @param videoAttributes {object} Supported attributes: controls, loop, muted, poster, preload, autoplay, playsinline\r\n */\r\n HtmlVideoLayer.prototype.setVideoAttributes = function (videoAttributes, userCloudinaryPoster) {\r\n var _a;\r\n if (videoAttributes === void 0) { videoAttributes = {}; }\r\n if (userCloudinaryPoster === 'auto') {\r\n var posterCloudinaryVideo = cloneDeep(this.originalVideo);\r\n videoAttributes['poster'] = posterCloudinaryVideo\r\n .quality('auto')\r\n .format('jpg')\r\n .addTransformation('so_auto')\r\n .toURL();\r\n }\r\n else if (userCloudinaryPoster) {\r\n videoAttributes['poster'] = (_a = userCloudinaryPoster.toURL) === null || _a === void 0 ? void 0 : _a.call(userCloudinaryPoster);\r\n }\r\n for (var _i = 0, _b = Object.entries(videoAttributes); _i < _b.length; _i++) {\r\n var _c = _b[_i], key = _c[0], value = _c[1];\r\n // Boolean attributes are considered to be true if they're present on the element at all.\r\n // You should set value to the empty string (\"\") or the attribute's name.\r\n // See https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute\r\n value && this.videoElement.setAttribute(key, key === 'poster' ? value : '');\r\n }\r\n };\r\n /**\r\n * Called when component is updated. If our video source has changed, a video reload is triggered.\r\n * @param updatedCloudinaryVideo\r\n * @param sources\r\n * @param plugins\r\n * @param videoAttributes\r\n */\r\n HtmlVideoLayer.prototype.update = function (updatedCloudinaryVideo, sources, plugins, videoAttributes, userCloudinaryPoster) {\r\n var _this = this;\r\n if (updatedCloudinaryVideo !== this.originalVideo) {\r\n var sourcesToDelete = this.videoElement.getElementsByTagName(\"SOURCE\");\r\n while (sourcesToDelete[0])\r\n sourcesToDelete[0].parentNode.removeChild(sourcesToDelete[0]);\r\n render(this.videoElement, updatedCloudinaryVideo, plugins, this.htmlPluginState)\r\n .then(function () {\r\n _this.setVideoAttributes(videoAttributes, userCloudinaryPoster);\r\n _this.handleSourceToVideo(updatedCloudinaryVideo, sources);\r\n _this.videoElement.load();\r\n });\r\n }\r\n };\r\n return HtmlVideoLayer;\r\n}());\n\n/**\n * lodash (Custom Build)