{"version":3,"sources":["webpack:///./node_modules/react-lazy-load/lib/utils/parentScroll.js","webpack:///./node_modules/gatsby-plugin-disqus/utils.js","webpack:///./node_modules/lodash.debounce/index.js","webpack:///./node_modules/gatsby-plugin-mdx/index.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/react-lazy-load/lib/utils/getElementPosition.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack:///./node_modules/react-lazy-load/lib/LazyLoad.js","webpack:///./node_modules/gatsby-plugin-disqus/index.js","webpack:///./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/eventlistener/eventlistener.js","webpack:///./node_modules/gatsby-plugin-disqus/components/Disqus.js","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/gatsby-plugin-mdx/mdx-renderer.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","webpack:///./src/components/LatestPosts.js","webpack:///./src/svg-icons/calendar.js","webpack:///./node_modules/lodash.throttle/index.js","webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js","webpack:///./node_modules/react-lazy-load/lib/utils/inViewport.js","webpack:///./node_modules/gatsby-plugin-disqus/components/CommentCount.js","webpack:///./src/components/SimpleFunctions.js","webpack:///./node_modules/@babel/runtime/helpers/construct.js","webpack:///./node_modules/gatsby-plugin-disqus/components/CommentEmbed.js","webpack:///./src/svg-icons/comment-dots.js","webpack:///./src/svg-icons/pinterest.js","webpack:///./src/components/blog/BlogInfo.js","webpack:///./src/components/blog/PostComponents.js","webpack:///./src/components/Writer.js","webpack:///./src/svg-icons/star.js","webpack:///./src/components/blog/RatingBox.js","webpack:///./src/svg-icons/top-arrow.js","webpack:///./src/components/sidebar/SidebarLatestPosts.js","webpack:///./src/components/sidebar/SidebarTableofContents.js","webpack:///./node_modules/js-search/dist/esm/js-search.js","webpack:///./src/components/SearchForm.js","webpack:///./src/templates/blog-post.js"],"names":["Object","defineProperty","exports","value","style","element","prop","getComputedStyle","getPropertyValue","overflow","default","HTMLElement","window","parent","document","body","documentElement","parentNode","test","_interopRequireDefault","require","__esModule","insertScript","src","id","script","createElement","async","appendChild","removeScript","getElementById","removeChild","debounce","func","wait","runOnFirstCall","timeout","context","this","args","arguments","deferredExecution","apply","callNow","clearTimeout","setTimeout","isReactElement","shallowComparison","currentProps","nextProps","_ref","propNames","Set","keys","concat","_toConsumableArray2","filter","name","length","_react","isValidElement","Array","isArray","some","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","global","freeSelf","self","root","Function","objectToString","prototype","toString","nativeMax","Math","max","nativeMin","min","now","Date","isObject","type","toNumber","isObjectLike","call","isSymbol","other","valueOf","replace","isBinary","slice","module","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","thisArg","undefined","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","remainingWait","debounced","isInvoking","cancel","flush","MDXRenderer","iter","Symbol","iterator","from","rect","getBoundingClientRect","top","pageYOffset","left","pageXOffset","arrayLikeToArray","arr","_createClass","defineProperties","target","props","i","descriptor","enumerable","configurable","writable","key","Constructor","protoProps","staticProps","_react2","_propTypes2","_reactDom","_eventlistener","_lodash2","_lodash4","_parentScroll2","_inViewport2","obj","LazyLoad","_Component","instance","_classCallCheck","_this","ReferenceError","_possibleConstructorReturn","__proto__","getPrototypeOf","lazyLoadHandler","bind","throttle","state","visible","subClass","superClass","create","constructor","setPrototypeOf","_inherits","_mounted","eventNode","getEventNode","add","_nextProps","nextState","detachListeners","findDOMNode","_props","offset","offsetVertical","offsetHorizontal","offsetTop","offsetBottom","offsetLeft","offsetRight","_offsetAll","threshold","_offsetVertical","_offsetHorizontal","bottom","right","getOffset","node","onContentVisible","setState","remove","_props2","children","className","height","width","elStyles","elClasses","elementType","Children","only","Component","propTypes","isRequired","string","bool","oneOfType","number","defaultProps","_Disqus","Disqus","_CommentCount","CommentCount","_CommentEmbed","CommentEmbed","_default","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","_setPrototypeOf","o","p","wrap","standard","fallback","el","evtName","listener","useCapture","_extends2","_objectWithoutPropertiesLoose2","_inheritsLoose2","_propTypes","_utils","_React$Component","shortname","GATSBY_DISQUS_SHORTNAME","embedUrl","_proto","componentDidMount","loadInstance","shouldComponentUpdate","componentDidUpdate","componentWillUnmount","cleanInstance","getDisqusConfig","config","page","identifier","url","title","remote_auth_s3","remoteAuthS3","api_key","apiKey","language","disqus_config","reloadInstance","DISQUS","reset","reload","error","thread","hasChildNodes","firstChild","querySelector","iframe","render","_this$props","__self","__source","fileName","lineNumber","columnNumber","shape","len","arr2","React","mdx","useMDXScope","scope","mdxScope","End","fullScope","values","fn","minLen","n","Reflect","construct","sham","Proxy","e","LatestPosts","category","_filterdArray","useStaticQuery","allMdx","nodes","post","frontmatter","cat","_latestPosts","maxLength","push","map","slug","fields","img","featuredimage","base","childImageSharp","original","FindCategory","categoryName","categoryLink","to","srcSet","alt","loading","rel","icon","xmlns","viewBox","fill","d","inViewport","container","customOffset","offsetParent","isHidden","innerHeight","innerWidth","containerPosition","_getElementPosition2","offsetHeight","offsetWidth","elementPosition","_getElementPosition","queueResetCount","DISQUSWIDGETS","getCount","placeholder","ID","FindItems","categories","find","authors","isNativeReflectConstruct","_construct","Parent","Class","a","getSrc","Number","commentId","showParentComment","showMedia","seamless","scrolling","frameBorder","BlogInfo","siteURL","useSiteMetadata","date","href","disqusConfig","data-original-title","location","encodeURI","image","BButton","link","ctitle","GetChild","achild","ProsNCons","pros","cons","_pros","item","mdxType","split","_cons","index","SpecTable","spec","_spec","_value","PTitle","beforeTitle","afterTitle","hlevel","cName","cEnable","disableTitle","Heading","join","PImage","btn","Boolean","pop","lastDot","lastIndexOf","ext","substring","useAllImages","Anchor","Fragment","attb","TImage","media","TableOfContents","h3enabled","data","useState","setHeight","btnText","setBtnText","onClick","heading","InnerText","btnDisplay","setBtnDisplay","display","BestProduct","allImageSharp","fluid","originalName","AnchorID","YTFrame","srcDoc","allow","allowFullScreen","Writer","writer","writers","links","findIndex","_writer","itemProp","itemScope","itemType","RatingBox","count","ratingStars","isChecked","aria-label","indexOf","htmlFor","toFixed","defaultChecked","pingPong","transform","SidebarLatestPosts","posts","SidebarTableofContents","bSidebar","setBSidebar","sideShow","stoc","sToC","sLink","alink","sText","atext","sTitle2","stitle","sImg","role","level","PrefixIndexStrategy","expandToken","token","expandedTokens","charAt","LowerCaseSanitizer","sanitize","text","toLocaleLowerCase","trim","getNestedFieldValue","object","path","TfIdfSearchIndex","uidFieldName","_uidFieldName","_tokenToIdfCache","_tokenMap","indexDocument","uid","doc","tokenDatum","tokenMap","$numDocumentOccurrences","$totalNumOccurrences","$uidMap","uidMap","$document","$numTokenOccurrences","search","tokens","corpus","uidToDocumentMap","numTokens","tokenMetadata","j","numKeys","documents","calculateTfIdf","_createCalculateTfIdf","sort","documentA","documentB","_createCalculateIdf","tokenToIdfCache","numDocumentsWithToken","log","calculateIdf","score","inverseDocumentFrequency","Infinity","REGEX","SimpleTokenizer","tokenize","_defineProperties","Search","Error","_indexStrategy","_searchIndex","_sanitizer","_tokenizer","_documents","_searchableFields","addDocument","addDocuments","indexDocuments_","addIndex","field","query","_initialized","indexStrategy","sanitizer","searchIndex","tokenizer","di","numDocuments","sfi","numSearchableFields","fieldValue","searchableField","fieldTokens","fti","numFieldValues","fieldToken","eti","nummExpandedTokens","expandedToken","set","get","Results","results","Hit","hit","App","searchValue","setSearchValue","searchResults","setSearchResults","JsSearch","noValidate","autoComplete","autoCorrect","autoCapitalize","spellCheck","required","onChange","BlogPostTemplate","content","helmet","sidebar","faq","rating","rcount","rvalue","enabletoc","tocdata","beforeBody","afterBody","btT","setBtT","contentRef","useRef","topOffset","setTopOffset","backToTop","scrollY","useEffect","addEventListener","current","removeEventListener","ea","querySelectorAll","r","preventDefault","getAttribute","scrollTo","behavior","components","PostComps","ref","ques","ans","BlogPost","sdate","moddate","products","seoTitle","seoDescription","beforebody","afterbody","schema","useSiteMetaData","siteName","articleSchema","faqSchema","productSchema","Layout","titleParent","HeadData","description","bodyAttributes","itemtype","itemscope","pageContext","toc"],"mappings":"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","file":"component---src-templates-blog-post-js.js","sourcesContent":["'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar style = function style(element, prop) {\n return typeof getComputedStyle !== 'undefined' ? getComputedStyle(element, null).getPropertyValue(prop) : element.style[prop];\n};\n\nvar overflow = function overflow(element) {\n return style(element, 'overflow') + style(element, 'overflow-y') + style(element, 'overflow-x');\n};\n\nvar scrollParent = function scrollParent(element) {\n if (!(element instanceof HTMLElement)) {\n return window;\n }\n\n var parent = element;\n\n while (parent) {\n if (parent === document.body || parent === document.documentElement) {\n break;\n }\n\n if (!parent.parentNode) {\n break;\n }\n\n if (/(scroll|auto)/.test(overflow(parent))) {\n return parent;\n }\n\n parent = parent.parentNode;\n }\n\n return window;\n};\n\nexports.default = scrollParent;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.insertScript = insertScript;\nexports.removeScript = removeScript;\nexports.debounce = debounce;\nexports.isReactElement = isReactElement;\nexports.shallowComparison = shallowComparison;\n\nvar _toConsumableArray2 = _interopRequireDefault(require(\"@babel/runtime/helpers/toConsumableArray\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nfunction insertScript(src, id, parent) {\n var script = window.document.createElement('script');\n script.async = true;\n script.src = src;\n script.id = id;\n parent.appendChild(script);\n return script;\n}\n\nfunction removeScript(id, parent) {\n var script = window.document.getElementById(id);\n\n if (script) {\n parent.removeChild(script);\n }\n}\n\nfunction debounce(func, wait, runOnFirstCall) {\n var timeout;\n return function () {\n var context = this;\n var args = arguments;\n\n var deferredExecution = function deferredExecution() {\n timeout = null;\n\n if (!runOnFirstCall) {\n func.apply(context, args);\n }\n };\n\n var callNow = runOnFirstCall && !timeout;\n window.clearTimeout(timeout);\n timeout = setTimeout(deferredExecution, wait);\n\n if (callNow) {\n func.apply(context, args);\n }\n };\n}\n\nfunction isReactElement(element) {\n if (_react.default.isValidElement(element)) {\n return true;\n } else if (Array.isArray(element)) {\n return element.some(function (value) {\n return _react.default.isValidElement(value);\n });\n }\n\n return false;\n}\n\nfunction shallowComparison(currentProps, nextProps) {\n var _ref;\n\n // Perform a comparison of all props, excluding React Elements, to prevent\n // unnecessary updates\n var propNames = new Set(Object.keys(currentProps).concat(Object.keys(nextProps)));\n\n var changes = (_ref = []).concat.apply(_ref, (0, _toConsumableArray2.default)(propNames)).filter(function (name) {\n if (typeof currentProps[name] === 'object') {\n if (shallowComparison(currentProps[name], nextProps[name])) {\n return true;\n }\n } else if (currentProps[name] !== nextProps[name] && !isReactElement(currentProps[name])) {\n return true;\n }\n });\n\n return changes.length !== 0;\n}","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/** Used as references for various `Number` constants. */\n\nvar NAN = 0 / 0;\n/** `Object#toString` result references. */\n\nvar symbolTag = '[object Symbol]';\n/** Used to match leading and trailing whitespace. */\n\nvar reTrim = /^\\s+|\\s+$/g;\n/** Used to detect bad signed hexadecimal string values. */\n\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n/** Used to detect binary string values. */\n\nvar reIsBinary = /^0b[01]+$/i;\n/** Used to detect octal string values. */\n\nvar reIsOctal = /^0o[0-7]+$/i;\n/** Built-in method references without a dependency on `root`. */\n\nvar freeParseInt = parseInt;\n/** Detect free variable `global` from Node.js. */\n\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n/** Detect free variable `self`. */\n\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar objectToString = objectProto.toString;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n\nvar now = function now() {\n return root.Date.now();\n};\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n\n\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n wait = toNumber(wait) || 0;\n\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time; // Start the timer for the trailing edge.\n\n timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n } // Restart the timer.\n\n\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\n\nfunction isSymbol(value) {\n return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;\n}\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n\n\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\n\nmodule.exports = debounce;","/**\n * Welcome to gatsby-plugin-mdx!\n *\n * Start reading in gatsby-node.js\n */\n\nconst MDXRenderer = require(`./mdx-renderer`)\n\nmodule.exports = {\n MDXRenderer: MDXRenderer,\n}\n","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}\n\nmodule.exports = _nonIterableSpread;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = getElementPosition;\n/*\r\n* Finds element's position relative to the whole document,\r\n* rather than to the viewport as it is the case with .getBoundingClientRect().\r\n*/\n\nfunction getElementPosition(element) {\n var rect = element.getBoundingClientRect();\n return {\n top: rect.top + window.pageYOffset,\n left: rect.left + window.pageXOffset\n };\n}","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\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 _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _reactDom = require('react-dom');\n\nvar _eventlistener = require('eventlistener');\n\nvar _lodash = require('lodash.debounce');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _lodash3 = require('lodash.throttle');\n\nvar _lodash4 = _interopRequireDefault(_lodash3);\n\nvar _parentScroll = require('./utils/parentScroll');\n\nvar _parentScroll2 = _interopRequireDefault(_parentScroll);\n\nvar _inViewport = require('./utils/inViewport');\n\nvar _inViewport2 = _interopRequireDefault(_inViewport);\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 LazyLoad = function (_Component) {\n _inherits(LazyLoad, _Component);\n\n function LazyLoad(props) {\n _classCallCheck(this, LazyLoad);\n\n var _this = _possibleConstructorReturn(this, (LazyLoad.__proto__ || Object.getPrototypeOf(LazyLoad)).call(this, props));\n\n _this.lazyLoadHandler = _this.lazyLoadHandler.bind(_this);\n\n if (props.throttle > 0) {\n if (props.debounce) {\n _this.lazyLoadHandler = (0, _lodash2.default)(_this.lazyLoadHandler, props.throttle);\n } else {\n _this.lazyLoadHandler = (0, _lodash4.default)(_this.lazyLoadHandler, props.throttle);\n }\n }\n\n _this.state = {\n visible: false\n };\n return _this;\n }\n\n _createClass(LazyLoad, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this._mounted = true;\n var eventNode = this.getEventNode();\n this.lazyLoadHandler();\n\n if (this.lazyLoadHandler.flush) {\n this.lazyLoadHandler.flush();\n }\n\n (0, _eventlistener.add)(window, 'resize', this.lazyLoadHandler);\n (0, _eventlistener.add)(eventNode, 'scroll', this.lazyLoadHandler);\n if (eventNode !== window) (0, _eventlistener.add)(window, 'scroll', this.lazyLoadHandler);\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps() {\n if (!this.state.visible) {\n this.lazyLoadHandler();\n }\n }\n }, {\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(_nextProps, nextState) {\n return nextState.visible;\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this._mounted = false;\n\n if (this.lazyLoadHandler.cancel) {\n this.lazyLoadHandler.cancel();\n }\n\n this.detachListeners();\n }\n }, {\n key: 'getEventNode',\n value: function getEventNode() {\n return (0, _parentScroll2.default)((0, _reactDom.findDOMNode)(this));\n }\n }, {\n key: 'getOffset',\n value: function getOffset() {\n var _props = this.props,\n offset = _props.offset,\n offsetVertical = _props.offsetVertical,\n offsetHorizontal = _props.offsetHorizontal,\n offsetTop = _props.offsetTop,\n offsetBottom = _props.offsetBottom,\n offsetLeft = _props.offsetLeft,\n offsetRight = _props.offsetRight,\n threshold = _props.threshold;\n\n var _offsetAll = threshold || offset;\n\n var _offsetVertical = offsetVertical || _offsetAll;\n\n var _offsetHorizontal = offsetHorizontal || _offsetAll;\n\n return {\n top: offsetTop || _offsetVertical,\n bottom: offsetBottom || _offsetVertical,\n left: offsetLeft || _offsetHorizontal,\n right: offsetRight || _offsetHorizontal\n };\n }\n }, {\n key: 'lazyLoadHandler',\n value: function lazyLoadHandler() {\n if (!this._mounted) {\n return;\n }\n\n var offset = this.getOffset();\n var node = (0, _reactDom.findDOMNode)(this);\n var eventNode = this.getEventNode();\n\n if ((0, _inViewport2.default)(node, eventNode, offset)) {\n var onContentVisible = this.props.onContentVisible;\n this.setState({\n visible: true\n }, function () {\n if (onContentVisible) {\n onContentVisible();\n }\n });\n this.detachListeners();\n }\n }\n }, {\n key: 'detachListeners',\n value: function detachListeners() {\n var eventNode = this.getEventNode();\n (0, _eventlistener.remove)(window, 'resize', this.lazyLoadHandler);\n (0, _eventlistener.remove)(eventNode, 'scroll', this.lazyLoadHandler);\n if (eventNode !== window) (0, _eventlistener.remove)(window, 'scroll', this.lazyLoadHandler);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props2 = this.props,\n children = _props2.children,\n className = _props2.className,\n height = _props2.height,\n width = _props2.width;\n var visible = this.state.visible;\n var elStyles = {\n height: height,\n width: width\n };\n var elClasses = 'LazyLoad' + (visible ? ' is-visible' : '') + (className ? ' ' + className : '');\n return _react2.default.createElement(this.props.elementType, {\n className: elClasses,\n style: elStyles\n }, visible && _react.Children.only(children));\n }\n }]);\n\n return LazyLoad;\n}(_react.Component);\n\nexports.default = LazyLoad;\nLazyLoad.propTypes = {\n children: _propTypes2.default.node.isRequired,\n className: _propTypes2.default.string,\n debounce: _propTypes2.default.bool,\n elementType: _propTypes2.default.string,\n height: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n offset: _propTypes2.default.number,\n offsetBottom: _propTypes2.default.number,\n offsetHorizontal: _propTypes2.default.number,\n offsetLeft: _propTypes2.default.number,\n offsetRight: _propTypes2.default.number,\n offsetTop: _propTypes2.default.number,\n offsetVertical: _propTypes2.default.number,\n threshold: _propTypes2.default.number,\n throttle: _propTypes2.default.number,\n width: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.number]),\n onContentVisible: _propTypes2.default.func\n};\nLazyLoad.defaultProps = {\n elementType: 'div',\n debounce: true,\n offset: 0,\n offsetBottom: 0,\n offsetHorizontal: 0,\n offsetLeft: 0,\n offsetRight: 0,\n offsetTop: 0,\n offsetVertical: 0,\n throttle: 250\n};","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _Disqus = _interopRequireDefault(require(\"./components/Disqus\"));\n\nexports.Disqus = _Disqus.default;\n\nvar _CommentCount = _interopRequireDefault(require(\"./components/CommentCount\"));\n\nexports.CommentCount = _CommentCount.default;\n\nvar _CommentEmbed = _interopRequireDefault(require(\"./components/CommentEmbed\"));\n\nexports.CommentEmbed = _CommentEmbed.default;\nvar _default = _Disqus.default;\nexports.default = _default;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.eventListener = factory();\n }\n})(this, function () {\n function wrap(standard, fallback) {\n return function (el, evtName, listener, useCapture) {\n if (el[standard]) {\n el[standard](evtName, listener, useCapture);\n } else if (el[fallback]) {\n el[fallback]('on' + evtName, listener);\n }\n };\n }\n\n return {\n add: wrap('addEventListener', 'attachEvent'),\n remove: wrap('removeEventListener', 'detachEvent')\n };\n});","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _utils = require(\"../utils\");\n\nvar _jsxFileName = \"/Users/brettstevenson/Desktop/Folder/gatsby-plugin-workspace/gatsby-plugin-disqus/src/components/Disqus.jsx\";\n\nvar Disqus = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(Disqus, _React$Component);\n\n function Disqus(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.shortname = typeof GATSBY_DISQUS_SHORTNAME !== \"undefined\" && GATSBY_DISQUS_SHORTNAME !== '' ? GATSBY_DISQUS_SHORTNAME : '';\n _this.embedUrl = \"https://\" + _this.shortname + \".disqus.com/embed.js\";\n return _this;\n }\n\n var _proto = Disqus.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.loadInstance();\n };\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n if (this.props === nextProps) {\n return false;\n }\n\n return (0, _utils.shallowComparison)(this.props, nextProps);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n this.loadInstance();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cleanInstance();\n };\n\n _proto.getDisqusConfig = function getDisqusConfig(config) {\n return function () {\n this.page.identifier = config.identifier;\n this.page.url = config.url;\n this.page.title = config.title;\n this.page.remote_auth_s3 = config.remoteAuthS3;\n this.page.api_key = config.apiKey;\n this.language = config.language;\n };\n };\n\n _proto.loadInstance = function loadInstance() {\n if (typeof window !== 'undefined' && window.document) {\n window.disqus_config = this.getDisqusConfig(this.props.config);\n\n if (window.document.getElementById('dsq-embed-scr')) {\n this.reloadInstance();\n } else {\n (0, _utils.insertScript)(this.embedUrl, 'dsq-embed-scr', window.document.body);\n }\n }\n };\n\n _proto.reloadInstance = function reloadInstance() {\n if (window && window.DISQUS) {\n window.DISQUS.reset({\n reload: true\n });\n }\n };\n\n _proto.cleanInstance = function cleanInstance() {\n (0, _utils.removeScript)('dsq-embed-scr', window.document.body);\n\n try {\n delete window.DISQUS;\n } catch (error) {\n window.DISQUS = undefined;\n }\n\n var thread = window.document.getElementById('disqus_thread');\n\n if (thread) {\n while (thread.hasChildNodes()) {\n thread.removeChild(thread.firstChild);\n }\n } // Retrieve and remove the sidebar iframe\n\n\n var iframeQuery = window.document.querySelector('[id^=\"dsq-app\"]');\n\n if (iframeQuery) {\n var iframe = window.document.getElementById(window.document.querySelector('[id^=\"dsq-app\"]').id);\n iframe.parentNode.removeChild(iframe);\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n config = _this$props.config,\n props = (0, _objectWithoutPropertiesLoose2.default)(_this$props, [\"config\"]);\n return /*#__PURE__*/_react.default.createElement(\"div\", (0, _extends2.default)({\n id: \"disqus_thread\"\n }, props, {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 86,\n columnNumber: 7\n }\n }));\n };\n\n return Disqus;\n}(_react.default.Component);\n\nexports.default = Disqus;\nDisqus.propTypes = {\n config: _propTypes.default.shape({\n /*\n * Tells the Disqus service how to identify the current page. \n * When the Disqus embed is loaded, the identifier is used to look up \n * the correct thread. \n */\n identifier: _propTypes.default.string,\n\n /*\n * Tells the Disqus service the title of the current page.\n * This is used when creating the thread on Disqus.\n */\n title: _propTypes.default.string,\n\n /*\n * Tells the Disqus service the URL of the current page.\n * This URL is used when a thread is created so that Disqus knows which\n * page a thread belongs to.\n * (If undefined, Disqus will use the global.location.href)\n */\n url: _propTypes.default.string,\n\n /*\n * Tells the Disqus service to override the default site language for the\n * current page.\n * This allows for dynamically loading the Disqus embed in different \n * languages on a per-page basis.\n * (If undefined, Disqus will use the default site language)\n */\n language: _propTypes.default.string,\n\n /*\n The generated payload used to pass Single Sign-On (SSO) user data\n */\n remoteAuthS3: _propTypes.default.string,\n\n /*\n * This is the public API key for your Single Sign-On (SSO) integration\n */\n apiKey: _propTypes.default.string\n })\n};","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}\n\nmodule.exports = _arrayLikeToArray;","const React = require(`react`)\nconst { mdx } = require(`@mdx-js/react`)\nconst { useMDXScope } = require(`./context`)\n\nmodule.exports = function MDXRenderer({\n scope,\n children,\n ...props\n}) {\n const mdxScope = useMDXScope(scope)\n\n // Memoize the compiled component\n const End = React.useMemo(() => {\n if (!children) {\n return null\n }\n\n const fullScope = {\n // React is here just in case the user doesn't pass them in\n // in a manual usage of the renderer\n React,\n mdx,\n ...mdxScope,\n }\n\n const keys = Object.keys(fullScope)\n const values = keys.map(key => fullScope[key])\n const fn = new Function(`_fn`, ...keys, `${children}`)\n\n return fn({}, ...values)\n }, [children, scope])\n\n return React.createElement(End, {...props })\n}\n","var arrayLikeToArray = require(\"./arrayLikeToArray\");\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\nmodule.exports = _unsupportedIterableToArray;","function _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 Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nmodule.exports = _isNativeReflectConstruct;","import React, { useEffect, useState } from \"react\";\nimport { useStaticQuery, graphql, Link } from \"gatsby\";\nimport { FindCategory } from \"../components/SimpleFunctions.js\";\n\nconst LatestPosts = ({ category, id }) => {\n const allPosts = useStaticQuery(graphql`\n {\n allMdx(sort: { order: DESC, fields: [frontmatter___date] }) {\n nodes {\n id\n fields {\n slug\n }\n frontmatter {\n title\n cat\n featuredimage {\n name\n base\n childImageSharp {\n original {\n height\n width\n }\n }\n }\n }\n }\n }\n }\n `);\n\n const { nodes: posts } = allPosts.allMdx;\n const _filterdArray = posts.filter((post) => post.frontmatter.cat === category);\n const _latestPosts = [];\n const maxLength = _filterdArray.length > 6 ? 6 : _filterdArray.length - 1;\n for (let i = 0; _latestPosts.length < maxLength; i++) {\n if (_filterdArray[i].id !== id) {\n _latestPosts.push(_filterdArray[i]);\n }\n }\n\n return (\n !!_latestPosts.length && (\n
\n

{category ? \"Related Posts\" : \"Latest Posts\"}

\n
\n {_latestPosts.map((post) => {\n const id = post.id;\n const slug = post.fields.slug;\n const { title, cat: category } = post.frontmatter;\n const { base: img } = post.frontmatter.featuredimage;\n const { width, height } = post.frontmatter.featuredimage.childImageSharp.original;\n const { categoryName, categoryLink } = FindCategory(category);\n\n return (\n
\n
\n \n \n \n {title}\n \n \n
\n
\n {categoryName}\n
\n
\n {title}\n
\n
\n );\n })}\n
\n
\n )\n );\n};\n\nexport default LatestPosts;\n","import React from \"react\";\n\nconst icon = () => {\n return (\n \n \n \n );\n};\nexport default icon;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/** Used as references for various `Number` constants. */\n\nvar NAN = 0 / 0;\n/** `Object#toString` result references. */\n\nvar symbolTag = '[object Symbol]';\n/** Used to match leading and trailing whitespace. */\n\nvar reTrim = /^\\s+|\\s+$/g;\n/** Used to detect bad signed hexadecimal string values. */\n\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n/** Used to detect binary string values. */\n\nvar reIsBinary = /^0b[01]+$/i;\n/** Used to detect octal string values. */\n\nvar reIsOctal = /^0o[0-7]+$/i;\n/** Built-in method references without a dependency on `root`. */\n\nvar freeParseInt = parseInt;\n/** Detect free variable `global` from Node.js. */\n\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n/** Detect free variable `self`. */\n\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar objectToString = objectProto.toString;\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n\nvar now = function now() {\n return root.Date.now();\n};\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n\n\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n wait = toNumber(wait) || 0;\n\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time; // Start the timer for the trailing edge.\n\n timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n } // Restart the timer.\n\n\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n\n\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\n\nfunction isSymbol(value) {\n return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;\n}\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n\n\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? other + '' : other;\n }\n\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\n\nmodule.exports = throttle;","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}\n\nmodule.exports = _defineProperty;","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = inViewport;\n\nvar _getElementPosition = require('./getElementPosition');\n\nvar _getElementPosition2 = _interopRequireDefault(_getElementPosition);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nvar isHidden = function isHidden(element) {\n return element.offsetParent === null;\n};\n\nfunction inViewport(element, container, customOffset) {\n if (isHidden(element)) {\n return false;\n }\n\n var top = void 0;\n var bottom = void 0;\n var left = void 0;\n var right = void 0;\n\n if (typeof container === 'undefined' || container === window) {\n top = window.pageYOffset;\n left = window.pageXOffset;\n bottom = top + window.innerHeight;\n right = left + window.innerWidth;\n } else {\n if (!inViewport(container, window, customOffset)) return false;\n var containerPosition = (0, _getElementPosition2.default)(container);\n top = containerPosition.top;\n left = containerPosition.left;\n bottom = top + container.offsetHeight;\n right = left + container.offsetWidth;\n }\n\n var elementPosition = (0, _getElementPosition2.default)(element);\n return top <= elementPosition.top + element.offsetHeight + customOffset.top && bottom >= elementPosition.top - customOffset.bottom && left <= elementPosition.left + element.offsetWidth + customOffset.left && right >= elementPosition.left - customOffset.right;\n}","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _extends2 = _interopRequireDefault(require(\"@babel/runtime/helpers/extends\"));\n\nvar _objectWithoutPropertiesLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectWithoutPropertiesLoose\"));\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _utils = require(\"../utils\");\n\nvar _jsxFileName = \"/Users/brettstevenson/Desktop/Folder/gatsby-plugin-workspace/gatsby-plugin-disqus/src/components/CommentCount.jsx\";\nvar queueResetCount = (0, _utils.debounce)(function () {\n if (window.DISQUSWIDGETS) {\n window.DISQUSWIDGETS.getCount({\n reset: true\n });\n }\n}, 300, false);\n\nvar CommentCount = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(CommentCount, _React$Component);\n\n function CommentCount(props) {\n var _this;\n\n _this = _React$Component.call(this, props) || this;\n _this.shortname = typeof GATSBY_DISQUS_SHORTNAME !== \"undefined\" && GATSBY_DISQUS_SHORTNAME !== '' ? GATSBY_DISQUS_SHORTNAME : '';\n return _this;\n }\n\n var _proto = CommentCount.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.loadInstance();\n };\n\n _proto.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n if (this.props === nextProps) return false;\n return (0, _utils.shallowComparison)(this.props, nextProps);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n this.loadInstance();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cleanInstance();\n };\n\n _proto.loadInstance = function loadInstance() {\n if (window.document.getElementById('dsq-count-scr')) {\n queueResetCount();\n } else {\n (0, _utils.insertScript)(\"https://\" + this.shortname + \".disqus.com/count.js\", 'dsq-count-scr', window.document.body);\n }\n };\n\n _proto.cleanInstance = function cleanInstance() {\n (0, _utils.removeScript)('dsq-count-scr', window.document.body);\n window.DISQUSWIDGETS = undefined;\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n config = _this$props.config,\n placeholder = _this$props.placeholder,\n props = (0, _objectWithoutPropertiesLoose2.default)(_this$props, [\"config\", \"placeholder\"]);\n return /*#__PURE__*/_react.default.createElement(\"span\", (0, _extends2.default)({\n className: \"disqus-comment-count\",\n \"data-disqus-identifier\": config.identifier,\n \"data-disqus-url\": config.url\n }, props, {\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 53,\n columnNumber: 7\n }\n }), placeholder);\n };\n\n return CommentCount;\n}(_react.default.Component);\n\nexports.default = CommentCount;\nCommentCount.defaultProps = {\n placeholder: '...'\n};\nCommentCount.propTypes = {\n config: _propTypes.default.shape({\n /*\n * Tells the Disqus service how to identify the current page. \n * When the Disqus embed is loaded, the identifier is used to look up \n * the correct thread. \n */\n identifier: _propTypes.default.string,\n\n /*\n * Tells the Disqus service the title of the current page.\n * This is used when creating the thread on Disqus.\n */\n title: _propTypes.default.string,\n\n /*\n * Tells the Disqus service the URL of the current page.\n * This URL is used when a thread is created so that Disqus knows which\n * page a thread belongs to.\n * (If undefined, Disqus will use the global.location.href)\n */\n url: _propTypes.default.string\n }),\n\n /*\n * This is the text that will be used as a placeholder prior to \n * loading the response.\n */\n placeholder: _propTypes.default.string\n};","import { useStaticQuery, graphql } from \"gatsby\";\n\nexport const FindCategory = (ID) => {\n const { categories } = FindItems();\n\n const category = categories.nodes.find((category) => category.frontmatter.id === ID);\n const categoryName = category?.frontmatter?.title;\n const categoryLink = category?.fields?.slug;\n\n return { categoryName, categoryLink };\n};\n\nexport const FindAuthor = (ID) => {\n const { authors } = FindItems();\n\n const author = authors.nodes.find((author) => author.frontmatter.id === ID);\n const authorName = author?.frontmatter?.title;\n const authorLink = author?.fields?.slug;\n\n return { authorName, authorLink };\n};\n\nexport const CreateID = (name) =>\n name\n .replace(/[^\\w ]/, \"\")\n .split(\" \")\n .join(\"_\");\n\nexport const LinkFix = (item) => (item.link?.includes(\"/\") ? item.link : `/${item.link}/`);\n\nconst FindItems = () => {\n const { authors, categories } = useStaticQuery(graphql`\n query Authors {\n authors: allMarkdownRemark(filter: { frontmatter: { templateKey: { eq: \"author-page\" } } }) {\n nodes {\n fields {\n slug\n }\n frontmatter {\n id\n title\n }\n }\n }\n categories: allMarkdownRemark(filter: { frontmatter: { templateKey: { eq: \"category-page\" } } }) {\n nodes {\n fields {\n slug\n }\n frontmatter {\n id\n title\n }\n }\n }\n }\n `);\n\n return { authors, categories };\n};\n","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct\");\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n module.exports = _construct = Reflect.construct;\n } else {\n module.exports = _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nmodule.exports = _construct;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nexports.__esModule = true;\nexports.default = void 0;\n\nvar _inheritsLoose2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inheritsLoose\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _jsxFileName = \"/Users/brettstevenson/Desktop/Folder/gatsby-plugin-workspace/gatsby-plugin-disqus/src/components/CommentEmbed.jsx\";\n\nvar CommentEmbed = /*#__PURE__*/function (_React$Component) {\n (0, _inheritsLoose2.default)(CommentEmbed, _React$Component);\n\n function CommentEmbed() {\n return _React$Component.apply(this, arguments) || this;\n }\n\n var _proto = CommentEmbed.prototype;\n\n _proto.getSrc = function getSrc() {\n var RADIX_BASE = 36;\n var post = Number(this.props.commentId).toString(RADIX_BASE);\n var parentParam = this.props.showParentComment ? '1' : '0';\n var mediaParam = this.props.showMedia ? '1' : '0';\n return \"https://embed.disqus.com/p/\" + post + \"?p=\" + parentParam + \"&m=\" + mediaParam;\n };\n\n _proto.render = function render() {\n return /*#__PURE__*/_react.default.createElement(\"iframe\", {\n src: this.getSrc(),\n width: this.props.width,\n height: this.props.height,\n seamless: \"seamless\",\n scrolling: \"no\",\n frameBorder: \"0\",\n __self: this,\n __source: {\n fileName: _jsxFileName,\n lineNumber: 17,\n columnNumber: 13\n }\n });\n };\n\n return CommentEmbed;\n}(_react.default.Component);\n\nexports.default = CommentEmbed;\nCommentEmbed.defaultProps = {\n width: 420,\n height: 320,\n showMedia: true,\n showParentComment: true\n};\nCommentEmbed.propTypes = {\n /*\n * This is used to determine the comment that gets embeded.\n * The ID can be found in the Disqus moderation panel or as a `data-post-id`\n * attribute on the HTML element.\n */\n commentId: _propTypes.default.string.isRequired,\n\n /*\n * Determines the width of the embedded comment container.\n */\n width: _propTypes.default.number,\n\n /*\n * Determines the height of the embedded comment container.\n */\n height: _propTypes.default.number,\n\n /*\n * Determines whether the embedded comment should include or omit media from \n * within the original comment.\n */\n showMedia: _propTypes.default.bool,\n\n /*\n * Determines whether the parent comment should be displayed for nested comments.\n */\n showParentComment: _propTypes.default.bool\n};","import React from \"react\";\n\nconst icon = () => {\n return (\n \n \n \n );\n};\nexport default icon;\n","import React from \"react\";\n\nconst icon = () => {\n return (\n \n \n \n );\n};\nexport default icon;\n","import React from \"react\";\nimport Calendar from \"../../svg-icons/calendar.js\";\nimport CommentDots from \"../../svg-icons/comment-dots.js\";\nimport Facebook from \"../../svg-icons/facebook.js\";\nimport Twitter from \"../../svg-icons/twitter.js\";\nimport Pinterest from \"../../svg-icons/pinterest.js\";\nimport useSiteMetadata from \"../SiteMetadata.js\";\nimport { CommentCount } from \"gatsby-plugin-disqus\";\n\nconst BlogInfo = (props) => {\n const { siteURL } = useSiteMetadata();\n\n return (\n
\n
\n
\n \n

