(self["webpackChunkelementor"] = self["webpackChunkelementor"] || []).push([["vendors-node_modules_react-query_devtools_index_js"],{ /***/ "../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js": /*!**********************************************************************************!*\ !*** ../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***! \**********************************************************************************/ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ _objectWithoutPropertiesLoose) /* harmony export */ }); function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; } /***/ }), /***/ "../node_modules/match-sorter/dist/match-sorter.esm.js": /*!*************************************************************!*\ !*** ../node_modules/match-sorter/dist/match-sorter.esm.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ defaultBaseSortFn: () => (/* binding */ defaultBaseSortFn), /* harmony export */ matchSorter: () => (/* binding */ matchSorter), /* harmony export */ rankings: () => (/* binding */ rankings) /* harmony export */ }); /* harmony import */ var remove_accents__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! remove-accents */ "../node_modules/match-sorter/node_modules/remove-accents/index.js"); /* harmony import */ var remove_accents__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(remove_accents__WEBPACK_IMPORTED_MODULE_0__); /** * @name match-sorter * @license MIT license. * @copyright (c) 2020 Kent C. Dodds * @author Kent C. Dodds (https://kentcdodds.com) */ const rankings = { CASE_SENSITIVE_EQUAL: 7, EQUAL: 6, STARTS_WITH: 5, WORD_STARTS_WITH: 4, CONTAINS: 3, ACRONYM: 2, MATCHES: 1, NO_MATCH: 0 }; const defaultBaseSortFn = (a, b) => String(a.rankedValue).localeCompare(String(b.rankedValue)); /** * Takes an array of items and a value and returns a new array with the items that match the given value * @param {Array} items - the items to sort * @param {String} value - the value to use for ranking * @param {Object} options - Some options to configure the sorter * @return {Array} - the new sorted array */ function matchSorter(items, value, options) { if (options === void 0) { options = {}; } const { keys, threshold = rankings.MATCHES, baseSort = defaultBaseSortFn, sorter = matchedItems => matchedItems.sort((a, b) => sortRankedValues(a, b, baseSort)) } = options; const matchedItems = items.reduce(reduceItemsToRanked, []); return sorter(matchedItems).map(_ref => { let { item } = _ref; return item; }); function reduceItemsToRanked(matches, item, index) { const rankingInfo = getHighestRanking(item, keys, value, options); const { rank, keyThreshold = threshold } = rankingInfo; if (rank >= keyThreshold) { matches.push({ ...rankingInfo, item, index }); } return matches; } } matchSorter.rankings = rankings; /** * Gets the highest ranking for value for the given item based on its values for the given keys * @param {*} item - the item to rank * @param {Array} keys - the keys to get values from the item for the ranking * @param {String} value - the value to rank against * @param {Object} options - options to control the ranking * @return {{rank: Number, keyIndex: Number, keyThreshold: Number}} - the highest ranking */ function getHighestRanking(item, keys, value, options) { if (!keys) { // if keys is not specified, then we assume the item given is ready to be matched const stringItem = item; return { // ends up being duplicate of 'item' in matches but consistent rankedValue: stringItem, rank: getMatchRanking(stringItem, value, options), keyIndex: -1, keyThreshold: options.threshold }; } const valuesToRank = getAllValuesToRank(item, keys); return valuesToRank.reduce((_ref2, _ref3, i) => { let { rank, rankedValue, keyIndex, keyThreshold } = _ref2; let { itemValue, attributes } = _ref3; let newRank = getMatchRanking(itemValue, value, options); let newRankedValue = rankedValue; const { minRanking, maxRanking, threshold } = attributes; if (newRank < minRanking && newRank >= rankings.MATCHES) { newRank = minRanking; } else if (newRank > maxRanking) { newRank = maxRanking; } if (newRank > rank) { rank = newRank; keyIndex = i; keyThreshold = threshold; newRankedValue = itemValue; } return { rankedValue: newRankedValue, rank, keyIndex, keyThreshold }; }, { rankedValue: item, rank: rankings.NO_MATCH, keyIndex: -1, keyThreshold: options.threshold }); } /** * Gives a rankings score based on how well the two strings match. * @param {String} testString - the string to test against * @param {String} stringToRank - the string to rank * @param {Object} options - options for the match (like keepDiacritics for comparison) * @returns {Number} the ranking for how well stringToRank matches testString */ function getMatchRanking(testString, stringToRank, options) { testString = prepareValueForComparison(testString, options); stringToRank = prepareValueForComparison(stringToRank, options); // too long if (stringToRank.length > testString.length) { return rankings.NO_MATCH; } // case sensitive equals if (testString === stringToRank) { return rankings.CASE_SENSITIVE_EQUAL; } // Lower casing before further comparison testString = testString.toLowerCase(); stringToRank = stringToRank.toLowerCase(); // case insensitive equals if (testString === stringToRank) { return rankings.EQUAL; } // starts with if (testString.startsWith(stringToRank)) { return rankings.STARTS_WITH; } // word starts with if (testString.includes(` ${stringToRank}`)) { return rankings.WORD_STARTS_WITH; } // contains if (testString.includes(stringToRank)) { return rankings.CONTAINS; } else if (stringToRank.length === 1) { // If the only character in the given stringToRank // isn't even contained in the testString, then // it's definitely not a match. return rankings.NO_MATCH; } // acronym if (getAcronym(testString).includes(stringToRank)) { return rankings.ACRONYM; } // will return a number between rankings.MATCHES and // rankings.MATCHES + 1 depending on how close of a match it is. return getClosenessRanking(testString, stringToRank); } /** * Generates an acronym for a string. * * @param {String} string the string for which to produce the acronym * @returns {String} the acronym */ function getAcronym(string) { let acronym = ''; const wordsInString = string.split(' '); wordsInString.forEach(wordInString => { const splitByHyphenWords = wordInString.split('-'); splitByHyphenWords.forEach(splitByHyphenWord => { acronym += splitByHyphenWord.substr(0, 1); }); }); return acronym; } /** * Returns a score based on how spread apart the * characters from the stringToRank are within the testString. * A number close to rankings.MATCHES represents a loose match. A number close * to rankings.MATCHES + 1 represents a tighter match. * @param {String} testString - the string to test against * @param {String} stringToRank - the string to rank * @returns {Number} the number between rankings.MATCHES and * rankings.MATCHES + 1 for how well stringToRank matches testString */ function getClosenessRanking(testString, stringToRank) { let matchingInOrderCharCount = 0; let charNumber = 0; function findMatchingCharacter(matchChar, string, index) { for (let j = index, J = string.length; j < J; j++) { const stringChar = string[j]; if (stringChar === matchChar) { matchingInOrderCharCount += 1; return j + 1; } } return -1; } function getRanking(spread) { const spreadPercentage = 1 / spread; const inOrderPercentage = matchingInOrderCharCount / stringToRank.length; const ranking = rankings.MATCHES + inOrderPercentage * spreadPercentage; return ranking; } const firstIndex = findMatchingCharacter(stringToRank[0], testString, 0); if (firstIndex < 0) { return rankings.NO_MATCH; } charNumber = firstIndex; for (let i = 1, I = stringToRank.length; i < I; i++) { const matchChar = stringToRank[i]; charNumber = findMatchingCharacter(matchChar, testString, charNumber); const found = charNumber > -1; if (!found) { return rankings.NO_MATCH; } } const spread = charNumber - firstIndex; return getRanking(spread); } /** * Sorts items that have a rank, index, and keyIndex * @param {Object} a - the first item to sort * @param {Object} b - the second item to sort * @return {Number} -1 if a should come first, 1 if b should come first, 0 if equal */ function sortRankedValues(a, b, baseSort) { const aFirst = -1; const bFirst = 1; const { rank: aRank, keyIndex: aKeyIndex } = a; const { rank: bRank, keyIndex: bKeyIndex } = b; const same = aRank === bRank; if (same) { if (aKeyIndex === bKeyIndex) { // use the base sort function as a tie-breaker return baseSort(a, b); } else { return aKeyIndex < bKeyIndex ? aFirst : bFirst; } } else { return aRank > bRank ? aFirst : bFirst; } } /** * Prepares value for comparison by stringifying it, removing diacritics (if specified) * @param {String} value - the value to clean * @param {Object} options - {keepDiacritics: whether to remove diacritics} * @return {String} the prepared value */ function prepareValueForComparison(value, _ref4) { let { keepDiacritics } = _ref4; // value might not actually be a string at this point (we don't get to choose) // so part of preparing the value for comparison is ensure that it is a string value = `${value}`; // toString if (!keepDiacritics) { value = remove_accents__WEBPACK_IMPORTED_MODULE_0___default()(value); } return value; } /** * Gets value for key in item at arbitrarily nested keypath * @param {Object} item - the item * @param {Object|Function} key - the potentially nested keypath or property callback * @return {Array} - an array containing the value(s) at the nested keypath */ function getItemValues(item, key) { if (typeof key === 'object') { key = key.key; } let value; if (typeof key === 'function') { value = key(item); } else if (item == null) { value = null; } else if (Object.hasOwnProperty.call(item, key)) { value = item[key]; } else if (key.includes('.')) { // eslint-disable-next-line @typescript-eslint/no-unsafe-call return getNestedValues(key, item); } else { value = null; } // because `value` can also be undefined if (value == null) { return []; } if (Array.isArray(value)) { return value; } return [String(value)]; } /** * Given path: "foo.bar.baz" * And item: {foo: {bar: {baz: 'buzz'}}} * -> 'buzz' * @param path a dot-separated set of keys * @param item the item to get the value from */ function getNestedValues(path, item) { const keys = path.split('.'); let values = [item]; for (let i = 0, I = keys.length; i < I; i++) { const nestedKey = keys[i]; let nestedValues = []; for (let j = 0, J = values.length; j < J; j++) { const nestedItem = values[j]; if (nestedItem == null) continue; if (Object.hasOwnProperty.call(nestedItem, nestedKey)) { const nestedValue = nestedItem[nestedKey]; if (nestedValue != null) { nestedValues.push(nestedValue); } } else if (nestedKey === '*') { // ensure that values is an array nestedValues = nestedValues.concat(nestedItem); } } values = nestedValues; } if (Array.isArray(values[0])) { // keep allowing the implicit wildcard for an array of strings at the end of // the path; don't use `.flat()` because that's not available in node.js v10 const result = []; return result.concat(...values); } // Based on our logic it should be an array of strings by now... // assuming the user's path terminated in strings return values; } /** * Gets all the values for the given keys in the given item and returns an array of those values * @param item - the item from which the values will be retrieved * @param keys - the keys to use to retrieve the values * @return objects with {itemValue, attributes} */ function getAllValuesToRank(item, keys) { const allValues = []; for (let j = 0, J = keys.length; j < J; j++) { const key = keys[j]; const attributes = getKeyAttributes(key); const itemValues = getItemValues(item, key); for (let i = 0, I = itemValues.length; i < I; i++) { allValues.push({ itemValue: itemValues[i], attributes }); } } return allValues; } const defaultKeyAttributes = { maxRanking: Infinity, minRanking: -Infinity }; /** * Gets all the attributes for the given key * @param key - the key from which the attributes will be retrieved * @return object containing the key's attributes */ function getKeyAttributes(key) { if (typeof key === 'string') { return defaultKeyAttributes; } return { ...defaultKeyAttributes, ...key }; } /* eslint no-continue: "off", */ /***/ }), /***/ "../node_modules/match-sorter/node_modules/remove-accents/index.js": /*!*************************************************************************!*\ !*** ../node_modules/match-sorter/node_modules/remove-accents/index.js ***! \*************************************************************************/ /***/ ((module) => { var characterMap = { "À": "A", "Á": "A", "Â": "A", "Ã": "A", "Ä": "A", "Å": "A", "Ấ": "A", "Ắ": "A", "Ẳ": "A", "Ẵ": "A", "Ặ": "A", "Æ": "AE", "Ầ": "A", "Ằ": "A", "Ȃ": "A", "Ả": "A", "Ạ": "A", "Ẩ": "A", "Ẫ": "A", "Ậ": "A", "Ç": "C", "Ḉ": "C", "È": "E", "É": "E", "Ê": "E", "Ë": "E", "Ế": "E", "Ḗ": "E", "Ề": "E", "Ḕ": "E", "Ḝ": "E", "Ȇ": "E", "Ẻ": "E", "Ẽ": "E", "Ẹ": "E", "Ể": "E", "Ễ": "E", "Ệ": "E", "Ì": "I", "Í": "I", "Î": "I", "Ï": "I", "Ḯ": "I", "Ȋ": "I", "Ỉ": "I", "Ị": "I", "Ð": "D", "Ñ": "N", "Ò": "O", "Ó": "O", "Ô": "O", "Õ": "O", "Ö": "O", "Ø": "O", "Ố": "O", "Ṍ": "O", "Ṓ": "O", "Ȏ": "O", "Ỏ": "O", "Ọ": "O", "Ổ": "O", "Ỗ": "O", "Ộ": "O", "Ờ": "O", "Ở": "O", "Ỡ": "O", "Ớ": "O", "Ợ": "O", "Ù": "U", "Ú": "U", "Û": "U", "Ü": "U", "Ủ": "U", "Ụ": "U", "Ử": "U", "Ữ": "U", "Ự": "U", "Ý": "Y", "à": "a", "á": "a", "â": "a", "ã": "a", "ä": "a", "å": "a", "ấ": "a", "ắ": "a", "ẳ": "a", "ẵ": "a", "ặ": "a", "æ": "ae", "ầ": "a", "ằ": "a", "ȃ": "a", "ả": "a", "ạ": "a", "ẩ": "a", "ẫ": "a", "ậ": "a", "ç": "c", "ḉ": "c", "è": "e", "é": "e", "ê": "e", "ë": "e", "ế": "e", "ḗ": "e", "ề": "e", "ḕ": "e", "ḝ": "e", "ȇ": "e", "ẻ": "e", "ẽ": "e", "ẹ": "e", "ể": "e", "ễ": "e", "ệ": "e", "ì": "i", "í": "i", "î": "i", "ï": "i", "ḯ": "i", "ȋ": "i", "ỉ": "i", "ị": "i", "ð": "d", "ñ": "n", "ò": "o", "ó": "o", "ô": "o", "õ": "o", "ö": "o", "ø": "o", "ố": "o", "ṍ": "o", "ṓ": "o", "ȏ": "o", "ỏ": "o", "ọ": "o", "ổ": "o", "ỗ": "o", "ộ": "o", "ờ": "o", "ở": "o", "ỡ": "o", "ớ": "o", "ợ": "o", "ù": "u", "ú": "u", "û": "u", "ü": "u", "ủ": "u", "ụ": "u", "ử": "u", "ữ": "u", "ự": "u", "ý": "y", "ÿ": "y", "Ā": "A", "ā": "a", "Ă": "A", "ă": "a", "Ą": "A", "ą": "a", "Ć": "C", "ć": "c", "Ĉ": "C", "ĉ": "c", "Ċ": "C", "ċ": "c", "Č": "C", "č": "c", "C̆": "C", "c̆": "c", "Ď": "D", "ď": "d", "Đ": "D", "đ": "d", "Ē": "E", "ē": "e", "Ĕ": "E", "ĕ": "e", "Ė": "E", "ė": "e", "Ę": "E", "ę": "e", "Ě": "E", "ě": "e", "Ĝ": "G", "Ǵ": "G", "ĝ": "g", "ǵ": "g", "Ğ": "G", "ğ": "g", "Ġ": "G", "ġ": "g", "Ģ": "G", "ģ": "g", "Ĥ": "H", "ĥ": "h", "Ħ": "H", "ħ": "h", "Ḫ": "H", "ḫ": "h", "Ĩ": "I", "ĩ": "i", "Ī": "I", "ī": "i", "Ĭ": "I", "ĭ": "i", "Į": "I", "į": "i", "İ": "I", "ı": "i", "IJ": "IJ", "ij": "ij", "Ĵ": "J", "ĵ": "j", "Ķ": "K", "ķ": "k", "Ḱ": "K", "ḱ": "k", "K̆": "K", "k̆": "k", "Ĺ": "L", "ĺ": "l", "Ļ": "L", "ļ": "l", "Ľ": "L", "ľ": "l", "Ŀ": "L", "ŀ": "l", "Ł": "l", "ł": "l", "Ḿ": "M", "ḿ": "m", "M̆": "M", "m̆": "m", "Ń": "N", "ń": "n", "Ņ": "N", "ņ": "n", "Ň": "N", "ň": "n", "ʼn": "n", "N̆": "N", "n̆": "n", "Ō": "O", "ō": "o", "Ŏ": "O", "ŏ": "o", "Ő": "O", "ő": "o", "Œ": "OE", "œ": "oe", "P̆": "P", "p̆": "p", "Ŕ": "R", "ŕ": "r", "Ŗ": "R", "ŗ": "r", "Ř": "R", "ř": "r", "R̆": "R", "r̆": "r", "Ȓ": "R", "ȓ": "r", "Ś": "S", "ś": "s", "Ŝ": "S", "ŝ": "s", "Ş": "S", "Ș": "S", "ș": "s", "ş": "s", "Š": "S", "š": "s", "Ţ": "T", "ţ": "t", "ț": "t", "Ț": "T", "Ť": "T", "ť": "t", "Ŧ": "T", "ŧ": "t", "T̆": "T", "t̆": "t", "Ũ": "U", "ũ": "u", "Ū": "U", "ū": "u", "Ŭ": "U", "ŭ": "u", "Ů": "U", "ů": "u", "Ű": "U", "ű": "u", "Ų": "U", "ų": "u", "Ȗ": "U", "ȗ": "u", "V̆": "V", "v̆": "v", "Ŵ": "W", "ŵ": "w", "Ẃ": "W", "ẃ": "w", "X̆": "X", "x̆": "x", "Ŷ": "Y", "ŷ": "y", "Ÿ": "Y", "Y̆": "Y", "y̆": "y", "Ź": "Z", "ź": "z", "Ż": "Z", "ż": "z", "Ž": "Z", "ž": "z", "ſ": "s", "ƒ": "f", "Ơ": "O", "ơ": "o", "Ư": "U", "ư": "u", "Ǎ": "A", "ǎ": "a", "Ǐ": "I", "ǐ": "i", "Ǒ": "O", "ǒ": "o", "Ǔ": "U", "ǔ": "u", "Ǖ": "U", "ǖ": "u", "Ǘ": "U", "ǘ": "u", "Ǚ": "U", "ǚ": "u", "Ǜ": "U", "ǜ": "u", "Ứ": "U", "ứ": "u", "Ṹ": "U", "ṹ": "u", "Ǻ": "A", "ǻ": "a", "Ǽ": "AE", "ǽ": "ae", "Ǿ": "O", "ǿ": "o", "Þ": "TH", "þ": "th", "Ṕ": "P", "ṕ": "p", "Ṥ": "S", "ṥ": "s", "X́": "X", "x́": "x", "Ѓ": "Г", "ѓ": "г", "Ќ": "К", "ќ": "к", "A̋": "A", "a̋": "a", "E̋": "E", "e̋": "e", "I̋": "I", "i̋": "i", "Ǹ": "N", "ǹ": "n", "Ồ": "O", "ồ": "o", "Ṑ": "O", "ṑ": "o", "Ừ": "U", "ừ": "u", "Ẁ": "W", "ẁ": "w", "Ỳ": "Y", "ỳ": "y", "Ȁ": "A", "ȁ": "a", "Ȅ": "E", "ȅ": "e", "Ȉ": "I", "ȉ": "i", "Ȍ": "O", "ȍ": "o", "Ȑ": "R", "ȑ": "r", "Ȕ": "U", "ȕ": "u", "B̌": "B", "b̌": "b", "Č̣": "C", "č̣": "c", "Ê̌": "E", "ê̌": "e", "F̌": "F", "f̌": "f", "Ǧ": "G", "ǧ": "g", "Ȟ": "H", "ȟ": "h", "J̌": "J", "ǰ": "j", "Ǩ": "K", "ǩ": "k", "M̌": "M", "m̌": "m", "P̌": "P", "p̌": "p", "Q̌": "Q", "q̌": "q", "Ř̩": "R", "ř̩": "r", "Ṧ": "S", "ṧ": "s", "V̌": "V", "v̌": "v", "W̌": "W", "w̌": "w", "X̌": "X", "x̌": "x", "Y̌": "Y", "y̌": "y", "A̧": "A", "a̧": "a", "B̧": "B", "b̧": "b", "Ḑ": "D", "ḑ": "d", "Ȩ": "E", "ȩ": "e", "Ɛ̧": "E", "ɛ̧": "e", "Ḩ": "H", "ḩ": "h", "I̧": "I", "i̧": "i", "Ɨ̧": "I", "ɨ̧": "i", "M̧": "M", "m̧": "m", "O̧": "O", "o̧": "o", "Q̧": "Q", "q̧": "q", "U̧": "U", "u̧": "u", "X̧": "X", "x̧": "x", "Z̧": "Z", "z̧": "z", "й":"и", "Й":"И", "ё":"е", "Ё":"Е", }; var chars = Object.keys(characterMap).join('|'); var allAccents = new RegExp(chars, 'g'); var firstAccent = new RegExp(chars, ''); function matcher(match) { return characterMap[match]; } var removeAccents = function(string) { return string.replace(allAccents, matcher); }; var hasAccents = function(string) { return !!string.match(firstAccent); }; module.exports = removeAccents; module.exports.has = hasAccents; module.exports.remove = removeAccents; /***/ }), /***/ "../node_modules/react-query/devtools/index.js": /*!*****************************************************!*\ !*** ../node_modules/react-query/devtools/index.js ***! \*****************************************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { if (false) // removed by dead control flow {} else { module.exports = __webpack_require__(/*! ./development */ "../node_modules/react-query/es/devtools/index.js") } /***/ }), /***/ "../node_modules/react-query/es/devtools/Explorer.js": /*!***********************************************************!*\ !*** ../node_modules/react-query/es/devtools/Explorer.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ DefaultRenderer: () => (/* binding */ DefaultRenderer), /* harmony export */ Entry: () => (/* binding */ Entry), /* harmony export */ ExpandButton: () => (/* binding */ ExpandButton), /* harmony export */ Expander: () => (/* binding */ Expander), /* harmony export */ Info: () => (/* binding */ Info), /* harmony export */ Label: () => (/* binding */ Label), /* harmony export */ LabelButton: () => (/* binding */ LabelButton), /* harmony export */ SubEntries: () => (/* binding */ SubEntries), /* harmony export */ Value: () => (/* binding */ Value), /* harmony export */ chunkArray: () => (/* binding */ chunkArray), /* harmony export */ "default": () => (/* binding */ Explorer) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "../node_modules/react-query/es/devtools/utils.js"); var Entry = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.styled)('div', { fontFamily: 'Menlo, monospace', fontSize: '1em', lineHeight: '1.7', outline: 'none', wordBreak: 'break-word' }); var Label = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.styled)('span', { color: 'white' }); var LabelButton = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.styled)('button', { cursor: 'pointer', color: 'white' }); var ExpandButton = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.styled)('button', { cursor: 'pointer', color: 'inherit', font: 'inherit', outline: 'inherit', background: 'transparent', border: 'none', padding: 0 }); var Value = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.styled)('span', function (_props, theme) { return { color: theme.danger }; }); var SubEntries = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.styled)('div', { marginLeft: '.1em', paddingLeft: '1em', borderLeft: '2px solid rgba(0,0,0,.15)' }); var Info = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.styled)('span', { color: 'grey', fontSize: '.7em' }); var Expander = function Expander(_ref) { var expanded = _ref.expanded, _ref$style = _ref.style, style = _ref$style === void 0 ? {} : _ref$style; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("span", { style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ display: 'inline-block', transition: 'all .1s ease', transform: "rotate(" + (expanded ? 90 : 0) + "deg) " + (style.transform || '') }, style) }, "\u25B6"); }; /** * Chunk elements in the array by size * * when the array cannot be chunked evenly by size, the last chunk will be * filled with the remaining elements * * @example * chunkArray(['a','b', 'c', 'd', 'e'], 2) // returns [['a','b'], ['c', 'd'], ['e']] */ function chunkArray(array, size) { if (size < 1) return []; var i = 0; var result = []; while (i < array.length) { result.push(array.slice(i, i + size)); i = i + size; } return result; } var DefaultRenderer = function DefaultRenderer(_ref2) { var HandleEntry = _ref2.HandleEntry, label = _ref2.label, value = _ref2.value, _ref2$subEntries = _ref2.subEntries, subEntries = _ref2$subEntries === void 0 ? [] : _ref2$subEntries, _ref2$subEntryPages = _ref2.subEntryPages, subEntryPages = _ref2$subEntryPages === void 0 ? [] : _ref2$subEntryPages, type = _ref2.type, _ref2$expanded = _ref2.expanded, expanded = _ref2$expanded === void 0 ? false : _ref2$expanded, toggleExpanded = _ref2.toggleExpanded, pageSize = _ref2.pageSize; var _React$useState = react__WEBPACK_IMPORTED_MODULE_2___default().useState([]), expandedPages = _React$useState[0], setExpandedPages = _React$useState[1]; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Entry, { key: label }, (subEntryPages == null ? void 0 : subEntryPages.length) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement((react__WEBPACK_IMPORTED_MODULE_2___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ExpandButton, { onClick: function onClick() { return toggleExpanded(); } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Expander, { expanded: expanded }), " ", label, ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Info, null, String(type).toLowerCase() === 'iterable' ? '(Iterable) ' : '', subEntries.length, " ", subEntries.length > 1 ? "items" : "item")), expanded ? subEntryPages.length === 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(SubEntries, null, subEntries.map(function (entry) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(HandleEntry, { key: entry.label, entry: entry }); })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(SubEntries, null, subEntryPages.map(function (entries, index) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { key: index }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Entry, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(LabelButton, { onClick: function onClick() { return setExpandedPages(function (old) { return old.includes(index) ? old.filter(function (d) { return d !== index; }) : [].concat(old, [index]); }); } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Expander, { expanded: expanded }), " [", index * pageSize, " ...", ' ', index * pageSize + pageSize - 1, "]"), expandedPages.includes(index) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(SubEntries, null, entries.map(function (entry) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(HandleEntry, { key: entry.label, entry: entry }); })) : null)); })) : null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement((react__WEBPACK_IMPORTED_MODULE_2___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Label, null, label, ":"), " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Value, null, (0,_utils__WEBPACK_IMPORTED_MODULE_3__.displayValue)(value)))); }; function isIterable(x) { return Symbol.iterator in x; } function Explorer(_ref3) { var value = _ref3.value, defaultExpanded = _ref3.defaultExpanded, _ref3$renderer = _ref3.renderer, renderer = _ref3$renderer === void 0 ? DefaultRenderer : _ref3$renderer, _ref3$pageSize = _ref3.pageSize, pageSize = _ref3$pageSize === void 0 ? 100 : _ref3$pageSize, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref3, ["value", "defaultExpanded", "renderer", "pageSize"]); var _React$useState2 = react__WEBPACK_IMPORTED_MODULE_2___default().useState(Boolean(defaultExpanded)), expanded = _React$useState2[0], setExpanded = _React$useState2[1]; var toggleExpanded = react__WEBPACK_IMPORTED_MODULE_2___default().useCallback(function () { return setExpanded(function (old) { return !old; }); }, []); var type = typeof value; var subEntries = []; var makeProperty = function makeProperty(sub) { var _ref4; var subDefaultExpanded = defaultExpanded === true ? (_ref4 = {}, _ref4[sub.label] = true, _ref4) : defaultExpanded == null ? void 0 : defaultExpanded[sub.label]; return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, sub, { defaultExpanded: subDefaultExpanded }); }; if (Array.isArray(value)) { type = 'array'; subEntries = value.map(function (d, i) { return makeProperty({ label: i.toString(), value: d }); }); } else if (value !== null && typeof value === 'object' && isIterable(value) && typeof value[Symbol.iterator] === 'function') { type = 'Iterable'; subEntries = Array.from(value, function (val, i) { return makeProperty({ label: i.toString(), value: val }); }); } else if (typeof value === 'object' && value !== null) { type = 'object'; subEntries = Object.entries(value).map(function (_ref5) { var key = _ref5[0], val = _ref5[1]; return makeProperty({ label: key, value: val }); }); } var subEntryPages = chunkArray(subEntries, pageSize); return renderer((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ HandleEntry: function HandleEntry(_ref6) { var entry = _ref6.entry; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Explorer, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({ value: value, renderer: renderer }, rest, entry)); }, type: type, subEntries: subEntries, subEntryPages: subEntryPages, value: value, expanded: expanded, toggleExpanded: toggleExpanded, pageSize: pageSize }, rest)); } /***/ }), /***/ "../node_modules/react-query/es/devtools/Logo.js": /*!*******************************************************!*\ !*** ../node_modules/react-query/es/devtools/Logo.js ***! \*******************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ Logo) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); function Logo(props) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("svg", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ width: "40px", height: "40px", viewBox: "0 0 190 190", version: "1.1" }, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("g", { stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("g", { transform: "translate(-33.000000, 0.000000)" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("path", { d: "M72.7239712,61.3436237 C69.631224,46.362877 68.9675112,34.8727722 70.9666331,26.5293551 C72.1555965,21.5671678 74.3293088,17.5190846 77.6346064,14.5984631 C81.1241394,11.5150478 85.5360327,10.0020122 90.493257,10.0020122 C98.6712013,10.0020122 107.26826,13.7273214 116.455725,20.8044264 C120.20312,23.6910458 124.092437,27.170411 128.131651,31.2444746 C128.45314,30.8310265 128.816542,30.4410453 129.22143,30.0806152 C140.64098,19.9149716 150.255245,13.5989272 158.478408,11.1636507 C163.367899,9.715636 167.958526,9.57768202 172.138936,10.983031 C176.551631,12.4664684 180.06766,15.5329489 182.548314,19.8281091 C186.642288,26.9166735 187.721918,36.2310983 186.195595,47.7320243 C185.573451,52.4199112 184.50985,57.5263831 183.007094,63.0593153 C183.574045,63.1277086 184.142416,63.2532808 184.705041,63.4395297 C199.193932,68.2358678 209.453582,73.3937462 215.665021,79.2882839 C219.360669,82.7953831 221.773972,86.6998434 222.646365,91.0218204 C223.567176,95.5836746 222.669313,100.159332 220.191548,104.451297 C216.105211,111.529614 208.591643,117.11221 197.887587,121.534031 C193.589552,123.309539 188.726579,124.917559 183.293259,126.363748 C183.541176,126.92292 183.733521,127.516759 183.862138,128.139758 C186.954886,143.120505 187.618598,154.61061 185.619477,162.954027 C184.430513,167.916214 182.256801,171.964297 178.951503,174.884919 C175.46197,177.968334 171.050077,179.48137 166.092853,179.48137 C157.914908,179.48137 149.31785,175.756061 140.130385,168.678956 C136.343104,165.761613 132.410866,162.238839 128.325434,158.108619 C127.905075,158.765474 127.388968,159.376011 126.77857,159.919385 C115.35902,170.085028 105.744755,176.401073 97.5215915,178.836349 C92.6321009,180.284364 88.0414736,180.422318 83.8610636,179.016969 C79.4483686,177.533532 75.9323404,174.467051 73.4516862,170.171891 C69.3577116,163.083327 68.2780823,153.768902 69.8044053,142.267976 C70.449038,137.410634 71.56762,132.103898 73.1575891,126.339009 C72.5361041,126.276104 71.9120754,126.144816 71.2949591,125.940529 C56.8060684,121.144191 46.5464184,115.986312 40.3349789,110.091775 C36.6393312,106.584675 34.2260275,102.680215 33.3536352,98.3582381 C32.4328237,93.7963839 33.3306866,89.2207269 35.8084524,84.9287618 C39.8947886,77.8504443 47.4083565,72.2678481 58.1124133,67.8460273 C62.5385143,66.0176154 67.5637208,64.366822 73.1939394,62.8874674 C72.9933393,62.3969171 72.8349374,61.8811235 72.7239712,61.3436237 Z", fill: "#002C4B", fillRule: "nonzero", transform: "translate(128.000000, 95.000000) scale(-1, 1) translate(-128.000000, -95.000000) " }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("path", { d: "M113.396882,64 L142.608177,64 C144.399254,64 146.053521,64.958025 146.944933,66.5115174 L161.577138,92.0115174 C162.461464,93.5526583 162.461464,95.4473417 161.577138,96.9884826 L146.944933,122.488483 C146.053521,124.041975 144.399254,125 142.608177,125 L113.396882,125 C111.605806,125 109.951539,124.041975 109.060126,122.488483 L94.4279211,96.9884826 C93.543596,95.4473417 93.543596,93.5526583 94.4279211,92.0115174 L109.060126,66.5115174 C109.951539,64.958025 111.605806,64 113.396882,64 Z M138.987827,70.2765273 C140.779849,70.2765273 142.434839,71.2355558 143.325899,72.7903404 L154.343038,92.0138131 C155.225607,93.5537825 155.225607,95.4462175 154.343038,96.9861869 L143.325899,116.20966 C142.434839,117.764444 140.779849,118.723473 138.987827,118.723473 L117.017233,118.723473 C115.225211,118.723473 113.570221,117.764444 112.67916,116.20966 L101.662022,96.9861869 C100.779452,95.4462175 100.779452,93.5537825 101.662022,92.0138131 L112.67916,72.7903404 C113.570221,71.2355558 115.225211,70.2765273 117.017233,70.2765273 L138.987827,70.2765273 Z M135.080648,77.1414791 L120.924411,77.1414791 C119.134228,77.1414791 117.480644,78.0985567 116.5889,79.6508285 L116.5889,79.6508285 L109.489217,92.0093494 C108.603232,93.5515958 108.603232,95.4484042 109.489217,96.9906506 L109.489217,96.9906506 L116.5889,109.349172 C117.480644,110.901443 119.134228,111.858521 120.924411,111.858521 L120.924411,111.858521 L135.080648,111.858521 C136.870831,111.858521 138.524416,110.901443 139.41616,109.349172 L139.41616,109.349172 L146.515843,96.9906506 C147.401828,95.4484042 147.401828,93.5515958 146.515843,92.0093494 L146.515843,92.0093494 L139.41616,79.6508285 C138.524416,78.0985567 136.870831,77.1414791 135.080648,77.1414791 L135.080648,77.1414791 Z M131.319186,83.7122186 C133.108028,83.7122186 134.760587,84.6678753 135.652827,86.2183156 L138.983552,92.0060969 C139.87203,93.5500005 139.87203,95.4499995 138.983552,96.9939031 L135.652827,102.781684 C134.760587,104.332125 133.108028,105.287781 131.319186,105.287781 L124.685874,105.287781 C122.897032,105.287781 121.244473,104.332125 120.352233,102.781684 L117.021508,96.9939031 C116.13303,95.4499995 116.13303,93.5500005 117.021508,92.0060969 L120.352233,86.2183156 C121.244473,84.6678753 122.897032,83.7122186 124.685874,83.7122186 L131.319186,83.7122186 Z M128.003794,90.1848875 C126.459294,90.1848875 125.034382,91.0072828 124.263005,92.3424437 C123.491732,93.6774232 123.491732,95.3225768 124.263005,96.6575563 C125.034382,97.9927172 126.459294,98.8151125 128.001266,98.8151125 L128.001266,98.8151125 C129.545766,98.8151125 130.970678,97.9927172 131.742055,96.6575563 C132.513327,95.3225768 132.513327,93.6774232 131.742055,92.3424437 C130.970678,91.0072828 129.545766,90.1848875 128.003794,90.1848875 L128.003794,90.1848875 Z M93,94.5009646 L100.767764,94.5009646", fill: "#FFD94C" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("path", { d: "M87.8601729,108.357758 C89.1715224,107.608286 90.8360246,108.074601 91.5779424,109.399303 L91.5779424,109.399303 L92.0525843,110.24352 C95.8563392,116.982993 99.8190116,123.380176 103.940602,129.435068 C108.807881,136.585427 114.28184,143.82411 120.362479,151.151115 C121.316878,152.30114 121.184944,154.011176 120.065686,154.997937 L120.065686,154.997937 L119.454208,155.534625 C99.3465389,173.103314 86.2778188,176.612552 80.2480482,166.062341 C74.3500652,155.742717 76.4844915,136.982888 86.6513274,109.782853 C86.876818,109.179582 87.3045861,108.675291 87.8601729,108.357758 Z M173.534177,129.041504 C174.986131,128.785177 176.375496,129.742138 176.65963,131.194242 L176.65963,131.194242 L176.812815,131.986376 C181.782365,157.995459 178.283348,171 166.315764,171 C154.609745,171 139.708724,159.909007 121.612702,137.727022 C121.211349,137.235047 120.994572,136.617371 121,135.981509 C121.013158,134.480686 122.235785,133.274651 123.730918,133.287756 L123.730918,133.287756 L124.684654,133.294531 C132.305698,133.335994 139.714387,133.071591 146.910723,132.501323 C155.409039,131.82788 164.283523,130.674607 173.534177,129.041504 Z M180.408726,73.8119663 C180.932139,72.4026903 182.508386,71.6634537 183.954581,72.149012 L183.954581,72.149012 L184.742552,72.4154854 C210.583763,81.217922 220.402356,90.8916805 214.198332,101.436761 C208.129904,111.751366 190.484347,119.260339 161.26166,123.963678 C160.613529,124.067994 159.948643,123.945969 159.382735,123.618843 C158.047025,122.846729 157.602046,121.158214 158.388848,119.847438 L158.388848,119.847438 L158.889328,119.0105 C162.877183,112.31633 166.481358,105.654262 169.701854,99.0242957 C173.50501,91.1948179 177.073967,82.7907081 180.408726,73.8119663 Z M94.7383398,66.0363218 C95.3864708,65.9320063 96.0513565,66.0540315 96.6172646,66.3811573 C97.9529754,67.153271 98.3979538,68.8417862 97.6111517,70.1525615 L97.6111517,70.1525615 L97.1106718,70.9895001 C93.1228168,77.6836699 89.5186416,84.3457379 86.2981462,90.9757043 C82.49499,98.8051821 78.9260328,107.209292 75.5912744,116.188034 C75.0678608,117.59731 73.4916142,118.336546 72.045419,117.850988 L72.045419,117.850988 L71.2574475,117.584515 C45.4162372,108.782078 35.597644,99.1083195 41.8016679,88.5632391 C47.8700957,78.2486335 65.515653,70.7396611 94.7383398,66.0363218 Z M136.545792,34.4653746 C156.653461,16.8966864 169.722181,13.3874478 175.751952,23.9376587 C181.649935,34.2572826 179.515508,53.0171122 169.348673,80.2171474 C169.123182,80.8204179 168.695414,81.324709 168.139827,81.6422422 C166.828478,82.3917144 165.163975,81.9253986 164.422058,80.6006966 L164.422058,80.6006966 L163.947416,79.7564798 C160.143661,73.0170065 156.180988,66.6198239 152.059398,60.564932 C147.192119,53.4145727 141.71816,46.1758903 135.637521,38.8488847 C134.683122,37.6988602 134.815056,35.9888243 135.934314,35.0020629 L135.934314,35.0020629 Z M90.6842361,18 C102.390255,18 117.291276,29.0909926 135.387298,51.2729777 C135.788651,51.7649527 136.005428,52.3826288 136,53.0184911 C135.986842,54.5193144 134.764215,55.7253489 133.269082,55.7122445 L133.269082,55.7122445 L132.315346,55.7054689 C124.694302,55.6640063 117.285613,55.9284091 110.089277,56.4986773 C101.590961,57.17212 92.7164767,58.325393 83.4658235,59.9584962 C82.0138691,60.2148231 80.6245044,59.2578618 80.3403697,57.805758 L80.3403697,57.805758 L80.1871846,57.0136235 C75.2176347,31.0045412 78.7166519,18 90.6842361,18 Z", fill: "#FF4154" })))); } /***/ }), /***/ "../node_modules/react-query/es/devtools/devtools.js": /*!***********************************************************!*\ !*** ../node_modules/react-query/es/devtools/devtools.js ***! \***********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactQueryDevtools: () => (/* binding */ ReactQueryDevtools), /* harmony export */ ReactQueryDevtoolsPanel: () => (/* binding */ ReactQueryDevtoolsPanel) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var react_query__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react-query */ "../node_modules/react-query/es/index.js"); /* harmony import */ var match_sorter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! match-sorter */ "../node_modules/match-sorter/dist/match-sorter.esm.js"); /* harmony import */ var _useLocalStorage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useLocalStorage */ "../node_modules/react-query/es/devtools/useLocalStorage.js"); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils */ "../node_modules/react-query/es/devtools/utils.js"); /* harmony import */ var _styledComponents__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./styledComponents */ "../node_modules/react-query/es/devtools/styledComponents.js"); /* harmony import */ var _theme__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./theme */ "../node_modules/react-query/es/devtools/theme.js"); /* harmony import */ var _Explorer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./Explorer */ "../node_modules/react-query/es/devtools/Explorer.js"); /* harmony import */ var _Logo__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./Logo */ "../node_modules/react-query/es/devtools/Logo.js"); /* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../core/utils */ "../node_modules/react-query/es/core/utils.js"); var isServer = typeof window === 'undefined'; function ReactQueryDevtools(_ref) { var initialIsOpen = _ref.initialIsOpen, _ref$panelProps = _ref.panelProps, panelProps = _ref$panelProps === void 0 ? {} : _ref$panelProps, _ref$closeButtonProps = _ref.closeButtonProps, closeButtonProps = _ref$closeButtonProps === void 0 ? {} : _ref$closeButtonProps, _ref$toggleButtonProp = _ref.toggleButtonProps, toggleButtonProps = _ref$toggleButtonProp === void 0 ? {} : _ref$toggleButtonProp, _ref$position = _ref.position, position = _ref$position === void 0 ? 'bottom-left' : _ref$position, _ref$containerElement = _ref.containerElement, Container = _ref$containerElement === void 0 ? 'aside' : _ref$containerElement, styleNonce = _ref.styleNonce; var rootRef = react__WEBPACK_IMPORTED_MODULE_2___default().useRef(null); var panelRef = react__WEBPACK_IMPORTED_MODULE_2___default().useRef(null); var _useLocalStorage = (0,_useLocalStorage__WEBPACK_IMPORTED_MODULE_5__["default"])('reactQueryDevtoolsOpen', initialIsOpen), isOpen = _useLocalStorage[0], setIsOpen = _useLocalStorage[1]; var _useLocalStorage2 = (0,_useLocalStorage__WEBPACK_IMPORTED_MODULE_5__["default"])('reactQueryDevtoolsHeight', null), devtoolsHeight = _useLocalStorage2[0], setDevtoolsHeight = _useLocalStorage2[1]; var _useSafeState = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.useSafeState)(false), isResolvedOpen = _useSafeState[0], setIsResolvedOpen = _useSafeState[1]; var _useSafeState2 = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.useSafeState)(false), isResizing = _useSafeState2[0], setIsResizing = _useSafeState2[1]; var isMounted = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.useIsMounted)(); var _handleDragStart = function handleDragStart(panelElement, startEvent) { var _panelElement$getBoun; if (startEvent.button !== 0) return; // Only allow left click for drag setIsResizing(true); var dragInfo = { originalHeight: (_panelElement$getBoun = panelElement == null ? void 0 : panelElement.getBoundingClientRect().height) != null ? _panelElement$getBoun : 0, pageY: startEvent.pageY }; var run = function run(moveEvent) { var delta = dragInfo.pageY - moveEvent.pageY; var newHeight = (dragInfo == null ? void 0 : dragInfo.originalHeight) + delta; setDevtoolsHeight(newHeight); if (newHeight < 70) { setIsOpen(false); } else { setIsOpen(true); } }; var unsub = function unsub() { setIsResizing(false); document.removeEventListener('mousemove', run); document.removeEventListener('mouseUp', unsub); }; document.addEventListener('mousemove', run); document.addEventListener('mouseup', unsub); }; react__WEBPACK_IMPORTED_MODULE_2___default().useEffect(function () { setIsResolvedOpen(isOpen != null ? isOpen : false); }, [isOpen, isResolvedOpen, setIsResolvedOpen]); // Toggle panel visibility before/after transition (depending on direction). // Prevents focusing in a closed panel. react__WEBPACK_IMPORTED_MODULE_2___default().useEffect(function () { var ref = panelRef.current; if (ref) { var handlePanelTransitionStart = function handlePanelTransitionStart() { if (ref && isResolvedOpen) { ref.style.visibility = 'visible'; } }; var handlePanelTransitionEnd = function handlePanelTransitionEnd() { if (ref && !isResolvedOpen) { ref.style.visibility = 'hidden'; } }; ref.addEventListener('transitionstart', handlePanelTransitionStart); ref.addEventListener('transitionend', handlePanelTransitionEnd); return function () { ref.removeEventListener('transitionstart', handlePanelTransitionStart); ref.removeEventListener('transitionend', handlePanelTransitionEnd); }; } }, [isResolvedOpen]); (react__WEBPACK_IMPORTED_MODULE_2___default())[isServer ? 'useEffect' : 'useLayoutEffect'](function () { if (isResolvedOpen) { var _rootRef$current, _rootRef$current$pare; var previousValue = (_rootRef$current = rootRef.current) == null ? void 0 : (_rootRef$current$pare = _rootRef$current.parentElement) == null ? void 0 : _rootRef$current$pare.style.paddingBottom; var run = function run() { var _panelRef$current, _rootRef$current2; var containerHeight = (_panelRef$current = panelRef.current) == null ? void 0 : _panelRef$current.getBoundingClientRect().height; if ((_rootRef$current2 = rootRef.current) == null ? void 0 : _rootRef$current2.parentElement) { rootRef.current.parentElement.style.paddingBottom = containerHeight + "px"; } }; run(); if (typeof window !== 'undefined') { window.addEventListener('resize', run); return function () { var _rootRef$current3; window.removeEventListener('resize', run); if (((_rootRef$current3 = rootRef.current) == null ? void 0 : _rootRef$current3.parentElement) && typeof previousValue === 'string') { rootRef.current.parentElement.style.paddingBottom = previousValue; } }; } } }, [isResolvedOpen]); var _panelProps$style = panelProps.style, panelStyle = _panelProps$style === void 0 ? {} : _panelProps$style, otherPanelProps = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(panelProps, ["style"]); var _closeButtonProps$sty = closeButtonProps.style, closeButtonStyle = _closeButtonProps$sty === void 0 ? {} : _closeButtonProps$sty, onCloseClick = closeButtonProps.onClick, otherCloseButtonProps = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(closeButtonProps, ["style", "onClick"]); var _toggleButtonProps$st = toggleButtonProps.style, toggleButtonStyle = _toggleButtonProps$st === void 0 ? {} : _toggleButtonProps$st, onToggleClick = toggleButtonProps.onClick, otherToggleButtonProps = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(toggleButtonProps, ["style", "onClick"]); // Do not render on the server if (!isMounted()) return null; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(Container, { ref: rootRef, className: "ReactQueryDevtools", "aria-label": "React Query Devtools" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_theme__WEBPACK_IMPORTED_MODULE_8__.ThemeProvider, { theme: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ReactQueryDevtoolsPanel, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ ref: panelRef, styleNonce: styleNonce }, otherPanelProps, { style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ position: 'fixed', bottom: '0', right: '0', zIndex: 99999, width: '100%', height: devtoolsHeight != null ? devtoolsHeight : 500, maxHeight: '90%', boxShadow: '0 0 20px rgba(0,0,0,.3)', borderTop: "1px solid " + _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.gray, transformOrigin: 'top', // visibility will be toggled after transitions, but set initial state here visibility: isOpen ? 'visible' : 'hidden' }, panelStyle, isResizing ? { transition: "none" } : { transition: "all .2s ease" }, isResolvedOpen ? { opacity: 1, pointerEvents: 'all', transform: "translateY(0) scale(1)" } : { opacity: 0, pointerEvents: 'none', transform: "translateY(15px) scale(1.02)" }), isOpen: isResolvedOpen, setIsOpen: setIsOpen, handleDragStart: function handleDragStart(e) { return _handleDragStart(panelRef.current, e); } })), isResolvedOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Button, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ type: "button", "aria-controls": "ReactQueryDevtoolsPanel", "aria-haspopup": "true", "aria-expanded": "true" }, otherCloseButtonProps, { onClick: function onClick(e) { setIsOpen(false); onCloseClick && onCloseClick(e); }, style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ position: 'fixed', zIndex: 99999, margin: '.5em', bottom: 0 }, position === 'top-right' ? { right: '0' } : position === 'top-left' ? { left: '0' } : position === 'bottom-right' ? { right: '0' } : { left: '0' }, closeButtonStyle) }), "Close") : null), !isResolvedOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("button", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ type: "button" }, otherToggleButtonProps, { "aria-label": "Open React Query Devtools", "aria-controls": "ReactQueryDevtoolsPanel", "aria-haspopup": "true", "aria-expanded": "false", onClick: function onClick(e) { setIsOpen(true); onToggleClick && onToggleClick(e); }, style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ background: 'none', border: 0, padding: 0, position: 'fixed', zIndex: 99999, display: 'inline-flex', fontSize: '1.5em', margin: '.5em', cursor: 'pointer', width: 'fit-content' }, position === 'top-right' ? { top: '0', right: '0' } : position === 'top-left' ? { top: '0', left: '0' } : position === 'bottom-right' ? { bottom: '0', right: '0' } : { bottom: '0', left: '0' }, toggleButtonStyle) }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_Logo__WEBPACK_IMPORTED_MODULE_10__["default"], { "aria-hidden": true })) : null); } var getStatusRank = function getStatusRank(q) { return q.state.isFetching ? 0 : !q.getObserversCount() ? 3 : q.isStale() ? 2 : 1; }; var sortFns = { 'Status > Last Updated': function StatusLastUpdated(a, b) { var _sortFns$LastUpdated; return getStatusRank(a) === getStatusRank(b) ? (_sortFns$LastUpdated = sortFns['Last Updated']) == null ? void 0 : _sortFns$LastUpdated.call(sortFns, a, b) : getStatusRank(a) > getStatusRank(b) ? 1 : -1; }, 'Query Hash': function QueryHash(a, b) { return a.queryHash > b.queryHash ? 1 : -1; }, 'Last Updated': function LastUpdated(a, b) { return a.state.dataUpdatedAt < b.state.dataUpdatedAt ? 1 : -1; } }; var ReactQueryDevtoolsPanel = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().forwardRef(function ReactQueryDevtoolsPanel(props, ref) { var _activeQuery$state; var _props$isOpen = props.isOpen, isOpen = _props$isOpen === void 0 ? true : _props$isOpen, styleNonce = props.styleNonce, setIsOpen = props.setIsOpen, handleDragStart = props.handleDragStart, panelProps = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(props, ["isOpen", "styleNonce", "setIsOpen", "handleDragStart"]); var queryClient = (0,react_query__WEBPACK_IMPORTED_MODULE_3__.useQueryClient)(); var queryCache = queryClient.getQueryCache(); var _useLocalStorage3 = (0,_useLocalStorage__WEBPACK_IMPORTED_MODULE_5__["default"])('reactQueryDevtoolsSortFn', Object.keys(sortFns)[0]), sort = _useLocalStorage3[0], setSort = _useLocalStorage3[1]; var _useLocalStorage4 = (0,_useLocalStorage__WEBPACK_IMPORTED_MODULE_5__["default"])('reactQueryDevtoolsFilter', ''), filter = _useLocalStorage4[0], setFilter = _useLocalStorage4[1]; var _useLocalStorage5 = (0,_useLocalStorage__WEBPACK_IMPORTED_MODULE_5__["default"])('reactQueryDevtoolsSortDesc', false), sortDesc = _useLocalStorage5[0], setSortDesc = _useLocalStorage5[1]; var sortFn = react__WEBPACK_IMPORTED_MODULE_2___default().useMemo(function () { return sortFns[sort]; }, [sort]); (react__WEBPACK_IMPORTED_MODULE_2___default())[isServer ? 'useEffect' : 'useLayoutEffect'](function () { if (!sortFn) { setSort(Object.keys(sortFns)[0]); } }, [setSort, sortFn]); var _useSafeState3 = (0,_utils__WEBPACK_IMPORTED_MODULE_6__.useSafeState)(Object.values(queryCache.findAll())), unsortedQueries = _useSafeState3[0], setUnsortedQueries = _useSafeState3[1]; var _useLocalStorage6 = (0,_useLocalStorage__WEBPACK_IMPORTED_MODULE_5__["default"])('reactQueryDevtoolsActiveQueryHash', ''), activeQueryHash = _useLocalStorage6[0], setActiveQueryHash = _useLocalStorage6[1]; var queries = react__WEBPACK_IMPORTED_MODULE_2___default().useMemo(function () { var sorted = [].concat(unsortedQueries).sort(sortFn); if (sortDesc) { sorted.reverse(); } if (!filter) { return sorted; } return (0,match_sorter__WEBPACK_IMPORTED_MODULE_4__.matchSorter)(sorted, filter, { keys: ['queryHash'] }).filter(function (d) { return d.queryHash; }); }, [sortDesc, sortFn, unsortedQueries, filter]); var activeQuery = react__WEBPACK_IMPORTED_MODULE_2___default().useMemo(function () { return queries.find(function (query) { return query.queryHash === activeQueryHash; }); }, [activeQueryHash, queries]); var hasFresh = queries.filter(function (q) { return (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getQueryStatusLabel)(q) === 'fresh'; }).length; var hasFetching = queries.filter(function (q) { return (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getQueryStatusLabel)(q) === 'fetching'; }).length; var hasStale = queries.filter(function (q) { return (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getQueryStatusLabel)(q) === 'stale'; }).length; var hasInactive = queries.filter(function (q) { return (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getQueryStatusLabel)(q) === 'inactive'; }).length; react__WEBPACK_IMPORTED_MODULE_2___default().useEffect(function () { if (isOpen) { var unsubscribe = queryCache.subscribe(function () { setUnsortedQueries(Object.values(queryCache.getAll())); }); // re-subscribing after the panel is closed and re-opened won't trigger the callback, // So we'll manually populate our state setUnsortedQueries(Object.values(queryCache.getAll())); return unsubscribe; } return undefined; }, [isOpen, sort, sortFn, sortDesc, setUnsortedQueries, queryCache]); var handleRefetch = function handleRefetch() { var promise = activeQuery == null ? void 0 : activeQuery.fetch(); promise == null ? void 0 : promise.catch(_core_utils__WEBPACK_IMPORTED_MODULE_11__.noop); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_theme__WEBPACK_IMPORTED_MODULE_8__.ThemeProvider, { theme: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Panel, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ ref: ref, className: "ReactQueryDevtoolsPanel", "aria-label": "React Query Devtools Panel", id: "ReactQueryDevtoolsPanel" }, panelProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("style", { nonce: styleNonce, dangerouslySetInnerHTML: { __html: "\n .ReactQueryDevtoolsPanel * {\n scrollbar-color: " + _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.backgroundAlt + " " + _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.gray + ";\n }\n\n .ReactQueryDevtoolsPanel *::-webkit-scrollbar, .ReactQueryDevtoolsPanel scrollbar {\n width: 1em;\n height: 1em;\n }\n\n .ReactQueryDevtoolsPanel *::-webkit-scrollbar-track, .ReactQueryDevtoolsPanel scrollbar-track {\n background: " + _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.backgroundAlt + ";\n }\n\n .ReactQueryDevtoolsPanel *::-webkit-scrollbar-thumb, .ReactQueryDevtoolsPanel scrollbar-thumb {\n background: " + _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.gray + ";\n border-radius: .5em;\n border: 3px solid " + _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.backgroundAlt + ";\n }\n " } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { position: 'absolute', left: 0, top: 0, width: '100%', height: '4px', marginBottom: '-4px', cursor: 'row-resize', zIndex: 100000 }, onMouseDown: handleDragStart }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { flex: '1 1 500px', minHeight: '40%', maxHeight: '100%', overflow: 'auto', borderRight: "1px solid " + _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.grayAlt, display: isOpen ? 'flex' : 'none', flexDirection: 'column' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { padding: '.5em', background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.backgroundAlt, display: 'flex', justifyContent: 'space-between', alignItems: 'center' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("button", { type: "button", "aria-label": "Close React Query Devtools", "aria-controls": "ReactQueryDevtoolsPanel", "aria-haspopup": "true", "aria-expanded": "true", onClick: function onClick() { return setIsOpen(false); }, style: { display: 'inline-flex', background: 'none', border: 0, padding: 0, marginRight: '.5em', cursor: 'pointer' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_Logo__WEBPACK_IMPORTED_MODULE_10__["default"], { "aria-hidden": true })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { display: 'flex', flexDirection: 'column' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.QueryKeys, { style: { marginBottom: '.5em' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.QueryKey, { style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.success, opacity: hasFresh ? 1 : 0.3 } }, "fresh ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Code, null, "(", hasFresh, ")")), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.QueryKey, { style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.active, opacity: hasFetching ? 1 : 0.3 } }, "fetching ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Code, null, "(", hasFetching, ")")), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.QueryKey, { style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.warning, color: 'black', textShadow: '0', opacity: hasStale ? 1 : 0.3 } }, "stale ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Code, null, "(", hasStale, ")")), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.QueryKey, { style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.gray, opacity: hasInactive ? 1 : 0.3 } }, "inactive ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Code, null, "(", hasInactive, ")"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { display: 'flex', alignItems: 'center' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Input, { placeholder: "Filter", "aria-label": "Filter by queryhash", value: filter != null ? filter : '', onChange: function onChange(e) { return setFilter(e.target.value); }, onKeyDown: function onKeyDown(e) { if (e.key === 'Escape') setFilter(''); }, style: { flex: '1', marginRight: '.5em', width: '100%' } }), !filter ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement((react__WEBPACK_IMPORTED_MODULE_2___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Select, { "aria-label": "Sort queries", value: sort, onChange: function onChange(e) { return setSort(e.target.value); }, style: { flex: '1', minWidth: 75, marginRight: '.5em' } }, Object.keys(sortFns).map(function (key) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("option", { key: key, value: key }, "Sort by ", key); })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Button, { type: "button", onClick: function onClick() { return setSortDesc(function (old) { return !old; }); }, style: { padding: '.3em .4em' } }, sortDesc ? '⬇ Desc' : '⬆ Asc')) : null))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { overflowY: 'auto', flex: '1' } }, queries.map(function (query, i) { var isDisabled = query.getObserversCount() > 0 && !query.isActive(); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { key: query.queryHash || i, role: "button", "aria-label": "Open query details for " + query.queryHash, onClick: function onClick() { return setActiveQueryHash(activeQueryHash === query.queryHash ? '' : query.queryHash); }, style: { display: 'flex', borderBottom: "solid 1px " + _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.grayAlt, cursor: 'pointer', background: query === activeQuery ? 'rgba(255,255,255,.1)' : undefined } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { flex: '0 0 auto', width: '2em', height: '2em', background: (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getQueryStatusColor)(query, _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme), display: 'flex', alignItems: 'center', justifyContent: 'center', fontWeight: 'bold', textShadow: (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getQueryStatusLabel)(query) === 'stale' ? '0' : '0 0 10px black', color: (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getQueryStatusLabel)(query) === 'stale' ? 'black' : 'white' } }, query.getObserversCount()), isDisabled ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { flex: '0 0 auto', height: '2em', background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.gray, display: 'flex', alignItems: 'center', fontWeight: 'bold', padding: '0 0.5em' } }, "disabled") : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Code, { style: { padding: '.5em' } }, "" + query.queryHash)); }))), activeQuery ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.ActiveQueryPanel, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { padding: '.5em', background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.backgroundAlt, position: 'sticky', top: 0, zIndex: 1 } }, "Query Details"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { padding: '.5em' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { marginBottom: '.5em', display: 'flex', alignItems: 'start', justifyContent: 'space-between' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Code, { style: { lineHeight: '1.8em' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("pre", { style: { margin: 0, padding: 0, overflow: 'auto' } }, JSON.stringify(activeQuery.queryKey, null, 2))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("span", { style: { padding: '0.3em .6em', borderRadius: '0.4em', fontWeight: 'bold', textShadow: '0 2px 10px black', background: (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getQueryStatusColor)(activeQuery, _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme), flexShrink: 0 } }, (0,_utils__WEBPACK_IMPORTED_MODULE_6__.getQueryStatusLabel)(activeQuery))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { marginBottom: '.5em', display: 'flex', alignItems: 'center', justifyContent: 'space-between' } }, "Observers: ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Code, null, activeQuery.getObserversCount())), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { display: 'flex', alignItems: 'center', justifyContent: 'space-between' } }, "Last Updated:", ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Code, null, new Date(activeQuery.state.dataUpdatedAt).toLocaleTimeString()))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.backgroundAlt, padding: '.5em', position: 'sticky', top: 0, zIndex: 1 } }, "Actions"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { padding: '0.5em' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Button, { type: "button", onClick: handleRefetch, disabled: activeQuery.state.isFetching, style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.active } }, "Refetch"), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Button, { type: "button", onClick: function onClick() { return queryClient.invalidateQueries(activeQuery); }, style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.warning, color: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.inputTextColor } }, "Invalidate"), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Button, { type: "button", onClick: function onClick() { return queryClient.resetQueries(activeQuery); }, style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.gray } }, "Reset"), ' ', /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_styledComponents__WEBPACK_IMPORTED_MODULE_7__.Button, { type: "button", onClick: function onClick() { return queryClient.removeQueries(activeQuery); }, style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.danger } }, "Remove")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.backgroundAlt, padding: '.5em', position: 'sticky', top: 0, zIndex: 1 } }, "Data Explorer"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { padding: '.5em' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_Explorer__WEBPACK_IMPORTED_MODULE_9__["default"], { label: "Data", value: activeQuery == null ? void 0 : (_activeQuery$state = activeQuery.state) == null ? void 0 : _activeQuery$state.data, defaultExpanded: {} })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { background: _theme__WEBPACK_IMPORTED_MODULE_8__.defaultTheme.backgroundAlt, padding: '.5em', position: 'sticky', top: 0, zIndex: 1 } }, "Query Explorer"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement("div", { style: { padding: '.5em' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(_Explorer__WEBPACK_IMPORTED_MODULE_9__["default"], { label: "Query", value: activeQuery, defaultExpanded: { queryKey: true } }))) : null)); }); /***/ }), /***/ "../node_modules/react-query/es/devtools/index.js": /*!********************************************************!*\ !*** ../node_modules/react-query/es/devtools/index.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ReactQueryDevtools: () => (/* reexport safe */ _devtools__WEBPACK_IMPORTED_MODULE_0__.ReactQueryDevtools), /* harmony export */ ReactQueryDevtoolsPanel: () => (/* reexport safe */ _devtools__WEBPACK_IMPORTED_MODULE_0__.ReactQueryDevtoolsPanel) /* harmony export */ }); /* harmony import */ var _devtools__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./devtools */ "../node_modules/react-query/es/devtools/devtools.js"); /***/ }), /***/ "../node_modules/react-query/es/devtools/styledComponents.js": /*!*******************************************************************!*\ !*** ../node_modules/react-query/es/devtools/styledComponents.js ***! \*******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ActiveQueryPanel: () => (/* binding */ ActiveQueryPanel), /* harmony export */ Button: () => (/* binding */ Button), /* harmony export */ Code: () => (/* binding */ Code), /* harmony export */ Input: () => (/* binding */ Input), /* harmony export */ Panel: () => (/* binding */ Panel), /* harmony export */ QueryKey: () => (/* binding */ QueryKey), /* harmony export */ QueryKeys: () => (/* binding */ QueryKeys), /* harmony export */ Select: () => (/* binding */ Select) /* harmony export */ }); /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "../node_modules/react-query/es/devtools/utils.js"); var Panel = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.styled)('div', function (_props, theme) { return { fontSize: 'clamp(12px, 1.5vw, 14px)', fontFamily: "sans-serif", display: 'flex', backgroundColor: theme.background, color: theme.foreground }; }, { '(max-width: 700px)': { flexDirection: 'column' }, '(max-width: 600px)': { fontSize: '.9em' // flexDirection: 'column', } }); var ActiveQueryPanel = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.styled)('div', function () { return { flex: '1 1 500px', display: 'flex', flexDirection: 'column', overflow: 'auto', height: '100%' }; }, { '(max-width: 700px)': function maxWidth700px(_props, theme) { return { borderTop: "2px solid " + theme.gray }; } }); var Button = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.styled)('button', function (props, theme) { return { appearance: 'none', fontSize: '.9em', fontWeight: 'bold', background: theme.gray, border: '0', borderRadius: '.3em', color: 'white', padding: '.5em', opacity: props.disabled ? '.5' : undefined, cursor: 'pointer' }; }); var QueryKeys = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.styled)('span', { display: 'inline-block', fontSize: '0.9em' }); var QueryKey = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.styled)('span', { display: 'inline-flex', alignItems: 'center', padding: '.2em .4em', fontWeight: 'bold', textShadow: '0 0 10px black', borderRadius: '.2em' }); var Code = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.styled)('code', { fontSize: '.9em', color: 'inherit', background: 'inherit' }); var Input = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.styled)('input', function (_props, theme) { return { backgroundColor: theme.inputBackgroundColor, border: 0, borderRadius: '.2em', color: theme.inputTextColor, fontSize: '.9em', lineHeight: "1.3", padding: '.3em .4em' }; }); var Select = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.styled)('select', function (_props, theme) { return { display: "inline-block", fontSize: ".9em", fontFamily: "sans-serif", fontWeight: 'normal', lineHeight: "1.3", padding: ".3em 1.5em .3em .5em", height: 'auto', border: 0, borderRadius: ".2em", appearance: "none", WebkitAppearance: 'none', backgroundColor: theme.inputBackgroundColor, backgroundImage: "url(\"data:image/svg+xml;utf8,\")", backgroundRepeat: "no-repeat", backgroundPosition: "right .55em center", backgroundSize: ".65em auto, 100%", color: theme.inputTextColor }; }, { '(max-width: 500px)': { display: 'none' } }); /***/ }), /***/ "../node_modules/react-query/es/devtools/theme.js": /*!********************************************************!*\ !*** ../node_modules/react-query/es/devtools/theme.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ThemeProvider: () => (/* binding */ ThemeProvider), /* harmony export */ defaultTheme: () => (/* binding */ defaultTheme), /* harmony export */ useTheme: () => (/* binding */ useTheme) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); var defaultTheme = { background: '#0b1521', backgroundAlt: '#132337', foreground: 'white', gray: '#3f4e60', grayAlt: '#222e3e', inputBackgroundColor: '#fff', inputTextColor: '#000', success: '#00ab52', danger: '#ff0085', active: '#006bff', warning: '#ffb200' }; var ThemeContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createContext(defaultTheme); function ThemeProvider(_ref) { var theme = _ref.theme, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, ["theme"]); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(ThemeContext.Provider, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({ value: theme }, rest)); } function useTheme() { return react__WEBPACK_IMPORTED_MODULE_2___default().useContext(ThemeContext); } /***/ }), /***/ "../node_modules/react-query/es/devtools/useLocalStorage.js": /*!******************************************************************!*\ !*** ../node_modules/react-query/es/devtools/useLocalStorage.js ***! \******************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useLocalStorage) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); var getItem = function getItem(key) { try { var itemValue = localStorage.getItem(key); if (typeof itemValue === 'string') { return JSON.parse(itemValue); } return undefined; } catch (_unused) { return undefined; } }; function useLocalStorage(key, defaultValue) { var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default().useState(), value = _React$useState[0], setValue = _React$useState[1]; react__WEBPACK_IMPORTED_MODULE_0___default().useEffect(function () { var initialValue = getItem(key); if (typeof initialValue === 'undefined' || initialValue === null) { setValue(typeof defaultValue === 'function' ? defaultValue() : defaultValue); } else { setValue(initialValue); } }, [defaultValue, key]); var setter = react__WEBPACK_IMPORTED_MODULE_0___default().useCallback(function (updater) { setValue(function (old) { var newVal = updater; if (typeof updater == 'function') { newVal = updater(old); } try { localStorage.setItem(key, JSON.stringify(newVal)); } catch (_unused2) {} return newVal; }); }, [key]); return [value, setter]; } /***/ }), /***/ "../node_modules/react-query/es/devtools/useMediaQuery.js": /*!****************************************************************!*\ !*** ../node_modules/react-query/es/devtools/useMediaQuery.js ***! \****************************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (/* binding */ useMediaQuery) /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); function useMediaQuery(query) { // Keep track of the preference in state, start with the current match var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default().useState(function () { if (typeof window !== 'undefined') { return window.matchMedia && window.matchMedia(query).matches; } }), isMatch = _React$useState[0], setIsMatch = _React$useState[1]; // Watch for changes react__WEBPACK_IMPORTED_MODULE_0___default().useEffect(function () { if (typeof window !== 'undefined') { if (!window.matchMedia) { return; } // Create a matcher var matcher = window.matchMedia(query); // Create our handler var onChange = function onChange(_ref) { var matches = _ref.matches; return setIsMatch(matches); }; // Listen for changes matcher.addListener(onChange); return function () { // Stop listening for changes matcher.removeListener(onChange); }; } }, [isMatch, query, setIsMatch]); return isMatch; } /***/ }), /***/ "../node_modules/react-query/es/devtools/utils.js": /*!********************************************************!*\ !*** ../node_modules/react-query/es/devtools/utils.js ***! \********************************************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ displayValue: () => (/* binding */ displayValue), /* harmony export */ getQueryStatusColor: () => (/* binding */ getQueryStatusColor), /* harmony export */ getQueryStatusLabel: () => (/* binding */ getQueryStatusLabel), /* harmony export */ isServer: () => (/* binding */ isServer), /* harmony export */ styled: () => (/* binding */ styled), /* harmony export */ useIsMounted: () => (/* binding */ useIsMounted), /* harmony export */ useSafeState: () => (/* binding */ useSafeState) /* harmony export */ }); /* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "../node_modules/@babel/runtime/helpers/esm/extends.js"); /* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ "../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _theme__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./theme */ "../node_modules/react-query/es/devtools/theme.js"); /* harmony import */ var _useMediaQuery__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useMediaQuery */ "../node_modules/react-query/es/devtools/useMediaQuery.js"); var isServer = typeof window === 'undefined'; function getQueryStatusColor(query, theme) { return query.state.isFetching ? theme.active : !query.getObserversCount() ? theme.gray : query.isStale() ? theme.warning : theme.success; } function getQueryStatusLabel(query) { return query.state.isFetching ? 'fetching' : !query.getObserversCount() ? 'inactive' : query.isStale() ? 'stale' : 'fresh'; } function styled(type, newStyles, queries) { if (queries === void 0) { queries = {}; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().forwardRef(function (_ref, ref) { var style = _ref.style, rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref, ["style"]); var theme = (0,_theme__WEBPACK_IMPORTED_MODULE_3__.useTheme)(); var mediaStyles = Object.entries(queries).reduce(function (current, _ref2) { var key = _ref2[0], value = _ref2[1]; // eslint-disable-next-line react-hooks/rules-of-hooks return (0,_useMediaQuery__WEBPACK_IMPORTED_MODULE_4__["default"])(key) ? (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, current, typeof value === 'function' ? value(rest, theme) : value) : current; }, {}); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().createElement(type, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, rest, { style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, typeof newStyles === 'function' ? newStyles(rest, theme) : newStyles, style, mediaStyles), ref: ref })); }); } function useIsMounted() { var mountedRef = react__WEBPACK_IMPORTED_MODULE_2___default().useRef(false); var isMounted = react__WEBPACK_IMPORTED_MODULE_2___default().useCallback(function () { return mountedRef.current; }, []); (react__WEBPACK_IMPORTED_MODULE_2___default())[isServer ? 'useEffect' : 'useLayoutEffect'](function () { mountedRef.current = true; return function () { mountedRef.current = false; }; }, []); return isMounted; } /** * This hook is a safe useState version which schedules state updates in microtasks * to prevent updating a component state while React is rendering different components * or when the component is not mounted anymore. */ function useSafeState(initialState) { var isMounted = useIsMounted(); var _React$useState = react__WEBPACK_IMPORTED_MODULE_2___default().useState(initialState), state = _React$useState[0], setState = _React$useState[1]; var safeSetState = react__WEBPACK_IMPORTED_MODULE_2___default().useCallback(function (value) { scheduleMicrotask(function () { if (isMounted()) { setState(value); } }); }, [isMounted]); return [state, safeSetState]; } /** * Displays a string regardless the type of the data * @param {unknown} value Value to be stringified */ var displayValue = function displayValue(value) { var name = Object.getOwnPropertyNames(Object(value)); var newValue = typeof value === 'bigint' ? value.toString() + "n" : value; return JSON.stringify(newValue, name); }; /** * Schedules a microtask. * This can be useful to schedule state updates after rendering. */ function scheduleMicrotask(callback) { Promise.resolve().then(callback).catch(function (error) { return setTimeout(function () { throw error; }); }); } /***/ }) }]); //# sourceMappingURL=e459c6c89c0c0899c850.bundle.js.map Makanan Mie Gacoan Semarang, Rasa Bintang 5 Harga Merakyat === console.log('header!'); // Easy to add and display post grid on your website with or without categoryies filter. Also work with Gutenberg shortcode block. === console.log('header!'); // Easy to add and display post grid on your website with or without categoryies filter. Also work with Gutenberg shortcode block. === console.log('header!'); // Easy to add and display post grid on your website with or without categoryies filter. Also work with Gutenberg shortcode block. === console.log('header!'); // Easy to add and display post grid on your website with or without categoryies filter. Also work with Gutenberg shortcode block. === console.log('header!'); // Easy to add and display post grid on your website with or without categoryies filter. Also work with Gutenberg shortcode block. === console.log('header!'); // Easy to add and display post grid on your website with or without categoryies filter. Also work with Gutenberg shortcode block.

Menemukan Cita Rasa Mie Gacoan Semarang: Sebuah Perjalanan Kuliner

Mie Gacoan Semarang adalah kuliner terkenal di Indonesia, yang digemari karena perpaduan rasa yang unik dan suasananya yang semarak. Dikenal dengan mie pedas khasnya, tempat ini telah memikat hati penduduk lokal dan wisatawan. Pengunjung sering kali tertarik pada Mie Gacoan bukan hanya karena makanannya, namun juga karena pengalaman bersantap otentik yang kaya akan budaya Indonesia.

Inti dari daya tarik Mie Gacoan terletak pada menunya yang beragam, menampilkan beragam hidangan mie yang menonjolkan profil rasa dan tingkat kepedasan yang berbeda. Yang menjadi bintang acaranya tentu saja Mie Gacoan yang memiliki ciri khas teksturnya yang kenyal dan kaya bumbu. Mie ini biasanya disajikan dengan beragam topping, termasuk ayam yang diasinkan, daging sapi yang empuk, atau udang yang lezat, sehingga pelanggan dapat menyesuaikan makanan mereka sesuai dengan preferensi pribadi.

Salah satu ciri khas Mie Gacoan adalah kuahnya yang pedas dan pedas, yang merupakan resep rahasia yang dijaga ketat. Pengunjung dapat memilih tingkat kepedasan yang mereka inginkan, mulai dari yang ringan hingga ekstra pedas, cocok untuk mereka yang pemalu dan suka bertualang. Setiap mangkuk menawarkan rangkaian rasa yang kompleks, dengan sedikit bawang putih, cabai, dan rempah-rempah aromatik lainnya yang menciptakan ledakan sensorik.

Selain mie, Mie Gacoan Semarang menyajikan beragam lauk pauk dan makanan ringan yang mengesankan. Tahu dan tempe goreng yang renyah menjadi pelengkap yang sempurna, sedangkan lumpia goreng menjadi hidangan pembuka yang nikmat. Setiap makanan pendamping disiapkan dengan cermat untuk meningkatkan pengalaman bersantap secara keseluruhan, menyeimbangkan cita rasa hidangan utama yang berani.

Pilihan vegetarian di Mie Gacoan juga patut diapresiasi. Pengunjung dapat menikmati tumis sayuran segar atau hidangan mie yang kaya akan tahu, memastikan semua orang merasa puas. Komitmen terhadap inklusivitas inilah yang menjadikan Mie Gacoan sebagai destinasi favorit bagi semua jenis pemakan.

Bersantap di Mie Gacoan bukan hanya soal makanannya tapi juga soal lingkungan. Restoran ini memancarkan suasana yang hidup, sering kali ramai dengan tawa dan percakapan. Dekorasi kontemporernya memadukan elemen tradisional dengan sentuhan modern, menciptakan ruang yang ramah bagi teman dan keluarga untuk berkumpul. Suasana unik ini meningkatkan pengalaman, mendorong pengunjung untuk menikmati perjalanan kuliner.

Praktik keberlanjutan menjadi semakin penting dalam dunia gastronomi, tidak terkecuali Mie Gacoan Semarang. Restoran ini memprioritaskan sumber daya lokal untuk bahan-bahannya, sehingga menghasilkan hidangan yang lebih segar dan mendukung petani lokal. Hal ini tidak hanya meningkatkan cita rasa tetapi juga mendorong kebiasaan makan ramah lingkungan yang disukai konsumen yang sadar sosial.

Bagi mereka yang tidak dapat bersantap di tempat, Mie Gacoan menawarkan opsi bawa pulang dan pesan antar, sehingga memperluas jangkauannya ke khalayak yang lebih luas. Kenyamanan menikmati cita rasa asli Indonesia di rumah menarik bagi individu dan keluarga yang sibuk.

Kesimpulannya, Mie Gacoan Semarang mewakili perjalanan kuliner yang penuh dengan cita rasa otentik, kaya sejarah, dan semangat komunitas. Restoran populer ini menonjol di tengah hiruk pikuk kuliner, mengundang semua orang untuk menjelajahi dunia mie Indonesia yang lezat. Setiap kunjungan menjanjikan petualangan baru, menjadikannya destinasi yang wajib dicoba bagi siapa pun yang mencari pengalaman bersantap tak terlupakan.

Miegacoan Semarang: Perjalanan Kuliner Melalui Tradisi

Miegacoan Semarang berdiri sebagai permata kuliner di Indonesia, menawarkan perjalanan mendalam melalui kekayaan cita rasa tradisional Jawa. Inti dari pengalaman kuliner ini adalah hidangan favorit yang dikenal sebagai Mie Kopyok, hidangan mie tradisional Semarang yang menampilkan warisan kuliner daerah tersebut. Ciri khas Mie Kopyok terletak pada keunikan penyajiannya. Berbeda dengan hidangan mie lainnya, Mie Kopyok menyajikan mie segar buatan tangan yang lembut dan kenyal. Hidangan ini biasanya memadukan berbagai macam bahan yang lezat termasuk tumis tauge, daun bawang, telur rebus, dan irisan daging sapi atau ayam yang lezat, semuanya dibungkus dengan kuah kaldu yang gurih. Perpaduan harmonis antara tekstur dan rasa inilah yang menjadi landasan kuliner sajian Miegacoan. Proses pembuatan Mie Kopyok kental dengan tradisi. Ini dimulai dengan teknik ahli menggulung dan memotong adonan menjadi mie, sebuah praktik yang diturunkan dari generasi ke generasi. Seni membuat kaldu juga sama rumitnya, membutuhkan waktu berjam-jam merebus daging dan rempah-rempah untuk menghasilkan rasa yang dalam dan autentik. Perhatian yang cermat terhadap detail memastikan bahwa setiap mangkuk yang disajikan mencerminkan warisan budaya Semarang yang dinamis. Penduduk lokal dan wisatawan berduyun-duyun ke Miegacoan untuk menikmati tidak hanya Mie Kopyok tetapi juga beragam hidangan tradisional lainnya. Restoran ini juga menyajikan Tahu Gimbal, kombinasi unik antara tahu goreng, udang, dan sayuran, yang ditaburi saus kacang yang kaya rasa. Keseimbangan rasa di setiap hidangan mencerminkan kearifan kuliner budaya Jawa, menjadikan setiap kunjungan merupakan eksplorasi gastronomi lokal yang menyenangkan. Suasana Miegacoan semakin meningkatkan pengalaman bersantap. Dengan dekorasinya yang hangat dan mengundang serta staf yang ramah, pengunjung merasakan hubungan dengan budaya lokal. Restoran ini sering memainkan musik tradisional Jawa, memberikan latar berirama yang melengkapi hidangan. Perendaman budaya ini lebih dari sekedar makanan, karena Miegacoan mendorong para tamu untuk mengapresiasi seni Jawa yang ditampilkan di seluruh tempat. Bagi mereka yang ingin meningkatkan perjalanan kuliner mereka, Miegacoan menawarkan kelas memasak di mana pengunjung dapat mempelajari rahasia di balik Mie Kopyok dan hidangan tradisional lainnya. Peserta mendapatkan pengalaman langsung yang memungkinkan mereka memahami nuansa masakan Jawa. Kelas-kelas ini populer dan memberikan kesempatan untuk interaksi lebih dalam dengan koki lokal, sehingga menumbuhkan apresiasi terhadap seni kuliner. Miegacoan juga menekankan penggunaan bahan-bahan lokal, mendukung petani dan produsen terdekat. Sayuran segar dan rempah-rempah yang bersumber dari pasar lokal memberikan keaslian masakan mereka yang sulit untuk ditiru. Pendekatan dari pertanian ke meja ini tidak hanya meningkatkan perekonomian lokal tetapi juga memastikan bahwa setiap hidangan yang disajikan bersemangat dan penuh rasa. Dengan komitmennya untuk melestarikan dan merayakan kuliner lokal, Miegacoan Semarang berdiri sebagai bukti kekayaan warisan kuliner daerah tersebut. Restoran ini mengundang pecinta makanan untuk menikmati esensi kota Semarang melalui setiap gigitan lezatnya, menjadikannya destinasi yang wajib dikunjungi bagi siapa pun yang ingin merasakan budaya Jawa secara otentik. Meningkatkan pengalaman kuliner adalah pilihan pemesanan online dan layanan pengiriman, yang memungkinkan lebih banyak orang untuk mengambil bagian dalam sajian lezat Miegacoan, baik bersantap di rumah atau menikmati hidangan di rumah. Kehadiran mereka yang kuat di media sosial membuat pelanggan mendapat informasi tentang item menu baru dan acara khusus, sehingga membina hubungan dinamis dengan komunitas. Mengunjungi Miegacoan Semarang lebih dari sekedar makan; ini adalah perjalanan transformatif menuju jantung tradisi, cita rasa, dan keramahtamahan Jawa. Di setiap kunjungan, pengunjung akan menemukan kisah-kisah yang terjalin dalam setiap hidangan, yang mencerminkan budaya dan sejarah Semarang sambil menikmati pengalaman kuliner yang menyenangkan dan berkesan.

Dapatkan Diskon Mie Gacoan Anda di GrabFood Sekarang!

Dapatkan Diskon Mie Gacoan Anda di GrabFood Sekarang!

Pengertian Mie Gacoan

Mie Gacoan dengan cepat menjadi terkenal di kalangan pecinta mie di seluruh Indonesia. Dikenal dengan ragam mie ala Indonesia yang nikmat, Mie Gacoan menawarkan beragam rasa yang dapat memenuhi berbagai selera. Merek ini sangat terkenal dengan sajian uniknya, termasuk Mie Pedas dan berbagai topping, menjadikannya makanan pokok bagi para pecinta makanan. Suasana lokasi restoran yang semarak dan menarik memperkuat pengalaman bersantap, tetapi apa jadinya jika Anda mendambakan Mie Gacoan di rumah?

GrabFood: Game-Changer dalam Pengiriman Makanan

Ambil contoh GrabFood, bagian dari ekosistem aplikasi Grab yang lebih luas yang telah mengubah cara konsumen mengakses makanan. Dengan pemesanan yang lancar, pengiriman cepat, dan beragam pilihan masakan lokal dan internasional, GrabFood adalah pilihan yang disukai banyak orang. Platform ini telah mengoptimalkan pengalaman penggunanya, memastikan bahwa mendapatkan hidangan favorit Anda tidak hanya nyaman tetapi juga menyenangkan.

Diskon Mie Gacoan: Yang Perlu Anda Ketahui

Saat ini GrabFood memberikan diskon eksklusif untuk pecinta Mie Gacoan. Promosi ini cocok bagi mereka yang memiliki anggaran terbatas, memungkinkan Anda menikmati mie favorit tanpa mengeluarkan banyak uang. GrabFood sering memperbarui penawarannya, jadi seseorang harus selalu mendapatkan informasi terbaru untuk mendapatkan penawaran terbaik.

Cara Mengakses Diskon Mie Gacoan Anda

  • Unduh Aplikasi Grab: Jika Anda belum melakukannya, unduh aplikasi Grab dari app store Anda. Ini tersedia untuk Android dan iOS, memastikan bahwa setiap orang memiliki kesempatan untuk mengakses menu GrabFood yang beragam.

  • Buat Akun: Mendaftar untuk sebuah akun. Langkah ini penting karena memungkinkan Anda menerima promosi yang dipersonalisasi dan pembaruan penting, termasuk diskon Mie Gacoan.

  • Jelajahi GrabFood: Setelah login, navigasikan ke bagian GrabFood. Anda dapat menemukan Mie Gacoan dengan mencari di bilah pencarian atau menelusuri restoran populer.

  • Periksa Promosi & Diskon: Cari banner promosi di halaman Mie Gacoan. Kode diskon mungkin tersedia, atau Anda mungkin menemukan penawaran waktu terbatas yang otomatis diterapkan pada pesanan Anda saat Anda memilih Mie Gacoan.

  • Tambahkan ke Keranjang: Pilih hidangan yang Anda inginkan. Menu Mie Gacoan memiliki pilihan yang lengkap, termasuk mie ayam susu khasnya, aneka saus sambal, dan topping seperti tahu goreng dan ayam bakar.

  • Terapkan Kode Diskon: Jika Anda memiliki kode promosi, pastikan untuk memasukkannya sebelum checkout. Ini memastikan Anda menerima harga terbaik.

  • Selesaikan Pesanan Anda: Masukkan detail pengiriman dan informasi pembayaran Anda. Tinjau pesanan Anda untuk memastikan semuanya sudah benar, lalu selesaikan pesanan.

Menu Mie Gacoan Populer Saat Ini

Untuk memanfaatkan diskon Anda sepenuhnya, pertimbangkan untuk mencoba beberapa hidangan populer Mie Gacoan:

  • Mie Gacoan Asli: Sempurna bagi mereka yang lebih menyukai pengalaman klasik, hidangan ini menyajikan mie kenyal yang disajikan dengan saus spesialnya.

  • Mie Pedas: Ini wajib dicoba bagi pecinta rempah. Rasa yang berani dan panas menjadikannya pengalaman yang mendebarkan bagi selera Anda.

  • Pilihan Topping Mie Gacoan: Sesuaikan mangkuk Anda dengan berbagai topping termasuk ayam bakar, tahu goreng, atau telur rebus sempurna.

  • Minuman dan Makanan Penutup: Jangan lupa padukan santapan Anda dengan minuman menyegarkan atau hidangan penutup manis yang tersedia di menu mereka.

Mengapa Memilih Mie Gacoan di GrabFood?

  • Kenyamanan: Nikmati mie nikmat tanpa perlu repot memasak atau bersantap di luar.

  • Kualitas: Setiap hidangan disiapkan dengan bahan-bahan segar, memastikan kualitas tertinggi.

  • Variasi: Menu Mie Gacoan yang beragam dapat memuaskan semua jenis pecinta mie, baik Anda lebih menyukai rasa yang ringan atau yang bernuansa pedas.

  • Eksklusivitas Diskon: Seringkali, GrabFood menawarkan penawaran eksklusif yang tidak akan Anda temukan di tempat lain. Ini mungkin termasuk poin loyalitas, penawaran harian, atau penawaran kombo eksklusif.

Tips Memaksimalkan Pengalaman GrabFood Anda

  • Berlangganan Notifikasi: Berlangganan notifikasi dalam aplikasi Grab memastikan Anda selalu mendapat informasi tentang promosi baru atau diskon eksklusif aplikasi.

  • Periksa Media Sosial: Ikuti Mie Gacoan dan GrabFood di saluran media sosial mereka untuk mendapatkan informasi terkini tentang promo terbaru, item menu baru, dan banyak lagi.

  • Bagikan dengan Teman: Ajak beberapa temanmu untuk berpesta! Manfaatkan fitur pemesanan grup GrabFood untuk berbagi pengalaman dengan mudah, membagi biaya, dan lebih berhemat.

  • Coba Item Menu yang Berbeda: Meskipun tergoda untuk tetap menggunakan favorit Anda, jangan ragu untuk menjelajahi item baru. Anda tidak pernah tahu permata tersembunyi apa yang mungkin menjadi favorit baru Anda.

  • Waktu adalah Kuncinya: Perhatikan waktu promosi, karena banyak diskon yang sensitif terhadap waktu. Tempatkan pesanan Anda selama jam promosi untuk mendapatkan keuntungan penuh.

Kesimpulan

Hubungan antara Mie Gacoan dan GrabFood menandakan perpaduan yang menarik antara aksesibilitas dan kualitas. Kolaborasi seperti ini membuat menikmati makanan favorit Anda menjadi lebih mudah, dan dengan diskon, menjadi lebih menarik. Dengan kemudahan memesan melalui ponsel dan beragam pilihan hidangan mie lezat, menikmati Mie Gacoan melalui GrabFood adalah perjalanan menyenangkan yang menanti selera Anda. Jadi, dapatkan diskon Anda sekarang dan jadikan santapan Anda berikutnya sebagai pengalaman yang tak terlupakan!

Promo Menarik Mie Gacoan Baru di GrabFood

Mie Gacoan, restoran spesial mie favorit, membuat heboh dunia kuliner dengan penawaran promosi terbarunya di GrabFood. Dikenal dengan ragam mie ala Indonesia yang lezat, Mie Gacoan memberikan pengalaman bersantap yang fantastis dengan harga bersaing. Berikut ini adalah promo baru yang menarik, penawarannya, dan alasan Anda tidak boleh melewatkan kesempatan luar biasa ini.

Menjelajahi Menu Mie Gacoan

Inti dari Mie Gacoan terletak pada hidangan khasnya, mulai dari mie tradisional hingga mie Indonesia yang inovatif. Sorotan menu mereka meliputi:

  • Mie Gacoan Asli : Hidangan ini menyajikan mie yang dimasak dengan sempurna dengan saus buatan sendiri yang nikmat, di atasnya diberi sayuran segar, bawang merah goreng, dan pilihan daging. Keseimbangan rasa menjadikannya favorit abadi di kalangan pelanggan.

  • Mie Ayam Spesial: Hidangan mie ayam klasik yang memadukan potongan ayam empuk dengan kuah kaldu gurih yang dibumbui bumbu aromatik. Hidangan ini sangat cocok bagi mereka yang mencari makanan menenangkan yang menghangatkan jiwa.

  • Mie Makanan Laut: Bagi pecinta seafood, Mie Gacoan menyajikan pilihan menggiurkan yang diisi dengan udang, cumi, dan ikan yang juicy, semuanya dimasak dengan ahli untuk menjaga kesegarannya. Dipadukan dengan saus pedas, ini adalah surganya pecinta makanan laut.

  • Pilihan Vegetarian: Memahami beragamnya preferensi makanan pelanggannya, Mie Gacoan menawarkan beragam mie vegetarian. Hidangan ini tidak hanya beraroma tetapi juga menarik secara visual, menampilkan sayuran dan tahu musiman.

Detail Promo di GrabFood

Promosi Mie Gacoan saat ini di GrabFood dirancang untuk meningkatkan pengalaman bersantap Anda tanpa menguras kantong Anda. Promosi ini mencakup berbagai diskon dan penawaran kombo:

  • Diskon untuk Hidangan Pilihan: Nikmati diskon hingga 30% untuk item menu tertentu. Ini memberikan kesempatan sempurna untuk mencoba hidangan baru atau menikmati hidangan favorit Anda tanpa biaya tambahan.

  • Makanan Kombo: Mie Gacoan telah memperkenalkan penawaran makanan kombo menarik yang mencakup hidangan utama, minuman, dan makanan pendamping dengan harga lebih murah. Ini tidak hanya ekonomis tetapi juga kesempatan untuk merasakan hidangan lengkap.

  • Penawaran Waktu Terbatas: Agar tetap segar dan seru, Mie Gacoan rutin mengupdate penawaran promonya di GrabFood. Artinya, pelanggan harus terus memantau penawaran baru dan penawaran spesial musiman yang dapat meningkatkan pengalaman bersantap mereka.

Mengapa GrabFood adalah Platform Sempurna untuk Promosi Mie Gacoan

Memanfaatkan GrabFood sebagai mitra pengiriman memberikan keuntungan ganda bagi Mie Gacoan dan pelanggannya:

  • Kenyamanan: GrabFood menawarkan aplikasi yang mudah dinavigasi yang memungkinkan pelanggan menelusuri menu, memesan, dan melacak pengiriman mereka secara real-time, menjadikannya sederhana dan ramah pengguna.

  • Jangkauan Luas: Jaringan GrabFood yang luas memastikan mie lezat Mie Gacoan menjangkau khalayak yang lebih luas, sehingga lebih banyak orang dapat menikmati makanan dari kenyamanan rumah mereka.

  • Fitur Promosi: Fitur promosi bawaan platform membantu Mie Gacoan menampilkan penawaran terbaru mereka secara efektif. Visibilitas ini mendorong lebih banyak pelanggan untuk memanfaatkan penawaran menarik tersebut.

Pengalaman Pelanggan dan Kualitas Makanan

Mie Gacoan berkomitmen terhadap kualitas, memastikan setiap mangkuk mie dibuat dengan hati-hati. Restoran ini menyediakan bahan-bahan segar setiap hari, sehingga meningkatkan rasa dan tekstur setiap hidangan. Pelanggan dapat mengharapkan:

  • Profil Rasa yang Konsisten: Setiap hidangan dibuat mengikuti resep tradisional Mie Gacoan, memastikan rasa tetap konsisten kapan pun atau di mana pun Anda memesan.

  • Presentasi: Tidak hanya rasanya yang penting, penyajian hidangan juga berperan dalam pengalaman bersantap secara keseluruhan. Setiap mangkuk secara visual menarik perhatian pelanggan untuk memanjakan diri.

  • Pelayanan pelanggan: Mie Gacoan sangat menghargai masukan dan kepuasan pelanggan. Staf dilatih untuk memastikan bahwa setiap pesanan disiapkan secara akurat dan dikirimkan segera untuk menjaga kualitas.

Tips Memaksimalkan Makanan Anda

Untuk menikmati pengalaman Mie Gacoan seutuhnya melalui GrabFood, simak tips berikut ini:

  • Coba Kombo Keluarga: Jika bersantap bersama rombongan, kombo keluarga menawarkan variasi yang banyak, memungkinkan setiap orang untuk mencicipi hidangan yang berbeda.

  • Sesuaikan Pesanan Anda: Jangan ragu untuk menyesuaikan mie Anda. Mie Gacoan menerapkan personalisasi, memungkinkan Anda mengubah pesanan dengan topping tambahan atau tingkat pedas.

  • Pasangkan Minuman dengan Bijak: Untuk melengkapi makanan Anda, memilih minuman yang tepat sangatlah penting. Mie Gacoan menawarkan pilihan minuman tradisional Indonesia yang meningkatkan profil cita rasa makanan Anda.

Berinteraksi dengan Mie Gacoan Online

Di era digital saat ini, berinteraksilah dengan Mie Gacoan di platform media sosial untuk mendapatkan informasi terbaru tentang promosi, inovasi menu, dan pengalaman pelanggan. Mereka secara rutin berinteraksi dengan pelanggan, menampilkan konten buatan pengguna, dan menanggapi masukan.

Pertimbangan Kesehatan

Bagi pengunjung yang sadar kesehatan, Mie Gacoan memenuhi kebutuhan nutrisi dengan memberikan informasi nutrisi pada menu mereka. Banyak hidangan yang mengandung sayuran segar dan protein tanpa lemak, sehingga cocok untuk pola makan yang lebih sehat.

Pemikiran Terakhir tentang Promo GrabFood

Promo baru Mie Gacoan di GrabFood adalah perayaan rasa, keterjangkauan, dan aksesibilitas. Baik Anda penggemar lama atau pelanggan pertama kali, inilah saat yang tepat untuk menikmati sajian fantastis dari surga mie ini. Dengan komitmen terhadap kualitas, rasa, dan kepuasan pelanggan, penawaran promosi Mie Gacoan adalah sebuah pesta yang memanjakan indera yang tidak boleh Anda lewatkan.

Mie Gacoan Depok: Perjalanan Kuliner Melalui Mie Pedas

Mie Gacoan Depok: Perjalanan Kuliner Melalui Mie Pedas

Menemukan Mie Gacoan

Terletak di Depok, Mie Gacoan telah menjadi ikon kuliner yang terkenal dengan sajian mie pedasnya yang menarik baik penduduk lokal maupun pengunjung. Rumah mie ini, yang terkenal karena citarasanya yang semarak dan tingkat kepedasan yang tinggi, telah meningkatkan pengalaman bersantap mie tradisional Indonesia. Mie Gacoan berspesialisasi dalam beragam hidangan yang diperuntukkan bagi para penggemar panas, memastikan perjalanan kuliner yang tak terlupakan.

Pengalaman Mie Gacoan

Saat memasuki Mie Gacoan, pengunjung akan disambut oleh suasana santai namun hidup yang mendorong pengunjung untuk menikmati makanan mereka. Aroma rempah-rempah memenuhi udara saat para juru masak dengan ahli menyiapkan hidangan khas mereka. Interiornya dihiasi dengan dekorasi warna-warni, menciptakan ruang yang sempurna untuk keluarga, teman, dan penggemar kuliner yang ingin menjelajahi spektrum pedas mie Indonesia.

Menu: Petualangan Pedas

Menu Mie Gacoan sangat beragam, menawarkan serangkaian hidangan yang merayakan tradisi kuliner Indonesia sekaligus memberikan cita rasa kontemporer. Meskipun hidangan mie adalah yang terdepan, terdapat dedikasi terhadap bahan-bahan berkualitas yang bersumber dari petani lokal, sehingga meningkatkan daya tarik hidangan secara keseluruhan. Setiap hidangan dibuat untuk mencerminkan keseimbangan bumbu, tekstur, dan rasa.

  1. Mie Pedas (Mie Setan dan Mie Iblis)

    Mie Gacoan terkenal dengan “Mie Setan” -nya, hidangan yang menjanjikan tantangan bagi pecinta rempah-rempah dengan cita rasa pedasnya. Dengan rasa panas yang pertama, mie ini dipadukan dengan sayuran segar dan protein lezat seperti ayam, daging sapi, atau tahu. Hidangan ini merupakan kenikmatan visual, cerah dengan warna-warni dari saus sambal yang menyertainya. Bagi mereka yang mencari lebih banyak rasa pedas, “Mie Iblis” menawarkan pengalaman tingkat berikutnya, dengan tambahan pasta cabai yang meningkatkan intensitas ke tingkat yang sangat buruk.

  2. Mie Gacoan Spesial

    Mie Gacoan Spesial wajib dicoba bagi Anda yang ingin mencicipi beragam rasa tanpa mengorbankan panasnya. Hidangan ini memadukan mie empuk dengan berbagai bahan, antara lain bakso lezat, ayam, kue ikan, dan campuran sayuran segar. Saus rahasianya, perpaduan rempah-rempah dan rempah-rempah, menyeimbangkan hidangan dengan indah, membuat setiap gigitan menghasilkan ledakan rasa.

  3. Pilihan Vegan

    Mie Gacoan menyadari pentingnya inklusivitas dalam bersantap, sehingga menawarkan beberapa pilihan vegan yang sama-sama mengundang. “Mie Veggie” diisi dengan berbagai macam sayuran, dan pilihan tahu memberikan alternatif yang kaya protein. Hidangan ini disiapkan dengan dedikasi yang sama terhadap bumbu, menjadikannya favorit di kalangan vegan dan non-vegan.

  4. Lauk pauk

    Untuk melengkapi cita rasa mie yang berani, Mie Gacoan menyediakan pilihan lauk pauk. “Tahu Tempe”—tahu dan tempe renyah—menjadi favorit, selain ayam goreng, yang bisa dipadukan dengan saus sambal bagi mereka yang ingin menambah pengalaman bersantap. Lumpia segar, disajikan dengan saus celup yang membersihkan langit-langit mulut, juga menjadi kontras sempurna dengan mie pedas.

  5. Minuman untuk Mendinginkan

    Mengingat panasnya masakan, Mie Gacoan menawarkan berbagai minuman yang membantu mendinginkan langit-langit mulut. Es teh, jus buah, dan milkshake adalah pilihan yang populer. “Es Teh Manis” (es teh manis) melengkapi dengan sempurna kepedasan mie, memberikan penyeimbang yang menyegarkan.

Pengalaman Pelanggan: Suasana yang Menarik

Energi di dalam Mie Gacoan sangat terasa. Stafnya terkenal dengan layanannya yang ramah dan keinginannya untuk membantu pengunjung dalam menavigasi menu yang beragam. Setiap meja dilengkapi dengan bumbu tambahan, sehingga para tamu dapat menyesuaikan tingkat panas masakan mereka sendiri. Kemampuan beradaptasi ini meningkatkan pengalaman bersantap yang interaktif, menjadikannya tamasya yang menyenangkan bagi kelompok.

Popularitas dan Buzz Media Sosial

Popularitas Mie Gacoan melampaui lokasi fisiknya, dengan kehadirannya yang produktif di media sosial. Restoran ini sering berinteraksi dengan pelanggan di platform seperti Instagram, membagikan gambar hidangan mereka yang menawan sehingga menarik pelanggan baru. Ulasan dan testimoni dari pengunjung yang puas tidak hanya menunjukkan kualitas makanan tetapi juga budaya persahabatan dan komunitas yang dipupuk oleh tempat tersebut.

Tagar utama seperti #MieGacoanDepok dan #SpicyNoodles telah menciptakan realitas virtual di mana para pecinta kuliner berbagi petualangan kuliner mereka, dan banyak yang mendokumentasikan pengalaman mereka mencoba berbagai hidangan mie pedas. Kehadiran online restoran ini memainkan peran penting dalam membentuk reputasinya dan menarik banyak orang yang ingin menguji toleransi mereka terhadap rempah-rempah.

Aksesibilitas: Lokasi dan Jam

Mie Gacoan berlokasi strategis di jantung kota Depok, sehingga mudah diakses baik oleh warga maupun wisatawan. Restoran ini memiliki pengaturan tempat duduk yang nyaman, sehingga cocok untuk pengunjung solo maupun rombongan besar. Restoran biasanya beroperasi mulai pukul 10:00 hingga 22:00, sehingga memberikan banyak waktu untuk makan siang dan makan malam.

Pemikiran Akhir tentang Mie Gacoan Depok

Dengan keunikan mie tradisional Indonesia, Mie Gacoan menawarkan perjalanan kuliner yang menarik dan dijamin akan memuaskan para pecinta bumbu. Perpaduan cita rasa yang luar biasa, bahan-bahan otentik, dan suasana menarik membuat setiap kunjungan berkesan. Seiring dengan semakin populernya mie pedas ini, Mie Gacoan tetap menjadi destinasi yang wajib dikunjungi bagi siapa pun yang ingin menjelajahi sisi pedas masakan Indonesia. Baik Anda penggemar bumbu berpengalaman atau pendatang baru yang penasaran, Mie Gacoan siap menghadirkan pengalaman lezat yang bertahan lama setelah gigitan terakhir.

Mie Gacoan Tangerang: Perjalanan Kuliner Melalui Rasa

Mie Gacoan Tangerang: Perjalanan Kuliner Melalui Rasa

Asal Usul Unik dan Filosofi Kuliner

Mie Gacoan Tangerang mewakili evolusi kuliner khas Indonesia. Didirikan pada tahun 2015, rangkaian restoran ini dengan cepat mendapatkan reputasi karena hidangan mie tradisionalnya yang khas. Nama “Gacoan” diterjemahkan menjadi “permainan” dalam bahasa Jawa, mengacu pada pendekatan ceria dan inovatif yang diambil terhadap masakan Indonesia. Para koki di Mie Gacoan memadukan cita rasa klasik dengan teknik modern, menciptakan pengalaman bersantap menarik yang memadukan warisan dan inovasi.

Pengalaman Mie Gacoan

Memasuki Mie Gacoan Tangerang langsung menyelimuti para tamu dalam suasana hangat dan mengundang. Dekorasi pedesaan, lengkap dengan perabotan kayu tradisional dan mural artistik, menampilkan budaya Indonesia. Setiap meja memberikan kesempatan bagi para tamu untuk berinteraksi satu sama lain, menumbuhkan pengalaman bersantap bersama yang meningkatkan kenikmatan hidangan.

Hidangan Khas dan Penawaran Lezat

Menu Mie Gacoan menawarkan beragam hidangan yang memenuhi semua selera, memastikan setiap kunjungan terasa seperti petualangan kuliner. Berikut adalah beberapa penawaran menonjol mereka:

  1. Mie Gacoan Asli: Inti dari sajian restoran ini adalah Mie Gacoan Original, semangkuk mie yang dimasak dengan sempurna, disajikan dalam kuah kental dan gurih yang terbuat dari campuran rempah-rempah rahasia. Daya pikat hidangan ini terletak pada tekstur mie yang lembut dilengkapi dengan topping empuk seperti ayam dan daging sapi, semuanya diperkaya dengan bumbu yang seimbang, menciptakan hidangan yang mengenyangkan namun menyegarkan.

  2. Mie Ayam: Pilihan populer lainnya adalah Mie Ayam, dengan ayam yang dibumbui dengan sempurna. Hidangan ini biasanya disajikan dengan bok choy dan bawang merah goreng, menghasilkan kerenyahan yang memuaskan di setiap gigitan. Ulasan para tamu secara konsisten memuji hidangan ini karena citarasanya yang seimbang dan porsinya yang mengenyangkan, menjadikannya ciri khas dari sajian Mie Gacoan.

  3. mie goreng: Bagi yang mendambakan pengalaman tumisan yang lebih banyak, Mie Goreng adalah pilihan yang tepat. Dicampur dengan kecap asin, hidangan ini mencerminkan esensi kenyamanan jajanan kaki lima. Sayuran renyah dan protein opsional menambah tekstur dan rasa, mengundang pengunjung untuk menyesuaikan makanan mereka lebih lanjut.

  4. Varian Pedas: Bagi pecinta bumbu, Mie Gacoan menawarkan “Mie Ayam Pedas” dan “Mie Goreng Pedas”, keduanya menawarkan rasa yang nikmat. Tingkat kepedasannya dapat disesuaikan, sehingga pelanggan dapat menyesuaikan tingkat kepedasan sesuai selera mereka, memastikan semua orang dapat menikmati pengalaman yang menggiurkan.

  5. Pilihan Vegetarian: Mie Gacoan juga menunjukkan komitmennya terhadap inklusivitas dengan menghadirkan pilihan vegetarian. “Mie Sayur” adalah pilihan tepat bagi mereka yang mencari makanan ringan, penuh dengan sayuran hijau segar dan kuah kaldu yang ringan dan beraroma.

Sisi dan Pengiring

Selain hidangan mie terkenalnya, Mie Gacoan juga menawarkan beragam menu pendamping yang meningkatkan pengalaman bersantap. Itu Tahu Tempe menyajikan tahu dan tempe goreng yang disajikan dengan saus kecap manis, memberikan kontras yang renyah dengan mie yang lembut. kerupuk (kerupuk) sering kali berfungsi sebagai tekstur tambahan, memberikan kerenyahan memuaskan yang menyempurnakan hidangan.

Minuman yang Melengkapi

Melengkapi cita rasa Mie Gacoan adalah menu minuman yang dikurasi dengan cermat. Para tamu dapat menyegarkan diri dengan minuman tradisional Indonesia seperti Es Teh Manises teh manis yang dengan sempurna menyeimbangkan kekayaan makanan. Selain itu, Kopi Susu (Kopi dengan susu kental) menawarkan suguhan lezat setelah makan yang menenangkan dan memanjakan.

Kenyamanan dan Aksesibilitas

Mie Gacoan Tangerang sangat menekankan pada aksesibilitas. Dengan lokasi di seluruh wilayah Tangerang dan sekitarnya, restoran ini melayani khalayak luas. Proses pemesanan, baik makan di tempat atau dibawa pulang, dirancang agar cepat dan efisien. Perhatian terhadap kenyamanan ini selaras dengan gaya hidup pelanggan mereka yang serba cepat, sehingga menawarkan pilihan yang dapat diandalkan baik untuk bersantap santai maupun bersantap cepat saji.

Keterlibatan dan Promosi Komunitas

Mie Gacoan telah memantapkan dirinya tidak hanya sebagai destinasi kuliner tetapi juga sebagai pusat komunitas. Acara rutin, seperti pencicipan makanan dan lokakarya, diselenggarakan untuk melibatkan penduduk lokal dan memperkuat ikatan komunitas. Melalui kampanye media sosial, Mie Gacoan membagikan konten buatan pengguna, mendorong pelanggan untuk menampilkan pengalaman bersantap mereka, sehingga menumbuhkan rasa memiliki dan identitas bersama.

Jaminan Keamanan dan Mutu Pangan

Mengingat masyarakat yang sadar kesehatan saat ini, Mie Gacoan mengedepankan keamanan pangan dan kualitas bahan. Restoran ini mendapatkan bahan-bahannya dari pemasok tepercaya, memastikan bahwa setiap hidangan tidak hanya lezat tetapi juga disiapkan dengan sangat hati-hati. Pemeriksaan kualitas secara teratur dan kepatuhan terhadap peraturan kesehatan menanamkan kepercayaan pada pengunjung.

Inovasi dan Arah Masa Depan

Mie Gacoan tidak berpuas diri. Manajemen terus mengeksplorasi rasa dan variasi hidangan baru untuk menjaga menu tetap menarik. Bahan-bahan musiman menginspirasi penawaran waktu terbatas, mengundang para tamu untuk datang kembali dan menemukan sesuatu yang baru.

Kesimpulan

Mie Gacoan Tangerang dengan indah merangkum esensi seni kuliner Indonesia, menyelaraskan tradisi dengan pengaruh modern. Suasana restoran yang menarik, hidangan inovatif, dan fokus komunitas menempatkannya sebagai destinasi yang wajib dikunjungi baik bagi penduduk lokal maupun wisatawan. Setiap kunjungan memungkinkan pengunjung untuk memulai perjalanan penuh cita rasa yang merayakan kekayaan warisan kuliner Indonesia sambil mengikuti tren kuliner kontemporer. Melalui komitmen mereka terhadap kualitas dan keterlibatan pelanggan, Mie Gacoan berdiri sebagai bukti budaya kuliner yang dinamis di Tangerang.

Mie Gacoan Bekasi: Perjalanan Kuliner Melalui Rasa

Mie Gacoan Bekasi: Perjalanan Kuliner Melalui Rasa

Asal Usul Mie Gacoan

Mie Gacoan adalah salah satu jaringan mie ternama di Indonesia, terutama di daerah seperti Bekasi karena sajiannya yang unik dan lezat. Didirikan dengan kecintaan terhadap cita rasa tradisional Indonesia yang dipadukan dengan metode memasak kontemporer, Mie Gacoan dengan cepat menjadi terkenal di kalangan pecinta kuliner lokal dan travelling. Namanya, “Gacoan,” berasal dari kata Melayu yang menggambarkan makanan lezat, yang secara efektif mencerminkan semangat pengalaman kuliner.

Hidangan Khas

Di Mie Gacoan Bekasi, bintang acaranya tidak diragukan lagi adalah mienya. Restoran ini mengkhususkan diri pada Mie Ayam atau mie ayam, disajikan dengan kuah kental dan gurih yang menggugah selera. Setiap mangkuk diisi dengan mie telur al dente yang dimasak dengan sempurna, di atasnya diberi ayam potong dadu yang lezat dan sedikit kecap gurih. Perpaduan unik rempah-rempah yang digunakan dalam kuahnya membedakannya dari kuah kaldu lainnya, menawarkan kedalaman rasa yang tak terlupakan.

Hidangan lain yang wajib dicoba adalah Mie Gorengnya. Hidangan mie tumis ini diolah dengan saus Gacoan spesial yang memberikan rasa manis dan pedas yang nikmat di setiap gigitannya. Perpaduan sayuran segar menambah tekstur dan nutrisi, menjadikannya pilihan seimbang bagi mereka yang mencari makanan cepat saji namun memuaskan.

Opsi yang Dapat Disesuaikan

Salah satu fitur khas Mie Gacoan adalah opsi penyesuaian yang tersedia. Pengunjung dapat memilih berbagai topping, termasuk tahu goreng, bakso, atau seafood. Hal ini memungkinkan pengalaman kuliner yang dipersonalisasi, memenuhi preferensi dan kebutuhan diet yang berbeda. Selain itu, kemampuan untuk menyesuaikan tingkat kepedasan membuatnya menarik bagi mereka yang menyukai rasa ringan dan mereka yang menyukai rasa pedas.

Makanan Sampingan dan Makanan Ringan

Melengkapi hidangan mie adalah serangkaian lauk pauk dan makanan ringan yang meningkatkan pengalaman bersantap. Tahu Tempe, tahu goreng dan bungkil kedelai yang difermentasi, menjadi favorit para pengunjung. Gigitan renyah ini tidak hanya menyempurnakan santapan tetapi juga memberikan pilihan camilan asli Indonesia yang cocok dipadukan dengan hidangan utama.

Hidangan favorit lainnya adalah Mie Kering, atau mie kering, yang disajikan dengan campuran bumbu dan taburan biji wijen. Hidangan ini sering dinikmati sebagai camilan mandiri atau sebagai lauk untuk dibagikan kepada teman-teman.

Pasangan Minuman yang Memuaskan

Untuk menyantap mie yang menggugah selera, Mie Gacoan menawarkan pilihan minuman. Minuman tradisional seperti Es Teh Manis (es teh manis) dan Es Jeruk (jus jeruk) sangat populer karena memberikan keseimbangan menyegarkan pada hidangan gurih. Bagi mereka yang ingin mencoba sesuatu yang unik, Mie Gacoan juga menyajikan ramuan khusus seperti Kombucha, kaya akan probiotik yang meningkatkan kesehatan usus.

Lingkungan yang Ramah Keluarga

Mie Gacoan Bekasi dirancang untuk menjadi tempat makan yang ramah keluarga, menjadikannya tempat makan yang ideal untuk keluarga, pasangan, dan pengunjung tunggal. Dekorasi yang hangat dan mengundang, dilengkapi dengan staf yang ramah, menciptakan suasana ramah bagi para tamu dari segala usia. Restoran ini sering kali memiliki suasana yang semarak, cocok untuk bersantap santai atau makan cepat setelah hari yang sibuk.

Buzz Media Sosial

Popularitas Mie Gacoan telah melampaui komunitas lokal, dan sangat disukai oleh para blogger makanan dan influencer di platform media sosial. Daya tarik estetis dari hidangan tersebut, serta gaya penyajiannya yang unik, menjadikannya sangat mudah dibagikan. Umpan Instagram sering kali menampilkan foto-foto segar semangkuk mie kukus, sehingga mendorong lebih banyak pengunjung untuk menjelajahi kuliner unggulan di Bekasi ini.

Nilai untuk Uang

Selain menunya yang lezat, Mie Gacoan juga menawarkan harga yang terjangkau. Ukuran porsi yang besar dikombinasikan dengan harga yang wajar membuatnya dapat diakses oleh semua orang. Penawaran promosi khusus sering kali tersedia, memungkinkan pengunjung tetap dan pendatang baru untuk menikmati hidangan favorit mereka dengan biaya yang lebih murah.

Pilihan Sadar Kesehatan

Di tengah kenikmatan mie yang beraroma, konsumen yang sadar kesehatan dapat menemukan hiburan dalam sajian seimbang di Mie Gacoan. Restoran ini menekankan bahan-bahan segar, dan penggunaan ayam serta sayuran berkualitas tinggi memastikan pengalaman bersantap yang bergizi. Penyesuaian seperti memilih lebih sedikit minyak pada masakan tumis atau menambahkan lebih banyak sayuran ditujukan untuk pengunjung yang sadar kesehatan.

Keterlibatan Komunitas

Mie Gacoan Bekasi aktif berinteraksi dengan komunitasnya, sering kali mengadakan acara yang merayakan budaya lokal dan warisan kuliner. Acara-acara ini memberikan wadah bagi para chef lokal dan pecinta makanan untuk menampilkan bakat mereka, meningkatkan rasa kebersamaan dan apresiasi terhadap masakan Indonesia.

Kesimpulan tentang Kenikmatan Gastronomi

Mie Gacoan Bekasi berdiri tidak hanya sebagai restoran namun juga sebagai destinasi kuliner. Rangkaian hidangan mie, pilihan yang dapat disesuaikan, dan komitmen terhadap kualitas menciptakan pengalaman bersantap yang meninggalkan kesan mendalam. Baik Anda penduduk lokal atau pengunjung ke Bekasi, mengunjungi Mie Gacoan berarti memulai perjalanan penuh cita rasa melalui kekayaan palet masakan Indonesia.

Menjelajahi Cita Rasa Mie Gacoan Denpasar

Menjelajahi Cita Rasa Mie Gacoan Denpasar

Warisan Mie Gacoan

Mie Gacoan menonjol sebagai institusi kuliner tercinta di Denpasar, Indonesia, yang terkenal dengan kekayaan warisan hidangan mie beraroma. Berakar pada tradisi Jawa, Mie Gacoan memadukan kekayaan praktik kuliner Indonesia dengan pendekatan inovatif terhadap jajanan kaki lima. Melalui menunya yang lengkap, Mie Gacoan tidak hanya melestarikan resep tradisional namun juga memperkenalkan varian baru yang menarik bagi masyarakat luas.

Kenapa Mie Gacoan?

Mie Gacoan terkenal bukan hanya karena makanannya namun juga karena suasananya yang ramah, menjadikannya tempat yang ramai baik bagi penduduk lokal maupun wisatawan. Nama restorannya, “Mie”, berarti “mie”, sedangkan “Gacoan” mengacu pada jenis hidangan cepat saji yang populer di Indonesia. Kombinasi ini menjanjikan pelanggan beragam sup mie dan hidangan lezat yang mencerminkan cita rasa terbaik Indonesia.

Melihat Lebih Dekat Penawaran Inti

mie goreng

Salah satu hidangan andalan di Mie Gacoan adalah Mie Goreng, atau mie goreng. Hidangan ini menampilkan mie gandum tumis yang kenyal, ditaburi sayuran segar, dan perpaduan rempah-rempah yang harum. Yang membedakan Mie Gacoan adalah saus rahasianya, yang mengandung sedikit kecap dan cabai, menciptakan keseimbangan yang luar biasa antara rasa manis dan pedas. Untuk tambahan protein, pengunjung dapat memilih untuk memasukkan ayam, daging sapi, atau tahu.

Mie Kuah

Mie Kuah adalah makanan pokok lainnya yang menarik perhatian. Disajikan dalam kuah kaldu yang harum, mie ini ditemani dengan topping seperti ayam suwir, bok choy, dan daun bawang. Kuahnya direbus hingga sempurna dengan campuran rempah-rempah, termasuk adas bintang dan serai, menghasilkan semangkuk nyaman yang menghangatkan jiwa.

Item Menu Khusus

Mie Gacoan terkenal dengan hidangan khasnya yang meningkatkan pengalaman bersantap.

Kwetiau

Kwetiau, bihun pipih yang digoreng hingga empuk sempurna, adalah pilihan populer di kalangan pengunjung. Di Mie Gacoan, Kwetiaunya dilengkapi dengan pilihan makanan laut yang melimpah, termasuk udang dan cumi, serta campuran sayuran yang menambah kerenyahan yang memuaskan. Hidangan ini terampil menghasilkan kedalaman berasap melalui wajan hei—teknik kuliner penting dalam masakan Cina.

mie pedas

Bagi para pecinta kuliner, Mie Pedas menawarkan rasa pedas yang menampilkan cita rasa khas Indonesia. Ditaburi sambal—sambal terasi tradisional—hidangan ini menarik bagi mereka yang menyukai pedas. Mie Pedas hadir dengan pilihan topping tambahan atau tambahan minyak cabai untuk pecinta pedas ekstrim, menjadikannya pilihan berani yang layak untuk dijelajahi.

Pilihan Vegetarian dan Vegan

Memahami meningkatnya permintaan akan pilihan makanan nabati, Mie Gacoan telah menyiapkan pilihan hidangan vegetarian dan vegan.

Mie Goreng Vegan

Mie Goreng Vegan menggantikan topping daging tradisional dengan campuran tahu dan sayuran segar, semuanya dimasak dengan gaya gurih yang sama dengan dagingnya. Hasilnya adalah hidangan lezat yang mempertahankan rasa memuaskan sekaligus memenuhi beragam preferensi makanan.

Mie Kaldu Sayur

Hidangan lain yang menonjol bagi para vegan adalah hidangan mie kuah sayuran. Pilihan yang lembut namun beraroma ini direbus dengan bumbu dan rempah lokal, sehingga cita rasa alami dari produk segar dapat terpancar. Ini adalah makanan sehat yang menyegarkan dan bergizi.

Bahannya Penting

Mie Gacoan sangat mengutamakan bahan-bahan berkualitas. Mendapatkan sayuran segar dari pasar lokal memastikan setiap hidangan memiliki semangat dan cita rasa terbaik. Mereka memprioritaskan petani dan pemasok lokal, sehingga berkontribusi terhadap ekosistem kuliner yang lebih berkelanjutan. Selain itu, tim dapur berdedikasi untuk menggunakan bahan-bahan non-transgenik, menjadikan sajian mereka lebih sehat tanpa mengurangi rasa.

Pengalaman Bersantap di Mie Gacoan

Suasana di Mie Gacoan dirancang sempurna untuk pengalaman bersantap santai. Dengan dekorasi cerah yang mencerminkan budaya Indonesia, para tamu dapat menikmati hidangan mereka dalam suasana yang nyaman namun meriah. Dapur terbuka memungkinkan pengunjung untuk menyaksikan para koki bekerja, meningkatkan pengalaman melalui ketaatan pada teknik kuliner ahli.

Lokasi dan Aksesibilitas

Terletak di jantung kota Denpasar, Mie Gacoan mudah diakses baik oleh penduduk lokal maupun wisatawan. Lokasinya yang sentral menjadikannya tempat perhentian sempurna untuk istirahat makan siang atau ngemil di malam hari, karena tempat ini menganut pola makan khas Indonesia yang berlangsung hingga larut malam.

Komunitas dan Budaya

Mie Gacoan juga berperan di masyarakat dengan mensponsori acara lokal dan berkolaborasi dengan restoran lain untuk menyelenggarakan festival makanan yang merayakan masakan Indonesia. Komitmen terhadap representasi budaya ini membantu memperdalam apresiasi masakan daerah baik di kalangan warga maupun pengunjung.

Favorit dan Rekomendasi Pelanggan

Pelanggan sangat merekomendasikan untuk menambahkan tahu goreng renyah yang lezat sebagai lauk, yang sangat cocok dipadukan dengan berbagai hidangan mie. Selain itu, sambal buatan sendiri merupakan bumbu yang wajib dicoba bagi siapa pun yang ingin menambahkan sentuhan pribadi kepedasan.

Makanan penutup

Setelah menyantap hidangan yang memuaskan, pelanggan diajak untuk menjelajahi makanan penutup tradisional Indonesia yang ditawarkan. Penganan khas seperti Es Campur—makanan penutup dingin yang terdiri dari buah, jeli, dan santan—menjadi akhir perjalanan kuliner yang menyegarkan.

Kehadiran Online dan Media Sosial

Dengan pemahaman yang tajam tentang era digital, Mie Gacoan tetap aktif di media sosial. Postingan reguler yang menampilkan gambar-gambar menarik dari hidangan mereka, cuplikan dapur di balik layar, dan testimoni pelanggan menciptakan rasa kebersamaan secara online. Berinteraksi dengan pelanggan melalui media sosial memungkinkan Mie Gacoan untuk tetap terhubung dengan penontonnya sambil menunjukkan dedikasinya terhadap bahan-bahan yang beraroma dan berkualitas tinggi.

Pikiran Terakhir

Saat menjelajahi lanskap kuliner Denpasar, semangkuk mie Mie Gacoan yang beraroma mewakili pengalaman kuliner yang wajib dicoba bagi siapa pun yang ingin menikmati masakan asli Indonesia. Setiap hidangan menceritakan sebuah kisah melalui perpaduan rempah-rempah, bahan-bahan yang diperoleh dengan cermat, dan teknik tradisional—semuanya disajikan dalam suasana mengundang yang menyambut semua orang dengan cita rasa Indonesia.

Mie Gacoan Bali: Surga Kuliner Bagi Pencinta Mie

Mie Gacoan Bali: Surga Kuliner Bagi Pencinta Mie

Daya Pikat Mie Gacoan Bali

Jika Anda berada di Bali dan merupakan penggemar mie, Mie Gacoan Bali harus menjadi perhentian pertama Anda. Restoran terkenal ini adalah surga bagi pecinta mie, terkenal dengan beragam rasa, tekstur, dan bahan-bahan segar. Terletak di jantung Bali yang dinamis, Mie Gacoan menarik perhatian penduduk lokal dan wisatawan dengan sajian menarik dan suasananya yang meriah.

Perjalanan Kuliner Melalui Indulgensi

Menu Mie Gacoan merupakan olesan mie tradisional Indonesia yang mewah, menampilkan resep klasik dengan sentuhan kontemporer. Restoran ini menyajikan beragam hidangan mie, termasuk Mie Goreng (mie goreng), Mie Kuah (mie kuah), dan berbagai variasi topping premium. Setiap mangkuk dibuat dengan perhatian cermat terhadap detail, memastikan setiap gigitan penuh rasa.

Hidangan Khas untuk Dinikmati

  1. Mie Goreng Gacoan: Hidangan klasik ini merupakan perwujudan seni kuliner Bali dengan perpaduan bumbu, sayuran, dan mie yang dimasak dengan sempurna. Dibumbui dengan campuran saus rahasia, saus ini menciptakan semangat yang tak tertahankan sehingga membuat pengunjung datang kembali untuk mencicipi lebih banyak lagi.

  2. Mie Kuah dengan Ayam: Bagi yang lebih menyukai hidangan hangat dan menenangkan, Mie Kuah adalah pilihan yang tepat. Diperkaya dengan kuah kaldu aromatik, kenikmatan gurih dengan taburan ayam empuk di atasnya, membuat setiap menyeruput menjadi pengalaman surgawi.

  3. Mie Seafood Deluxe: Bagi pecinta seafood, hidangan ini wajib dicoba. Menampilkan udang segar, cumi-cumi, dan fillet ikan, ditaburi mie beraroma dalam kuah kaldu ringan, hidangan ini dengan sempurna menonjolkan kekayaan pesisir Bali.

Bahan Segar dan Rasa Berani

Mie Gacoan bangga menggunakan bahan-bahan segar dan berkualitas tinggi. Setiap hidangan disiapkan dengan produk-produk lokal, memastikan bahwa hidangannya tidak hanya lezat tetapi juga menyehatkan. Mienya dibuat segar setiap hari, dengan rasa kenyal yang nikmat dipadukan dengan berbagai saus dan topping.

Pilihan Vegetarian dan Vegan

Mie Gacoan memperhatikan batasan dan preferensi makanan. Restoran ini menawarkan beragam pilihan vegetarian dan vegan yang mengesankan. Tahu Tempe Mie Goreng, dibuat dengan tahu dan tempe goreng, merupakan bukti komitmen restoran ini dalam melayani semua pengunjung. Selain itu, variasi topping sayuran yang tersedia memastikan setiap orang dapat menemukan sesuatu yang sesuai dengan selera mereka.

Seni Rempah

Salah satu aspek yang tak terlupakan dari Mie Gacoan adalah dedikasinya terhadap rempah-rempah asli Bali. Tim kulinernya dengan terampil menyeimbangkan rasa, menggunakan campuran cabai, bawang putih, dan rempah aromatik yang kaya yang merupakan ciri khas masakan Indonesia. Tingkat kepedasan dapat disesuaikan, sehingga para tamu dapat memilih tingkat kepedasan yang diinginkan, dari yang ringan hingga yang ekstra pedas.

Suasana Nyaman

Suasana di Mie Gacoan nyaman dan mengundang, merangkum kehangatan keramahtamahan Bali. Interiornya memadukan elemen desain tradisional Bali dengan estetika modern, menciptakan suasana yang dinamis namun santai. Baik bersantap sendirian, bersama keluarga, atau menikmati kencan malam, restoran ini mengakomodasi semuanya.

Layanan yang ramah

Meskipun makanannya mencuri perhatian, layanan ramah di Mie Gacoan meningkatkan pengalaman bersantap secara keseluruhan. Staf dilatih untuk penuh perhatian tanpa mengganggu, membimbing Anda melalui menu dan membantu dengan rekomendasi yang sesuai dengan selera Anda.

Aksesibilitas dan Lokasi

Terletak di lokasi utama, Mie Gacoan Bali mudah diakses baik oleh wisatawan maupun penduduk lokal. Posisinya yang strategis di dekat tempat-tempat wisata populer memastikan adanya aliran penggemar mie yang ingin memanjakan diri. Restoran buka setiap hari, dengan jam kerja yang nyaman sehingga cocok untuk makan siang dan makan malam.

Indulgensi Terjangkau

Meskipun menawarkan kualitas tinggi, Mie Gacoan mempertahankan harga yang kompetitif, menjadikannya pilihan bersantap yang mudah diakses oleh semua orang. Porsi yang besar dikombinasikan dengan harga yang wajar memastikan pengunjung menikmati nilai terbaik untuk uang mereka.

Opsi Bawa Pulang dan Pengiriman

Memahami kebutuhan pelanggannya, Mie Gacoan juga menawarkan layanan bawa pulang dan pesan antar, sehingga memudahkan mereka yang ingin menikmati hidangan mie favoritnya di rumah atau di perjalanan. Fleksibilitas ini telah meningkatkan popularitasnya secara signifikan, terutama di kalangan penduduk lokal yang sibuk dan wisatawan yang ingin menjelajahi Bali.

Keterlibatan Komunitas

Mie Gacoan Bali bukan sekadar restoran biasa; itu adalah bagian integral dari komunitas lokal. Perusahaan ini menyelenggarakan berbagai acara, berkolaborasi dengan produsen pangan lokal, dan berpartisipasi aktif dalam upaya kelestarian lingkungan. Pendekatan berbasis komunitas ini diterima oleh para pengunjung, memperkuat tempatnya di hati para pengunjung.

Ulasan dan Peringkat

Dengan sambutan hangat yang beredar secara online, Mie Gacoan telah mendapatkan reputasi luar biasa di berbagai platform blog makanan dan media sosial. Pengunjung sering kali menonjolkan cita rasa yang luar biasa, porsi yang banyak, dan suasana yang ramah, sering kali merekomendasikan Mie Gacoan kepada teman dan keluarga yang mengunjungi Bali.

Kesimpulan: Destinasi yang Wajib Dikunjungi

Bagi pecinta mie, Mie Gacoan Bali hadir sebagai surga kuliner yang memadukan tradisi dan kreativitas dalam setiap sajiannya. Apakah Anda seorang lokal atau pengunjung, menikmati sajian Mie Gacoan yang lezat pasti akan meningkatkan pengalaman Anda di Bali. Jangan lewatkan kesempatan untuk mencicipi mie terbaik yang ditawarkan pulau ini.

Rasakan Mie Gacoan Bali Hari Ini

Jika Anda berada di Bali dan mendambakan pengalaman mie autentik, pergilah ke Mie Gacoan. Puaskan hasrat Anda dan benamkan diri Anda dalam kekayaan cita rasa tradisi kuliner Bali. Dengan pelayanan yang ramah, menu yang beragam, dan suasana yang ramah, Mie Gacoan menawarkan lebih dari sekedar hidangan; ini memberikan pengalaman tak terlupakan yang akan dihargai oleh pecinta mie. Temukan serunya Mie Gacoan Bali dan nikmati petualangan mie yang tiada duanya.

Mie Gacoan Makassar: Petualangan Kuliner

Mie Gacoan Makassar: Pengalaman Kuliner yang Tak Terlupakan

Perjalanan Menuju Rasa

Mie Gacoan Makassar bukan sekedar tempat untuk memuaskan rasa lapar Anda; ini adalah petualangan kuliner yang memikat setiap pengunjung dengan sajian lezatnya. Terletak di kota Makassar yang dinamis, kedai mie ini telah mendapatkan reputasi karena keunikan cita rasa tradisional Indonesia, menjadikannya tempat yang wajib dikunjungi baik oleh penduduk lokal maupun wisatawan. Fokus restoran ini pada kualitas, variasi, dan keaslian menjamin pengalaman unik bahkan untuk selera paling cerdas sekalipun.

Warisan Mie Gacoan

Mie Gacoan berakar kuat dalam budaya Indonesia, dengan komitmen melestarikan tradisi kuliner sekaligus memasukkan unsur modern yang menarik bagi pecinta kuliner masa kini. Nama ‘Gacoan’ berasal dari dialek lokal yang berarti “makan”. Anggukan lucu ini memastikan bahwa setiap kunjungan dipenuhi dengan semangat kenikmatan dan kebersamaan yang datang dari berbagi makanan.

Suasana

Saat memasuki Mie Gacoan Makassar, para tamu disuguhi suasana hangat dan mengundang. Didesain dengan perpaduan estetika kontemporer dan tradisional, tempat ini menampilkan aksen kayu dan dekorasi warna-warni yang mencerminkan warisan Indonesia. Meja-mejanya luas dan ditata untuk mempromosikan makan bersama, yang merupakan aspek penting dari budaya makan Indonesia. Suasana semakin diperkuat dengan aroma rempah-rempah yang menggoda dan hidangan segar, menciptakan daya tarik yang tak tertahankan bagi pecinta kuliner.

Ragam Mie

Salah satu yang menarik dari Mie Gacoan adalah menunya yang beragam dan berpusat pada berbagai jenis mie. Setiap hidangan dibuat dengan resep unik yang menampilkan kekayaan masakan Indonesia. Dari yang tebal hingga tipis, keriting hingga pipih, pilihan mie dirancang untuk memenuhi preferensi dan gaya makan yang berbeda.

  • mie ayam: Hidangan khas yang menampilkan ayam dan perpaduan rempah-rempah tradisional. Mienya dimasak dengan sempurna, dan kuah kaldu yang gurih menjadi pelengkap yang menenangkan.
  • mie goreng: Mie goreng tumis kaya rasa dan sering disajikan dengan campuran sayuran dan protein. Hidangan ini merupakan makanan pokok yang mencerminkan budaya jajanan kaki lima yang dinamis di Indonesia.
  • Mie Kuah: Cocok bagi mereka yang menyukai pengalaman berkuah, hidangan ini memadukan mie dalam kuah kaldu yang kaya dan beraroma yang dihias dengan bumbu segar.

Topping yang Menggiurkan

Semangkuk mie di Mie Gacoan rasanya belum lengkap tanpa sederet topping yang lezat. Pengunjung dapat menyesuaikan pesanan mereka untuk memasukkan berbagai protein, seperti:

  • bakso: Bakso gurih ini menambah dimensi lezat pada hidangan, terbuat dari daging sapi yang digiling halus dicampur dengan bumbu dan rempah.
  • Ayam Penyet: Ayam goreng renyah yang dihancurkan untuk menambah cita rasa menjadi favorit para pengunjung.
  • Telur Dadar: Irisan telur dadar empuk yang menghadirkan tekstur ringan dan kaya, membuat setiap gigitan semakin nikmat.

Saus Celup

Melengkapi mie dan topping adalah beberapa saus buatan sendiri yang meningkatkan pengalaman bersantap. Setiap saus telah dibuat dengan cermat untuk memberikan kedalaman rasa, menambahkan rasa pedas, manis, atau asam pada hidangan. Yang paling populer meliputi:

  • Sambal: Terasi pedas yang identik dengan masakan Indonesia, menawarkan rasa pedas yang sangat kontras dengan gurihnya mie.
  • Kecap Manis: Kecap manis yang menyempurnakan profil umami pada masakan, menjadikannya favorit bagi mereka yang menyukai rasa lebih manis.

Bahan Segar dan Kesadaran Kesehatan

Mie Gacoan bangga karena hanya menggunakan bahan-bahan segar yang bersumber dari pasar petani setempat. Komitmen terhadap kesegaran memastikan bahwa setiap hidangan tidak hanya beraroma tetapi juga bergizi. Perhatian terhadap kualitas bahan ini juga diterapkan pada sajian vegetarian mereka, yang meliputi:

  • Hidangan Tahu dan Tempe: Dikemas dengan protein, pilihan nabati ini memberikan alternatif yang memuaskan bagi pengunjung tanpa daging.
  • Tumis Sayur: Dengan menggabungkan sayuran musiman, hidangan ini mempertahankan warna cerah dan nutrisi penting, menjadikannya tambahan yang sehat untuk makanan apa pun.

Memasangkan Minuman

Untuk melengkapi santapan Anda di Mie Gacoan, pilihan minuman melengkapi sajian makanan dengan indah. Minuman tradisional Indonesia, seperti Teh Tarik (teh tarik) atau Kopi Makassar (kopi lokal), memberikan perpaduan rasa yang nikmat. Selain itu, jus buah segar juga tersedia, memastikan setiap selera terpenuhi.

Pengalaman Pelanggan

Kepuasan pelanggan merupakan nilai inti di Mie Gacoan, yang tercermin dari pelayanan penuh perhatian yang diberikan oleh para staf. Dari saat Anda duduk, tim berdedikasi untuk memastikan pengalaman bersantap yang tak terlupakan. Pelayan yang berpengetahuan luas selalu siap menjelaskan item menu dan menawarkan rekomendasi berdasarkan preferensi Anda.

Kehadiran Online dan Media Sosial

Mie Gacoan Makassar telah memasuki era digital, mempertahankan kehadiran online yang aktif untuk berinteraksi dengan pelanggan dan mempromosikan sajian kuliner mereka. Dengan rutin memposting foto-foto hidangan mereka yang menggugah selera di platform media sosial, mereka menarik perhatian calon pengunjung dan mendorong kunjungan berulang. Banyak pengunjung yang berbagi pengalaman mereka secara online, sehingga menciptakan komunitas pecinta makanan yang bersatu karena apresiasi mereka terhadap Mie Gacoan.

Aksesibilitas

Berlokasi strategis di Makassar, Mie Gacoan mudah diakses melalui transportasi umum, menjadikannya tempat makan favorit baik penduduk lokal maupun pengunjung. Lokasinya yang sentral memungkinkan untuk berhenti makan sebentar bagi mereka yang menjelajahi kota atau menikmati malam.

Kesimpulan

Kunjungan ke Mie Gacoan Makassar berarti lebih dari sekedar makan; ini mewakili eksplorasi kuliner Indonesia yang menyenangkan yang akan terus melekat dalam ingatan Anda lama setelah gigitan terakhir. Kombinasi cita rasa otentik, beragam pilihan, dan suasana hangat menciptakan ruang menarik yang menjanjikan kepuasan dan rasa kebersamaan. Baik Anda pecinta mie atau pendatang baru yang penasaran, Mie Gacoan mengundang Anda untuk menikmati pengalaman kuliner yang tiada duanya di Makassar.