{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/wOI0XDWuPNeaYuatKp4b/ezOdeUpHBrE7fwL9evTL/browser.js", "ssg:https://framerusercontent.com/modules/HpmklHRFex5a5HMDftQo/5VVfjnRHGJM1T33zb1N5/SuspenseValue.js"],
  "sourcesContent": ["export var Browser;(function(Browser){var isBrowser=Browser.isBrowser=()=>typeof window===\"object\";var isTouch=Browser.isTouch=()=>\"ontouchstart\"in window||navigator.maxTouchPoints>0;var isChrome=Browser.isChrome=()=>navigator.userAgent.toLowerCase().includes(\"chrome/\");var isWebKit=Browser.isWebKit=()=>navigator.userAgent.toLowerCase().includes(\"applewebkit/\");var isSafari=Browser.isSafari=()=>isWebKit()&&!isChrome();var isSafariDesktop=Browser.isSafariDesktop=()=>isSafari()&&!isTouch();var isWindows=Browser.isWindows=()=>/Win/.test(navigator.platform);var isMacOS=Browser.isMacOS=()=>/Mac/.test(navigator.platform);})(Browser||(Browser={}));\nexport const __FramerMetadata__ = {\"exports\":{\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./browser.map", "export class SuspenseValue{read(){const status=this.status;// The component did rerender and we already set the status below.\nif(status){switch(status.type){// If the promise is still pending we need to suspend again.\ncase\"pending\":throw status.promise;// If the promise is fulfilled we can return the value\n// synchronously.\ncase\"fulfilled\":return status.value;// If the promise was rejected we can throw the error so we can\n// catch it with an ErrorBoundary in an ancestor.\ncase\"rejected\":throw status.reason;}}// Attach a callback to the promise to store the resolved value or the error\n// on the promise so we can synchronously read it later.\nconst promise=this.resolver().then(value=>{this.status={type:\"fulfilled\",value};},reason=>{this.status={type:\"rejected\",reason};});// This is the first time the promise is passed into the function. We set\n// the status field so we can early return above.\nthis.status={type:\"pending\",promise};// We throw the promise to suspend rendering. React will wait until the\n// promise is settled and rerender the component afterwards. When React\n// rerenders the component we can return the value in the code above.\nthrow promise;}constructor(resolver){this.resolver=resolver;}}\nexport const __FramerMetadata__ = {\"exports\":{\"SuspenseValue\":{\"type\":\"class\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./SuspenseValue.map"],
  "mappings": "gDAAO,IAAIA,GAAS,SAASA,EAAQ,CAAC,IAAIC,EAAUD,EAAQ,UAAU,IAAI,OAAOE,GAAS,SAAaC,EAAQH,EAAQ,QAAQ,IAAI,iBAAiBE,GAAQE,EAAU,eAAe,EAAMC,EAASL,EAAQ,SAAS,IAAII,EAAU,UAAU,YAAY,EAAE,SAAS,SAAS,EAAME,EAASN,EAAQ,SAAS,IAAII,EAAU,UAAU,YAAY,EAAE,SAAS,cAAc,EAAMG,EAASP,EAAQ,SAAS,IAAIM,EAAS,GAAG,CAACD,EAAS,EAAMG,EAAgBR,EAAQ,gBAAgB,IAAIO,EAAS,GAAG,CAACJ,EAAQ,EAAMM,EAAUT,EAAQ,UAAU,IAAI,MAAM,KAAKI,EAAU,QAAQ,EAAMM,EAAQV,EAAQ,QAAQ,IAAI,MAAM,KAAKI,EAAU,QAAQ,CAAE,GAAGJ,IAAUA,EAAQ,CAAC,EAAE,ECAhoB,IAAMW,EAAN,KAAmB,CAAC,MAAM,CAAC,IAAMC,EAAO,KAAK,OACpD,GAAGA,EAAQ,OAAOA,EAAO,KAAK,CAC9B,IAAI,UAAU,MAAMA,EAAO,QAE3B,IAAI,YAAY,OAAOA,EAAO,MAE9B,IAAI,WAAW,MAAMA,EAAO,MAAO,CAEnC,IAAMC,EAAQ,KAAK,SAAS,EAAE,KAAKC,GAAO,CAAC,KAAK,OAAO,CAAC,KAAK,YAAY,MAAAA,CAAK,CAAE,EAAEC,GAAQ,CAAC,KAAK,OAAO,CAAC,KAAK,WAAW,OAAAA,CAAM,CAAE,CAAC,EAEjI,WAAK,OAAO,CAAC,KAAK,UAAU,QAAAF,CAAO,EAG7BA,CAAQ,CAAC,YAAYG,EAAS,CAAC,KAAK,SAASA,CAAS,CAAC",
  "names": ["Browser", "isBrowser", "window", "isTouch", "navigator", "isChrome", "isWebKit", "isSafari", "isSafariDesktop", "isWindows", "isMacOS", "SuspenseValue", "status", "promise", "value", "reason", "resolver"]
}
