{"version":3,"file":"VisualEditingComponent2.cjs","sources":["../../src/react-router/VisualEditingComponent.tsx"],"sourcesContent":["import {useEffect, useRef, useState} from 'react'\nimport {useLocation, useNavigate, useRevalidator} from 'react-router'\nimport {type HistoryAdapterNavigate, type HistoryRefresh, type VisualEditingOptions} from '../types'\nimport {enableVisualEditing} from '../ui/enableVisualEditing'\n\n/**\n * @public\n */\nexport interface VisualEditingProps extends Omit<VisualEditingOptions, 'history' | 'refresh'> {\n  /**\n   * @deprecated The history adapter is already implemented\n   */\n  history?: never\n  /**\n   * The refresh API allows smarter refresh logic than the default `location.reload()` behavior.\n   * You can call the refreshDefault argument to trigger the default refresh behavior so you don't have to reimplement it.\n   */\n  refresh?: (\n    payload: HistoryRefresh,\n    refreshDefault: () => false | Promise<void>,\n  ) => false | Promise<void>\n}\n\nexport default function VisualEditingComponent(props: VisualEditingProps): null {\n  const {components, refresh, zIndex} = props\n\n  const navigateRemix = useNavigate()\n  const navigateRemixRef = useRef(navigateRemix)\n  const [navigate, setNavigate] = useState<HistoryAdapterNavigate | undefined>()\n  const revalidator = useRevalidator()\n  const [revalidatorPromise, setRevalidatorPromise] = useState<(() => void) | null>(null)\n  const [revalidatorLoading, setRevalidatorLoading] = useState(false)\n\n  useEffect(() => {\n    navigateRemixRef.current = navigateRemix\n  }, [navigateRemix])\n  useEffect(() => {\n    if (revalidatorPromise && revalidator.state === 'loading') {\n      setRevalidatorLoading(true)\n    } else if (revalidatorPromise && revalidatorLoading && revalidator.state === 'idle') {\n      revalidatorPromise()\n      setRevalidatorPromise(null)\n      setRevalidatorLoading(false)\n    }\n  }, [revalidatorLoading, revalidator.state, revalidatorPromise])\n  useEffect(() => {\n    const disable = enableVisualEditing({\n      components,\n      zIndex,\n      refresh: (payload) => {\n        function refreshDefault() {\n          if (payload.source === 'mutation' && payload.livePreviewEnabled) {\n            return false\n          }\n          return new Promise<void>((resolve) => {\n            revalidator.revalidate()\n            setRevalidatorPromise(() => resolve)\n          })\n        }\n        return refresh ? refresh(payload, refreshDefault) : refreshDefault()\n      },\n      history: {\n        subscribe: (_navigate) => {\n          setNavigate(() => _navigate)\n          return () => setNavigate(undefined)\n        },\n        update: (update) => {\n          if (update.type === 'push' || update.type === 'replace') {\n            navigateRemixRef.current(update.url, {\n              replace: update.type === 'replace',\n            })\n          } else if (update.type === 'pop') {\n            navigateRemixRef.current(-1)\n          }\n        },\n      },\n    })\n    return () => disable()\n  }, [components, refresh, revalidator, zIndex])\n\n  const location = useLocation()\n  useEffect(() => {\n    if (navigate) {\n      navigate({\n        type: 'push',\n        url: `${location.pathname}${location.search}${location.hash}`,\n      })\n    }\n  }, [location.hash, location.pathname, location.search, navigate])\n\n  return null\n}\n"],"names":["exports","default","props","$","_c","components","refresh","zIndex","navigateRemix","useNavigate","navigateRemixRef","useRef","navigate","setNavigate","useState","revalidator","useRevalidator","revalidatorPromise","setRevalidatorPromise","revalidatorLoading","setRevalidatorLoading","t0","t1","t2","t3","t4","t5","current","useEffect","state","disable","enableVisualEditing","payload","refreshDefault","source","livePreviewEnabled","Promise","resolve","revalidate","history","subscribe","_navigate","undefined","update","type","url","replace","location","useLocation","t6","t7","hash","pathname","search"],"mappings":"yIAwFmEA,QAAAC,QAjEnE,SAAeC,GAAAC,MAAAA,EAAAC,IAAA,KACbC,WAAAA,EAAAA,QAAAC,EAAAA,OAAAC,GAAsCL,EAEtCM,EAAsBC,EAAAA,cACtBC,EAAyBC,EAAAA,OAAOH,IAChCI,EAAAC,GAAgCC,EAA6CA,WAC7EC,EAAoBC,EAAAA,kBACpBC,EAAAC,GAAoDJ,EAAAA,gBACpDK,EAAAC,GAAoDN,eAAe,IAAAO,EAAAC,EAIhDC,EAAAC,EAS4CC,EAAAC,EAbIvB,OAAAK,GAEzDa,EAAAA,KACRX,EAAgBiB,QAAWnB,CAAAA,EAC1Bc,GAACd,GAAcL,KAAAK,EAAAL,KAAAkB,EAAAlB,KAAAmB,IAAAD,EAAAlB,EAAA,GAAAmB,EAAAnB,EAAA,IAFlByB,YAAUP,EAEPC,GAAgBnB,EAAA,KAAAY,EAAAc,OAAA1B,EAAA,KAAAgB,GAAAhB,EAAA,KAAAc,GACTM,EAAAA,KACJN,GAA4C,YAAtBF,EAAWc,MACnCT,MACSH,GAAsBE,GAA4C,SAAtBJ,EAAWc,QAChEZ,IACAC,QACAE,MAA2B,EAE5BI,GAACL,EAAoBJ,EAAWc,MAAQZ,GAAmBd,EAAA,GAAAY,EAAAc,MAAA1B,KAAAgB,EAAAhB,KAAAc,EAAAd,KAAAoB,EAAApB,KAAAqB,IAAAD,EAAApB,EAAA,GAAAqB,EAAArB,EAAA,IAR9DyB,EAAAA,UAAUL,EAQPC,GAA4DrB,EAAA,KAAAE,GAAAF,EAAAG,KAAAA,GAAAH,EAAAY,MAAAA,GAAAZ,QAAAI,GACrDkB,EAAAA,KACRK,MAAAA,EAAgBC,EAAAA,EAAA,CAAA1B,aAAAE,SAAAD,QAAA0B,IAIZ,MAAAC,aACMD,OAAmB,aAAnBA,EAAOE,SAA0BF,EAAOG,qBAAmBC,IAAAA,SAAAC,IAI7DtB,EAAWuB,aACXpB,GAAqB,IAAOmB,GAAO,GAAC,EAEvC,OACM/B,EAAUA,EAAQ0B,EAASC,GAAkBA,GAAe,EAACM,QAAA,CAAAC,cAIlE3B,GAAW,IAAO4B,IACL5B,IAAAA,OAAW6B,IAAWC,OAAAA,IAGf,SAAVC,EAAAA,MAAoC,YAAhBD,EAAMC,KAClClC,EAAgBiB,QAASgB,EAAME,IAAA,CAAAC,QACJ,YAAhBH,EAAMC,OAEQ,QAAhBD,EAAMC,MACflC,EAAgBiB,SAAW,EAAA,KAIjC,MACWG,IAAAA,GAAQ,EACpBJ,GAACrB,EAAYC,EAASS,EAAaR,GAAOJ,KAAAE,EAAAF,KAAAG,EAAAH,MAAAY,EAAAZ,MAAAI,EAAAJ,MAAAsB,EAAAtB,MAAAuB,IAAAD,EAAAtB,EAAA,IAAAuB,EAAAvB,EAAA,KAjC7CyB,EAAAA,UAAUH,EAiCPC,GAEHqB,MAAAA,EAAiBC,EAAAA,cAAa,IAAAC,EAAAC,EAAA/C,OAAAA,QAAA4C,EAAAI,MAAAhD,QAAA4C,EAAAK,UAAAjD,QAAA4C,EAAAM,QAAAlD,QAAAS,GACpBqC,EAAAA,KACJrC,GACFA,EAAQ,CAAAgC,KACA,OAAMC,IACP,GAAGE,EAAQK,WAAYL,EAAQM,SAAUN,EAAQI,QACvD,EAEFD,EAACH,CAAAA,EAAQI,KAAOJ,EAAQK,SAAWL,EAAQM,OAASzC,GAAST,EAAA,IAAA4C,EAAAI,KAAAhD,EAAA,IAAA4C,EAAAK,SAAAjD,EAAA,IAAA4C,EAAAM,OAAAlD,MAAAS,EAAAT,MAAA8C,EAAA9C,MAAA+C,IAAAD,EAAA9C,EAAA,IAAA+C,EAAA/C,EAAA,KAPhEyB,YAAUqB,EAOPC,GAA8D,IAAA"}