g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"ddc014f8\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"pav:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/PAV/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkpav\"] = self[\"webpackChunkpav\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nexport default function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\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 return obj;\n}","export default function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export function PAVnode(props) {\r\n let classID = \"node\";\r\n let subID = \"none\";\r\n\r\n if (props.node.isStart) {\r\n classID += \" start\";\r\n }\r\n\r\n if (props.node.isEnd) {\r\n classID += \" end\";\r\n }\r\n\r\n if (props.node.isPath) {\r\n classID += \" path\";\r\n }\r\n\r\n if (props.node.isMarked) {\r\n subID = \"filled--node\";\r\n }\r\n\r\n if (props.node.isWall && !props.node.isStart && !props.node.isEnd) {\r\n classID += \" wall\";\r\n }\r\n\r\n return (\r\n props.onMouseDown(props.node.row, props.node.column)}\r\n onMouseEnter={() => props.onMouseEnter(props.node.row, props.node.column)}\r\n onMouseUp={() => props.onMouseUp()}\r\n >\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport function createNode(row, col) {\r\n return {\r\n row: row,\r\n column: col,\r\n isStart: row === 8 && col === 10,\r\n isEnd: row === 8 && col === 40,\r\n distance: Infinity,\r\n isWall: false,\r\n isVisited: false,\r\n isMarked: false,\r\n isPath: false,\r\n f_cost: 0,\r\n g_cost: 0,\r\n total_cost: 0,\r\n parent: null,\r\n }\r\n}","import {PAVnode} from \"./PAVnode.js\";\r\n\r\nexport default function PAVcanvas(props) {\r\n return (\r\n \r\n {\r\n props.nodes.map((subNodeArray, rowId) => {\r\n return (\r\n
\r\n {subNodeArray.map((node, nodeId) => {\r\n return
props.handleMouseDown(node.row, node.column)}\r\n onMouseEnter={() => props.handleMouseHover(node.row, node.column)}\r\n onMouseUp={() => props.handleMouseUp()}\r\n />;\r\n })}\r\n \r\n );\r\n })\r\n }\r\n
\r\n );\r\n};","export default function NavBar(props) {\r\n let speed;\r\n if (props.currentAnimationSpeed === 25) {\r\n speed = \"Fast\";\r\n }\r\n else if (props.currentAnimationSpeed === 50) {\r\n speed = \"Average\";\r\n }\r\n else if (props.currentAnimationSpeed === 100) {\r\n speed = \"Slow\";\r\n }\r\n\r\n return (\r\n \r\n
PAV\r\n
\r\n
Algorithms
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
Wall Patterns
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Speed: {speed}
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n};","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nexport default function _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n var F = function F() {};\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}","function getAllNodes(nodesList) {\r\n const nodes = [];\r\n for (const row of nodesList) {\r\n for (const node of row) {\r\n nodes.push(node);\r\n };\r\n };\r\n return nodes;\r\n};\r\n\r\nfunction sortNodesByDistance(unvisitedNodes) {\r\n unvisitedNodes.sort((firstNode, secondNode) => (firstNode.distance - secondNode.distance));\r\n};\r\n\r\nfunction getUnvisitedNeighbors(node, list) {\r\n const res = [];\r\n const {row, column} = node;\r\n\r\n if (row > 0) {\r\n res.push(list[row - 1][column]);\r\n };\r\n\r\n if (row < list.length - 1) {\r\n res.push(list[row + 1][column]);\r\n };\r\n\r\n if (column > 0) {\r\n res.push(list[row][column - 1]);\r\n };\r\n\r\n if (column < list[0].length - 1) {\r\n res.push(list[row][column + 1]);\r\n };\r\n \r\n return res.filter((node) => !node.isVisited);\r\n};\r\n\r\nfunction updateNeighbors(node, list) {\r\n const unvisitedNeighbors = getUnvisitedNeighbors(node, list);\r\n for (const neighbor of unvisitedNeighbors) {\r\n neighbor.distance = node.distance + 1;\r\n neighbor.parent = node;\r\n }\r\n};\r\n\r\nexport default function dijkstraAlgorithm(nodesList, startNode, endNode) {\r\n startNode.distance = 0;\r\n const path = [];\r\n const unvisitedNodes = getAllNodes(nodesList);\r\n\r\n while (unvisitedNodes.length > 0) {\r\n sortNodesByDistance(unvisitedNodes);\r\n let closestNode = unvisitedNodes.shift();\r\n\r\n if (closestNode.isWall === true) {\r\n continue;\r\n };\r\n\r\n if (closestNode.distance === Infinity) {\r\n return path;\r\n };\r\n\r\n closestNode.isVisited = true;\r\n path.push(closestNode);\r\n\r\n if (closestNode === endNode) {\r\n return path;\r\n };\r\n updateNeighbors(closestNode, nodesList);\r\n };\r\n};","// This function computes grid's heuristic\r\n// It only allows movement in 4 directions (up, down, left, rigth)\r\nfunction manhattanDistance(currentNode, goalNode) {\r\n return Math.abs(currentNode.row - goalNode.row) + Math.abs(currentNode.column - goalNode.column);\r\n}\r\n\r\nfunction getUnvisitedNeighbors(node, list) {\r\n const res = [];\r\n const {row, column} = node;\r\n\r\n if (row > 0) {\r\n res.push(list[row - 1][column]);\r\n };\r\n\r\n if (row < list.length - 1) {\r\n res.push(list[row + 1][column]);\r\n };\r\n\r\n if (column > 0) {\r\n res.push(list[row][column - 1]);\r\n };\r\n\r\n if (column < list[0].length - 1) {\r\n res.push(list[row][column + 1]);\r\n };\r\n \r\n return res.filter((node) => !node.isWall);\r\n}\r\n\r\nfunction isInOpenSet(node, openSet) {\r\n for (const element of openSet) {\r\n if ((node.row == element.row) && (node.column == element.column) && (node.total_cost >= element.total_cost)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isInClosedSet(node, closedSet) {\r\n for (const element of closedSet) {\r\n if ((node.row == element.row) && (node.column == element.column) && (node.total_cost >= element.total_cost)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport default function astarAlgorithm(nodes, startNode, endNode) {\r\n startNode.f_cost = 0;\r\n startNode.g_cost = 0;\r\n startNode.total_cost = 0;\r\n const openSet = [startNode];\r\n const closedSet = [];\r\n const path = [];\r\n\r\n while (openSet.length > 0) {\r\n //console.log(openSet);\r\n openSet.sort((firstNode, secondNode) => (firstNode.total_cost - secondNode.total_cost));\r\n let current = openSet.shift();\r\n let childNodes = getUnvisitedNeighbors(current, nodes);\r\n\r\n for (const child of childNodes) {\r\n if (child == endNode) {\r\n endNode.parent = current;\r\n closedSet.push(current);\r\n closedSet.push(child);\r\n return closedSet;\r\n }\r\n else {\r\n //child.isMarked = true;\r\n child.f_cost = current.f_cost + 0.25;\r\n child.g_cost = manhattanDistance(child, endNode);\r\n child.total_cost = child.f_cost + child.g_cost;\r\n\r\n if (isInOpenSet(child, openSet)) {\r\n continue;\r\n }\r\n\r\n if (isInClosedSet(child, closedSet)) {\r\n continue;\r\n }\r\n else {\r\n child.parent = current;\r\n openSet.push(child);\r\n path.push(child);\r\n }\r\n }\r\n }\r\n\r\n closedSet.push(current);\r\n }\r\n}","function getUnvisitedNeighbors(node, list) {\r\n const res = [];\r\n const {row, column} = node;\r\n\r\n if (row > 0) {\r\n res.push(list[row - 1][column]);\r\n };\r\n\r\n if (row < list.length - 1) {\r\n res.push(list[row + 1][column]);\r\n };\r\n\r\n if (column > 0) {\r\n res.push(list[row][column - 1]);\r\n };\r\n\r\n if (column < list[0].length - 1) {\r\n res.push(list[row][column + 1]);\r\n };\r\n \r\n return res.filter((node) => (!node.isVisited && !node.isWall));\r\n}\r\n\r\nexport default function bfsAlgorithm(nodes, startNode, endNode) {\r\n const queue = [startNode];\r\n const res = [];\r\n\r\n while (queue.length > 0) {\r\n const current = queue[0];\r\n current.isVisited = true;\r\n\r\n if (current === endNode) {\r\n return res;\r\n }\r\n\r\n const children = getUnvisitedNeighbors(current, nodes);\r\n for (const child of children) {\r\n child.isVisited = true;\r\n child.parent = current;\r\n queue.push(child);\r\n }\r\n\r\n res.push(current);\r\n queue.shift();\r\n }\r\n}","function getUnvisitedNeighbors(node, list) {\r\n const res = [];\r\n const {row, column} = node;\r\n\r\n if (row > 0) {\r\n res.push(list[row - 1][column]);\r\n };\r\n\r\n if (column < list[0].length - 1) {\r\n res.push(list[row][column + 1]);\r\n };\r\n\r\n if (row < list.length - 1) {\r\n res.push(list[row + 1][column]);\r\n };\r\n\r\n if (column > 0) {\r\n res.push(list[row][column - 1]);\r\n };\r\n \r\n return res.filter((node) => (!node.isVisited && !node.isWall));\r\n}\r\n\r\nexport default function dfsAlgorithm(nodes, startNode, endNode) {\r\n startNode.isVisited = true;\r\n let unvisitedStack = [startNode];\r\n const visited = [];\r\n\r\n while (unvisitedStack.length > 0) {\r\n const current = unvisitedStack.shift();\r\n current.isVisited = true;\r\n\r\n if (current === endNode) {\r\n return visited;\r\n }\r\n\r\n const children = getUnvisitedNeighbors(current, nodes);\r\n for (const child of children) {\r\n child.parent = current;\r\n }\r\n\r\n unvisitedStack = children.concat(unvisitedStack);\r\n visited.push(current);\r\n }\r\n}","export default function Description(props) {\r\n return (\r\n \r\n - \r\n \r\n
Start Node
\r\n \r\n - \r\n \r\n
Target Node
\r\n \r\n - \r\n \r\n
Unvisited Node
\r\n \r\n - \r\n \r\n
Visited Node
\r\n \r\n - \r\n \r\n
Shortest-path Node
\r\n \r\n - \r\n \r\n
Wall Node
\r\n \r\n
\r\n );\r\n}","import React from \"react\";\r\n\r\nimport {createNode, PAVnode} from \"./components/PAVnode.js\";\r\nimport PAVcanvas from \"./components/PAVcanvas.js\";\r\nimport NavBar from \"./components/NavBar.js\";\r\n\r\nimport dijkstraAlgorithm from \"./algorithms/dijkstra.js\";\r\nimport astarAlgorithm from \"./algorithms/astar.js\";\r\nimport bfsAlgorithm from \"./algorithms/bfs.js\";\r\nimport dfsAlgorithm from \"./algorithms/dfs.js\";\r\n\r\nimport createRandomMaze from \"./mazes/random.js\";\r\nimport createRecursiveMaze from \"./mazes/recursive.js\";\r\nimport Description from \"./components/Description.js\";\r\n\r\nexport default function App() {\r\n const rows = (window.innerHeight / 25) / (1.5);\r\n const columns = ((window.innerWidth - 150) / 25);\r\n\r\n let [featured_algorithm, setFeaturedAlgorithm] = React.useState(\"Dijkstra\");\r\n let [animationSpeed, setAnimationSpeed] = React.useState(25); // in ms (fast by default)\r\n\r\n const [nodes, setNodes] = React.useState(createNodeList(rows, columns));\r\n const [mousePressed, setMouseState] = React.useState(false);\r\n\r\n function toggleWall(grid, row, col) {\r\n const newGrid = grid.slice();\r\n const node = newGrid[row][col];\r\n if (!node.isStart && !nodes.isEnd) {\r\n const newNode = {\r\n ...node,\r\n isWall: !node.isWall,\r\n }\r\n newGrid[row][col] = newNode;\r\n }\r\n return newGrid;\r\n }\r\n\r\n function handleMouseDown(row, col) {\r\n const newGrid = toggleWall(nodes, row, col);\r\n setMouseState(true);\r\n setNodes(newGrid);\r\n }\r\n\r\n function handleMouseHover(row, col) {\r\n if (mousePressed) {\r\n const newGrid = toggleWall(nodes, row, col);\r\n setNodes(newGrid);\r\n };\r\n }\r\n\r\n function handleMouseUp() {\r\n setMouseState(false);\r\n }\r\n\r\n function createNodeList(rows, columns) {\r\n let nodes = [];\r\n for (let i=0; i {\r\n const path_node = path[i];\r\n const newList = nodes.slice();\r\n const newNode = {\r\n ...path_node,\r\n isPath: true,\r\n }\r\n newList[path_node.row][path_node.column] = newNode;\r\n setNodes(newList);\r\n }, (animationSpeed * i));\r\n }\r\n }\r\n\r\n function animateAlgorithm(path, nodes, endNode, setNodes) {\r\n try {\r\n for (let i=0; i<=path.length; i++) {\r\n if (i === path.length) {\r\n setTimeout(() => {\r\n animatePath(createPath(endNode), nodes, setNodes);\r\n }, animationSpeed * i);\r\n }\r\n else {\r\n setTimeout(() => {\r\n const node = path[i];\r\n const newList = nodes.slice();\r\n const newNode = {\r\n ...node,\r\n isMarked: true,\r\n };\r\n newList[node.row][node.column] = newNode;\r\n setNodes(newList);\r\n }, (animationSpeed * i));\r\n }\r\n }\r\n }\r\n catch (Exception) {\r\n console.log(\"Error \" + Exception);\r\n if (Exception instanceof TypeError) {\r\n animateMaze(\"random\");\r\n visualizeAstar(nodes, setNodes);\r\n }\r\n }\r\n }\r\n\r\n function animateMaze(value) {\r\n const startNode = nodes[8][10];\r\n const endNode = nodes[8][40];\r\n let newNodes;\r\n if (value === \"random\") {\r\n newNodes = createRandomMaze(nodes, startNode, endNode);\r\n }\r\n else if (value === \"recursive\") {\r\n newNodes = createRecursiveMaze(nodes, startNode, endNode);\r\n }\r\n setNodes(newNodes);\r\n }\r\n \r\n function visualizeDijkstra(nodes, setNodes) {\r\n const startNode = nodes[8][10];\r\n const endNode = nodes[8][40];\r\n const path = dijkstraAlgorithm(nodes, startNode, endNode);\r\n animateAlgorithm(path, nodes, endNode, setNodes);\r\n };\r\n\r\n function visualizeAstar(nodes, setNodes) {\r\n const startNode = nodes[8][10];\r\n const endNode = nodes[8][40];\r\n const path = astarAlgorithm(nodes, startNode, endNode);\r\n animateAlgorithm(path, nodes, endNode, setNodes);\r\n }\r\n\r\n function visualizeBFS(nodes, setNodes) {\r\n const startNode = nodes[8][10];\r\n const endNode = nodes[8][40];\r\n const path = bfsAlgorithm(nodes, startNode, endNode);\r\n animateAlgorithm(path, nodes, endNode, setNodes);\r\n }\r\n\r\n function visualizeDFS(nodes, setNodes) {\r\n const startNode = nodes[8][10];\r\n const endNode = nodes[8][40];\r\n const path = dfsAlgorithm(nodes, startNode, endNode);\r\n animateAlgorithm(path, nodes, endNode, setNodes);\r\n }\r\n\r\n // Algorithms selection function\r\n function selectAlgorithm(value) {\r\n setFeaturedAlgorithm(value);\r\n console.log(featured_algorithm);\r\n }\r\n\r\n function selectAnimationSpeed(value) {\r\n if (value === \"fast\") {\r\n setAnimationSpeed(25);\r\n }\r\n else if (value === \"average\") {\r\n setAnimationSpeed(50);\r\n }\r\n else if (value === \"slow\") {\r\n setAnimationSpeed(100);\r\n }\r\n else {\r\n console.log(\"Error: unknown animation speed parameter\");\r\n }\r\n }\r\n\r\n function visualizeSelectedAlgorithm() {\r\n if (featured_algorithm === \"Dijkstra\") {\r\n visualizeDijkstra(nodes, setNodes);\r\n }\r\n else if (featured_algorithm === \"A*\") {\r\n visualizeAstar(nodes, setNodes);\r\n }\r\n else if (featured_algorithm === \"BFS\") {\r\n visualizeBFS(nodes, setNodes);\r\n }\r\n else if (featured_algorithm === \"DFS\") {\r\n visualizeDFS(nodes, setNodes);\r\n }\r\n }\r\n\r\n // Function that clears walls and marked path nodes from the grid\r\n function clearGrid() {\r\n const newNodesList = createNodeList(rows, columns);\r\n setNodes(newNodesList);\r\n };\r\n\r\n // Function that clears marked path nodes from the grid but keeps wall nodes marked\r\n function clearPath() {\r\n const newNodesList = createNodeList(rows, columns);\r\n for (let i=0; i\r\n visualizeSelectedAlgorithm()}\r\n clearGrid={clearGrid}\r\n clearPath={clearPath}\r\n />\r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// visualizeDijkstra(nodes, setNodes)","export default function createRandomMaze(nodes, startNode, endNode) {\r\n const newNodes = nodes.slice();\r\n for (let i=0; i 17) {\r\n newNodes[newRow][j].isWall = false;\r\n flag = true;\r\n }\r\n }\r\n recursiveMaze([rows[0], newRow - 1], columns, startNode, endNode, \"vertical\");\r\n recursiveMaze([newRow + 1, rows[1]], columns, startNode, endNode, Math.floor(Math.random() * 10) > 3 ? \"vertical\" : \"horizontal\");\r\n }\r\n else {\r\n const newColumn = Math.floor((columns[1] + columns[0]) / 2);\r\n let flag = false;\r\n for (let i=rows[0]; i 17) {\r\n newNodes[i][newColumn].isWall = false;\r\n flag = true;\r\n }\r\n }\r\n recursiveMaze(rows, [columns[0], newColumn - 1], startNode, endNode, \"verical\");\r\n recursiveMaze(rows, [newColumn + 1, columns[1]], startNode, endNode, \"horizontal\");\r\n }\r\n }\r\n }\r\n\r\n let newNodes = nodes.slice();\r\n recursiveMaze([0, newNodes.length], [0, newNodes[0].length], startNode, endNode, \"horizontal\");\r\n return newNodes;\r\n}","import React from \"react\";\r\nimport ReactDOM from \"react-dom/client\";\r\nimport reportWebVitals from \"./reportWebVitals\";\r\nimport \"./App.css\";\r\n\r\nimport App from \"./App.js\";\r\n\r\nconst root = ReactDOM.createRoot(document.getElementById(\"root\"));\r\nroot.render();\r\n\r\nreportWebVitals();"],"names":["aa","require","ca","p","a","b","c","arguments","length","encodeURIComponent","da","Set","ea","fa","ha","add","ia","window","document","createElement","ja","Object","prototype","hasOwnProperty","ka","la","ma","v","d","e","f","g","this","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","type","sanitizeURL","removeEmptyString","z","split","forEach","toLowerCase","ra","sa","toUpperCase","ta","slice","pa","isNaN","qa","call","test","oa","removeAttribute","setAttribute","setAttributeNS","replace","xlinkHref","ua","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","va","Symbol","for","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","iterator","Ka","La","A","assign","Ma","Error","stack","trim","match","Na","Oa","prepareStackTrace","defineProperty","set","Reflect","construct","l","h","k","displayName","includes","name","Pa","tag","render","Qa","$$typeof","_context","_payload","_init","Ra","Sa","Ta","nodeName","Va","_valueTracker","getOwnPropertyDescriptor","constructor","get","configurable","enumerable","getValue","setValue","stopTracking","Ua","Wa","checked","value","Xa","activeElement","body","Ya","defaultChecked","defaultValue","_wrapperState","initialChecked","Za","initialValue","controlled","ab","bb","cb","db","ownerDocument","eb","Array","isArray","fb","options","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","children","hb","ib","jb","textContent","kb","lb","mb","nb","namespaceURI","innerHTML","valueOf","toString","firstChild","removeChild","appendChild","MSApp","execUnsafeLocalFunction","ob","lastChild","nodeType","nodeValue","pb","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","qb","rb","sb","style","indexOf","setProperty","keys","charAt","substring","tb","menuitem","area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","ub","vb","is","wb","xb","target","srcElement","correspondingUseElement","parentNode","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","push","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","addEventListener","removeEventListener","Nb","apply","m","onError","Ob","Pb","Qb","Rb","Sb","Tb","Vb","alternate","return","flags","Wb","memoizedState","dehydrated","Xb","Zb","child","sibling","current","Yb","$b","ac","unstable_scheduleCallback","bc","unstable_cancelCallback","cc","unstable_shouldYield","dc","unstable_requestPaint","B","unstable_now","ec","unstable_getCurrentPriorityLevel","fc","unstable_ImmediatePriority","gc","unstable_UserBlockingPriority","hc","unstable_NormalPriority","ic","unstable_LowPriority","jc","unstable_IdlePriority","kc","lc","oc","Math","clz32","pc","qc","log","LN2","rc","sc","tc","uc","pendingLanes","suspendedLanes","pingedLanes","entangledLanes","entanglements","vc","xc","yc","zc","Ac","eventTimes","Cc","C","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Map","Pc","Qc","Rc","Sc","delete","pointerId","Tc","nativeEvent","blockedOn","domEventName","eventSystemFlags","targetContainers","Vc","Wc","priority","isDehydrated","containerInfo","Xc","Yc","dispatchEvent","shift","Zc","$c","ad","bd","cd","ReactCurrentBatchConfig","dd","ed","transition","fd","gd","hd","id","Uc","stopPropagation","jd","kd","ld","md","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","cancelBubble","persist","isPersistent","wd","xd","yd","sd","eventPhase","bubbles","cancelable","timeStamp","Date","now","isTrusted","td","ud","view","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","data","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","key","String","fromCharCode","code","location","repeat","locale","which","Rd","Td","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","touches","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","ee","fe","ge","he","ie","le","color","date","datetime","email","month","number","password","range","search","tel","text","time","url","week","me","ne","oe","event","listeners","pe","qe","re","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","node","offset","nextSibling","Le","contains","compareDocumentPosition","Me","HTMLIFrameElement","contentWindow","href","Ne","contentEditable","Oe","focusedElem","selectionRange","documentElement","start","end","selectionStart","selectionEnd","min","defaultView","getSelection","extend","rangeCount","anchorNode","anchorOffset","focusNode","focusOffset","createRange","setStart","removeAllRanges","addRange","setEnd","element","left","scrollLeft","top","scrollTop","focus","Pe","Qe","Re","Se","Te","Ue","Ve","We","animationend","animationiteration","animationstart","transitionend","Xe","Ye","Ze","animation","$e","af","bf","cf","df","ef","ff","gf","hf","lf","mf","concat","nf","Ub","instance","listener","D","of","has","pf","qf","rf","random","sf","bind","capture","passive","n","t","J","x","u","w","F","tf","uf","parentWindow","vf","wf","na","xa","$a","ba","je","char","ke","unshift","xf","yf","zf","Af","Bf","Cf","Df","Ef","__html","Ff","setTimeout","Gf","clearTimeout","Hf","Promise","Jf","queueMicrotask","resolve","then","catch","If","Kf","Lf","Mf","previousSibling","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","E","G","Vf","H","Wf","Xf","Yf","contextTypes","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Zf","childContextTypes","$f","ag","bg","getChildContext","cg","__reactInternalMemoizedMergedChildContext","dg","eg","fg","gg","hg","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","I","zg","Ag","Bg","elementType","deletions","Cg","pendingProps","overflow","treeContext","retryLane","Dg","mode","Eg","Fg","Gg","memoizedProps","Hg","Ig","Jg","Kg","Lg","defaultProps","Mg","Ng","Og","Pg","Qg","Rg","_currentValue","Sg","childLanes","Tg","dependencies","firstContext","lanes","Ug","Vg","context","memoizedValue","next","Wg","Xg","Yg","interleaved","Zg","$g","ah","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","pending","effects","bh","ch","eventTime","lane","payload","callback","dh","K","eh","fh","gh","q","r","y","hh","ih","jh","Component","refs","kh","nh","isMounted","_reactInternals","enqueueSetState","L","lh","mh","enqueueReplaceState","enqueueForceUpdate","oh","shouldComponentUpdate","isPureReactComponent","ph","contextType","state","updater","qh","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","rh","props","getDerivedStateFromProps","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","sh","ref","_owner","_stringRef","th","join","uh","vh","index","wh","xh","yh","implementation","zh","Ah","done","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","tagName","Jh","Kh","Lh","M","Mh","revealOrder","Nh","Oh","_workInProgressVersionPrimary","Ph","ReactCurrentDispatcher","Qh","Rh","N","O","P","Sh","Th","Uh","Vh","Q","Wh","Xh","Yh","Zh","$h","ai","bi","ci","baseQueue","queue","di","ei","fi","lastRenderedReducer","action","hasEagerState","eagerState","lastRenderedState","dispatch","gi","hi","ii","ji","ki","getSnapshot","li","mi","R","ni","lastEffect","stores","oi","pi","qi","ri","create","destroy","deps","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","readContext","useCallback","useContext","useEffect","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useReducer","useRef","useState","useDebugValue","useDeferredValue","useTransition","useMutableSource","useSyncExternalStore","useId","unstable_isNewReconciler","identifierPrefix","Ki","message","digest","Li","Mi","console","error","Ni","WeakMap","Oi","Pi","Qi","Ri","getDerivedStateFromError","componentDidCatch","Si","componentStack","Ti","pingCache","Ui","Vi","Wi","Xi","ReactCurrentOwner","Yi","Zi","$i","aj","bj","compare","cj","dj","ej","baseLanes","cachePool","transitions","fj","gj","hj","ij","jj","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","kj","lj","pendingContext","mj","Aj","Bj","Cj","Dj","nj","oj","pj","fallback","qj","rj","tj","dataset","dgst","uj","vj","_reactRetry","sj","subtreeFlags","wj","xj","isBackwards","rendering","renderingStartTime","last","tail","tailMode","yj","Ej","S","Fj","Gj","wasMultiple","multiple","suppressHydrationWarning","onClick","onclick","size","createElementNS","autoFocus","createTextNode","T","Hj","Ij","Jj","Kj","U","Lj","WeakSet","V","Mj","W","Nj","Oj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","insertBefore","_reactRootContainer","Xj","X","Yj","Zj","ak","onCommitFiberUnmount","componentWillUnmount","bk","ck","dk","ek","fk","isHidden","gk","hk","display","ik","jk","kk","lk","__reactInternalSnapshotBeforeUpdate","src","Wk","mk","ceil","nk","ok","pk","Y","Z","qk","rk","sk","tk","uk","Infinity","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","callbackNode","expirationTimes","expiredLanes","wc","callbackPriority","ig","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","finishedWork","finishedLanes","Qk","timeoutHandle","Rk","Sk","Tk","Uk","Vk","mutableReadLanes","Bc","Pj","onCommitFiberRoot","mc","onRecoverableError","Xk","onPostCommitFiberRoot","Yk","Zk","al","isReactComponent","pendingChildren","bl","mutableSourceEagerHydrationData","cl","cache","pendingSuspenseBoundaries","el","fl","gl","hl","il","jl","zj","$k","ll","reportError","ml","_internalRoot","nl","ol","pl","ql","sl","rl","unmount","unstable_scheduleHydration","splice","querySelectorAll","JSON","stringify","form","tl","usingClientEntryPoint","Events","ul","findFiberByHostInstance","bundleType","version","rendererPackageName","vl","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setErrorHandler","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","wl","isDisabled","supportsFiber","inject","exports","createPortal","dl","createRoot","unstable_strictMode","findDOMNode","flushSync","hydrate","hydrateRoot","hydratedSources","_getVersion","_source","unmountComponentAtNode","unstable_batchedUpdates","unstable_renderSubtreeIntoContainer","checkDCE","err","module","__self","__source","jsx","jsxs","setState","forceUpdate","escape","_status","_result","default","Children","map","count","toArray","only","Fragment","Profiler","PureComponent","StrictMode","Suspense","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","_defaultValue","_globalName","createFactory","createRef","forwardRef","isValidElement","lazy","memo","startTransition","unstable_act","pop","sortIndex","performance","setImmediate","startTime","expirationTime","priorityLevel","navigator","scheduling","isInputPending","MessageChannel","port2","port1","onmessage","postMessage","unstable_Profiling","unstable_continueExecution","unstable_forceFrameRate","floor","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_runWithPriority","delay","unstable_wrapCallback","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","definition","o","chunkId","all","reduce","promises","miniCssF","obj","prop","inProgress","dataWebpackPrefix","script","needAttach","scripts","getElementsByTagName","i","s","getAttribute","charset","timeout","nc","onScriptComplete","prev","onerror","onload","doneFns","fn","head","toStringTag","installedChunks","j","installedChunkData","promise","reject","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","self","onPerfEntry","Function","_ref","getCLS","getFID","getFCP","getLCP","getTTFB","_typeof","_toPropertyKey","arg","hint","prim","toPrimitive","res","TypeError","Number","ownKeys","getOwnPropertySymbols","filter","_objectSpread2","writable","getOwnPropertyDescriptors","defineProperties","_arrayLikeToArray","arr","len","arr2","_unsupportedIterableToArray","minLen","from","_slicedToArray","PAVnode","classID","subID","isStart","isEnd","isPath","isMarked","isWall","_jsx","className","onMouseDown","row","column","onMouseEnter","onMouseUp","PAVcanvas","nodes","subNodeArray","rowId","nodeId","handleMouseDown","handleMouseHover","handleMouseUp","NavBar","speed","currentAnimationSpeed","_jsxs","selectAlgorithm","selectMazeType","visualizeSelectedAlgorithm","currentAlgorithm","clearGrid","clearPath","selectAnimationSpeed","_createForOfIteratorHelper","allowArrayLike","it","_e","normalCompletion","didErr","step","_e2","sortNodesByDistance","unvisitedNodes","sort","firstNode","secondNode","distance","updateNeighbors","list","_step3","unvisitedNeighbors","isVisited","getUnvisitedNeighbors","_iterator3","neighbor","parent","dijkstraAlgorithm","nodesList","startNode","endNode","path","_step","_iterator","_step2","_iterator2","getAllNodes","closestNode","isInOpenSet","openSet","total_cost","isInClosedSet","closedSet","Description","App","rows","innerHeight","innerWidth","_React$useState2","React","featured_algorithm","setFeaturedAlgorithm","_React$useState4","animationSpeed","setAnimationSpeed","_React$useState6","createNodeList","setNodes","_React$useState8","mousePressed","setMouseState","toggleWall","grid","newGrid","newNode","_objectSpread","subArray","f_cost","g_cost","animateAlgorithm","_loop2","_loop","path_node","newList","animatePath","reverse","createPath","Exception","animateMaze","visualizeAstar","newNodes","createRandomMaze","recursiveMaze","orientation","newRow","flag","newColumn","createRecursiveMaze","currentNode","goalNode","abs","astarAlgorithm","visualizeBFS","bfsAlgorithm","visualizeDFS","unvisitedStack","visited","dfsAlgorithm","visualizeDijkstra","newNodesList","ReactDOM","getElementById","reportWebVitals"],"sourceRoot":""}
\ No newline at end of file