{"version":3,"file":"6774_c819f610c577fd6feb32.bundle.js","mappings":"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","sources":["webpack://tumarket/./js/editmenu.js","webpack://tumarket/./js/global/popover.js","webpack://tumarket/./js/global/readmore.js","webpack://tumarket/./js/global/util.js"],"sourcesContent":["/* global tumarket */\n\nimport * as $ from \"jquery\";\nimport \"bootstrap/js/dist/dropdown\";\nimport tumGlobal from \"./global.js\";\nimport { initTuPopover } from \"./global/popover\";\nimport { toggleReadmore } from \"./global/readmore\";\nimport { addEventDelegate } from \"./global/dom\";\n\nfunction initEditMenu() {\n //функция, которая вызывается при клике на ридмор (атрибут data-callback)\n tumarket.callbacks.updateEditMenu = el => {\n\n //подставляет в ридмор html из data-contenttarget, если он есть и если ридмор пустой\n let $container = $(el).closest('.tum-readmore-wrap').find('.tum-readmore-0');\n let content = $(el).attr('data-contenttarget');\n if (content && !$container.html()) {\n $container.html($(content).html());\n\n //подключаем popover\n initTuPopover($container);\n }\n\n //скрывает другие ридморы в меню\n let $readmores = $('.tu-editMenu .tum-readmore-toggle').not(el);\n $readmores.toArray().forEach(e => toggleReadmore(e, false, true));\n\n //обновляет положение меню на случай, если изменилась ширина\n $('.tu-editMenuToggle').dropdown('update');\n };\n\n //открытие меню редактирования по кнопке с классом\n addEventDelegate(document, 'click', '.menu-openEditMenu', () => {\n let mob = tumGlobal.isMob();\n let shown = $(mob ? '.mob-menu' : '.desktop-menu').hasClass('show');\n\n function toggleMenu() {\n return import(\"./MainMenu.js\").then(({tum_mainMenu}) => tum_mainMenu.toggleMenu());\n }\n\n (shown ? toggleMenu() : Promise.resolve())\n .then(() => {\n $('.tu-editMenuToggle').dropdown('toggle');\n tumGlobal.scrollUp();\n tumGlobal.highlight($('.tu-editMenu .dropdown-menu'));\n });\n });\n}\n\nexport { initEditMenu };\n\n","import * as $ from \"jquery\";\nimport * as htmx from \"htmx.org\";\nimport \"bootstrap/js/dist/popover\";\nimport { addEventDelegate } from \"./dom\";\nimport { isMob } from \"./util\";\nimport { showDialog } from \"./dialog\";\n\nlet bottomModalInitialized = false;\n\nlet popoverSelectors = [\n '[data-toggle=\"popover\"]',\n '.tu-popover',\n '.poptitle',\n '.tum-unauthorized-hint',\n '.map-link-tum-popover'\n]\n\n/**\n * \n * @param {HTMLElement} element \n */\nfunction closeAllPopoversExcept(element) {\n let popovers = [...document.querySelectorAll(popoverSelectors.join(', '))].filter(e => e != element);\n for (let popover of popovers) {\n $(popover).popover('hide');\n }\n}\n\nfunction initPopovers(){\n addEventDelegate(document, 'click', '[data-dismiss=popover]', element => {\n $('.modal.show.opened-as-popover').modal('hide');\n\n var $popover = $(element).closest('.popover');\n if (!$popover.length) return;\n var $elem = $($popover.data('bs.popover').element);\n $elem.popover('hide');\n });\n\n $(document).on('shown.bs.popover', function(e){\n let closeBtn = '';\n let $elem = $(e.target);\n let $popover = $($elem.data('bs.popover').tip);\n let $header = $popover.find('.popover-header');\n let $body = $popover.find('.popover-body');\n \n htmx?.process($popover[0]);\n \n if ($elem.hasClass('popover-noArrow')) {\n $popover.addClass('noarrow');\n }\n\n if ($elem.hasClass('popover-addCloseBtn')) {\n let $closeBtnContainer = $header.html() ? $header : $body;\n\n if ($('.tu-popover-close', $closeBtnContainer).length) return;\n $closeBtnContainer.prepend(closeBtn);\n }\n });\n\n initTuPopover();\n $('[data-toggle=\"popover\"]').popover({\n sanitize: false\n });\n\n $(document).on('show.bs.popover', e => {\n if (e.currentTarget?.activeElement) {\n closeAllPopoversExcept(e.currentTarget.activeElement);\n }\n else if (e.target) {\n closeAllPopoversExcept(e.target);\n }\n\n if (document.querySelector('.dropdown.show')) {\n $('.dropdown.show').dropdown('hide');\n }\n\n let exceptions = ['.tum-readmore-toggle'];\n if (isMob()) {\n exceptions = exceptions.concat(['.tu-popover', '.tum-unauthorized-hint', '.map-link-tum-popover']);\n } \n let except = exceptions.join(', ');\n\n if (e.currentTarget?.activeElement?.matches(except) || e.target?.matches(except)) {\n return false;\n }\n });\n\n $(document).on('show.bs.dropdown', () => {\n closeAllPopoversExcept(null);\n });\n}\n\n/**\n * \n * @param {HTMLElement | Document | DocumentFragment} [container]\n * @returns \n */\nfunction _initTuPopover(container = null) {\n if (!container) container = document;\n for (let element of container.querySelectorAll('.poptitle:not([data-original-title])')) {\n $(element).popover({\n html: true,\n trigger: element.classList.contains('hover') ? 'hover' : 'click',\n placement: 'top',\n content: element.title,\n sanitize: false,\n template: '
'\n });\n }\n\n if (isMob()) {\n if (!bottomModalInitialized) {\n bottomModalInitialized = true;\n\n addEventDelegate(document, 'click', \".tum-unauthorized-hint, .map-link-tum-popover, .tu-popover\", element => {\n let contentTarget = element.dataset.contenttarget;\n let content = contentTarget ? document.querySelector(contentTarget).innerHTML : element.dataset.content;\n let title = element.title || element.dataset.originalTitle;\n let container = element.dataset.container;\n \n showDialog({\n content: `
${content}
`,\n title,\n pinToBottom: true,\n classes: \"opened-as-popover\",\n container\n });\n });\n }\n\n return;\n }\n\n for (let element of container.querySelectorAll(\".tum-unauthorized-hint, .map-link-tum-popover, .tu-popover\")) {\n if ($(element).data('bs.popover')) continue;\n let trigger = element.dataset.trigger;\n\n let popover = $(element).popover({\n content: function(){\n let target = this.dataset.contenttarget;\n if (target) {\n let html = document.querySelector(target).innerHTML;\n return html;\n }\n\n return this.dataset.content;\n },\n html: true,\n sanitize: false\n });\n\n if (trigger && trigger != 'hover') continue;\n\n popover.on('mouseenter', function () {\n var _this = this;\n $(this).popover('show');\n $('.popover').on('mouseleave', function () {\n $(_this).popover('hide');\n });\n }).on('mouseleave', function () {\n var _this = this;\n setTimeout(function () {\n if (!$('.popover:hover').length) {\n $(_this).popover('hide');\n }\n }, 150);\n });\n }\n}\n\n/**\n * \n * @param {HTMLElement | Document | DocumentFragment | JQuery} [container]\n * @returns \n */\nfunction initTuPopover(container = null){\n if (!container) {\n _initTuPopover();\n return;\n }\n\n if (container instanceof HTMLElement || container instanceof Document || container instanceof DocumentFragment) {\n _initTuPopover(container);\n return;\n }\n\n if (typeof(container) == 'string') {\n container = $(container);\n }\n\n for (let element of container.toArray().filter(e => e instanceof HTMLElement)){\n _initTuPopover(element);\n }\n}\n\n/**\n * \n * @param {HTMLElement} button \n * @param {() => void} callback \n */\nfunction onPopoverShown(button, callback){\n $(button).on('shown.bs.popover', callback);\n}\n\n/**\n * \n * @param {HTMLElement} button \n * @returns {HTMLElement}\n */\nfunction getPopoverElement(button) {\n return $(button).data('bs.popover').tip;\n}\n\nfunction initTooltips(container){\n let except = ['.poptitle', '.notooltip', 'iframe', '.tu-popover', '[data-toggle=popover]'];\n if (isMob()) except.push('.tum-disableMobTitle');\n $('[title]', container || document).not(except.join(', ')).tooltip({\n placement: 'auto',\n boundary: 'window',\n html: true,\n trigger: 'hover'\n });\n\n addEventDelegate(document, 'mouseover', '[title]:not([data-original-title])', function(element){\n $(element).not(except.join(', ')).tooltip({\n placement: 'auto',\n boundary: 'window',\n html: true,\n trigger: 'hover'\n });\n\n $(element).trigger('mouseover');\n });\n\n addEventDelegate(document, 'click', '[title]', function(element){\n $(element).tooltip('hide');\n });\n}\n\nexport { initPopovers, initTuPopover, onPopoverShown, getPopoverElement, closeAllPopoversExcept, initTooltips };\n","import * as $ from \"jquery\";\nimport { initTuPopover } from \"./popover\";\n\nlet tumarket = window.tumarket;\n\n/** @type {Object.} */\nlet readmoreState = tumarket.readmoreState;\n\n/** @type {Object.) => void>} */\nlet callbacks = tumarket.callbacks;\n\n/**\n * \n * @param {JQuery} el \n * @param {boolean} [value]\n * @param {boolean} [skipCallback]\n */\nfunction toggleReadmore(el, value = null, skipCallback = null){\n let $wrap = $(el).closest(\".tum-readmore-wrap\");\n let $toggle = $(el);\n let $target = $(el).attr(\"data-target\");\n let $texts = null;\n let $otherToggles = null;\n let id = $wrap.attr('data-readmoreid');\n let groupContainer = $(el)[0].dataset.groupContainer;\n\n if (groupContainer && !skipCallback) {\n [...document.querySelector(groupContainer).querySelectorAll(\".tum-readmore-toggle\")]\n .filter(e => e != this)\n .forEach(e => toggleReadmore(e, false, true));\n }\n\n if ($target) {\n $texts = $($target);\n $otherToggles = $('.tum-readmore-toggle[data-target=\"' + $target + '\"]').not($(el));\n } else {\n $texts = $(\".tum-readmore-0, .tum-readmore-1, .tum-readmore-2, .tum-readmore-inline, .tum-readmore-custom\", $wrap);\n $otherToggles = $(\".tum-readmore-toggle\", $wrap).not($(el));\n }\n\n function swapToggleHtml($toggle, show){\n let showHtml = $toggle.attr('data-showhtmltarget') ? $($toggle.attr('data-showhtmltarget')).html() : $toggle.attr('data-showhtml');\n let hideHtml = $toggle.attr('data-hidehtmltarget') ? $($toggle.attr('data-hidehtmltarget')).html() : $toggle.attr('data-hidehtml');\n\n let html = show ? hideHtml : showHtml;\n if (html != \"_\") {\n $toggle.html(html);\n }\n }\n\n $texts.each(function(){\n let $text = $(this);\n let _wrap = $(this).closest(\".tum-readmore-wrap\");\n\n if (_wrap.length && !_wrap.is($wrap)) {\n return;\n }\n\n $text.toggleClass(\"show\", value);\n let show = $text.hasClass(\"show\");\n swapToggleHtml($toggle, show);\n $otherToggles.each(function(){\n let _toggleWrap = $(this).closest(\".tum-readmore-wrap\");\n if (_toggleWrap.is($wrap) || !_toggleWrap.length) swapToggleHtml($(this), show); \n });\n\n let ajaxCode = $text.attr('data-ajaxcode');\n let ajaxOptions = $text.attr('data-ajaxoptions');\n let ajaxLoaded = $text.data('ajaxloaded') == 1;\n if (ajaxCode && !ajaxLoaded) {\n import(\"./ajaxComponent\").then(({ renderComponent }) => {\n renderComponent(ajaxCode, ajaxOptions)\n .then(html => { \n $text.html(html)\n $text.data('ajaxloaded', 1);\n initTuPopover($text);\n document.body.dispatchEvent(new Event(\"tum.component.loaded\"));\n });\n });\n }\n\n if (id) {\n readmoreState[id] = show;\n }\n });\n\n let callback = $(el).attr('data-callback');\n if (!skipCallback && callback && callbacks && callbacks[callback]) {\n callbacks[callback](el);\n }\n}\n\nfunction initReadmore(){\n $(document).on(\"click\", \".tum-readmore-toggle\", function (e) {\n //если кликнуть на toggle, который находится внутри другого toggle, будет двойной вызов и в итоге ничего не отработает\n //но stopPropagation может вызвать проблемы в другом функционале, например сборе статистики при кликах\n //поэтому вместо этого явно проверяем, что ридмор уже обработан\n if (e.result?.readmore_processed) return;\n\n if (!this.matches('[data-dont-prevent-default]')) {\n e.preventDefault();\n }\n \n let readmoreState = null;\n if (this.dataset.readmoreState) {\n readmoreState = this.dataset.readmoreState == 'show';\n }\n\n toggleReadmore($(this), readmoreState);\n \n return { readmore_processed: true };\n });\n\n $(document).on('shown.bs.collapse', function(e){\n let id = $(e.target).attr('data-readmoreid');\n readmoreState[id] = true;\n });\n\n $(document).on('hidden.bs.collapse', function(e){\n let id = $(e.target).attr('data-readmoreid');\n readmoreState[id] = false;\n });\n}\n\n/**\n * простой ручной toggle для collapse без анимации. Можно использовать для сохранения состояния коллапсов при ререндере\n * @param {JQuery} element \n * @param {boolean} [value] \n * @param {JQuery} [container] \n */\nfunction toggleCollapse(element, value = null, container = null){\n let $collapseToggle = $(container || document).find(element);\n let $collapse = $($collapseToggle.attr('data-target'), container || document);\n\n let showIcons = [ '.fa-arrow-down', '.fa-chevron-down' ];\n let hideIcons = [ '.fa-arrow-up', '.fa-chevron-up' ];\n let $icon = $([showIcons, hideIcons].flatMap(e => e).join(', '), $collapseToggle);\n $icon.toggleClass(showIcons.join(', '), !value).toggleClass(hideIcons.join(', '), value);\n\n $collapseToggle.toggleClass('collapsed', !value);\n $collapse.toggleClass('show', value);\n\n let id = $collapse.attr('data-readmoreid');\n if (id && value !== null) readmoreState[id] = value;\n}\n\n/**\n * \n * @param {JQuery} container \n */\nfunction restoreReadmoreState(container) {\n for (let id in readmoreState){\n let $readmoreToggle = $(`.tum-readmore-wrap[data-readmoreid=${id}] .tum-readmore-toggle`, container).first();\n if ($readmoreToggle.length)\ttoggleReadmore($readmoreToggle, readmoreState[id]);\n\n let $collapse = $(`[data-toggle=\"collapse\"][data-readmoreid=\"${id}\"]`, container);\n if ($collapse.length) toggleCollapse($collapse, readmoreState[id], container);\n }\n}\n\n/**\n * \n * @param {string} id \n * @param {boolean} [value] \n * @returns \n */\nfunction toggleReadmoreById(id, value = null) {\n let $element = $(`[data-readmoreid=\"${id}\"]`);\n if ($element.hasClass('tum-readmore-wrap')) {\n let $toggle = $('.tum-readmore-toggle', $element).first();\n toggleReadmore($toggle, value);\n \n return;\n }\n\n if ($element.is('[data-toggle=collapse]')) {\n toggleCollapse($element, value);\n }\n}\n\nwindow.toggleReadmore = toggleReadmore;\n\nexport { initReadmore, toggleReadmore, restoreReadmoreState, toggleReadmoreById };","function isMob() {\n return window.innerWidth < 768;\n}\n\n/**\n * \n * @param {string} rawStr \n * @returns \n */\nfunction encodeHtml(rawStr) {\n return rawStr.replace(/[\\u00A0-\\u9999<>&]/g, i => '&#'+i.charCodeAt(0)+';')\n}\n\n/**\n * \n * @param {string} string \n * @returns \n */\nfunction capitalize(string)\n{\n if (!string) return string;\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\n/**\n * \n * @param {string} string \n * @returns \n */\nfunction decapitalize(string)\n{\n if (!string) return string;\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n/**\n * \n * @param {string} str \n * @returns \n */\nfunction toCamelCase(str) {\n return str.toLowerCase().replace(/[-_][a-z]/g, (group) => group.slice(-1).toUpperCase());\n}\n\n/**\n * \n * @param {string} str \n * @returns \n */\nfunction toSnakeCase(str) {\n return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);\n}\n\n/**\n * \n * @param {any[]} array \n * @param {string | (e: any) => string} key \n * @returns {Object.}\n */\nfunction groupBy(array, key) {\n let useFunction = typeof key == 'function';\n\n return array.reduce((acc, currentValue) => {\n let groupKey = useFunction ? key(currentValue).toString() : currentValue[key].toString();\n if (!acc[groupKey]) {\n acc[groupKey] = [];\n }\n acc[groupKey].push(currentValue);\n return acc;\n }, {});\n}\n\nfunction sort(array, desc, mapper){\n if (!array.length) return array;\n if (!mapper) mapper = e => e;\n let copy = [...array];\n copy.sort((a, b) => {\n if (mapper(a) > mapper(b)) return 1;\n if (mapper(a) < mapper(b)) return -1;\n return 0;\n });\n\n if (desc) copy.reverse();\n return copy;\n}\n\n/**\n * convert string to bool\n * @param {*} value \n * @param {*} isAttr treat as html attribute, so empty string is true\n * @returns \n */\nfunction toBool(value, isAttr){\n if (isAttr && value == '') return true;\n if (value == 'false' || value == '0') return false;\n return !!value;\n}\n\nfunction renderSimpleTemplate(template, data, requireFields, encodeUrl) {\n if (!template || !data) return '';\n\n let result = template;\n let templateRegex = /{{([a-zA-Z0-9_]+)}}/g;\n let iifRegex = /{{iif ([a-zA-Z0-9_]+) ('[a-zA-Z0-9_а-яА-Я,.:'\" ]*'|[a-zA-Z0-9_]+) ('[a-zA-Z0-9_а-яА-Я,.:'\" ]*'|[a-zA-Z0-9_]+)}}/g;\n let literalRegex = /'(.*)'/;\n\n for (let field of template.matchAll(templateRegex)) {\n let value = getValueByPath(data, field[1]) || '';\n \n if (requireFields && !value) {\n return null;\n }\n\n if (encodeUrl) value = encodeURIComponent(value);\n result = result.replace(field[0], value);\n }\n\n for (let field of template.matchAll(iifRegex)) {\n let condition = getValueByPath(data, field[1]);\n let literalA = field[2].match(literalRegex);\n let literalB = field[3].match(literalRegex);\n let a = literalA ? literalA[1] : getValueByPath(data, field[2]);\n let b = literalB ? literalB[1] : getValueByPath(data, field[3]);\n\n let value = condition ? a : b;\n \n if (requireFields && !value) {\n return null;\n }\n\n if (encodeUrl) value = encodeURIComponent(value);\n result = result.replace(field[0], value);\n }\n\n return result.trim();\n}\n\n/**\n * \n * @param {any[]} array \n * @returns \n */\nfunction distinct(array) {\n if (!array) return [];\n function distinctFilter(value, index, self) { \n return self.indexOf(value) === index;\n }\n\n return array.filter(distinctFilter);\n}\n\n/**\n * \n * @param {string} date \n * @returns {Date}\n */\nfunction parseDate(date) {\n if (!date.includes(' ') && !date.includes('T')) date = date + ' 00:00';\n if (date.includes('+')) return new Date(date);\n return new Date(`${date}+09:00`);\n}\n\nfunction isDateInThisWeek(date, offset) {\n if (!offset) offset = 0;\n let today = new Date();\n const todayObj = new Date(today.setDate(today.getDate() + offset * 7));\n const todayDate = todayObj.getDate();\n const todayDay = todayObj.getDay();\n\n // get first date of week\n const firstDayOfWeek = new Date(todayObj.setDate(todayDate - todayDay));\n\n // get last date of week\n const lastDayOfWeek = new Date(firstDayOfWeek);\n lastDayOfWeek.setDate(lastDayOfWeek.getDate() + 6);\n\n // if date is equal or within the first and last dates of the week\n return date >= firstDayOfWeek && date <= lastDayOfWeek;\n}\n\n\n/**\n * позволяет получить из сложного объекта вложенное поле по строке типа 'products[0].info.name'\n * @param {object} object \n * @param {string} path \n * @returns \n */\nfunction getValueByPath(object, path) {\n let result = object;\n let sections = path.split('.');\n for (let section of sections) {\n if (!result) return result;\n let arrayRegex = /^([a-zA-Z0-9_]+)\\[(\\d+)\\]$/;\n let match = section.match(arrayRegex);\n let index = match ? match[2] : null;\n if (index) section = match[1];\n\n if (index) {\n result = result[section][index] || null;\n } else {\n result = result[section] || null;\n }\n }\n\n return result;\n}\n\n/**\n устанавливает значение вложенного поля по строке типа 'products.info.name'\n * @param {*} object \n * @param {*} path \n * @param {*} value \n */\nfunction setValueByPath(object, path, value) {\n let schema = object; // a moving reference to internal objects within obj\n let pList = path.split('.');\n let len = pList.length;\n for (let i = 0; i < len-1; i++) {\n let elem = pList[i];\n if (!schema[elem]) schema[elem] = {};\n schema = schema[elem];\n }\n\n schema[pList[len-1]] = value;\n}\n\nfunction isIos(){\n if ((/iPad|iPhone|iPod/.test(navigator.userAgent)) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1))\t{\n return true;\n }\n\n return false;\n}\n\nfunction swapAltHtml(element, attributeName) {\n if (!attributeName) attributeName = 'data-althtml';\n let oldhtml = element.innerHTML;\n let newhtml = element.getAttribute(attributeName);\n element.setAttribute(attributeName, oldhtml);\n element.innerHTML = newhtml;\n}\n\nexport { \n isMob, encodeHtml, capitalize, decapitalize, toCamelCase, groupBy, sort, \n toBool, renderSimpleTemplate, distinct, toSnakeCase, parseDate, getValueByPath, setValueByPath, isDateInThisWeek,\n isIos, swapAltHtml\n};"],"names":["initEditMenu","tumarket","callbacks","updateEditMenu","el","$container","closest","find","content","attr","html","not","toArray","forEach","e","dropdown","document","mob","isMob","hasClass","then","tum_mainMenu","toggleMenu","Promise","resolve","scrollUp","highlight","bottomModalInitialized","popoverSelectors","closeAllPopoversExcept","element","popovers","querySelectorAll","join","filter","popover","initPopovers","modal","$popover","length","data","on","$elem","target","tip","$header","$body","process","addClass","$closeBtnContainer","prepend","initTuPopover","sanitize","currentTarget","activeElement","querySelector","exceptions","concat","except","matches","_initTuPopover","container","trigger","classList","contains","placement","title","template","contentTarget","dataset","contenttarget","innerHTML","originalTitle","pinToBottom","classes","this","_this","setTimeout","HTMLElement","Document","DocumentFragment","onPopoverShown","button","callback","getPopoverElement","initTooltips","push","tooltip","boundary","window","readmoreState","toggleReadmore","value","skipCallback","$wrap","$toggle","$target","$texts","$otherToggles","id","groupContainer","swapToggleHtml","show","showHtml","hideHtml","each","$text","_wrap","is","toggleClass","_toggleWrap","ajaxCode","ajaxOptions","ajaxLoaded","renderComponent","body","dispatchEvent","Event","initReadmore","result","readmore_processed","preventDefault","innerWidth","encodeHtml","rawStr","replace","i","charCodeAt","capitalize","string","charAt","toUpperCase","slice","decapitalize","toLowerCase","toCamelCase","str","group","toSnakeCase","letter","groupBy","array","key","useFunction","reduce","acc","currentValue","groupKey","toString","sort","desc","mapper","copy","a","b","reverse","toBool","isAttr","renderSimpleTemplate","requireFields","encodeUrl","templateRegex","iifRegex","literalRegex","field","matchAll","getValueByPath","encodeURIComponent","condition","literalA","match","literalB","trim","distinct","index","self","indexOf","parseDate","date","includes","Date","isDateInThisWeek","offset","today","todayObj","setDate","getDate","todayDate","todayDay","getDay","firstDayOfWeek","lastDayOfWeek","object","path","sections","split","section","arrayRegex","setValueByPath","schema","pList","len","elem","isIos","test","navigator","userAgent","platform","maxTouchPoints"],"sourceRoot":""}