(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: Mengapa Kuliner ini Sedang Booming?

Mie Gacoan: Mengapa Kuliner ini Sedang Booming?

Asal Usul Mie Gacoan

Mie Gacoan Berasal Dari Kota Yogyakarta, Indonesia, Dengan Rasa Yang Unik Dan Cara Penyajian Yang Kreatif. Makanan ini Terbuat Dari Mie Yang Kenyal, Seringkali Disajikan Daman Berbagai Bumbu Khas Indonesia. Kombinasi Rasa Manis, pedas, Dan gurih membuat mie gacoan menjadi pilihan yang sangat menarik bagi penggemar kuliner. DENGAN HIDIMAN OLAHAN YANG BERAGAM, MIE GACOAN Berhasil Menarik Perhatian Para Pengunjung, Baikal Lokal Maupun Wisatawan.

Varian Menu Yang Menggugah Selera

Salah Satu Poin Utama Yang Membuat Mie Gacoan Populer Adalah Variasi Menu Yang Ditawarkannya. Menu di Antara Yang Terkenal, Beberapa Pilihan Populer Adalah:

  1. Mie Goreng Gacoan

    • Mie Goreng Yang Dilengkapi Delangu Bumbu Rahasia. Rasananya Pedas Manis, Menjadikan Setiap Suapan Terasa Menggugah Selera.
  2. Mie Kuah Peda

    • Mie Yang Disajikan Dalam Kuah Kaldu Yang Kaya Rasa Delangat Tingkat Kepedasan Variatif, memuncinkan pelangan uNTUK Menyesuaika sesuai selera.
  3. Mie Katsu

    • Kreasi Unik Gangan Topping Ayam Katsu Yang Renya Yang Menambah Cita Rasa Dan Tekstur Hidangan.
  4. Mie Seafood

    • Kombinasi Mie Delan Aneka Seafood Segar, Anggota Sensasi Baru Bagi Pecinta Makana Laut.

Inovasi Dalam Penyajian

Mie Gacoan Ragua Telah Memperkenalkan Berbagai Inovasi Dalam Penyajiannya. Makanan ini sering disajikan dalam mangkuk besar gangan paduan sayuran segar Dan topping Yang melimpah. Cara Penyajian Yang Menarik Dan Instagrammable Ini Semakinin Memikat Generasi Muda Yang Sangan Aktif Di Media Sosial. Bercengkerama SAMBIL MENIKMATI SEMANGKUK MIE GACOAN MENJADI PENGALAMAN MAKAN YANG SERU DAN PENUH KENIangan.

Strategi pemasaran di media sosial

Kebohasilan Mie Gacoan Tidak Terlepas Dari Pemasaran Efektif Yang Memanfaatkan Media Sosial. Merek ini aktif di platform-platform seperti Instagram Dan Tiktok, Di Mana Mereka Memposting Konten Yang Menarik Dan Menggugah Selera. Banyak Influencer Kuliner Yang Berkolaborasi Delangan Mie Gacoan UNTUK PENCICTI DAN BERKALAMAN MEREKA. Pendekatan ini memiptakan buzz dan memperluas jangkauan pasar, menarik perhatian lebih banyak pelangan.

LINGKUNGAN DAN KONSEP CAFé Yang Nyaman

Mie Gacoan Bukan Hanya Sekadar Tempat Makan; Mereka Memiliki Konsep Café Yang Nyaman Dan Bersahabat. Desain Interior Yang Modern Delangan Sentuhan Budaya Lokal Menciptakan SueSana Yang Hangat. Tempat Duduk Yang Luas Dan Orang-Orang Yang Ceria Membuat Mie Gacoan Menjadi Tempat Yang Ideal Unkumbul Delangan Keluarga Maupun Teman-Teman. Fasilitas wi-fi fratis di mie gacoan juga menjadi daya tarik terendiri bagi pengunjung yang ingin bekerja atuu belajar sambil menikmati hidangan.

Kesadaran Akan Pentingnya Bahan Berkualitas

Mie Gacoan Sangan Memperhatikan Kualitas Bahan Baku. Mereka Menggunakan Mie Yang Diolak Dari Bahan Bahan Premium Dan Sayuran Segar, Menjadikan Hidangan Tidak Hanya Lezat Tetapi Buga Menyehatkan. Kesadaran Konsumen Terhadap Pentingnya Konsumsi Makanan Sehat Semakinkat, Dan Mie Gacoan Merespons Daman Menjaga Kualitas Setiap Hidangan Yang Mereka Sajikan.

HARGA YANG Terjangkau

Salah Satu Faktor Lain Yang Mendukung Booming Mie Gacoan Adalah Haran Yang Yang Terjangkau. DENGAN MENWI daran Hidangan Berkualitas Tinggi Tanpa Menguras Kantong, Mie Gacoan Sukses Menarik Berbagai Kalangan Pelanggan. Baik Mahasiswa Maupun Keluarga, Semuanya Dapat Menikmati Hidangan Lezat Dari Mie Gacoan Delangan Haran Yang Benang Bersahabat.

Kompetisi di Industri Kuliner

Persaingan di Industri Kuliner Di Indonesia Semakin Ketat, Namun Mie Gacoan Berhasil Bembedakan Diri Delangan Menawarkan Pengalaman Yang Berbeda. Mereka Tetap Inovatif Delangan Menambahkan Menu-Musiman Dan Penawaran Khusus, Menjaga Pelanggan Tetap Tertarik Dan Kembali Lagi. Pendekatan ini memunckinan mie gacoan tidak hanya Berlahan, tetapi buta berkembang pesat dalam pasar kuliner yang sangat kompetitif.

Peran Mie Gacoan Dalam Budaya Kuliner Indonesia

Mie Gacoan Rona Berkontribusi Dalam Memperkenalkan Dan Melestarikan Kuliner Khas Indonesia. DENGAN MENYAJikan Mie Yang Dipadukan Delangan Berbagai Bumbu Tradisional, Mie Gacoan Memperkenalkankan Cita Rasa Lokal Kepada Generasi Muda. Hal ini mem -Penting Mentuc Menjaga Warisan Kuliner Indonesia Tetap Hidup Dan Terus Berkembang.

Umpan Balik Pelanggan Yang Positif

Reputasi mie gacoan semakinin dipkerkuat melalui umpan balik positif Dari pelanggan. Banyak Yang Memuji Rasa, Porsi Yang Cukup, Dan Pelayanan Yang Ramah. Pelanggan Yang Bahagia Cenderung Menyebarkan Informasi Secara Wirman, Yang Sangan Efektif Dalam Menarik Lebih Banyak Pengunjung.

Ekspansi dan pertumbuhan bisnis

Mie Gacoan Terus Melakukan Ekspansi, Tidak Hanya Terbatas Di Yogyakarta, Tetapi Ju. Strategi ini menjadikanya shalat satu Merek kuliner Yang Kini Banyak Diincar. Permintaan Yang Tinggi Dan Perumbuhan Yang Cepat Mencermikan Daya Tarik Mie Gacoan Di Kalangan Pecinta Kuliner.

Mengapa Pelanggan Kembali?

Kembali Ke Mie Gacoan Selain untuk Menikmati Rasa Yang Lezat, Juta UNTUK MERASAKAN SUASANA HANGAT DAN LOYANAN YANG BAIK. Program Melalui Loyalitas Dan Berbagai Promosi, Mie Gacoan Menjamin Kepuasan Pelanggan, Membuat Mereka Merasa Dihargai. Pengalaman Berulang Ini Menjadikan Mie Gacoan Sebagai Salah Satu Tempat Favorit Bagi Banyak Orang.

Meningkatnya Kesadaran Akan Kuliner Lokal

Dalam Beberapa tahun terakhir, Ada peningkatan minat terbadap kuliner lokal di indonesia, dan mie gacoan berada di garis terdepan dalam tren ini. DENGAN MENWI dita Rasa Yang Otentik Dan Berani, Mie Gacoan telah menjadi Simbol Dari Kebangkitan Kuliner Indonesia, Menarik Perhatian Baikian Ke Dari Pasar Maupun Internasional.

Daman Kombinasi Semua Faktor ini, Tidak Heran Jika Mie Gacoan Sedang Booming Saat Ini. Eksplorasi Rasa, Inovasi Penyajian, Dan Strategi Pemasaran Yang Efektif Menjadikan Mie Gacoan Tidak Hanya Menjadi Hidangan, Tetapi Sebuah Pengalaman Kuliner Yang Patut Dicoba oleh Setoa Pecita PeciKa Moran.

Mie Gacoan: Panduan Utama untuk Pengalaman Resto Teratas

Mie Gacoan: Panduan Utama untuk Pengalaman Resto Teratas

Sejarah Singkat Mie Gacoan

Didirikan di Indonesia, Mie Gacoan dengan cepat bangkit untuk menjadi penantang penting di ranah pengalaman kuliner, terutama bagi penggemar mie. Didirikan pada tahun 2016, pandang unik Mie Gacoan tentang mie tradisional Indonesia mendorongnya menjadi sorotan. Dengan penekanan pada bahan -bahan segar dan rasa yang berani, rantai restoran telah berhasil menarik basis pelanggan yang setia. Komitmen merek untuk memberikan layanan terkemuka dan rasa asli memperkuat posisinya di antara pengalaman bersantap yang paling dicari di Indonesia.

Apa yang membedakan Mie Gacoan?

Penawaran unik

Mie Gacoan terkenal dengan menu beragamnya, yang menampilkan serangkaian hidangan mie, termasuk tetapi tidak terbatas pada:

  • Mie Goreng: Hidangan mie tumis klasik, dimasak dengan sempurna dan kaya rasa.
  • Mie Kuah: Varian mie pekat, sering disajikan dengan berbagai protein dan sayuran.
  • Varian pedas: Hidangan khas dengan berbagai tingkat kepedasan yang melayani langit -langit yang suka berpetualang.
  • Lauk pauk: Iringan yang meningkatkan pengalaman makan, termasuk tahu goreng renyah dan pangsit ayam yang lezat.

Bahan berkualitas

Mie Gacoan bangga akan kualitas bahan -bahannya. Sayuran segar, protein premium, dan mie buatan sendiri bergabung untuk membuat hidangan yang lezat dan sehat. Komitmen pendirian untuk menggunakan bahan-bahan alami dan organik sedapat mungkin beresonansi dengan pengunjung yang sadar kesehatan yang mencari kesenangan bebas rasa bersalah.

Lingkungan dan suasana

Restoran Mie Gacoan dirancang dengan estetika modern, memadukan elemen tradisional Indonesia dengan bakat kontemporer. Suasana yang nyaman namun semarak menjadikannya tempat yang sempurna untuk santapan santai, pertemuan keluarga, atau mengejar ketinggalan. Pencahayaan hangat, ditambah dengan tata letak yang bersih dan mengundang, meningkatkan pengalaman bersantap dan mendorong pelanggan untuk berlama -lama dalam makanan mereka.

Sorotan menu

Sementara seluruh menu di Mie Gacoan menarik, hidangan tertentu telah menjadi favorit penggemar dan sering direkomendasikan:

Mie Gacoan Special

Hidangan mie khas ini menampilkan mie al dente yang dilemparkan ke dalam saus buatan rumah khusus dan dihiasi dengan pilihan topping seperti ayam, daging sapi, dan sayuran. Kombinasi yang kaya dari rasa dan tekstur membuat hidangan ini harus dicoba.

Nasi goreng Gacoan

Bukan mie, tetapi pilihan nasi goreng layak mendapat sorotan. Tumis dengan sempurna dengan serangkaian rempah -rempah, hidangan ini berfungsi sebagai iringan yang sangat baik untuk makanan apa pun atau makanan yang memuaskan sendiri.

Sayap ayam pedas

Goreng untuk kesempurnaan renyah dan dilapisi dalam glasir pedas, sayap ini menambah tendangan untuk pengalaman bersantap. Sempurna untuk berbagi atau sebagai hidangan pembuka, sayap ayam pedas adalah orang yang menyenangkan.

Opsi pencuci mulut

Jangan lewatkan menu makanan penutup! Mie Gacoan menawarkan pilihan makanan penutup tradisional Indonesia yang memberikan akhir yang sempurna untuk makanan Anda. Pilihan mungkin termasuk Pisang Goreng (pisang goreng) dan berbagai jeli beraroma, semuanya disajikan dengan indah.

Akomodasi diet

Mie Gacoan bertujuan untuk memenuhi berbagai persyaratan diet, memastikan bahwa setiap orang dapat menikmati makanan di sana. Pilihan vegetarian dan vegan sudah tersedia, dengan hidangan yang dibuat khusus untuk mengecualikan produk hewani sambil tetap mempertahankan rasa yang kaya. Alternatif bebas gluten untuk mie juga dapat diminta, memungkinkan mereka yang memiliki pembatasan diet untuk menikmati tanpa kompromi.

Pengalaman pelanggan

Kualitas layanan

Di Mie Gacoan, layanan luar biasa merupakan bagian integral dari pengalaman pelanggan. Anggota staf dilatih untuk penuh perhatian, ramah, dan berpengetahuan tentang menu. Pelanggan sering memuji efisiensi layanan, memastikan bahwa makanan disajikan panas dan segera, meningkatkan pengalaman bersantap secara keseluruhan.

Pemesanan dan Pengiriman Online

Menyadari permintaan akan kenyamanan, Mie Gacoan telah menerapkan sistem pemesanan online yang kuat. Pelanggan dapat dengan mudah menelusuri menu dan melakukan pemesanan untuk penjemputan atau pengiriman. Bermitra dengan layanan pengiriman makanan populer lebih lanjut memastikan bahwa hidangan mereka dapat dinikmati di rumah tanpa mengurangi kualitas.

Lokasi

Ketika Mie Gacoan terus tumbuh, lokasinya telah berkembang secara signifikan di seluruh Indonesia. Dengan banyak outlet di kota -kota besar seperti Jakarta, Bandung, dan Surabaya, kemungkinan restoran Mie Gacoan ada di dekatnya, membuatnya nyaman bagi penduduk setempat dan pelancong yang berkeliling Indonesia. Setiap lokasi mempertahankan standar kualitas dan layanan yang sama, memastikan pengalaman yang konsisten di seluruh papan.

Acara dan promosi

Penawaran musiman

Mie Gacoan sering meluncurkan promosi musiman yang mendorong pelanggan untuk mencoba hidangan baru atau menikmati favorit dengan harga diskon. Baik itu fitur menu khusus selama festival lokal atau diskon eksklusif pada hari -hari tertentu, ada baiknya mengawasi promosi mereka untuk memaksimalkan kenikmatan makan.

Program Loyalitas

Pelanggan biasa mungkin ingin mendaftar di Program Loyalitas Mie Gacoan. Keanggotaan ini memberi penghargaan kepada pelanggan dengan poin untuk setiap pembelian, yang dapat ditebus dengan diskon, gratis, atau promosi khusus. Inisiatif semacam itu tidak hanya menumbuhkan loyalitas pelanggan tetapi juga membuatnya bermanfaat bagi pengunjung yang sering.

Keterlibatan Media Sosial

Mie Gacoan telah menetapkan kehadiran yang kuat di berbagai platform media sosial, memungkinkan mereka untuk terhubung dengan audiens mereka secara efektif. Melalui konten yang menarik, termasuk hidangan yang disajikan dengan indah dan di belakang layar melihat dapur, pelanggan tetap mendapat informasi dan terinspirasi. Mereka sering berbagi ulasan pelanggan, yang meningkatkan kredibilitas dan menumbuhkan komunitas pecinta mie yang terlibat.

Kesimpulan

Dengan dedikasinya terhadap kualitas, rasa yang unik, dan suasana yang ramah, Mie Gacoan tidak diragukan lagi merupakan pesaing teratas dalam adegan kuliner Indonesia. Dari beragam penawaran menu hingga suasana yang mengundang, pengunjung diberikan pengalaman luar biasa yang membuat mereka kembali untuk mendapatkan lebih banyak. Apakah Anda seorang wisatawan lokal atau penasaran, Mie Gacoan adalah tujuan yang menyenangkan yang menjanjikan kepuasan di setiap mangkuk.

Mie Gacoan: Menggugah Selera Delangan Rasa Otentik

Mie Gacoan: Menggugah Selera Delangan Rasa Otentik

Mie Gacoan Telah Menangkap Perhatian Para Pencinta Kuliner Di Indonesia Dgan Keunikan Dan Kelezatan Mie Yang Ditawarkan. Mie ini merupakan shalat Satu Sajian Mie Yang Terkenal Rasa Rasa Pedasnya Dan Menjadi Favorit Di Kalangan Anak Muda. Mie Gacoan Menyediakan Berbagai Pilihan Menu Yang Menggugah Selera, Menjadikanyaumya Satu Tempat Makan Yang Wajib dikunjungi.

Sejarah Mie Gacoan

Mie Gacoan Berdiri Sejak Tahun 2017 Dan Segera Mengzil Tempat Di Hati Para Penggemar Mie. Nama “Gacoan” Berasal Dari Kata “Gaco”, Yang Berarti Teman Dalam Bahasa Jawa. Mie Gacoan Berkomitmen untuk Menyajikan Makanan Yang Tidak Hanya Lezat Tetapi JUGA DAPAT DINIKMATI BERSAMA TEMAN-Teman. Konsep ini Menciptakan SUASANA YANG HANGAT DAN AKRAB DI SETIAP CABANG DIBUKA.

Menu Mie Gacoan

SAAT MEMASUKI Kedai Mie Gacoan, Pengunjung disambut menu Beragam menu Yang Menggugah Selera. Menu Utama Adalah Berbagai Jenis Mie Yang Berjalan Di Atas Skala Peda, Dari Yang Kurang Pedas Hingga Super Pedas. Mari Kita Eksplorasi Menu-menu Yang Disediakan:

  1. Mie Gacoan Pedas

    Mie ini Adalah Andalan Yang Membuat Gacoan Terkenal. Tersedia Gangan Beberapa Level Kepedasan, Mulai Dari Level 1 Hingga Level 5, Yang Selalu Dilengkapi Delangu Bumbu Rahasia Yangia Membuatinya Semakin Nikmat. Mie Ini BuGA Bisa Dipadukan Delangai Berbagai Topping Seperti Ayam, Bakso, Serta Seafood.

  2. Mie Hayam Gacoan

    Varian ini Merupakan Pilihan Bagi Yang MenyUKai Rasa Gurih. Daging Ayam Yang Disuwir Menambah Cita Rasa, Berpadu Anggan Kuah Kaldu Yang Kaya Rasa. Mie ini cocok bagi Mereka Yang Ingin Menikmat Menu Yang Sedikit Lebih Rinan Namun Tetap Sedap.

  3. Mie Ramen Gacoan

    Mengzil Inspirasi Dari Budaya Jepang, Mie Ramen Gacoan Menawarkan Tekstur Mie Yang Kenyal Dan Kuah Ramen Yang Aromatik. Ini menjadi pilihan sempurna unktka menyukai mie gelan Cita rasa lebih bervariasi.

  4. Mie Seafood

    UNTUK PENTUMAR Makanan Laut, Mie Seafood Menjadi Favorit Yang Menggugah Selera. Tahu Dan Bakso Udang Menjadi Pelengkap Yang Membuat Pengalaman Makan Semakin Berkesan.

  5. Variatif topping

    Di Mie Gacoan, Pelanggan Tidak Hanya Disajikan Mie, Tetapi Bua Bisa Menambahkan Beragam Topping Sesuai Selera, Seperti Tahu, Bakso, Dan Sayuran Segar. Kombinasi INI Anggota Sensasi Yang Berbeda Di Setiap Suapan.

Minuman Segar

Tak lengkap rasananya menikmati mie pedas tanpa diremani minuman segar. Mie Gacoan Rona Menyediakan Beberapa Pilihan Minuman Yang Dapat Melengkapi Hidangan. Beberapa di Antarananya Seperti:

  • Es jeruk nipis: Minuman ini menjadi Pilihan favorit untuk menetalkankan rasa pedas gangan kesaran Jeruk nipis Yang Menyegarkan.
  • Teh manis dingin: Menjadi Pilihan Klasik Yang Selalu Cocok untuk menemani hidangan pedas gangan manisnya teh es yang Menyegarkan.

Atmosfer Dan Layanan

Mie Gacoan Menciptakan Atmosfer Yang Nyaman Delan DESAIN INTERIOR YANG MODERN DAN BERSIH. Pengunjung Dapat Merasakan Lingkungan Yang Ramah Dan Cozy, Cocok Untuc Makan Bersama Keluarga Atau Teman. Pelayanan Di Mie Gacoan Jagi Patut Diapresiasi. Staf Yang Ramah Dan Cepat Tanggap Sangat Membantu Dalam Anggota Pengalaman Makan Yang Menyenangkan.

Cabang Mie Gacoan

Sejak Awal Berdirinya, Mie Gacoan Telah Memperluas Sayapnya Delangan Membuka Cabang Di Berbagai Kota Besar Di Indonesia. Kini, Anda Dapat Menemukan Mie Gacoan di Jakarta, Bandung, Yogyakarta, Surabaya, Dan Masih Banyak Lagi. PEMUKAAN CABANG DI BERBAGAI LOKASI INI BERTUJUAN UNTUK MENGADIRKAN KELEZATAN MIE GACOAN KEPADA LEBIH BANYA PENIKMAT KULINER DI TANAH AIR.

Mie gacoan di media sosial

Kebohasilan Mie Gacoan Tidak Lepas Dari Strategi Pemasaran Yang Efektif, Terutama Di Media Sosial. Platform Daman Memanfaatkan Seperti Instagram, Mie Gacoan Berhasil Menarik Perhatian Banyak Orang Delangan Tampilan Foto Makanan Yang Menggoda Selera. Strategi ini sangat efektif unked membkangun komunitas dan meningkatkan kesadaran merek di Kalangan Generasi Muda.

Kesadaran Kesehatan

Meskipun Mie Gacoan Dengan Rasa Rasa Pedasnya, Mereka Jaga Tetap Memperhatikan Kesehatan. Semua Bahan Yang Dalaman Dalam Pembuatan Makanan Adalah Segar Dan Berkualitas. Mereka Berkomitmen untuk Anggota Sajian Yang Tidak Hanya Lezat Tetapi Bua Cukup Sehat Bagi Pelanggannya.

Acara Dan Promosi

Acara Mie Gacoan Kerap Mengadakan Dan Promosi Menarik untuk Menarik Minat Pelanggan. Mulai Dari Diskon Spesial Pada Hari-Hari Tertentu Hingga Program Undian Berhadiah, Semua Dirancang untuk Anggota Nilai Tambah Bagi Pengunjung Yang Datang. Acara Spesial Jaga Sering Diselenggarakan, Seperti Mengumpulkan Blogger Makanan Bagi Dan Influencer UNTUK Menciptakan Buzz Yang Lebih Besar.

Tanggapan Pelanggan

Tanggapan Pelanggan Terhadap Mie Gacoan Sangan Positif. Banyak Yang Mengungkapkan Kepuasan Terhadap Cita Rasa Yang Otentik Serta Suasana Yang Nyaman. Beberapa Pelanggan Bahkan Menciptakan Konten Di Media Sosial Delangan Hashtag Mie Gacoan, Membagikan Pengalaman Mereka Dan Merekomendasikan Menu Favorit Mereka.

Produk Mie Gacoan Yang Tersedia

Mie Gacoan Tidak Hanya Terbatas Pada Kedai, Mereka RagA Produk Mie Kemasan Yang Dapat Dibawa Pulu. Ini menjadi piliihan tepat bagi mereka yang ingin menikmati mie gacoan di rumah atuu tempat lain. Produk mie Kemasan ini dirancang unkaHankankan rasa otentik gangan kemudahan penyajian.

Kesimpulan

DENGAN Cita Rasa Yang Otentik, Pelayanan Yang Ramah, Dan Suasana Yang COZY, Mie Gacoan Telah Berhasil Mencuri Perhatian Banyak Pencinta Kuliner. Setiap Suapan Mie Menggugah Selera, Dan Pengalaman Makan Yang Ditawarkan Adalah Perpaduan Sempurna Antara Rasa, Pelayanan, Dan Suasana Yang Menyenangsan. Jika mencari sebuah momen untuk merasakan kelezatan mie Yang Mengesann, Mie Gacoan Adalah Pilihan Yang Tepat Unkulda Dana Dan Teman-Teman.

Mie Gacoan Paling Enak: Rasanya Yang Tak Terlupakan

Mie Gacoan Paling Enak: Rasanya Yang Tak Terlupakan

Mie Gacoan telah menjadi fenomena kuliner Yang Menarik Perhatian Para Penggemar Mie Di Seluruh Indonesia. BAGI MANA YANG MENCARI Pengalaman Kuliner Yang Tak Terlupakan, Mie Gacoan Adalah Pilihan Yang Sempurna. Komitmen Daman Pada Rasa Yang Autentik Dan Porsi Yang Mengenyangkan, Mie Gacoan Menawarkan Kombinasi Unik Yang Membatasinya Berbeda Dari Mie Lainnya. BERIKUT ADALAH BEBERAPA ELEMEN MIEDANG MIE GACOAN, Mulai Dari Sejarah Huncga Cara Menikmatinya.

Sejarah Mie Gacoan

Mie Gacoan Pertama Kali Diperkenalkan di Yogyakarta Dan Segerera Meraih Populeritas Yang Luar Biasa. Konsepnya Sederhana Namun Menarik: Menyajikan Mie Gelan Beragam Topping Yang Dapat Disesuaika Demat Selera Pelanggan. Nama Mie Gacoan Sendiri Berasal Dari Kultur Lokal Yang Mencermikans Cita Rasa Otentik Yang Dihadirkan. DENGAN Resep Yang Diwariskan Dari Generasi Ke Generasi, Mie Gacoan Berhasil Mempertahankan Cita Rasa Yang Khas, Membuatinya Sangan Dicintai Oheh Penduduk Lokal.

Varian Mie Yang Ditawarkan

Salah Satu Daya Tarik Utama Dari Mie Gacoan Adalah Pilihan Variannya Yang Beragam. Mulai Dari Mie Goreng Pedas Hingga Mie Kuah, Pilihan Ini Memastikan Setiap Pengunjung Menemukan Sesuatu Yang Yang Sesuai Delangan Prefanensinya. Mie Gacoan Terkenal DGan Tingkat Kepedasan Yang Dapat Depatuikan, Mulai Dari Satu Satu Yang Ramah Bagi Lidah Pemula Hingga Level Lima Yang Menantang Bagi Pecinta Peda Sejati.

Setiap varian mie rugna dilemkapi delanhan topping Yang Melimpah, Seperti Bakso, Ayam, Udang, Dan Sayuran. Misalnya, mie gacoan gangan topping bakso dan udang menawarkan kombinasi rasa Yang luar biasa, di mana keempukan bakso berpadu sempurna gangan tekstur kenyal udang.

Bahan-Bahan Berkualitas

Kualitas Bahan Yang Dalaman Dalam Mie Gacoan Menjadi Salah Satu Alasan Mengapa Rasananya Tak Terlupakan. Mie Yang Digunakan Dibuat Dari Tepung Terigu Pilihan Yang Menjamin Kelembutan Dan Kenikmatan Saat Dikunyah. Sayuran Fresh Dan Protein Berkualitas Tinggi Digunakan Sebagai Topping, setiapan menjadikan Sajian lezat Dan Sehat. Bumbu Yang Digunakan Rua Merupakan Resep Rahasia Yang Meningkatkan Cita Rasa Mie, Menjadikananya Semakin Menggugah Selera.

Sambal Spesial

Keunikan Mie Gacoan Tidak Hanya Terletak Pada Mie Dan Topping Saja, Tetapi Bua Sambal Yang Disajikan. Sambal Khas Mie Gacoan Adalah Salah Satu Favorite Pelanggan. Sambal ini terbuat Dari Bahan-Bahan Segar Dan Diolak Gangan Metode Khusus untuk Menonjolkan Rasa Pedas Dan Aroma Rempahnya. Nikmati Mie Anda Delan Sambal Ini, Dan Rasakan Sensasi Yangi Membangkitkan Selera.

Pengalaman Bersantap Yang Nyaman

Mie Gacoan Tidak Hanya Menyajikan Makanan Lezat, Tetapi JUGA Menawarkan Pengalaman Bersantap Yang Nyaman. DENGAN DESAIN INTERIOR YANG MENARIK DAN SUASANA YANG AKRAB, RESTORAN INI MEMBUAT PENGUJUNG BETAH BERLAMA-LAMA. APAKAH MANA DATANG BERSAMA KELUARGA, TEMAN, ATAU PASIangan, TEMPAT INI SELALU SIAP MENYAMBUT ASSAGAN HANGAT.

Menu inovasi dan promo menarik

Salah Satu Alasan Mie Gacoan Terus Diminati Adalah Inovasi Menu Yang Selalu Diperbarui. Secara Berkala, Mereka Menambahkan Item Baru untuk menarik Minat Pelanggan. Tidak Hanya Itu, Mie Gacoan Jaga Sering Mengadakan Promo Menarik, Seperti Diskon Khusus di Hari Tertentu Atau Menu Spesial Festival Merayakan. Promosi ini mem -tunjung semakinin tertarik unkuk kembali dan menama menu baru.

Tinjau Pelanggan

Dari Banyaknya Review Pelanggan, Mayoritas Anggota Ulasan Positif Tentang Mie Gacoan. Mereka Memuji Rasa Dan Kualitas Makanan, Pelyanan Yang Cepat Dan Ramah, Serta Suasana Restoran Yang Nyaman. Banyak Yang Mematakan Bahwa Mie Gacoan Anggota Pengalaman Kuliner Yang Tidak Boleh Dilewatkan Ketika Mengunjungi Yogyakarta. Kualitas Yang Konsisten Dan Layanan Yang Memuaskan Adalah Hal Yang Selalu Disoroti Oleh Pengunjung.

Tempat Dan Lokasi Yang Strategis

Mie Gacoan Memilisi Beberapa Cabang Yang Tersebar Di Kota-Kota Besar Di Indonesia. Strategi Delangan Lokasi Yang, Mudaah Diakses, Dan Dekat Delan Gangan Berbagai Tempat Wisata, Anda Tidak Perlu Khawatir Kesulitan Mencritan. Setiap Cabang Dirancang Agar Muda Dijangkau, Menjadikananya Pilihan Ideal untuk Makan Siang Atau Malam Setelah Berkeliling Kota.

Mie gacoan di era digital

Dalam Era Digital INI, Mie Gacoan Raga Beradaptasi Delangan Menyediakan Layanan Pesan Antar Melalui Aplikasi Kuliner. Ini memunckikan dan menikmati mie mie gacoan favorit Dari Kenyamanan Rahat Anda. DENGAN HANYA BEBERAPA KLIK, ENA BISA MEMES DAN MENIKMATI MIE ENAK TANPA HARUS PERGI DARI RUMAH. SISTEM INI MENJADI SANGAT POPuler, Terutama Di Kalangan Anak Muda Dan Pekerja Yang Sibuk.

KEGIatan Komunitas Dan Sosial

Mie Gacoan RuGA Terlibat Dalam Kegiatan Komunitas untuk Anggota Kembali Kepada Masyarakat. Mereka Sering Mengadakan Acara Dan Promosi Yang Mendukung Kegiatan Sosial, Seperti Donasi untuk Panti Asuhan Dan Penyuluhan Kesehatan. Keterlibatan ini Tidak Hanya Menunjukkan Kepedulian Mereka Terhadap Masyarakat, Tetapi BUGA MEMPERKUAT CITRA POSITIF MIE GACOAN DI Mata Pelangan.

Tip Menikmati Mie Gacoan

UNTUK MENDapatkan Pengalaman Terbaik Saat Menikmati Mie Gacoan, BerIKUT ADALAH BEBERAPA Tips:

  1. Cobalah Berbagai Varian: Jangan ragu unkoba varian lain dan topping Yang Berbeda. Setiap Kombinasi Menawarkan Sensasi Rasa Yang Unik.

  2. Mintalah Rekomendasi: Tanyakan Kepada Staf Tentang Varian Dan Sambal Yang Paling Populer. Mereka Biasananya memilisi Rekomendasi Terbaik.

  3. Jangan Lewatkan Sambal: Sambal Merupakan Pendukung Utama Dalam Sajian Mie Gacoan. Pastikan untuk menambahkananya untuk meningkatkan cita rasa.

  4. Berkunjung Di Saati Ramai: Cobalah unkunjung di Hari-Hari Ramai, Di Mana Anda Bisa Merasakan Atmosfer Seru Dan Antusiasme Pengunjung Lain.

  5. Promo Ikuti: Panta Media Sosial Mereka UNTUK Menemukan Promo Menarik Yang Munckin Sedang Berlangsung.

DENGAN SEMUA DAYA TARIK INI, MIE GACOAN MENJADI DESTINASI KULINER YANG HARUS DICOBA. DENGAN Rasa Yang Tak Terlupakan Dan Pengalaman Bersantap Yang Menyenangkan, Mie Gacoan Memastikan Setiapan Suapan Mie Anggota Kenangan Yang Akan Selalu Teringat.

Menu Mie Gacoan Favorit: 10 Sajian Paling Dicari

Menu Mie Gacoan Favorit: 10 Sajian Paling Dicari

1. Mie Gacoan Asli

Menu Merupakan asli Mie Gacoan Andalan Yang Pasti Haru Dicoba. Mi Yang Kenyal Ini Disajikan Delangu Bumbu Rahasia Yang Anggota Rasa Umami Yang Khas. Pelanggan MenyUKai Kombinasi Sempurna Antara Tekstur Mi Yang Kenyal Dan Kuah Yang Kental. Biasananya, Mie Gacoan asli Dipadukan Delangan Suwiran Ayam Atau Bakso Yang Menambah Kelezatan.

Rasa Yang Berani

Bumbu Yang Dalaman Dalam Mie Gacoan Mengandung Campuran Rempah Pilihan, Anggota Cita Rasa Yang Kuat. Pelanggan Seringkali Memasukkan Tambahan Sambal untuk meningkatkan Rasa Pedasnya.

2. Mie Gacoan Pedas

BAGI PECINA MAKANAN PEDAS, MIE GACOAN PEDAS ADALAH PILihan Terbaik. Delankat Kepedasan Yang Cukup Tinggi, Menu Ini Menyajikan Mi Yang Dilumuri Demat Sambal Super Pedas. SANGAT COCOK BAGI MEREKA YANG MENYUKAI TANTIangan Rasa.

Topping Tambahan

Pelengkap Seperti Bakso, Tahura, Dan Telur Rebus Sering Kali Ditambahkan untuk Anggota Variasi Rasa Dan Tekstur. Jangan Lewatkan Kesempatan untuk Menambahkan Kerupuk Yang Anggota Sensasi Renya.

3. Mie Gacoan Seafood

Mie Gacoan Seafood Adalah Pilihan Sempurna Tengskemar Makanan Laut. Menu Iniwarkan Perpaduan Antara Mi, Udang, Cumi, Dan Kerah Yang Segar. Keunikan Terletak Pada Penggunaan Bumbu Seafood Yang Khas, Anggota Rasa Laut Yang Melimpah.

Kesegaran Bahan

Bahan Baku Yang Digunakan Selalu Segar, Menjadikan Rasa Mi ini lebih Nikmat. Pelanggan Sering Merasakan Ada Aroma Khas Laut Yang Memperkaya Pengalaman Bersantap.

4. Spesial Mie Gacoan

Mie Gacoan Spesial Adalah Pilihan Yang Menawarkan Banyak Variasi. Menu Ini Terdiri Dari Mi Yang Dilengkapi Delangan Berbagai Jenis Topping, Mulai Dari Ayam Goreng, Tofu, Hingga Sayuran.

Rasa Yang Beragam

Kombinasi Berbagai Topping ini membbuat setiap suapan menalamc pendalaman Rasa Yang Berbeda. Pelanggan Seringkali Bertanya Tentang Komposisi Rahasia Bumbu Yang Membuat Hidangan Ini Sangan Sangan Selera Selera.

5. Mie Gacoan Ayam Goreng

Mie Gacoan Ayam Goreng Adalah Rekomendasi Bagi Penggemar Ayam. DAGING AYAM YANG Digoreng Tepung DGANGAN BALUTAN BUMBU SPESIAL MEMBUAT MENU INI MENJADI FAVORIT BANYAK ORANG.

Kombinasi Sempurna

Ayam Goreng Yang Renyah Berpadu Delang Mi Yang Kenyal Menciptakan Perpaduan Tekstur Yang Sangan Menyenangkan. Seringkali Dihidangkan Delangal Sambal Yang Dibuat Sendiri, Menambah Kesegaran Rasa.

6. Mie Gacoan Sayur

Menawarkan Pilihan Lebih Sehat, Mie Gacoan Sayur Menyajikan Mi Yang Dilengkapi Daman Beragam Sayur Segar. Menu ini cocok bagi Mereka Yang Ingin Menikmati Hidangan Lezat Tanpa Mengorbankan Kesehatan.

Nutrisi Yang Terjaga

Sayuran Yang Digunakan Seperti Brokoli, Wortel, Dan Sawi, Menyediakan Berbagai Vitamin Dan Mineral. Bumbu Yang Dipilih Tetap Anggota Rasa Yang Enak, Menjadikan Hidangan Ini Tettap Menggugah Selera.

7. Mie Gacoan Bakso

Mie Gacoan Bakso Merupakan Pilihan Ideal UNTUK Penggemar Bakso. Bakso Kenyal Yang Disajikan Delangan Mi Dan Kuah Yang Kental Menu Membuat Ini Sangat Populer Di Kalangan Pengunjung.

Kelezatan Bakso

Kelezatan Bakso Terletak Pada Bumbu Daging Yang Dipilih Dan Proses Pembuatnya Yang Teliti. Kombinasi Ini Memiptiptakan Perpaduan Rasa Yang Sempurna Dangan Mi Asam Pedas.

8. Mie Gacoan Penyet

Mie Gacoan Penyet Merupakan Variasi Dari Hidangan Gaya Gaya Penyet Yang Unik. Dalam Hidangan Ini, Mi Disajikan Delangan Cara Dipenyet Dan DiCampur Gangan Sambal Terasi Yang Pedas.

Sensasi pedas dan asam

Rasa Pedas Dan Asam Menjadi Daya Tarik Utama Dari Mie Gacoan Penyet. Penambahan Lauk Seperti Tempe Dan Tahu Goreng Menambah Kerenyahan, Mencalaman Pengalaman Bersantap Yang Lebih Otentik.

9. Mie Gacoan Jumbo

Mie Gacoan Jumbo Adalah Pilihan Bagi Mereka Yang Ingin Menikmati Porsi Lebih Besar. DENGAN Kuantitas Lebih, Menu ini cocok tutken yang dalam dalam dalam grup besar atu hanya ingin mengenyangkan diri.

Kenikmatan Berlipat

Rasa Yang Ditawarkans Sama Enaknya Delangan Varian Lainnya, Menjadikan Mie Gacoan Jumbo Tetap Menjadi Favorit. Banyak Pelanggan Yang Merekomendasikan Menu ini inti unkus Berbagi saat Berkumpul Bersama Teman-teman.

10. Mie Gacoan Topping Sesuai Selera

Mie Gacoan Anggota Flekssibilitas Menu Menawarkans Menu Di Mana Pelanggan Bisa Memilih Topping Sesuai Selera Masing-Masing. Ini memudahkan pelangan unkeksplorasi gelan kombinasi rasa.

Kustomisasi Yang Menarik

Beberapa Topping Populer Antara Lain Ayam, Bakso, Tofu, Dan Berbagai Sayur. Pelanggan Bisa Memilih Hingga 3 Jenis Topping Dalam Satu Porsi Mi UNTUK Mendapatkan Rasa Yang Diingikans.

Setiap Sajian Dari Mie Gacoan Menawarkan Pengalaman Kuliner Yang Unik Dan Penuh Rasa. Daman Berbagai Pilihan, Mie Gacoan Menjadi Destinasi Kuliner Yang Sangan Dicari Oleh Para Penggemar Mi Dan Hidangan Lainnya. Menu Berbagai Ini Tidak Hanya Memuaska Selera, Tetapi JUGA Anggota Pengalaman Tak Terlupakan Dalam Setiapan Suapan. Кunjungi Mie Gacoan Dan Temukan Sajian Favorit dan Yang Akan MEMAN MEMBUAT ENA KEMBALI LAGI.

Mie Gacoan: Pengalaman Makanan Terbesar Instagrammable

Mie Gacoan: Pengalaman Makanan Terbesar Instagrammable

1. Apa itu Mie Gacoan?

Mie Gacoan adalah hidangan mie populer yang berasal dari Indonesia, yang secara khusus dikenal karena atmosfernya yang semarak dan campuran rasa gurih yang kaya. Kegembiraan kuliner ini lebih dari sekadar makanan – ini adalah pengalaman, pesta untuk langit -langit dan mata. Restoran itu sendiri mewujudkan gairah masakan Indonesia, menggabungkan elemen -elemen tradisional dengan presentasi modern, menjadikannya favorit di antara penggemar makanan dan penggemar Instagram.

2. Asal mula Mie

Istilah “Mie” di Mie Gacoan mengacu pada mie, makanan pokok di banyak budaya Asia. Mie Gacoan memiliki akarnya yang sangat tertanam dalam tradisi kuliner Indonesia, sering dipengaruhi oleh ramen Cina dan rempah -rempah lokal. Apa yang membedakan Mie Gacoan adalah metode persiapannya yang unik dan berbagai saus yang menyertainya yang meningkatkan profil rasa hidangan.

3. Hidangan khas

Mie Gacoan tidak hanya menawarkan berbagai hidangan mie yang luar biasa tetapi juga menampilkan pilihan item khas yang harus dicoba:

  • Mie Gacoan Asli: Bintang menu, hidangan ini menampilkan mie kenyal yang dilemparkan dalam sejumlah besar rempah -rempah dan disajikan dengan pilihan protein, baik itu ayam, daging sapi, atau tahu.

  • Mie Gacoan Spicy: Bagi mereka yang mendambakan lebih banyak panas, versi pedas menambahkan tendangan yang menyenangkan tanpa membanjiri rasa alami dari bahan -bahannya.

  • Mie Gacoan Seafood: Perpaduan darat dan laut, hidangan ini menampilkan makanan laut seperti udang dan cumi -cumi, dibawa bersama dalam kaldu gurih yang menggoda selera.

  • Vegetarian Mie Gacoan: Katering untuk pemakan nabati, versi ini menggunakan berbagai sayuran segar dan tahu, memastikan bahwa tidak ada yang kehilangan rasa yang luar biasa.

4. Pengalaman makan malam

Suasana

Berjalan ke Mie Gacoan terasa seperti melangkah ke restoran modern yang telah memeluk warisan Indonesia. Dengan interior yang dirancang dengan rumit, pencahayaan hangat, dan mural yang layak Instagram, setiap sudut restoran adalah kartu pos yang menunggu untuk ditangkap. Suasana ramai namun intim, menjadikannya tempat yang sempurna untuk santapan santai dan pertemuan sosial.

Presentasi

Cara Mie Gacoan menyajikan hidangannya menetapkan tolok ukur yang dicapai orang lain. Setiap piring diatur dengan cermat, sering dihiasi dengan hiasan yang semarak. Dari ketumbar hijau cerah hingga cabai merah yang berseri, visual meningkatkan pengalaman keseluruhan, menjadikannya hadiah baik untuk perut dan mata.

Melayani

Staf di Mie Gacoan dikenal karena layanan luar biasa mereka, berkontribusi pada pengalaman yang menyenangkan secara keseluruhan. Berpengetahuan luas dan antusias tentang menu, mereka memandu pengunjung melalui berbagai pilihan, mengakomodasi preferensi makanan dan menyesuaikan hidangan untuk memenuhi selera individu.

5. Momen-momen layak Instagram

Untuk pecinta makanan dan influencer, Mie Gacoan bukan hanya makanan; Ini adalah kesempatan untuk ekspresi kreatif melalui fotografi. Inilah cara memaksimalkan pengalaman Instagram Anda:

Latar belakang yang unik

Restoran ini dirancang dengan beberapa latar belakang yang menyenangkan secara estetika yang meningkatkan pemotretan makanan apa pun. Cari mural dinding berwarna -warni dan furnitur yang dirancang unik untuk membingkai bidikan Anda dengan sempurna.

Hidangan dalam fokus

Setiap presentasi menawan setiap hidangan layak mendapat suntikan close-up. Warna -warna cerah, tekstur yang menarik, dan hiasan artistik membuat mie Mie Gacoan dan iringan subjek ideal untuk fotografi makanan yang menakjubkan.

Sudut kreatif

Bereksperimen dengan sudut yang berbeda. Tampilan top-down dapat menangkap seluruh tata letak piring, sementara sudut samping dapat menyoroti tekstur mie dan saus yang enak yang menetes ke bawah. Cobalah menggabungkan tangan meraih mie, menciptakan momen antisipasi.

Keterangan dan tagar

Melibatkan keterangan dengan tagar yang relevan dapat meningkatkan visibilitas posting Anda. Pertimbangkan keterangan yang menggambarkan rasa dan kegembiraan Anda tentang makan di Mie Gacoan. Tagar yang efektif seperti #mieGacoan, #indonesiancuisine, #foodieheaven, dan #NoodLelover dapat menarik khalayak yang lebih luas.

6. Dampak Media Sosial

Mie Gacoan berkembang di media sosial sebagai influencer dan blogger makanan berduyun -duyun untuk berbagi pengalaman mereka. Kehadiran online ini tidak hanya menampilkan penawaran restoran tetapi juga membangun komunitas penggemar. Terlibat dengan pelanggan melalui platform sosial dapat menyebabkan konten yang dibuat pengguna yang semakin memperkuat visibilitas mereknya.

7. Lokasi dan Aksesibilitas

Mie Gacoan memiliki banyak lokasi di seluruh Indonesia, masing -masing dirancang untuk memberikan pengalaman bersantap yang serupa. Mudah diakses di daerah perkotaan, restoran ini sering melayani penduduk setempat dan wisatawan, memastikan bahwa semua orang dapat menikmati petualangan yang lezat ini.

Bagaimana menuju ke sana

Dengan lokasi yang ditandai dengan baik, opsi transportasi umum yang andal, dan ruang parkir yang luas, mengunjungi Mie Gacoan bebas repot. Dianjurkan untuk memeriksa media sosial atau situs web mereka untuk acara atau promosi khusus yang dapat meningkatkan kunjungan Anda.

8. Pilihan Diet

Mie Gacoan mengakui keragaman kliennya dan menawarkan berbagai pilihan yang ramah diet. Di luar pilihan vegetarian dan vegan, mie bebas gluten juga dapat diminta untuk mereka yang memiliki batasan makanan, memastikan inklusivitas untuk semua pecinta makanan.

9. Pasang minuman

Meningkatkan pengalaman bersantap di Mie Gacoan melampaui mie. Menu minuman mereka menampilkan minuman tradisional Indonesia, termasuk:

  • Teh Botol: Teh botol yang manis, sempurna untuk membersihkan langit -langit.

  • Jus Jeruk: Jus jeruk yang baru diperas yang memberikan penyeimbang yang menyegarkan terhadap hidangan gurih.

Menjelajahi pasangan dapat meningkatkan makanan Anda, menciptakan pengalaman seimbang yang menyelaraskan rasa.

10. Acara dan Promosi Kuliner

Mie Gacoan dirayakan tidak hanya untuk layanan hariannya, tetapi juga untuk acara kuliner bertema yang menampilkan spesial musiman atau perayaan meriah. Mengawasi pengumuman mereka dapat memberikan kesempatan untuk mencoba hidangan eksklusif yang dikuratori untuk periode terbatas.

11. Kesimpulan

Mie Gacoan menawarkan perjalanan makanan yang tak tertandingi yang menggabungkan rasa yang luar biasa, presentasi yang indah, dan suasana yang meriah. Dari saat Anda melangkah ke sendok terakhir mie Anda, ini adalah pengalaman yang dirancang untuk menyenangkan setiap akal dan memberikan banyak peluang untuk pembuatan memori, baik dalam rasa maupun di media sosial. Dengan merangkul rasa yang kaya dari masakan Indonesia, Mie Gacoan telah memposisikan dirinya sebagai tujuan utama untuk pengalaman makanan yang tak terlupakan dan dapat diinstal.

Mie Gacoan: Sensasi Tiktok mengambil Indonesia dengan badai

Mie Gacoan: Sensasi Tiktok mengambil Indonesia dengan badai

Bangkitnya Mie Gacoan di Tiktok

Mie Gacoan telah muncul sebagai fenomena budaya di Indonesia, terutama di kalangan pemuda yang terpaku pada platform media sosial seperti Tiktok. Hidangan mie yang unik ini menawarkan perpaduan rasa yang lezat yang beresonansi dalam dengan penggemar makanan lokal. Algoritma Tiktok telah memainkan peran penting dalam memperkuat jangkauan Mie Gacoan, mengubah ribuan pengunjung kasual menjadi pengikut yang ingin berbagi dan menciptakan kembali pengalaman mereka. Ketika video menunjukkan warna-warna cerah, rasa menggoda, dan presentasi yang menggiurkan berkembang biak, Mie Gacoan dengan cepat naik ke popularitas dan memantapkan dirinya sebagai kesenangan kuliner yang harus dicoba.

Profil rasa yang unik

Di jantung daya tarik Mie Gacoan terletak profil rasanya yang luar biasa. Hidangan ini menggabungkan beberapa bahan, termasuk mie kenyal, medley sayuran, dan serangkaian rempah -rempah yang menciptakan simfoni selera. Penggunaan pendidikan rempah -rempah Indonesia regional menambah kedalaman dan keaslian, menawarkan pengunjung rasa rasa tradisional yang dibungkus dalam presentasi modern. Pelanggan dapat mempersonalisasikan Mie Gacoan mereka dengan memilih berbagai topping seperti ayam goreng, udang, atau bahkan tahu, memastikan ada pilihan untuk semua orang. Aspek kustomisasi ini meningkatkan pengalaman bersantap, menjadikannya bukan hanya makan tetapi juga petualangan melalui lanskap kuliner yang beragam di Indonesia.

Presentasi yang menyenangkan secara estetika

Di zaman media sosial, presentasi sama pentingnya dengan selera. Warna -warna cerah Mie Gacoan dan topping yang diatur dengan hati -hati menjadikannya pesta untuk mata, menjadikannya sangat cocok untuk Tiktok. Seni yang terlibat dalam merakit hidangan mendorong pengunjung untuk menangkap dan berbagi pengalaman mereka, lebih jauh memicu penyebaran virusnya. Pembuat konten membuat video yang menakjubkan secara visual yang menampilkan mie yang dilemparkan ke dalam saus yang menarik, uap yang melayang, dan hidangan berlapis terakhir berkilau di bawah cahaya alami. Konten yang menarik semacam itu telah memupuk komunitas pecinta makanan yang terhubung dengan kekaguman bersama mereka untuk hidangan ini.

Strategi Pemasaran Media Sosial

Keberhasilan Mie Gacoan berlabuh dalam strategi pemasaran media sosial yang efektif. Memanfaatkan platform berpengaruh Tiktok, restoran telah berkolaborasi dengan pembuat konten populer yang memiliki jutaan pengikut. Dengan mengundang influencer ini untuk mencoba Mie Gacoan dan berbagi pengalaman jujur mereka, merek mendapatkan kredibilitas instan dan lonjakan visibilitas. Konten yang dibuat pengguna, di mana pengunjung sehari-hari memamerkan versi Mie Gacoan mereka, lebih lanjut meningkatkan daya tariknya dan menjangkau pelanggan potensial yang mungkin skeptis tentang mencoba hidangan baru.

Aspek komunitas

Mie Gacoan telah menumbuhkan rasa kebersamaan di antara para penggemarnya. Tagar #MiEGACOANCHALLENGE di Tiktok mendorong pengguna untuk menciptakan kembali hidangan atau berbagi cara unik yang telah mereka nikmati. Komponen interaktif yang kaya ini beresonansi dengan demografis yang lebih muda, menawarkan perasaan memiliki dan berbagi pengalaman. Penggemar makanan menemukan kenyamanan dalam berpartisipasi dalam tantangan dan diskusi tentang variasi favorit mereka, bahan -bahan baru yang telah mereka coba, atau bahkan eksperimen resep mereka sendiri.

Aksesibilitas dan keterjangkauan

Aksesibilitas memainkan peran penting dalam meningkatnya popularitas Mie Gacoan. Diposisikan sebagai pilihan kuliner yang terjangkau, hidangan ini menarik berbagai konsumen, dari siswa hingga profesional yang bekerja. Banyak restoran menawarkannya dengan harga yang wajar, memastikan bahwa semua orang dapat bergabung dalam tren tanpa merusak bank. Selain itu, meningkatnya jumlah outlet Mie Gacoan di seluruh kota -kota besar seperti Jakarta, Surabaya, dan Bandung berarti menemukan lokasi lebih mudah dari sebelumnya. Aksesibilitas ini mendorong kunjungan spontan, memungkinkan orang untuk mampir untuk gigitan cepat atau makanan yang menyenangkan dengan teman -teman.

Signifikansi budaya

Mie Gacoan lebih dari sekadar hidangan yang sedang tren; Ini melambangkan hubungan dengan budaya Indonesia dan warisan kuliner yang kaya di negara ini. Hidangan ini menggabungkan teknik pembuatan mie tradisional Asia sambil menanamkan rasa lokal. Fusi ini mencerminkan lingkungan multikultural Indonesia, di mana berbagai pengaruh kuliner berbaur bersama. Merayakan bahan -bahan lokal seperti sambal (pasta cabai) dan bawang merah goreng mengangkat hidangan ke lambang budaya. Kenaikan hidangan di Tiktok tidak hanya menampilkan kelezatannya tetapi juga berfungsi sebagai platform untuk mempromosikan keahlian memasak Indonesia dalam skala global.

Upaya keberlanjutan

Di era di mana keberlanjutan adalah yang terpenting, perusahaan Mie Gacoan juga mengeksplorasi praktik yang lebih hijau. Banyak restoran mulai merangkul tindakan ramah lingkungan seperti menggunakan kemasan biodegradable dan sumber bahan-bahan lokal, sehingga mengurangi jejak karbon mereka. Dengan mempromosikan pola pikir pertanian-ke-meja, mereka dapat mengurangi dampak lingkungan sambil juga menarik bagi konsumen yang sadar kesehatan. Pendekatan holistik ini beresonansi dengan pengunjung sadar saat ini yang memprioritaskan keberlanjutan bersama selera.

Masa Depan Mie Gacoan

Ketika Mie Gacoan terus berkembang, masa depannya terlihat cerah. Kemampuan beradaptasi memungkinkan tikungan inovatif yang dapat membuat menu tetap menarik. Kombinasi rasa baru, spesialisasi musiman, dan promosi dapat menarik baik pelanggan yang kembali dan pendatang baru yang penasaran. Selain itu, ketika Tiktok berevolusi, demikian juga strategi pemasaran yang digunakan, memastikan bahwa Mie Gacoan tetap berada di garis depan adegan makanan Indonesia. Bisnis juga mulai mengeksplorasi kemitraan dengan layanan pengiriman makanan seperti Goofood dan Grabfood, memungkinkan mereka untuk menjangkau khalayak yang lebih luas untuk mengalami sensasi viral dari kenyamanan rumah mereka.

Kesimpulan

Secara keseluruhan, Mie Gacoan lebih dari sekadar hidangan mie yang sedang tren; Ini merangkum esensi masakan Indonesia, merayakan komunitas, dan memanfaatkan kekuatan media sosial. Kenaikan ketenarannya telah menandai tonggak penting dalam budaya makanan, menunjukkan bagaimana rasa tradisional dapat berbaur dengan pengalaman bersantap modern. Ketika Mie Gacoan terus mendapatkan daya tarik di antara pengunjung dan pecinta makanan, tempatnya dalam sejarah kuliner Indonesia tidak diragukan lagi akan menjadi salah satu yang perlu diingat.

Mie Gacoan: Pesta visual rasa

Mie Gacoan: Pesta visual rasa

Asal usul Mie Gacoan

Mie Gacoan, hidangan mie populer dari Indonesia, khususnya berasal dari lanskap kuliner Jawa yang kaya. Istilah “Mie” diterjemahkan menjadi “mie,” sementara “Gacoan” menandakan sentuhan lucu atau kegembiraan di sekitar makanan. Berakar pada tradisi kuliner Indonesia, Mie Gacoan mewakili makanan yang menghibur yang penuh dengan budaya dan pertemuan keluarga.

Bahan -bahan yang membuat Mie Gacoan spesial

Kombinasi bahan yang ditemukan di Mie Gacoan menciptakan pengalaman rasa yang tak terlupakan. Fondasi adalah mie telurnya, yang kenyal dan berfungsi sebagai basis yang sempurna untuk berbagai topping.

  • Mie telur: Kunci hidangan ini, mie telur Mie Gacoan dibuat segar dengan keseimbangan sempurna dari tepung gandum dan telur. Elastisitas dan teksturnya sangat penting karena mereka menyerap rasa saus dan topping yang menyertainya.

  • Kaldu: Kaldu yang kaya dan lezat dibuat menggunakan campuran rempah -rempah, biasanya termasuk bawang putih, jahe, dan bawang merah, menjadikannya aromatik dan beraroma. Seringkali, ayam gurih atau sapi basis kaldu, menciptakan kedalaman.

  • Topping: Taman bermain gastronomi, Mie Gacoan menampilkan bermacam -macam topping. Bahan -bahan klasik termasuk ayam yang diasinkan, daging sapi, tahu goreng, dan telur rebus. Sayuran seperti tauge, bok choy, dan bawang hijau tidak hanya menambah nutrisi tetapi juga memberikan kaleidoskop warna yang semarak.

  • Bumbu: Mie Gacoan sering disertai dengan berbagai bumbu yang meningkatkan rasanya. Ini mungkin termasuk sambal (pasta cabai pedas), kecap, dan bawang merah goreng yang renyah, yang menambah crunch dan kulit ekstra.

Mempersiapkan Mie Gacoan: Panduan langkah demi langkah

Membuat Mie Gacoan di rumah bisa menjadi petualangan kuliner yang menarik. Ikuti panduan ini untuk menemukan kembali hidangan indah ini di dapur Anda.

1. Membuat mie

Mulailah dengan mencampur tepung, telur, dan sedikit garam. Uleni adonan sampai mencapai konsistensi yang halus. Gulung dengan tipis dan potong menjadi strip untuk membuat mie Anda. Biarkan mereka beristirahat sebelum memasaknya dalam air mendidih sampai al dente.

2. Crafting The Broth

Dalam panci besar, tumis bawang putih, jahe, dan bawang merah sampai harum. Tambahkan daging pilihan Anda dan kecokelatan di semua sisi. Tuangkan kaldu ayam atau daging sapi dan biarkan mendidih. Menanamkan rasa dengan campuran rempah -rempah seperti adas bintang dan kapulaga untuk membuat kaldu aromatik yang luar biasa.

3. Memasak topping

Siapkan topping Anda dengan merendam ayam atau daging sapi dengan kecap dan rempah-rempah, lalu panggang atau menggorengnya. Goreng tahu sampai berwarna cokelat keemasan, dan rebus telur Anda. Sayuran tumis dengan cepat hanya sampai mereka empuk tetapi masih bersemangat.

4. Merakit piring Anda

Dalam mangkuk saji, letakkan sebagian mie, sendokkan di atas kaldu panas, dan atur topping Anda. Hiasi dengan bawang hijau, rempah segar, dan gerimis sambal untuk pukulan ekstra itu.

Signifikansi Budaya Mie Gacoan

Menikmati Mie Gacoan melampaui hanya menikmati bahan -bahannya; Ini memohon koneksi ke budaya dan tradisi Indonesia. Biasanya disajikan selama pertemuan, pesta keluarga, atau acara -acara khusus, hidangan ini menumbuhkan komunitas dan kehangatan di antara orang -orang yang dicintai.

Mie Gacoan: Pesta untuk Mata

Warna-warna dan tekstur Mie Gacoan yang semarak membuat presentasi yang menarik yang hampir sama menariknya dengan rasanya. Kuning cerah dari mie telur, ditambah dengan sayuran hijau yang subur, dan dihiasi dengan pasta cabai merah, menciptakan pesta visual yang mengundang. Hidangan ini mencontohkan kecintaan Indonesia terhadap masakan aromatik dan berwarna -warni.

Variasi Mie Gacoan

Sementara versi klasik dipuja, variasi lokal Mie Gacoan telah muncul, menampilkan keragaman di kawasan itu.

  • Seafood Mie Gacoan: Di daerah pesisir, varian menggunakan makanan laut segar seperti udang atau cumi -cumi lazim, menawarkan kedalaman rasa yang berbeda dengan esensi makanan laut aromatik.

  • Vegetarian Mie Gacoan: Adaptasi ini menggantikan daging dengan serangkaian sayuran, jamur, dan protein nabati, menciptakan alternatif yang menopang dengan nikmat untuk vegetarian dan vegan.

  • Pedas Mie Gacoan: Untuk penggemar rempah -rempah, menambahkan bubuk sambal atau cabai ekstra mengintensifkan profil rasa, mengubah hidangan menjadi kesenangan yang berapi -api.

Menyarankan pasangan dan penyajian

Untuk meningkatkan pengalaman Mie Gacoan, pasangkan dengan minuman yang menyegarkan. Teh es atau minuman lemon lemon tajam menyeimbangkan kekayaan mie dan menawarkan kontras yang menyegarkan.

Ketika datang untuk melayani, Mie Gacoan dapat ditawari gaya keluarga, memungkinkan para tamu untuk menyesuaikan mangkuk mereka dengan berbagai topping dan add-in. Ini mendorong interaksi dan kenikmatan dalam pengaturan komunal.

Di mana menemukan mie gacoan terbaik

Di Indonesia, Mie Gacoan dirayakan di berbagai kios makanan dan restoran. Wilayah seperti Jakarta dan Yogyakarta memamerkan vendor terkenal yang dikenal karena citarasa otentik mereka, menyatukan penduduk setempat dan wisatawan untuk menikmati hidangan yang disayangi ini. Menjelajahi pasar dan restoran lokal dapat membawa Anda ke permata tersembunyi di mana Mie Gacoan baru disiapkan tepat di depan mata Anda.

Masa Depan Mie Gacoan

Ketika tren kuliner berevolusi secara global, Mie Gacoan mendapatkan pengakuan di luar perbatasan Indonesia. Penggemar makanan mulai bereksperimen dengan hidangan, menanamkan rasa dan teknik internasional sambil mempertahankan esensi otentiknya. Inovasi ini memungkinkan Mie Gacoan untuk beradaptasi dengan berbagai selera sambil menghormati warisannya yang kaya.

Kesimpulan

Mie Gacoan berdiri sebagai bukti warisan kuliner Indonesia, menggabungkan tekstur dan rasa untuk pengalaman bersantap yang unik. Apakah dinikmati di rumah atau di vendor lokal, hidangan ini menyajikan lebih dari sekadar makan; Ini memberikan pesta visual dan memelihara ikatan di antara keluarga dan teman -teman, melambangkan hati budaya Indonesia melalui setiap gigitan yang lezat.

Mie Gacoan: Mengapa Ratingnya Selalu Tinggi

Mie Gacoan: Mengapa Ratingnya Selalu Tinggi

1. Sejarah Mie Gacoan

Mie Gacoan Pertama Kali Didirikan Di Indonesia Dan Gelan Cepat Menjadi Salah Satu Restoran Mie Paling Terkenal. Konsepnya Yang Sederhana Namun Inovatif, Mesenciptakan Pengalaman Makan Yang Unik. Mie Gacoan Terkenal Dganal Berbagai Variasi Rasa Yang Menggugah Selera, Serta Porsi Yang Melimpah, Anggota Nilai Lebih Bagi Konsumenny. Seiring Waktu, Mie Gacoan Telah Mengembangkangkan Cabang Di Berbagai Kota Besar, Menjadikananya Salah Satu Merek Terfavorit.

2. Menu Yang Beragam Dan Kreatif

Menu di Mie Gacoan Sangan Bervariasi, Mulai Dari Mie Goreng, Mie Rebus, Hingga Aneka Topping Yang Bisa Dipilih Sesuai Selera. Beberapa hidangan ikonik Mereka termasuk Mie Gacoan Pedas, Mie Gacoan Bakar, Dan Mie Gacoan Ayam. Setiapan Hidangan Disiapkan Delangan Bahan-Bahan Segar, Yang Tidak Hanya Menjamin Cita Rasa Tetapi Jaga Kesehatan. Pelanggan Dapat Memodikasi Tingkat Kepedasan Sesuai Keinginan, Anggota Tingkat Kepuasan Yang Tinggi.

3. Kualitas Bahan Baku

Salah Satu Kunci Siksses Mie Gacoan Adalah Pemilihan Bahan Baku Yang Berkualitas. Mereka Menggunakan Bahan Lokal Yang Segar Dan Berkualitas Tinggi, Menjamin Rasa Setiapan Hidangan. Kesegaran Sayuran, Daging, Dan Bumbu Menjadi Prioritas Utama, Sehingga Setiap Suapan Anggota Rasa Yang Menggugah Selera. Pemilihan Bahan Baku Yang Berkualitas Jada Mencminan Komitmen Mereka Terhadap Kesehatan Pelangangan.

4. Pelayanan Yang Ramah Dan Cepat

Pelayanan di Mie Gacoan Rema Berkontribusi Pada Tingginya. Para staf dilatih untuk anggotanya pelayanan yang cepat dan efisien. Kecepatan Pelayanan Sangan Penting, Terutama Saat Jam Sibuk, Lantaran Banyak Pelangan Yang Datang untuk Menikmat Hidangan Mereka. Karyawan Yang Ramah Dan Siap Membantu Pendengkelaman Pembalaman Makan Di Mie Gacoan Semakin Menyenangkan.

5. SUASANA YANG NYAMAN

Desain Interior Mie Gacoan Dibuat Anggan Mempertimbangkangkan Kenyamanan Pelanggan. Pencahayaan Yang Baik Dan Suasana Yang Hangat, Pengunjung Merasa Betah Untuce Berlama-Lama. Ruang Makan Yang Cukup Luas Memungkitan Pelanggan untuk Menikmati Hidangan Bersama Teman Dan Keluarga. Mereka Rona Menyediakan Area Outdoor Dan Tempat Duduk Yang Nyaman, Menciptakan Atmosfer Yang Bersahabat.

6. Strategi Pemasaran Yang Efektif

MIE GACOAN MEMILIKI STRATEGI PEMASARAN YANG BRILIAN. Mereka Aktif Di Media Sosial, Platform Memanfaatkan Seperti Instagram Dan Tiktok UNTUK MEMPROMOSikan Menu Dan Acara Khusus. Konten Yang Menarik Dan Visual Yang Menggoda Menjangkau Banyak Audiens, Menarik Perhatian Konsumen Baru Sekaligus Memperuat Loyalitas Pelanggan Lama. Mie Gacoan Jaga Seringkali Melakukan Kerjasama Influencer Dengan Kuliner, Yang Membantu Meningkatkan Visibilitas Mereka.

7. Promo Tawaran Dan Diskon Menarik

Terkadar, Mie Gacoan Anggota Penawaran Khusus Atau Diskon Yang Sangan Menarik. Promosi ini tidak hanya menarik pelangangan baru tetapi buta membuat pelanggan setia merasa dihargai. DENGAN HARGA YANG TERJANGKAU DAN PROMO Yang KERAP TERSEDIA, MIE GACOAN DAPAT BERSAING DI PASAR YANG KOMPETIF.

8. Menu inovasi secara berkala

Mie Gacoan Selalu Melakukan Pengembangan Dan Inovasi Pada Menu Mereka. Mereka tidak ragu unkekperimen gangan rasa dan bahan baru. Misalnya, Penyisisan Sosis Baru Yang Unik Atau Menu Musiman Yang Hanya Tersedia Selama Waktu Tertentu. Inovasi Tersebut Menunjukkan Bahwa Mereka Selalu Mendengarkan Umpan Balik Pelanggan, Serta Menyesuaikan Diri Delangan Tren Kuliner Yang Sedang Meningkat.

9. Testimoni Pelanggan Yang Positif

Ulasan Positif Dari Pelanggan Menjadi Faktor Penentu Bagi Tinggi Rating Mie Gacoan. Banyak Pelanggan Yang Anggota Review Positif Tentang Rasa, Pelayanan, Dan Suasana. ULASAN INI MERJADI REFERENSI BAJI ORANG LAIN MEMPERTIMBIGAN UNTUK MENGUJUPI. Selain Itu, Mie Gacoan Rona Sangan Memperhatikan Kritik Dan Saran Dari Pelangangan, Yang Menunjukkan Bahwa Mereka Berkomitmen Untki Pengalaman Terbaik.

10. Komitmen Terhadap Keberlanjutan

Mie Gacoan Rona Memperhatikan Aspek Keberlanjutan, Delanan Beberapa Cabang Mengadopsi Praktik Ramah Lingkungan. Misalnya, Penggunaan Kemasan Biodegradable Dan Pengurangan Limbah Makanan. Konsumen Kini Semakin Peduli Terhadap Keberlanjutan Dan Mie Gacoan Menunjukkan Bahwa Mereka Bertanggung Jawab Terhadap Lingkungan.

11. Komunitas Yang Solid

Mie Gacoan Secara Aktif Membangun Komunitas Di Sekitar Mereka. Mereka Sering Mengadakan Acara, Seperti Kelas Memasak Atau Pengenalan Produk Baru, Yang Mengajak Pelangan UNTUK BERINTERAKSI LEBIH DEKAT DENGAN MEREK. Misalnya, Mereka Melakukan Kolaborasi Chef Chef Lokal UNTUK MENCIPTAKAN Menu Spesial. Ini Menciptakan Kedekatan Emosional Daman Pelanggan, Yang Pada Giliranana Meningkatkan Loyalitas.

12. Platform Pemesanan Online Yang Mudaah

Mie Gacoan MEMA MEMAHAMI PENTINGYA TEKNOLOGI DALAM MEMENUHI Kebutuhan Pelanggan. Mereka Menawarkan Platform Pemesanan Online Yang Sangan Ramah Pengguna, Situs web Baik Maupun Aplikasi Mobile. Pelanggan Dapat Delangan Muda Bembuat Pesanan, Yang Sangan Membantu Bagi Mereka Yang Sibuk Atau Ingin Menikmati Hidangan Di Rahat. Pengiriman Makanan Ragu Dilakukan Delangan Cepat, Menjaga Kualitas Dan Kesegaran Sewingga Pelangan Gua Tetap Puas.

13. Kualitas Makanan Yang Konsisten

Salah Satu Faktor Mengapa Mie Gacoan Mendapatkan Rating Tinggi Adalah Menjaga Kualitas Makanan Yang Konsisten. Setiap cabang menerapkan standar Yang sama dalam Hal Bahan Baku, Penyajian, Dan Rasa. Hal ini meluat pelangangan merasa ama dan nyaman saat memilih kembali mie gacoan, karena mereka tahu apa yang Akana Mereka Dapatkan.

14. Kesadaran Akan Tren Kuliner

Mie Gacoan Terus-Menerus Memantau Tren Makanan Dan Minuman Terkini. Misalnya, Ketika Tren Mie Ramen Atau Mie Berkuah Mulai Populer, Mereka Cepat Beradaptasi Anggan Memperkenalkan Variasi Produk Baru. Kesadaran ini memastikan Bahwa Mereka Tetap Relevan Di Mata Konsumen Dan MasaHi Ekspekektasi Pelanggan Yang Beragam.

15. Program Loyyitas Pelangan

UNTUK MEMPERTAHANANANANGAN PELANGGAN SETIA, MIE GACOAN MEMILIKI PROGRAM LOYALITAS YANG MANGANIMAN IMBUAN BAGI Pelangan Yang Sering Berkunjung. Program ini Tidak Hanya Menarik Tetapi JUGA MENCIPTAKI Rasa MEMILIKI THADAP Merek. Pelanggan Dapat Mengumpulkan Poin Dari Setiapsi Transaksi untuk Ditukarkan Diskon Diskon Atau Barang Gratis.

16. Dukungan Terhadap Uakaha Lokal

Mie Gacoan Sering Kali Bekerja sama Sama Produsen Lokal. Mereka Mendukung Petani Dan Pengausaha Kecil, Yang Bukan Hanya Baik Unkon Ekonomi Lokal, Tetapi BUGA MEMPERKUAT POSISI MEREKA DI Mata Pelangan. DENGAN BEMBELI PRODUKSI LOKAL, MIE GACOAN SEKALIGUS BERKONTRIBUSI THADAP KERBERLANJUTAN EKONOMI.

17. PENYAMPAIAN BUDAYA KULINER

Menu Selain Dari, Mie Gacoan Rona Membawa Pengunjung Dalam Perjalanan Budaya Kuliner Indonesia. Setiapan Hidangan Mencermikans Keanekaragaman Cita Rasa Masyarakat Indonesia, Yang Dialah Gelanhaya Yang Yang Modern. Ini menarik bagi pelangan yang mengencari pengalaman kuliner bukan hanya sekedar makanan, tetapi tuja unkak aGenal Budaya.

18. Adaptasi Terhadap Umpan Balik Pasar

MIE GACOAN MENERAPKAN ANALISIS DATA UNTUK MEMAHAMI Preferensi Pelanggga. Data Delan Mengumpulkan Dari Transaksi Dan Umpan Balik, Meneka Dapat Menilai Menu Mana Yang Paling Laris Dan Apa Yang Perlu Ditingkatkan. DATA PENDEKATAN BERBASIS INI MEMBURU MEREKA MEMAAT KETUTUSAN STRATEGIS YANG MENDUKUNG PERMINGuhan.

19. Kemudahan Aksses Dan Lokasi Strategis

Mie Gacoan Berusia Menempatkan Cabang Mereka Di Lokasi-Lokasi Strategi yang Muda Mudah Diakses. Ini Termasuk Dekat Pusat Pusat Keramaian, Universitas, Dan Kawasan Bisnis. Pelanggan Tidak Hapius Berusia Keras TUKUKAN LOKASI, Yang Meningkatkan Kemunckinan Mereka Unkuk Datang Kembali.

20. Kombinasi Menarik Antara Tradisi Dan Modernitas

Mie Gacoan Berhasil Menyajikan Kombinasi Antara Resep Tradisional Dan Teknik Memasak Modern. Pendekatan ini Menghasilkan Hidangan Yang Tidak Hanya Lezat, Tetapi Jaga Terlihat Menarik Secara Visual. Presentasi setiaap Hidangan Yang Estetis Menambah Daya Tarik Dan Mendorong Pelangan UNTUK BERBAGI Pengalama Mereka Di Media Sosial.

TENGAN FAKTOR-FAKTOR TERSEBUT, TIDAK MENGERKANKAN JIKA MIE GACOAN TERUS MERAIH RATING TERGI DI KALIGAN KONSUMEN. Dedikasi Mereka Terhadap Kualitas, Inovasi, Dan Pelayanan Mengukuhkan Posisi Mereka Sebawai Salah Satu Restoran Mie Terbaik Di Indonesia.

Mie Gacoan: Tinjauan Komprehensif Umpan Balik Google

Apa itu Mie Gacoan?

Mie Gacoan adalah rantai restoran Indonesia terkenal yang berspesialisasi dalam mie tradisional Indonesia yang unik dan lezat. Dengan akar yang tertanam dalam dalam budaya kuliner Indonesia, mereka terkenal karena hidangan khas mereka, Mie Gacoan, hidangan mie pedas yang beraroma yang telah menangkap hati banyak orang Indonesia dan pengunjung.

Penawaran Menu

Menu Mie Gacoan beragam, melayani berbagai selera dan preferensi. Puncaknya, tentu saja, mie mie mereka (mie goreng) yang hadir dalam berbagai variasi, masing -masing menawarkan selera dan tingkat rempah -rempah yang berbeda. Fokus restoran adalah pada bahan-bahan berkualitas tinggi yang dikombinasikan dengan teknik memasak otentik untuk memberikan makanan yang benar-benar memuaskan.

  1. Mie Gacoan Special: Hidangan bintang ini menampilkan mie kenyal yang diaduk dengan campuran rahasia rempah-rempah, sayuran, dan pilihan protein seperti ayam atau daging sapi.

  2. Siomay: Pangsit Indonesia klasik yang menonjolkan hidangan mie.

  3. TAHU TEMPE: Tahu dan tempe renyah yang berfungsi sebagai iringan sempurna, menambahkan sentuhan ramah vegan ke dalam makanan.

  4. Topping tambahan: Pengunjung dapat menambahkan serangkaian topping, termasuk bawang goreng, bawang hijau, dan serpihan cabai, memungkinkan untuk pengalaman rasa yang disesuaikan.

Suasana dan dekorasi

Restoran Mie Gacoan biasanya menampilkan suasana modern namun nyaman. Dekorasi seringkali bersemangat, dihiasi dengan seni Indonesia dan desain kontemporer yang menciptakan lingkungan yang ramah. Pengaturan tempat duduk dirancang untuk makanan intim kecil dan pertemuan kelompok yang lebih besar, menjadikannya pilihan yang bagus untuk berbagai pengalaman bersantap.

Kehadiran online dan umpan balik pelanggan

Mie Gacoan telah membuat langkah signifikan dalam membangun kehadiran online, secara efektif memanfaatkan platform media sosial seperti Instagram, Facebook, dan Tiktok untuk terlibat dengan audiens mereka. Merek ini sering menampilkan kesaksian pelanggan, gambar candid dari hidangan, dan video proses memasak, yang membantu menciptakan komunitas penggemar mie.

Umpan balik Google telah berperan dalam membentuk reputasi Mie Gacoan. Ulasan pelanggan di Google memberikan wawasan tentang pengalaman bersantap dan kualitas makanan. Mari kita uraikan beberapa tema umum yang diamati dalam umpan balik pelanggan:

Sorotan umpan balik positif

  1. Profil rasa: Banyak pelanggan rave tentang rasa yang kaya dan porsi Mie Gacoan yang murah hati. Kombinasi rempah -rempah dan bahan -bahan segar mengangkat hidangan, membuatnya berkesan.

  2. Keterjangkauan: Pelanggan sering mengomentari keterjangkauan hidangan di Mie Gacoan, menjadikannya pilihan yang dapat diakses bagi siswa dan keluarga.

  3. Layanan Cepat: Pengulas sering menyebutkan efisiensi layanan. Banyak yang menyatakan kepuasan dengan seberapa cepat pesanan diambil dan disajikan, mengurangi waktu tunggu secara signifikan.

  4. Kebersihan: Tanda tinggi biasanya diberikan untuk kebersihan restoran, dengan pelanggan menghargai standar higienis yang dikelola oleh staf.

Area untuk perbaikan

  1. Kontrol level rempah -rempah: Sementara banyak pelanggan menikmati opsi pedas, beberapa menyarankan bahwa tingkat rempah -rempah dapat disesuaikan lebih mudah untuk mengakomodasi mereka yang memiliki selera yang lebih ringan.

  2. Konsistensi dalam persiapan makanan: Beberapa ulasan telah menunjukkan ketidakkonsistenan dalam ukuran rasa atau porsi antara lokasi yang berbeda. Merampingkan proses kuliner dapat membantu mempertahankan keseragaman di seluruh cabang.

  3. Tingkat Kebisingan: Beberapa pengunjung telah menyebutkan bahwa selama masa puncaknya, restoran bisa menjadi sangat bising, yang dapat mengurangi pengalaman bersantap. Solusi akustik dapat meningkatkan suasana.

Strategi pemasaran

Mie Gacoan telah mengadopsi berbagai strategi pemasaran untuk meningkatkan visibilitas dan keterlibatan pelanggan. Beberapa strategi penting meliputi:

  1. Keterlibatan Media Sosial: Leveraging platform seperti Instagram untuk menampilkan konten yang menarik secara visual telah terbukti efektif dalam menarik pemirsa yang lebih muda.

  2. Promosi dan penawaran: Promosi reguler ditawarkan, seperti diskon pada hari -hari tertentu atau makanan kombo, memberi insentif kepada pelanggan baru dan yang kembali.

  3. Program loyalitas pelanggan: Mie Gacoan telah memperkenalkan program loyalitas, menghargai pengunjung yang sering dengan poin yang dapat ditebus dengan makanan gratis atau diskon, sehingga mendorong bisnis berulang.

  4. Keterlibatan Komunitas: Keterlibatan dengan komunitas lokal melalui sponsor acara atau partisipasi dalam festival makanan menambah visibilitas merek, menumbuhkan niat baik dan hubungan dengan pelanggan.

Kesimpulan tentang Mie Gacoan berdasarkan umpan balik

Secara keseluruhan, umpan balik Mie Gacoan di Google dan platform lain mencerminkan komitmen yang kuat untuk memberikan pengalaman bersantap yang menyenangkan. Restoran ini secara efektif menikahi makanan berkualitas dengan strategi pemasaran yang kuat, berkontribusi pada popularitasnya. Ketika mereka terus beradaptasi dan berkembang berdasarkan umpan balik pelanggan, Mie Gacoan berada di posisi yang baik untuk tetap menjadi bahan pokok di lanskap kuliner Indonesia.