{"version":3,"sources":["webpack:///./src/pages/projects/index.js","webpack:///./src/components/MarTech.js","webpack:///./node_modules/core-js/modules/es6.string.fixed.js","webpack:///./node_modules/gatsby-image/index.js","webpack:///./node_modules/core-js/modules/_string-html.js"],"names":["Projects","_ref","data","featuredTui","featuredBWDC","featuredPCR","featuredNCCCO","featuredDM","techImg","AWS","Amplify","React","Python","MongoDB","PostgreSQL","HTML5","CSS3","JavaScript","Figma","Stripe","projects","name","path","featuredImage","tech","Content","react__WEBPACK_IMPORTED_MODULE_1___default","a","createElement","Fragment","className","href","target","rel","_components_layout__WEBPACK_IMPORTED_MODULE_4__","_reach_router__WEBPACK_IMPORTED_MODULE_2__","_ref2","location","_components_seo__WEBPACK_IMPORTED_MODULE_5__","title","pathname","keywords","_components_MarTech__WEBPACK_IMPORTED_MODULE_6__","map","_ref3","index","key","id","gatsby_image__WEBPACK_IMPORTED_MODULE_3___default","alt","fluid","childImageSharp","draggable","item","src","require","fluidImage","query","react__WEBPACK_IMPORTED_MODULE_0__","__webpack_require__","react__WEBPACK_IMPORTED_MODULE_0___default","n","react_helmet__WEBPACK_IMPORTED_MODULE_1__","react_helmet__WEBPACK_IMPORTED_MODULE_1___default","MarTech","props","facebook","google","async","defaultProps","createHTML","this","_interopRequireDefault","exports","__esModule","io","_assertThisInitialized2","_inheritsLoose2","_objectWithoutPropertiesLoose2","_extends2","_react","_propTypes","convertProps","convertedProps","resolutions","sizes","critical","fixed","loading","groupByMedia","concat","getImageSrcKey","imageCache","Object","create","inImageCache","hasNativeLazyLoadSupport","HTMLImageElement","prototype","isBrowser","window","hasIOSupport","IntersectionObserver","listeners","WeakMap","generateImageSources","imageVariants","srcSet","srcSetWebp","media","type","withMedia","without","forEach","variant","push","generateTracedSVGSources","tracedSVG","generateBase64Sources","_ref4","base64","generateNoscriptSource","_ref5","isWebp","listenToIntersections","el","cb","observer","entries","entry","has","get","isIntersecting","intersectionRatio","unobserve","rootMargin","observe","set","noscriptImg","width","height","crossOrigin","join","Placeholder","_ref6","generateSources","spreadProps","baseImage","Img","length","forwardRef","ref","style","onLoad","onError","otherProps","position","top","left","objectFit","objectPosition","propTypes","object","func","Image","_React$Component","_this","call","seenBefore","isCritical","addNoScript","fadeIn","useIOSupport","isVisible","state","imgLoaded","imgCached","imageRef","createRef","handleImageLoaded","bind","handleRef","_proto","componentDidMount","onStartLoad","wasCached","img","current","complete","componentWillUnmount","cleanUpListeners","_this2","imageInCache","setState","currentSrc","render","_convertProps","_convertProps$style","_convertProps$imgStyl","imgStyle","_convertProps$placeho","placeholderStyle","placeholderClassName","backgroundColor","durationFadeIn","Tag","itemProp","shouldReveal","shouldFadeIn","imageStyle","opacity","transition","bgColor","delayHideStyle","transitionDelay","imagePlaceholderStyle","placeholderImageProps","image","overflow","JSON","stringify","paddingBottom","aspectRatio","bottom","right","dangerouslySetInnerHTML","__html","_imageVariants","_image","divStyle","display","Component","fixedObject","shape","number","isRequired","string","srcWebp","fluidObject","oneOfType","arrayOf","bool","oneOf","_default","$export","fails","defined","quot","tag","attribute","value","S","String","p1","replace","module","NAME","exec","O","P","F","test","toLowerCase","split"],"mappings":"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","file":"component---src-pages-projects-index-js-93500ab9bc1d415f5371.js","sourcesContent":["import React from \"react\";\nimport { Location } from \"@reach/router\";\nimport { graphql } from \"gatsby\"\nimport Img from \"gatsby-image\"\n\nimport Layout from \"../../components/layout\";\nimport SEO from \"../../components/seo\";\nimport MarTech from \"../../components/MarTech\";\n\nfunction Projects({ data }) {\n const {\n featuredTui,\n featuredBWDC,\n featuredPCR,\n featuredNCCCO,\n featuredDM\n } = data\n\n const techImg = {\n AWS: \"aws-logo.png\",\n Amplify: \"amplify-logo.png\",\n React: \"react-logo.svg\",\n Python: \"python-logo.svg\",\n MongoDB: \"mongodb-logo.jpg\",\n PostgreSQL: \"postgres-logo.png\",\n HTML5: \"html5-logo.svg\",\n CSS3: \"css3-logo.svg\",\n JavaScript: \"js-logo.svg\",\n Figma: \"figma-logo.svg\",\n Stripe: \"stripe2.png\"\n };\n const projects = [\n {\n name: \"Water Utility App\",\n path: \"water-utility-app\",\n featuredImage: featuredTui,\n tech: [\"Amplify\", \"React\", \"Python\", \"AWS\", \"Stripe\"],\n Content: () => (\n <>\n

\n The{\" \"}\n \n Water Utility App\n {\" \"}\n started as an idea by Tui Anderson, a Water Industry veteran and\n independent instructor for municipal operators. He’s worked as a\n water operator, source water protection specialist, and a trainer.\n Over the years in his work, he realized that there is a need for\n modern, simple, and easy to use tool for water companies.\n
\n
\n The main features of the app is to record and analyze water\n production and water consumption of a Water Utility company. A user\n can then generate a report that shows data graphs, loss analysis,\n calculated water losses, and recommendations to reduce losses.\n
\n
\n We decided to develop the app as a Progressive Web App (PWA). A PWA\n is a cross-platform app available for desktop, tablet, mobile\n (Android or iOS), and any web browser. The major benefit of choosing\n PWA is that you don't have to do separate development for each\n platform, so it saves time and money, but still get the same benefit\n from native apps.\n
\n
\n We used AWS Amplify and React.js. AWS is a collection of cloud\n computing services that's reliable, inexpensive, and scalable.\n Amplify is one of those services and it's a serverless framework for\n mobile apps and web apps. React is the wildly popular front-end\n JavaScript framework created by Facebook that's able to produce high\n performance user interfaces in any modern web browser\n (mobile/tablet/laptop/desktop).\n {/*
*/}\n {/*
*/}\n {/* To make our development with Amplify even better, we reinforced its */}\n {/* CRUDL solution. We developed our own custom solution to tunnel more */}\n {/* traditional RPC calls to our API through the existing Amplify */}\n {/* AppSync GraphQL endpoint. */}\n

\n \n )\n },\n {\n name: \"Boise Works\",\n path: \"boise-works\",\n featuredImage: featuredBWDC,\n tech: [\"Amplify\", \"React\", \"Python\", \"AWS\", \"Figma\"],\n Content: () => (\n <>\n

\n \n Boise Works\n {\" \"}\n is an internal Gortek project. It's an app that connects local\n businesses, freelancers, and self-employed workers in the Treasure\n Valley.\n
\n
\n Originally launched as Boise Freelance, the app features business\n profile creation and listings. Part of the project is marketing on\n behalf of the business owners to attract users to the platform.\n Outreach and advertising has included Facebook, Instagram, LinkedIn,\n Twitter, and billboards. More channels are planned.\n
\n
\n The app is still being rebranded and will be announced under the new\n name in the coming weeks. (I guess this is a spoiler.)\n

\n \n )\n },\n {\n name: \"PC Richard\",\n path: \"pc-richard\",\n featuredImage: featuredPCR,\n tech: [\"HTML5\", \"CSS3\", \"JavaScript\"], //\"Oracle e-Commerce\" or Commerce Cloud,\n Content: () => (\n <>\n \n PC Richard\n {\" \"}\n is a large, regional, family owned, appliance and electronics store in\n the North East United States.\n
\n
\n When revamping their e-commerce store, the dedicated IT contractors\n that PC Richard keeps on retainer brought in outside help to make\n their designs a reality.\n
\n
\n Talent scouts found Tony and hired him to develop the new version of\n their e-commerce product detail page (PDP), and category pages. Tony\n collaborated with the design staff to achieve pixel perfect renditions\n of their mockups.\n
\n
\n The categories and product description page you see on the live site\n now includes that work, along with the efforts of many other\n developers on their staff. Keeping the site beautiful and running\n smoothly is truly a team effort.\n \n )\n },\n {\n name: \"NCCCO\",\n path: \"nccco\",\n featuredImage: featuredNCCCO,\n tech: [],\n Content: () => (\n <>\n A mutual friend introduced Tony to Graham Brent, the then CEO of the{\" \"}\n \n National Commission for the Certification of Crane Operators (NCCCO)\n \n .\n
\n
\n At the time, Graham's organization was coming to terms with the need\n for a major technology overhaul of their operational systems,\n day-to-day processes, internal databases, and customer facing systems.\n
\n
\n This was also right around the time NCCCO was celebrating its 20th\n Anniversary, reflecting on how far they had come as an organization,\n and was planning the foundation that would carry them \"The Next 20\n Years\".\n
\n
\n The NCCCO IT landscape had started with a paper based internal\n workflow that was augmented over the years with the addition of small\n MS Access databases, and a SQL Server based solution to host the\n question banks for their certification testing solution.\n
\n
\n The time had finally come to do away with dozens of filing cabinets of\n paper forms and routing slips. Fax machines would be retired. The\n hodge-podge of organically grown, human powered processes would be\n consolidated into a single, purpose built software system.\n
\n
\n Tony's task was to help the executive staff wrap their arms around all\n of the information they needed, to document their existing enterprise,\n and prepare the lengthy RFP process that was to follow, according to\n the mandate of their Board of Directors.\n
\n
\n Tony spent considerable time interviewing the executive staff about\n their various systems and processes. Ultimately, a high-level\n reference architecture was sketched out as a guide to ensure their\n future solution addressed everything it should, and nothing slipped\n through the cracks.\n
\n
\n Many months later Tony was contacted and invited to participate in the\n RFP, but unfortunately, the timing conflicted with his current\n project.\n \n )\n },\n {\n name: \"Deep Mile\",\n path: \"deep-mile\",\n featuredImage: featuredDM,\n tech: [\"AWS\", \"PostgreSQL\", \"MongoDB\", \"Python\"],\n Content: () => (\n <>\n Tony was hired through Gortek as a subcontractor to help the{\" \"}\n \n DeepMile\n {\" \"}\n team of data scientists as a technical resource.\n
\n
\n \n DeepMile\n {\" \"}\n specializes in data analysis but needed a hand fixing a broken\n instance of PostgreSQL, tightening security, and coaching the team on\n AWS best practices.\n
\n
\n Python was used to automate a number of tasks including complex\n MongoDB queries, massaging the data, and loading it into their main\n analytics PostgreSQL database that the analysts ran a number of\n intelligence tools against.\n
\n
\n It was just a short-term engagement, but the opportunity to work\n hand-in-hand with an elite team of data scientists was a rewarding\n experience.\n \n )\n }\n ];\n\n return (\n \n \n {({ location }) => (\n \n )}\n \n\n \n\n
\n

Here's a sampling of our work

\n
\n\n {projects.map(({ path, name, featuredImage, tech, Content }, index) => (\n \n \n

{name}

\n
\n {tech.map(item => (\n \n ))}\n
\n
\n \n
\n \n ))}\n
\n \n );\n}\n\nexport default Projects;\n\nexport const fluidImage = graphql`\n fragment fluidImage on File {\n childImageSharp {\n fluid(maxWidth: 1000) {\n ...GatsbyImageSharpFluid_withWebp\n }\n }\n }\n`;\n\nexport const query = graphql`\n query {\n featuredTui: file(relativePath: { eq: \"tui-in-the-field.jpg\" }) {\n ...fluidImage\n }\n featuredBWDC: file(relativePath: { eq: \"featured-bwdc.jpg\" }) {\n ...fluidImage\n }\n featuredPCR: file(relativePath: { eq: \"pcrichards.png\" }) {\n ...fluidImage\n }\n featuredNCCCO: file(relativePath: { eq: \"featured-nccco.png\" }) {\n ...fluidImage\n }\n featuredDM: file(relativePath: { eq: \"featured-deep-mile.png\" }) {\n ...fluidImage\n }\n }\n`\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport Helmet from \"react-helmet\"\n\nfunction MarTech(props) {\n const {\n facebook,\n google\n } = props\n\n return (\n \n {google ? (\n \n ) : null}\n\n {google ? (\n \n ) : null}\n\n {facebook ? (\n \n ) : null}\n\n {facebook ? (\n \n ) : null}\n\n \n );\n}\n\nMarTech.defaultProps = {\n facebook: true,\n google: true\n}\nMarTech.propTypes = {\n facebook: PropTypes.bool,\n google: PropTypes.bool,\n};\n\nexport default MarTech;\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports[\"default\"] = void 0;\n\nvar _assertThisInitialized2 = _interopRequireDefault(require(\"@babel/runtime/helpers/assertThisInitialized\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar logDeprecationNotice = function logDeprecationNotice(prop, replacement) {\n if (process.env.NODE_ENV === \"production\") {\n return;\n }\n\n console.log(\"\\n The \\\"\" + prop + \"\\\" prop is now deprecated and will be removed in the next major version\\n of \\\"gatsby-image\\\".\\n \");\n\n if (replacement) {\n console.log(\"Please use \" + replacement + \" instead of \\\"\" + prop + \"\\\".\");\n }\n}; // Handle legacy props during their deprecation phase\n\n\nvar convertProps = function convertProps(props) {\n var convertedProps = (0, _extends2[\"default\"])({}, props);\n var resolutions = convertedProps.resolutions,\n sizes = convertedProps.sizes,\n critical = convertedProps.critical;\n\n if (resolutions) {\n convertedProps.fixed = resolutions;\n delete convertedProps.resolutions;\n }\n\n if (sizes) {\n convertedProps.fluid = sizes;\n delete convertedProps.sizes;\n }\n\n if (critical) {\n logDeprecationNotice(\"critical\", \"the native \\\"loading\\\" attribute\");\n convertedProps.loading = \"eager\";\n } // convert fluid & fixed to arrays so we only have to work with arrays\n\n\n if (convertedProps.fluid) {\n convertedProps.fluid = groupByMedia([].concat(convertedProps.fluid));\n }\n\n if (convertedProps.fixed) {\n convertedProps.fixed = groupByMedia([].concat(convertedProps.fixed));\n }\n\n return convertedProps;\n};\n/**\n * Find the source of an image to use as a key in the image cache.\n * Use `the first image in either `fixed` or `fluid`\n * @param {{fluid: {src: string}[], fixed: {src: string}[]}} args\n * @return {string}\n */\n\n\nvar getImageSrcKey = function getImageSrcKey(_ref) {\n var fluid = _ref.fluid,\n fixed = _ref.fixed;\n var data = fluid && fluid[0] || fixed && fixed[0];\n return data.src;\n}; // Cache if we've seen an image before so we don't bother with\n// lazy-loading & fading in on subsequent mounts.\n\n\nvar imageCache = Object.create({});\n\nvar inImageCache = function inImageCache(props) {\n var convertedProps = convertProps(props); // Find src\n\n var src = getImageSrcKey(convertedProps);\n return imageCache[src] || false;\n};\n\nvar activateCacheForImage = function activateCacheForImage(props) {\n var convertedProps = convertProps(props); // Find src\n\n var src = getImageSrcKey(convertedProps);\n imageCache[src] = true;\n}; // Native lazy-loading support: https://addyosmani.com/blog/lazy-loading/\n\n\nvar hasNativeLazyLoadSupport = typeof HTMLImageElement !== \"undefined\" && \"loading\" in HTMLImageElement.prototype;\nvar isBrowser = typeof window !== \"undefined\";\nvar hasIOSupport = isBrowser && window.IntersectionObserver;\nvar io;\nvar listeners = new WeakMap();\n\nfunction getIO() {\n if (typeof io === \"undefined\" && typeof window !== \"undefined\" && window.IntersectionObserver) {\n io = new window.IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (listeners.has(entry.target)) {\n var cb = listeners.get(entry.target); // Edge doesn't currently support isIntersecting, so also test for an intersectionRatio > 0\n\n if (entry.isIntersecting || entry.intersectionRatio > 0) {\n io.unobserve(entry.target);\n listeners[\"delete\"](entry.target);\n cb();\n }\n }\n });\n }, {\n rootMargin: \"200px\"\n });\n }\n\n return io;\n}\n\nfunction generateImageSources(imageVariants) {\n return imageVariants.map(function (_ref2) {\n var src = _ref2.src,\n srcSet = _ref2.srcSet,\n srcSetWebp = _ref2.srcSetWebp,\n media = _ref2.media,\n sizes = _ref2.sizes;\n return _react[\"default\"].createElement(_react[\"default\"].Fragment, {\n key: src\n }, srcSetWebp && _react[\"default\"].createElement(\"source\", {\n type: \"image/webp\",\n media: media,\n srcSet: srcSetWebp,\n sizes: sizes\n }), _react[\"default\"].createElement(\"source\", {\n media: media,\n srcSet: srcSet,\n sizes: sizes\n }));\n });\n} // Return an array ordered by elements having a media prop, does not use\n// native sort, as a stable sort is not guaranteed by all browsers/versions\n\n\nfunction groupByMedia(imageVariants) {\n var withMedia = [];\n var without = [];\n imageVariants.forEach(function (variant) {\n return (variant.media ? withMedia : without).push(variant);\n });\n\n if (without.length > 1 && process.env.NODE_ENV !== \"production\") {\n console.warn(\"We've found \" + without.length + \" sources without a media property. They might be ignored by the browser, see: https://www.gatsbyjs.org/packages/gatsby-image/#art-directing-multiple-images\");\n }\n\n return [].concat(withMedia, without);\n}\n\nfunction generateTracedSVGSources(imageVariants) {\n return imageVariants.map(function (_ref3) {\n var src = _ref3.src,\n media = _ref3.media,\n tracedSVG = _ref3.tracedSVG;\n return _react[\"default\"].createElement(\"source\", {\n key: src,\n media: media,\n srcSet: tracedSVG\n });\n });\n}\n\nfunction generateBase64Sources(imageVariants) {\n return imageVariants.map(function (_ref4) {\n var src = _ref4.src,\n media = _ref4.media,\n base64 = _ref4.base64;\n return _react[\"default\"].createElement(\"source\", {\n key: src,\n media: media,\n srcSet: base64\n });\n });\n}\n\nfunction generateNoscriptSource(_ref5, isWebp) {\n var srcSet = _ref5.srcSet,\n srcSetWebp = _ref5.srcSetWebp,\n media = _ref5.media,\n sizes = _ref5.sizes;\n var src = isWebp ? srcSetWebp : srcSet;\n var mediaAttr = media ? \"media=\\\"\" + media + \"\\\" \" : \"\";\n var typeAttr = isWebp ? \"type='image/webp' \" : \"\";\n var sizesAttr = sizes ? \"sizes=\\\"\" + sizes + \"\\\" \" : \"\";\n return \"\";\n}\n\nfunction generateNoscriptSources(imageVariants) {\n return imageVariants.map(function (variant) {\n return (variant.srcSetWebp ? generateNoscriptSource(variant, true) : \"\") + generateNoscriptSource(variant);\n }).join(\"\");\n}\n\nvar listenToIntersections = function listenToIntersections(el, cb) {\n var observer = getIO();\n\n if (observer) {\n observer.observe(el);\n listeners.set(el, cb);\n }\n\n return function () {\n observer.unobserve(el);\n listeners[\"delete\"](el);\n };\n};\n\nvar noscriptImg = function noscriptImg(props) {\n // Check if prop exists before adding each attribute to the string output below to prevent\n // HTML validation issues caused by empty values like width=\"\" and height=\"\"\n var src = props.src ? \"src=\\\"\" + props.src + \"\\\" \" : \"src=\\\"\\\" \"; // required attribute\n\n var sizes = props.sizes ? \"sizes=\\\"\" + props.sizes + \"\\\" \" : \"\";\n var srcSet = props.srcSet ? \"srcset=\\\"\" + props.srcSet + \"\\\" \" : \"\";\n var title = props.title ? \"title=\\\"\" + props.title + \"\\\" \" : \"\";\n var alt = props.alt ? \"alt=\\\"\" + props.alt + \"\\\" \" : \"alt=\\\"\\\" \"; // required attribute\n\n var width = props.width ? \"width=\\\"\" + props.width + \"\\\" \" : \"\";\n var height = props.height ? \"height=\\\"\" + props.height + \"\\\" \" : \"\";\n var crossOrigin = props.crossOrigin ? \"crossorigin=\\\"\" + props.crossOrigin + \"\\\" \" : \"\";\n var loading = props.loading ? \"loading=\\\"\" + props.loading + \"\\\" \" : \"\";\n var draggable = props.draggable ? \"draggable=\\\"\" + props.draggable + \"\\\" \" : \"\";\n var sources = generateNoscriptSources(props.imageVariants);\n return \"\" + sources + \"\";\n}; // Earlier versions of gatsby-image during the 2.x cycle did not wrap\n// the `Img` component in a `picture` element. This maintains compatibility\n// until a breaking change can be introduced in the next major release\n\n\nvar Placeholder = function Placeholder(_ref6) {\n var src = _ref6.src,\n imageVariants = _ref6.imageVariants,\n generateSources = _ref6.generateSources,\n spreadProps = _ref6.spreadProps;\n\n var baseImage = _react[\"default\"].createElement(Img, (0, _extends2[\"default\"])({\n src: src\n }, spreadProps));\n\n return imageVariants.length > 1 ? _react[\"default\"].createElement(\"picture\", null, generateSources(imageVariants), baseImage) : baseImage;\n};\n\nvar Img = _react[\"default\"].forwardRef(function (props, ref) {\n var sizes = props.sizes,\n srcSet = props.srcSet,\n src = props.src,\n style = props.style,\n onLoad = props.onLoad,\n onError = props.onError,\n loading = props.loading,\n draggable = props.draggable,\n otherProps = (0, _objectWithoutPropertiesLoose2[\"default\"])(props, [\"sizes\", \"srcSet\", \"src\", \"style\", \"onLoad\", \"onError\", \"loading\", \"draggable\"]);\n return _react[\"default\"].createElement(\"img\", (0, _extends2[\"default\"])({\n sizes: sizes,\n srcSet: srcSet,\n src: src\n }, otherProps, {\n onLoad: onLoad,\n onError: onError,\n ref: ref,\n loading: loading,\n draggable: draggable,\n style: (0, _extends2[\"default\"])({\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"cover\",\n objectPosition: \"center\"\n }, style)\n }));\n});\n\nImg.propTypes = {\n style: _propTypes[\"default\"].object,\n onError: _propTypes[\"default\"].func,\n onLoad: _propTypes[\"default\"].func\n};\n\nvar Image =\n/*#__PURE__*/\nfunction (_React$Component) {\n (0, _inheritsLoose2[\"default\"])(Image, _React$Component);\n\n function Image(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this; // If this image has already been loaded before then we can assume it's\n // already in the browser cache so it's cheap to just show directly.\n\n _this.seenBefore = isBrowser && inImageCache(props);\n _this.isCritical = props.loading === \"eager\" || props.critical;\n _this.addNoScript = !(_this.isCritical && !props.fadeIn);\n _this.useIOSupport = !hasNativeLazyLoadSupport && hasIOSupport && !_this.isCritical && !_this.seenBefore;\n var isVisible = _this.isCritical || isBrowser && (hasNativeLazyLoadSupport || !_this.useIOSupport);\n _this.state = {\n isVisible: isVisible,\n imgLoaded: false,\n imgCached: false,\n fadeIn: !_this.seenBefore && props.fadeIn\n };\n _this.imageRef = _react[\"default\"].createRef();\n _this.handleImageLoaded = _this.handleImageLoaded.bind((0, _assertThisInitialized2[\"default\"])(_this));\n _this.handleRef = _this.handleRef.bind((0, _assertThisInitialized2[\"default\"])(_this));\n return _this;\n }\n\n var _proto = Image.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n if (this.state.isVisible && typeof this.props.onStartLoad === \"function\") {\n this.props.onStartLoad({\n wasCached: inImageCache(this.props)\n });\n }\n\n if (this.isCritical) {\n var img = this.imageRef.current;\n\n if (img && img.complete) {\n this.handleImageLoaded();\n }\n }\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this.cleanUpListeners) {\n this.cleanUpListeners();\n }\n } // Specific to IntersectionObserver based lazy-load support\n ;\n\n _proto.handleRef = function handleRef(ref) {\n var _this2 = this;\n\n if (this.useIOSupport && ref) {\n this.cleanUpListeners = listenToIntersections(ref, function () {\n var imageInCache = inImageCache(_this2.props);\n\n if (!_this2.state.isVisible && typeof _this2.props.onStartLoad === \"function\") {\n _this2.props.onStartLoad({\n wasCached: imageInCache\n });\n } // imgCached and imgLoaded must update after isVisible,\n // Once isVisible is true, imageRef becomes accessible, which imgCached needs access to.\n // imgLoaded and imgCached are in a 2nd setState call to be changed together,\n // avoiding initiating unnecessary animation frames from style changes.\n\n\n _this2.setState({\n isVisible: true\n }, function () {\n return _this2.setState({\n imgLoaded: imageInCache,\n // `currentSrc` should be a string, but can be `undefined` in IE,\n // !! operator validates the value is not undefined/null/\"\"\n imgCached: !!_this2.imageRef.current.currentSrc\n });\n });\n });\n }\n };\n\n _proto.handleImageLoaded = function handleImageLoaded() {\n activateCacheForImage(this.props);\n this.setState({\n imgLoaded: true\n });\n\n if (this.props.onLoad) {\n this.props.onLoad();\n }\n };\n\n _proto.render = function render() {\n var _convertProps = convertProps(this.props),\n title = _convertProps.title,\n alt = _convertProps.alt,\n className = _convertProps.className,\n _convertProps$style = _convertProps.style,\n style = _convertProps$style === void 0 ? {} : _convertProps$style,\n _convertProps$imgStyl = _convertProps.imgStyle,\n imgStyle = _convertProps$imgStyl === void 0 ? {} : _convertProps$imgStyl,\n _convertProps$placeho = _convertProps.placeholderStyle,\n placeholderStyle = _convertProps$placeho === void 0 ? {} : _convertProps$placeho,\n placeholderClassName = _convertProps.placeholderClassName,\n fluid = _convertProps.fluid,\n fixed = _convertProps.fixed,\n backgroundColor = _convertProps.backgroundColor,\n durationFadeIn = _convertProps.durationFadeIn,\n Tag = _convertProps.Tag,\n itemProp = _convertProps.itemProp,\n loading = _convertProps.loading,\n draggable = _convertProps.draggable;\n\n var shouldReveal = this.state.fadeIn === false || this.state.imgLoaded;\n var shouldFadeIn = this.state.fadeIn === true && !this.state.imgCached;\n var imageStyle = (0, _extends2[\"default\"])({\n opacity: shouldReveal ? 1 : 0,\n transition: shouldFadeIn ? \"opacity \" + durationFadeIn + \"ms\" : \"none\"\n }, imgStyle);\n var bgColor = typeof backgroundColor === \"boolean\" ? \"lightgray\" : backgroundColor;\n var delayHideStyle = {\n transitionDelay: durationFadeIn + \"ms\"\n };\n var imagePlaceholderStyle = (0, _extends2[\"default\"])({\n opacity: this.state.imgLoaded ? 0 : 1\n }, shouldFadeIn && delayHideStyle, {}, imgStyle, {}, placeholderStyle);\n var placeholderImageProps = {\n title: title,\n alt: !this.state.isVisible ? alt : \"\",\n style: imagePlaceholderStyle,\n className: placeholderClassName\n };\n\n if (fluid) {\n var imageVariants = fluid;\n var image = imageVariants[0];\n return _react[\"default\"].createElement(Tag, {\n className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n style: (0, _extends2[\"default\"])({\n position: \"relative\",\n overflow: \"hidden\"\n }, style),\n ref: this.handleRef,\n key: \"fluid-\" + JSON.stringify(image.srcSet)\n }, _react[\"default\"].createElement(Tag, {\n style: {\n width: \"100%\",\n paddingBottom: 100 / image.aspectRatio + \"%\"\n }\n }), bgColor && _react[\"default\"].createElement(Tag, {\n title: title,\n style: (0, _extends2[\"default\"])({\n backgroundColor: bgColor,\n position: \"absolute\",\n top: 0,\n bottom: 0,\n opacity: !this.state.imgLoaded ? 1 : 0,\n right: 0,\n left: 0\n }, shouldFadeIn && delayHideStyle)\n }), image.base64 && _react[\"default\"].createElement(Placeholder, {\n src: image.base64,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateBase64Sources\n }), image.tracedSVG && _react[\"default\"].createElement(Placeholder, {\n src: image.tracedSVG,\n spreadProps: placeholderImageProps,\n imageVariants: imageVariants,\n generateSources: generateTracedSVGSources\n }), this.state.isVisible && _react[\"default\"].createElement(\"picture\", null, generateImageSources(imageVariants), _react[\"default\"].createElement(Img, {\n alt: alt,\n title: title,\n sizes: image.sizes,\n src: image.src,\n crossOrigin: this.props.crossOrigin,\n srcSet: image.srcSet,\n style: imageStyle,\n ref: this.imageRef,\n onLoad: this.handleImageLoaded,\n onError: this.props.onError,\n itemProp: itemProp,\n loading: loading,\n draggable: draggable\n })), this.addNoScript && _react[\"default\"].createElement(\"noscript\", {\n dangerouslySetInnerHTML: {\n __html: noscriptImg((0, _extends2[\"default\"])({\n alt: alt,\n title: title,\n loading: loading\n }, image, {\n imageVariants: imageVariants\n }))\n }\n }));\n }\n\n if (fixed) {\n var _imageVariants = fixed;\n var _image = _imageVariants[0];\n var divStyle = (0, _extends2[\"default\"])({\n position: \"relative\",\n overflow: \"hidden\",\n display: \"inline-block\",\n width: _image.width,\n height: _image.height\n }, style);\n\n if (style.display === \"inherit\") {\n delete divStyle.display;\n }\n\n return _react[\"default\"].createElement(Tag, {\n className: (className ? className : \"\") + \" gatsby-image-wrapper\",\n style: divStyle,\n ref: this.handleRef,\n key: \"fixed-\" + JSON.stringify(_image.srcSet)\n }, bgColor && _react[\"default\"].createElement(Tag, {\n title: title,\n style: (0, _extends2[\"default\"])({\n backgroundColor: bgColor,\n width: _image.width,\n opacity: !this.state.imgLoaded ? 1 : 0,\n height: _image.height\n }, shouldFadeIn && delayHideStyle)\n }), _image.base64 && _react[\"default\"].createElement(Placeholder, {\n src: _image.base64,\n spreadProps: placeholderImageProps,\n imageVariants: _imageVariants,\n generateSources: generateBase64Sources\n }), _image.tracedSVG && _react[\"default\"].createElement(Placeholder, {\n src: _image.tracedSVG,\n spreadProps: placeholderImageProps,\n imageVariants: _imageVariants,\n generateSources: generateTracedSVGSources\n }), this.state.isVisible && _react[\"default\"].createElement(\"picture\", null, generateImageSources(_imageVariants), _react[\"default\"].createElement(Img, {\n alt: alt,\n title: title,\n width: _image.width,\n height: _image.height,\n sizes: _image.sizes,\n src: _image.src,\n crossOrigin: this.props.crossOrigin,\n srcSet: _image.srcSet,\n style: imageStyle,\n ref: this.imageRef,\n onLoad: this.handleImageLoaded,\n onError: this.props.onError,\n itemProp: itemProp,\n loading: loading,\n draggable: draggable\n })), this.addNoScript && _react[\"default\"].createElement(\"noscript\", {\n dangerouslySetInnerHTML: {\n __html: noscriptImg((0, _extends2[\"default\"])({\n alt: alt,\n title: title,\n loading: loading\n }, _image, {\n imageVariants: _imageVariants\n }))\n }\n }));\n }\n\n return null;\n };\n\n return Image;\n}(_react[\"default\"].Component);\n\nImage.defaultProps = {\n fadeIn: true,\n durationFadeIn: 500,\n alt: \"\",\n Tag: \"div\",\n // We set it to `lazy` by default because it's best to default to a performant\n // setting and let the user \"opt out\" to `eager`\n loading: \"lazy\"\n};\n\nvar fixedObject = _propTypes[\"default\"].shape({\n width: _propTypes[\"default\"].number.isRequired,\n height: _propTypes[\"default\"].number.isRequired,\n src: _propTypes[\"default\"].string.isRequired,\n srcSet: _propTypes[\"default\"].string.isRequired,\n base64: _propTypes[\"default\"].string,\n tracedSVG: _propTypes[\"default\"].string,\n srcWebp: _propTypes[\"default\"].string,\n srcSetWebp: _propTypes[\"default\"].string,\n media: _propTypes[\"default\"].string\n});\n\nvar fluidObject = _propTypes[\"default\"].shape({\n aspectRatio: _propTypes[\"default\"].number.isRequired,\n src: _propTypes[\"default\"].string.isRequired,\n srcSet: _propTypes[\"default\"].string.isRequired,\n sizes: _propTypes[\"default\"].string.isRequired,\n base64: _propTypes[\"default\"].string,\n tracedSVG: _propTypes[\"default\"].string,\n srcWebp: _propTypes[\"default\"].string,\n srcSetWebp: _propTypes[\"default\"].string,\n media: _propTypes[\"default\"].string\n});\n\nImage.propTypes = {\n resolutions: fixedObject,\n sizes: fluidObject,\n fixed: _propTypes[\"default\"].oneOfType([fixedObject, _propTypes[\"default\"].arrayOf(fixedObject)]),\n fluid: _propTypes[\"default\"].oneOfType([fluidObject, _propTypes[\"default\"].arrayOf(fluidObject)]),\n fadeIn: _propTypes[\"default\"].bool,\n durationFadeIn: _propTypes[\"default\"].number,\n title: _propTypes[\"default\"].string,\n alt: _propTypes[\"default\"].string,\n className: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].object]),\n // Support Glamor's css prop.\n critical: _propTypes[\"default\"].bool,\n crossOrigin: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].bool]),\n style: _propTypes[\"default\"].object,\n imgStyle: _propTypes[\"default\"].object,\n placeholderStyle: _propTypes[\"default\"].object,\n placeholderClassName: _propTypes[\"default\"].string,\n backgroundColor: _propTypes[\"default\"].oneOfType([_propTypes[\"default\"].string, _propTypes[\"default\"].bool]),\n onLoad: _propTypes[\"default\"].func,\n onError: _propTypes[\"default\"].func,\n onStartLoad: _propTypes[\"default\"].func,\n Tag: _propTypes[\"default\"].string,\n itemProp: _propTypes[\"default\"].string,\n loading: _propTypes[\"default\"].oneOf([\"auto\", \"lazy\", \"eager\"]),\n draggable: _propTypes[\"default\"].bool\n};\nvar _default = Image;\nexports[\"default\"] = _default;","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n"],"sourceRoot":""}