(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 Ceker Mercon: Petualangan Kuliner Pedas

Mie Gacoan Ceker Mercon: Petualangan Kuliner Pedas

Apa itu Mie Gacoan?

Mie Gacoan adalah rantai restoran Indonesia terkenal yang terkenal dengan pandangan uniknya pada hidangan mie tradisional, terutama “Ceker Mercon” atau kaki ayam pedas. Merek ini bangga dengan memberikan pengalaman kuliner yang luar biasa, menggabungkan rasa yang berani, kontras tekstur, dan rempah -rempah kaya yang khas dari masakan Indonesia. Pendirian ini telah memikat penggemar pangan, baik secara lokal maupun di luar negeri, dan terus mendapatkan popularitas untuk penawaran inovatifnya.

Bintang Pertunjukan: Ceker Mercon

Ceker Mercon adalah hidangan khas restoran, ditandai dengan kaki ayam pedasnya, dimasak dengan sempurna dalam saus yang berapi -api. Nama “Ceker Mercon” itu sendiri diterjemahkan menjadi “Firecracker Feet,” yang merupakan deskripsi yang pas untuk rasa pedas yang secara eksplosif yang menyalakan langit -langit mulut Anda. Hidangan ini menonjol bukan hanya karena panasnya tetapi juga karena persiapan teliti yang terlibat dalam menyusun kaki ayam dari awal.

Sorotan bahan

1. Kaki Ayam (Ceker):

Bahan utamanya adalah kaki ayam, yang sering diabaikan namun kaya akan kolagen dan rasa. Tidak seperti daging ayam yang khas, kaki ayam memberikan tekstur unik yang empuk saat dimasak dengan benar. Mereka dibersihkan, direbus, dan kemudian direndam untuk meningkatkan rasa mereka.

2. Saus pedas:

Saus adalah tempat keajaiban terjadi. Biasanya termasuk bahan -bahan seperti cabai, bawang putih, bawang merah, jahe, dan berbagai rempah. Level panas dapat bervariasi tergantung pada jenis cabai yang digunakan, dengan variasi mulai dari sedikit pedas hingga panas panas.

3. Menyampaikan:

Ceker Mercon sering dilayani dengan berbagai iringan yang meningkatkan pengalaman keseluruhan. Ini termasuk tahu goreng, telur rebus, dan kadang -kadang bahkan sayuran segar seperti mentimun dan kol, yang memberikan kontras renyah dengan kaki ayam yang lembut.

Melepaskan rasa

Salah satu elemen kunci dari Ceker Mercon dari Mie Gacoan adalah lapisan rasanya. Setelah gigitan pertama, pelanggan sering dipukul dengan panas langsung cabai, diikuti oleh petunjuk aromatik bawang putih dan jahe. Saus yang dimasak lambat menempel pada kaki ayam, memungkinkan pengunjung untuk menikmati setiap potongan sepenuhnya. Kerajinan yang cermat ini membuat hidangan ini menjadi favorit kuliner di antara mereka yang menghargai makanan pedas.

Manfaat kesehatan

Meskipun sering dicap sebagai kesenangan bersalah, Ceker Mercon memang memiliki keunggulan kesehatannya. Kaki ayam kaya akan kolagen, yang penting untuk menjaga kulit, sendi, dan tulang yang sehat. Selain itu, beragam rempah-rempah yang digunakan dalam saus memiliki berbagai manfaat kesehatan, seperti sifat anti-inflamasi dan alat bantu pencernaan.

Cara Menikmati Ceker Mercon

Mie Gacoan mendorong pengunjung untuk menikmati Ceker Mercon dengan tangan mereka, memungkinkan pengalaman bersantap yang lebih otentik. Memasangkan hidangan dengan segelas jus juva segar atau es teh dapat membantu menyeimbangkan kepedasan, membuatnya lebih mudah untuk menikmati rasa tanpa kewalahan oleh panas.

Pengalaman bersantap

Restoran Mie Gacoan dirancang untuk menawarkan suasana yang semarak dan muda, sering kali dihiasi dengan warna -warna cerah dan dekorasi energik. Dari saat Anda melangkah masuk, aroma rempah -rempah yang menarik memenuhi udara, langsung membangkitkan nafsu makan Anda. Apakah Anda makan sendiri atau bersama teman -teman, pengalaman komunal menikmati semangkuk Ceker Mercon yang beraroma menyatukan pengunjung.

Popularitas dan Ekspansi

Sejak awal, Mie Gacoan telah melihat pertumbuhan eksponensial, memperluas lokasinya di seluruh Indonesia dan bahkan bertualang ke pasar internasional. Peningkatan popularitas Ceker Mercon telah menyebabkan pengikut yang setia, dengan media sosial menjadi kontributor yang signifikan terhadap ketenarannya. Pengunjung sering berbagi petualangan pedas mereka secara online, menampilkan daya tarik hidangan yang tak tertahankan.

Tips untuk Membuat Ceker Mercon di rumah

Bagi mereka yang terinspirasi untuk menciptakan kembali pengalaman pedas Ceker Mercon di rumah, berikut adalah beberapa tips penting:

1. Pilih bahan berkualitas:

Pilih kaki ayam dan rempah-rempah yang segar dan berkualitas tinggi. Semakin baik bahan -bahannya, semakin beraroma hidangan Anda.

2. Sesuaikan level panas:

Cabai spesifik memiliki tingkat rempah -rempah yang berbeda. Saat membuat saus, sesuaikan jumlah pasta cabai atau bubuk berdasarkan preferensi panas Anda.

3. Masak perlahan:

Biarkan kaki ayam mendidih dalam saus untuk menyerap rasa sepenuhnya. Kesabaran adalah kuncinya; Semakin lama waktu memasak, semakin lembut dan beraroma kaki.

4. Eksperimen dengan rasa:

Jangan ragu untuk memodifikasi saus dengan bahan -bahan tambahan, seperti serai atau daun jeruk nipis, untuk membuat sentuhan unik Anda pada Ceker Mercon klasik.

5. Sajikan dengan sisi:

Tawarkan berbagai sisi, seperti nasi, tahu goreng, dan sayuran segar untuk membuat makanan lebih komprehensif.

Signifikansi budaya

Ceker Mercon bukan hanya hidangan; Ini mencerminkan tradisi kuliner yang kaya di Indonesia. Penggunaan rempah -rempah dan bahan -bahan unik mencontohkan budaya lokal, menggabungkan beragam rasa dan teknik. Menikmati Ceker Mercon juga merupakan kesempatan untuk terlibat dengan warisan makanan Indonesia, mengundang pengunjung untuk menghargai kedalaman rasa yang datang dari tahun penyempurnaan kuliner.

Sebagai kesimpulan

Mie Gacoan Ceker Mercon mewakili perjalanan yang lezat bagi siapa pun yang mau merangkul panas dan kompleksitas masakan Indonesia. Karena terus mendapatkan perhatian dan fanbase yang setia, sensasi pedas tetap menjadi petualangan kuliner yang menawan bagi semua yang berani menikmati citarasa berapi -api. Apakah Anda mengalaminya di restoran yang semarak atau membuat versi di rumah, Ceker Mercon berjanji untuk menyalakan selera Anda dengan cara yang paling menggembirakan.

Mie Gacoan Udang Keju: Kenikmatan Mie Parat Yang Yang Menggoda

Mie Gacoan Udang Keju: Kenikmatan Mie Parat Yang Yang Menggoda

Mie Gacoan, Nama Yang Telah Menggelegar Di Antara Pecinta Kuliner Di Indonesia, Khususnya Bagi Penggemar Makanan Peda. Menu Salah Satu UNGGULANAA Yang Paling Diminati Adalah Mie Gacoan Udang Keju. Menyajikan Kombinasi Lezat Antara Mi, Udang, Dan Keju, Menu Ini Menjadi Pilihan Favorit Bagi Banya Kalangan, Terutama Di Kalangan Anak Muda. Dalam Artikel ini, Kita Akan Menjelajiahi Semua Aspek Dari Mie Gacoan Udang Keju, Dari Bahan-Bahan, Proses Pembuatan, Hingan Cara Menikmatinya Agar Pengalaman Makan dan Semakaninsankan.

Bahan-Bahan Mie Gacoan Udang Keju

Mie Gacoan Udang Kejen Terkenal Karena Komposisi Bahan-Bahananya Yang Berkualitas. Setiapan suapan anggota Perpaduan Rasa Yangi Memanjakan Lidah Dan Membawa Sensasi Peda Yang Menggoda. Di Dalamnya Terdapat Bahan-Bahan Sebagai BerIKUT:

  1. Mie: Mie Telur Yang Kenyal Dan Memiliki Tekstur Yang Sempurna Cocok UNTUK DIADUK DENGAN SAUS PEDA.
  2. Udang Segar: Udang Yang Digunakan Biasanya Adalah Udang Ukuran Sedang Yang Segar, Dipilih untuk Anggota Rasa Manis Dan Tekstur Yang Juicy.
  3. Sosis peda: Saus pedas Merupakan Salah Satu Komponen Kunci Yang Membuat Hidangan Ini Begitu Menggoda. Kombinasi Cabai, Bawang Putih, Dan Bumbu Khusus Anggota Rasa Pedas Yang Seimbang.
  4. Keju: Keju Yang Digunakan Biasianya Adalah Keju Mozzarella Atau Cheddar, Yang Meleleh Dengan Indah Saat Dipadukan Delangan Mie Dan Saus Pedas.
  5. Sayuran: Biasianya, Mie Gacoan Udang Keju Dilengkapi Delangan Sayuran Segar Seperti Bok Choy Atau Sawi, Menambah Kesegaran Dan Nilai Gizi.

Proses Pembuatan Mie Gacoan Udang Keju

Membuat Mie Gacoan Udang Keju Tidak Terlalu Rumit, Namun Memerlukan Perhatian Pada Detil Dan Langkah-Langkah Yang Tepat. BerIKUT ADALAH LANGKAH-LANGKAH TUKUJikan Hidangan INI:

  1. Persiapan Bahan: Siapkan Semua Bahan Yang Diperlukan. Cuci Bersih Udang Dan Sayuran, Lalu Potong Sayuran Sesuai Selera.

  2. Memasak Mie: Rebus mie dalam Air Mendidih Selama Beberapa Menit Huncga Matang, Kemudian Tadiskan Dan Sisihkan.

  3. Mengolak Udang: Panaskan Sedikit Minyak di Wajan. Tumis Bawang Putih Hingga Wangi, Lalu Masukkan Udang Dan Masak Hingga Berubah Warga.

  4. Menambahkan Sayuran Dan Saus: Setelah Udang Matang, Masukkan Sayuran Dan Tumis Sebentar. Kemudian, Tambahkan Saus Pedas Sesuai Selera Dan Aduk Hingga Merata.

  5. MIE MIE: Masukkan Mie Yang Telah Direbus Ke Dalam Wajan. Aduk Semua Bahan Hingga Tercampur Rata.

  6. Menambahkan Keju: Sebelum Selesai Memasak, Taburkan Keju Di Atas Mie Dan Tutup Wajan Agar Keja Meleleh Delan Baik.

  7. Penyajian: Angkat Mie Gacoan Udang Keju, Dan Sajikan Hangat Dalam Piring. Penampilan Yang Menggoda Delangan Keju Yang Meleleh Di Atasnya Siap untuk Dinikmati.

Kenikmat Menikmati Mie Gacoan Udang Keju

Mie Gacoan Udang Keju Tidak Hanya Sekedar Hidangan, Tetapi MagA Merupakan Pengalaman Kuliner. Berbagai Elemen Rasa – Peda, Gurih, Manis Dari Udang, Dan Creamy Dari Keju – Berberu Harmonis, Menciptakan Kenikmatan Yang Tiada Tara. Saattapnya, Anda Dihadapkan Pada Sensasi pedas yang merangsang selera, diikuti iheh kesu lembut yang melengkapi setiapan suapan.

Dine-in di restoran mie gacoan buta menawarkan atmosfer yang Menyenangkan. PELYANAN PELYANAN YANG Cepat Dan Ramah, Anda Dapat Menikmati Waktu Bersantai Sarik Menikmati Hidangan. DENGAN SUASANA YANG MODERN DAN NYAMAN, TEMPAT INI MENJADI LOKASI FAVORIT UNTUK BERKUMPUL BERSAMA TEMAN-TEMAN ATAU KELUARGA.

Menu variasi lain di mie gacoan

Selain Mie Gacoan Udang Keju, restoran ini jagA Menawarkan Berbagai Pilihan Mi Pedas Lainnya Yang Bisa Menggoyang Lidah. Beberapa di Antarananya Adalah:

  1. Mie Gacoan Ayam Pedas: Menggunakan Potongan Ayam Yang Empuk Dan Saus Parat Yang Yang

  2. Mie Gacoan Sayuran: Vegetarian Bagi, Pilihan ini menawarkan mi Yang sama gelanan sayuran beragam dan saus Yang kaya rasa tanpa tambahan daging.

  3. Mie Gacoan Vegan: BAGI MANA YANG MENGITI POLA AKAN VEGAN, MENU INI MERYAJIKAN MI PEDAS DANGAN BAHAN-BAHAN NABATI YANG LEZAT.

Seo Dan Kata Kunci

BAGI PARA PELAKU BISNIS KULINER DAN PEMILIK Restaurant, Mengoptimalkan Seo Menjadi Krusial untuk Meningkatkan Visibilitas Di Mesin Pencari. Beberapa Kata Kunci Yang Relevan untuk Mie Gacoan Udang Keja Termasuk:

  • Mie Gacoan
  • Mie Peda
  • Mie Gacoan Udang Keju
  • Kuliner Pedas Indonesia
  • Makanan Keinian

DGAN MENGINTEGRASIKAN KATA KUNCI INI, Situs web ATAU Blog Tentang restoran Dapat Menarik lebih Banyak Pengunjung Dan Pecinta Kuliner Yang Presari Pengalaman Baru.

Penutup

Mie Gacoan Udang Keju Memang Menggoda Dan Sempurna Taktul Dinikmati, Terutama Bagi Pecinta Kuliner Pedas. DENGAN KOMPIKOSI BAHAN YANG BERKUALITAS DAN CARARASA YANG KAYA, TIDAK MENGHERANANAN JIKA Menu ini Selalu Ramai Diburu. Jika Anda Penasaran, Kunjungi Gerai Mie Gacoan TerdeKat Dan Rasakan Sendiri Kenikmatan Mie Gacoan Udang Keju Yang Tiada Duya.

Mie Gacoan Es Pocong: Kegembiraan Indonesia yang trendi

Mie Gacoan Es Pocong: Kegembiraan Indonesia yang trendi

Bangkitnya Mie Gacoan

Mie Gacoan, sebuah fenomena kuliner populer yang berasal dari Indonesia, telah menangkap hati banyak penggemar makanan di seluruh kepulauan. Hidangan mie yang unik ini menjadi semakin populer karena citarasa khasnya dan presentasi yang menyenangkan. Nama “Mie Gacoan” menarik dari bahasa gaul Indonesia “Gaco,” yang diterjemahkan menjadi “untuk mengejar,” yang mencerminkan rasa yang diantisipasi dan pengalaman kuliner yang semarak.

Apa yang membuat Mie Gacoan unik?

Mie Gacoan terutama menonjol karena penawaran menunya yang beragam dan perpaduan bahan yang berbeda. Hidangan ini dikenal karena beragam jenis mie, yang melayani berbagai selera dan preferensi. Dari kaldu ayam gurih hingga saus berbasis cabai pedas, Mie Gacoan menggabungkan rasa yang beresonansi dengan masakan tradisional Indonesia dan tren makan kontemporer.

Varietas mie

Pelanggan dapat memilih dari berbagai jenis mie, termasuk:

  • Mie Kering: Varian mie kering yang menggabungkan tekstur renyah dengan topping gurih.
  • Mie Basah: Mie lembut dan lembab yang menyerap rasa kaya saus yang menyertainya.
  • Mie Rempah: Mie yang diresapi ramuan yang mengangkat hidangan ke tingkat pengalaman aromatik yang baru.

Setiap jenis mie dapat dipasangkan dengan banyak saus dan topping, memungkinkan untuk profil rasa individual yang disesuaikan dengan preferensi pelanggan.

Saus dan topping khas

Saus Mie Gacoan adalah tempat keajaiban terjadi. Saus ini sangat bervariasi, menciptakan menu yang menarik dan beragam. Beberapa pilihan populer meliputi:

  • Sosis Kecap Pedas: Varian kecap panas yang memberikan tidak hanya panas tetapi juga rasa mendalam dan umami.
  • Sosis Kacang: Saus kacang yang kaya yang menambah rasa gila dan tekstur krim pada hidangan.
  • Sosis Cuka: Saus berbasis cuka yang manis dan tajam yang memberikan kontras yang menyegarkan dengan elemen-elemen gurih.

Selain itu, topping khusus seperti bawang goreng, telur rebus, dan bawang merah yang renyah sering ditambahkan untuk meningkatkan tekstur dan rasa, membuat makanan menarik secara visual dan memuaskan.

Es Pocong: Sensasi Makanan Penutup

Nama “ES Pocong” diterjemahkan menjadi “es pocong,” yang terinspirasi oleh sosok mitos Indonesia yang dikenal sebagai Pocong. Makanan penutup ini telah mendapatkan pengakuan terkenal karena kemiripannya yang unik dengan Pocong, biasanya diwakili oleh es yang disajikan dalam cangkir bundar dengan bahan -bahan berwarna -warni.

Bagaimana Es Pocong dibuat?

Untuk menciptakan ES Pocong, toko -toko sering menggunakan gaya presentasi yang menyenangkan dan interaktif. Basis biasanya terdiri dari:

  • Es hancur: Es yang dicukur atau dihancurkan dengan halus memberi makanan penutup tekstur menyegarkan yang meleleh di mulut.
  • Susu kental: Bahan manis ini dengan murah hati ditaburi es, menambahkan sentuhan krim.
  • Topping warna -warni: ES Pocong dihiasi dengan bermacam -macam topping seperti buah -buahan manis, kubus jeli, dan kadang -kadang bahkan sedikit sirup cokelat.

Presentasi yang menyenangkan berkontribusi pada popularitasnya di antara kerumunan yang lebih muda, menjadikannya wajib bagi siapa pun yang mengunjungi outlet Mie Gacoan.

Pengalaman makan di Mie Gacoan

Makan di Mie Gacoan menawarkan lebih dari sekadar makanan; Ini adalah pengalaman sensorik yang lengkap. Dekorasi yang cerah dan penuh warna dikombinasikan dengan suasana yang energik menjadikannya tempat nongkrong favorit bagi teman dan keluarga.

Suasana dan dekorasi

Interiornya sering kali bersemangat, menampilkan mural dan desain lucu yang mencerminkan budaya kontemporer Indonesia. Musik yang hidup di latar belakang semakin meningkatkan pengalaman bersantap, menciptakan getaran dinamis yang menarik pecinta makanan.

Pertimbangan kesehatan

Sementara Mie Gacoan tidak diragukan lagi merupakan suguhan untuk langit -langit, pertimbangan kesehatan di sekitar konsumsinya layak disebut. Bahan yang bervariasi memungkinkan untuk pendekatan yang dapat disesuaikan, memudahkan pelanggan untuk membuat pilihan yang lebih sehat.

  • Pilihan vegetarian: Banyak item menu menampilkan protein vegetarian seperti tahu, memberi pemakan nabati pengalaman yang sama menyenangkannya.
  • Kustomisasi porsi: Pelanggan dapat memilih porsi yang lebih kecil atau memilih topping yang lebih sehat untuk memenuhi tujuan diet.

Popularitas di media sosial

Pendakian cepat Mie Gacoan juga dapat dikaitkan dengan keberhasilan viralnya di platform media sosial. Pengunjung sering berbagi pengalaman mereka secara online, menampilkan presentasi penuh warna dari Mie Gacoan dan Es Pocong, menarik pengikut yang ingin mencoba tren terbaru.

Platform seperti Instagram dan Tiktok telah berkembang dengan foto berwarna -warni dan video menarik yang menampilkan hidangan unik, menarik lebih banyak pelanggan untuk mengunjungi outlet Mie Gacoan lokal mereka. Tagar yang terkait dengan Mie Gacoan telah naik dalam popularitas, menggarisbawahi daya tariknya sebagai masakan kontemporer Indonesia.

Lokasi dan Ekspansi

Awalnya berakar di distrik -distrik tertentu, Mie Gacoan dengan cepat memperluas operasinya secara nasional, dengan rencana cabang internasional. Setiap lokasi baru mempertahankan pesona otentik merek sambil memasukkan sentuhan regional yang beresonansi dengan selera lokal.

Kesimpulan

Singkatnya, Mie Gacoan Es Pocong tidak hanya berdiri sebagai representasi dari warisan kuliner yang kaya di Indonesia tetapi juga mencakup tren modern dan keterlibatan sosial. Kombinasi dari beragam rasa, pengalaman bersantap interaktif, dan presentasi yang penuh warna telah dengan kuat menetapkan Mie Gacoan sebagai trendsetter dalam kancah makanan Indonesia. Penawaran unik dan pengalaman menyenangkan yang terkait dengan Mie Gacoan terus menarik baik penggemar makanan lokal dan internasional, mengamankan tempatnya sebagai andalan dalam budaya makan Indonesia.

Mie Gacoan Es Genderuwo: Petualangan Kuliner

Mie Gacoan Es Genderuwo: Petualangan Kuliner

Mie Gacoan adalah permata gastronomi yang terletak di Indonesia, terkenal karena bermacam -macam mie tradisional yang merayakan warisan yang kaya dari masakan Indonesia. Surga kuliner ini telah menjadi tujuan bagi penggemar makanan, menarik penduduk setempat dan wisatawan untuk mengalami citarasa unik yang mendefinisikan makanan jalanan Indonesia.

Warisan Mie Gacoan

Berasal dari jantung budaya kuliner Indonesia, Mie Gacoan menonjol karena fokusnya pada resep otentik yang diturunkan dari generasi ke generasi. Pendirian ini mencakup esensi mie tradisional Indonesia, menggabungkannya dengan berbagai rempah dan topping yang mencerminkan rasa regional. Istilah “Gacoan” mengacu pada gaya makanan yang menyenangkan dan memabukkan.

Mie Gacoan bertujuan untuk menjaga resep tradisional ini tetap hidup sambil memberikan sentuhan modern untuk pengunjung kontemporer. Suasana restoran ramai, mengingatkan pada warung makanan jalanan Indonesia yang semarak, di mana suara panci mendesis dan obrolan yang menarik memenuhi udara.

Menu: mie dan banyak lagi

Di Mie Gacoan, bintang menu tidak diragukan lagi mie, tetapi beragam hidangan meningkatkan pengalaman bersantap secara keseluruhan. Berikut ini lebih dekat apa yang diharapkan saat berkunjung:

  1. Mie Gacoan Special: Hidangan khas ini menggabungkan mie segar, yang ditarik tangan disiram dalam kaldu yang kaya dan pedas yang menawarkan keseimbangan umami yang sempurna. Di atasnya dengan sayuran tumis dan irisan daging, masing -masing gigitan memberikan ledakan rasa.

  2. Mie Peda: Bagi mereka yang menyukai tendangan berapi-api, mie peda adalah wajib dicoba. Dipenuhi dengan pasta cabai dan di atasnya dengan murah hati dengan bawang merah goreng, hidangan ini menarik bagi pecinta rempah -rempah dan menawarkan panas yang tak terlupakan yang tetap indah.

  3. Bakso: Melengkapi hidangan mie, sup Bakso (bakso) adalah favorit di antara pengunjung. Bakso sukulen ini secara tradisional dibuat dengan campuran daging sapi dan tepung tapioka, disajikan dalam kaldu gurih bersama dengan mie dan rempah -rempah segar.

  4. Es genderuwo: Tidak hanya Mie Gacoan bersinar dalam penawaran mie, tetapi juga menghadirkan opsi minuman yang menyegarkan yang dikenal sebagai ES Genderuwo. Dinamai setelah sosok cerita rakyat setempat, hidangan penutup es ini menampilkan buah -buahan campuran, sirup manis, dan campuran jeli kelapa yang memberikan hasil akhir yang manis untuk makanan, sempurna untuk didinginkan dalam iklim hangat Indonesia.

  5. Berbagi piring: Restoran ini juga menawarkan pilihan piring berbagi, ideal untuk grup. Ini termasuk berbagai lauk seperti tahu goreng renyah, tempe, dan medley sambal, melayani pecinta daging dan vegetarian.

Seni memasak: di belakang layar

Dedikasi untuk metode otentik dan bahan-bahan berkualitas tinggi terbukti di Mie Gacoan. Setiap hidangan disiapkan segar setiap hari, memastikan bahwa pelanggan menikmati pengalaman yang paling beraroma. Para koki sering menggunakan teknik tradisional-seperti penarik tangan mie. Ini menciptakan tekstur unik yang kenyal dan memuaskan.

Bahan -bahan yang bersumber secara lokal diprioritaskan, dengan penekanan pada penawaran musiman yang meningkatkan rasa hidangan. Penggunaan ramuan dan rempah -rempah segar sangat penting, karena mereka menangkap esensi masakan Indonesia. Aromatik umum seperti bawang putih, jahe, dan bawang merah adalah bahan pokok yang menjadi ciri rasa khas mereka.

Suasana: tempat berkumpul

Mie Gacoan dirancang untuk membangkitkan perasaan bersantap komunal, mendorong para tamu untuk berkumpul dan berbagi dalam perjalanan kuliner. Pengaturan tempat duduk santai dan ramah, menumbuhkan lingkungan yang mempromosikan percakapan dan kenikmatan. Dekorasi interior memberi penghormatan kepada budaya Indonesia, dengan mural yang semarak dan elemen dekoratif yang mengangkut pengunjung langsung ke jantung adegan makanan jalanan Indonesia.

Perjalanan kuliner di luar mie

Sementara mie menjadi pusat perhatian, pengalaman di Mie Gacoan melampaui hanya makanan. Pengunjung sering pergi dengan pemahaman tentang signifikansi budaya di balik setiap hidangan. Tradisi berbagi makanan, pentingnya bahan -bahan, dan kisah -kisah yang terhubung dengan setiap resep memperkuat perasaan komunitas.

Kesehatan dan kesejahteraan

Mie Gacoan juga bangga menyediakan berbagai pilihan sehat. Banyak hidangan menggabungkan sayuran dan protein tanpa lemak, menjadikannya pilihan yang cocok bagi mereka yang ingin menikmati tanpa mengorbankan kesehatan mereka. Pilihan vegetarian dan bebas gluten tersedia berdasarkan permintaan, mencerminkan komitmen restoran untuk mengakomodasi berbagai kebutuhan diet.

Pengalaman pelanggan

Kepuasan pelanggan adalah landasan filosofi Mie Gacoan. Pengunjung rave tentang layanan yang ramah, dengan staf yang dilatih untuk memandu para tamu melalui menu dan merekomendasikan hidangan berdasarkan preferensi individu. Fokus pada layanan luar biasa meningkatkan pengalaman keseluruhan, membuat setiap kunjungan menyenangkan dan berkesan.

Media Sosial dan Keterlibatan Komunitas

Mie Gacoan memanfaatkan platform media sosial untuk terhubung dengan audiensnya, berbagi pembaruan tentang spesial musiman, item menu baru, dan sekilas persiapan kuliner di belakang layar. Terlibat dengan komunitas membantu menumbuhkan basis pelanggan yang setia, dengan banyak pelanggan yang ingin berbagi pengalaman Mie Gacoan secara online. Pemasaran dari mulut ke mulut ini menambah daya pikat restoran, menarik pendatang baru yang ingin bergabung dengan petualangan kuliner.

Kesimpulan

Mie Gacoan es Genderuwo menonjol lebih dari sekadar tempat makan; Ini adalah petualangan kuliner yang merangkum jantung masakan Indonesia. Dengan menu yang beragam, dedikasi untuk resep otentik, dan suasana yang semarak, Mie Gacoan menawarkan pengalaman kepada para tamu yang melampaui rasa – ini adalah perjalanan ke permadani budaya makanan Indonesia yang kaya. Apakah Anda adalah penggemar mie seumur hidup atau pelancong yang penasaran, ada sesuatu yang bisa ditemukan semua orang di Mie Gacoan es Genderuwo.

Mie Gacoan Mie Iblis: Petualangan Kuliner Pedas

Mie Gacoan Mie Iblis: Petualangan Kuliner Pedas

Memahami Mie Gacoan

Mie Gacoan telah menjadi nama populer di kancah kuliner Indonesia, dirayakan karena pandangan inovatifnya tentang mie tradisional. Didirikan pada tahun 2015 di Yogyakarta, Mie Gacoan telah mengumpulkan pengikut setia karena kombinasi rasanya yang unik dan penawaran menu yang bervariasi. Nama ‘Mie Gacoan’ sendiri mencerminkan niat restoran untuk memberikan makanan yang beraroma dan memuaskan, dengan ‘mie’ yang berarti ‘mie’ dalam bahasa Indonesia.

Hidangan Tanda Tangan: Mie Iblis

Inti dari reputasi Mie Gacoan adalah item menu yang berani, Mie Iblis, yang diterjemahkan menjadi “mie iblis.” Dikenal karena kepedasannya yang ekstrem, Mie Iblis telah menjadi identik dengan tantangan kuliner yang menguji batas-batas pecinta rempah-rempah di mana-mana. Hidangan ini disajikan dalam kaldu warna merah yang mengaburkan campuran berbagai rempah yang dimaksudkan untuk menyalakan sensasi berapi-api pada langit-langit.

Bahan yang mengemas pukulan

Profil rasa yang berbeda dari Mie Iblis dicapai melalui perpaduan bahan yang harmonis. Mie biasanya dibuat dari gandum, memberikan tekstur kenyal yang dengan sempurna melengkapi saus yang sarat rempah-rempah. Kaldu ini memiliki campuran yang kaya dari pasta cabai, bawang putih, dan bawang merah, menciptakan tendangan berapi -api yang mengangkat rasa keseluruhan hidangan.

Bahan -bahan utama meliputi:

  • Cabai Mata Burung: Di sinilah panas dimulai, memberikan rasa yang kompleks bersama dengan kepedasannya.
  • Kecap: Menawarkan catatan gurih yang menyeimbangkan elemen yang berapi -api.
  • Saus Oyster: Menambahkan kedalaman dan umami ke piring.
  • Mie Vermicelli: Mie tipis ini menyerap kaldu pedas, meningkatkan pengalaman dengan setiap gigitan.

Memilih level rempah -rempah Anda

Salah satu aspek paling menarik dari Mie Gacoan adalah opsi untuk memilih level rempah -rempah yang Anda inginkan. Bagi mereka yang cukup berani, mereka dapat memilih tingkat ‘Iblis’ yang mencakup cabai ekstra dan penambah rasa. Tingkat rempah -rempah berkisar dari ‘ringan’ untuk pendatang baru hingga ‘ekstrem’ untuk penyembah rempah -rempah berpengalaman. Pilihan ini memungkinkan pengunjung untuk menyesuaikan pengalaman mereka, memastikan bahwa setiap orang dapat menikmati hidangan yang menawan ini, terlepas dari toleransi panas mereka.

Pendamping dan topping

Menyelesaikan pengalaman Mie Iblis adalah topping yang menggiurkan. Pengunjung dapat mempersonalisasikan mangkuk mereka dengan berbagai add-on seperti:

  • Tahu goreng: Menawarkan protein dan tekstur, menyeimbangkan panas dengan sempurna.
  • Tusuk sate ayam: Panggang dengan sempurna, menambahkan elemen berasap dan gurih.
  • Telur rebus: Creaminess yang kontras dengan esensi berapi -api hidangan.
  • Herbal segar: Bawang hijau cincang atau ketumbar memberikan kontras yang menyegarkan.

Hiasan untuk rasa tambahan

Mie Iblis sering dihiasi dengan serpihan cabai ekstra atau bawang goreng, menambahkan lapisan krisis dan rasa. Hiasan ini tidak hanya dekoratif; Mereka meningkatkan kekayaan hidangan sambil berkontribusi pada pengalaman keseluruhan. Peras jeruk nipis kadang -kadang ditawarkan, membawa kecerahan zesty yang memotong panas dan kesegaran pada mie.

Pilihan vegetarian dan vegan

Mie Gacoan juga melayani preferensi makanan yang berbeda. Variasi vegetarian dan vegan dari Mie Iblis tersedia, memastikan bahwa tidak ada yang kehilangan petualangan pedas ini. Dengan mengganti daging dengan protein nabati dan kaldu sayuran, vegan dapat menikmati pengalaman yang sama memuaskan tanpa mengorbankan rasa.

Signifikansi budaya

Masakan Indonesia diakui karena rasa yang semarak, kesegaran, dan penggunaan rempah -rempah yang berani. Mie Iblis mewujudkan tradisi kuliner ini, menggabungkan bahan -bahan lokal dengan pengalaman bersantap kontemporer. Hidangan ini beresonansi dengan etos Indonesia berbagi makanan, menjadikannya pilihan populer bagi keluarga dan kelompok. Ini merangsang tidak hanya indera tetapi juga mendorong kebersamaan melalui pengalaman bersantap komunal.

Pengalaman makan di Mie Gacoan

Suasana Mie Gacoan meningkatkan petualangan kuliner. Dengan suasana modern yang memberi penghormatan kepada budaya yang kaya di Indonesia, pelanggan disuguhi lingkungan yang mengundang. Interaksi dekorasi pedesaan, warna -warna cerah, dan seni tradisional membentuk latar belakang yang melengkapi sifat makanan yang semarak.

Buzz Media Sosial

Media sosial telah memainkan peran penting dalam mempromosikan Mie Iblis di antara generasi muda. Pengunjung senang berbagi pengalaman mereka secara online, sering memposting gambar tantangan pedas mereka. Visual yang menarik dari kaldu yang berapi-api dan mie yang dihiasi, dipasangkan dengan keterangan kreatif, membantu menyebarkan berita tentang Mie Gacoan. Tagar seperti #Mieiblischallenge telah membuat gelombang pada platform seperti Instagram dan Tiktok, yang mengarah ke tren viral dan mendorong pecinta makanan untuk berani panas.

Lokasi dan aksesibilitas

Mie Gacoan telah memperluas kehadirannya di luar Yogyakarta, membuka beberapa cabang di seluruh Indonesia. Aksesibilitas lokasi -lokasi ini memungkinkan lebih banyak orang untuk menikmati pengalaman luar biasa mencicipi Mie Iblis. Berjalan ke cabang mana pun, Anda dapat mengharapkan kerumunan yang antusias, menjadikannya tempat yang tepat untuk penduduk setempat dan pengunjung yang ingin merasakan sensasi mie pedas Indonesia.

Tanggapan komunitas

Semakin populernya Mie Iblis telah memicu percakapan dalam komunitas kuliner tentang rempah -rempah dan budaya makanan di Indonesia. Banyak penggemar kuliner terinspirasi untuk bereksperimen dengan kepedasan dalam masakan mereka, yang mengarah ke hidangan inovatif yang mendorong batas dalam masakan tradisional dan modern Indonesia. Mie Gacoan berdiri bukan hanya sebagai restoran tetapi sebagai gerakan kuliner, memelopori arah mie pedas di Indonesia.

Pasangan makanan

Bagi mereka yang menemukan panasnya agak berlebihan, memasangkan minuman Mie Iblis dapat memberikan kelegaan. Minuman tradisional Indonesia seperti ES Cendol (minuman kelapa es manis) atau bandrek (minuman jahe hangat) dapat dengan luar biasa melengkapi mie pedas. Minuman ini menyeimbangkan panas sambil merayakan rasa Indonesia asli.

Kesimpulan dari kebahagiaan kuliner

Melalui hidangan khas Mie Iblis dan penawaran unik, Mie Gacoan memberikan petualangan kuliner yang mendebarkan yang berbicara tentang jantung budaya Indonesia. Rasa berlapis, tingkat rempah -rempah yang dapat disesuaikan, dan pengalaman bersantap kontemporer menciptakan kesan abadi. Bagi mereka yang ingin menikmati perjalanan pedas, Mie Iblis bukan hanya hidangan; Ini adalah petualangan yang penuh dengan budaya, rasa, dan momen bersama di meja makan.

Mie Gacoan: The Ramen menantang yang dibicarakan semua orang

Mie Gacoan: The Ramen menantang yang dibicarakan semua orang

Bangkitnya Mie Gacoan

Mie Gacoan adalah fenomena kuliner yang telah memicu tantangan ramen yang unik, memikat penggemar makanan dan pengguna media sosial. Berbasis di Indonesia, toko mie terkenal ini dengan cepat mendapatkan popularitas, dengan cabang -cabang bermunculan di seluruh kota -kota besar. Komitmen mereka terhadap kualitas, rasa, dan pengalaman bersantap interaktif membedakan mereka di pasar yang kompetitif.

Konsep Mie Gacoan

Mie Gacoan bertujuan untuk merevolusi cara Ramen dinikmati. Merek mendorong para tamu untuk terlibat tidak hanya dengan makanan tetapi dengan satu sama lain. Ramen khasnya dilengkapi dengan tantangan pedas yang menguji toleransi rempah -rempah seseorang. Menu ini menampilkan segudang hidangan ramen, masing -masing diresapi dengan rasa tradisional Indonesia yang memberi penghormatan kepada akar kuliner di wilayah tersebut.

Tantangan ramen pedas yang unik

Di jantung daya tarik Mie Gacoan adalah tantangan ramen pedas. Pengunjung diundang untuk memilih dari berbagai tingkat kepedasan. Setiap level, diwakili oleh warna yang berbeda, meningkatkan panas – dari sedikit pedas ke hampir tak tertahankan. Tantangannya telah menjadi ritus peralihan bagi pecinta makanan yang ingin menguji batas mereka.

  1. Level rempah -rempah: Mie Gacoan menawarkan serangkaian tingkat rempah -rempah untuk memenuhi preferensi yang berbeda. Level yang lebih rendah dirancang untuk mereka yang menikmati sedikit panas, sementara tingkatan yang lebih tinggi menguji batas -batas ketahanan. ‘Tantangan Mie’ memungkinkan peserta untuk mengukur toleransi panas mereka, mendorong pengunjung untuk berbagi pengalaman mereka secara online.

  2. Perhatian internasional: Tantangan Ramen Mie Gacoan telah menarik pengaruh makanan dan vloggers, yang mengarah ke momen virus di platform seperti Instagram dan Tiktok. Daya tarik visual mangkuk ramen berwarna cerah di atasnya dengan sayuran hijau dan merah menarik perhatian pemirsa di seluruh dunia.

Rasa dan bahan

Salah satu fitur menonjol Mie Gacoan adalah kombinasi rasa yang unik. Setiap hidangan ramen mencerminkan warisan gastronomi yang kaya di Indonesia. Elemen fusi koki memadukan rempah-rempah tradisional Indonesia seperti sambal dan kerupuk dengan mie ramen klasik, membuat pengalaman bersantap yang unik.

  • Variasi mie: Pendirian bangga menggunakan mie berkualitas tinggi yang dibuat segar setiap hari, menawarkan tekstur kenyal yang dengan sempurna melengkapi kaldu yang lezat. Mie datang dalam ketebalan yang berbeda, dari untaian tipis untuk kaldu yang lebih ringan hingga varietas yang lebih tebal yang dapat menahan rasa yang lebih kuat.

  • Kaldu dan topping: Pilihan kaldu di Mie Gacoan bervariasi. Kaldu tulang daging sapi tanda tangan mendidih selama berjam -jam, menciptakan kedalaman dan kekayaan yang sulit ditiru. Pilihan vegetarian sama-sama dibuat dengan baik, memastikan setiap pelindung dapat menemukan hidangan yang sesuai dengan kebutuhan makanan mereka. Topping termasuk berbagai protein, dari perut babi yang lembut hingga ayam pedas, di samping banyak sayuran segar.

Komunitas dan keterlibatan

Mie Gacoan mendorong rasa kebersamaan di antara para penggemar ramen dengan mendorong pengunjung untuk berbagi pengalaman tantangan mereka. Tren tagar #MieGacoanchallenge sering, menawarkan platform bagi para peserta untuk menunjukkan kemenangan dan perjuangan mereka. Keterlibatan komunitas ini mempromosikan suasana yang semarak, di mana pengunjung dapat terhubung dan saling menghibur.

  • Acara dan Kompetisi: Mie Gacoan sering menjadi tuan rumah kontes malam, di mana penantang dapat bersaing untuk mendapatkan judul -judul seperti “Spice King” dan memenangkan makanan gratis atau barang dagangan eksklusif. Peristiwa ini menghasilkan kegembiraan dan menarik banyak orang, menjadikannya titik pertemuan sosial bagi pecinta makanan.

Aksesibilitas dan Ekspansi

Mengakui permintaan yang meningkat, Mie Gacoan telah memperluas jangkauannya di seluruh Indonesia. Setiap lokasi baru mematuhi komitmen asli terhadap kualitas dan pengalaman. Merek ini juga tertarik untuk menggabungkan bahan -bahan lokal, memastikan bahwa setiap cabang beresonansi dengan lingkungannya sambil mempertahankan gaya tanda tangan yang disukai pelanggan.

  • Peluang waralaba: Mie Gacoan telah membuka pintunya untuk waralaba, memungkinkan roh kewirausahaan untuk mengoperasikan cabang mereka dengan reputasi merek yang mapan. Langkah ini mencerminkan rencana pertumbuhan strategisnya, memastikan kelanjutan dari tantangan ramen populernya di berbagai wilayah.

Media Sosial dan Strategi Pemasaran

Mie Gacoan secara efektif menggunakan platform media sosial untuk terlibat dengan pelanggan yang ada dan potensial. Melalui visual yang semarak, posting interaktif, dan tantangan yang sedang tren, merek menciptakan kehadiran online yang mengundang. Konten reguler yang menampilkan sorotan tantangan, kesaksian pelanggan, dan sekilas di belakang layar menangkap esensi dari pengalaman bersantap.

  • Kolaborasi Influencer: Dengan bermitra dengan influencer makanan, Mie Gacoan memperluas jangkauan penontonnya. Kolaborasi menghasilkan konten otentik yang menampilkan kegembiraan dan tantangan dari pengalaman ramen, lebih jauh memikat pengunjung untuk bergabung dengan gerakan ini.

Praktik kesehatan dan keberlanjutan

Selain keunggulan kuliner, Mie Gacoan menekankan praktik keberlanjutan dan sadar kesehatan. Bahan -bahan sumber merek secara bertanggung jawab, memprioritaskan produk lokal untuk mengurangi jejak karbonnya. Mereka juga menawarkan pilihan yang sehat, termasuk hidangan rendah kalori dan vegetarian, memungkinkan pengunjung untuk menikmati ramen tanpa mengurangi nilai nutrisi.

  • Keterlibatan masyarakat: Mie Gacoan terlibat dalam program komunitas lokal, termasuk drive makanan dan lokakarya nutrisi, memperkuat perannya lebih dari sekedar restoran tetapi sebagai pilar komunitas.

Pengalaman: Makan di Mie Gacoan

Makan di Mie Gacoan lebih dari sekadar makan; Ini tentang pengalaman interaktif. Suasana hidup, dipenuhi dengan tawa dan percakapan yang berpusat di sekitar tantangan makanan. Anggota staf tidak hanya ramah tetapi juga antusias tentang membimbing pengunjung melalui proses seleksi ramen, memastikan bahwa semua orang menemukan kecocokan ideal mereka dalam rasa.

  • Suasana dan Layanan: Interior dirancang untuk meningkatkan pengalaman bersantap, dengan tempat duduk komunal yang mendorong berbagi dan bersosialisasi. Getaran energik melengkapi semangat berani dari tantangan ramen, membuat pengunjung menginginkan lebih.

Umpan Balik dan Ulasan Pelanggan

Ulasan pelanggan telah memuji Mie Gacoan karena hidangannya yang dibuat dengan baik dan suasana yang menarik. Banyak yang menggambarkannya sebagai tujuan yang harus dicoba bagi penggemar makanan. Tantangan Ramen telah mengumpulkan umpan balik yang bersinar, dengan banyak pelanggan menceritakan pengalaman mereka dan saling bersorak.

  • Dari mulut ke mulut: Penyebaran organik ulasan positif pada platform seperti Google dan Yelp secara signifikan meningkatkan reputasi Mie Gacoan. Pengunjung yang bahagia berbagi kemenangan mereka, mendesak orang lain untuk mengambil bagian dalam tantangan ramen, menciptakan siklus kegembiraan dan antisipasi.

Pikiran terakhir

Mie Gacoan mewakili gelombang baru pengalaman kuliner yang memadukan kualitas, komunitas, dan sentuhan petualangan. Setiap mangkuk ramen yang disajikan bukan hanya makanan; Ini adalah undangan untuk menciptakan kenangan, batas tantangan, dan merayakan budaya kuliner Indonesia yang semarak. Dengan pertumbuhan yang luar biasa dan tantangan inovatif, Mie Gacoan terus membuka jalan bagi masa depan makan ramen.

Mie Gacoan: Perjalanan Melalui Rasa

Mie Gacoan: Perjalanan Melalui Rasa

Asal mula Mie Gacoan

Mie Gacoan adalah hidangan Indonesia tercinta yang telah mengambil dunia kuliner dengan badai, terutama di tempat makanan jalanan yang semarak di negara itu. Berasal dari Java, hidangan mie ini adalah bukti keragaman gastronomi yang kaya di Indonesia. Nama “Mie Gacoan” berasal dari “Mie,” yang berarti mie, dan “Gacoan,” sebuah istilah lokal yang menyarankan hewan peliharaan atau teman, yang mencerminkan daya tarik universal hidangan dan kemampuannya untuk menyatukan orang -orang selama makanan bersama.

Mie Gacoan biasanya terdiri dari mie gandum, yang dikenal karena tekstur kenyal mereka, disajikan dengan berbagai topping dan saus kaya. Hidangan ini melambangkan perpaduan harmonis rasa manis, pedas, dan gurih, ciri khas masakan Indonesia.

Mie: Tekstur dan Jenis

Di jantung Mie Gacoan adalah mie itu sendiri. Ini adalah mie tebal dan datar, sering analog dengan chow chow mein. Teksturnya sangat penting, menyediakan alas yang menampung berbagai topping dan saus. Gluten dalam tepung gandum memberi mie kenyal yang menyenangkan, penting untuk pengalaman makan yang memuaskan.

Sementara hidangan secara tradisional menggunakan mie telur, ada variasi yang menggabungkan mie beras atau bahkan mie instan untuk waktu persiapan yang lebih cepat. Setiap jenis menawarkan sentuhan unik, melayani preferensi kuliner yang berbeda.

Saus Tanda Tangan: Profil Rasa

Apa yang membedakan Mie Gacoan adalah jangkauan saus yang meningkatkan kerangka mie dasar. Saus yang paling khas adalah kombinasi kecap, bawang putih, dan sambal, pasta cabai yang menambah panas dan kedalaman. Campuran ini sangat penting karena menangkap esensi dari profil rasa Indonesia.

Saus kedelai manis

Ketjap Manis, kecap manis yang tebal, sering kali diusir di atas mie, melengkapi kepedasan sambal. Bumbu yang gelap dan sirup ini sudah mendarah daging dalam masakan Indonesia dan memberikan keseimbangan antara gurih dan manis.

Saus cabai pedas

Bagi mereka yang mendambakan panas, saus cabai adalah suatu keharusan. Ini berisi cabai segar dan kering, memberikan rasa kuat yang dapat disesuaikan agar sesuai dengan selera individu. Level panas bervariasi, memungkinkan pengunjung untuk menyesuaikan hidangan mereka sesuai dengan toleransi rempah -rempah mereka.

The Topping: Cornucopia of Choices

Mie Gacoan bukan hanya tentang mie dan saus; Ini adalah petualangan di topping. Variasi yang tersedia sangat luas, memungkinkan untuk kustomisasi tanpa akhir.

Ayam

Ayam parut adalah topping umum, sering diasinkan dan dipanggang dengan sempurna. Ini menambah dimensi lezat, yang selaras dengan indah dengan mie dan saus. Untuk pilihan vegetarian, tahu yang diasinkan dapat menawarkan tekstur dan profil rasa yang serupa.

Sayuran

Menyertai protein ini adalah serangkaian sayuran berwarna -warni. Tumis bok choy, kubis, dan tauge menambah kesegaran dan kerenyahan. Elemen -elemen ini menyumbangkan nutrisi vital dan meningkatkan daya tarik visual hidangan, membuat Mie Gacoan bukan hanya makanan beraroma tetapi juga yang berwarna -warni.

Telur

Telur goreng atau rebus sering disertakan, memberikan kekayaan tambahan. Yolk berair berbaur dengan mie, menciptakan tekstur krim yang meningkatkan pengalaman keseluruhan.

Bakso

Topping populer lainnya adalah Bakso, bakso daging sapi Indonesia yang empuk dan penuh dengan rasa. Mereka adalah bahan pokok di banyak hidangan Indonesia dan mengangkat Mie Gacoan dengan karakter yang hangat.

Budaya jalanan dan kenikmatan

Mie Gacoan lebih dari sekadar hidangan; Ini pengalaman sosial. Vendor sering menyajikan hidangan di pasar jalanan yang ramai, mengubahnya menjadi acara komunal. Kelompok teman berkumpul di kios makanan, menikmati suasana yang semarak di samping mangkuk mie mereka, berbagi cerita dan tawa.

Makan Mie Gacoan adalah ritual – sering disertai dengan minuman es yang menyegarkan, penduduk setempat menikmati rasa sambil merendam suasana jalan -jalan yang sibuk. Lingkungan kasual namun hidup meningkatkan kenikmatan hidangan, mengubah setiap makan menjadi perayaan.

Pertimbangan kesehatan

Meskipun Mie Gacoan secara tradisional sarat dengan karbohidrat dari mie dan protein dari topping, pengunjung yang sadar kesehatan dapat menyesuaikan pesanan mereka. Memilih mie gandum utuh atau meningkatkan kandungan sayuran dapat menyeimbangkan hidangan secara signifikan. Selain itu, mengendalikan jumlah kecap manis dan pasta cabai memungkinkan untuk versi yang lebih sehat tanpa mengorbankan rasa.

Jangkauan dan popularitas global

Dalam beberapa tahun terakhir, Mie Gacoan telah mendapatkan perhatian di luar Indonesia, berjalan ke pasar makanan global. Komunitas Indonesia di seluruh dunia merayakan hidangan ini dalam berbagai bentuk, baik sebagai bahan pokok makanan jalanan atau di restoran kelas atas tempat para koki bereksperimen dengan bahan -bahan lokal.

Blog makanan internasional dan platform media sosial menampilkan foto -foto Mie Gacoan yang menarik, menampilkan citarasa yang kuat, menjadikannya pilihan yang menarik bagi penggemar makanan. Saat batas kuliner larut, hidangan lezat ini terus memikat selera di seluruh dunia.

Memasak Mie Gacoan di rumah

Bagi mereka yang terinspirasi untuk menciptakan kembali Mie Gacoan di rumah, prosesnya luar biasa untuk koki rumahan yang ingin menjelajahi masakan Indonesia. Bahan -bahan penting termasuk mie gandum, kecap, sambal, dan pilihan protein dan sayuran.

  1. Persiapan mie: Mulailah dengan memasak mie sesuai dengan instruksi paket. Bilas mereka di bawah air dingin untuk menghentikan proses memasak dan sisihkan.

  2. Membuat saus: Dalam wajan, kombinasikan kecap manis, bawang putih, dan sambal untuk membuat tingkat rempah -rempah yang diinginkan.

  3. Memasak topping: Tumis protein dan sayuran pilihan Anda dalam wajan terpisah, membumbui mereka untuk mengeluarkan citarasa alami mereka.

  4. Merakit piring: Aduk mie yang dimasak dengan saus dan tambahkan topping. Pastikan semuanya dicampur dengan baik dan dipanaskan.

  5. Melayani: Piring piring, tambahkan telur goreng di atasnya, dan hiasi dengan cabai atau daun bawang untuk sentuhan otentik.

Pengalaman di luar selera

Mie Gacoan pada akhirnya merupakan perayaan budaya dan komunitas Indonesia. Ini merangkum semangat kebersamaan, dengan citarasa kompleksnya beresonansi dalam -dalam di jantung dan perut. Hidangan ini mengundang rasa ingin tahu dan eksplorasi, baik di warung makanan jalanan yang ramai atau di dapur yang tenang di rumah, menempa koneksi melalui pengalaman kuliner bersama. Perjalanannya melalui rasa melampaui nutrisi belaka, menciptakan kenangan abadi dan pertemuan yang menggembirakan.

Ketika pengakuan untuk Mie Gacoan terus tumbuh, demikian juga signifikansinya dalam menunjukkan kedalaman masakan Indonesia. Itu berdiri sebagai pengingat lezat tentang kegembiraan berbagi makanan, kekayaan budaya, dan kesenangan universal yang berasal dari menjelajahi tradisi kuliner dunia.

Mie Gacoan Level 8: The Ultimate Taste Challenge

Mie Gacoan Level 8: The Ultimate Taste Challenge

Memahami Mie Gacoan

Mie Gacoan adalah tujuan kuliner yang eksotis, terkenal dengan beragam hidangan mie Indonesia. Sebuah tempat yang terus berkembang, Mie Gacoan menawarkan pengalaman bersantap yang tak terlupakan di mana penggemar rempah-rempah dapat memulai perjalanan sensorik. Di antara berbagai tingkat rempah -rempah yang tersedia, Level 8 merupakan tantangan utama bagi pecinta cabai berpengalaman. Hidangan ini bukan untuk orang yang berhati samar, menawarkan rasa dan panas yang memikat penjelajah makanan.

Asal usul Mie Gacoan dan tantangan pedasnya

Mie Gacoan melacak asal -usulnya kembali ke budaya makanan jalanan Indonesia yang semarak, di mana mie adalah makanan pokok. Pendirian ini terkenal karena merangkul keaslian, menyajikan hidangan yang kembali ke akar kuliner Indonesia. Seiring waktu, Mie Gacoan telah menambahkan sentuhan unik dengan menggabungkan varian yang semakin pedas dari penawaran mie. Peringkat “Level 8” adalah puncak dari evolusi pedas ini.

Mekanisme Rempah -rempah di Level 8

Tantangan level 8 tidak semata -mata dalam panasnya tetapi dalam keseimbangan rasanya yang rumit. Mie Gacoan menggunakan campuran berbagai jenis cabai, masing -masing menyumbangkan profil yang khas. Bahan yang paling umum meliputi:

  • Cabai Mata Burung: Cabai kecil namun kuat, yang dikenal karena nada panas dan buahnya yang berapi -api.
  • Cabe rawit: Menambahkan rasa yang tajam dan zesty melengkapi panasnya.
  • Sambal Oelek: Pasta cabai tradisional Indonesia, meningkatkan kedalaman rasa.
  • Lada espelette: Menawarkan nada buah ringan untuk menyeimbangkan panas.

Perpaduan yang cermat ini menghasilkan pengalaman pedas namun beraroma yang membuat pengunjung kembali untuk mendapatkan lebih banyak.

Pengalaman rasa level 8 mie

Saat mengonsumsi level 8 Mie Gacoan, pengunjung menghadapi medley selera, karakteristik, dan lapisan yang unik. Pengalamannya bukan hanya tentang panas; Ini memungkinkan pengunjung untuk mengeksplorasi:

  • Umami: Kombinasi bahan menghasilkan kedalaman yang kaya dan gurih yang melekat dalam masakan tradisional Indonesia.
  • Rasa manis: Rasa manis yang halus muncul dari saus, menyeimbangkan ketajaman cabai.
  • Aromatik: Herbal segar seperti ketumbar dan bawang hijau meningkatkan aroma, mengangkat pengalaman keseluruhan.

Tujuan akhir level 8 adalah untuk tidak membanjiri langit -langit, melainkan menciptakan harmoni sensasi, menjaganya tetap beraroma dan menyenangkan.

Aspek Nutrisi Mie Gacoan

Saat memanjakan diri dalam tantangan berapi -api level 8, penting untuk mempertimbangkan elemen nutrisi. Porsi mie yang khas mungkin berisi:

  • Karbohidrat: Mie memberikan sumber energi yang baik, penting untuk vitalitas.
  • Protein: Sering disajikan dengan protein tambahan seperti ayam, tahu, atau udang, berkontribusi terhadap perbaikan dan pertumbuhan otot.
  • Vitamin dan mineral: Bahan -bahan seperti sayuran menambah nutrisi penting, mendukung kesehatan secara keseluruhan.

Ketika dikonsumsi secukupnya, Level 8 dapat menjadi bagian dari diet seimbang, mempromosikan kegembiraan dan eksplorasi kuliner.

Reaksi dan Ulasan Pelanggan

Level 8 Mie Gacoan telah menarik banyak ulasan dari penggemar rempah -rempah dan pemakan santai. Pelanggan merinci pengalaman mereka melalui platform seperti Yelp dan Google Review, yang menyoroti:

  • Petualangan pedas: Banyak pengunjung yang menggambarkan sensasi yang mirip dengan perjalanan rollercoaster yang menggembirakan, ditandai dengan gelombang panas awal diikuti dengan kesibukan euforia.
  • Rasa vs panas: Peserta reguler menghargai bahwa terlepas dari kepedasannya, rasanya tetap menonjol, membuatnya harus dicoba.
  • Persahabatan dan berbagi: Banyak pelanggan merekomendasikan untuk berkunjung dalam kelompok, bersatu dalam tantangan mencicipi Level 8 bersama -sama, menciptakan pengalaman ikatan yang didukung oleh sensasi panas.

Kiat memasak untuk menikmati level 8

Bagi mereka yang cukup berani untuk mencoba menciptakan esensi level 8 Mie Gacoan di rumah, pertimbangkan tips ini:

  1. Mulailah lambat: Secara bertahap meningkatkan jumlah cabai yang digunakan untuk menemukan toleransi panas Anda.
  2. Pasangkan dengan agen pendingin: Miliki yogurt, salad mentimun, atau santan di samping. Ini dapat membantu menyeimbangkan panas saat dikonsumsi.
  3. Bahan segar: Gunakan rempah dan sayuran segar untuk mengangkat hidangan dan meningkatkan rasa.
  4. Percobaan: Kombinasi bahan yang berbeda, termasuk protein dan sayuran, dapat mempersonalisasikan pengalaman rempah -rempah.

Kesimpulan: Warisan Mie Gacoan Level 8

Level 8 Mie Gacoan bukan hanya ukuran panas; Ini adalah fenomena kuliner yang menantang batas rasa dan tekstur. Ini mewujudkan perayaan budaya Indonesia sambil melayani audiens kontemporer yang mencari pengalaman selera yang menggembirakan. Pecinta makanan dan penggemar rempah -rempah dapat benar -benar menghargai keahlian yang digunakan untuk menciptakan tantangan selera terbaik ini. Apakah makan atau mencoba variasi buatan sendiri, esensi level 8 Mie Gacoan terus beresonansi, meninggalkan tanda yang tak terhapuskan pada lanskap kuliner.

Mie Gacoan: A yang harus dicoba untuk pecinta mie

Mie Gacoan: A yang harus dicoba untuk pecinta mie

Mie Gacoan dengan cepat menjadi bahan pokok dalam adegan kuliner Indonesia, terutama bagi pecinta mie yang mencari rasa otentik dan pengalaman bersantap yang tak terlupakan. Hidangan mie populer ini ditandai dengan kualitas teksturnya yang unik dan profil rasa yang menarik bagi penduduk setempat dan wisatawan. Mari kita mempelajari lebih dalam tentang apa itu Mie Gacoan, berbagai elemen yang membuatnya luar biasa, dan mengapa itu harus ada di setiap radar pecinta makanan.

Asal usul Mie Gacoan

Mie Gacoan berasal dari kota Yogyakarta, yang dikenal karena warisan budaya yang kaya dan adegan makanan jalanan yang semarak. Istilah “Gacoan” diterjemahkan menjadi “prajurit kecil,” anggukan main -main untuk cara mie sering dilayani, menyerupai pasukan uniform uniform yang siap dilahap. Didirikan pada akhir 2016, Mie Gacoan dengan cepat mendapatkan popularitas karena rasa yang kuat dan metode persiapan yang inovatif, menjadikannya fenomena di seluruh Indonesia.

Bahan utama

Keberhasilan Mie Gacoan sangat bergantung pada kualitas bahannya. Ini biasanya fitur Mie Telur (Mi Telur)yang berbeda dari mie gandum tradisional karena rasa mereka yang kaya dan tekstur kenyal. Saus tanda tangan adalah campuran bahan, termasuk:

  1. Kecap: Memberikan kedalaman umami dan rasa manis gurih.
  2. Cabai: Untuk tendangan pedas, biasanya disesuaikan dengan preferensi individu.
  3. Bawang putih: Untuk kekayaan aromatik yang mengangkat selera keseluruhan.
  4. Bawang hijau: Menambahkan kesegaran dan rasa bawang ringan.
  5. Ayam atau daging sapi: Pilihan protein umum yang meningkatkan kekayaan hidangan.
  6. Sayuran: Irisan bok choy atau kol sering kali menghiasi mangkuk, memberikan kontras yang renyah.

Kombinasi bahan -bahan ini menghasilkan hidangan seimbang yang tidak terlalu berat tetapi memuaskan nafsu makan.

Metode persiapan yang unik

Salah satu fitur menonjol dari Mie Gacoan adalah metode memasaknya yang unik, yang membedakannya dari segudang hidangan mie yang tersedia. Mie biasanya direbus hingga sempurna sebelum digoreng dengan saus dan bahan-bahan lainnya, memungkinkan semua rasa untuk berbaur bersama. Di banyak outlet Mie Gacoan, persiapan ini sering dilakukan di depan pelanggan, memberikan pengalaman bersantap yang menarik.

Varian Mie Gacoan

Mie Gacoan serbaguna dan dapat memenuhi berbagai preferensi makanan. Beberapa varian penting termasuk:

  • Mie Gacoan Asli: Persiapan klasik dengan saus gurih dan atasnya dengan bawang hijau cincang dan sayuran lainnya.
  • Mie Gacoan Spicy: Bagi mereka yang lebih suka panas tambahan, versi ini menggabungkan saus cabai yang lebih kuat, sempurna untuk penggemar rempah -rempah.
  • Mie Gacoan dengan topping: Pilihan untuk topping tambahan seperti tahu goreng, telur rebus, atau bakso dapat disesuaikan berdasarkan preferensi pribadi.

Mengapa ini menjadi favorit di antara pecinta mie

  1. Ledakan rasa: Mie Gacoan memberikan medley rasa – peramal, pedas, dan sedikit rasa manis, menjadikan setiap gigitan pengalaman yang menyenangkan.
  2. Variasi: Kemampuan beradaptasi memastikan bahwa ada sesuatu untuk semua orang, baik itu anak yang lebih suka rasa yang lebih ringan atau orang dewasa yang sangat membutuhkan sesuatu yang lebih spicier.
  3. Keterjangkauan: Dengan harga yang berkisar dari ramah anggaran hingga menengah, Mie Gacoan membuat pilihan yang sangat baik untuk makan malam dan eksplorasi makanan santai.
  4. Pengalaman budaya: Makan Mie Gacoan bukan semata -mata tentang makanan; Ini juga tentang suasana di sekitarnya. Banyak restoran menawarkan getaran yang energik, mencerminkan budaya makanan Indonesia yang semarak.

Lokasi untuk mencoba Mie Gacoan

Sementara Mie Gacoan awalnya berasal dari Yogyakarta, ketenarannya telah menyebabkan banyak outlet yang dibuka di berbagai kota di seluruh Indonesia. Beberapa lokasi yang paling terkenal meliputi:

  • Jakarta: Beberapa outlet di distrik yang sibuk melayani penduduk setempat dan ekspatriat yang mencari masakan asli Indonesia.
  • Bandung: Dikenal karena adegan makanan eklektiknya, tempat -tempat Mie Gacoan di sini ramai dengan penggemar mie yang bersemangat.
  • Surabaya: Rumah bagi beberapa cabang waralaba paling populer, menarik banyak orang setiap hari.

Pengalaman Mie: Ritual Makan

Makan di Mie Gacoan sering melibatkan pengalaman komunal yang unik. Hidangan ini biasanya disajikan dalam porsi murah hati yang dimaksudkan untuk berbagi, mendorong pengunjung untuk dinikmati bersama sambil membangun koneksi di atas makanan. Memasangkan mie gacoan dengan minuman yang menyegarkan seperti es teh manis (teh es manis) atau kerupuk (kerupuk) melengkapi makanan dengan sempurna.

Tips untuk pemula

Untuk sepenuhnya menghargai Mie Gacoan, pertimbangkan tips berikut:

  • Kustomisasi: Jangan ragu untuk meminta server Anda untuk tingkat rempah -rempah atau topping tambahan yang sesuai dengan selera Anda.
  • Pasangan: Lengkapi hidangan mie Anda dengan sisi ayam goreng atau tahu untuk meningkatkan protein tambahan.
  • Nikmati pengalamannya: Luangkan waktu Anda untuk menikmati hidangan, karena itu adalah bagian dari pengalaman budaya yang lebih besar yang mewujudkan keramahtamahan Indonesia.

Mie Gacoan dalam Budaya Populer

Mie Gacoan juga telah membuat penampilan di berbagai platform media sosial, karena pecinta kuliner berbagi petualangan kuliner mereka secara online. Akun Instagram sering menyoroti warna dan tekstur yang semarak hidangan, menjadikannya pesta visual yang semakin meningkatkan daya tariknya. Influencer sering mengunjungi outlet Mie Gacoan, berbagi ulasan pribadi dan mendorong pengikut untuk mencoba hidangan mie yang menyenangkan ini.

Kesimpulan

Mie Gacoan menonjol tidak hanya karena citarasa dan teksturnya tetapi juga sebagai simbol budaya makanan Indonesia. Ini merangkum esensi santapan komunal, menarik pecinta mie dari semua lapisan masyarakat. Popularitasnya yang semakin besar mencontohkan pentingnya merangkul tradisi kuliner sambil menarik selera modern. Apakah Anda berada di Indonesia atau hanya ingin menjelajahi rasa baru di rumah, pastikan untuk menempatkan Mie Gacoan ke dalam daftar Anda.

Level Mie Gacoan 0: Petualangan Kuliner

Level Mie Gacoan 0: Petualangan Kuliner

Memahami Mie Gacoan

Mie Gacoan adalah permata kuliner yang berkembang di Indonesia, terutama diakui karena mangkuk mie yang lezat yang beresonansi dengan rasa dan keaslian. Pendirian menargetkan penggemar makanan dengan berbagai varian MIE, atau mie, mempersiapkannya dengan saus spesifik, topping, dan campuran rempah -rempah yang mencerminkan selera regional. Istilah “Level 0” berarti titik masuk pemula dalam perjalanan gastronomi ini, mendorong pecinta makanan untuk menjelajahi dunia masakan Indonesia yang menarik melalui hidangan ini.

Inti dari Mie Gacoan

Di Mie Gacoan, bintang pertunjukan itu tidak diragukan lagi adalah Mie, atau Mie, yang menunjukkan kesunyian yang menyenangkan – ciri khas mie berkualitas. Secara tradisional terbuat dari tepung gandum, Mie Gacoan memanfaatkan kekuatan bahan -bahan sederhana, dicampur dengan cermat dengan air dan garam untuk membuat adonan yang digulung, dipotong menjadi untaian, dan dimasak dengan sempurna. Hasilnya adalah semangkuk nostalgia yang semarak, membuat setiap gigitan menjadi pengalaman itu sendiri.

Profil rasa

Profil rasa Mie Gacoan berlapis -lapis, menggabungkan catatan manis, asam, pedas, dan umami. Proses dimulai dengan saus dasar aromatik, yang biasanya terbuat dari bahan -bahan seperti bawang putih, bawang merah, cabai, dan kecap. Campuran ini dicampur dan dipanaskan untuk melepaskan rasa yang dalam dan kuat. Dari sana, Mie Gacoan mendorong pengunjung untuk mempersonalisasikan hidangan mereka dengan berbagai topping, termasuk:

  • Sayuran: Hijau segar seperti bok choy atau tauge membawa renyah dan warna.
  • Protein: Pilihan ayam, daging sapi, makanan laut, atau tahu dapat meningkatkan hati hidangan.
  • Bawang merah goreng: Hiasan umum yang menambahkan krisis aromatik.
  • Saus cabai: Bervariasi tingkat kepedasan dapat disesuaikan agar sesuai dengan selera individu.

Mempersiapkan Mie Gacoan Level 0

Bagi mereka yang baru dalam petualangan kuliner ini, Mie Gacoan Level 0 berfungsi sebagai titik awal yang ideal. Level khusus ini memperkenalkan pengunjung ke komponen -komponen penting tanpa rasa yang luar biasa. Hidangan ini mewujudkan keseimbangan, memastikan bahwa tidak ada elemen tunggal mengalahkan yang lain.

Bahan-bahan
  1. Mie: Mie Mie Gacoan Segar.
  2. Basis kaldu: Kaldu ayam atau sayuran ringan dengan bumbu minimal.
  3. Topping: Sejumlah kecil sayuran cincang halus seperti wortel, kacang polong, dan sedikit protein yang dimasak seperti tahu ayam goreng.
  4. Hiasan: Taburan bawang merah goreng dan rempah-rempah segar seperti ketumbar di atasnya.
Proses memasak
  1. Siapkan mie: Rebus mie dalam air asin sampai al dente. Ini memastikan mereka mempertahankan tekstur kenyal yang meningkatkan hidangan.
  2. Buat kaldu: Dalam panci terpisah, panaskan kaldu dengan lembut sambil menambahkan hanya sentuhan kecap rendah sodium dan bawang putih potong dadu untuk rasa.
  3. Tambahkan topping: Setelah kaldu hangat, campur protein dan sayuran yang dimasak. Biarkan mereka berendam sejenak untuk menggabungkan rasa.
  4. Perakitan: Kuras mie dan letakkan di dalam mangkuk. Tuang kaldu hangat dengan topping di atas mie dan hiasi sesuai.

Presentasi adalah kuncinya

Presentasi memainkan peran penting dalam menikmati pengalaman bersantap di Mie Gacoan. Tampilan hiasan yang penuh warna tidak hanya membuat hidangan menarik tetapi juga mengatur panggung untuk makanan yang menggugah selera. Memastikan keseimbangan warna yang tepat dari sayuran dan hiasan melibatkan indera sebelum gigitan pertama bahkan diambil.

Minuman memasangkan

Untuk meningkatkan pengalaman Mie Gacoan Anda, pertimbangkan untuk memasangkannya dengan minuman yang melengkapi hidangan. Minuman tradisional Indonesia seperti:

  • Teh Botol: Teh melati yang manis yang menyeimbangkan kepedasan.
  • Kopi Tubruk: Kopi tebal dan gelap yang berfungsi sebagai kontras yang ideal dengan mie.
  • Air kelapa: Opsi menyegarkan yang menyegarkan dengan hidrasi alami.

Pengalaman di luar mangkuk

Makan di Mie Gacoan menawarkan pengalaman mendalam yang melampaui konsumsi makanan. Terlibat dengan suasana yang semarak, menemukan rempah -rempah unik, dan menjelajahi tabel komunal mengundang pelanggan untuk membentuk koneksi dan berbagi pengalaman. Petualangan kuliner ini menyatukan pengunjung, memungkinkan mereka untuk bersenang -senang dalam berbagai rasa yang ditawarkan masakan Indonesia.

Menjelajahi lebih banyak varian

Setelah terbiasa dengan Mie Gacoan Level 0, pengunjung mungkin ingin maju ke level lain, masing -masing menawarkan kombinasi rasa yang kompleks dan teknik inovatif. Varian ini mungkin termasuk:

  • Mie Gacoan Level 1: Memperkenalkan rempah -rempah yang lebih berani dan rasa kaldu yang lebih kaya.
  • Mie Gacoan Level 2: Menampilkan bahan -bahan regional yang unik seperti sambal atau sayuran fermentasi.
  • Mie Gacoan Extreme: Petualangan bagi mereka yang mencari rasa yang intens dan panas dengan topping eksotis.

Kesimpulan

Mie Gacoan Level 0 tidak hanya tentang menikmati makanan; Ini adalah inisiasi ke dunia yang lebih luas dari warisan kuliner Indonesia. Setiap gigitan menceritakan sebuah kisah yang penuh dengan budaya, tradisi, dan cinta yang tulus untuk makanan. Restoran ini menyambut pengunjung untuk memulai petualangan yang beraroma ini, memicu hasrat yang dapat menyebabkan menjelajahi dunia yang lebih dalam dari menu luas Mie Gacoan. Dengan memprioritaskan rasa sederhana namun indah, Mie Gacoan membuka jalan bagi percakapan kuliner yang tak terhitung jumlahnya di antara pecinta makanan, menawarkan sepotong Indonesia di setiap piring.