@iframe-resizer/core 5.5.9 → 6.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../packages/common/consts.ts","../../packages/common/utils.ts","../../packages/common/deprecate.ts","../../packages/common/format-advise.ts","../../packages/core/values/settings.ts","../../packages/core/console.ts","../../packages/core/values/defaults.ts","../../packages/core/checks/id.ts","../../packages/core/checks/manual-logging.ts","../../packages/common/listeners.ts","../../packages/core/send/trigger.ts","../../packages/core/events/visible.ts","../../packages/core/received/decode.ts","../../packages/core/received/preflight.ts","../../packages/core/checks/origin.ts","../../packages/core/checks/version.ts","../../packages/core/events/wrapper.ts","../../packages/core/events/message.ts","../../packages/core/received/message.ts","../../packages/core/events/mouse.ts","../../packages/core/values/page.ts","../../packages/core/page/position.ts","../../packages/core/events/size.ts","../../packages/core/events/resize.ts","../../packages/core/methods/disconnect.ts","../../packages/core/methods/close.ts","../../packages/core/methods/reset.ts","../../packages/core/monitor/common.ts","../../packages/core/monitor/page-info.ts","../../packages/core/monitor/props.ts","../../packages/core/page/scroll.ts","../../packages/core/page/in-page-link.ts","../../packages/core/page/title.ts","../../packages/common/mode.ts","../../packages/core/checks/mode.ts","../../packages/core/setup/first-run.ts","../../packages/core/router.ts","../../packages/core/send/ready.ts","../../packages/core/listeners.ts","../../packages/core/checks/unique.ts","../../packages/core/methods/attach.ts","../../packages/core/send/outgoing.ts","../../packages/core/setup/body-margin.ts","../../packages/core/send/timeout.ts","../../packages/core/setup/init.ts","../../packages/core/checks/options.ts","../../packages/core/checks/warning-timeout.ts","../../packages/core/send/offset.ts","../../packages/core/setup/direction.ts","../../packages/core/setup/target-origin.ts","../../packages/core/setup/update-option-names.ts","../../packages/core/setup/process-options.ts","../../packages/core/setup/scrolling.ts","../../packages/core/setup/index.ts","../../packages/core/setup/logging.ts","../../packages/core/index.ts"],"sourcesContent":["export const VERSION = '[VI]{version}[/VI]'\nexport const LABEL = 'iframeResizer'\nexport const SEPARATOR = ':'\nexport const CHILD_READY_MESSAGE = '[iFrameResizerChild]Ready'\n\nexport const AUTO_RESIZE = 'autoResize'\nexport const BEFORE_UNLOAD = 'beforeUnload'\nexport const CLOSE = 'close'\nexport const IN_PAGE_LINK = 'inPageLink'\nexport const INIT = 'init'\nexport const INIT_FROM_IFRAME = 'iframeReady'\nexport const LAZY = 'lazy'\nexport const LOAD = 'load'\nexport const MESSAGE = 'message'\nexport const MOUSE_ENTER = 'mouseenter'\nexport const MOUSE_LEAVE = 'mouseleave'\nexport const ONLOAD = 'onload'\nexport const PAGE_HIDE = 'pageHide'\nexport const PAGE_INFO = 'pageInfo'\nexport const PARENT_INFO = 'parentInfo'\nexport const PAGE_INFO_STOP = 'pageInfoStop'\nexport const PARENT_INFO_STOP = 'parentInfoStop'\nexport const RESET = 'reset'\nexport const RESIZE = 'resize'\nexport const SCROLL_BY = 'scrollBy'\nexport const SCROLL_TO = 'scrollTo'\nexport const SCROLL_TO_OFFSET = 'scrollToOffset'\nexport const TITLE = 'title'\n\nexport const BASE = 10\nexport const SINGLE = 1\nexport const MIN_SIZE = 1\n\nexport const SIZE_ATTR = 'data-iframe-size'\nexport const OVERFLOW_ATTR = 'data-iframe-overflowed'\nexport const IGNORE_ATTR = 'data-iframe-ignore'\n\nexport const HEIGHT = 'height'\nexport const WIDTH = 'width'\nexport const OFFSET = 'offset'\nexport const OFFSET_HEIGHT = 'offsetHeight'\nexport const OFFSET_SIZE = 'offsetSize'\nexport const SCROLL = 'scroll'\nexport const NEW_LINE = '\\n'\n\nexport const HIDDEN = 'hidden'\nexport const VISIBLE = 'visible'\n\nexport const CHILD = 'child'\nexport const PARENT = 'parent'\n\nexport const STRING = 'string'\nexport const NUMBER = 'number'\nexport const BOOLEAN = 'boolean'\nexport const OBJECT = 'object'\nexport const FUNCTION = 'function'\nexport const SYMBOL = 'symbol'\nexport const UNDEFINED = 'undefined'\n\nexport const TRUE = 'true'\nexport const FALSE = 'false'\n\nexport const NULL = 'null'\nexport const AUTO = 'auto'\n\nexport const READY_STATE_CHANGE = 'readystatechange'\n\nexport const HEIGHT_EDGE = 'bottom'\nexport const WIDTH_EDGE = 'right'\n\nexport const ENABLE = 'autoResizeEnabled'\nexport const SIZE_CHANGE_DETECTED = Symbol('sizeChanged')\nexport const MANUAL_RESIZE_REQUEST = 'manualResize'\nexport const PARENT_RESIZE_REQUEST = 'parentResize'\nexport const IGNORE_DISABLE_RESIZE = {\n [MANUAL_RESIZE_REQUEST]: 1,\n [PARENT_RESIZE_REQUEST]: 1,\n}\n\nexport const SET_OFFSET_SIZE = 'setOffsetSize'\n\nexport const RESIZE_OBSERVER = 'resizeObserver'\nexport const OVERFLOW_OBSERVER = 'overflowObserver'\nexport const MUTATION_OBSERVER = 'mutationObserver'\nexport const VISIBILITY_OBSERVER = 'visibilityObserver'\n\nexport const BOLD = 'font-weight: bold;'\nexport const NORMAL = 'font-weight: normal;'\nexport const ITALIC = 'font-style: italic;'\nexport const BLUE = 'color: #135CD2;'\nexport const BLUE_LIGHT = 'color: #A9C7FB;'\nexport const BLACK = 'color: black;'\nexport const WHITE = 'color: #E3E3E3;'\n\nexport const NONE = 'none'\nexport const BOTH = 'both'\nexport const VERTICAL = 'vertical'\nexport const HORIZONTAL = 'horizontal'\n\nexport const NO_CHANGE = 'No change in content size detected'\n\nexport const MESSAGE_HEADER_LENGTH = MESSAGE.length\nexport const MESSAGE_ID = '[iFrameSizer]' // Must match iframe msg ID\nexport const MESSAGE_ID_LENGTH = MESSAGE_ID.length\nexport const RESET_REQUIRED_METHODS = Object.freeze({\n max: 1,\n scroll: 1,\n bodyScroll: 1,\n documentElementScroll: 1,\n})\n\nexport const INIT_EVENTS = Object.freeze({\n [ONLOAD]: 1,\n [INIT]: 1,\n [INIT_FROM_IFRAME]: 1,\n})\n\nexport const EXPAND = 'expanded'\nexport const COLLAPSE = 'collapsed'\n\nexport const HEIGHT_CALC_MODE_DEFAULT = AUTO\nexport const WIDTH_CALC_MODE_DEFAULT = SCROLL\n\nexport const EVENT_CANCEL_TIMER = 128\n\nexport const LOG_OPTIONS = Object.freeze({\n [EXPAND]: 1,\n [COLLAPSE]: 1,\n})\n\nexport const IGNORE_TAGS = new Set([\n 'head',\n 'body',\n 'meta',\n 'base',\n 'title',\n 'script',\n 'link',\n 'style',\n 'map',\n 'area',\n 'option',\n 'optgroup',\n 'template',\n 'track',\n 'wbr',\n 'nobr',\n])\n\nexport const REMOVED_NEXT_VERSION =\n 'Use of the old name will be removed in a future version of <i>iframe-resizer</>.'\n","import { OBJECT, STRING } from './consts'\n\nexport const isElement = (node: Node): boolean => node.nodeType === Node.ELEMENT_NODE\nexport const isNumber = (value: unknown): value is number =>\n typeof value === 'number' && !Number.isNaN(value)\nexport const isObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === OBJECT && value !== null\nexport const isString = (value: unknown): value is string => typeof value === STRING\n\nexport const isSafari: boolean = /^((?!chrome|android).)*safari/i.test(\n navigator.userAgent,\n)\n\nexport function isIframe(element: unknown): element is HTMLIFrameElement {\n if (!isObject(element)) return false\n\n try {\n return (element as unknown as HTMLElement).tagName === 'IFRAME' || element instanceof HTMLIFrameElement\n } catch (error) {\n return false\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFunction = (...args: any[]) => any\n\nexport const isolateUserCode = (func: AnyFunction, ...val: unknown[]): ReturnType<typeof setTimeout> =>\n setTimeout(() => func(...val), 0)\n\nexport const once = <T extends AnyFunction>(fn: T): T => {\n let done = false\n\n return function (this: unknown, ...args: unknown[]) {\n return done\n ? undefined\n : ((done = true), fn.apply(this, args))\n } as unknown as T\n}\n\nconst hasOwnFallback = (o: object, k: PropertyKey): boolean =>\n Object.prototype.hasOwnProperty.call(o, k)\n\nexport const hasOwn = (o: object, k: PropertyKey): boolean =>\n Object.hasOwn ? Object.hasOwn(o, k) : hasOwnFallback(o, k)\n\nexport const isDarkModeEnabled = (): boolean =>\n window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n\nexport const id = <T>(x: T): T => x\n\nconst ROUNDING = 1000\n\nexport const round = (value: number): number => Math.round(value * ROUNDING) / ROUNDING\n\nexport const capitalizeFirstLetter = (string: string): string =>\n string.charAt(0).toUpperCase() + string.slice(1)\n\nexport const isDef = (value: unknown): boolean => `${value}` !== '' && value !== undefined\n\nexport const invoke = <T>(fn: () => T): T => fn()\n\nexport const lower = (str: string): string => str.toLowerCase()\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getElementName(el: any): string {\n switch (true) {\n case !isDef(el):\n return ''\n\n case isDef(el.id):\n return `${el.nodeName}#${el.id}`\n\n case isDef(el.name):\n return `${el.nodeName} (${el.name}`\n\n case isDef(el.className):\n return `${el.nodeName}.${el.className}`\n\n default:\n return el.nodeName\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const esModuleInterop = <T = any>(mod: any): T =>\n // eslint-disable-next-line no-underscore-dangle\n mod?.__esModule ? mod.default : mod\n\nexport const typeAssert = (value: unknown, type: string, error: string): void => {\n // eslint-disable-next-line valid-typeof\n if (typeof value !== type) {\n throw new TypeError(`${error} is not a ${capitalizeFirstLetter(type)}`)\n }\n}\n","type AdviseFn = (iframeId: string, message: string) => void\n\nexport default (advise: AdviseFn) =>\n (type: string, change = 'renamed to') =>\n (old: string, replacement: string, info = '', iframeId = ''): void =>\n advise(\n iframeId,\n `<rb>Deprecated ${type}(${old.replace('()', '')})</>\\n\\nThe <b>${old}</> ${type.toLowerCase()} has been ${change} <b>${replacement}</>. ${info}Use of the old ${type.toLowerCase()} will be removed in a future version of <i>iframe-resizer</>.`,\n )\n","/* eslint-disable no-useless-escape */\n/* eslint-disable security/detect-non-literal-regexp */\n\nimport { NEW_LINE } from './consts'\nimport { isString } from './utils'\n\nconst TAGS = {\n br: '\\n',\n rb: '\\u001B[31;1m', // red bold\n bb: '\\u001B[34;1m', // blue bold\n b: '\\u001B[1m', // bold\n i: '\\u001B[3m', // italic\n u: '\\u001B[4m', // underline\n '/': '\\u001B[m', // reset\n}\n\nconst keys = Object.keys(TAGS)\nconst tags = new RegExp(`<(${keys.join('|')})>`, 'gi')\nconst lookup = (_: string, tag: string): string => TAGS[tag as keyof typeof TAGS] ?? ''\nconst encode = (s: string): string => s.replace(tags, lookup)\n\nconst filter = (s: string): string =>\n s.replaceAll('<br>', NEW_LINE).replaceAll(/<\\/?[^>]+>/gi, '')\n\ntype FormatLogMessageFn = (message: unknown) => void\n\nexport default (formatLogMessage: FormatLogMessageFn) => (message: unknown): void =>\n formatLogMessage(\n isString(message)\n ? window.chrome\n ? encode(message)\n : filter(message)\n : message,\n )\n\n/* eslint-enable security/detect-non-literal-regexp */\n/* eslint-enable no-useless-escape */\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst settings: Record<string, any> = {}\n\nexport default settings\n","import acg, { NORMAL } from 'auto-console-group'\n\nimport { BOLD, LABEL, PARENT } from '../common/consts'\nimport deprecate from '../common/deprecate'\nimport createFormatAdvise from '../common/format-advise'\nimport { esModuleInterop, id as identity } from '../common/utils'\nimport settings from './values/settings'\n\n// Deal with UMD not converting default exports to named exports\nconst createConsoleGroup = esModuleInterop(acg)\n\nlet consoleEnabled = true\n\nconst parent = createConsoleGroup({\n expand: false,\n label: PARENT,\n})\n\nconst getMyId = (iframeId: string): string =>\n window.top === window.self\n ? `parent(${iframeId})`\n : `nested parent(${iframeId})`\n\nconst isLogEnabled = (iframeId: string): boolean =>\n settings[iframeId] ? settings[iframeId].log : consoleEnabled\n\nexport function setupConsole({ enabled, expand, iframeId }: { enabled: boolean, expand: boolean, iframeId: string }): void {\n const consoleGroup = createConsoleGroup({\n expand,\n label: getMyId(iframeId),\n })\n\n consoleEnabled = enabled\n\n if (!settings[iframeId])\n settings[iframeId] = {\n console: consoleGroup,\n }\n}\n\nconst output =\n (type: string) =>\n (iframeId: string, ...args: any[]): any =>\n settings[iframeId]\n ? settings[iframeId].console[type](...args)\n : parent[type](...args)\n\nexport const outputSwitched =\n (type: string) =>\n (iframeId: string, ...args: any[]): any =>\n isLogEnabled(iframeId) === true ? output(type)(iframeId, ...args) : null\n\nexport const log = outputSwitched('log')\nexport const info = log // outputSwitched('info')\nexport const debug = outputSwitched('debug')\nexport const assert = output('assert')\nexport const warn = output('warn')\nexport const error = output('error')\nexport const event = output('event')\nexport const purge = output('purge')\nexport const endAutoGroup = output('endAutoGroup')\nexport const errorBoundary = output('errorBoundary')\n\nexport function vInfo(ver: string, mode: number): void {\n queueMicrotask(() =>\n // eslint-disable-next-line no-console\n console.info(\n `%ciframe-resizer ${ver}`,\n consoleEnabled || mode < 1 ? BOLD : NORMAL,\n ),\n )\n}\n\nconst formatLogMsg =\n (iframeId: string) =>\n (...args: any[]): string =>\n [`${LABEL}(${iframeId})`, ...args].join(' ')\n\nconst formatAdvise = createFormatAdvise(identity)\nexport const advise = (iframeId: string, ...args: any[]): void =>\n settings[iframeId]\n ? settings[iframeId].console.warn(...args.map(formatAdvise))\n : queueMicrotask(() => {\n const localFormatAdvise = createFormatAdvise(formatLogMsg(iframeId))\n // eslint-disable-next-line no-console\n console?.warn(...args.map(localFormatAdvise))\n })\n\nconst deprecateAdvise = deprecate(advise)\nexport const deprecateFunction = deprecateAdvise('Function')\nexport const deprecateMethod = deprecateAdvise('Method')\nexport const deprecateOption = deprecateAdvise('Option')\n","import { AUTO, FUNCTION, VERTICAL } from '../../common/consts'\nimport { deprecateOption } from '../console'\nimport settings from './settings'\n\nconst onReadyDeprecated = (messageData: { id: string, iframe: HTMLIFrameElement }): void => {\n if (typeof settings[messageData.id].onInit === FUNCTION) {\n deprecateOption('init()', 'onReady()', '', messageData.id)\n settings[messageData.id].onInit(messageData)\n }\n}\n\nexport default Object.freeze({\n autoResize: true,\n bodyBackground: null,\n bodyMargin: null,\n bodyPadding: null,\n checkOrigin: true,\n direction: VERTICAL,\n firstRun: true,\n inPageLinks: false,\n heightCalculationMethod: AUTO,\n id: 'iFrameResizer', // TODO: v6 change to 'iframeResizer'\n log: false,\n logExpand: false,\n license: undefined,\n mouseEvents: true,\n offsetHeight: null,\n offsetWidth: null,\n postMessageTarget: null,\n sameDomain: false,\n scrolling: false,\n sizeHeight: true,\n // sizeSelector: '',\n sizeWidth: false,\n tolerance: 0,\n waitForLoad: false,\n warningTimeout: 5000,\n widthCalculationMethod: AUTO,\n\n onBeforeClose: () => true,\n onAfterClose() {},\n onInit: false,\n onMessage: null,\n onMouseEnter() {},\n onMouseLeave() {},\n onReady: onReadyDeprecated,\n onResized() {},\n onScroll: () => true,\n})\n","import { isString } from '../../common/utils'\nimport { event as consoleEvent, log } from '../console'\nimport defaults from '../values/defaults'\n\nlet count = 0\n\nfunction newId(options: Record<string, any>): string {\n const id = options?.id || defaults.id + count++\n return document.getElementById(id) === null ? id : `${id}${count++}`\n}\n\nexport default function ensureHasId(iframe: HTMLIFrameElement, options: Record<string, any>): string {\n let { id } = iframe\n\n if (id && !isString(id)) {\n throw new TypeError('Invalid id for iFrame. Expected String')\n }\n\n if (!id || id === '') {\n id = newId(options)\n iframe.id = id\n consoleEvent(id, 'assignId')\n log(id, `Added missing iframe ID: ${id} (${iframe.src})`)\n }\n\n return id\n}\n","import { COLLAPSE } from '../../common/consts'\n\nexport default function (options: Record<string, any>): void {\n const { search } = window.location\n\n if (search.includes('ifrlog')) {\n options.log = COLLAPSE\n options.logExpand = search.includes('ifrlog=expanded')\n }\n}\n","export const addEventListener = (\n el: EventTarget,\n evt: string,\n func: EventListenerOrEventListenerObject,\n options?: AddEventListenerOptions | boolean,\n): void => el.addEventListener(evt, func, options || false)\n\nexport const removeEventListener = (\n el: EventTarget,\n evt: string,\n func: EventListenerOrEventListenerObject,\n): void => el.removeEventListener(evt, func, false)\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { INIT_EVENTS, MESSAGE_ID, SEPARATOR } from '../../common/consts'\nimport { event as consoleEvent, info, log, warn } from '../console'\nimport settings from '../values/settings'\n\nconst filterMsg = (msg: string): string =>\n msg\n .split(SEPARATOR)\n .filter((_, index) => index !== 19)\n .join(SEPARATOR)\n\nfunction dispatch(calleeMsg: string, msg: string, id: string): void {\n function logSent(route: string): void {\n const displayMsg = calleeMsg in INIT_EVENTS ? filterMsg(msg) : msg\n info(id, route, HIGHLIGHT, FOREGROUND, HIGHLIGHT)\n info(id, `Message data: %c${displayMsg}`, HIGHLIGHT)\n }\n\n const { iframe, postMessageTarget, sameOrigin, targetOrigin } = settings[id]\n\n if (sameOrigin) {\n try {\n iframe.contentWindow.iframeChildListener(MESSAGE_ID + msg)\n logSent(`Sending message to iframe %c${id}%c via same origin%c`)\n return\n } catch (error) {\n if (calleeMsg in INIT_EVENTS) {\n settings[id].sameOrigin = false\n log(id, 'New iframe does not support same origin')\n } else {\n warn(id, 'Same origin messaging failed, falling back to postMessage')\n }\n }\n }\n\n logSent(\n `Sending message to iframe: %c${id}%c targetOrigin: %c${targetOrigin}`,\n )\n\n postMessageTarget.postMessage(MESSAGE_ID + msg, targetOrigin)\n}\n\nfunction trigger(calleeMsg: string, msg: string, id: string): void {\n consoleEvent(id, calleeMsg)\n\n if (!settings[id]?.postMessageTarget) {\n warn(id, `Iframe not found`)\n return\n }\n\n dispatch(calleeMsg, msg, id)\n}\n\nexport default trigger\n","import { RESIZE } from '../../common/consts'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\n\nconst sendTriggerMsg = (eventName: string, event: string): void =>\n Object.values(settings)\n .filter(({ autoResize, firstRun }) => autoResize && !firstRun)\n .forEach(({ iframe }) => trigger(eventName, event, iframe.id))\n\nexport default function tabVisible(): void {\n if (document.hidden === true) return\n sendTriggerMsg('tabVisible', RESIZE)\n}\n","import { MESSAGE_ID_LENGTH } from '../../common/consts'\nimport type { MessageData } from '../types'\nimport settings from '../values/settings'\n\nexport function getPaddingEnds(compStyle: CSSStyleDeclaration): number {\n if (compStyle.boxSizing !== 'border-box') return 0\n\n const top = compStyle.paddingTop ? parseInt(compStyle.paddingTop, 10) : 0\n const bot = compStyle.paddingBottom\n ? parseInt(compStyle.paddingBottom, 10)\n : 0\n\n return top + bot\n}\n\nexport function getBorderEnds(compStyle: CSSStyleDeclaration): number {\n if (compStyle.boxSizing !== 'border-box') return 0\n\n const top = compStyle.borderTopWidth\n ? parseInt(compStyle.borderTopWidth, 10)\n : 0\n\n const bot = compStyle.borderBottomWidth\n ? parseInt(compStyle.borderBottomWidth, 10)\n : 0\n\n return top + bot\n}\n\nexport default function decodeMessage(msg: string): MessageData {\n const data = msg.slice(MESSAGE_ID_LENGTH).split(':')\n const height = data[1] ? Number(data[1]) : 0\n const iframe = settings[data[0]]?.iframe\n const compStyle = getComputedStyle(iframe)\n\n const messageData: MessageData = {\n iframe,\n id: data[0],\n height: height + getPaddingEnds(compStyle) + getBorderEnds(compStyle),\n width: Number(data[2]),\n type: data[3],\n msg: data[4],\n message: data[4],\n }\n\n // eslint-disable-next-line prefer-destructuring\n if (data[5]) messageData.mode = data[5]\n\n return messageData\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { MESSAGE_ID, MESSAGE_ID_LENGTH } from '../../common/consts'\nimport { isIframe } from '../../common/utils'\nimport { log, warn } from '../console'\nimport type { MessageData } from '../types'\nimport settings from '../values/settings'\n\nconst ABOVE_TYPES: Record<string, number> = { true: 1, false: 1, undefined: 1 }\n\nexport function checkIframeExists(messageData: MessageData): boolean {\n const { id, msg, iframe } = messageData\n const detectedIframe = isIframe(iframe)\n\n if (!detectedIframe) {\n log(id, `Received: %c${msg}`, HIGHLIGHT)\n warn(id, `The target iframe was not found.`)\n }\n\n return detectedIframe\n}\n\nexport function isMessageFromIframe(messageData: MessageData, event: MessageEvent | { data: any, origin?: string, sameOrigin?: boolean }): boolean {\n function checkAllowedOrigin(): boolean {\n function checkList(): boolean {\n log(\n id,\n `Checking connection is from allowed list of origins: %c${checkOrigin}`,\n HIGHLIGHT,\n )\n\n for (const element of checkOrigin) {\n if (element === origin) {\n return true\n }\n }\n\n return false\n }\n\n function checkSingle(): boolean {\n const remoteHost = settings[id]?.remoteHost\n log(id, `Checking connection is from: %c${remoteHost}`, HIGHLIGHT)\n return origin === remoteHost\n }\n\n return checkOrigin.constructor === Array ? checkList() : checkSingle()\n }\n\n const { id } = messageData\n const { data, origin } = event\n const sameOrigin = 'sameOrigin' in event && event.sameOrigin\n\n if (sameOrigin) return true\n\n let checkOrigin = settings[id]?.checkOrigin\n\n if (checkOrigin && `${origin}` !== 'null' && !checkAllowedOrigin()) {\n throw new Error(\n `Unexpected message received from: ${origin} for ${id}. Message was: ${data}. This error can be disabled by setting the checkOrigin: false option or by providing an array of trusted domains.`,\n )\n }\n\n return true\n}\n\nexport const isMessageForUs = (message: any): boolean =>\n MESSAGE_ID === `${message}`.slice(0, MESSAGE_ID_LENGTH) &&\n message.slice(MESSAGE_ID_LENGTH).split(':')[0] in settings\n\nexport function isMessageFromMetaParent(messageData: MessageData): boolean {\n const { id, type } = messageData\n\n // Test if this message is from a parent above us. This is an ugly test,\n // however, updating the message format would break backwards compatibility.\n const isMetaParent = type in ABOVE_TYPES\n\n if (isMetaParent) {\n log(id, 'Ignoring init message from meta parent page')\n }\n\n return isMetaParent\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function checkSameDomain(id: string): void {\n try {\n settings[id].sameOrigin =\n !!settings[id]?.iframe?.contentWindow?.iframeChildListener\n } catch (error) {\n settings[id].sameOrigin = false\n }\n\n log(id, `sameOrigin: %c${settings[id].sameOrigin}`, HIGHLIGHT)\n}\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { VERSION } from '../../common/consts'\nimport { advise, log } from '../console'\n\nexport default function checkVersion(id: string, version: string | undefined): void {\n if (version === VERSION) return\n if (version === undefined) {\n advise(\n id,\n `<rb>Legacy version detected in iframe</>\n\nDetected legacy version of child page script. It is recommended to update the page in the iframe to use <b>@iframe-resizer/child</>.\n\nSee <u>https://iframe-resizer.com/setup/#child-page-setup</> for more details.\n`,\n )\n return\n }\n log(\n id,\n `Version mismatch (Child: %c${version}%c !== Parent: %c${VERSION})`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n}\n","import { FUNCTION } from '../../common/consts'\nimport { isolateUserCode } from '../../common/utils'\nimport { warn } from '../console'\nimport settings from '../values/settings'\n\nfunction on(iframeId: string, funcName: string, val: any): any {\n if (!settings[iframeId]) return null\n\n const func = settings[iframeId][funcName]\n\n if (typeof func !== FUNCTION)\n throw new TypeError(`${funcName} on iframe[${iframeId}] is not a function`)\n\n if (funcName !== 'onBeforeClose' && funcName !== 'onScroll')\n return isolateUserCode(func, val)\n\n try {\n return func(val)\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error)\n warn(iframeId, `Error in ${funcName} callback`)\n return null\n }\n}\n\nexport default on\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport type { MessageData } from '../types'\nimport { log } from '../console'\nimport on from './wrapper'\n\n// eslint-disable-next-line import/prefer-default-export\nexport function onMessage(messageData: MessageData, messageBody: string): void {\n const { id, iframe } = messageData\n\n log(\n id,\n `onMessage passed: {iframe: %c${id}%c, message: %c${messageBody}%c}`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n FOREGROUND,\n )\n\n on(id, 'onMessage', {\n iframe,\n message: JSON.parse(messageBody),\n })\n}\n","import { MESSAGE_HEADER_LENGTH, SEPARATOR } from '../../common/consts'\nimport settings from '../values/settings'\n\nexport default function getMessageBody(id: string, offset: number): string {\n const { lastMessage } = settings[id]\n return lastMessage.slice(\n lastMessage.indexOf(SEPARATOR) + MESSAGE_HEADER_LENGTH + offset,\n )\n}\n","import { SEPARATOR } from '../../common/consts'\nimport type { MessageData } from '../types'\nimport getMessageBody from '../received/message'\nimport on from './wrapper'\n\nexport default function onMouse(event: string, messageData: MessageData): void {\n const { id, iframe, height, type, width } = messageData\n let mousePos: { x: string | number; y: string | number } = { x: 0, y: 0 }\n\n if (width === 0 && height === 0) {\n const coords = getMessageBody(id, 9).split(SEPARATOR)\n mousePos = {\n x: coords[1],\n y: coords[0],\n }\n } else {\n mousePos = {\n x: width,\n y: height,\n }\n }\n\n on(id, event, {\n iframe,\n screenX: Number(mousePos.x),\n screenY: Number(mousePos.y),\n type,\n })\n}\n","import { VERSION } from '../../common/consts'\n\ninterface PageState {\n position: { x: number, y: number } | null\n version: string\n}\n\nconst page: PageState = {\n position: null,\n version: VERSION,\n}\n\nexport default page\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { info, log } from '../console'\nimport page from '../values/page'\n\ninterface Position {\n x: number\n y: number\n}\n\nexport function unsetPagePosition(): void {\n page.position = null\n}\n\nexport const getStoredPagePosition = (): Position | null => page.position\n\nexport function setStoredPagePosition(position: Position): void {\n page.position = position\n}\n\nexport function getPagePosition(id: string): Position {\n if (page.position === null)\n page.position = {\n x: window.scrollX,\n y: window.scrollY,\n }\n\n log(\n id,\n `Get page position: %c${page.position.x}%c, %c${page.position.y}`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n\n return page.position\n}\n\nexport function setPagePosition(id: string): void {\n if (page.position === null) return\n\n window.scrollTo(page.position.x, page.position.y)\n\n info(\n id,\n `Set page position: %c${page.position.x}%c, %c${page.position.y}`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n\n unsetPagePosition()\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { HEIGHT, WIDTH } from '../../common/consts'\nimport type { MessageData } from '../types'\nimport { info } from '../console'\nimport settings from '../values/settings'\n\nfunction setDimension(dimension: string, messageData: MessageData): void {\n const { id } = messageData\n const size = `${messageData[dimension]}px`\n settings[id].iframe.style[dimension] = size\n info(id, `Set ${dimension}: %c${size}`, HIGHLIGHT)\n}\n\nexport default function setSize(messageData: MessageData): void {\n const { id } = messageData\n const { sizeHeight, sizeWidth } = settings[id]\n\n if (sizeHeight) setDimension(HEIGHT, messageData)\n if (sizeWidth) setDimension(WIDTH, messageData)\n}\n","import type { MessageData } from '../types'\nimport { setPagePosition } from '../page/position'\nimport setSize from './size'\nimport on from './wrapper'\n\nexport default function resizeIframe(messageData: MessageData): void {\n const { id } = messageData\n setSize(messageData)\n setPagePosition(id)\n on(id, 'onResized', messageData)\n}\n","import { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function disconnect(iframe: HTMLIFrameElement): void {\n const { id } = iframe\n log(id, 'Disconnected from iframe')\n delete settings[id]\n delete iframe.iframeResizer\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { log, warn } from '../console'\nimport on from '../events/wrapper'\nimport disconnect from './disconnect'\n\nexport default function closeIframe(iframe: HTMLIFrameElement): void {\n const { id } = iframe\n\n if (on(id, 'onBeforeClose', id) === false) {\n log(id, 'Close iframe cancelled by onBeforeClose')\n return\n }\n\n log(id, `Removing iFrame: %c${id}`, HIGHLIGHT)\n\n try {\n // Catch race condition error with React\n if (iframe.parentNode) {\n iframe.remove()\n }\n } catch (error) {\n warn(id, error)\n }\n\n on(id, 'onAfterClose', id)\n disconnect(iframe)\n}\n","import { INIT, RESET } from '../../common/consts'\nimport type { MessageData } from '../types'\nimport { log } from '../console'\nimport setSize from '../events/size'\nimport { getPagePosition } from '../page/position'\nimport trigger from '../send/trigger'\n\nexport default function resetIframe(messageData: MessageData): void {\n const { id, type } = messageData\n\n log(\n id,\n `Size reset requested by ${type === INIT ? 'parent page' : 'child page'}`,\n )\n\n getPagePosition(id)\n setSize(messageData)\n trigger(RESET, RESET, id)\n}\n","import { LOAD, RESIZE, SCROLL } from '../../common/consts'\nimport { addEventListener, removeEventListener } from '../../common/listeners'\nimport { event, log } from '../console'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\n\nexport const sendInfoToIframe = (type: string, infoFunction: (iframe: HTMLIFrameElement) => string) => {\n const gate: Record<string, number | null> = {}\n\n return (requestType: string, id: string): void => {\n const { iframe } = settings[id]\n\n function throttle(func: () => void, frameId: string): void {\n if (!gate[frameId]) {\n func()\n gate[frameId] = requestAnimationFrame(() => {\n gate[frameId] = null\n })\n }\n }\n\n function gatedTrigger(): void {\n trigger(`${requestType} (${type})`, `${type}:${infoFunction(iframe)}`, id)\n }\n\n throttle(gatedTrigger, id)\n }\n}\n\nexport const stopInfoMonitor = (stopFunction: string) => (id: string): void => {\n if (stopFunction in settings[id]) {\n settings[id][stopFunction]()\n delete settings[id][stopFunction]\n }\n}\n\nexport const startInfoMonitor = (sendInfoToIframe: (requestType: string, id: string) => void, type: string) => (id: string): void => {\n let pending: string | false = false\n\n const sendInfo = (requestType: string) => (): void => {\n if (settings[id]) {\n if (!pending || pending === requestType) {\n sendInfoToIframe(requestType, id)\n\n pending = requestType\n requestAnimationFrame(() => {\n pending = false\n })\n }\n } else {\n stop()\n }\n }\n\n const sendScroll = sendInfo(SCROLL)\n const sendResize = sendInfo('resize window')\n\n function setListener(requestType: string, listener: (target: EventTarget, event: string, handler: EventListener) => void): void {\n log(id, `${requestType}listeners for send${type}`)\n listener(window, SCROLL, sendScroll)\n listener(window, RESIZE, sendResize)\n }\n\n function stop(): void {\n event(id, `stop${type}`)\n setListener('Remove ', removeEventListener)\n pageObserver.disconnect()\n iframeObserver.disconnect()\n if (settings[id]) {\n removeEventListener(settings[id].iframe, LOAD, stop)\n }\n }\n\n function start(): void {\n setListener('Add ', addEventListener)\n\n pageObserver.observe(document.body)\n iframeObserver.observe(settings[id].iframe)\n }\n\n const pageObserver = new ResizeObserver(sendInfo('pageObserver'))\n const iframeObserver = new ResizeObserver(sendInfo('iframeObserver'))\n\n if (!settings[id]) return\n\n settings[id][`stop${type}`] = stop\n addEventListener(settings[id].iframe, LOAD, stop)\n start()\n}\n","import { PAGE_INFO } from '../../common/consts'\nimport { sendInfoToIframe, startInfoMonitor, stopInfoMonitor } from './common'\n\nexport function getPageInfo(iframe: HTMLIFrameElement): string {\n const bodyPosition = document.body.getBoundingClientRect()\n const iFramePosition = iframe.getBoundingClientRect()\n const { scrollY, scrollX, innerHeight, innerWidth } = window\n const { clientHeight, clientWidth } = document.documentElement\n\n return JSON.stringify({\n iframeHeight: iFramePosition.height,\n iframeWidth: iFramePosition.width,\n clientHeight: Math.max(clientHeight, innerHeight || 0),\n clientWidth: Math.max(clientWidth, innerWidth || 0),\n offsetTop: Math.trunc(iFramePosition.top - bodyPosition.top),\n offsetLeft: Math.trunc(iFramePosition.left - bodyPosition.left),\n scrollTop: scrollY,\n scrollLeft: scrollX,\n documentHeight: clientHeight,\n documentWidth: clientWidth,\n windowHeight: innerHeight,\n windowWidth: innerWidth,\n })\n}\n\nconst sendPageInfoToIframe = sendInfoToIframe(PAGE_INFO, getPageInfo)\n\nexport const startPageInfoMonitor = startInfoMonitor(\n sendPageInfoToIframe,\n 'PageInfo',\n)\n\nexport const stopPageInfoMonitor = stopInfoMonitor('stopPageInfo')\n","import { PARENT_INFO } from '../../common/consts'\nimport { sendInfoToIframe, startInfoMonitor, stopInfoMonitor } from './common'\n\nexport function getParentProps(iframe: HTMLIFrameElement): string {\n const { scrollWidth, scrollHeight } = document.documentElement\n const { width, height, offsetLeft, offsetTop, pageLeft, pageTop, scale } =\n window.visualViewport\n\n return JSON.stringify({\n iframe: iframe.getBoundingClientRect(),\n document: {\n scrollWidth,\n scrollHeight,\n },\n viewport: {\n width,\n height,\n offsetLeft,\n offsetTop,\n pageLeft,\n pageTop,\n scale,\n },\n })\n}\n\nconst sendParentInfoToIframe = sendInfoToIframe(PARENT_INFO, getParentProps)\n\nexport const startParentInfoMonitor = startInfoMonitor(\n sendParentInfoToIframe,\n 'ParentInfo',\n)\n\nexport const stopParentInfoMonitor = stopInfoMonitor('stopParentInfo')\n","import { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport type { MessageData } from '../types'\nimport { info } from '../console'\nimport on from '../events/wrapper'\nimport settings from '../values/settings'\nimport {\n getPagePosition,\n getStoredPagePosition,\n setPagePosition,\n setStoredPagePosition,\n unsetPagePosition,\n} from './position'\n\ninterface Position {\n x: number\n y: number\n}\n\nexport function getElementPosition(target: HTMLIFrameElement): Position {\n const iframePosition = target.getBoundingClientRect()\n const pagePosition = getPagePosition(target.id)\n\n return {\n x: Number(iframePosition.left) + Number(pagePosition.x),\n y: Number(iframePosition.top) + Number(pagePosition.y),\n }\n}\n\nexport function scrollToLink(id: string): void {\n const { x, y } = getStoredPagePosition()\n const iframe = settings[id]?.iframe\n\n if (on(id, 'onScroll', { iframe, top: y, left: x, x, y }) === false) {\n unsetPagePosition()\n return\n }\n\n setPagePosition(id)\n}\n\nexport function scrollBy(messageData: MessageData): void {\n const { id, height, width } = messageData\n\n // Check for V4 as well\n const target = window.parentIframe || window.parentIFrame || window\n\n info(\n id,\n `scrollBy: x: %c${width}%c y: %c${height}`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n\n target.scrollBy(width, height)\n}\n\nconst scrollRequestFromChild = (addOffset: boolean) => (messageData: MessageData): void => {\n /* istanbul ignore next */ // Not testable in Karma\n function reposition(newPosition: Position): void {\n setStoredPagePosition(newPosition)\n scrollToLink(id)\n }\n\n function scrollParent(target: any, newPosition: Position): void {\n target[`scrollTo${addOffset ? 'Offset' : ''}`](newPosition.x, newPosition.y)\n }\n\n const calcOffset = (offset: Position): Position => ({\n x: width + offset.x,\n y: height + offset.y,\n })\n\n const { id, iframe, height, width } = messageData\n const offset = addOffset ? getElementPosition(iframe) : { x: 0, y: 0 }\n const newPosition = calcOffset(offset)\n const target = window.parentIframe || window.parentIFrame // Check for V4 as well\n\n info(\n id,\n `Reposition requested (offset x:%c${offset.x}%c y:%c${offset.y})`,\n HIGHLIGHT,\n FOREGROUND,\n HIGHLIGHT,\n )\n\n if (target) scrollParent(target, newPosition)\n else reposition(newPosition)\n}\n\nexport const scrollTo = scrollRequestFromChild(false)\nexport const scrollToOffset = scrollRequestFromChild(true)\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { info, log } from '../console'\nimport page from '../values/page'\nimport { getElementPosition, scrollToLink } from './scroll'\n\nfunction jumpToTarget(id: string, hash: string, target: HTMLElement): void {\n const { x, y } = getElementPosition(target as unknown as HTMLIFrameElement)\n\n info(id, `Moving to in page link: %c#${hash}`, HIGHLIGHT)\n\n page.position = { x, y }\n\n scrollToLink(id)\n window.location.hash = hash\n}\n\nfunction jumpToParent(id: string, hash: string): void {\n // Check for V4 as well\n const target = window.parentIframe || window.parentIFrame\n\n if (!target) {\n log(id, `In page link #${hash} not found`)\n return\n }\n\n target.moveToAnchor(hash)\n}\n\nexport default function inPageLink(id: string, location: string): void {\n const hash = location.split('#')[1] || ''\n const hashData = decodeURIComponent(hash)\n\n const target =\n document.getElementById(hashData) || document.getElementsByName(hashData)[0]\n\n if (target) {\n jumpToTarget(id, hash, target)\n return\n }\n\n if (window.top === window.self) {\n log(id, `In page link #${hash} not found`)\n return\n }\n\n jumpToParent(id, hash)\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { info } from '../console'\nimport settings from '../values/settings'\n\nexport function checkTitle(id: string): boolean {\n const title = settings[id]?.iframe?.title\n return title === '' || title === undefined\n}\n\nexport function setTitle(id: string, title: string | undefined): void {\n if (!settings[id]?.syncTitle) return\n settings[id].iframe.title = title\n info(id, `Set iframe title attribute: %c${title}`, HIGHLIGHT)\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nconst l = (l: string): string => {\n if (!l) return ''\n let p = -559038744,\n y = 1103547984\n for (let z: any, t = 0; t < l.length; t++)\n ((z = l.codePointAt(t)),\n (p = Math.imul(p ^ z, 2246822519)),\n (y = Math.imul(y ^ z, 3266489917)))\n return (\n (p ^= Math.imul(p ^ (y >>> 15), 1935289751)),\n (y ^= Math.imul(y ^ (p >>> 15), 3405138345)),\n (p ^= y >>> 16),\n (y ^= p >>> 16),\n (2097152 * (y >>> 0) + (p >>> 11)).toString(36)\n )\n },\n p = (l: string): string =>\n l.replace(/[A-Za-z]/g, (l: any) =>\n String.fromCodePoint(\n (l <= 'Z' ? 90 : 122) >= (l = l.codePointAt(0) + 19) ? l : l - 26,\n ),\n ),\n x = ['spjluzl', 'rlf', 'clyzpvu', 'rlf2'],\n y = [\n '<yi>Puchspk Spjluzl Rlf</><iy><iy>',\n '<yi>Tpzzpun Spjluzl Rlf</><iy><iy>',\n 'Aopz spiyhyf pz hchpshisl dpao ivao Jvttlyjphs huk Vwlu-Zvbyjl spjluzlz.<iy><iy><i>Jvttlyjphs Spjluzl</><iy>Mvy jvttlyjphs bzl, <p>pmyhtl-ylzpgly</> ylxbpylz h svd jvza vul aptl spjluzl mll. Mvy tvyl pumvythapvu cpzpa <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</>.<iy><iy><i>Vwlu Zvbyjl Spjluzl</><iy>Pm fvb hyl bzpun aopz spiyhyf pu h uvu-jvttlyjphs vwlu zvbyjl wyvqlja aolu fvb jhu bzl pa mvy myll bukly aol alytz vm aol NWS C3 Spjluzl. Av jvumpyt fvb hjjlwa aolzl alytz, wslhzl zla aol <i>spjluzl</> rlf pu <p>pmyhtl-ylzpgly</> vwapvuz av <i>NWSc3</>.<iy><iy>Mvy tvyl pumvythapvu wslhzl zll: <b>oaawz://pmyhtl-ylzpgly.jvt/nws</>',\n '<i>NWSc3 Spjluzl Clyzpvu</><iy><iy>Aopz clyzpvu vm <p>pmyhtl-ylzpgly</> pz ilpun bzlk bukly aol alytz vm aol <i>NWS C3</> spjluzl. Aopz spjluzl hssvdz fvb av bzl <p>pmyhtl-ylzpgly</> pu Vwlu Zvbyjl wyvqljaz, iba pa ylxbpylz fvby wyvqlja av il wbispj, wyvcpkl haaypibapvu huk il spjluzlk bukly clyzpvu 3 vy shaly vm aol NUB Nlulyhs Wbispj Spjluzl.<iy><iy>Pm fvb hyl bzpun aopz spiyhyf pu h uvu-vwlu zvbyjl wyvqlja vy dlizpal, fvb dpss ullk av wbyjohzl h svd jvza vul aptl jvttlyjphs spjluzl.<iy><iy>Mvy tvyl pumvythapvu cpzpa <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</>.',\n '<iy><yi>Zvsv spjluzl kvlz uva zbwwvya jyvzz-kvthpu</><iy><iy>Av bzl <p>pmyhtl-ylzpgly</> dpao jyvzz kvthpu pmyhtlz fvb ullk lpaoly aol Wyvmlzzpvuhs vy Ibzpulzz spjluzlz. Mvy klahpsz vu bwnyhkl wypjpun wslhzl jvuahja pumv@pmyhtl-ylzpgly.jvt.',\n 'Pu whnl spurpun ylxbpylz h Wyvmlzzpvuhs vy Ibzpulzz spjluzl. Wslhzl zll <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</> mvy tvyl klahpsz.',\n ],\n z = ['NWSc3', 'zvsv', 'wyv', 'ibzpulzz', 'vlt'],\n t = Object.fromEntries(\n [\n '2cgs7fdf4xb',\n '1c9ctcccr4z',\n '1q2pc4eebgb',\n 'ueokt0969w',\n 'w2zxchhgqz',\n '1umuxblj2e5',\n '2b5sdlfhbev',\n 'zo4ui3arjo',\n 'oclbb4thgl',\n ].map((l, p) => [l, Math.max(0, p - 1)]),\n )\nexport const getModeData = (l: number): string => p(y[l])\nexport const getModeLabel = (l: number): string => p(z[l])\nexport const getKey = (l: number): string => p(x[l])\nexport default (y: any): number => {\n const z = y[p(x[0])] || y[p(x[1])] || y[p(x[2])] || y[p(x[3])]\n if (!z) return -1\n const u = z.split('-')\n let v = (function (y = '') {\n let z = -2\n const u = l(p(y))\n return u in t && (z = t[u]), z>4?z-4:z\n })(u[0])\n return 0 === v || ((p: any) => p[2] === l(p[0] + p[1]))(u) || (v = -2), v\n}\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { VERSION } from '../../common/consts'\nimport { getModeData, getModeLabel } from '../../common/mode'\nimport { advise, purge as consoleClear, vInfo } from '../console'\nimport settings from '../values/settings'\n\nlet vAdvised = false\nlet vInfoDisable = false\n\nexport default function checkMode(id: string, childMode: number = -3): void {\n if (vAdvised) return\n const mode = Math.max(settings[id].mode, childMode)\n if (mode > settings[id].mode) settings[id].mode = mode\n if (mode < 0) {\n consoleClear(id)\n if (!settings[id].vAdvised)\n advise(id || 'Parent', `${getModeData(mode + 2)}${getModeData(2)}`)\n settings[id].vAdvised = true\n throw getModeData(mode + 2).replace(/<\\/?[a-z][^>]*>|<\\/>/gi, '')\n }\n if (!(mode > 0 && vInfoDisable)) {\n vInfo(`v${VERSION} (${getModeLabel(mode)})`, mode)\n }\n if (mode < 1) advise('Parent', getModeData(3))\n vAdvised = true\n}\n\nexport function preModeCheck(id: string): void {\n if (vAdvised) return\n const { mode } = settings[id]\n if (mode !== -1) checkMode(id, mode)\n}\n\nexport function enableVInfo(options: Record<string, any>): void {\n if (options?.log === -1) {\n options.log = false\n vInfoDisable = true\n }\n}\n","import checkMode from '../checks/mode'\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function firstRun(id: string, mode: string | undefined): void {\n if (!settings[id]) return\n\n log(id, `First run for ${id}`)\n checkMode(id, mode !== undefined ? Number(mode) : undefined)\n settings[id].firstRun = false\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport {\n AUTO_RESIZE,\n BEFORE_UNLOAD,\n CLOSE,\n IN_PAGE_LINK,\n INIT,\n MESSAGE,\n MOUSE_ENTER,\n MOUSE_LEAVE,\n PAGE_INFO,\n PAGE_INFO_STOP,\n PARENT_INFO,\n PARENT_INFO_STOP,\n RESET,\n SCROLL_BY,\n SCROLL_TO,\n SCROLL_TO_OFFSET,\n TITLE,\n} from '../common/consts'\nimport type { MessageData } from './types'\nimport checkSameDomain from './checks/origin'\nimport checkVersion from './checks/version'\nimport { info, log, warn } from './console'\nimport { onMessage } from './events/message'\nimport onMouse from './events/mouse'\nimport resizeIframe from './events/resize'\nimport on from './events/wrapper'\nimport closeIframe from './methods/close'\nimport resetIframe from './methods/reset'\nimport { startPageInfoMonitor, stopPageInfoMonitor } from './monitor/page-info'\nimport { startParentInfoMonitor, stopParentInfoMonitor } from './monitor/props'\nimport inPageLink from './page/in-page-link'\nimport { scrollBy, scrollTo, scrollToOffset } from './page/scroll'\nimport { setTitle } from './page/title'\nimport getMessageBody from './received/message'\nimport firstRun from './setup/first-run'\nimport settings from './values/settings'\n\nexport default function routeMessage(messageData: MessageData): void {\n const { height, id, iframe, mode, message, type, width } = messageData\n const { lastMessage } = settings[id]\n\n if (settings[id]?.firstRun) firstRun(id, mode)\n log(id, `Received: %c${lastMessage}`, HIGHLIGHT)\n\n switch (type) {\n case AUTO_RESIZE:\n settings[id].autoResize = JSON.parse(getMessageBody(id, 9))\n break\n\n case BEFORE_UNLOAD:\n info(id, 'Ready state reset')\n settings[id].initialised = false\n break\n\n case CLOSE:\n closeIframe(iframe)\n break\n\n case IN_PAGE_LINK:\n inPageLink(id, getMessageBody(id, 9))\n break\n\n case INIT:\n resizeIframe(messageData)\n checkSameDomain(id)\n checkVersion(id, message)\n settings[id].initialised = true\n on(id, 'onReady', iframe)\n break\n\n case MESSAGE:\n onMessage(messageData, getMessageBody(id, 6))\n break\n\n case MOUSE_ENTER:\n onMouse('onMouseEnter', messageData)\n break\n\n case MOUSE_LEAVE:\n onMouse('onMouseLeave', messageData)\n break\n\n case PAGE_INFO:\n startPageInfoMonitor(id)\n break\n\n case PARENT_INFO:\n startParentInfoMonitor(id)\n break\n\n case PAGE_INFO_STOP:\n stopPageInfoMonitor(id)\n break\n\n case PARENT_INFO_STOP:\n stopParentInfoMonitor(id)\n break\n\n case RESET:\n resetIframe(messageData)\n break\n\n case SCROLL_BY:\n scrollBy(messageData)\n break\n\n case SCROLL_TO:\n scrollTo(messageData)\n break\n\n case SCROLL_TO_OFFSET:\n scrollToOffset(messageData)\n break\n\n case TITLE:\n setTitle(id, message)\n break\n\n default:\n if (width === 0 && height === 0) {\n warn(\n id,\n `Unsupported message received (${type}), this is likely due to the iframe containing a later ` +\n `version of iframe-resizer than the parent page`,\n )\n return\n }\n\n if (width === 0 || height === 0) {\n log(id, 'Ignoring message with 0 height or width')\n return\n }\n\n // Recheck document.hidden here, as only Firefox\n // correctly supports this in the iframe\n if (document.hidden) {\n log(id, 'Page hidden - ignored resize request')\n return\n }\n\n resizeIframe(messageData)\n }\n}\n","import settings from '../values/settings'\n\nexport const sendIframeReady =\n (source: MessageEventSource | null) =>\n ({ initChild, postMessageTarget }: { initChild: () => void, postMessageTarget: MessageEventSource | null }): void => {\n if (source === postMessageTarget) initChild()\n }\n\nexport default (source: MessageEventSource | null): void =>\n Object.values(settings).forEach(sendIframeReady(source))\n","import { CHILD_READY_MESSAGE, MESSAGE, PARENT, STRING } from '../common/consts'\nimport { addEventListener } from '../common/listeners'\nimport { once } from '../common/utils'\nimport { debug, errorBoundary, event as consoleEvent } from './console'\nimport tabVisible from './events/visible'\nimport decodeMessage from './received/decode'\nimport {\n checkIframeExists,\n isMessageForUs,\n isMessageFromIframe,\n isMessageFromMetaParent,\n} from './received/preflight'\nimport routeMessage from './router'\nimport iframeReady from './send/ready'\nimport settings from './values/settings'\n\nfunction iframeListener(event: MessageEvent | { data: any, sameOrigin?: boolean }): void {\n const msg = event.data\n\n if (msg === CHILD_READY_MESSAGE) {\n iframeReady((event as MessageEvent).source)\n return\n }\n\n if (!isMessageForUs(msg)) {\n if (typeof msg !== STRING) return\n consoleEvent(PARENT, 'ignoredMessage')\n debug(PARENT, msg)\n return\n }\n\n const messageData = decodeMessage(msg)\n const { id, type } = messageData\n\n consoleEvent(id, type)\n\n switch (true) {\n case !settings[id]:\n throw new Error(`${type} No settings for ${id}. Message was: ${msg}`)\n\n case !checkIframeExists(messageData):\n case isMessageFromMetaParent(messageData):\n case !isMessageFromIframe(messageData, event):\n return\n\n default:\n settings[id].lastMessage = event.data\n errorBoundary(id, routeMessage)(messageData)\n }\n}\n\nexport default once(() => {\n addEventListener(window, MESSAGE, iframeListener as EventListener)\n addEventListener(document, 'visibilitychange', tabVisible)\n window.iframeParentListener = (data: any) =>\n setTimeout(() => iframeListener({ data, sameOrigin: true }))\n})\n","import { NEW_LINE } from '../../common/consts'\nimport { advise } from '../console'\n\nconst shownDuplicateIdWarning: Record<string, boolean> = {}\n\nexport default function checkUniqueId(id: string): boolean {\n if (shownDuplicateIdWarning[id] === true) return false\n\n const elements = document.querySelectorAll(`iframe#${CSS.escape(id)}`)\n if (elements.length <= 1) return true\n\n shownDuplicateIdWarning[id] = true\n\n const elementList = Array.from(elements).flatMap((element) => [\n NEW_LINE,\n element,\n NEW_LINE,\n ])\n\n advise(\n id,\n `<rb>Duplicate ID attributes detected</>\n\nThe <b>${id}</> ID is not unique. Having multiple iframes on the same page with the same ID causes problems with communication between the iframe and parent page. Please ensure that the ID of each iframe has a unique value.\n\nFound <bb>${elements.length}</> iframes with the <b>${id}</> ID:`,\n ...elementList,\n NEW_LINE,\n )\n\n return false\n}\n","import {\n MESSAGE,\n REMOVED_NEXT_VERSION,\n RESIZE,\n STRING,\n} from '../../common/consts'\nimport { typeAssert } from '../../common/utils'\nimport { advise } from '../console'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\nimport closeIframe from './close'\nimport disconnect from './disconnect'\n\nconst DEPRECATED_REMOVE_LISTENERS = `<rb>Deprecated Method Name</>\n\nThe <b>removeListeners()</> method has been renamed to <b>disconnect()</>. ${REMOVED_NEXT_VERSION}`\n\nconst DEPRECATED_RESIZE = `<rb>Deprecated Method</>\n\nUse of the <b>resize()</> method from the parent page is deprecated and will be removed in a future version of <i>iframe-resizer</>. As there are no longer any edge cases that require triggering a resize from the parent page, it is recommended to remove this method from your code.`\n\nexport default function attachMethods(id: string): void {\n if (settings[id]) {\n const { iframe } = settings[id]\n const resizer = {\n close: closeIframe.bind(null, iframe),\n\n disconnect: disconnect.bind(null, iframe),\n\n moveToAnchor(anchor: string) {\n typeAssert(anchor, STRING, 'moveToAnchor(anchor) anchor')\n trigger('Move to anchor', `moveToAnchor:${anchor}`, id)\n },\n\n removeListeners() {\n advise(id, DEPRECATED_REMOVE_LISTENERS)\n this.disconnect()\n },\n\n resize() {\n advise(id, DEPRECATED_RESIZE)\n trigger('Window resize', RESIZE, id)\n },\n\n sendMessage(message: any) {\n message = JSON.stringify(message)\n trigger(MESSAGE, `${MESSAGE}:${message}`, id)\n },\n }\n\n iframe.iframeResizer = resizer\n iframe.iFrameResizer = resizer\n }\n}\n","import { CHILD, SEPARATOR } from '../../common/consts'\nimport page from '../values/page'\nimport settings from '../values/settings'\n\n// Backwards compatibility consts\nconst V1_PADDING = '8'\nconst INTERVAL = '32'\nconst RESIZE_FROM = CHILD\nconst PUBLIC_METHODS = true\n\nexport default function createOutgoingMessage(id: string): string {\n const {\n autoResize,\n bodyBackground,\n bodyMargin,\n bodyPadding,\n heightCalculationMethod,\n inPageLinks,\n license,\n log,\n logExpand,\n mouseEvents,\n offsetHeight,\n offsetWidth,\n mode,\n sizeHeight,\n // sizeSelector,\n sizeWidth,\n tolerance,\n widthCalculationMethod,\n } = settings[id]\n\n return [\n id,\n V1_PADDING,\n sizeWidth,\n log,\n INTERVAL,\n PUBLIC_METHODS,\n autoResize,\n bodyMargin,\n heightCalculationMethod,\n bodyBackground,\n bodyPadding,\n tolerance,\n inPageLinks,\n RESIZE_FROM,\n widthCalculationMethod,\n mouseEvents,\n offsetHeight,\n offsetWidth,\n sizeHeight,\n license,\n page.version,\n mode,\n '', // sizeSelector,\n logExpand,\n ].join(SEPARATOR)\n}\n","import { NUMBER } from '../../common/consts'\nimport settings from '../values/settings'\n\nconst ZERO = '0'\n\nexport default function setupBodyMargin(id: string): void {\n const { bodyMargin } = settings[id]\n\n if (typeof bodyMargin === NUMBER || bodyMargin === ZERO) {\n settings[id].bodyMargin = `${bodyMargin}px`\n }\n}\n","import { OBJECT } from '../../common/consts'\nimport { advise, event } from '../console'\n\nconst getOrigin = (url: string): string | null => {\n try {\n return new URL(url).origin\n } catch (error) {\n return null\n }\n}\n\nconst allowsScriptsAndOrigin = (sandbox: any): boolean =>\n typeof sandbox === OBJECT &&\n sandbox.length > 0 &&\n !(sandbox.contains('allow-scripts') && sandbox.contains('allow-same-origin'))\n\nfunction showWarning(id: string, settings: Record<string, any>): void {\n const {\n checkOrigin,\n iframe: { src, sandbox },\n initialisedFirstPage,\n waitForLoad,\n } = settings[id]\n const targetOrigin = getOrigin(src)\n\n event(id, 'noResponse')\n advise(\n id,\n `<rb>No response from iframe</>\n\nThe iframe (<i>${id}</>) has not responded within ${settings[id].warningTimeout / 1000} seconds. Check <b>@iframe-resizer/child</> package has been loaded in the iframe.\n${\n checkOrigin && targetOrigin\n ? `\nThe <b>checkOrigin</> option is currently enabled. If the iframe redirects away from <i>${targetOrigin}</>, then the connection to the iframe may be blocked by the browser. To disable this option, set <b>checkOrigin</> to <bb>false</> or an array of allowed origins. See <u>https://iframe-resizer.com/checkorigin</> for more information.\n`\n : ''\n}${\n waitForLoad && !initialisedFirstPage\n ? `\nThe <b>waitForLoad</> option is currently set to <bb>true</>. If the iframe loads before <i>iframe-resizer</> runs, this option will prevent <i>iframe-resizer</> initialising. To disable this option, set <b>waitForLoad</> to <bb>false</>.\n`\n : ''\n }${\n allowsScriptsAndOrigin(sandbox)\n ? `\nThe iframe has the <b>sandbox</> attribute, please ensure it contains both the <bb>allow-same-origin</> and <bb>allow-scripts</> values.\n`\n : ''\n }\nThis message can be ignored if everything is working, or you can set the <b>warningTimeout</> option to a higher value or zero to suppress this warning.\n`,\n )\n}\n\nexport default function warnOnNoResponse(id: string, settings: Record<string, any>): void {\n function warning(): void {\n if (settings[id] === undefined) return // iframe has been closed while we were waiting\n\n const { initialised, loadErrorShown } = settings[id]\n\n settings[id].msgTimeout = undefined\n\n if (initialised) {\n settings[id].initialisedFirstPage = true\n return\n }\n\n if (loadErrorShown) return\n\n settings[id].loadErrorShown = true\n showWarning(id, settings)\n }\n\n const { msgTimeout, warningTimeout } = settings[id]\n\n if (!warningTimeout) return\n if (msgTimeout) clearTimeout(msgTimeout)\n\n settings[id].msgTimeout = setTimeout(warning, warningTimeout)\n}\n","import {\n INIT,\n INIT_FROM_IFRAME,\n LAZY,\n LOAD,\n MIN_SIZE,\n ONLOAD,\n RESET_REQUIRED_METHODS,\n} from '../../common/consts'\nimport { addEventListener } from '../../common/listeners'\nimport { event as consoleEvent, info } from '../console'\nimport resetIframe from '../methods/reset'\nimport warnOnNoResponse from '../send/timeout'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\n\nconst AFTER_EVENT_STACK = 1\nconst isLazy = (iframe: HTMLIFrameElement): boolean => iframe.loading === LAZY\nconst isInit = (eventType: string): boolean => eventType === INIT\n\nfunction checkReset(id: string): void {\n if (!(settings[id]?.heightCalculationMethod in RESET_REQUIRED_METHODS)) return\n\n resetIframe({\n id,\n iframe: settings[id].iframe,\n height: MIN_SIZE,\n width: MIN_SIZE,\n type: INIT,\n })\n}\n\nfunction addLoadListener(iframe: HTMLIFrameElement, initChild: () => void): void {\n // allow other concurrent events to go first\n const onload = () => setTimeout(initChild, AFTER_EVENT_STACK)\n addEventListener(iframe, LOAD, onload)\n}\n\nconst noContent = (iframe: HTMLIFrameElement): boolean => {\n const { src, srcdoc } = iframe\n return !srcdoc && (src == null || src === '' || src === 'about:blank')\n}\n\nfunction sendInit(id: string, initChild: () => void): void {\n const { iframe, waitForLoad } = settings[id]\n\n if (waitForLoad === true) return\n if (noContent(iframe)) {\n setTimeout(() => {\n consoleEvent(id, 'noContent')\n info(id, 'No content detected in the iframe, delaying initialisation')\n })\n return\n }\n\n setTimeout(initChild)\n}\n\n// We have to call trigger twice, as we can not be sure if all\n// iframes have completed loading when this code runs. The\n// event listener also catches the page changing in the iFrame.\nexport default function init(id: string, message: string): void {\n const createInitChild = (eventType: string) => (): void => {\n if (!settings[id]) return // iframe removed before load event\n\n const { firstRun, iframe } = settings[id]\n\n trigger(eventType, message, id)\n if (!(isInit(eventType) && isLazy(iframe))) warnOnNoResponse(id, settings)\n\n if (!firstRun) checkReset(id)\n }\n\n const { iframe } = settings[id]\n\n settings[id].initChild = createInitChild(INIT_FROM_IFRAME)\n addLoadListener(iframe, createInitChild(ONLOAD))\n sendInit(id, createInitChild(INIT))\n}\n","import {\n AUTO_RESIZE,\n BOTH,\n HORIZONTAL,\n NONE,\n VERTICAL,\n} from '../../common/consts'\nimport { advise } from '../console'\n\nexport default function checkOptions(id: string, options: Record<string, any> | undefined): Record<string, any> {\n if (!options) return {}\n\n if (\n 'sizeWidth' in options ||\n 'sizeHeight' in options ||\n AUTO_RESIZE in options\n ) {\n advise(\n id,\n `<rb>Deprecated Option</>\n\nThe <b>sizeWidth</>, <b>sizeHeight</> and <b>autoResize</> options have been replaced with new <b>direction</> option which expects values of <bb>${VERTICAL}</>, <bb>${HORIZONTAL}</>, <bb>${BOTH}</> or <bb>${NONE}</>.\n`,\n )\n }\n\n return options\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { info } from '../console'\nimport settings from '../values/settings'\n\nexport default function checkWarningTimeout(id: string): void {\n if (!settings[id].warningTimeout) {\n info(id, 'warningTimeout:%c disabled', HIGHLIGHT)\n }\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { VERTICAL } from '../../common/consts'\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function setOffsetSize(id: string, { offset, offsetSize }: { offset?: number, offsetSize?: number }): void {\n const newOffset = offsetSize || offset\n\n if (!newOffset) return // No offset set or offset is zero\n\n if (settings[id].direction === VERTICAL) {\n settings[id].offsetHeight = newOffset\n log(id, `Offset height: %c${newOffset}`, HIGHLIGHT)\n } else {\n settings[id].offsetWidth = newOffset\n log(id, `Offset width: %c${newOffset}`, HIGHLIGHT)\n }\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { BOTH, HORIZONTAL, NONE, VERTICAL } from '../../common/consts'\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function setDirection(id: string): void {\n const { direction } = settings[id]\n\n switch (direction) {\n case VERTICAL:\n break\n\n case HORIZONTAL:\n settings[id].sizeHeight = false\n // eslint-disable-next-line no-fallthrough\n case BOTH:\n settings[id].sizeWidth = true\n break\n\n case NONE:\n settings[id].sizeWidth = false\n settings[id].sizeHeight = false\n settings[id].autoResize = false\n break\n\n default:\n throw new TypeError(`Direction value of \"${direction}\" is not valid`)\n }\n\n log(id, `direction: %c${direction}`, HIGHLIGHT)\n}\n","import settings from '../values/settings'\n\nexport const getTargetOrigin = (remoteHost: string): string =>\n remoteHost === '' ||\n remoteHost.match(/^(about:blank|javascript:|file:\\/\\/)/) !== null\n ? '*'\n : remoteHost\n\nexport function setTargetOrigin(id: string): void {\n settings[id].targetOrigin =\n settings[id].checkOrigin === true\n ? getTargetOrigin(settings[id].remoteHost)\n : '*'\n}\n\nexport function getPostMessageTarget(iframe: HTMLIFrameElement): void {\n const { id } = iframe\n if (settings[id].postMessageTarget === null)\n settings[id].postMessageTarget = iframe.contentWindow\n}\n","import { OFFSET, OFFSET_SIZE, REMOVED_NEXT_VERSION } from '../../common/consts'\nimport { hasOwn } from '../../common/utils'\nimport { advise } from '../console'\nimport settings from '../values/settings'\n\nfunction updateOptionName(id: string, oldName: string, newName: string): void {\n if (hasOwn(settings[id], oldName)) {\n advise(\n id,\n `<rb>Deprecated option</>\\n\\nThe <b>${oldName}</> option has been renamed to <b>${newName}</>. ${REMOVED_NEXT_VERSION}`,\n )\n settings[id][newName] = settings[id][oldName]\n delete settings[id][oldName]\n }\n}\n\nexport default function updateOptionNames(id: string): void {\n updateOptionName(id, OFFSET, OFFSET_SIZE)\n updateOptionName(id, 'onClose', 'onBeforeClose')\n updateOptionName(id, 'onClosed', 'onAfterClose')\n}\n","import setMode from '../../common/mode'\nimport { hasOwn } from '../../common/utils'\nimport checkOptions from '../checks/options'\nimport checkWarningTimeout from '../checks/warning-timeout'\nimport { checkTitle } from '../page/title'\nimport setOffsetSize from '../send/offset'\nimport defaults from '../values/defaults'\nimport settings from '../values/settings'\nimport setDirection from './direction'\nimport { getPostMessageTarget, setTargetOrigin } from './target-origin'\nimport updateOptionNames from './update-option-names'\n\nconst hasMouseEvents = (options: Record<string, any>): boolean =>\n hasOwn(options, 'onMouseEnter') || hasOwn(options, 'onMouseLeave')\n\nexport default function processOptions(iframe: HTMLIFrameElement, options: Record<string, any>): void {\n const { id } = iframe\n settings[id] = {\n ...settings[id],\n iframe,\n remoteHost: iframe?.src.split('/').slice(0, 3).join('/'),\n ...defaults,\n ...checkOptions(id, options),\n mouseEvents: hasMouseEvents(options),\n mode: setMode(options),\n syncTitle: checkTitle(id),\n }\n\n updateOptionNames(id)\n setDirection(id)\n setOffsetSize(id, options)\n checkWarningTimeout(id)\n getPostMessageTarget(iframe)\n setTargetOrigin(id)\n}\n","import { AUTO, HIDDEN } from '../../common/consts'\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nconst YES = 'yes'\nconst NO = 'no'\nconst OMIT = 'omit'\n\nexport default function setScrolling(iframe: HTMLIFrameElement): void {\n const { id } = iframe\n\n log(\n id,\n `Iframe scrolling ${\n settings[id]?.scrolling ? 'enabled' : 'disabled'\n } for ${id}`,\n )\n\n iframe.style.overflow = settings[id]?.scrolling === false ? HIDDEN : AUTO\n\n switch (settings[id]?.scrolling) {\n case OMIT:\n break\n\n case true:\n iframe.scrolling = YES\n break\n\n case false:\n iframe.scrolling = NO\n break\n\n default:\n iframe.scrolling = settings[id]?.scrolling || NO\n }\n}\n","import { HIGHLIGHT } from 'auto-console-group'\n\nimport { preModeCheck } from '../checks/mode'\nimport checkUniqueId from '../checks/unique'\nimport { endAutoGroup, event as consoleEvent, log } from '../console'\nimport attachMethods from '../methods/attach'\nimport createOutgoingMessage from '../send/outgoing'\nimport setupBodyMargin from './body-margin'\nimport init from './init'\nimport processOptions from './process-options'\nimport setScrolling from './scrolling'\n\nfunction setup(id: string, iframe: HTMLIFrameElement, options: Record<string, any>): void {\n processOptions(iframe, options)\n log(id, `src: %c${iframe.srcdoc || iframe.src}`, HIGHLIGHT)\n preModeCheck(id)\n setScrolling(iframe)\n setupBodyMargin(id)\n init(id, createOutgoingMessage(id))\n attachMethods(id)\n log(id, 'Setup complete')\n}\n\nexport default function (iframe: HTMLIFrameElement, options: Record<string, any>): void {\n const { id } = iframe\n consoleEvent(id, 'setup')\n if (checkUniqueId(id)) setup(id, iframe, options)\n endAutoGroup(id)\n}\n","import { COLLAPSE, EXPAND, LOG_OPTIONS } from '../../common/consts'\nimport { hasOwn, isString } from '../../common/utils'\nimport { enableVInfo } from '../checks/mode'\nimport { error, setupConsole } from '../console'\nimport defaults from '../values/defaults'\n\nexport default function startLogging(id: string, options: Record<string, any>): void {\n const isLogEnabled = hasOwn(options, 'log')\n const isLogString = isString(options.log)\n const enabled = isLogEnabled\n ? isLogString\n ? true\n : options.log\n : defaults.log\n\n if (!hasOwn(options, 'logExpand')) {\n options.logExpand =\n isLogEnabled && isLogString ? options.log === EXPAND : defaults.logExpand\n }\n\n enableVInfo(options)\n setupConsole({\n enabled,\n expand: options.logExpand,\n iframeId: id,\n })\n\n if (isLogString && !(options.log in LOG_OPTIONS))\n error(\n id,\n `Invalid value for options.log: Accepted values are \"${EXPAND}\" and \"${COLLAPSE}\"`,\n )\n\n options.log = enabled\n}\n","export type {\n IFrameObject,\n IFrameComponent,\n IFrameMouseData,\n IFrameResizedData,\n IFrameMessageData,\n IFrameScrollData,\n IFrameOptions,\n MessageData,\n} from './types'\n\nimport { LABEL } from '../common/consts'\nimport { isObject } from '../common/utils'\nimport ensureHasId from './checks/id'\nimport checkManualLogging from './checks/manual-logging'\nimport { errorBoundary, event as consoleEvent, warn } from './console'\nimport setupEventListenersOnce from './listeners'\nimport setupIframe from './setup'\nimport setupLogging from './setup/logging'\n\nexport default function connectResizer(options: Record<string, any>): (iframe: HTMLIFrameElement) => any {\n if (!isObject(options)) throw new TypeError('Options is not an object')\n\n setupEventListenersOnce()\n checkManualLogging(options)\n\n return (iframe: HTMLIFrameElement) => {\n const id = ensureHasId(iframe, options)\n\n if (LABEL in iframe) {\n consoleEvent(id, 'alreadySetup')\n warn(id, `Ignored iframe (${id}), already setup.`)\n } else {\n setupLogging(id, options)\n errorBoundary(id, setupIframe)(iframe, options)\n }\n\n return iframe?.iframeResizer\n }\n}\n"],"names":["VERSION","LABEL","SEPARATOR","CHILD_READY_MESSAGE","AUTO_RESIZE","BEFORE_UNLOAD","CLOSE","IN_PAGE_LINK","INIT","INIT_FROM_IFRAME","LAZY","LOAD","MESSAGE","MOUSE_ENTER","MOUSE_LEAVE","ONLOAD","PAGE_INFO","PARENT_INFO","PAGE_INFO_STOP","PARENT_INFO_STOP","RESET","RESIZE","SCROLL_BY","SCROLL_TO","SCROLL_TO_OFFSET","TITLE","MIN_SIZE","HEIGHT","WIDTH","OFFSET","OFFSET_SIZE","SCROLL","NEW_LINE","HIDDEN","CHILD","PARENT","STRING","NUMBER","OBJECT","FUNCTION","AUTO","BOLD","NONE","BOTH","VERTICAL","HORIZONTAL","MESSAGE_HEADER_LENGTH","MESSAGE_ID","MESSAGE_ID_LENGTH","RESET_REQUIRED_METHODS","INIT_EVENTS","EXPAND","COLLAPSE","LOG_OPTIONS","REMOVED_NEXT_VERSION","isObject","value","isString","isIframe","element","isolateUserCode","func","val","once","fn","done","args","hasOwnFallback","o","k","hasOwn","id","x","capitalizeFirstLetter","string","esModuleInterop","mod","typeAssert","type","error","deprecate","advise","change","old","replacement","info","iframeId","TAGS","keys","tags","lookup","_","tag","encode","s","filter","createFormatAdvise","formatLogMessage","message","settings","createConsoleGroup","acg","consoleEnabled","parent","getMyId","isLogEnabled","setupConsole","enabled","expand","consoleGroup","output","outputSwitched","log","debug","warn","event","purge","endAutoGroup","errorBoundary","vInfo","ver","mode","NORMAL","formatLogMsg","formatAdvise","identity","localFormatAdvise","deprecateAdvise","deprecateOption","onReadyDeprecated","messageData","defaults","count","newId","options","ensureHasId","iframe","consoleEvent","checkManualLogging","search","addEventListener","el","evt","removeEventListener","filterMsg","msg","index","dispatch","calleeMsg","logSent","route","displayMsg","HIGHLIGHT","FOREGROUND","postMessageTarget","sameOrigin","targetOrigin","trigger","sendTriggerMsg","eventName","autoResize","firstRun","tabVisible","getPaddingEnds","compStyle","top","bot","getBorderEnds","decodeMessage","data","height","ABOVE_TYPES","checkIframeExists","detectedIframe","isMessageFromIframe","checkAllowedOrigin","checkList","checkOrigin","origin","checkSingle","remoteHost","isMessageForUs","isMessageFromMetaParent","isMetaParent","checkSameDomain","checkVersion","version","on","funcName","onMessage","messageBody","getMessageBody","offset","lastMessage","onMouse","width","mousePos","coords","page","unsetPagePosition","getStoredPagePosition","setStoredPagePosition","position","getPagePosition","setPagePosition","setDimension","dimension","size","setSize","sizeHeight","sizeWidth","resizeIframe","disconnect","closeIframe","resetIframe","sendInfoToIframe","infoFunction","gate","requestType","throttle","frameId","gatedTrigger","stopInfoMonitor","stopFunction","startInfoMonitor","pending","sendInfo","stop","sendScroll","sendResize","setListener","listener","pageObserver","iframeObserver","start","getPageInfo","bodyPosition","iFramePosition","scrollY","scrollX","innerHeight","innerWidth","clientHeight","clientWidth","sendPageInfoToIframe","startPageInfoMonitor","stopPageInfoMonitor","getParentProps","scrollWidth","scrollHeight","offsetLeft","offsetTop","pageLeft","pageTop","scale","sendParentInfoToIframe","startParentInfoMonitor","stopParentInfoMonitor","getElementPosition","target","iframePosition","pagePosition","scrollToLink","y","scrollBy","scrollRequestFromChild","addOffset","reposition","newPosition","scrollParent","calcOffset","scrollTo","scrollToOffset","jumpToTarget","hash","jumpToParent","inPageLink","location","hashData","checkTitle","title","setTitle","l","p","z","t","getModeData","getModeLabel","setMode","u","v","vAdvised","vInfoDisable","checkMode","childMode","consoleClear","preModeCheck","enableVInfo","routeMessage","sendIframeReady","source","initChild","iframeReady","iframeListener","setupEventListenersOnce","shownDuplicateIdWarning","checkUniqueId","elements","elementList","DEPRECATED_REMOVE_LISTENERS","DEPRECATED_RESIZE","attachMethods","resizer","anchor","V1_PADDING","INTERVAL","RESIZE_FROM","PUBLIC_METHODS","createOutgoingMessage","bodyBackground","bodyMargin","bodyPadding","heightCalculationMethod","inPageLinks","license","logExpand","mouseEvents","offsetHeight","offsetWidth","tolerance","widthCalculationMethod","ZERO","setupBodyMargin","getOrigin","url","allowsScriptsAndOrigin","sandbox","showWarning","src","initialisedFirstPage","waitForLoad","warnOnNoResponse","warning","initialised","loadErrorShown","msgTimeout","warningTimeout","AFTER_EVENT_STACK","isLazy","isInit","eventType","checkReset","addLoadListener","noContent","srcdoc","sendInit","init","createInitChild","checkOptions","checkWarningTimeout","setOffsetSize","offsetSize","newOffset","setDirection","direction","getTargetOrigin","setTargetOrigin","getPostMessageTarget","updateOptionName","oldName","newName","updateOptionNames","hasMouseEvents","processOptions","YES","NO","OMIT","setScrolling","setup","setupIframe","startLogging","isLogString","connectResizer","setupLogging"],"mappings":"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"}
package/index.umd.js CHANGED
@@ -1,20 +1,38 @@
1
- /*!
2
- * @preserve
3
- *
4
- * @module iframe-resizer/core 5.5.9 (umd) - 2026-02-06
5
- *
6
- * @license GPL-3.0 for non-commercial use only.
7
- * For commercial use, you must purchase a license from
8
- * https://iframe-resizer.com/pricing
9
- *
10
- * @description Keep same and cross domain iFrames sized to their content
11
- *
12
- * @author David J. Bradshaw <info@iframe-resizer.com>
13
- *
14
- * @see {@link https://iframe-resizer.com}
15
- *
16
- * @copyright (c) 2013 - 2026, David J. Bradshaw. All rights reserved.
17
- */
18
-
19
-
20
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("auto-console-group")):"function"==typeof define&&define.amd?define(["auto-console-group"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).createResizer=t(e.acg)}(this,function(e){"use strict";const t="5.5.9",i="iframeResizer",n=":",o="autoResize",r="init",a="iframeReady",s="load",l="message",c="onload",u="pageInfo",d="parentInfo",f="reset",p="resize",h="scroll",m="\n",g="child",y="parent",b="string",v="object",w="function",z="auto",$="none",j="both",T="vertical",I="horizontal",k="[iFrameSizer]",H=Object.freeze({max:1,scroll:1,bodyScroll:1,documentElementScroll:1}),x=Object.freeze({[c]:1,[r]:1,[a]:1}),M="expanded",O="collapsed",R=Object.freeze({[M]:1,[O]:1}),L="Use of the old name will be removed in a future version of <i>iframe-resizer</>.",S=(e,t,i,n)=>e.addEventListener(t,i,n||!1),E=(e,t,i)=>e.removeEventListener(t,i,!1),C=e=>{if(!e)return"";let t=-559038744,i=1103547984;for(let n,o=0;o<e.length;o++)n=e.codePointAt(o),t=Math.imul(t^n,2246822519),i=Math.imul(i^n,3266489917);return t^=Math.imul(t^i>>>15,1935289751),i^=Math.imul(i^t>>>15,3405138345),t^=i>>>16,i^=t>>>16,(2097152*(i>>>0)+(t>>>11)).toString(36)},W=e=>e.replace(/[A-Za-z]/g,e=>String.fromCodePoint((e<="Z"?90:122)>=(e=e.codePointAt(0)+19)?e:e-26)),G=["spjluzl","rlf","clyzpvu"],N=["<yi>Puchspk Spjluzl Rlf</><iy><iy>","<yi>Tpzzpun Spjluzl Rlf</><iy><iy>","Aopz spiyhyf pz hchpshisl dpao ivao Jvttlyjphs huk Vwlu-Zvbyjl spjluzlz.<iy><iy><i>Jvttlyjphs Spjluzl</><iy>Mvy jvttlyjphs bzl, <p>pmyhtl-ylzpgly</> ylxbpylz h svd jvza vul aptl spjluzl mll. Mvy tvyl pumvythapvu cpzpa <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</>.<iy><iy><i>Vwlu Zvbyjl Spjluzl</><iy>Pm fvb hyl bzpun aopz spiyhyf pu h uvu-jvttlyjphs vwlu zvbyjl wyvqlja aolu fvb jhu bzl pa mvy myll bukly aol alytz vm aol NWS C3 Spjluzl. Av jvumpyt fvb hjjlwa aolzl alytz, wslhzl zla aol <i>spjluzl</> rlf pu <p>pmyhtl-ylzpgly</> vwapvuz av <i>NWSc3</>.<iy><iy>Mvy tvyl pumvythapvu wslhzl zll: <b>oaawz://pmyhtl-ylzpgly.jvt/nws</>","<i>NWSc3 Spjluzl Clyzpvu</><iy><iy>Aopz clyzpvu vm <p>pmyhtl-ylzpgly</> pz ilpun bzlk bukly aol alytz vm aol <i>NWS C3</> spjluzl. Aopz spjluzl hssvdz fvb av bzl <p>pmyhtl-ylzpgly</> pu Vwlu Zvbyjl wyvqljaz, iba pa ylxbpylz fvby wyvqlja av il wbispj, wyvcpkl haaypibapvu huk il spjluzlk bukly clyzpvu 3 vy shaly vm aol NUB Nlulyhs Wbispj Spjluzl.<iy><iy>Pm fvb hyl bzpun aopz spiyhyf pu h uvu-vwlu zvbyjl wyvqlja vy dlizpal, fvb dpss ullk av wbyjohzl h svd jvza vul aptl jvttlyjphs spjluzl.<iy><iy>Mvy tvyl pumvythapvu cpzpa <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</>.","<iy><yi>Zvsv spjluzl kvlz uva zbwwvya jyvzz-kvthpu</><iy><iy>Av bzl <p>pmyhtl-ylzpgly</> dpao jyvzz kvthpu pmyhtlz fvb ullk lpaoly aol Wyvmlzzpvuhs vy Ibzpulzz spjluzlz. Mvy klahpsz vu bwnyhkl wypjpun wslhzl jvuahja pumv@pmyhtl-ylzpgly.jvt.","Pu whnl spurpun ylxbpylz h Wyvmlzzpvuhs vy Ibzpulzz spjluzl. Wslhzl zll <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</> mvy tvyl klahpsz."],A=["NWSc3","zvsv","wyv","ibzpulzz","vlt"],F=Object.fromEntries(["2cgs7fdf4xb","1c9ctcccr4z","1q2pc4eebgb","ueokt0969w","w2zxchhgqz","1umuxblj2e5","2b5sdlfhbev","zo4ui3arjo","oclbb4thgl"].map((e,t)=>[e,Math.max(0,t-1)])),P=e=>W(N[e]),B=e=>{const t=e[W(G[0])]||e[W(G[1])]||e[W(G[2])];if(!t)return-1;const i=t.split("-");let n=function(e=""){let t=-2;const i=C(W(e));return i in F&&(t=F[i]),t>4?t-4:t}(i[0]);return 0===n||(e=>e[2]===C(e[0]+e[1]))(i)||(n=-2),n},D=Object.hasOwn||((e,t)=>Object.prototype.hasOwnProperty.call(e,t)),q={br:"\n",rb:"",bb:"",b:"",i:"",u:"","/":""},U=Object.keys(q),J=new RegExp(`<(${U.join("|")})>`,"gi"),Z=(e,t)=>q[t]??"",V=e=>t=>e(typeof t===b?window.chrome?t.replace(J,Z):(e=>e.replaceAll("<br>",m).replaceAll(/<\/?[^>]+>/gi,""))(t):t),X={},Y=(_=e,_?.__esModule?_.default:_);var _;let K=!0;const Q=Y({expand:!1,label:y}),ee=e=>window.top===window.self?`parent(${e})`:`nested parent(${e})`;const te=e=>(t,...i)=>X[t]?X[t].console[e](...i):Q[e](...i);var ie;const ne=(ie="log",(e,...t)=>!0===(e=>X[e]?X[e].log:K)(e)?te(ie)(e,...t):null),oe=te("warn"),re=te("error"),ae=te("event"),se=te("purge"),le=te("endAutoGroup"),ce=te("errorBoundary");const ue=V(e=>e),de=(e,...t)=>X[e]?X[e].console.warn(...t.map(ue)):queueMicrotask(()=>{const n=V((e=>(...t)=>[`${i}(${e})`,...t].join(" "))(e));console?.warn(...t.map(n))}),fe=(e=>(t,i="renamed to")=>(n,o,r="",a="")=>e(a,`<rb>Deprecated ${t}(${n.replace("()","")})</>\n\nThe <b>${n}</> ${t.toLowerCase()} has been ${i} <b>${o}</>. ${r}Use of the old ${t.toLowerCase()} will be removed in a future version of <i>iframe-resizer</>.`))(de),pe=fe("Option");function he(e){const{checkOrigin:t,iframe:{id:i,src:n,sandbox:o},initialisedFirstPage:r,waitForLoad:a,warningTimeout:s}=e,l=(e=>{try{return new URL(e).origin}catch(e){return null}})(n);ae(i,"noResponse"),de(i,`<rb>No response from iframe</>\n\nThe iframe (<i>${i}</>) has not responded within ${s/1e3} seconds. Check <b>@iframe-resizer/child</> package has been loaded in the iframe.\n${t&&l?`\nThe <b>checkOrigin</> option is currently enabled. If the iframe redirects away from <i>${l}</>, then the connection to the iframe may be blocked by the browser. To disable this option, set <b>checkOrigin</> to <bb>false</> or an array of allowed origins. See <u>https://iframe-resizer.com/checkorigin</> for more information.\n`:""}${a&&!r?"\nThe <b>waitForLoad</> option is currently set to <bb>true</>. If the iframe loads before <i>iframe-resizer</> runs, this option will prevent <i>iframe-resizer</> initialising. To disable this option, set <b>waitForLoad</> to <bb>false</>.\n":""}${(e=>typeof e===v&&e.length>0&&!(e.contains("allow-scripts")&&e.contains("allow-same-origin")))(o)?"\nThe iframe has the <b>sandbox</> attribute, please ensure it contains both the <bb>allow-same-origin</> and <bb>allow-scripts</> values.\n":""}\nThis message can be ignored if everything is working, or you can set the <b>warningTimeout</> option to a higher value or zero to suppress this warning.\n`)}const me={};const ge=Object.freeze({autoResize:!0,bodyBackground:null,bodyMargin:null,bodyPadding:null,checkOrigin:!0,direction:T,firstRun:!0,inPageLinks:!1,heightCalculationMethod:z,id:"iFrameResizer",log:!1,logExpand:!1,license:void 0,mouseEvents:!0,offsetHeight:null,offsetWidth:null,postMessageTarget:null,sameDomain:!1,scrolling:!1,sizeHeight:!0,sizeWidth:!1,tolerance:0,waitForLoad:!1,warningTimeout:5e3,widthCalculationMethod:z,onBeforeClose:()=>!0,onAfterClose(){},onInit:!1,onMessage:null,onMouseEnter(){},onMouseLeave(){},onReady:e=>{typeof X[e.id].onInit===w&&(pe("init()","onReady()","",e.id),X[e.id].onInit(e))},onResized(){},onScroll:()=>!0}),ye={position:null,version:t};function be(i){function a(){ke(F),Te(D),C("onResized",F)}function c(e){if("border-box"!==e.boxSizing)return 0;return(e.paddingTop?parseInt(e.paddingTop,10):0)+(e.paddingBottom?parseInt(e.paddingBottom,10):0)}function m(e){if("border-box"!==e.boxSizing)return 0;return(e.borderTopWidth?parseInt(e.borderTopWidth,10):0)+(e.borderBottomWidth?parseInt(e.borderBottomWidth,10):0)}const g=e=>N.slice(N.indexOf(n)+7+e);const v=(e,t)=>(i,n)=>{const o={};var r,a;r=function(){xe(`${i} (${e})`,`${e}:${t()}`,n)},o[a=n]||(r(),o[a]=requestAnimationFrame(()=>{o[a]=null}))},w=(e,t)=>()=>{let i=!1;const n=t=>()=>{X[c]?i&&i!==t||(e(t,c),i=t,requestAnimationFrame(()=>{i=!1})):l()},o=n(h),r=n("resize window");function a(e,t){t(window,h,o),t(window,p,r)}function l(){ae(c,`stop${t}`),a(0,E),u.disconnect(),d.disconnect(),E(X[c].iframe,s,l)}const c=D,u=new ResizeObserver(n("pageObserver")),d=new ResizeObserver(n("iframeObserver"));X[c]&&(X[c][`stop${t}`]=l,S(X[c].iframe,s,l),a(0,S),u.observe(document.body,{attributes:!0,childList:!0,subtree:!0}),d.observe(X[c].iframe,{attributes:!0,childList:!1,subtree:!1}))},z=e=>()=>{e in X[D]&&(X[D][e](),delete X[D][e])},$=v(u,function(){const e=document.body.getBoundingClientRect(),t=F.iframe.getBoundingClientRect(),{scrollY:i,scrollX:n,innerHeight:o,innerWidth:r}=window,{clientHeight:a,clientWidth:s}=document.documentElement;return JSON.stringify({iframeHeight:t.height,iframeWidth:t.width,clientHeight:Math.max(a,o||0),clientWidth:Math.max(s,r||0),offsetTop:parseInt(t.top-e.top,10),offsetLeft:parseInt(t.left-e.left,10),scrollTop:i,scrollLeft:n,documentHeight:a,documentWidth:s,windowHeight:o,windowWidth:r})}),j=v(d,function(){const{iframe:e}=F,{scrollWidth:t,scrollHeight:i}=document.documentElement,{width:n,height:o,offsetLeft:r,offsetTop:a,pageLeft:s,pageTop:l,scale:c}=window.visualViewport;return JSON.stringify({iframe:e.getBoundingClientRect(),document:{scrollWidth:t,scrollHeight:i},viewport:{width:n,height:o,offsetLeft:r,offsetTop:a,pageLeft:s,pageTop:l,scale:c}})}),T=w($,"PageInfo"),I=w(j,"ParentInfo"),H=z("stopPageInfo"),x=z("stopParentInfo");function M(e){const t=e.getBoundingClientRect();return $e(),{x:Number(t.left)+Number(ye.position.x),y:Number(t.top)+Number(ye.position.y)}}function O(t){const i=t?M(F.iframe):{x:0,y:0};ne(D,`Reposition requested (offset x:%c${i.x}%c y:%c${i.y})`,e.HIGHLIGHT,e.FOREGROUND,e.HIGHLIGHT);const n=((e,t)=>({x:e.width+t.x,y:e.height+t.y}))(F,i),o=window.parentIframe||window.parentIFrame;o?function(e,i){setTimeout(()=>e["scrollTo"+(t?"Offset":"")](i.x,i.y))}(o,n):function(e){ye.position=e,R(D)}(n)}function R(e){const{x:t,y:i}=ye.position,n=X[e]?.iframe;!1!==C("onScroll",{iframe:n,top:i,left:t,x:t,y:i})?Te(e):je()}function L(e){let t={};if(0===F.width&&0===F.height){const e=g(9).split(n);t={x:e[1],y:e[0]}}else t={x:F.width,y:F.height};C(e,{iframe:F.iframe,screenX:Number(t.x),screenY:Number(t.y),type:F.type})}const C=(e,t)=>ve(D,e,t);function W(){const{height:i,iframe:n,msg:s,type:c,width:p}=F;switch(X[D]?.firstRun&&function(){if(!X[D])return;Le(D,F.mode),X[D].firstRun=!1}(),c){case"close":ze(n);break;case l:m=g(6),C("onMessage",{iframe:F.iframe,message:JSON.parse(m)});break;case"mouseenter":L("onMouseEnter");break;case"mouseleave":L("onMouseLeave");break;case"beforeUnload":ne(D,"Ready state reset"),X[D].initialised=!1;break;case o:X[D].autoResize=JSON.parse(g(9));break;case"scrollBy":!function(){const t=F.width,i=F.height,n=window.parentIframe||window.parentIFrame||window;ne(D,`scrollBy: x: %c${t}%c y: %c${i}`,e.HIGHLIGHT,e.FOREGROUND,e.HIGHLIGHT),n.scrollBy(t,i)}();break;case"scrollTo":O(!1);break;case"scrollToOffset":O(!0);break;case u:T();break;case d:I();break;case"pageInfoStop":H();break;case"parentInfoStop":x();break;case"inPageLink":!function(t){const i=t.split("#")[1]||"",n=decodeURIComponent(i);let o=document.getElementById(n)||document.getElementsByName(n)[0];o?function(){const t=M(o);ne(D,`Moving to in page link: %c#${i}`,e.HIGHLIGHT),ye.position={x:t.x,y:t.y},R(D),window.location.hash=i}():window.top!==window.self&&function(){const e=window.parentIframe||window.parentIFrame;e&&e.moveToAnchor(i)}()}(g(9));break;case"title":!function(t,i){X[i]?.syncTitle&&(X[i].iframe.title=t,ne(i,`Set iframe title attribute: %c${t}`,e.HIGHLIGHT))}(s,D);break;case f:Ie(F);break;case r:a(),function(e){try{X[e].sameOrigin=!!X[e]?.iframe?.contentWindow?.iframeChildListener}catch(t){X[e].sameOrigin=!1}}(D),(h=s)!==t&&(void 0!==h||de(D,"<rb>Legacy version detected in iframe</>\n\nDetected legacy version of child page script. It is recommended to update the page in the iframe to use <b>@iframe-resizer/child</>.\n\nSee <u>https://iframe-resizer.com/setup/#child-page-setup</> for more details.\n")),X[D].initialised=!0,C("onReady",n);break;default:if(0===p&&0===i)return void oe(D,`Unsupported message received (${c}), this is likely due to the iframe containing a later version of iframe-resizer than the parent page`);if(0===p||0===i)return;if(document.hidden)return;a()}var h,m}function G(e){if(!X[e])throw new Error(`${F.type} No settings for ${e}. Message was: ${N}`)}let N=i.data;if("[iFrameResizerChild]Ready"===N)return A=i.source,void Object.values(X).forEach((e=>({initChild:t,postMessageTarget:i})=>{e===i&&t()})(A));var A;if(!(e=>k===`${e}`.slice(0,13)&&e.slice(13).split(n)[0]in X)(N)){if(typeof N!==b)return;return void ae(y,"ignoredMessage")}const F=function(e){const t=e.slice(13).split(n),i=t[1]?Number(t[1]):0,o=X[t[0]]?.iframe,r=getComputedStyle(o),a={iframe:o,id:t[0],height:i+c(r)+m(r),width:Number(t[2]),type:t[3],msg:t[4]};return t[5]&&(a.mode=t[5]),a}(N),{id:P,type:B}=F,D=P;D?(ae(D,B),ce(D,function(e){G(D),F.type in{true:1,false:1,undefined:1}||(null!==F.iframe||(oe(D,`The iframe (${F.id}) was not found.`),0))&&function(){const{origin:e,sameOrigin:t}=i;if(t)return!0;let n=X[D]?.checkOrigin;if(n&&"null"!=`${e}`&&!(n.constructor===Array?function(){let t=0,i=!1;for(;t<n.length;t++)if(n[t]===e){i=!0;break}return i}():function(){const t=X[D]?.remoteHost;return e===t}()))throw new Error(`Unexpected message received from: ${e} for ${F.iframe.id}. Message was: ${i.data}. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.`);return!0}()&&W()})(N)):oe("","iframeResizer received messageData without id, message was: ",N)}function ve(e,t,i){let n=null,o=null;if(X[e]){if(n=X[e][t],typeof n!==w)throw new TypeError(`${t} on iFrame[${e}] is not a function`);if("onBeforeClose"===t||"onScroll"===t)try{o=n(i)}catch(i){console.error(i),oe(e,`Error in ${t} callback`)}else((e,...t)=>{setTimeout(()=>e(...t),0)})(n,i)}return o}function we(e){const{id:t}=e;delete X[t],delete e.iframeResizer}function ze(e){const{id:t}=e;if(!1!==ve(t,"onBeforeClose",t)){try{e.parentNode&&e.remove()}catch(e){oe(t,e)}ve(t,"onAfterClose",t),we(e)}}function $e(e){null===ye.position&&(ye.position={x:window.scrollX,y:window.scrollY})}function je(){ye.position=null}function Te(t){null!==ye.position&&(window.scrollTo(ye.position.x,ye.position.y),ne(t,`Set page position: %c${ye.position.x}%c, %c${ye.position.y}`,e.HIGHLIGHT,e.FOREGROUND,e.HIGHLIGHT),je())}function Ie(e){$e(e.id),ke(e),xe(f,f,e.id)}function ke(t){function i(i){const o=`${t[i]}px`;t.iframe.style[i]=o,ne(n,`Set ${i}: %c${o}`,e.HIGHLIGHT)}const{id:n}=t,{sizeHeight:o,sizeWidth:r}=X[n];o&&i("height"),r&&i("width")}const He=e=>e.split(n).filter((e,t)=>19!==t).join(n);function xe(t,i,n){function o(o){const r=t in x?He(i):i;ne(n,o,e.HIGHLIGHT,e.FOREGROUND,e.HIGHLIGHT),ne(n,`Message data: %c${r}`,e.HIGHLIGHT)}ae(n,t),X[n]&&(X[n]?.postMessageTarget?function(){const{iframe:e,postMessageTarget:r,sameOrigin:a,targetOrigin:s}=X[n];if(a)try{return e.contentWindow.iframeChildListener(k+i),void o(`Sending message to iframe %c${n}%c via same origin%c`)}catch(e){t in x?X[n].sameOrigin=!1:oe(n,"Same origin messaging failed, falling back to postMessage")}o(`Sending message to iframe: %c${n}%c targetOrigin: %c${s}`),r.postMessage(k+i,s)}():oe(n,`Iframe(${n}) not found`))}let Me=0,Oe=!1,Re=!1;function Le(i,n=-3){if(Oe)return;const o=Math.max(X[i].mode,n);if(o>X[i].mode&&(X[i].mode=o),o<0)throw se(i),X[i].vAdvised||de(i||"Parent",`${P(o+2)}${P(2)}`),X[i].vAdvised=!0,P(o+2).replace(/<\/?[a-z][^>]*>|<\/>/gi,"");o>0&&Re||function(t,i){queueMicrotask(()=>console.info(`%ciframe-resizer ${t}`,K||i<1?"font-weight: bold;":e.NORMAL))}(`v${t} (${(e=>W(A[e]))(o)})`,o),o<1&&de("Parent",P(3)),Oe=!0}function Se(){!0!==document.hidden&&((e,t)=>{Object.values(X).filter(({autoResize:e,firstRun:t})=>e&&!t).forEach(({iframe:i})=>xe(e,t,i.id))})("tabVisible",p)}const Ee=(e=>{let t=!1;return function(){return t?void 0:(t=!0,Reflect.apply(e,this,arguments))}})(()=>{S(window,l,be),S(document,"visibilitychange",Se),window.iframeParentListener=e=>setTimeout(()=>be({data:e,sameOrigin:!0}))});return t=>u=>{function d(){X[W]?.heightCalculationMethod in H&&Ie({iframe:u,height:1,width:1,type:r})}function f(){if(X[W]){const{iframe:e}=X[W],t={close:ze.bind(null,e),disconnect:we.bind(null,e),removeListeners(){de(W,`<rb>Deprecated Method Name</>\n\nThe <b>removeListeners()</> method has been renamed to <b>disconnect()</>. ${L}\n`),this.disconnect()},resize(){de(W,"<rb>Deprecated Method</>\n\nUse of the <b>resize()</> method from the parent page is deprecated and will be removed in a future version of <i>iframe-resizer</>. As their are no longer any edge cases that require triggering a resize from the parent page, it is recommended to remove this method from your code."),xe.bind(null,"Window resize",p,W)},moveToAnchor(e){((e,t,i)=>{if(typeof e!==t)throw new TypeError(`${i} is not a ${n=t,n.charAt(0).toUpperCase()+n.slice(1)}`);var n})(e,b,"moveToAnchor(anchor) anchor"),xe("Move to anchor",`moveToAnchor:${e}`,W)},sendMessage(e){e=JSON.stringify(e),xe(l,`${l}:${e}`,W)}};e.iframeResizer=t,e.iFrameResizer=t}}function h(e,t){const i=i=>()=>{if(!X[e])return;const{firstRun:n,iframe:o}=X[e];xe(i,t,e),(e=>e===r)(i)&&(e=>"lazy"===e.loading)(o)||function(e,t){const i=t[e],{msgTimeout:n,warningTimeout:o}=i;o&&(n&&clearTimeout(n),i.msgTimeout=setTimeout(function(){const i=t[e];void 0!==i&&((e=>{e.msgTimeout=void 0})(i),function(e){const{initialised:t}=e;return t&&(e.initialisedFirstPage=!0),t}(i)||he(i))},o))}(e,X),n||d()},{iframe:n}=X[e];X[e].initChild=i(a),function(e,t){S(e,s,()=>setTimeout(t,1))}(n,i(c)),function(e,t){const{iframe:i,waitForLoad:n}=X[e];!0!==n&&((e=>{const{src:t,srcdoc:i}=e;return!i&&(null==t||""===t||"about:blank"===t)})(i)?setTimeout(()=>{ae(e,"noContent"),ne(e,"No content detected in the iframe, delaying initialisation")}):setTimeout(t))}(e,i(r))}function y(e){return e?(("sizeWidth"in e||"sizeHeight"in e||o in e)&&de(W,`<rb>Deprecated Option</>\n\nThe <b>sizeWidth</>, <b>sizeHeight</> and <b>autoResize</> options have been replaced with new <b>direction</> option which expects values of <bb>${T}</>, <bb>${I}</>, <bb>${j}</> or <bb>${$}</>.\n`),e):{}}function w(e){const t=X[e]?.iframe?.title;return""===t||void 0===t}function k(e,t){D(X[W],e)&&(de(W,`<rb>Deprecated option</>\n\nThe <b>${e}</> option has been renamed to <b>${t}</>. ${L}`),X[W][t]=X[W][e],delete X[W][e])}const x=e=>D(e,"onMouseEnter")||D(e,"onMouseLeave");function E(t){var i,n;X[W]={...X[W],iframe:u,remoteHost:u?.src.split("/").slice(0,3).join("/"),...ge,...y(t),mouseEvents:x(t),mode:B(t),syncTitle:w(W)},k("offset","offsetSize"),k("onClose","onBeforeClose"),k("onClosed","onAfterClose"),ae(W,"setup"),function(){const{direction:e}=X[W];switch(e){case T:break;case I:X[W].sizeHeight=!1;case j:X[W].sizeWidth=!0;break;case $:X[W].sizeWidth=!1,X[W].sizeHeight=!1,X[W].autoResize=!1;break;default:throw new TypeError(W,`Direction value of "${e}" is not valid`)}}(),(i=t?.offsetSize||t?.offset)&&(X[W].direction===T?X[W].offsetHeight=i:X[W].offsetWidth=i),X[W].warningTimeout||ne(W,"warningTimeout:%c disabled",e.HIGHLIGHT),null===X[W].postMessageTarget&&(X[W].postMessageTarget=u.contentWindow),X[W].targetOrigin=!0===X[W].checkOrigin?""===(n=X[W].remoteHost)||null!==n.match(/^(about:blank|javascript:|file:\/\/)/)?"*":n:"*"}const C=()=>i in u,W=function(e){if(e&&typeof e!==b)throw new TypeError("Invalid id for iFrame. Expected String");return""!==e&&e||(e=function(){let e=t?.id||ge.id+Me++;return null!==document.getElementById(e)&&(e+=Me++),e}(),u.id=e,ae(e,"assignId")),e}(u.id);if(typeof t!==v)throw new TypeError("Options is not an object");return function(e){const{search:t}=window.location;t.includes("ifrlog")&&(e.log=O,e.logExpand=t.includes("ifrlog=expanded"))}(t),function(e,t){const i=D(t,"log"),n=typeof t.log===b,o=i?!!n||t.log:ge.log;D(t,"logExpand")||(t.logExpand=i&&n?t.log===M:ge.logExpand),function(e){-1===e?.log&&(e.log=!1,Re=!0)}(t),function({enabled:e,expand:t,iframeId:i}){const n=Y({expand:t,label:ee(i)});K=e,X[i]||(X[i]={console:n})}({enabled:o,expand:t.logExpand,iframeId:e}),n&&!(t.log in R)&&re(e,'Invalid value for options.log: Accepted values are "expanded" and "collapsed"'),t.log=o}(W,t),ce(W,function(e){C()?oe(W,`Ignored iframe (${W}), already setup.`):(E(e),function(e){if(!0===me[e])return!1;const t=document.querySelectorAll(`iframe#${CSS.escape(e)}`);if(t.length<=1)return!0;me[e]=!0;const i=Array.from(t).flatMap(e=>[m,e,m]);de(e,`<rb>Duplicate ID attributes detected</>\n\nThe <b>${e}</> ID is not unique. Having multiple iframes on the same page with the same ID causes problems with communication between the iframe and parent page. Please ensure that the ID of each iframe has a unique value.\n\nFound <bb>${t.length}</> iframes with the <b>${e}</> ID:`,...i,m)}(W),function(){if(Oe)return;const{mode:e}=X[W];-1!==e&&Le(W,e)}(),Ee(),function(){switch(u.style.overflow=!1===X[W]?.scrolling?"hidden":z,X[W]?.scrolling){case"omit":break;case!0:u.scrolling="yes";break;case!1:u.scrolling="no";break;default:u.scrolling=X[W]?X[W].scrolling:"no"}}(),function(){const{bodyMargin:e}=X[W];"number"!=typeof e&&"0"!==e||(X[W].bodyMargin=`${e}px`)}(),h(W,function(e){const{autoResize:t,bodyBackground:i,bodyMargin:o,bodyPadding:r,heightCalculationMethod:a,inPageLinks:s,license:l,log:c,logExpand:u,mouseEvents:d,offsetHeight:f,offsetWidth:p,mode:h,sizeHeight:m,sizeWidth:y,tolerance:b,widthCalculationMethod:v}=X[e];return[e,"8",y,c,"32",!0,t,o,a,i,r,b,s,g,v,d,f,p,m,l,ye.version,h,"",u].join(n)}(W)),f(),le(W))})(t),u?.iframeResizer}});
1
+ (function(r,v){typeof exports=="object"&&typeof module<"u"?module.exports=v(require("auto-console-group")):typeof define=="function"&&define.amd?define(["auto-console-group"],v):(r=typeof globalThis<"u"?globalThis:r||self,r.connectResizer=v(r.acg))})(this,(function(r){"use strict";const v="6.0.0-beta.0",Y="iframeResizer",_e="[iFrameResizerChild]Ready",X="autoResize",We="beforeUnload",Be="close",De="inPageLink",R="init",K="iframeReady",Ue="lazy",P="load",L="message",Ve="mouseenter",qe="mouseleave",Q="onload",ee="pageInfo",te="parentInfo",Ze="pageInfoStop",Je="parentInfoStop",x="reset",C="resize",Ye="scrollBy",Xe="scrollTo",Ke="scrollToOffset",Qe="title",et="height",tt="width",nt="offset",ot="offsetSize",ne="scroll",it="hidden",st="child",F="parent",_="string",rt="number",oe="object",ie="function",W="auto",ct="font-weight: bold;",se="none",re="both",$="vertical",ce="horizontal",at=L.length,k="[iFrameSizer]",B=k.length,lt=Object.freeze({max:1,scroll:1,bodyScroll:1,documentElementScroll:1}),ae=Object.freeze({[Q]:1,[R]:1,[K]:1}),D="expanded",U="collapsed",ut=Object.freeze({[D]:1,[U]:1}),le="Use of the old name will be removed in a future version of <i>iframe-resizer</>.",ue=e=>typeof e===oe&&e!==null,V=e=>typeof e===_;function ft(e){if(!ue(e))return!1;try{return e.tagName==="IFRAME"||e instanceof HTMLIFrameElement}catch{return!1}}const dt=(e,...t)=>setTimeout(()=>e(...t),0),pt=e=>{let t=!1;return function(...n){return t?void 0:(t=!0,e.apply(this,n))}},ht=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),M=(e,t)=>Object.hasOwn?Object.hasOwn(e,t):ht(e,t),gt=e=>e,mt=e=>e.charAt(0).toUpperCase()+e.slice(1),bt=e=>e?.__esModule?e.default:e,yt=(e,t,n)=>{if(typeof e!==t)throw new TypeError(`${n} is not a ${mt(t)}`)},vt=e=>(t,n="renamed to")=>(o,s,c="",a="")=>e(a,`<rb>Deprecated ${t}(${o.replace("()","")})</>
2
+
3
+ The <b>${o}</> ${t.toLowerCase()} has been ${n} <b>${s}</>. ${c}Use of the old ${t.toLowerCase()} will be removed in a future version of <i>iframe-resizer</>.`),fe={br:`
4
+ `,rb:"\x1B[31;1m",bb:"\x1B[34;1m",b:"\x1B[1m",i:"\x1B[3m",u:"\x1B[4m","/":"\x1B[m"},wt=Object.keys(fe),zt=new RegExp(`<(${wt.join("|")})>`,"gi"),It=(e,t)=>fe[t]??"",Et=e=>e.replace(zt,It),Tt=e=>e.replaceAll("<br>",`
5
+ `).replaceAll(/<\/?[^>]+>/gi,""),de=e=>t=>e(V(t)?window.chrome?Et(t):Tt(t):t),i={},pe=bt(r);let q=!0;const Ot=pe({expand:!1,label:F}),Ht=e=>window.top===window.self?`parent(${e})`:`nested parent(${e})`,Rt=e=>i[e]?i[e].log:q;function Lt({enabled:e,expand:t,iframeId:n}){const o=pe({expand:t,label:Ht(n)});q=e,i[n]||(i[n]={console:o})}const w=e=>(t,...n)=>i[t]?i[t].console[e](...n):Ot[e](...n),he=e=>(t,...n)=>Rt(t)===!0?w(e)(t,...n):null,u=he("log"),m=u,Mt=he("debug"),z=w("warn"),St=w("error"),y=w("event"),$t=w("purge"),kt=w("endAutoGroup"),ge=w("errorBoundary");function At(e,t){queueMicrotask(()=>console.info(`%ciframe-resizer ${e}`,q||t<1?ct:r.NORMAL))}const Gt=e=>(...t)=>[`${Y}(${e})`,...t].join(" "),jt=de(gt),b=(e,...t)=>i[e]?i[e].console.warn(...t.map(jt)):queueMicrotask(()=>{const n=de(Gt(e));console?.warn(...t.map(n))}),Nt=vt(b)("Option"),A=Object.freeze({autoResize:!0,bodyBackground:null,bodyMargin:null,bodyPadding:null,checkOrigin:!0,direction:$,firstRun:!0,inPageLinks:!1,heightCalculationMethod:W,id:"iFrameResizer",log:!1,logExpand:!1,license:void 0,mouseEvents:!0,offsetHeight:null,offsetWidth:null,postMessageTarget:null,sameDomain:!1,scrolling:!1,sizeHeight:!0,sizeWidth:!1,tolerance:0,waitForLoad:!1,warningTimeout:5e3,widthCalculationMethod:W,onBeforeClose:()=>!0,onAfterClose(){},onInit:!1,onMessage:null,onMouseEnter(){},onMouseLeave(){},onReady:e=>{typeof i[e.id].onInit===ie&&(Nt("init()","onReady()","",e.id),i[e.id].onInit(e))},onResized(){},onScroll:()=>!0});let me=0;function Pt(e){const t=e?.id||A.id+me++;return document.getElementById(t)===null?t:`${t}${me++}`}function xt(e,t){let{id:n}=e;if(n&&!V(n))throw new TypeError("Invalid id for iFrame. Expected String");return(!n||n==="")&&(n=Pt(t),e.id=n,y(n,"assignId"),u(n,`Added missing iframe ID: ${n} (${e.src})`)),n}function Ct(e){const{search:t}=window.location;t.includes("ifrlog")&&(e.log=U,e.logExpand=t.includes("ifrlog=expanded"))}const S=(e,t,n,o)=>e.addEventListener(t,n,o||!1),be=(e,t,n)=>e.removeEventListener(t,n,!1),Ft=e=>e.split(":").filter((t,n)=>n!==19).join(":");function _t(e,t,n){function o(f){const d=e in ae?Ft(t):t;m(n,f,r.HIGHLIGHT,r.FOREGROUND,r.HIGHLIGHT),m(n,`Message data: %c${d}`,r.HIGHLIGHT)}const{iframe:s,postMessageTarget:c,sameOrigin:a,targetOrigin:l}=i[n];if(a)try{s.contentWindow.iframeChildListener(k+t),o(`Sending message to iframe %c${n}%c via same origin%c`);return}catch{e in ae?(i[n].sameOrigin=!1,u(n,"New iframe does not support same origin")):z(n,"Same origin messaging failed, falling back to postMessage")}o(`Sending message to iframe: %c${n}%c targetOrigin: %c${l}`),c.postMessage(k+t,l)}function I(e,t,n){if(y(n,e),!i[n]?.postMessageTarget){z(n,"Iframe not found");return}_t(e,t,n)}const Wt=(e,t)=>Object.values(i).filter(({autoResize:n,firstRun:o})=>n&&!o).forEach(({iframe:n})=>I(e,t,n.id));function Bt(){document.hidden!==!0&&Wt("tabVisible",C)}function Dt(e){if(e.boxSizing!=="border-box")return 0;const t=e.paddingTop?parseInt(e.paddingTop,10):0,n=e.paddingBottom?parseInt(e.paddingBottom,10):0;return t+n}function Ut(e){if(e.boxSizing!=="border-box")return 0;const t=e.borderTopWidth?parseInt(e.borderTopWidth,10):0,n=e.borderBottomWidth?parseInt(e.borderBottomWidth,10):0;return t+n}function Vt(e){const t=e.slice(B).split(":"),n=t[1]?Number(t[1]):0,o=i[t[0]]?.iframe,s=getComputedStyle(o),c={iframe:o,id:t[0],height:n+Dt(s)+Ut(s),width:Number(t[2]),type:t[3],msg:t[4],message:t[4]};return t[5]&&(c.mode=t[5]),c}const qt={true:1,false:1,undefined:1};function Zt(e){const{id:t,msg:n,iframe:o}=e,s=ft(o);return s||(u(t,`Received: %c${n}`,r.HIGHLIGHT),z(t,"The target iframe was not found.")),s}function Jt(e,t){function n(){function f(){u(o,`Checking connection is from allowed list of origins: %c${l}`,r.HIGHLIGHT);for(const g of l)if(g===c)return!0;return!1}function d(){const g=i[o]?.remoteHost;return u(o,`Checking connection is from: %c${g}`,r.HIGHLIGHT),c===g}return l.constructor===Array?f():d()}const{id:o}=e,{data:s,origin:c}=t;if("sameOrigin"in t&&t.sameOrigin)return!0;let l=i[o]?.checkOrigin;if(l&&`${c}`!="null"&&!n())throw new Error(`Unexpected message received from: ${c} for ${o}. Message was: ${s}. This error can be disabled by setting the checkOrigin: false option or by providing an array of trusted domains.`);return!0}const Yt=e=>k===`${e}`.slice(0,B)&&e.slice(B).split(":")[0]in i;function Xt(e){const{id:t,type:n}=e,o=n in qt;return o&&u(t,"Ignoring init message from meta parent page"),o}function Kt(e){try{i[e].sameOrigin=!!i[e]?.iframe?.contentWindow?.iframeChildListener}catch{i[e].sameOrigin=!1}u(e,`sameOrigin: %c${i[e].sameOrigin}`,r.HIGHLIGHT)}function Qt(e,t){if(t!==v){if(t===void 0){b(e,`<rb>Legacy version detected in iframe</>
6
+
7
+ Detected legacy version of child page script. It is recommended to update the page in the iframe to use <b>@iframe-resizer/child</>.
8
+
9
+ See <u>https://iframe-resizer.com/setup/#child-page-setup</> for more details.
10
+ `);return}u(e,`Version mismatch (Child: %c${t}%c !== Parent: %c${v})`,r.HIGHLIGHT,r.FOREGROUND,r.HIGHLIGHT)}}function E(e,t,n){if(!i[e])return null;const o=i[e][t];if(typeof o!==ie)throw new TypeError(`${t} on iframe[${e}] is not a function`);if(t!=="onBeforeClose"&&t!=="onScroll")return dt(o,n);try{return o(n)}catch(s){return console.error(s),z(e,`Error in ${t} callback`),null}}function en(e,t){const{id:n,iframe:o}=e;u(n,`onMessage passed: {iframe: %c${n}%c, message: %c${t}%c}`,r.HIGHLIGHT,r.FOREGROUND,r.HIGHLIGHT,r.FOREGROUND),E(n,"onMessage",{iframe:o,message:JSON.parse(t)})}function G(e,t){const{lastMessage:n}=i[e];return n.slice(n.indexOf(":")+at+t)}function ye(e,t){const{id:n,iframe:o,height:s,type:c,width:a}=t;let l={x:0,y:0};if(a===0&&s===0){const f=G(n,9).split(":");l={x:f[1],y:f[0]}}else l={x:a,y:s};E(n,e,{iframe:o,screenX:Number(l.x),screenY:Number(l.y),type:c})}const p={position:null,version:v};function ve(){p.position=null}const tn=()=>p.position;function nn(e){p.position=e}function we(e){return p.position===null&&(p.position={x:window.scrollX,y:window.scrollY}),u(e,`Get page position: %c${p.position.x}%c, %c${p.position.y}`,r.HIGHLIGHT,r.FOREGROUND,r.HIGHLIGHT),p.position}function ze(e){p.position!==null&&(window.scrollTo(p.position.x,p.position.y),m(e,`Set page position: %c${p.position.x}%c, %c${p.position.y}`,r.HIGHLIGHT,r.FOREGROUND,r.HIGHLIGHT),ve())}function Ie(e,t){const{id:n}=t,o=`${t[e]}px`;i[n].iframe.style[e]=o,m(n,`Set ${e}: %c${o}`,r.HIGHLIGHT)}function Ee(e){const{id:t}=e,{sizeHeight:n,sizeWidth:o}=i[t];n&&Ie(et,e),o&&Ie(tt,e)}function Te(e){const{id:t}=e;Ee(e),ze(t),E(t,"onResized",e)}function Oe(e){const{id:t}=e;u(t,"Disconnected from iframe"),delete i[t],delete e.iframeResizer}function He(e){const{id:t}=e;if(E(t,"onBeforeClose",t)===!1){u(t,"Close iframe cancelled by onBeforeClose");return}u(t,`Removing iFrame: %c${t}`,r.HIGHLIGHT);try{e.parentNode&&e.remove()}catch(n){z(t,n)}E(t,"onAfterClose",t),Oe(e)}function Re(e){const{id:t,type:n}=e;u(t,`Size reset requested by ${n===R?"parent page":"child page"}`),we(t),Ee(e),I(x,x,t)}const Le=(e,t)=>{const n={};return(o,s)=>{const{iframe:c}=i[s];function a(f,d){n[d]||(f(),n[d]=requestAnimationFrame(()=>{n[d]=null}))}function l(){I(`${o} (${e})`,`${e}:${t(c)}`,s)}a(l,s)}},Me=e=>t=>{e in i[t]&&(i[t][e](),delete i[t][e])},Se=(e,t)=>n=>{let o=!1;const s=h=>()=>{i[n]?(!o||o===h)&&(e(h,n),o=h,requestAnimationFrame(()=>{o=!1})):f()},c=s(ne),a=s("resize window");function l(h,H){u(n,`${h}listeners for send${t}`),H(window,ne,c),H(window,C,a)}function f(){y(n,`stop${t}`),l("Remove ",be),g.disconnect(),O.disconnect(),i[n]&&be(i[n].iframe,P,f)}function d(){l("Add ",S),g.observe(document.body),O.observe(i[n].iframe)}const g=new ResizeObserver(s("pageObserver")),O=new ResizeObserver(s("iframeObserver"));i[n]&&(i[n][`stop${t}`]=f,S(i[n].iframe,P,f),d())};function on(e){const t=document.body.getBoundingClientRect(),n=e.getBoundingClientRect(),{scrollY:o,scrollX:s,innerHeight:c,innerWidth:a}=window,{clientHeight:l,clientWidth:f}=document.documentElement;return JSON.stringify({iframeHeight:n.height,iframeWidth:n.width,clientHeight:Math.max(l,c||0),clientWidth:Math.max(f,a||0),offsetTop:Math.trunc(n.top-t.top),offsetLeft:Math.trunc(n.left-t.left),scrollTop:o,scrollLeft:s,documentHeight:l,documentWidth:f,windowHeight:c,windowWidth:a})}const sn=Le(ee,on),rn=Se(sn,"PageInfo"),cn=Me("stopPageInfo");function an(e){const{scrollWidth:t,scrollHeight:n}=document.documentElement,{width:o,height:s,offsetLeft:c,offsetTop:a,pageLeft:l,pageTop:f,scale:d}=window.visualViewport;return JSON.stringify({iframe:e.getBoundingClientRect(),document:{scrollWidth:t,scrollHeight:n},viewport:{width:o,height:s,offsetLeft:c,offsetTop:a,pageLeft:l,pageTop:f,scale:d}})}const ln=Le(te,an),un=Se(ln,"ParentInfo"),fn=Me("stopParentInfo");function $e(e){const t=e.getBoundingClientRect(),n=we(e.id);return{x:Number(t.left)+Number(n.x),y:Number(t.top)+Number(n.y)}}function ke(e){const{x:t,y:n}=tn(),o=i[e]?.iframe;if(E(e,"onScroll",{iframe:o,top:n,left:t,x:t,y:n})===!1){ve();return}ze(e)}function dn(e){const{id:t,height:n,width:o}=e,s=window.parentIframe||window.parentIFrame||window;m(t,`scrollBy: x: %c${o}%c y: %c${n}`,r.HIGHLIGHT,r.FOREGROUND,r.HIGHLIGHT),s.scrollBy(o,n)}const Ae=e=>t=>{function n(h){nn(h),ke(c)}function o(h,H){h[`scrollTo${e?"Offset":""}`](H.x,H.y)}const s=h=>({x:f+h.x,y:l+h.y}),{id:c,iframe:a,height:l,width:f}=t,d=e?$e(a):{x:0,y:0},g=s(d),O=window.parentIframe||window.parentIFrame;m(c,`Reposition requested (offset x:%c${d.x}%c y:%c${d.y})`,r.HIGHLIGHT,r.FOREGROUND,r.HIGHLIGHT),O?o(O,g):n(g)},pn=Ae(!1),hn=Ae(!0);function gn(e,t,n){const{x:o,y:s}=$e(n);m(e,`Moving to in page link: %c#${t}`,r.HIGHLIGHT),p.position={x:o,y:s},ke(e),window.location.hash=t}function mn(e,t){const n=window.parentIframe||window.parentIFrame;if(!n){u(e,`In page link #${t} not found`);return}n.moveToAnchor(t)}function bn(e,t){const n=t.split("#")[1]||"",o=decodeURIComponent(n),s=document.getElementById(o)||document.getElementsByName(o)[0];if(s){gn(e,n,s);return}if(window.top===window.self){u(e,`In page link #${n} not found`);return}mn(e,n)}function yn(e){const t=i[e]?.iframe?.title;return t===""||t===void 0}function vn(e,t){i[e]?.syncTitle&&(i[e].iframe.title=t,m(e,`Set iframe title attribute: %c${t}`,r.HIGHLIGHT))}const Ge=e=>{if(!e)return"";let t=-559038744,n=1103547984;for(let o,s=0;s<e.length;s++)o=e.codePointAt(s),t=Math.imul(t^o,2246822519),n=Math.imul(n^o,3266489917);return t^=Math.imul(t^n>>>15,1935289751),n^=Math.imul(n^t>>>15,3405138345),t^=n>>>16,n^=t>>>16,(2097152*(n>>>0)+(t>>>11)).toString(36)},T=e=>e.replace(/[A-Za-z]/g,t=>String.fromCodePoint((t<="Z"?90:122)>=(t=t.codePointAt(0)+19)?t:t-26)),j=["spjluzl","rlf","clyzpvu","rlf2"],wn=["<yi>Puchspk Spjluzl Rlf</><iy><iy>","<yi>Tpzzpun Spjluzl Rlf</><iy><iy>","Aopz spiyhyf pz hchpshisl dpao ivao Jvttlyjphs huk Vwlu-Zvbyjl spjluzlz.<iy><iy><i>Jvttlyjphs Spjluzl</><iy>Mvy jvttlyjphs bzl, <p>pmyhtl-ylzpgly</> ylxbpylz h svd jvza vul aptl spjluzl mll. Mvy tvyl pumvythapvu cpzpa <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</>.<iy><iy><i>Vwlu Zvbyjl Spjluzl</><iy>Pm fvb hyl bzpun aopz spiyhyf pu h uvu-jvttlyjphs vwlu zvbyjl wyvqlja aolu fvb jhu bzl pa mvy myll bukly aol alytz vm aol NWS C3 Spjluzl. Av jvumpyt fvb hjjlwa aolzl alytz, wslhzl zla aol <i>spjluzl</> rlf pu <p>pmyhtl-ylzpgly</> vwapvuz av <i>NWSc3</>.<iy><iy>Mvy tvyl pumvythapvu wslhzl zll: <b>oaawz://pmyhtl-ylzpgly.jvt/nws</>","<i>NWSc3 Spjluzl Clyzpvu</><iy><iy>Aopz clyzpvu vm <p>pmyhtl-ylzpgly</> pz ilpun bzlk bukly aol alytz vm aol <i>NWS C3</> spjluzl. Aopz spjluzl hssvdz fvb av bzl <p>pmyhtl-ylzpgly</> pu Vwlu Zvbyjl wyvqljaz, iba pa ylxbpylz fvby wyvqlja av il wbispj, wyvcpkl haaypibapvu huk il spjluzlk bukly clyzpvu 3 vy shaly vm aol NUB Nlulyhs Wbispj Spjluzl.<iy><iy>Pm fvb hyl bzpun aopz spiyhyf pu h uvu-vwlu zvbyjl wyvqlja vy dlizpal, fvb dpss ullk av wbyjohzl h svd jvza vul aptl jvttlyjphs spjluzl.<iy><iy>Mvy tvyl pumvythapvu cpzpa <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</>.","<iy><yi>Zvsv spjluzl kvlz uva zbwwvya jyvzz-kvthpu</><iy><iy>Av bzl <p>pmyhtl-ylzpgly</> dpao jyvzz kvthpu pmyhtlz fvb ullk lpaoly aol Wyvmlzzpvuhs vy Ibzpulzz spjluzlz. Mvy klahpsz vu bwnyhkl wypjpun wslhzl jvuahja pumv@pmyhtl-ylzpgly.jvt.","Pu whnl spurpun ylxbpylz h Wyvmlzzpvuhs vy Ibzpulzz spjluzl. Wslhzl zll <b>oaawz://pmyhtl-ylzpgly.jvt/wypjpun</> mvy tvyl klahpsz."],zn=["NWSc3","zvsv","wyv","ibzpulzz","vlt"],je=Object.fromEntries(["2cgs7fdf4xb","1c9ctcccr4z","1q2pc4eebgb","ueokt0969w","w2zxchhgqz","1umuxblj2e5","2b5sdlfhbev","zo4ui3arjo","oclbb4thgl"].map((e,t)=>[e,Math.max(0,t-1)])),N=e=>T(wn[e]),In=e=>T(zn[e]),En=e=>{const t=e[T(j[0])]||e[T(j[1])]||e[T(j[2])]||e[T(j[3])];if(!t)return-1;const n=t.split("-");let o=(function(s=""){let c=-2;const a=Ge(T(s));return a in je&&(c=je[a]),c>4?c-4:c})(n[0]);return o===0||(s=>s[2]===Ge(s[0]+s[1]))(n)||(o=-2),o};let Z=!1,Ne=!1;function Pe(e,t=-3){if(Z)return;const n=Math.max(i[e].mode,t);if(n>i[e].mode&&(i[e].mode=n),n<0)throw $t(e),i[e].vAdvised||b(e||"Parent",`${N(n+2)}${N(2)}`),i[e].vAdvised=!0,N(n+2).replace(/<\/?[a-z][^>]*>|<\/>/gi,"");n>0&&Ne||At(`v${v} (${In(n)})`,n),n<1&&b("Parent",N(3)),Z=!0}function Tn(e){if(Z)return;const{mode:t}=i[e];t!==-1&&Pe(e,t)}function On(e){e?.log===-1&&(e.log=!1,Ne=!0)}function Hn(e,t){i[e]&&(u(e,`First run for ${e}`),Pe(e,t!==void 0?Number(t):void 0),i[e].firstRun=!1)}function Rn(e){const{height:t,id:n,iframe:o,mode:s,message:c,type:a,width:l}=e,{lastMessage:f}=i[n];switch(i[n]?.firstRun&&Hn(n,s),u(n,`Received: %c${f}`,r.HIGHLIGHT),a){case X:i[n].autoResize=JSON.parse(G(n,9));break;case We:m(n,"Ready state reset"),i[n].initialised=!1;break;case Be:He(o);break;case De:bn(n,G(n,9));break;case R:Te(e),Kt(n),Qt(n,c),i[n].initialised=!0,E(n,"onReady",o);break;case L:en(e,G(n,6));break;case Ve:ye("onMouseEnter",e);break;case qe:ye("onMouseLeave",e);break;case ee:rn(n);break;case te:un(n);break;case Ze:cn(n);break;case Je:fn(n);break;case x:Re(e);break;case Ye:dn(e);break;case Xe:pn(e);break;case Ke:hn(e);break;case Qe:vn(n,c);break;default:if(l===0&&t===0){z(n,`Unsupported message received (${a}), this is likely due to the iframe containing a later version of iframe-resizer than the parent page`);return}if(l===0||t===0){u(n,"Ignoring message with 0 height or width");return}if(document.hidden){u(n,"Page hidden - ignored resize request");return}Te(e)}}const Ln=e=>({initChild:t,postMessageTarget:n})=>{e===n&&t()},Mn=e=>Object.values(i).forEach(Ln(e));function xe(e){const t=e.data;if(t===_e){Mn(e.source);return}if(!Yt(t)){if(typeof t!==_)return;y(F,"ignoredMessage"),Mt(F,t);return}const n=Vt(t),{id:o,type:s}=n;switch(y(o,s),!0){case!i[o]:throw new Error(`${s} No settings for ${o}. Message was: ${t}`);case!Zt(n):case Xt(n):case!Jt(n,e):return;default:i[o].lastMessage=e.data,ge(o,Rn)(n)}}const Sn=pt(()=>{S(window,L,xe),S(document,"visibilitychange",Bt),window.iframeParentListener=e=>setTimeout(()=>xe({data:e,sameOrigin:!0}))}),Ce={};function $n(e){if(Ce[e]===!0)return!1;const t=document.querySelectorAll(`iframe#${CSS.escape(e)}`);if(t.length<=1)return!0;Ce[e]=!0;const n=Array.from(t).flatMap(o=>[`
11
+ `,o,`
12
+ `]);return b(e,`<rb>Duplicate ID attributes detected</>
13
+
14
+ The <b>${e}</> ID is not unique. Having multiple iframes on the same page with the same ID causes problems with communication between the iframe and parent page. Please ensure that the ID of each iframe has a unique value.
15
+
16
+ Found <bb>${t.length}</> iframes with the <b>${e}</> ID:`,...n,`
17
+ `),!1}const kn=`<rb>Deprecated Method Name</>
18
+
19
+ The <b>removeListeners()</> method has been renamed to <b>disconnect()</>. ${le}`,An=`<rb>Deprecated Method</>
20
+
21
+ Use of the <b>resize()</> method from the parent page is deprecated and will be removed in a future version of <i>iframe-resizer</>. As there are no longer any edge cases that require triggering a resize from the parent page, it is recommended to remove this method from your code.`;function Gn(e){if(i[e]){const{iframe:t}=i[e],n={close:He.bind(null,t),disconnect:Oe.bind(null,t),moveToAnchor(o){yt(o,_,"moveToAnchor(anchor) anchor"),I("Move to anchor",`moveToAnchor:${o}`,e)},removeListeners(){b(e,kn),this.disconnect()},resize(){b(e,An),I("Window resize",C,e)},sendMessage(o){o=JSON.stringify(o),I(L,`${L}:${o}`,e)}};t.iframeResizer=n,t.iFrameResizer=n}}const jn="8",Nn="32",Pn=st,xn=!0;function Cn(e){const{autoResize:t,bodyBackground:n,bodyMargin:o,bodyPadding:s,heightCalculationMethod:c,inPageLinks:a,license:l,log:f,logExpand:d,mouseEvents:g,offsetHeight:O,offsetWidth:h,mode:H,sizeHeight:yo,sizeWidth:vo,tolerance:wo,widthCalculationMethod:zo}=i[e];return[e,jn,vo,f,Nn,xn,t,o,c,n,s,wo,a,Pn,zo,g,O,h,yo,l,p.version,H,"",d].join(":")}const Fn="0";function _n(e){const{bodyMargin:t}=i[e];(typeof t===rt||t===Fn)&&(i[e].bodyMargin=`${t}px`)}const Wn=e=>{try{return new URL(e).origin}catch{return null}},Bn=e=>typeof e===oe&&e.length>0&&!(e.contains("allow-scripts")&&e.contains("allow-same-origin"));function Dn(e,t){const{checkOrigin:n,iframe:{src:o,sandbox:s},initialisedFirstPage:c,waitForLoad:a}=t[e],l=Wn(o);y(e,"noResponse"),b(e,`<rb>No response from iframe</>
22
+
23
+ The iframe (<i>${e}</>) has not responded within ${t[e].warningTimeout/1e3} seconds. Check <b>@iframe-resizer/child</> package has been loaded in the iframe.
24
+ ${n&&l?`
25
+ The <b>checkOrigin</> option is currently enabled. If the iframe redirects away from <i>${l}</>, then the connection to the iframe may be blocked by the browser. To disable this option, set <b>checkOrigin</> to <bb>false</> or an array of allowed origins. See <u>https://iframe-resizer.com/checkorigin</> for more information.
26
+ `:""}${a&&!c?`
27
+ The <b>waitForLoad</> option is currently set to <bb>true</>. If the iframe loads before <i>iframe-resizer</> runs, this option will prevent <i>iframe-resizer</> initialising. To disable this option, set <b>waitForLoad</> to <bb>false</>.
28
+ `:""}${Bn(s)?`
29
+ The iframe has the <b>sandbox</> attribute, please ensure it contains both the <bb>allow-same-origin</> and <bb>allow-scripts</> values.
30
+ `:""}
31
+ This message can be ignored if everything is working, or you can set the <b>warningTimeout</> option to a higher value or zero to suppress this warning.
32
+ `)}function Un(e,t){function n(){if(t[e]===void 0)return;const{initialised:c,loadErrorShown:a}=t[e];if(t[e].msgTimeout=void 0,c){t[e].initialisedFirstPage=!0;return}a||(t[e].loadErrorShown=!0,Dn(e,t))}const{msgTimeout:o,warningTimeout:s}=t[e];s&&(o&&clearTimeout(o),t[e].msgTimeout=setTimeout(n,s))}const Vn=1,qn=e=>e.loading===Ue,Zn=e=>e===R;function Jn(e){i[e]?.heightCalculationMethod in lt&&Re({id:e,iframe:i[e].iframe,height:1,width:1,type:R})}function Yn(e,t){S(e,P,()=>setTimeout(t,Vn))}const Xn=e=>{const{src:t,srcdoc:n}=e;return!n&&(t==null||t===""||t==="about:blank")};function Kn(e,t){const{iframe:n,waitForLoad:o}=i[e];if(o!==!0){if(Xn(n)){setTimeout(()=>{y(e,"noContent"),m(e,"No content detected in the iframe, delaying initialisation")});return}setTimeout(t)}}function Qn(e,t){const n=s=>()=>{if(!i[e])return;const{firstRun:c,iframe:a}=i[e];I(s,t,e),Zn(s)&&qn(a)||Un(e,i),c||Jn(e)},{iframe:o}=i[e];i[e].initChild=n(K),Yn(o,n(Q)),Kn(e,n(R))}function eo(e,t){return t?(("sizeWidth"in t||"sizeHeight"in t||X in t)&&b(e,`<rb>Deprecated Option</>
33
+
34
+ The <b>sizeWidth</>, <b>sizeHeight</> and <b>autoResize</> options have been replaced with new <b>direction</> option which expects values of <bb>${$}</>, <bb>${ce}</>, <bb>${re}</> or <bb>${se}</>.
35
+ `),t):{}}function to(e){i[e].warningTimeout||m(e,"warningTimeout:%c disabled",r.HIGHLIGHT)}function no(e,{offset:t,offsetSize:n}){const o=n||t;o&&(i[e].direction===$?(i[e].offsetHeight=o,u(e,`Offset height: %c${o}`,r.HIGHLIGHT)):(i[e].offsetWidth=o,u(e,`Offset width: %c${o}`,r.HIGHLIGHT)))}function oo(e){const{direction:t}=i[e];switch(t){case $:break;case ce:i[e].sizeHeight=!1;case re:i[e].sizeWidth=!0;break;case se:i[e].sizeWidth=!1,i[e].sizeHeight=!1,i[e].autoResize=!1;break;default:throw new TypeError(`Direction value of "${t}" is not valid`)}u(e,`direction: %c${t}`,r.HIGHLIGHT)}const io=e=>e===""||e.match(/^(about:blank|javascript:|file:\/\/)/)!==null?"*":e;function so(e){i[e].targetOrigin=i[e].checkOrigin===!0?io(i[e].remoteHost):"*"}function ro(e){const{id:t}=e;i[t].postMessageTarget===null&&(i[t].postMessageTarget=e.contentWindow)}function J(e,t,n){M(i[e],t)&&(b(e,`<rb>Deprecated option</>
36
+
37
+ The <b>${t}</> option has been renamed to <b>${n}</>. ${le}`),i[e][n]=i[e][t],delete i[e][t])}function co(e){J(e,nt,ot),J(e,"onClose","onBeforeClose"),J(e,"onClosed","onAfterClose")}const ao=e=>M(e,"onMouseEnter")||M(e,"onMouseLeave");function lo(e,t){const{id:n}=e;i[n]={...i[n],iframe:e,remoteHost:e?.src.split("/").slice(0,3).join("/"),...A,...eo(n,t),mouseEvents:ao(t),mode:En(t),syncTitle:yn(n)},co(n),oo(n),no(n,t),to(n),ro(e),so(n)}const uo="yes",Fe="no",fo="omit";function po(e){const{id:t}=e;switch(u(t,`Iframe scrolling ${i[t]?.scrolling?"enabled":"disabled"} for ${t}`),e.style.overflow=i[t]?.scrolling===!1?it:W,i[t]?.scrolling){case fo:break;case!0:e.scrolling=uo;break;case!1:e.scrolling=Fe;break;default:e.scrolling=i[t]?.scrolling||Fe}}function ho(e,t,n){lo(t,n),u(e,`src: %c${t.srcdoc||t.src}`,r.HIGHLIGHT),Tn(e),po(t),_n(e),Qn(e,Cn(e)),Gn(e),u(e,"Setup complete")}function go(e,t){const{id:n}=e;y(n,"setup"),$n(n)&&ho(n,e,t),kt(n)}function mo(e,t){const n=M(t,"log"),o=V(t.log),s=n?o?!0:t.log:A.log;M(t,"logExpand")||(t.logExpand=n&&o?t.log===D:A.logExpand),On(t),Lt({enabled:s,expand:t.logExpand,iframeId:e}),o&&!(t.log in ut)&&St(e,`Invalid value for options.log: Accepted values are "${D}" and "${U}"`),t.log=s}function bo(e){if(!ue(e))throw new TypeError("Options is not an object");return Sn(),Ct(e),t=>{const n=xt(t,e);return Y in t?(y(n,"alreadySetup"),z(n,`Ignored iframe (${n}), already setup.`)):(mo(n,e),ge(n,go)(t,e)),t?.iframeResizer}}return bo}));
38
+ //# sourceMappingURL=index.umd.js.map