@iframe-resizer/core 6.0.0-beta.4 → 6.0.0-beta.6
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.
- package/README.md +1 -1
- package/index.cjs.js +18 -24
- package/index.cjs.js.map +1 -1
- package/index.esm.js +18 -964
- package/index.esm.js.map +1 -1
- package/index.umd.js +18 -24
- package/index.umd.js.map +1 -1
- package/package.json +2 -2
package/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../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/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/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":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst settings: Record<string, any> = {}\n\nexport default settings\n","import { BOLD, LABEL, PARENT } from '@iframe-resizer/common/consts'\nimport deprecate from '@iframe-resizer/common/deprecate'\nimport createFormatAdvise from '@iframe-resizer/common/format-advise'\nimport { esModuleInterop, id as identity } from '@iframe-resizer/common/utils'\nimport acg, { NORMAL } from 'auto-console-group'\n\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({\n enabled,\n expand,\n iframeId,\n}: {\n enabled: boolean\n expand: boolean\n iframeId: string\n}): 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, VERTICAL } from '@iframe-resizer/common/consts'\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',\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 onMessage: null,\n onMouseEnter() {},\n onMouseLeave() {},\n onReady() {},\n onResized() {},\n onScroll: () => true,\n})\n","import { isString } from '@iframe-resizer/common/utils'\n\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(\n iframe: HTMLIFrameElement,\n options: Record<string, any>,\n): 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 {\n COLLAPSE,\n EXPAND,\n LOG_COLLAPSED,\n LOG_DISABLED,\n LOG_EXPANDED,\n} from '@iframe-resizer/common/consts'\n\nexport default function (options: Record<string, any>): void {\n const { search } = window.location\n\n if (search.includes('ifrlog')) {\n const value = new URLSearchParams(search).get('ifrlog')\n\n switch (value) {\n case String(LOG_DISABLED): {\n options.log = false\n break\n }\n\n case EXPAND:\n case String(LOG_EXPANDED): {\n options.log = EXPAND\n break\n }\n\n case COLLAPSE:\n case String(LOG_COLLAPSED): {\n options.log = COLLAPSE\n break\n }\n\n default: {\n options.log = COLLAPSE\n }\n }\n }\n}\n","import {\n INIT_EVENTS,\n MESSAGE_ID,\n SEPARATOR,\n} from '@iframe-resizer/common/consts'\nimport { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { event as consoleEvent, info, log, warn } from '../console'\nimport settings from '../values/settings'\n\nexport const filterMsg = (msg: string): string =>\n msg\n .split(SEPARATOR)\n .filter((_, index) => index !== 19)\n .join(SEPARATOR)\n\nexport function 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.join(', ')}`,\n )\n\n for (const origin of targetOrigin) {\n postMessageTarget.postMessage(MESSAGE_ID + msg, origin)\n }\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 '@iframe-resizer/common/consts'\n\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 '@iframe-resizer/common/consts'\n\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 = iframe ? getComputedStyle(iframe) : null\n const paddingAndBorder = compStyle\n ? getPaddingEnds(compStyle) + getBorderEnds(compStyle)\n : 0\n\n const messageData: MessageData = {\n iframe,\n id: data[0],\n height: height + paddingAndBorder,\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 { MESSAGE_ID, MESSAGE_ID_LENGTH } from '@iframe-resizer/common/consts'\nimport { isIframe } from '@iframe-resizer/common/utils'\nimport { HIGHLIGHT } from 'auto-console-group'\n\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(\n messageData: MessageData,\n event: MessageEvent | { data: any; origin?: string; sameOrigin?: boolean },\n): boolean {\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 const checkOrigin = settings[id]?.checkOrigin\n\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 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 { VERSION } from '@iframe-resizer/common/consts'\nimport { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { advise, log } from '../console'\n\nexport default function checkVersion(\n id: string,\n version: string | undefined,\n): 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 '@iframe-resizer/common/consts'\nimport { isolateUserCode } from '@iframe-resizer/common/utils'\n\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 { log } from '../console'\nimport type { MessageData } from '../types'\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 '@iframe-resizer/common/consts'\n\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 '@iframe-resizer/common/consts'\n\nimport getMessageBody from '../received/message'\nimport type { MessageData } from '../types'\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 '@iframe-resizer/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 { HEIGHT, WIDTH } from '@iframe-resizer/common/consts'\nimport { HIGHLIGHT } from 'auto-console-group'\n\nimport { info } from '../console'\nimport type { MessageData } from '../types'\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 { setPagePosition } from '../page/position'\nimport type { MessageData } from '../types'\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 as any).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 '@iframe-resizer/common/consts'\n\nimport { log } from '../console'\nimport setSize from '../events/size'\nimport { getPagePosition } from '../page/position'\nimport trigger from '../send/trigger'\nimport type { MessageData } from '../types'\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 '@iframe-resizer/common/consts'\nimport {\n addEventListener,\n removeEventListener,\n} from '@iframe-resizer/common/listeners'\n\nimport { event, log } from '../console'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\n\nexport const sendInfoToIframe = (\n type: string,\n infoFunction: (iframe: HTMLIFrameElement) => string,\n) => {\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 =\n (stopFunction: string) =>\n (id: string): void => {\n if (stopFunction in settings[id]) {\n settings[id][stopFunction]()\n delete settings[id][stopFunction]\n }\n }\n\nexport const startInfoMonitor =\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (sendInfoToIframe: (requestType: string, id: string) => void, type: string) =>\n (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 // eslint-disable-next-line @typescript-eslint/no-use-before-define\n stop()\n }\n }\n\n const sendScroll = sendInfo(SCROLL)\n const sendResize = sendInfo('resize window')\n\n const pageObserver = new ResizeObserver(sendInfo('pageObserver'))\n const iframeObserver = new ResizeObserver(sendInfo('iframeObserver'))\n\n function setListener(\n requestType: string,\n listener: (\n target: EventTarget,\n event: string,\n handler: EventListener,\n ) => void,\n ): 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 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 '@iframe-resizer/common/consts'\n\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 '@iframe-resizer/common/consts'\n\nimport { sendInfoToIframe, startInfoMonitor, stopInfoMonitor } from './common'\n\nexport function getParentProps(iframe: HTMLIFrameElement): string {\n const { scrollWidth, scrollHeight } = document.documentElement\n const visualViewport: Partial<VisualViewport> =\n typeof window !== 'undefined' && window.visualViewport\n ? window.visualViewport\n : {}\n const {\n width = 0,\n height = 0,\n offsetLeft = 0,\n offsetTop = 0,\n pageLeft = 0,\n pageTop = 0,\n scale = 1,\n } = 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 { info } from '../console'\nimport on from '../events/wrapper'\nimport type { MessageData } from '../types'\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 // @ts-expect-error — undocumented V4 backwards compat\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 =\n (addOffset: boolean) =>\n (messageData: MessageData): void => {\n const { id, iframe, height, width } = messageData\n\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' : ''}`](\n newPosition.x,\n newPosition.y,\n )\n }\n\n const calcOffset = (offset: Position): Position => ({\n x: width + offset.x,\n y: height + offset.y,\n })\n\n const offset = addOffset ? getElementPosition(iframe) : { x: 0, y: 0 }\n const newPosition = calcOffset(offset)\n // @ts-expect-error — undocumented V4 backwards compat\n const target = window.parentIframe || window.parentIFrame\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 // @ts-expect-error — undocumented V4 backwards compat\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","import { VERSION } from '@iframe-resizer/common/consts'\nimport { getModeData, getModeLabel } from '@iframe-resizer/common/mode'\n\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 // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw getModeData(mode + 2).replace(/<\\/?[a-z][^>]*>|<\\/>/gi, '')\n }\n if (!(mode > 5 && vInfoDisable)) {\n vInfo(`v${VERSION} (${getModeLabel(mode)})`, mode)\n }\n\n switch (mode) {\n case 1:\n case 2:\n case 3:\n advise('Parent', getModeData(6))\n break\n\n case 4:\n advise('Parent', getModeData(7))\n break\n\n case 5:\n advise('Parent', getModeData(8))\n break\n\n default:\n if (mode < 1) advise('Parent', getModeData(3))\n }\n\n vAdvised = true\n}\n\nexport function preModeCheck(id: string): void {\n if (vAdvised) return\n const { mode } = settings[id]\n if (mode > 5) 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 ? undefined : Number(mode))\n settings[id].firstRun = false\n}\n","import {\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 '@iframe-resizer/common/consts'\nimport { HIGHLIGHT } from 'auto-console-group'\n\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 type { MessageData } from './types'\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 ({\n initChild,\n postMessageTarget,\n }: {\n initChild: () => void\n postMessageTarget: MessageEventSource | null\n }): void => {\n if (source === postMessageTarget) initChild()\n }\n\nexport default (source: MessageEventSource | null): void =>\n Object.values(settings).forEach(sendIframeReady(source))\n","import {\n CHILD_READY_MESSAGE,\n MESSAGE,\n PARENT,\n STRING,\n} from '@iframe-resizer/common/consts'\nimport { addEventListener } from '@iframe-resizer/common/listeners'\nimport { once } from '@iframe-resizer/common/utils'\n\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(\n event: MessageEvent | { data: any; sameOrigin?: boolean },\n): 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 as any).iframeParentListener = (data: any) =>\n setTimeout(() => iframeListener({ data, sameOrigin: true }))\n})\n","import { NEW_LINE } from '@iframe-resizer/common/consts'\n\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 { MESSAGE, STRING } from '@iframe-resizer/common/consts'\nimport { typeAssert } from '@iframe-resizer/common/utils'\n\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\nimport closeIframe from './close'\nimport disconnect from './disconnect'\n\nexport default function attachMethods(id: string): void {\n if (settings[id]) {\n const { iframe } = settings[id]\n\n iframe.iframeResizer = {\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 sendMessage(message: any) {\n message = JSON.stringify(message)\n trigger(MESSAGE, `${MESSAGE}:${message}`, id)\n },\n }\n }\n}\n","import { CHILD, SEPARATOR } from '@iframe-resizer/common/consts'\n\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 '@iframe-resizer/common/consts'\n\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 '@iframe-resizer/common/consts'\n\nimport { advise, event } from '../console'\n\nexport const getOrigin = (url: string): string | null => {\n try {\n return new URL(url).origin\n } catch (error) {\n return null\n }\n}\n\nexport const 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(\n id: string,\n settings: Record<string, any>,\n): 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 '@iframe-resizer/common/consts'\nimport { addEventListener } from '@iframe-resizer/common/listeners'\n\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(\n iframe: HTMLIFrameElement,\n initChild: () => void,\n): void {\n // allow other concurrent events to go first\n const onload = (): ReturnType<typeof setTimeout> =>\n 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 '@iframe-resizer/common/consts'\n\nimport { advise } from '../console'\n\nexport default function checkOptions(\n id: string,\n options: Record<string, any> | undefined,\n): 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 { VERTICAL } from '@iframe-resizer/common/consts'\nimport { HIGHLIGHT } from 'auto-console-group'\n\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function setOffsetSize(\n id: string,\n { offset, offsetSize }: { offset?: number; offsetSize?: number },\n): 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 { BOTH, HORIZONTAL, NONE, VERTICAL } from '@iframe-resizer/common/consts'\nimport { HIGHLIGHT } from 'auto-console-group'\n\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 { warn } from '../console'\nimport 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 const { checkOrigin, remoteHost } = settings[id]\n\n if (Array.isArray(checkOrigin) && checkOrigin.length === 0) {\n warn(\n id,\n 'checkOrigin is an empty array — no messages will be sent to the iframe',\n )\n }\n\n settings[id].targetOrigin = Array.isArray(checkOrigin)\n ? checkOrigin.map(getTargetOrigin)\n : [checkOrigin === false ? '*' : getTargetOrigin(remoteHost)]\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 {\n OFFSET,\n OFFSET_SIZE,\n REMOVED_NEXT_VERSION,\n} from '@iframe-resizer/common/consts'\nimport { hasOwn } from '@iframe-resizer/common/utils'\n\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 '@iframe-resizer/common/mode'\nimport { hasOwn } from '@iframe-resizer/common/utils'\n\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(\n iframe: HTMLIFrameElement,\n options: Record<string, any>,\n): 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, OMIT } from '@iframe-resizer/common/consts'\n\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nconst YES = 'yes'\nconst NO = 'no'\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(\n id: string,\n iframe: HTMLIFrameElement,\n options: Record<string, any>,\n): 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 (\n iframe: HTMLIFrameElement,\n options: Record<string, any>,\n): void {\n const { id } = iframe\n consoleEvent(id, 'setup')\n if (checkUniqueId(id)) setup(id, iframe, options)\n endAutoGroup(id)\n}\n","import {\n COLLAPSE,\n EXPAND,\n LOG_COLLAPSED,\n LOG_DISABLED,\n LOG_EXPANDED,\n LOG_OPTIONS,\n} from '@iframe-resizer/common/consts'\nimport { hasOwn, isString } from '@iframe-resizer/common/utils'\n\nimport { enableVInfo } from '../checks/mode'\nimport { error, setupConsole } from '../console'\nimport defaults from '../values/defaults'\n\nexport default function startLogging(\n id: string,\n options: Record<string, any>,\n): void {\n // eslint-disable-next-line unicorn/prefer-switch\n if (options.log === LOG_DISABLED) options.log = false\n else if (options.log === LOG_COLLAPSED) options.log = COLLAPSE\n else if (options.log === LOG_EXPANDED) options.log = EXPAND\n\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","import { LABEL } from '@iframe-resizer/common/consts'\nimport { isObject } from '@iframe-resizer/common/utils'\n\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 type {\n Direction,\n IframeComponent,\n IframeMessageData,\n IframeMouseData,\n IframeObject,\n IframeOptions,\n IframeResizedData,\n IframeScrollData,\n LogOption,\n MessageData,\n ScrollOption,\n} from './types'\nexport {\n LOG_COLLAPSED,\n LOG_DISABLED,\n LOG_EXPANDED,\n} from '@iframe-resizer/common/consts'\n\nexport default function connectResizer(\n options: Record<string, any>,\n): (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 as any)?.iframeResizer\n }\n}\n"],"names":["settings","createConsoleGroup","esModuleInterop","acg","consoleEnabled","parent","PARENT","getMyId","iframeId","isLogEnabled","setupConsole","enabled","expand","consoleGroup","output","type","args","outputSwitched","log","info","debug","warn","error","event","purge","endAutoGroup","errorBoundary","vInfo","ver","mode","BOLD","NORMAL","formatLogMsg","LABEL","formatAdvise","createFormatAdvise","identity","advise","localFormatAdvise","deprecateAdvise","deprecate","defaults","VERTICAL","AUTO","count","newId","options","id","ensureHasId","iframe","isString","consoleEvent","checkManualLogging","search","LOG_DISABLED","EXPAND","LOG_EXPANDED","COLLAPSE","LOG_COLLAPSED","filterMsg","msg","SEPARATOR","_","index","dispatch","calleeMsg","logSent","route","displayMsg","INIT_EVENTS","HIGHLIGHT","FOREGROUND","postMessageTarget","sameOrigin","targetOrigin","MESSAGE_ID","origin","trigger","sendTriggerMsg","eventName","autoResize","firstRun","tabVisible","RESIZE","getPaddingEnds","compStyle","top","bot","getBorderEnds","decodeMessage","data","MESSAGE_ID_LENGTH","height","paddingAndBorder","messageData","ABOVE_TYPES","checkIframeExists","detectedIframe","isIframe","isMessageFromIframe","checkOrigin","checkAllowedOrigin","checkList","element","checkSingle","remoteHost","isMessageForUs","message","isMessageFromMetaParent","isMetaParent","checkSameDomain","checkVersion","version","VERSION","on","funcName","val","func","FUNCTION","isolateUserCode","onMessage","messageBody","getMessageBody","offset","lastMessage","MESSAGE_HEADER_LENGTH","onMouse","width","mousePos","coords","page","unsetPagePosition","getStoredPagePosition","setStoredPagePosition","position","getPagePosition","setPagePosition","setDimension","dimension","size","setSize","sizeHeight","sizeWidth","HEIGHT","WIDTH","resizeIframe","disconnect","closeIframe","resetIframe","INIT","RESET","sendInfoToIframe","infoFunction","gate","requestType","throttle","frameId","gatedTrigger","stopInfoMonitor","stopFunction","startInfoMonitor","pending","sendInfo","stop","sendScroll","SCROLL","sendResize","pageObserver","iframeObserver","setListener","listener","removeEventListener","LOAD","start","addEventListener","getPageInfo","bodyPosition","iframePosition","scrollY","scrollX","innerHeight","innerWidth","clientHeight","clientWidth","sendPageInfoToIframe","PAGE_INFO","startPageInfoMonitor","stopPageInfoMonitor","getParentProps","scrollWidth","scrollHeight","visualViewport","offsetLeft","offsetTop","pageLeft","pageTop","scale","sendParentInfoToIframe","PARENT_INFO","startParentInfoMonitor","stopParentInfoMonitor","getElementPosition","target","pagePosition","scrollToLink","x","y","scrollBy","scrollRequestFromChild","addOffset","reposition","newPosition","scrollParent","calcOffset","scrollTo","scrollToOffset","jumpToTarget","hash","jumpToParent","inPageLink","location","hashData","checkTitle","title","setTitle","vAdvised","vInfoDisable","checkMode","childMode","consoleClear","getModeData","getModeLabel","preModeCheck","enableVInfo","routeMessage","AUTO_RESIZE","BEFORE_UNLOAD","CLOSE","IN_PAGE_LINK","MESSAGE","MOUSE_ENTER","MOUSE_LEAVE","PAGE_INFO_STOP","PARENT_INFO_STOP","SCROLL_BY","SCROLL_TO","SCROLL_TO_OFFSET","TITLE","sendIframeReady","source","initChild","iframeReady","iframeListener","CHILD_READY_MESSAGE","STRING","setupEventListenersOnce","once","shownDuplicateIdWarning","checkUniqueId","elements","elementList","NEW_LINE","attachMethods","anchor","typeAssert","V1_PADDING","INTERVAL","RESIZE_FROM","CHILD","PUBLIC_METHODS","createOutgoingMessage","bodyBackground","bodyMargin","bodyPadding","heightCalculationMethod","inPageLinks","license","logExpand","mouseEvents","offsetHeight","offsetWidth","tolerance","widthCalculationMethod","ZERO","setupBodyMargin","NUMBER","getOrigin","url","allowsScriptsAndOrigin","sandbox","OBJECT","showWarning","src","initialisedFirstPage","waitForLoad","warnOnNoResponse","warning","initialised","loadErrorShown","msgTimeout","warningTimeout","AFTER_EVENT_STACK","isLazy","LAZY","isInit","eventType","checkReset","RESET_REQUIRED_METHODS","MIN_SIZE","addLoadListener","onload","noContent","srcdoc","sendInit","init","createInitChild","INIT_FROM_IFRAME","ONLOAD","checkOptions","HORIZONTAL","BOTH","NONE","checkWarningTimeout","setOffsetSize","offsetSize","newOffset","setDirection","direction","getTargetOrigin","setTargetOrigin","getPostMessageTarget","updateOptionName","oldName","newName","hasOwn","REMOVED_NEXT_VERSION","updateOptionNames","OFFSET","OFFSET_SIZE","hasMouseEvents","processOptions","setMode","YES","NO","setScrolling","HIDDEN","OMIT","setup","setupIframe","startLogging","isLogString","LOG_OPTIONS","connectResizer","isObject","setupLogging"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../packages/core/values/settings.ts","../../packages/core/console.ts","../../packages/core/values/defaults.ts","../../packages/core/checks/id.ts","../../packages/core/send/trigger.ts","../../packages/core/events/visible.ts","../../packages/core/received/decode.ts","../../packages/core/received/preflight.ts","../../packages/core/events/wrapper.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/core/checks/mode.ts","../../packages/core/router.ts","../../packages/core/setup/first-run.ts","../../packages/core/checks/origin.ts","../../packages/core/checks/version.ts","../../packages/core/events/message.ts","../../packages/core/listeners.ts","../../packages/core/send/ready.ts","../../packages/core/checks/unique.ts","../../packages/core/send/outgoing.ts","../../packages/core/send/timeout.ts","../../packages/core/setup/init.ts","../../packages/core/checks/options.ts","../../packages/core/setup/target-origin.ts","../../packages/core/setup/update-option-names.ts","../../packages/core/setup/process-options.ts","../../packages/core/setup/direction.ts","../../packages/core/send/offset.ts","../../packages/core/checks/warning-timeout.ts","../../packages/core/setup/index.ts","../../packages/core/setup/scrolling.ts","../../packages/core/setup/body-margin.ts","../../packages/core/methods/attach.ts","../../packages/core/setup/logging.ts","../../packages/core/index.ts","../../packages/core/checks/manual-logging.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst settings: Record<string, any> = {}\n\nexport default settings\n","import {\n BOLD,\n createFormatAdvise,\n deprecate,\n esModuleInterop,\n id as identity,\n LABEL,\n PARENT,\n} from '@iframe-resizer/common'\nimport acg, { NORMAL } from 'auto-console-group'\n\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({\n enabled,\n expand,\n iframeId,\n}: {\n enabled: boolean\n expand: boolean\n iframeId: string\n}): 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, VERTICAL } from '@iframe-resizer/common'\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',\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 onMessage: null,\n onMouseEnter() {},\n onMouseLeave() {},\n onReady() {},\n onResized() {},\n onScroll: () => true,\n})\n","import { isString } from '@iframe-resizer/common'\n\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(\n iframe: HTMLIFrameElement,\n options: Record<string, any>,\n): 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 { INIT_EVENTS, MESSAGE_ID, SEPARATOR } from '@iframe-resizer/common'\nimport { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { event as consoleEvent, info, log, warn } from '../console'\nimport settings from '../values/settings'\n\nexport const filterMsg = (msg: string): string =>\n msg\n .split(SEPARATOR)\n .filter((_, index) => index !== 19)\n .join(SEPARATOR)\n\nexport function 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.join(', ')}`,\n )\n\n for (const origin of targetOrigin) {\n postMessageTarget.postMessage(MESSAGE_ID + msg, origin)\n }\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 '@iframe-resizer/common'\n\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 '@iframe-resizer/common'\n\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 = iframe ? getComputedStyle(iframe) : null\n const paddingAndBorder = compStyle\n ? getPaddingEnds(compStyle) + getBorderEnds(compStyle)\n : 0\n\n const messageData: MessageData = {\n iframe,\n id: data[0],\n height: height + paddingAndBorder,\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 { isIframe, MESSAGE_ID, MESSAGE_ID_LENGTH } from '@iframe-resizer/common'\nimport { HIGHLIGHT } from 'auto-console-group'\n\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(\n messageData: MessageData,\n event: MessageEvent | { data: any; origin?: string; sameOrigin?: boolean },\n): boolean {\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 const checkOrigin = settings[id]?.checkOrigin\n\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 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 { FUNCTION, isolateUserCode } from '@iframe-resizer/common'\n\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 { MESSAGE_HEADER_LENGTH, SEPARATOR } from '@iframe-resizer/common'\n\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 '@iframe-resizer/common'\n\nimport getMessageBody from '../received/message'\nimport type { MessageData } from '../types'\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 '@iframe-resizer/common'\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 { HEIGHT, WIDTH } from '@iframe-resizer/common'\nimport { HIGHLIGHT } from 'auto-console-group'\n\nimport { info } from '../console'\nimport type { MessageData } from '../types'\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 { setPagePosition } from '../page/position'\nimport type { MessageData } from '../types'\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 as any).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 '@iframe-resizer/common'\n\nimport { log } from '../console'\nimport setSize from '../events/size'\nimport { getPagePosition } from '../page/position'\nimport trigger from '../send/trigger'\nimport type { MessageData } from '../types'\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 {\n addEventListener,\n LOAD,\n removeEventListener,\n RESIZE,\n SCROLL,\n} from '@iframe-resizer/common'\n\nimport { event, log } from '../console'\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\n\nexport const sendInfoToIframe = (\n type: string,\n infoFunction: (iframe: HTMLIFrameElement) => string,\n) => {\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 =\n (stopFunction: string) =>\n (id: string): void => {\n if (stopFunction in settings[id]) {\n settings[id][stopFunction]()\n delete settings[id][stopFunction]\n }\n }\n\nexport const startInfoMonitor =\n // eslint-disable-next-line @typescript-eslint/no-shadow\n (sendInfoToIframe: (requestType: string, id: string) => void, type: string) =>\n (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 // eslint-disable-next-line @typescript-eslint/no-use-before-define\n stop()\n }\n }\n\n const sendScroll = sendInfo(SCROLL)\n const sendResize = sendInfo('resize window')\n\n const pageObserver = new ResizeObserver(sendInfo('pageObserver'))\n const iframeObserver = new ResizeObserver(sendInfo('iframeObserver'))\n\n function setListener(\n requestType: string,\n listener: (\n target: EventTarget,\n event: string,\n handler: EventListener,\n ) => void,\n ): 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 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 '@iframe-resizer/common'\n\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 '@iframe-resizer/common'\n\nimport { sendInfoToIframe, startInfoMonitor, stopInfoMonitor } from './common'\n\nexport function getParentProps(iframe: HTMLIFrameElement): string {\n const { scrollWidth, scrollHeight } = document.documentElement\n const visualViewport: Partial<VisualViewport> =\n typeof window !== 'undefined' && window.visualViewport\n ? window.visualViewport\n : {}\n const {\n width = 0,\n height = 0,\n offsetLeft = 0,\n offsetTop = 0,\n pageLeft = 0,\n pageTop = 0,\n scale = 1,\n } = 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 { info } from '../console'\nimport on from '../events/wrapper'\nimport type { MessageData } from '../types'\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 // @ts-expect-error — undocumented V4 backwards compat\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 =\n (addOffset: boolean) =>\n (messageData: MessageData): void => {\n const { id, iframe, height, width } = messageData\n\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' : ''}`](\n newPosition.x,\n newPosition.y,\n )\n }\n\n const calcOffset = (offset: Position): Position => ({\n x: width + offset.x,\n y: height + offset.y,\n })\n\n const offset = addOffset ? getElementPosition(iframe) : { x: 0, y: 0 }\n const newPosition = calcOffset(offset)\n // @ts-expect-error — undocumented V4 backwards compat\n const target = window.parentIframe || window.parentIFrame\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 // @ts-expect-error — undocumented V4 backwards compat\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","import { getModeData, getModeLabel, VERSION } from '@iframe-resizer/common'\n\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 // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw getModeData(mode + 2).replace(/<\\/?[a-z][^>]*>|<\\/>/gi, '')\n }\n if (!(mode > 5 && vInfoDisable)) {\n vInfo(`v${VERSION} (${getModeLabel(mode)})`, mode)\n }\n\n switch (mode) {\n case 1:\n case 2:\n case 3:\n advise('Parent', getModeData(6))\n break\n\n case 4:\n advise('Parent', getModeData(7))\n break\n\n case 5:\n advise('Parent', getModeData(8))\n break\n\n default:\n if (mode < 1) advise('Parent', getModeData(3))\n }\n\n vAdvised = true\n}\n\nexport function preModeCheck(id: string): void {\n if (vAdvised) return\n const { mode } = settings[id]\n if (mode > 5) 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 {\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 '@iframe-resizer/common'\nimport { HIGHLIGHT } from 'auto-console-group'\n\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 type { MessageData } from './types'\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 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 ? undefined : Number(mode))\n settings[id].firstRun = false\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 { VERSION } from '@iframe-resizer/common'\nimport { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { advise, log } from '../console'\n\nexport default function checkVersion(\n id: string,\n version: string | undefined,\n): 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 { FOREGROUND, HIGHLIGHT } from 'auto-console-group'\n\nimport { log } from '../console'\nimport type { MessageData } from '../types'\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 {\n addEventListener,\n CHILD_READY_MESSAGE,\n MESSAGE,\n once,\n PARENT,\n STRING,\n} from '@iframe-resizer/common'\n\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(\n event: MessageEvent | { data: any; sameOrigin?: boolean },\n): 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 as any).iframeParentListener = (data: any) =>\n setTimeout(() => iframeListener({ data, sameOrigin: true }))\n})\n","import settings from '../values/settings'\n\nexport const sendIframeReady =\n (source: MessageEventSource | null) =>\n ({\n initChild,\n postMessageTarget,\n }: {\n initChild: () => void\n postMessageTarget: MessageEventSource | null\n }): void => {\n if (source === postMessageTarget) initChild()\n }\n\nexport default (source: MessageEventSource | null): void =>\n Object.values(settings).forEach(sendIframeReady(source))\n","import { NEW_LINE } from '@iframe-resizer/common'\n\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 { CHILD, SEPARATOR } from '@iframe-resizer/common'\n\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 { OBJECT } from '@iframe-resizer/common'\n\nimport { advise, event } from '../console'\n\nexport const getOrigin = (url: string): string | null => {\n try {\n return new URL(url).origin\n } catch (error) {\n return null\n }\n}\n\nexport const 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(\n id: string,\n settings: Record<string, any>,\n): 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 addEventListener,\n INIT,\n INIT_FROM_IFRAME,\n LAZY,\n LOAD,\n MIN_SIZE,\n ONLOAD,\n RESET_REQUIRED_METHODS,\n} from '@iframe-resizer/common'\n\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(\n iframe: HTMLIFrameElement,\n initChild: () => void,\n): void {\n // allow other concurrent events to go first\n const onload = (): ReturnType<typeof setTimeout> =>\n 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 '@iframe-resizer/common'\n\nimport { advise } from '../console'\n\nexport default function checkOptions(\n id: string,\n options: Record<string, any> | undefined,\n): 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 { warn } from '../console'\nimport 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 const { checkOrigin, remoteHost } = settings[id]\n\n if (Array.isArray(checkOrigin) && checkOrigin.length === 0) {\n warn(\n id,\n 'checkOrigin is an empty array — no messages will be sent to the iframe',\n )\n }\n\n settings[id].targetOrigin = Array.isArray(checkOrigin)\n ? checkOrigin.map(getTargetOrigin)\n : [checkOrigin === false ? '*' : getTargetOrigin(remoteHost)]\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 {\n hasOwn,\n OFFSET,\n OFFSET_SIZE,\n REMOVED_NEXT_VERSION,\n} from '@iframe-resizer/common'\n\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 { hasOwn, setMode } from '@iframe-resizer/common'\n\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(\n iframe: HTMLIFrameElement,\n options: Record<string, any>,\n): 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 { BOTH, HORIZONTAL, NONE, VERTICAL } from '@iframe-resizer/common'\nimport { HIGHLIGHT } from 'auto-console-group'\n\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 { VERTICAL } from '@iframe-resizer/common'\nimport { HIGHLIGHT } from 'auto-console-group'\n\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nexport default function setOffsetSize(\n id: string,\n { offset, offsetSize }: { offset?: number; offsetSize?: number },\n): 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 { 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 { 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(\n id: string,\n iframe: HTMLIFrameElement,\n options: Record<string, any>,\n): 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 (\n iframe: HTMLIFrameElement,\n options: Record<string, any>,\n): void {\n const { id } = iframe\n consoleEvent(id, 'setup')\n if (checkUniqueId(id)) setup(id, iframe, options)\n endAutoGroup(id)\n}\n","import { AUTO, HIDDEN, OMIT } from '@iframe-resizer/common'\n\nimport { log } from '../console'\nimport settings from '../values/settings'\n\nconst YES = 'yes'\nconst NO = 'no'\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 { NUMBER } from '@iframe-resizer/common'\n\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 { MESSAGE, STRING, typeAssert } from '@iframe-resizer/common'\n\nimport trigger from '../send/trigger'\nimport settings from '../values/settings'\nimport closeIframe from './close'\nimport disconnect from './disconnect'\n\nexport default function attachMethods(id: string): void {\n if (settings[id]) {\n const { iframe } = settings[id]\n\n iframe.iframeResizer = {\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 sendMessage(message: any) {\n message = JSON.stringify(message)\n trigger(MESSAGE, `${MESSAGE}:${message}`, id)\n },\n }\n }\n}\n","import {\n COLLAPSE,\n EXPAND,\n hasOwn,\n isString,\n LOG_COLLAPSED,\n LOG_DISABLED,\n LOG_EXPANDED,\n LOG_OPTIONS,\n} from '@iframe-resizer/common'\n\nimport { enableVInfo } from '../checks/mode'\nimport { error, setupConsole } from '../console'\nimport defaults from '../values/defaults'\n\nexport default function startLogging(\n id: string,\n options: Record<string, any>,\n): void {\n // eslint-disable-next-line unicorn/prefer-switch\n if (options.log === LOG_DISABLED) options.log = false\n else if (options.log === LOG_COLLAPSED) options.log = COLLAPSE\n else if (options.log === LOG_EXPANDED) options.log = EXPAND\n\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","import { isObject, LABEL } from '@iframe-resizer/common'\n\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 type {\n Direction,\n IframeComponent,\n IframeMessageData,\n IframeMouseData,\n IframeObject,\n IframeOptions,\n IframeResizedData,\n IframeScrollData,\n LogOption,\n MessageData,\n ScrollOption,\n} from './types'\nexport {\n LOG_COLLAPSED,\n LOG_DISABLED,\n LOG_EXPANDED,\n} from '@iframe-resizer/common'\n\nexport default function connectResizer(\n options: Record<string, any>,\n): (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 as any)?.iframeResizer\n }\n}\n","import {\n COLLAPSE,\n EXPAND,\n LOG_COLLAPSED,\n LOG_DISABLED,\n LOG_EXPANDED,\n} from '@iframe-resizer/common'\n\nexport default function (options: Record<string, any>): void {\n const { search } = window.location\n\n if (search.includes('ifrlog')) {\n const value = new URLSearchParams(search).get('ifrlog')\n\n switch (value) {\n case String(LOG_DISABLED): {\n options.log = false\n break\n }\n\n case EXPAND:\n case String(LOG_EXPANDED): {\n options.log = EXPAND\n break\n }\n\n case COLLAPSE:\n case String(LOG_COLLAPSED): {\n options.log = COLLAPSE\n break\n }\n\n default: {\n options.log = COLLAPSE\n }\n }\n }\n}\n"],"names":["settings","createConsoleGroup","esModuleInterop","acg","consoleEnabled","parent","expand","label","PARENT","getMyId","iframeId","window","top","self","output","type","args","console","outputSwitched","log","isLogEnabled","info","debug","warn","error","event","purge","endAutoGroup","errorBoundary","formatAdvise","createFormatAdvise","identity","advise","map","queueMicrotask","localFormatAdvise","LABEL","join","formatLogMsg","deprecateAdvise","deprecate","defaults","Object","freeze","autoResize","bodyBackground","bodyMargin","bodyPadding","checkOrigin","direction","VERTICAL","firstRun","inPageLinks","heightCalculationMethod","AUTO","id","logExpand","license","mouseEvents","offsetHeight","offsetWidth","postMessageTarget","sameDomain","scrolling","sizeHeight","sizeWidth","tolerance","waitForLoad","warningTimeout","widthCalculationMethod","onBeforeClose","onAfterClose","onMessage","onMouseEnter","onMouseLeave","onReady","onResized","onScroll","count","ensureHasId","iframe","options","isString","TypeError","document","getElementById","newId","consoleEvent","src","dispatch","calleeMsg","msg","logSent","route","displayMsg","INIT_EVENTS","split","SEPARATOR","filter","_","index","filterMsg","HIGHLIGHT","FOREGROUND","sameOrigin","targetOrigin","contentWindow","iframeChildListener","MESSAGE_ID","origin","postMessage","trigger","tabVisible","eventName","hidden","RESIZE","values","forEach","decodeMessage","data","slice","MESSAGE_ID_LENGTH","height","Number","compStyle","getComputedStyle","paddingAndBorder","boxSizing","paddingTop","parseInt","paddingBottom","getPaddingEnds","borderTopWidth","borderBottomWidth","getBorderEnds","messageData","width","message","mode","ABOVE_TYPES","true","false","undefined","on","funcName","val","func","FUNCTION","isolateUserCode","getMessageBody","offset","lastMessage","indexOf","MESSAGE_HEADER_LENGTH","onMouse","mousePos","x","y","coords","screenX","screenY","page","position","version","VERSION","unsetPagePosition","getPagePosition","scrollX","scrollY","setPagePosition","scrollTo","setDimension","dimension","size","style","setSize","HEIGHT","WIDTH","resizeIframe","disconnect","iframeResizer","closeIframe","parentNode","remove","resetIframe","INIT","RESET","sendInfoToIframe","infoFunction","gate","requestType","frameId","requestAnimationFrame","stopInfoMonitor","stopFunction","startInfoMonitor","pending","sendInfo","stop","sendScroll","SCROLL","sendResize","pageObserver","ResizeObserver","iframeObserver","setListener","listener","removeEventListener","LOAD","addEventListener","observe","body","startPageInfoMonitor","PAGE_INFO","bodyPosition","getBoundingClientRect","iframePosition","innerHeight","innerWidth","clientHeight","clientWidth","documentElement","JSON","stringify","iframeHeight","iframeWidth","Math","max","offsetTop","trunc","offsetLeft","left","scrollTop","scrollLeft","documentHeight","documentWidth","windowHeight","windowWidth","stopPageInfoMonitor","startParentInfoMonitor","PARENT_INFO","scrollWidth","scrollHeight","visualViewport","pageLeft","pageTop","scale","viewport","stopParentInfoMonitor","getElementPosition","target","pagePosition","scrollToLink","scrollRequestFromChild","addOffset","newPosition","parentIframe","parentIFrame","scrollToOffset","inPageLink","location","hash","hashData","decodeURIComponent","getElementsByName","jumpToTarget","moveToAnchor","jumpToParent","checkTitle","title","vAdvised","vInfoDisable","checkMode","childMode","consoleClear","getModeData","replace","ver","BOLD","NORMAL","vInfo","getModeLabel","routeMessage","AUTO_RESIZE","parse","BEFORE_UNLOAD","initialised","CLOSE","IN_PAGE_LINK","checkSameDomain","checkVersion","MESSAGE","messageBody","MOUSE_ENTER","MOUSE_LEAVE","PAGE_INFO_STOP","PARENT_INFO_STOP","SCROLL_BY","scrollBy","SCROLL_TO","SCROLL_TO_OFFSET","TITLE","syncTitle","setTitle","iframeListener","CHILD_READY_MESSAGE","source","initChild","sendIframeReady","STRING","Error","detectedIframe","isIframe","checkIframeExists","isMetaParent","isMessageFromMetaParent","constructor","Array","element","checkList","remoteHost","checkSingle","isMessageFromIframe","setupEventListenersOnce","once","iframeParentListener","setTimeout","shownDuplicateIdWarning","V1_PADDING","INTERVAL","RESIZE_FROM","CHILD","PUBLIC_METHODS","showWarning","sandbox","initialisedFirstPage","url","URL","getOrigin","OBJECT","length","contains","allowsScriptsAndOrigin","init","createInitChild","eventType","isInit","loading","LAZY","isLazy","msgTimeout","loadErrorShown","warnOnNoResponse","RESET_REQUIRED_METHODS","MIN_SIZE","checkReset","INIT_FROM_IFRAME","addLoadListener","ONLOAD","srcdoc","noContent","sendInit","checkOptions","HORIZONTAL","BOTH","NONE","getTargetOrigin","match","updateOptionName","oldName","newName","hasOwn","REMOVED_NEXT_VERSION","hasMouseEvents","processOptions","setMode","OFFSET","OFFSET_SIZE","updateOptionNames","setDirection","offsetSize","newOffset","setOffsetSize","checkWarningTimeout","getPostMessageTarget","isArray","setTargetOrigin","setup","preModeCheck","overflow","HIDDEN","OMIT","setScrolling","NUMBER","setupBodyMargin","createOutgoingMessage","close","bind","anchor","typeAssert","sendMessage","attachMethods","setupIframe","elements","querySelectorAll","CSS","escape","elementList","from","flatMap","NEW_LINE","checkUniqueId","startLogging","LOG_DISABLED","LOG_COLLAPSED","COLLAPSE","LOG_EXPANDED","EXPAND","isLogString","enabled","enableVInfo","consoleGroup","setupConsole","LOG_OPTIONS","isObject","search","includes","URLSearchParams","get","String","checkManualLogging","setupLogging"],"mappings":"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"}
|