{props.date}

\n
\n
\n \n

\n \n \n \n

\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n );\n};\n\nexport default BlogInfo;\n","import React, { useState } from \"react\";\nimport AnimateHeight from \"react-animate-height\";\nimport { useStaticQuery, graphql } from \"gatsby\";\n\nexport const BButton = ({ link, ctitle }) => {\n return (\n \n );\n};\n\nconst GetChild = (achild) => {\n return achild?.props?.children ? GetChild(achild?.props?.children) : achild;\n};\n\nexport const ProsNCons = ({ pros, cons, children }) => {\n const _pros = children ? GetChild(children.find((item) => item.props.mdxType === \"Pros\")).split(\"\\n\") : pros;\n const _cons = children ? GetChild(children.find((item) => item.props.mdxType === \"Cons\")).split(\"\\n\") : cons;\n\n return (\n
\n
\n
Pros
\n
\n
\n
    \n {_pros.map(\n (item, index) =>\n !!item && (\n
  • \n {item}\n
  • \n )\n )}\n
\n
\n
\n
\n
\n
Cons
\n
\n
\n
    \n {_cons.map(\n (item, index) =>\n item && (\n
  • \n {item}\n
  • \n )\n )}\n
\n
\n
\n
\n
\n );\n};\n\nexport const SpecTable = ({ spec, value, children }) => {\n const _spec = children ? GetChild(children.find((item) => item.props.mdxType === \"Spec\")).split(\"\\n\") : spec;\n const _value = children ? GetChild(children.find((item) => item.props.mdxType === \"Value\")).split(\"\\n\") : value;\n\n return (\n \n \n {_spec.map(\n (item, index) =>\n item && (\n \n \n \n \n )\n )}\n \n \n
\n {item}\n {_value[index]}
\n );\n};\n\nexport const PTitle = ({ title, beforeTitle, afterTitle, link, hlevel, cName = \"box_title\", cEnable, disableTitle }) => {\n const Heading = `h${hlevel || \"2\"}`;\n const id = title\n .replace(/[^\\w ]/, \"\")\n .split(\" \")\n .join(\"_\");\n\n return (\n \n {beforeTitle}\n {disableTitle === \"true\" ? null : link ? (\n \n {title}\n \n ) : (\n title\n )}\n {afterTitle}\n \n );\n};\n\nexport const PImage = ({ alt, src, link, btn = true }) => {\n const name = src.split(\"/\").filter(Boolean).pop();\n const lastDot = name.lastIndexOf(\".\");\n const ext = name.substring(lastDot, name.length);\n const { width, height } = useAllImages(src);\n const Anchor = link ? \"a\" : React.Fragment;\n const attb = link ? { href: link } : {};\n\n return (\n
\n
\n \n \n {ext !== \".gif\" && }\n {alt}\n \n \n
\n {link && btn && }\n
\n );\n};\n\nexport const TImage = ({ alt, src }) => {\n const name = src.split(\"/\").filter(Boolean).pop();\n const lastDot = name.lastIndexOf(\".\");\n const fileName = name.substring(0, lastDot);\n const { width, height } = useAllImages(src);\n\n return (\n \n \n \n {alt}\n \n );\n};\n\nexport const TableOfContents = ({ h3enabled, data }) => {\n const [height, setHeight] = useState(0);\n const [btnText, setBtnText] = useState(\"Show\");\n\n const openNav = () => {\n if (height === 0) {\n setHeight(\"auto\");\n setBtnText(\"Hide\");\n } else {\n setHeight(0);\n setBtnText(\"Show\");\n }\n };\n\n return (\n
\n
\n
Table of Contents
\n \n
\n \n \n \n
\n );\n};\n\nexport const InnerText = ({ children }) => {\n const [height, setHeight] = useState(280);\n const [btnDisplay, setBtnDisplay] = useState(\"block\");\n const openReview = () => {\n setBtnDisplay(\"none\");\n setHeight(\"auto\");\n };\n\n return (\n
\n
\n {children}\n
\n
\n \n
\n
\n );\n};\n\nexport const BestProduct = ({ title, src, pros, link }) => {\n const { width, height } = useAllImages(src);\n\n return (\n
\n
\n \"Best\n
\n
\n \n \n \n \n \n
\n
\n

{title}

\n
\n
\n \n {title}\n \n
\n
\n {pros.map((item, index) => (\n
  • {item}
  • \n ))}\n
    \n
    \n \n
    \n
    \n );\n};\n\nexport const useAllImages = (src) => {\n const { allImageSharp } = useStaticQuery(graphql`\n query AllImages {\n allImageSharp {\n nodes {\n fluid {\n originalName\n height: presentationHeight\n width: presentationWidth\n }\n }\n }\n }\n `);\n const image = allImageSharp.nodes.filter((item) => item.fluid.originalName === src)[0];\n return (image && image.fluid) || {};\n};\n\nexport const AnchorID = ({ children }) => {\n return (\n \n {children}\n \n );\n};\n\nexport const YTFrame = ({ id }) => {\n return ;\n};\n","import React from \"react\";\nimport { Link } from \"gatsby\";\n\nconst Writer = ({ writer }) => {\n const writers = [\"Zakriya Amir\", \"Atif Liaqat\"];\n const descriptions = [\"Zakriya is right from Pakistan. He was raised with a quest for gaming craze with an organization of specialized folks. This is the place he understood that computer games can grow your creative mind to unlimited universes. Gaming is no longer for him only a method for amusement, yet enthusiasm. From the youthful age of 8, gaming was simply the main method for communicating. At whatever point he got the opportunity to play computer games, he took it with two hands and played for quite a long time. Much to his dismay that gaming would turn into his closest companion.\", \"I have been fond of computer technology for a long time, ever since childhood, and was always meddling with various hardware and software. With graduation in computer engineering from a recognized university like NUST was a dream come true and enabled me to pursue my dreams in swift ways. Currently, I am working for various websites as a hardware reviewer and content writer.\"];\n const images = [\"Zakriya Amir.jpeg\", \"Atif Liaqat.jpeg\"];\n const links = [\"/author/zakriya-amir/\", \"/author/atif-liaqat/\"];\n const index = writers.findIndex((_writer) => writer === _writer);\n\n return (\n
    \n \n {writers[index]}\n \n
    \n \n {writers[index]}\n \n

    {descriptions[index]}

    \n
    \n
    \n );\n};\n\nexport default Writer;\n","import React from \"react\";\n\nconst icon = () => {\n return (\n \n \n \n );\n};\nexport default icon;\n","import React from \"react\";\nimport Star from \"../../svg-icons/star.js\";\n\nconst RatingBox = ({ count, value }) => {\n const pingPong = () => {\n const ratingStars = [];\n let isChecked = false;\n let i = 0;\n while (i <= 5) {\n if (!isChecked) {\n if (!count && !i) {\n isChecked = true;\n } else if (count && i + 0.2 >= value) {\n isChecked = true;\n }\n }\n ratingStars.push(\n \n \n \n \n );\n i = i + 0.5;\n }\n\n return ratingStars;\n };\n\n return (\n
    \n
    {pingPong()}
    \n

    \n {count ? value.toFixed(1) : \"0.0\"} ({count})\n

    \n
    \n );\n};\n\nexport default RatingBox;\n","import React from \"react\";\n\nconst icon = () => {\n return (\n \n \n \n \n \n );\n};\nexport default icon;\n","import React from \"react\";\nimport { useStaticQuery, graphql, Link } from \"gatsby\";\n\nconst SidebarLatestPosts = () => {\n const data = useStaticQuery(graphql`\n {\n allMdx(sort: { order: DESC, fields: [frontmatter___date] }, limit: 5) {\n nodes {\n frontmatter {\n title\n slug\n }\n }\n }\n }\n `);\n const { nodes: posts } = data.allMdx;\n\n return (\n
    \n

    Latest Posts

    \n
      \n {posts.map((item, index) => (\n
    • \n
      \n \n {item.frontmatter.title}\n \n
      \n
    • \n ))}\n
    \n
    \n );\n};\n\nexport default SidebarLatestPosts;\n","import React, { useState } from \"react\";\n\nconst SidebarTableofContents = ({ data }) => {\n const [bSidebar, setBSidebar] = useState(\"\");\n const sideShow = data && data.stoc && data.image && data.stoc.length !== 0 ? true : false;\n const { stoc: sToC, alink: sLink, atext: sText, stitle: sTitle2 } = sideShow && data;\n const { base: sImg, name: sImgName } = sideShow && data.image;\n const { width, height } = sideShow && data.image.childImageSharp.original;\n\n const openSidebar = () => {\n bSidebar ? setBSidebar(\"\") : setBSidebar(\"active\");\n };\n\n return (\n sideShow && (\n <>\n \n
    \n
    \n

    Table of Contents

    \n \n
    \n
    \n

    {sTitle2}

    \n \n \n \n {sText}\n \n

    {sText}

    \n
    \n
    \n
    \n \n )\n );\n};\n\nexport default SidebarTableofContents;\n","/**\n * Indexes for all substring searches (e.g. the term \"cat\" is indexed as \"c\", \"ca\", \"cat\", \"a\", \"at\", and \"t\").\n */\nvar AllSubstringsIndexStrategy = /*#__PURE__*/function () {\n function AllSubstringsIndexStrategy() {}\n\n var _proto = AllSubstringsIndexStrategy.prototype;\n /**\n * @inheritDocs\n */\n\n _proto.expandToken = function expandToken(token) {\n var expandedTokens = [];\n var string;\n\n for (var i = 0, length = token.length; i < length; ++i) {\n string = '';\n\n for (var j = i; j < length; ++j) {\n string += token.charAt(j);\n expandedTokens.push(string);\n }\n }\n\n return expandedTokens;\n };\n\n return AllSubstringsIndexStrategy;\n}();\n/**\n * Indexes for exact word matches.\n */\n\n\nvar ExactWordIndexStrategy = /*#__PURE__*/function () {\n function ExactWordIndexStrategy() {}\n\n var _proto = ExactWordIndexStrategy.prototype;\n /**\n * @inheritDocs\n */\n\n _proto.expandToken = function expandToken(token) {\n return token ? [token] : [];\n };\n\n return ExactWordIndexStrategy;\n}();\n/**\n * Indexes for prefix searches (e.g. the term \"cat\" is indexed as \"c\", \"ca\", and \"cat\" allowing prefix search lookups).\n */\n\n\nvar PrefixIndexStrategy = /*#__PURE__*/function () {\n function PrefixIndexStrategy() {}\n\n var _proto = PrefixIndexStrategy.prototype;\n /**\n * @inheritDocs\n */\n\n _proto.expandToken = function expandToken(token) {\n var expandedTokens = [];\n var string = '';\n\n for (var i = 0, length = token.length; i < length; ++i) {\n string += token.charAt(i);\n expandedTokens.push(string);\n }\n\n return expandedTokens;\n };\n\n return PrefixIndexStrategy;\n}();\n/**\n * Enforces case-sensitive text matches.\n */\n\n\nvar CaseSensitiveSanitizer = /*#__PURE__*/function () {\n function CaseSensitiveSanitizer() {}\n\n var _proto = CaseSensitiveSanitizer.prototype;\n /**\n * @inheritDocs\n */\n\n _proto.sanitize = function sanitize(text) {\n return text ? text.trim() : '';\n };\n\n return CaseSensitiveSanitizer;\n}();\n/**\n * Sanitizes text by converting to a locale-friendly lower-case version and triming leading and trailing whitespace.\n */\n\n\nvar LowerCaseSanitizer = /*#__PURE__*/function () {\n function LowerCaseSanitizer() {}\n\n var _proto = LowerCaseSanitizer.prototype;\n /**\n * @inheritDocs\n */\n\n _proto.sanitize = function sanitize(text) {\n return text ? text.toLocaleLowerCase().trim() : '';\n };\n\n return LowerCaseSanitizer;\n}();\n/**\n * Find and return a nested object value.\n *\n * @param object to crawl\n * @param path Property path\n * @returns {any}\n */\n\n\nfunction getNestedFieldValue(object, path) {\n path = path || [];\n object = object || {};\n var value = object; // walk down the property path\n\n for (var i = 0; i < path.length; i++) {\n value = value[path[i]];\n\n if (value == null) {\n return null;\n }\n }\n\n return value;\n}\n/**\n * Search index capable of returning results matching a set of tokens and ranked according to TF-IDF.\n */\n\n\nvar TfIdfSearchIndex = /*#__PURE__*/function () {\n function TfIdfSearchIndex(uidFieldName) {\n this._uidFieldName = uidFieldName;\n this._tokenToIdfCache = {};\n this._tokenMap = {};\n }\n /**\n * @inheritDocs\n */\n\n\n var _proto = TfIdfSearchIndex.prototype;\n\n _proto.indexDocument = function indexDocument(token, uid, doc) {\n this._tokenToIdfCache = {}; // New index invalidates previous IDF caches\n\n var tokenMap = this._tokenMap;\n var tokenDatum;\n\n if (typeof tokenMap[token] !== 'object') {\n tokenMap[token] = tokenDatum = {\n $numDocumentOccurrences: 0,\n $totalNumOccurrences: 1,\n $uidMap: {}\n };\n } else {\n tokenDatum = tokenMap[token];\n tokenDatum.$totalNumOccurrences++;\n }\n\n var uidMap = tokenDatum.$uidMap;\n\n if (typeof uidMap[uid] !== 'object') {\n tokenDatum.$numDocumentOccurrences++;\n uidMap[uid] = {\n $document: doc,\n $numTokenOccurrences: 1\n };\n } else {\n uidMap[uid].$numTokenOccurrences++;\n }\n }\n /**\n * @inheritDocs\n */\n ;\n\n _proto.search = function search(tokens, corpus) {\n var uidToDocumentMap = {};\n\n for (var i = 0, numTokens = tokens.length; i < numTokens; i++) {\n var token = tokens[i];\n var tokenMetadata = this._tokenMap[token]; // Short circuit if no matches were found for any given token.\n\n if (!tokenMetadata) {\n return [];\n }\n\n if (i === 0) {\n var keys = Object.keys(tokenMetadata.$uidMap);\n\n for (var j = 0, numKeys = keys.length; j < numKeys; j++) {\n var uid = keys[j];\n uidToDocumentMap[uid] = tokenMetadata.$uidMap[uid].$document;\n }\n } else {\n var keys = Object.keys(uidToDocumentMap);\n\n for (var j = 0, numKeys = keys.length; j < numKeys; j++) {\n var uid = keys[j];\n\n if (typeof tokenMetadata.$uidMap[uid] !== 'object') {\n delete uidToDocumentMap[uid];\n }\n }\n }\n }\n\n var documents = [];\n\n for (var uid in uidToDocumentMap) {\n documents.push(uidToDocumentMap[uid]);\n }\n\n var calculateTfIdf = this._createCalculateTfIdf(); // Return documents sorted by TF-IDF\n\n\n return documents.sort(function (documentA, documentB) {\n return calculateTfIdf(tokens, documentB, corpus) - calculateTfIdf(tokens, documentA, corpus);\n });\n };\n\n _proto._createCalculateIdf = function _createCalculateIdf() {\n var tokenMap = this._tokenMap;\n var tokenToIdfCache = this._tokenToIdfCache;\n return function calculateIdf(token, documents) {\n if (!tokenToIdfCache[token]) {\n var numDocumentsWithToken = typeof tokenMap[token] !== 'undefined' ? tokenMap[token].$numDocumentOccurrences : 0;\n tokenToIdfCache[token] = 1 + Math.log(documents.length / (1 + numDocumentsWithToken));\n }\n\n return tokenToIdfCache[token];\n };\n };\n\n _proto._createCalculateTfIdf = function _createCalculateTfIdf() {\n var tokenMap = this._tokenMap;\n var uidFieldName = this._uidFieldName;\n\n var calculateIdf = this._createCalculateIdf();\n\n return function calculateTfIdf(tokens, document, documents) {\n var score = 0;\n\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n var token = tokens[i];\n var inverseDocumentFrequency = calculateIdf(token, documents);\n\n if (inverseDocumentFrequency === Infinity) {\n inverseDocumentFrequency = 0;\n }\n\n var uid;\n\n if (uidFieldName instanceof Array) {\n uid = document && getNestedFieldValue(document, uidFieldName);\n } else {\n uid = document && document[uidFieldName];\n }\n\n var termFrequency = typeof tokenMap[token] !== 'undefined' && typeof tokenMap[token].$uidMap[uid] !== 'undefined' ? tokenMap[token].$uidMap[uid].$numTokenOccurrences : 0;\n score += termFrequency * inverseDocumentFrequency;\n }\n\n return score;\n };\n };\n\n return TfIdfSearchIndex;\n}();\n/**\n * Search index capable of returning results matching a set of tokens but without any meaningful rank or order.\n */\n\n\nvar UnorderedSearchIndex = /*#__PURE__*/function () {\n function UnorderedSearchIndex() {\n this._tokenToUidToDocumentMap = {};\n }\n /**\n * @inheritDocs\n */\n\n\n var _proto = UnorderedSearchIndex.prototype;\n\n _proto.indexDocument = function indexDocument(token, uid, doc) {\n if (typeof this._tokenToUidToDocumentMap[token] !== 'object') {\n this._tokenToUidToDocumentMap[token] = {};\n }\n\n this._tokenToUidToDocumentMap[token][uid] = doc;\n }\n /**\n * @inheritDocs\n */\n ;\n\n _proto.search = function search(tokens, corpus) {\n var intersectingDocumentMap = {};\n var tokenToUidToDocumentMap = this._tokenToUidToDocumentMap;\n\n for (var i = 0, numTokens = tokens.length; i < numTokens; i++) {\n var token = tokens[i];\n var documentMap = tokenToUidToDocumentMap[token]; // Short circuit if no matches were found for any given token.\n\n if (!documentMap) {\n return [];\n }\n\n if (i === 0) {\n var keys = Object.keys(documentMap);\n\n for (var j = 0, numKeys = keys.length; j < numKeys; j++) {\n var uid = keys[j];\n intersectingDocumentMap[uid] = documentMap[uid];\n }\n } else {\n var keys = Object.keys(intersectingDocumentMap);\n\n for (var j = 0, numKeys = keys.length; j < numKeys; j++) {\n var uid = keys[j];\n\n if (typeof documentMap[uid] !== 'object') {\n delete intersectingDocumentMap[uid];\n }\n }\n }\n }\n\n var keys = Object.keys(intersectingDocumentMap);\n var documents = [];\n\n for (var i = 0, numKeys = keys.length; i < numKeys; i++) {\n var uid = keys[i];\n documents.push(intersectingDocumentMap[uid]);\n }\n\n return documents;\n };\n\n return UnorderedSearchIndex;\n}();\n\nvar REGEX = /[^a-zа-яё0-9\\-']+/i;\n/**\n * Simple tokenizer that splits strings on whitespace characters and returns an array of all non-empty substrings.\n */\n\nvar SimpleTokenizer = /*#__PURE__*/function () {\n function SimpleTokenizer() {}\n\n var _proto = SimpleTokenizer.prototype;\n /**\n * @inheritDocs\n */\n\n _proto.tokenize = function tokenize(text) {\n return text.split(REGEX).filter(function (text) {\n return text;\n } // Filter empty tokens\n );\n };\n\n return SimpleTokenizer;\n}();\n/**\n * Stemming is the process of reducing search tokens to their root (or stem) so that searches for different forms of a\n * word will match. For example \"search\", \"searching\" and \"searched\" are all reduced to the stem \"search\".\n *\n *

    This stemming tokenizer converts tokens (words) to their stem forms before returning them. It requires an\n * external stemming function to be provided; for this purpose I recommend the NPM 'porter-stemmer' library.\n *\n *

    For more information see http : //tartarus.org/~martin/PorterStemmer/\n */\n\n\nvar StemmingTokenizer = /*#__PURE__*/function () {\n /**\n * Constructor.\n *\n * @param stemmingFunction Function capable of accepting a word and returning its stem.\n * @param decoratedIndexStrategy Index strategy to be run after all stop words have been removed.\n */\n function StemmingTokenizer(stemmingFunction, decoratedTokenizer) {\n this._stemmingFunction = stemmingFunction;\n this._tokenizer = decoratedTokenizer;\n }\n /**\n * @inheritDocs\n */\n\n\n var _proto = StemmingTokenizer.prototype;\n\n _proto.tokenize = function tokenize(text) {\n return this._tokenizer.tokenize(text).map(this._stemmingFunction);\n };\n\n return StemmingTokenizer;\n}();\n/**\n * Stop words list copied from Lunr JS.\n */\n\n\nvar StopWordsMap = {\n a: true,\n able: true,\n about: true,\n across: true,\n after: true,\n all: true,\n almost: true,\n also: true,\n am: true,\n among: true,\n an: true,\n and: true,\n any: true,\n are: true,\n as: true,\n at: true,\n be: true,\n because: true,\n been: true,\n but: true,\n by: true,\n can: true,\n cannot: true,\n could: true,\n dear: true,\n did: true,\n 'do': true,\n does: true,\n either: true,\n 'else': true,\n ever: true,\n every: true,\n 'for': true,\n from: true,\n 'get': true,\n got: true,\n had: true,\n has: true,\n have: true,\n he: true,\n her: true,\n hers: true,\n him: true,\n his: true,\n how: true,\n however: true,\n i: true,\n 'if': true,\n 'in': true,\n into: true,\n is: true,\n it: true,\n its: true,\n just: true,\n least: true,\n \"let\": true,\n like: true,\n likely: true,\n may: true,\n me: true,\n might: true,\n most: true,\n must: true,\n my: true,\n neither: true,\n no: true,\n nor: true,\n not: true,\n of: true,\n off: true,\n often: true,\n on: true,\n only: true,\n or: true,\n other: true,\n our: true,\n own: true,\n rather: true,\n said: true,\n say: true,\n says: true,\n she: true,\n should: true,\n since: true,\n so: true,\n some: true,\n than: true,\n that: true,\n the: true,\n their: true,\n them: true,\n then: true,\n there: true,\n these: true,\n they: true,\n 'this': true,\n tis: true,\n to: true,\n too: true,\n twas: true,\n us: true,\n wants: true,\n was: true,\n we: true,\n were: true,\n what: true,\n when: true,\n where: true,\n which: true,\n 'while': true,\n who: true,\n whom: true,\n why: true,\n will: true,\n 'with': true,\n would: true,\n yet: true,\n you: true,\n your: true\n}; // Prevent false positives for inherited properties\n\nStopWordsMap.constructor = false;\nStopWordsMap.hasOwnProperty = false;\nStopWordsMap.isPrototypeOf = false;\nStopWordsMap.propertyIsEnumerable = false;\nStopWordsMap.toLocaleString = false;\nStopWordsMap.toString = false;\nStopWordsMap.valueOf = false;\n/**\n * Stop words are very common (e.g. \"a\", \"and\", \"the\") and are often not semantically meaningful in the context of a\n * search. This tokenizer removes stop words from a set of tokens before passing the remaining tokens along for\n * indexing or searching purposes.\n */\n\nvar StopWordsTokenizer = /*#__PURE__*/function () {\n /**\n * Constructor.\n *\n * @param decoratedIndexStrategy Index strategy to be run after all stop words have been removed.\n */\n function StopWordsTokenizer(decoratedTokenizer) {\n this._tokenizer = decoratedTokenizer;\n }\n /**\n * @inheritDocs\n */\n\n\n var _proto = StopWordsTokenizer.prototype;\n\n _proto.tokenize = function tokenize(text) {\n return this._tokenizer.tokenize(text).filter(function (token) {\n return !StopWordsMap[token];\n });\n };\n\n return StopWordsTokenizer;\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/**\n * Simple client-side searching within a set of documents.\n *\n *

    Documents can be searched by any number of fields. Indexing and search strategies are highly customizable.\n */\n\n\nvar Search = /*#__PURE__*/function () {\n /**\n * Array containing either a property name or a path (list of property names) to a nested value\n */\n\n /**\n * Constructor.\n * @param uidFieldName Field containing values that uniquely identify search documents; this field's values are used\n * to ensure that a search result set does not contain duplicate objects.\n */\n function Search(uidFieldName) {\n if (!uidFieldName) {\n throw Error('js-search requires a uid field name constructor parameter');\n }\n\n this._uidFieldName = uidFieldName; // Set default/recommended strategies\n\n this._indexStrategy = new PrefixIndexStrategy();\n this._searchIndex = new TfIdfSearchIndex(uidFieldName);\n this._sanitizer = new LowerCaseSanitizer();\n this._tokenizer = new SimpleTokenizer();\n this._documents = [];\n this._searchableFields = [];\n }\n /**\n * Override the default index strategy.\n * @param value Custom index strategy\n * @throws Error if documents have already been indexed by this search instance\n */\n\n\n var _proto = Search.prototype;\n /**\n * Add a searchable document to the index. Document will automatically be indexed for search.\n * @param document\n */\n\n _proto.addDocument = function addDocument(document) {\n this.addDocuments([document]);\n }\n /**\n * Adds searchable documents to the index. Documents will automatically be indexed for search.\n * @param document\n */\n ;\n\n _proto.addDocuments = function addDocuments(documents) {\n this._documents = this._documents.concat(documents);\n this.indexDocuments_(documents, this._searchableFields);\n }\n /**\n * Add a new searchable field to the index. Existing documents will automatically be indexed using this new field.\n *\n * @param field Searchable field or field path. Pass a string to index a top-level field and an array of strings for nested fields.\n */\n ;\n\n _proto.addIndex = function addIndex(field) {\n this._searchableFields.push(field);\n\n this.indexDocuments_(this._documents, [field]);\n }\n /**\n * Search all documents for ones matching the specified query text.\n * @param query\n * @returns {Array}\n */\n ;\n\n _proto.search = function search(query) {\n var tokens = this._tokenizer.tokenize(this._sanitizer.sanitize(query));\n\n return this._searchIndex.search(tokens, this._documents);\n }\n /**\n * @param documents\n * @param _searchableFields Array containing property names and paths (lists of property names) to nested values\n * @private\n */\n ;\n\n _proto.indexDocuments_ = function indexDocuments_(documents, _searchableFields) {\n this._initialized = true;\n var indexStrategy = this._indexStrategy;\n var sanitizer = this._sanitizer;\n var searchIndex = this._searchIndex;\n var tokenizer = this._tokenizer;\n var uidFieldName = this._uidFieldName;\n\n for (var di = 0, numDocuments = documents.length; di < numDocuments; di++) {\n var doc = documents[di];\n var uid;\n\n if (uidFieldName instanceof Array) {\n uid = getNestedFieldValue(doc, uidFieldName);\n } else {\n uid = doc[uidFieldName];\n }\n\n for (var sfi = 0, numSearchableFields = _searchableFields.length; sfi < numSearchableFields; sfi++) {\n var fieldValue;\n var searchableField = _searchableFields[sfi];\n\n if (searchableField instanceof Array) {\n fieldValue = getNestedFieldValue(doc, searchableField);\n } else {\n fieldValue = doc[searchableField];\n }\n\n if (fieldValue != null && typeof fieldValue !== 'string' && fieldValue.toString) {\n fieldValue = fieldValue.toString();\n }\n\n if (typeof fieldValue === 'string') {\n var fieldTokens = tokenizer.tokenize(sanitizer.sanitize(fieldValue));\n\n for (var fti = 0, numFieldValues = fieldTokens.length; fti < numFieldValues; fti++) {\n var fieldToken = fieldTokens[fti];\n var expandedTokens = indexStrategy.expandToken(fieldToken);\n\n for (var eti = 0, nummExpandedTokens = expandedTokens.length; eti < nummExpandedTokens; eti++) {\n var expandedToken = expandedTokens[eti];\n searchIndex.indexDocument(expandedToken, uid, doc);\n }\n }\n }\n }\n }\n };\n\n _createClass(Search, [{\n key: \"indexStrategy\",\n set: function set(value) {\n if (this._initialized) {\n throw Error('IIndexStrategy cannot be set after initialization');\n }\n\n this._indexStrategy = value;\n },\n get: function get() {\n return this._indexStrategy;\n }\n /**\n * Override the default text sanitizing strategy.\n * @param value Custom text sanitizing strategy\n * @throws Error if documents have already been indexed by this search instance\n */\n\n }, {\n key: \"sanitizer\",\n set: function set(value) {\n if (this._initialized) {\n throw Error('ISanitizer cannot be set after initialization');\n }\n\n this._sanitizer = value;\n },\n get: function get() {\n return this._sanitizer;\n }\n /**\n * Override the default search index strategy.\n * @param value Custom search index strategy\n * @throws Error if documents have already been indexed\n */\n\n }, {\n key: \"searchIndex\",\n set: function set(value) {\n if (this._initialized) {\n throw Error('ISearchIndex cannot be set after initialization');\n }\n\n this._searchIndex = value;\n },\n get: function get() {\n return this._searchIndex;\n }\n /**\n * Override the default text tokenizing strategy.\n * @param value Custom text tokenizing strategy\n * @throws Error if documents have already been indexed by this search instance\n */\n\n }, {\n key: \"tokenizer\",\n set: function set(value) {\n if (this._initialized) {\n throw Error('ITokenizer cannot be set after initialization');\n }\n\n this._tokenizer = value;\n },\n get: function get() {\n return this._tokenizer;\n }\n }]);\n\n return Search;\n}();\n/**\n * This utility highlights the occurrences of tokens within a string of text. It can be used to give visual indicators\n * of match criteria within searchable fields.\n *\n *

    For performance purposes this highlighter only works with full-word or prefix token indexes.\n */\n\n\nvar TokenHighlighter = /*#__PURE__*/function () {\n /**\n * Constructor.\n *\n * @param opt_indexStrategy Index strategy used by Search\n * @param opt_sanitizer Sanitizer used by Search\n * @param opt_wrapperTagName Optional wrapper tag name; defaults to 'mark' (e.g. )\n */\n function TokenHighlighter(opt_indexStrategy, opt_sanitizer, opt_wrapperTagName) {\n this._indexStrategy = opt_indexStrategy || new PrefixIndexStrategy();\n this._sanitizer = opt_sanitizer || new LowerCaseSanitizer();\n this._wrapperTagName = opt_wrapperTagName || 'mark';\n }\n /**\n * Highlights token occurrences within a string by wrapping them with a DOM element.\n *\n * @param text e.g. \"john wayne\"\n * @param tokens e.g. [\"wa\"]\n * @returns {string} e.g. \"john wayne\"\n */\n\n\n var _proto = TokenHighlighter.prototype;\n\n _proto.highlight = function highlight(text, tokens) {\n var tagsLength = this._wrapText('').length;\n\n var tokenDictionary = Object.create(null); // Create a token map for easier lookup below.\n\n for (var i = 0, numTokens = tokens.length; i < numTokens; i++) {\n var token = this._sanitizer.sanitize(tokens[i]);\n\n var expandedTokens = this._indexStrategy.expandToken(token);\n\n for (var j = 0, numExpandedTokens = expandedTokens.length; j < numExpandedTokens; j++) {\n var expandedToken = expandedTokens[j];\n\n if (!tokenDictionary[expandedToken]) {\n tokenDictionary[expandedToken] = [token];\n } else {\n tokenDictionary[expandedToken].push(token);\n }\n }\n } // Track actualCurrentWord and sanitizedCurrentWord separately in case we encounter nested tags.\n\n\n var actualCurrentWord = '';\n var sanitizedCurrentWord = '';\n var currentWordStartIndex = 0; // Note this assumes either prefix or full word matching.\n\n for (var i = 0, textLength = text.length; i < textLength; i++) {\n var character = text.charAt(i);\n\n if (character === ' ') {\n actualCurrentWord = '';\n sanitizedCurrentWord = '';\n currentWordStartIndex = i + 1;\n } else {\n actualCurrentWord += character;\n sanitizedCurrentWord += this._sanitizer.sanitize(character);\n }\n\n if (tokenDictionary[sanitizedCurrentWord] && tokenDictionary[sanitizedCurrentWord].indexOf(sanitizedCurrentWord) >= 0) {\n actualCurrentWord = this._wrapText(actualCurrentWord);\n text = text.substring(0, currentWordStartIndex) + actualCurrentWord + text.substring(i + 1);\n i += tagsLength;\n textLength += tagsLength;\n }\n }\n\n return text;\n }\n /**\n * @param text to wrap\n * @returns Text wrapped by wrapper tag (e.g. \"foo\" becomes \"foo\")\n * @private\n */\n ;\n\n _proto._wrapText = function _wrapText(text) {\n var tagName = this._wrapperTagName;\n return \"<\" + tagName + \">\" + text + \"\";\n };\n\n return TokenHighlighter;\n}();\n\nexport { AllSubstringsIndexStrategy, CaseSensitiveSanitizer, ExactWordIndexStrategy, LowerCaseSanitizer, PrefixIndexStrategy, Search, SimpleTokenizer, StemmingTokenizer, StopWordsMap, StopWordsTokenizer, TfIdfSearchIndex, TokenHighlighter, UnorderedSearchIndex };","import React, { useState } from \"react\";\nimport { Link, graphql, useStaticQuery } from \"gatsby\";\nimport * as JsSearch from \"js-search\";\n\nconst App = () => {\n const data = useStaticQuery(graphql`\n {\n allMdx {\n nodes {\n id\n frontmatter {\n title\n slug\n seoDescription\n }\n }\n }\n }\n `);\n const [searchValue, setSearchValue] = useState(\"\");\n const [searchResults, setSearchResults] = useState([]);\n const search = new JsSearch.Search(\"id\");\n search.addIndex([\"frontmatter\", \"title\"]);\n search.addIndex([\"frontmatter\", \"slug\"]);\n search.addIndex([\"frontmatter\", \"seoDescription\"]);\n search.addDocuments(data.allMdx.nodes);\n\n const changeValue = (e) => {\n setSearchValue(e.target.value);\n setSearchResults(search.search(e.target.value));\n };\n\n return (\n

    \n
    \n \n
    \n \n
    \n );\n};\n\nconst Results = ({ results, value }) => {\n const result = value && results.slice(0, 7).map((item, index) => );\n\n return result ? (\n
    \n

    {result.length !== 0 ? \"Results\" : \"No Results Found!\"}

    \n
    {result}
    \n
    \n ) : null;\n};\n\nfunction Hit({ hit }) {\n return (\n
    \n \n

    {hit.title}

    \n \n
    \n );\n}\n\nexport default App;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport PropTypes from \"prop-types\";\nimport { graphql } from \"gatsby\";\nimport Layout from \"../components/Layout\";\nimport BlogInfo from \"../components/blog/BlogInfo.js\";\nimport HeadData from \"../components/HeadData.js\";\nimport { MDXRenderer } from \"gatsby-plugin-mdx\";\nimport { MDXProvider } from \"@mdx-js/react\";\nimport * as PostComps from \"../components/blog/PostComponents.js\";\nimport Writer from \"../components/Writer.js\";\nimport LatestPosts from \"../components/LatestPosts.js\";\nimport RatingBox from \"../components/blog/RatingBox\";\nimport TopArrow from \"../svg-icons/top-arrow.js\";\nimport { Disqus } from \"gatsby-plugin-disqus\";\nimport LazyLoad from \"react-lazy-load\";\nimport useSiteMetaData from \"../components/SiteMetadata.js\";\nimport SidebarLatestPosts from \"../components/sidebar/SidebarLatestPosts\";\nimport SidebarTableofContents from \"../components/sidebar/SidebarTableofContents\";\nimport Search from \"../components/SearchForm\";\nimport { FindCategory } from \"../components/SimpleFunctions.js\";\n\nexport const BlogPostTemplate = (props) => {\n const { content, title, helmet, date, image, sidebar, faq, writer, h3enabled, rating, rcount, rvalue, enabletoc, link, tocdata, beforeBody, afterBody, cat, id } = props;\n const [btT, setBtT] = useState(\"\");\n const contentRef = useRef(null);\n const [topOffset, setTopOffset] = useState(900000000);\n const { base: img } = image;\n const { width, height } = image.childImageSharp.original;\n const disqusConfig = {\n url: link,\n };\n\n const scrollTop = () => {\n typeof window !== \"undefined\" &&\n window.scrollTo({\n top: 0,\n behavior: \"smooth\",\n });\n };\n\n const backToTop = () => {\n window.scrollY > 300 ? setBtT(\"active\") : setBtT(\"\");\n };\n\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"scroll\", backToTop);\n\n setTopOffset(contentRef.current.offsetTop + contentRef.current.offsetHeight - 1000);\n\n return () => window.removeEventListener(\"scroll\", backToTop);\n }\n }, [enabletoc, h3enabled]);\n\n useEffect(() => {\n if (typeof window !== \"undefined\") {\n const ea = document.querySelectorAll(\"a[href^='#']\");\n const r = (e) => {\n e.preventDefault();\n const o = e.target.getAttribute(\"href\").substring(1);\n if (document.getElementById(o)) {\n const e = window.scrollY + document.getElementById(o).getBoundingClientRect().top - 20;\n window.scrollTo({ top: e, behavior: \"smooth\" });\n }\n };\n for (const t of ea) {\n t.addEventListener(\"click\", r);\n }\n return () => {\n for (const t of ea) {\n t.removeEventListener(\"click\", r);\n }\n };\n }\n }, []);\n\n return (\n
    \n {helmet}\n \n
    \n
    \n
    \n
    \n \n \n \n {title}\n \n
    \n

    {title}

    \n \n \n {beforeBody}\n \n
    \n
    \n {enabletoc && }\n
    \n \n {content}\n \n
    \n
    \n \n {afterBody}\n \n
    \n {faq && (\n
    \n

    Frequently Asked Questions

    \n {faq.map((item, index) => (\n
    \n

    {item.ques}

    \n

    {item.ans}

    \n
    \n ))}\n
    \n )}\n {rating && }\n \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n

    ProTechReviewer is reader-supported. When you buy through links on our site, we may earn an affiliate commission.

    \n
    \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n );\n};\n\nBlogPostTemplate.propTypes = {\n content: PropTypes.node.isRequired,\n title: PropTypes.string,\n helmet: PropTypes.object,\n date: PropTypes.string,\n image: PropTypes.object,\n sidebar: PropTypes.object,\n faq: PropTypes.array,\n writer: PropTypes.string,\n enabletoc: PropTypes.bool,\n h3enabled: PropTypes.bool,\n cat: PropTypes.string,\n};\n\nconst BlogPost = (props) => {\n const { mdx: post } = props.data;\n const { title, date, sdate, moddate, writer, rcount, faq, products, seoTitle, seoDescription, cat, featuredimage, sidebar, h3enabled, rating, enabletoc, rvalue, beforebody, afterbody, schema } = post.frontmatter;\n const { base: img } = post.frontmatter.featuredimage;\n const { siteURL, title: siteName } = useSiteMetaData();\n const path = `${siteURL}/${post.frontmatter.slug}/`;\n const { categoryName, categoryLink } = FindCategory(cat);\n\n const articleSchema = `{\n \"@context\": \"https://schema.org\",\n \"@type\": \"NewsArticle\",\n \"mainEntityOfPage\": {\n \"@type\": \"WebPage\",\n \"@id\": \"${path}\"\n },\n \"headline\": \"${title}\",\n \"image\": [\n \"${siteURL}/img/${img}\"\n ],\n \"datePublished\": \"${sdate}\",\n \"dateModified\": \"${moddate}\",\n \"author\": {\n \"@type\": \"Person\",\n \"name\": \"${writer}\"\n },\n \"publisher\": {\n \"@type\": \"Organization\",\n \"name\": \"${siteName}\",\n \"logo\": {\n \"@type\": \"ImageObject\",\n \"url\": \"${siteURL}/img/logo-x-large.jpg\"\n }\n }\n }`;\n\n const ratingSchema = `{\n \"@context\": \"https://schema.org/\",\n \"@type\": \"Product\",\n \"name\": \"${title}\",\n \"aggregateRating\": {\n \"@type\": \"AggregateRating\",\n \"ratingValue\": \"5\",\n \"ratingCount\": \"${rcount}\",\n \"bestRating\": \"5\",\n \"worstRating\": \"1\"\n }\n }`;\n\n const faqSchema = `{\n \"@context\": \"https://schema.org\",\n \"@type\": \"FAQPage\",\n \"mainEntity\": [\n ${\n faq &&\n faq.map(\n (item) => `{\n \"@type\": \"Question\",\n \"name\": \"${item.ques}\",\n \"acceptedAnswer\": {\n \"@type\": \"Answer\",\n \"text\": \"${item.ans}\" \n }\n }`\n )\n }\n ]\n }`;\n\n const productSchema = `{\n \"@context\": \"http://schema.org\",\n \"@type\": \"ItemList\",\n \"url\": \"${path}\",\n \"name\": \"${title}\",\n \"itemListElement\": [\n ${\n products &&\n products.map(\n (item, index) => `{\n \"@type\":\"ListItem\",\n \"position\":${index + 1},\n \"url\":\"${path}#${item\n .replace(/[^\\w ]/, \"\")\n .split(\" \")\n .join(\"_\")}\",\n \"@id\":\"#${item\n .replace(/[^\\w ]/, \"\")\n .split(\" \")\n .join(\"_\")}\",\n \"name\":\"${item}\"\n }`\n )\n }\n ]\n }`;\n\n return (\n \n
    \n
    \n \n \n {/* {rating && (\n \n )} */}\n {products && }\n {faq && }\n \n }\n id={post.id}\n cat={cat}\n title={title}\n date={date}\n image={featuredimage}\n sidebar={sidebar}\n faq={faq}\n writer={writer}\n h3enabled={h3enabled}\n rvalue={rvalue ? rvalue : 5}\n rcount={rcount || 0}\n rating={rating}\n enabletoc={enabletoc}\n link={path}\n tocdata={props.pageContext.toc}\n beforeBody={beforebody}\n afterBody={afterbody}\n />\n
    \n
    \n
    \n );\n};\n\nBlogPost.propTypes = {\n data: PropTypes.shape({\n mdx: PropTypes.object,\n }),\n};\n\nexport default BlogPost;\n\nexport const pageQuery = graphql`\n query BlogPostByID($id: String!) {\n mdx(id: { eq: $id }) {\n id\n body\n frontmatter {\n date(formatString: \"MMMM DD, YYYY\")\n sdate: date(formatString: \"YYYY-MM-DDTHHmmss\")\n moddate(formatString: \"YYYY-MM-DDTHHmmss\")\n title\n beforebody\n afterbody\n seoTitle\n seoDescription\n cat\n slug\n schema\n sidebar {\n stitle\n atext\n alink\n stoc {\n level\n name\n }\n image {\n name\n base\n childImageSharp {\n original {\n height\n width\n }\n }\n }\n }\n writer\n rating\n rcount\n rvalue\n enabletoc\n h3enabled\n products\n faq {\n ans\n ques\n }\n featuredimage {\n base\n name\n childImageSharp {\n original {\n height\n width\n }\n }\n }\n }\n }\n }\n`;\n"],"sourceRoot":""}