{"version":3,"sources":["webpack:///./app/javascript/hooks/useRenderSignal.ts","webpack:///./app/javascript/mastodon/features/standalone/status/index.tsx","webpack:///./app/javascript/entrypoints/embed.tsx"],"names":["onInitialRender","renderSignalReceived","getStatus","makeGetStatus","getPictureInPicture","makeGetPictureInPicture","Embed","_ref","id","status","useAppSelector","state","pictureInPicture","domain","meta","get","dispatch","useAppDispatch","dispatchRenderSignal","window","requestAnimationFrame","useEffect","fetchStatus","handleToggleHidden","useCallback","toggleStatusSpoilers","permalink","_jsx","className","DetailedStatus","onToggleHidden","withLogo","href","target","rel","Status","_ref2","initialState","store","hydrateStore","IntlProvider","Provider","Router","loaded","mountNode","document","getElementById","attr","getAttribute","props","JSON","parse","createRoot","render","start","loadPolyfills","then","ready","catch","error","console","addEventListener","e","data","type","isSetHeightMessage","parent","callback","_document$getElements","postMessage","height","getElementsByTagName","scrollHeight"],"mappings":"wHAGA,IAIIA,EAJAC,GAAuB,E,oGCe3B,MAAMC,EAAYC,cACZC,EAAsBC,cAKtBC,EAAkCC,IAAa,IAAZ,GAAEC,GAAID,EAC7C,MAAME,EAASC,aAAgBC,GAAUT,EAAUS,EAAO,CAAEH,SACtDI,EAAmBF,aAAgBC,GACvCP,EAAoBO,EAAO,CAAEH,SAEzBK,EAASH,aAAgBC,GAAUA,EAAMG,KAAKC,IAAI,YAClDC,EAAWC,cACXC,EDbC,KACDjB,IAIJA,GAAuB,OAEQ,IAApBD,GACTmB,OAAOC,uBAAsB,KAC3BpB,GAAiB,IAErB,ECIFqB,qBAAU,KACRL,EAASM,YAAYd,GAAI,GAAO,GAAO,GACtC,CAACQ,EAAUR,IAEd,MAAMe,EAAqBC,uBAAY,KACrCR,EAASS,YAAqBjB,GAAI,GACjC,CAACQ,EAAUR,IAGVC,GACFS,IAIF,MAAMQ,EAAYjB,aAAM,EAANA,EAAQM,IAAI,OAE9B,OACEY,YAAA,OAAKC,UAAU,cAAO,EACpBD,YAACE,IAAc,CACbpB,OAAQA,EACRI,OAAQA,EACRD,iBAAkBA,EAClBkB,eAAgBP,EAChBQ,UAAQ,IAGVJ,YAAA,KACEC,UAAU,iBACVI,KAAMN,EACNO,OAAO,SACPC,IAAI,sBACJ,aAAW,KAET,EAIGC,EAAmCC,IAAa,IAAZ,GAAE5B,GAAI4B,EAOrD,OANAf,qBAAU,KACJgB,KACFC,IAAMtB,SAASuB,YAAaF,KAC9B,GACC,IAGDV,YAACa,IAAY,UACXb,YAACc,WAAQ,CAACH,MAAOA,UAAM,EACrBX,YAACe,IAAM,UACLf,YAACrB,EAAK,CAACE,GAAIA,MAGF,E,4BCxEnB,SAASmC,IACP,MAAMC,EAAYC,SAASC,eAAe,mBAE1C,GAAIF,EAAW,CACb,MAAMG,EAAOH,EAAUI,aAAa,cAEpC,IAAKD,EAAM,OAEX,MAAME,EAAQC,KAAKC,MAAMJ,GACZK,qBAAWR,GAEnBS,OAAO1B,cAACQ,EAAM,IAAKc,IAC1B,CACF,CAfAK,cAuBAC,cACGC,MAPH,WACEC,YAAMd,GAAQe,OAAOC,IACnBC,QAAQD,MAAMA,EAAM,GAExB,IAIGD,OAAOC,IACNC,QAAQD,MAAMA,EAAM,IAoBxBxC,OAAO0C,iBAAiB,WAAYC,IAElC,IAAKA,EAAEC,OAbT,SAA4BA,GAC1B,SACEA,GACgB,iBAATA,KACP,SAAUA,IACI,cAAdA,EAAKC,KAIT,CAIkBC,CAAmBH,EAAEC,QAAU5C,OAAO+C,OAAQ,OAE9D,MAAMH,EAAOD,EAAEC,KFnDkBI,QEsDd,KAAO,IAADC,EACvBjD,OAAO+C,OAAOG,YACZ,CACEL,KAAM,YACNxD,GAAIuD,EAAKvD,GACT8D,OAAgD,QAA1CF,EAAEvB,SAAS0B,qBAAqB,QAAQ,UAAE,IAAAH,OAAA,EAAxCA,EAA0CI,cAEpD,IACD,EF7DCvE,EACFkE,IAEAnE,EAAkBmE,CE2DlB,G","file":"js/embed-3a0ee1d252eb76984ce8.chunk.js","sourcesContent":["// This hook allows a component to signal that it's done rendering in a way that\n// can be used by e.g. our embed code to determine correct iframe height\n\nlet renderSignalReceived = false;\n\ntype Callback = () => void;\n\nlet onInitialRender: Callback;\n\nexport const afterInitialRender = (callback: Callback) => {\n if (renderSignalReceived) {\n callback();\n } else {\n onInitialRender = callback;\n }\n};\n\nexport const useRenderSignal = () => {\n return () => {\n if (renderSignalReceived) {\n return;\n }\n\n renderSignalReceived = true;\n\n if (typeof onInitialRender !== 'undefined') {\n window.requestAnimationFrame(() => {\n onInitialRender();\n });\n }\n };\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-return,\n @typescript-eslint/no-explicit-any,\n @typescript-eslint/no-unsafe-assignment */\n\nimport { useEffect, useCallback } from 'react';\n\nimport { Provider } from 'react-redux';\n\nimport { useRenderSignal } from 'mastodon/../hooks/useRenderSignal';\nimport { fetchStatus, toggleStatusSpoilers } from 'mastodon/actions/statuses';\nimport { hydrateStore } from 'mastodon/actions/store';\nimport { Router } from 'mastodon/components/router';\nimport { DetailedStatus } from 'mastodon/features/status/components/detailed_status';\nimport initialState from 'mastodon/initial_state';\nimport { IntlProvider } from 'mastodon/locales';\nimport { makeGetStatus, makeGetPictureInPicture } from 'mastodon/selectors';\nimport { store, useAppSelector, useAppDispatch } from 'mastodon/store';\n\nconst getStatus = makeGetStatus() as unknown as (arg0: any, arg1: any) => any;\nconst getPictureInPicture = makeGetPictureInPicture() as unknown as (\n arg0: any,\n arg1: any,\n) => any;\n\nconst Embed: React.FC<{ id: string }> = ({ id }) => {\n const status = useAppSelector((state) => getStatus(state, { id }));\n const pictureInPicture = useAppSelector((state) =>\n getPictureInPicture(state, { id }),\n );\n const domain = useAppSelector((state) => state.meta.get('domain'));\n const dispatch = useAppDispatch();\n const dispatchRenderSignal = useRenderSignal();\n\n useEffect(() => {\n dispatch(fetchStatus(id, false, false));\n }, [dispatch, id]);\n\n const handleToggleHidden = useCallback(() => {\n dispatch(toggleStatusSpoilers(id));\n }, [dispatch, id]);\n\n // This allows us to calculate the correct page height for embeds\n if (status) {\n dispatchRenderSignal();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n const permalink = status?.get('url') as string;\n\n return (\n
\n \n\n \n
\n );\n};\n\nexport const Status: React.FC<{ id: string }> = ({ id }) => {\n useEffect(() => {\n if (initialState) {\n store.dispatch(hydrateStore(initialState));\n }\n }, []);\n\n return (\n \n \n \n \n \n \n \n );\n};\n","import './public-path';\nimport { createRoot } from 'react-dom/client';\n\nimport { afterInitialRender } from 'mastodon/../hooks/useRenderSignal';\n\nimport { start } from '../mastodon/common';\nimport { Status } from '../mastodon/features/standalone/status';\nimport { loadPolyfills } from '../mastodon/polyfills';\nimport ready from '../mastodon/ready';\n\nstart();\n\nfunction loaded() {\n const mountNode = document.getElementById('mastodon-status');\n\n if (mountNode) {\n const attr = mountNode.getAttribute('data-props');\n\n if (!attr) return;\n\n const props = JSON.parse(attr) as { id: string; locale: string };\n const root = createRoot(mountNode);\n\n root.render();\n }\n}\n\nfunction main() {\n ready(loaded).catch((error: unknown) => {\n console.error(error);\n });\n}\n\nloadPolyfills()\n .then(main)\n .catch((error: unknown) => {\n console.error(error);\n });\n\ninterface SetHeightMessage {\n type: 'setHeight';\n id: string;\n height: number;\n}\n\nfunction isSetHeightMessage(data: unknown): data is SetHeightMessage {\n if (\n data &&\n typeof data === 'object' &&\n 'type' in data &&\n data.type === 'setHeight'\n )\n return true;\n else return false;\n}\n\nwindow.addEventListener('message', (e) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- typings are not correct, it can be null in very rare cases\n if (!e.data || !isSetHeightMessage(e.data) || !window.parent) return;\n\n const data = e.data;\n\n // We use a timeout to allow for the React page to render before calculating the height\n afterInitialRender(() => {\n window.parent.postMessage(\n {\n type: 'setHeight',\n id: data.id,\n height: document.getElementsByTagName('html')[0]?.scrollHeight,\n },\n '*',\n );\n });\n});\n"],"sourceRoot":""}