{"version":3,"sources":["webpack:///./app/javascript/mastodon/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","body","style","overflow","_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,WACJ,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,MEuDjCtB,SAASuB,KAAKC,MAAMC,SAAW,SFvDEH,EE0Dd,KAAO,IAADI,EACvBpD,OAAO+C,OAAOM,YACZ,CACER,KAAM,YACNxD,GAAIuD,EAAKvD,GACTiE,OAAgD,QAA1CF,EAAE1B,SAAS6B,qBAAqB,QAAQ,UAAE,IAAAH,OAAA,EAAxCA,EAA0CI,cAEpD,IACD,EFjEC1E,EACFkE,IAEAnE,EAAkBmE,CE+DlB,G","file":"js/embed-5404bce3958e5cccdba9.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 { 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 { useRenderSignal } from 'mastodon/hooks/useRenderSignal';\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    <div className='embed'>\n      <DetailedStatus\n        status={status}\n        domain={domain}\n        pictureInPicture={pictureInPicture}\n        onToggleHidden={handleToggleHidden}\n        withLogo\n      />\n\n      <a\n        className='embed__overlay'\n        href={permalink}\n        target='_blank'\n        rel='noopener'\n        aria-label=''\n      />\n    </div>\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    <IntlProvider>\n      <Provider store={store}>\n        <Router>\n          <Embed id={id} />\n        </Router>\n      </Provider>\n    </IntlProvider>\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(<Status {...props} />);\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  // Only set overflow to `hidden` once we got the expected `message` so the post can still be scrolled if\n  // embedded without parent Javascript support\n  document.body.style.overflow = 'hidden';\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":""}