@topvisor/ui 0.9.3 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.chunks/{datepicker-d67bd339.amd.js → datepicker-cc0011e1.amd.js} +2 -2
- package/.chunks/{datepicker-d67bd339.amd.js.map → datepicker-cc0011e1.amd.js.map} +1 -1
- package/.chunks/{forms-9284b6d9.amd.js → forms-9972aba2.amd.js} +3 -3
- package/.chunks/{forms-9284b6d9.amd.js.map → forms-9972aba2.amd.js.map} +1 -1
- package/.chunks/{popup-3054fcc1.es.js → popup-70a8c892.es.js} +3 -3
- package/.chunks/popup-70a8c892.es.js.map +1 -0
- package/.chunks/{popup-c85f28bf.amd.js → popup-d96418da.amd.js} +4 -4
- package/.chunks/popup-d96418da.amd.js.map +1 -0
- package/core/core.amd.js +1 -1
- package/forms/forms.amd.js +1 -1
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/package.json +1 -1
- package/popup/popup.amd.js +1 -1
- package/popup/popup.amd.js.map +1 -1
- package/popup/worker.amd.js +1 -1
- package/popup/worker.js +1 -1
- package/require/css.amd.js +12 -0
- package/tabs/tabs.amd.js +1 -1
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/utils/date.amd.js +1 -1
- package/utils/device.amd.js +1 -1
- package/.chunks/popup-3054fcc1.es.js.map +0 -1
- package/.chunks/popup-c85f28bf.amd.js.map +0 -1
package/popup/popup.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popup.amd.js","sources":["../../src/components/popup/popup/opener.vue","../../src/components/popup/popup/popup.vue","../../src/components/popup/popup/listItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { onUpdated, ref } from 'vue';\r\nimport type { OpenerProps } from './popup';\r\n\r\nconst props = withDefaults(defineProps<OpenerProps>(), {\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst id = props.id || Math.random() + '';\r\n\r\nlet elOpener: Element;\r\n\r\n/**\r\n * Необычная функция для проброски props внтурь элемента слота\r\n *\r\n * @param el - вспомогательрный элемент для доступа к элементам слота\r\n */\r\nfunction render (el: any) {\r\n\tsetTimeout(() => {\r\n\t\telOpener = el.nextElementSibling;\r\n\r\n\t\tif (elOpener) {\r\n\t\t\trenderOpener(elOpener);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nonUpdated(() => {\r\n\tif (elOpener) {\r\n\t\trenderOpener(elOpener);\r\n\t}\r\n});\r\n\r\nfunction renderOpener (elOpener: any) {\r\n\telOpener.dataset.topPopup = 'vue-' + id;\r\n\telOpener.dataset.topPopupId = id;\r\n\telOpener.dataset.topPopupP = props.pos;\r\n\telOpener.dataset.topPopupPosBy = props.posBy;\r\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\r\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<template :ref=\"render\"></template>\r\n\r\n\t<!-- @slot элемент для открытия Popup -->\r\n\t<slot></slot>\r\n</template>\r\n\r\n<!-- Использует общий deprecated класс .btn -->\r\n<style>\r\nh3[data-top-popup],\r\ndiv[data-top-popup],\r\ni[data-top-popup]:not(.btn),\r\nb[data-top-popup]:not(.btn) {\r\n\tcursor: pointer;\r\n\tuser-select: none;\r\n\tfont-style: normal;\r\n\ttext-decoration: none;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n}\r\n\r\n[data-top-popup][data-top-popup-disabled] {\r\n\tpointer-events: none;\r\n\tcursor: auto !important;\r\n}\r\n\r\ni[contenteditable] {\r\n\tcursor: text !important;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { ref, toRef, onUnmounted } from 'vue';\r\nimport type { Props, Emits } from './popup';\r\nimport Core from '@/core/core/core';\r\nimport Opener from './opener.vue';\r\nimport Worker from '@/components/popup/lib/worker';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tid: '',\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst id = props.id || Math.random() + '';\r\nconst elPopupRef = ref(null);\r\n\r\n// см. lib/popup\r\nconst onOpen = async (popup: any) => {\r\n\tpopup.elPopupInner.innerText = '';\r\n\r\n\telPopupRef.value = popup.elPopupInner;\r\n\r\n\tvueConnector.opened = true;\r\n\tvueConnector.popup = popup;\r\n\r\n\temit('open');\r\n};\r\n\r\n// см. lib/popup\r\nconst onClose = (popup: any) => {\r\n\telPopupRef.value = null;\r\n\r\n\tvueConnector.opened = false;\r\n\tvueConnector.popup = null;\r\n\r\n\temit('close');\r\n};\r\n\r\nconst vueConnector = {\r\n\tonOpen,\r\n\tonClose,\r\n\tclassRef: toRef(props, 'class'),\r\n\topened: false,\r\n\tpopup: null,\r\n};\r\n\r\nWorker.regVueComponent(id, vueConnector);\r\n\r\nonUnmounted(() => {\r\n\tWorker.unregVueComponent(id);\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<Opener\r\n\t\tv-if=\"$slots.opener\"\r\n\t\t:id=\"id\"\r\n\t\t:pos=\"pos\"\r\n\t\t:posBy=\"posBy\"\r\n\t\t:notch=\"notch\"\r\n\t\t:openByHover=\"openByHover\"\r\n\t>\r\n\t\t<!-- @slot элемент для открытия Popup -->\r\n\t\t<slot name=\"opener\"></slot>\r\n\t</Opener>\r\n\r\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\r\n\t<!-- elPopupRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\r\n\t<teleport\r\n\t\tv-if=\"elPopupRef\"\r\n\t\t:to=\"elPopupRef\"\r\n\t>\r\n\t\t<div v-if=\"$slots.header || Core.state.isMobile\" class=\"top-popup_header\">\r\n\t\t\t<span\r\n\t\t\t\tv-if=\"Core.state.isMobile\"\r\n\t\t\t\tclass=\"top-as-a closer\"\r\n\t\t\t>\r\n\t\t\t\t{{ vueConnector.popup.options.i18n.Close }}\r\n\t\t\t</span>\r\n\r\n\t\t\t<!-- @slot Шапка -->\r\n\t\t\t<slot name=\"header\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div v-if=\"$slots.content\" class=\"top-popup_content\">\r\n\t\t\t<!-- @slot Контент в свободной форме -->\r\n\t\t\t<slot name=\"content\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<ul v-if=\"$slots.contentList\" class=\"top-popup_content\">\r\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка испоьзуйте компонент popup/listItem -->\r\n\t\t\t<slot name=\"contentList\"></slot>\r\n\t\t</ul>\r\n\r\n\t\t<div v-if=\"$slots.footer\" class=\"top-popup_footer\">\r\n\t\t\t<!-- @slot Футер -->\r\n\t\t\t<slot name=\"footer\"></slot>\r\n\t\t</div>\r\n\t</teleport>\r\n</template>","<script setup lang=\"ts\">\r\nimport type { ListItemProps } from './popup';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<ListItemProps>(), {\r\n\ttype: 'button',\r\n\tcloseByClick: true,\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<li :class=\"{\r\n\t\t'top-popup_liNoSelectable': props.type !== 'button'\r\n\t}\">\r\n\t\t<component\r\n\t\t\t:is=\"$attrs.href ? 'a' : 'div'\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t'top-popup_listItem': true,\r\n\t\t\t\t'top-popup_listItem-button': props.type === 'button', // оформления кнопки\r\n\t\t\t\t'a': props.type === 'button', // оформления кнопки, deprecated\r\n\t\t\t\t'top-popup_listItem-title': props.type === 'title',\r\n\t\t\t\t'top-popup_listItem-delimiter': props.type === 'delimiter',\r\n\t\t\t\t'top-popup-noCloser': !closeByClick\r\n\t\t\t}\"\r\n\t\t\t:=$attrs\r\n\t\t>\r\n\t\t\t<slot></slot>\r\n\t\t</component>\r\n\t</li>\r\n</template>"],"names":["props","__props","id","render","el","elOpener","renderOpener","elOpener2","emit","__emit","elPopupRef","vue","popup","vueConnector","popup_worker"],"mappings":"
|
|
1
|
+
{"version":3,"file":"popup.amd.js","sources":["../../src/components/popup/popup/opener.vue","../../src/components/popup/popup/popup.vue","../../src/components/popup/popup/listItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { onUpdated, ref } from 'vue';\r\nimport type { OpenerProps } from './popup';\r\n\r\nconst props = withDefaults(defineProps<OpenerProps>(), {\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst id = props.id || Math.random() + '';\r\n\r\nlet elOpener: Element;\r\n\r\n/**\r\n * Необычная функция для проброски props внтурь элемента слота\r\n *\r\n * @param el - вспомогательрный элемент для доступа к элементам слота\r\n */\r\nfunction render (el: any) {\r\n\tsetTimeout(() => {\r\n\t\telOpener = el.nextElementSibling;\r\n\r\n\t\tif (elOpener) {\r\n\t\t\trenderOpener(elOpener);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nonUpdated(() => {\r\n\tif (elOpener) {\r\n\t\trenderOpener(elOpener);\r\n\t}\r\n});\r\n\r\nfunction renderOpener (elOpener: any) {\r\n\telOpener.dataset.topPopup = 'vue-' + id;\r\n\telOpener.dataset.topPopupId = id;\r\n\telOpener.dataset.topPopupP = props.pos;\r\n\telOpener.dataset.topPopupPosBy = props.posBy;\r\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\r\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<template :ref=\"render\"></template>\r\n\r\n\t<!-- @slot элемент для открытия Popup -->\r\n\t<slot></slot>\r\n</template>\r\n\r\n<!-- Использует общий deprecated класс .btn -->\r\n<style>\r\nh3[data-top-popup],\r\ndiv[data-top-popup],\r\ni[data-top-popup]:not(.btn),\r\nb[data-top-popup]:not(.btn) {\r\n\tcursor: pointer;\r\n\tuser-select: none;\r\n\tfont-style: normal;\r\n\ttext-decoration: none;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n}\r\n\r\n[data-top-popup][data-top-popup-disabled] {\r\n\tpointer-events: none;\r\n\tcursor: auto !important;\r\n}\r\n\r\ni[contenteditable] {\r\n\tcursor: text !important;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { ref, toRef, onUnmounted } from 'vue';\r\nimport type { Props, Emits } from './popup';\r\nimport Core from '@/core/core/core';\r\nimport Opener from './opener.vue';\r\nimport Worker from '@/components/popup/lib/worker';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tid: '',\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst id = props.id || Math.random() + '';\r\nconst elPopupRef = ref(null);\r\n\r\n// см. lib/popup\r\nconst onOpen = async (popup: any) => {\r\n\tpopup.elPopupInner.innerText = '';\r\n\r\n\telPopupRef.value = popup.elPopupInner;\r\n\r\n\tvueConnector.opened = true;\r\n\tvueConnector.popup = popup;\r\n\r\n\temit('open');\r\n};\r\n\r\n// см. lib/popup\r\nconst onClose = (popup: any) => {\r\n\telPopupRef.value = null;\r\n\r\n\tvueConnector.opened = false;\r\n\tvueConnector.popup = null;\r\n\r\n\temit('close');\r\n};\r\n\r\nconst vueConnector = {\r\n\tonOpen,\r\n\tonClose,\r\n\tclassRef: toRef(props, 'class'),\r\n\topened: false,\r\n\tpopup: null,\r\n};\r\n\r\nWorker.regVueComponent(id, vueConnector);\r\n\r\nonUnmounted(() => {\r\n\tWorker.unregVueComponent(id);\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<Opener\r\n\t\tv-if=\"$slots.opener\"\r\n\t\t:id=\"id\"\r\n\t\t:pos=\"pos\"\r\n\t\t:posBy=\"posBy\"\r\n\t\t:notch=\"notch\"\r\n\t\t:openByHover=\"openByHover\"\r\n\t>\r\n\t\t<!-- @slot элемент для открытия Popup -->\r\n\t\t<slot name=\"opener\"></slot>\r\n\t</Opener>\r\n\r\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\r\n\t<!-- elPopupRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\r\n\t<teleport\r\n\t\tv-if=\"elPopupRef\"\r\n\t\t:to=\"elPopupRef\"\r\n\t>\r\n\t\t<div v-if=\"$slots.header || Core.state.isMobile\" class=\"top-popup_header\">\r\n\t\t\t<span\r\n\t\t\t\tv-if=\"Core.state.isMobile\"\r\n\t\t\t\tclass=\"top-as-a closer\"\r\n\t\t\t>\r\n\t\t\t\t{{ vueConnector.popup.options.i18n.Close }}\r\n\t\t\t</span>\r\n\r\n\t\t\t<!-- @slot Шапка -->\r\n\t\t\t<slot name=\"header\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div v-if=\"$slots.content\" class=\"top-popup_content\">\r\n\t\t\t<!-- @slot Контент в свободной форме -->\r\n\t\t\t<slot name=\"content\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<ul v-if=\"$slots.contentList\" class=\"top-popup_content\">\r\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка испоьзуйте компонент popup/listItem -->\r\n\t\t\t<slot name=\"contentList\"></slot>\r\n\t\t</ul>\r\n\r\n\t\t<div v-if=\"$slots.footer\" class=\"top-popup_footer\">\r\n\t\t\t<!-- @slot Футер -->\r\n\t\t\t<slot name=\"footer\"></slot>\r\n\t\t</div>\r\n\t</teleport>\r\n</template>","<script setup lang=\"ts\">\r\nimport type { ListItemProps } from './popup';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<ListItemProps>(), {\r\n\ttype: 'button',\r\n\tcloseByClick: true,\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<li :class=\"{\r\n\t\t'top-popup_liNoSelectable': props.type !== 'button'\r\n\t}\">\r\n\t\t<component\r\n\t\t\t:is=\"$attrs.href ? 'a' : 'div'\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t'top-popup_listItem': true,\r\n\t\t\t\t'top-popup_listItem-button': props.type === 'button', // оформления кнопки\r\n\t\t\t\t'a': props.type === 'button', // оформления кнопки, deprecated\r\n\t\t\t\t'top-popup_listItem-title': props.type === 'title',\r\n\t\t\t\t'top-popup_listItem-delimiter': props.type === 'delimiter',\r\n\t\t\t\t'top-popup-noCloser': !closeByClick\r\n\t\t\t}\"\r\n\t\t\t:=$attrs\r\n\t\t>\r\n\t\t\t<slot></slot>\r\n\t\t</component>\r\n\t</li>\r\n</template>"],"names":["props","__props","id","render","el","elOpener","renderOpener","elOpener2","emit","__emit","elPopupRef","vue","popup","vueConnector","popup_worker"],"mappings":"+WAIA,MAAAA,EAAAC,EAMAC,EAAAF,EAAA,IAAA,KAAA,OAAA,EAAA,SASA,SAAAG,EAAAC,EAAA,iBAEEC,EAAAD,EAAA,sBAGCE,EAAAD,CAAA,CACD,CAAA,sBAMAC,EAAAD,CAAA,CACD,CAAA,EAGD,SAAAC,EAAAC,EAAA,6BAECA,EAAA,QAAA,WAAAL,4DAGAK,EAAA,QAAA,cAAAP,EAAA,MAAA,OAAA,GACAO,EAAA,QAAA,oBAAAP,EAAA,YAAA,OAAA,giBClCD,MAAAA,EAAAC,EAOAO,EAAAC,EAEAP,EAAAF,EAAA,IAAA,KAAA,OAAA,EAAA,GACAU,EAAAC,EAAA,IAAA,IAAA,KAwBqB,OArBrB,MAAAC,GAAA,CACCA,EAAA,aAAA,UAAA,GAEAF,EAAA,MAAAE,EAAA,aAEAC,EAAA,OAAA,GACAA,EAAA,MAAAD,EAEAJ,EAAA,MAAA,CAAW,EAcX,QAVDI,GAAA,CACCF,EAAA,MAAA,KAEAG,EAAA,OAAA,GACAA,EAAA,MAAA,KAEAL,EAAA,OAAA,CAAY,EAKZ,SAAAG,EAAA,MAAAX,EAAA,OAAA,sBAGO,+DAMPc,EAAA,YAAA,kBAAAZ,CAAA,CAA2B,CAAA,8vCC7C5B,MAAAF,EAAAC"}
|
package/popup/worker.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","../.chunks/forms-
|
|
1
|
+
define(["require","exports","../.chunks/forms-9972aba2.amd","../utils/dom.amd","vue"],function(require,exports,forms,utils_dom,vue){"use strict";if(typeof vue>"u")var vue=window.Vue;class WorkerEvents{static init(){document.addEventListener("mouseover",t=>{var o;(o=t.target.dataset)!=null&&o.topPopupOpenByHover&&t.target.click()}),document.addEventListener("scroll",()=>{forms.Core.isMobile||Worker$1.getAll().forEach(t=>Worker$1.close(t))}),forms.Events.addOnReize(t=>{forms.Core.state.isMobile&&t.topEvent.widthDiff&&Worker$1.getAll().forEach(o=>Worker$1.close(o))}),document.addEventListener("click",this.onclick)}static async onclick(t){var s,r,a,p;let o;switch(!0){case!!((s=t.target.dataset)!=null&&s.topPopup):o=t.target;break;case!!((r=t.target.parentElement)!=null&&r.dataset.topPopup):o=t.target.parentElement;break;case!!((p=(a=t.target.parentElement)==null?void 0:a.parentElement)!=null&&p.dataset.topPopup):o=t.target.parentElement.parentElement;break}o&&(o.dataset.topPopupDisabled||o.dataset.topPopupOpened||(t.preventDefault(),await Worker$1.openByOpener(o)))}}let decoratorBeforeOpen,decoratorAfterOpen,decoratorIsIgnoreOuterClick,i18n={Close:"Close"};class Worker{static noClose=!1;static vueConnectors=new Map;static onInitApp(e){decoratorBeforeOpen=e==null?void 0:e.decoratorBeforeOpen,decoratorAfterOpen=e==null?void 0:e.decoratorAfterOpen,decoratorIsIgnoreOuterClick=e==null?void 0:e.decoratorIsIgnoreOuterClick,i18n=e==null?void 0:e.i18n}static getPopup(e){return utils_dom.default.storage(e,"Popup")}static getAll(){return utils_dom.default.querySelectorAllArray(document,".top-popup-wrapper")}static getAllVisible(){return utils_dom.default.querySelectorAllVisible(document,".top-popup-wrapper")}static async openByOpener(e){const t={};return t.popup=e.dataset.topPopup,e.dataset.topPopupP&&(t.p=parseInt(e.dataset.topPopupP)),e.dataset.topPopupNotch&&(t.notch=e.dataset.topPopupNotch),e.dataset.topPopupClass&&(t.class=e.dataset.topPopupClass),e.dataset.topPopupPosBy&&(t.posBy=e.dataset.topPopupPosBy),e.dataset.topPopupFront&&(t.frontSelector=e.dataset.topPopupFront),e.dataset.topPopupInvertX&&(t.invertX=e.dataset.topPopupInvertX),e.dataset.topPopupOpenByHover&&(t.openByHover=e.dataset.topPopupOpenByHover),e.dataset.topPopupUseOriginal&&(t.useOriginal=e.dataset.topPopupUseOriginal),await Worker.open(e,t)}static async open(elOpener,options){elOpener.dataset.topPopupOpened="opened";const{default:Popup}=await new Promise((e,t)=>require(["../.chunks/popup-d96418da.amd"],e,t));if(typeof jQuery=="function"){const $elOpener=jQuery(elOpener);if($elOpener.data("aftershow")){let afterShow=$elOpener.data("aftershow");typeof afterShow=="string"&&(afterShow=eval(afterShow.replace(/\W/g,""))),$elOpener.one("aftershow.top-menu-popup",afterShow)}if($elOpener.data("afterclose")){let afterclose=$elOpener.data("afterclose");typeof afterclose=="string"&&(afterclose=eval(afterclose.replace(/\W/g,""))),$elOpener.one("afterclose.top-menu-popup",afterclose)}}return options.isFullScreen=forms.Core.state.isMobile,options.i18n=i18n,await new Popup(elOpener,options)}static close(e){const t=Worker.getPopup(e);t&&t.close()}static recalcPosition(e){const t=Worker.getPopup(e);t&&(t.recalcPosition(),HelperCommon.genHasScroll($(t.elPopupBody)))}static scrollToActive(e){if(!utils_dom.default.querySelectorVisible(e,"ul.top-popup_content > li > .top-active"))return;const o=e.querySelector("ul.top-popup_content"),s=utils_dom.default.querySelectorAllVisible(e,"ul.top-popup_content > li");e.classList.add("top-popup-wrapper-no_animate"),setTimeout(()=>e.classList.remove("top-popup-wrapper-no_animate"),100);let r=100;for(const p of s){if(p.querySelector(":scope > .top-active"))break;r+=p.offsetHeight}const a=o.offsetHeight;r>a?o.scrollTop=r-a:o.scrollTop=0}static decoratorBeforeOpen(e){decoratorBeforeOpen&&decoratorBeforeOpen(e)}static decoratorAfterOpen(e){decoratorAfterOpen&&decoratorAfterOpen(e)}static decoratorIsIgnoreOuterClick(e){return decoratorIsIgnoreOuterClick?decoratorIsIgnoreOuterClick(e):!1}static regVueComponent(e,t){if(Worker.vueConnectors.get(e))throw"Vue component Popup use duplicated id: "+e;Worker.vueConnectors.set(e,t)}static unregVueComponent(e){Worker.vueConnectors.delete(e)}}WorkerEvents.init(Worker,forms.Core);const Worker$1=Worker;exports.PopupWorker=Worker$1,exports.default=Worker$1,Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
|
2
2
|
//# sourceMappingURL=worker.amd.js.map
|
package/popup/worker.js
CHANGED
|
@@ -79,7 +79,7 @@ class Worker {
|
|
|
79
79
|
*/
|
|
80
80
|
static async open(elOpener, options) {
|
|
81
81
|
elOpener.dataset.topPopupOpened = "opened";
|
|
82
|
-
const { default: Popup } = await import("../.chunks/popup-
|
|
82
|
+
const { default: Popup } = await import("../.chunks/popup-70a8c892.es.js");
|
|
83
83
|
if (typeof jQuery == "function") {
|
|
84
84
|
const $elOpener = jQuery(elOpener);
|
|
85
85
|
if ($elOpener.data("aftershow")) {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Плагин requirejs для подгрузки css файлов
|
|
3
|
+
*/
|
|
4
|
+
define({
|
|
5
|
+
load: (name, req, onload) => {
|
|
6
|
+
req(['../utils/css.amd'], ({ insertToPage }) => {
|
|
7
|
+
let cssURL = req.toUrl(name);
|
|
8
|
+
|
|
9
|
+
insertToPage([cssURL]).then(onload).catch(onload.error);
|
|
10
|
+
});
|
|
11
|
+
},
|
|
12
|
+
});
|
package/tabs/tabs.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["
|
|
1
|
+
define(["exports","vue","../.chunks/forms-9972aba2.amd","../require/css.amd!../assets/tabs.css"],function(k,s,e,o){"use strict";if(typeof e>"u")var e=window.Vue;const l={class:e.normalizeClass({"top-tabs":!0})},d={key:0,class:"top-tabs_header"},c={class:"top-tabs_contents"},r=e.defineComponent({__name:"tabs",props:{id:{}},setup(a){return(t,n)=>(e.openBlock(),e.createElementBlock("div",l,[e.renderSlot(t.$slots,"buttons"),t.$slots.header?(e.openBlock(),e.createElementBlock("div",d,[e.renderSlot(t.$slots,"header")])):e.createCommentVNode("",!0),e.createElementVNode("div",c,[e.renderSlot(t.$slots,"contents")])]))}}),b={$style:{"top-tabs":"top-tabs","top-tabs_header":"top-tabs_header","top-tabs_contents":"top-tabs_contents","top-tabs_tabInput":"top-tabs_tabInput","top-tabs_content":"top-tabs_content"}},p=o._export_sfc(r,[["__cssModules",b]]),_=["id","name","value","checked","disabled"],i=["for"],u=e.defineComponent({__name:"tab",props:{tabsId:{},name:{},title:{},active:{type:Boolean},disabled:{type:Boolean}},setup(a){return(t,n)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("input",{type:"radio",class:"top-tabs_tabInput top-unvisible",id:t.tabsId+t.name,name:t.tabsId,value:t.name,checked:t.active,disabled:t.disabled},null,8,_),e.createElementVNode("label",{class:e.normalizeClass({"top-tabs_tabLabel":!0,"top-forms-focusable":!0,"top-disabled":t.disabled}),for:t.tabsId+t.name},[e.renderSlot(t.$slots,"default")],10,i)],64))}}),m={$style:{"top-tabs_tabLabel":"top-tabs_tabLabel","top-tabs_tabInput":"top-tabs_tabInput","top-disabled":"top-disabled"}},f=o._export_sfc(u,[["__cssModules",m]]),$=["data-tabs-name"],h=e.defineComponent({__name:"content",props:{name:{}},setup(a){return(t,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-tabs_content":!0}),"data-tabs-name":t.name},[e.renderSlot(t.$slots,"default")],8,$))}}),y={$style:{"top-tabs_content":"top-tabs_content"}},v=o._export_sfc(h,[["__cssModules",y]]);s.Tabs=p,s.TabsContent=v,s.TabsTab=f,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=tabs.amd.js.map
|
package/tabsView/tabsView.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["
|
|
1
|
+
define(["exports","vue","../popup/popup.amd","../.chunks/forms-9972aba2.amd","../popup/worker.amd","../utils/dom.amd","../require/css.amd!../assets/tabsView.css"],function(Y,c,e,d,u,Z,x){"use strict";if(typeof e>"u")var e=window.Vue;const S=(o,t)=>(e.provide(o,t),t),y=o=>{const t=e.inject(o);if(!t)throw Error("Попытка использовать tabsView state до его инициализации");return t},w=(o,t)=>`top:tabsView:${String(o)}:${t}`,p={init:S,use:y,loadLocalStorge:(o,t)=>{if(!t.key)return;const n=w(o,t.key);try{const s=JSON.parse(localStorage.getItem(n));typeof s==typeof t[o]&&(t[o]=s)}catch{console.warn(new Error(`В localStorage[${n}] не корректный json`))}},addSaverLocalStorge:(o,t)=>{if(!t.key)return;const n=w(o,t.key);e.watch(e.toRef(t,o),()=>{localStorage.setItem(n,JSON.stringify(t[o]))},{immediate:!0})}},f=Symbol(),k=(o,t)=>{const n=e.reactive({key:o.keyForSaveState,showMenuInPopup:o.showMenuInPopup,isShort:!1,activeItemName:e.computed({get(){return o.modelValue},set(s){t("update:modelValue",s)}})});return v(o,n),p.init(f,n)},m=()=>p.use(f),v=(o,t)=>{if(o.isShortable){const n="isShort";p.loadLocalStorge(n,t),p.addSaverLocalStorge(n,t)}},I={key:1,class:"top-ellipsis"},$=e.defineComponent({__name:"menuItem",props:{name:{},href:{},icon:{},disabled:{type:Boolean}},setup(o){const t=o,n=e.computed(()=>s.showMenuInPopup?d.PopupListItem:t.href?"a":"button"),s=m();return(a,l)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(n.value),{class:e.normalizeClass({"top-tabsView_menuItem":!e.unref(s).showMenuInPopup,"top-active":a.name&&e.unref(s).activeItemName===a.name,"top-disabled":a.disabled}),href:a.href,"data-top-icon":a.icon||void 0,disabled:a.disabled||void 0,onClick:l[0]||(l[0]=i=>a.name?e.unref(s).activeItemName=a.name:null)},{default:e.withCtx(()=>[e.unref(s).showMenuInPopup?e.renderSlot(a.$slots,"default",{key:0}):a.$slots.default&&!e.unref(s).isShort?(e.openBlock(),e.createElementBlock("span",I,[e.renderSlot(a.$slots,"default")])):e.createCommentVNode("",!0)]),_:3},8,["class","href","data-top-icon","disabled"]))}}),M={$style:{"top-tabsView_menuItem":"top-tabsView_menuItem","top-active":"top-active","top-forms-option":"top-forms-option","top-formsCaption":"top-formsCaption","top-disabled":"top-disabled"}},_=u._export_sfc($,[["__cssModules",M]]),B={class:"top-tabsView_menuOpener"},g=["data-top-icon"],P={class:"top-ellipsis"},C=e.createElementVNode("div",{class:"top-tabsView_menuOpenerIcon","data-top-icon":""},null,-1),N={class:"top-tabsView_menuList"},E={class:"top-tabsView_menuFooter"},T=e.defineComponent({__name:"menu",props:{isShortable:{type:Boolean}},setup(o){const t=m(),n=e.useSlots(),s=new Map,a=e.computed(()=>{let i=s.get(t.activeItemName);return i||(l(),s.get(t.activeItemName)||null)}),l=()=>{if(!n.default)return;const i=n.default().find(r=>r.key==="_menu");i&&i.children.forEach(r=>{var V,h;if(r.type.__name!==_.__name||!r.props.name)return;const b={title:((h=(V=r.children).default)==null?void 0:h.call(V)[0].children).trim(),icon:r.props.icon};s.set(r.props.name,b)})};return(i,r)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-tabsView_menu":!0,"top-tabsView_menu-inPopup_0":!e.unref(t).showMenuInPopup,"top-tabsView_menu-inPopup_1":e.unref(t).showMenuInPopup,"top-tabsView_menu-short":e.unref(t).isShort&&!e.unref(t).showMenuInPopup})},[e.unref(t).showMenuInPopup?(e.openBlock(),e.createBlock(e.unref(d.Popup),{key:0},{opener:e.withCtx(()=>[e.createElementVNode("div",B,[a.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-tabsView_menuOpenerActiveItem","data-top-icon":a.value.icon},[e.createElementVNode("span",P,e.toDisplayString(a.value.title),1)],8,g)):e.createCommentVNode("",!0),C])]),contentList:e.withCtx(()=>[e.renderSlot(i.$slots,"default")]),_:3})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",N,[e.renderSlot(i.$slots,"default")]),e.createElementVNode("div",E,[i.isShortable?(e.openBlock(),e.createBlock(_,{key:0,icon:e.unref(t).isShort?"":"",onClick:r[0]||(r[0]=b=>e.unref(t).isShort=!e.unref(t).isShort)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(t).isShort?"":"Свернуть")+" ",1)]),_:1},8,["icon"])):e.createCommentVNode("",!0)])],64))],2))}}),L={$style:{"top-tabsView_menu-inPopup_0":"top-tabsView_menu-inPopup_0","top-tabsView_menu-inPopup_1":"top-tabsView_menu-inPopup_1","top-tabsView_menu-short":"top-tabsView_menu-short","top-tabsView_menu":"top-tabsView_menu","top-tabsView_menuOpener":"top-tabsView_menuOpener","top-tabsView_menuOpenerIcon":"top-tabsView_menuOpenerIcon","top-tabsView_menuOpenerActiveItem":"top-tabsView_menuOpenerActiveItem","top-tabsView_menuList":"top-tabsView_menuList","top-tabsView_menuFooter":"top-tabsView_menuFooter","top-tabsView_menuItem":"top-tabsView_menuItem"}},O=u._export_sfc(T,[["__cssModules",L]]),D={class:"top-tabsView_contents"},F=e.defineComponent({__name:"tabsView",props:{modelValue:{},showMenuInPopup:{type:Boolean},isShortable:{type:Boolean,default:!1},keyForSaveState:{}},emits:["update:modelValue"],setup(o,{emit:t}){const n=o,a=k(n,t);return e.watchEffect(()=>{a.showMenuInPopup=n.showMenuInPopup??u.Core.state.isMobile}),(l,i)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-tabsView":!0,"top-tabsView-inPopup":e.unref(a).showMenuInPopup})},[e.createVNode(O,{isShortable:l.isShortable},{default:e.withCtx(()=>[e.renderSlot(l.$slots,"menu")]),_:3},8,["isShortable"]),e.createElementVNode("div",D,[e.renderSlot(l.$slots,"contents")])],2))}}),j={$style:{"top-tabsView":"top-tabsView","top-tabsView-inPopup":"top-tabsView-inPopup","top-tabsView_contents":"top-tabsView_contents"}},z=u._export_sfc(F,[["__cssModules",j]]),K={"top-tabsView_menuDelimeter":"top-tabsView_menuDelimeter"},A={},q={class:"top-tabsView_menuDelimeter"};function J(o,t){return e.openBlock(),e.createElementBlock("div",q)}const R={$style:K},G=u._export_sfc(A,[["render",J],["__cssModules",R]]),H=e.defineComponent({__name:"menuTitle",props:{isSubtitle:{type:Boolean}},setup(o){const t=m();return(n,s)=>e.unref(t).showMenuInPopup?(e.openBlock(),e.createBlock(e.unref(d.PopupListItem),{key:0,type:"title"},{default:e.withCtx(()=>[e.renderSlot(n.$slots,"default")]),_:3})):e.unref(t).isShort?(e.openBlock(),e.createBlock(G,{key:1})):(e.openBlock(),e.createElementBlock("div",{key:2,class:e.normalizeClass({"top-tabsView_menuTitle":!0,"top-tabsView_menuTitle-subtitle":n.isSubtitle})},[e.renderSlot(n.$slots,"default")],2))}}),Q={$style:{"top-tabsView_menuTitle":"top-tabsView_menuTitle","top-tabsView_menuTitle-subtitle":"top-tabsView_menuTitle-subtitle"}},U=u._export_sfc(H,[["__cssModules",Q]]),W={key:0,class:"top-tabsView_content"},X=e.defineComponent({__name:"content",props:{name:{}},setup(o){const t=m();return(n,s)=>e.unref(t).activeItemName===n.name?(e.openBlock(),e.createElementBlock("div",W,[e.renderSlot(n.$slots,"default")])):e.createCommentVNode("",!0)}});c.TabsView=z,c.TabsViewContent=X,c.TabsViewMenuItem=_,c.TabsViewMenuTitle=U,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=tabsView.amd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabsView.amd.js","sources":["../../src/components/stateManager.ts","../../src/components/tabsView/tabsView/state.ts","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/menuDelimeter.vue","../../src/components/tabsView/tabsView/menuTitle.vue","../../src/components/tabsView/tabsView/content.vue"],"sourcesContent":["import { provide, inject, toRef, watch } from 'vue';\r\nimport type { InjectionKey } from 'vue';\r\nimport { injectionKey } from '@/components/tabsView/tabsView/state';\r\n\r\n/**\r\n * State - интерфейс с общими параметрами для состояния компоента\r\n */\r\nexport interface State {\r\n\t/**\r\n\t * Ключ для сохранения состояния\r\n\t *\r\n\t * Может быть одинаковый для разных компонентов\r\n\t *\r\n\t * Не может быть реактивным\r\n\t *\r\n\t * Состояния сохраняются в localStorage с префиксом top\r\n\t */\r\n\tkey?: string;\r\n}\r\n\r\n/**\r\n * Инициировать State компонента\r\n * @param key - InjectionKey для provide / inject в области компонента\r\n * @param state\r\n * @return - State компонента\r\n */\r\nconst init = <T>(injectionKey: InjectionKey<T>, state: T): T => {\r\n\tprovide(injectionKey, state);\r\n\r\n\treturn state;\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n * @param key - InjectionKey для provide / inject в области компонента\r\n * @return - State компонента\r\n */\r\nconst use = <T>(injectionKey: InjectionKey<T>): T => {\r\n\tconst state = inject(injectionKey);\r\n\r\n\tif (!state) {\r\n\t\tthrow Error('Попытка использовать tabsView state до его инициализации');\r\n\t}\r\n\r\n\treturn state;\r\n};\r\n\r\n/**\r\n * Сгенерировать имя для сохранения данных в localStorage\r\n * @param stateName - имя свойства состояния\r\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\r\n */\r\nconst genStorageKey = <T extends State>(stateName: keyof T, stateKey: string): string => {\r\n\tconst stateNameString = String(stateName);\r\n\r\n\treturn `top:tabsView:${stateNameString}:${stateKey}`;\r\n};\r\n\r\n/**\r\n * Загрузить состояние\r\n * @param stateName - имя свойства состояния\r\n * @param state\r\n */\r\nconst loadLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\r\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!state.key) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, state.key);\r\n\r\n\ttry {\r\n\t\tconst localStorageValue: typeof state[keyof typeof state] = JSON.parse(localStorage.getItem(localStorageKey) as string);\r\n\r\n\t\tif (typeof localStorageValue === typeof state[stateName]) {\r\n\t\t\tstate[stateName] = localStorageValue;\r\n\t\t}\r\n\t} catch (e) {\r\n\t\tconsole.warn(new Error(`В localStorage[${localStorageKey}] не корректный json`));\r\n\t}\r\n};\r\n\r\n/**\r\n * Добавить автосохранение состояние при его изменении\r\n * @param stateName - имя свойства состояния\r\n * @param state\r\n */\r\nconst addSaverLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\r\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!state.key) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, state.key);\r\n\r\n\twatch(toRef(state, stateName), () => {\r\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(state[stateName]));\r\n\t}, { immediate: true });\r\n};\r\n\r\nexport default {\r\n\tinit,\r\n\tuse,\r\n\tloadLocalStorge,\r\n\taddSaverLocalStorge,\r\n};","import { reactive, computed } from 'vue';\r\nimport type { InjectionKey } from 'vue';\r\nimport type { State } from './tabsView';\r\nimport type { Emits, Props } from './tabsView';\r\nimport stateManager from '@/components/stateManager';\r\n\r\nexport const injectionKey = Symbol() as InjectionKey<State>;\r\n\r\n/**\r\n * Инициировать State компонента\r\n * @param props\r\n * @param emit\r\n */\r\nexport const initState = (props: Props, emit: Emits): State => {\r\n\tconst state: State = reactive({\r\n\t\tkey: props.keyForSaveState,\r\n\t\tshowMenuInPopup: props.showMenuInPopup,\r\n\t\tisShort: false,\r\n\t\tactiveItemName: computed({\r\n\t\t\tget() {\r\n\t\t\t\treturn props.modelValue;\r\n\t\t\t},\r\n\t\t\tset(value) {\r\n\t\t\t\temit('update:modelValue', value);\r\n\t\t\t},\r\n\t\t}),\r\n\t});\r\n\r\n\tinitLocalStorge(props, state);\r\n\r\n\treturn stateManager.init(injectionKey, state);\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n */\r\nexport const useState = () => {\r\n\treturn stateManager.use(injectionKey);\r\n};\r\n\r\n/**\r\n * Инициировать работу LocalStorge\r\n * @param props\r\n * @param state\r\n */\r\nconst initLocalStorge = (props: Props, state: State): void => {\r\n\tif (props.isShortable) {\r\n\t\tconst stateName = 'isShort';\r\n\r\n\t\tstateManager.loadLocalStorge(stateName, state);\r\n\t\tstateManager.addSaverLocalStorge(stateName, state);\r\n\t}\r\n};","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport { useState } from './state';\r\nimport type { PropsMenuItem, State } from './tabsView';\r\nimport { PopupListItem } from '../../popup/popup';\r\n\r\nconst props = defineProps<PropsMenuItem>();\r\n\r\nconst componentName = computed(() => {\r\n\tif (state.showMenuInPopup) {\r\n\t\treturn PopupListItem;\r\n\t}\r\n\r\n\treturn props.href ? 'a' : 'button';\r\n});\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<component\r\n\t\t:is=\"componentName\"\r\n\t\t:class=\"{\r\n\t\t\t['top-tabsView_menuItem']: !state.showMenuInPopup,\r\n\t\t\t['top-active']: name && state.activeItemName === name,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t}\"\r\n\t\t:href=\"href\"\r\n\t\t:data-top-icon=\"icon || undefined\"\r\n\t\t:disabled=\"disabled || undefined\"\r\n\t\t@click=\"name ? state.activeItemName = name : null\"\r\n\t>\r\n\t\t<slot v-if=\"state.showMenuInPopup\"></slot>\r\n\r\n\t\t<span\r\n\t\t\tv-else-if=\"$slots.default && !state.isShort\"\r\n\t\t\tclass=\"top-ellipsis\"\r\n\t\t>\r\n\t\t\t<slot></slot>\r\n\t\t</span>\r\n\t</component>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuItem {\r\n\t--top-icon-color: var(--color-text-1);\r\n\t--top-icon-width: calc(var(--top-icon-size));\r\n\r\n\tcursor: pointer;\r\n\tbox-sizing: border-box;\r\n\r\n\tborder: none;\r\n\tborder-radius: var(--top-radius-2);\r\n\tpadding: var(--top-padding-2);\r\n\tbackground: transparent;\r\n\theight: 40px;\r\n\r\n\tcolor: var(--color-text-1);\r\n\ttext-align: left;\r\n\ttext-decoration: none;\r\n\twhite-space: nowrap;\r\n\r\n\tdisplay: flex;\r\n\tgap: var(--top-gap-2);\r\n\talign-items: center;\r\n\tjustify-content: flex-start;\r\n\ttransition: background var(--transition);\r\n}\r\n\r\n.top-tabsView_menuItem:hover {\r\n\tbackground: var(--color-secondary-2-opacity);\r\n}\r\n\r\n.top-tabsView_menuItem.top-active {\r\n\t--top-icon-color: var(--color-primary);\r\n\r\n\tcursor: unset;\r\n\tbackground: var(--color-bg-3);\r\n\tcolor: var(--color-primary);\r\n}\r\n\r\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\r\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\r\n\topacity: unset;\r\n\tfilter: unset;\r\n}\r\n\r\n.top-tabsView_menuItem.top-disabled {\r\n\t--top-icon-color: var(--color-text-4);\r\n\r\n\tcolor: var(--color-text-4);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed, useSlots } from 'vue';\r\nimport type { ComputedRef } from '@vue/reactivity';\r\nimport { Popup } from '../../popup/popup';\r\n\r\nimport type { PropsMenu, PropsMenuItem, MenuItem } from './tabsView';\r\nimport { useState } from './state';\r\nimport TabsViewMenuItem from './menuItem.vue';\r\n\r\ndefineProps<PropsMenu>();\r\n\r\nconst state = useState();\r\n\r\nconst slots = useSlots();\r\n\r\n// словарь испоьзуется для оптимизации получения нужного menuItem\r\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\r\n\r\n// activeMenuItem нужен для вывода текста активной вкладки в меню с popup\r\n// смена slot, например смена языка, требует повторного выполнения genMenuItemByName()\r\nconst activeMenuItem: ComputedRef<MenuItem | null> = computed(() => {\r\n\tlet menuItem = menuItemByName.get(state.activeItemName);\r\n\tif (menuItem) return menuItem;\r\n\r\n\tgenMenuItemByName();\r\n\r\n\treturn menuItemByName.get(state.activeItemName) || null;\r\n});\r\n\r\n// сгенерировать словарь с menuItem, по элементам в slot\r\nconst genMenuItemByName = () => {\r\n\tif (!slots.default) return;\r\n\r\n\tconst component: any = slots.default().find(item => item.key === '_menu');\r\n\tif (!component) return;\r\n\r\n\tcomponent.children.forEach((subComponent: any) => {\r\n\t\tif (subComponent.type.__name !== TabsViewMenuItem.__name) return;\r\n\t\tif (!subComponent.props.name) return;\r\n\r\n\t\tconst menuItem = {\r\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\r\n\t\t\ticon: subComponent.props.icon,\r\n\t\t};\r\n\r\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\r\n\t});\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menu': true,\r\n\t\t\t'top-tabsView_menu-inPopup_0': !state.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-inPopup_1': state.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-short': state.isShort && !state.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<!-- Спрятать меню под кнопку в popup -->\r\n\t\t<Popup v-if=\"state.showMenuInPopup\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\r\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\r\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\r\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\r\n\t\t\t\t</div>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</template>\r\n\t\t</Popup>\r\n\r\n\t\t<!-- Отобразить меню на старнице -->\r\n\t\t<template v-else>\r\n\t\t\t<div class=\"top-tabsView_menuList\">\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"top-tabsView_menuFooter\">\r\n\t\t\t\t<TabsViewMenuItem\r\n\t\t\t\t\tv-if=\"isShortable\"\r\n\t\t\t\t\t:icon=\"state.isShort ? '' : ''\"\r\n\t\t\t\t\t@click=\"state.isShort = !state.isShort\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ state.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\r\n\t\t\t\t</TabsViewMenuItem>\r\n\t\t\t</div>\r\n\t\t</template>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menu-inPopup_0 {\r\n\tbox-sizing: border-box;\r\n\twidth: var(--top-tabsView-menu-width);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: space-between;\r\n}\r\n\r\n.top-tabsView_menu-inPopup_1 {\r\n\tborder-bottom: 1px solid var(--color-line-2-opacity);\r\n}\r\n\r\n.top-tabsView_menu-short {\r\n\twidth: auto;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener {\r\n\tdisplay: flex;\r\n\tjustify-content: flex-end;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\r\n\tbackground: var(--color-secondary-opacity);\r\n}\r\n\r\n.top-tabsView_menuOpenerIcon { display: flex; }\r\n\r\n.top-tabsView_menuOpenerActiveItem {\r\n\t--top-forms-padding: 0px;\r\n\r\n\tbox-sizing: border-box;\r\n\tpadding: var(--top-padding-2);\r\n\tmax-width: calc(100% - var(--top-forms-base-height));\r\n\twhite-space: nowrap;\r\n\tflex-grow: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: var(--top-padding-2);\r\n}\r\n\r\n.top-tabsView_menuList,\r\n.top-tabsView_menuFooter{\r\n\tpadding: var(--top-padding-2);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tgap: var(--top-gap-2);\r\n}\r\n\r\n.top-tabsView_menuList{\r\n\toverflow-y: auto;\r\n}\r\n\r\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem{\r\n\t--top-icon-width: 100%;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { watchEffect } from 'vue';\r\nimport type { Props, Emits } from './tabsView';\r\nimport { initState } from './state';\r\nimport TabsViewMenu from './menu.vue';\r\nimport Core from '@/core/core/core';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tisShortable: false,\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst state = initState(props, emit);\r\n\r\nwatchEffect(() => {\r\n\tstate.showMenuInPopup = props.showMenuInPopup ?? Core.state.isMobile;\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView': true,\r\n\t\t\t'top-tabsView-inPopup': state.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<TabsViewMenu :isShortable=\"isShortable\">\r\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\r\n\t\t\t<slot name=\"menu\"></slot>\r\n\t\t</TabsViewMenu>\r\n\r\n\t\t<div class=\"top-tabsView_contents\">\r\n\t\t\t<!-- @slot Контент вкладок, ожидает передачу компонентов TabsViewContent, в слоте необходимо предусмотреть вывод неободимого компонента в зависимости от активной вкладки -->\r\n\t\t\t<slot name=\"contents\"></slot>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n:root {\r\n\t--top-tabsView-menu-width: 220px;\r\n}\r\n\r\n.top-tabsView {\r\n\tbackground: var(--color-bg-2);\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n}\r\n\r\n.top-tabsView-inPopup {\r\n\tbackground: var(--color-bg-3);\r\n\tflex-direction: column;\r\n}\r\n\r\n.top-tabsView_contents {\r\n\tborder-radius: var(--top-radius-4);\r\n\tbackground: var(--color-bg-3);\r\n\tpadding: var(--top-padding-4);\r\n\tflex-grow: 1;\r\n\toverflow: auto;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuDelimeter {\r\n\tpadding: var(--top-padding-1) 0;\r\n\tdisplay: flex;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:before {\r\n\tcontent: \"\";\r\n\theight: 2px;\r\n\tbackground: var(--color-line-2-opacity);\r\n\tflex-grow: 1;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:first-child,\r\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\r\n\tdisplay: none;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { useState } from './state';\r\nimport type { PropsMenuTitle, State } from './tabsView';\r\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\r\nimport { PopupListItem } from '../../popup/popup';\r\n\r\ndefineProps<PropsMenuTitle>();\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<PopupListItem\r\n\t\tv-if=\"state.showMenuInPopup\"\r\n\t\ttype=\"title\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</PopupListItem>\r\n\r\n\t<TabsViewMenuDelimeter v-else-if=\"state.isShort\"/>\r\n\r\n\t<div\r\n\t\tv-else\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menuTitle': true,\r\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\r\n\t\t}\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuTitle {\r\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\r\n\tfont-weight: 600;\r\n}\r\n\r\n.top-tabsView_menuTitle-subtitle {\r\n\tpadding-top: var(--top-padding-1);\r\n\tfont-size: 12px;\r\n\tfont-weight: 400;\r\n\tcolor: var(--color-text-2);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { useState } from './state';\r\nimport type { PropsContent } from './tabsView';\r\n\r\ndefineProps<PropsContent>();\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\tv-if=\"state.activeItemName === name\"\r\n\t\tclass=\"top-tabsView_content\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n\r\n</style>"],"names":["init","injectionKey2","state","vue","use","genStorageKey","stateName","stateKey","stateManager","localStorageValue","localStorageKey","injectionKey","initState","props","emit","value","initLocalStorge","__props","componentName","useState","slots","menuItemByName","activeMenuItem","menuItem","component","item","subComponent","_b","_a","__emit","forms","_sfc_render","_ctx","_cache"],"mappings":"+QA0BA,MAAAA,EAAA,CAAAC,EAAAC,KACCC,EAAA,QAAAF,EAAAC,CAAA,KAUDE,EAAAH,GAAA,CACC,MAAAC,EAAAC,EAAA,OAAAF,CAAA,QAGC,MAAA,MAAA,0DAAA,UAIF,EAOAI,EAAA,CAAAC,EAAAC,oBACC,OAAAD,CAAA,SA2CDE,EAAA,CAAe,KAAAR,EACd,IAAAI,EACA,gBAnCD,CAAAE,EAAAJ,IAAA,CAEC,GAAA,CAAAA,EAAA,IAAgB,0BAIhB,GAAA,CACC,MAAAO,EAAA,KAAA,MAAA,aAAA,QAAAC,CAAA,CAAA,0BAGCR,EAAAI,CAAA,EAAAG,SAGD,QAAA,KAAA,IAAA,MAAA,kBAAAC,CAAA,sBAAA,CAAA,EAEF,EAqBC,oBAdD,CAAAJ,EAAAJ,IAAA,CAEC,GAAA,CAAAA,EAAA,IAAgB,oDAKf,aAAA,QAAAQ,EAAA,KAAA,UAAAR,EAAAI,CAAA,CAAA,CAAA,CAAsE,EAAA,CAAA,UAAA,EAAA,CAAA,CAExE,GCxFOK,EAAA,OAAA,EAOMC,EAAA,CAAAC,EAAAC,IAAA,CACZ,MAAAZ,EAAAC,EAAA,SAAA,CAA8B,IAAAU,EAAA,gBAClB,gBAAAA,EAAA,sDAGc,KAAA,CAEvB,OAAAA,EAAA,mBAGAC,EAAA,oBAAAC,CAAA,EACD,CAAA,CACA,CAAA,EAGF,OAAAC,EAAAH,EAAAX,CAAA,aAGD,QAMCM,EAAA,IAAAG,CAAA,EAQDK,EAAA,CAAAH,EAAAX,IAAA,CACC,GAAAW,EAAA,YAAA,CACC,MAAAP,EAAA,qMCzCF,MAAAO,EAAAI,EAEAC,EAAAf,EAAA,SAAA,IACCD,EAAA,mDAI0B,EAG3BA,EAAAiB,EAAA,stCCLA,MAAAjB,EAAAiB,EAAA,EAEAC,EAAAjB,EAAA,SAAA,EAGAkB,EAAA,IAAA,IAIAC,EAAAnB,EAAA,SAAA,IAAA,+BAEC,OAAAoB,sCAImD,CAAA,SAKnD,GAAA,CAAAH,EAAA,QAAoB,OAEpB,MAAAI,EAAAJ,EAAA,QAAA,EAAA,KAAAK,GAAAA,EAAA,MAAA,OAAA,oCAKC,6BAAA,CAAAC,EAAA,MAAA,KAA8B,gBAEb,QAAAC,GAAAC,EAAAF,EAAA,UAAA,UAAA,YAAAC,EAAA,KAAAC,GAAA,GAAA,UAAA,KAAA,EACsD,KAAAF,EAAA,MAAA,IAC7C,EAG1BL,EAAA,IAAAK,EAAA,MAAA,KAAAH,CAAA,CAAoD,CAAA,CACpD,4+DCvCF,MAAAV,EAAAI,QAIAY,6BAKC3B,EAAA,gBAAAW,EAAA,iBAAAiB,EAAA,KAAA,MAAA,QAA4D,CAAA,qnBCX5D,SAAAC,EAAAC,EAAAC,EAAA,+MCGD,MAAA/B,EAAAiB,EAAA,qsBCFA,MAAAjB,EAAAiB,EAAA"}
|
|
1
|
+
{"version":3,"file":"tabsView.amd.js","sources":["../../src/components/stateManager.ts","../../src/components/tabsView/tabsView/state.ts","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/menuDelimeter.vue","../../src/components/tabsView/tabsView/menuTitle.vue","../../src/components/tabsView/tabsView/content.vue"],"sourcesContent":["import { provide, inject, toRef, watch } from 'vue';\r\nimport type { InjectionKey } from 'vue';\r\nimport { injectionKey } from '@/components/tabsView/tabsView/state';\r\n\r\n/**\r\n * State - интерфейс с общими параметрами для состояния компоента\r\n */\r\nexport interface State {\r\n\t/**\r\n\t * Ключ для сохранения состояния\r\n\t *\r\n\t * Может быть одинаковый для разных компонентов\r\n\t *\r\n\t * Не может быть реактивным\r\n\t *\r\n\t * Состояния сохраняются в localStorage с префиксом top\r\n\t */\r\n\tkey?: string;\r\n}\r\n\r\n/**\r\n * Инициировать State компонента\r\n * @param key - InjectionKey для provide / inject в области компонента\r\n * @param state\r\n * @return - State компонента\r\n */\r\nconst init = <T>(injectionKey: InjectionKey<T>, state: T): T => {\r\n\tprovide(injectionKey, state);\r\n\r\n\treturn state;\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n * @param key - InjectionKey для provide / inject в области компонента\r\n * @return - State компонента\r\n */\r\nconst use = <T>(injectionKey: InjectionKey<T>): T => {\r\n\tconst state = inject(injectionKey);\r\n\r\n\tif (!state) {\r\n\t\tthrow Error('Попытка использовать tabsView state до его инициализации');\r\n\t}\r\n\r\n\treturn state;\r\n};\r\n\r\n/**\r\n * Сгенерировать имя для сохранения данных в localStorage\r\n * @param stateName - имя свойства состояния\r\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\r\n */\r\nconst genStorageKey = <T extends State>(stateName: keyof T, stateKey: string): string => {\r\n\tconst stateNameString = String(stateName);\r\n\r\n\treturn `top:tabsView:${stateNameString}:${stateKey}`;\r\n};\r\n\r\n/**\r\n * Загрузить состояние\r\n * @param stateName - имя свойства состояния\r\n * @param state\r\n */\r\nconst loadLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\r\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!state.key) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, state.key);\r\n\r\n\ttry {\r\n\t\tconst localStorageValue: typeof state[keyof typeof state] = JSON.parse(localStorage.getItem(localStorageKey) as string);\r\n\r\n\t\tif (typeof localStorageValue === typeof state[stateName]) {\r\n\t\t\tstate[stateName] = localStorageValue;\r\n\t\t}\r\n\t} catch (e) {\r\n\t\tconsole.warn(new Error(`В localStorage[${localStorageKey}] не корректный json`));\r\n\t}\r\n};\r\n\r\n/**\r\n * Добавить автосохранение состояние при его изменении\r\n * @param stateName - имя свойства состояния\r\n * @param state\r\n */\r\nconst addSaverLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\r\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!state.key) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, state.key);\r\n\r\n\twatch(toRef(state, stateName), () => {\r\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(state[stateName]));\r\n\t}, { immediate: true });\r\n};\r\n\r\nexport default {\r\n\tinit,\r\n\tuse,\r\n\tloadLocalStorge,\r\n\taddSaverLocalStorge,\r\n};","import { reactive, computed } from 'vue';\r\nimport type { InjectionKey } from 'vue';\r\nimport type { State } from './tabsView';\r\nimport type { Emits, Props } from './tabsView';\r\nimport stateManager from '@/components/stateManager';\r\n\r\nexport const injectionKey = Symbol() as InjectionKey<State>;\r\n\r\n/**\r\n * Инициировать State компонента\r\n * @param props\r\n * @param emit\r\n */\r\nexport const initState = (props: Props, emit: Emits): State => {\r\n\tconst state: State = reactive({\r\n\t\tkey: props.keyForSaveState,\r\n\t\tshowMenuInPopup: props.showMenuInPopup,\r\n\t\tisShort: false,\r\n\t\tactiveItemName: computed({\r\n\t\t\tget() {\r\n\t\t\t\treturn props.modelValue;\r\n\t\t\t},\r\n\t\t\tset(value) {\r\n\t\t\t\temit('update:modelValue', value);\r\n\t\t\t},\r\n\t\t}),\r\n\t});\r\n\r\n\tinitLocalStorge(props, state);\r\n\r\n\treturn stateManager.init(injectionKey, state);\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n */\r\nexport const useState = () => {\r\n\treturn stateManager.use(injectionKey);\r\n};\r\n\r\n/**\r\n * Инициировать работу LocalStorge\r\n * @param props\r\n * @param state\r\n */\r\nconst initLocalStorge = (props: Props, state: State): void => {\r\n\tif (props.isShortable) {\r\n\t\tconst stateName = 'isShort';\r\n\r\n\t\tstateManager.loadLocalStorge(stateName, state);\r\n\t\tstateManager.addSaverLocalStorge(stateName, state);\r\n\t}\r\n};","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport { useState } from './state';\r\nimport type { PropsMenuItem, State } from './tabsView';\r\nimport { PopupListItem } from '../../popup/popup';\r\n\r\nconst props = defineProps<PropsMenuItem>();\r\n\r\nconst componentName = computed(() => {\r\n\tif (state.showMenuInPopup) {\r\n\t\treturn PopupListItem;\r\n\t}\r\n\r\n\treturn props.href ? 'a' : 'button';\r\n});\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<component\r\n\t\t:is=\"componentName\"\r\n\t\t:class=\"{\r\n\t\t\t['top-tabsView_menuItem']: !state.showMenuInPopup,\r\n\t\t\t['top-active']: name && state.activeItemName === name,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t}\"\r\n\t\t:href=\"href\"\r\n\t\t:data-top-icon=\"icon || undefined\"\r\n\t\t:disabled=\"disabled || undefined\"\r\n\t\t@click=\"name ? state.activeItemName = name : null\"\r\n\t>\r\n\t\t<slot v-if=\"state.showMenuInPopup\"></slot>\r\n\r\n\t\t<span\r\n\t\t\tv-else-if=\"$slots.default && !state.isShort\"\r\n\t\t\tclass=\"top-ellipsis\"\r\n\t\t>\r\n\t\t\t<slot></slot>\r\n\t\t</span>\r\n\t</component>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuItem {\r\n\t--top-icon-color: var(--color-text-1);\r\n\t--top-icon-width: calc(var(--top-icon-size));\r\n\r\n\tcursor: pointer;\r\n\tbox-sizing: border-box;\r\n\r\n\tborder: none;\r\n\tborder-radius: var(--top-radius-2);\r\n\tpadding: var(--top-padding-2);\r\n\tbackground: transparent;\r\n\theight: 40px;\r\n\r\n\tcolor: var(--color-text-1);\r\n\ttext-align: left;\r\n\ttext-decoration: none;\r\n\twhite-space: nowrap;\r\n\r\n\tdisplay: flex;\r\n\tgap: var(--top-gap-2);\r\n\talign-items: center;\r\n\tjustify-content: flex-start;\r\n\ttransition: background var(--transition);\r\n}\r\n\r\n.top-tabsView_menuItem:hover {\r\n\tbackground: var(--color-secondary-2-opacity);\r\n}\r\n\r\n.top-tabsView_menuItem.top-active {\r\n\t--top-icon-color: var(--color-primary);\r\n\r\n\tcursor: unset;\r\n\tbackground: var(--color-bg-3);\r\n\tcolor: var(--color-primary);\r\n}\r\n\r\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\r\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\r\n\topacity: unset;\r\n\tfilter: unset;\r\n}\r\n\r\n.top-tabsView_menuItem.top-disabled {\r\n\t--top-icon-color: var(--color-text-4);\r\n\r\n\tcolor: var(--color-text-4);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed, useSlots } from 'vue';\r\nimport type { ComputedRef } from '@vue/reactivity';\r\nimport { Popup } from '../../popup/popup';\r\n\r\nimport type { PropsMenu, PropsMenuItem, MenuItem } from './tabsView';\r\nimport { useState } from './state';\r\nimport TabsViewMenuItem from './menuItem.vue';\r\n\r\ndefineProps<PropsMenu>();\r\n\r\nconst state = useState();\r\n\r\nconst slots = useSlots();\r\n\r\n// словарь испоьзуется для оптимизации получения нужного menuItem\r\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\r\n\r\n// activeMenuItem нужен для вывода текста активной вкладки в меню с popup\r\n// смена slot, например смена языка, требует повторного выполнения genMenuItemByName()\r\nconst activeMenuItem: ComputedRef<MenuItem | null> = computed(() => {\r\n\tlet menuItem = menuItemByName.get(state.activeItemName);\r\n\tif (menuItem) return menuItem;\r\n\r\n\tgenMenuItemByName();\r\n\r\n\treturn menuItemByName.get(state.activeItemName) || null;\r\n});\r\n\r\n// сгенерировать словарь с menuItem, по элементам в slot\r\nconst genMenuItemByName = () => {\r\n\tif (!slots.default) return;\r\n\r\n\tconst component: any = slots.default().find(item => item.key === '_menu');\r\n\tif (!component) return;\r\n\r\n\tcomponent.children.forEach((subComponent: any) => {\r\n\t\tif (subComponent.type.__name !== TabsViewMenuItem.__name) return;\r\n\t\tif (!subComponent.props.name) return;\r\n\r\n\t\tconst menuItem = {\r\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\r\n\t\t\ticon: subComponent.props.icon,\r\n\t\t};\r\n\r\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\r\n\t});\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menu': true,\r\n\t\t\t'top-tabsView_menu-inPopup_0': !state.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-inPopup_1': state.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-short': state.isShort && !state.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<!-- Спрятать меню под кнопку в popup -->\r\n\t\t<Popup v-if=\"state.showMenuInPopup\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\r\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\r\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\r\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\r\n\t\t\t\t</div>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</template>\r\n\t\t</Popup>\r\n\r\n\t\t<!-- Отобразить меню на старнице -->\r\n\t\t<template v-else>\r\n\t\t\t<div class=\"top-tabsView_menuList\">\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"top-tabsView_menuFooter\">\r\n\t\t\t\t<TabsViewMenuItem\r\n\t\t\t\t\tv-if=\"isShortable\"\r\n\t\t\t\t\t:icon=\"state.isShort ? '' : ''\"\r\n\t\t\t\t\t@click=\"state.isShort = !state.isShort\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ state.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\r\n\t\t\t\t</TabsViewMenuItem>\r\n\t\t\t</div>\r\n\t\t</template>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menu-inPopup_0 {\r\n\tbox-sizing: border-box;\r\n\twidth: var(--top-tabsView-menu-width);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: space-between;\r\n}\r\n\r\n.top-tabsView_menu-inPopup_1 {\r\n\tborder-bottom: 1px solid var(--color-line-2-opacity);\r\n}\r\n\r\n.top-tabsView_menu-short {\r\n\twidth: auto;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener {\r\n\tdisplay: flex;\r\n\tjustify-content: flex-end;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\r\n\tbackground: var(--color-secondary-opacity);\r\n}\r\n\r\n.top-tabsView_menuOpenerIcon { display: flex; }\r\n\r\n.top-tabsView_menuOpenerActiveItem {\r\n\t--top-forms-padding: 0px;\r\n\r\n\tbox-sizing: border-box;\r\n\tpadding: var(--top-padding-2);\r\n\tmax-width: calc(100% - var(--top-forms-base-height));\r\n\twhite-space: nowrap;\r\n\tflex-grow: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: var(--top-padding-2);\r\n}\r\n\r\n.top-tabsView_menuList,\r\n.top-tabsView_menuFooter{\r\n\tpadding: var(--top-padding-2);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tgap: var(--top-gap-2);\r\n}\r\n\r\n.top-tabsView_menuList{\r\n\toverflow-y: auto;\r\n}\r\n\r\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem{\r\n\t--top-icon-width: 100%;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { watchEffect } from 'vue';\r\nimport type { Props, Emits } from './tabsView';\r\nimport { initState } from './state';\r\nimport TabsViewMenu from './menu.vue';\r\nimport Core from '@/core/core/core';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tisShortable: false,\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst state = initState(props, emit);\r\n\r\nwatchEffect(() => {\r\n\tstate.showMenuInPopup = props.showMenuInPopup ?? Core.state.isMobile;\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView': true,\r\n\t\t\t'top-tabsView-inPopup': state.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<TabsViewMenu :isShortable=\"isShortable\">\r\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\r\n\t\t\t<slot name=\"menu\"></slot>\r\n\t\t</TabsViewMenu>\r\n\r\n\t\t<div class=\"top-tabsView_contents\">\r\n\t\t\t<!-- @slot Контент вкладок, ожидает передачу компонентов TabsViewContent, в слоте необходимо предусмотреть вывод неободимого компонента в зависимости от активной вкладки -->\r\n\t\t\t<slot name=\"contents\"></slot>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n:root {\r\n\t--top-tabsView-menu-width: 220px;\r\n}\r\n\r\n.top-tabsView {\r\n\tbackground: var(--color-bg-2);\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n}\r\n\r\n.top-tabsView-inPopup {\r\n\tbackground: var(--color-bg-3);\r\n\tflex-direction: column;\r\n}\r\n\r\n.top-tabsView_contents {\r\n\tborder-radius: var(--top-radius-4);\r\n\tbackground: var(--color-bg-3);\r\n\tpadding: var(--top-padding-4);\r\n\tflex-grow: 1;\r\n\toverflow: auto;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuDelimeter {\r\n\tpadding: var(--top-padding-1) 0;\r\n\tdisplay: flex;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:before {\r\n\tcontent: \"\";\r\n\theight: 2px;\r\n\tbackground: var(--color-line-2-opacity);\r\n\tflex-grow: 1;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:first-child,\r\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\r\n\tdisplay: none;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { useState } from './state';\r\nimport type { PropsMenuTitle, State } from './tabsView';\r\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\r\nimport { PopupListItem } from '../../popup/popup';\r\n\r\ndefineProps<PropsMenuTitle>();\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<PopupListItem\r\n\t\tv-if=\"state.showMenuInPopup\"\r\n\t\ttype=\"title\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</PopupListItem>\r\n\r\n\t<TabsViewMenuDelimeter v-else-if=\"state.isShort\"/>\r\n\r\n\t<div\r\n\t\tv-else\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menuTitle': true,\r\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\r\n\t\t}\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuTitle {\r\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\r\n\tfont-weight: 600;\r\n}\r\n\r\n.top-tabsView_menuTitle-subtitle {\r\n\tpadding-top: var(--top-padding-1);\r\n\tfont-size: 12px;\r\n\tfont-weight: 400;\r\n\tcolor: var(--color-text-2);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { useState } from './state';\r\nimport type { PropsContent } from './tabsView';\r\n\r\ndefineProps<PropsContent>();\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\tv-if=\"state.activeItemName === name\"\r\n\t\tclass=\"top-tabsView_content\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n\r\n</style>"],"names":["init","injectionKey2","state","vue","use","genStorageKey","stateName","stateKey","stateManager","localStorageValue","localStorageKey","injectionKey","initState","props","emit","value","initLocalStorge","__props","componentName","useState","slots","menuItemByName","activeMenuItem","menuItem","component","item","subComponent","_b","_a","__emit","forms","_sfc_render","_ctx","_cache"],"mappings":"yOA0BA,MAAAA,EAAA,CAAAC,EAAAC,KACCC,EAAA,QAAAF,EAAAC,CAAA,KAUDE,EAAAH,GAAA,CACC,MAAAC,EAAAC,EAAA,OAAAF,CAAA,QAGC,MAAA,MAAA,0DAAA,UAIF,EAOAI,EAAA,CAAAC,EAAAC,oBACC,OAAAD,CAAA,SA2CDE,EAAA,CAAe,KAAAR,EACd,IAAAI,EACA,gBAnCD,CAAAE,EAAAJ,IAAA,CAEC,GAAA,CAAAA,EAAA,IAAgB,0BAIhB,GAAA,CACC,MAAAO,EAAA,KAAA,MAAA,aAAA,QAAAC,CAAA,CAAA,0BAGCR,EAAAI,CAAA,EAAAG,SAGD,QAAA,KAAA,IAAA,MAAA,kBAAAC,CAAA,sBAAA,CAAA,EAEF,EAqBC,oBAdD,CAAAJ,EAAAJ,IAAA,CAEC,GAAA,CAAAA,EAAA,IAAgB,oDAKf,aAAA,QAAAQ,EAAA,KAAA,UAAAR,EAAAI,CAAA,CAAA,CAAA,CAAsE,EAAA,CAAA,UAAA,EAAA,CAAA,CAExE,GCxFOK,EAAA,OAAA,EAOMC,EAAA,CAAAC,EAAAC,IAAA,CACZ,MAAAZ,EAAAC,EAAA,SAAA,CAA8B,IAAAU,EAAA,gBAClB,gBAAAA,EAAA,sDAGc,KAAA,CAEvB,OAAAA,EAAA,mBAGAC,EAAA,oBAAAC,CAAA,EACD,CAAA,CACA,CAAA,EAGF,OAAAC,EAAAH,EAAAX,CAAA,aAGD,QAMCM,EAAA,IAAAG,CAAA,EAQDK,EAAA,CAAAH,EAAAX,IAAA,CACC,GAAAW,EAAA,YAAA,CACC,MAAAP,EAAA,qMCzCF,MAAAO,EAAAI,EAEAC,EAAAf,EAAA,SAAA,IACCD,EAAA,mDAI0B,EAG3BA,EAAAiB,EAAA,stCCLA,MAAAjB,EAAAiB,EAAA,EAEAC,EAAAjB,EAAA,SAAA,EAGAkB,EAAA,IAAA,IAIAC,EAAAnB,EAAA,SAAA,IAAA,+BAEC,OAAAoB,sCAImD,CAAA,SAKnD,GAAA,CAAAH,EAAA,QAAoB,OAEpB,MAAAI,EAAAJ,EAAA,QAAA,EAAA,KAAAK,GAAAA,EAAA,MAAA,OAAA,oCAKC,6BAAA,CAAAC,EAAA,MAAA,KAA8B,gBAEb,QAAAC,GAAAC,EAAAF,EAAA,UAAA,UAAA,YAAAC,EAAA,KAAAC,GAAA,GAAA,UAAA,KAAA,EACsD,KAAAF,EAAA,MAAA,IAC7C,EAG1BL,EAAA,IAAAK,EAAA,MAAA,KAAAH,CAAA,CAAoD,CAAA,CACpD,4+DCvCF,MAAAV,EAAAI,QAIAY,6BAKC3B,EAAA,gBAAAW,EAAA,iBAAAiB,EAAA,KAAA,MAAA,QAA4D,CAAA,qnBCX5D,SAAAC,EAAAC,EAAAC,EAAA,+MCGD,MAAA/B,EAAAiB,EAAA,qsBCFA,MAAAjB,EAAAiB,EAAA"}
|
package/utils/date.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","../.chunks/forms-
|
|
1
|
+
define(["require","exports","../.chunks/forms-9972aba2.amd","vue"],function(n,e,t,a){"use strict";if(typeof a>"u")var a=window.Vue;e.dateFormat=t.dateFormat,e.dateUnformat=t.dateUnformat,e.genDate=t.genDate,e.stringToDate=t.stringToDate,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=date.amd.js.map
|
package/utils/device.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","../.chunks/forms-
|
|
1
|
+
define(["require","exports","../.chunks/forms-9972aba2.amd","vue"],function(n,i,e,a){"use strict";if(typeof a>"u")var a=window.Vue;i.getCommandKeyLabel=e.getCommandKeyLabel,i.isApp=e.isApp,i.isMacOS=e.isMacOS,i.isMobile=e.isMobile,i.isRetina=e.isRetina,i.isSafari=e.isSafari,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=device.amd.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"popup-3054fcc1.es.js","sources":["../../src/components/component.ts","../../src/components/popup/lib/popup.globalEvents.js","../../src/components/popup/popup/style/popup.css?raw","../../src/components/popup/popup/style/popup.m.css?raw","../../src/components/popup/popup/style/popup.pc.css?raw","../../src/components/popup/lib/popup.js"],"sourcesContent":["import DOM from '@/core/utils/dom';\r\n\r\n/**\r\n * Базовый компонент для js компонентов, не имеет отношения к Vue\r\n */\r\nclass Component {\r\n\r\n\tstatic componentName = 'Top';\r\n\r\n\tcomponentName: string | undefined; // имя класса компонента\r\n\tclassName: string | undefined; // имя css класса компонента\r\n\tuid: string | undefined; // уникальный id компонента\r\n\tel: Element | undefined; // элемент, связанный с компонентом\r\n\toptions = {}; // параметры компонента\r\n\r\n\tunmountEls: Element[] = [];\r\n\tunmountEvents: any[] = [];\r\n\r\n\t// переопредлять нельзя\r\n\t// если компонент инициирован, необходимо сразу его вернуть и выполнить reInit() вместо mount()\r\n\t// используется init вместо constructor, так как super constructor выполняется до Object.defineProperty() параметров класса\r\n\tinit (componentName: string, el: Element, options: object): Component | void {\r\n\t\tif (!el) {\r\n\t\t\tthrow componentName + ': el is undefined';\r\n\t\t}\r\n\r\n\t\tconst component = Component.getComponent(el, componentName);\r\n\r\n\t\tif (component) {\r\n\t\t\tcomponent.reInit(options);\r\n\r\n\t\t\treturn component;\r\n\t\t}\r\n\r\n\t\tthis.componentName = componentName;\r\n\t\tthis.className = 'top' + componentName[0].toUpperCase() + componentName.substring(1);\r\n\t\tthis.uid = this.componentName + (Math.random() + '').replace('.', '');\r\n\r\n\t\tthis._setComponent(el);\r\n\t\tthis.el = el;\r\n\t\tthis.el.classList.add(this.className);\r\n\t\tthis.options = Object.assign(this.options, options);\r\n\r\n\t\tthis.mount();\r\n\t}\r\n\r\n\t// получить инициированный компонент\r\n\tstatic getComponent (el: Element, componentName: string): any {\r\n\t\treturn DOM.storage(el, '#' + componentName);\r\n\t}\r\n\r\n\t// устанвоить компонент\r\n\t_setComponent (el: Element) {\r\n\t\tDOM.storage(el, '#' + this.componentName, this);\r\n\t}\r\n\r\n\t// функция подключения компонента\r\n\tmount (): void {\r\n\t\tthrow 'Please, add method mount() to component: ' + this.componentName;\r\n\t}\r\n\r\n\t// функция отключения компонента\r\n\tunmount (): void {\r\n\t\tDOM.storage(this.el, '#' + this.componentName, null);\r\n\r\n\t\tthis.unmountEls.forEach((el) => {\r\n\t\t\tel.remove();\r\n\t\t});\r\n\r\n\t\tthis.unmountEls = [];\r\n\r\n\t\tthis.unmountEvents.forEach((eventData) => {\r\n\t\t\teventData.el.removeEventListener(eventData.type, eventData.listener, eventData.options);\r\n\t\t});\r\n\r\n\t\tthis.unmountEvents = [];\r\n\t}\r\n\r\n\t// указание новые элементы, которые должны будут удалиться после unmount\r\n\tregisterElForUnmount (el: Element): void {\r\n\t\tthis.unmountEls.push(el);\r\n\t}\r\n\r\n\t// указание новые события, которые должны будут удалиться после unmount\r\n\taddEventListenerWithUnmount (\r\n\t\tel: Element | Document,\r\n\t\ttype: keyof GlobalEventHandlersEventMap,\r\n\t\tlistener: (this: Element, e: Event) => any,\r\n\t\toptions?: any,\r\n\t): void {\r\n\t\tel.addEventListener(type, listener, options);\r\n\r\n\t\tthis.registerEventForUnmount(el, type, listener, options);\r\n\t}\r\n\r\n\t// указание новые события, которые должны будут удалиться после unmount\r\n\tregisterEventForUnmount (\r\n\t\tel: Element | Document,\r\n\t\ttype: keyof GlobalEventHandlersEventMap,\r\n\t\tlistener: (this: Element, e: Event) => any,\r\n\t\toptions?: any\r\n\t): void {\r\n\t\tconst eventData = {\r\n\t\t\tel: el,\r\n\t\t\ttype: type,\r\n\t\t\tlistener: listener,\r\n\t\t\toptions: options,\r\n\t\t};\r\n\r\n\t\tthis.unmountEvents.push(eventData);\r\n\t}\r\n\r\n\t// функция перенастройки уже подключенного компонента\r\n\treInit (_options: object): void {\r\n\t\tthrow 'Please, add method reInit() to component: ' + this.componentName;\r\n\t}\r\n\r\n\tstatic detach (nodes: Node[]): void\r\n\tstatic detach (nodes: Element): void\r\n\r\n\t// удалить элементы из DOM, но не из памяти\r\n\tstatic detach (nodes: any): void {\r\n\t\tif (nodes.forEach) {\r\n\t\t\tnodes.forEach((node: Node) => node.parentElement?.removeChild(node));\r\n\t\t} else {\r\n\t\t\tconst el = nodes;\r\n\t\t\tel.parentElement?.removeChild(el);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default Component;","import Worker from '@/components/popup/lib/worker';\r\nimport DOM from '@/core/utils/dom';\r\n\r\n/**\r\n * Глобальные события, для реализации Popup\r\n * Автоматически инициируется при первой загрузке, не является выгружаемым модулем\r\n *\r\n * Если в меню встречает класс .preloader, то событие нажатия на кнопку через enter будет остановлено\r\n */\r\nclass GlobalEvents {\r\n\tstatic init() {\r\n\t\tdocument.addEventListener('click', this.onclick);\r\n\t\tdocument.addEventListener('keydown', this.onkeydown);\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик кликов\r\n\t * обрабатывает клики внутри Popup\r\n\t * @param {Event} e\r\n\t */\r\n\tstatic onclick(e) {\r\n\t\t// элементы меню, клик по которым должен его закрыть\r\n\t\tconst elCloser = e.target.closest('.closer, a, .a, .top-button');\r\n\t\tif (elCloser) {\r\n\t\t\t// меню\r\n\t\t\tconst elPopup = e.target.closest('.top-popup-wrapper');\r\n\r\n\t\t\t// клик вне меню\r\n\t\t\tif (!elPopup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// элемент имеет модификатор, запрещаюущий закрытие меню по клику на него\r\n\t\t\tif (elCloser.matches('.top-popup-noCloser')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated, ссылки с href=\".\" запрещены, они должны быть заменены на .top-popup_listItem-button\r\n\t\t\tif (elCloser.getAttribute('href') === '.') {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\t// клик по кнопке открытия другого меню\r\n\t\t\tif (e.target.matches('[data-top-popup]')) {\r\n\t\t\t\t// список меню, в котором был сделан клик\r\n\t\t\t\tconst elUl = e.target.closest('ul');\r\n\r\n\t\t\t\t// элемент меню, по которому был сделан клик\r\n\t\t\t\tconst elItem = e.target.closest('a, .a');\r\n\r\n\t\t\t\t// сделать элемент меню, по которому сделан клик активным\r\n\t\t\t\tif (elUl) {\r\n\t\t\t\t\telUl.querySelector('a.top-active, .a.top-active')?.classList.remove('top-active');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (elItem) {\r\n\t\t\t\t\telItem.classList.add('top-active');\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// закрыть меню\r\n\t\t\tWorker.close(elPopup);\r\n\t\t}\r\n\r\n\t\t// клик по фону меню\r\n\t\tif (e.target.matches('.top-popup-wrapper')) {\r\n\t\t\tconst elPopup = e.target;\r\n\r\n\t\t\tWorker.close(elPopup);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик нажатия кнопки на клавиатуре\r\n\t * @param {Event} e\r\n\t */\r\n\tstatic onkeydown(e) {\r\n\t\tconst elPopup = e.target.closest('.top-popup-wrapper');\r\n\r\n\t\t// нажатие не в меню\r\n\t\tif (!elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elUl = elPopup.querySelector('ul.top-popup_content');\r\n\r\n\t\tswitch (e.key) {\r\n\t\t\tcase 'Escape':\r\n\t\t\t\tWorker.close(elPopup);\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'Enter':\r\n\t\t\t\t// атоматическое нажатие кнопок при нажатии Enter\r\n\t\t\t\tif (!elUl) {\r\n\t\t\t\t\tif (DOM.querySelectorVisible(elPopup, '.preloader')) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// deprecated, старый код на сайте\r\n\t\t\t\t\tconst elBtn = DOM.querySelectorVisible(elPopup, '.top-popup_footer .go, .top-popup_footer [data-action]');\r\n\t\t\t\t\tif (elBtn) {\r\n\t\t\t\t\t\telBtn.click();\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Запуск клика последней кнопки, расположенной в footer'е Popup'а, нажатием клавиши Enter\r\n\t\t\t\t\tconst elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button');\r\n\t\t\t\t\tif (elFooterLastBtn) {\r\n\t\t\t\t\t\telFooterLastBtn.click();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// перейти по ссылке по нажатию на Enter\r\n\t\t\t\t// данный функуционал игнорирует SPA\r\n\t\t\t\tconst elLink = DOM.querySelectorVisible(elPopup, 'li > a.top-active');\r\n\t\t\t\tif (elLink) {\r\n\t\t\t\t\t// фокус может находиться на другой ссылке\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tlocation.href = elLink.getAttribute('href');\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// кликнуть по элементу меню по нажатию на Enter\r\n\t\t\t\tconst elItem = elPopup.querySelector('li > .top-active');\r\n\t\t\t\tif (elItem) {\r\n\t\t\t\t\telItem.click();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// управление стрелками\r\n\t\t\tcase 'ArrowUp':\r\n\t\t\tcase 'ArrowRight':\r\n\t\t\tcase 'ArrowDown':\r\n\t\t\tcase 'ArrowLeft':\r\n\t\t\t\tif (!elUl) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\r\n\t\t\t\t\tconst elMoreVisible = DOM.querySelectorVisible(elPopup,\r\n\t\t\t\t\t\t'ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active > .top-popup_listMore');\r\n\t\t\t\t\tif (elMoreVisible) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst elItemActive = elPopup.querySelector('ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active')?.parentElement;\r\n\r\n\t\t\t\t// есть подменю\r\n\t\t\t\tif (e.key === 'ArrowRight' && elItemActive) {\r\n\t\t\t\t\t// const elItemMoreActive = elItemActive.querySelector('[data-top-popup].top-active');\r\n\t\t\t\t\t// if (elItemMoreActive) {\r\n\t\t\t\t\t// \treturn elItemMoreActive.click();\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tconst elMore = elItemActive.querySelector('.top-active > .top-popup_listMore');\r\n\t\t\t\t\tif (elMore) {\r\n\t\t\t\t\t\treturn elMore.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst elsLiVisible = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li:not(.top-popup_liNoSelectable)');\r\n\t\t\t\tconst countLi = elsLiVisible.length;\r\n\r\n\t\t\t\tif (!countLi) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet index = elsLiVisible.indexOf(elItemActive);\r\n\r\n\t\t\t\tif (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {\r\n\t\t\t\t\tindex--;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// это первый элемен, \"Назад\" должен закрывать окно\r\n\t\t\t\tif (e.key === 'ArrowLeft' && index === -1) {\r\n\t\t\t\t\tif (e.target.matches('input')) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn Worker.close(elPopup);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// это последний элемен, \"Вперед\" не должен ни чего делать\r\n\t\t\t\tif (e.key === 'ArrowRight' && index === countLi) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (index < 0) {\r\n\t\t\t\t\tindex = countLi - 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (index > countLi - 1) {\r\n\t\t\t\t\tindex = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\telPopup.querySelectorAll('ul.top-popup_content > li > .top-active').forEach(el => el.classList.remove('top-active'));\r\n\t\t\t\telsLiVisible[index].querySelector(':scope > a, :scope > .a').classList.add('top-active');\r\n\r\n\t\t\t\tWorker.scrollToActive(elPopup);\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default GlobalEvents;","export default \":root{\\r\\n\\t--top-popup-background-color: var(--color-bg-3);\\r\\n\\t--top-popup-background-color-hover: var(--color-theme-75);\\r\\n\\t--top-popup-background-color-active: var(--color-theme-100);\\r\\n\\r\\n\\t--top-popup-border-color: var(--color-line-2-opacity);\\r\\n\\t--top-popup-title-background-color: var(--color-theme-50);\\r\\n\\r\\n\\t/* суммарный отсуп от каря popup до элемента */\\r\\n\\t--top-popup-content-padding: calc(var(--top-popup-list-padding) + var(--top-popup-listItem-padding));\\r\\n\\r\\n\\t/* списки */\\r\\n\\t--top-popup-list-padding: var(--top-padding-2);\\r\\n\\r\\n\\t--top-popup-listItem-radius: var(--top-radius-2);\\r\\n\\t--top-popup-listItem-padding: var(--top-padding-2);\\r\\n}\\r\\n\\r\\n.top-popup-front{ position: relative; }\\r\\n\\r\\n.top-popup-wrapper{\\r\\n\\t/* см. recalcPosition() */\\r\\n\\t--top-popup-height: 0px;\\r\\n\\t--top-popup-right-bounding: 0px;\\r\\n\\t--top-popup-bottom-bounding: 0px;\\r\\n\\t--top-popup-top: 0px;\\r\\n\\t--top-popup-right: calc(100vw - var(--top-popup-right-bounding));\\r\\n\\t--top-popup-bottom: calc(var(--100vh) - var(--top-popup-bottom-bounding));\\r\\n\\t--top-popup-left: 0px;\\r\\n\\r\\n\\ttext-align: initial; white-space: normal; word-break: normal;\\r\\n\\tposition: absolute; z-index: 200000;\\r\\n}\\r\\n.top-popup-wrapper:not(.top-popup-wrapper-shown){ overflow: hidden; }\\r\\n\\r\\n/* top-popupPanel */\\r\\n.top-popupPanel {\\r\\n\\tcursor: default;\\r\\n\\tbox-shadow: var(--top-shadow-b);\\r\\n\\tborder-radius: 8px;\\r\\n\\tbackground: var(--top-popup-background-color);\\r\\n\\tposition: absolute; overflow: hidden;\\r\\n\\tdisplay: flex; flex-direction: column;\\r\\n}\\r\\n\\r\\n/* position */\\r\\n.top-popup-wrapper > *{ opacity: 0; transition: opacity 100ms linear, transform 100ms linear; }\\r\\n.top-popup-wrapper.p0 > *{ transform: translateY(-8px); }\\r\\n.top-popup-wrapper.p1 > *{ transform: translateY(8px); }\\r\\n.top-popup-wrapper.p2 > *{ transform: translateX(8px); }\\r\\n.top-popup-wrapper.p3 > *{ transform: translateY(8px); }\\r\\n.top-popup-wrapper.p4 > *{ transform: translateX(-8px); }\\r\\n.top-popup-wrapper-shown:not(.top-popup-wrapper-closed) > *{opacity: 1;transform: translate(0, 0) !important;}\\r\\n\\r\\n.top-popup-wrapper.p0 > .top-popup{ top: calc(-16px); left: calc(0px - 8px); }\\r\\n.top-popup-wrapper.p1 > .top-popup{ bottom: calc(100% + 8px); }\\r\\n.top-popup-wrapper.p2 > .top-popup{ left: calc(100% + 8px); }\\r\\n.top-popup-wrapper.p3 > .top-popup{ top: calc(100% + 8px); }\\r\\n.top-popup-wrapper.p4 > .top-popup{ right: calc(100% + 8px); }\\r\\n.top-popup-wrapper.p2 > .top-popup,\\r\\n.top-popup-wrapper.p4 > .top-popup{ margin-top: -10px; }\\r\\n\\r\\n.top-popup-wrapper.p1.with_notch > .top-popup{ margin-bottom: 5px; }\\r\\n.top-popup-wrapper.p2.with_notch > .top-popup{ margin-left: 5px; }\\r\\n.top-popup-wrapper.p3.with_notch > .top-popup{ margin-top: 5px; }\\r\\n.top-popup-wrapper.p4.with_notch > .top-popup{ margin-right: 5px; }\\r\\n\\r\\n.top-popup-wrapper.invert-x > .top-popup{ right: 0; }\\r\\n.top-popup-wrapper.invert-y > .top-popup{ bottom: 0; }\\r\\n\\r\\n/* notch */\\r\\n.top-popup-wrapper > .notch{ border: 7.4px solid transparent; position: absolute; display: block; }\\r\\n\\r\\n.top-popup-wrapper.p1 > .notch{ border-bottom: 0; border-top: 7.4px solid var(--content-background-color); margin: 0 0 7.4px -7.4px; bottom: 100%; left: 50% }\\r\\n.top-popup-wrapper.p2 > .notch{ border-left: 0; border-right: 7.4px solid var(--content-background-color); margin: 0 0 -7.4px 7.4px; bottom: 50%; left: 100%; }\\r\\n.top-popup-wrapper.p3 > .notch{ border-top: 0; border-bottom: 7.4px solid var(--content-background-color); margin: 7.4px 0 0 -7.4px; top: 100%; left: 50%; }\\r\\n.top-popup-wrapper.p4 > .notch{ border-right: 0; border-left: 7.4px solid var(--content-background-color); margin: 0 7.4px -7.4px 0; bottom: 50%; right: 100%; }\\r\\n\\r\\n.top-popup-wrapper.p1 > .notch-border{ border-top-color: rgba(0,0,0,0.05); margin-bottom: 6px; }\\r\\n.top-popup-wrapper.p2 > .notch-border{ border-right-color: rgba(0,0,0,0.05); margin-left: 6px; }\\r\\n.top-popup-wrapper.p3 > .notch-border{ border-bottom-color: rgba(0,0,0,0.05); margin-top: 6px; }\\r\\n.top-popup-wrapper.p4 > .notch-border{ border-left-color: rgba(0,0,0,0.05); margin-right: 6px; }\\r\\n\\r\\n/* common */\\r\\n.top-popup_header,\\r\\n.top-popup_content,\\r\\n.top-popup_footer{ font-size: 14px; }\\r\\n.top-popup_header,\\r\\n.top-popup_footer{ display: flex; align-items: center; justify-content: space-between; }\\r\\n\\r\\n/* header */\\r\\n.top-popup_header{\\r\\n\\tborder-bottom: 1px solid var(--top-popup-border-color);\\r\\n\\tpadding: var(--top-padding-3);\\r\\n\\tfont-weight: 600;\\r\\n}\\r\\n.top-popup_header > *{ font-weight: 400; }\\r\\n.top-popup_header > .a{ cursor: pointer; color: var(--color-blue-450); }\\r\\n.top-popup_header > .a:hover{ color: var(--color-blue-350); }\\r\\n\\r\\n.top-popup_headerButton{ width: 60px; }\\r\\n\\r\\n/* content */\\r\\n.top-popup_content{\\r\\n\\tmargin: 0;\\r\\n\\tflex-grow: 1;\\r\\n\\toverflow-y: auto;\\r\\n\\tdisplay: flex;\\r\\n\\tflex-direction: column;\\r\\n\\tgap: var(--top-gap-4);\\r\\n\\r\\n\\t-webkit-overflow-scrolling: touch;\\r\\n}\\r\\n\\r\\ndiv.top-popup_content{\\r\\n\\t/* has_scroll */\\r\\n\\t--scroll-padding-top: var(--top-popup-content-padding);\\r\\n\\t--scroll-padding-bottom: var(--top-popup-content-padding);\\r\\n\\r\\n\\tpadding: var(--top-popup-content-padding);\\r\\n}\\r\\ndiv.top-popup_content > *{ flex-shrink: 0; }\\r\\ndiv.top-popup_content > .top-button{ margin: 0; }\\r\\n\\r\\ndiv.top-popup_content .top-unwrap{\\r\\n\\t--top-unwrap-x: var(--top-popup-content-padding);\\r\\n}\\r\\n\\r\\nul.top-popup_content{\\r\\n\\t--scroll-padding-top: var(--top-popup-list-padding);\\r\\n\\t--scroll-padding-bottom: var(--top-popup-list-padding);\\r\\n\\r\\n\\tpadding: var(--top-popup-list-padding);\\r\\n\\tgap: 2px;\\r\\n}\\r\\n\\r\\nul.top-popup_content .top-unwrap{\\r\\n\\t--top-unwrap-x: var(--top-popup-list-padding);\\r\\n}\\r\\n\\r\\n.top-popup_listItem {\\r\\n\\tborder-radius: var(--top-popup-listItem-radius);\\r\\n\\tpadding: var(--top-popup-listItem-padding);\\r\\n\\tline-height: 1 !important;\\r\\n}\\r\\n\\r\\nul.top-popup_content li{ margin: 0; list-style:none; display: flex; position: relative }\\r\\nul.top-popup_content li > *{ flex-grow: 1; }\\r\\nul.top-popup_content li > a:not(.top-button),\\r\\nul.top-popup_content li > .a{\\r\\n\\tcursor: pointer;\\r\\n\\tbox-sizing: border-box;\\r\\n\\tborder-radius: var(--top-popup-listItem-radius);\\r\\n\\tbackground: var(--top-popup-background-color);\\r\\n\\tpadding: var(--top-popup-listItem-padding);\\r\\n\\tcolor: var(--color-text) !important; font-size: 14px; font-weight: normal !important; text-decoration: none !important; font-style: normal;\\r\\n\\tline-height: 1 !important;\\r\\n\\tdisplay: flex; flex: 1 1 100%; align-items: center;\\r\\n\\ttransition: background-color 0.1s ease-in-out;\\r\\n}\\r\\n.top-popup-wrapper-no_animate ul.top-popup_content li > a:not(.top-button),\\r\\n.top-popup-wrapper-no_animate ul.top-popup_content li > .a{ transition: none; }\\r\\n\\r\\nul.top-popup_content li > a:not(.top-button):hover,\\r\\nul.top-popup_content li > .a:hover{ background: var(--top-popup-background-color-hover); }\\r\\nul.top-popup_content li > a:not(.top-button).top-active,\\r\\nul.top-popup_content li > .a.top-active{ background: var(--top-popup-background-color-active); }\\r\\n\\r\\n.top-popup_content + .top-popup_content{ padding-top: 0; }\\r\\n\\r\\n/* listTitle */\\r\\n.top-popup_listItem-title{\\r\\n\\tbackground: var(--top-popup-title-background-color);\\r\\n\\tcolor: var(--color-text-2); font-size: 12px;\\r\\n}\\r\\n\\r\\n/* listDelimiter */\\r\\n.top-popup_listItem-delimiter{\\r\\n\\tborder-radius: 3px;\\r\\n\\tbackground: var(--top-popup-border-color);\\r\\n\\theight: 1px;\\r\\n\\tpadding: 0;\\r\\n\\tmargin: 4px;\\r\\n}\\r\\n\\r\\n/* listMore */\\r\\n.top-popup_listMore{\\r\\n\\tfont-size: 20px;\\r\\n\\tmargin: calc(0px - var(--top-popup-listItem-padding)) 0;\\r\\n}\\r\\n\\r\\nul.top-popup_content li > .a.top-popup_listMore{\\r\\n\\ttext-align: center;\\r\\n\\tflex-basis: 10px;\\r\\n}\\r\\nul.top-popup_content li > .a.top-popup_listMore:before{ color: var(--color-gray-500); }\\r\\nul.top-popup_content li > * > .top-popup_listMore{\\r\\n\\tmargin-left: auto;\\r\\n\\tcolor: var(--color-gray-500);\\r\\n\\tfont-size: 14px;\\r\\n}\\r\\nul.top-popup_content li > * > i.top-popup_listMore:hover,\\r\\nul.top-popup_content li > * > i.top-popup_listMore.top-active{ color: var(--color-blue-500); }\\r\\nul.top-popup_content li > * > i.top-popup_listMore:before{\\r\\n\\ttransform: rotate(90deg);\\r\\n\\tdisplay: block;\\r\\n}\\r\\n\\r\\nul.top-popup_content li a.close{ background: none !important; }\\r\\n\\r\\n/* data-top-icon */\\r\\n.top-popup_content > [data-top-icon]:before{\\r\\n\\t--top-icon-size: 20px;\\r\\n}\\r\\n\\r\\nul.top-popup_content li > [data-top-icon]:not(.top-button):before{\\r\\n\\t--top-icon-color: var(--color-text-3);\\r\\n\\t--top-icon-size: 20px;\\r\\n\\t--top-icon-width: 20px;\\r\\n\\r\\n\\theight: 1rem; margin-right: 8px; transition: color 0.1s;\\r\\n}\\r\\nul.top-popup_content li:hover > [data-top-icon]:not(.top-button):before,\\r\\nul.top-popup_content li > [data-top-icon]:not(.top-button).top-active:before{\\r\\n\\t--top-icon-color: var(--color-text-2);\\r\\n}\\r\\n\\r\\n/* footer */\\r\\n.top-popup_footer{\\r\\n\\tpadding: var(--top-popup-list-padding);\\r\\n\\tborder-top: 1px solid var(--top-popup-border-color);\\r\\n\\tdisplay: flex;\\r\\n\\tgap:var(--top-gap-2);\\r\\n\\tjustify-content: flex-end;\\r\\n}\\r\\n\\r\\n/* Виджеты */\\r\\n.top-popup > [data-widget]{ padding: 0 var(--top-popup-list-padding); }\\r\\n.top-popup > [data-widget] + hr{ margin: 0 var(--top-popup-list-padding); }\\r\\n\\r\\n.top-popup .placeholder{\\r\\n\\tborder:1px solid #E0D9D9 !important; border-right: none !important; border-left: none !important; background:#F9F9F9 !important; margin: -1px 0; z-index: 1;\\r\\n\\tposition: relative;\\r\\n}\\r\\n\\r\\n/* компоненты */\\r\\n.top-popup-wrapper.simple_list > .top-popup{ min-width: 0; white-space: nowrap; }\\r\\n\\r\\n.top-popup_content .top-column{ display: flex; flex-direction: column; gap: 4px; }\\r\\nhtml .top-popup .top-popup_content li > .top-button{\\r\\n\\tmargin:calc(var(--top-popup-listItem-padding) / 2) var(--top-popup-listItem-padding);\\r\\n}\\r\\n\\r\\n.top-popup li .check_all,\\r\\n.top-popup li .clear_all{ cursor: pointer; color: var(--color-cyan); padding: 8px; display: inline-block; }\\r\\n.top-popup li .check_all:hover,\\r\\n.top-popup li .clear_all:hover{ text-decoration: underline; }\\r\\n.top-popup li .clear_all{ display: none; }\\r\\n\\r\\n/* table */\\r\\n.top-popup_content table{ margin: -9px 0; }\\r\\n.top-popup_content table td,\\r\\n.top-popup_content table th{ padding: 9px var(--top-popup-listItem-padding) 9px 0; vertical-align: top; }\\r\\n.top-popup_content table th{ width: 40%; font-weight: 600; white-space: nowrap; }\\r\\n\\r\\n/* формы */\\r\\nul.top-popup_content .a > [type=\\\"checkbox\\\"],\\r\\nul.top-popup_content .a > [type=\\\"radio\\\"]{ margin: -8px 0 -8px auto; }\\r\\n\\r\\n/* deprecated */\\r\\nul.top-popup_content a > [class*=icon],\\r\\nul.top-popup_content i.a > [class*=icon]{\\r\\n\\ttransition: 0.1s;\\r\\n}\\r\\n\\r\\n.top-popup .buttons{ border-radius:0 0 4px 4px; border-top:1px solid #BDC3C7; background:#ECF0F1; padding:10px 15px; margin:10px -15px -10px -15px; white-space: nowrap; }\\r\\n.top-popup_footer [class*=btn]:not(.btn-transparent){ min-width: 100px; padding: 5px 14px; margin-left: 10px; }\\r\\n.top-popup_footer [class*=btn]:first-child{ margin-left: 0; }\\r\\n.top-popup_footer .btn.full_width{ margin: 0; flex-grow: 1; }\"","export default \":root{\\r\\n\\t--top-popup-list-padding: 0px;\\r\\n\\r\\n\\t--top-popup-listItem-radius: 0px;\\r\\n\\t--top-popup-listItem-padding: var(--top-padding-4);\\r\\n}\\r\\n\\r\\nhtml.with_popup{ background: #808080; }\\r\\n\\r\\n.top-popup-wrapper{\\r\\n\\t--top-popup-footer-offset: 25px;\\r\\n\\r\\n\\twidth: auto !important; height: auto !important;\\r\\n\\tposition: fixed; top: 0 !important; right: 0 !important; left: 0 !important; overflow: hidden;\\r\\n\\ttransition: background 0.3s;\\r\\n}\\r\\n\\r\\n.top-popup-wrapper-shown:not(.top-popup-wrapper-closed){ background: rgba(0,0,0,0.5); backdrop-filter: blur(1px); }\\r\\n.top-popup-wrapper-shown:not(.top-popup-wrapper-closed) > .top-popup{ opacity: 1 !important; }\\r\\n\\r\\n.top-popup{\\r\\n\\tborder-radius: 8px 8px 0 0; width: auto !important; max-height: calc(100% - var(--header-height) - 12px); margin: 0 !important;\\r\\n\\ttop: auto !important; right: 0 !important; bottom: 0 !important; left: 0 !important;\\r\\n\\tdisplay: flex; flex-direction: column;\\r\\n\\r\\n\\t/* невозможно опустить элемент вниз за экран на 100%, fix: opacity и translateY(80%) */\\r\\n\\ttransform: translateY(80%);\\r\\n\\r\\n\\ttransition: opacity 0.3s, transform 0.3s;\\r\\n}\\r\\n\\r\\n/* from top */\\r\\n.top-popup-wrapper.p-from-top{\\r\\n\\t--top-popup-footer-offset: 0px;\\r\\n\\r\\n\\ttop: var(--header-height) !important;\\r\\n}\\r\\n.with_dialog .top-popup-wrapper.p-from-top{ top: 50px !important; }\\r\\n.top-popup-wrapper.p-from-top > .top-popup{\\r\\n\\tborder-radius: 0 0 8px 8px; max-height: calc(100% - 24px); top: 0 !important; bottom: auto !important;\\r\\n\\ttransform: translateY(calc(-100% - 24px));\\r\\n}\\r\\n\\r\\n/* content */\\r\\nul.top-popup_content{\\r\\n\\t--scroll-padding-top: 0px;\\r\\n\\t--scroll-padding-bottom: var(--scroll-padding-top);\\r\\n\\r\\n\\tgap: 0;\\r\\n}\\r\\nul.top-popup_content li:not(:last-child){ border-bottom: 1px solid var(--top-popup-border-color); }\\r\\n\\r\\n.top-popup-wrapper.top-style_alt > .top-popup > ul > li{ border-bottom: none; }\\r\\n\\r\\n/* footer */\\r\\n.top-popup_footer{\\r\\n\\tflex-direction: column-reverse;\\r\\n}\\r\\n.top-popup_footer > .top-button{\\r\\n\\t--top-forms-base-height: var(--top-forms-base-height_xl);\\r\\n\\r\\n\\twidth: 100%;\\r\\n}\\r\\n\\r\\n/* listTitle */\\r\\nul.top-popup_content .top-popup_listItem-title{\\r\\n\\t--top-popup-padding-v: 12px;\\r\\n}\\r\\n\\r\\n/* listDelimiter */\\r\\nul.top-popup_content .top-popup_listItem-delimiter{ background: var(--color-line-1-opacity); height: 4px; margin: 0; }\\r\\nul.top-popup_content li:first-child > .top-popup_listItem-delimiter{ border-top: 1px solid var(--top-popup-border-color); }\"","export default \"html:not(.with_dialog){ margin-right: 0 !important; }\\r\\n\\r\\n.top-popup{ min-width: 250px; max-width: calc(100vw - var(--top-popup-left) - 16px); max-height: calc(var(--top-popup-bottom) + var(--top-popup-height)); }\\r\\n.top-popup-wrapper.invert-x > .top-popup{ max-width: calc(100vw - var(--top-popup-right) - 16px); }\\r\\n.top-popup-wrapper.invert-y > .top-popup{ max-height: calc(100vh - var(--top-popup-bottom) - 16px); }\\r\\n\\r\\n/* position */\\r\\n.top-popup-wrapper.p1 > .top-popup{ max-height: calc(var(--top-popup-top) - var(--header-height) - 16px); }\\r\\n.top-popup-wrapper.p3 > .top-popup{ max-height: calc(var(--top-popup-bottom) - 16px); }\\r\\n.top-popup-wrapper.p2 > .top-popup{ max-width: calc(var(--top-popup-right) - 16px); }\\r\\n.top-popup-wrapper.p4 > .top-popup{ max-width: calc(var(--top-popup-left) - 16px); }\\r\\n\\r\\n/* notch */\\r\\n.top-popup-wrapper.p1.with_notch > .top-popup,\\r\\n.top-popup-wrapper.p3.with_notch > .top-popup{ margin-left: -16px !important; }\\r\\n.top-popup-wrapper.p1.with_notch > .notch,\\r\\n.top-popup-wrapper.p3.with_notch > .notch{ margin-left: -8px !important; }\\r\\n\\r\\n.top-popup-wrapper.p1.with_notch.invert-x,\\r\\n.top-popup-wrapper.p3.with_notch.invert-x{ margin-left: 3px !important; }\\r\\n.top-popup-wrapper.p1.with_notch.invert-x > .notch,\\r\\n.top-popup-wrapper.p3.with_notch.invert-x > .notch{ margin-left: -9px !important; }\\r\\n\\r\\n/* listMore */\\r\\nul.top-popup_content li > * > i.top-popup_listMore{ visibility: hidden; transition: none; }\\r\\nul.top-popup_content li:hover > * > i.top-popup_listMore,\\r\\nul.top-popup_content li > *.top-active > i.top-popup_listMore,\\r\\nul.top-popup_content li > * > i.top-popup_listMore.top-active{ visibility: visible; }\"","// добавляет jQuery события на this.el, если jQuery загружен:\r\n// aftershow.top-menu-popup\r\n// afterclose.top-menu-popup\r\n\r\nimport Core from '@/core/core/core';\r\nimport Component from '@/components/component';\r\nimport DOM from '@/core/utils/dom';\r\nimport Worker from '@/components/popup/lib/worker';\r\nimport GlobalEvents from '@/components/popup/lib/popup.globalEvents';\r\n\r\nimport css from '@/components/popup/popup/style/popup.css?raw';\r\nimport cssM from '@/components/popup/popup/style/popup.m.css?raw';\r\nimport cssPC from '@/components/popup/popup/style/popup.pc.css?raw';\r\n\r\nCore.appendStyle(css);\r\nCore.appendStyle(cssM, 'm');\r\nCore.appendStyle(cssPC, 'pc');\r\n\r\n/**\r\n * @property {Element} el - элемент, вызвавший открытие Popup\r\n * @property {Element} elPopup - Popup .top-popup-wrapper\r\n * @property {Element} elPopupInner - контентная часть Popup .top-popup\r\n * @property {Element} elPopupHeader\r\n * @property {Element} elPopupBody\r\n * @property {Element} elPopupFooter\r\n */\r\nclass Popup extends Component {\r\n\r\n\tstatic componentName = 'Popup';\r\n\r\n\tel; // элемент, вызвавший открытие Popup\r\n\telActiveByDefault; // элемент уже имеет класс top-active перед открытием окна\r\n\telPopup;\r\n\telPopupInner;\r\n\telPopupHeader;\r\n\telPopupBody;\r\n\telPopupFooter;\r\n\telFront;\r\n\r\n\tpopupParent;\r\n\r\n\t$; // только, если есть jQuery\r\n\r\n\telStartPosition; // используется для useOriginal\r\n\tshift = {\r\n\t\ttop: 0,\r\n\t\tleft: 0,\r\n\t};\r\n\tisClosed = false; // флаг того, что меню закрыто\r\n\tisFirstClick = true;\r\n\ttype; // selector или html\r\n\r\n\toptions = {\r\n\t\tpopup: '', // selector, text\r\n\t\tp: 0, // положение меню (0 - над элементом, 1 - сверху, 2 - справа, 3 - снизу, 4 слева)\r\n\t\tnotch: false, // отображать ли клювик\r\n\r\n\t\tclass: '', // класс, добавляемый меню\r\n\r\n\t\tposBy: 'left', // способ привязки позиционирования меню (left/right - левый/правый край родителя, fixed - по окну)\r\n\t\tfrontSelector: '',\r\n\t\tinvertX: false, // базовая ордината - правая граница элемента, а не левая\r\n\t\topenByHover: false, // открывать при наведении\r\n\r\n\t\tuseOriginal: false, // использовать оригинальный шаблон, без клонирвоания (для сохранения состояния меню)\r\n\r\n\t\tisFullScreen: false,\r\n\t\ti18n: {},\r\n\t};\r\n\r\n\tevents = {};\r\n\r\n\t// el - элемент, открывающий меню\r\n\tconstructor(el, options) {\r\n\t\tsuper();\r\n\r\n\t\treturn this.init(Popup.componentName, el, options);\r\n\t}\r\n\r\n\tasync mount() {\r\n\t\tconst vueConnector = this.vueGetComponent();\r\n\r\n\t\tthis.popupParent = Worker.getPopup(this.el.closest('.top-popup-wrapper'));\r\n\r\n\t\tawait this.mountJQuery();\r\n\r\n\t\tif (DOM.css(this.el, 'position') !== 'absolute') {\r\n\t\t\tthis.el.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis.el.dataset.topPopupOpened = 'opened';\r\n\t\tthis.elActiveByDefault = this.el.classList.contains('top-active');\r\n\t\tthis.el.classList.add('top-active');\r\n\r\n\t\tif (vueConnector) {\r\n\t\t\t// компонент vue Popup\r\n\t\t\tthis.type = 'vue';\r\n\r\n\t\t\tthis.options.popup = '';\r\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup);\r\n\t\t} else if (this.options.popup.match(/^[#.]/)) {\r\n\t\t\t// selector\r\n\t\t\tthis.type = 'selector';\r\n\r\n\t\t\tthis.elPopup = document.querySelector(`${this.options.popup}.template`);\r\n\t\t} else {\r\n\t\t\t// html\r\n\t\t\tthis.type = 'html';\r\n\r\n\t\t\tif (this.options.useOriginal) {\r\n\t\t\t\tthrow ('Option useOriginal not allowed for text templates');\r\n\t\t\t}\r\n\r\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup);\r\n\t\t}\r\n\r\n\t\tif (!this.elPopup || vueConnector?.opened) {\r\n\t\t\t// возможно шаблон не найден, так как он используется в уже открытом меню\r\n\t\t\tif (this.options.useOriginal || vueConnector?.opened) {\r\n\t\t\t\t// закрыть открытое меню\r\n\t\t\t\tif (vueConnector?.opened) {\r\n\t\t\t\t\tthis.elPopup = vueConnector.popup.elPopup;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.elPopup = document.querySelector(`${this.options.popup}.top-popup-wrapper-shown`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.elPopup) {\r\n\t\t\t\t\tthis.el.dataset.topPopupOpened = '';\r\n\r\n\t\t\t\t\tif (!this.elActiveByDefault) {\r\n\t\t\t\t\t\tthis.el.classList.remove('top-active');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tWorker.close(this.elPopup);\r\n\r\n\t\t\t\t\t// повторит попытку открыть меню\r\n\t\t\t\t\tsetTimeout(() => this.mount(), 300);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthrow ('Option useOriginal state allowed only elements .template');\r\n\t\t\t}\r\n\r\n\t\t\t// возможно вместо шаблона используется другой элемент\r\n\t\t\tthis.elPopup = document.querySelector(`${this.options.popup}:not(.top-popup-wrapper)`);\r\n\t\t}\r\n\r\n\t\tif (!this.elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.options.useOriginal) {\r\n\t\t\tthis.elStartPosition = this.elPopup.closest('.top-popup-el-start-position');\r\n\t\t\tif (!this.elStartPosition) {\r\n\t\t\t\tthis.elStartPosition = DOM.wrap(this.elPopup, 'i');\r\n\t\t\t\tthis.elStartPosition.classList.add('top-popup-el-start-position', 'hidden');\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.elPopup = this.elPopup.cloneNode(true);\r\n\r\n\t\t\t// вывод в меню копии произвольного элемента\r\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template')) {\r\n\t\t\t\tthis.elPopup.classList.remove('hidden');\r\n\r\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\r\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\r\n\t\t\t}\r\n\r\n\t\t\tif (this.type === 'html') {\r\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\r\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\r\n\r\n\t\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// вложенный Popup\r\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template') || this.type === 'html' || this.type === 'vue') {\r\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '[data-top-popup]').forEach(el => el.dataset.topPopupPosBy = 'fixed');\r\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '.top-popup-wrapper').forEach(el => el.remove());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tWorker.decoratorBeforeOpen(this);\r\n\r\n\t\tif (vueConnector) {\r\n\t\t\tthis.options.class = vueConnector.classRef.value;\r\n\t\t}\r\n\r\n\t\tthis.elPopupInner = document.createElement('div');\r\n\t\tthis.elPopupInner.classList.add('top-popupPanel', 'top-popup');\r\n\r\n\t\twhile (this.elPopup.firstChild) {\r\n\t\t\tthis.elPopupInner.appendChild(this.elPopup.firstChild);\r\n\t\t}\r\n\r\n\t\tthis.elPopup.append(this.elPopupInner);\r\n\r\n\t\tthis.elPopup.classList.add('top-popup-wrapper');\r\n\r\n\t\tif (this.options.class) {\r\n\t\t\tconst classes = this.options.class.split(' ');\r\n\t\t\tthis.elPopup.classList.add(...classes);\r\n\t\t}\r\n\r\n\t\tif (this.options.notch) {\r\n\t\t\tthis.elPopup.classList.add('with_notch');\r\n\t\t\tthis.elPopup.insertAdjacentHTML('beforeend', '<i class=\"notch notch-border\"></i><i class=\"notch\"></i>');\r\n\t\t}\r\n\r\n\t\tawait this.vueOpen();\r\n\r\n\t\tthis.elPopupHeader = this.elPopupInner.querySelector('.top-popup_header');\r\n\t\tthis.elPopupBody = this.elPopupInner.querySelector('.top-popup_content');\r\n\t\tthis.elPopupFooter = this.elPopupInner.querySelector('.top-popup_footer');\r\n\r\n\t\tconst existsWidgetSearch = !!this.elPopup.querySelector('[data-widget=\"search\"]');\r\n\r\n\t\tif (this.options.isFullScreen && !existsWidgetSearch) {\r\n\t\t\tif (!this.elPopupHeader) {\r\n\t\t\t\tthis.elPopupHeader = DOM.genEl('i', { class: 'top-popup_header' });\r\n\t\t\t\tthis.elPopupInner.prepend(this.elPopupHeader);\r\n\r\n\t\t\t\tthis.elPopupHeader.prepend(DOM.genEl('i', { class: 'a closer' }, this.options.i18n.Close));\r\n\t\t\t\tthis.elPopupHeader.append(DOM.genEl('i', { class: 'top-popup_headerButton' }));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDOM.storage(this.elPopup, 'Popup', this);\r\n\r\n\t\tif (this.options.frontSelector) {\r\n\t\t\tthis.elFront = document.querySelector(this.options.frontSelector);\r\n\t\t}\r\n\t\tif (!this.elFront) {\r\n\t\t\tthis.elFront = this.el.closest('.top-popup-front');\r\n\t\t}\r\n\t\tif (!this.elFront) {\r\n\t\t\tthis.elFront = document.body;\r\n\t\t}\r\n\r\n\t\tthis.elPopup.style.width = this.el.offsetWidth + 'px';\r\n\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\r\n\t\tthis.elPopup.style.top = this.el.offsetTop + 'px';\r\n\t\tthis.elPopup.style.right = parseInt(this.el.style.right || 0) + 'px';\r\n\t\tthis.elPopup.style.bottom = parseInt(this.el.style.bottom || 0) + 'px';\r\n\r\n\t\tthis.el.parentElement.insertBefore(this.elPopup, this.el);\r\n\t\tthis.elPopup.classList.remove('template');\r\n\r\n\t\tif (this.options.invertX) {\r\n\t\t\tthis.elPopup.classList.add('invert-x');\r\n\t\t}\r\n\r\n\t\tlet fromTop = !!this.el.closest('.modal-header');\r\n\t\tif (!fromTop) {\r\n\t\t\tfromTop = !!this.el.closest('#top_panel');\r\n\t\t}\r\n\t\tif (!fromTop) {\r\n\t\t\tfromTop = !!this.el.closest('#secondmenu');\r\n\t\t}\r\n\t\tif (fromTop) {\r\n\t\t\tthis.elPopup.classList.add('p-from-top');\r\n\t\t}\r\n\r\n\t\t// появление с анимацией\r\n\t\tsetTimeout(() => this.elPopup.classList.add('top-popup-wrapper-shown'));\r\n\r\n\t\tif (this.elFront && !this.elFront.matches('body')) {\r\n\t\t\tthis.elFront.append(this.elPopup);\r\n\r\n\t\t\tthis.shift.top = DOM.offset(this.el).top - this.el.offsetTop - DOM.offset(this.elFront).top;\r\n\t\t\tthis.shift.left = DOM.offset(this.el).left - this.el.offsetLeft - DOM.offset(this.elFront).left;\r\n\r\n\t\t\t// position() не учитывает margin, замечено для flex\r\n\t\t\tthis.shift.top -= parseInt(this.el.style['margin-top'] || 0);\r\n\t\t\tthis.shift.left -= parseInt(this.el.style['margin-left'] || 0);\r\n\r\n\t\t\tthis.elPopup.style.top = parseInt(this.elPopup.style.top || '0') + this.shift.top + 'px';\r\n\t\t\tthis.elPopup.style.left = parseInt(this.elPopup.style.left || '0') + this.shift.left + 'px';\r\n\t\t}\r\n\r\n\t\tif (this.$) {\r\n\t\t\tthis.$.trigger('aftershow.top-menu-popup', [jQuery(this.elPopup)]);\r\n\t\t}\r\n\r\n\t\tthis.recalcPosition();\r\n\r\n\t\tthis.elPopup.setAttribute('tabindex', 0);\r\n\t\tthis.focus();\r\n\r\n\t\tWorker.decoratorAfterOpen(this);\r\n\r\n\t\tthis.mountEvents();\r\n\t}\r\n\r\n\tasync mountJQuery() {\r\n\t\tif (typeof (jQuery) !== 'function') {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.$ = jQuery(this.el);\r\n\t}\r\n\r\n\t/**\r\n\t * Выполнить фокусировку на нужный элемент после открытия окна\r\n\t */\r\n\tfocus() {\r\n\t\tlet el = DOM.querySelectorVisible(this.elPopup, '.top-popup-autofocus');\r\n\r\n\t\t// поле ввода\r\n\t\tif (!el) {\r\n\t\t\tel = DOM.querySelectorVisible(this.elPopup, ':read-write, select:not(:disabled)');\r\n\t\t}\r\n\r\n\t\t// кнопка\r\n\t\tif (!el) {\r\n\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup_footer .top-button');\r\n\t\t}\r\n\r\n\t\tif (!el) {\r\n\t\t\tel = this.elPopup;\r\n\t\t}\r\n\r\n\t\tel.focus();\r\n\t}\r\n\r\n\tmountEvents() {\r\n\t\t// закрытие при клике вне контекстного меню\r\n\t\tthis.addEventListenerWithUnmount(document, 'mousedown', (e) => this.onMousedown(e));\r\n\r\n\t\t// закрыть другие меню\r\n\t\tthis.addEventListenerWithUnmount(this.elPopup, 'focus', (e) => this.onFocus(e));\r\n\r\n\t\t// автоматическое закрытие при отведении мыши\r\n\t\tif (this.options.openByHover) {\r\n\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'mouseleave', (e) => this.onMouseleave(e));\r\n\t\t\tthis.addEventListenerWithUnmount(this.elPopupInner, 'mouseleave', (e) => this.onMouseleave(e));\r\n\t\t}\r\n\r\n\t\t// не скроллить страницу\r\n\t\tif (this.options.isFullScreen) {\r\n\t\t\tthis.addEventListenerWithUnmount(this.elPopupBody, 'touchmove', (e) => this.onTouchmove(e));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Обработка клика вне окна\r\n\t * @param {Event} e\r\n\t */\r\n\tonMousedown(e) {\r\n\t\t// // не оригинальное событие\r\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\r\n\t\t// \treturn;\r\n\t\t// }\r\n\r\n\t\t// Popup уже закрыт\r\n\t\tif (!this.elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// клик на внешнем элементе\r\n\t\tif (!this.isFirstClick) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isFirstClick = false;\r\n\t\tsetTimeout(() => this.isFirstClick = true);\r\n\r\n\t\t// клик не основной кнопкой мыши\r\n\t\tif (e.button !== 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// открыто другое меню с posBy = fixed, сначала должно быть закрыто оно\r\n\t\tlet elPopupOpened = DOM.querySelectorVisibleLast(document.body, ':scope > .top-popup-wrapper');\r\n\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// открыто другое меню в top-popup-front, сначала должно быть закрыто оно\r\n\t\telPopupOpened = DOM.querySelectorVisibleLast(e.target.closest('.top-popup-front'), ':scope > .top-popup-wrapper');\r\n\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// клик внутри этого меню\r\n\t\tif (this.elPopup.contains(e.target)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// клик вне родительского диалогового окна\r\n\t\tif (this.elPopup.closest('.ui-dialog') && !e.target.closest('.ui-dialog')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Worker.decoratorIsIgnoreOuterClick(e)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tWorker.close(this.elPopup);\r\n\t}\r\n\r\n\t/**\r\n\t * Закрыть другие Popup при фокусе на элемент формы в текущем\r\n\t * @param {Event} e\r\n\t */\r\n\tonFocus(e) {\r\n\t\tif (e.target.matches('input')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// // не оригинальное событие\r\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\r\n\t\t// \treturn;\r\n\t\t// }\r\n\r\n\t\t// это окно уже закрывается\r\n\t\tif (this.isClosed) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elsPopups = Worker.getAllVisible();\r\n\t\telsPopups.forEach(elPopup => {\r\n\t\t\t// фокус внутри этого окна\r\n\t\t\tif (this.elPopup.contains(elPopup)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// это Popup из которого был открыт Popup с фокусом\r\n\t\t\t// глубина вложенности: до 3 подменю\r\n\t\t\tif (\r\n\t\t\t\tthis.popupParent?.elPopup === elPopup ||\r\n\t\t\t\tthis.popupParent?.popupParent?.elPopup === elPopup\r\n\t\t\t) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tWorker.close(elPopup);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Закрыть Popup при отведении мыши\r\n\t * @param {Event} _e\r\n\t */\r\n\tonMouseleave(_e) {\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (this.elPopupInner.matches(':hover')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tWorker.close(this.elPopup);\r\n\t\t}, 100);\r\n\t}\r\n\r\n\t/**\r\n\t * Контроль положения Popup при fixed позиционировании\r\n\t */\r\n\tonResize() {\r\n\t\t// на android при вызове метода append сбрасывается фокус с input внутри this.elPopup\r\n\t\tif (this.elPopup.parentElement !== document.body) {\r\n\t\t\tdocument.body.append(this.elPopup);\r\n\t\t}\r\n\r\n\t\tthis.elPopup.style.top = DOM.offset(this.el).top + 'px';\r\n\t\tthis.elPopup.style.left = DOM.offset(this.el).left + 'px';\r\n\t}\r\n\r\n\tunmount() {\r\n\t\tsuper.unmount();\r\n\r\n\t\tthis.el.dataset.topPopupOpened = '';\r\n\t\tif (!this.elActiveByDefault) {\r\n\t\t\tthis.el.classList.remove('top-active');\r\n\t\t}\r\n\r\n\t\tlet style = this.el.getAttribute('style');\r\n\t\tif (style) {\r\n\t\t\tstyle = style.replace(/position:[^;]*;?/g, '');\r\n\t\t\tthis.el.setAttribute('style', style);\r\n\t\t}\r\n\t}\r\n\r\n\t// контроль за положением Popup, чтобы оно не вылезало за пределы документа\r\n\trecalcPosition() {\r\n\t\tlet p = this.options.p;\r\n\t\tlet leftPos;\r\n\r\n\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\r\n\r\n\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\r\n\t\tthis.elPopup.classList.add('p' + p);\r\n\r\n\t\tswitch (this.options.posBy) {\r\n\t\t\tcase 'left':\r\n\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || 0);\r\n\t\t\t\tleftPos += this.shift.left;\r\n\t\t\t\tthis.elPopup.style.left = leftPos + 'px';\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'right':\r\n\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || 0);\r\n\t\t\t\tthis.elPopup.style.right = this.el.offsetParent.offsetWidth - this.el.offsetWidth - leftPos + 'px';\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'fixed':\r\n\t\t\t\tthis.addEventListenerWithUnmount(window, 'resize', () => this.onResize());\r\n\r\n\t\t\t\tthis.onResize();\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthis.options.posBy.append(this.elPopup);\r\n\t\t}\r\n\r\n\t\t// контроль за пложением Popup, чтобы оно не вылезало за пределы документа\r\n\t\tconst boundingClientRect = this.elPopup.getBoundingClientRect();\r\n\t\tthis.elPopup.style.setProperty('--top-popup-height', this.elPopup.offsetHeight + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-right-bounding', boundingClientRect.right + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-bottom-bounding', boundingClientRect.bottom + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-top', boundingClientRect.top + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-left', boundingClientRect.left + 'px');\r\n\r\n\t\tthis.elPopupInner.style.maxWidth = 'unset';\r\n\t\tthis.elPopupInner.style.maxHeight = 'unset';\r\n\r\n\t\tlet outTop = false;\r\n\t\tlet outRight = false;\r\n\t\tlet outBottom = false;\r\n\t\tlet outLeft = false;\r\n\r\n\t\t// имеет ли смысл прикреплять окно к другой стороне кнопки\r\n\t\tlet usefulInvertX = boundingClientRect.left > window.innerWidth / 2;\r\n\t\tlet usefulInvertY = boundingClientRect.top > window.innerHeight / 2;\r\n\r\n\t\tif (p === 4) {\r\n\t\t\tusefulInvertX = !usefulInvertX;\r\n\t\t}\r\n\r\n\t\tif (p === 1) {\r\n\t\t\tusefulInvertY = !usefulInvertY;\r\n\t\t}\r\n\r\n\t\tconst contentBoundingClientRect = this.elPopupInner.getBoundingClientRect();\r\n\t\tconst contentRight = window.innerWidth - contentBoundingClientRect.right;\r\n\t\tconst contentBottom = window.innerHeight - contentBoundingClientRect.bottom;\r\n\r\n\t\tconst margin = 8;\r\n\r\n\t\tif (contentBoundingClientRect.top < margin) {\r\n\t\t\toutTop = true;\r\n\t\t}\r\n\r\n\t\tif (contentRight < margin) {\r\n\t\t\toutRight = true;\r\n\t\t}\r\n\r\n\t\tif (contentBottom < margin) {\r\n\t\t\toutBottom = true;\r\n\t\t}\r\n\r\n\t\tif (contentBoundingClientRect.left < margin) {\r\n\t\t\toutLeft = true;\r\n\t\t}\r\n\r\n\t\tif (outTop && (p === 0 || p === 1) && usefulInvertY) {\r\n\t\t\tp = 3;\r\n\t\t}\r\n\r\n\t\tif (outBottom && p === 3 && usefulInvertY) {\r\n\t\t\tp = 1;\r\n\t\t}\r\n\r\n\t\tif (outRight && p === 2 && usefulInvertX) {\r\n\t\t\tp = 4;\r\n\t\t}\r\n\r\n\t\tif (outLeft && p === 4 && usefulInvertX) {\r\n\t\t\tp = 2;\r\n\t\t}\r\n\r\n\t\tif (outRight && (p === 0 || p === 1 || p === 3)) {\r\n\t\t\tthis.elPopup.classList.add('invert-x');\r\n\t\t}\r\n\r\n\t\tif (outBottom && (p === 2 || p === 4) && usefulInvertY) {\r\n\t\t\t// меню справа может перемещаться вверх, толкьо если есть место слева\r\n\t\t\tif (p === 2 && !usefulInvertX) {\r\n\t\t\t\tthis.elPopup.classList.add('invert-y');\r\n\t\t\t}\r\n\r\n\t\t\t// меню слева перемещаясь вверх, должно открываться влево\r\n\t\t\tif (p === 4 && !usefulInvertX) {\r\n\t\t\t\tthis.elPopup.classList.add('invert-x');\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.elPopup.matches('.invert-y')) {\r\n\t\t\t\tp = 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\r\n\t\tthis.elPopup.classList.add('p' + p);\r\n\r\n\t\tthis.elPopupInner.style.maxWidth = '';\r\n\t\tthis.elPopupInner.style.maxHeight = '';\r\n\r\n\t\tWorker.scrollToActive(this.elPopup);\r\n\t};\r\n\r\n\tonTouchmove(e) {\r\n\t\t// разрешить горизональный скролл\r\n\t\tlet hasScrollX = e.currentTarget.scrollWidth > e.currentTarget.offsetWidth;\r\n\t\tif (hasScrollX) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// разрешить горизональный скролл\r\n\t\tlet hasScrollX2 = e.target.parentElement.scrollWidth > e.target.parentElement.offsetWidth;\r\n\t\tif (hasScrollX2) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!e.currentTarget.matches('.has_scroll')) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t}\r\n\r\n\tclose() {\r\n\t\tif (this.isClosed) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isClosed = true;\r\n\r\n\t\tif (this.$) {\r\n\t\t\tthis.$.trigger('afterclose.top-menu-popup', [jQuery(this.elPopup)]);\r\n\t\t}\r\n\r\n\t\tif (Worker.noClose) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.unmount();\r\n\r\n\t\tthis.elPopup.classList.add('top-popup-wrapper-closed');\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.vueClose();\r\n\r\n\t\t\tif (this.options.useOriginal) {\r\n\t\t\t\tthis.elPopup.removeAttribute('style');\r\n\t\t\t\tthis.elPopup.classList.remove('top-popup-wrapper-shown', 'top-popup-wrapper-closed');\r\n\t\t\t\tthis.elPopup.classList.add('template');\r\n\t\t\t\tthis.elStartPosition.append(this.elPopup);\r\n\r\n\t\t\t\tthis.elPopup.querySelector('div.top-popup_content.top-column')?.classList.remove('top-column');\r\n\t\t\t\tthis.elPopup.querySelector('.notch-border')?.remove();\r\n\t\t\t\tthis.elPopup.querySelector('.notch')?.remove();\r\n\r\n\t\t\t\tthis.elPopupInner.replaceWith(...this.elPopupInner.childNodes);\r\n\r\n\t\t\t\tDOM.storageClear(this.elPopup);\r\n\t\t\t} else {\r\n\t\t\t\tDOM.storageClear(this.elPopup);\r\n\r\n\t\t\t\tthis.elPopup.remove();\r\n\t\t\t\tdelete this.elPopup;\r\n\t\t\t}\r\n\r\n\t\t\tconst elsPopups = Worker.getAllVisible();\r\n\t\t\tconst elPopupLast = elsPopups.length && elsPopups[elsPopups.length - 1];\r\n\r\n\t\t\tif (elPopupLast) {\r\n\t\t\t\tWorker.getPopup(elPopupLast).focus();\r\n\t\t\t} else {\r\n\t\t\t\tdocument.documentElement.classList.remove('with_popup');\r\n\t\t\t}\r\n\t\t}, 300);\r\n\t}\r\n\r\n\tasync vueOpen() {\r\n\t\tawait this.vueGetComponent()?.onOpen(this);\r\n\t}\r\n\r\n\tvueClose() {\r\n\t\tthis.vueGetComponent()?.onClose(this);\r\n\t}\r\n\r\n\t// получить vueConnectors компонента Popup\r\n\tvueGetComponent() {\r\n\t\treturn Worker.vueConnectors.get(this.el.dataset.topPopupId);\r\n\t}\r\n}\r\n\r\nGlobalEvents.init();\r\n\r\nexport default Popup;"],"names":["Component","componentName","el","options","component","DOM","eventData","type","listener","_options","nodes","node","_a","GlobalEvents","e","elCloser","elPopup","elUl","elItem","Worker","elBtn","elFooterLastBtn","elLink","elItemActive","elMore","elsLiVisible","countLi","index","css","cssM","cssPC","Core","Popup","vueConnector","classes","existsWidgetSearch","fromTop","elPopupOpened","_c","_b","_e","style","p","leftPos","boundingClientRect","outTop","outRight","outBottom","outLeft","usefulInvertX","usefulInvertY","contentBoundingClientRect","contentRight","contentBottom","margin","elsPopups","elPopupLast"],"mappings":";;;;AAKA,MAAMA,EAAU;AAAA,EAEf,OAAO,gBAAgB;AAAA,EAEvB;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA,UAAU,CAAA;AAAA;AAAA,EAEV,aAAwB,CAAA;AAAA,EACxB,gBAAuB,CAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,KAAMC,GAAuBC,GAAaC,GAAmC;AAC5E,QAAI,CAACD;AACJ,YAAMD,IAAgB;AAGvB,UAAMG,IAAYJ,EAAU,aAAaE,GAAID,CAAa;AAE1D,QAAIG;AACH,aAAAA,EAAU,OAAOD,CAAO,GAEjBC;AAGR,SAAK,gBAAgBH,GAChB,KAAA,YAAY,QAAQA,EAAc,CAAC,EAAE,YAAY,IAAIA,EAAc,UAAU,CAAC,GAC9E,KAAA,MAAM,KAAK,iBAAiB,KAAK,OAAW,IAAA,IAAI,QAAQ,KAAK,EAAE,GAEpE,KAAK,cAAcC,CAAE,GACrB,KAAK,KAAKA,GACV,KAAK,GAAG,UAAU,IAAI,KAAK,SAAS,GACpC,KAAK,UAAU,OAAO,OAAO,KAAK,SAASC,CAAO,GAElD,KAAK,MAAM;AAAA,EACZ;AAAA;AAAA,EAGA,OAAO,aAAcD,GAAaD,GAA4B;AAC7D,WAAOI,EAAI,QAAQH,GAAI,MAAMD,CAAa;AAAA,EAC3C;AAAA;AAAA,EAGA,cAAeC,GAAa;AAC3B,IAAAG,EAAI,QAAQH,GAAI,MAAM,KAAK,eAAe,IAAI;AAAA,EAC/C;AAAA;AAAA,EAGA,QAAe;AACd,UAAM,8CAA8C,KAAK;AAAA,EAC1D;AAAA;AAAA,EAGA,UAAiB;AAChB,IAAAG,EAAI,QAAQ,KAAK,IAAI,MAAM,KAAK,eAAe,IAAI,GAE9C,KAAA,WAAW,QAAQ,CAACH,MAAO;AAC/B,MAAAA,EAAG,OAAO;AAAA,IAAA,CACV,GAED,KAAK,aAAa,IAEb,KAAA,cAAc,QAAQ,CAACI,MAAc;AACzC,MAAAA,EAAU,GAAG,oBAAoBA,EAAU,MAAMA,EAAU,UAAUA,EAAU,OAAO;AAAA,IAAA,CACtF,GAED,KAAK,gBAAgB;EACtB;AAAA;AAAA,EAGA,qBAAsBJ,GAAmB;AACnC,SAAA,WAAW,KAAKA,CAAE;AAAA,EACxB;AAAA;AAAA,EAGA,4BACCA,GACAK,GACAC,GACAL,GACO;AACJ,IAAAD,EAAA,iBAAiBK,GAAMC,GAAUL,CAAO,GAE3C,KAAK,wBAAwBD,GAAIK,GAAMC,GAAUL,CAAO;AAAA,EACzD;AAAA;AAAA,EAGA,wBACCD,GACAK,GACAC,GACAL,GACO;AACP,UAAMG,IAAY;AAAA,MACjB,IAAAJ;AAAA,MACA,MAAAK;AAAA,MACA,UAAAC;AAAA,MACA,SAAAL;AAAA,IAAA;AAGI,SAAA,cAAc,KAAKG,CAAS;AAAA,EAClC;AAAA;AAAA,EAGA,OAAQG,GAAwB;AAC/B,UAAM,+CAA+C,KAAK;AAAA,EAC3D;AAAA;AAAA,EAMA,OAAO,OAAQC,GAAkB;;AAChC,QAAIA,EAAM;AACT,MAAAA,EAAM,QAAQ,CAACC,MAAe;;AAAA,gBAAAC,IAAAD,EAAK,kBAAL,gBAAAC,EAAoB,YAAYD;AAAA,OAAK;AAAA,SAC7D;AACN,YAAMT,IAAKQ;AACR,OAAAE,IAAAV,EAAA,kBAAA,QAAAU,EAAe,YAAYV;AAAA,IAC/B;AAAA,EACD;AAED;ACzHA,MAAMW,EAAa;AAAA,EAClB,OAAO,OAAO;AACb,aAAS,iBAAiB,SAAS,KAAK,OAAO,GAC/C,SAAS,iBAAiB,WAAW,KAAK,SAAS;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOD,OAAO,QAAQC,GAAG;;AAEjB,UAAMC,IAAWD,EAAE,OAAO,QAAQ,6BAA6B;AAC/D,QAAIC,GAAU;AAEb,YAAMC,IAAUF,EAAE,OAAO,QAAQ,oBAAoB;AAQrD,UALI,CAACE,KAKDD,EAAS,QAAQ,qBAAqB;AACzC;AASD,UALIA,EAAS,aAAa,MAAM,MAAM,OACrCD,EAAE,eAAc,GAIbA,EAAE,OAAO,QAAQ,kBAAkB,GAAG;AAEzC,cAAMG,IAAOH,EAAE,OAAO,QAAQ,IAAI,GAG5BI,IAASJ,EAAE,OAAO,QAAQ,OAAO;AAGvC,QAAIG,OACHL,IAAAK,EAAK,cAAc,6BAA6B,MAAhD,QAAAL,EAAmD,UAAU,OAAO,gBAGjEM,KACHA,EAAO,UAAU,IAAI,YAAY;AAGlC;AAAA,MACA;AAGD,MAAAC,EAAO,MAAMH,CAAO;AAAA,IACpB;AAGD,QAAIF,EAAE,OAAO,QAAQ,oBAAoB,GAAG;AAC3C,YAAME,IAAUF,EAAE;AAElB,MAAAK,EAAO,MAAMH,CAAO;AAAA,IACpB;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMD,OAAO,UAAUF,GAAG;;AACnB,UAAME,IAAUF,EAAE,OAAO,QAAQ,oBAAoB;AAGrD,QAAI,CAACE;AACJ;AAGD,UAAMC,IAAOD,EAAQ,cAAc,sBAAsB;AAEzD,YAAQF,EAAE,KAAG;AAAA,MACZ,KAAK;AACJ,QAAAK,EAAO,MAAMH,CAAO;AAEpB;AAAA,MAED,KAAK;AAEJ,YAAI,CAACC,GAAM;AACV,cAAIZ,EAAI,qBAAqBW,GAAS,YAAY;AACjD;AAID,gBAAMI,IAAQf,EAAI,qBAAqBW,GAAS,wDAAwD;AACxG,cAAII,GAAO;AACV,YAAAA,EAAM,MAAK;AAEX;AAAA,UACA;AAGD,gBAAMC,IAAkBhB,EAAI,yBAAyBW,GAAS,+BAA+B;AAC7F,UAAIK,KACHA,EAAgB,MAAK;AAGtB;AAAA,QACA;AAID,cAAMC,IAASjB,EAAI,qBAAqBW,GAAS,mBAAmB;AACpE,QAAIM,MAEHR,EAAE,eAAc,GAEhB,SAAS,OAAOQ,EAAO,aAAa,MAAM;AAI3C,cAAMJ,IAASF,EAAQ,cAAc,kBAAkB;AACvD,QAAIE,KACHA,EAAO,MAAK;AAGb;AAAA,MAGD,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACJ,YAAI,CAACD;AACJ;AAGD,QAAIH,EAAE,QAAQ,gBAAgBA,EAAE,QAAQ,cACjBT,EAAI;AAAA,UAAqBW;AAAA,UAC9C;AAAA,QAA8F,KAE9FF,EAAE,eAAc,IAGjBA,EAAE,eAAc;AAGjB,cAAMS,KAAeX,IAAAI,EAAQ,cAAc,wEAAwE,MAA9F,gBAAAJ,EAAiG;AAGtH,YAAIE,EAAE,QAAQ,gBAAgBS,GAAc;AAM3C,gBAAMC,IAASD,EAAa,cAAc,mCAAmC;AAC7E,cAAIC;AACH,mBAAOA,EAAO;QAEf;AAED,cAAMC,IAAepB,EAAI,wBAAwBW,GAAS,0DAA0D,GAC9GU,IAAUD,EAAa;AAE7B,YAAI,CAACC;AACJ;AAGD,YAAIC,IAAQF,EAAa,QAAQF,CAAY;AAS7C,YAPIT,EAAE,QAAQ,aAAaA,EAAE,QAAQ,cACpCa,MAEAA,KAIGb,EAAE,QAAQ,eAAea,MAAU;AACtC,iBAAIb,EAAE,OAAO,QAAQ,OAAO,IAC3B,SAGMK,EAAO,MAAMH,CAAO;AAI5B,YAAIF,EAAE,QAAQ,gBAAgBa,MAAUD;AACvC;AAGD,QAAIC,IAAQ,MACXA,IAAQD,IAAU,IAGfC,IAAQD,IAAU,MACrBC,IAAQ,IAGTX,EAAQ,iBAAiB,yCAAyC,EAAE,QAAQ,CAAAd,MAAMA,EAAG,UAAU,OAAO,YAAY,CAAC,GACnHuB,EAAaE,CAAK,EAAE,cAAc,yBAAyB,EAAE,UAAU,IAAI,YAAY,GAEvFR,EAAO,eAAeH,CAAO;AAE7B;AAAA,IACD;AAAA,EACD;AAEF;ACxNA,MAAeY,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gECAAC,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8HCAAC,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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"}
|