{
  "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": "oEAAAA,IAAO,IAAIC,GAAS,SAASA,EAAQ,CAAC,IAAIC,EAAUD,EAAQ,UAAU,IAAI,OAAO,QAAS,SAAaE,EAAQF,EAAQ,QAAQ,IAAI,iBAAiB,QAAQ,UAAU,eAAe,EAAMG,EAASH,EAAQ,SAAS,IAAI,UAAU,UAAU,YAAY,EAAE,SAAS,SAAS,EAAMI,EAASJ,EAAQ,SAAS,IAAI,UAAU,UAAU,YAAY,EAAE,SAAS,cAAc,EAAMK,EAASL,EAAQ,SAAS,IAAII,EAAS,GAAG,CAACD,EAAS,EAAMG,EAAgBN,EAAQ,gBAAgB,IAAIK,EAAS,GAAG,CAACH,EAAQ,EAAMK,EAAUP,EAAQ,UAAU,IAAI,MAAM,KAAK,UAAU,QAAQ,EAAMQ,EAAQR,EAAQ,QAAQ,IAAI,MAAM,KAAK,UAAU,QAAQ,CAAE,GAAGA,IAAUA,EAAQ,CAAC,EAAE,ECAvoBS,IAAO,IAAMC,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": ["init_ssg_sandbox_shims", "Browser", "isBrowser", "isTouch", "isChrome", "isWebKit", "isSafari", "isSafariDesktop", "isWindows", "isMacOS", "init_ssg_sandbox_shims", "SuspenseValue", "status", "promise", "value", "reason", "resolver"]
}
