(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.

Mie Gacoan: Enak Atau Tidak? Menyelami Rasa

Mie Gacoan: Enak Atau Tidak? Menyelami Rasa

Sejarah Mie Gacoan

Mie Gacoan Lahir Dari Keinginan Unkiptakan Mie Yang Tidak Hanya Lezat, Tetapi Mampu Anggota Pengalaman Bersantap Yang Unik. Dimulu Dari Kekayaan Kuliner Indonesia, Mie Gacoan Menghadirkan Berbagai Rasa Yang Terinspirasi Oleh Budaya Lokal. Dari Lokasi Pertamananya Di Yogyakarta, Merek ini Berhasil Menarik Perhatian Banyak Pencinta Kuliner Di Seluruh Indonesia Berkat Rasananya Yang Khas Dan Harga Yang Terjangkau.

Menu Konsep

Mie Gacoan Menawarkan Berbagai Jenis Mie Yang Menggugah Selera, Termasuk Mie Ayam, Mie Pedas, Dan Mie Goreng. Salah Satu Daya Tarik Utama Dari Mie Gacoan Adalah Pilihan Level Kepedasan, Dari Yang Biasa Saja Hinga Tinggat Ekstrim Yang Berani. Setiapan Hidangan Dilengkapi Delangan Bahan-Bahan Segar Seperti Sayuran, Daging Ayam, Dan Bumbu Yang Kaya. Menu Yang Beragam Ini Menenciptakan Pengalaman Bersantap Yang Dapat Dapat Dengan Prefanensial Setiap Pengunjung.

Rasa Yang Menggoda

Rasa mie di mie gacoan diakui eheh Banyak Pengunjung Sebagai Salah Satu Yang Terbaik. Mi-Nya Selalu Kenyal, Delan Kuah Yang Kaya Rasa. Bumbu Yang Digunakan Memilisi Keseimbangan Yang Baik, Mengombinasikan Pedas, Asin, Dan Manis. Mie Gacoan RuGA Terkenal Gangan Sambalnya Yang Menggigit, Yang Menambah Cita Rasa Hidangan. UNTUK PARA PERGGEMAR MAKANAN PEDAS, MENCOBA MIE GACOAN LEVEL PEDAS EKSTRIM ADALAH TANTIGAN YANG PATUT DICOBA.

Bahan Berkualitas

Salah Satu Faktor Kunci Yang Membuat Mie Gacoan Sangat Disenangi Adalah Penggunaan Bahan Berkualitas Tinggi. Dari Mie Yang Dibuat Segar Setiap Hari Hingga Sayuran Dan Daging Yang Dipilih Secara Cermat, Kualitas Bahan Memiliki Pengaruh Besar Pada Cita Rasa. Mie Gacoan Berkomitmen untuk Tidak Hanya Memikat Selera Tetapi JUGA MENJAGA Standar Kerbersihan Dan Kesehatan. Oleh Karena Itu, Pengunjung Dapat Menikmati Hidangan Tanpa Khawatir Tentang Aspek Kesehatan.

SUASANA DAN LOYANAN

Dari Segi Atmosfir, Mie Gacoan Menawarkan Suasana Yang Nyaman Dan Casual. Desain Interior Yang Sederhana Namun Menarik Menciptakan Lingkungan Yang Ramah Bagi Semua Kalangan. Layanan Yang Ramah Dan Cepat BagA Menjadi Nilai Tambah. Pengunjung Seringkali Mengungkapkan Kepuasan Atas Kecepatan Penyajian Dan Keramahan Staf. Hal ini semakinin meningkatkan pengalaman bersantap di mie gacoan.

Popularitas di media sosial

Kebohasilan Mie Gacoan Tidak Terlepas Dari Daya Tariknya Di Media Sosial. DENGAN BANYAKYA UNGAHAN DARI PENTERJUNG YANG BERBAGI PENGALAMAN KULINER MEREKA, MIE GACOAN DENGAN CEPAT MERJADI TOPIK VIRAL. Video tantangan pedas dan foto Hadirnya Hidangan Yang Menggugah Selera Menjadi Bagian Dari Identitas Merek Ini. Pengaruh Positif Dari Sosial Berkontribusi Besar Terhadap Peningkatan Popularitas Mie Gacoan Di Kalangan Generasi Muda.

Pelayanan Takeaway Dan Delivery

Mie Gacoan Rona Menyediakan Layanan Takeaway Dan Pengantaran, Yangin Semakinkan Konsumen untuk Menikmati Hidangan Mereka Di Rahat. DENGAN ADAGA KEMUDAHAN INI, PENCINTA MIE TIDAK PERLU LAGI PERGI KE TEMPAT AKAN UNTUK MERASAKAN LEZATYA MIE GACOAN. Selain Itu, Kemasan Yang Digunakan Takeaway Dirancang Agar Aman Dan Menjaga Kualitas Makanan Selama Pengantaran.

HARGA Terjangkau

FAKTOR HARGA MENJADI SALU SATU DAYA TARIK UTAMA MIE GACOAN. DENGAN BIAYA Yang LERJANGKAU, Pengunjung Dapat Menikmati Hidangan Berkualitas Tanpa Perlu Mengeluarkan Banyak Uang. Menu BERBAGAI PILihan Yang Variatif membruat setiap orang dapat menemukan opsi sesuai anggan anggaran dan selera masing-masing. Diskon Dan Promosi Rugner Sering Diadakan, Menciptakan Peluang Bagi Pengunjung Baru Unkoba.

KOMUNITAS PELANGGAN SETIA

Mie Gacoan Telah Berhasil Membangun Komunitas Pelanggan Setia Yang Terus Bertambah. Banyak Pengunjung Yang Kembali Lagi Setelah Mencoba Hidangan Pertamanya. Platform Interaksi Pelangan Pelanggan Melalui Berbagai, Terutama Media Sosial, MEMA MEMPERERAT HUBUNGAN ANTARA MEREK Dan Konsumenny. HAL INI MENCIPTAKIAN Loyalitas Yang Kuat, Yang Bukan Hanya Didasarkan Pada Rasa, Tetapi Juta Pada Hubungan Personal Yang Terjalin Selama ini.

Menu Pilihan Vegetarian

DENGAN SEMINGIN TINGGINYA Kesadaran Tentang Pola Makan Sehat Dan Vegetarian, Mie Gacoan Baga Menyediakan Pilihan Menu Vegetarian. Menu ini Dirancang unkeK MEMENUHI Kebutuhan Mereka Yang memilih tidak Mengonsumsi Daging Tetapi Tetap ingin menikmati cita rasa mie Yang Khas. Ini adalah langkah positif Yang menunjukkan komitmen mie gacoan unkukkau lebih banya Konsumen.

Ulasan Dari Pelanggan

Berbagai Ulasan Dari Pelanggan Di Platform Seperti Google, Instagram, Dan Tripadvisor Menunjukkan Bahwa Mayoritas Pengunjung Anggota Penilaan Positif Terhadap Mie Gacoan. Rasa Yang Enak, Porsi Yang Memadai, Dan Harga Yang Terjangkau Menjadi poin-poin yang sering disebutkan. Namun, Adaapa Komentar Mengenai Waktu Torgu Pada Jam Sibuk, Yang Menadi Tantangan Bagi Manajemen Dalam Meningkatkan Layanan.

Kesimpulan

DENGAN Segala Kelebihan Yang Ditawarkan, Mie Gacoan Berhasil Mencuri Perhatian Banyak Orang. Rasa Yang Autentik, Pelyanan Yang Baik, Serta Suasana Yang Nyaman Menjadikananya Tempat Yang Ideal untuk menikmat sesendok mie Yang lezat. Pergi Bersama Teman Atau Keluarga Untuca Merasakan Keunikan Dari Mie Gacoan Bisa Menjadi Pengalaman Yang Menyenangkan Dan Menggugah Nafsu Makan. Setiap SUapan Bukan Hanya Sekadar Santapan, Melainkan Jagi Sebuah Eksplorasi Rasa Yang Tak Terlupakan.

Mie Gacoan: Bangkitnya waralaba Indonesia yang populer

Mie Gacoan: Bangkitnya waralaba Indonesia yang populer

Asal usul Mie Gacoan

Mie Gacoan didirikan pada tahun 2016 di Indonesia, diluncurkan oleh duo wirausaha dengan visi untuk memodernisasi mie tradisional Indonesia, khususnya hidangan tercinta yang dikenal sebagai Mie Goreng. Para pendiri mengenali peluang di segmen makan kasual cepat, di mana makanan terjangkau namun beraroma dapat menarik basis pelanggan yang beragam. Dengan menanamkan menu mereka dengan rasa lokal dan konsep -konsep inovatif, Mie Gacoan dengan cepat mengukir ceruk untuk dirinya sendiri dalam lanskap kuliner kompetitif Indonesia.

Proposisi penjualan yang unik

Salah satu fitur menonjol Mie Gacoan adalah komitmennya terhadap selera otentik yang dikombinasikan dengan presentasi yang menarik. Ditawarkan dalam suasana yang semarak dan hidup, hidangannya tidak hanya beraroma tetapi juga memikat secara visual. Mie Gacoan terutama berfokus pada hidangan mie khasnya, yang disajikan dalam porsi besar dengan harga yang wajar. Penawaran murah hati ini menarik bagi pelanggan muda, siswa, dan keluarga yang mencari makanan yang lezat.

Waralaba ini juga menekankan kustomisasi, memungkinkan pelanggan untuk memilih jenis mie mereka, tingkat kepedasan, dan berbagai topping. Fleksibilitas seperti itu melayani selera yang beragam, membuat pengalaman bersantap lebih pribadi dan menarik.

Sorotan menu

Menu Mie Gacoan menampilkan berbagai hidangan mie, termasuk:

  • Mie Goreng: Mie tumis dengan campuran sayuran, disertai dengan ayam atau udang.
  • Mie Kuah: Hidangan mie berbasis kaldu yang menampilkan saus yang kaya dan gurih.
  • Mie Peda: Pemilihan mie pedas khusus untuk pencari panas, dengan berbagai tingkat kepedasan memenuhi toleransi individu.

Selain hidangan mie primer, Mie Gacoan juga menawarkan serangkaian lauk seperti tahu goreng renyah, kue ikan, dan makanan ringan tradisional Indonesia yang melengkapi penawaran utamanya. Kombinasi dari kesenangan kuliner ini menciptakan pengalaman bersantap yang lengkap yang membuat pelanggan kembali.

Ekspansi strategis

Sejak awal, Mie Gacoan telah berkembang pesat, dengan banyak outlet di seluruh Indonesia. Strategi pertumbuhan memanfaatkan model waralaba yang memungkinkan investor yang antusias untuk memiliki dan mengoperasikan lokasi Mie Gacoan, sehingga memfasilitasi ekspansi cepat dengan tetap mempertahankan konsistensi dan kualitas merek.

Merek ini telah berhasil menembus pasar perkotaan dan pinggiran kota, memanfaatkan demografi pelanggan yang beragam. Dengan dengan hati -hati memilih mitra waralaba yang berbagi visi kualitas dan layanan mereka, Mie Gacoan telah mempertahankan integritas mereknya saat penskalaan operasi secara efektif.

Pemasaran dan posisi merek

Mie Gacoan telah menggunakan strategi pemasaran beragam untuk membangun kehadiran mereknya. Pemasaran digital memainkan peran penting, dengan keterlibatan media sosial yang kuat pada platform seperti Instagram dan Tiktok. Merek menggunakan foto dan video yang menarik secara visual untuk memamerkan hidangan berwarna -warni, memicu rasa ingin tahu dan kegembiraan di antara pelanggan potensial.

Mie Gacoan juga memanfaatkan pemasaran influencer, bermitra dengan blogger makanan dan influencer lokal untuk mempromosikan penawarannya. Strategi ini telah membantu menciptakan buzz di sekitar merek, menjangkau khalayak luas di ruang digital.

Selain itu, promosi musiman dan diskon khusus telah membantu retensi pelanggan, mendorong kunjungan berulang. Merek ini sering meluncurkan penawaran waktu terbatas atau item menu khusus, menarik orang untuk mencoba hidangan baru secara teratur.

Pengalaman pelanggan

Komponen signifikan pertumbuhan Mie Gacoan dapat dikaitkan dengan fokus pada pengalaman pelanggan. Waralaba telah merancang outletnya dengan suasana yang semarak yang melengkapi sifat energik dari masakan Indonesia.

Pelatihan staf menekankan layanan pelanggan yang sangat baik, menumbuhkan suasana ramah di mana pelanggan merasa disambut dan dihargai. Fokus ini berkontribusi pada pemasaran dari mulut ke mulut yang positif, penting dalam industri restoran.

Selain itu, Mie Gacoan responsif terhadap umpan balik pelanggan, sering memasukkan saran ke dalam penawaran atau peningkatan layanan mereka. Komitmen terhadap kepuasan pelanggan ini membangun loyalitas dan menetapkan reputasi merek yang dapat dipercaya.

Inovasi dan arah masa depan

Agar tetap kompetitif dan relevan di pasar yang berubah dengan cepat, Mie Gacoan telah mulai mengeksplorasi inovasi teknologi. Layanan pemesanan dan pengiriman online telah disederhanakan, memenuhi permintaan yang semakin besar untuk kenyamanan, terutama di daerah perkotaan. Pengenalan aplikasi seluler untuk imbalan pemesanan dan loyalitas yang mulus menunjukkan pendekatan pemikiran ke depan merek tersebut.

Mie Gacoan juga menunjukkan minat pada keberlanjutan, mengeksplorasi praktik ramah lingkungan. Ini termasuk menggunakan kemasan biodegradable dan sumber bahan -bahan lokal, yang tidak hanya mendukung petani regional tetapi juga selaras dengan tren keberlanjutan global.

Keterlibatan masyarakat

Mie Gacoan didedikasikan untuk keterlibatan masyarakat, mengorganisir acara dan kegiatan sponsor yang menumbuhkan niat baik dan semangat masyarakat. Kolaborasi dengan badan amal lokal atau sekolah untuk kegiatan penggalangan dana meningkatkan citra merek mereka dan memperdalam koneksi dengan masyarakat.

Pendekatan komunitas-sentris ini tidak hanya membantu dalam membangun loyalitas merek tetapi juga menetapkan Mie Gacoan sebagai bisnis yang bertanggung jawab secara sosial yang peduli dengan lingkungannya.

Tantangan dan kemampuan beradaptasi

Terlepas dari pertumbuhannya yang cepat, Mie Gacoan menghadapi tantangan yang khas dari industri restoran, termasuk persaingan dari merek -merek mapan dan perubahan preferensi konsumen. Namun, merek telah mengadopsi budaya kemampuan beradaptasi, terus menyempurnakan penawaran dan strategi berdasarkan tren pasar.

Dengan tetap selaras dengan keinginan pelanggan untuk opsi yang lebih sehat dan rasa baru, Mie Gacoan dapat berinovasi sambil tetap setia pada penawaran intinya. Kemampuan untuk berputar dan berevolusi dengan pasar menggarisbawahi posisi kuat waralaba.

Kesimpulan

Kenaikan Mie Gacoan sebagai waralaba Indonesia yang populer mencontohkan kekuatan menggabungkan tradisi dengan inovasi. Menu unik merek, ikatan komunitas yang kuat, dan komitmen terhadap kepuasan pelanggan telah terbukti penting untuk keberhasilannya. Ketika terus berkembang dan berevolusi, Mie Gacoan dengan kuat memposisikan dirinya sebagai pendukung dalam adegan kuliner Indonesia, mewujudkan iterasi modern rasa lokal yang dicintai.

Menu Kelezatan Terbaru Di Outlet Mie Gacoan

Menu Kelezatan Terbaru Di Outlet Mie Gacoan

Outlet mie gacoan telah lama memantapkan posisinya sebagai Salah Satu Tempat Makan Mie Yang Paling Diminati di Indonesia. DENGAN Citarasa Yang Menggugah Selera Dan Menu Yang Selalu Diperbarui, Mie Gacoan Terus Menghadirkan Inovasi untuk para Penikmat Kuliner. Menu Terbaru Mereka Tidak Hanya Menawarkan Kelezatan, Tetapi BUGA Pengalaman Kuliner Yang Unik. Mari Kita Telusuri Berbagai Menu Pilihan Terbaru Yang Patut Anda Coba.

1. Spesial Mie Gacoan

Mie Gacoan Spesial Adalah Hidangan Yang Wajib Dicoba. Delang Mi Yang Kenyal Dan Bumbu Yang Kaya Akan Rasa, Menu Ini Menyajikan Kombinasi Sempurna Antara Mi, Sayuran Segar, Dan Daging Pilihan. Paduan Rasa pedas Dan Gurih Membuat Hidangan Ini Sangan Sangan Menggoda. Pelanggan Dapat Memilih Tingkat Kepedasan Sesuai Selera, Dari Yang Rinan Hingga Yang Sangan Peda, Menjadikanya Cocok Untukur Semua Kalangan.

2. Mie luar biasa

Mie yang luar biasa Adalah Salah Satu inovasi Terbaru Yang Diperkenalkanon eh Mie Gacoan. Sajiannya Lebih Besar Dan Melimpah, Menawarkan Porsi Yang Cukup untuk Dibagikan. Terdapat Berbagai Topping Menarik Seperti Bakso, Tofu, Dan Sayuran Segar. Kelezatan Dari Bumbu Yang Khas Membuat Setiap Suapan Menjadi Pengalaman Yang Menggugah Selera. Mie yang luar biasa ini cocok fuTkok Kelompok Yang Ingin Menikmati Makan Bersama-sama.

3. Mie Vegan Sehat

Menjagab Tren Kesadaran Akan Kesehatan Dan Makanan Berbasis Nabati, Mie Gacoan telah meluncurkan Mie vegan Sehat. Hidangan ini Dibuat Dari Bahan-Bahan Organik Dan Bebas Dari Bahan Hewani. Mi Ini Dialah Bersama Aneka Sayuran Segar Dan Bumbu Tanpa Msg, Menjadikananya Pilihan Yang Ringgering Dan Menyehatkan. DENGAN RASA YANG TETAP MEMUASKAN, Menu ini sangat Direkomendasikan Bagi para vegan Dan vegetarian.

4. Mie Gacoan Seafood

BAGI PECINA MAKANAN LAUT, MIE GACOAN SEAFOOD ADALAH PILihan Yang Tak Boleh Dilewatkan. DENGAN PADUAN Udang Segar, Cumi, Dan Kerah Yang Dimasak Sempurna, Hidangan ini Menawarkan Cita Rasa Laut Yang Kaya. Rasa Umami Yang Dihasilkan Dari Kaldu Seafood Yang Kental Berpadu Delangan Mi Yang Kenyal Memkuat Setiap Suapan Terasa Istimewa. Hidangan Ini Sangan Baik Dinikmati Bersama Sambal, utuk Menambah Sensasi Pedasnya.

5. Nasi Goreng Gacoan

Tak Hanya Denkan Dengan Menu Mie, Mie Gacoan Rona Menawarkan Nasi Goreng Gacoan Yang Tak Kalah Menggugah Selera. Nasi Goreng ini dibuat Dari Bahan Berkualitas Tinggi Delanan Pilihan menduduki Seperti Ayam, Seafood, Atau Sayuran. Kuah Sambal Terasi Yang Menytainya Menambahkan Dimensi Rasa Yang Kuat, Menjadikan Hidangan Ini Pilihan Ideal Sabat Menencari Menu Pendamping.

6. Snack Variasi

UNTUK MENJADikan Pengalaman Bersantap Semakin Lengkap, Mie Gacoan Juta Menghadirkan Variasi Snack Yang Menggiurkan, Antara Lain Keripik Tempe, Tahu Crispy, Dan Siomay. Setiap Snack Dibuat Secara Homemade Delangu Bumbu Yang Khas, Anggota Rasa Yang Khas Dan Autentik. Ini Adalah Pilihan Sempurna untuk Menemani Waktu Bersantai Atau Sebagai Appetizer Sebelum Menikmati Hidangan Utama.

7. Minuman Segar

Mie Gacoan Tak Hanya Menyajikan Menu Makanan Yang Lezat, Tetapi MUGA MENAWIKAN VARIASI MINuman Segar Yang Patut Dicoba. Salah Satu Minuman Baru Yang Menarik Adalah Es Teh Gacoan Delan Rasa Buah Segar, Seperti Lemon Atau Markisa. Minuman Ini Tidak Hanya Menyegarkan Tetapi Juta Merupakan Pendamping Yang Sempurna Untuc Hidangan Pedas.

8. Dessert Mie Gacoan

Setelah Makan, Kenikmatan Belum Berakhir! MIE GACOAN KINI BUGA MERYAJIKAN PILihan Dessert Yang Unik, Seperti Mie Goreng Cokelat. Ide Dessert Ini Memadukan Mi Delangan Cokelat Leleh, Anggota Sentuhan Manis Yang Tidak Terduga. Penampilan Yang Menarik Dan Rasa Yang Kreatif Membuat Makanan penutup ini menjadi Penutup Yang Ideal.

9. Paket Hemat Keluarga

UNTUK Pelanggan Yang MEMBAWA KELUARGA ATAU ROMBLAN, MIE GACOAN MENAWIKAN PAKET HEMAT KELUARGA. Paket ini mencakup Beberapa hidangan andalan seperti mie gacoan spesial, snack, Dan Minuman Delangan Harga Yang Terjangkau. Ini Adalah Pilihan Yang Sangan Bijaksana Bagi Mereka Yang Ingin Menikmati Kelezatan Tanpa Harus Menguras Dompet.

10. Lokasi Dan Aksesibilitas

Outlet Mie Gacoan Kini Semakin Banyak Tersebar di Berbagai Kota Di Indonesia, Memudahkan Pelangan GANTUK TUKMATI Menu Terbaru Ini. SUASANA YANG NYAMAN DAN PELAYANAN YANG RAMAH MENJADikan SETIAP KUNJUNGAN TERASA SPESIAL. Mie Gacoan Raga Mengzil Langkah TUKUK AKESIBILITAS BAGI SEMUA PELANGGAN, AREAUK AREAUK RAMAH DIFabel.

11. Loyalitas Program

Sebagai Bentuk apresiasi Kepada Pelanggan Setia, Mie Gacoan Meluncurkan Program Loyalty Yang Menawarkan Keuntungan Bagi Pelanggan Yang Sering Berkunjung. Setiap Pembelian Akan Mengumpulkan Poin Yang Bisa Ditukarkan DGan Promo Menarik, Diskon, Atau Menu Spesial. Hal ini tidak hanya pengguntungkan tetapi buta mendorong pelanggan untuk terus kembali menikmati hidangan yang mereka cintai.

12. Pengalaman Memasak Sendiri

Hadir Gelan Konsep Interaktif, Mie Gacoan Menawarkan Pengalaman Bagi Pengunjung untuk memasak Mi Mereka Sendiri. PANDUAN PANDUAN DARI KOKI BERPENGALAMAN, Pelanggan Dapat Memilih Bahan-Bahan Favorit Dan Memadukanana Sesuai Selera Mereka. Ini menjadi shalat satu daya tarik bagi keluarga dan anak-anak, menjadikan Waktu pencalama pendalaman yang Mendidik Dan Menyenangkan.

Mie Gacoan Berfokus Tidak Hanya Pada Rasa, Tetapi Jaga Pengalaman Yang Menytainya. Menu Terbaru Mereka Menawarkan Keanekaragaman Yang Dapat Dinikmati Oheh Berbagai Kalangan, Dari Pecinta pedas Hingga Yang Mengingitan Pilihan Sehat. DENGAN INOVASI TERUS-MENERUS, MIE GACOAN TETAP BERKOMITMEN UNTUK MENGADIRKAN YANG BERBAIK BAGI Pelanggannya.

Cabang Mie Gacoan: Menyajikan Rasa Khas Indonesia

Cabang Mie Gacoan: Menyajikan Rasa Khas Indonesia

Di Antara Sekian Banyak Kuliner Yang Mendominiasi Dunia Makanan Indonesia, Mie Merupakan Salah Satu Pilihan Yang Paling Digemari. Mie Gacoan Hadir Sebagai Salah Satu Alternatif Hidangan Yang Bukan Hanya Memanjakan Lidah, Tapi Jaga Menggoda Selera Gangan Rasa Yang Khas. Berdiri Kokoh di Industri Kuliner, Mie Gacoan Mengusung Konsep Yang Menarik Perhatian. DGANGAN BERBAGAI CABANG Yang TERSEBAR DI BERBAGAI LOKASI STRATEGIS, RESORAN INI TAK HERYA MIAKAN MIE LEZAT, TETAPI BUGA Pengalaman Menyantap Yang Tak Terlupakan.

Sejarah Mie Gacoan

Mie Gacoan Didirikan Oleh Sekelompok Pengakana Muda Yang MEMILIKI KECINTAAN MENDALAM Terhadap Masakan Indonesia. Dengan Nuansa Modern Dan Cara Penyajian Yang Unik, Mie Gacoan Berhasil Menarik Perhatian Para Pecinta Kuliner. Mengadopsi Bahan-Bahan Lokal Dan Teknik Memasak Yang Penuh Cinta, Setiap Piring Mie Disajikan Gelan Cita Rasa Yang Menggugah Selera.

Menu Unggulan Mie Gacoan

Mie Gacoan Menawarkan Berbagai Jenis Mie Yang Dapat Disesuaika Delangan Selera Pelanggan. Menu Beberapa Unggulanyaa Antara Lain:

  1. Spesial Mie Goreng: Kombinasi Mie Yang Digoreng Delangu Bumbu Khas, Ditambah Dengan Sayuran Segar Dan Protein Pilihan Seperti Ayam, Udang, Atau Tofu, Menjadikan Hidangan Ini Sempurna untuk Penggemar Mie Yang Sua Rasasa.

  2. Mie Kuah Peda: Mie Kuah Gargan Kaldu Yang Kaya Rasa Mendalam, Dilengkapi Delangan Irisan Cabai Segar Dan Bumbu Rahasia Mie Gacoan. Hidangan Ini Sangan Cocok Bagi Mereka Yang Menencari Sensasi Pedas Yang Mengangankan.

  3. Mie Seafood: Pilihan Yang Sangat Digemari, Mie Seafood Terdiri Dari Berbagai Jenis Makanan Laut Yang Segar Seperti Cumi, Udang, Dan Kerang, Disajikan Delangan Mie Yang Kenyal Dan Kuah Kaldu Yang Gurih.

  4. Mie Sayur: Sebagai Pilihan Yang Lebih Sehat, Mie Sayur Dilengkapi Anggan Beragam Sayuran Segar Dan Bumbu Sederhana Yang Tetap Mempertahankan Rasa Otentik Indonesia.

  5. Mie Chicken Teriyaki: Menyajikan Fusion Rasa, Hidangan Ini Menggabungkan Cita Rasa Indonesia Teriyaki Delan Mie, Menghasilkan Kombinasi Yang Kaya Dan Lezat.

Bahan-Bahan Berkualitas

Salah Satu Faktor Yang Membuat Mie Gacoan Menonjol Adalah Fokus Mereka Pada Bahan-Bahan Berkualitas. Restoran ini berkomitmen untuk mengunakan bahan-bahan segar Dan lokal, penggunaan penggunaan dan bahan kimia. DENGAN KUALITAS BAHAN YANG TERJAGA, SETIAP HIDIMAN MENJADI LEBIH SEHAT DAN MERESAP RASA Yang Autentik Dari Masakan Indonesia.

Ciri Khas Penyajian

PENDAJIAN MAKANAN DI MIE GACOAN JUGA PATUT MENDAPATKAN PERHIAT. Setiap piring disajikan gaya gaya yang menarik, sering kali diiringi gargan pelengkap seperti sambal buatan sendiri Yang Berpadu Sempurna Delangan Setiapan Suapan. Hal ini anggota pengalaman Makan Yang Lebih Interaktif Dan Memuaskan.

SUASANA Yang Menyenangkan

Mengunjungi Cabang Mie Gacoan Bukan Hanya Sekadar Menikmati Moranan, Tetapi Ju. Desain Interior Yang Modern Dan Nyaman Membuat Restoran Ini Menjadi Alternatif Tempat Berkumpul Yang Ideal, Baik UNTUK KELUARGA, TEMAN, MAUPUN REKAN BISNIS.

Setiap Cabang Mie Gacoan Dilengkapi Dagan Yang Yang Luas Serta Fasilitas Yang Memadai, Menjadikan Tempat Ini Cocok untuk Acara Kumpul-Kumpul Besar. PELAYANAN PELANANAN Cepat DAN RAMAH, PELANGGAN MERASA DIPERHATIKAN DENGAN BAIK.

Pengalaman Pelanggan

Umpan Balik Dari Pengunjung Menunjukkan Kepuasan Yang Tinggi Terhadap Produk Dan Pelayanan Mie Gacoan. Banyak Yang Menyatakan Bahwa Rasa Mie Yang Otentik Dan Suasana Nyaman Membuat Mereka Kembali Lagi. Promo Menarik Dan Penawaran Paket Keluarga Jaga Membuat Mie Gacoan Semakinin Diminati.

Keterlibatan Komunitas

Sebagai Bagian Dari Konsep Bisnis Yang Bertanggung Jawab, Mie Gacoan Turut Berkontribusi Dalam Kegiatan Sosial Dan Lingkungan. Mereka Sering Mengadakan Acara Amal Dan Menggandeng Komunitas Lokal Unkukung Kegiatan Sosial, Yang Menunjukkan Kepedulian Mereka Terhadap Masyarakat.

Mie gacoan di era digital

Di era Yangin Semakin Digital, Mie Gacoan Memanfaatkan Teknologi UNTUK Meningkatkan Pelyanan Kepada Pelanggan. DENGAN KEHADIRAN DI Platform Digital, Pelangsang Dapat Melakukan Pemesanan Online Delana Mudah Dan Cepat. Selain Itu, Mie Gacoan Rona Aktif Di Media Sosial, Membagikan Informasi Terkini Mengenai Promosi, Menu Baru, Dan Acara Spesial Yang Diadakan Di Cabang-Cabang Mereka.

Kombinasi gargan minuman segar

Melengkapinya, Mie Gacoan Rona Menawarkan Berbagai Pilihan Minuman Yang Menyegarkan. Minuman Tradisional Seperti es Jeruk, Teh Tawar, Dan Minuman Berbasis Buah Selalu Menjadi Favorit. Kombinasi Antara Makanan Yang Pedas Pesar Minuman Yang Menyegarkan Menghasilkan Pengalaman Berantap Yang Lebih Menyeluruh.

Lokasi Strategis

Dengan Cabang Yang Tersebar di Berbagai Lokasi Strategis, Mie Gacoan Membuatinya Muda Diakses Oleh Semua Orang. Tidak Hanya di Pusat Kota, Tetapi Juta di Area Kampus Dan Tempat Berkumpul Lainnya, Tempat Tempat Ini Pilihan Yang Tepat Tepat Untuc Bersantap Kapan Saja.

Waralaba Peluang

Melihat kesukesan dan populeritas yang terus meningkat, mie gacoan membuka peluang bagi investor Yang Berminat untuk franchise Bergabung Dalam Bisnis. SISTEM DENGAN YANG TELAH BERBUKTI DAN DUKANGAN PENUH Dari MANAJEMEN, PELUANG INI MANDI KESEMPATAN BAGI CALON PENGUSAHA UNTUK MENJADI BAGIAN DARI KESUKSAN MIE GACOAN.

Kesimpulan

Cabang Mie Gacoan Bukan Hanya Sekadar Menawarkan Hidangan Mie, Tetapi Bua Menghadirkan Pengalaman Menikmati Cita Rasa Yang Unik Dan Khas Indonesia. Inovasi Dalam Rasa, Penyajian Yang Menarik, Serta Suasana Yang Ramah Telah Menjadikan Mie Gacoan Sebagai Pilihan Yang Tepat Bagi Siapa Saja Yang Ingin Menjelajiahi Kuliner Indonesia. DENGAN Komitmen Pada Kualitas Dan Pelayanan, Mie Gacoan Siap Menjadi Favorit Di Hati Setiap Pecinta Mie.

Lokasi Mie Gacoan TerdeKat Dari Sini: Panduan Lengkap

Mie Gacoan: Sejarah Dan Daya Tarik

Mie Gacoan Adalah Salah Satu Kedai Mie Populer Yang Berasal Dari Indonesia, Denokal Oleh Banyak Penikmat Kuliner Karena Kelezatan Hidanganya Dan Suasana Yang Nyaman. Dengan Dengan Cita Rasa Yang Khas Dan Harga Yang Terjangkau, Mie Gacoan Menyajikan Berbagai Varian Mie Delangu Bumbu Spesial Yang Membuatnya Berbeda Dari Kedai Mie Lainnya. Pendiri Mie Gacoan Belum Lama Ini Mengubah Wajah Industri Kuliner Delangan Memadukan Rasa Tradisional Dan Modern.

Keunggulan Mie Gacoan

Salah Satu Daya Tarik Utama Dari Mie Gacoan Adalah Kepuasan Pelanggan Yang Tinggi. Mie Gacoan Menggunakan Bahan-Bahan Berkualitas Tinggi Dan Segar, Sewingga Menjamin Rasa Dan Tekstur Yang Sempurna. Selain Itu, Kedai Ini JUGA Menawarkan menu variasi Yang Cukup Banyak, Mulai Dari Mie Delan Genang Berbagai Topping, Hingga Minuman Segar Yang Menyegarkan. SUASANA KDAI YANG CERIA DAN LOYANAN YANG RAMAH BERBUAT Pengalaman BERSANTAP MENJADI LEBIH MENYENIGAN.

Menu Andalan Mie Gacoan

  1. Mie Ayam Pangsit: Dish Noodle Ini Terkenal Dagan Daging Ayam Yang Dipotong Dadu Dan Bakso Pangsit Yang Melengkapi Hidangan.
  2. Spesial Mie Goreng: Kombinasi Mie Goreng Yang Penuh Rasa Gangan Topping Sayuran Dan Protein Pilihan Membuatnya Favoriti Banyak Pengunjung.
  3. Mie Kuah Peda: BAGI PENGEMAR MAKANAN PEDAS, Menu ini pasti Menjadi Tantangan Yang Menggugah Selera Demat Sambal Yang Khas Dari Mie Gacoan.

Lokasi Mie Gacoan TerdeKat Dari Sini

BERIKUT ADALAH BEBERAPA LOKASI MIE GACOAN YANG DAPAT ENA KUNJUNI DALAM PERJALANAN MERIKMATI HIDIangan Terenak INI:

  1. Mie Gacoan Senopati

    • Alamat: JL. Senopati No. 27, Jakarta Selatan
    • Jam Buka: 10:30 – 22:00
    • Fitur: Area Parkir, Wi-Fi Gratis, Dan Suasana COZY.
  2. Mie Gacoan Bandung

    • Alamat: JL. Merdeka No. 45, Bandung
    • Jam Buka: 09:00 – 21:00
    • Fitur: Musik Langsung Pada Akhir Pekan, Area Luar Ruang.
  3. Mie Gacoan Surabaya

    • Alamat: JL. Diponegoro No. 20, Surabaya
    • Jam Buka: 11:00 – 23:00
    • Fitur: Tempat Yang Luas, cocok unkuk keluarga.
  4. Mie Gacoan Yogyakarta

    • Alamat: JL. Malioboro No. 12, Yogyakarta
    • Jam Buka: 10:00 – 22:30
    • Fitur: Dekorasi Vintage, Suasana Romantis.

Cara JuJu Mie Gacoan

Mengunjungi Mie Gacoan Sangan Mudah. Untuc Lokasi di Jakarta, Anda Bisa Menggunakan Transportasi Umum Seperti Transjakarta Atau Mrt. Jika Anda Menggunakan Mobil Pribadi, Sebaiknya Menggunakan Aplikasi GPS untuk Menghindari Kemacetan Di Daerah Pusat Kota.

Tip Menikmati Hidangan Di Mie Gacoan

  • Menu Pesan Spesial: Jangan ragu unkeba menu menu spesial setiap Bulanana Yang Biasaanya Menambah Welah Dalam Menu Mie Gacoan.
  • Keranjang kombo COBA: UNTUK memaksimalkan Pengalaman Kuliner, Pesan Combo Basket Yang Terdiri Dari Mie, Tahu, Dan Bakso.
  • Bagikan: Makanan di Mie Gacoan Biasanya Dalam Porsi Besar, Sangan Cocok Untuc Dibagi Dengan Teman Atau Keluarga.

Tinjau Pelanggan

Umpan Balik Berdasarkan Pelanggan, sebusi Besar Anggota Peringkat Yang Sangan Baik Unk Kualitas Makanan Dan Layanan. Banyak Yang Memuji Dari Segi Pembi Serta Kualitas Produk Yang Ditawarkan. Jangan lupa unk melihat Ulasan di berbagai platform seperti google ulasan dan instagram unkapatkan informasi lebih lanjut.

Acara Momen Spesial Dan

Mie Gacoan Rugn Denkenal Sering Mengadakan Event Spesial, Seperti Diskon untuk Ulang Tahun Dan Promo Akhir Pecan. Pastikan unkuti media sosial Mereka unkapi Mendapatkan Berita Terkini Tentang Promosi Dan Event Yang Akan Datas.

Kesimpulan

Mie Gacoan Adalah Pilihan Yang Ideal untuk paragraf Pencinta Mie Yang Menencari Pengalaman Bersantap Yang Menggugah Selera. DENGAN BERBAGAI LOKASI YANG ADA, ENA TIDAK PERLU KHAWATIR UNTUK MENEMUMAN MIE GACOAN TERDEKAT. JELAJAHI SEMUA Varian Menu Yang Ditawarkan Dan Jangan Lewatkan Kesempatan Unkicipi Kelezatan Setiapan Suapan.

Jam Buka Mie Gacoan Secara Resmi

Jam Buka Mie Gacoan Secara Resmi: Informasi Lengkap Dan Muda Dijangkau

Mie Gacoan Adalah Salah Satu Tempat Makan Yang Sangan Populer Di Kalangan Pecinta Kuliner, Terutama Bagi Penggemar Mie. Mie Gacoan Menawarkan Berbagai Menu Mie Delangan Cita Rasa Yang Menggoda Dan Beragam Pilihan Topping. Salah Satu Hal Penting Yang Perlu Darnui Sebelum Mengunjungi Mie Gacoan Adalah Jam Buka Mereka. Dalam Artikel Ini, Kita Akan Membahas Jam Buka Mie Gacoan Secara Resmi Dan Anggota Informasi Lainnya Yang Relevan.

Jam Buka Resmi Mie Gacoan

Mie Gacoan Memiliki Jam Buka Yang Konsisten untuk Anggota Pelayanan Terbaik Kepada Pelanggan Mereka. Secara Umum, Jam Buka Mie Gacoan Adalah Sebagai BerIKUT:

  • SENIN – MINGGU: 10.00 – 22.00 WIB

JAM BUKA INI MENAWIKAN Kesempatan Yang Luas Bagi Pengunjung untuk menikmati mie favorit Mereka sepanjang Hari. DENGAN JAM BUKA YANG FLEKSIBEL, Pelanggan Dapat Dataang Kapan Saja Antara Pukul 10.00 HINGGA 22.00 WIB, Baik UNTUK Makan Siang, Sore, Maupun Malam. Dalam Periode ini, Mie Gacoan Siap Melayani Pelangangan Delangan Menu-menu Yang Beragam Dan Berkualitas.

Pengalaman Makan Di Mie Gacoan

Mie Gacoan Terkenal Tidak Hanya Karena Variasi Menu Yang Ditawarkan, Tetapi Juga Suasana Yang Menyenangkan Dan Nyaman. Dekorasi Yang Sederhana Namun Menarik Memembuat Betah Betah Unkula-lama. Banyak Orang Yang Datang Untuce Merasakan Pengalaman Seru Delangan Teman-Teman Atau Keluarga.

Menu Unggulan Mie Gacoan

Mie Gacoan Memiliki Berbagai Menu Pilihan Yang Menarik, Mulai Dari Mie Ayam, Mie Goreng, Hingga Mie Kuah Gangan Beraneka Jenis Topping Yang Dapat Dipilih Sesuai Selera. Menu Beberapa Unggulan Yang Bisa Dicoba Antara Lain:

  1. Mie Ayam Spesial: Mie Yang Disajikan Delanan Ayam Suwir, Sayuran, Dan Kuah Kaldu Yang Lezat.
  2. Mie Goreng Pedas: Mie Yang Digoreng Dengan Bumbu Peda Yang Menggugah Selera, Dilengkapi Sayuran Dan Telur.
  3. Mie Kuah Seafood: Menyajikan Kombinasi Seafood Segar Dalam Kuah Yang Kaya Rasa.

Menu setiap di mie gacoan dibuat bahan-bahan berkualitas tinggi yang pastinya memanjakan lidah anda.

Pelayanan Dan Pembersihan Di Mie Gacoan

Mie Gacoan RuGA SANGAT MEMPERHATIKAN ASPEK PELAYANAN DAN KERBERSIHAN. Para staf terlatih SIAP MEMBURU PELANGGAN DALAM MEMILIH Menu Dan Memberikan Rekomendasi Sesuai Daman Selera. Tempat Tempat Pembersihan SANGAT DIJAGA, SHINGGA PENGUJUNG DAPAT MENIKMATI MAKANAN DALAM SUASANA YANG NYAMAN DAN BERSIH.

Cara Memesan di Mie Gacoan

Terdapat Beberapa Cara Untuce Makanan Di Mie Gacoan. Anda Dapat Memesan Langsung di Tempat, Atau Melakukan Pemesanan Melalui Aplikasi Layanan Pengantaran Makanan Yang Bekerja Sama Gangan Mie Gacoan. Memesan Melalui Aplikasi Anggota Kemudahan Bagi Pelanggan Yang Lebih Memilih Makan Di Rahat Atau Tidak Memiliki Waktu Untukur Datang Langsung.

Acara Dan Promo Spesial

Mie Gacoan JagA Sering Melakukan Promo Dan Event Spesial UnkuleDarik Pelanggan Agar Lebih Menikmati Pengalaman Makan Mereka. Promo-promo ini sering Kali meliputi Diskon Khusus, Paket Keluarga, Atau Acara Khusus Yang Anggota Pengalaman Berbeda Bagi Pengunjung. MISALYA, MEREKA DAPAT MENGADAKAN ACARA SENTA HARI RAYA ATAU MOMEN SPESIAL LAINYA.

Lokasi Mie Gacoan

Mie Gacoan Memilisi Beberapa Cabang Yang Tersebar di Berbagai Lokasi, Sewingga Memudahkan Pelanggan untuk menemukan dan Mengunjungi tempat ini. Beberapa Cabang Berada Di Pusat Perbelanjaan, Yang Membuatinya Semakin Mudah Dijangkau. Informasi Mengenai Lokasi Lengkap Dan Alamat Setiap Cabang Dapat Ditemukan Di Situs Resmi Atau Media Sosial Mie Gacoan.

FAQ Seputar Mie Gacoan

Di Bawah Ini Adalah Beberapa Peranya Yang Sering Diaajukan Mengenai Mie Gacoan:

  • Apakah Mie Gacoan Menerima Pemesanan untuk Acara Grup Atau Pesta?
    Ya, Mie Gacoan Menerima Pemesanan untuk Acara Grup. Pastikan unkum Menghubungi Mereka Terlebih dahulu unkuk cadangan.

  • Apa saja pilihan topping Yang Tersedia di Mie Gacoan?
    Mie Gacoan Menawarkan Beragam Topping Seperti Ayam, Seafood, Bakso, Sayuran, Dan Banyak Lagi.

  • Apakah Ada Menu Vegetarian Di Mie Gacoan?
    MIE GACOAN BUGA MENYEDIPAN PILihan Menu Vegetarian Yang Bisa Dinikmati Oheh Semua Kalangan.

  • Apakah Mie Gacoan Menyediakan Layanan Takeaway?
    Ya, Mie Gacoan Menyediakan Layanan Takeaway Bagi Pelanggan Yang Ingin Memulang Moranan Mereka.

Kesimpulan

Mengunjungi Mie Gacoan Tentu Menjadi Pengalaman Yang Menyenangkan, Baik UNTUK Pencinta Mie Maupun Penggemar Kuliner. DENGAN JAM BUKA YANG LUAS, Menu Pilihan Yang Bervariasi, Serta Suasana Yang Nyaman, Mie Gacoan Menjadi Salah Satu Destinasi Kuliner Yang Tidak Boleh Dilewatkan. Ketahui Jam Buka Resmi Serta Nikmati Beragam Hidangan Lezat Saatsa Anda Berkunjung Ke Mie Gacoan!

Mie Gacoan vs Mie Setan: A Noodle Showdown

Mie Gacoan vs Mie Setan: A Noodle Showdown

1. Asal usul Mie Gacoan

Mie Gacoan, yang berasal dari Indonesia, telah mengumpulkan popularitas yang sangat besar karena profil rasanya yang unik dan menu yang merayakan bahan -bahan tradisional Indonesia. Didirikan di Yogyakarta, merek mie ini dengan cepat diperluas ke berbagai lokasi, menarik bagi penduduk setempat dan wisatawan. Fitur pembeda Mie Gacoan terletak pada komitmennya untuk keaslian, menggabungkan bahan -bahan segar dan teknik memasak tradisional untuk membuat hidangan yang rumit.

2. Asal mula Mie Setan

Mie Setan, di sisi lain, juga berakar di Indonesia, khususnya Jakarta. Dikenal karena mengambil pendekatan yang lebih berani, Mie Setan berfokus terutama pada penawaran pedas. Nama ‘Setan’ diterjemahkan menjadi ‘iblis’, yang dengan sempurna merangkum reputasi mereka untuk rasa yang berapi -api dan intens. Dengan basis pelanggan yang berkembang pesat, Mie Setan bertujuan untuk menantang batas toleransi rempah -rempah sambil tetap memberikan pengalaman makan yang menyenangkan.

3. Profil rasa: Perbandingan berdampingan

  • Mie Gacoan

    • Level rempah -rempah: Ringan hingga sedang, melayani berbagai preferensi rasa. Sempurna untuk pemula yang tidak yakin tentang hidangan pedas.
    • Catatan rasa: Menekankan keseimbangan harmonik manis, gurih, dan umami. Rasa yang umum ditemukan termasuk Kaldu (kaldu), bawang putih, kecap, dan cabai.
  • Mie Setan

    • Level rempah -rempah: Tinggi, dirancang untuk penggemar rempah -rempah. Setiap hidangan dibuat dengan cermat untuk meningkatkan tingkat panas, sering memuncak dalam ‘tantangan’ bagi pengunjung yang berusaha menguji batas mereka.
    • Catatan rasa: Terutama berfokus pada panas tetapi memberikan tendangan rasa melalui berbagai campuran cabai, bawang putih, dan rempah -rempah aromatik lainnya. Harapkan rasa yang dalam dan kuat dengan panas yang tersisa.

4. Menu Sorotan: Hidangan Tanda Tangan

  • Mie Gacoan: The Star Attraction di Mie Gacoan adalah semangkuk mie goreng khusus mereka, yang dapat disesuaikan dengan segudang topping termasuk ayam, cumi -cumi, dan daging sapi. Mie khas dan basah khas mereka memungkinkan pelanggan pilihan tekstur, sedangkan iringan tradisional meningkatkan pengalaman keseluruhan dengan acar sayuran dan saus cabai.

  • Mie Setan: The Fiery “Mie Setan Challenge” menonjol dengan perpaduan varietas cabai berganda, menciptakan ledakan rasa yang secara khusus melayani mereka yang menganggap rempah -rempah sebagai petualangan. Menu khas mereka juga mencakup berbagai topping seperti keju, daging, dan tahu goreng, memungkinkan untuk pengalaman yang dapat disesuaikan yang meningkatkan panas.

5. Teknik Persiapan

  • Mie Gacoan: Persiapan berfokus pada tumis, yang mengintegrasikan rasa dan tekstur. Koki berhati -hati untuk memastikan bahan dimasak dengan sempurna sambil mempertahankan kesegaran. Sayuran segar biasanya disertakan, memberikan krisis dan getaran, yang menyeimbangkan mie.

  • Mie Setan: Teknik merek dagang mereka melibatkan penggorengan dan mendidih, sering menggabungkan teknik-teknik ini untuk menciptakan tekstur yang kaya dan kenyal yang dapat menahan saus berat. Persiapannya tepat, memungkinkan untuk distribusi panas yang tepat di setiap untai mie, memastikan setiap gigitan konsisten.

6. Suasana dan pengalaman bersantap

  • Mie Gacoan: Memelihara pengalaman bersantap yang nyaman dan santai, perusahaan Mie Gacoan sering menampilkan interior yang bersemangat namun nyaman yang cocok untuk keluarga dan pertemuan besar. Konsep dapur terbuka memungkinkan pengunjung untuk mengamati bagaimana makanan mereka dibuat, menambahkan sentuhan kegembiraan.

  • Mie Setan: Dengan getaran yang lebih muda dan lebih edgier, Mie Setan menarik para pencari sensasi yang bersemangat untuk petualangan kuliner pedas. Suasana hidup, dengan nuansa makanan yang lebih cepat, dirancang untuk makanan cepat saji. Warna -warna cerah, dekorasi unik, dan musik yang energik sering menjadi ciri lokasi mereka.

7. Aspek Nutrisi

  • Mie Gacoan: Berusaha untuk menggabungkan keseimbangan bahan yang sehat, berfokus pada sayuran segar dan protein tanpa lemak. Hidangan mereka seringkali lebih rendah lemak tetapi kaya akan nutrisi, menjadikannya pilihan yang sangat baik untuk pengunjung yang sadar kesehatan.

  • Mie Setan: Sementara masih menawarkan sayuran dan protein, fokus Mie Setan adalah pada rasa dan rempah -rempah daripada kesehatan langsung. Hidangan mereka bisa lebih tinggi natrium dan kalori karena saus yang kuat. Namun, penyesuaian dapat dilakukan untuk pengunjung yang mencari makanan yang kurang sarat rempah-rempah.

8. Popularitas dan Umpan Balik Pelanggan

  • Mie Gacoan: Ulasan positif sering menyoroti kualitas bahan dan kompleksitas rasa. Pelanggan reguler menghargai konsistensi dalam rasa dan presentasi, menjadikannya tempat bagi penduduk setempat dan wisatawan yang menginginkan makanan yang menenangkan.

  • Mie Setan: Tingkat rempah -rempah menerima umpan balik campuran, dengan pendukung yang bersemangat menginginkan lebih banyak panas sementara yang lain menemukan rasanya luar biasa. Meskipun demikian, tonggak seperti tantangan pedas mereka menciptakan momen desas -desus dan media sosial, berkontribusi pada meningkatnya popularitas mereka.

9. Perbandingan Harga

  • Mie Gacoan: Dikenal karena keterjangkauan, Mie Gacoan memberikan makanan berkualitas tanpa merusak bank. Harga biasanya berkisar dari $ 2 hingga $ 7 per hidangan, membuatnya dapat diakses untuk semua.

  • Mie Setan: Sementara sedikit lebih mahal, Mie Setan membenarkan biayanya melalui bahan -bahan khusus dan kebaruan hidangannya. Harga biasanya turun antara $ 4 dan $ 10, terutama untuk makanan tantangan mereka yang menampilkan topping yang lebih mahal.

10. Dampak dan Pengaruh Budaya

Baik Mie Gacoan dan Mie Setan telah membuat tanda yang tak terhapuskan pada lanskap kuliner Indonesia, menampilkan keserbagunaan mie dan permadani yang kaya rasa Indonesia. Mereka melayani berbagai demografi yang memancar dari penawaran unik mereka, memungkinkan budaya mie untuk berkembang sambil mempromosikan bahan -bahan lokal.

Perbedaan utama

Fitur Mie Gacoan Mie Setan
Asal Yogyakarta, Indonesia Jakarta, Indonesia
Profil rasa Seimbang, manis, gurih Pedas, intens
Hidangan khas Mie goreng dengan topping Tantangan Mie Pedas
Teknik persiapan Tumis Menggoreng dan mendidih
Suasana Santai dan ramah keluarga Energik dan serba cepat
Fokus Pelanggan Menu otentik dan beragam Penggemar makanan pedas
Kisaran harga $ 2 – $ 7 $ 4 – $ 10
Aspek Nutrisi Pilihan yang sadar kesehatan Fokus pada rasa, lemak lebih tinggi

Persaingan antara Mie Gacoan dan Mie Setan menggambarkan beragam lanskap budaya kuliner Indonesia, masing -masing menarik bagi selera yang sangat berbeda namun berkontribusi sama terhadap dunia mie yang semarak. Apakah penggemar rasa yang kaya dan menghibur atau pecinta rempah -rempah berapi -api, adegan mie Indonesia memiliki sesuatu untuk semua orang.

Mie Gacoan: Menjelajahi Tingkat Parat Yang Menggugah Selera

Mie Gacoan: Menjelajahi Tingkat Parat Yang Menggugah Selera

Mie Gacoan Merupakan Salah Satu Tempat Makan Yang Sangan Populer Di Indonesia, Khususnya Di Kalangan Pecinta Kuliner Pedas. Daman Beragam Pilihan Mie Dan Tingkat Kepedasan Yang Bervariasi, Mie Gacoan Berhasil Menarik Perhatian Banyak Pengunjung Dari Berbagai Kalangan. APA Yang BEMPAT TEMPAT INI BEGITU ISTIMEWA? Mari Kita Telusuri Berbagai Aspek Yang Membuat Mie Gacoan Layak Unkunjungi.

Menawarkan menu ragam beraneka ragam

Menu Yang Ditawarkan di Mie Gacoan Sangan Beragam. Pengunjung Bisa Memilih Antara Berbagai Jenis Mie, Seperti Mie Goreng, Mie Kuah, Hingga Mie Pedas. Di Antara Semua Pilihan ini, Mie Parat memilisi Daya Tarik Tersendiri. Delanur Fitur Unggulan Dari Menu Ini, Pengunjung Dapat Menentukan Tingkat Kepedasan Yang Diingikans, Mulai Dari Satu Satu Yang, Level Leva Hingga, Yangkan Tantangan Tantangan Besar Bagi Penggemar Pedas Sejati. Selain Mie, Mie Gacoan Rona Menawarkan Berbagai Lauk Pendamping Seperti Ayam, Bakso, Dan Tahu.

TINGAT KEPEDASAN YANG MEMGUGAH SELERA

Salah Satu Daya Tarik Utama Mie Gacoan Adalah Tingkat Kepedasan Yang Ditawarkan. ADA Lima Level Kepedasan Yang Bisa Dipilih Oleh Pengunjung. Level Satu Merupakan Pilihan Aman Tutka Yang Tidak Tidak Terbiasa Gelangan Makanan Pedas, Sementara Level Lima Menantang Indera Pengecap Pengunjung Yang Ingin Merasakan Sensasi Pedas Yang Yang Sangan Menggigit. Mie Gacoan Menggunakan Sambal Buatan Buatan Buatan Kaya Rasa Dan Kualitas Bahan Yang Terbaik Untuce Memastikan Kepuasan Pelangangan.

Kualitas Bahan Dan Proses Memasak

Kualitas Bahan Adalah Salah Satu Aspek Yang Sangan Diperhatikan Oleh Mie Gacoan. Mie Yang Digunakan Adalah Mie Yang Diproduksi Secara Lokal Delangan Tekstur Yang Kenyal Dan Rasa Yang Sedap. Selain Itu, Sayuran Dan Bahan Pendamping Lainnya Jeda Segar Dan Diolak Gangan Cara Yang Higienis. RESEP DENGAN YANG TELAH DIPERBAIKI DAN INOVASI DARI KOKI BERPENGALAMAN, SETIAP PIRING MIE DI MIE GACOAN DIJAMIN MERGGUGAH SELERA.

SUASANA DAN PELYANAN YANG RAMAH

Mie Gacoan Tidak Hanya Menawarkan Moranan Yang Lezat, Tetapi JUGA SUASANA YANG NYAMAN DAN PELAYANAN YANG RAMAH. Interior Interior Yang Modern Dangan Modern Dan Bersih, Pengunjung Dapat Merasakan Atmosfer Yang Menyenangkan. Pelayanan Yang Cepat Dan Staf Yang Siap Membantu Menjadikan Pengalaman Makan Di Mie Gacoan Semakin Menyenangkan. Tak Jarang, Pengunjung Akan Mendapatkan Menu Rekomendasi Dari Para Pelayan Yang Berpengalaman.

HARGA YANG Terjangkau

Salah Satu Faktor Yang Membuat Mie Gacoan Semakin Digemari Adalah Harganya Yang Terjangkau. Dalam Era di Mana Banyak Restoran Menawarkan Haran Yang Selangit, Mie Gacoan Tetap Mempertahankan Haran Yang Bahang Bersahabat di Kantong. DENGAN KISARAN HARGA MULAI DARI IDR 20.000 HINGGA IDR 55.000, Pengunjung bisa Menikmati Seporsi Mie Yang Lezat Ditambah Gangan Berbagai Lauk Pilihan.

Menu Inovasi Musiman

Mie Gacoan Dua Denkenal Karena Inovasi Yangi Terus Berlanjut Dalam Menu Mereka. Setiap musim atuu perayaan tertentus, mie gacoan seringkali menhadirkan menu spesial yang sesuai delan tema tert. Misalnya, saat Bulan Ramadan Tiba, Mereka Biasananya Menawarkan Paket Spesial Berbuka Puasa Yangup Prencakup Beberap Jenis Mie Pedas Panah Harga Menarik. Hal ini tidak hanya menarik pelangangan baru tetapi buta mempertahankan loyalitas pelanggan lama.

Lokasi Strategis

DENGAN CABANG Yang Tersebar di Beberapa Kota Besar Di Indonesia, Seperti Jakarta, Bandung, Dan Surabaya, Mie Gacoan Muda Diakses Oleh Masyarakat. Setiap Cabang Berlokasi di Tempat Strategis, Memudahkan para Pengunjung untuk menikmati Hidangan Tanpa Harus Bepergian Jauh. Parkir Yang Cukup Dan Jarak Yang Dekat Dari Pusat Keramaian Menjadikan Mie Gacoan Pilihan Yang Tepat Tepat Badan Bangan Bersama Teman Atau Keluarga.

Komunitas pecinta pedas

Mie Gacoan Rugn memilisi Komunitas Penggemar Yang Aktif Di Media Sosial. Banyak Pengunjung Membagikan Pengalaman Mereka Saattap Mie Pedas Melalui Foto Dan Video Di Instagram Atau Tiktok. Fenomena ini Semakinin Meningkatkan Popularitas Mie Gacoan Dan Menarik Lebih Banyak Calon Pengunjung Yang Penasaran UNTUK Mencobanya. Tidak Jarang, Mie Gacoan Menyelenggarakan Kompetisi Makan Mie Pedas Yangin Memeriahkan Suasana.

Tip Menikmati Mie Gacoan

Tentang para pecinta pedas, kobalah tidak langsung memilih level tertinggi. Sebaiknya Mulailah Dari Level Yang Lebih Rendah untuk Mengenali Batas Kemampuan Anda. Apabila dan Baru pertama kali datang ke mie gacoan, rekomendasi adalah utuk memesan mie goreng level level dua atuu tiga, di mana anda bisa menikmati rasa pedas yang mengigit tanpa terlalU myiksa liidah. Jangan Lupa JuGA unkoba lauk pendamping, seperti goreng ayam yang renyah dan lezat, menemani setiap suapan mie.

Pengalaman Memuaskan

Setiap Kunjungan ke mie gacoan dijamin anggota pengalaman memuaskan. Dari Cita Rasa Yang Otentik, Menu Variasi, Hingga Pelayanan Yang Baik, Mie Gacoan Berhasil Mesenciptakan Tempat Yang Tidak Hanya Sekadar Untukur Tetapi Tetapi Bua Berbagi Pengalaman Anggan Orang Terdeku. Setiap sambaran mie pedas yang dan nikmati adalah petualangan Rasa yang tidak Akan lupakan.

Mie gacoan di era digital

Seiring Perkembangan Teknologi, Mie Gacoan Jaga Beradaptasi Gangan Cara-Cara Modern Untka-Menjangkau Pelangangan. Mereka Meneka Layanan Pesan Antar Melalui Beberapa Platform Pengiriman, Sewingga Penggemar Tidak Perlu Jauh-Jauh Datang Ke Restoran, Terutama Pada Saat Hujan Atau Saik Malas UNTUK Keluar Rumah. Hal ini semakinin menjadikan mie gacoan pilihan makhah bagi mereka yang ingin menikmati hidangan tanpa haru meningganya kenyamanan ruman.

DENGAN SEGALA DAYA TARIK INI, MIE GACOAN BERDIRI SEBAGAI DESTINASI KULINER YANG WAJIB DICOBA, TERUTAMA BAGI MANA YANG MERUPAKAN PENGemar MASAKAN PEDAS.

Rasa Mie Gacoan: Perjalanan Kuliner Melalui Rasa

Sejarah Rasa Mie Gacoan

Rasa Mie Gacoan telah menjadi lambang kegembiraan kuliner di Indonesia, menghubungkan generasi melalui sejarah dan citarasa yang kaya. Berasal di jalan -jalan Java yang ramai, khususnya di Yogyakarta, Mie Gacoan mendapatkan popularitas karena perpaduan unik dari teknik memasak tradisional dan modern. Nama “Gacoan” itu sendiri adalah istilah sehari -hari yang mengacu pada tempat makan lokal yang sering dikunjungi oleh siswa dan keluarga.

Pemula Mie Gacoan dapat ditelusuri kembali ke awal 2010 -an ketika sekelompok penggemar kuliner muda berusaha untuk merevitalisasi rasa tradisional Indonesia. Mereka berinovasi dengan menggabungkan mie klasik dengan berbagai rempah -rempah dan bahan regional, pada akhirnya menciptakan hidangan khas yang selaras dengan selera lokal.

Hidangan khas

Mie Gacoan mencakup serangkaian hidangan yang beragam dan beraroma. Bintang menu, tentu saja, adalah Mie Gacoan, yang menampilkan mie kenyal, tangan yang dimasak dengan sempurna. Hidangan ini sering disajikan dalam kaldu yang diresapi dengan serangkaian rempah -rempah, meningkatkan profil gurihnya.

Di antara penjual teratasnya adalah:

  • Mie Ayam (mie ayam): Potongan ayam lembut diasinkan di rumah saus khusus dan dipasangkan dengan mie aromatik. Hidangan ini dirayakan karena harmoni tekstur dan citarasa.

  • Mie Goreng (mie goreng): Tumis dengan kesempurnaan yang lezat, Mie Goreng menggabungkan sayuran segar, telur, dan campuran rempah-rempah, menawarkan opsi yang menghibur bagi semua penggemar mie.

  • Mie Ceker (Mie Kaki Ayam): Pilihan yang berani ini menyoroti kreativitas kuliner di Rasa Mie Gacoan, karena kaki ayam direbus dalam kaldu yang kaya, memberikan rasa yang dalam pada mie.

Bahan yang membuat perbedaan

Rasa Mie Gacoan menekankan bahan-bahan segar berkualitas tinggi yang berkontribusi pada reputasinya yang lezat. Mie terbuat dari perpaduan khusus tepung yang memastikan tekstur yang sempurna, menghasilkan gigitan yang kenyal dan memuaskan.

Setiap mangkuk atasnya dengan bumbu segar, termasuk bawang hijau dan ketumbar, yang memberikan sentuhan harum. Penggunaan saus cabai buatan sendiri adalah ciri khas lain, menambahkan tendangan untuk setiap hidangan. Keseimbangan elemen yang manis, gurih, dan pedas dibuat dengan cermat, menarik bagi berbagai preferensi rasa.

Pengalaman kuliner

Makan di Rasa Mie Gacoan bukan hanya tentang makanan; Ini adalah pengalaman sensorik. Suasana yang hangat dan bersemangat dilengkapi dengan aroma yang melayang dari dapur, melibatkan para tamu segera setelah mereka masuk.

Setiap meja dilengkapi dengan bumbu, memungkinkan pengunjung untuk menyesuaikan makanan mereka sesuai dengan preferensi mereka. Staf yang ramah berkontribusi pada pengalaman keseluruhan, memperkaya dengan pengetahuan mereka tentang menu dan dedikasi untuk layanan pelanggan.

Rasa Mie Gacoan di seluruh Indonesia

Sementara lokasi terkenal dapat ditemukan di Yogyakarta, riak popularitas Rasa Mie Gacoan telah berkembang di seluruh Indonesia, dengan cabang -cabang yang tumbuh di kota -kota seperti Jakarta, Surabaya, dan Bandung. Setiap pendirian mempertahankan nilai -nilai inti kualitas dan keaslian sambil beradaptasi dengan selera lokal.

Dengan menawarkan spesialisasi regional, masing -masing cabang memastikan bahwa esensi dari resep asli tetap utuh, namun menawarkan sentuhan unik untuk memuaskan preferensi kuliner yang beragam.

Kesehatan dan nutrisi

Menanggapi pertumbuhan tren sadar kesehatan, Rasa Mie Gacoan telah mengadaptasi menunya untuk memasukkan pilihan yang lebih sehat tanpa mengorbankan rasa. Ketersediaan mie gandum utuh dan peningkatan fokus pada topping sayuran mencerminkan komitmen untuk makan bergizi.

Selain itu, pelanggan dapat meminta opsi natrium yang lebih rendah, dan penyesuaian tingkat pedas untuk memenuhi pembatasan dan preferensi makanan. Fokus pada kesehatan ini meluas ke praktik sumber mereka juga, memprioritaskan bahan -bahan lokal untuk mendukung pertanian berkelanjutan.

Keterlibatan masyarakat

Rasa Mie Gacoan didedikasikan tidak hanya untuk menyenangkan selera tetapi juga untuk mendorong hubungan masyarakat. Perusahaan ini sering terlibat dalam acara -acara lokal, mensponsori festival makanan dan kompetisi kuliner yang memamerkan masakan Indonesia.

Selain itu, mereka secara aktif berpartisipasi dalam program amal, menyediakan makanan bagi mereka yang membutuhkan dan mengintegrasikan etos tanggung jawab sosial ke dalam model bisnis mereka.

Buzz Media Sosial

Hidangan Rasa Mie Gacoan yang semarak telah menarik perhatian blogger dan influencer makanan, mengumpulkan kehadiran yang kuat pada platform seperti Instagram dan Tiktok. Foto -foto berwarna -warni dari hidangan, dipasangkan dengan deskripsi yang menarik, membuat buzz yang terus menarik pelanggan baru.

Keterlibatan di media sosial mempromosikan tidak hanya item menu tetapi juga gagasan untuk menciptakan pengalaman yang tak terlupakan, lebih lanjut membangun Rasa Mie Gacoan sebagai landmark budaya tercinta dalam makanan Indonesia.

Kesimpulan: Warisan kuliner

Rasa Mie Gacoan mewujudkan permadani yang kaya rasa dan pengalaman yang mencerminkan warisan budaya Indonesia. Dari asal -usul yang sederhana hingga pokok di kancah makanan modern, itu berdiri sebagai perwakilan yang bangga atas masakan lokal. Melalui dedikasinya terhadap kualitas, komunitas, dan inovasi, Rasa Mie Gacoan berjanji untuk tetap menjadi tujuan tercinta bagi pecinta makanan selama bertahun -tahun yang akan datang.

Pendekatan ini mewujudkan gagasan bahwa makanan bukan hanya rezeki tetapi juga cara untuk menghubungkan, merayakan, dan menghargai rasa kehidupan yang rumit.

Tinjau Mie Gacoan: Petualangan Kuliner di Mie Indonesia

Tinjau Mie Gacoan: Petualangan Kuliner di Mie Indonesia

Menyelam ke masakan Indonesia

Indonesia, sebuah kepulauan yang dikenal karena permadani budaya dan citarasa yang kaya, menawarkan pemandangan makanan yang tak tertahankan. Di antara banyak kesenangan kulinernya, Mie Gacoan menonjol sebagai suar bagi penggemar mie. Restoran ini melambangkan semangat makanan jalanan Indonesia sambil memberikan suasana bersantap yang nyaman yang mengundang penduduk setempat dan wisatawan.

Getaran di Mie Gacoan

Setelah memasuki Mie Gacoan, para tamu disambut dengan suasana yang mengundang yang ditandai oleh dekorasi modern yang memberi penghormatan kepada elemen tradisional Indonesia. Warna -warna cerah dan suasana yang ramai menciptakan lingkungan yang hangat dan ramah. Tata letak restoran mendorong santapan sosial, dengan meja-meja komunal dan dapur terbuka yang menampilkan para koki saat mereka membuat hidangan yang menggiurkan.

Pemilihan mie

Mie Gacoan berspesialisasi dalam berbagai hidangan mie, menggunakan basis mie gandum yang dikenal sebagai “Mie.” Yang membedakan mereka adalah komitmen mereka terhadap kualitas. Mie dibuat segar setiap hari, mencapai tekstur kenyal sempurna yang sangat penting untuk hidangan mie yang enak. Opsi menu termasuk:

  1. Mie Goreng: Hidangan mie goreng ini adalah favorit orang banyak, disajikan dengan medley sayuran, protein, dan campuran rempah -rempah. Keseimbangan rasa yang manis, gurih, dan pedas menciptakan simfoni yang menyenangkan untuk langit -langit.

  2. Mie Kuah: Bagi mereka yang lebih suka kaldu yang menghangat, Mie Kuah menawarkan pilihan yang memuaskan dan menghibur. Dikemas dalam kaldu harum yang diperkaya dengan rempah -rempah, hidangan ini dapat menampilkan ayam, daging sapi, atau sayuran, disesuaikan dengan preferensi individu.

  3. Mie Chillies: Persembahan petualang untuk pecinta rempah -rempah, hidangan ini menggabungkan mie dengan saus cabai yang kaya yang menawarkan tendangan berapi -api. Seimbang dengan sedikit rasa manis dan dihiasi dengan rempah-rempah segar, ini bukan untuk orang yang pingsan tapi sangat bermanfaat bagi mereka yang berani.

Pendamping dan lauk

Untuk meningkatkan pengalaman mie Anda, Mie Gacoan menyediakan serangkaian lauk yang lezat.

  • TAHU TEK: Hidangan ini menampilkan tahu goreng yang disajikan dengan saus kacang yang indah melengkapi tekstur renyah.

  • Kerupuk: Camilan Indonesia yang populer, keripik renyah ini yang terbuat dari berbagai pati sangat cocok untuk menghiasi hidangan mie atau menikmati sendiri.

  • Sayur Asem: Sup sayuran yang menyegarkan yang diresapi dengan asam, hidangan ini menawarkan kontras yang ringan dan tajam dengan mie yang lezat, meningkatkan keseimbangan keseluruhan makanan.

Pasangan minuman

Mie Gacoan mengakui bahwa makanan luar biasa berjalan seiring dengan minuman yang tepat. Pengunjung dapat memilih dari minuman tradisional Indonesia, seperti Es teh manis (teh es manis) dan Kopitiam (Kopi tradisional), keduanya dikenal karena kualitasnya yang menyegarkan. Untuk sesuatu yang unik, coba Es Cendolminuman hidangan penutup yang terbuat dari jeli tepung nasi hijau dan santan, memberikan final yang manis untuk makanan Anda.

Kualitas bahan

Salah satu ciri khas Mie Gacoan adalah penekanannya pada bahan-bahan segar yang bersumber secara lokal. Komitmen untuk menggunakan produk berkualitas terbukti di setiap hidangan. Sayuran renyah, proteinnya empuk, dan rempah -rempah dan rempah -rempahnya bersemangat. Dedikasi ini tidak hanya mendukung praktik pertanian lokal tetapi juga memastikan bahwa setiap mangkuk mie meledak dengan rasa.

Pengalaman layanan

Di Mie Gacoan, layanan ini mencontohkan keramahan Indonesia. Anggota staf penuh perhatian dan ingin berbagi rekomendasi mereka, membuat pengalaman bersantap merasa dipersonalisasi. Apakah membimbing Anda melalui menu yang luas atau menawarkan untuk menyesuaikan level rempah -rempah, tim menumbuhkan rasa kebersamaan dan koneksi.

Poin dan Nilai Harga

Mie Gacoan menonjol tidak hanya karena penawaran kulinernya tetapi juga untuk aksesibilitasnya dalam hal harga. Hidangannya terjangkau, sehingga memungkinkan untuk menikmati makanan lengkap tanpa merusak bank. Restoran ini juga menyediakan porsi yang murah hati, memastikan bahwa pengalaman Anda memuaskan dan nilai uang yang sangat baik.

Petualangan kuliner menunggu

Bagi mereka yang mencari rasa otentik Indonesia, Mie Gacoan menawarkan perjalanan kuliner melalui beragam hidangan mie yang merangkul esensi budaya yang semarak ini. Restoran ini melayani tidak hanya untuk penikmat masakan Asia yang berpengalaman tetapi juga bagi mereka yang baru dengan rasa Indonesia.

Pengunjung tidak hanya menikmati makanan yang lezat tetapi juga membenamkan diri dalam suasana yang meriah yang menggemakan kegembiraan jalan -jalan yang ramai di Indonesia.

Jika Anda bertanya -tanya di mana harus memanjakan hasrat mie Anda, Mie Gacoan harus tinggi dalam daftar Anda. Di dunia yang semakin terpikat dengan rasa global, restoran ini berdiri sebagai bukti seni keahlian memasak Indonesia. Perjalanan melalui hidangan aromatik, sehat, dan menggembirakan yang ditemukan di sini menjanjikan pengalaman bersantap yang mengesankan yang akan membuat Anda kembali untuk mendapatkan lebih banyak.

Pikiran terakhir tentang Mie Gacoan

Apakah berbagi makanan dengan teman atau menikmati petualangan kuliner soliter, makan di Mie Gacoan adalah pengalaman yang melampaui rezeki belaka. Kombinasi rasa, suasana, dan keramahtamahan menghadirkan cara unik untuk menghargai lanskap kuliner yang kaya di Indonesia. Perpaduan bahan yang harmonis memastikan setiap gigitan dikemas dengan kedalaman dan karakter.

Menjadikan Mie Gacoan bagian dari perjalanan kuliner Anda berarti tidak hanya mencicipi makanan tetapi juga berpartisipasi dalam pengalaman budaya yang menyoroti esensi masakan Indonesia, menjanjikan makanan dan kesenangan bagi semua orang yang masuk.