diff --git a/docs/231-f1ed70c29faab9dacc9c.js b/docs/231-f1ed70c29faab9dacc9c.js new file mode 100644 index 00000000..aa37989a --- /dev/null +++ b/docs/231-f1ed70c29faab9dacc9c.js @@ -0,0 +1,2 @@ +(self.webpackChunkanime_girls_holding_programming_books=self.webpackChunkanime_girls_holding_programming_books||[]).push([[231],{7231:function(){!function(){"use strict";if("undefined"!=typeof window){var t=window.navigator.userAgent.match(/Edge\/(\d{2})\./),e=t?parseInt(t[1],10):null,i=!!e&&16<=e&&e<=18;if("objectFit"in document.documentElement.style==0||i){var n=function(t,e,i){var n,o,l,a,d;if((i=i.split(" ")).length<2&&(i[1]=i[0]),"x"===t)n=i[0],o=i[1],l="left",a="right",d=e.clientWidth;else{if("y"!==t)return;n=i[1],o=i[0],l="top",a="bottom",d=e.clientHeight}if(n!==l&&o!==l){if(n!==a&&o!==a)return"center"===n||"50%"===n?(e.style[l]="50%",void(e.style["margin-"+l]=d/-2+"px")):void(0<=n.indexOf("%")?(n=parseInt(n,10))<50?(e.style[l]=n+"%",e.style["margin-"+l]=d*(n/-100)+"px"):(n=100-n,e.style[a]=n+"%",e.style["margin-"+a]=d*(n/-100)+"px"):e.style[l]=n);e.style[a]="0"}else e.style[l]="0"},o=function(t){var e=t.dataset?t.dataset.objectFit:t.getAttribute("data-object-fit"),i=t.dataset?t.dataset.objectPosition:t.getAttribute("data-object-position");e=e||"cover",i=i||"50% 50%";var o=t.parentNode;return function(t){var e=window.getComputedStyle(t,null),i=e.getPropertyValue("position"),n=e.getPropertyValue("overflow"),o=e.getPropertyValue("display");i&&"static"!==i||(t.style.position="relative"),"hidden"!==n&&(t.style.overflow="hidden"),o&&"inline"!==o||(t.style.display="block"),0===t.clientHeight&&(t.style.height="100%"),-1===t.className.indexOf("object-fit-polyfill")&&(t.className=t.className+" object-fit-polyfill")}(o),function(t){var e=window.getComputedStyle(t,null),i={"max-width":"none","max-height":"none","min-width":"0px","min-height":"0px",top:"auto",right:"auto",bottom:"auto",left:"auto","margin-top":"0px","margin-right":"0px","margin-bottom":"0px","margin-left":"0px"};for(var n in i)e.getPropertyValue(n)!==i[n]&&(t.style[n]=i[n])}(t),t.style.position="absolute",t.style.width="auto",t.style.height="auto","scale-down"===e&&(e=t.clientWidtho.clientWidth||"contain"===e&&t.clientWidth n.clientWidth || \"contain\" === e && t.clientWidth < n.clientWidth ? (t.style.top = \"0\", t.style.marginTop = \"0\", o(\"x\", t, i)) : (t.style.width = \"100%\", t.style.height = \"auto\", t.style.left = \"0\", t.style.marginLeft = \"0\", o(\"y\", t, i))));\n },\n i = function i(t) {\n if (void 0 === t || t instanceof Event) t = document.querySelectorAll(\"[data-object-fit]\");else if (t && t.nodeName) t = [t];else {\n if (\"object\" != typeof t || !t.length || !t[0].nodeName) return !1;\n t = t;\n }\n\n for (var e = 0; e < t.length; e++) {\n if (t[e].nodeName) {\n var i = t[e].nodeName.toLowerCase();\n\n if (\"img\" === i) {\n if (n) continue;\n t[e].complete ? l(t[e]) : t[e].addEventListener(\"load\", function () {\n l(this);\n });\n } else \"video\" === i ? 0 < t[e].readyState ? l(t[e]) : t[e].addEventListener(\"loadedmetadata\", function () {\n l(this);\n }) : l(t[e]);\n }\n }\n\n return !0;\n };\n\n \"loading\" === document.readyState ? document.addEventListener(\"DOMContentLoaded\", i) : i(), window.addEventListener(\"resize\", i), window.objectFitPolyfill = i;\n } else window.objectFitPolyfill = function () {\n return !1;\n };\n }\n}();"],"names":["window","t","navigator","userAgent","match","e","parseInt","n","document","documentElement","style","o","i","l","a","d","split","length","clientWidth","clientHeight","indexOf","dataset","objectFit","getAttribute","objectPosition","parentNode","getComputedStyle","getPropertyValue","position","overflow","display","height","className","top","right","bottom","left","width","marginTop","marginLeft","Event","querySelectorAll","nodeName","toLowerCase","complete","addEventListener","this","readyState","objectFitPolyfill"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/404.html b/docs/404.html new file mode 100644 index 00000000..8640a31e --- /dev/null +++ b/docs/404.html @@ -0,0 +1,3 @@ +
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file diff --git a/docs/404/index.html b/docs/404/index.html new file mode 100644 index 00000000..c2e4e069 --- /dev/null +++ b/docs/404/index.html @@ -0,0 +1,3 @@ +
Not found

Page not found

Sorry 😔 we couldn’t find what you were looking for.

Go home.

\ No newline at end of file diff --git a/docs/610-7ee1456adf304dc72c41.js b/docs/610-7ee1456adf304dc72c41.js new file mode 100644 index 00000000..fdd0d616 --- /dev/null +++ b/docs/610-7ee1456adf304dc72c41.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkanime_girls_holding_programming_books=self.webpackChunkanime_girls_holding_programming_books||[]).push([[610],{3610:function(n,e,r){r.r(e),r.d(e,{createIntersectionObserver:function(){return c}});var t,o=new WeakMap,i=navigator.connection||navigator.mozConnection||navigator.webkitConnection;function c(n){return"IntersectionObserver"in window?(t||(t=new IntersectionObserver((function(n){n.forEach((function(n){var e;n.isIntersecting&&(null==(e=o.get(n.target))||e(),o.delete(n.target))}))}),{rootMargin:"4g"!==(null==i?void 0:i.effectiveType)||null!=i&&i.saveData?"2500px":"1250px"})),function(e){return e.current&&(o.set(e.current,n),t.observe(e.current)),function(){t&&e.current&&(o.delete(e.current),t.unobserve(e.current))}}):function(){return n(),function(){}}}}}]); +//# sourceMappingURL=610-7ee1456adf304dc72c41.js.map \ No newline at end of file diff --git a/docs/610-7ee1456adf304dc72c41.js.map b/docs/610-7ee1456adf304dc72c41.js.map new file mode 100644 index 00000000..8da0f92d --- /dev/null +++ b/docs/610-7ee1456adf304dc72c41.js.map @@ -0,0 +1 @@ +{"version":3,"file":"610-7ee1456adf304dc72c41.js","mappings":"mOAGA,IAAIA,EAIEC,EAAa,IAAIC,QAEjBC,EACHC,UAAkBD,YAClBC,UAAkBC,eAClBD,UAAkBE,iBAAAA,SAQLC,EACdC,GAKA,MAAM,yBAA0BC,QAO3BT,IACHA,EAAuB,IAAIU,sBACzB,YACEC,EAAQC,SAAQ,kBACVC,EAAMC,iBAAAA,OAAAA,EAERb,EAAWc,IAAIF,EAAMG,UAAAA,IAErBf,EAAAA,OAAkBY,EAAMG,cAI9B,CACEC,WAAW,QAAXA,MAvBiBd,OAAAA,EAAAA,EAAYe,gBAAAA,MAwBCf,GAAAA,EAAYgB,SAAAA,SAAAA,YAAAA,SAQ9CC,GAQA,OANIA,EAAQC,UAEVpB,EAAWqB,IAAIF,EAAQC,QAASb,GAChCR,EAAqBuB,QAAQH,EAAQC,UAAAA,WAIjCrB,GAAwBoB,EAAQC,UAClCpB,EAAAA,OAAkBmB,EAAQC,SAC1BrB,EAAqBwB,UAAUJ,EAAQC,aAAAA,WArCzC,OADAb,IAAAA","sources":["webpack://anime-girls-holding-programming-books/../src/components/intersection-observer.ts"],"sourcesContent":["/* eslint-disable no-unused-expressions */\nimport { RefObject } from \"react\"\n\nlet intersectionObserver: IntersectionObserver\n\nexport type Unobserver = () => void\n\nconst ioEntryMap = new WeakMap void>()\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst connection =\n (navigator as any).connection ||\n (navigator as any).mozConnection ||\n (navigator as any).webkitConnection\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\n// These match the thresholds used in Chrome's native lazy loading\n// @see https://web.dev/browser-level-image-lazy-loading/#distance-from-viewport-thresholds\nconst FAST_CONNECTION_THRESHOLD = `1250px`\nconst SLOW_CONNECTION_THRESHOLD = `2500px`\n\nexport function createIntersectionObserver(\n callback: () => void\n): (element: RefObject) => Unobserver {\n const connectionType = connection?.effectiveType\n\n // if we don't support intersectionObserver we don't lazy load (Sorry IE 11).\n if (!(`IntersectionObserver` in window)) {\n return function observe(): Unobserver {\n callback()\n return function unobserve(): void {}\n }\n }\n\n if (!intersectionObserver) {\n intersectionObserver = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n // Get the matching entry's callback and call it\n ioEntryMap.get(entry.target as HTMLElement)?.()\n // We only need to call it once\n ioEntryMap.delete(entry.target as HTMLElement)\n }\n })\n },\n {\n rootMargin:\n connectionType === `4g` && !connection?.saveData\n ? FAST_CONNECTION_THRESHOLD\n : SLOW_CONNECTION_THRESHOLD,\n }\n )\n }\n\n return function observe(\n element: RefObject\n ): Unobserver {\n if (element.current) {\n // Store a reference to the callback mapped to the element being watched\n ioEntryMap.set(element.current, callback)\n intersectionObserver.observe(element.current)\n }\n\n return function unobserve(): void {\n if (intersectionObserver && element.current) {\n ioEntryMap.delete(element.current)\n intersectionObserver.unobserve(element.current)\n }\n }\n }\n}\n"],"names":["intersectionObserver","ioEntryMap","WeakMap","connection","navigator","mozConnection","webkitConnection","createIntersectionObserver","callback","window","IntersectionObserver","entries","forEach","entry","isIntersecting","get","target","rootMargin","effectiveType","saveData","element","current","set","observe","unobserve"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/898-a35ed9c500d9bee9e356.js b/docs/898-a35ed9c500d9bee9e356.js new file mode 100644 index 00000000..63dc8c61 --- /dev/null +++ b/docs/898-a35ed9c500d9bee9e356.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkanime_girls_holding_programming_books=self.webpackChunkanime_girls_holding_programming_books||[]).push([[898],{6898:function(e,r,t){t.r(r),t.d(r,{lazyHydrate:function(){return c}});var o=t(396),n=t(7294),i=t(3935),a=(t(4041),t(2369),["image","loading","isLoading","isLoaded","toggleIsLoaded","ref","imgClassName","imgStyle","objectPosition","backgroundColor","objectFit"]);function c(e,r,t,c){var g=e.image,d=e.loading,l=e.isLoading,u=e.isLoaded,s=e.toggleIsLoaded,m=e.ref,h=e.imgClassName,b=e.imgStyle,k=void 0===b?{}:b,f=e.objectPosition,_=e.backgroundColor,y=e.objectFit,C=void 0===y?"cover":y,L=(0,o._)(e,a),j=g.width,p=g.height,v=g.layout,w=g.images,N=g.placeholder,P=g.backgroundColor,E=JSON.stringify(w);k=(0,o.a)({objectFit:C,objectPosition:f,backgroundColor:_},k);var F=n.createElement(o.L,{layout:v,width:j,height:p},n.createElement(o.P,(0,o.a)({},(0,o.g)(N,u,v,j,p,P,C,f))),n.createElement(o.M,(0,o.a)({},L,{width:j,height:p,className:h},(0,o.b)(l,u,w,d,s,E,m,k))));return r.current&&(i.createRoot?(t.current||(t.current=i.createRoot(r.current)),t.current.render(F)):((t.current||c.current?i.render:i.hydrate)(F,r.current),t.current=!0)),function(){r.current&&(i.createRoot?t.current.render(null):i.render(null,r.current))}}}}]); +//# sourceMappingURL=898-a35ed9c500d9bee9e356.js.map \ No newline at end of file diff --git a/docs/898-a35ed9c500d9bee9e356.js.map b/docs/898-a35ed9c500d9bee9e356.js.map new file mode 100644 index 00000000..38191d8f --- /dev/null +++ b/docs/898-a35ed9c500d9bee9e356.js.map @@ -0,0 +1 @@ +{"version":3,"file":"898-a35ed9c500d9bee9e356.js","mappings":"6ZAgBgBA,EAAAA,EAedC,EACAC,EACAC,GAAAA,IAfEC,EAAAA,EAAAA,MACAC,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,UACAC,EAAAA,EAAAA,SACAC,EAAAA,EAAAA,eACAC,EAAAA,EAAAA,IACAC,EAAAA,EAAAA,aAAAA,EAAAA,EACAC,SAAAA,OAAAA,IAAAA,EAAW,GAAAC,EACXC,EAAAA,EAAAA,eACAC,EAAAA,EAAAA,gBAAAA,EAAAA,EACAC,UAAAA,OAAAA,IAAAA,EAAAA,QAAAA,EACGC,GAAAA,EAAAA,EAAAA,GAAAA,EAAAA,GAOHC,EAMEb,EANFa,MACAC,EAKEd,EALFc,OACAC,EAIEf,EAJFe,OACAC,EAGEhB,EAHFgB,OACAC,EAEEjB,EAFFiB,YACiBC,EACflB,EADFU,gBAGIS,EAAWC,KAAKC,UAAUL,GAEhCT,GAAAA,EAAAA,EAAAA,GAAAA,CACEI,UAAAA,EACAF,eAAAA,EACAC,gBAAAA,GACGH,GAGL,IAAMe,EACJC,EAAAA,cAACC,EAAAA,EAAAA,CAAcT,OAAQA,EAAQF,MAAOA,EAAOC,OAAQA,GACnDS,EAAAA,cAACE,EAAAA,GAAAA,EAAAA,EAAAA,GAAAA,IACKC,EAAAA,EAAAA,GACFT,EACAd,EACAY,EACAF,EACAC,EACAI,EACAP,EACAF,KAIJc,EAAAA,cAACI,EAAAA,GAAAA,EAAAA,EAAAA,GAAAA,GACMf,EAAAA,CACLC,MAAOA,EACPC,OAAQA,EACRc,UAAWtB,IACPuB,EAAAA,EAAAA,GACF3B,EACAC,EACAa,EACAf,EACAG,EACAe,EACAd,EACAE,MA2BR,OArBIV,EAAKiC,UAGHC,EAAAA,YACGjC,EAASgC,UAEZhC,EAASgC,QAAUC,EAAAA,WAAoBlC,EAAKiC,UAI9ChC,EAASgC,QAAQE,OAAOV,MAGtBxB,EAASgC,SAAW/B,EAAa+B,QAC7BC,EAAAA,OACAA,EAAAA,SACGT,EAAWzB,EAAKiC,SACzBhC,EAASgC,SAAAA,IAAU,WAKjBjC,EAAKiC,UAEHC,EAAAA,WAEFjC,EAASgC,QAAQE,OAAO,MAExBD,EAAAA,OAAgB,KAAiClC,EAAKiC","sources":["webpack://anime-girls-holding-programming-books/../src/components/lazy-hydrate.tsx"],"sourcesContent":["import React, { MutableRefObject } from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { GatsbyImageProps } from \"./gatsby-image.browser\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImageProps, MainImage } from \"./main-image\"\nimport { getMainProps, getPlaceholderProps } from \"./hooks\"\nimport { ReactElement } from \"react\"\n\ntype LazyHydrateProps = Omit & {\n isLoading: boolean\n isLoaded: boolean // alwaystype SetStateAction = S | ((prevState: S) => S);\n toggleIsLoaded: (toggle: boolean) => void\n ref: MutableRefObject\n}\n\nexport function lazyHydrate(\n {\n image,\n loading,\n isLoading,\n isLoaded,\n toggleIsLoaded,\n ref,\n imgClassName,\n imgStyle = {},\n objectPosition,\n backgroundColor,\n objectFit = `cover`,\n ...props\n }: LazyHydrateProps,\n root: MutableRefObject,\n hydrated: MutableRefObject,\n forceHydrate: MutableRefObject\n): (() => void) | null {\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: wrapperBackgroundColor,\n } = image\n\n const cacheKey = JSON.stringify(images)\n\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n const component = (\n \n \n\n )}\n width={width}\n height={height}\n className={imgClassName}\n {...getMainProps(\n isLoading,\n isLoaded,\n images,\n loading,\n toggleIsLoaded,\n cacheKey,\n ref,\n imgStyle\n )}\n />\n \n )\n\n if (root.current) {\n // Force render to mitigate \"Expected server HTML to contain a matching\" in develop\n // @ts-ignore react 18 typings\n if (ReactDOM.createRoot) {\n if (!hydrated.current) {\n // @ts-ignore react 18 typings\n hydrated.current = ReactDOM.createRoot(root.current)\n }\n\n // @ts-ignore react 18 typings\n hydrated.current.render(component)\n } else {\n const doRender =\n hydrated.current || forceHydrate.current\n ? ReactDOM.render\n : ReactDOM.hydrate\n doRender(component, root.current)\n hydrated.current = true\n }\n }\n\n return (): void => {\n if (root.current) {\n // @ts-ignore react 18 typings\n if (ReactDOM.createRoot) {\n // @ts-ignore react 18 typings\n hydrated.current.render(null)\n } else {\n ReactDOM.render(null as unknown as ReactElement, root.current)\n }\n }\n }\n}\n"],"names":["lazyHydrate","root","hydrated","forceHydrate","image","loading","isLoading","isLoaded","toggleIsLoaded","ref","imgClassName","imgStyle","v","objectPosition","backgroundColor","objectFit","props","width","height","layout","images","placeholder","wrapperBackgroundColor","cacheKey","JSON","stringify","component","React","LayoutWrapper","Placeholder","getPlaceholderProps","MainImage","className","getMainProps","current","ReactDOM","render"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/app-e766ae6fadd89881aa4e.js b/docs/app-e766ae6fadd89881aa4e.js new file mode 100644 index 00000000..e77e3e39 --- /dev/null +++ b/docs/app-e766ae6fadd89881aa4e.js @@ -0,0 +1,2 @@ +(self.webpackChunkanime_girls_holding_programming_books=self.webpackChunkanime_girls_holding_programming_books||[]).push([[143],{1506:function(e){e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e},e.exports.__esModule=!0,e.exports.default=e.exports},7154:function(e){function t(){return e.exports=t=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o},e.exports.__esModule=!0,e.exports.default=e.exports},9489:function(e){function t(n,r){return e.exports=t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},e.exports.__esModule=!0,e.exports.default=e.exports,t(n,r)}e.exports=t,e.exports.__esModule=!0,e.exports.default=e.exports},2393:function(e,t){"use strict";var n=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},c=u.state,l=u.replace,p=void 0!==l&&l;if("number"==typeof t)e.history.go(t);else{c=n({},c,{key:Date.now()+""});try{i||p?e.history.replaceState(c,null,t):e.history.pushState(c,null,t)}catch(h){e.location[p?"replace":"assign"](t)}}a=r(e),i=!0;var f=new Promise((function(e){return s=e}));return o.forEach((function(e){return e({location:a,action:"PUSH"})})),f}}},a=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",t=e.indexOf("?"),n={pathname:t>-1?e.substr(0,t):e,search:t>-1?e.substr(t):""},r=0,o=[n],a=[null];return{get location(){return o[r]},addEventListener:function(e,t){},removeEventListener:function(e,t){},history:{get entries(){return o},get index(){return r},get state(){return a[r]},pushState:function(e,t,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;r++,o.push({pathname:s,search:c.length?"?"+c:c}),a.push(e)},replaceState:function(e,t,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;o[r]={pathname:s,search:c},a[r]=e},go:function(e){var t=r+e;t<0||t>a.length-1||(r=t)}}}},i=!("undefined"==typeof window||!window.document||!window.document.createElement),s=o(i?window:a()),u=s.navigate;t.V5=s},2098:function(e,t,n){"use strict";t.__esModule=!0,t.shallowCompare=t.validateRedirect=t.insertParams=t.resolve=t.match=t.pick=t.startsWith=void 0;var r,o=n(1143),a=(r=o)&&r.__esModule?r:{default:r};var i=function(e,t){return e.substr(0,t.length)===t},s=function(e,t){for(var n=void 0,r=void 0,o=t.split("?")[0],i=h(o),s=""===i[0],c=f(e),p=0,d=c.length;pt.score?-1:e.index-t.index}))},h=function(e){return e.replace(/(^\/+|\/+$)/g,"").split("/")},d=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r0})))&&n.length>0?"?"+n.join("&"):"")},v=["uri","path"];t.startsWith=i,t.pick=s,t.match=function(e,t){return s([{path:e}],t)},t.resolve=function(e,t){if(i(e,"/"))return e;var n=e.split("?"),r=n[0],o=n[1],a=t.split("?")[0],s=h(r),u=h(a);if(""===s[0])return d(a,o);if(!i(s[0],".")){var c=u.concat(s).join("/");return d(("/"===a?"":"/")+c,o)}for(var l=u.concat(s),p=[],f=0,v=l.length;f1?n-1:0),o=1;o0&&Array.isArray(r[0])&&(r=r[0]),this.transformers=r.map((function(e){return"function"==typeof e?e():e})),this.tag}return n(e,[{key:"interimTag",value:function(e,t){for(var n=arguments.length,o=Array(n>2?n-2:0),a=2;a0&&void 0!==arguments[0]?arguments[0]:s;return{onSubstitution:function(t,n){if(Array.isArray(t)){var r=t.length,o=e.separator,a=e.conjunction,i=e.serial,s=n.match(/(\n?[^\S\n]+)$/);if(t=s?t.join(o+s[1]):t.join(o+" "),a&&r>1){var u=t.lastIndexOf(o);t=t.slice(0,u)+(i?o:"")+" "+a+t.slice(u+1)}}return t}}};function c(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0&&void 0!==arguments[0]?arguments[0]:"initial";return{onEndResult:function(t){if("initial"===e){var n=t.match(/^[^\S\n]*(?=\S)/gm),r=n&&Math.min.apply(Math,c(n.map((function(e){return e.length}))));if(r){var o=new RegExp("^.{"+r+"}","gm");return t.replace(o,"")}return t}if("all"===e)return t.replace(/^[^\S\n]+/gm,"");throw new Error("Unknown type: "+e)}}},p=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return{onEndResult:function(t){if(""===e)return t.trim();if("start"===(e=e.toLowerCase())||"left"===e)return t.replace(/^\s*/,"");if("end"===e||"right"===e)return t.replace(/\s*$/,"");throw new Error("Side not supported: "+e)}}},f=(new i(u({separator:","}),l,p),new i(u({separator:",",conjunction:"and"}),l,p),new i(u({separator:",",conjunction:"or"}),l,p),function(e){return{onSubstitution:function(t,n){if(null==e||"string"!=typeof e)throw new Error("You need to specify a string character to split by.");return"string"==typeof t&&t.includes(e)&&(t=t.split(e)),t}}}),h=function(e){return null!=e&&!Number.isNaN(e)&&"boolean"!=typeof e},d=function(){return{onSubstitution:function(e){return Array.isArray(e)?e.filter(h):h(e)?e:""}}},v=(new i(f("\n"),d,u,l,p),function(e,t){return{onSubstitution:function(n,r){if(null==e||null==t)throw new Error("replaceSubstitutionTransformer requires at least 2 arguments.");return null==n?n:n.toString().replace(e,t)}}}),g=(new i(f("\n"),u,l,p,v(/&/g,"&"),v(//g,">"),v(/"/g,"""),v(/'/g,"'"),v(/`/g,"`")),function(e,t){return{onEndResult:function(n){if(null==e||null==t)throw new Error("replaceResultTransformer requires at least 2 arguments.");return n.replace(e,t)}}});new i(g(/(?:\n(?:\s*))+/g," "),p),new i(g(/(?:\n\s*)/g,""),p),new i(u({separator:","}),g(/(?:\s+)/g," "),p),new i(u({separator:",",conjunction:"or"}),g(/(?:\s+)/g," "),p),new i(u({separator:",",conjunction:"and"}),g(/(?:\s+)/g," "),p),new i(u,l,p),new i(u,g(/(?:\s+)/g," "),p),new i(l,p),new i(l("all"),p)},8440:function(e,t){"use strict";t.__esModule=!0,t.applyTrailingSlashOption=void 0;t.applyTrailingSlashOption=function(e,t){void 0===t&&(t="legacy");var n=e.endsWith(".html");return"/"===e?e:(n&&(t="never"),"always"===t?e.endsWith("/")?e:e+"/":"never"===t&&e.endsWith("/")?e.slice(0,-1):e)}},6494:function(e){"use strict";e.exports=Object.assign},8037:function(e,t,n){"use strict";var r=n(5318);t.__esModule=!0,t.withPrefix=v,t.withAssetPrefix=function(e){return v(e,g())},t.navigate=t.default=void 0;var o=r(n(7316)),a=r(n(1506)),i=r(n(5354)),s=r(n(7154)),u=r(n(5697)),c=r(n(7294)),l=n(9499),p=n(1752);t.parsePath=p.parsePath;var f=n(4587),h=n(349),d=["to","getProps","onClick","onMouseEnter","activeClassName","activeStyle","innerRef","partiallyActive","state","replace","_location"];function v(e,t){var n,r;if(void 0===t&&(t=m()),!(0,f.isLocalLink)(e))return e;if(e.startsWith("./")||e.startsWith("../"))return e;var o=null!==(n=null!==(r=t)&&void 0!==r?r:g())&&void 0!==n?n:"/";return""+(null!=o&&o.endsWith("/")?o.slice(0,-1):o)+(e.startsWith("/")?e:"/"+e)}var g=function(){return""},m=function(){return""};var y={activeClassName:u.default.string,activeStyle:u.default.object,partiallyActive:u.default.bool};function w(e){return c.default.createElement(l.Location,null,(function(t){var n=t.location;return c.default.createElement(b,(0,s.default)({},e,{_location:n}))}))}var b=function(e){function t(t){var n;(n=e.call(this,t)||this).defaultGetProps=function(e){var t=e.isPartiallyCurrent,r=e.isCurrent;return(n.props.partiallyActive?t:r)?{className:[n.props.className,n.props.activeClassName].filter(Boolean).join(" "),style:(0,s.default)({},n.props.style,n.props.activeStyle)}:null};var r=!1;return"undefined"!=typeof window&&window.IntersectionObserver&&(r=!0),n.state={IOSupported:r},n.abortPrefetch=null,n.handleRef=n.handleRef.bind((0,a.default)(n)),n}(0,i.default)(t,e);var n=t.prototype;return n._prefetch=function(){var e=window.location.pathname+window.location.search;this.props._location&&this.props._location.pathname&&(e=this.props._location.pathname+this.props._location.search);var t=(0,h.rewriteLinkPath)(this.props.to,e),n=(0,p.parsePath)(t),r=n.pathname+n.search;if(e!==r)return ___loader.enqueue(r)},n.componentWillUnmount=function(){if(this.io){var e=this.io,t=e.instance,n=e.el;this.abortPrefetch&&this.abortPrefetch.abort(),t.unobserve(n),t.disconnect()}},n.handleRef=function(e){var t,n,r,o=this;this.props.innerRef&&Object.prototype.hasOwnProperty.call(this.props.innerRef,"current")?this.props.innerRef.current=e:this.props.innerRef&&this.props.innerRef(e),this.state.IOSupported&&e&&(this.io=(t=e,n=function(e){e?o.abortPrefetch=o._prefetch():o.abortPrefetch&&o.abortPrefetch.abort()},(r=new window.IntersectionObserver((function(e){e.forEach((function(e){t===e.target&&n(e.isIntersecting||e.intersectionRatio>0)}))}))).observe(t),{instance:r,el:t}))},n.render=function(){var e=this,t=this.props,n=t.to,r=t.getProps,a=void 0===r?this.defaultGetProps:r,i=t.onClick,u=t.onMouseEnter,v=(t.activeClassName,t.activeStyle,t.innerRef,t.partiallyActive,t.state),g=t.replace,m=t._location,y=(0,o.default)(t,d);var w=(0,h.rewriteLinkPath)(n,m.pathname);return(0,f.isLocalLink)(w)?c.default.createElement(l.Link,(0,s.default)({to:w,state:v,getProps:a,innerRef:this.handleRef,onMouseEnter:function(e){u&&u(e);var t=(0,p.parsePath)(w);___loader.hovering(t.pathname+t.search)},onClick:function(t){if(i&&i(t),!(0!==t.button||e.props.target||t.defaultPrevented||t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)){t.preventDefault();var n=g,r=encodeURI(w)===m.pathname;"boolean"!=typeof g&&r&&(n=!0),window.___navigate(w,{state:v,replace:n})}return!0}},y)):c.default.createElement("a",(0,s.default)({href:w},y))},t}(c.default.Component);b.propTypes=(0,s.default)({},y,{onClick:u.default.func,to:u.default.string.isRequired,replace:u.default.bool,state:u.default.object});var P=c.default.forwardRef((function(e,t){return c.default.createElement(w,(0,s.default)({innerRef:t},e))}));t.default=P;t.navigate=function(e,t){window.___navigate((0,h.rewriteLinkPath)(e,window.location.pathname),t)}},4587:function(e,t){"use strict";t.__esModule=!0,t.isLocalLink=void 0;var n=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/;t.isLocalLink=function(e){if("string"==typeof e)return!function(e){return n.test(e)}(e)}},1752:function(e,t){"use strict";t.__esModule=!0,t.parsePath=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");-1!==a&&(n=t.substr(a),t=t.substr(0,a));return{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}},349:function(e,t,n){"use strict";t.__esModule=!0,t.rewriteLinkPath=void 0;var r=n(2098),o=(n(8440),n(1752)),a=n(4587),i=n(8037),s=function(e){return null==e?void 0:e.startsWith("/")};t.rewriteLinkPath=function(e,t){if("number"==typeof e)return e;if(!(0,a.isLocalLink)(e))return e;var n=(0,o.parsePath)(e),u=(n.pathname,n.search,n.hash,e);return s(u)?(0,i.withPrefix)(u):function(e,t){return s(e)?e:(0,r.resolve)(e,t)}(u,t)}},9679:function(e,t,n){"use strict";t.$C=void 0;var r=n(1432);t.$C=r.ScrollHandler,n(4855).useScrollRestoration},1432:function(e,t,n){"use strict";var r=n(5318);t.__esModule=!0,t.ScrollHandler=t.ScrollContext=void 0;var o=r(n(1506)),a=r(n(5354)),i=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=c(t);if(n&&n.has(e))return n.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var i=o?Object.getOwnPropertyDescriptor(e,a):null;i&&(i.get||i.set)?Object.defineProperty(r,a,i):r[a]=e[a]}r.default=e,n&&n.set(e,r);return r}(n(7294)),s=r(n(5697)),u=n(1142);function c(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(c=function(e){return e?n:t})(e)}var l=i.createContext(new u.SessionStorage);t.ScrollContext=l,l.displayName="GatsbyScrollContext";var p=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a0?u:n?[n]:[]},t.I=function(e,t,n){return r.reduce((function(n,r){return r.plugin[e]?n.then((function(){return r.plugin[e](t,r.options)})):n}),Promise.resolve())}},8299:function(e,t,n){"use strict";n.d(t,{Z:function(){return r}});var r=function(e){return e=e||Object.create(null),{on:function(t,n){(e[t]||(e[t]=[])).push(n)},off:function(t,n){e[t]&&e[t].splice(e[t].indexOf(n)>>>0,1)},emit:function(t,n){(e[t]||[]).slice().map((function(e){e(n)})),(e["*"]||[]).slice().map((function(e){e(t,n)}))}}}()},7802:function(e,t,n){"use strict";n.d(t,{UD:function(){return f},Cj:function(){return d},GA:function(){return h},DS:function(){return p}});var r=n(2098),o=n(1505),a=function(e){if(void 0===e)return e;var t=e.split("?"),n=t[0],r=t[1],o=void 0===r?"":r;return o&&(o="?"+o),"/"===n?"/"+o:"/"===n.charAt(n.length-1)?n.slice(0,-1)+o:n+o},i=n(6073),s=new Map,u=[],c=function(e){var t=decodeURIComponent(e);return(0,o.Z)(t,decodeURIComponent("")).split("#")[0]};function l(e){return e.startsWith("/")||e.startsWith("https://")||e.startsWith("http://")?e:new URL(e,window.location.href+(window.location.href.endsWith("/")?"":"/")).pathname}var p=function(e){u=e},f=function(e){var t=v(e),n=u.map((function(e){var t=e.path;return{path:e.matchPath,originalPath:t}})),o=(0,r.pick)(n,t);return o?a(o.route.originalPath):null},h=function(e){var t=v(e),n=u.map((function(e){var t=e.path;return{path:e.matchPath,originalPath:t}})),o=(0,r.pick)(n,t);return o?o.params:{}},d=function e(t){var n=c(l(t));if(s.has(n))return s.get(n);var r=(0,i.J)(t);if(r)return e(r.toPath);var o=f(n);return o||(o=v(t)),s.set(n,o),o},v=function(e){var t=c(l(e));return"/index.html"===t&&(t="/"),t=a(t)}},1597:function(e,t,n){"use strict";n.d(t,{rU:function(){return o.default},B9:function(){return a},K2:function(){return i}});var r=n(7294),o=n(8037),a=(n(9679),n(2743),n(8575).ZP.enqueue,r.createContext({}));var i=function(e){var t;r.useContext;var n=r.useContext(a);if(isNaN(Number(e)))throw new Error("useStaticQuery was called with a string but expects to be called using `graphql`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql`"+e+"`);\n");if(null!==(t=n[e])&&void 0!==t&&t.data)return n[e].data;throw new Error("The result of this StaticQuery could not be fetched.\n\nThis is likely a bug in Gatsby and if refreshing the page does not fix it, please open an issue in https://github.com/gatsbyjs/gatsby/issues")}},8575:function(e,t,n){"use strict";n.d(t,{uQ:function(){return d},kL:function(){return O},ZP:function(){return S},hs:function(){return R},jN:function(){return j},N1:function(){return E}});var r=n(1721);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0)return s[s.length-1];if(e&&e.location.pathname===a)return i?decodeURI(i.slice(1)):[0,0];return!0}var O=function(e){function t(t){var n;return(n=e.call(this,t)||this).announcementRef=a.createRef(),n}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidUpdate=function(e,t){var n=this;requestAnimationFrame((function(){var e="new page at "+n.props.location.pathname;document.title&&(e=document.title);var t=document.querySelectorAll("#gatsby-focus-wrapper h1");t&&t.length&&(e=t[0].textContent);var r="Navigated to "+e;n.announcementRef.current&&(n.announcementRef.current.innerText!==r&&(n.announcementRef.current.innerText=r))}))},n.render=function(){return a.createElement("div",Object.assign({},h,{ref:this.announcementRef}))},t}(a.Component),E=function(e,t){var n,r;return e.href!==t.href||(null==e||null===(n=e.state)||void 0===n?void 0:n.key)!==(null==t||null===(r=t.state)||void 0===r?void 0:r.key)},j=function(e){function t(t){var n;return n=e.call(this,t)||this,y(t.location,null),n}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){w(this.props.location,null)},n.shouldComponentUpdate=function(e){return!!E(e.location,this.props.location)&&(y(this.props.location,e.location),!0)},n.componentDidUpdate=function(e){E(e.location,this.props.location)&&w(this.props.location,e.location)},n.render=function(){return a.createElement(a.Fragment,null,this.props.children,a.createElement(O,{location:location}))},t}(a.Component),S=n(8522),R=n(5418),k=n(4942);function _(e,t){for(var n in e)if(!(n in t))return!0;for(var r in t)if(e[r]!==t[r])return!0;return!1}function C(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function x(e){for(var t=1;t0&&n(9939);var e=function(e){return a.createElement(s.BaseContext.Provider,{value:{baseuri:"/",basepath:"/"}},a.createElement(S.Z,e))},t=a.createContext({}),p=function(e){function n(){return e.apply(this,arguments)||this}return(0,r.Z)(n,e),n.prototype.render=function(){var e=this.props.children;return a.createElement(s.Location,null,(function(n){var r=n.location;return a.createElement(L,{location:r},(function(n){var r=n.pageResources,o=n.location,i=(0,l.hs)();return a.createElement(c.B9.Provider,{value:i},a.createElement(t.Provider,{value:{pageResources:r,location:o}},e))}))}))},n}(a.Component),f=function(n){function o(){return n.apply(this,arguments)||this}return(0,r.Z)(o,n),o.prototype.render=function(){var n=this;return a.createElement(t.Consumer,null,(function(t){var r=t.pageResources,o=t.location;return a.createElement(j,{location:o},a.createElement(u.$C,{location:o,shouldUpdateScroll:P},a.createElement(s.Router,{basepath:"",location:o,id:"gatsby-focus-wrapper"},a.createElement(e,Object.assign({path:"/404.html"===r.page.path||"/500.html"===r.page.path?(0,D.Z)(o.pathname,""):encodeURI((r.page.matchPath||r.page.path).split("?")[0])},n.props,{location:o,pageResources:r},r.json)))))}))},o}(a.Component),h=window,d=h.pagePath,v=h.location;d&&""+d!==v.pathname+(d.includes("?")?v.search:"")&&!(T.findMatchPath((0,D.Z)(v.pathname,""))||d.match(/^\/(404|500)(\/?|.html)$/)||d.match(/^\/offline-plugin-app-shell-fallback\/?$/))&&(0,s.navigate)(""+d+(d.includes("?")?"":v.search)+v.hash,{replace:!0});var g=function(){try{return sessionStorage}catch(e){return null}};l.jN.loadPage(v.pathname+v.search).then((function(e){var t,n=g();if(null!=e&&null!==(t=e.page)&&void 0!==t&&t.webpackCompilationHash&&e.page.webpackCompilationHash!==window.___webpackCompilationHash&&("serviceWorker"in navigator&&null!==navigator.serviceWorker.controller&&"activated"===navigator.serviceWorker.controller.state&&navigator.serviceWorker.controller.postMessage({gatsbyApi:"clearPathResources"}),n&&!("1"===n.getItem(M))))return n.setItem(M,"1"),void window.location.reload(!0);if(n&&n.removeItem(M),!e||e.status===l.uQ.Error){var r="page resources for "+v.pathname+" not found. Not rendering React";if(e&&e.error)throw console.error(r),e.error;throw new Error(r)}var s=(0,o.h)("wrapRootElement",{element:a.createElement(f,null)},a.createElement(f,null),(function(e){return{element:e.result}})).pop(),u=function(){var e=a.useRef(!1);return a.useEffect((function(){e.current||(e.current=!0,performance.mark&&performance.mark("onInitialClientRender"),(0,o.h)("onInitialClientRender"))}),[]),a.createElement(p,null,s)},c=(0,o.h)("replaceHydrateFunction",void 0,i.hydrateRoot?i.hydrateRoot:i.hydrate)[0];function h(){var e="undefined"!=typeof window?document.getElementById("___gatsby"):null;c===i.hydrateRoot?c(e,a.createElement(u,null)):c(a.createElement(u,null),e)}var d=document;if("complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)setTimeout((function(){h()}),0);else{var m=function e(){d.removeEventListener("DOMContentLoaded",e,!1),window.removeEventListener("load",e,!1),h()};d.addEventListener("DOMContentLoaded",m,!1),window.addEventListener("load",m,!1)}}))}))},224:function(e,t,n){"use strict";n.r(t);var r=n(4942),o=n(7294),a=n(8575),i=n(8522);function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}t.default=function(e){var t=e.location,n=a.ZP.loadPageSync(t.pathname);return n?o.createElement(i.Z,function(e){for(var t=1;t=0||(o[n]=e[n]);return o}var l=new Set,p=function(){return"undefined"!=typeof HTMLImageElement&&"loading"in HTMLImageElement.prototype};function f(e){e&&l.add(e)}function h(e){return l.has(e)}var d=function(e){var t;return function(e){var t,n;return Boolean(null==e||null==(t=e.images)||null==(n=t.fallback)?void 0:n.src)}(e)?e:function(e){return Boolean(null==e?void 0:e.gatsbyImageData)}(e)?e.gatsbyImageData:null==e||null==(t=e.childImageSharp)?void 0:t.gatsbyImageData};function v(e,t,r,o,a,i,u,c){var l,p;return void 0===c&&(c={}),null!=u&&u.current&&!("objectFit"in document.documentElement.style)&&(u.current.dataset.objectFit=null!=(l=c.objectFit)?l:"cover",u.current.dataset.objectPosition=""+(null!=(p=c.objectPosition)?p:"50% 50%"),function(e){try{var t=function(){window.objectFitPolyfill(e.current)},r=function(){if(!("objectFitPolyfill"in window))return Promise.resolve(n.e(231).then(n.t.bind(n,7231,23))).then((function(){}))}();Promise.resolve(r&&r.then?r.then(t):t())}catch(e){return Promise.reject(e)}}(u)),s({},r,{loading:o,shouldLoad:e,"data-main-image":"",style:s({},c,{opacity:t?1:0}),onLoad:function(e){if(!t){f(i);var n=e.currentTarget,r=new Image;r.src=n.currentSrc,r.decode?r.decode().catch((function(){})).then((function(){a(!0)})):a(!0)}},ref:u})}function g(e,t,n,r,o,a,i,u){var c={};a&&(c.backgroundColor=a,"fixed"===n?(c.width=r,c.height=o,c.backgroundColor=a,c.position="relative"):("constrained"===n||"fullWidth"===n)&&(c.position="absolute",c.top=0,c.left=0,c.bottom=0,c.right=0)),i&&(c.objectFit=i),u&&(c.objectPosition=u);var l=s({},e,{"aria-hidden":!0,"data-placeholder-image":"",style:s({opacity:t?0:1,transition:"opacity 500ms linear"},c)});return l}var m,y=["children"],w=function(e){var t=e.layout,n=e.width,o=e.height;return"fullWidth"===t?r.createElement("div",{"aria-hidden":!0,style:{paddingTop:o/n*100+"%"}}):"constrained"===t?r.createElement("div",{style:{maxWidth:n,display:"block"}},r.createElement("img",{alt:"",role:"presentation","aria-hidden":"true",src:"data:image/svg+xml;charset=utf-8,%3Csvg height='"+o+"' width='"+n+"' xmlns='http://www.w3.org/2000/svg' version='1.1'%3E%3C/svg%3E",style:{maxWidth:"100%",display:"block",position:"static"}})):null},b=function(e){var t=e.children,n=c(e,y);return r.createElement(r.Fragment,null,r.createElement(w,s({},n)),t,!1)},P=["src","srcSet","loading","alt","shouldLoad","innerRef"],O=["fallback","sources","shouldLoad"],E=function(e){var t=e.src,n=e.srcSet,o=e.loading,a=e.alt,i=void 0===a?"":a,u=e.shouldLoad,l=e.innerRef,p=c(e,P);return r.createElement("img",s({},p,{decoding:"async",loading:o,src:u?t:void 0,"data-src":u?void 0:t,srcSet:u?n:void 0,"data-srcset":u?void 0:n,alt:i,ref:l}))},j=(0,r.forwardRef)((function(e,t){var n=e.fallback,o=e.sources,a=void 0===o?[]:o,i=e.shouldLoad,u=void 0===i||i,l=c(e,O),p=l.sizes||(null==n?void 0:n.sizes),f=r.createElement(E,s({},l,n,{sizes:p,shouldLoad:u,innerRef:t}));return a.length?r.createElement("picture",null,a.map((function(e){var t=e.media,n=e.srcSet,o=e.type;return r.createElement("source",{key:t+"-"+o+"-"+n,type:o,media:t,srcSet:u?n:void 0,"data-srcset":u?void 0:n,sizes:p})})),f):f}));E.propTypes={src:o.string.isRequired,alt:o.string.isRequired,sizes:o.string,srcSet:o.string,shouldLoad:o.bool},j.displayName="Picture",j.propTypes={alt:o.string.isRequired,shouldLoad:o.bool,fallback:o.exact({src:o.string.isRequired,srcSet:o.string,sizes:o.string}),sources:o.arrayOf(o.oneOfType([o.exact({media:o.string.isRequired,type:o.string,sizes:o.string,srcSet:o.string.isRequired}),o.exact({media:o.string,type:o.string.isRequired,sizes:o.string,srcSet:o.string.isRequired})]))};var S=["fallback"],R=function(e){var t=e.fallback,n=c(e,S);return t?r.createElement(j,s({},n,{fallback:{src:t},"aria-hidden":!0,alt:""})):r.createElement("div",s({},n))};R.displayName="Placeholder",R.propTypes={fallback:o.string,sources:null==(m=j.propTypes)?void 0:m.sources,alt:function(e,t,n){return e[t]?new Error("Invalid prop `"+t+"` supplied to `"+n+"`. Validation failed."):null}};var k=(0,r.forwardRef)((function(e,t){return r.createElement(r.Fragment,null,r.createElement(j,s({ref:t},e)),r.createElement("noscript",null,r.createElement(j,s({},e,{shouldLoad:!0}))))}));k.displayName="MainImage",k.propTypes=j.propTypes;var _=function(e,t,n){return e.alt||""===e.alt?a().string.apply(a(),[e,t,n].concat([].slice.call(arguments,3))):new Error('The "alt" prop is required in '+n+'. If the image is purely presentational then pass an empty string: e.g. alt="". Learn more: https://a11y-style-guide.com/style-guide/section-media.html')},C={image:a().object.isRequired,alt:_},x=["style","className"],L=function(e){var t,o;function a(t){var n;return(n=e.call(this,t)||this).root=(0,r.createRef)(),n.hydrated={current:!1},n.forceRender={current:!1},n.lazyHydrator=null,n.ref=(0,r.createRef)(),n.unobserveRef=void 0,n.state={isLoading:p(),isLoaded:!1},n}o=e,(t=a).prototype=Object.create(o.prototype),t.prototype.constructor=t,u(t,o);var l=a.prototype;return l._lazyHydrate=function(e,t){var r=this,o=this.root.current.querySelector("[data-gatsby-image-ssr]");return p()&&o&&!this.hydrated.current?(this.hydrated.current=!0,Promise.resolve()):n.e(898).then(n.bind(n,6898)).then((function(n){var o=n.lazyHydrate,a=JSON.stringify(r.props.image.images);r.lazyHydrator=o(s({image:e.image.images,isLoading:t.isLoading||h(a),isLoaded:t.isLoaded||h(a),toggleIsLoaded:function(){null==e.onLoad||e.onLoad(),r.setState({isLoaded:!0})},ref:r.ref},e),r.root,r.hydrated,r.forceRender)}))},l._setupIntersectionObserver=function(e){var t=this;void 0===e&&(e=!0),n.e(610).then(n.bind(n,3610)).then((function(n){var r=(0,n.createIntersectionObserver)((function(){if(t.root.current){var n=JSON.stringify(t.props.image.images);null==t.props.onStartLoad||t.props.onStartLoad({wasCached:e&&h(n)}),t.setState({isLoading:!0,isLoaded:e&&h(n)})}}));t.root.current&&(t.unobserveRef=r(t.root))}))},l.shouldComponentUpdate=function(e,t){var n=this,r=!1;return this.state.isLoading||!t.isLoading||t.isLoaded||(this.forceRender.current=!0),this.props.image.images!==e.image.images&&(this.unobserveRef&&(this.unobserveRef(),this.hydrated.current&&this.lazyHydrator&&(0,i.render)(null,this.root.current)),this.setState({isLoading:!1,isLoaded:!1},(function(){n._setupIntersectionObserver(!1)})),r=!0),this.root.current&&!r&&this._lazyHydrate(e,t),!1},l.componentDidMount=function(){if(this.root.current){var e=this.root.current.querySelector("[data-gatsby-image-ssr]"),t=JSON.stringify(this.props.image.images);if(p()&&e){var n,r;if(null==(n=(r=this.props).onStartLoad)||n.call(r,{wasCached:!1}),e.complete){var o,a;null==(o=(a=this.props).onLoad)||o.call(a),f(t)}else{var i=this;e.addEventListener("load",(function n(){e.removeEventListener("load",n),null==i.props.onLoad||i.props.onLoad(),f(t)}))}return}this._setupIntersectionObserver(!0)}},l.componentWillUnmount=function(){this.unobserveRef&&(this.unobserveRef(),this.hydrated.current&&this.lazyHydrator&&this.lazyHydrator())},l.render=function(){var e=this.props.as||"div",t=this.props.image,n=t.width,o=t.height,a=t.layout,i=function(e,t,n){var r={},o="gatsby-image-wrapper";return"fixed"===n?(r.width=e,r.height=t):"constrained"===n&&(o="gatsby-image-wrapper gatsby-image-wrapper-constrained"),{className:o,"data-gatsby-image-wrapper":"",style:r}}(n,o,a),u=i.style,l=i.className,p=c(i,x),f=this.props.className;this.props.class&&(f=this.props.class);var h=function(e,t,n){var r=null;return"fullWidth"===e&&(r=''),"constrained"===e&&(r='
"),r}(a,n,o);return r.createElement(e,s({},p,{style:s({},u,this.props.style,{backgroundColor:this.props.backgroundColor}),className:l+(f?" "+f:""),ref:this.root,dangerouslySetInnerHTML:{__html:h},suppressHydrationWarning:!0}))},a}(r.Component),D=function(e){if(!e.image)return null;var t=e.image,n=JSON.stringify([t.width,t.height,t.layout,e.className,e.class,e.backgroundColor]);return r.createElement(L,s({key:n},e))};D.propTypes=C,D.displayName="GatsbyImage";var T,M=["src","__imageData","__error","width","height","aspectRatio","tracedSVGOptions","placeholder","formats","quality","transformOptions","jpgOptions","pngOptions","webpOptions","avifOptions","blurredOptions"],N=function(e,t){return"fullWidth"!==e.layout||"width"!==t&&"height"!==t||!e[t]?a().number.apply(a(),[e,t].concat([].slice.call(arguments,2))):new Error('"'+t+'" '+e[t]+" may not be passed when layout is fullWidth.")},A=new Set(["fixed","fullWidth","constrained"]),U={src:a().string.isRequired,alt:_,width:N,height:N,sizes:a().string,layout:function(e){if(void 0!==e.layout&&!A.has(e.layout))return new Error("Invalid value "+e.layout+'" provided for prop "layout". Defaulting to "constrained". Valid values are "fixed", "fullWidth" or "constrained".')}},I=(T=D,function(e){var t=e.src,n=e.__imageData,o=e.__error,a=c(e,M);return o&&console.warn(o),n?r.createElement(T,s({image:n},a)):(console.warn("Image not loaded",t),null)});function W(e){var t=e.children;return r.useEffect((function(){n.e(898).then(n.bind(n,6898))}),[]),t}I.displayName="StaticImage",I.propTypes=U},1306:function(e,t,n){"use strict";n.r(t),n.d(t,{wrapRootElement:function(){return a}});var r=n(7294),o=n(396);function a(e){var t=e.element;return r.createElement(o.c,null,t)}},2369:function(e){"use strict";var t=function(e,t){if("string"!=typeof e&&!Array.isArray(e))throw new TypeError("Expected the input to be `string | string[]`");t=Object.assign({pascalCase:!1},t);var n;return e=Array.isArray(e)?e.map((function(e){return e.trim()})).filter((function(e){return e.length})).join("-"):e.trim(),0===e.length?"":1===e.length?t.pascalCase?e.toUpperCase():e.toLowerCase():(e!==e.toLowerCase()&&(e=function(e){for(var t=!1,n=!1,r=!1,o=0;o=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=o.createContext({}),p=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):u(u({},t),e)),n},f=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),l=p(n),f=r,d=l["".concat(i,".").concat(f)]||l[f]||h[f]||a;return n?o.createElement(d,u(u({ref:t},s),{},{components:n})):o.createElement(d,u({ref:t},s))}));d.displayName="MDXCreateElement";var v=(0,o.createContext)({}),g=function(e){var t=e.__mdxScope,n=e.children;return o.createElement(v.Provider,{value:t},n)},m=n(1548),y=Object.assign({});function w(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function b(e){for(var t=1;tt.score?-1:e.index-t.index}))},m=function(e){return e.replace(/(^\/+|\/+$)/g,"").split("/")},y=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r0})))&&n.length>0?"?"+n.join("&"):"")},w=["uri","path"],b=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},s=i.state,u=i.replace,c=void 0!==u&&u;if("number"==typeof t)e.history.go(t);else{s=b({},s,{key:Date.now()+""});try{o||c?e.history.replaceState(s,null,t):e.history.pushState(s,null,t)}catch(p){e.location[c?"replace":"assign"](t)}}r=P(e),o=!0;var l=new Promise((function(e){return a=e}));return n.forEach((function(e){return e({location:r,action:"PUSH"})})),l}}},E=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",t=e.indexOf("?"),n={pathname:t>-1?e.substr(0,t):e,search:t>-1?e.substr(t):""},r=0,o=[n],a=[null];return{get location(){return o[r]},addEventListener:function(e,t){},removeEventListener:function(e,t){},history:{get entries(){return o},get index(){return r},get state(){return a[r]},pushState:function(e,t,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;r++,o.push({pathname:s,search:c.length?"?"+c:c}),a.push(e)},replaceState:function(e,t,n){var i=n.split("?"),s=i[0],u=i[1],c=void 0===u?"":u;o[r]={pathname:s,search:c},a[r]=e},go:function(e){var t=r+e;t<0||t>a.length-1||(r=t)}}}},j=!("undefined"==typeof window||!window.document||!window.document.createElement),S=O(j?window:E()),R=S.navigate,k=Object.assign||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function C(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function x(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function L(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var D=function(e,t){var n=(0,r.createContext)(t);return n.displayName=e,n},T=D("Location"),M=function(e){var t=e.children;return r.createElement(T.Consumer,null,(function(e){return e?t(e):r.createElement(N,null,t)}))},N=function(e){function t(){var n,r;C(this,t);for(var o=arguments.length,a=Array(o),i=0;i-1?(a=t.substring(0,o),i=t.substring(o)):a=t,r.createElement(T.Provider,{value:{location:{pathname:a,search:i,hash:""},navigate:function(){throw new Error("You can't call navigate on the server.")}}},n)},U=D("Base",{baseuri:"/",basepath:"/",navigate:S.navigate}),I=function(e){return r.createElement(U.Consumer,null,(function(t){return r.createElement(M,null,(function(n){return r.createElement(W,k({},t,n,e))}))}))},W=function(e){function t(){return C(this,t),x(this,e.apply(this,arguments))}return L(t,e),t.prototype.render=function(){var e=this.props,t=e.location,n=e.navigate,o=e.basepath,a=e.primary,i=e.children,s=(e.baseuri,e.component),c=void 0===s?"div":s,p=_(e,["location","navigate","basepath","primary","children","baseuri","component"]),f=r.Children.toArray(i).reduce((function(e,t){var n=ae(o)(t);return e.concat(n)}),[]),h=t.pathname,d=u(f,h);if(d){var v=d.params,g=d.uri,m=d.route,y=d.route.value;o=m.default?o:m.path.replace(/\*$/,"");var w=k({},v,{uri:g,location:t,navigate:function(e,t){return n(l(e,g),t)}}),b=r.cloneElement(y,w,y.props.children?r.createElement(I,{location:t,primary:a},y.props.children):void 0),P=a?q:c,O=a?k({uri:g,location:t,component:c},p):p;return r.createElement(U.Provider,{value:{baseuri:g,basepath:o,navigate:w.navigate}},r.createElement(P,O,b))}return null},t}(r.PureComponent);W.defaultProps={primary:!0};var F=D("Focus"),q=function(e){var t=e.uri,n=e.location,o=e.component,a=_(e,["uri","location","component"]);return r.createElement(F.Consumer,null,(function(e){return r.createElement(Q,k({},a,{component:o,requestFocus:e,uri:t,location:n}))}))},H=!0,Z=0,Q=function(e){function t(){var n,r;C(this,t);for(var o=arguments.length,a=Array(o),i=0;i= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","\"use strict\";\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexports.globalHistory = globalHistory;\nexports.navigate = navigate;\nexports.createHistory = createHistory;\nexports.createMemorySource = createMemorySource;","\"use strict\";\n\nexports.__esModule = true;\nexports.shallowCompare = exports.validateRedirect = exports.insertParams = exports.resolve = exports.match = exports.pick = exports.startsWith = undefined;\n\nvar _invariant = require(\"invariant\");\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n} ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? (0, _invariant2.default)(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : (0, _invariant2.default)(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexports.startsWith = startsWith;\nexports.pick = pick;\nexports.match = match;\nexports.resolve = resolve;\nexports.insertParams = insertParams;\nexports.validateRedirect = validateRedirect;\nexports.shallowCompare = shallowCompare;","var _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _templateObject = _taggedTemplateLiteral(['', ''], ['', '']);\n\nfunction _taggedTemplateLiteral(strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: {\n value: Object.freeze(raw)\n }\n }));\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n/**\n * @class TemplateTag\n * @classdesc Consumes a pipeline of composable transformer plugins and produces a template tag.\n */\n\n\nvar TemplateTag = function () {\n /**\n * constructs a template tag\n * @constructs TemplateTag\n * @param {...Object} [...transformers] - an array or arguments list of transformers\n * @return {Function} - a template tag\n */\n function TemplateTag() {\n var _this = this;\n\n for (var _len = arguments.length, transformers = Array(_len), _key = 0; _key < _len; _key++) {\n transformers[_key] = arguments[_key];\n }\n\n _classCallCheck(this, TemplateTag);\n\n this.tag = function (strings) {\n for (var _len2 = arguments.length, expressions = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n expressions[_key2 - 1] = arguments[_key2];\n }\n\n if (typeof strings === 'function') {\n // if the first argument passed is a function, assume it is a template tag and return\n // an intermediary tag that processes the template using the aforementioned tag, passing the\n // result to our tag\n return _this.interimTag.bind(_this, strings);\n }\n\n if (typeof strings === 'string') {\n // if the first argument passed is a string, just transform it\n return _this.transformEndResult(strings);\n } // else, return a transformed end result of processing the template with our tag\n\n\n strings = strings.map(_this.transformString.bind(_this));\n return _this.transformEndResult(strings.reduce(_this.processSubstitutions.bind(_this, expressions)));\n }; // if first argument is an array, extrude it as a list of transformers\n\n\n if (transformers.length > 0 && Array.isArray(transformers[0])) {\n transformers = transformers[0];\n } // if any transformers are functions, this means they are not initiated - automatically initiate them\n\n\n this.transformers = transformers.map(function (transformer) {\n return typeof transformer === 'function' ? transformer() : transformer;\n }); // return an ES2015 template tag\n\n return this.tag;\n }\n /**\n * Applies all transformers to a template literal tagged with this method.\n * If a function is passed as the first argument, assumes the function is a template tag\n * and applies it to the template, returning a template tag.\n * @param {(Function|String|Array)} strings - Either a template tag or an array containing template strings separated by identifier\n * @param {...*} ...expressions - Optional list of substitution values.\n * @return {(String|Function)} - Either an intermediary tag function or the results of processing the template.\n */\n\n\n _createClass(TemplateTag, [{\n key: 'interimTag',\n\n /**\n * An intermediary template tag that receives a template tag and passes the result of calling the template with the received\n * template tag to our own template tag.\n * @param {Function} nextTag - the received template tag\n * @param {Array} template - the template to process\n * @param {...*} ...substitutions - `substitutions` is an array of all substitutions in the template\n * @return {*} - the final processed value\n */\n value: function interimTag(previousTag, template) {\n for (var _len3 = arguments.length, substitutions = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n substitutions[_key3 - 2] = arguments[_key3];\n }\n\n return this.tag(_templateObject, previousTag.apply(undefined, [template].concat(substitutions)));\n }\n /**\n * Performs bulk processing on the tagged template, transforming each substitution and then\n * concatenating the resulting values into a string.\n * @param {Array<*>} substitutions - an array of all remaining substitutions present in this template\n * @param {String} resultSoFar - this iteration's result string so far\n * @param {String} remainingPart - the template chunk after the current substitution\n * @return {String} - the result of joining this iteration's processed substitution with the result\n */\n\n }, {\n key: 'processSubstitutions',\n value: function processSubstitutions(substitutions, resultSoFar, remainingPart) {\n var substitution = this.transformSubstitution(substitutions.shift(), resultSoFar);\n return ''.concat(resultSoFar, substitution, remainingPart);\n }\n /**\n * Iterate through each transformer, applying the transformer's `onString` method to the template\n * strings before all substitutions are processed.\n * @param {String} str - The input string\n * @return {String} - The final results of processing each transformer\n */\n\n }, {\n key: 'transformString',\n value: function transformString(str) {\n var cb = function cb(res, transform) {\n return transform.onString ? transform.onString(res) : res;\n };\n\n return this.transformers.reduce(cb, str);\n }\n /**\n * When a substitution is encountered, iterates through each transformer and applies the transformer's\n * `onSubstitution` method to the substitution.\n * @param {*} substitution - The current substitution\n * @param {String} resultSoFar - The result up to and excluding this substitution.\n * @return {*} - The final result of applying all substitution transformations.\n */\n\n }, {\n key: 'transformSubstitution',\n value: function transformSubstitution(substitution, resultSoFar) {\n var cb = function cb(res, transform) {\n return transform.onSubstitution ? transform.onSubstitution(res, resultSoFar) : res;\n };\n\n return this.transformers.reduce(cb, substitution);\n }\n /**\n * Iterates through each transformer, applying the transformer's `onEndResult` method to the\n * template literal after all substitutions have finished processing.\n * @param {String} endResult - The processed template, just before it is returned from the tag\n * @return {String} - The final results of processing each transformer\n */\n\n }, {\n key: 'transformEndResult',\n value: function transformEndResult(endResult) {\n var cb = function cb(res, transform) {\n return transform.onEndResult ? transform.onEndResult(res) : res;\n };\n\n return this.transformers.reduce(cb, endResult);\n }\n }]);\n\n return TemplateTag;\n}();\n\nexport default TemplateTag;","var defaults = {\n separator: '',\n conjunction: '',\n serial: false\n};\n/**\n * Converts an array substitution to a string containing a list\n * @param {String} [opts.separator = ''] - the character that separates each item\n * @param {String} [opts.conjunction = ''] - replace the last separator with this\n * @param {Boolean} [opts.serial = false] - include the separator before the conjunction? (Oxford comma use-case)\n *\n * @return {Object} - a TemplateTag transformer\n */\n\nvar inlineArrayTransformer = function inlineArrayTransformer() {\n var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaults;\n return {\n onSubstitution: function onSubstitution(substitution, resultSoFar) {\n // only operate on arrays\n if (Array.isArray(substitution)) {\n var arrayLength = substitution.length;\n var separator = opts.separator;\n var conjunction = opts.conjunction;\n var serial = opts.serial; // join each item in the array into a string where each item is separated by separator\n // be sure to maintain indentation\n\n var indent = resultSoFar.match(/(\\n?[^\\S\\n]+)$/);\n\n if (indent) {\n substitution = substitution.join(separator + indent[1]);\n } else {\n substitution = substitution.join(separator + ' ');\n } // if conjunction is set, replace the last separator with conjunction, but only if there is more than one substitution\n\n\n if (conjunction && arrayLength > 1) {\n var separatorIndex = substitution.lastIndexOf(separator);\n substitution = substitution.slice(0, separatorIndex) + (serial ? separator : '') + ' ' + conjunction + substitution.slice(separatorIndex + 1);\n }\n }\n\n return substitution;\n }\n };\n};\n\nexport default inlineArrayTransformer;","function _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n } else {\n return Array.from(arr);\n }\n}\n/**\n * strips indentation from a template literal\n * @param {String} type = 'initial' - whether to remove all indentation or just leading indentation. can be 'all' or 'initial'\n * @return {Object} - a TemplateTag transformer\n */\n\n\nvar stripIndentTransformer = function stripIndentTransformer() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'initial';\n return {\n onEndResult: function onEndResult(endResult) {\n if (type === 'initial') {\n // remove the shortest leading indentation from each line\n var match = endResult.match(/^[^\\S\\n]*(?=\\S)/gm);\n var indent = match && Math.min.apply(Math, _toConsumableArray(match.map(function (el) {\n return el.length;\n })));\n\n if (indent) {\n var regexp = new RegExp('^.{' + indent + '}', 'gm');\n return endResult.replace(regexp, '');\n }\n\n return endResult;\n }\n\n if (type === 'all') {\n // remove all indentation from each line\n return endResult.replace(/^[^\\S\\n]+/gm, '');\n }\n\n throw new Error('Unknown type: ' + type);\n }\n };\n};\n\nexport default stripIndentTransformer;","/**\n * TemplateTag transformer that trims whitespace on the end result of a tagged template\n * @param {String} side = '' - The side of the string to trim. Can be 'start' or 'end' (alternatively 'left' or 'right')\n * @return {Object} - a TemplateTag transformer\n */\nvar trimResultTransformer = function trimResultTransformer() {\n var side = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return {\n onEndResult: function onEndResult(endResult) {\n if (side === '') {\n return endResult.trim();\n }\n\n side = side.toLowerCase();\n\n if (side === 'start' || side === 'left') {\n return endResult.replace(/^\\s*/, '');\n }\n\n if (side === 'end' || side === 'right') {\n return endResult.replace(/\\s*$/, '');\n }\n\n throw new Error('Side not supported: ' + side);\n }\n };\n};\n\nexport default trimResultTransformer;","var splitStringTransformer = function splitStringTransformer(splitBy) {\n return {\n onSubstitution: function onSubstitution(substitution, resultSoFar) {\n if (splitBy != null && typeof splitBy === 'string') {\n if (typeof substitution === 'string' && substitution.includes(splitBy)) {\n substitution = substitution.split(splitBy);\n }\n } else {\n throw new Error('You need to specify a string character to split by.');\n }\n\n return substitution;\n }\n };\n};\n\nexport default splitStringTransformer;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar commaLists = new TemplateTag(inlineArrayTransformer({\n separator: ','\n}), stripIndentTransformer, trimResultTransformer);\nexport default commaLists;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar commaListsAnd = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'and'\n}), stripIndentTransformer, trimResultTransformer);\nexport default commaListsAnd;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar commaListsOr = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'or'\n}), stripIndentTransformer, trimResultTransformer);\nexport default commaListsOr;","var isValidValue = function isValidValue(x) {\n return x != null && !Number.isNaN(x) && typeof x !== 'boolean';\n};\n\nvar removeNonPrintingValuesTransformer = function removeNonPrintingValuesTransformer() {\n return {\n onSubstitution: function onSubstitution(substitution) {\n if (Array.isArray(substitution)) {\n return substitution.filter(isValidValue);\n }\n\n if (isValidValue(substitution)) {\n return substitution;\n }\n\n return '';\n }\n };\n};\n\nexport default removeNonPrintingValuesTransformer;","var replaceSubstitutionTransformer = function replaceSubstitutionTransformer(replaceWhat, replaceWith) {\n return {\n onSubstitution: function onSubstitution(substitution, resultSoFar) {\n if (replaceWhat == null || replaceWith == null) {\n throw new Error('replaceSubstitutionTransformer requires at least 2 arguments.');\n } // Do not touch if null or undefined\n\n\n if (substitution == null) {\n return substitution;\n } else {\n return substitution.toString().replace(replaceWhat, replaceWith);\n }\n }\n };\n};\n\nexport default replaceSubstitutionTransformer;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport splitStringTransformer from '../splitStringTransformer';\nimport removeNonPrintingValuesTransformer from '../removeNonPrintingValuesTransformer';\nvar html = new TemplateTag(splitStringTransformer('\\n'), removeNonPrintingValuesTransformer, inlineArrayTransformer, stripIndentTransformer, trimResultTransformer);\nexport default html;","/**\n * Replaces tabs, newlines and spaces with the chosen value when they occur in sequences\n * @param {(String|RegExp)} replaceWhat - the value or pattern that should be replaced\n * @param {*} replaceWith - the replacement value\n * @return {Object} - a TemplateTag transformer\n */\nvar replaceResultTransformer = function replaceResultTransformer(replaceWhat, replaceWith) {\n return {\n onEndResult: function onEndResult(endResult) {\n if (replaceWhat == null || replaceWith == null) {\n throw new Error('replaceResultTransformer requires at least 2 arguments.');\n }\n\n return endResult.replace(replaceWhat, replaceWith);\n }\n };\n};\n\nexport default replaceResultTransformer;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport splitStringTransformer from '../splitStringTransformer';\nimport replaceSubstitutionTransformer from '../replaceSubstitutionTransformer';\nvar safeHtml = new TemplateTag(splitStringTransformer('\\n'), inlineArrayTransformer, stripIndentTransformer, trimResultTransformer, replaceSubstitutionTransformer(/&/g, '&'), replaceSubstitutionTransformer(//g, '>'), replaceSubstitutionTransformer(/\"/g, '"'), replaceSubstitutionTransformer(/'/g, '''), replaceSubstitutionTransformer(/`/g, '`'));\nexport default safeHtml;","import TemplateTag from '../TemplateTag';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLine = new TemplateTag(replaceResultTransformer(/(?:\\n(?:\\s*))+/g, ' '), trimResultTransformer);\nexport default oneLine;","import TemplateTag from '../TemplateTag';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineTrim = new TemplateTag(replaceResultTransformer(/(?:\\n\\s*)/g, ''), trimResultTransformer);\nexport default oneLineTrim;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineCommaLists = new TemplateTag(inlineArrayTransformer({\n separator: ','\n}), replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineCommaLists;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineCommaListsOr = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'or'\n}), replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineCommaListsOr;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineCommaListsAnd = new TemplateTag(inlineArrayTransformer({\n separator: ',',\n conjunction: 'and'\n}), replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineCommaListsAnd;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar inlineLists = new TemplateTag(inlineArrayTransformer, stripIndentTransformer, trimResultTransformer);\nexport default inlineLists;","import TemplateTag from '../TemplateTag';\nimport inlineArrayTransformer from '../inlineArrayTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nimport replaceResultTransformer from '../replaceResultTransformer';\nvar oneLineInlineLists = new TemplateTag(inlineArrayTransformer, replaceResultTransformer(/(?:\\s+)/g, ' '), trimResultTransformer);\nexport default oneLineInlineLists;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar stripIndent = new TemplateTag(stripIndentTransformer, trimResultTransformer);\nexport default stripIndent;","import TemplateTag from '../TemplateTag';\nimport stripIndentTransformer from '../stripIndentTransformer';\nimport trimResultTransformer from '../trimResultTransformer';\nvar stripIndents = new TemplateTag(stripIndentTransformer('all'), trimResultTransformer);\nexport default stripIndents;","\"use strict\";\n\nexports.__esModule = true;\nexports.applyTrailingSlashOption = void 0; // TODO(v5): Remove legacy setting and default to \"always\"\n\nvar applyTrailingSlashOption = function applyTrailingSlashOption(input, option) {\n if (option === void 0) {\n option = \"legacy\";\n }\n\n var hasHtmlSuffix = input.endsWith(\".html\");\n if (input === \"/\") return input;\n\n if (hasHtmlSuffix) {\n option = \"never\";\n }\n\n if (option === \"always\") {\n return input.endsWith(\"/\") ? input : input + \"/\";\n }\n\n if (option === \"never\") {\n return input.endsWith(\"/\") ? input.slice(0, -1) : input;\n }\n\n return input;\n};\n\nexports.applyTrailingSlashOption = applyTrailingSlashOption;","\"use strict\";\n\nmodule.exports = Object.assign;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.withPrefix = withPrefix;\nexports.withAssetPrefix = withAssetPrefix;\nexports.navigate = exports.default = void 0;\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nvar _parsePath = require(\"./parse-path\");\n\nexports.parsePath = _parsePath.parsePath;\n\nvar _isLocalLink = require(\"./is-local-link\");\n\nvar _rewriteLinkPath = require(\"./rewrite-link-path\");\n\nvar _excluded = [\"to\", \"getProps\", \"onClick\", \"onMouseEnter\", \"activeClassName\", \"activeStyle\", \"innerRef\", \"partiallyActive\", \"state\", \"replace\", \"_location\"];\n\nfunction withPrefix(path, prefix) {\n var _ref, _prefix;\n\n if (prefix === void 0) {\n prefix = getGlobalBasePrefix();\n }\n\n if (!(0, _isLocalLink.isLocalLink)(path)) {\n return path;\n }\n\n if (path.startsWith(\"./\") || path.startsWith(\"../\")) {\n return path;\n }\n\n var base = (_ref = (_prefix = prefix) !== null && _prefix !== void 0 ? _prefix : getGlobalPathPrefix()) !== null && _ref !== void 0 ? _ref : \"/\";\n return \"\" + (base !== null && base !== void 0 && base.endsWith(\"/\") ? base.slice(0, -1) : base) + (path.startsWith(\"/\") ? path : \"/\" + path);\n} // These global values are wrapped in typeof clauses to ensure the values exist.\n// This is especially problematic in unit testing of this component.\n\n\nvar getGlobalPathPrefix = function getGlobalPathPrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __PATH_PREFIX__ !== \"undefined\" ? __PATH_PREFIX__ : undefined : __PATH_PREFIX__;\n};\n\nvar getGlobalBasePrefix = function getGlobalBasePrefix() {\n return process.env.NODE_ENV !== \"production\" ? typeof __BASE_PATH__ !== \"undefined\" ? __BASE_PATH__ : undefined : __BASE_PATH__;\n};\n\nfunction withAssetPrefix(path) {\n return withPrefix(path, getGlobalPathPrefix());\n}\n\nvar NavLinkPropTypes = {\n activeClassName: _propTypes.default.string,\n activeStyle: _propTypes.default.object,\n partiallyActive: _propTypes.default.bool\n}; // Set up IntersectionObserver\n\nvar createIntersectionObserver = function createIntersectionObserver(el, cb) {\n var io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (el === entry.target) {\n // Check if element is within viewport, remove listener, destroy observer, and run link callback.\n // MSEdge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n cb(entry.isIntersecting || entry.intersectionRatio > 0);\n }\n });\n }); // Add element to the observer\n\n io.observe(el);\n return {\n instance: io,\n el: el\n };\n};\n\nfunction GatsbyLinkLocationWrapper(props) {\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Location, null, function (_ref2) {\n var location = _ref2.location;\n return /*#__PURE__*/_react.default.createElement(GatsbyLink, (0, _extends2.default)({}, props, {\n _location: location\n }));\n });\n}\n\nvar GatsbyLink = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(GatsbyLink, _React$Component);\n\n function GatsbyLink(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // Default to no support for IntersectionObserver\n\n _this.defaultGetProps = function (_ref3) {\n var isPartiallyCurrent = _ref3.isPartiallyCurrent,\n isCurrent = _ref3.isCurrent;\n\n if (_this.props.partiallyActive ? isPartiallyCurrent : isCurrent) {\n return {\n className: [_this.props.className, _this.props.activeClassName].filter(Boolean).join(\" \"),\n style: (0, _extends2.default)({}, _this.props.style, _this.props.activeStyle)\n };\n }\n\n return null;\n };\n\n var IOSupported = false;\n\n if (typeof window !== \"undefined\" && window.IntersectionObserver) {\n IOSupported = true;\n }\n\n _this.state = {\n IOSupported: IOSupported\n };\n _this.abortPrefetch = null;\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2.default)(_this));\n return _this;\n }\n\n var _proto = GatsbyLink.prototype;\n\n _proto._prefetch = function _prefetch() {\n var currentPath = window.location.pathname + window.location.search; // reach router should have the correct state\n\n if (this.props._location && this.props._location.pathname) {\n currentPath = this.props._location.pathname + this.props._location.search;\n }\n\n var rewrittenPath = (0, _rewriteLinkPath.rewriteLinkPath)(this.props.to, currentPath);\n var parsed = (0, _parsePath.parsePath)(rewrittenPath);\n var newPathName = parsed.pathname + parsed.search; // Prefetch is used to speed up next navigations. When you use it on the current navigation,\n // there could be a race-condition where Chrome uses the stale data instead of waiting for the network to complete\n\n if (currentPath !== newPathName) {\n return ___loader.enqueue(newPathName);\n }\n\n return undefined;\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (!this.io) {\n return;\n }\n\n var _this$io = this.io,\n instance = _this$io.instance,\n el = _this$io.el;\n\n if (this.abortPrefetch) {\n this.abortPrefetch.abort();\n }\n\n instance.unobserve(el);\n instance.disconnect();\n };\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.props.innerRef && Object.prototype.hasOwnProperty.call(this.props.innerRef, \"current\")) {\n this.props.innerRef.current = ref;\n } else if (this.props.innerRef) {\n this.props.innerRef(ref);\n }\n\n if (this.state.IOSupported && ref) {\n // If IO supported and element reference found, setup Observer functionality\n this.io = createIntersectionObserver(ref, function (inViewPort) {\n if (inViewPort) {\n _this2.abortPrefetch = _this2._prefetch();\n } else {\n if (_this2.abortPrefetch) {\n _this2.abortPrefetch.abort();\n }\n }\n });\n }\n };\n\n _proto.render = function render() {\n var _this3 = this;\n\n var _this$props = this.props,\n to = _this$props.to,\n _this$props$getProps = _this$props.getProps,\n getProps = _this$props$getProps === void 0 ? this.defaultGetProps : _this$props$getProps,\n _onClick = _this$props.onClick,\n _onMouseEnter = _this$props.onMouseEnter,\n $activeClassName = _this$props.activeClassName,\n $activeStyle = _this$props.activeStyle,\n $innerRef = _this$props.innerRef,\n partiallyActive = _this$props.partiallyActive,\n state = _this$props.state,\n replace = _this$props.replace,\n _location = _this$props._location,\n rest = (0, _objectWithoutPropertiesLoose2.default)(_this$props, _excluded);\n\n if (process.env.NODE_ENV !== \"production\" && !(0, _isLocalLink.isLocalLink)(to)) {\n console.warn(\"External link \" + to + \" was detected in a Link component. Use the Link component only for internal links. See: https://gatsby.dev/internal-links\");\n }\n\n var prefixedTo = (0, _rewriteLinkPath.rewriteLinkPath)(to, _location.pathname);\n\n if (!(0, _isLocalLink.isLocalLink)(prefixedTo)) {\n return /*#__PURE__*/_react.default.createElement(\"a\", (0, _extends2.default)({\n href: prefixedTo\n }, rest));\n }\n\n return /*#__PURE__*/_react.default.createElement(_reachRouter.Link, (0, _extends2.default)({\n to: prefixedTo,\n state: state,\n getProps: getProps,\n innerRef: this.handleRef,\n onMouseEnter: function onMouseEnter(e) {\n if (_onMouseEnter) {\n _onMouseEnter(e);\n }\n\n var parsed = (0, _parsePath.parsePath)(prefixedTo);\n\n ___loader.hovering(parsed.pathname + parsed.search);\n },\n onClick: function onClick(e) {\n if (_onClick) {\n _onClick(e);\n }\n\n if (e.button === 0 && // ignore right clicks\n !_this3.props.target && // let browser handle \"target=_blank\"\n !e.defaultPrevented && // onClick prevented default\n !e.metaKey && // ignore clicks with modifier keys...\n !e.altKey && !e.ctrlKey && !e.shiftKey) {\n e.preventDefault();\n var shouldReplace = replace;\n\n var isCurrent = encodeURI(prefixedTo) === _location.pathname;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n shouldReplace = true;\n } // Make sure the necessary scripts and data are\n // loaded before continuing.\n\n\n window.___navigate(prefixedTo, {\n state: state,\n replace: shouldReplace\n });\n }\n\n return true;\n }\n }, rest));\n };\n\n return GatsbyLink;\n}(_react.default.Component);\n\nGatsbyLink.propTypes = (0, _extends2.default)({}, NavLinkPropTypes, {\n onClick: _propTypes.default.func,\n to: _propTypes.default.string.isRequired,\n replace: _propTypes.default.bool,\n state: _propTypes.default.object\n});\n\nvar _default = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {\n return /*#__PURE__*/_react.default.createElement(GatsbyLinkLocationWrapper, (0, _extends2.default)({\n innerRef: ref\n }, props));\n});\n\nexports.default = _default;\n\nvar navigate = function navigate(to, options) {\n window.___navigate((0, _rewriteLinkPath.rewriteLinkPath)(to, window.location.pathname), options);\n};\n\nexports.navigate = navigate;","\"use strict\";\n\nexports.__esModule = true;\nexports.isLocalLink = void 0;\n// Copied from https://github.com/sindresorhus/is-absolute-url/blob/3ab19cc2e599a03ea691bcb8a4c09fa3ebb5da4f/index.js\nvar ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\n\nvar isAbsolute = function isAbsolute(path) {\n return ABSOLUTE_URL_REGEX.test(path);\n};\n\nvar isLocalLink = function isLocalLink(path) {\n if (typeof path !== \"string\") {\n return undefined; // TODO(v5): Re-Add TypeError\n // throw new TypeError(`Expected a \\`string\\`, got \\`${typeof path}\\``)\n }\n\n return !isAbsolute(path);\n};\n\nexports.isLocalLink = isLocalLink;","\"use strict\";\n\nexports.__esModule = true;\nexports.parsePath = parsePath;\n\nfunction parsePath(path) {\n var pathname = path || \"/\";\n var search = \"\";\n var hash = \"\";\n var hashIndex = pathname.indexOf(\"#\");\n\n if (hashIndex !== -1) {\n hash = pathname.substr(hashIndex);\n pathname = pathname.substr(0, hashIndex);\n }\n\n var searchIndex = pathname.indexOf(\"?\");\n\n if (searchIndex !== -1) {\n search = pathname.substr(searchIndex);\n pathname = pathname.substr(0, searchIndex);\n }\n\n return {\n pathname: pathname,\n search: search === \"?\" ? \"\" : search,\n hash: hash === \"#\" ? \"\" : hash\n };\n}","\"use strict\";\n\nexports.__esModule = true;\nexports.rewriteLinkPath = void 0;\n\nvar _utils = require(\"@gatsbyjs/reach-router/lib/utils\");\n\nvar _applyTrailingSlashOption = require(\"gatsby-page-utils/apply-trailing-slash-option\");\n\nvar _parsePath2 = require(\"./parse-path\");\n\nvar _isLocalLink = require(\"./is-local-link\");\n\nvar _ = require(\".\");\n\n// Specific import to treeshake Node.js stuff\nvar isAbsolutePath = function isAbsolutePath(path) {\n return path === null || path === void 0 ? void 0 : path.startsWith(\"/\");\n};\n\nvar getGlobalTrailingSlash = function getGlobalTrailingSlash() {\n return typeof __TRAILING_SLASH__ !== \"undefined\" ? __TRAILING_SLASH__ : undefined;\n};\n\nfunction absolutify(path, current) {\n // If it's already absolute, return as-is\n if (isAbsolutePath(path)) {\n return path;\n }\n\n return (0, _utils.resolve)(path, current);\n}\n\nvar rewriteLinkPath = function rewriteLinkPath(path, relativeTo) {\n if (typeof path === \"number\") {\n return path;\n }\n\n if (!(0, _isLocalLink.isLocalLink)(path)) {\n return path;\n }\n\n var _parsePath = (0, _parsePath2.parsePath)(path),\n pathname = _parsePath.pathname,\n search = _parsePath.search,\n hash = _parsePath.hash;\n\n var option = getGlobalTrailingSlash();\n var adjustedPath = path;\n\n if (option === \"always\" || option === \"never\") {\n var output = (0, _applyTrailingSlashOption.applyTrailingSlashOption)(pathname, option);\n adjustedPath = \"\" + output + search + hash;\n }\n\n return isAbsolutePath(adjustedPath) ? (0, _.withPrefix)(adjustedPath) : absolutify(adjustedPath, relativeTo);\n};\n\nexports.rewriteLinkPath = rewriteLinkPath;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = exports.ScrollContext = void 0;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nexports.ScrollContext = _scrollHandler.ScrollHandler;\n\nvar _useScrollRestoration = require(\"./use-scroll-restoration\");\n\nexports.useScrollRestoration = _useScrollRestoration.useScrollRestoration;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.ScrollHandler = exports.ScrollContext = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _sessionStorage = require(\"./session-storage\");\n\nfunction _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== \"function\") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }\n\nfunction _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== \"object\" && typeof obj !== \"function\") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== \"default\" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nvar ScrollContext = /*#__PURE__*/React.createContext(new _sessionStorage.SessionStorage());\nexports.ScrollContext = ScrollContext;\nScrollContext.displayName = \"GatsbyScrollContext\";\n\nvar ScrollHandler = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(ScrollHandler, _React$Component);\n\n function ScrollHandler() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this._stateStorage = new _sessionStorage.SessionStorage();\n _this._isTicking = false;\n _this._latestKnownScrollY = 0;\n\n _this.scrollListener = function () {\n _this._latestKnownScrollY = window.scrollY;\n\n if (!_this._isTicking) {\n _this._isTicking = true;\n requestAnimationFrame(_this._saveScroll.bind((0, _assertThisInitialized2.default)(_this)));\n }\n };\n\n _this.windowScroll = function (position, prevProps) {\n if (_this.shouldUpdateScroll(prevProps, _this.props)) {\n window.scrollTo(0, position);\n }\n };\n\n _this.scrollToHash = function (hash, prevProps) {\n var node = document.getElementById(hash.substring(1));\n\n if (node && _this.shouldUpdateScroll(prevProps, _this.props)) {\n node.scrollIntoView();\n }\n };\n\n _this.shouldUpdateScroll = function (prevRouterProps, routerProps) {\n var shouldUpdateScroll = _this.props.shouldUpdateScroll;\n\n if (!shouldUpdateScroll) {\n return true;\n } // Hack to allow accessing this._stateStorage.\n\n\n return shouldUpdateScroll.call((0, _assertThisInitialized2.default)(_this), prevRouterProps, routerProps);\n };\n\n return _this;\n }\n\n var _proto = ScrollHandler.prototype;\n\n _proto._saveScroll = function _saveScroll() {\n var key = this.props.location.key || null;\n\n if (key) {\n this._stateStorage.save(this.props.location, key, this._latestKnownScrollY);\n }\n\n this._isTicking = false;\n };\n\n _proto.componentDidMount = function componentDidMount() {\n window.addEventListener(\"scroll\", this.scrollListener);\n var scrollPosition;\n var _this$props$location = this.props.location,\n key = _this$props$location.key,\n hash = _this$props$location.hash;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n\n if (scrollPosition) {\n this.windowScroll(scrollPosition, undefined);\n } else if (hash) {\n this.scrollToHash(decodeURI(hash), undefined);\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n window.removeEventListener(\"scroll\", this.scrollListener);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var _this$props$location2 = this.props.location,\n hash = _this$props$location2.hash,\n key = _this$props$location2.key;\n var scrollPosition;\n\n if (key) {\n scrollPosition = this._stateStorage.read(this.props.location, key);\n }\n /** There are two pieces of state: the browser url and\n * history state which keeps track of scroll position\n * Native behaviour prescribes that we ought to restore scroll position\n * when a user navigates back in their browser (this is the `POP` action)\n * Currently, reach router has a bug that prevents this at https://github.com/reach/router/issues/228\n * So we _always_ stick to the url as a source of truth — if the url\n * contains a hash, we scroll to it\n */\n\n\n if (hash) {\n this.scrollToHash(decodeURI(hash), prevProps);\n } else {\n this.windowScroll(scrollPosition, prevProps);\n }\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/React.createElement(ScrollContext.Provider, {\n value: this._stateStorage\n }, this.props.children);\n };\n\n return ScrollHandler;\n}(React.Component);\n\nexports.ScrollHandler = ScrollHandler;\nScrollHandler.propTypes = {\n shouldUpdateScroll: _propTypes.default.func,\n children: _propTypes.default.element.isRequired,\n location: _propTypes.default.object.isRequired\n};","\"use strict\";\n\nexports.__esModule = true;\nexports.SessionStorage = void 0;\nvar STATE_KEY_PREFIX = \"@@scroll|\";\nvar GATSBY_ROUTER_SCROLL_STATE = \"___GATSBY_REACT_ROUTER_SCROLL\";\n\nvar SessionStorage = /*#__PURE__*/function () {\n function SessionStorage() {}\n\n var _proto = SessionStorage.prototype;\n\n _proto.read = function read(location, key) {\n var stateKey = this.getStateKey(location, key);\n\n try {\n var value = window.sessionStorage.getItem(stateKey);\n return value ? JSON.parse(value) : 0;\n } catch (e) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to access sessionStorage; sessionStorage is not available.\");\n }\n\n if (window && window[GATSBY_ROUTER_SCROLL_STATE] && window[GATSBY_ROUTER_SCROLL_STATE][stateKey]) {\n return window[GATSBY_ROUTER_SCROLL_STATE][stateKey];\n }\n\n return 0;\n }\n };\n\n _proto.save = function save(location, key, value) {\n var stateKey = this.getStateKey(location, key);\n var storedValue = JSON.stringify(value);\n\n try {\n window.sessionStorage.setItem(stateKey, storedValue);\n } catch (e) {\n if (window && window[GATSBY_ROUTER_SCROLL_STATE]) {\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n } else {\n window[GATSBY_ROUTER_SCROLL_STATE] = {};\n window[GATSBY_ROUTER_SCROLL_STATE][stateKey] = JSON.parse(storedValue);\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\"[gatsby-react-router-scroll] Unable to save state in sessionStorage; sessionStorage is not available.\");\n }\n }\n };\n\n _proto.getStateKey = function getStateKey(location, key) {\n var stateKeyBase = \"\" + STATE_KEY_PREFIX + location.pathname;\n return key === null || typeof key === \"undefined\" ? stateKeyBase : stateKeyBase + \"|\" + key;\n };\n\n return SessionStorage;\n}();\n\nexports.SessionStorage = SessionStorage;","\"use strict\";\n\nexports.__esModule = true;\nexports.useScrollRestoration = useScrollRestoration;\n\nvar _scrollHandler = require(\"./scroll-handler\");\n\nvar _react = require(\"react\");\n\nvar _reachRouter = require(\"@gatsbyjs/reach-router\");\n\nfunction useScrollRestoration(identifier) {\n var location = (0, _reachRouter.useLocation)();\n var state = (0, _react.useContext)(_scrollHandler.ScrollContext);\n var ref = (0, _react.useRef)(null);\n (0, _react.useLayoutEffect)(function () {\n if (ref.current) {\n var position = state.read(location, identifier);\n ref.current.scrollTo(0, position || 0);\n }\n }, [location.key]);\n return {\n ref: ref,\n onScroll: function onScroll() {\n if (ref.current) {\n state.save(location, identifier, ref.current.scrollTop);\n }\n }\n };\n}","exports.components = {\n \"component---src-pages-404-tsx\": () => import(\"./../../../src/pages/404.tsx\" /* webpackChunkName: \"component---src-pages-404-tsx\" */),\n \"component---src-pages-index-tsx\": () => import(\"./../../../src/pages/index.tsx\" /* webpackChunkName: \"component---src-pages-index-tsx\" */)\n}\n\n","module.exports = [{\n plugin: require('../node_modules/gatsby-plugin-image/gatsby-browser.js'),\n options: {\"plugins\":[]},\n },{\n plugin: require('../node_modules/gatsby-plugin-mdx/gatsby-browser.js'),\n options: {\"plugins\":[],\"extensions\":[\".mdx\"],\"defaultLayouts\":{},\"gatsbyRemarkPlugins\":[],\"lessBabel\":false,\"remarkPlugins\":[],\"rehypePlugins\":[],\"mediaTypes\":[\"text/markdown\",\"text/x-markdown\"],\"root\":\"/home/laineh/Projects/Anime-Girls-Holding-Programming-Books/webviewer\",\"commonmark\":false},\n },{\n plugin: require('../gatsby-browser.js'),\n options: {\"plugins\":[]},\n }]\n","const plugins = require(`./api-runner-browser-plugins`)\nconst { getResourceURLsForPathname, loadPage, loadPageSync } =\n require(`./loader`).publicLoader\n\nexports.apiRunner = (api, args = {}, defaultReturn, argTransform) => {\n // Hooks for gatsby-cypress's API handler\n if (process.env.CYPRESS_SUPPORT) {\n if (window.___apiHandler) {\n window.___apiHandler(api)\n } else if (window.___resolvedAPIs) {\n window.___resolvedAPIs.push(api)\n } else {\n window.___resolvedAPIs = [api]\n }\n }\n\n let results = plugins.map(plugin => {\n if (!plugin.plugin[api]) {\n return undefined\n }\n\n args.getResourceURLsForPathname = getResourceURLsForPathname\n args.loadPage = loadPage\n args.loadPageSync = loadPageSync\n\n const result = plugin.plugin[api](args, plugin.options)\n if (result && argTransform) {\n args = argTransform({ args, result, plugin })\n }\n return result\n })\n\n // Filter out undefined results.\n results = results.filter(result => typeof result !== `undefined`)\n\n if (results.length > 0) {\n return results\n } else if (defaultReturn) {\n return [defaultReturn]\n } else {\n return []\n }\n}\n\nexports.apiRunnerAsync = (api, args, defaultReturn) =>\n plugins.reduce(\n (previous, next) =>\n next.plugin[api]\n ? previous.then(() => next.plugin[api](args, next.options))\n : previous,\n Promise.resolve()\n )\n","// \n// An event handler can take an optional event argument\n// and should not return a value\n \n \n\n// An array of all currently registered event handlers for a type\n \n \n// A map of event types and their corresponding event handlers.\n \n \n \n \n\n/** Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nfunction mitt(all ) {\n\tall = all || Object.create(null);\n\n\treturn {\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton: function on(type , handler ) {\n\t\t\t(all[type] || (all[type] = [])).push(handler);\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t *\n\t\t * @param {String} type\tType of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff: function off(type , handler ) {\n\t\t\tif (all[type]) {\n\t\t\t\tall[type].splice(all[type].indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * @param {String} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit: function emit(type , evt ) {\n\t\t\t(all[type] || []).slice().map(function (handler) { handler(evt); });\n\t\t\t(all['*'] || []).slice().map(function (handler) { handler(type, evt); });\n\t\t}\n\t};\n}\n\nexport default mitt;\n//# sourceMappingURL=mitt.es.js.map\n","import mitt from \"mitt\"\n\nconst emitter = mitt()\nexport default emitter\n","export default pathAndSearch => {\n if (pathAndSearch === undefined) {\n return pathAndSearch\n }\n let [path, search = ``] = pathAndSearch.split(`?`)\n if (search) {\n search = `?` + search\n }\n\n if (path === `/`) {\n return `/` + search\n }\n if (path.charAt(path.length - 1) === `/`) {\n return path.slice(0, -1) + search\n }\n return path + search\n}\n","import { pick } from \"@gatsbyjs/reach-router/lib/utils\"\nimport stripPrefix from \"./strip-prefix\"\nimport normalizePagePath from \"./normalize-page-path\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\n\nconst pathCache = new Map()\nlet matchPaths = []\n\nconst trimPathname = rawPathname => {\n const pathname = decodeURIComponent(rawPathname)\n // Remove the pathPrefix from the pathname.\n const trimmedPathname = stripPrefix(\n pathname,\n decodeURIComponent(__BASE_PATH__)\n )\n // Remove any hashfragment\n .split(`#`)[0]\n\n return trimmedPathname\n}\n\nfunction absolutify(path) {\n // If it's already absolute, return as-is\n if (\n path.startsWith(`/`) ||\n path.startsWith(`https://`) ||\n path.startsWith(`http://`)\n ) {\n return path\n }\n // Calculate path relative to current location, adding a trailing slash to\n // match behavior of @reach/router\n return new URL(\n path,\n window.location.href + (window.location.href.endsWith(`/`) ? `` : `/`)\n ).pathname\n}\n\n/**\n * Set list of matchPaths\n *\n * @param {Array<{path: string, matchPath: string}>} value collection of matchPaths\n */\nexport const setMatchPaths = value => {\n matchPaths = value\n}\n\n/**\n * Return a matchpath url\n * if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n * `/foo?bar=far` => `/page1`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string|null}\n */\nexport const findMatchPath = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return normalizePagePath(path.route.originalPath)\n }\n\n return null\n}\n\n/**\n * Return a matchpath params from reach/router rules\n * if `match-paths.json` contains `{ \":bar/*foo\" }`, and the path is /baz/zaz/zoo\n * then it returns\n * { bar: baz, foo: zaz/zoo }\n *\n * @param {string} rawPathname A raw pathname\n * @return {object}\n */\nexport const grabMatchParams = rawPathname => {\n const trimmedPathname = cleanPath(rawPathname)\n\n const pickPaths = matchPaths.map(({ path, matchPath }) => {\n return {\n path: matchPath,\n originalPath: path,\n }\n })\n\n const path = pick(pickPaths, trimmedPathname)\n\n if (path) {\n return path.params\n }\n\n return {}\n}\n\n// Given a raw URL path, returns the cleaned version of it (trim off\n// `#` and query params), or if it matches an entry in\n// `match-paths.json`, its matched path is returned\n//\n// E.g. `/foo?bar=far` => `/foo`\n//\n// Or if `match-paths.json` contains `{ \"/foo*\": \"/page1\", ...}`, then\n// `/foo?bar=far` => `/page1`\nexport const findPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n if (pathCache.has(trimmedPathname)) {\n return pathCache.get(trimmedPathname)\n }\n\n const redirect = maybeGetBrowserRedirect(rawPathname)\n if (redirect) {\n return findPath(redirect.toPath)\n }\n\n let foundPath = findMatchPath(trimmedPathname)\n\n if (!foundPath) {\n foundPath = cleanPath(rawPathname)\n }\n\n pathCache.set(trimmedPathname, foundPath)\n\n return foundPath\n}\n\n/**\n * Clean a url and converts /index.html => /\n * E.g. `/foo?bar=far` => `/foo`\n *\n * @param {string} rawPathname A raw pathname\n * @return {string}\n */\nexport const cleanPath = rawPathname => {\n const trimmedPathname = trimPathname(absolutify(rawPathname))\n\n let foundPath = trimmedPathname\n if (foundPath === `/index.html`) {\n foundPath = `/`\n }\n\n foundPath = normalizePagePath(foundPath)\n\n return foundPath\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport Link, {\n withPrefix,\n withAssetPrefix,\n navigate,\n push,\n replace,\n navigateTo,\n parsePath,\n} from \"gatsby-link\"\nimport { useScrollRestoration } from \"gatsby-react-router-scroll\"\nimport PageRenderer from \"./public-page-renderer\"\nimport loader from \"./loader\"\n\nconst prefetchPathname = loader.enqueue\n\nconst StaticQueryContext = React.createContext({})\n\nfunction StaticQueryDataRenderer({ staticQueryData, data, query, render }) {\n const finalData = data\n ? data.data\n : staticQueryData[query] && staticQueryData[query].data\n\n return (\n \n {finalData && render(finalData)}\n {!finalData &&
Loading (StaticQuery)
}\n
\n )\n}\n\nconst StaticQuery = props => {\n const { data, query, render, children } = props\n\n return (\n \n {staticQueryData => (\n \n )}\n \n )\n}\n\nconst useStaticQuery = query => {\n if (\n typeof React.useContext !== `function` &&\n process.env.NODE_ENV === `development`\n ) {\n throw new Error(\n `You're likely using a version of React that doesn't support Hooks\\n` +\n `Please update React and ReactDOM to 16.8.0 or later to use the useStaticQuery hook.`\n )\n }\n const context = React.useContext(StaticQueryContext)\n\n // query is a stringified number like `3303882` when wrapped with graphql, If a user forgets\n // to wrap the query in a grqphql, then casting it to a Number results in `NaN` allowing us to\n // catch the misuse of the API and give proper direction\n if (isNaN(Number(query))) {\n throw new Error(`useStaticQuery was called with a string but expects to be called using \\`graphql\\`. Try this:\n\nimport { useStaticQuery, graphql } from 'gatsby';\n\nuseStaticQuery(graphql\\`${query}\\`);\n`)\n }\n\n if (context[query]?.data) {\n return context[query].data\n } else {\n throw new Error(\n `The result of this StaticQuery could not be fetched.\\n\\n` +\n `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +\n `please open an issue in https://github.com/gatsbyjs/gatsby/issues`\n )\n }\n}\n\nStaticQuery.propTypes = {\n data: PropTypes.object,\n query: PropTypes.string.isRequired,\n render: PropTypes.func,\n children: PropTypes.func,\n}\n\nfunction graphql() {\n throw new Error(\n `It appears like Gatsby is misconfigured. Gatsby related \\`graphql\\` calls ` +\n `are supposed to only be evaluated at compile time, and then compiled away. ` +\n `Unfortunately, something went wrong and the query was left in the compiled code.\\n\\n` +\n `Unless your site has a complex or custom babel/Gatsby configuration this is likely a bug in Gatsby.`\n )\n}\n\nexport {\n Link,\n withAssetPrefix,\n withPrefix,\n graphql,\n parsePath,\n navigate,\n useScrollRestoration,\n StaticQueryContext,\n StaticQuery,\n PageRenderer,\n useStaticQuery,\n prefetchPathname,\n}\n","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","const support = function (feature) {\n if (typeof document === `undefined`) {\n return false\n }\n const fakeLink = document.createElement(`link`)\n try {\n if (fakeLink.relList && typeof fakeLink.relList.supports === `function`) {\n return fakeLink.relList.supports(feature)\n }\n } catch (err) {\n return false\n }\n return false\n}\n\nconst linkPrefetchStrategy = function (url, options) {\n return new Promise((resolve, reject) => {\n if (typeof document === `undefined`) {\n reject()\n return\n }\n\n const link = document.createElement(`link`)\n link.setAttribute(`rel`, `prefetch`)\n link.setAttribute(`href`, url)\n\n Object.keys(options).forEach(key => {\n link.setAttribute(key, options[key])\n })\n\n link.onload = resolve\n link.onerror = reject\n\n const parentElement =\n document.getElementsByTagName(`head`)[0] ||\n document.getElementsByName(`script`)[0].parentNode\n parentElement.appendChild(link)\n })\n}\n\nconst xhrPrefetchStrategy = function (url) {\n return new Promise((resolve, reject) => {\n const req = new XMLHttpRequest()\n req.open(`GET`, url, true)\n\n req.onload = () => {\n if (req.status === 200) {\n resolve()\n } else {\n reject()\n }\n }\n\n req.send(null)\n })\n}\n\nconst supportedPrefetchStrategy = support(`prefetch`)\n ? linkPrefetchStrategy\n : xhrPrefetchStrategy\n\nconst preFetched = {}\n\nconst prefetch = function (url, options) {\n return new Promise(resolve => {\n if (preFetched[url]) {\n resolve()\n return\n }\n\n supportedPrefetchStrategy(url, options)\n .then(() => {\n resolve()\n preFetched[url] = true\n })\n .catch(() => {}) // 404s are logged to the console anyway\n })\n}\n\nexport default prefetch\n","import prefetchHelper from \"./prefetch\"\nimport emitter from \"./emitter\"\nimport { setMatchPaths, findPath, findMatchPath } from \"./find-path\"\n\n/**\n * Available resource loading statuses\n */\nexport const PageResourceStatus = {\n /**\n * At least one of critical resources failed to load\n */\n Error: `error`,\n /**\n * Resources loaded successfully\n */\n Success: `success`,\n}\n\nconst preferDefault = m => (m && m.default) || m\n\nconst stripSurroundingSlashes = s => {\n s = s[0] === `/` ? s.slice(1) : s\n s = s.endsWith(`/`) ? s.slice(0, -1) : s\n return s\n}\n\nconst createPageDataUrl = rawPath => {\n const [path, maybeSearch] = rawPath.split(`?`)\n const fixedPath = path === `/` ? `index` : stripSurroundingSlashes(path)\n return `${__PATH_PREFIX__}/page-data/${fixedPath}/page-data.json${\n maybeSearch ? `?${maybeSearch}` : ``\n }`\n}\n\nfunction doFetch(url, method = `GET`) {\n return new Promise(resolve => {\n const req = new XMLHttpRequest()\n req.open(method, url, true)\n req.onreadystatechange = () => {\n if (req.readyState == 4) {\n resolve(req)\n }\n }\n req.send(null)\n })\n}\n\nconst doesConnectionSupportPrefetch = () => {\n if (\n `connection` in navigator &&\n typeof navigator.connection !== `undefined`\n ) {\n if ((navigator.connection.effectiveType || ``).includes(`2g`)) {\n return false\n }\n if (navigator.connection.saveData) {\n return false\n }\n }\n return true\n}\n\nconst toPageResources = (pageData, component = null) => {\n const page = {\n componentChunkName: pageData.componentChunkName,\n path: pageData.path,\n webpackCompilationHash: pageData.webpackCompilationHash,\n matchPath: pageData.matchPath,\n staticQueryHashes: pageData.staticQueryHashes,\n getServerDataError: pageData.getServerDataError,\n }\n\n return {\n component,\n json: pageData.result,\n page,\n }\n}\n\nexport class BaseLoader {\n constructor(loadComponent, matchPaths) {\n // Map of pagePath -> Page. Where Page is an object with: {\n // status: PageResourceStatus.Success || PageResourceStatus.Error,\n // payload: PageResources, // undefined if PageResourceStatus.Error\n // }\n // PageResources is {\n // component,\n // json: pageData.result,\n // page: {\n // componentChunkName,\n // path,\n // webpackCompilationHash,\n // staticQueryHashes\n // },\n // staticQueryResults\n // }\n this.pageDb = new Map()\n this.inFlightDb = new Map()\n this.staticQueryDb = {}\n this.pageDataDb = new Map()\n this.isPrefetchQueueRunning = false\n this.prefetchQueued = []\n this.prefetchTriggered = new Set()\n this.prefetchCompleted = new Set()\n this.loadComponent = loadComponent\n setMatchPaths(matchPaths)\n }\n\n inFlightNetworkRequests = new Map()\n\n memoizedGet(url) {\n let inFlightPromise = this.inFlightNetworkRequests.get(url)\n\n if (!inFlightPromise) {\n inFlightPromise = doFetch(url, `GET`)\n this.inFlightNetworkRequests.set(url, inFlightPromise)\n }\n\n // Prefer duplication with then + catch over .finally to prevent problems in ie11 + firefox\n return inFlightPromise\n .then(response => {\n this.inFlightNetworkRequests.delete(url)\n return response\n })\n .catch(err => {\n this.inFlightNetworkRequests.delete(url)\n throw err\n })\n }\n\n setApiRunner(apiRunner) {\n this.apiRunner = apiRunner\n this.prefetchDisabled = apiRunner(`disableCorePrefetching`).some(a => a)\n }\n\n fetchPageDataJson(loadObj) {\n const { pagePath, retries = 0 } = loadObj\n const url = createPageDataUrl(pagePath)\n return this.memoizedGet(url).then(req => {\n const { status, responseText } = req\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.path === undefined) {\n throw new Error(`not a valid pageData response`)\n }\n\n const maybeSearch = pagePath.split(`?`)[1]\n if (maybeSearch && !jsonPayload.path.includes(maybeSearch)) {\n jsonPayload.path += `?${maybeSearch}`\n }\n\n return Object.assign(loadObj, {\n status: PageResourceStatus.Success,\n payload: jsonPayload,\n })\n } catch (err) {\n // continue regardless of error\n }\n }\n\n // Handle 404\n if (status === 404 || status === 200) {\n // If the request was for a 404/500 page and it doesn't exist, we're done\n if (pagePath === `/404.html` || pagePath === `/500.html`) {\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n }\n\n // Need some code here to cache the 404 request. In case\n // multiple loadPageDataJsons result in 404s\n return this.fetchPageDataJson(\n Object.assign(loadObj, { pagePath: `/404.html`, notFound: true })\n )\n }\n\n // handle 500 response (Unrecoverable)\n if (status === 500) {\n return this.fetchPageDataJson(\n Object.assign(loadObj, {\n pagePath: `/500.html`,\n internalServerError: true,\n })\n )\n }\n\n // Handle everything else, including status === 0, and 503s. Should retry\n if (retries < 3) {\n return this.fetchPageDataJson(\n Object.assign(loadObj, { retries: retries + 1 })\n )\n }\n\n // Retried 3 times already, result is an error.\n return Object.assign(loadObj, {\n status: PageResourceStatus.Error,\n })\n })\n }\n\n loadPageDataJson(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDataDb.has(pagePath)) {\n const pageData = this.pageDataDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !pageData.stale) {\n return Promise.resolve(pageData)\n }\n }\n\n return this.fetchPageDataJson({ pagePath }).then(pageData => {\n this.pageDataDb.set(pagePath, pageData)\n\n return pageData\n })\n }\n\n findMatchPath(rawPath) {\n return findMatchPath(rawPath)\n }\n\n // TODO check all uses of this and whether they use undefined for page resources not exist\n loadPage(rawPath) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const page = this.pageDb.get(pagePath)\n if (process.env.BUILD_STAGE !== `develop` || !page.payload.stale) {\n if (page.error) {\n return {\n error: page.error,\n status: page.status,\n }\n }\n\n return Promise.resolve(page.payload)\n }\n }\n\n if (this.inFlightDb.has(pagePath)) {\n return this.inFlightDb.get(pagePath)\n }\n\n const inFlightPromise = Promise.all([\n this.loadAppData(),\n this.loadPageDataJson(pagePath),\n ]).then(allData => {\n const result = allData[1]\n if (result.status === PageResourceStatus.Error) {\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n let pageData = result.payload\n const { componentChunkName, staticQueryHashes = [] } = pageData\n\n const finalResult = {}\n\n const componentChunkPromise = this.loadComponent(componentChunkName).then(\n component => {\n finalResult.createdAt = new Date()\n let pageResources\n if (!component || component instanceof Error) {\n finalResult.status = PageResourceStatus.Error\n finalResult.error = component\n } else {\n finalResult.status = PageResourceStatus.Success\n if (result.notFound === true) {\n finalResult.notFound = true\n }\n pageData = Object.assign(pageData, {\n webpackCompilationHash: allData[0]\n ? allData[0].webpackCompilationHash\n : ``,\n })\n pageResources = toPageResources(pageData, component)\n }\n // undefined if final result is an error\n return pageResources\n }\n )\n\n const staticQueryBatchPromise = Promise.all(\n staticQueryHashes.map(staticQueryHash => {\n // Check for cache in case this static query result has already been loaded\n if (this.staticQueryDb[staticQueryHash]) {\n const jsonPayload = this.staticQueryDb[staticQueryHash]\n return { staticQueryHash, jsonPayload }\n }\n\n return this.memoizedGet(\n `${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json`\n )\n .then(req => {\n const jsonPayload = JSON.parse(req.responseText)\n return { staticQueryHash, jsonPayload }\n })\n .catch(() => {\n throw new Error(\n `We couldn't load \"${__PATH_PREFIX__}/page-data/sq/d/${staticQueryHash}.json\"`\n )\n })\n })\n ).then(staticQueryResults => {\n const staticQueryResultsMap = {}\n\n staticQueryResults.forEach(({ staticQueryHash, jsonPayload }) => {\n staticQueryResultsMap[staticQueryHash] = jsonPayload\n this.staticQueryDb[staticQueryHash] = jsonPayload\n })\n\n return staticQueryResultsMap\n })\n\n return (\n Promise.all([componentChunkPromise, staticQueryBatchPromise])\n .then(([pageResources, staticQueryResults]) => {\n let payload\n if (pageResources) {\n payload = { ...pageResources, staticQueryResults }\n finalResult.payload = payload\n emitter.emit(`onPostLoadPageResources`, {\n page: payload,\n pageResources: payload,\n })\n }\n\n this.pageDb.set(pagePath, finalResult)\n\n if (finalResult.error) {\n return {\n error: finalResult.error,\n status: finalResult.status,\n }\n }\n\n return payload\n })\n // when static-query fail to load we throw a better error\n .catch(err => {\n return {\n error: err,\n status: PageResourceStatus.Error,\n }\n })\n )\n })\n\n inFlightPromise\n .then(() => {\n this.inFlightDb.delete(pagePath)\n })\n .catch(error => {\n this.inFlightDb.delete(pagePath)\n throw error\n })\n\n this.inFlightDb.set(pagePath, inFlightPromise)\n\n return inFlightPromise\n }\n\n // returns undefined if the page does not exists in cache\n loadPageSync(rawPath, options = {}) {\n const pagePath = findPath(rawPath)\n if (this.pageDb.has(pagePath)) {\n const pageData = this.pageDb.get(pagePath)\n\n if (pageData.payload) {\n return pageData.payload\n }\n\n if (options?.withErrorDetails) {\n return {\n error: pageData.error,\n status: pageData.status,\n }\n }\n }\n return undefined\n }\n\n shouldPrefetch(pagePath) {\n // Skip prefetching if we know user is on slow or constrained connection\n if (!doesConnectionSupportPrefetch()) {\n return false\n }\n\n // Check if the page exists.\n if (this.pageDb.has(pagePath)) {\n return false\n }\n\n return true\n }\n\n prefetch(pagePath) {\n if (!this.shouldPrefetch(pagePath)) {\n return {\n then: resolve => resolve(false),\n abort: () => {},\n }\n }\n if (this.prefetchTriggered.has(pagePath)) {\n return {\n then: resolve => resolve(true),\n abort: () => {},\n }\n }\n\n const defer = {\n resolve: null,\n reject: null,\n promise: null,\n }\n defer.promise = new Promise((resolve, reject) => {\n defer.resolve = resolve\n defer.reject = reject\n })\n this.prefetchQueued.push([pagePath, defer])\n const abortC = new AbortController()\n abortC.signal.addEventListener(`abort`, () => {\n const index = this.prefetchQueued.findIndex(([p]) => p === pagePath)\n // remove from the queue\n if (index !== -1) {\n this.prefetchQueued.splice(index, 1)\n }\n })\n\n if (!this.isPrefetchQueueRunning) {\n this.isPrefetchQueueRunning = true\n setTimeout(() => {\n this._processNextPrefetchBatch()\n }, 3000)\n }\n\n return {\n then: (resolve, reject) => defer.promise.then(resolve, reject),\n abort: abortC.abort.bind(abortC),\n }\n }\n\n _processNextPrefetchBatch() {\n const idleCallback = window.requestIdleCallback || (cb => setTimeout(cb, 0))\n\n idleCallback(() => {\n const toPrefetch = this.prefetchQueued.splice(0, 4)\n const prefetches = Promise.all(\n toPrefetch.map(([pagePath, dPromise]) => {\n // Tell plugins with custom prefetching logic that they should start\n // prefetching this path.\n if (!this.prefetchTriggered.has(pagePath)) {\n this.apiRunner(`onPrefetchPathname`, { pathname: pagePath })\n this.prefetchTriggered.add(pagePath)\n }\n\n // If a plugin has disabled core prefetching, stop now.\n if (this.prefetchDisabled) {\n return dPromise.resolve(false)\n }\n\n return this.doPrefetch(findPath(pagePath)).then(() => {\n if (!this.prefetchCompleted.has(pagePath)) {\n this.apiRunner(`onPostPrefetchPathname`, { pathname: pagePath })\n this.prefetchCompleted.add(pagePath)\n }\n\n dPromise.resolve(true)\n })\n })\n )\n\n if (this.prefetchQueued.length) {\n prefetches.then(() => {\n setTimeout(() => {\n this._processNextPrefetchBatch()\n }, 3000)\n })\n } else {\n this.isPrefetchQueueRunning = false\n }\n })\n }\n\n doPrefetch(pagePath) {\n const pageDataUrl = createPageDataUrl(pagePath)\n return prefetchHelper(pageDataUrl, {\n crossOrigin: `anonymous`,\n as: `fetch`,\n }).then(() =>\n // This was just prefetched, so will return a response from\n // the cache instead of making another request to the server\n this.loadPageDataJson(pagePath)\n )\n }\n\n hovering(rawPath) {\n this.loadPage(rawPath)\n }\n\n getResourceURLsForPathname(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDataDb.get(pagePath)\n if (page) {\n const pageResources = toPageResources(page.payload)\n\n return [\n ...createComponentUrls(pageResources.page.componentChunkName),\n createPageDataUrl(pagePath),\n ]\n } else {\n return null\n }\n }\n\n isPageNotFound(rawPath) {\n const pagePath = findPath(rawPath)\n const page = this.pageDb.get(pagePath)\n return !page || page.notFound\n }\n\n loadAppData(retries = 0) {\n return this.memoizedGet(`${__PATH_PREFIX__}/page-data/app-data.json`).then(\n req => {\n const { status, responseText } = req\n\n let appData\n\n if (status !== 200 && retries < 3) {\n // Retry 3 times incase of non-200 responses\n return this.loadAppData(retries + 1)\n }\n\n // Handle 200\n if (status === 200) {\n try {\n const jsonPayload = JSON.parse(responseText)\n if (jsonPayload.webpackCompilationHash === undefined) {\n throw new Error(`not a valid app-data response`)\n }\n\n appData = jsonPayload\n } catch (err) {\n // continue regardless of error\n }\n }\n\n return appData\n }\n )\n }\n}\n\nconst createComponentUrls = componentChunkName =>\n (window.___chunkMapping[componentChunkName] || []).map(\n chunk => __PATH_PREFIX__ + chunk\n )\n\nexport class ProdLoader extends BaseLoader {\n constructor(asyncRequires, matchPaths, pageData) {\n const loadComponent = chunkName => {\n if (!asyncRequires.components[chunkName]) {\n throw new Error(\n `We couldn't find the correct component chunk with the name ${chunkName}`\n )\n }\n\n return (\n asyncRequires.components[chunkName]()\n .then(preferDefault)\n // loader will handle the case when component is error\n .catch(err => err)\n )\n }\n\n super(loadComponent, matchPaths)\n\n if (pageData) {\n this.pageDataDb.set(findPath(pageData.path), {\n pagePath: pageData.path,\n payload: pageData,\n status: `success`,\n })\n }\n }\n\n doPrefetch(pagePath) {\n return super.doPrefetch(pagePath).then(result => {\n if (result.status !== PageResourceStatus.Success) {\n return Promise.resolve()\n }\n const pageData = result.payload\n const chunkName = pageData.componentChunkName\n const componentUrls = createComponentUrls(chunkName)\n return Promise.all(componentUrls.map(prefetchHelper)).then(() => pageData)\n })\n }\n\n loadPageDataJson(rawPath) {\n return super.loadPageDataJson(rawPath).then(data => {\n if (data.notFound) {\n // check if html file exist using HEAD request:\n // if it does we should navigate to it instead of showing 404\n return doFetch(rawPath, `HEAD`).then(req => {\n if (req.status === 200) {\n // page (.html file) actually exist (or we asked for 404 )\n // returning page resources status as errored to trigger\n // regular browser navigation to given page\n return {\n status: PageResourceStatus.Error,\n }\n }\n\n // if HEAD request wasn't 200, return notFound result\n // and show 404 page\n return data\n })\n }\n return data\n })\n }\n}\n\nlet instance\n\nexport const setLoader = _loader => {\n instance = _loader\n}\n\nexport const publicLoader = {\n enqueue: rawPath => instance.prefetch(rawPath),\n\n // Real methods\n getResourceURLsForPathname: rawPath =>\n instance.getResourceURLsForPathname(rawPath),\n loadPage: rawPath => instance.loadPage(rawPath),\n // TODO add deprecation to v4 so people use withErrorDetails and then we can remove in v5 and change default behaviour\n loadPageSync: (rawPath, options = {}) =>\n instance.loadPageSync(rawPath, options),\n prefetch: rawPath => instance.prefetch(rawPath),\n isPageNotFound: rawPath => instance.isPageNotFound(rawPath),\n hovering: rawPath => instance.hovering(rawPath),\n loadAppData: () => instance.loadAppData(),\n}\n\nexport default publicLoader\n\nexport function getStaticQueryResults() {\n if (instance) {\n return instance.staticQueryDb\n } else {\n return {}\n }\n}\n","import React, { createElement } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport { grabMatchParams } from \"./find-path\"\n\n// Renders page\nclass PageRenderer extends React.Component {\n render() {\n const props = {\n ...this.props,\n params: {\n ...grabMatchParams(this.props.location.pathname),\n ...this.props.pageResources.json.pageContext.__params,\n },\n }\n\n const pageElement = createElement(this.props.pageResources.component, {\n ...props,\n key: this.props.path || this.props.pageResources.page.path,\n })\n\n const wrappedPage = apiRunner(\n `wrapPageElement`,\n { element: pageElement, props },\n pageElement,\n ({ result }) => {\n return { element: result, props }\n }\n ).pop()\n\n return wrappedPage\n }\n}\n\nPageRenderer.propTypes = {\n location: PropTypes.object.isRequired,\n pageResources: PropTypes.object.isRequired,\n data: PropTypes.object,\n pageContext: PropTypes.object.isRequired,\n}\n\nexport default PageRenderer\n","// This is extracted to separate module because it's shared\n// between browser and SSR code\nexport const RouteAnnouncerProps = {\n id: `gatsby-announcer`,\n style: {\n position: `absolute`,\n top: 0,\n width: 1,\n height: 1,\n padding: 0,\n overflow: `hidden`,\n clip: `rect(0, 0, 0, 0)`,\n whiteSpace: `nowrap`,\n border: 0,\n },\n \"aria-live\": `assertive`,\n \"aria-atomic\": `true`,\n}\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport { maybeGetBrowserRedirect } from \"./redirect-utils.js\"\nimport { apiRunner } from \"./api-runner-browser\"\nimport emitter from \"./emitter\"\nimport { RouteAnnouncerProps } from \"./route-announcer-props\"\nimport { navigate as reachNavigate } from \"@gatsbyjs/reach-router\"\nimport { globalHistory } from \"@gatsbyjs/reach-router/lib/history\"\nimport { parsePath } from \"gatsby-link\"\n\nfunction maybeRedirect(pathname) {\n const redirect = maybeGetBrowserRedirect(pathname)\n const { hash, search } = window.location\n\n if (redirect != null) {\n window.___replace(redirect.toPath + search + hash)\n return true\n } else {\n return false\n }\n}\n\n// Catch unhandled chunk loading errors and force a restart of the app.\nlet nextRoute = ``\n\nwindow.addEventListener(`unhandledrejection`, event => {\n if (/loading chunk \\d* failed./i.test(event.reason)) {\n if (nextRoute) {\n window.location.pathname = nextRoute\n }\n }\n})\n\nconst onPreRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n nextRoute = location.pathname\n apiRunner(`onPreRouteUpdate`, { location, prevLocation })\n }\n}\n\nconst onRouteUpdate = (location, prevLocation) => {\n if (!maybeRedirect(location.pathname)) {\n apiRunner(`onRouteUpdate`, { location, prevLocation })\n if (\n process.env.GATSBY_EXPERIMENTAL_QUERY_ON_DEMAND &&\n process.env.GATSBY_QUERY_ON_DEMAND_LOADING_INDICATOR === `true`\n ) {\n emitter.emit(`onRouteUpdate`, { location, prevLocation })\n }\n }\n}\n\nconst navigate = (to, options = {}) => {\n // Support forward/backward navigation with numbers\n // navigate(-2) (jumps back 2 history steps)\n // navigate(2) (jumps forward 2 history steps)\n if (typeof to === `number`) {\n globalHistory.navigate(to)\n return\n }\n\n const { pathname, search, hash } = parsePath(to)\n const redirect = maybeGetBrowserRedirect(pathname)\n\n // If we're redirecting, just replace the passed in pathname\n // to the one we want to redirect to.\n if (redirect) {\n to = redirect.toPath + search + hash\n }\n\n // If we had a service worker update, no matter the path, reload window and\n // reset the pathname whitelist\n if (window.___swUpdated) {\n window.location = pathname + search + hash\n return\n }\n\n // Start a timer to wait for a second before transitioning and showing a\n // loader in case resources aren't around yet.\n const timeoutId = setTimeout(() => {\n emitter.emit(`onDelayedLoadPageResources`, { pathname })\n apiRunner(`onRouteUpdateDelayed`, {\n location: window.location,\n })\n }, 1000)\n\n loader.loadPage(pathname + search).then(pageResources => {\n // If no page resources, then refresh the page\n // Do this, rather than simply `window.location.reload()`, so that\n // pressing the back/forward buttons work - otherwise when pressing\n // back, the browser will just change the URL and expect JS to handle\n // the change, which won't always work since it might not be a Gatsby\n // page.\n if (!pageResources || pageResources.status === PageResourceStatus.Error) {\n window.history.replaceState({}, ``, location.href)\n window.location = pathname\n clearTimeout(timeoutId)\n return\n }\n\n // If the loaded page has a different compilation hash to the\n // window, then a rebuild has occurred on the server. Reload.\n if (process.env.NODE_ENV === `production` && pageResources) {\n if (\n pageResources.page.webpackCompilationHash !==\n window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n window.location = pathname + search + hash\n }\n }\n reachNavigate(to, options)\n clearTimeout(timeoutId)\n })\n}\n\nfunction shouldUpdateScroll(prevRouterProps, { location }) {\n const { pathname, hash } = location\n const results = apiRunner(`shouldUpdateScroll`, {\n prevRouterProps,\n // `pathname` for backwards compatibility\n pathname,\n routerProps: { location },\n getSavedScrollPosition: args => [\n 0,\n // FIXME this is actually a big code smell, we should fix this\n // eslint-disable-next-line @babel/no-invalid-this\n this._stateStorage.read(args, args.key),\n ],\n })\n if (results.length > 0) {\n // Use the latest registered shouldUpdateScroll result, this allows users to override plugin's configuration\n // @see https://github.com/gatsbyjs/gatsby/issues/12038\n return results[results.length - 1]\n }\n\n if (prevRouterProps) {\n const {\n location: { pathname: oldPathname },\n } = prevRouterProps\n if (oldPathname === pathname) {\n // Scroll to element if it exists, if it doesn't, or no hash is provided,\n // scroll to top.\n return hash ? decodeURI(hash.slice(1)) : [0, 0]\n }\n }\n return true\n}\n\nfunction init() {\n // The \"scroll-behavior\" package expects the \"action\" to be on the location\n // object so let's copy it over.\n globalHistory.listen(args => {\n args.location.action = args.action\n })\n\n window.___push = to => navigate(to, { replace: false })\n window.___replace = to => navigate(to, { replace: true })\n window.___navigate = (to, options) => navigate(to, options)\n}\n\nclass RouteAnnouncer extends React.Component {\n constructor(props) {\n super(props)\n this.announcementRef = React.createRef()\n }\n\n componentDidUpdate(prevProps, nextProps) {\n requestAnimationFrame(() => {\n let pageName = `new page at ${this.props.location.pathname}`\n if (document.title) {\n pageName = document.title\n }\n const pageHeadings = document.querySelectorAll(`#gatsby-focus-wrapper h1`)\n if (pageHeadings && pageHeadings.length) {\n pageName = pageHeadings[0].textContent\n }\n const newAnnouncement = `Navigated to ${pageName}`\n if (this.announcementRef.current) {\n const oldAnnouncement = this.announcementRef.current.innerText\n if (oldAnnouncement !== newAnnouncement) {\n this.announcementRef.current.innerText = newAnnouncement\n }\n }\n })\n }\n\n render() {\n return
\n }\n}\n\nconst compareLocationProps = (prevLocation, nextLocation) => {\n if (prevLocation.href !== nextLocation.href) {\n return true\n }\n\n if (prevLocation?.state?.key !== nextLocation?.state?.key) {\n return true\n }\n\n return false\n}\n\n// Fire on(Pre)RouteUpdate APIs\nclass RouteUpdates extends React.Component {\n constructor(props) {\n super(props)\n onPreRouteUpdate(props.location, null)\n }\n\n componentDidMount() {\n onRouteUpdate(this.props.location, null)\n }\n\n shouldComponentUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onPreRouteUpdate(this.props.location, prevProps.location)\n return true\n }\n return false\n }\n\n componentDidUpdate(prevProps) {\n if (compareLocationProps(prevProps.location, this.props.location)) {\n onRouteUpdate(this.props.location, prevProps.location)\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n \n \n )\n }\n}\n\nRouteUpdates.propTypes = {\n location: PropTypes.object.isRequired,\n}\n\nexport { init, shouldUpdateScroll, RouteUpdates, maybeGetBrowserRedirect }\n","// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(a, b) {\n for (var i in a) {\n if (!(i in b)) return true;\n }for (var _i in b) {\n if (a[_i] !== b[_i]) return true;\n }return false;\n}\n\nexport default (function (instance, nextProps, nextState) {\n return shallowDiffers(instance.props, nextProps) || shallowDiffers(instance.state, nextState);\n});","import React from \"react\"\nimport loader, { PageResourceStatus } from \"./loader\"\nimport shallowCompare from \"shallow-compare\"\n\nclass EnsureResources extends React.Component {\n constructor(props) {\n super()\n const { location, pageResources } = props\n this.state = {\n location: { ...location },\n pageResources:\n pageResources ||\n loader.loadPageSync(location.pathname + location.search, {\n withErrorDetails: true,\n }),\n }\n }\n\n static getDerivedStateFromProps({ location }, prevState) {\n if (prevState.location.href !== location.href) {\n const pageResources = loader.loadPageSync(\n location.pathname + location.search,\n {\n withErrorDetails: true,\n }\n )\n\n return {\n pageResources,\n location: { ...location },\n }\n }\n\n return {\n location: { ...location },\n }\n }\n\n loadResources(rawPath) {\n loader.loadPage(rawPath).then(pageResources => {\n if (pageResources && pageResources.status !== PageResourceStatus.Error) {\n this.setState({\n location: { ...window.location },\n pageResources,\n })\n } else {\n window.history.replaceState({}, ``, location.href)\n window.location = rawPath\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n // Always return false if we're missing resources.\n if (!nextState.pageResources) {\n this.loadResources(\n nextProps.location.pathname + nextProps.location.search\n )\n return false\n }\n\n if (\n process.env.BUILD_STAGE === `develop` &&\n nextState.pageResources.stale\n ) {\n this.loadResources(\n nextProps.location.pathname + nextProps.location.search\n )\n return false\n }\n\n // Check if the component or json have changed.\n if (this.state.pageResources !== nextState.pageResources) {\n return true\n }\n if (\n this.state.pageResources.component !== nextState.pageResources.component\n ) {\n return true\n }\n\n if (this.state.pageResources.json !== nextState.pageResources.json) {\n return true\n }\n // Check if location has changed on a page using internal routing\n // via matchPath configuration.\n if (\n this.state.location.key !== nextState.location.key &&\n nextState.pageResources.page &&\n (nextState.pageResources.page.matchPath ||\n nextState.pageResources.page.path)\n ) {\n return true\n }\n return shallowCompare(this, nextProps, nextState)\n }\n\n render() {\n if (\n process.env.NODE_ENV !== `production` &&\n (!this.state.pageResources ||\n this.state.pageResources.status === PageResourceStatus.Error)\n ) {\n const message = `EnsureResources was not able to find resources for path: \"${this.props.location.pathname}\"\nThis typically means that an issue occurred building components for that path.\nRun \\`gatsby clean\\` to remove any cached elements.`\n if (this.state.pageResources?.error) {\n console.error(message)\n throw this.state.pageResources.error\n }\n\n throw new Error(message)\n }\n\n return this.props.children(this.state)\n }\n}\n\nexport default EnsureResources\n","import { apiRunner, apiRunnerAsync } from \"./api-runner-browser\"\nimport React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport { Router, navigate, Location, BaseContext } from \"@gatsbyjs/reach-router\"\nimport { ScrollContext } from \"gatsby-react-router-scroll\"\nimport { StaticQueryContext } from \"gatsby\"\nimport {\n shouldUpdateScroll,\n init as navigationInit,\n RouteUpdates,\n} from \"./navigation\"\nimport emitter from \"./emitter\"\nimport PageRenderer from \"./page-renderer\"\nimport asyncRequires from \"$virtual/async-requires\"\nimport {\n setLoader,\n ProdLoader,\n publicLoader,\n PageResourceStatus,\n getStaticQueryResults,\n} from \"./loader\"\nimport EnsureResources from \"./ensure-resources\"\nimport stripPrefix from \"./strip-prefix\"\n\n// Generated during bootstrap\nimport matchPaths from \"$virtual/match-paths.json\"\n\nconst loader = new ProdLoader(asyncRequires, matchPaths, window.pageData)\nsetLoader(loader)\nloader.setApiRunner(apiRunner)\n\nwindow.asyncRequires = asyncRequires\nwindow.___emitter = emitter\nwindow.___loader = publicLoader\n\nnavigationInit()\n\nconst reloadStorageKey = `gatsby-reload-compilation-hash-match`\n\napiRunnerAsync(`onClientEntry`).then(() => {\n // Let plugins register a service worker. The plugin just needs\n // to return true.\n if (apiRunner(`registerServiceWorker`).filter(Boolean).length > 0) {\n require(`./register-service-worker`)\n }\n\n // In gatsby v2 if Router is used in page using matchPaths\n // paths need to contain full path.\n // For example:\n // - page have `/app/*` matchPath\n // - inside template user needs to use `/app/xyz` as path\n // Resetting `basepath`/`baseuri` keeps current behaviour\n // to not introduce breaking change.\n // Remove this in v3\n const RouteHandler = props => (\n \n \n \n )\n\n const DataContext = React.createContext({})\n\n class GatsbyRoot extends React.Component {\n render() {\n const { children } = this.props\n return (\n \n {({ location }) => (\n \n {({ pageResources, location }) => {\n const staticQueryResults = getStaticQueryResults()\n return (\n \n \n {children}\n \n \n )\n }}\n \n )}\n \n )\n }\n }\n\n class LocationHandler extends React.Component {\n render() {\n return (\n \n {({ pageResources, location }) => (\n \n \n \n \n
\n \n \n )}\n \n )\n }\n }\n\n const { pagePath, location: browserLoc } = window\n\n // Explicitly call navigate if the canonical path (window.pagePath)\n // is different to the browser path (window.location.pathname). SSR\n // page paths might include search params, while SSG and DSG won't.\n // If page path include search params we also compare query params.\n // But only if NONE of the following conditions hold:\n //\n // - The url matches a client side route (page.matchPath)\n // - it's a 404 page\n // - it's the offline plugin shell (/offline-plugin-app-shell-fallback/)\n if (\n pagePath &&\n __BASE_PATH__ + pagePath !==\n browserLoc.pathname + (pagePath.includes(`?`) ? browserLoc.search : ``) &&\n !(\n loader.findMatchPath(stripPrefix(browserLoc.pathname, __BASE_PATH__)) ||\n pagePath.match(/^\\/(404|500)(\\/?|.html)$/) ||\n pagePath.match(/^\\/offline-plugin-app-shell-fallback\\/?$/)\n )\n ) {\n navigate(\n __BASE_PATH__ +\n pagePath +\n (!pagePath.includes(`?`) ? browserLoc.search : ``) +\n browserLoc.hash,\n {\n replace: true,\n }\n )\n }\n\n // It's possible that sessionStorage can throw an exception if access is not granted, see https://github.com/gatsbyjs/gatsby/issues/34512\n const getSessionStorage = () => {\n try {\n return sessionStorage\n } catch {\n return null\n }\n }\n\n publicLoader.loadPage(browserLoc.pathname + browserLoc.search).then(page => {\n const sessionStorage = getSessionStorage()\n\n if (\n page?.page?.webpackCompilationHash &&\n page.page.webpackCompilationHash !== window.___webpackCompilationHash\n ) {\n // Purge plugin-offline cache\n if (\n `serviceWorker` in navigator &&\n navigator.serviceWorker.controller !== null &&\n navigator.serviceWorker.controller.state === `activated`\n ) {\n navigator.serviceWorker.controller.postMessage({\n gatsbyApi: `clearPathResources`,\n })\n }\n\n // We have not matching html + js (inlined `window.___webpackCompilationHash`)\n // with our data (coming from `app-data.json` file). This can cause issues such as\n // errors trying to load static queries (as list of static queries is inside `page-data`\n // which might not match to currently loaded `.js` scripts).\n // We are making attempt to reload if hashes don't match, but we also have to handle case\n // when reload doesn't fix it (possibly broken deploy) so we don't end up in infinite reload loop\n if (sessionStorage) {\n const isReloaded = sessionStorage.getItem(reloadStorageKey) === `1`\n\n if (!isReloaded) {\n sessionStorage.setItem(reloadStorageKey, `1`)\n window.location.reload(true)\n return\n }\n }\n }\n\n if (sessionStorage) {\n sessionStorage.removeItem(reloadStorageKey)\n }\n\n if (!page || page.status === PageResourceStatus.Error) {\n const message = `page resources for ${browserLoc.pathname} not found. Not rendering React`\n\n // if the chunk throws an error we want to capture the real error\n // This should help with https://github.com/gatsbyjs/gatsby/issues/19618\n if (page && page.error) {\n console.error(message)\n throw page.error\n }\n\n throw new Error(message)\n }\n\n const SiteRoot = apiRunner(\n `wrapRootElement`,\n { element: },\n ,\n ({ result }) => {\n return { element: result }\n }\n ).pop()\n\n const App = function App() {\n const onClientEntryRanRef = React.useRef(false)\n\n React.useEffect(() => {\n if (!onClientEntryRanRef.current) {\n onClientEntryRanRef.current = true\n if (performance.mark) {\n performance.mark(`onInitialClientRender`)\n }\n\n apiRunner(`onInitialClientRender`)\n }\n }, [])\n\n return {SiteRoot}\n }\n\n const renderer = apiRunner(\n `replaceHydrateFunction`,\n undefined,\n ReactDOM.hydrateRoot ? ReactDOM.hydrateRoot : ReactDOM.hydrate\n )[0]\n\n function runRender() {\n const rootElement =\n typeof window !== `undefined`\n ? document.getElementById(`___gatsby`)\n : null\n\n if (renderer === ReactDOM.hydrateRoot) {\n renderer(rootElement, )\n } else {\n renderer(, rootElement)\n }\n }\n\n // https://github.com/madrobby/zepto/blob/b5ed8d607f67724788ec9ff492be297f64d47dfc/src/zepto.js#L439-L450\n // TODO remove IE 10 support\n const doc = document\n if (\n doc.readyState === `complete` ||\n (doc.readyState !== `loading` && !doc.documentElement.doScroll)\n ) {\n setTimeout(function () {\n runRender()\n }, 0)\n } else {\n const handler = function () {\n doc.removeEventListener(`DOMContentLoaded`, handler, false)\n window.removeEventListener(`load`, handler, false)\n\n runRender()\n }\n\n doc.addEventListener(`DOMContentLoaded`, handler, false)\n window.addEventListener(`load`, handler, false)\n }\n })\n})\n","import React from \"react\"\nimport PropTypes from \"prop-types\"\n\nimport loader from \"./loader\"\nimport InternalPageRenderer from \"./page-renderer\"\n\nconst ProdPageRenderer = ({ location }) => {\n const pageResources = loader.loadPageSync(location.pathname)\n if (!pageResources) {\n return null\n }\n return React.createElement(InternalPageRenderer, {\n location,\n pageResources,\n ...pageResources.json,\n })\n}\n\nProdPageRenderer.propTypes = {\n location: PropTypes.shape({\n pathname: PropTypes.string.isRequired,\n }).isRequired,\n}\n\nexport default ProdPageRenderer\n","const preferDefault = m => (m && m.default) || m\n\nif (process.env.BUILD_STAGE === `develop`) {\n module.exports = preferDefault(require(`./public-page-renderer-dev`))\n} else if (process.env.BUILD_STAGE === `build-javascript`) {\n module.exports = preferDefault(require(`./public-page-renderer-prod`))\n} else {\n module.exports = () => null\n}\n","exports.polyfill = Component => Component\n","import redirects from \"./redirects.json\"\n\n// Convert to a map for faster lookup in maybeRedirect()\n\nconst redirectMap = new Map()\nconst redirectIgnoreCaseMap = new Map()\n\nredirects.forEach(redirect => {\n if (redirect.ignoreCase) {\n redirectIgnoreCaseMap.set(redirect.fromPath, redirect)\n } else {\n redirectMap.set(redirect.fromPath, redirect)\n }\n})\n\nexport function maybeGetBrowserRedirect(pathname) {\n let redirect = redirectMap.get(pathname)\n if (!redirect) {\n redirect = redirectIgnoreCaseMap.get(pathname.toLowerCase())\n }\n return redirect\n}\n","import { apiRunner } from \"./api-runner-browser\"\n\nif (\n window.location.protocol !== `https:` &&\n window.location.hostname !== `localhost`\n) {\n console.error(\n `Service workers can only be used over HTTPS, or on localhost for development`\n )\n} else if (`serviceWorker` in navigator) {\n navigator.serviceWorker\n .register(`${__BASE_PATH__}/sw.js`)\n .then(function (reg) {\n reg.addEventListener(`updatefound`, () => {\n apiRunner(`onServiceWorkerUpdateFound`, { serviceWorker: reg })\n // The updatefound event implies that reg.installing is set; see\n // https://w3c.github.io/ServiceWorker/#service-worker-registration-updatefound-event\n const installingWorker = reg.installing\n console.log(`installingWorker`, installingWorker)\n installingWorker.addEventListener(`statechange`, () => {\n switch (installingWorker.state) {\n case `installed`:\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and the fresh content will\n // have been added to the cache.\n\n // We set a flag so Gatsby Link knows to refresh the page on next navigation attempt\n window.___swUpdated = true\n // We call the onServiceWorkerUpdateReady API so users can show update prompts.\n apiRunner(`onServiceWorkerUpdateReady`, { serviceWorker: reg })\n\n // If resources failed for the current page, reload.\n if (window.___failedResources) {\n console.log(`resources failed, SW updated - reloading`)\n window.location.reload()\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a \"Content is cached for offline use.\" message.\n console.log(`Content is now available offline!`)\n\n // Post to service worker that install is complete.\n // Delay to allow time for the event listener to be added --\n // otherwise fetch is called too soon and resources aren't cached.\n apiRunner(`onServiceWorkerInstalled`, { serviceWorker: reg })\n }\n break\n\n case `redundant`:\n console.error(`The installing service worker became redundant.`)\n apiRunner(`onServiceWorkerRedundant`, { serviceWorker: reg })\n break\n\n case `activated`:\n apiRunner(`onServiceWorkerActive`, { serviceWorker: reg })\n break\n }\n })\n })\n })\n .catch(function (e) {\n console.error(`Error during service worker registration:`, e)\n })\n}\n","/**\n * Remove a prefix from a string. Return the input string if the given prefix\n * isn't found.\n */\n\nexport default function stripPrefix(str, prefix = ``) {\n if (!prefix) {\n return str\n }\n\n if (str === prefix) {\n return `/`\n }\n\n if (str.startsWith(`${prefix}/`)) {\n return str.slice(prefix.length)\n }\n\n return str\n}\n","/* eslint-disable no-unused-expressions */\nimport { stripIndent } from \"common-tags\"\nimport camelCase from \"camelcase\"\nimport { IGatsbyImageData } from \".\"\n\nconst DEFAULT_PIXEL_DENSITIES = [0.25, 0.5, 1, 2]\nexport const DEFAULT_BREAKPOINTS = [750, 1080, 1366, 1920]\nexport const EVERY_BREAKPOINT = [\n 320, 654, 768, 1024, 1366, 1600, 1920, 2048, 2560, 3440, 3840, 4096,\n]\nconst DEFAULT_FLUID_WIDTH = 800\nconst DEFAULT_FIXED_WIDTH = 800\nconst DEFAULT_ASPECT_RATIO = 4 / 3\n\nexport type Fit = \"cover\" | \"fill\" | \"inside\" | \"outside\" | \"contain\"\n\nexport type Layout = \"fixed\" | \"fullWidth\" | \"constrained\"\nexport type ImageFormat = \"jpg\" | \"png\" | \"webp\" | \"avif\" | \"auto\" | \"\"\n\n/**\n * The minimal required reporter, as we don't want to import it from gatsby-cli\n */\nexport interface IReporter {\n warn(message: string): void\n}\n\nexport interface ISharpGatsbyImageArgs {\n layout?: Layout\n formats?: Array\n placeholder?: \"tracedSVG\" | \"dominantColor\" | \"blurred\" | \"none\"\n tracedSVGOptions?: Record\n width?: number\n height?: number\n aspectRatio?: number\n sizes?: string\n quality?: number\n transformOptions?: {\n fit?: Fit\n cropFocus?: number | string\n duotone?: {\n highlight: string\n shadow: string\n opacity?: number\n }\n grayscale?: boolean\n rotate?: number\n trim?: number\n }\n jpgOptions?: Record\n pngOptions?: Record\n webpOptions?: Record\n avifOptions?: Record\n blurredOptions?: { width?: number; toFormat?: ImageFormat }\n breakpoints?: Array\n backgroundColor?: string\n}\n\nexport interface IImageSizeArgs {\n width?: number\n height?: number\n layout?: Layout\n filename: string\n outputPixelDensities?: Array\n breakpoints?: Array\n fit?: Fit\n reporter?: IReporter\n sourceMetadata: { width: number; height: number }\n}\n\nexport interface IImageSizes {\n sizes: Array\n presentationWidth: number\n presentationHeight: number\n aspectRatio: number\n unscaledWidth: number\n}\n\nexport interface IImage {\n src: string\n width: number\n height: number\n format: ImageFormat\n}\n\nexport interface IGatsbyImageHelperArgs {\n pluginName: string\n generateImageSource: (\n filename: string,\n width: number,\n height: number,\n format: ImageFormat,\n fit?: Fit,\n options?: Record\n ) => IImage\n layout?: Layout\n formats?: Array\n filename: string\n placeholderURL?: string\n width?: number\n height?: number\n sizes?: string\n reporter?: IReporter\n sourceMetadata?: { width: number; height: number; format: ImageFormat }\n fit?: Fit\n options?: Record\n breakpoints?: Array\n backgroundColor?: string\n aspectRatio?: number\n}\n\nconst warn = (message: string): void => console.warn(message)\n\nconst sortNumeric = (a: number, b: number): number => a - b\n\nexport const getSizes = (width: number, layout: Layout): string | undefined => {\n switch (layout) {\n // If screen is wider than the max size, image width is the max size,\n // otherwise it's the width of the screen\n case `constrained`:\n return `(min-width: ${width}px) ${width}px, 100vw`\n\n // Image is always the same width, whatever the size of the screen\n case `fixed`:\n return `${width}px`\n\n // Image is always the width of the screen\n case `fullWidth`:\n return `100vw`\n\n default:\n return undefined\n }\n}\n\nexport const getSrcSet = (images: Array): string =>\n images.map(image => `${image.src} ${image.width}w`).join(`,\\n`)\n\nexport function formatFromFilename(filename: string): ImageFormat | undefined {\n const dot = filename.lastIndexOf(`.`)\n if (dot !== -1) {\n const ext = filename.substr(dot + 1)\n if (ext === `jpeg`) {\n return `jpg`\n }\n if (ext.length === 3 || ext.length === 4) {\n return ext as ImageFormat\n }\n }\n return undefined\n}\n\nexport function setDefaultDimensions(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageHelperArgs {\n let {\n layout = `constrained`,\n width,\n height,\n sourceMetadata,\n breakpoints,\n aspectRatio,\n formats = [`auto`, `webp`],\n } = args\n formats = formats.map(format => format.toLowerCase() as ImageFormat)\n layout = camelCase(layout) as Layout\n\n if (width && height) {\n return { ...args, formats, layout, aspectRatio: width / height }\n }\n if (sourceMetadata.width && sourceMetadata.height && !aspectRatio) {\n aspectRatio = sourceMetadata.width / sourceMetadata.height\n }\n\n if (layout === `fullWidth`) {\n width = width || sourceMetadata.width || breakpoints[breakpoints.length - 1]\n height = height || Math.round(width / (aspectRatio || DEFAULT_ASPECT_RATIO))\n } else {\n if (!width) {\n if (height && aspectRatio) {\n width = height * aspectRatio\n } else if (sourceMetadata.width) {\n width = sourceMetadata.width\n } else if (height) {\n width = Math.round(height / DEFAULT_ASPECT_RATIO)\n } else {\n width = DEFAULT_FIXED_WIDTH\n }\n }\n\n if (aspectRatio && !height) {\n height = Math.round(width / aspectRatio)\n } else if (!aspectRatio) {\n aspectRatio = width / height\n }\n }\n return { ...args, width, height, aspectRatio, layout, formats }\n}\n\n/**\n * Use this for getting an image for the blurred placeholder. This ensures the\n * aspect ratio and crop match the main image\n */\nexport function getLowResolutionImageURL(\n args: IGatsbyImageHelperArgs,\n width = 20\n): string {\n args = setDefaultDimensions(args)\n const { generateImageSource, filename, aspectRatio } = args\n return generateImageSource(\n filename,\n width,\n Math.round(width / aspectRatio),\n args.sourceMetadata.format || `jpg`,\n args.fit,\n args.options\n )?.src\n}\n\nexport function generateImageData(\n args: IGatsbyImageHelperArgs\n): IGatsbyImageData {\n args = setDefaultDimensions(args)\n\n let {\n pluginName,\n sourceMetadata,\n generateImageSource,\n layout,\n fit,\n options,\n width,\n height,\n filename,\n reporter = { warn },\n backgroundColor,\n placeholderURL,\n } = args\n\n if (!pluginName) {\n reporter.warn(\n `[gatsby-plugin-image] \"generateImageData\" was not passed a plugin name`\n )\n }\n\n if (typeof generateImageSource !== `function`) {\n throw new Error(`generateImageSource must be a function`)\n }\n\n if (!sourceMetadata || (!sourceMetadata.width && !sourceMetadata.height)) {\n // No metadata means we let the CDN handle max size etc, aspect ratio etc\n sourceMetadata = {\n width,\n height,\n format: sourceMetadata?.format || formatFromFilename(filename) || `auto`,\n }\n } else if (!sourceMetadata.format) {\n sourceMetadata.format = formatFromFilename(filename)\n }\n\n const formats = new Set(args.formats)\n\n if (formats.size === 0 || formats.has(`auto`) || formats.has(``)) {\n formats.delete(`auto`)\n formats.delete(``)\n formats.add(sourceMetadata.format)\n }\n\n if (formats.has(`jpg`) && formats.has(`png`)) {\n reporter.warn(\n `[${pluginName}] Specifying both 'jpg' and 'png' formats is not supported. Using 'auto' instead`\n )\n if (sourceMetadata.format === `jpg`) {\n formats.delete(`png`)\n } else {\n formats.delete(`jpg`)\n }\n }\n\n const imageSizes = calculateImageSizes({ ...args, sourceMetadata })\n\n const result: IGatsbyImageData[\"images\"] = {\n sources: [],\n }\n\n let sizes = args.sizes\n if (!sizes) {\n sizes = getSizes(imageSizes.presentationWidth, layout)\n }\n\n formats.forEach(format => {\n const images = imageSizes.sizes\n .map(size => {\n const imageSrc = generateImageSource(\n filename,\n size,\n Math.round(size / imageSizes.aspectRatio),\n format,\n fit,\n options\n )\n if (\n !imageSrc?.width ||\n !imageSrc.height ||\n !imageSrc.src ||\n !imageSrc.format\n ) {\n reporter.warn(\n `[${pluginName}] The resolver for image ${filename} returned an invalid value.`\n )\n return undefined\n }\n return imageSrc\n })\n .filter(Boolean)\n\n if (format === `jpg` || format === `png` || format === `auto`) {\n const unscaled =\n images.find(img => img.width === imageSizes.unscaledWidth) || images[0]\n\n if (unscaled) {\n result.fallback = {\n src: unscaled.src,\n srcSet: getSrcSet(images),\n sizes,\n }\n }\n } else {\n result.sources?.push({\n srcSet: getSrcSet(images),\n sizes,\n type: `image/${format}`,\n })\n }\n })\n\n const imageProps: Partial = {\n images: result,\n layout,\n backgroundColor,\n }\n\n if (placeholderURL) {\n imageProps.placeholder = { fallback: placeholderURL }\n }\n\n switch (layout) {\n case `fixed`:\n imageProps.width = imageSizes.presentationWidth\n imageProps.height = imageSizes.presentationHeight\n break\n\n case `fullWidth`:\n imageProps.width = 1\n imageProps.height = 1 / imageSizes.aspectRatio\n break\n\n case `constrained`:\n imageProps.width = args.width || imageSizes.presentationWidth || 1\n imageProps.height = (imageProps.width || 1) / imageSizes.aspectRatio\n }\n\n return imageProps as IGatsbyImageData\n}\n\nconst dedupeAndSortDensities = (values: Array): Array =>\n Array.from(new Set([1, ...values])).sort(sortNumeric)\n\nexport function calculateImageSizes(args: IImageSizeArgs): IImageSizes {\n const {\n width,\n height,\n filename,\n layout = `constrained`,\n sourceMetadata: imgDimensions,\n reporter = { warn },\n breakpoints = DEFAULT_BREAKPOINTS,\n } = args\n\n // check that all dimensions provided are positive\n const userDimensions = { width, height }\n const erroneousUserDimensions = Object.entries(userDimensions).filter(\n ([_, size]) => typeof size === `number` && size < 1\n )\n if (erroneousUserDimensions.length) {\n throw new Error(\n `Specified dimensions for images must be positive numbers (> 0). Problem dimensions you have are ${erroneousUserDimensions\n .map(dim => dim.join(`: `))\n .join(`, `)}`\n )\n }\n\n if (layout === `fixed`) {\n return fixedImageSizes(args)\n } else if (layout === `constrained`) {\n return responsiveImageSizes(args)\n } else if (layout === `fullWidth`) {\n return responsiveImageSizes({ breakpoints, ...args })\n } else {\n reporter.warn(\n `No valid layout was provided for the image at ${filename}. Valid image layouts are fixed, fullWidth, and constrained. Found ${layout}`\n )\n return {\n sizes: [imgDimensions.width],\n presentationWidth: imgDimensions.width,\n presentationHeight: imgDimensions.height,\n aspectRatio: imgDimensions.width / imgDimensions.height,\n unscaledWidth: imgDimensions.width,\n }\n }\n}\nexport function fixedImageSizes({\n filename,\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n reporter = { warn },\n}: IImageSizeArgs): IImageSizes {\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n if (!width) {\n if (!height) {\n width = DEFAULT_FIXED_WIDTH\n } else {\n width = Math.round(height * aspectRatio)\n }\n } else if (!height) {\n height = Math.round(width / aspectRatio)\n }\n\n const originalWidth = width // will use this for presentationWidth, don't want to lose it\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n\n // If the image is smaller than requested, warn the user that it's being processed as such\n // print out this message with the necessary information before we overwrite it for sizing\n if (isTopSizeOverriden) {\n const fixedDimension = imgDimensions.width < width ? `width` : `height`\n reporter.warn(stripIndent`\n The requested ${fixedDimension} \"${\n fixedDimension === `width` ? width : height\n }px\" for the image ${filename} was larger than the actual image ${fixedDimension} of ${\n imgDimensions[fixedDimension]\n }px. If possible, replace the current image with a larger one.`)\n\n if (fixedDimension === `width`) {\n width = imgDimensions.width\n height = Math.round(width / aspectRatio)\n } else {\n height = imgDimensions.height\n width = height * aspectRatio\n }\n }\n\n const sizes = densities\n .filter(size => size >= 1) // remove smaller densities because fixed images don't need them\n .map(density => Math.round(density * (width as number)))\n .filter(size => size <= imgDimensions.width)\n\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function responsiveImageSizes({\n sourceMetadata: imgDimensions,\n width,\n height,\n fit = `cover`,\n outputPixelDensities = DEFAULT_PIXEL_DENSITIES,\n breakpoints,\n layout,\n}: IImageSizeArgs): IImageSizes {\n let sizes\n let aspectRatio = imgDimensions.width / imgDimensions.height\n // Sort, dedupe and ensure there's a 1\n const densities = dedupeAndSortDensities(outputPixelDensities)\n\n // If both are provided then we need to check the fit\n if (width && height) {\n const calculated = getDimensionsAndAspectRatio(imgDimensions, {\n width,\n height,\n fit,\n })\n width = calculated.width\n height = calculated.height\n aspectRatio = calculated.aspectRatio\n }\n\n // Case 1: width of height were passed in, make sure it isn't larger than the actual image\n width = width && Math.min(width, imgDimensions.width)\n height = height && Math.min(height, imgDimensions.height)\n\n // Case 2: neither width or height were passed in, use default size\n if (!width && !height) {\n width = Math.min(DEFAULT_FLUID_WIDTH, imgDimensions.width)\n height = width / aspectRatio\n }\n\n // if it still hasn't been found, calculate width from the derived height.\n // TS isn't smart enough to realise the type for height has been narrowed here\n if (!width) {\n width = (height as number) * aspectRatio\n }\n\n const originalWidth = width\n const isTopSizeOverriden =\n imgDimensions.width < width || imgDimensions.height < (height as number)\n if (isTopSizeOverriden) {\n width = imgDimensions.width\n height = imgDimensions.height\n }\n\n width = Math.round(width)\n\n if (breakpoints?.length > 0) {\n sizes = breakpoints.filter(size => size <= imgDimensions.width)\n\n // If a larger breakpoint has been filtered-out, add the actual image width instead\n if (\n sizes.length < breakpoints.length &&\n !sizes.includes(imgDimensions.width)\n ) {\n sizes.push(imgDimensions.width)\n }\n } else {\n sizes = densities.map(density => Math.round(density * (width as number)))\n sizes = sizes.filter(size => size <= imgDimensions.width)\n }\n\n // ensure that the size passed in is included in the final output\n if (layout === `constrained` && !sizes.includes(width)) {\n sizes.push(width)\n }\n sizes = sizes.sort(sortNumeric)\n return {\n sizes,\n aspectRatio,\n presentationWidth: originalWidth,\n presentationHeight: Math.round(originalWidth / aspectRatio),\n unscaledWidth: width,\n }\n}\n\nexport function getDimensionsAndAspectRatio(\n dimensions,\n options\n): { width: number; height: number; aspectRatio: number } {\n // Calculate the eventual width/height of the image.\n const imageAspectRatio = dimensions.width / dimensions.height\n\n let width = options.width\n let height = options.height\n\n switch (options.fit) {\n case `fill`: {\n width = options.width ? options.width : dimensions.width\n height = options.height ? options.height : dimensions.height\n break\n }\n case `inside`: {\n const widthOption = options.width\n ? options.width\n : Number.MAX_SAFE_INTEGER\n const heightOption = options.height\n ? options.height\n : Number.MAX_SAFE_INTEGER\n\n width = Math.min(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.min(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n case `outside`: {\n const widthOption = options.width ? options.width : 0\n const heightOption = options.height ? options.height : 0\n\n width = Math.max(widthOption, Math.round(heightOption * imageAspectRatio))\n height = Math.max(\n heightOption,\n Math.round(widthOption / imageAspectRatio)\n )\n break\n }\n\n default: {\n if (options.width && !options.height) {\n width = options.width\n height = Math.round(options.width / imageAspectRatio)\n }\n\n if (options.height && !options.width) {\n width = Math.round(options.height * imageAspectRatio)\n height = options.height\n }\n }\n }\n\n return {\n width,\n height,\n aspectRatio: width / height,\n }\n}\n","/* eslint-disable no-unused-expressions */\nimport {\n useState,\n CSSProperties,\n useEffect,\n HTMLAttributes,\n ImgHTMLAttributes,\n ReactEventHandler,\n SetStateAction,\n Dispatch,\n RefObject,\n} from \"react\"\nimport { Node } from \"gatsby\"\nimport { PlaceholderProps } from \"./placeholder\"\nimport { MainImageProps } from \"./main-image\"\nimport type { IGatsbyImageData } from \"./gatsby-image.browser\"\nimport {\n IGatsbyImageHelperArgs,\n generateImageData,\n Layout,\n EVERY_BREAKPOINT,\n IImage,\n ImageFormat,\n} from \"../image-utils\"\nconst imageCache = new Set()\n\n// Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\nexport const hasNativeLazyLoadSupport = (): boolean =>\n typeof HTMLImageElement !== `undefined` &&\n `loading` in HTMLImageElement.prototype\n\nexport function gatsbyImageIsInstalled(): boolean {\n return typeof GATSBY___IMAGE !== `undefined` && GATSBY___IMAGE\n}\n\nexport function storeImageloaded(cacheKey?: string): void {\n if (cacheKey) {\n imageCache.add(cacheKey)\n }\n}\n\nexport function hasImageLoaded(cacheKey: string): boolean {\n return imageCache.has(cacheKey)\n}\nexport type IGatsbyImageDataParent = T & {\n gatsbyImageData: IGatsbyImageData\n}\nexport type FileNode = Node & {\n childImageSharp?: IGatsbyImageDataParent\n}\n\nconst isGatsbyImageData = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageData | any\n): node is IGatsbyImageData =>\n // 🦆 check for a deep prop to be sure this is a valid gatsbyImageData object\n Boolean(node?.images?.fallback?.src)\n\nconst isGatsbyImageDataParent = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node: IGatsbyImageDataParent | any\n): node is IGatsbyImageDataParent => Boolean(node?.gatsbyImageData)\n\nexport type ImageDataLike = FileNode | IGatsbyImageDataParent | IGatsbyImageData\nexport const getImage = (node: ImageDataLike): IGatsbyImageData | undefined => {\n if (isGatsbyImageData(node)) {\n return node\n }\n if (isGatsbyImageDataParent(node)) {\n return node.gatsbyImageData\n }\n return node?.childImageSharp?.gatsbyImageData\n}\n\nexport const getSrc = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.src\n\nexport const getSrcSet = (node: ImageDataLike): string | undefined =>\n getImage(node)?.images?.fallback?.srcSet\n\nexport function getWrapperProps(\n width: number,\n height: number,\n layout: Layout\n): Pick, \"className\" | \"style\"> & {\n \"data-gatsby-image-wrapper\": string\n} {\n const wrapperStyle: CSSProperties = {}\n\n let className = `gatsby-image-wrapper`\n\n // If the plugin isn't installed we need to apply the styles inline\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.position = `relative`\n wrapperStyle.overflow = `hidden`\n }\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n } else if (layout === `constrained`) {\n if (!gatsbyImageIsInstalled()) {\n wrapperStyle.display = `inline-block`\n wrapperStyle.verticalAlign = `top`\n }\n className = `gatsby-image-wrapper gatsby-image-wrapper-constrained`\n }\n\n return {\n className,\n \"data-gatsby-image-wrapper\": ``,\n style: wrapperStyle,\n }\n}\n\nexport async function applyPolyfill(\n ref: RefObject\n): Promise {\n if (!(`objectFitPolyfill` in window)) {\n await import(\n // @ts-ignore typescript can't find the module for some reason ¯\\_(ツ)_/¯\n /* webpackChunkName: \"gatsby-plugin-image-objectfit-polyfill\" */ `objectFitPolyfill`\n )\n }\n ;(window as any).objectFitPolyfill(ref.current)\n}\n\nexport interface IUrlBuilderArgs {\n width: number\n height: number\n baseUrl: string\n format: ImageFormat\n options: OptionsType\n}\nexport interface IGetImageDataArgs> {\n baseUrl: string\n /**\n * For constrained and fixed images, the size of the image element\n */\n width?: number\n height?: number\n /**\n * If available, pass the source image width and height\n */\n sourceWidth?: number\n sourceHeight?: number\n /**\n * If only one dimension is passed, then this will be used to calculate the other.\n */\n aspectRatio?: number\n layout?: Layout\n /**\n * Returns a URL based on the passed arguments. Should be a pure function\n */\n urlBuilder: (args: IUrlBuilderArgs) => string\n\n /**\n * Should be a data URI\n */\n placeholderURL?: string\n backgroundColor?: string\n /**\n * Used in error messages etc\n */\n pluginName?: string\n\n /**\n * If you do not support auto-format, pass an array of image types here\n */\n formats?: Array\n\n breakpoints?: Array\n\n /**\n * Passed to the urlBuilder function\n */\n options?: OptionsType\n}\n\n/**\n * Use this hook to generate gatsby-plugin-image data in the browser.\n */\nexport function getImageData({\n baseUrl,\n urlBuilder,\n sourceWidth,\n sourceHeight,\n pluginName = `getImageData`,\n formats = [`auto`],\n breakpoints,\n options,\n ...props\n}: IGetImageDataArgs): IGatsbyImageData {\n if (\n !breakpoints?.length &&\n (props.layout === `fullWidth` || (props.layout as string) === `FULL_WIDTH`)\n ) {\n breakpoints = EVERY_BREAKPOINT\n }\n const generateImageSource = (\n baseUrl: string,\n width: number,\n height?: number,\n format?: ImageFormat\n ): IImage => {\n return {\n width,\n height,\n format,\n src: urlBuilder({ baseUrl, width, height, options, format }),\n }\n }\n\n const sourceMetadata: IGatsbyImageHelperArgs[\"sourceMetadata\"] = {\n width: sourceWidth,\n height: sourceHeight,\n format: `auto`,\n }\n\n const args: IGatsbyImageHelperArgs = {\n ...props,\n pluginName,\n generateImageSource,\n filename: baseUrl,\n formats,\n breakpoints,\n sourceMetadata,\n }\n return generateImageData(args)\n}\n\nexport function getMainProps(\n isLoading: boolean,\n isLoaded: boolean,\n images: IGatsbyImageData[\"images\"],\n loading?: \"eager\" | \"lazy\",\n toggleLoaded?: (loaded: boolean) => void,\n cacheKey?: string,\n ref?: RefObject,\n style: CSSProperties = {}\n): Partial {\n const onLoad: ReactEventHandler = function (e) {\n if (isLoaded) {\n return\n }\n\n storeImageloaded(cacheKey)\n\n const target = e.currentTarget\n const img = new Image()\n img.src = target.currentSrc\n\n if (img.decode) {\n // Decode the image through javascript to support our transition\n img\n .decode()\n .catch(() => {\n // ignore error, we just go forward\n })\n .then(() => {\n toggleLoaded(true)\n })\n } else {\n toggleLoaded(true)\n }\n }\n\n // Polyfill \"object-fit\" if unsupported (mostly IE)\n if (ref?.current && !(`objectFit` in document.documentElement.style)) {\n ref.current.dataset.objectFit = style.objectFit ?? `cover`\n ref.current.dataset.objectPosition = `${style.objectPosition ?? `50% 50%`}`\n applyPolyfill(ref)\n }\n\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n transform: `translateZ(0)`,\n transition: `opacity 250ms linear`,\n width: `100%`,\n willChange: `opacity`,\n ...style,\n }\n }\n\n const result = {\n ...images,\n loading,\n shouldLoad: isLoading,\n \"data-main-image\": ``,\n style: {\n ...style,\n opacity: isLoaded ? 1 : 0,\n },\n onLoad,\n ref,\n }\n\n return result\n}\n\nexport type PlaceholderImageAttrs = ImgHTMLAttributes &\n Pick & {\n \"data-placeholder-image\"?: string\n }\n\nexport function getPlaceholderProps(\n placeholder: PlaceholderImageAttrs | undefined,\n isLoaded: boolean,\n layout: Layout,\n width?: number,\n height?: number,\n backgroundColor?: string,\n objectFit?: CSSProperties[\"objectFit\"],\n objectPosition?: CSSProperties[\"objectPosition\"]\n): PlaceholderImageAttrs {\n const wrapperStyle: CSSProperties = {}\n\n if (backgroundColor) {\n wrapperStyle.backgroundColor = backgroundColor\n\n if (layout === `fixed`) {\n wrapperStyle.width = width\n wrapperStyle.height = height\n wrapperStyle.backgroundColor = backgroundColor\n wrapperStyle.position = `relative`\n } else if (layout === `constrained`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n } else if (layout === `fullWidth`) {\n wrapperStyle.position = `absolute`\n wrapperStyle.top = 0\n wrapperStyle.left = 0\n wrapperStyle.bottom = 0\n wrapperStyle.right = 0\n }\n }\n\n if (objectFit) {\n wrapperStyle.objectFit = objectFit\n }\n\n if (objectPosition) {\n wrapperStyle.objectPosition = objectPosition\n }\n const result: PlaceholderImageAttrs = {\n ...placeholder,\n \"aria-hidden\": true,\n \"data-placeholder-image\": ``,\n style: {\n opacity: isLoaded ? 0 : 1,\n transition: `opacity 500ms linear`,\n ...wrapperStyle,\n },\n }\n\n // fallback when it's not configured in gatsby-config.\n if (!gatsbyImageIsInstalled()) {\n result.style = {\n height: `100%`,\n left: 0,\n position: `absolute`,\n top: 0,\n width: `100%`,\n }\n }\n\n return result\n}\n\nexport function useImageLoaded(\n cacheKey: string,\n loading: \"lazy\" | \"eager\",\n ref: any\n): {\n isLoaded: boolean\n isLoading: boolean\n toggleLoaded: Dispatch>\n} {\n const [isLoaded, toggleLoaded] = useState(false)\n const [isLoading, toggleIsLoading] = useState(loading === `eager`)\n\n const rAF =\n typeof window !== `undefined` && `requestAnimationFrame` in window\n ? requestAnimationFrame\n : function (cb: TimerHandler): number {\n return setTimeout(cb, 16)\n }\n const cRAF =\n typeof window !== `undefined` && `cancelAnimationFrame` in window\n ? cancelAnimationFrame\n : clearTimeout\n\n useEffect(() => {\n let interval: number\n // @see https://stackoverflow.com/questions/44074747/componentdidmount-called-before-ref-callback/50019873#50019873\n function toggleIfRefExists(): void {\n if (ref.current) {\n if (loading === `eager` && ref.current.complete) {\n storeImageloaded(cacheKey)\n toggleLoaded(true)\n } else {\n toggleIsLoading(true)\n }\n } else {\n interval = rAF(toggleIfRefExists)\n }\n }\n toggleIfRefExists()\n\n return (): void => {\n cRAF(interval)\n }\n }, [])\n\n return {\n isLoading,\n isLoaded,\n toggleLoaded,\n }\n}\n\nexport interface IArtDirectedImage {\n media: string\n image: IGatsbyImageData\n}\n\n/**\n * Generate a Gatsby image data object with multiple, art-directed images that display at different\n * resolutions.\n *\n * @param defaultImage The image displayed when no media query matches.\n * It is also used for all other settings applied to the image, such as width, height and layout.\n * You should pass a className to the component with media queries to adjust the size of the container,\n * as this cannot be adjusted automatically.\n * @param artDirected Array of objects which each contains a `media` string which is a media query\n * such as `(min-width: 320px)`, and the image object to use when that query matches.\n */\nexport function withArtDirection(\n defaultImage: IGatsbyImageData,\n artDirected: Array\n): IGatsbyImageData {\n const { images, placeholder, ...props } = defaultImage\n const output: IGatsbyImageData = {\n ...props,\n images: {\n ...images,\n sources: [],\n },\n placeholder: placeholder && {\n ...placeholder,\n sources: [],\n },\n }\n\n artDirected.forEach(({ media, image }) => {\n if (!media) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(\n \"[gatsby-plugin-image] All art-directed images passed to must have a value set for `media`. Skipping.\"\n )\n }\n return\n }\n\n if (\n image.layout !== defaultImage.layout &&\n process.env.NODE_ENV === `development`\n ) {\n console.warn(\n `[gatsby-plugin-image] Mismatched image layout: expected \"${defaultImage.layout}\" but received \"${image.layout}\". All art-directed images use the same layout as the default image`\n )\n }\n\n output.images.sources.push(\n ...image.images.sources.map(source => {\n return { ...source, media }\n }),\n {\n media,\n srcSet: image.images.fallback.srcSet,\n }\n )\n\n if (!output.placeholder) {\n return\n }\n\n output.placeholder.sources.push({\n media,\n srcSet: image.placeholder.fallback,\n })\n })\n output.images.sources.push(...images.sources)\n if (placeholder?.sources) {\n output.placeholder?.sources.push(...placeholder.sources)\n }\n return output\n}\n","// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// \n\nimport React, { Fragment, FunctionComponent } from \"react\"\nimport terserMacro from \"../../macros/terser.macro\"\nimport { Layout } from \"../image-utils\"\n\nexport interface ILayoutWrapperProps {\n layout: Layout\n width: number\n height: number\n}\n\nconst NativeScriptLoading: FunctionComponent = () => (\n \n)\n\nexport function getSizer(\n layout: Layout,\n width: number,\n height: number\n): string {\n let sizer: string | null = null\n if (layout === `fullWidth`) {\n sizer = `
`\n }\n if (layout === `constrained`) {\n sizer = `
\"\"
`\n }\n return sizer\n}\n\nconst Sizer: FunctionComponent = function Sizer({\n layout,\n width,\n height,\n}) {\n if (layout === `fullWidth`) {\n return (\n
\n )\n }\n if (layout === `constrained`) {\n return (\n
\n \n
\n )\n }\n\n return null\n}\n\nexport const LayoutWrapper: FunctionComponent =\n function LayoutWrapper({ children, ...props }) {\n return (\n \n \n {children}\n\n {\n // eslint-disable-next-line no-undef\n SERVER && \n }\n \n )\n }\n","/* eslint-disable filenames/match-regex */\nimport React, {\n FunctionComponent,\n ImgHTMLAttributes,\n forwardRef,\n LegacyRef,\n} from \"react\"\nimport * as PropTypes from \"prop-types\"\n\nexport interface IResponsiveImageProps {\n sizes?: string\n srcSet: string\n}\n\nexport type SourceProps = IResponsiveImageProps &\n (\n | {\n media: string\n type?: string\n }\n | {\n media?: string\n type: string\n }\n )\n\ntype FallbackProps = { src: string } & Partial\n\ntype ImageProps = ImgHTMLAttributes & {\n src: string\n alt: string\n shouldLoad: boolean\n innerRef: LegacyRef\n}\n\nexport type PictureProps = ImgHTMLAttributes & {\n fallback?: FallbackProps\n sources?: Array\n alt: string\n shouldLoad?: boolean\n}\n\nconst Image: FunctionComponent = function Image({\n src,\n srcSet,\n loading,\n alt = ``,\n shouldLoad,\n innerRef,\n ...props\n}) {\n return (\n \n )\n}\n\nexport const Picture = forwardRef(\n function Picture(\n { fallback, sources = [], shouldLoad = true, ...props },\n ref\n ) {\n const sizes = props.sizes || fallback?.sizes\n const fallbackImage = (\n \n )\n\n if (!sources.length) {\n return fallbackImage\n }\n\n return (\n \n {sources.map(({ media, srcSet, type }) => (\n \n ))}\n {fallbackImage}\n \n )\n }\n)\n\nImage.propTypes = {\n src: PropTypes.string.isRequired,\n alt: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string,\n shouldLoad: PropTypes.bool,\n}\n\nPicture.displayName = `Picture`\nPicture.propTypes = {\n alt: PropTypes.string.isRequired,\n shouldLoad: PropTypes.bool,\n fallback: PropTypes.exact({\n src: PropTypes.string.isRequired,\n srcSet: PropTypes.string,\n sizes: PropTypes.string,\n }),\n sources: PropTypes.arrayOf(\n PropTypes.oneOfType([\n PropTypes.exact({\n media: PropTypes.string.isRequired,\n type: PropTypes.string,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n PropTypes.exact({\n media: PropTypes.string,\n type: PropTypes.string.isRequired,\n sizes: PropTypes.string,\n srcSet: PropTypes.string.isRequired,\n }),\n ])\n ),\n}\n","import React, { FunctionComponent, ImgHTMLAttributes } from \"react\"\nimport * as PropTypes from \"prop-types\"\nimport { Picture, SourceProps } from \"./picture\"\n\nexport type PlaceholderProps = ImgHTMLAttributes & {\n fallback?: string\n sources?: Array\n}\n\nexport const Placeholder: FunctionComponent =\n function Placeholder({ fallback, ...props }) {\n if (fallback) {\n return (\n \n )\n } else {\n return
\n }\n }\n\nPlaceholder.displayName = `Placeholder`\nPlaceholder.propTypes = {\n fallback: PropTypes.string,\n sources: Picture.propTypes?.sources,\n alt: function (props, propName, componentName): Error | null {\n if (!props[propName]) {\n return null\n }\n return new Error(\n `Invalid prop \\`${propName}\\` supplied to \\`${componentName}\\`. Validation failed.`\n )\n },\n}\n","import React, { forwardRef } from \"react\"\nimport { Picture, PictureProps } from \"./picture\"\n\nexport type MainImageProps = PictureProps\n\nexport const MainImage = forwardRef(\n function MainImage(props, ref) {\n return (\n <>\n \n \n \n )\n }\n)\n\nMainImage.displayName = `MainImage`\nMainImage.propTypes = Picture.propTypes\n","import React, {\n ElementType,\n FunctionComponent,\n CSSProperties,\n WeakValidationMap,\n} from \"react\"\nimport { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\nimport { getWrapperProps, getMainProps, getPlaceholderProps } from \"./hooks\"\nimport { Placeholder } from \"./placeholder\"\nimport { MainImage, MainImageProps } from \"./main-image\"\nimport { LayoutWrapper } from \"./layout-wrapper\"\nimport PropTypes from \"prop-types\"\n\nconst removeNewLines = (str: string): string => str.replace(/\\n/g, ``)\n\nexport const GatsbyImageHydrator: FunctionComponent<{\n as?: ElementType\n style?: CSSProperties\n className?: string\n}> = function GatsbyImageHydrator({ as: Type = `div`, children, ...props }) {\n return {children}\n}\n\nexport const GatsbyImage: FunctionComponent =\n function GatsbyImage({\n as,\n className,\n class: preactClass,\n style,\n image,\n loading = `lazy`,\n imgClassName,\n imgStyle,\n backgroundColor,\n objectFit,\n objectPosition,\n ...props\n }) {\n if (!image) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n return null\n }\n if (preactClass) {\n className = preactClass\n }\n imgStyle = {\n objectFit,\n objectPosition,\n backgroundColor,\n ...imgStyle,\n }\n\n const {\n width,\n height,\n layout,\n images,\n placeholder,\n backgroundColor: placeholderBackgroundColor,\n } = image\n\n const {\n style: wStyle,\n className: wClass,\n ...wrapperProps\n } = getWrapperProps(width, height, layout)\n\n const cleanedImages: IGatsbyImageData[\"images\"] = {\n fallback: undefined,\n sources: [],\n }\n if (images.fallback) {\n cleanedImages.fallback = {\n ...images.fallback,\n srcSet: images.fallback.srcSet\n ? removeNewLines(images.fallback.srcSet)\n : undefined,\n }\n }\n\n if (images.sources) {\n cleanedImages.sources = images.sources.map(source => {\n return {\n ...source,\n srcSet: removeNewLines(source.srcSet),\n }\n })\n }\n\n return (\n \n \n \n\n )}\n // When eager is set we want to start the isLoading state on true (we want to load the img without react)\n {...getMainProps(\n loading === `eager`,\n false,\n cleanedImages,\n loading,\n undefined,\n undefined,\n undefined,\n imgStyle\n )}\n />\n \n \n )\n }\n\nexport const altValidator: PropTypes.Validator = (\n props: GatsbyImageProps,\n propName,\n componentName,\n ...rest\n): Error | undefined => {\n if (!props.alt && props.alt !== ``) {\n return new Error(\n `The \"alt\" prop is required in ${componentName}. If the image is purely presentational then pass an empty string: e.g. alt=\"\". Learn more: https://a11y-style-guide.com/style-guide/section-media.html`\n )\n }\n return PropTypes.string(props, propName, componentName, ...rest)\n}\nexport const propTypes = {\n image: PropTypes.object.isRequired,\n alt: altValidator,\n} as WeakValidationMap\n","/* eslint-disable no-unused-expressions */\nimport React, {\n Component,\n ElementType,\n createRef,\n MutableRefObject,\n FunctionComponent,\n ImgHTMLAttributes,\n RefObject,\n CSSProperties,\n} from \"react\"\nimport {\n getWrapperProps,\n hasNativeLazyLoadSupport,\n storeImageloaded,\n hasImageLoaded,\n gatsbyImageIsInstalled,\n} from \"./hooks\"\nimport { PlaceholderProps } from \"./placeholder\"\nimport { MainImageProps } from \"./main-image\"\nimport { Layout } from \"../image-utils\"\nimport { getSizer } from \"./layout-wrapper\"\nimport { propTypes } from \"./gatsby-image.server\"\nimport { Unobserver } from \"./intersection-observer\"\nimport { render } from \"react-dom\"\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface GatsbyImageProps\n extends Omit<\n ImgHTMLAttributes,\n \"placeholder\" | \"onLoad\" | \"src\" | \"srcSet\" | \"width\" | \"height\"\n > {\n alt: string\n as?: ElementType\n className?: string\n class?: string\n imgClassName?: string\n image: IGatsbyImageData\n imgStyle?: CSSProperties\n backgroundColor?: string\n objectFit?: CSSProperties[\"objectFit\"]\n objectPosition?: CSSProperties[\"objectPosition\"]\n onLoad?: () => void\n onError?: () => void\n onStartLoad?: (props: { wasCached?: boolean }) => void\n}\n\nexport interface IGatsbyImageData {\n layout: Layout\n width: number\n height: number\n backgroundColor?: string\n images: Pick\n placeholder?: Pick\n}\n\nclass GatsbyImageHydrator extends Component<\n GatsbyImageProps,\n { isLoading: boolean; isLoaded: boolean }\n> {\n root: RefObject = createRef<\n HTMLImageElement | undefined\n >()\n hydrated: MutableRefObject = { current: false }\n forceRender: MutableRefObject = {\n // In dev we use render not hydrate, to avoid hydration warnings\n current: process.env.NODE_ENV === `development`,\n }\n lazyHydrator: () => void | null = null\n ref = createRef()\n unobserveRef: Unobserver\n\n constructor(props) {\n super(props)\n\n this.state = {\n isLoading: hasNativeLazyLoadSupport(),\n isLoaded: false,\n }\n }\n\n _lazyHydrate(props, state): Promise {\n const hasSSRHtml = this.root.current.querySelector(\n `[data-gatsby-image-ssr]`\n )\n // On first server hydration do nothing\n if (hasNativeLazyLoadSupport() && hasSSRHtml && !this.hydrated.current) {\n this.hydrated.current = true\n return Promise.resolve()\n }\n\n return import(`./lazy-hydrate`).then(({ lazyHydrate }) => {\n const cacheKey = JSON.stringify(this.props.image.images)\n this.lazyHydrator = lazyHydrate(\n {\n image: props.image.images,\n isLoading: state.isLoading || hasImageLoaded(cacheKey),\n isLoaded: state.isLoaded || hasImageLoaded(cacheKey),\n toggleIsLoaded: () => {\n props.onLoad?.()\n\n this.setState({\n isLoaded: true,\n })\n },\n ref: this.ref,\n ...props,\n },\n this.root,\n this.hydrated,\n this.forceRender\n )\n })\n }\n\n /**\n * Choose if setupIntersectionObserver should use the image cache or not.\n */\n _setupIntersectionObserver(useCache = true): void {\n import(`./intersection-observer`).then(({ createIntersectionObserver }) => {\n const intersectionObserver = createIntersectionObserver(() => {\n if (this.root.current) {\n const cacheKey = JSON.stringify(this.props.image.images)\n this.props.onStartLoad?.({\n wasCached: useCache && hasImageLoaded(cacheKey),\n })\n this.setState({\n isLoading: true,\n isLoaded: useCache && hasImageLoaded(cacheKey),\n })\n }\n })\n\n if (this.root.current) {\n this.unobserveRef = intersectionObserver(this.root)\n }\n })\n }\n\n shouldComponentUpdate(nextProps, nextState): boolean {\n let hasChanged = false\n if (!this.state.isLoading && nextState.isLoading && !nextState.isLoaded) {\n // Props have changed between SSR and hydration, so we need to force render instead of hydrate\n this.forceRender.current = true\n }\n // this check mostly means people do not have the correct ref checks in place, we want to reset some state to suppport loading effects\n if (this.props.image.images !== nextProps.image.images) {\n // reset state, we'll rely on intersection observer to reload\n if (this.unobserveRef) {\n // unregister intersectionObserver\n this.unobserveRef()\n\n // // on unmount, make sure we cleanup\n if (this.hydrated.current && this.lazyHydrator) {\n render(null, this.root.current)\n }\n }\n\n this.setState(\n {\n isLoading: false,\n isLoaded: false,\n },\n () => {\n this._setupIntersectionObserver(false)\n }\n )\n\n hasChanged = true\n }\n\n if (this.root.current && !hasChanged) {\n this._lazyHydrate(nextProps, nextState)\n }\n\n return false\n }\n\n componentDidMount(): void {\n if (this.root.current) {\n const ssrElement = this.root.current.querySelector(\n `[data-gatsby-image-ssr]`\n ) as HTMLImageElement\n const cacheKey = JSON.stringify(this.props.image.images)\n\n // when SSR and native lazyload is supported we'll do nothing ;)\n if (\n hasNativeLazyLoadSupport() &&\n ssrElement &&\n gatsbyImageIsInstalled()\n ) {\n this.props.onStartLoad?.({ wasCached: false })\n\n // When the image is already loaded before we have hydrated, we trigger onLoad and cache the item\n if (ssrElement.complete) {\n this.props.onLoad?.()\n storeImageloaded(cacheKey)\n } else {\n // We need the current class context (this) inside our named onLoad function\n // The named function is necessary to easily remove the listener afterward.\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const _this = this\n // add an onLoad to the image\n ssrElement.addEventListener(`load`, function onLoad() {\n ssrElement.removeEventListener(`load`, onLoad)\n\n _this.props.onLoad?.()\n storeImageloaded(cacheKey)\n })\n }\n\n return\n }\n\n // Fallback to custom lazy loading (intersection observer)\n this._setupIntersectionObserver(true)\n }\n }\n\n componentWillUnmount(): void {\n // Cleanup when onmount happens\n if (this.unobserveRef) {\n // unregister intersectionObserver\n this.unobserveRef()\n\n // on unmount, make sure we cleanup\n if (this.hydrated.current && this.lazyHydrator) {\n this.lazyHydrator()\n }\n }\n\n return\n }\n\n render(): JSX.Element {\n const Type = this.props.as || `div`\n const { width, height, layout } = this.props.image\n const {\n style: wStyle,\n className: wClass,\n ...wrapperProps\n } = getWrapperProps(width, height, layout)\n\n let className = this.props.className\n // preact class\n if (this.props.class) {\n className = this.props.class\n }\n\n const sizer = getSizer(layout, width, height)\n\n return (\n \n )\n }\n}\n\nexport const GatsbyImage: FunctionComponent =\n function GatsbyImage(props) {\n if (!props.image) {\n if (process.env.NODE_ENV === `development`) {\n console.warn(`[gatsby-plugin-image] Missing image prop`)\n }\n return null\n }\n\n if (!gatsbyImageIsInstalled() && process.env.NODE_ENV === `development`) {\n console.warn(\n `[gatsby-plugin-image] You're missing out on some cool performance features. Please add \"gatsby-plugin-image\" to your gatsby-config.js`\n )\n }\n const { className, class: classSafe, backgroundColor, image } = props\n const { width, height, layout } = image\n const propsKey = JSON.stringify([\n width,\n height,\n layout,\n className,\n classSafe,\n backgroundColor,\n ])\n return \n }\n\nGatsbyImage.propTypes = propTypes\n\nGatsbyImage.displayName = `GatsbyImage`\n","import React, { FunctionComponent, ReactElement } from \"react\"\nimport {\n altValidator,\n GatsbyImage as GatsbyImageServer,\n} from \"./gatsby-image.server\"\nimport { GatsbyImageProps, IGatsbyImageData } from \"./gatsby-image.browser\"\nimport PropTypes from \"prop-types\"\nimport { ISharpGatsbyImageArgs } from \"../image-utils\"\n\nexport interface IStaticImageProps\n extends Omit,\n Omit {\n src: string\n}\n\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nexport function _getStaticImage(\n GatsbyImage: FunctionComponent\n): React.FC {\n return function StaticImage({\n src,\n __imageData: imageData,\n __error,\n // We extract these because they're not meant to be passed-down to GatsbyImage\n /* eslint-disable @typescript-eslint/no-unused-vars */\n width,\n height,\n aspectRatio,\n tracedSVGOptions,\n placeholder,\n formats,\n quality,\n transformOptions,\n jpgOptions,\n pngOptions,\n webpOptions,\n avifOptions,\n blurredOptions,\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ...props\n }): ReactElement {\n if (__error) {\n console.warn(__error)\n }\n\n if (imageData) {\n return \n }\n console.warn(`Image not loaded`, src)\n if (!__error && process.env.NODE_ENV === `development`) {\n console.warn(\n `Please ensure that \"gatsby-plugin-image\" is included in the plugins array in gatsby-config.js, and that your version of gatsby is at least 2.24.78`\n )\n }\n return null\n }\n}\n\nconst StaticImage: React.FC =\n _getStaticImage(GatsbyImageServer)\n\nconst checkDimensionProps: PropTypes.Validator = (\n props: IStaticImageProps & IPrivateProps,\n propName: keyof IStaticImageProps & IPrivateProps,\n ...rest\n) => {\n if (\n props.layout === `fullWidth` &&\n (propName === `width` || propName === `height`) &&\n props[propName]\n ) {\n return new Error(\n `\"${propName}\" ${props[propName]} may not be passed when layout is fullWidth.`\n )\n }\n return PropTypes.number(props, propName, ...rest)\n}\n\nconst validLayouts = new Set([`fixed`, `fullWidth`, `constrained`])\n\nexport const propTypes = {\n src: PropTypes.string.isRequired,\n alt: altValidator,\n width: checkDimensionProps,\n height: checkDimensionProps,\n sizes: PropTypes.string,\n layout: (props: IStaticImageProps & IPrivateProps): Error | undefined => {\n if (props.layout === undefined) {\n return undefined\n }\n if (validLayouts.has(props.layout)) {\n return undefined\n }\n\n return new Error(\n `Invalid value ${props.layout}\" provided for prop \"layout\". Defaulting to \"constrained\". Valid values are \"fixed\", \"fullWidth\" or \"constrained\".`\n )\n },\n}\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n","import {\n GatsbyImage as GatsbyImageBrowser,\n IGatsbyImageData,\n} from \"./gatsby-image.browser\"\nimport React from \"react\"\nimport {\n _getStaticImage,\n propTypes,\n IStaticImageProps,\n} from \"./static-image.server\"\n// These values are added by Babel. Do not add them manually\ninterface IPrivateProps {\n __imageData?: IGatsbyImageData\n __error?: string\n}\n\nconst StaticImage: React.FC =\n _getStaticImage(GatsbyImageBrowser)\n\nStaticImage.displayName = `StaticImage`\nStaticImage.propTypes = propTypes\n\nexport { StaticImage }\n","import * as React from \"react\"\nexport function LaterHydrator({\n children,\n}: React.PropsWithChildren>): React.ReactNode {\n React.useEffect(() => {\n // eslint-disable-next-line no-unused-expressions\n import(`./lazy-hydrate`)\n }, [])\n\n return children\n}\n","import React from \"react\"\nimport { LaterHydrator } from \".\"\n\nexport function wrapRootElement({ element }) {\n return {element}\n}\n","'use strict';\n\nconst preserveCamelCase = string => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst character = string[i];\n\n\t\tif (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) {\n\t\t\tstring = string.slice(0, i) + '-' + string.slice(i);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\ti++;\n\t\t} else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) {\n\t\t\tstring = string.slice(0, i - 1) + '-' + string.slice(i - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst camelCase = (input, options) => {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = Object.assign({\n\t\tpascalCase: false\n\t}, options);\n\n\tconst postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x;\n\n\tif (Array.isArray(input)) {\n\t\tinput = input.map(x => x.trim())\n\t\t\t.filter(x => x.length)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\tif (input.length === 1) {\n\t\treturn options.pascalCase ? input.toUpperCase() : input.toLowerCase();\n\t}\n\n\tconst hasUpperCase = input !== input.toLowerCase();\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(input);\n\t}\n\n\tinput = input\n\t\t.replace(/^[_.\\- ]+/, '')\n\t\t.toLowerCase()\n\t\t.replace(/[_.\\- ]+(\\w|$)/g, (_, p1) => p1.toUpperCase())\n\t\t.replace(/\\d+(\\w|$)/g, m => m.toUpperCase());\n\n\treturn postProcess(input);\n};\n\nmodule.exports = camelCase;\n// TODO: Remove this for the next major release\nmodule.exports.default = camelCase;\n","import React from 'react';\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nvar isFunction = function isFunction(obj) {\n return typeof obj === 'function';\n};\n\nvar MDXContext = /*#__PURE__*/React.createContext({});\n\nvar withMDXComponents = function withMDXComponents(Component) {\n return function (props) {\n var allComponents = useMDXComponents(props.components);\n return /*#__PURE__*/React.createElement(Component, _extends({}, props, {\n components: allComponents\n }));\n };\n};\n\nvar useMDXComponents = function useMDXComponents(components) {\n var contextComponents = React.useContext(MDXContext);\n var allComponents = contextComponents;\n\n if (components) {\n allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);\n }\n\n return allComponents;\n};\n\nvar MDXProvider = function MDXProvider(props) {\n var allComponents = useMDXComponents(props.components);\n return /*#__PURE__*/React.createElement(MDXContext.Provider, {\n value: allComponents\n }, props.children);\n};\n\nvar TYPE_PROP_NAME = 'mdxType';\nvar DEFAULTS = {\n inlineCode: 'code',\n wrapper: function wrapper(_ref) {\n var children = _ref.children;\n return /*#__PURE__*/React.createElement(React.Fragment, {}, children);\n }\n};\nvar MDXCreateElement = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var propComponents = props.components,\n mdxType = props.mdxType,\n originalType = props.originalType,\n parentName = props.parentName,\n etc = _objectWithoutProperties(props, [\"components\", \"mdxType\", \"originalType\", \"parentName\"]);\n\n var components = useMDXComponents(propComponents);\n var type = mdxType;\n var Component = components[\"\".concat(parentName, \".\").concat(type)] || components[type] || DEFAULTS[type] || originalType;\n\n if (propComponents) {\n return /*#__PURE__*/React.createElement(Component, _objectSpread2(_objectSpread2({\n ref: ref\n }, etc), {}, {\n components: propComponents\n }));\n }\n\n return /*#__PURE__*/React.createElement(Component, _objectSpread2({\n ref: ref\n }, etc));\n});\nMDXCreateElement.displayName = 'MDXCreateElement';\n\nfunction createElement(type, props) {\n var args = arguments;\n var mdxType = props && props.mdxType;\n\n if (typeof type === 'string' || mdxType) {\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = MDXCreateElement;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.originalType = type;\n newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;\n createElementArgArray[1] = newProps;\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n }\n\n return React.createElement.apply(null, createElementArgArray);\n }\n\n return React.createElement.apply(null, args);\n}\n\nexport { MDXContext, MDXProvider, createElement as mdx, useMDXComponents, withMDXComponents };","import React, { createContext, useContext } from \"react\"\n\nconst GatsbyMDXScopeContext = createContext({})\n\nexport const useMDXScope = scope => {\n const contextScope = useContext(GatsbyMDXScopeContext)\n return scope || contextScope\n}\n\nexport const MDXScopeProvider = ({ __mdxScope, children }) =>\n React.createElement(\n GatsbyMDXScopeContext.Provider,\n { value: __mdxScope },\n children\n )\n","export default\n Object.assign({}, )\n ","import React from \"react\"\nimport { MDXProvider, withMDXComponents } from \"@mdx-js/react\"\nimport { MDXScopeProvider } from \"./context\"\n\n/**\n * so, this import is weird right?\n *\n * # What it looks like:\n * we're importing a webpack loader directly into our runtime bundle\n *\n * # What it's actually doing:\n * We configure the `mdx-components` loader in gatsby-node's\n * `onCreateWebpackConfig`. The configuration sets the loader to handle its\n * own file, so if we import `./loaders/mdx-components`, the `mdx-components`\n * loader handles loading itself.\n *\n * # Why does this work?\n * The loader doesn't use the file argument to itself and instead returns\n * a generated file that includes the `gatsby-config` mdxPlugins wrapped in\n * require() statements. This results in the `mdxPlugins` being required\n * and available to the code after this import.\n *\n * # Have a better solution to this?\n * Submit a PR\n */\nimport { plugins as mdxPlugins } from \"./loaders/mdx-components\"\nimport scopeContexts from \"./loaders/mdx-scopes\"\n\nconst componentsAndGuards = {}\n\nconst componentFromGuards = arr =>\n function GatsbyMDXComponentFinder(props) {\n const { Component } = arr.find(({ guard }) => (guard ? guard(props) : true))\n return \n }\n\nmdxPlugins.forEach(({ guards = {}, components }) => {\n Object.entries(components).forEach(([componentName, Component]) => {\n if (componentsAndGuards[componentName]) {\n componentsAndGuards.push({ guard: guards[componentName], Component })\n } else {\n componentsAndGuards[componentName] = [\n { guard: guards[componentName], Component },\n ]\n }\n })\n})\n\nconst components = Object.entries(componentsAndGuards)\n .map(([name, arr]) => {\n return {\n [name]: componentFromGuards(\n arr.concat({ guard: undefined, Component: name })\n ),\n }\n })\n .reduce((acc, obj) => {\n return { ...acc, ...obj }\n }, {})\n\n// merge any components in wrapRootElement above this wrapRoot\nconst MDXConsumer = withMDXComponents(\n ({ components: componentsFromContext, children }) => (\n \n \n {children}\n \n \n )\n)\n\nconst WrapRootElement = ({ element }) => {element}\n\nexport default WrapRootElement\n","import wrap from \"./wrap-root-element\"\nexport const wrapRootElement = wrap\n","module.exports = {plugins: []}","import invariant from \"invariant\"; ////////////////////////////////////////////////////////////////////////////////\n// startsWith(string, search) - Check if `string` starts with `search`\n\nvar startsWith = function startsWith(string, search) {\n return string.substr(0, search.length) === search;\n}; ////////////////////////////////////////////////////////////////////////////////\n// pick(routes, uri)\n//\n// Ranks and picks the best route to match. Each segment gets the highest\n// amount of points, then the type of segment gets an additional amount of\n// points where\n//\n// static > dynamic > splat > root\n//\n// This way we don't have to worry about the order of our routes, let the\n// computers do it.\n//\n// A route looks like this\n//\n// { path, default, value }\n//\n// And a returned match looks like:\n//\n// { route, params, uri }\n//\n// I know, I should use TypeScript not comments for these types.\n\n\nvar pick = function pick(routes, uri) {\n var match = void 0;\n var default_ = void 0;\n\n var _uri$split = uri.split(\"?\"),\n uriPathname = _uri$split[0];\n\n var uriSegments = segmentize(uriPathname);\n var isRootUri = uriSegments[0] === \"\";\n var ranked = rankRoutes(routes);\n\n for (var i = 0, l = ranked.length; i < l; i++) {\n var missed = false;\n var route = ranked[i].route;\n\n if (route.default) {\n default_ = {\n route: route,\n params: {},\n uri: uri\n };\n continue;\n }\n\n var routeSegments = segmentize(route.path);\n var params = {};\n var max = Math.max(uriSegments.length, routeSegments.length);\n var index = 0;\n\n for (; index < max; index++) {\n var routeSegment = routeSegments[index];\n var uriSegment = uriSegments[index];\n\n if (isSplat(routeSegment)) {\n // Hit a splat, just grab the rest, and return a match\n // uri: /files/documents/work\n // route: /files/*\n var param = routeSegment.slice(1) || \"*\";\n params[param] = uriSegments.slice(index).map(decodeURIComponent).join(\"/\");\n break;\n }\n\n if (uriSegment === undefined) {\n // URI is shorter than the route, no match\n // uri: /users\n // route: /users/:userId\n missed = true;\n break;\n }\n\n var dynamicMatch = paramRe.exec(routeSegment);\n\n if (dynamicMatch && !isRootUri) {\n var matchIsNotReserved = reservedNames.indexOf(dynamicMatch[1]) === -1;\n !matchIsNotReserved ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" dynamic segment \\\"\" + dynamicMatch[1] + \"\\\" is a reserved name. Please use a different name in path \\\"\" + route.path + \"\\\".\") : invariant(false) : void 0;\n var value = decodeURIComponent(uriSegment);\n params[dynamicMatch[1]] = value;\n } else if (routeSegment !== uriSegment) {\n // Current segments don't match, not dynamic, not splat, so no match\n // uri: /users/123/settings\n // route: /users/:id/profile\n missed = true;\n break;\n }\n }\n\n if (!missed) {\n match = {\n route: route,\n params: params,\n uri: \"/\" + uriSegments.slice(0, index).join(\"/\")\n };\n break;\n }\n }\n\n return match || default_ || null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// match(path, uri) - Matches just one path to a uri, also lol\n\n\nvar match = function match(path, uri) {\n return pick([{\n path: path\n }], uri);\n}; ////////////////////////////////////////////////////////////////////////////////\n// resolve(to, basepath)\n//\n// Resolves URIs as though every path is a directory, no files. Relative URIs\n// in the browser can feel awkward because not only can you be \"in a directory\"\n// you can be \"at a file\", too. For example\n//\n// browserSpecResolve('foo', '/bar/') => /bar/foo\n// browserSpecResolve('foo', '/bar') => /foo\n//\n// But on the command line of a file system, it's not as complicated, you can't\n// `cd` from a file, only directories. This way, links have to know less about\n// their current path. To go deeper you can do this:\n//\n// \n// // instead of\n// \n//\n// Just like `cd`, if you want to go deeper from the command line, you do this:\n//\n// cd deeper\n// # not\n// cd $(pwd)/deeper\n//\n// By treating every path as a directory, linking to relative paths should\n// require less contextual information and (fingers crossed) be more intuitive.\n\n\nvar resolve = function resolve(to, base) {\n // /foo/bar, /baz/qux => /foo/bar\n if (startsWith(to, \"/\")) {\n return to;\n }\n\n var _to$split = to.split(\"?\"),\n toPathname = _to$split[0],\n toQuery = _to$split[1];\n\n var _base$split = base.split(\"?\"),\n basePathname = _base$split[0];\n\n var toSegments = segmentize(toPathname);\n var baseSegments = segmentize(basePathname); // ?a=b, /users?b=c => /users?a=b\n\n if (toSegments[0] === \"\") {\n return addQuery(basePathname, toQuery);\n } // profile, /users/789 => /users/789/profile\n\n\n if (!startsWith(toSegments[0], \".\")) {\n var pathname = baseSegments.concat(toSegments).join(\"/\");\n return addQuery((basePathname === \"/\" ? \"\" : \"/\") + pathname, toQuery);\n } // ./ /users/123 => /users/123\n // ../ /users/123 => /users\n // ../.. /users/123 => /\n // ../../one /a/b/c/d => /a/b/one\n // .././one /a/b/c/d => /a/b/c/one\n\n\n var allSegments = baseSegments.concat(toSegments);\n var segments = [];\n\n for (var i = 0, l = allSegments.length; i < l; i++) {\n var segment = allSegments[i];\n if (segment === \"..\") segments.pop();else if (segment !== \".\") segments.push(segment);\n }\n\n return addQuery(\"/\" + segments.join(\"/\"), toQuery);\n}; ////////////////////////////////////////////////////////////////////////////////\n// insertParams(path, params)\n\n\nvar insertParams = function insertParams(path, params) {\n var _path$split = path.split(\"?\"),\n pathBase = _path$split[0],\n _path$split$ = _path$split[1],\n query = _path$split$ === undefined ? \"\" : _path$split$;\n\n var segments = segmentize(pathBase);\n var constructedPath = \"/\" + segments.map(function (segment) {\n var match = paramRe.exec(segment);\n return match ? params[match[1]] : segment;\n }).join(\"/\");\n var _params$location = params.location;\n _params$location = _params$location === undefined ? {} : _params$location;\n var _params$location$sear = _params$location.search,\n search = _params$location$sear === undefined ? \"\" : _params$location$sear;\n var searchSplit = search.split(\"?\")[1] || \"\";\n constructedPath = addQuery(constructedPath, query, searchSplit);\n return constructedPath;\n};\n\nvar validateRedirect = function validateRedirect(from, to) {\n var filter = function filter(segment) {\n return isDynamic(segment);\n };\n\n var fromString = segmentize(from).filter(filter).sort().join(\"/\");\n var toString = segmentize(to).filter(filter).sort().join(\"/\");\n return fromString === toString;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar paramRe = /^:(.+)/;\nvar SEGMENT_POINTS = 4;\nvar STATIC_POINTS = 3;\nvar DYNAMIC_POINTS = 2;\nvar SPLAT_PENALTY = 1;\nvar ROOT_POINTS = 1;\n\nvar isRootSegment = function isRootSegment(segment) {\n return segment === \"\";\n};\n\nvar isDynamic = function isDynamic(segment) {\n return paramRe.test(segment);\n};\n\nvar isSplat = function isSplat(segment) {\n return segment && segment[0] === \"*\";\n};\n\nvar rankRoute = function rankRoute(route, index) {\n var score = route.default ? 0 : segmentize(route.path).reduce(function (score, segment) {\n score += SEGMENT_POINTS;\n if (isRootSegment(segment)) score += ROOT_POINTS;else if (isDynamic(segment)) score += DYNAMIC_POINTS;else if (isSplat(segment)) score -= SEGMENT_POINTS + SPLAT_PENALTY;else score += STATIC_POINTS;\n return score;\n }, 0);\n return {\n route: route,\n score: score,\n index: index\n };\n};\n\nvar rankRoutes = function rankRoutes(routes) {\n return routes.map(rankRoute).sort(function (a, b) {\n return a.score < b.score ? 1 : a.score > b.score ? -1 : a.index - b.index;\n });\n};\n\nvar segmentize = function segmentize(uri) {\n return uri // strip starting/ending slashes\n .replace(/(^\\/+|\\/+$)/g, \"\").split(\"/\");\n};\n\nvar addQuery = function addQuery(pathname) {\n for (var _len = arguments.length, query = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n query[_key - 1] = arguments[_key];\n }\n\n query = query.filter(function (q) {\n return q && q.length > 0;\n });\n return pathname + (query && query.length > 0 ? \"?\" + query.join(\"&\") : \"\");\n};\n\nvar reservedNames = [\"uri\", \"path\"];\n/**\n * Shallow compares two objects.\n * @param {Object} obj1 The first object to compare.\n * @param {Object} obj2 The second object to compare.\n */\n\nvar shallowCompare = function shallowCompare(obj1, obj2) {\n var obj1Keys = Object.keys(obj1);\n return obj1Keys.length === Object.keys(obj2).length && obj1Keys.every(function (key) {\n return obj2.hasOwnProperty(key) && obj1[key] === obj2[key];\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n\n\nexport { startsWith, pick, match, resolve, insertParams, validateRedirect, shallowCompare };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar getLocation = function getLocation(source) {\n var _source$location = source.location,\n search = _source$location.search,\n hash = _source$location.hash,\n href = _source$location.href,\n origin = _source$location.origin,\n protocol = _source$location.protocol,\n host = _source$location.host,\n hostname = _source$location.hostname,\n port = _source$location.port;\n var pathname = source.location.pathname;\n\n if (!pathname && href && canUseDOM) {\n var url = new URL(href);\n pathname = url.pathname;\n }\n\n return {\n pathname: encodeURI(decodeURI(pathname)),\n search: search,\n hash: hash,\n href: href,\n origin: origin,\n protocol: protocol,\n host: host,\n hostname: hostname,\n port: port,\n state: source.history.state,\n key: source.history.state && source.history.state.key || \"initial\"\n };\n};\n\nvar createHistory = function createHistory(source, options) {\n var listeners = [];\n var location = getLocation(source);\n var transitioning = false;\n\n var resolveTransition = function resolveTransition() {};\n\n return {\n get location() {\n return location;\n },\n\n get transitioning() {\n return transitioning;\n },\n\n _onTransitionComplete: function _onTransitionComplete() {\n transitioning = false;\n resolveTransition();\n },\n listen: function listen(listener) {\n listeners.push(listener);\n\n var popstateListener = function popstateListener() {\n location = getLocation(source);\n listener({\n location: location,\n action: \"POP\"\n });\n };\n\n source.addEventListener(\"popstate\", popstateListener);\n return function () {\n source.removeEventListener(\"popstate\", popstateListener);\n listeners = listeners.filter(function (fn) {\n return fn !== listener;\n });\n };\n },\n navigate: function navigate(to) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n state = _ref.state,\n _ref$replace = _ref.replace,\n replace = _ref$replace === undefined ? false : _ref$replace;\n\n if (typeof to === \"number\") {\n source.history.go(to);\n } else {\n state = _extends({}, state, {\n key: Date.now() + \"\"\n }); // try...catch iOS Safari limits to 100 pushState calls\n\n try {\n if (transitioning || replace) {\n source.history.replaceState(state, null, to);\n } else {\n source.history.pushState(state, null, to);\n }\n } catch (e) {\n source.location[replace ? \"replace\" : \"assign\"](to);\n }\n }\n\n location = getLocation(source);\n transitioning = true;\n var transition = new Promise(function (res) {\n return resolveTransition = res;\n });\n listeners.forEach(function (listener) {\n return listener({\n location: location,\n action: \"PUSH\"\n });\n });\n return transition;\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// Stores history entries in memory for testing or other platforms like Native\n\n\nvar createMemorySource = function createMemorySource() {\n var initialPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var searchIndex = initialPath.indexOf(\"?\");\n var initialLocation = {\n pathname: searchIndex > -1 ? initialPath.substr(0, searchIndex) : initialPath,\n search: searchIndex > -1 ? initialPath.substr(searchIndex) : \"\"\n };\n var index = 0;\n var stack = [initialLocation];\n var states = [null];\n return {\n get location() {\n return stack[index];\n },\n\n addEventListener: function addEventListener(name, fn) {},\n removeEventListener: function removeEventListener(name, fn) {},\n history: {\n get entries() {\n return stack;\n },\n\n get index() {\n return index;\n },\n\n get state() {\n return states[index];\n },\n\n pushState: function pushState(state, _, uri) {\n var _uri$split = uri.split(\"?\"),\n pathname = _uri$split[0],\n _uri$split$ = _uri$split[1],\n search = _uri$split$ === undefined ? \"\" : _uri$split$;\n\n index++;\n stack.push({\n pathname: pathname,\n search: search.length ? \"?\" + search : search\n });\n states.push(state);\n },\n replaceState: function replaceState(state, _, uri) {\n var _uri$split2 = uri.split(\"?\"),\n pathname = _uri$split2[0],\n _uri$split2$ = _uri$split2[1],\n search = _uri$split2$ === undefined ? \"\" : _uri$split2$;\n\n stack[index] = {\n pathname: pathname,\n search: search\n };\n states[index] = state;\n },\n go: function go(to) {\n var newIndex = index + to;\n\n if (newIndex < 0 || newIndex > states.length - 1) {\n return;\n }\n\n index = newIndex;\n }\n }\n };\n}; ////////////////////////////////////////////////////////////////////////////////\n// global history - uses window.history as the source if available, otherwise a\n// memory history\n\n\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\n\nvar getSource = function getSource() {\n return canUseDOM ? window : createMemorySource();\n};\n\nvar globalHistory = createHistory(getSource());\nvar navigate = globalHistory.navigate; ////////////////////////////////////////////////////////////////////////////////\n\nexport { globalHistory, navigate, createHistory, createMemorySource };","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n/* eslint-disable jsx-a11y/anchor-has-content */\n\n\nimport React, { useContext, createContext } from \"react\";\nimport invariant from \"invariant\";\nimport { polyfill } from \"react-lifecycles-compat\";\nimport { startsWith, pick, resolve, match, insertParams, validateRedirect, shallowCompare } from \"./lib/utils\";\nimport { globalHistory, navigate, createHistory, createMemorySource } from \"./lib/history\"; ////////////////////////////////////////////////////////////////////////////////\n\nvar createNamedContext = function createNamedContext(name, defaultValue) {\n var Ctx = createContext(defaultValue);\n Ctx.displayName = name;\n return Ctx;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Location Context/Provider\n\n\nvar LocationContext = createNamedContext(\"Location\"); // sets up a listener if there isn't one already so apps don't need to be\n// wrapped in some top level provider\n\nvar Location = function Location(_ref) {\n var children = _ref.children;\n return React.createElement(LocationContext.Consumer, null, function (context) {\n return context ? children(context) : React.createElement(LocationProvider, null, children);\n });\n};\n\nvar LocationProvider = function (_React$Component) {\n _inherits(LocationProvider, _React$Component);\n\n function LocationProvider() {\n var _temp, _this, _ret;\n\n _classCallCheck(this, LocationProvider);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n context: _this.getContext(),\n refs: {\n unlisten: null\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n LocationProvider.prototype.getContext = function getContext() {\n var _props$history = this.props.history,\n navigate = _props$history.navigate,\n location = _props$history.location;\n return {\n navigate: navigate,\n location: location\n };\n };\n\n LocationProvider.prototype.componentDidCatch = function componentDidCatch(error, info) {\n if (isRedirect(error)) {\n var _navigate = this.props.history.navigate;\n\n _navigate(error.uri, {\n replace: true\n });\n } else {\n throw error;\n }\n };\n\n LocationProvider.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevState.context.location !== this.state.context.location) {\n this.props.history._onTransitionComplete();\n }\n };\n\n LocationProvider.prototype.componentDidMount = function componentDidMount() {\n var _this2 = this;\n\n var refs = this.state.refs,\n history = this.props.history;\n\n history._onTransitionComplete();\n\n refs.unlisten = history.listen(function () {\n Promise.resolve().then(function () {\n // TODO: replace rAF with react deferred update API when it's ready https://github.com/facebook/react/issues/13306\n requestAnimationFrame(function () {\n if (!_this2.unmounted) {\n _this2.setState(function () {\n return {\n context: _this2.getContext()\n };\n });\n }\n });\n });\n });\n };\n\n LocationProvider.prototype.componentWillUnmount = function componentWillUnmount() {\n var refs = this.state.refs;\n this.unmounted = true;\n refs.unlisten();\n };\n\n LocationProvider.prototype.render = function render() {\n var context = this.state.context,\n children = this.props.children;\n return React.createElement(LocationContext.Provider, {\n value: context\n }, typeof children === \"function\" ? children(context) : children || null);\n };\n\n return LocationProvider;\n}(React.Component); ////////////////////////////////////////////////////////////////////////////////\n\n\nLocationProvider.defaultProps = {\n history: globalHistory\n};\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0;\n\nvar ServerLocation = function ServerLocation(_ref2) {\n var url = _ref2.url,\n children = _ref2.children;\n var searchIndex = url.indexOf(\"?\");\n var searchExists = searchIndex > -1;\n var pathname = void 0;\n var search = \"\";\n var hash = \"\";\n\n if (searchExists) {\n pathname = url.substring(0, searchIndex);\n search = url.substring(searchIndex);\n } else {\n pathname = url;\n }\n\n return React.createElement(LocationContext.Provider, {\n value: {\n location: {\n pathname: pathname,\n search: search,\n hash: hash\n },\n navigate: function navigate() {\n throw new Error(\"You can't call navigate on the server.\");\n }\n }\n }, children);\n}; ////////////////////////////////////////////////////////////////////////////////\n// Sets baseuri and basepath for nested routers and links\n\n\nvar BaseContext = createNamedContext(\"Base\", {\n baseuri: \"/\",\n basepath: \"/\",\n navigate: globalHistory.navigate\n}); ////////////////////////////////////////////////////////////////////////////////\n// The main event, welcome to the show everybody.\n\nvar Router = function Router(props) {\n return React.createElement(BaseContext.Consumer, null, function (baseContext) {\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RouterImpl, _extends({}, baseContext, locationContext, props));\n });\n });\n};\n\nvar RouterImpl = function (_React$PureComponent) {\n _inherits(RouterImpl, _React$PureComponent);\n\n function RouterImpl() {\n _classCallCheck(this, RouterImpl);\n\n return _possibleConstructorReturn(this, _React$PureComponent.apply(this, arguments));\n }\n\n RouterImpl.prototype.render = function render() {\n var _props = this.props,\n location = _props.location,\n _navigate2 = _props.navigate,\n basepath = _props.basepath,\n primary = _props.primary,\n children = _props.children,\n baseuri = _props.baseuri,\n _props$component = _props.component,\n component = _props$component === undefined ? \"div\" : _props$component,\n domProps = _objectWithoutProperties(_props, [\"location\", \"navigate\", \"basepath\", \"primary\", \"children\", \"baseuri\", \"component\"]);\n\n var routes = React.Children.toArray(children).reduce(function (array, child) {\n var routes = createRoute(basepath)(child);\n return array.concat(routes);\n }, []);\n var pathname = location.pathname;\n var match = pick(routes, pathname);\n\n if (match) {\n var params = match.params,\n uri = match.uri,\n route = match.route,\n element = match.route.value; // remove the /* from the end for child routes relative paths\n\n basepath = route.default ? basepath : route.path.replace(/\\*$/, \"\");\n\n var props = _extends({}, params, {\n uri: uri,\n location: location,\n navigate: function navigate(to, options) {\n return _navigate2(resolve(to, uri), options);\n }\n });\n\n var clone = React.cloneElement(element, props, element.props.children ? React.createElement(Router, {\n location: location,\n primary: primary\n }, element.props.children) : undefined); // using 'div' for < 16.3 support\n\n var FocusWrapper = primary ? FocusHandler : component; // don't pass any props to 'div'\n\n var wrapperProps = primary ? _extends({\n uri: uri,\n location: location,\n component: component\n }, domProps) : domProps;\n return React.createElement(BaseContext.Provider, {\n value: {\n baseuri: uri,\n basepath: basepath,\n navigate: props.navigate\n }\n }, React.createElement(FocusWrapper, wrapperProps, clone));\n } else {\n // Not sure if we want this, would require index routes at every level\n // warning(\n // false,\n // `\\n\\nNothing matched:\\n\\t${\n // location.pathname\n // }\\n\\nPaths checked: \\n\\t${routes\n // .map(route => route.path)\n // .join(\n // \"\\n\\t\"\n // )}\\n\\nTo get rid of this warning, add a default NotFound component as child of Router:\n // \\n\\tlet NotFound = () =>
Not Found!
\n // \\n\\t\\n\\t \\n\\t {/* ... */}\\n\\t`\n // );\n return null;\n }\n };\n\n return RouterImpl;\n}(React.PureComponent);\n\nRouterImpl.defaultProps = {\n primary: true\n};\nvar FocusContext = createNamedContext(\"Focus\");\n\nvar FocusHandler = function FocusHandler(_ref3) {\n var uri = _ref3.uri,\n location = _ref3.location,\n component = _ref3.component,\n domProps = _objectWithoutProperties(_ref3, [\"uri\", \"location\", \"component\"]);\n\n return React.createElement(FocusContext.Consumer, null, function (requestFocus) {\n return React.createElement(FocusHandlerImpl, _extends({}, domProps, {\n component: component,\n requestFocus: requestFocus,\n uri: uri,\n location: location\n }));\n });\n}; // don't focus on initial render\n\n\nvar initialRender = true;\nvar focusHandlerCount = 0;\n\nvar FocusHandlerImpl = function (_React$Component2) {\n _inherits(FocusHandlerImpl, _React$Component2);\n\n function FocusHandlerImpl() {\n var _temp2, _this4, _ret2;\n\n _classCallCheck(this, FocusHandlerImpl);\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return _ret2 = (_temp2 = (_this4 = _possibleConstructorReturn(this, _React$Component2.call.apply(_React$Component2, [this].concat(args))), _this4), _this4.state = {}, _this4.requestFocus = function (node) {\n if (!_this4.state.shouldFocus && node) {\n node.focus();\n }\n }, _temp2), _possibleConstructorReturn(_this4, _ret2);\n }\n\n FocusHandlerImpl.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n var initial = prevState.uri == null;\n\n if (initial) {\n return _extends({\n shouldFocus: true\n }, nextProps);\n } else {\n var myURIChanged = nextProps.uri !== prevState.uri;\n var navigatedUpToMe = prevState.location.pathname !== nextProps.location.pathname && nextProps.location.pathname === nextProps.uri;\n return _extends({\n shouldFocus: myURIChanged || navigatedUpToMe\n }, nextProps);\n }\n };\n\n FocusHandlerImpl.prototype.componentDidMount = function componentDidMount() {\n focusHandlerCount++;\n this.focus();\n };\n\n FocusHandlerImpl.prototype.componentWillUnmount = function componentWillUnmount() {\n focusHandlerCount--;\n\n if (focusHandlerCount === 0) {\n initialRender = true;\n }\n };\n\n FocusHandlerImpl.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n if (prevProps.location !== this.props.location && this.state.shouldFocus) {\n this.focus();\n }\n };\n\n FocusHandlerImpl.prototype.focus = function focus() {\n if (process.env.NODE_ENV === \"test\") {\n // getting cannot read property focus of null in the tests\n // and that bit of global `initialRender` state causes problems\n // should probably figure it out!\n return;\n }\n\n var requestFocus = this.props.requestFocus;\n\n if (requestFocus) {\n requestFocus(this.node);\n } else {\n if (initialRender) {\n initialRender = false;\n } else if (this.node) {\n // React polyfills [autofocus] and it fires earlier than cDM,\n // so we were stealing focus away, this line prevents that.\n if (!this.node.contains(document.activeElement)) {\n this.node.focus();\n }\n }\n }\n };\n\n FocusHandlerImpl.prototype.render = function render() {\n var _this5 = this;\n\n var _props2 = this.props,\n children = _props2.children,\n style = _props2.style,\n requestFocus = _props2.requestFocus,\n _props2$component = _props2.component,\n Comp = _props2$component === undefined ? \"div\" : _props2$component,\n uri = _props2.uri,\n location = _props2.location,\n domProps = _objectWithoutProperties(_props2, [\"children\", \"style\", \"requestFocus\", \"component\", \"uri\", \"location\"]);\n\n return React.createElement(Comp, _extends({\n style: _extends({\n outline: \"none\"\n }, style),\n tabIndex: \"-1\",\n ref: function ref(n) {\n return _this5.node = n;\n }\n }, domProps), React.createElement(FocusContext.Provider, {\n value: this.requestFocus\n }, this.props.children));\n };\n\n return FocusHandlerImpl;\n}(React.Component);\n\npolyfill(FocusHandlerImpl);\n\nvar k = function k() {}; ////////////////////////////////////////////////////////////////////////////////\n\n\nvar forwardRef = React.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n forwardRef = function forwardRef(C) {\n return C;\n };\n}\n\nvar Link = forwardRef(function (_ref4, ref) {\n var innerRef = _ref4.innerRef,\n props = _objectWithoutProperties(_ref4, [\"innerRef\"]);\n\n return React.createElement(BaseContext.Consumer, null, function (_ref5) {\n var basepath = _ref5.basepath,\n baseuri = _ref5.baseuri;\n return React.createElement(Location, null, function (_ref6) {\n var location = _ref6.location,\n navigate = _ref6.navigate;\n\n var to = props.to,\n state = props.state,\n replace = props.replace,\n _props$getProps = props.getProps,\n getProps = _props$getProps === undefined ? k : _props$getProps,\n anchorProps = _objectWithoutProperties(props, [\"to\", \"state\", \"replace\", \"getProps\"]);\n\n var href = resolve(to, baseuri);\n var encodedHref = encodeURI(href);\n var isCurrent = location.pathname === encodedHref;\n var isPartiallyCurrent = startsWith(location.pathname, encodedHref);\n return React.createElement(\"a\", _extends({\n ref: ref || innerRef,\n \"aria-current\": isCurrent ? \"page\" : undefined\n }, anchorProps, getProps({\n isCurrent: isCurrent,\n isPartiallyCurrent: isPartiallyCurrent,\n href: href,\n location: location\n }), {\n href: href,\n onClick: function onClick(event) {\n if (anchorProps.onClick) anchorProps.onClick(event);\n\n if (shouldNavigate(event)) {\n event.preventDefault();\n var shouldReplace = replace;\n\n if (typeof replace !== \"boolean\" && isCurrent) {\n var _location$state = _extends({}, location.state),\n key = _location$state.key,\n restState = _objectWithoutProperties(_location$state, [\"key\"]);\n\n shouldReplace = shallowCompare(_extends({}, state), restState);\n }\n\n navigate(href, {\n state: state,\n replace: shouldReplace\n });\n }\n }\n }));\n });\n });\n});\nLink.displayName = \"Link\";\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nfunction RedirectRequest(uri) {\n this.uri = uri;\n}\n\nvar isRedirect = function isRedirect(o) {\n return o instanceof RedirectRequest;\n};\n\nvar redirectTo = function redirectTo(to) {\n throw new RedirectRequest(to);\n};\n\nvar RedirectImpl = function (_React$Component3) {\n _inherits(RedirectImpl, _React$Component3);\n\n function RedirectImpl() {\n _classCallCheck(this, RedirectImpl);\n\n return _possibleConstructorReturn(this, _React$Component3.apply(this, arguments));\n } // Support React < 16 with this hook\n\n\n RedirectImpl.prototype.componentDidMount = function componentDidMount() {\n var _props3 = this.props,\n navigate = _props3.navigate,\n to = _props3.to,\n from = _props3.from,\n _props3$replace = _props3.replace,\n replace = _props3$replace === undefined ? true : _props3$replace,\n state = _props3.state,\n noThrow = _props3.noThrow,\n baseuri = _props3.baseuri,\n props = _objectWithoutProperties(_props3, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n Promise.resolve().then(function () {\n var resolvedTo = resolve(to, baseuri);\n navigate(insertParams(resolvedTo, props), {\n replace: replace,\n state: state\n });\n });\n };\n\n RedirectImpl.prototype.render = function render() {\n var _props4 = this.props,\n navigate = _props4.navigate,\n to = _props4.to,\n from = _props4.from,\n replace = _props4.replace,\n state = _props4.state,\n noThrow = _props4.noThrow,\n baseuri = _props4.baseuri,\n props = _objectWithoutProperties(_props4, [\"navigate\", \"to\", \"from\", \"replace\", \"state\", \"noThrow\", \"baseuri\"]);\n\n var resolvedTo = resolve(to, baseuri);\n if (!noThrow) redirectTo(insertParams(resolvedTo, props));\n return null;\n };\n\n return RedirectImpl;\n}(React.Component);\n\nvar Redirect = function Redirect(props) {\n return React.createElement(BaseContext.Consumer, null, function (_ref7) {\n var baseuri = _ref7.baseuri;\n return React.createElement(Location, null, function (locationContext) {\n return React.createElement(RedirectImpl, _extends({}, locationContext, {\n baseuri: baseuri\n }, props));\n });\n });\n};\n\nprocess.env.NODE_ENV !== \"production\" ? void 0 : void 0; ////////////////////////////////////////////////////////////////////////////////\n\nvar Match = function Match(_ref8) {\n var path = _ref8.path,\n children = _ref8.children;\n return React.createElement(BaseContext.Consumer, null, function (_ref9) {\n var baseuri = _ref9.baseuri;\n return React.createElement(Location, null, function (_ref10) {\n var navigate = _ref10.navigate,\n location = _ref10.location;\n var resolvedPath = resolve(path, baseuri);\n var result = match(resolvedPath, location.pathname);\n return children({\n navigate: navigate,\n location: location,\n match: result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null\n });\n });\n });\n}; ////////////////////////////////////////////////////////////////////////////////\n// Hooks\n\n\nvar useLocation = function useLocation() {\n var context = useContext(LocationContext);\n\n if (!context) {\n throw new Error(\"useLocation hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.location;\n};\n\nvar useNavigate = function useNavigate() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useNavigate hook was used but a BaseContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n return context.navigate;\n};\n\nvar useParams = function useParams() {\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useParams hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var results = match(context.basepath, location.pathname);\n return results ? results.params : null;\n};\n\nvar useMatch = function useMatch(path) {\n if (!path) {\n throw new Error(\"useMatch(path: string) requires an argument of a string to match against\");\n }\n\n var context = useContext(BaseContext);\n\n if (!context) {\n throw new Error(\"useMatch hook was used but a LocationContext.Provider was not found in the parent tree. Make sure this is used in a component that is a child of Router\");\n }\n\n var location = useLocation();\n var resolvedPath = resolve(path, context.baseuri);\n var result = match(resolvedPath, location.pathname);\n return result ? _extends({}, result.params, {\n uri: result.uri,\n path: path\n }) : null;\n}; ////////////////////////////////////////////////////////////////////////////////\n// Junk\n\n\nvar stripSlashes = function stripSlashes(str) {\n return str.replace(/(^\\/+|\\/+$)/g, \"\");\n};\n\nvar createRoute = function createRoute(basepath) {\n return function (element) {\n if (!element) {\n return null;\n }\n\n if (element.type === React.Fragment && element.props.children) {\n return React.Children.map(element.props.children, createRoute(basepath));\n }\n\n !(element.props.path || element.props.default || element.type === Redirect) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \": Children of must have a `path` or `default` prop, or be a ``. None found on element type `\" + element.type + \"`\") : invariant(false) : void 0;\n !!(element.type === Redirect && (!element.props.from || !element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" requires both \\\"from\\\" and \\\"to\\\" props when inside a .\") : invariant(false) : void 0;\n !!(element.type === Redirect && !validateRedirect(element.props.from, element.props.to)) ? process.env.NODE_ENV !== \"production\" ? invariant(false, \" has mismatched dynamic segments, ensure both paths have the exact same dynamic segments.\") : invariant(false) : void 0;\n\n if (element.props.default) {\n return {\n value: element,\n default: true\n };\n }\n\n var elementPath = element.type === Redirect ? element.props.from : element.props.path;\n var path = elementPath === \"/\" ? basepath : stripSlashes(basepath) + \"/\" + stripSlashes(elementPath);\n return {\n value: element,\n default: element.props.default,\n path: element.props.children ? stripSlashes(path) + \"/*\" : path\n };\n };\n};\n\nvar shouldNavigate = function shouldNavigate(event) {\n return !event.defaultPrevented && event.button === 0 && !(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}; ////////////////////////////////////////////////////////////////////////\n\n\nexport { Link, Location, LocationProvider, Match, Redirect, Router, ServerLocation, createHistory, createMemorySource, isRedirect, navigate, redirectTo, globalHistory, match as matchPath, useLocation, useNavigate, useParams, useMatch , BaseContext };","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n if (process.env.NODE_ENV !== 'production') {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error(\n 'Minified exception occurred; use the non-minified dev environment ' +\n 'for the full error message and additional helpful warnings.'\n );\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(\n format.replace(/%s/g, function() { return args[argIndex++]; })\n );\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n};\n\nmodule.exports = invariant;\n","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}"],"names":["module","exports","self","ReferenceError","__esModule","_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","setPrototypeOf","subClass","superClass","create","constructor","obj","excluded","sourceKeys","keys","indexOf","_setPrototypeOf","o","p","__proto__","getLocation","_source$location","location","search","hash","href","origin","protocol","host","hostname","port","pathname","canUseDOM","URL","encodeURI","decodeURI","state","history","createHistory","options","listeners","transitioning","resolveTransition","_onTransitionComplete","listen","listener","push","popstateListener","action","addEventListener","removeEventListener","filter","fn","navigate","to","_ref","undefined","_ref$replace","replace","go","Date","now","replaceState","pushState","e","transition","Promise","res","forEach","createMemorySource","initialPath","searchIndex","initialLocation","substr","index","stack","states","name","entries","_","uri","_uri$split","split","_uri$split$","_uri$split2","_uri$split2$","newIndex","window","document","createElement","globalHistory","shallowCompare","validateRedirect","insertParams","resolve","match","pick","startsWith","_invariant","_invariant2","default","string","routes","default_","uriPathname","uriSegments","segmentize","isRootUri","ranked","rankRoutes","l","missed","route","params","routeSegments","path","max","Math","routeSegment","uriSegment","isSplat","slice","map","decodeURIComponent","join","dynamicMatch","paramRe","exec","reservedNames","value","isDynamic","segment","test","rankRoute","score","reduce","isRootSegment","SEGMENT_POINTS","sort","a","b","addQuery","_len","query","Array","_key","q","base","_to$split","toPathname","toQuery","basePathname","toSegments","baseSegments","concat","allSegments","segments","pop","_path$split","pathBase","_path$split$","constructedPath","_params$location","_params$location$sear","searchSplit","from","obj1","obj2","obj1Keys","every","strings","raw","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","Constructor","protoProps","staticProps","_templateObject","freeze","_classCallCheck","instance","TypeError","TemplateTag","_this","transformers","tag","_len2","expressions","_key2","interimTag","bind","transformEndResult","transformString","processSubstitutions","isArray","transformer","previousTag","template","_len3","substitutions","_key3","resultSoFar","remainingPart","substitution","transformSubstitution","shift","str","transform","onString","onSubstitution","endResult","onEndResult","defaults","separator","conjunction","serial","opts","arrayLength","indent","separatorIndex","lastIndexOf","_toConsumableArray","arr","arr2","type","min","el","regexp","RegExp","Error","side","trim","toLowerCase","splitBy","includes","isValidValue","x","Number","isNaN","replaceWhat","replaceWith","toString","applyTrailingSlashOption","input","option","hasHtmlSuffix","endsWith","_interopRequireDefault","withPrefix","withAssetPrefix","getGlobalPathPrefix","_objectWithoutPropertiesLoose2","_assertThisInitialized2","_inheritsLoose2","_extends2","_propTypes","_react","_reachRouter","_parsePath","parsePath","_isLocalLink","_rewriteLinkPath","_excluded","prefix","_prefix","getGlobalBasePrefix","isLocalLink","NavLinkPropTypes","activeClassName","activeStyle","object","partiallyActive","bool","GatsbyLinkLocationWrapper","Location","_ref2","GatsbyLink","_location","_React$Component","defaultGetProps","_ref3","isPartiallyCurrent","isCurrent","className","Boolean","style","IOSupported","IntersectionObserver","abortPrefetch","handleRef","_proto","_prefetch","currentPath","rewrittenPath","rewriteLinkPath","parsed","newPathName","___loader","enqueue","componentWillUnmount","io","_this$io","abort","unobserve","disconnect","ref","cb","_this2","innerRef","current","inViewPort","entry","isIntersecting","intersectionRatio","observe","render","_this3","_this$props","_this$props$getProps","getProps","_onClick","onClick","_onMouseEnter","onMouseEnter","rest","prefixedTo","Link","hovering","button","defaultPrevented","metaKey","altKey","ctrlKey","shiftKey","preventDefault","shouldReplace","___navigate","Component","propTypes","func","isRequired","_default","forwardRef","ABSOLUTE_URL_REGEX","isAbsolute","hashIndex","_utils","_parsePath2","isAbsolutePath","relativeTo","adjustedPath","absolutify","_scrollHandler","ScrollHandler","useScrollRestoration","ScrollContext","React","nodeInterop","cache","_getRequireWildcardCache","has","get","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","set","_interopRequireWildcard","_sessionStorage","WeakMap","cacheBabelInterop","cacheNodeInterop","createContext","SessionStorage","displayName","args","_stateStorage","_isTicking","_latestKnownScrollY","scrollListener","scrollY","requestAnimationFrame","_saveScroll","windowScroll","position","prevProps","shouldUpdateScroll","scrollTo","scrollToHash","node","getElementById","substring","scrollIntoView","prevRouterProps","routerProps","save","componentDidMount","scrollPosition","_this$props$location","read","componentDidUpdate","_this$props$location2","Provider","children","element","GATSBY_ROUTER_SCROLL_STATE","stateKey","getStateKey","sessionStorage","getItem","JSON","parse","storedValue","stringify","setItem","stateKeyBase","identifier","useLocation","useContext","useRef","useLayoutEffect","onScroll","scrollTop","components","plugin","require","plugins","getResourceURLsForPathname","loadPage","loadPageSync","api","defaultReturn","argTransform","results","result","previous","next","then","all","on","handler","off","splice","emit","evt","mitt","pathAndSearch","charAt","pathCache","Map","matchPaths","trimPathname","rawPathname","stripPrefix","__BASE_PATH__","setMatchPaths","findMatchPath","trimmedPathname","cleanPath","pickPaths","matchPath","originalPath","normalizePagePath","grabMatchParams","findPath","redirect","maybeGetBrowserRedirect","toPath","foundPath","StaticQueryContext","loader","useStaticQuery","context","data","_arrayLikeToArray","len","iter","Symbol","iterator","minLen","n","supportedPrefetchStrategy","feature","fakeLink","relList","supports","err","support","url","reject","link","setAttribute","onload","onerror","getElementsByTagName","getElementsByName","parentNode","appendChild","req","XMLHttpRequest","open","status","send","preFetched","catch","PageResourceStatus","Success","preferDefault","m","createPageDataUrl","rawPath","maybeSearch","s","stripSurroundingSlashes","doFetch","method","onreadystatechange","readyState","toPageResources","pageData","component","page","componentChunkName","webpackCompilationHash","staticQueryHashes","getServerDataError","json","BaseLoader","loadComponent","inFlightNetworkRequests","pageDb","inFlightDb","staticQueryDb","pageDataDb","isPrefetchQueueRunning","prefetchQueued","prefetchTriggered","Set","prefetchCompleted","memoizedGet","inFlightPromise","response","delete","setApiRunner","apiRunner","prefetchDisabled","some","fetchPageDataJson","loadObj","pagePath","retries","responseText","jsonPayload","payload","notFound","internalServerError","loadPageDataJson","error","loadAppData","allData","finalResult","componentChunkPromise","pageResources","createdAt","staticQueryBatchPromise","staticQueryHash","staticQueryResults","staticQueryResultsMap","emitter","withErrorDetails","shouldPrefetch","navigator","connection","effectiveType","saveData","doesConnectionSupportPrefetch","prefetch","defer","promise","abortC","AbortController","signal","findIndex","setTimeout","_processNextPrefetchBatch","requestIdleCallback","toPrefetch","prefetches","dPromise","add","doPrefetch","pageDataUrl","prefetchHelper","crossOrigin","as","createComponentUrls","isPageNotFound","appData","___chunkMapping","chunk","__PATH_PREFIX__","ProdLoader","asyncRequires","chunkName","componentUrls","setLoader","_loader","publicLoader","getStaticQueryResults","PageRenderer","pageContext","__params","pageElement","RouteAnnouncerProps","id","top","width","height","padding","overflow","clip","whiteSpace","border","maybeRedirect","___replace","nextRoute","event","reason","onPreRouteUpdate","prevLocation","onRouteUpdate","___swUpdated","timeoutId","clearTimeout","___webpackCompilationHash","serviceWorker","controller","postMessage","gatsbyApi","reachNavigate","getSavedScrollPosition","RouteAnnouncer","announcementRef","nextProps","pageName","title","pageHeadings","querySelectorAll","textContent","newAnnouncement","innerText","compareLocationProps","nextLocation","RouteUpdates","shouldComponentUpdate","shallowDiffers","_i","EnsureResources","getDerivedStateFromProps","prevState","loadResources","setState","nextState","___emitter","___push","reloadStorageKey","apiRunnerAsync","RouteHandler","BaseContext","baseuri","basepath","DataContext","GatsbyRoot","LocationHandler","Consumer","Router","browserLoc","getSessionStorage","reload","removeItem","message","console","SiteRoot","App","onClientEntryRanRef","performance","mark","renderer","ReactDOM","runRender","rootElement","doc","documentElement","doScroll","InternalPageRenderer","polyfill","redirectMap","redirectIgnoreCaseMap","redirects","ignoreCase","fromPath","register","reg","installingWorker","installing","log","___failedResources","imageCache","hasNativeLazyLoadSupport","HTMLImageElement","GATSBY___IMAGE","storeImageloaded","cacheKey","hasImageLoaded","getImage","images","_node$images","fallback","_node$images$fallback","src","gatsbyImageData","childImageSharp","_node$childImageSharp","format","getMainProps","isLoading","isLoaded","loading","toggleLoaded","dataset","objectFit","objectPosition","objectFitPolyfill","import","shouldLoad","opacity","onLoad","currentTarget","img","Image","currentSrc","decode","getPlaceholderProps","placeholder","layout","backgroundColor","wrapperStyle","left","bottom","right","output","Sizer","paddingTop","maxWidth","display","alt","role","LayoutWrapper","Fragment","B","J","srcSet","decoding","Picture","sources","sizes","fallbackImage","media","PropTypes","Placeholder","_Picture$propTypes","propName","componentName","MainImage","altValidator","image","GatsbyImageHydrator","root","createRef","hydrated","r","forceRender","NODE_ENV","lazyHydrator","unobserveRef","_lazyHydrate","hasSSRHtml","querySelector","lazyHydrate","toggleIsLoaded","_setupIntersectionObserver","useCache","intersectionObserver","createIntersectionObserver","_this4","onStartLoad","wasCached","hasChanged","_this5","ssrElement","complete","Type","wStyle","wClass","wrapperProps","sizer","dangerouslySetInnerHTML","__html","suppressHydrationWarning","GatsbyImage","warn","propsKey","checkDimensionProps","validLayouts","StaticImage","GatsbyImageBrowser","imageData","__imageData","__error","LaterHydrator","wrapRootElement","camelCase","pascalCase","toUpperCase","isLastCharLower","isLastCharUpper","isLastLastCharUpper","character","preserveCamelCase","p1","_defineProperty","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","_objectSpread2","getOwnPropertyDescriptors","_objectWithoutProperties","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","MDXContext","useMDXComponents","contextComponents","allComponents","MDXProvider","DEFAULTS","inlineCode","wrapper","MDXCreateElement","propComponents","mdxType","originalType","parentName","etc","GatsbyMDXScopeContext","MDXScopeProvider","__mdxScope","componentsAndGuards","mdxPlugins","guards","guard","find","componentFromGuards","acc","MDXConsumer","componentsFromContext","scopeContexts","_possibleConstructorReturn","_inherits","createNamedContext","defaultValue","Ctx","LocationContext","LocationProvider","_temp","getContext","refs","unlisten","_props$history","componentDidCatch","info","isRedirect","_navigate","unmounted","defaultProps","ServerLocation","baseContext","locationContext","RouterImpl","_React$PureComponent","_props","_navigate2","primary","_props$component","domProps","array","child","createRoute","clone","FocusWrapper","FocusHandler","FocusContext","requestFocus","FocusHandlerImpl","initialRender","focusHandlerCount","_React$Component2","_temp2","shouldFocus","focus","myURIChanged","navigatedUpToMe","contains","activeElement","_props2","_props2$component","Comp","outline","tabIndex","k","C","_ref4","_ref5","_ref6","_props$getProps","anchorProps","encodedHref","shouldNavigate","_location$state","restState","RedirectRequest","redirectTo","RedirectImpl","_React$Component3","_props3","_props3$replace","noThrow","resolvedTo","_props4","Redirect","_ref7","Match","_ref8","_ref9","_ref10","resolvedPath","useNavigate","useParams","useMatch","stripSlashes","elementPath","condition","c","d","f","argIndex","framesToPop","_inheritsLoose"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/chunk-map.json b/docs/chunk-map.json new file mode 100644 index 00000000..4f5cb8c2 --- /dev/null +++ b/docs/chunk-map.json @@ -0,0 +1 @@ +{"polyfill":["/polyfill-f7520ff4bea0bc646454.js"],"app":["/app-e766ae6fadd89881aa4e.js"],"component---src-pages-404-tsx":["/component---src-pages-404-tsx-a77ca8e51d6d988242ad.js"],"component---src-pages-index-tsx":["/component---src-pages-index-tsx-2629ef2e079635eec707.js"]} \ No newline at end of file diff --git a/docs/component---src-pages-404-tsx-a77ca8e51d6d988242ad.js b/docs/component---src-pages-404-tsx-a77ca8e51d6d988242ad.js new file mode 100644 index 00000000..2479cc5c --- /dev/null +++ b/docs/component---src-pages-404-tsx-a77ca8e51d6d988242ad.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkanime_girls_holding_programming_books=self.webpackChunkanime_girls_holding_programming_books||[]).push([[218],{6040:function(e,n,t){t.r(n);var o=t(7294),l=t(1597),r={color:"#232129",padding:"96px",fontFamily:"-apple-system, Roboto, sans-serif, serif"},a={marginTop:0,marginBottom:64,maxWidth:320},i={marginBottom:48};n.default=function(){return o.createElement("main",{style:r},o.createElement("title",null,"Not found"),o.createElement("h1",{style:a},"Page not found"),o.createElement("p",{style:i},"Sorry"," ",o.createElement("span",{role:"img","aria-label":"Pensive emoji"},"😔")," ","we couldn’t find what you were looking for.",o.createElement("br",null),null,o.createElement("br",null),o.createElement(l.rU,{to:"/"},"Go home"),"."))}}}]); +//# sourceMappingURL=component---src-pages-404-tsx-a77ca8e51d6d988242ad.js.map \ No newline at end of file diff --git a/docs/component---src-pages-404-tsx-a77ca8e51d6d988242ad.js.map b/docs/component---src-pages-404-tsx-a77ca8e51d6d988242ad.js.map new file mode 100644 index 00000000..488c943f --- /dev/null +++ b/docs/component---src-pages-404-tsx-a77ca8e51d6d988242ad.js.map @@ -0,0 +1 @@ +{"version":3,"file":"component---src-pages-404-tsx-a77ca8e51d6d988242ad.js","mappings":"kMAIMA,EAAa,CACjBC,MAAO,UACPC,QAAS,OACTC,WAAY,4CAERC,EAAgB,CACpBC,UAAW,EACXC,aAAc,GACdC,SAAU,KAGNC,EAAkB,CACtBF,aAAc,IAqChB,UA1BqB,WACnB,OACE,wBAAMG,MAAOT,GACX,0CACA,sBAAIS,MAAOL,GAAX,kBACA,qBAAGK,MAAOD,GAAV,QACQ,IACN,wBAAME,KAAK,MAAM,aAAW,iBAA5B,MAEQ,IAJV,8CAME,2BAOI,KACJ,2BACA,gBAAC,KAAD,CAAMC,GAAG,KAAT,WAfF","sources":["webpack://anime-girls-holding-programming-books/./src/pages/404.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Link } from \"gatsby\"\n\n// styles\nconst pageStyles = {\n color: \"#232129\",\n padding: \"96px\",\n fontFamily: \"-apple-system, Roboto, sans-serif, serif\",\n}\nconst headingStyles = {\n marginTop: 0,\n marginBottom: 64,\n maxWidth: 320,\n}\n\nconst paragraphStyles = {\n marginBottom: 48,\n}\nconst codeStyles = {\n color: \"#8A6534\",\n padding: 4,\n backgroundColor: \"#FFF4DB\",\n fontSize: \"1.25rem\",\n borderRadius: 4,\n}\n\n// markup\nconst NotFoundPage = () => {\n return (\n
\n Not found\n

Page not found

\n

\n Sorry{\" \"}\n \n 😔\n {\" \"}\n we couldn’t find what you were looking for.\n
\n {process.env.NODE_ENV === \"development\" ? (\n <>\n
\n Try creating a page in src/pages/.\n
\n \n ) : null}\n
\n Go home.\n

\n
\n )\n}\n\nexport default NotFoundPage\n"],"names":["pageStyles","color","padding","fontFamily","headingStyles","marginTop","marginBottom","maxWidth","paragraphStyles","style","role","to"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/component---src-pages-index-tsx-2629ef2e079635eec707.js b/docs/component---src-pages-index-tsx-2629ef2e079635eec707.js new file mode 100644 index 00000000..2acb0ed5 --- /dev/null +++ b/docs/component---src-pages-index-tsx-2629ef2e079635eec707.js @@ -0,0 +1,3 @@ +/*! For license information please see component---src-pages-index-tsx-2629ef2e079635eec707.js.LICENSE.txt */ +(self.webpackChunkanime_girls_holding_programming_books=self.webpackChunkanime_girls_holding_programming_books||[]).push([[691],{1829:function(e,t,n){var o;!function(){"use strict";var i=!("undefined"==typeof window||!window.document||!window.document.createElement),r={canUseDOM:i,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:i&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:i&&!!window.screen};void 0===(o=function(){return r}.call(t,n,t,e))||(e.exports=o)}()},706:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.bodyOpenClassName=t.portalClassName=void 0;var o=Object.assign||function(e){for(var t=1;t0&&0===(g-=1)&&c.show(t),n.props.shouldFocusAfterRender&&(n.props.shouldReturnFocusAfterClose?(l.returnFocus(n.props.preventScroll),l.teardownScopedFocus()):l.popWithoutFocus()),n.props.onAfterClose&&n.props.onAfterClose(),p.default.deregister(n)},n.open=function(){n.beforeOpen(),n.state.afterOpen&&n.state.beforeClose?(clearTimeout(n.closeTimer),n.setState({beforeClose:!1})):(n.props.shouldFocusAfterRender&&(l.setupScopedFocus(n.node),l.markForFocusLater()),n.setState({isOpen:!0},(function(){n.openAnimationFrame=requestAnimationFrame((function(){n.setState({afterOpen:!0}),n.props.isOpen&&n.props.onAfterOpen&&n.props.onAfterOpen({overlayEl:n.overlay,contentEl:n.content})}))})))},n.close=function(){n.props.closeTimeoutMS>0?n.closeWithTimeout():n.closeWithoutTimeout()},n.focusContent=function(){return n.content&&!n.contentHasFocus()&&n.content.focus({preventScroll:!0})},n.closeWithTimeout=function(){var e=Date.now()+n.props.closeTimeoutMS;n.setState({beforeClose:!0,closesAt:e},(function(){n.closeTimer=setTimeout(n.closeWithoutTimeout,n.state.closesAt-Date.now())}))},n.closeWithoutTimeout=function(){n.setState({beforeClose:!1,isOpen:!1,afterOpen:!1,closesAt:null},n.afterClose)},n.handleKeyDown=function(e){9===e.keyCode&&(0,u.default)(n.content,e),n.props.shouldCloseOnEsc&&27===e.keyCode&&(e.stopPropagation(),n.requestClose(e))},n.handleOverlayOnClick=function(e){null===n.shouldClose&&(n.shouldClose=!0),n.shouldClose&&n.props.shouldCloseOnOverlayClick&&(n.ownerHandlesClose()?n.requestClose(e):n.focusContent()),n.shouldClose=null},n.handleContentOnMouseUp=function(){n.shouldClose=!1},n.handleOverlayOnMouseDown=function(e){n.props.shouldCloseOnOverlayClick||e.target!=n.overlay||e.preventDefault()},n.handleContentOnClick=function(){n.shouldClose=!1},n.handleContentOnMouseDown=function(){n.shouldClose=!1},n.requestClose=function(e){return n.ownerHandlesClose()&&n.props.onRequestClose(e)},n.ownerHandlesClose=function(){return n.props.onRequestClose},n.shouldBeClosed=function(){return!n.state.isOpen&&!n.state.beforeClose},n.contentHasFocus=function(){return document.activeElement===n.content||n.content.contains(document.activeElement)},n.buildClassName=function(e,t){var o="object"===(void 0===t?"undefined":i(t))?t:{base:y[e],afterOpen:y[e]+"--after-open",beforeClose:y[e]+"--before-close"},r=o.base;return n.state.afterOpen&&(r=r+" "+o.afterOpen),n.state.beforeClose&&(r=r+" "+o.beforeClose),"string"==typeof t&&t?r+" "+t:r},n.attributesFromObject=function(e,t){return Object.keys(t).reduce((function(n,o){return n[e+"-"+o]=t[o],n}),{})},n.state={afterOpen:!1,beforeClose:!1},n.shouldClose=null,n.moveFromContentToOverlay=null,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),r(t,[{key:"componentDidMount",value:function(){this.props.isOpen&&this.open()}},{key:"componentDidUpdate",value:function(e,t){this.props.isOpen&&!e.isOpen?this.open():!this.props.isOpen&&e.isOpen&&this.close(),this.props.shouldFocusAfterRender&&this.state.isOpen&&!t.isOpen&&this.focusContent()}},{key:"componentWillUnmount",value:function(){this.state.isOpen&&this.afterClose(),clearTimeout(this.closeTimer),cancelAnimationFrame(this.openAnimationFrame)}},{key:"beforeOpen",value:function(){var e=this.props,t=e.appElement,n=e.ariaHideApp,o=e.htmlOpenClassName,i=e.bodyOpenClassName;i&&d.add(document.body,i),o&&d.add(document.getElementsByTagName("html")[0],o),n&&(g+=1,c.hide(t)),p.default.register(this)}},{key:"render",value:function(){var e=this.props,t=e.id,n=e.className,i=e.overlayClassName,r=e.defaultStyles,a=e.children,s=n?{}:r.content,l=i?{}:r.overlay;if(this.shouldBeClosed())return null;var u={ref:this.setOverlayRef,className:this.buildClassName("overlay",i),style:o({},l,this.props.style.overlay),onClick:this.handleOverlayOnClick,onMouseDown:this.handleOverlayOnMouseDown},c=o({id:t,ref:this.setContentRef,style:o({},s,this.props.style.content),className:this.buildClassName("content",n),tabIndex:"-1",onKeyDown:this.handleKeyDown,onMouseDown:this.handleContentOnMouseDown,onMouseUp:this.handleContentOnMouseUp,onClick:this.handleContentOnClick,role:this.props.role,"aria-label":this.props.contentLabel},this.attributesFromObject("aria",o({modal:!0},this.props.aria)),this.attributesFromObject("data",this.props.data||{}),{"data-testid":this.props.testId}),d=this.props.contentElement(c,a);return this.props.overlayElement(u,d)}}]),t}(a.Component);b.defaultProps={style:{overlay:{},content:{}},defaultStyles:{}},b.propTypes={isOpen:s.default.bool.isRequired,defaultStyles:s.default.shape({content:s.default.object,overlay:s.default.object}),style:s.default.shape({content:s.default.object,overlay:s.default.object}),className:s.default.oneOfType([s.default.string,s.default.object]),overlayClassName:s.default.oneOfType([s.default.string,s.default.object]),bodyOpenClassName:s.default.string,htmlOpenClassName:s.default.string,ariaHideApp:s.default.bool,appElement:s.default.oneOfType([s.default.instanceOf(f.default),s.default.instanceOf(h.SafeHTMLCollection),s.default.instanceOf(h.SafeNodeList),s.default.arrayOf(s.default.instanceOf(f.default))]),onAfterOpen:s.default.func,onAfterClose:s.default.func,onRequestClose:s.default.func,closeTimeoutMS:s.default.number,shouldFocusAfterRender:s.default.bool,shouldCloseOnOverlayClick:s.default.bool,shouldReturnFocusAfterClose:s.default.bool,preventScroll:s.default.bool,role:s.default.string,contentLabel:s.default.string,aria:s.default.object,data:s.default.object,children:s.default.node,shouldCloseOnEsc:s.default.bool,overlayRef:s.default.func,contentRef:s.default.func,id:s.default.string,overlayElement:s.default.func,contentElement:s.default.func,testId:s.default.string},t.default=b,e.exports=t.default},1241:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resetState=function(){s&&(s.removeAttribute?s.removeAttribute("aria-hidden"):null!=s.length?s.forEach((function(e){return e.removeAttribute("aria-hidden")})):document.querySelectorAll(s).forEach((function(e){return e.removeAttribute("aria-hidden")})));s=null},t.log=function(){0},t.assertNodeList=l,t.setElement=function(e){var t=e;if("string"==typeof t&&a.canUseDOM){var n=document.querySelectorAll(t);l(n,t),t=n}return s=t||s},t.validateElement=u,t.hide=function(e){var t=!0,n=!1,o=void 0;try{for(var i,r=u(e)[Symbol.iterator]();!(t=(i=r.next()).done);t=!0){i.value.setAttribute("aria-hidden","true")}}catch(a){n=!0,o=a}finally{try{!t&&r.return&&r.return()}finally{if(n)throw o}}},t.show=function(e){var t=!0,n=!1,o=void 0;try{for(var i,r=u(e)[Symbol.iterator]();!(t=(i=r.next()).done);t=!0){i.value.removeAttribute("aria-hidden")}}catch(a){n=!0,o=a}finally{try{!t&&r.return&&r.return()}finally{if(n)throw o}}},t.documentNotReadyOrSSRTesting=function(){s=null};var o,i=n(2473),r=(o=i)&&o.__esModule?o:{default:o},a=n(4941);var s=null;function l(e,t){if(!e||!e.length)throw new Error("react-modal: No elements were found for selector "+t+".")}function u(e){var t=e||s;return t?Array.isArray(t)||t instanceof HTMLCollection||t instanceof NodeList?t:[t]:((0,r.default)(!1,["react-modal: App element is not defined.","Please use `Modal.setAppElement(el)` or set `appElement={el}`.","This is needed so screen readers don't see main content","when modal is opened. It is not recommended, but you can opt-out","by setting `ariaHideApp={false}`."].join(" ")),[])}},9088:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resetState=function(){for(var e=[a,s],t=0;t0?(document.body.firstChild!==a&&document.body.insertBefore(a,document.body.firstChild),document.body.lastChild!==s&&document.body.appendChild(s)):(a.parentElement&&a.parentElement.removeChild(a),s.parentElement&&s.parentElement.removeChild(s))}))},1598:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resetState=function(){var e=document.getElementsByTagName("html")[0];for(var t in n)i(e,n[t]);var r=document.body;for(var a in o)i(r,o[a]);n={},o={}},t.log=function(){0};var n={},o={};function i(e,t){e.classList.remove(t)}t.add=function(e,t){return i=e.classList,r="html"==e.nodeName.toLowerCase()?n:o,void t.split(" ").forEach((function(e){!function(e,t){e[t]||(e[t]=0),e[t]+=1}(r,e),i.add(e)}));var i,r},t.remove=function(e,t){return i=e.classList,r="html"==e.nodeName.toLowerCase()?n:o,void t.split(" ").forEach((function(e){!function(e,t){e[t]&&(e[t]-=1)}(r,e),0===r[e]&&i.remove(e)}));var i,r}},1195:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.resetState=function(){a=[]},t.log=function(){0},t.handleBlur=u,t.handleFocus=c,t.markForFocusLater=function(){a.push(document.activeElement)},t.returnFocus=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=null;try{return void(0!==a.length&&(t=a.pop()).focus({preventScroll:e}))}catch(n){console.warn(["You tried to return focus to",t,"but it is not in the DOM anymore"].join(" "))}},t.popWithoutFocus=function(){a.length>0&&a.pop()},t.setupScopedFocus=function(e){s=e,window.addEventListener?(window.addEventListener("blur",u,!1),document.addEventListener("focus",c,!0)):(window.attachEvent("onBlur",u),document.attachEvent("onFocus",c))},t.teardownScopedFocus=function(){s=null,window.addEventListener?(window.removeEventListener("blur",u),document.removeEventListener("focus",c)):(window.detachEvent("onBlur",u),document.detachEvent("onFocus",c))};var o,i=n(2521),r=(o=i)&&o.__esModule?o:{default:o};var a=[],s=null,l=!1;function u(){l=!0}function c(){if(l){if(l=!1,!s)return;setTimeout((function(){s.contains(document.activeElement)||((0,r.default)(s)[0]||s).focus()}),0)}}},3942:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.log=function(){console.log("portalOpenInstances ----------"),console.log(o.openInstances.length),o.openInstances.forEach((function(e){return console.log(e)})),console.log("end portalOpenInstances ----------")},t.resetState=function(){o=new n};var n=function e(){var t=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.register=function(e){-1===t.openInstances.indexOf(e)&&(t.openInstances.push(e),t.emit("register"))},this.deregister=function(e){var n=t.openInstances.indexOf(e);-1!==n&&(t.openInstances.splice(n,1),t.emit("deregister"))},this.subscribe=function(e){t.subscribers.push(e)},this.emit=function(e){t.subscribers.forEach((function(n){return n(e,t.openInstances.slice())}))},this.openInstances=[],this.subscribers=[]},o=new n;t.default=o},4941:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.canUseDOM=t.SafeNodeList=t.SafeHTMLCollection=void 0;var o,i=n(1829);var r=((o=i)&&o.__esModule?o:{default:o}).default,a=r.canUseDOM?window.HTMLElement:{};t.SafeHTMLCollection=r.canUseDOM?window.HTMLCollection:{},t.SafeNodeList=r.canUseDOM?window.NodeList:{},t.canUseDOM=r.canUseDOM;t.default=a},9204:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=(0,r.default)(e);if(!n.length)return void t.preventDefault();var o=void 0,i=t.shiftKey,s=n[0],l=n[n.length-1],u=a();if(e===u){if(!i)return;o=l}l!==u||i||(o=s);s===u&&i&&(o=l);if(o)return t.preventDefault(),void o.focus();var c=/(\bChrome\b|\bSafari\b)\//.exec(navigator.userAgent);if(null==c||"Chrome"==c[1]||null!=/\biPod\b|\biPad\b/g.exec(navigator.userAgent))return;var d=n.indexOf(u);d>-1&&(d+=i?-1:1);if(void 0===(o=n[d]))return t.preventDefault(),void(o=i?l:s).focus();t.preventDefault(),o.focus()};var o,i=n(2521),r=(o=i)&&o.__esModule?o:{default:o};function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;return e.activeElement.shadowRoot?a(e.activeElement.shadowRoot):e.activeElement}e.exports=t.default},2521:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function e(t){var n=[].slice.call(t.querySelectorAll("*"),0).reduce((function(t,n){return t.concat(n.shadowRoot?e(n.shadowRoot):[n])}),[]);return n.filter(r)};var n=/input|select|textarea|button|object/;function o(e){var t=e.offsetWidth<=0&&e.offsetHeight<=0;if(t&&!e.innerHTML)return!0;try{var n=window.getComputedStyle(e);return t?"visible"!==n.getPropertyValue("overflow")||e.scrollWidth<=0&&e.scrollHeight<=0:"none"==n.getPropertyValue("display")}catch(o){return console.warn("Failed to inspect element style"),!1}}function i(e,t){var i=e.nodeName.toLowerCase();return(n.test(i)&&!e.disabled||"a"===i&&e.href||t)&&function(e){for(var t=e,n=e.getRootNode&&e.getRootNode();t&&t!==document.body;){if(n&&t===n&&(t=n.host.parentNode),o(t))return!1;t=t.parentNode}return!0}(e)}function r(e){var t=e.getAttribute("tabindex");null===t&&(t=void 0);var n=isNaN(t);return(n||t>=0)&&i(e,!n)}e.exports=t.default},5736:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o,i=n(706),r=(o=i)&&o.__esModule?o:{default:o};t.default=r.default,e.exports=t.default},422:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return j}});var o=n(7294),i=n(5736),r=n.n(i);function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function s(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,o=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:null;if(!e)return"";var n=e;return t&&Object.keys(t).forEach((function(e){n=n.replace(e,t[e])})),n}function C(){return void 0!==n.g.window?n.g.window.innerWidth:0}var O=function(){try{return n.g.window.location.hostname!==n.g.window.parent.location.hostname}catch(e){return!0}};function E(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:n.g.window.self;return e===n.g.window.top||O()?e:E(e.parent)}var S=300,k=27,M=37,_=39,T=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&h(e,t)}(p,e);var t,i,a,d=m(p);function p(e){var t;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,p),(t=d.call(this,e)).state={isClosing:!e.animationDisabled,shouldAnimate:!1,zoomLevel:0,offsetX:0,offsetY:0,loadErrorStatus:{}},t.outerEl=o.createRef(),t.zoomInBtn=o.createRef(),t.zoomOutBtn=o.createRef(),t.caption=o.createRef(),t.closeIfClickInner=t.closeIfClickInner.bind(f(t)),t.handleImageDoubleClick=t.handleImageDoubleClick.bind(f(t)),t.handleImageMouseWheel=t.handleImageMouseWheel.bind(f(t)),t.handleKeyInput=t.handleKeyInput.bind(f(t)),t.handleMouseUp=t.handleMouseUp.bind(f(t)),t.handleMouseDown=t.handleMouseDown.bind(f(t)),t.handleMouseMove=t.handleMouseMove.bind(f(t)),t.handleOuterMousewheel=t.handleOuterMousewheel.bind(f(t)),t.handleTouchStart=t.handleTouchStart.bind(f(t)),t.handleTouchMove=t.handleTouchMove.bind(f(t)),t.handleTouchEnd=t.handleTouchEnd.bind(f(t)),t.handlePointerEvent=t.handlePointerEvent.bind(f(t)),t.handleCaptionMousewheel=t.handleCaptionMousewheel.bind(f(t)),t.handleWindowResize=t.handleWindowResize.bind(f(t)),t.handleZoomInButtonClick=t.handleZoomInButtonClick.bind(f(t)),t.handleZoomOutButtonClick=t.handleZoomOutButtonClick.bind(f(t)),t.requestClose=t.requestClose.bind(f(t)),t.requestMoveNext=t.requestMoveNext.bind(f(t)),t.requestMovePrev=t.requestMovePrev.bind(f(t)),t.timeouts=[],t.currentAction=0,t.eventsSource=0,t.pointerList=[],t.preventInnerClose=!1,t.preventInnerCloseTimeout=null,t.keyPressed=!1,t.imageCache={},t.lastKeyDownTime=0,t.resizeTimeout=null,t.wheelActionTimeout=null,t.resetScrollTimeout=null,t.scrollX=0,t.scrollY=0,t.moveStartX=0,t.moveStartY=0,t.moveStartOffsetX=0,t.moveStartOffsetY=0,t.swipeStartX=0,t.swipeStartY=0,t.swipeEndX=0,t.swipeEndY=0,t.pinchTouchList=null,t.pinchDistance=0,t.keyCounter=0,t.moveRequested=!1,t}return t=p,i=[{key:"componentDidMount",value:function(){var e=this;this.props.animationDisabled||this.setState({isClosing:!1}),this.windowContext=E(),this.listeners={resize:this.handleWindowResize,mouseup:this.handleMouseUp,touchend:this.handleTouchEnd,touchcancel:this.handleTouchEnd,pointerdown:this.handlePointerEvent,pointermove:this.handlePointerEvent,pointerup:this.handlePointerEvent,pointercancel:this.handlePointerEvent},Object.keys(this.listeners).forEach((function(t){e.windowContext.addEventListener(t,e.listeners[t])})),this.loadAllImages()}},{key:"shouldComponentUpdate",value:function(e){var t=this;return this.getSrcTypes().forEach((function(n){t.props[n.name]!==e[n.name]&&(t.moveRequested=!1)})),!this.moveRequested}},{key:"componentDidUpdate",value:function(e){var t=this,n=!1,o={},i={};this.getSrcTypes().forEach((function(r){e[r.name]!==t.props[r.name]&&(n=!0,o[e[r.name]]=!0,i[t.props[r.name]]=!0)})),(n||this.moveRequested)&&(Object.keys(o).forEach((function(e){!(e in i)&&e in t.imageCache&&(t.imageCache[e].loaded=!1)})),this.moveRequested=!1,this.loadAllImages(this.props))}},{key:"componentWillUnmount",value:function(){var e=this;this.didUnmount=!0,Object.keys(this.listeners).forEach((function(t){e.windowContext.removeEventListener(t,e.listeners[t])})),this.timeouts.forEach((function(e){return clearTimeout(e)}))}},{key:"setTimeout",value:function(e){function t(t,n){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e,t){var n=this,o=setTimeout((function(){n.timeouts=n.timeouts.filter((function(e){return e!==o})),e()}),t);return this.timeouts.push(o),o}))},{key:"setPreventInnerClose",value:function(){var e=this;this.preventInnerCloseTimeout&&this.clearTimeout(this.preventInnerCloseTimeout),this.preventInnerClose=!0,this.preventInnerCloseTimeout=this.setTimeout((function(){e.preventInnerClose=!1,e.preventInnerCloseTimeout=null}),100)}},{key:"getBestImageForType",value:function(e){var t=this.props[e],n={};if(this.isImageLoaded(t))n=this.getFitSizes(this.imageCache[t].width,this.imageCache[t].height);else{if(!this.isImageLoaded(this.props["".concat(e,"Thumbnail")]))return null;t=this.props["".concat(e,"Thumbnail")],n=this.getFitSizes(this.imageCache[t].width,this.imageCache[t].height,!0)}return{src:t,height:this.imageCache[t].height,width:this.imageCache[t].width,targetHeight:n.height,targetWidth:n.width}}},{key:"getFitSizes",value:function(e,t,n){var o=this.getLightboxRect(),i=o.height-2*this.props.imagePadding,r=o.width-2*this.props.imagePadding;return n||(i=Math.min(i,t),r=Math.min(r,e)),r/i>e/t?{width:e*i/t,height:i}:{width:r,height:t*r/e}}},{key:"getMaxOffsets",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.zoomLevel,t=this.getBestImageForType("mainSrc");if(null===t)return{maxX:0,minX:0,maxY:0,minY:0};var n=this.getLightboxRect(),o=this.getZoomMultiplier(e),i=0,r=0;return{maxX:i=o*t.width-n.width<0?(n.width-o*t.width)/2:(o*t.width-n.width)/2,maxY:r=o*t.height-n.height<0?(n.height-o*t.height)/2:(o*t.height-n.height)/2,minX:-1*i,minY:-1*r}}},{key:"getSrcTypes",value:function(){return[{name:"mainSrc",keyEnding:"i".concat(this.keyCounter)},{name:"mainSrcThumbnail",keyEnding:"t".concat(this.keyCounter)},{name:"nextSrc",keyEnding:"i".concat(this.keyCounter+1)},{name:"nextSrcThumbnail",keyEnding:"t".concat(this.keyCounter+1)},{name:"prevSrc",keyEnding:"i".concat(this.keyCounter-1)},{name:"prevSrcThumbnail",keyEnding:"t".concat(this.keyCounter-1)}]}},{key:"getZoomMultiplier",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.zoomLevel;return Math.pow(1.007,e)}},{key:"getLightboxRect",value:function(){return this.outerEl.current?this.outerEl.current.getBoundingClientRect():{width:C(),height:void 0!==n.g.window?n.g.window.innerHeight:0,top:0,right:0,bottom:0,left:0}}},{key:"clearTimeout",value:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}((function(e){this.timeouts=this.timeouts.filter((function(t){return t!==e})),clearTimeout(e)}))},{key:"changeZoom",value:function(e,t,n){if(this.props.enableZoom){var o=Math.max(0,Math.min(S,e));if(o!==this.state.zoomLevel)if(0!==o){var i=this.getBestImageForType("mainSrc");if(null!==i){var r=this.getZoomMultiplier(),a=this.getZoomMultiplier(o),s=this.getLightboxRect(),l=void 0!==t?t-s.left:s.width/2,u=void 0!==n?n-s.top:s.height/2,c=(s.width-i.width*r)/2,d=(s.height-i.height*r)/2,h=l-(l-(c-this.state.offsetX))/r*a,f=u-(u-(d-this.state.offsetY))/r*a,p=(s.width-i.width*a)/2-h,m=(s.height-i.height*a)/2-f;if(3!==this.currentAction){var v=this.getMaxOffsets();this.state.zoomLevel>o&&(p=Math.max(v.minX,Math.min(v.maxX,p)),m=Math.max(v.minY,Math.min(v.maxY,m)))}this.setState({zoomLevel:o,offsetX:p,offsetY:m})}}else this.setState({zoomLevel:o,offsetX:0,offsetY:0})}}},{key:"closeIfClickInner",value:function(e){!this.preventInnerClose&&e.target.className.search(/\bril-inner\b/)>-1&&this.requestClose(e)}},{key:"handleKeyInput",value:function(e){if(e.stopPropagation(),!this.isAnimating())if("keyup"!==e.type){var t=e.which||e.keyCode,n=new Date;if(!(n.getTime()-this.lastKeyDownTime=200||e.deltaX>=100?(this.requestMoveNext(e),n=500,this.scrollX=0):(this.scrollX<=-200||e.deltaX<=-100)&&(this.requestMovePrev(e),n=500,this.scrollX=0)),0!==n&&(this.wheelActionTimeout=this.setTimeout((function(){t.wheelActionTimeout=null}),n)))}},{key:"handleImageMouseWheel",value:function(e){if(Math.abs(e.deltaY)>=Math.abs(e.deltaX)){if(e.stopPropagation(),Math.abs(e.deltaY)<1)return;this.scrollX=0,this.scrollY+=e.deltaY,this.changeZoom(this.state.zoomLevel-e.deltaY,e.clientX,e.clientY)}}},{key:"handleImageDoubleClick",value:function(e){this.state.zoomLevel>0?this.changeZoom(0,e.clientX,e.clientY):this.changeZoom(this.state.zoomLevel+100,e.clientX,e.clientY)}},{key:"shouldHandleEvent",value:function(e){if(this.eventsSource===e)return!0;if(0===this.eventsSource)return this.eventsSource=e,!0;switch(e){case 1:default:return!1;case 2:return this.eventsSource=2,this.filterPointersBySource(),!0;case 3:return 1===this.eventsSource&&(this.eventsSource=3,this.filterPointersBySource(),!0)}}},{key:"addPointer",value:function(e){this.pointerList.push(e)}},{key:"removePointer",value:function(e){this.pointerList=this.pointerList.filter((function(t){return t.id!==e.id}))}},{key:"filterPointersBySource",value:function(){var e=this;this.pointerList=this.pointerList.filter((function(t){return t.source===e.eventsSource}))}},{key:"handleMouseDown",value:function(e){this.shouldHandleEvent(1)&&p.isTargetMatchImage(e.target)&&(this.addPointer(p.parseMouseEvent(e)),this.multiPointerStart(e))}},{key:"handleMouseMove",value:function(e){this.shouldHandleEvent(1)&&this.multiPointerMove(e,[p.parseMouseEvent(e)])}},{key:"handleMouseUp",value:function(e){this.shouldHandleEvent(1)&&(this.removePointer(p.parseMouseEvent(e)),this.multiPointerEnd(e))}},{key:"handlePointerEvent",value:function(e){if(this.shouldHandleEvent(3))switch(e.type){case"pointerdown":p.isTargetMatchImage(e.target)&&(this.addPointer(p.parsePointerEvent(e)),this.multiPointerStart(e));break;case"pointermove":this.multiPointerMove(e,[p.parsePointerEvent(e)]);break;case"pointerup":case"pointercancel":this.removePointer(p.parsePointerEvent(e)),this.multiPointerEnd(e)}}},{key:"handleTouchStart",value:function(e){var t=this;this.shouldHandleEvent(2)&&p.isTargetMatchImage(e.target)&&([].forEach.call(e.changedTouches,(function(e){return t.addPointer(p.parseTouchPointer(e))})),this.multiPointerStart(e))}},{key:"handleTouchMove",value:function(e){this.shouldHandleEvent(2)&&this.multiPointerMove(e,[].map.call(e.changedTouches,(function(e){return p.parseTouchPointer(e)})))}},{key:"handleTouchEnd",value:function(e){var t=this;this.shouldHandleEvent(2)&&([].map.call(e.changedTouches,(function(e){return t.removePointer(p.parseTouchPointer(e))})),this.multiPointerEnd(e))}},{key:"decideMoveOrSwipe",value:function(e){this.state.zoomLevel<=0?this.handleSwipeStart(e):this.handleMoveStart(e)}},{key:"multiPointerStart",value:function(e){switch(this.handleEnd(null),this.pointerList.length){case 1:e.preventDefault(),this.decideMoveOrSwipe(this.pointerList[0]);break;case 2:e.preventDefault(),this.handlePinchStart(this.pointerList)}}},{key:"multiPointerMove",value:function(e,t){switch(this.currentAction){case 1:e.preventDefault(),this.handleMove(t[0]);break;case 2:e.preventDefault(),this.handleSwipe(t[0]);break;case 3:e.preventDefault(),this.handlePinch(t)}}},{key:"multiPointerEnd",value:function(e){switch(0!==this.currentAction&&(this.setPreventInnerClose(),this.handleEnd(e)),this.pointerList.length){case 0:this.eventsSource=0;break;case 1:e.preventDefault(),this.decideMoveOrSwipe(this.pointerList[0]);break;case 2:e.preventDefault(),this.handlePinchStart(this.pointerList)}}},{key:"handleEnd",value:function(e){switch(this.currentAction){case 1:this.handleMoveEnd(e);break;case 2:this.handleSwipeEnd(e);break;case 3:this.handlePinchEnd(e)}}},{key:"handleMoveStart",value:function(e){var t=e.x,n=e.y;this.props.enableZoom&&(this.currentAction=1,this.moveStartX=t,this.moveStartY=n,this.moveStartOffsetX=this.state.offsetX,this.moveStartOffsetY=this.state.offsetY)}},{key:"handleMove",value:function(e){var t=e.x,n=e.y,o=this.moveStartX-t+this.moveStartOffsetX,i=this.moveStartY-n+this.moveStartOffsetY;this.state.offsetX===o&&this.state.offsetY===i||this.setState({offsetX:o,offsetY:i})}},{key:"handleMoveEnd",value:function(){var e=this;this.currentAction=0,this.moveStartX=0,this.moveStartY=0,this.moveStartOffsetX=0,this.moveStartOffsetY=0;var t=this.getMaxOffsets(),n=Math.max(t.minX,Math.min(t.maxX,this.state.offsetX)),o=Math.max(t.minY,Math.min(t.maxY,this.state.offsetY));n===this.state.offsetX&&o===this.state.offsetY||(this.setState({offsetX:n,offsetY:o,shouldAnimate:!0}),this.setTimeout((function(){e.setState({shouldAnimate:!1})}),this.props.animationDuration))}},{key:"handleSwipeStart",value:function(e){var t=e.x,n=e.y;this.currentAction=2,this.swipeStartX=t,this.swipeStartY=n,this.swipeEndX=t,this.swipeEndY=n}},{key:"handleSwipe",value:function(e){var t=e.x,n=e.y;this.swipeEndX=t,this.swipeEndY=n}},{key:"handleSwipeEnd",value:function(e){var t=this.swipeEndX-this.swipeStartX,n=Math.abs(t),o=Math.abs(this.swipeEndY-this.swipeStartY);if(this.currentAction=0,this.swipeStartX=0,this.swipeStartY=0,this.swipeEndX=0,this.swipeEndY=0,!(!e||this.isAnimating()||n<1.5*o)){if(n<200&&n0&&this.props.prevSrc?(e.preventDefault(),this.requestMovePrev()):t<0&&this.props.nextSrc&&(e.preventDefault(),this.requestMoveNext())}}},{key:"calculatePinchDistance",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pinchTouchList,t=v(e,2),n=t[0],o=t[1];return Math.sqrt(Math.pow(n.x-o.x,2)+Math.pow(n.y-o.y,2))}},{key:"calculatePinchCenter",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.pinchTouchList,t=v(e,2),n=t[0],o=t[1];return{x:n.x-(n.x-o.x)/2,y:n.y-(n.y-o.y)/2}}},{key:"handlePinchStart",value:function(e){this.props.enableZoom&&(this.currentAction=3,this.pinchTouchList=e.map((function(e){return{id:e.id,x:e.x,y:e.y}})),this.pinchDistance=this.calculatePinchDistance())}},{key:"handlePinch",value:function(e){this.pinchTouchList=this.pinchTouchList.map((function(t){for(var n=0;n0&&t+i>=o||e.deltaY<0&&i<=0)&&e.preventDefault()}}},{key:"isAnimating",value:function(){return this.state.shouldAnimate||this.state.isClosing}},{key:"isImageLoaded",value:function(e){return e&&e in this.imageCache&&this.imageCache[e].loaded}},{key:"loadImage",value:function(e,t,o){var i=this;if(this.isImageLoaded(t))this.setTimeout((function(){o()}),1);else{var r=new n.g.Image;this.props.imageCrossOrigin&&(r.crossOrigin=this.props.imageCrossOrigin),r.onerror=function(n){i.props.onImageLoadError(t,e,n),i.setState((function(t){return{loadErrorStatus:s(s({},t.loadErrorStatus),{},u({},e,!0))}})),o(n)},r.onload=function(){i.props.onImageLoad(t,e,r),i.imageCache[t]={loaded:!0,width:r.width,height:r.height},o()},r.src=t}}},{key:"loadAllImages",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.props,n=function(t,n){return function(o){o||e.props[t]!==n||e.didUnmount||e.forceUpdate()}};this.getSrcTypes().forEach((function(o){var i=o.name;t[i]&&e.state.loadErrorStatus[i]&&e.setState((function(e){return{loadErrorStatus:s(s({},e.loadErrorStatus),{},u({},i,!1))}})),t[i]&&!e.isImageLoaded(t[i])&&e.loadImage(i,t[i],n(i,t[i]))}))}},{key:"requestClose",value:function(e){var t=this,n=function(){return t.props.onCloseRequest(e)};this.props.animationDisabled||"keydown"===e.type&&!this.props.animationOnKeyInput?n():(this.setState({isClosing:!0}),this.setTimeout(n,this.props.animationDuration))}},{key:"requestMove",value:function(e,t){var n=this,o={zoomLevel:0,offsetX:0,offsetY:0};this.props.animationDisabled||this.keyPressed&&!this.props.animationOnKeyInput||(o.shouldAnimate=!0,this.setTimeout((function(){return n.setState({shouldAnimate:!1})}),this.props.animationDuration)),this.keyPressed=!1,this.moveRequested=!0,"prev"===e?(this.keyCounter-=1,this.setState(o),this.props.onMovePrevRequest(t)):(this.keyCounter+=1,this.setState(o),this.props.onMoveNextRequest(t))}},{key:"requestMoveNext",value:function(e){this.requestMove("next",e)}},{key:"requestMovePrev",value:function(e){this.requestMove("prev",e)}},{key:"render",value:function(){var e=this,t=this.props,i=t.animationDisabled,a=t.animationDuration,l=t.clickOutsideToClose,u=t.discourageDownloads,d=t.enableZoom,h=t.imageTitle,f=t.nextSrc,m=t.prevSrc,v=t.toolbarButtons,g=t.reactModalStyle,b=t.onAfterOpen,C=t.imageCrossOrigin,O=t.reactModalProps,E=t.loader,k=this.state,M=k.zoomLevel,_=k.offsetX,T=k.offsetY,P=k.isClosing,x=k.loadErrorStatus,I=this.getLightboxRect(),N={};!i&&this.isAnimating()&&(N=s(s({},N),{},{transition:"transform ".concat(a,"ms")}));var L={};this.getSrcTypes().forEach((function(e){var t=e.name,n=e.keyEnding;L[t]=n}));var D=[],A=function(t,n,i){if(e.props[t]){var r,a=e.getBestImageForType(t),l=s(s({},N),p.getTransform(s(s({},i),a)));if(M>0&&(l.cursor="move"),null===a&&(r=x,Object.keys(r).some((function(e){return r[e]}))))D.push(o.createElement("div",{className:"".concat(n," ril__image ril-errored"),style:l,key:e.props[t]+L[t]},o.createElement("div",{className:"ril__errorContainer"},e.props.imageLoadErrorMessage)));else if(null!==a){var d=a.src;u?(l.backgroundImage="url('".concat(d,"')"),D.push(o.createElement("div",{className:"".concat(n," ril__image ril__imageDiscourager"),onDoubleClick:e.handleImageDoubleClick,onWheel:e.handleImageMouseWheel,style:l,key:d+L[t]},o.createElement("div",{className:"ril-download-blocker ril__downloadBlocker"})))):D.push(o.createElement("img",c({},C?{crossOrigin:C}:{},{className:"".concat(n," ril__image"),onDoubleClick:e.handleImageDoubleClick,onWheel:e.handleImageMouseWheel,onDragStart:function(e){return e.preventDefault()},style:l,src:d,key:d+L[t],alt:"string"==typeof h?h:w("Image"),draggable:!1})))}else{var f=void 0!==E?E:o.createElement("div",{className:"ril-loading-circle ril__loadingCircle ril__loadingContainer__icon"},y(new Array(12)).map((function(e,t){return o.createElement("div",{key:t,className:"ril-loading-circle-point ril__loadingCirclePoint"})})));D.push(o.createElement("div",{className:"".concat(n," ril__image ril-not-loaded"),style:l,key:e.props[t]+L[t]},o.createElement("div",{className:"ril__loadingContainer"},f)))}}},R=this.getZoomMultiplier();A("nextSrc","ril-image-next ril__imageNext",{x:I.width}),A("mainSrc","ril-image-current",{x:-1*_,y:-1*T,zoom:R}),A("prevSrc","ril-image-prev ril__imagePrev",{x:-1*I.width});var j={overlay:s({zIndex:1e3,backgroundColor:"transparent"},g.overlay),content:s({backgroundColor:"transparent",overflow:"hidden",border:"none",borderRadius:0,padding:0,top:0,left:0,right:0,bottom:0},g.content)};return o.createElement(r(),c({isOpen:!0,onRequestClose:l?this.requestClose:void 0,onAfterOpen:function(){e.outerEl.current&&e.outerEl.current.focus(),b()},style:j,contentLabel:w("Lightbox"),appElement:void 0!==n.g.window?n.g.window.document.body:void 0},O),o.createElement("div",{className:"ril-outer ril__outer ril__outerAnimating ".concat(this.props.wrapperClassName," ").concat(P?"ril-closing ril__outerClosing":""),style:{transition:"opacity ".concat(a,"ms"),animationDuration:"".concat(a,"ms"),animationDirection:P?"normal":"reverse"},ref:this.outerEl,onWheel:this.handleOuterMousewheel,onMouseMove:this.handleMouseMove,onMouseDown:this.handleMouseDown,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,tabIndex:"-1",onKeyDown:this.handleKeyInput,onKeyUp:this.handleKeyInput},o.createElement("div",{className:"ril-inner ril__inner",onClick:l?this.closeIfClickInner:void 0},D),m&&o.createElement("button",{type:"button",className:"ril-prev-button ril__navButtons ril__navButtonPrev",key:"prev","aria-label":this.props.prevLabel,title:this.props.prevLabel,onClick:this.isAnimating()?void 0:this.requestMovePrev}),f&&o.createElement("button",{type:"button",className:"ril-next-button ril__navButtons ril__navButtonNext",key:"next","aria-label":this.props.nextLabel,title:this.props.nextLabel,onClick:this.isAnimating()?void 0:this.requestMoveNext}),o.createElement("div",{className:"ril-toolbar ril__toolbar"},o.createElement("ul",{className:"ril-toolbar-left ril__toolbarSide ril__toolbarLeftSide"},o.createElement("li",{className:"ril-toolbar__item ril__toolbarItem"},o.createElement("span",{className:"ril-toolbar__item__child ril__toolbarItemChild"},h))),o.createElement("ul",{className:"ril-toolbar-right ril__toolbarSide ril__toolbarRightSide"},v&&v.map((function(e,t){return o.createElement("li",{key:"button_".concat(t+1),className:"ril-toolbar__item ril__toolbarItem"},e)})),d&&o.createElement("li",{className:"ril-toolbar__item ril__toolbarItem"},o.createElement("button",{type:"button",key:"zoom-in","aria-label":this.props.zoomInLabel,title:this.props.zoomInLabel,className:["ril-zoom-in","ril__toolbarItemChild","ril__builtinButton","ril__zoomInButton"].concat(y(M===S?["ril__builtinButtonDisabled"]:[])).join(" "),ref:this.zoomInBtn,disabled:this.isAnimating()||M===S,onClick:this.isAnimating()||M===S?void 0:this.handleZoomInButtonClick})),d&&o.createElement("li",{className:"ril-toolbar__item ril__toolbarItem"},o.createElement("button",{type:"button",key:"zoom-out","aria-label":this.props.zoomOutLabel,title:this.props.zoomOutLabel,className:["ril-zoom-out","ril__toolbarItemChild","ril__builtinButton","ril__zoomOutButton"].concat(y(0===M?["ril__builtinButtonDisabled"]:[])).join(" "),ref:this.zoomOutBtn,disabled:this.isAnimating()||0===M,onClick:this.isAnimating()||0===M?void 0:this.handleZoomOutButtonClick})),o.createElement("li",{className:"ril-toolbar__item ril__toolbarItem"},o.createElement("button",{type:"button",key:"close","aria-label":this.props.closeLabel,title:this.props.closeLabel,className:"ril-close ril-toolbar__item__child ril__toolbarItemChild ril__builtinButton ril__closeButton",onClick:this.isAnimating()?void 0:this.requestClose})))),this.props.imageCaption&&o.createElement("div",{onWheel:this.handleCaptionMousewheel,onMouseDown:function(e){return e.stopPropagation()},className:"ril-caption ril__caption",ref:this.caption},o.createElement("div",{className:"ril-caption-content ril__captionContent"},this.props.imageCaption))))}}],a=[{key:"isTargetMatchImage",value:function(e){return e&&/ril-image-current/.test(e.className)}},{key:"parseMouseEvent",value:function(e){return{id:"mouse",source:1,x:parseInt(e.clientX,10),y:parseInt(e.clientY,10)}}},{key:"parseTouchPointer",value:function(e){return{id:e.identifier,source:2,x:parseInt(e.clientX,10),y:parseInt(e.clientY,10)}}},{key:"parsePointerEvent",value:function(e){return{id:e.pointerId,source:3,x:parseInt(e.clientX,10),y:parseInt(e.clientY,10)}}},{key:"getTransform",value:function(e){var t=e.x,n=void 0===t?0:t,o=e.y,i=void 0===o?0:o,r=e.zoom,a=void 0===r?1:r,s=e.width,l=e.targetWidth,u=n,c=C();s>c&&(u+=(c-s)/2);var d=a*(l/s);return{transform:"translate3d(".concat(u,"px,").concat(i,"px,0) scale3d(").concat(d,",").concat(d,",1)")}}}],i&&l(t.prototype,i),a&&l(t,a),p}(o.Component);T.defaultProps={imageTitle:null,imageCaption:null,toolbarButtons:null,reactModalProps:{},animationDisabled:!1,animationDuration:300,animationOnKeyInput:!1,clickOutsideToClose:!0,closeLabel:"Close lightbox",discourageDownloads:!1,enableZoom:!0,imagePadding:10,imageCrossOrigin:null,keyRepeatKeyupBonus:40,keyRepeatLimit:180,mainSrcThumbnail:null,nextLabel:"Next image",nextSrc:null,nextSrcThumbnail:null,onAfterOpen:function(){},onImageLoadError:function(){},onImageLoad:function(){},onMoveNextRequest:function(){},onMovePrevRequest:function(){},prevLabel:"Previous image",prevSrc:null,prevSrcThumbnail:null,reactModalStyle:{},wrapperClassName:"",zoomInLabel:"Zoom in",zoomOutLabel:"Zoom out",imageLoadErrorMessage:"This image failed to load",loader:void 0};var P=T,x=n(396),I=function(e){var t=e.image,n=e.onClick,i=(0,x.d)(t);return o.createElement("div",{key:t.id,className:"relative group col-span-1 h-96",onClick:n},o.createElement("div",{className:" absolute w-full h-full bg-indigo-400 bg-opacity-0 group-hover:bg-opacity-80 transition-all duration-700 z-10 top-0 left-0 p-4 overflow-clip "},o.createElement("span",{className:"text-transparent group-hover:text-white transition-color duration-700 tracking-wide text-md capitalize"},o.createElement("span",{className:"mr-1"},"Filename: "),o.createElement("span",{className:"break-all"},t.name.replace(/_/g," ")))),o.createElement(x.G,{className:"h-full",image:i,alt:t.name,title:t.name,height:"100%",width:"100%"}))},N=n(1597),L={color:"#232129",padding:96,fontFamily:"-apple-system, Roboto, sans-serif, serif"},D=(0,o.createContext)(void 0),A=function(e){var t=e.children,n=(0,N.K2)("2393037133"),i=(0,N.K2)("3656238765").allImages,r=(0,o.useState)(""),a=r[0],s=r[1],l=(0,o.useMemo)((function(){var e={edges:[]};if(i&&i.edges){if(""===a)return i;e.edges=i.edges.filter((function(e){var t=e.node;return a===t.relativeDirectory}))}return e}),[i,a]),u=(0,o.useCallback)((function(e){s(e)}),[]);return o.createElement(D.Provider,{value:l},o.createElement("div",{className:"flex"},o.createElement("nav",{className:"flex flex-col w-2/12 h-screen overflow-y-scroll space-y-2 px-6"},n.allDirectory.edges.map((function(e){var t=e.node;return o.createElement("span",{className:"\n p-2\n hover:bg-indigo-500\n hover:text-white\n transition-colors\n duration-300\n rounded-md\n cursor-pointer\n "+(t.relativePath===a?"bg-indigo-500 text-white":"")+"\n ",onClick:function(e){u(t.relativePath)}},t.name)}))),o.createElement("main",{style:L,className:"w-10/12 h-screen overflow-y-scroll"},t)))},R=function(){var e=(0,o.useContext)(D),t=(0,o.useState)(!1),n=t[0],i=t[1],r=(0,o.useState)(0),a=r[0],s=r[1];return o.createElement(o.Fragment,null,o.createElement("div",{className:"cursor-pointer grid grid-flow-row-dense auto-rows-min gap-4 grid-cols-1 lg:grid-cols-2 xl:grid-cols-2"},e&&e.edges.map((function(e,t){var n=e.node;return o.createElement(I,{image:n,key:n.name,onClick:function(){s(t),i(!0)}})}))),n&&e&&o.createElement(P,{reactModalStyle:{display:"flex",backgroundColor:""},enableZoom:!0,mainSrc:e.edges[a].node.childImageSharp.original.src&&"",nextSrc:e.edges[Math.min(a+1,e.edges.length-1)].node.childImageSharp.original.src&&"",prevSrc:e.edges[Math.max(a-1,0)].node.childImageSharp.original.src&&"",onCloseRequest:function(){return i(!1)},onMovePrevRequest:function(){e&&s((a-1)%e.edges.length)},onMoveNextRequest:function(){e&&s((a+1)%e.edges.length)}}))},j=function(){return o.createElement(A,null,o.createElement("title",null,"Home Page"),o.createElement(R,null))}},2473:function(e){"use strict";var t=function(){};e.exports=t}}]); +//# sourceMappingURL=component---src-pages-index-tsx-2629ef2e079635eec707.js.map \ No newline at end of file diff --git a/docs/component---src-pages-index-tsx-2629ef2e079635eec707.js.LICENSE.txt b/docs/component---src-pages-index-tsx-2629ef2e079635eec707.js.LICENSE.txt new file mode 100644 index 00000000..b81f69a6 --- /dev/null +++ b/docs/component---src-pages-index-tsx-2629ef2e079635eec707.js.LICENSE.txt @@ -0,0 +1,17 @@ +/*! + Copyright (c) 2015 Jed Watson. + Based on code that is Copyright 2013-2015, Facebook, Inc. + All rights reserved. +*/ + +/*! + * Adapted from jQuery UI core + * + * http://jqueryui.com + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/category/ui-core/ + */ diff --git a/docs/component---src-pages-index-tsx-2629ef2e079635eec707.js.map b/docs/component---src-pages-index-tsx-2629ef2e079635eec707.js.map new file mode 100644 index 00000000..7d32851e --- /dev/null +++ b/docs/component---src-pages-index-tsx-2629ef2e079635eec707.js.map @@ -0,0 +1 @@ +{"version":3,"file":"component---src-pages-index-tsx-2629ef2e079635eec707.js","mappings":"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","sources":["webpack://anime-girls-holding-programming-books/./node_modules/exenv/index.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/components/Modal.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/components/ModalPortal.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/helpers/ariaAppHider.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/helpers/bodyTrap.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/helpers/classList.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/helpers/focusManager.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/helpers/portalOpenInstances.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/helpers/safeHTMLElement.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/helpers/scopeTab.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/helpers/tabbable.js","webpack://anime-girls-holding-programming-books/./node_modules/react-modal/lib/index.js","webpack://anime-girls-holding-programming-books/./node_modules/react-image-lightbox/dist/index.es.js","webpack://anime-girls-holding-programming-books/./src/components/AnimeImage.tsx","webpack://anime-girls-holding-programming-books/./src/components/Layout.tsx","webpack://anime-girls-holding-programming-books/./src/hooks/useDirectories.ts","webpack://anime-girls-holding-programming-books/./src/hooks/useAnimeImages.ts","webpack://anime-girls-holding-programming-books/./src/components/AimeImageGrid.tsx","webpack://anime-girls-holding-programming-books/./src/pages/index.tsx","webpack://anime-girls-holding-programming-books/./node_modules/warning/warning.js"],"sourcesContent":["/*!\n Copyright (c) 2015 Jed Watson.\n Based on code that is Copyright 2013-2015, Facebook, Inc.\n All rights reserved.\n*/\n\n/* global define */\n(function () {\n 'use strict';\n\n var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n var ExecutionEnvironment = {\n canUseDOM: canUseDOM,\n canUseWorkers: typeof Worker !== 'undefined',\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n canUseViewport: canUseDOM && !!window.screen\n };\n\n if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n define(function () {\n return ExecutionEnvironment;\n });\n } else if (typeof module !== 'undefined' && module.exports) {\n module.exports = ExecutionEnvironment;\n } else {\n window.ExecutionEnvironment = ExecutionEnvironment;\n }\n})();","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.bodyOpenClassName = exports.portalClassName = undefined;\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require(\"react-dom\");\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ModalPortal = require(\"./ModalPortal\");\n\nvar _ModalPortal2 = _interopRequireDefault(_ModalPortal);\n\nvar _ariaAppHider = require(\"../helpers/ariaAppHider\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _safeHTMLElement = require(\"../helpers/safeHTMLElement\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n return newObj;\n }\n}\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nvar portalClassName = exports.portalClassName = \"ReactModalPortal\";\nvar bodyOpenClassName = exports.bodyOpenClassName = \"ReactModal__Body--open\";\nvar isReact16 = _safeHTMLElement.canUseDOM && _reactDom2.default.createPortal !== undefined;\n\nvar createHTMLElement = function createHTMLElement(name) {\n return document.createElement(name);\n};\n\nvar getCreatePortal = function getCreatePortal() {\n return isReact16 ? _reactDom2.default.createPortal : _reactDom2.default.unstable_renderSubtreeIntoContainer;\n};\n\nfunction getParentElement(parentSelector) {\n return parentSelector();\n}\n\nvar Modal = function (_Component) {\n _inherits(Modal, _Component);\n\n function Modal() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Modal);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Modal.__proto__ || Object.getPrototypeOf(Modal)).call.apply(_ref, [this].concat(args))), _this), _this.removePortal = function () {\n !isReact16 && _reactDom2.default.unmountComponentAtNode(_this.node);\n var parent = getParentElement(_this.props.parentSelector);\n\n if (parent && parent.contains(_this.node)) {\n parent.removeChild(_this.node);\n } else {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"parentSelector\" prop did not returned any DOM ' + \"element. Make sure that the parent element is unmounted to \" + \"avoid any memory leaks.\");\n }\n }, _this.portalRef = function (ref) {\n _this.portal = ref;\n }, _this.renderPortal = function (props) {\n var createPortal = getCreatePortal();\n var portal = createPortal(_this, _react2.default.createElement(_ModalPortal2.default, _extends({\n defaultStyles: Modal.defaultStyles\n }, props)), _this.node);\n\n _this.portalRef(portal);\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Modal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (!_safeHTMLElement.canUseDOM) return;\n\n if (!isReact16) {\n this.node = createHTMLElement(\"div\");\n }\n\n this.node.className = this.props.portalClassName;\n var parent = getParentElement(this.props.parentSelector);\n parent.appendChild(this.node);\n !isReact16 && this.renderPortal(this.props);\n }\n }, {\n key: \"getSnapshotBeforeUpdate\",\n value: function getSnapshotBeforeUpdate(prevProps) {\n var prevParent = getParentElement(prevProps.parentSelector);\n var nextParent = getParentElement(this.props.parentSelector);\n return {\n prevParent: prevParent,\n nextParent: nextParent\n };\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, _, snapshot) {\n if (!_safeHTMLElement.canUseDOM) return;\n var _props = this.props,\n isOpen = _props.isOpen,\n portalClassName = _props.portalClassName;\n\n if (prevProps.portalClassName !== portalClassName) {\n this.node.className = portalClassName;\n }\n\n var prevParent = snapshot.prevParent,\n nextParent = snapshot.nextParent;\n\n if (nextParent !== prevParent) {\n prevParent.removeChild(this.node);\n nextParent.appendChild(this.node);\n } // Stop unnecessary renders if modal is remaining closed\n\n\n if (!prevProps.isOpen && !isOpen) return;\n !isReact16 && this.renderPortal(this.props);\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (!_safeHTMLElement.canUseDOM || !this.node || !this.portal) return;\n var state = this.portal.state;\n var now = Date.now();\n var closesAt = state.isOpen && this.props.closeTimeoutMS && (state.closesAt || now + this.props.closeTimeoutMS);\n\n if (closesAt) {\n if (!state.beforeClose) {\n this.portal.closeWithTimeout();\n }\n\n setTimeout(this.removePortal, closesAt - now);\n } else {\n this.removePortal();\n }\n }\n }, {\n key: \"render\",\n value: function render() {\n if (!_safeHTMLElement.canUseDOM || !isReact16) {\n return null;\n }\n\n if (!this.node && isReact16) {\n this.node = createHTMLElement(\"div\");\n }\n\n var createPortal = getCreatePortal();\n return createPortal(_react2.default.createElement(_ModalPortal2.default, _extends({\n ref: this.portalRef,\n defaultStyles: Modal.defaultStyles\n }, this.props)), this.node);\n }\n }], [{\n key: \"setAppElement\",\n value: function setAppElement(element) {\n ariaAppHider.setElement(element);\n }\n /* eslint-disable react/no-unused-prop-types */\n\n /* eslint-enable react/no-unused-prop-types */\n\n }]);\n\n return Modal;\n}(_react.Component);\n\nModal.propTypes = {\n isOpen: _propTypes2.default.bool.isRequired,\n style: _propTypes2.default.shape({\n content: _propTypes2.default.object,\n overlay: _propTypes2.default.object\n }),\n portalClassName: _propTypes2.default.string,\n bodyOpenClassName: _propTypes2.default.string,\n htmlOpenClassName: _propTypes2.default.string,\n className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n base: _propTypes2.default.string.isRequired,\n afterOpen: _propTypes2.default.string.isRequired,\n beforeClose: _propTypes2.default.string.isRequired\n })]),\n overlayClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n base: _propTypes2.default.string.isRequired,\n afterOpen: _propTypes2.default.string.isRequired,\n beforeClose: _propTypes2.default.string.isRequired\n })]),\n appElement: _propTypes2.default.oneOfType([_propTypes2.default.instanceOf(_safeHTMLElement2.default), _propTypes2.default.instanceOf(_safeHTMLElement.SafeHTMLCollection), _propTypes2.default.instanceOf(_safeHTMLElement.SafeNodeList), _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(_safeHTMLElement2.default))]),\n onAfterOpen: _propTypes2.default.func,\n onRequestClose: _propTypes2.default.func,\n closeTimeoutMS: _propTypes2.default.number,\n ariaHideApp: _propTypes2.default.bool,\n shouldFocusAfterRender: _propTypes2.default.bool,\n shouldCloseOnOverlayClick: _propTypes2.default.bool,\n shouldReturnFocusAfterClose: _propTypes2.default.bool,\n preventScroll: _propTypes2.default.bool,\n parentSelector: _propTypes2.default.func,\n aria: _propTypes2.default.object,\n data: _propTypes2.default.object,\n role: _propTypes2.default.string,\n contentLabel: _propTypes2.default.string,\n shouldCloseOnEsc: _propTypes2.default.bool,\n overlayRef: _propTypes2.default.func,\n contentRef: _propTypes2.default.func,\n id: _propTypes2.default.string,\n overlayElement: _propTypes2.default.func,\n contentElement: _propTypes2.default.func\n};\nModal.defaultProps = {\n isOpen: false,\n portalClassName: portalClassName,\n bodyOpenClassName: bodyOpenClassName,\n role: \"dialog\",\n ariaHideApp: true,\n closeTimeoutMS: 0,\n shouldFocusAfterRender: true,\n shouldCloseOnEsc: true,\n shouldCloseOnOverlayClick: true,\n shouldReturnFocusAfterClose: true,\n preventScroll: false,\n parentSelector: function parentSelector() {\n return document.body;\n },\n overlayElement: function overlayElement(props, contentEl) {\n return _react2.default.createElement(\"div\", props, contentEl);\n },\n contentElement: function contentElement(props, children) {\n return _react2.default.createElement(\"div\", props, children);\n }\n};\nModal.defaultStyles = {\n overlay: {\n position: \"fixed\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: \"rgba(255, 255, 255, 0.75)\"\n },\n content: {\n position: \"absolute\",\n top: \"40px\",\n left: \"40px\",\n right: \"40px\",\n bottom: \"40px\",\n border: \"1px solid #ccc\",\n background: \"#fff\",\n overflow: \"auto\",\n WebkitOverflowScrolling: \"touch\",\n borderRadius: \"4px\",\n outline: \"none\",\n padding: \"20px\"\n }\n};\n(0, _reactLifecyclesCompat.polyfill)(Modal);\n\nif (process.env.NODE_ENV !== \"production\") {\n Modal.setCreateHTMLElement = function (fn) {\n return createHTMLElement = fn;\n };\n}\n\nexports.default = Modal;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _react = require(\"react\");\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _focusManager = require(\"../helpers/focusManager\");\n\nvar focusManager = _interopRequireWildcard(_focusManager);\n\nvar _scopeTab = require(\"../helpers/scopeTab\");\n\nvar _scopeTab2 = _interopRequireDefault(_scopeTab);\n\nvar _ariaAppHider = require(\"../helpers/ariaAppHider\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _classList = require(\"../helpers/classList\");\n\nvar classList = _interopRequireWildcard(_classList);\n\nvar _safeHTMLElement = require(\"../helpers/safeHTMLElement\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _portalOpenInstances = require(\"../helpers/portalOpenInstances\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\nrequire(\"../helpers/bodyTrap\");\n\nfunction _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n\n newObj.default = obj;\n return newObj;\n }\n}\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n} // so that our CSS is statically analyzable\n\n\nvar CLASS_NAMES = {\n overlay: \"ReactModal__Overlay\",\n content: \"ReactModal__Content\"\n};\nvar TAB_KEY = 9;\nvar ESC_KEY = 27;\nvar ariaHiddenInstances = 0;\n\nvar ModalPortal = function (_Component) {\n _inherits(ModalPortal, _Component);\n\n function ModalPortal(props) {\n _classCallCheck(this, ModalPortal);\n\n var _this = _possibleConstructorReturn(this, (ModalPortal.__proto__ || Object.getPrototypeOf(ModalPortal)).call(this, props));\n\n _this.setOverlayRef = function (overlay) {\n _this.overlay = overlay;\n _this.props.overlayRef && _this.props.overlayRef(overlay);\n };\n\n _this.setContentRef = function (content) {\n _this.content = content;\n _this.props.contentRef && _this.props.contentRef(content);\n };\n\n _this.afterClose = function () {\n var _this$props = _this.props,\n appElement = _this$props.appElement,\n ariaHideApp = _this$props.ariaHideApp,\n htmlOpenClassName = _this$props.htmlOpenClassName,\n bodyOpenClassName = _this$props.bodyOpenClassName; // Remove classes.\n\n bodyOpenClassName && classList.remove(document.body, bodyOpenClassName);\n htmlOpenClassName && classList.remove(document.getElementsByTagName(\"html\")[0], htmlOpenClassName); // Reset aria-hidden attribute if all modals have been removed\n\n if (ariaHideApp && ariaHiddenInstances > 0) {\n ariaHiddenInstances -= 1;\n\n if (ariaHiddenInstances === 0) {\n ariaAppHider.show(appElement);\n }\n }\n\n if (_this.props.shouldFocusAfterRender) {\n if (_this.props.shouldReturnFocusAfterClose) {\n focusManager.returnFocus(_this.props.preventScroll);\n focusManager.teardownScopedFocus();\n } else {\n focusManager.popWithoutFocus();\n }\n }\n\n if (_this.props.onAfterClose) {\n _this.props.onAfterClose();\n }\n\n _portalOpenInstances2.default.deregister(_this);\n };\n\n _this.open = function () {\n _this.beforeOpen();\n\n if (_this.state.afterOpen && _this.state.beforeClose) {\n clearTimeout(_this.closeTimer);\n\n _this.setState({\n beforeClose: false\n });\n } else {\n if (_this.props.shouldFocusAfterRender) {\n focusManager.setupScopedFocus(_this.node);\n focusManager.markForFocusLater();\n }\n\n _this.setState({\n isOpen: true\n }, function () {\n _this.openAnimationFrame = requestAnimationFrame(function () {\n _this.setState({\n afterOpen: true\n });\n\n if (_this.props.isOpen && _this.props.onAfterOpen) {\n _this.props.onAfterOpen({\n overlayEl: _this.overlay,\n contentEl: _this.content\n });\n }\n });\n });\n }\n };\n\n _this.close = function () {\n if (_this.props.closeTimeoutMS > 0) {\n _this.closeWithTimeout();\n } else {\n _this.closeWithoutTimeout();\n }\n };\n\n _this.focusContent = function () {\n return _this.content && !_this.contentHasFocus() && _this.content.focus({\n preventScroll: true\n });\n };\n\n _this.closeWithTimeout = function () {\n var closesAt = Date.now() + _this.props.closeTimeoutMS;\n\n _this.setState({\n beforeClose: true,\n closesAt: closesAt\n }, function () {\n _this.closeTimer = setTimeout(_this.closeWithoutTimeout, _this.state.closesAt - Date.now());\n });\n };\n\n _this.closeWithoutTimeout = function () {\n _this.setState({\n beforeClose: false,\n isOpen: false,\n afterOpen: false,\n closesAt: null\n }, _this.afterClose);\n };\n\n _this.handleKeyDown = function (event) {\n if (event.keyCode === TAB_KEY) {\n (0, _scopeTab2.default)(_this.content, event);\n }\n\n if (_this.props.shouldCloseOnEsc && event.keyCode === ESC_KEY) {\n event.stopPropagation();\n\n _this.requestClose(event);\n }\n };\n\n _this.handleOverlayOnClick = function (event) {\n if (_this.shouldClose === null) {\n _this.shouldClose = true;\n }\n\n if (_this.shouldClose && _this.props.shouldCloseOnOverlayClick) {\n if (_this.ownerHandlesClose()) {\n _this.requestClose(event);\n } else {\n _this.focusContent();\n }\n }\n\n _this.shouldClose = null;\n };\n\n _this.handleContentOnMouseUp = function () {\n _this.shouldClose = false;\n };\n\n _this.handleOverlayOnMouseDown = function (event) {\n if (!_this.props.shouldCloseOnOverlayClick && event.target == _this.overlay) {\n event.preventDefault();\n }\n };\n\n _this.handleContentOnClick = function () {\n _this.shouldClose = false;\n };\n\n _this.handleContentOnMouseDown = function () {\n _this.shouldClose = false;\n };\n\n _this.requestClose = function (event) {\n return _this.ownerHandlesClose() && _this.props.onRequestClose(event);\n };\n\n _this.ownerHandlesClose = function () {\n return _this.props.onRequestClose;\n };\n\n _this.shouldBeClosed = function () {\n return !_this.state.isOpen && !_this.state.beforeClose;\n };\n\n _this.contentHasFocus = function () {\n return document.activeElement === _this.content || _this.content.contains(document.activeElement);\n };\n\n _this.buildClassName = function (which, additional) {\n var classNames = (typeof additional === \"undefined\" ? \"undefined\" : _typeof(additional)) === \"object\" ? additional : {\n base: CLASS_NAMES[which],\n afterOpen: CLASS_NAMES[which] + \"--after-open\",\n beforeClose: CLASS_NAMES[which] + \"--before-close\"\n };\n var className = classNames.base;\n\n if (_this.state.afterOpen) {\n className = className + \" \" + classNames.afterOpen;\n }\n\n if (_this.state.beforeClose) {\n className = className + \" \" + classNames.beforeClose;\n }\n\n return typeof additional === \"string\" && additional ? className + \" \" + additional : className;\n };\n\n _this.attributesFromObject = function (prefix, items) {\n return Object.keys(items).reduce(function (acc, name) {\n acc[prefix + \"-\" + name] = items[name];\n return acc;\n }, {});\n };\n\n _this.state = {\n afterOpen: false,\n beforeClose: false\n };\n _this.shouldClose = null;\n _this.moveFromContentToOverlay = null;\n return _this;\n }\n\n _createClass(ModalPortal, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.props.isOpen) {\n this.open();\n }\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps, prevState) {\n if (process.env.NODE_ENV !== \"production\") {\n if (prevProps.bodyOpenClassName !== this.props.bodyOpenClassName) {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"bodyOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n }\n\n if (prevProps.htmlOpenClassName !== this.props.htmlOpenClassName) {\n // eslint-disable-next-line no-console\n console.warn('React-Modal: \"htmlOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n }\n }\n\n if (this.props.isOpen && !prevProps.isOpen) {\n this.open();\n } else if (!this.props.isOpen && prevProps.isOpen) {\n this.close();\n } // Focus only needs to be set once when the modal is being opened\n\n\n if (this.props.shouldFocusAfterRender && this.state.isOpen && !prevState.isOpen) {\n this.focusContent();\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n if (this.state.isOpen) {\n this.afterClose();\n }\n\n clearTimeout(this.closeTimer);\n cancelAnimationFrame(this.openAnimationFrame);\n }\n }, {\n key: \"beforeOpen\",\n value: function beforeOpen() {\n var _props = this.props,\n appElement = _props.appElement,\n ariaHideApp = _props.ariaHideApp,\n htmlOpenClassName = _props.htmlOpenClassName,\n bodyOpenClassName = _props.bodyOpenClassName; // Add classes.\n\n bodyOpenClassName && classList.add(document.body, bodyOpenClassName);\n htmlOpenClassName && classList.add(document.getElementsByTagName(\"html\")[0], htmlOpenClassName);\n\n if (ariaHideApp) {\n ariaHiddenInstances += 1;\n ariaAppHider.hide(appElement);\n }\n\n _portalOpenInstances2.default.register(this);\n } // Don't steal focus from inner elements\n\n }, {\n key: \"render\",\n value: function render() {\n var _props2 = this.props,\n id = _props2.id,\n className = _props2.className,\n overlayClassName = _props2.overlayClassName,\n defaultStyles = _props2.defaultStyles,\n children = _props2.children;\n var contentStyles = className ? {} : defaultStyles.content;\n var overlayStyles = overlayClassName ? {} : defaultStyles.overlay;\n\n if (this.shouldBeClosed()) {\n return null;\n }\n\n var overlayProps = {\n ref: this.setOverlayRef,\n className: this.buildClassName(\"overlay\", overlayClassName),\n style: _extends({}, overlayStyles, this.props.style.overlay),\n onClick: this.handleOverlayOnClick,\n onMouseDown: this.handleOverlayOnMouseDown\n };\n\n var contentProps = _extends({\n id: id,\n ref: this.setContentRef,\n style: _extends({}, contentStyles, this.props.style.content),\n className: this.buildClassName(\"content\", className),\n tabIndex: \"-1\",\n onKeyDown: this.handleKeyDown,\n onMouseDown: this.handleContentOnMouseDown,\n onMouseUp: this.handleContentOnMouseUp,\n onClick: this.handleContentOnClick,\n role: this.props.role,\n \"aria-label\": this.props.contentLabel\n }, this.attributesFromObject(\"aria\", _extends({\n modal: true\n }, this.props.aria)), this.attributesFromObject(\"data\", this.props.data || {}), {\n \"data-testid\": this.props.testId\n });\n\n var contentElement = this.props.contentElement(contentProps, children);\n return this.props.overlayElement(overlayProps, contentElement);\n }\n }]);\n\n return ModalPortal;\n}(_react.Component);\n\nModalPortal.defaultProps = {\n style: {\n overlay: {},\n content: {}\n },\n defaultStyles: {}\n};\nModalPortal.propTypes = {\n isOpen: _propTypes2.default.bool.isRequired,\n defaultStyles: _propTypes2.default.shape({\n content: _propTypes2.default.object,\n overlay: _propTypes2.default.object\n }),\n style: _propTypes2.default.shape({\n content: _propTypes2.default.object,\n overlay: _propTypes2.default.object\n }),\n className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),\n overlayClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),\n bodyOpenClassName: _propTypes2.default.string,\n htmlOpenClassName: _propTypes2.default.string,\n ariaHideApp: _propTypes2.default.bool,\n appElement: _propTypes2.default.oneOfType([_propTypes2.default.instanceOf(_safeHTMLElement2.default), _propTypes2.default.instanceOf(_safeHTMLElement.SafeHTMLCollection), _propTypes2.default.instanceOf(_safeHTMLElement.SafeNodeList), _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(_safeHTMLElement2.default))]),\n onAfterOpen: _propTypes2.default.func,\n onAfterClose: _propTypes2.default.func,\n onRequestClose: _propTypes2.default.func,\n closeTimeoutMS: _propTypes2.default.number,\n shouldFocusAfterRender: _propTypes2.default.bool,\n shouldCloseOnOverlayClick: _propTypes2.default.bool,\n shouldReturnFocusAfterClose: _propTypes2.default.bool,\n preventScroll: _propTypes2.default.bool,\n role: _propTypes2.default.string,\n contentLabel: _propTypes2.default.string,\n aria: _propTypes2.default.object,\n data: _propTypes2.default.object,\n children: _propTypes2.default.node,\n shouldCloseOnEsc: _propTypes2.default.bool,\n overlayRef: _propTypes2.default.func,\n contentRef: _propTypes2.default.func,\n id: _propTypes2.default.string,\n overlayElement: _propTypes2.default.func,\n contentElement: _propTypes2.default.func,\n testId: _propTypes2.default.string\n};\nexports.default = ModalPortal;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.resetState = resetState;\nexports.log = log;\nexports.assertNodeList = assertNodeList;\nexports.setElement = setElement;\nexports.validateElement = validateElement;\nexports.hide = hide;\nexports.show = show;\nexports.documentNotReadyOrSSRTesting = documentNotReadyOrSSRTesting;\n\nvar _warning = require(\"warning\");\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _safeHTMLElement = require(\"./safeHTMLElement\");\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nvar globalElement = null;\n/* eslint-disable no-console */\n\n/* istanbul ignore next */\n\nfunction resetState() {\n if (globalElement) {\n if (globalElement.removeAttribute) {\n globalElement.removeAttribute(\"aria-hidden\");\n } else if (globalElement.length != null) {\n globalElement.forEach(function (element) {\n return element.removeAttribute(\"aria-hidden\");\n });\n } else {\n document.querySelectorAll(globalElement).forEach(function (element) {\n return element.removeAttribute(\"aria-hidden\");\n });\n }\n }\n\n globalElement = null;\n}\n/* istanbul ignore next */\n\n\nfunction log() {\n if (process.env.NODE_ENV !== \"production\") {\n var check = globalElement || {};\n console.log(\"ariaAppHider ----------\");\n console.log(check.nodeName, check.className, check.id);\n console.log(\"end ariaAppHider ----------\");\n }\n}\n/* eslint-enable no-console */\n\n\nfunction assertNodeList(nodeList, selector) {\n if (!nodeList || !nodeList.length) {\n throw new Error(\"react-modal: No elements were found for selector \" + selector + \".\");\n }\n}\n\nfunction setElement(element) {\n var useElement = element;\n\n if (typeof useElement === \"string\" && _safeHTMLElement.canUseDOM) {\n var el = document.querySelectorAll(useElement);\n assertNodeList(el, useElement);\n useElement = el;\n }\n\n globalElement = useElement || globalElement;\n return globalElement;\n}\n\nfunction validateElement(appElement) {\n var el = appElement || globalElement;\n\n if (el) {\n return Array.isArray(el) || el instanceof HTMLCollection || el instanceof NodeList ? el : [el];\n } else {\n (0, _warning2.default)(false, [\"react-modal: App element is not defined.\", \"Please use `Modal.setAppElement(el)` or set `appElement={el}`.\", \"This is needed so screen readers don't see main content\", \"when modal is opened. It is not recommended, but you can opt-out\", \"by setting `ariaHideApp={false}`.\"].join(\" \"));\n return [];\n }\n}\n\nfunction hide(appElement) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = validateElement(appElement)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var el = _step.value;\n el.setAttribute(\"aria-hidden\", \"true\");\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n}\n\nfunction show(appElement) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = validateElement(appElement)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var el = _step2.value;\n el.removeAttribute(\"aria-hidden\");\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n}\n\nfunction documentNotReadyOrSSRTesting() {\n globalElement = null;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.resetState = resetState;\nexports.log = log;\n\nvar _portalOpenInstances = require(\"./portalOpenInstances\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n} // Body focus trap see Issue #742\n\n\nvar before = void 0,\n after = void 0,\n instances = [];\n/* eslint-disable no-console */\n\n/* istanbul ignore next */\n\nfunction resetState() {\n var _arr = [before, after];\n\n for (var _i = 0; _i < _arr.length; _i++) {\n var item = _arr[_i];\n if (!item) continue;\n item.parentNode && item.parentNode.removeChild(item);\n }\n\n before = after = null;\n instances = [];\n}\n/* istanbul ignore next */\n\n\nfunction log() {\n console.log(\"bodyTrap ----------\");\n console.log(instances.length);\n var _arr2 = [before, after];\n\n for (var _i2 = 0; _i2 < _arr2.length; _i2++) {\n var item = _arr2[_i2];\n var check = item || {};\n console.log(check.nodeName, check.className, check.id);\n }\n\n console.log(\"edn bodyTrap ----------\");\n}\n/* eslint-enable no-console */\n\n\nfunction focusContent() {\n if (instances.length === 0) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Open instances > 0 expected\");\n }\n\n return;\n }\n\n instances[instances.length - 1].focusContent();\n}\n\nfunction bodyTrap(eventType, openInstances) {\n if (!before && !after) {\n before = document.createElement(\"div\");\n before.setAttribute(\"data-react-modal-body-trap\", \"\");\n before.style.position = \"absolute\";\n before.style.opacity = \"0\";\n before.setAttribute(\"tabindex\", \"0\");\n before.addEventListener(\"focus\", focusContent);\n after = before.cloneNode();\n after.addEventListener(\"focus\", focusContent);\n }\n\n instances = openInstances;\n\n if (instances.length > 0) {\n // Add focus trap\n if (document.body.firstChild !== before) {\n document.body.insertBefore(before, document.body.firstChild);\n }\n\n if (document.body.lastChild !== after) {\n document.body.appendChild(after);\n }\n } else {\n // Remove focus trap\n if (before.parentElement) {\n before.parentElement.removeChild(before);\n }\n\n if (after.parentElement) {\n after.parentElement.removeChild(after);\n }\n }\n}\n\n_portalOpenInstances2.default.subscribe(bodyTrap);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.resetState = resetState;\nexports.log = log;\nvar htmlClassList = {};\nvar docBodyClassList = {};\n/* eslint-disable no-console */\n\n/* istanbul ignore next */\n\nfunction removeClass(at, cls) {\n at.classList.remove(cls);\n}\n/* istanbul ignore next */\n\n\nfunction resetState() {\n var htmlElement = document.getElementsByTagName(\"html\")[0];\n\n for (var cls in htmlClassList) {\n removeClass(htmlElement, htmlClassList[cls]);\n }\n\n var body = document.body;\n\n for (var _cls in docBodyClassList) {\n removeClass(body, docBodyClassList[_cls]);\n }\n\n htmlClassList = {};\n docBodyClassList = {};\n}\n/* istanbul ignore next */\n\n\nfunction log() {\n if (process.env.NODE_ENV !== \"production\") {\n var classes = document.getElementsByTagName(\"html\")[0].className;\n var buffer = \"Show tracked classes:\\n\\n\";\n buffer += \" (\" + classes + \"):\\n \";\n\n for (var x in htmlClassList) {\n buffer += \" \" + x + \" \" + htmlClassList[x] + \"\\n \";\n }\n\n classes = document.body.className;\n buffer += \"\\n\\ndoc.body (\" + classes + \"):\\n \";\n\n for (var _x in docBodyClassList) {\n buffer += \" \" + _x + \" \" + docBodyClassList[_x] + \"\\n \";\n }\n\n buffer += \"\\n\";\n console.log(buffer);\n }\n}\n/* eslint-enable no-console */\n\n/**\n * Track the number of reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\n\n\nvar incrementReference = function incrementReference(poll, className) {\n if (!poll[className]) {\n poll[className] = 0;\n }\n\n poll[className] += 1;\n return className;\n};\n/**\n * Drop the reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\n\n\nvar decrementReference = function decrementReference(poll, className) {\n if (poll[className]) {\n poll[className] -= 1;\n }\n\n return className;\n};\n/**\n * Track a class and add to the given class list.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll The poll to be used.\n * @param {Array} classes The list of classes to be tracked.\n */\n\n\nvar trackClass = function trackClass(classListRef, poll, classes) {\n classes.forEach(function (className) {\n incrementReference(poll, className);\n classListRef.add(className);\n });\n};\n/**\n * Untrack a class and remove from the given class list if the reference\n * reaches 0.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll The poll to be used.\n * @param {Array} classes The list of classes to be untracked.\n */\n\n\nvar untrackClass = function untrackClass(classListRef, poll, classes) {\n classes.forEach(function (className) {\n decrementReference(poll, className);\n poll[className] === 0 && classListRef.remove(className);\n });\n};\n/**\n * Public inferface to add classes to the document.body.\n * @param {string} bodyClass The class string to be added.\n * It may contain more then one class\n * with ' ' as separator.\n */\n\n\nvar add = exports.add = function add(element, classString) {\n return trackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};\n/**\n * Public inferface to remove classes from the document.body.\n * @param {string} bodyClass The class string to be added.\n * It may contain more then one class\n * with ' ' as separator.\n */\n\n\nvar remove = exports.remove = function remove(element, classString) {\n return untrackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.resetState = resetState;\nexports.log = log;\nexports.handleBlur = handleBlur;\nexports.handleFocus = handleFocus;\nexports.markForFocusLater = markForFocusLater;\nexports.returnFocus = returnFocus;\nexports.popWithoutFocus = popWithoutFocus;\nexports.setupScopedFocus = setupScopedFocus;\nexports.teardownScopedFocus = teardownScopedFocus;\n\nvar _tabbable = require(\"../helpers/tabbable\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nvar focusLaterElements = [];\nvar modalElement = null;\nvar needToFocus = false;\n/* eslint-disable no-console */\n\n/* istanbul ignore next */\n\nfunction resetState() {\n focusLaterElements = [];\n}\n/* istanbul ignore next */\n\n\nfunction log() {\n if (process.env.NODE_ENV !== \"production\") {\n console.log(\"focusManager ----------\");\n focusLaterElements.forEach(function (f) {\n var check = f || {};\n console.log(check.nodeName, check.className, check.id);\n });\n console.log(\"end focusManager ----------\");\n }\n}\n/* eslint-enable no-console */\n\n\nfunction handleBlur() {\n needToFocus = true;\n}\n\nfunction handleFocus() {\n if (needToFocus) {\n needToFocus = false;\n\n if (!modalElement) {\n return;\n } // need to see how jQuery shims document.on('focusin') so we don't need the\n // setTimeout, firefox doesn't support focusin, if it did, we could focus\n // the element outside of a setTimeout. Side-effect of this implementation\n // is that the document.body gets focus, and then we focus our element right\n // after, seems fine.\n\n\n setTimeout(function () {\n if (modalElement.contains(document.activeElement)) {\n return;\n }\n\n var el = (0, _tabbable2.default)(modalElement)[0] || modalElement;\n el.focus();\n }, 0);\n }\n}\n\nfunction markForFocusLater() {\n focusLaterElements.push(document.activeElement);\n}\n/* eslint-disable no-console */\n\n\nfunction returnFocus() {\n var preventScroll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var toFocus = null;\n\n try {\n if (focusLaterElements.length !== 0) {\n toFocus = focusLaterElements.pop();\n toFocus.focus({\n preventScroll: preventScroll\n });\n }\n\n return;\n } catch (e) {\n console.warn([\"You tried to return focus to\", toFocus, \"but it is not in the DOM anymore\"].join(\" \"));\n }\n}\n/* eslint-enable no-console */\n\n\nfunction popWithoutFocus() {\n focusLaterElements.length > 0 && focusLaterElements.pop();\n}\n\nfunction setupScopedFocus(element) {\n modalElement = element;\n\n if (window.addEventListener) {\n window.addEventListener(\"blur\", handleBlur, false);\n document.addEventListener(\"focus\", handleFocus, true);\n } else {\n window.attachEvent(\"onBlur\", handleBlur);\n document.attachEvent(\"onFocus\", handleFocus);\n }\n}\n\nfunction teardownScopedFocus() {\n modalElement = null;\n\n if (window.addEventListener) {\n window.removeEventListener(\"blur\", handleBlur);\n document.removeEventListener(\"focus\", handleFocus);\n } else {\n window.detachEvent(\"onBlur\", handleBlur);\n document.detachEvent(\"onFocus\", handleFocus);\n }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.log = log;\nexports.resetState = resetState;\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n} // Tracks portals that are open and emits events to subscribers\n\n\nvar PortalOpenInstances = function PortalOpenInstances() {\n var _this = this;\n\n _classCallCheck(this, PortalOpenInstances);\n\n this.register = function (openInstance) {\n if (_this.openInstances.indexOf(openInstance) !== -1) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Cannot register modal instance that's already open\");\n }\n\n return;\n }\n\n _this.openInstances.push(openInstance);\n\n _this.emit(\"register\");\n };\n\n this.deregister = function (openInstance) {\n var index = _this.openInstances.indexOf(openInstance);\n\n if (index === -1) {\n if (process.env.NODE_ENV !== \"production\") {\n // eslint-disable-next-line no-console\n console.warn(\"React-Modal: Unable to deregister \" + openInstance + \" as \" + \"it was never registered\");\n }\n\n return;\n }\n\n _this.openInstances.splice(index, 1);\n\n _this.emit(\"deregister\");\n };\n\n this.subscribe = function (callback) {\n _this.subscribers.push(callback);\n };\n\n this.emit = function (eventType) {\n _this.subscribers.forEach(function (subscriber) {\n return subscriber(eventType, // shallow copy to avoid accidental mutation\n _this.openInstances.slice());\n });\n };\n\n this.openInstances = [];\n this.subscribers = [];\n};\n\nvar portalOpenInstances = new PortalOpenInstances();\n/* eslint-disable no-console */\n\n/* istanbul ignore next */\n\nfunction log() {\n console.log(\"portalOpenInstances ----------\");\n console.log(portalOpenInstances.openInstances.length);\n portalOpenInstances.openInstances.forEach(function (p) {\n return console.log(p);\n });\n console.log(\"end portalOpenInstances ----------\");\n}\n/* istanbul ignore next */\n\n\nfunction resetState() {\n portalOpenInstances = new PortalOpenInstances();\n}\n/* eslint-enable no-console */\n\n\nexports.default = portalOpenInstances;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.canUseDOM = exports.SafeNodeList = exports.SafeHTMLCollection = undefined;\n\nvar _exenv = require(\"exenv\");\n\nvar _exenv2 = _interopRequireDefault(_exenv);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nvar EE = _exenv2.default;\nvar SafeHTMLElement = EE.canUseDOM ? window.HTMLElement : {};\nvar SafeHTMLCollection = exports.SafeHTMLCollection = EE.canUseDOM ? window.HTMLCollection : {};\nvar SafeNodeList = exports.SafeNodeList = EE.canUseDOM ? window.NodeList : {};\nvar canUseDOM = exports.canUseDOM = EE.canUseDOM;\nexports.default = SafeHTMLElement;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = scopeTab;\n\nvar _tabbable = require(\"./tabbable\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction getActiveElement() {\n var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n return el.activeElement.shadowRoot ? getActiveElement(el.activeElement.shadowRoot) : el.activeElement;\n}\n\nfunction scopeTab(node, event) {\n var tabbable = (0, _tabbable2.default)(node);\n\n if (!tabbable.length) {\n // Do nothing, since there are no elements that can receive focus.\n event.preventDefault();\n return;\n }\n\n var target = void 0;\n var shiftKey = event.shiftKey;\n var head = tabbable[0];\n var tail = tabbable[tabbable.length - 1];\n var activeElement = getActiveElement(); // proceed with default browser behavior on tab.\n // Focus on last element on shift + tab.\n\n if (node === activeElement) {\n if (!shiftKey) return;\n target = tail;\n }\n\n if (tail === activeElement && !shiftKey) {\n target = head;\n }\n\n if (head === activeElement && shiftKey) {\n target = tail;\n }\n\n if (target) {\n event.preventDefault();\n target.focus();\n return;\n } // Safari radio issue.\n //\n // Safari does not move the focus to the radio button,\n // so we need to force it to really walk through all elements.\n //\n // This is very error prone, since we are trying to guess\n // if it is a safari browser from the first occurence between\n // chrome or safari.\n //\n // The chrome user agent contains the first ocurrence\n // as the 'chrome/version' and later the 'safari/version'.\n\n\n var checkSafari = /(\\bChrome\\b|\\bSafari\\b)\\//.exec(navigator.userAgent);\n var isSafariDesktop = checkSafari != null && checkSafari[1] != \"Chrome\" && /\\biPod\\b|\\biPad\\b/g.exec(navigator.userAgent) == null; // If we are not in safari desktop, let the browser control\n // the focus\n\n if (!isSafariDesktop) return;\n var x = tabbable.indexOf(activeElement);\n\n if (x > -1) {\n x += shiftKey ? -1 : 1;\n }\n\n target = tabbable[x]; // If the tabbable element does not exist,\n // focus head/tail based on shiftKey\n\n if (typeof target === \"undefined\") {\n event.preventDefault();\n target = shiftKey ? tail : head;\n target.focus();\n return;\n }\n\n event.preventDefault();\n target.focus();\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = findTabbableDescendants;\n/*!\n * Adapted from jQuery UI core\n *\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/ui-core/\n */\n\nvar tabbableNode = /input|select|textarea|button|object/;\n\nfunction hidesContents(element) {\n var zeroSize = element.offsetWidth <= 0 && element.offsetHeight <= 0; // If the node is empty, this is good enough\n\n if (zeroSize && !element.innerHTML) return true;\n\n try {\n // Otherwise we need to check some styles\n var style = window.getComputedStyle(element);\n return zeroSize ? style.getPropertyValue(\"overflow\") !== \"visible\" || // if 'overflow: visible' set, check if there is actually any overflow\n element.scrollWidth <= 0 && element.scrollHeight <= 0 : style.getPropertyValue(\"display\") == \"none\";\n } catch (exception) {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to inspect element style\");\n return false;\n }\n}\n\nfunction visible(element) {\n var parentElement = element;\n var rootNode = element.getRootNode && element.getRootNode();\n\n while (parentElement) {\n if (parentElement === document.body) break; // if we are not hidden yet, skip to checking outside the Web Component\n\n if (rootNode && parentElement === rootNode) parentElement = rootNode.host.parentNode;\n if (hidesContents(parentElement)) return false;\n parentElement = parentElement.parentNode;\n }\n\n return true;\n}\n\nfunction focusable(element, isTabIndexNotNaN) {\n var nodeName = element.nodeName.toLowerCase();\n var res = tabbableNode.test(nodeName) && !element.disabled || (nodeName === \"a\" ? element.href || isTabIndexNotNaN : isTabIndexNotNaN);\n return res && visible(element);\n}\n\nfunction tabbable(element) {\n var tabIndex = element.getAttribute(\"tabindex\");\n if (tabIndex === null) tabIndex = undefined;\n var isTabIndexNaN = isNaN(tabIndex);\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN);\n}\n\nfunction findTabbableDescendants(element) {\n var descendants = [].slice.call(element.querySelectorAll(\"*\"), 0).reduce(function (finished, el) {\n return finished.concat(!el.shadowRoot ? [el] : findTabbableDescendants(el.shadowRoot));\n }, []);\n return descendants.filter(tabbable);\n}\n\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _Modal = require(\"./components/Modal\");\n\nvar _Modal2 = _interopRequireDefault(_Modal);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nexports.default = _Modal2.default;\nmodule.exports = exports[\"default\"];","import React, { Component } from 'react';\nimport Modal from 'react-modal';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n\n return function _createSuperInternal() {\n var Super = _getPrototypeOf(Derived),\n result;\n\n if (hasNativeReflectConstruct) {\n var NewTarget = _getPrototypeOf(this).constructor;\n\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n\n return _possibleConstructorReturn(this, result);\n };\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n/**\n * Placeholder for future translate functionality\n */\n\n\nfunction translate(str) {\n var replaceStrings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n if (!str) {\n return '';\n }\n\n var translated = str;\n\n if (replaceStrings) {\n Object.keys(replaceStrings).forEach(function (placeholder) {\n translated = translated.replace(placeholder, replaceStrings[placeholder]);\n });\n }\n\n return translated;\n}\n\nfunction getWindowWidth() {\n return typeof global.window !== 'undefined' ? global.window.innerWidth : 0;\n}\n\nfunction getWindowHeight() {\n return typeof global.window !== 'undefined' ? global.window.innerHeight : 0;\n}\n\nvar isCrossOriginFrame = function isCrossOriginFrame() {\n try {\n return global.window.location.hostname !== global.window.parent.location.hostname;\n } catch (e) {\n return true;\n }\n}; // Get the highest window context that isn't cross-origin\n// (When in an iframe)\n\n\nfunction getHighestSafeWindowContext() {\n var self = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : global.window.self; // If we reached the top level, return self\n\n if (self === global.window.top) {\n return self;\n } // If parent is the same origin, we can move up one context\n // Reference: https://stackoverflow.com/a/21965342/1601953\n\n\n if (!isCrossOriginFrame()) {\n return getHighestSafeWindowContext(self.parent);\n } // If a different origin, we consider the current level\n // as the top reachable one\n\n\n return self;\n} // Min image zoom level\n\n\nvar MIN_ZOOM_LEVEL = 0; // Max image zoom level\n\nvar MAX_ZOOM_LEVEL = 300; // Size ratio between previous and next zoom levels\n\nvar ZOOM_RATIO = 1.007; // How much to increase/decrease the zoom level when the zoom buttons are clicked\n\nvar ZOOM_BUTTON_INCREMENT_SIZE = 100; // Used to judge the amount of horizontal scroll needed to initiate a image move\n\nvar WHEEL_MOVE_X_THRESHOLD = 200; // Used to judge the amount of vertical scroll needed to initiate a zoom action\n\nvar WHEEL_MOVE_Y_THRESHOLD = 1;\nvar KEYS = {\n ESC: 27,\n LEFT_ARROW: 37,\n RIGHT_ARROW: 39\n}; // Actions\n\nvar ACTION_NONE = 0;\nvar ACTION_MOVE = 1;\nvar ACTION_SWIPE = 2;\nvar ACTION_PINCH = 3;\nvar SOURCE_ANY = 0;\nvar SOURCE_MOUSE = 1;\nvar SOURCE_TOUCH = 2;\nvar SOURCE_POINTER = 3; // Minimal swipe distance\n\nvar MIN_SWIPE_DISTANCE = 200;\n\nvar ReactImageLightbox = /*#__PURE__*/function (_Component) {\n _inherits(ReactImageLightbox, _Component);\n\n var _super = _createSuper(ReactImageLightbox);\n\n function ReactImageLightbox(props) {\n var _this;\n\n _classCallCheck(this, ReactImageLightbox);\n\n _this = _super.call(this, props);\n _this.state = {\n //-----------------------------\n // Animation\n //-----------------------------\n // Lightbox is closing\n // When Lightbox is mounted, if animation is enabled it will open with the reverse of the closing animation\n isClosing: !props.animationDisabled,\n // Component parts should animate (e.g., when images are moving, or image is being zoomed)\n shouldAnimate: false,\n //-----------------------------\n // Zoom settings\n //-----------------------------\n // Zoom level of image\n zoomLevel: MIN_ZOOM_LEVEL,\n //-----------------------------\n // Image position settings\n //-----------------------------\n // Horizontal offset from center\n offsetX: 0,\n // Vertical offset from center\n offsetY: 0,\n // image load error for srcType\n loadErrorStatus: {}\n }; // Refs\n\n _this.outerEl = /*#__PURE__*/React.createRef();\n _this.zoomInBtn = /*#__PURE__*/React.createRef();\n _this.zoomOutBtn = /*#__PURE__*/React.createRef();\n _this.caption = /*#__PURE__*/React.createRef();\n _this.closeIfClickInner = _this.closeIfClickInner.bind(_assertThisInitialized(_this));\n _this.handleImageDoubleClick = _this.handleImageDoubleClick.bind(_assertThisInitialized(_this));\n _this.handleImageMouseWheel = _this.handleImageMouseWheel.bind(_assertThisInitialized(_this));\n _this.handleKeyInput = _this.handleKeyInput.bind(_assertThisInitialized(_this));\n _this.handleMouseUp = _this.handleMouseUp.bind(_assertThisInitialized(_this));\n _this.handleMouseDown = _this.handleMouseDown.bind(_assertThisInitialized(_this));\n _this.handleMouseMove = _this.handleMouseMove.bind(_assertThisInitialized(_this));\n _this.handleOuterMousewheel = _this.handleOuterMousewheel.bind(_assertThisInitialized(_this));\n _this.handleTouchStart = _this.handleTouchStart.bind(_assertThisInitialized(_this));\n _this.handleTouchMove = _this.handleTouchMove.bind(_assertThisInitialized(_this));\n _this.handleTouchEnd = _this.handleTouchEnd.bind(_assertThisInitialized(_this));\n _this.handlePointerEvent = _this.handlePointerEvent.bind(_assertThisInitialized(_this));\n _this.handleCaptionMousewheel = _this.handleCaptionMousewheel.bind(_assertThisInitialized(_this));\n _this.handleWindowResize = _this.handleWindowResize.bind(_assertThisInitialized(_this));\n _this.handleZoomInButtonClick = _this.handleZoomInButtonClick.bind(_assertThisInitialized(_this));\n _this.handleZoomOutButtonClick = _this.handleZoomOutButtonClick.bind(_assertThisInitialized(_this));\n _this.requestClose = _this.requestClose.bind(_assertThisInitialized(_this));\n _this.requestMoveNext = _this.requestMoveNext.bind(_assertThisInitialized(_this));\n _this.requestMovePrev = _this.requestMovePrev.bind(_assertThisInitialized(_this)); // Timeouts - always clear it before umount\n\n _this.timeouts = []; // Current action\n\n _this.currentAction = ACTION_NONE; // Events source\n\n _this.eventsSource = SOURCE_ANY; // Empty pointers list\n\n _this.pointerList = []; // Prevent inner close\n\n _this.preventInnerClose = false;\n _this.preventInnerCloseTimeout = null; // Used to disable animation when changing props.mainSrc|nextSrc|prevSrc\n\n _this.keyPressed = false; // Used to store load state / dimensions of images\n\n _this.imageCache = {}; // Time the last keydown event was called (used in keyboard action rate limiting)\n\n _this.lastKeyDownTime = 0; // Used for debouncing window resize event\n\n _this.resizeTimeout = null; // Used to determine when actions are triggered by the scroll wheel\n\n _this.wheelActionTimeout = null;\n _this.resetScrollTimeout = null;\n _this.scrollX = 0;\n _this.scrollY = 0; // Used in panning zoomed images\n\n _this.moveStartX = 0;\n _this.moveStartY = 0;\n _this.moveStartOffsetX = 0;\n _this.moveStartOffsetY = 0; // Used to swipe\n\n _this.swipeStartX = 0;\n _this.swipeStartY = 0;\n _this.swipeEndX = 0;\n _this.swipeEndY = 0; // Used to pinch\n\n _this.pinchTouchList = null;\n _this.pinchDistance = 0; // Used to differentiate between images with identical src\n\n _this.keyCounter = 0; // Used to detect a move when all src's remain unchanged (four or more of the same image in a row)\n\n _this.moveRequested = false;\n return _this;\n }\n\n _createClass(ReactImageLightbox, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n var _this2 = this;\n\n if (!this.props.animationDisabled) {\n // Make opening animation play\n this.setState({\n isClosing: false\n });\n } // Prevents cross-origin errors when using a cross-origin iframe\n\n\n this.windowContext = getHighestSafeWindowContext();\n this.listeners = {\n resize: this.handleWindowResize,\n mouseup: this.handleMouseUp,\n touchend: this.handleTouchEnd,\n touchcancel: this.handleTouchEnd,\n pointerdown: this.handlePointerEvent,\n pointermove: this.handlePointerEvent,\n pointerup: this.handlePointerEvent,\n pointercancel: this.handlePointerEvent\n };\n Object.keys(this.listeners).forEach(function (type) {\n _this2.windowContext.addEventListener(type, _this2.listeners[type]);\n });\n this.loadAllImages();\n }\n }, {\n key: \"shouldComponentUpdate\",\n value: function shouldComponentUpdate(nextProps) {\n var _this3 = this;\n\n this.getSrcTypes().forEach(function (srcType) {\n if (_this3.props[srcType.name] !== nextProps[srcType.name]) {\n _this3.moveRequested = false;\n }\n }); // Wait for move...\n\n return !this.moveRequested;\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate(prevProps) {\n var _this4 = this;\n\n var sourcesChanged = false;\n var prevSrcDict = {};\n var nextSrcDict = {};\n this.getSrcTypes().forEach(function (srcType) {\n if (prevProps[srcType.name] !== _this4.props[srcType.name]) {\n sourcesChanged = true;\n prevSrcDict[prevProps[srcType.name]] = true;\n nextSrcDict[_this4.props[srcType.name]] = true;\n }\n });\n\n if (sourcesChanged || this.moveRequested) {\n // Reset the loaded state for images not rendered next\n Object.keys(prevSrcDict).forEach(function (prevSrc) {\n if (!(prevSrc in nextSrcDict) && prevSrc in _this4.imageCache) {\n _this4.imageCache[prevSrc].loaded = false;\n }\n });\n this.moveRequested = false; // Load any new images\n\n this.loadAllImages(this.props);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n var _this5 = this;\n\n this.didUnmount = true;\n Object.keys(this.listeners).forEach(function (type) {\n _this5.windowContext.removeEventListener(type, _this5.listeners[type]);\n });\n this.timeouts.forEach(function (tid) {\n return clearTimeout(tid);\n });\n }\n }, {\n key: \"setTimeout\",\n value: function (_setTimeout) {\n function setTimeout(_x, _x2) {\n return _setTimeout.apply(this, arguments);\n }\n\n setTimeout.toString = function () {\n return _setTimeout.toString();\n };\n\n return setTimeout;\n }(function (func, time) {\n var _this6 = this;\n\n var id = setTimeout(function () {\n _this6.timeouts = _this6.timeouts.filter(function (tid) {\n return tid !== id;\n });\n func();\n }, time);\n this.timeouts.push(id);\n return id;\n })\n }, {\n key: \"setPreventInnerClose\",\n value: function setPreventInnerClose() {\n var _this7 = this;\n\n if (this.preventInnerCloseTimeout) {\n this.clearTimeout(this.preventInnerCloseTimeout);\n }\n\n this.preventInnerClose = true;\n this.preventInnerCloseTimeout = this.setTimeout(function () {\n _this7.preventInnerClose = false;\n _this7.preventInnerCloseTimeout = null;\n }, 100);\n } // Get info for the best suited image to display with the given srcType\n\n }, {\n key: \"getBestImageForType\",\n value: function getBestImageForType(srcType) {\n var imageSrc = this.props[srcType];\n var fitSizes = {};\n\n if (this.isImageLoaded(imageSrc)) {\n // Use full-size image if available\n fitSizes = this.getFitSizes(this.imageCache[imageSrc].width, this.imageCache[imageSrc].height);\n } else if (this.isImageLoaded(this.props[\"\".concat(srcType, \"Thumbnail\")])) {\n // Fall back to using thumbnail if the image has not been loaded\n imageSrc = this.props[\"\".concat(srcType, \"Thumbnail\")];\n fitSizes = this.getFitSizes(this.imageCache[imageSrc].width, this.imageCache[imageSrc].height, true);\n } else {\n return null;\n }\n\n return {\n src: imageSrc,\n height: this.imageCache[imageSrc].height,\n width: this.imageCache[imageSrc].width,\n targetHeight: fitSizes.height,\n targetWidth: fitSizes.width\n };\n } // Get sizing for when an image is larger than the window\n\n }, {\n key: \"getFitSizes\",\n value: function getFitSizes(width, height, stretch) {\n var boxSize = this.getLightboxRect();\n var maxHeight = boxSize.height - this.props.imagePadding * 2;\n var maxWidth = boxSize.width - this.props.imagePadding * 2;\n\n if (!stretch) {\n maxHeight = Math.min(maxHeight, height);\n maxWidth = Math.min(maxWidth, width);\n }\n\n var maxRatio = maxWidth / maxHeight;\n var srcRatio = width / height;\n\n if (maxRatio > srcRatio) {\n // height is the constraining dimension of the photo\n return {\n width: width * maxHeight / height,\n height: maxHeight\n };\n }\n\n return {\n width: maxWidth,\n height: height * maxWidth / width\n };\n }\n }, {\n key: \"getMaxOffsets\",\n value: function getMaxOffsets() {\n var zoomLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state.zoomLevel;\n var currentImageInfo = this.getBestImageForType('mainSrc');\n\n if (currentImageInfo === null) {\n return {\n maxX: 0,\n minX: 0,\n maxY: 0,\n minY: 0\n };\n }\n\n var boxSize = this.getLightboxRect();\n var zoomMultiplier = this.getZoomMultiplier(zoomLevel);\n var maxX = 0;\n\n if (zoomMultiplier * currentImageInfo.width - boxSize.width < 0) {\n // if there is still blank space in the X dimension, don't limit except to the opposite edge\n maxX = (boxSize.width - zoomMultiplier * currentImageInfo.width) / 2;\n } else {\n maxX = (zoomMultiplier * currentImageInfo.width - boxSize.width) / 2;\n }\n\n var maxY = 0;\n\n if (zoomMultiplier * currentImageInfo.height - boxSize.height < 0) {\n // if there is still blank space in the Y dimension, don't limit except to the opposite edge\n maxY = (boxSize.height - zoomMultiplier * currentImageInfo.height) / 2;\n } else {\n maxY = (zoomMultiplier * currentImageInfo.height - boxSize.height) / 2;\n }\n\n return {\n maxX: maxX,\n maxY: maxY,\n minX: -1 * maxX,\n minY: -1 * maxY\n };\n } // Get image src types\n\n }, {\n key: \"getSrcTypes\",\n value: function getSrcTypes() {\n return [{\n name: 'mainSrc',\n keyEnding: \"i\".concat(this.keyCounter)\n }, {\n name: 'mainSrcThumbnail',\n keyEnding: \"t\".concat(this.keyCounter)\n }, {\n name: 'nextSrc',\n keyEnding: \"i\".concat(this.keyCounter + 1)\n }, {\n name: 'nextSrcThumbnail',\n keyEnding: \"t\".concat(this.keyCounter + 1)\n }, {\n name: 'prevSrc',\n keyEnding: \"i\".concat(this.keyCounter - 1)\n }, {\n name: 'prevSrcThumbnail',\n keyEnding: \"t\".concat(this.keyCounter - 1)\n }];\n }\n /**\n * Get sizing when the image is scaled\n */\n\n }, {\n key: \"getZoomMultiplier\",\n value: function getZoomMultiplier() {\n var zoomLevel = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.state.zoomLevel;\n return Math.pow(ZOOM_RATIO, zoomLevel);\n }\n /**\n * Get the size of the lightbox in pixels\n */\n\n }, {\n key: \"getLightboxRect\",\n value: function getLightboxRect() {\n if (this.outerEl.current) {\n return this.outerEl.current.getBoundingClientRect();\n }\n\n return {\n width: getWindowWidth(),\n height: getWindowHeight(),\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n }\n }, {\n key: \"clearTimeout\",\n value: function (_clearTimeout) {\n function clearTimeout(_x3) {\n return _clearTimeout.apply(this, arguments);\n }\n\n clearTimeout.toString = function () {\n return _clearTimeout.toString();\n };\n\n return clearTimeout;\n }(function (id) {\n this.timeouts = this.timeouts.filter(function (tid) {\n return tid !== id;\n });\n clearTimeout(id);\n } // Change zoom level\n )\n }, {\n key: \"changeZoom\",\n value: function changeZoom(zoomLevel, clientX, clientY) {\n // Ignore if zoom disabled\n if (!this.props.enableZoom) {\n return;\n } // Constrain zoom level to the set bounds\n\n\n var nextZoomLevel = Math.max(MIN_ZOOM_LEVEL, Math.min(MAX_ZOOM_LEVEL, zoomLevel)); // Ignore requests that don't change the zoom level\n\n if (nextZoomLevel === this.state.zoomLevel) {\n return;\n }\n\n if (nextZoomLevel === MIN_ZOOM_LEVEL) {\n // Snap back to center if zoomed all the way out\n this.setState({\n zoomLevel: nextZoomLevel,\n offsetX: 0,\n offsetY: 0\n });\n return;\n }\n\n var imageBaseSize = this.getBestImageForType('mainSrc');\n\n if (imageBaseSize === null) {\n return;\n }\n\n var currentZoomMultiplier = this.getZoomMultiplier();\n var nextZoomMultiplier = this.getZoomMultiplier(nextZoomLevel); // Default to the center of the image to zoom when no mouse position specified\n\n var boxRect = this.getLightboxRect();\n var pointerX = typeof clientX !== 'undefined' ? clientX - boxRect.left : boxRect.width / 2;\n var pointerY = typeof clientY !== 'undefined' ? clientY - boxRect.top : boxRect.height / 2;\n var currentImageOffsetX = (boxRect.width - imageBaseSize.width * currentZoomMultiplier) / 2;\n var currentImageOffsetY = (boxRect.height - imageBaseSize.height * currentZoomMultiplier) / 2;\n var currentImageRealOffsetX = currentImageOffsetX - this.state.offsetX;\n var currentImageRealOffsetY = currentImageOffsetY - this.state.offsetY;\n var currentPointerXRelativeToImage = (pointerX - currentImageRealOffsetX) / currentZoomMultiplier;\n var currentPointerYRelativeToImage = (pointerY - currentImageRealOffsetY) / currentZoomMultiplier;\n var nextImageRealOffsetX = pointerX - currentPointerXRelativeToImage * nextZoomMultiplier;\n var nextImageRealOffsetY = pointerY - currentPointerYRelativeToImage * nextZoomMultiplier;\n var nextImageOffsetX = (boxRect.width - imageBaseSize.width * nextZoomMultiplier) / 2;\n var nextImageOffsetY = (boxRect.height - imageBaseSize.height * nextZoomMultiplier) / 2;\n var nextOffsetX = nextImageOffsetX - nextImageRealOffsetX;\n var nextOffsetY = nextImageOffsetY - nextImageRealOffsetY; // When zooming out, limit the offset so things don't get left askew\n\n if (this.currentAction !== ACTION_PINCH) {\n var maxOffsets = this.getMaxOffsets();\n\n if (this.state.zoomLevel > nextZoomLevel) {\n nextOffsetX = Math.max(maxOffsets.minX, Math.min(maxOffsets.maxX, nextOffsetX));\n nextOffsetY = Math.max(maxOffsets.minY, Math.min(maxOffsets.maxY, nextOffsetY));\n }\n }\n\n this.setState({\n zoomLevel: nextZoomLevel,\n offsetX: nextOffsetX,\n offsetY: nextOffsetY\n });\n }\n }, {\n key: \"closeIfClickInner\",\n value: function closeIfClickInner(event) {\n if (!this.preventInnerClose && event.target.className.search(/\\bril-inner\\b/) > -1) {\n this.requestClose(event);\n }\n }\n /**\n * Handle user keyboard actions\n */\n\n }, {\n key: \"handleKeyInput\",\n value: function handleKeyInput(event) {\n event.stopPropagation(); // Ignore key input during animations\n\n if (this.isAnimating()) {\n return;\n } // Allow slightly faster navigation through the images when user presses keys repeatedly\n\n\n if (event.type === 'keyup') {\n this.lastKeyDownTime -= this.props.keyRepeatKeyupBonus;\n return;\n }\n\n var keyCode = event.which || event.keyCode; // Ignore key presses that happen too close to each other (when rapid fire key pressing or holding down the key)\n // But allow it if it's a lightbox closing action\n\n var currentTime = new Date();\n\n if (currentTime.getTime() - this.lastKeyDownTime < this.props.keyRepeatLimit && keyCode !== KEYS.ESC) {\n return;\n }\n\n this.lastKeyDownTime = currentTime.getTime();\n\n switch (keyCode) {\n // ESC key closes the lightbox\n case KEYS.ESC:\n event.preventDefault();\n this.requestClose(event);\n break;\n // Left arrow key moves to previous image\n\n case KEYS.LEFT_ARROW:\n if (!this.props.prevSrc) {\n return;\n }\n\n event.preventDefault();\n this.keyPressed = true;\n this.requestMovePrev(event);\n break;\n // Right arrow key moves to next image\n\n case KEYS.RIGHT_ARROW:\n if (!this.props.nextSrc) {\n return;\n }\n\n event.preventDefault();\n this.keyPressed = true;\n this.requestMoveNext(event);\n break;\n }\n }\n /**\n * Handle a mouse wheel event over the lightbox container\n */\n\n }, {\n key: \"handleOuterMousewheel\",\n value: function handleOuterMousewheel(event) {\n var _this8 = this; // Prevent scrolling of the background\n\n\n event.stopPropagation();\n var xThreshold = WHEEL_MOVE_X_THRESHOLD;\n var actionDelay = 0;\n var imageMoveDelay = 500;\n this.clearTimeout(this.resetScrollTimeout);\n this.resetScrollTimeout = this.setTimeout(function () {\n _this8.scrollX = 0;\n _this8.scrollY = 0;\n }, 300); // Prevent rapid-fire zoom behavior\n\n if (this.wheelActionTimeout !== null || this.isAnimating()) {\n return;\n }\n\n if (Math.abs(event.deltaY) < Math.abs(event.deltaX)) {\n // handle horizontal scrolls with image moves\n this.scrollY = 0;\n this.scrollX += event.deltaX;\n var bigLeapX = xThreshold / 2; // If the scroll amount has accumulated sufficiently, or a large leap was taken\n\n if (this.scrollX >= xThreshold || event.deltaX >= bigLeapX) {\n // Scroll right moves to next\n this.requestMoveNext(event);\n actionDelay = imageMoveDelay;\n this.scrollX = 0;\n } else if (this.scrollX <= -1 * xThreshold || event.deltaX <= -1 * bigLeapX) {\n // Scroll left moves to previous\n this.requestMovePrev(event);\n actionDelay = imageMoveDelay;\n this.scrollX = 0;\n }\n } // Allow successive actions after the set delay\n\n\n if (actionDelay !== 0) {\n this.wheelActionTimeout = this.setTimeout(function () {\n _this8.wheelActionTimeout = null;\n }, actionDelay);\n }\n }\n }, {\n key: \"handleImageMouseWheel\",\n value: function handleImageMouseWheel(event) {\n var yThreshold = WHEEL_MOVE_Y_THRESHOLD;\n\n if (Math.abs(event.deltaY) >= Math.abs(event.deltaX)) {\n event.stopPropagation(); // If the vertical scroll amount was large enough, perform a zoom\n\n if (Math.abs(event.deltaY) < yThreshold) {\n return;\n }\n\n this.scrollX = 0;\n this.scrollY += event.deltaY;\n this.changeZoom(this.state.zoomLevel - event.deltaY, event.clientX, event.clientY);\n }\n }\n /**\n * Handle a double click on the current image\n */\n\n }, {\n key: \"handleImageDoubleClick\",\n value: function handleImageDoubleClick(event) {\n if (this.state.zoomLevel > MIN_ZOOM_LEVEL) {\n // A double click when zoomed in zooms all the way out\n this.changeZoom(MIN_ZOOM_LEVEL, event.clientX, event.clientY);\n } else {\n // A double click when zoomed all the way out zooms in\n this.changeZoom(this.state.zoomLevel + ZOOM_BUTTON_INCREMENT_SIZE, event.clientX, event.clientY);\n }\n }\n }, {\n key: \"shouldHandleEvent\",\n value: function shouldHandleEvent(source) {\n if (this.eventsSource === source) {\n return true;\n }\n\n if (this.eventsSource === SOURCE_ANY) {\n this.eventsSource = source;\n return true;\n }\n\n switch (source) {\n case SOURCE_MOUSE:\n return false;\n\n case SOURCE_TOUCH:\n this.eventsSource = SOURCE_TOUCH;\n this.filterPointersBySource();\n return true;\n\n case SOURCE_POINTER:\n if (this.eventsSource === SOURCE_MOUSE) {\n this.eventsSource = SOURCE_POINTER;\n this.filterPointersBySource();\n return true;\n }\n\n return false;\n\n default:\n return false;\n }\n }\n }, {\n key: \"addPointer\",\n value: function addPointer(pointer) {\n this.pointerList.push(pointer);\n }\n }, {\n key: \"removePointer\",\n value: function removePointer(pointer) {\n this.pointerList = this.pointerList.filter(function (_ref) {\n var id = _ref.id;\n return id !== pointer.id;\n });\n }\n }, {\n key: \"filterPointersBySource\",\n value: function filterPointersBySource() {\n var _this9 = this;\n\n this.pointerList = this.pointerList.filter(function (_ref2) {\n var source = _ref2.source;\n return source === _this9.eventsSource;\n });\n }\n }, {\n key: \"handleMouseDown\",\n value: function handleMouseDown(event) {\n if (this.shouldHandleEvent(SOURCE_MOUSE) && ReactImageLightbox.isTargetMatchImage(event.target)) {\n this.addPointer(ReactImageLightbox.parseMouseEvent(event));\n this.multiPointerStart(event);\n }\n }\n }, {\n key: \"handleMouseMove\",\n value: function handleMouseMove(event) {\n if (this.shouldHandleEvent(SOURCE_MOUSE)) {\n this.multiPointerMove(event, [ReactImageLightbox.parseMouseEvent(event)]);\n }\n }\n }, {\n key: \"handleMouseUp\",\n value: function handleMouseUp(event) {\n if (this.shouldHandleEvent(SOURCE_MOUSE)) {\n this.removePointer(ReactImageLightbox.parseMouseEvent(event));\n this.multiPointerEnd(event);\n }\n }\n }, {\n key: \"handlePointerEvent\",\n value: function handlePointerEvent(event) {\n if (this.shouldHandleEvent(SOURCE_POINTER)) {\n switch (event.type) {\n case 'pointerdown':\n if (ReactImageLightbox.isTargetMatchImage(event.target)) {\n this.addPointer(ReactImageLightbox.parsePointerEvent(event));\n this.multiPointerStart(event);\n }\n\n break;\n\n case 'pointermove':\n this.multiPointerMove(event, [ReactImageLightbox.parsePointerEvent(event)]);\n break;\n\n case 'pointerup':\n case 'pointercancel':\n this.removePointer(ReactImageLightbox.parsePointerEvent(event));\n this.multiPointerEnd(event);\n break;\n }\n }\n }\n }, {\n key: \"handleTouchStart\",\n value: function handleTouchStart(event) {\n var _this10 = this;\n\n if (this.shouldHandleEvent(SOURCE_TOUCH) && ReactImageLightbox.isTargetMatchImage(event.target)) {\n [].forEach.call(event.changedTouches, function (eventTouch) {\n return _this10.addPointer(ReactImageLightbox.parseTouchPointer(eventTouch));\n });\n this.multiPointerStart(event);\n }\n }\n }, {\n key: \"handleTouchMove\",\n value: function handleTouchMove(event) {\n if (this.shouldHandleEvent(SOURCE_TOUCH)) {\n this.multiPointerMove(event, [].map.call(event.changedTouches, function (eventTouch) {\n return ReactImageLightbox.parseTouchPointer(eventTouch);\n }));\n }\n }\n }, {\n key: \"handleTouchEnd\",\n value: function handleTouchEnd(event) {\n var _this11 = this;\n\n if (this.shouldHandleEvent(SOURCE_TOUCH)) {\n [].map.call(event.changedTouches, function (touch) {\n return _this11.removePointer(ReactImageLightbox.parseTouchPointer(touch));\n });\n this.multiPointerEnd(event);\n }\n }\n }, {\n key: \"decideMoveOrSwipe\",\n value: function decideMoveOrSwipe(pointer) {\n if (this.state.zoomLevel <= MIN_ZOOM_LEVEL) {\n this.handleSwipeStart(pointer);\n } else {\n this.handleMoveStart(pointer);\n }\n }\n }, {\n key: \"multiPointerStart\",\n value: function multiPointerStart(event) {\n this.handleEnd(null);\n\n switch (this.pointerList.length) {\n case 1:\n {\n event.preventDefault();\n this.decideMoveOrSwipe(this.pointerList[0]);\n break;\n }\n\n case 2:\n {\n event.preventDefault();\n this.handlePinchStart(this.pointerList);\n break;\n }\n }\n }\n }, {\n key: \"multiPointerMove\",\n value: function multiPointerMove(event, pointerList) {\n switch (this.currentAction) {\n case ACTION_MOVE:\n {\n event.preventDefault();\n this.handleMove(pointerList[0]);\n break;\n }\n\n case ACTION_SWIPE:\n {\n event.preventDefault();\n this.handleSwipe(pointerList[0]);\n break;\n }\n\n case ACTION_PINCH:\n {\n event.preventDefault();\n this.handlePinch(pointerList);\n break;\n }\n }\n }\n }, {\n key: \"multiPointerEnd\",\n value: function multiPointerEnd(event) {\n if (this.currentAction !== ACTION_NONE) {\n this.setPreventInnerClose();\n this.handleEnd(event);\n }\n\n switch (this.pointerList.length) {\n case 0:\n {\n this.eventsSource = SOURCE_ANY;\n break;\n }\n\n case 1:\n {\n event.preventDefault();\n this.decideMoveOrSwipe(this.pointerList[0]);\n break;\n }\n\n case 2:\n {\n event.preventDefault();\n this.handlePinchStart(this.pointerList);\n break;\n }\n }\n }\n }, {\n key: \"handleEnd\",\n value: function handleEnd(event) {\n switch (this.currentAction) {\n case ACTION_MOVE:\n this.handleMoveEnd(event);\n break;\n\n case ACTION_SWIPE:\n this.handleSwipeEnd(event);\n break;\n\n case ACTION_PINCH:\n this.handlePinchEnd(event);\n break;\n }\n } // Handle move start over the lightbox container\n // This happens:\n // - On a mouseDown event\n // - On a touchstart event\n\n }, {\n key: \"handleMoveStart\",\n value: function handleMoveStart(_ref3) {\n var clientX = _ref3.x,\n clientY = _ref3.y;\n\n if (!this.props.enableZoom) {\n return;\n }\n\n this.currentAction = ACTION_MOVE;\n this.moveStartX = clientX;\n this.moveStartY = clientY;\n this.moveStartOffsetX = this.state.offsetX;\n this.moveStartOffsetY = this.state.offsetY;\n } // Handle dragging over the lightbox container\n // This happens:\n // - After a mouseDown and before a mouseUp event\n // - After a touchstart and before a touchend event\n\n }, {\n key: \"handleMove\",\n value: function handleMove(_ref4) {\n var clientX = _ref4.x,\n clientY = _ref4.y;\n var newOffsetX = this.moveStartX - clientX + this.moveStartOffsetX;\n var newOffsetY = this.moveStartY - clientY + this.moveStartOffsetY;\n\n if (this.state.offsetX !== newOffsetX || this.state.offsetY !== newOffsetY) {\n this.setState({\n offsetX: newOffsetX,\n offsetY: newOffsetY\n });\n }\n }\n }, {\n key: \"handleMoveEnd\",\n value: function handleMoveEnd() {\n var _this12 = this;\n\n this.currentAction = ACTION_NONE;\n this.moveStartX = 0;\n this.moveStartY = 0;\n this.moveStartOffsetX = 0;\n this.moveStartOffsetY = 0; // Snap image back into frame if outside max offset range\n\n var maxOffsets = this.getMaxOffsets();\n var nextOffsetX = Math.max(maxOffsets.minX, Math.min(maxOffsets.maxX, this.state.offsetX));\n var nextOffsetY = Math.max(maxOffsets.minY, Math.min(maxOffsets.maxY, this.state.offsetY));\n\n if (nextOffsetX !== this.state.offsetX || nextOffsetY !== this.state.offsetY) {\n this.setState({\n offsetX: nextOffsetX,\n offsetY: nextOffsetY,\n shouldAnimate: true\n });\n this.setTimeout(function () {\n _this12.setState({\n shouldAnimate: false\n });\n }, this.props.animationDuration);\n }\n }\n }, {\n key: \"handleSwipeStart\",\n value: function handleSwipeStart(_ref5) {\n var clientX = _ref5.x,\n clientY = _ref5.y;\n this.currentAction = ACTION_SWIPE;\n this.swipeStartX = clientX;\n this.swipeStartY = clientY;\n this.swipeEndX = clientX;\n this.swipeEndY = clientY;\n }\n }, {\n key: \"handleSwipe\",\n value: function handleSwipe(_ref6) {\n var clientX = _ref6.x,\n clientY = _ref6.y;\n this.swipeEndX = clientX;\n this.swipeEndY = clientY;\n }\n }, {\n key: \"handleSwipeEnd\",\n value: function handleSwipeEnd(event) {\n var xDiff = this.swipeEndX - this.swipeStartX;\n var xDiffAbs = Math.abs(xDiff);\n var yDiffAbs = Math.abs(this.swipeEndY - this.swipeStartY);\n this.currentAction = ACTION_NONE;\n this.swipeStartX = 0;\n this.swipeStartY = 0;\n this.swipeEndX = 0;\n this.swipeEndY = 0;\n\n if (!event || this.isAnimating() || xDiffAbs < yDiffAbs * 1.5) {\n return;\n }\n\n if (xDiffAbs < MIN_SWIPE_DISTANCE) {\n var boxRect = this.getLightboxRect();\n\n if (xDiffAbs < boxRect.width / 4) {\n return;\n }\n }\n\n if (xDiff > 0 && this.props.prevSrc) {\n event.preventDefault();\n this.requestMovePrev();\n } else if (xDiff < 0 && this.props.nextSrc) {\n event.preventDefault();\n this.requestMoveNext();\n }\n }\n }, {\n key: \"calculatePinchDistance\",\n value: function calculatePinchDistance() {\n var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.pinchTouchList,\n _ref8 = _slicedToArray(_ref7, 2),\n a = _ref8[0],\n b = _ref8[1];\n\n return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2));\n }\n }, {\n key: \"calculatePinchCenter\",\n value: function calculatePinchCenter() {\n var _ref9 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.pinchTouchList,\n _ref10 = _slicedToArray(_ref9, 2),\n a = _ref10[0],\n b = _ref10[1];\n\n return {\n x: a.x - (a.x - b.x) / 2,\n y: a.y - (a.y - b.y) / 2\n };\n }\n }, {\n key: \"handlePinchStart\",\n value: function handlePinchStart(pointerList) {\n if (!this.props.enableZoom) {\n return;\n }\n\n this.currentAction = ACTION_PINCH;\n this.pinchTouchList = pointerList.map(function (_ref11) {\n var id = _ref11.id,\n x = _ref11.x,\n y = _ref11.y;\n return {\n id: id,\n x: x,\n y: y\n };\n });\n this.pinchDistance = this.calculatePinchDistance();\n }\n }, {\n key: \"handlePinch\",\n value: function handlePinch(pointerList) {\n this.pinchTouchList = this.pinchTouchList.map(function (oldPointer) {\n for (var i = 0; i < pointerList.length; i += 1) {\n if (pointerList[i].id === oldPointer.id) {\n return pointerList[i];\n }\n }\n\n return oldPointer;\n });\n var newDistance = this.calculatePinchDistance();\n var zoomLevel = this.state.zoomLevel + newDistance - this.pinchDistance;\n this.pinchDistance = newDistance;\n\n var _this$calculatePinchC = this.calculatePinchCenter(this.pinchTouchList),\n clientX = _this$calculatePinchC.x,\n clientY = _this$calculatePinchC.y;\n\n this.changeZoom(zoomLevel, clientX, clientY);\n }\n }, {\n key: \"handlePinchEnd\",\n value: function handlePinchEnd() {\n this.currentAction = ACTION_NONE;\n this.pinchTouchList = null;\n this.pinchDistance = 0;\n } // Handle the window resize event\n\n }, {\n key: \"handleWindowResize\",\n value: function handleWindowResize() {\n this.clearTimeout(this.resizeTimeout);\n this.resizeTimeout = this.setTimeout(this.forceUpdate.bind(this), 100);\n }\n }, {\n key: \"handleZoomInButtonClick\",\n value: function handleZoomInButtonClick() {\n var nextZoomLevel = this.state.zoomLevel + ZOOM_BUTTON_INCREMENT_SIZE;\n this.changeZoom(nextZoomLevel);\n\n if (nextZoomLevel === MAX_ZOOM_LEVEL) {\n this.zoomOutBtn.current.focus();\n }\n }\n }, {\n key: \"handleZoomOutButtonClick\",\n value: function handleZoomOutButtonClick() {\n var nextZoomLevel = this.state.zoomLevel - ZOOM_BUTTON_INCREMENT_SIZE;\n this.changeZoom(nextZoomLevel);\n\n if (nextZoomLevel === MIN_ZOOM_LEVEL) {\n this.zoomInBtn.current.focus();\n }\n }\n }, {\n key: \"handleCaptionMousewheel\",\n value: function handleCaptionMousewheel(event) {\n event.stopPropagation();\n\n if (!this.caption.current) {\n return;\n }\n\n var _this$caption$current = this.caption.current.getBoundingClientRect(),\n height = _this$caption$current.height;\n\n var _this$caption$current2 = this.caption.current,\n scrollHeight = _this$caption$current2.scrollHeight,\n scrollTop = _this$caption$current2.scrollTop;\n\n if (event.deltaY > 0 && height + scrollTop >= scrollHeight || event.deltaY < 0 && scrollTop <= 0) {\n event.preventDefault();\n }\n } // Detach key and mouse input events\n\n }, {\n key: \"isAnimating\",\n value: function isAnimating() {\n return this.state.shouldAnimate || this.state.isClosing;\n } // Check if image is loaded\n\n }, {\n key: \"isImageLoaded\",\n value: function isImageLoaded(imageSrc) {\n return imageSrc && imageSrc in this.imageCache && this.imageCache[imageSrc].loaded;\n } // Load image from src and call callback with image width and height on load\n\n }, {\n key: \"loadImage\",\n value: function loadImage(srcType, imageSrc, done) {\n var _this13 = this; // Return the image info if it is already cached\n\n\n if (this.isImageLoaded(imageSrc)) {\n this.setTimeout(function () {\n done();\n }, 1);\n return;\n }\n\n var inMemoryImage = new global.Image();\n\n if (this.props.imageCrossOrigin) {\n inMemoryImage.crossOrigin = this.props.imageCrossOrigin;\n }\n\n inMemoryImage.onerror = function (errorEvent) {\n _this13.props.onImageLoadError(imageSrc, srcType, errorEvent); // failed to load so set the state loadErrorStatus\n\n\n _this13.setState(function (prevState) {\n return {\n loadErrorStatus: _objectSpread2(_objectSpread2({}, prevState.loadErrorStatus), {}, _defineProperty({}, srcType, true))\n };\n });\n\n done(errorEvent);\n };\n\n inMemoryImage.onload = function () {\n _this13.props.onImageLoad(imageSrc, srcType, inMemoryImage);\n\n _this13.imageCache[imageSrc] = {\n loaded: true,\n width: inMemoryImage.width,\n height: inMemoryImage.height\n };\n done();\n };\n\n inMemoryImage.src = imageSrc;\n } // Load all images and their thumbnails\n\n }, {\n key: \"loadAllImages\",\n value: function loadAllImages() {\n var _this14 = this;\n\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;\n\n var generateLoadDoneCallback = function generateLoadDoneCallback(srcType, imageSrc) {\n return function (err) {\n // Give up showing image on error\n if (err) {\n return;\n } // Don't rerender if the src is not the same as when the load started\n // or if the component has unmounted\n\n\n if (_this14.props[srcType] !== imageSrc || _this14.didUnmount) {\n return;\n } // Force rerender with the new image\n\n\n _this14.forceUpdate();\n };\n }; // Load the images\n\n\n this.getSrcTypes().forEach(function (srcType) {\n var type = srcType.name; // there is no error when we try to load it initially\n\n if (props[type] && _this14.state.loadErrorStatus[type]) {\n _this14.setState(function (prevState) {\n return {\n loadErrorStatus: _objectSpread2(_objectSpread2({}, prevState.loadErrorStatus), {}, _defineProperty({}, type, false))\n };\n });\n } // Load unloaded images\n\n\n if (props[type] && !_this14.isImageLoaded(props[type])) {\n _this14.loadImage(type, props[type], generateLoadDoneCallback(type, props[type]));\n }\n });\n } // Request that the lightbox be closed\n\n }, {\n key: \"requestClose\",\n value: function requestClose(event) {\n var _this15 = this; // Call the parent close request\n\n\n var closeLightbox = function closeLightbox() {\n return _this15.props.onCloseRequest(event);\n };\n\n if (this.props.animationDisabled || event.type === 'keydown' && !this.props.animationOnKeyInput) {\n // No animation\n closeLightbox();\n return;\n } // With animation\n // Start closing animation\n\n\n this.setState({\n isClosing: true\n }); // Perform the actual closing at the end of the animation\n\n this.setTimeout(closeLightbox, this.props.animationDuration);\n }\n }, {\n key: \"requestMove\",\n value: function requestMove(direction, event) {\n var _this16 = this; // Reset the zoom level on image move\n\n\n var nextState = {\n zoomLevel: MIN_ZOOM_LEVEL,\n offsetX: 0,\n offsetY: 0\n }; // Enable animated states\n\n if (!this.props.animationDisabled && (!this.keyPressed || this.props.animationOnKeyInput)) {\n nextState.shouldAnimate = true;\n this.setTimeout(function () {\n return _this16.setState({\n shouldAnimate: false\n });\n }, this.props.animationDuration);\n }\n\n this.keyPressed = false;\n this.moveRequested = true;\n\n if (direction === 'prev') {\n this.keyCounter -= 1;\n this.setState(nextState);\n this.props.onMovePrevRequest(event);\n } else {\n this.keyCounter += 1;\n this.setState(nextState);\n this.props.onMoveNextRequest(event);\n }\n } // Request to transition to the next image\n\n }, {\n key: \"requestMoveNext\",\n value: function requestMoveNext(event) {\n this.requestMove('next', event);\n } // Request to transition to the previous image\n\n }, {\n key: \"requestMovePrev\",\n value: function requestMovePrev(event) {\n this.requestMove('prev', event);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this17 = this;\n\n var _this$props = this.props,\n animationDisabled = _this$props.animationDisabled,\n animationDuration = _this$props.animationDuration,\n clickOutsideToClose = _this$props.clickOutsideToClose,\n discourageDownloads = _this$props.discourageDownloads,\n enableZoom = _this$props.enableZoom,\n imageTitle = _this$props.imageTitle,\n nextSrc = _this$props.nextSrc,\n prevSrc = _this$props.prevSrc,\n toolbarButtons = _this$props.toolbarButtons,\n reactModalStyle = _this$props.reactModalStyle,\n _onAfterOpen = _this$props.onAfterOpen,\n imageCrossOrigin = _this$props.imageCrossOrigin,\n reactModalProps = _this$props.reactModalProps,\n loader = _this$props.loader;\n var _this$state = this.state,\n zoomLevel = _this$state.zoomLevel,\n offsetX = _this$state.offsetX,\n offsetY = _this$state.offsetY,\n isClosing = _this$state.isClosing,\n loadErrorStatus = _this$state.loadErrorStatus;\n var boxSize = this.getLightboxRect();\n var transitionStyle = {}; // Transition settings for sliding animations\n\n if (!animationDisabled && this.isAnimating()) {\n transitionStyle = _objectSpread2(_objectSpread2({}, transitionStyle), {}, {\n transition: \"transform \".concat(animationDuration, \"ms\")\n });\n } // Key endings to differentiate between images with the same src\n\n\n var keyEndings = {};\n this.getSrcTypes().forEach(function (_ref12) {\n var name = _ref12.name,\n keyEnding = _ref12.keyEnding;\n keyEndings[name] = keyEnding;\n }); // Images to be displayed\n\n var images = [];\n\n var addImage = function addImage(srcType, imageClass, transforms) {\n // Ignore types that have no source defined for their full size image\n if (!_this17.props[srcType]) {\n return;\n }\n\n var bestImageInfo = _this17.getBestImageForType(srcType);\n\n var imageStyle = _objectSpread2(_objectSpread2({}, transitionStyle), ReactImageLightbox.getTransform(_objectSpread2(_objectSpread2({}, transforms), bestImageInfo)));\n\n if (zoomLevel > MIN_ZOOM_LEVEL) {\n imageStyle.cursor = 'move';\n } // support IE 9 and 11\n\n\n var hasTrueValue = function hasTrueValue(object) {\n return Object.keys(object).some(function (key) {\n return object[key];\n });\n }; // when error on one of the loads then push custom error stuff\n\n\n if (bestImageInfo === null && hasTrueValue(loadErrorStatus)) {\n images.push( /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(imageClass, \" ril__image ril-errored\"),\n style: imageStyle,\n key: _this17.props[srcType] + keyEndings[srcType]\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"ril__errorContainer\"\n }, _this17.props.imageLoadErrorMessage)));\n return;\n }\n\n if (bestImageInfo === null) {\n var loadingIcon = loader !== undefined ? loader : /*#__PURE__*/React.createElement(\"div\", {\n className: \"ril-loading-circle ril__loadingCircle ril__loadingContainer__icon\"\n }, _toConsumableArray(new Array(12)).map(function (_, index) {\n return /*#__PURE__*/React.createElement(\"div\", {\n // eslint-disable-next-line react/no-array-index-key\n key: index,\n className: \"ril-loading-circle-point ril__loadingCirclePoint\"\n });\n })); // Fall back to loading icon if the thumbnail has not been loaded\n\n images.push( /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(imageClass, \" ril__image ril-not-loaded\"),\n style: imageStyle,\n key: _this17.props[srcType] + keyEndings[srcType]\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"ril__loadingContainer\"\n }, loadingIcon)));\n return;\n }\n\n var imageSrc = bestImageInfo.src;\n\n if (discourageDownloads) {\n imageStyle.backgroundImage = \"url('\".concat(imageSrc, \"')\");\n images.push( /*#__PURE__*/React.createElement(\"div\", {\n className: \"\".concat(imageClass, \" ril__image ril__imageDiscourager\"),\n onDoubleClick: _this17.handleImageDoubleClick,\n onWheel: _this17.handleImageMouseWheel,\n style: imageStyle,\n key: imageSrc + keyEndings[srcType]\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"ril-download-blocker ril__downloadBlocker\"\n })));\n } else {\n images.push( /*#__PURE__*/React.createElement(\"img\", _extends({}, imageCrossOrigin ? {\n crossOrigin: imageCrossOrigin\n } : {}, {\n className: \"\".concat(imageClass, \" ril__image\"),\n onDoubleClick: _this17.handleImageDoubleClick,\n onWheel: _this17.handleImageMouseWheel,\n onDragStart: function onDragStart(e) {\n return e.preventDefault();\n },\n style: imageStyle,\n src: imageSrc,\n key: imageSrc + keyEndings[srcType],\n alt: typeof imageTitle === 'string' ? imageTitle : translate('Image'),\n draggable: false\n })));\n }\n };\n\n var zoomMultiplier = this.getZoomMultiplier(); // Next Image (displayed on the right)\n\n addImage('nextSrc', 'ril-image-next ril__imageNext', {\n x: boxSize.width\n }); // Main Image\n\n addImage('mainSrc', 'ril-image-current', {\n x: -1 * offsetX,\n y: -1 * offsetY,\n zoom: zoomMultiplier\n }); // Previous Image (displayed on the left)\n\n addImage('prevSrc', 'ril-image-prev ril__imagePrev', {\n x: -1 * boxSize.width\n });\n var modalStyle = {\n overlay: _objectSpread2({\n zIndex: 1000,\n backgroundColor: 'transparent'\n }, reactModalStyle.overlay),\n content: _objectSpread2({\n backgroundColor: 'transparent',\n overflow: 'hidden',\n // Needed, otherwise keyboard shortcuts scroll the page\n border: 'none',\n borderRadius: 0,\n padding: 0,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }, reactModalStyle.content)\n };\n return /*#__PURE__*/React.createElement(Modal, _extends({\n isOpen: true,\n onRequestClose: clickOutsideToClose ? this.requestClose : undefined,\n onAfterOpen: function onAfterOpen() {\n // Focus on the div with key handlers\n if (_this17.outerEl.current) {\n _this17.outerEl.current.focus();\n }\n\n _onAfterOpen();\n },\n style: modalStyle,\n contentLabel: translate('Lightbox'),\n appElement: typeof global.window !== 'undefined' ? global.window.document.body : undefined\n }, reactModalProps), /*#__PURE__*/React.createElement(\"div\", {\n // eslint-disable-line jsx-a11y/no-static-element-interactions\n // Floating modal with closing animations\n className: \"ril-outer ril__outer ril__outerAnimating \".concat(this.props.wrapperClassName, \" \").concat(isClosing ? 'ril-closing ril__outerClosing' : ''),\n style: {\n transition: \"opacity \".concat(animationDuration, \"ms\"),\n animationDuration: \"\".concat(animationDuration, \"ms\"),\n animationDirection: isClosing ? 'normal' : 'reverse'\n },\n ref: this.outerEl,\n onWheel: this.handleOuterMousewheel,\n onMouseMove: this.handleMouseMove,\n onMouseDown: this.handleMouseDown,\n onTouchStart: this.handleTouchStart,\n onTouchMove: this.handleTouchMove,\n tabIndex: \"-1\" // Enables key handlers on div\n ,\n onKeyDown: this.handleKeyInput,\n onKeyUp: this.handleKeyInput\n }, /*#__PURE__*/React.createElement(\"div\", {\n // eslint-disable-line jsx-a11y/no-static-element-interactions, jsx-a11y/click-events-have-key-events\n // Image holder\n className: \"ril-inner ril__inner\",\n onClick: clickOutsideToClose ? this.closeIfClickInner : undefined\n }, images), prevSrc && /*#__PURE__*/React.createElement(\"button\", {\n // Move to previous image button\n type: \"button\",\n className: \"ril-prev-button ril__navButtons ril__navButtonPrev\",\n key: \"prev\",\n \"aria-label\": this.props.prevLabel,\n title: this.props.prevLabel,\n onClick: !this.isAnimating() ? this.requestMovePrev : undefined // Ignore clicks during animation\n\n }), nextSrc && /*#__PURE__*/React.createElement(\"button\", {\n // Move to next image button\n type: \"button\",\n className: \"ril-next-button ril__navButtons ril__navButtonNext\",\n key: \"next\",\n \"aria-label\": this.props.nextLabel,\n title: this.props.nextLabel,\n onClick: !this.isAnimating() ? this.requestMoveNext : undefined // Ignore clicks during animation\n\n }), /*#__PURE__*/React.createElement(\"div\", {\n // Lightbox toolbar\n className: \"ril-toolbar ril__toolbar\"\n }, /*#__PURE__*/React.createElement(\"ul\", {\n className: \"ril-toolbar-left ril__toolbarSide ril__toolbarLeftSide\"\n }, /*#__PURE__*/React.createElement(\"li\", {\n className: \"ril-toolbar__item ril__toolbarItem\"\n }, /*#__PURE__*/React.createElement(\"span\", {\n className: \"ril-toolbar__item__child ril__toolbarItemChild\"\n }, imageTitle))), /*#__PURE__*/React.createElement(\"ul\", {\n className: \"ril-toolbar-right ril__toolbarSide ril__toolbarRightSide\"\n }, toolbarButtons && toolbarButtons.map(function (button, i) {\n return /*#__PURE__*/React.createElement(\"li\", {\n key: \"button_\".concat(i + 1),\n className: \"ril-toolbar__item ril__toolbarItem\"\n }, button);\n }), enableZoom && /*#__PURE__*/React.createElement(\"li\", {\n className: \"ril-toolbar__item ril__toolbarItem\"\n }, /*#__PURE__*/React.createElement(\"button\", {\n // Lightbox zoom in button\n type: \"button\",\n key: \"zoom-in\",\n \"aria-label\": this.props.zoomInLabel,\n title: this.props.zoomInLabel,\n className: ['ril-zoom-in', 'ril__toolbarItemChild', 'ril__builtinButton', 'ril__zoomInButton'].concat(_toConsumableArray(zoomLevel === MAX_ZOOM_LEVEL ? ['ril__builtinButtonDisabled'] : [])).join(' '),\n ref: this.zoomInBtn,\n disabled: this.isAnimating() || zoomLevel === MAX_ZOOM_LEVEL,\n onClick: !this.isAnimating() && zoomLevel !== MAX_ZOOM_LEVEL ? this.handleZoomInButtonClick : undefined\n })), enableZoom && /*#__PURE__*/React.createElement(\"li\", {\n className: \"ril-toolbar__item ril__toolbarItem\"\n }, /*#__PURE__*/React.createElement(\"button\", {\n // Lightbox zoom out button\n type: \"button\",\n key: \"zoom-out\",\n \"aria-label\": this.props.zoomOutLabel,\n title: this.props.zoomOutLabel,\n className: ['ril-zoom-out', 'ril__toolbarItemChild', 'ril__builtinButton', 'ril__zoomOutButton'].concat(_toConsumableArray(zoomLevel === MIN_ZOOM_LEVEL ? ['ril__builtinButtonDisabled'] : [])).join(' '),\n ref: this.zoomOutBtn,\n disabled: this.isAnimating() || zoomLevel === MIN_ZOOM_LEVEL,\n onClick: !this.isAnimating() && zoomLevel !== MIN_ZOOM_LEVEL ? this.handleZoomOutButtonClick : undefined\n })), /*#__PURE__*/React.createElement(\"li\", {\n className: \"ril-toolbar__item ril__toolbarItem\"\n }, /*#__PURE__*/React.createElement(\"button\", {\n // Lightbox close button\n type: \"button\",\n key: \"close\",\n \"aria-label\": this.props.closeLabel,\n title: this.props.closeLabel,\n className: \"ril-close ril-toolbar__item__child ril__toolbarItemChild ril__builtinButton ril__closeButton\",\n onClick: !this.isAnimating() ? this.requestClose : undefined // Ignore clicks during animation\n\n })))), this.props.imageCaption &&\n /*#__PURE__*/\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n React.createElement(\"div\", {\n // Image caption\n onWheel: this.handleCaptionMousewheel,\n onMouseDown: function onMouseDown(event) {\n return event.stopPropagation();\n },\n className: \"ril-caption ril__caption\",\n ref: this.caption\n }, /*#__PURE__*/React.createElement(\"div\", {\n className: \"ril-caption-content ril__captionContent\"\n }, this.props.imageCaption))));\n }\n }], [{\n key: \"isTargetMatchImage\",\n value: function isTargetMatchImage(target) {\n return target && /ril-image-current/.test(target.className);\n }\n }, {\n key: \"parseMouseEvent\",\n value: function parseMouseEvent(mouseEvent) {\n return {\n id: 'mouse',\n source: SOURCE_MOUSE,\n x: parseInt(mouseEvent.clientX, 10),\n y: parseInt(mouseEvent.clientY, 10)\n };\n }\n }, {\n key: \"parseTouchPointer\",\n value: function parseTouchPointer(touchPointer) {\n return {\n id: touchPointer.identifier,\n source: SOURCE_TOUCH,\n x: parseInt(touchPointer.clientX, 10),\n y: parseInt(touchPointer.clientY, 10)\n };\n }\n }, {\n key: \"parsePointerEvent\",\n value: function parsePointerEvent(pointerEvent) {\n return {\n id: pointerEvent.pointerId,\n source: SOURCE_POINTER,\n x: parseInt(pointerEvent.clientX, 10),\n y: parseInt(pointerEvent.clientY, 10)\n };\n } // Request to transition to the previous image\n\n }, {\n key: \"getTransform\",\n value: function getTransform(_ref13) {\n var _ref13$x = _ref13.x,\n x = _ref13$x === void 0 ? 0 : _ref13$x,\n _ref13$y = _ref13.y,\n y = _ref13$y === void 0 ? 0 : _ref13$y,\n _ref13$zoom = _ref13.zoom,\n zoom = _ref13$zoom === void 0 ? 1 : _ref13$zoom,\n width = _ref13.width,\n targetWidth = _ref13.targetWidth;\n var nextX = x;\n var windowWidth = getWindowWidth();\n\n if (width > windowWidth) {\n nextX += (windowWidth - width) / 2;\n }\n\n var scaleFactor = zoom * (targetWidth / width);\n return {\n transform: \"translate3d(\".concat(nextX, \"px,\").concat(y, \"px,0) scale3d(\").concat(scaleFactor, \",\").concat(scaleFactor, \",1)\")\n };\n }\n }]);\n\n return ReactImageLightbox;\n}(Component);\n\nReactImageLightbox.defaultProps = {\n imageTitle: null,\n imageCaption: null,\n toolbarButtons: null,\n reactModalProps: {},\n animationDisabled: false,\n animationDuration: 300,\n animationOnKeyInput: false,\n clickOutsideToClose: true,\n closeLabel: 'Close lightbox',\n discourageDownloads: false,\n enableZoom: true,\n imagePadding: 10,\n imageCrossOrigin: null,\n keyRepeatKeyupBonus: 40,\n keyRepeatLimit: 180,\n mainSrcThumbnail: null,\n nextLabel: 'Next image',\n nextSrc: null,\n nextSrcThumbnail: null,\n onAfterOpen: function onAfterOpen() {},\n onImageLoadError: function onImageLoadError() {},\n onImageLoad: function onImageLoad() {},\n onMoveNextRequest: function onMoveNextRequest() {},\n onMovePrevRequest: function onMovePrevRequest() {},\n prevLabel: 'Previous image',\n prevSrc: null,\n prevSrcThumbnail: null,\n reactModalStyle: {},\n wrapperClassName: '',\n zoomInLabel: 'Zoom in',\n zoomOutLabel: 'Zoom out',\n imageLoadErrorMessage: 'This image failed to load',\n loader: undefined\n};\nexport default ReactImageLightbox;","import React, { useState } from 'react';\nimport { useStaticQuery, graphql } from 'gatsby';\nimport { GatsbyImage, getImage } from 'gatsby-plugin-image';\nimport { ImageFile } from '../types';\n\ninterface AnimeImageProps {\n image: any;\n onClick: () => void;\n}\n\nconst AnimeImage: React.FC = ({ image, onClick }) => {\n const pic = getImage(image);\n return (\n \n \n \n Filename: \n {image.name.replace(/_/g, ' ')}\n \n
\n \n \n );\n};\n\nexport default AnimeImage;\n","import React, { createContext, useCallback, useMemo, useState } from 'react';\nimport { useAnimeImages } from '../hooks/useAnimeImages';\nimport { useDirectories } from '../hooks/useDirectories';\nimport { AllImages } from '../types';\n\n// styles\nconst pageStyles = {\n color: '#232129',\n padding: 96,\n fontFamily: '-apple-system, Roboto, sans-serif, serif',\n};\n\nexport const ImagesContext = createContext(undefined);\nconst Layout: React.FC = ({ children }) => {\n const directories = useDirectories();\n const allImages = useAnimeImages();\n const [selectedDir, setSelectedDir] = useState('');\n\n const images = useMemo(() => {\n const desu: typeof allImages = {\n edges: [],\n };\n if (allImages && allImages.edges) {\n if (selectedDir === '') {\n return allImages;\n }\n desu.edges = allImages.edges.filter(({ node }) => {\n return selectedDir === node.relativeDirectory;\n });\n }\n return desu;\n }, [allImages, selectedDir]);\n\n const handleDirSelect = useCallback((relativePath: string) => {\n setSelectedDir(relativePath);\n }, []);\n\n return (\n \n
\n \n
\n {children}\n
\n
\n
\n );\n};\n\nexport default Layout;\n","import { useStaticQuery, graphql } from 'gatsby';\nimport { Directories, ImageFiles } from '../types';\n\nexport const useDirectories = (): Directories => {\n const data: Directories = useStaticQuery(graphql`\n query {\n allDirectory(filter: { sourceInstanceName: { eq: \"images\" } }) {\n edges {\n node {\n name\n relativePath\n }\n }\n }\n }\n `);\n return data;\n};\n","import { useStaticQuery, graphql } from 'gatsby';\nimport { AllImages, ImageQueryResponse } from '../types';\n\nconst useAnimeImages = (): AllImages => {\n const { allImages }: ImageQueryResponse = useStaticQuery(graphql`\n query {\n allImages: allFile(\n sort: { order: ASC, fields: relativeDirectory }\n filter: { sourceInstanceName: { eq: \"images\" } }\n ) {\n edges {\n node {\n name\n base\n id\n relativeDirectory\n childImageSharp {\n gatsbyImageData(\n width: 800\n placeholder: TRACED_SVG\n formats: [AUTO, JPG, PNG, AVIF]\n )\n original {\n src\n }\n }\n }\n }\n }\n }\n `);\n return allImages;\n};\n\nexport { useAnimeImages };\n","import React, { useContext, useState } from 'react';\nimport Lightbox from 'react-image-lightbox';\n\nimport AnimeImage from './AnimeImage';\nimport { ImagesContext } from './Layout';\n\nconst AnimeImageGrid: React.FC = () => {\n const images = useContext(ImagesContext);\n\n const [isOpen, setIsOpen] = useState(false);\n const [photoIndex, setPhotoIndex] = useState(0);\n return (\n <>\n
\n {images &&\n images.edges.map(({ node }, index) => (\n {\n setPhotoIndex(index);\n setIsOpen(true);\n }}\n />\n ))}\n
\n\n {isOpen && images && (\n setIsOpen(false)}\n onMovePrevRequest={() => {\n if (images) {\n setPhotoIndex((photoIndex - 1) % images.edges.length);\n }\n }}\n onMoveNextRequest={() => {\n if (images) {\n setPhotoIndex((photoIndex + 1) % images.edges.length);\n }\n }}\n />\n )}\n \n );\n};\n\nexport default AnimeImageGrid;\n","import React from 'react';\nimport AnimeImageGrid from '../components/AimeImageGrid';\nimport Layout from '../components/Layout';\n\n// styles\nconst pageStyles = {\n color: '#232129',\n padding: 96,\n fontFamily: '-apple-system, Roboto, sans-serif, serif',\n};\nconst headingStyles = {\n marginTop: 0,\n marginBottom: 64,\n maxWidth: 320,\n};\nconst headingAccentStyles = {\n color: '#663399',\n};\n\nconst linkStyle = {\n color: '#8954A8',\n fontWeight: 'bold',\n fontSize: 16,\n verticalAlign: '5%',\n};\n\n// markup\nconst IndexPage: React.FC = () => {\n return (\n \n Home Page\n \n \n );\n};\n\nexport default IndexPage;\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n var printWarning = function printWarning(format, args) {\n var len = arguments.length;\n args = new Array(len > 1 ? len - 1 : 0);\n for (var key = 1; key < len; key++) {\n args[key - 1] = arguments[key];\n }\n var argIndex = 0;\n var message = 'Warning: ' +\n format.replace(/%s/g, function() {\n return args[argIndex++];\n });\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n }\n\n warning = function(condition, format, args) {\n var len = arguments.length;\n args = new Array(len > 2 ? len - 2 : 0);\n for (var key = 2; key < len; key++) {\n args[key - 2] = arguments[key];\n }\n if (format === undefined) {\n throw new Error(\n '`warning(condition, format, ...args)` requires a warning ' +\n 'message argument'\n );\n }\n if (!condition) {\n printWarning.apply(null, [format].concat(args));\n }\n };\n}\n\nmodule.exports = warning;\n"],"names":["canUseDOM","window","document","createElement","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","addEventListener","attachEvent","canUseViewport","screen","Object","defineProperty","exports","value","bodyOpenClassName","portalClassName","undefined","_extends","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","Constructor","protoProps","staticProps","_react","_react2","_interopRequireDefault","_reactDom2","_propTypes2","_ModalPortal2","ariaAppHider","obj","__esModule","newObj","default","_interopRequireWildcard","_safeHTMLElement","_safeHTMLElement2","_reactLifecyclesCompat","_classCallCheck","instance","TypeError","_possibleConstructorReturn","self","ReferenceError","isReact16","createPortal","createHTMLElement","name","getCreatePortal","unstable_renderSubtreeIntoContainer","getParentElement","parentSelector","Modal","_Component","_ref","_temp","_this","this","_len","args","Array","_key","__proto__","getPrototypeOf","apply","concat","removePortal","unmountComponentAtNode","node","parent","contains","removeChild","console","warn","portalRef","ref","portal","renderPortal","defaultStyles","subClass","superClass","create","constructor","setPrototypeOf","_inherits","className","appendChild","prevProps","prevParent","nextParent","_","snapshot","_props","isOpen","state","now","Date","closesAt","closeTimeoutMS","beforeClose","closeWithTimeout","setTimeout","element","setElement","Component","propTypes","bool","isRequired","style","shape","content","object","overlay","string","htmlOpenClassName","oneOfType","base","afterOpen","overlayClassName","appElement","instanceOf","SafeHTMLCollection","SafeNodeList","arrayOf","onAfterOpen","func","onRequestClose","number","ariaHideApp","shouldFocusAfterRender","shouldCloseOnOverlayClick","shouldReturnFocusAfterClose","preventScroll","aria","data","role","contentLabel","shouldCloseOnEsc","overlayRef","contentRef","id","overlayElement","contentElement","defaultProps","body","contentEl","children","position","top","left","right","bottom","backgroundColor","border","background","overflow","WebkitOverflowScrolling","borderRadius","outline","padding","polyfill","_typeof","Symbol","iterator","focusManager","_scopeTab2","classList","_portalOpenInstances2","CLASS_NAMES","ariaHiddenInstances","ModalPortal","setOverlayRef","setContentRef","afterClose","_this$props","remove","getElementsByTagName","show","returnFocus","teardownScopedFocus","popWithoutFocus","onAfterClose","deregister","open","beforeOpen","clearTimeout","closeTimer","setState","setupScopedFocus","markForFocusLater","openAnimationFrame","requestAnimationFrame","overlayEl","close","closeWithoutTimeout","focusContent","contentHasFocus","focus","handleKeyDown","event","keyCode","stopPropagation","requestClose","handleOverlayOnClick","shouldClose","ownerHandlesClose","handleContentOnMouseUp","handleOverlayOnMouseDown","preventDefault","handleContentOnClick","handleContentOnMouseDown","shouldBeClosed","activeElement","buildClassName","which","additional","classNames","attributesFromObject","prefix","items","keys","reduce","acc","moveFromContentToOverlay","prevState","cancelAnimationFrame","add","hide","register","_props2","contentStyles","overlayStyles","overlayProps","onClick","onMouseDown","contentProps","tabIndex","onKeyDown","onMouseUp","modal","testId","module","resetState","globalElement","removeAttribute","forEach","querySelectorAll","log","assertNodeList","useElement","el","validateElement","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","next","done","setAttribute","err","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","documentNotReadyOrSSRTesting","_warning","_warning2","nodeList","selector","Error","isArray","HTMLCollection","NodeList","join","_arr","before","after","_i","item","parentNode","instances","_arr2","_i2","check","nodeName","_portalOpenInstances","subscribe","eventType","openInstances","opacity","cloneNode","firstChild","insertBefore","lastChild","parentElement","htmlElement","cls","htmlClassList","removeClass","_cls","docBodyClassList","at","classString","classListRef","poll","toLowerCase","split","incrementReference","decrementReference","focusLaterElements","handleBlur","handleFocus","push","toFocus","pop","e","modalElement","removeEventListener","detachEvent","_tabbable","_tabbable2","needToFocus","portalOpenInstances","p","PortalOpenInstances","openInstance","indexOf","emit","index","splice","callback","subscribers","subscriber","slice","_exenv","EE","SafeHTMLElement","HTMLElement","tabbable","shiftKey","head","tail","getActiveElement","checkSafari","exec","navigator","userAgent","x","shadowRoot","findTabbableDescendants","descendants","finished","filter","tabbableNode","hidesContents","zeroSize","offsetWidth","offsetHeight","innerHTML","getComputedStyle","getPropertyValue","scrollWidth","scrollHeight","exception","focusable","isTabIndexNotNaN","test","disabled","href","rootNode","getRootNode","host","visible","getAttribute","isTabIndexNaN","isNaN","_Modal","_Modal2","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","_defineProperty","getOwnPropertyDescriptors","_defineProperties","_getPrototypeOf","o","_setPrototypeOf","_assertThisInitialized","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","result","Super","NewTarget","_slicedToArray","arr","_arrayWithHoles","_s","_e","_n","_d","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","_nonIterableSpread","minLen","n","toString","len","arr2","translate","str","replaceStrings","translated","placeholder","replace","getWindowWidth","g","innerWidth","isCrossOriginFrame","location","hostname","getHighestSafeWindowContext","MAX_ZOOM_LEVEL","KEYS","ReactImageLightbox","_super","isClosing","animationDisabled","shouldAnimate","zoomLevel","offsetX","offsetY","loadErrorStatus","outerEl","zoomInBtn","zoomOutBtn","caption","closeIfClickInner","bind","handleImageDoubleClick","handleImageMouseWheel","handleKeyInput","handleMouseUp","handleMouseDown","handleMouseMove","handleOuterMousewheel","handleTouchStart","handleTouchMove","handleTouchEnd","handlePointerEvent","handleCaptionMousewheel","handleWindowResize","handleZoomInButtonClick","handleZoomOutButtonClick","requestMoveNext","requestMovePrev","timeouts","currentAction","eventsSource","pointerList","preventInnerClose","preventInnerCloseTimeout","keyPressed","imageCache","lastKeyDownTime","resizeTimeout","wheelActionTimeout","resetScrollTimeout","scrollX","scrollY","moveStartX","moveStartY","moveStartOffsetX","moveStartOffsetY","swipeStartX","swipeStartY","swipeEndX","swipeEndY","pinchTouchList","pinchDistance","keyCounter","moveRequested","_this2","windowContext","listeners","resize","mouseup","touchend","touchcancel","pointerdown","pointermove","pointerup","pointercancel","type","loadAllImages","nextProps","_this3","getSrcTypes","srcType","_this4","sourcesChanged","prevSrcDict","nextSrcDict","prevSrc","loaded","_this5","didUnmount","tid","_setTimeout","_x","_x2","time","_this6","_this7","imageSrc","fitSizes","isImageLoaded","getFitSizes","width","height","src","targetHeight","targetWidth","stretch","boxSize","getLightboxRect","maxHeight","imagePadding","maxWidth","Math","min","currentImageInfo","getBestImageForType","maxX","minX","maxY","minY","zoomMultiplier","getZoomMultiplier","keyEnding","pow","current","getBoundingClientRect","innerHeight","_clearTimeout","_x3","clientX","clientY","enableZoom","nextZoomLevel","max","imageBaseSize","currentZoomMultiplier","nextZoomMultiplier","boxRect","pointerX","pointerY","currentImageOffsetX","currentImageOffsetY","nextImageRealOffsetX","nextImageRealOffsetY","nextOffsetX","nextOffsetY","maxOffsets","getMaxOffsets","search","isAnimating","currentTime","getTime","keyRepeatLimit","nextSrc","keyRepeatKeyupBonus","_this8","actionDelay","abs","deltaY","deltaX","xThreshold","changeZoom","filterPointersBySource","pointer","_this9","_ref2","shouldHandleEvent","isTargetMatchImage","addPointer","parseMouseEvent","multiPointerStart","multiPointerMove","removePointer","multiPointerEnd","parsePointerEvent","_this10","changedTouches","eventTouch","parseTouchPointer","map","_this11","touch","handleSwipeStart","handleMoveStart","handleEnd","decideMoveOrSwipe","handlePinchStart","handleMove","handleSwipe","handlePinch","setPreventInnerClose","handleMoveEnd","handleSwipeEnd","handlePinchEnd","_ref3","y","_ref4","newOffsetX","newOffsetY","_this12","animationDuration","_ref5","_ref6","xDiff","xDiffAbs","yDiffAbs","_ref7","_ref8","a","b","sqrt","_ref9","_ref10","_ref11","calculatePinchDistance","oldPointer","newDistance","_this$calculatePinchC","calculatePinchCenter","forceUpdate","_this$caption$current2","scrollTop","_this13","inMemoryImage","Image","imageCrossOrigin","crossOrigin","onerror","errorEvent","onImageLoadError","onload","onImageLoad","_this14","generateLoadDoneCallback","loadImage","_this15","closeLightbox","onCloseRequest","animationOnKeyInput","direction","_this16","nextState","onMovePrevRequest","onMoveNextRequest","requestMove","_this17","clickOutsideToClose","discourageDownloads","imageTitle","toolbarButtons","reactModalStyle","_onAfterOpen","reactModalProps","loader","_this$state","transitionStyle","transition","keyEndings","_ref12","images","addImage","imageClass","transforms","bestImageInfo","imageStyle","getTransform","cursor","some","imageLoadErrorMessage","backgroundImage","onDoubleClick","onWheel","onDragStart","alt","draggable","loadingIcon","zoom","modalStyle","zIndex","wrapperClassName","animationDirection","onMouseMove","onTouchStart","onTouchMove","onKeyUp","prevLabel","title","nextLabel","button","zoomInLabel","zoomOutLabel","closeLabel","imageCaption","mouseEvent","parseInt","touchPointer","identifier","pointerEvent","pointerId","_ref13","_ref13$x","_ref13$y","_ref13$zoom","nextX","windowWidth","scaleFactor","transform","mainSrcThumbnail","nextSrcThumbnail","prevSrcThumbnail","image","pic","getImage","G","pageStyles","color","fontFamily","ImagesContext","createContext","directories","useStaticQuery","allImages","useState","selectedDir","setSelectedDir","useMemo","desu","edges","relativeDirectory","handleDirSelect","useCallback","relativePath","Provider","allDirectory","_event","useContext","setIsOpen","photoIndex","setPhotoIndex","display","mainSrc","childImageSharp","original","warning"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/framework-d45645ca5095a17fc820.js b/docs/framework-d45645ca5095a17fc820.js new file mode 100644 index 00000000..cc582030 --- /dev/null +++ b/docs/framework-d45645ca5095a17fc820.js @@ -0,0 +1,3 @@ +/*! For license information please see framework-d45645ca5095a17fc820.js.LICENSE.txt */ +(self.webpackChunkanime_girls_holding_programming_books=self.webpackChunkanime_girls_holding_programming_books||[]).push([[774],{2703:function(e,t,n){"use strict";var r=n(414);function l(){}function a(){}a.resetWarningCache=l,e.exports=function(){function e(e,t,n,l,a,o){if(o!==r){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:l};return n.PropTypes=n,n}},5697:function(e,t,n){e.exports=n(2703)()},414:function(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:function(e,t,n){"use strict";var r=n(7294),l=n(6494),a=n(3840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n