@topvisor/ui 1.3.3-addStoreHashClearing.0 → 1.3.3

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.
Files changed (68) hide show
  1. package/.chunks/{core-BrkcXLtM.es.js → core-PgN-H_aP.es.js} +4 -4
  2. package/.chunks/{core-BrkcXLtM.es.js.map → core-PgN-H_aP.es.js.map} +1 -1
  3. package/.chunks/{datepicker-Dfl91fRZ.es.js → datepicker-lHzfJ7vE.es.js} +2 -2
  4. package/.chunks/{datepicker-Dfl91fRZ.es.js.map → datepicker-lHzfJ7vE.es.js.map} +1 -1
  5. package/.chunks/{dialog_selectorRegions-QbGG0L91.es.js → dialog_selectorRegions-Ccsrpo2C.es.js} +55 -53
  6. package/.chunks/{dialog_selectorRegions-QbGG0L91.es.js.map → dialog_selectorRegions-Ccsrpo2C.es.js.map} +1 -1
  7. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-8LLCo4IK.es.js → dialogs.vue_vue_type_script_setup_true_lang-Bei7eCOi.es.js} +2 -2
  8. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-8LLCo4IK.es.js.map → dialogs.vue_vue_type_script_setup_true_lang-Bei7eCOi.es.js.map} +1 -1
  9. package/.chunks/{forms-BWoAyEVH.es.js → forms-CuEEAPvm.es.js} +5 -5
  10. package/.chunks/{forms-BWoAyEVH.es.js.map → forms-CuEEAPvm.es.js.map} +1 -1
  11. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-_3WmLmPV.es.js +186 -0
  12. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-Dljef_xa.es.js.map → listItem.vue_vue_type_script_setup_true_lang-_3WmLmPV.es.js.map} +1 -1
  13. package/.chunks/{menu.vue_vue_type_style_index_0_lang-HDPVVgzy.es.js → menu.vue_vue_type_style_index_0_lang-Ct0tivnh.es.js} +35 -33
  14. package/.chunks/{menu.vue_vue_type_style_index_0_lang-HDPVVgzy.es.js.map → menu.vue_vue_type_style_index_0_lang-Ct0tivnh.es.js.map} +1 -1
  15. package/.chunks/notice-Aw2dLsyE.es.js +194 -0
  16. package/.chunks/{notice-DYd206Yd.es.js.map → notice-Aw2dLsyE.es.js.map} +1 -1
  17. package/.chunks/{page.vue_vue_type_script_setup_true_lang-B26E2LsY.es.js → page.vue_vue_type_script_setup_true_lang-x02Y0eiE.es.js} +4 -4
  18. package/.chunks/{page.vue_vue_type_script_setup_true_lang-B26E2LsY.es.js.map → page.vue_vue_type_script_setup_true_lang-x02Y0eiE.es.js.map} +1 -1
  19. package/.chunks/{popup-1pqtx_O5.es.js → popup-axQQEyIk.es.js} +2 -2
  20. package/.chunks/{popup-1pqtx_O5.es.js.map → popup-axQQEyIk.es.js.map} +1 -1
  21. package/.chunks/popupHint.vue_vue_type_style_index_0_lang-Cce9ZdtW.amd.js +2 -0
  22. package/.chunks/popupHint.vue_vue_type_style_index_0_lang-Cce9ZdtW.amd.js.map +1 -0
  23. package/.chunks/{utils-Dk7uXZsi.es.js → utils-BHW-ownM.es.js} +2 -2
  24. package/.chunks/{utils-Dk7uXZsi.es.js.map → utils-BHW-ownM.es.js.map} +1 -1
  25. package/.chunks/{utils-C_yz4vdX.es.js → utils-D1fvioEG.es.js} +3 -3
  26. package/.chunks/{utils-C_yz4vdX.es.js.map → utils-D1fvioEG.es.js.map} +1 -1
  27. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-Cr_jgOW4.es.js → widgetInput.vue_vue_type_script_setup_true_lang-IWJIVl4_.es.js} +2 -2
  28. package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-Cr_jgOW4.es.js.map → widgetInput.vue_vue_type_script_setup_true_lang-IWJIVl4_.es.js.map} +1 -1
  29. package/charts/charts.js +62 -60
  30. package/charts/charts.js.map +1 -1
  31. package/core/app.amd.js +1 -1
  32. package/core/app.amd.js.map +1 -1
  33. package/core/app.js +26 -26
  34. package/core/app.js.map +1 -1
  35. package/dialog/dialog.js +2 -2
  36. package/extra/extra.js +22 -20
  37. package/extra/extra.js.map +1 -1
  38. package/forms/forms.js +1 -1
  39. package/formsExt/formsExt.amd.js +1 -1
  40. package/formsExt/formsExt.amd.js.map +1 -1
  41. package/formsExt/formsExt.js +115 -113
  42. package/formsExt/formsExt.js.map +1 -1
  43. package/layout/layout.js +37 -35
  44. package/layout/layout.js.map +1 -1
  45. package/package.json +1 -1
  46. package/popup/popup.amd.js +1 -1
  47. package/popup/popup.amd.js.map +1 -1
  48. package/popup/popup.js +9 -4
  49. package/popup/worker.js +2 -2
  50. package/project/project.js +245 -243
  51. package/project/project.js.map +1 -1
  52. package/tabs/tabs.js +28 -26
  53. package/tabs/tabs.js.map +1 -1
  54. package/tabsView/tabsView.amd.js +1 -1
  55. package/tabsView/tabsView.amd.js.map +1 -1
  56. package/tabsView/tabsView.js +67 -65
  57. package/tabsView/tabsView.js.map +1 -1
  58. package/utils/clipboard.js +1 -1
  59. package/utils/date.js +1 -1
  60. package/utils/device.js +1 -1
  61. package/utils/lodash.js +1 -1
  62. package/utils/price.js +1 -1
  63. package/utils/searchers.js +3 -3
  64. package/utils/string.js +1 -1
  65. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-Dljef_xa.es.js +0 -184
  66. package/.chunks/notice-DYd206Yd.es.js +0 -192
  67. package/.chunks/popupHint.vue_vue_type_style_index_0_lang-BCpRWeKK.amd.js +0 -2
  68. package/.chunks/popupHint.vue_vue_type_style_index_0_lang-BCpRWeKK.amd.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"notice-DYd206Yd.es.js","sources":["../../src/components/core/notice/utils.ts","../../src/components/core/notice/item/item.vue","../../src/components/core/notice/notice.vue"],"sourcesContent":["import { reactive } from 'vue';\nimport type { Props as ItemProps, Props, Style } from '@/components/core/notice/item/types';\nimport Core from '@/core/core/core';\nimport { genIntHash } from '@/core/utils/string';\n\nexport const transitionDuration = 300;\n\nexport type Item = Props & { onClose?: Function };\n\nexport const itemById = reactive(new Map<string, Item>());\n\nconst genItemId = (text: ItemProps['text'], style: ItemProps['style'], options?: Options) => {\n\treturn 'top-notice_' + genIntHash(text + style + JSON.stringify(options));\n};\n\nexport type Options = {\n\ttitle?: ItemProps['title'],\n\tmetaText?: ItemProps['metaText'],\n\tbuttonProps?: ItemProps['buttonProps'],\n\tbuttonsProps?: ItemProps['buttonsProps'],\n\tisSafeHTML?: ItemProps['isSafeHTML'],\n\tselectToClose?: ItemProps['selectToClose'],\n\tonClose?: Function\n}\n\n/**\n * Показать сообщением в стиле push уведомления\n *\n * title будет получен из первой строки text\n *\n * Если в options указан title, он будет взят оттуда\n */\nexport const show = (text: string, style: Style = 'info', options?: Options) => {\n\tlet title = '';\n\n\ttext = String(text);\n\n\tconst id = genItemId(text, style, options);\n\n\tif (options?.title) {\n\t\ttitle = options.title;\n\t} else {\n\t\tconst chunks = text.split('\\n');\n\n\t\tif (chunks.length) {\n\t\t\ttitle = String(chunks.shift());\n\t\t\ttext = chunks.join('\\n');\n\t\t}\n\t}\n\n\tconst itemExists = itemById.get(id);\n\tif (itemExists) {\n\t\thightlight(itemExists);\n\n\t\treturn;\n\t}\n\n\tconst item: Item = {\n\t\tid,\n\t\ttitle,\n\t\ttext,\n\t\tstyle,\n\t\tbuttonProps: options?.buttonProps,\n\t\tbuttonsProps: options?.buttonsProps,\n\t\tmetaText: options?.metaText,\n\t\tisSafeHTML: options?.isSafeHTML,\n\t\tselectToClose: options?.selectToClose,\n\t\tonClose: options?.onClose,\n\t};\n\n\titemById.set(item.id, item);\n\n\tif (itemById.size > 5) {\n\t\tconst [_firstId, firstItem] = [...itemById].at(0) || [];\n\t\tif (firstItem) close(firstItem);\n\t}\n\n\t/**\n\t * Автозакрытие ошибок форм\n\t *\n\t * Добавляет\n\t */\n\tif (Core.state.isMobile) {\n\t\t$('input').one('click', () => close(item));\n\t}\n};\n\nconst hightlight = (item: Item) => {\n\titem.hightlight = true;\n\n\tsetTimeout(() => item.hightlight = false, transitionDuration);\n};\n\nconst close = (item: Item) => {\n\titem.forceClosed = true;\n\n\tsetTimeout(() => {\n\t\titem.onClose?.();\n\n\t\titemById.delete(item.id);\n\t}, transitionDuration);\n};\n\n/**\n * Убрать подозрительный html код\n */\nexport const prepareText = (text: string) => {\n\tconst textNoSafety = 'hacking was detected';\n\n\ttext = text.replace(/<script/g, textNoSafety);\n\ttext = text.replace(/<img/g, textNoSafety);\n\ttext = text.replace(/<iframe/g, textNoSafety);\n\ttext = text.replace(/javascript:/g, textNoSafety);\n\ttext = text.replace(/<[^>]+ (@|on)\\w+=[^>]+>?/g, textNoSafety);\n\n\treturn text;\n};\n","<script setup lang=\"ts\">\nimport { computed, ref, withDefaults } from 'vue';\n\nimport Core from '@/core/core/core';\nimport { nl2br } from '@/core/utils/string';\n\nimport type { Emits, Props } from './types';\nimport { prepareText, transitionDuration } from '@/components/core/notice/utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tselectToClose: true,\n});\n\nconst emit = defineEmits<Emits>();\n\n// анимация появления\nconst showed = ref(false);\nsetTimeout(() => showed.value = true, 10);\n\n// анимация закрытия\nconst closed = ref(false);\nconst closedDirection = ref<'top' | 'right' | 'bottom' | 'left'>('right');\n\nconst title = computed(() => {\n\tlet res = props.title.replace(/ {2}/g, '&nbsp;');\n\n\tif (!props.isSafeHTML) res = prepareText(res);\n\n\treturn res;\n});\n\nconst text = computed(() => {\n\tlet res = nl2br(props.text);\n\n\tres = res.replace(/ {2}/g, '&nbsp;');\n\n\tif (!props.isSafeHTML) res = prepareText(res);\n\n\treturn res;\n});\n\nconst close = (direction?: typeof closedDirection.value) => {\n\tclosed.value = true;\n\n\tif (direction) {\n\t\tclosedDirection.value = direction;\n\t}\n\n\tsetTimeout(() => emit('close'), transitionDuration);\n};\n\nconst onClick = (e: MouseEvent) => {\n\tif (!props.selectToClose) return;\n\n\tconst { tagName } = e.target as HTMLElement;\n\n\tif (tagName === 'A') close();\n\tif (tagName === 'BUTTON') close();\n};\n\nconst vSwipe = {\n\tmounted: (el: HTMLElement) => {\n\t\tif (!Core.state.isMobile) return;\n\n\t\tif (!Core.$ || !Core.$.ui['draggable']) return;\n\n\t\tlet direction: typeof closedDirection.value = 'right';\n\n\t\tlet axis = 'x';\n\t\t// if (getOS() === 'iOS') axis = 'y';\n\n\t\tCore.$(el).draggable({\n\t\t\trevert: false,\n\t\t\taxis,\n\t\t\tdrag: (_e, ui) => {\n\t\t\t\tif (axis == 'x') {\n\t\t\t\t\tdirection = ui.position.left > 0 ? 'right' : 'left';\n\t\t\t\t} else {\n\t\t\t\t\tdirection = ui.position.top > 0 ? 'bottom' : 'top';\n\t\t\t\t}\n\t\t\t},\n\t\t\tstop: (_e, _ui) => {\n\t\t\t\tclose(direction);\n\t\t\t},\n\t\t});\n\t},\n};\n\n// const vSwipe = {\n// \tmounted: (el: HTMLElement) => {\n// \t\tconst { distanceX, direction } = usePointerSwipe(el, {\n// \t\t\tdisableTextSelect: true,\n// \t\t\tonSwipe(e: PointerEvent) {\n// \t\t\t\tleft.value = -distanceX.value + 'px';\n// \t\t\t},\n// \t\t\tonSwipeEnd: (_e, direction) => {\n// \t\t\t\tclose(direction);\n// \t\t\t},\n// \t\t});\n// \t},\n// };\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-notice_item\"\n\t\t:class=\"{\n\t\t\t['top-notice_item-' + style]: true,\n\t\t\t'top-notice_item-hightlight': hightlight,\n\t\t\t'top-notice_item-showed': showed,\n\t\t\t'top-notice_item-closed': closed || forceClosed,\n\t\t\t['top-notice_item-closed_' + closedDirection]: closed,\n\t\t}\"\n\t\t@click=\"onClick\"\n\t\tv-swipe\n\t>\n\t\t<div class=\"top-notice_itemTextWrapper\">\n\t\t\t<div v-if=\"title\" class=\"top-notice_itemTitle\" v-html=\"title\"></div>\n\t\t\t<div v-if=\"text\" class=\"top-notice_itemText\" v-html=\"text\"></div>\n\t\t</div>\n\n\t\t<TopButton\n\t\t\tv-if=\"buttonProps\"\n\t\t\tclass=\"top-notice_itemButton\"\n\t\t\tsize=\"s\"\n\t\t\t:=\"buttonProps\"\n\t\t\t:title=\"buttonProps.title\"\n\t\t\tv-html=\"buttonProps.default\"\n\t\t\t@click=\"close()\"\n\t\t/>\n\n\t\t<div\n\t\t\tv-if=\"buttonsProps?.length\"\n\t\t\tclass=\"top-notice_itemButtons\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tv-for=\"buttonProps in buttonsProps\"\n\t\t\t\tclass=\"top-notice_itemButton\"\n\t\t\t\tsize=\"s\"\n\t\t\t\t:=\"buttonProps\"\n\t\t\t\t:title=\"buttonProps.title\"\n\t\t\t\tv-html=\"buttonProps.default\"\n\t\t\t\t@click=\"close()\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div v-if=\"metaText\" class=\"top-notice_itemMetaText\" v-html=\"metaText\"></div>\n\n\t\t<div\n\t\t\tclass=\"top-notice_itemClose\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t:title=\"$i18n.Common.Close\"\n\t\t\t@click=\"() => close()\"\n\t\t></div>\n\t</div>\n</template>\n\n<style>\n@import \"style.css\";\n</style>\n","<!-- performance all in one file component, для Core.notice() -->\n<script lang=\"ts\">\nexport { show } from './utils';\n</script>\n\n<script setup lang=\"ts\">\nimport type { Item } from './utils';\nimport { itemById } from './utils';\n\nimport type { Props } from './types';\nimport TopNoticeItem from './item/item.vue';\n\ndefineProps<Props>();\n\nconst onCloseItem = (item: Item) => {\n\titem.onClose?.();\n\n\titemById.delete(item.id);\n};\n</script>\n\n<template>\n\t<teleport to=\"body\">\n\t\t<div class=\"top-notice\">\n\t\t\t<TopNoticeItem\n\t\t\t\tv-for=\"[_index, item] in itemById\"\n\t\t\t\t:key=\"item.id\"\n\t\t\t\t:id=\"item.id\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:text=\"item.text\"\n\t\t\t\t:style=\"item.style\"\n\t\t\t\t:buttonProps=\"item.buttonProps\"\n\t\t\t\t:buttonsProps=\"item.buttonsProps\"\n\t\t\t\t:metaText=\"item.metaText\"\n\t\t\t\t:isSafeHTML=\"item.isSafeHTML\"\n\t\t\t\t:forceClosed=\"item.forceClosed\"\n\t\t\t\t:hightlight=\"item.hightlight\"\n\t\t\t\t@close=\"onCloseItem(item)\"\n\t\t\t/>\n\t\t</div>\n\t</teleport>\n</template>\n\n<style>\n:root {\n\t--top-notice-top: var(--top-padding-4);\n\t--top-notice-right: var(--top-padding-4);\n}\n\n.top-notice {\n\twidth: 400px;\n\tfont-size: 14px;\n\tposition: fixed; top: var(--top-notice-top); right: var(--top-notice-right);\n\tz-index: 1000010;\n\tdisplay: flex; flex-direction: column-reverse; gap: var(--top-gap-2);\n}\n\n.top-notice ul {\n\tpadding: 0 0 0 var(--top-padding-5);\n}\n\n@media only screen and (max-width: 600px) {\n\t:root {\n\t\t--top-notice-top: var(--top-padding-4);\n\t\t--top-notice-right: var(--top-padding-4);\n\t}\n\n\t.top-notice { width: auto; left: var(--top-notice-right); }\n}\n</style>\n"],"names":["transitionDuration","itemById","reactive","genItemId","text","style","options","genIntHash","show","title","id","chunks","itemExists","hightlight","item","_firstId","firstItem","close","Core","_a","prepareText","textNoSafety","props","__props","emit","__emit","showed","ref","closed","closedDirection","computed","res","nl2br","direction","onClick","e","tagName","vSwipe","el","_e","ui","_ui","normalizeClass","_ctx","forceClosed","openBlock","createElementBlock","_hoisted_2","createCommentVNode","_hoisted_3","_cache","$event","Fragment","renderList","buttonProps","createBlock","_component_TopButton","mergeProps","metaText","_hoisted_6","onCloseItem","createElementVNode","_hoisted_1","unref","_index","normalizeStyle"],"mappings":"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"}
1
+ {"version":3,"file":"notice-Aw2dLsyE.es.js","sources":["../../src/components/core/notice/utils.ts","../../src/components/core/notice/item/item.vue","../../src/components/core/notice/notice.vue"],"sourcesContent":["import { reactive } from 'vue';\nimport type { Props as ItemProps, Props, Style } from '@/components/core/notice/item/types';\nimport Core from '@/core/core/core';\nimport { genIntHash } from '@/core/utils/string';\n\nexport const transitionDuration = 300;\n\nexport type Item = Props & { onClose?: Function };\n\nexport const itemById = reactive(new Map<string, Item>());\n\nconst genItemId = (text: ItemProps['text'], style: ItemProps['style'], options?: Options) => {\n\treturn 'top-notice_' + genIntHash(text + style + JSON.stringify(options));\n};\n\nexport type Options = {\n\ttitle?: ItemProps['title'],\n\tmetaText?: ItemProps['metaText'],\n\tbuttonProps?: ItemProps['buttonProps'],\n\tbuttonsProps?: ItemProps['buttonsProps'],\n\tisSafeHTML?: ItemProps['isSafeHTML'],\n\tselectToClose?: ItemProps['selectToClose'],\n\tonClose?: Function\n}\n\n/**\n * Показать сообщением в стиле push уведомления\n *\n * title будет получен из первой строки text\n *\n * Если в options указан title, он будет взят оттуда\n */\nexport const show = (text: string, style: Style = 'info', options?: Options) => {\n\tlet title = '';\n\n\ttext = String(text);\n\n\tconst id = genItemId(text, style, options);\n\n\tif (options?.title) {\n\t\ttitle = options.title;\n\t} else {\n\t\tconst chunks = text.split('\\n');\n\n\t\tif (chunks.length) {\n\t\t\ttitle = String(chunks.shift());\n\t\t\ttext = chunks.join('\\n');\n\t\t}\n\t}\n\n\tconst itemExists = itemById.get(id);\n\tif (itemExists) {\n\t\thightlight(itemExists);\n\n\t\treturn;\n\t}\n\n\tconst item: Item = {\n\t\tid,\n\t\ttitle,\n\t\ttext,\n\t\tstyle,\n\t\tbuttonProps: options?.buttonProps,\n\t\tbuttonsProps: options?.buttonsProps,\n\t\tmetaText: options?.metaText,\n\t\tisSafeHTML: options?.isSafeHTML,\n\t\tselectToClose: options?.selectToClose,\n\t\tonClose: options?.onClose,\n\t};\n\n\titemById.set(item.id, item);\n\n\tif (itemById.size > 5) {\n\t\tconst [_firstId, firstItem] = [...itemById].at(0) || [];\n\t\tif (firstItem) close(firstItem);\n\t}\n\n\t/**\n\t * Автозакрытие ошибок форм\n\t *\n\t * Добавляет\n\t */\n\tif (Core.state.isMobile) {\n\t\t$('input').one('click', () => close(item));\n\t}\n};\n\nconst hightlight = (item: Item) => {\n\titem.hightlight = true;\n\n\tsetTimeout(() => item.hightlight = false, transitionDuration);\n};\n\nconst close = (item: Item) => {\n\titem.forceClosed = true;\n\n\tsetTimeout(() => {\n\t\titem.onClose?.();\n\n\t\titemById.delete(item.id);\n\t}, transitionDuration);\n};\n\n/**\n * Убрать подозрительный html код\n */\nexport const prepareText = (text: string) => {\n\tconst textNoSafety = 'hacking was detected';\n\n\ttext = text.replace(/<script/g, textNoSafety);\n\ttext = text.replace(/<img/g, textNoSafety);\n\ttext = text.replace(/<iframe/g, textNoSafety);\n\ttext = text.replace(/javascript:/g, textNoSafety);\n\ttext = text.replace(/<[^>]+ (@|on)\\w+=[^>]+>?/g, textNoSafety);\n\n\treturn text;\n};\n","<script setup lang=\"ts\">\nimport { computed, ref, withDefaults } from 'vue';\n\nimport Core from '@/core/core/core';\nimport { nl2br } from '@/core/utils/string';\n\nimport type { Emits, Props } from './types';\nimport { prepareText, transitionDuration } from '@/components/core/notice/utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tselectToClose: true,\n});\n\nconst emit = defineEmits<Emits>();\n\n// анимация появления\nconst showed = ref(false);\nsetTimeout(() => showed.value = true, 10);\n\n// анимация закрытия\nconst closed = ref(false);\nconst closedDirection = ref<'top' | 'right' | 'bottom' | 'left'>('right');\n\nconst title = computed(() => {\n\tlet res = props.title.replace(/ {2}/g, '&nbsp;');\n\n\tif (!props.isSafeHTML) res = prepareText(res);\n\n\treturn res;\n});\n\nconst text = computed(() => {\n\tlet res = nl2br(props.text);\n\n\tres = res.replace(/ {2}/g, '&nbsp;');\n\n\tif (!props.isSafeHTML) res = prepareText(res);\n\n\treturn res;\n});\n\nconst close = (direction?: typeof closedDirection.value) => {\n\tclosed.value = true;\n\n\tif (direction) {\n\t\tclosedDirection.value = direction;\n\t}\n\n\tsetTimeout(() => emit('close'), transitionDuration);\n};\n\nconst onClick = (e: MouseEvent) => {\n\tif (!props.selectToClose) return;\n\n\tconst { tagName } = e.target as HTMLElement;\n\n\tif (tagName === 'A') close();\n\tif (tagName === 'BUTTON') close();\n};\n\nconst vSwipe = {\n\tmounted: (el: HTMLElement) => {\n\t\tif (!Core.state.isMobile) return;\n\n\t\tif (!Core.$ || !Core.$.ui['draggable']) return;\n\n\t\tlet direction: typeof closedDirection.value = 'right';\n\n\t\tlet axis = 'x';\n\t\t// if (getOS() === 'iOS') axis = 'y';\n\n\t\tCore.$(el).draggable({\n\t\t\trevert: false,\n\t\t\taxis,\n\t\t\tdrag: (_e, ui) => {\n\t\t\t\tif (axis == 'x') {\n\t\t\t\t\tdirection = ui.position.left > 0 ? 'right' : 'left';\n\t\t\t\t} else {\n\t\t\t\t\tdirection = ui.position.top > 0 ? 'bottom' : 'top';\n\t\t\t\t}\n\t\t\t},\n\t\t\tstop: (_e, _ui) => {\n\t\t\t\tclose(direction);\n\t\t\t},\n\t\t});\n\t},\n};\n\n// const vSwipe = {\n// \tmounted: (el: HTMLElement) => {\n// \t\tconst { distanceX, direction } = usePointerSwipe(el, {\n// \t\t\tdisableTextSelect: true,\n// \t\t\tonSwipe(e: PointerEvent) {\n// \t\t\t\tleft.value = -distanceX.value + 'px';\n// \t\t\t},\n// \t\t\tonSwipeEnd: (_e, direction) => {\n// \t\t\t\tclose(direction);\n// \t\t\t},\n// \t\t});\n// \t},\n// };\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-notice_item\"\n\t\t:class=\"{\n\t\t\t['top-notice_item-' + style]: true,\n\t\t\t'top-notice_item-hightlight': hightlight,\n\t\t\t'top-notice_item-showed': showed,\n\t\t\t'top-notice_item-closed': closed || forceClosed,\n\t\t\t['top-notice_item-closed_' + closedDirection]: closed,\n\t\t}\"\n\t\t@click=\"onClick\"\n\t\tv-swipe\n\t>\n\t\t<div class=\"top-notice_itemTextWrapper\">\n\t\t\t<div v-if=\"title\" class=\"top-notice_itemTitle\" v-html=\"title\"></div>\n\t\t\t<div v-if=\"text\" class=\"top-notice_itemText\" v-html=\"text\"></div>\n\t\t</div>\n\n\t\t<TopButton\n\t\t\tv-if=\"buttonProps\"\n\t\t\tclass=\"top-notice_itemButton\"\n\t\t\tsize=\"s\"\n\t\t\t:=\"buttonProps\"\n\t\t\t:title=\"buttonProps.title\"\n\t\t\tv-html=\"buttonProps.default\"\n\t\t\t@click=\"close()\"\n\t\t/>\n\n\t\t<div\n\t\t\tv-if=\"buttonsProps?.length\"\n\t\t\tclass=\"top-notice_itemButtons\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tv-for=\"buttonProps in buttonsProps\"\n\t\t\t\tclass=\"top-notice_itemButton\"\n\t\t\t\tsize=\"s\"\n\t\t\t\t:=\"buttonProps\"\n\t\t\t\t:title=\"buttonProps.title\"\n\t\t\t\tv-html=\"buttonProps.default\"\n\t\t\t\t@click=\"close()\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div v-if=\"metaText\" class=\"top-notice_itemMetaText\" v-html=\"metaText\"></div>\n\n\t\t<div\n\t\t\tclass=\"top-notice_itemClose\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t:title=\"$i18n.Common.Close\"\n\t\t\t@click=\"() => close()\"\n\t\t></div>\n\t</div>\n</template>\n\n<style>\n@import \"style.css\";\n</style>\n","<!-- performance all in one file component, для Core.notice() -->\n<script lang=\"ts\">\nexport { show } from './utils';\n</script>\n\n<script setup lang=\"ts\">\nimport type { Item } from './utils';\nimport { itemById } from './utils';\n\nimport type { Props } from './types';\nimport TopNoticeItem from './item/item.vue';\n\ndefineProps<Props>();\n\nconst onCloseItem = (item: Item) => {\n\titem.onClose?.();\n\n\titemById.delete(item.id);\n};\n</script>\n\n<template>\n\t<teleport to=\"body\">\n\t\t<div class=\"top-notice\">\n\t\t\t<TopNoticeItem\n\t\t\t\tv-for=\"[_index, item] in itemById\"\n\t\t\t\t:key=\"item.id\"\n\t\t\t\t:id=\"item.id\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:text=\"item.text\"\n\t\t\t\t:style=\"item.style\"\n\t\t\t\t:buttonProps=\"item.buttonProps\"\n\t\t\t\t:buttonsProps=\"item.buttonsProps\"\n\t\t\t\t:metaText=\"item.metaText\"\n\t\t\t\t:isSafeHTML=\"item.isSafeHTML\"\n\t\t\t\t:forceClosed=\"item.forceClosed\"\n\t\t\t\t:hightlight=\"item.hightlight\"\n\t\t\t\t@close=\"onCloseItem(item)\"\n\t\t\t/>\n\t\t</div>\n\t</teleport>\n</template>\n\n<style>\n:root {\n\t--top-notice-top: var(--top-padding-4);\n\t--top-notice-right: var(--top-padding-4);\n}\n\n.top-notice {\n\twidth: 400px;\n\tfont-size: 14px;\n\tposition: fixed; top: var(--top-notice-top); right: var(--top-notice-right);\n\tz-index: 1000010;\n\tdisplay: flex; flex-direction: column-reverse; gap: var(--top-gap-2);\n}\n\n.top-notice ul {\n\tpadding: 0 0 0 var(--top-padding-5);\n}\n\n@media only screen and (max-width: 600px) {\n\t:root {\n\t\t--top-notice-top: var(--top-padding-4);\n\t\t--top-notice-right: var(--top-padding-4);\n\t}\n\n\t.top-notice { width: auto; left: var(--top-notice-right); }\n}\n</style>\n"],"names":["transitionDuration","itemById","reactive","genItemId","text","style","options","genIntHash","show","title","id","chunks","itemExists","hightlight","item","_firstId","firstItem","Core","close","_a","prepareText","textNoSafety","props","__props","emit","__emit","showed","ref","closed","closedDirection","computed","res","nl2br","direction","onClick","e","tagName","vSwipe","el","_e","ui","_ui","_createElementBlock","forceClosed","_createElementVNode","_hoisted_1","buttonProps","_openBlock","_createBlock","_component_TopButton","_mergeProps","buttonsProps","_hoisted_4","_Fragment","_renderList","metaText","$i18n","onCloseItem","_Teleport","_unref","_index","TopNoticeItem","_normalizeStyle","$event"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { defineComponent as v, provide as f, onMounted as w, getCurrentInstance as b, watch as $, createElementBlock as l, openBlock as s, unref as t, normalizeStyle as u, normalizeClass as n, createElementVNode as i, renderSlot as r, computed as k, resolveDirective as D, createCommentVNode as c, createBlock as h, Teleport as g, withDirectives as T } from "vue";
2
- import { g as _ } from "./dialogs.vue_vue_type_script_setup_true_lang-8LLCo4IK.es.js";
3
- import { C } from "./forms-BWoAyEVH.es.js";
4
- import { b as A } from "./utils-Dk7uXZsi.es.js";
2
+ import { g as _ } from "./dialogs.vue_vue_type_script_setup_true_lang-Bei7eCOi.es.js";
3
+ import { C } from "./forms-CuEEAPvm.es.js";
4
+ import { b as A } from "./utils-BHW-ownM.es.js";
5
5
  const B = ["id", "data-view-page-active", "data-modal", "data-position"], q = /* @__PURE__ */ v({
6
6
  __name: "dialog",
7
7
  props: {
@@ -140,4 +140,4 @@ export {
140
140
  q as _,
141
141
  G as a
142
142
  };
143
- //# sourceMappingURL=page.vue_vue_type_script_setup_true_lang-B26E2LsY.es.js.map
143
+ //# sourceMappingURL=page.vue_vue_type_script_setup_true_lang-x02Y0eiE.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"page.vue_vue_type_script_setup_true_lang-B26E2LsY.es.js","sources":["../../src/components/dialog/dialog/dialog.vue","../../src/components/dialog/dialog/page/page.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ComponentInternalInstance } from 'vue';\nimport { getCurrentInstance, onMounted, provide, watch } from 'vue';\nimport { getDialogWorker } from './dialogs/dialogs.vue';\nimport type { Emits, Props, Slots } from './types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\twidth: '600px',\n\theight: 'auto',\n\tmodal: true,\n\thistoryType: 'push',\n});\n\ndefineEmits<Emits>();\n\ndefineSlots<Slots>();\n\nconst dialog = getDialogWorker(props.id);\nif (!dialog) {\n\tthrow new Error('TopDialog cannot be used in a template, use useTopDialog() / useAsyncTopDialog()');\n}\n\n/**\n * Для useTopDialogSelf()\n */\nprovide('dialogWorker', dialog);\n\n/**\n * Инициализация начального состояния TopDialogHandle\n */\nonMounted(() => {\n\tconst topDialogBaseComponent = getCurrentInstance() as ComponentInternalInstance;\n\tconst topDialogComponent = topDialogBaseComponent.parent;\n\n\tif (topDialogComponent?.parent?.type.name !== 'DialogWrapper') {\n\t\tthrow new Error('TopDialog cannot be used in a template, use useTopDialog()');\n\t}\n\n\tif (Array.isArray(topDialogComponent.subTree.children) && topDialogComponent.subTree.children.length !== 1) {\n\t\tthrow new Error('TopDialog can has only one root element');\n\t}\n\n\tdialog.onMounted(topDialogComponent, topDialogBaseComponent);\n});\n\nwatch(dialog.isOpened, () => {\n\tdialog.isReady.value = true;\n}, {\n\tflush: 'post',\n\tonce: true,\n});\n</script>\n\n<template>\n\t<div\n\t\t:id=\"dialog.idAttr\"\n\t\tclass=\"top-dialog\"\n\t\t:class=\"classes\"\n\t\t:style=\"{\n\t\t\t'--top-dialog-width': width,\n\t\t\t'--top-dialog-height': height,\n\t\t}\"\n\t\ttabindex=\"-1\"\n\t\t:data-view-page-active=\"dialog.pageActive.value\"\n\t\t:data-modal=\"modal\"\n\t\t:data-position=\"position\"\n\t>\n\t\t<div class=\"modal-layer modal-layer-header\"></div>\n\n\t\t<div class=\"modal-layer modal-layer-body\" :style=\"{'min-height': height + 'px'}\"></div>\n\n\t\t<slot name=\"default\"></slot>\n\t</div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport Core from '@/core/core/core';\nimport { useTopDialogSelf } from '@/components/dialog/dialog/composables/utils';\nimport type { Props, Slots } from './types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\torder: 0,\n});\n\ndefineSlots<Slots>();\n\nconst dialog = useTopDialogSelf();\n\nconst classes = computed(() => {\n\treturn {\n\t\tactive: dialog.pageActive?.value === props.name,\n\t\t'i-load-data': props.isLoading || dialog.isLoadingPage.value,\n\t};\n});\n</script>\n\n<template>\n\t<div\n\t\tstyle=\"display: none\"\n\t\tv-if=\"dialog.isReady.value\"\n\t>\n\t\t<Teleport :to=\"'#' + dialog.idAttr + ' .modal-layer-header'\" :disabled=\"!dialog.needShowPage(name)\">\n\t\t\t<div\n\t\t\t\t:data-order=\"order\"\n\t\t\t\t:data-view-page=\"name\"\n\t\t\t\t:class=\"classes\"\n\t\t\t>\n\t\t\t\t<div class=\"modal-header\">\n\t\t\t\t\t<div class=\"top-title\">\n\t\t\t\t\t\t<slot name=\"header\"></slot>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"buttons\">\n\t\t\t\t\t\t<slot name=\"headerButtons\"></slot>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"Core.state.isMobile && prevName\"\n\t\t\t\t\t\tclass=\"close\"\n\t\t\t\t\t\t:title=\"$i18n.Common.Back\"\n\t\t\t\t\t\tdata-top-icon=\"\"\n\t\t\t\t\t\t@click=\"dialog.open(prevName)\"\n\t\t\t\t\t></div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\tclass=\"close\"\n\t\t\t\t\t\t:title=\"$i18n.Common.Close\"\n\t\t\t\t\t\tdata-top-icon=\"\"\n\t\t\t\t\t\tdata-action=\"top-dialog-close\"\n\t\t\t\t\t></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Teleport>\n\n\t\t<Teleport :to=\"'#' + dialog.idAttr + ' .modal-layer-body'\" :disabled=\"!dialog.needShowPage(name)\">\n\t\t\t<div\n\t\t\t\t:data-order=\"order\"\n\t\t\t\t:data-view-page=\"name\"\n\t\t\t\tclass=\"has_scroll_container\"\n\t\t\t\t:class=\"classes\"\n\t\t\t\t:style=\"{'--top-dialog-footer-height': $slots.footer ? undefined : '0px'}\"\n\t\t\t>\n\t\t\t\t<div class=\"modal-body\" v-top-scroll-shadow>\n\t\t\t\t\t<slot name=\"body\"></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div\n\t\t\t\t\tclass=\"modal-footer\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'modal-footer-fullWith': footerFullWith\n\t\t\t\t\t}\"\n\t\t\t\t\tv-if=\"$slots.footer\"\n\t\t\t\t>\n\t\t\t\t\t<slot name=\"footer\"></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Teleport>\n\t</div>\n</template>\n"],"names":["dialog","getDialogWorker","__props","provide","onMounted","topDialogBaseComponent","getCurrentInstance","topDialogComponent","_a","watch","_createElementBlock","_unref","_normalizeClass","classes","_normalizeStyle","width","height","modal","position","_createElementVNode","_renderSlot","_ctx","props","useTopDialogSelf","computed","_openBlock","_hoisted_1","_createBlock","_Teleport","name","order","_hoisted_3","_hoisted_4","_hoisted_5","Core","prevName","$i18n","_cache","$event","$slots","_withDirectives","_hoisted_9","footerFullWith"],"mappings":"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"}
1
+ {"version":3,"file":"page.vue_vue_type_script_setup_true_lang-x02Y0eiE.es.js","sources":["../../src/components/dialog/dialog/dialog.vue","../../src/components/dialog/dialog/page/page.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ComponentInternalInstance } from 'vue';\nimport { getCurrentInstance, onMounted, provide, watch } from 'vue';\nimport { getDialogWorker } from './dialogs/dialogs.vue';\nimport type { Emits, Props, Slots } from './types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\twidth: '600px',\n\theight: 'auto',\n\tmodal: true,\n\thistoryType: 'push',\n});\n\ndefineEmits<Emits>();\n\ndefineSlots<Slots>();\n\nconst dialog = getDialogWorker(props.id);\nif (!dialog) {\n\tthrow new Error('TopDialog cannot be used in a template, use useTopDialog() / useAsyncTopDialog()');\n}\n\n/**\n * Для useTopDialogSelf()\n */\nprovide('dialogWorker', dialog);\n\n/**\n * Инициализация начального состояния TopDialogHandle\n */\nonMounted(() => {\n\tconst topDialogBaseComponent = getCurrentInstance() as ComponentInternalInstance;\n\tconst topDialogComponent = topDialogBaseComponent.parent;\n\n\tif (topDialogComponent?.parent?.type.name !== 'DialogWrapper') {\n\t\tthrow new Error('TopDialog cannot be used in a template, use useTopDialog()');\n\t}\n\n\tif (Array.isArray(topDialogComponent.subTree.children) && topDialogComponent.subTree.children.length !== 1) {\n\t\tthrow new Error('TopDialog can has only one root element');\n\t}\n\n\tdialog.onMounted(topDialogComponent, topDialogBaseComponent);\n});\n\nwatch(dialog.isOpened, () => {\n\tdialog.isReady.value = true;\n}, {\n\tflush: 'post',\n\tonce: true,\n});\n</script>\n\n<template>\n\t<div\n\t\t:id=\"dialog.idAttr\"\n\t\tclass=\"top-dialog\"\n\t\t:class=\"classes\"\n\t\t:style=\"{\n\t\t\t'--top-dialog-width': width,\n\t\t\t'--top-dialog-height': height,\n\t\t}\"\n\t\ttabindex=\"-1\"\n\t\t:data-view-page-active=\"dialog.pageActive.value\"\n\t\t:data-modal=\"modal\"\n\t\t:data-position=\"position\"\n\t>\n\t\t<div class=\"modal-layer modal-layer-header\"></div>\n\n\t\t<div class=\"modal-layer modal-layer-body\" :style=\"{'min-height': height + 'px'}\"></div>\n\n\t\t<slot name=\"default\"></slot>\n\t</div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport Core from '@/core/core/core';\nimport { useTopDialogSelf } from '@/components/dialog/dialog/composables/utils';\nimport type { Props, Slots } from './types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\torder: 0,\n});\n\ndefineSlots<Slots>();\n\nconst dialog = useTopDialogSelf();\n\nconst classes = computed(() => {\n\treturn {\n\t\tactive: dialog.pageActive?.value === props.name,\n\t\t'i-load-data': props.isLoading || dialog.isLoadingPage.value,\n\t};\n});\n</script>\n\n<template>\n\t<div\n\t\tstyle=\"display: none\"\n\t\tv-if=\"dialog.isReady.value\"\n\t>\n\t\t<Teleport :to=\"'#' + dialog.idAttr + ' .modal-layer-header'\" :disabled=\"!dialog.needShowPage(name)\">\n\t\t\t<div\n\t\t\t\t:data-order=\"order\"\n\t\t\t\t:data-view-page=\"name\"\n\t\t\t\t:class=\"classes\"\n\t\t\t>\n\t\t\t\t<div class=\"modal-header\">\n\t\t\t\t\t<div class=\"top-title\">\n\t\t\t\t\t\t<slot name=\"header\"></slot>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"buttons\">\n\t\t\t\t\t\t<slot name=\"headerButtons\"></slot>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"Core.state.isMobile && prevName\"\n\t\t\t\t\t\tclass=\"close\"\n\t\t\t\t\t\t:title=\"$i18n.Common.Back\"\n\t\t\t\t\t\tdata-top-icon=\"\"\n\t\t\t\t\t\t@click=\"dialog.open(prevName)\"\n\t\t\t\t\t></div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\tclass=\"close\"\n\t\t\t\t\t\t:title=\"$i18n.Common.Close\"\n\t\t\t\t\t\tdata-top-icon=\"\"\n\t\t\t\t\t\tdata-action=\"top-dialog-close\"\n\t\t\t\t\t></div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Teleport>\n\n\t\t<Teleport :to=\"'#' + dialog.idAttr + ' .modal-layer-body'\" :disabled=\"!dialog.needShowPage(name)\">\n\t\t\t<div\n\t\t\t\t:data-order=\"order\"\n\t\t\t\t:data-view-page=\"name\"\n\t\t\t\tclass=\"has_scroll_container\"\n\t\t\t\t:class=\"classes\"\n\t\t\t\t:style=\"{'--top-dialog-footer-height': $slots.footer ? undefined : '0px'}\"\n\t\t\t>\n\t\t\t\t<div class=\"modal-body\" v-top-scroll-shadow>\n\t\t\t\t\t<slot name=\"body\"></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div\n\t\t\t\t\tclass=\"modal-footer\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'modal-footer-fullWith': footerFullWith\n\t\t\t\t\t}\"\n\t\t\t\t\tv-if=\"$slots.footer\"\n\t\t\t\t>\n\t\t\t\t\t<slot name=\"footer\"></slot>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Teleport>\n\t</div>\n</template>\n"],"names":["dialog","getDialogWorker","__props","provide","onMounted","topDialogBaseComponent","getCurrentInstance","topDialogComponent","_a","watch","_createElementBlock","_unref","_normalizeClass","classes","_normalizeStyle","width","height","modal","position","_createElementVNode","_renderSlot","_ctx","props","useTopDialogSelf","computed","_openBlock","_hoisted_1","_createBlock","_Teleport","name","order","_hoisted_3","_hoisted_4","_hoisted_5","Core","prevName","$i18n","_cache","$event","$slots","_withDirectives","_hoisted_9","footerFullWith"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { u as k, C as f } from "./forms-BWoAyEVH.es.js";
1
+ import { u as k, C as f } from "./forms-CuEEAPvm.es.js";
2
2
  import i from "../utils/dom.js";
3
3
  import { TopPopupWorker as s } from "../popup/worker.js";
4
4
  class w {
@@ -456,4 +456,4 @@ I.init();
456
456
  export {
457
457
  P as TopLibPopup
458
458
  };
459
- //# sourceMappingURL=popup-1pqtx_O5.es.js.map
459
+ //# sourceMappingURL=popup-axQQEyIk.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"popup-1pqtx_O5.es.js","sources":["../../src/components/component.ts","../../src/components/popup/lib/popup.globalEvents.ts","../../src/components/popup/lib/popup.ts"],"sourcesContent":["import DOM from '@/core/utils/dom';\n\n/**\n * Базовый компонент для js компонентов, не имеет отношения к Vue\n */\nclass Component {\n\n\tstatic componentName = 'Top';\n\n\tcomponentName: string | undefined; // имя класса компонента\n\tclassName: string | undefined; // имя css класса компонента\n\tuid: string | undefined; // уникальный id компонента\n\tel: HTMLElement | undefined; // элемент, связанный с компонентом\n\toptions = {}; // параметры компонента\n\n\tunmountEls: HTMLElement[] = [];\n\tunmountEvents: any[] = [];\n\n\t// переопредлять нельзя\n\t// если компонент инициирован, необходимо сразу его вернуть и выполнить reInit() вместо mount()\n\t// используется init вместо constructor, так как super constructor выполняется до Object.defineProperty() параметров класса\n\tinit(componentName: string, el: HTMLElement, options: object): Component | void {\n\t\tif (!el) {\n\t\t\tthrow componentName + ': el is undefined';\n\t\t}\n\n\t\tconst component = Component.getComponent(el, componentName);\n\n\t\tif (component) {\n\t\t\tcomponent.reInit(options);\n\n\t\t\treturn component;\n\t\t}\n\n\t\tthis.componentName = componentName;\n\t\tthis.className = 'top' + componentName[0].toUpperCase() + componentName.substring(1);\n\t\tthis.uid = this.componentName + (Math.random() + '').replace('.', '');\n\n\t\tthis._setComponent(el);\n\t\tthis.el = el;\n\t\tthis.el.classList.add(this.className);\n\t\tthis.options = Object.assign(this.options, options);\n\n\t\tthis.mount();\n\t}\n\n\t// получить инициированный компонент\n\tstatic getComponent(el: HTMLElement, componentName: string): any {\n\t\treturn DOM.storage(el, '#' + componentName);\n\t}\n\n\t// устанвоить компонент\n\t_setComponent(el: HTMLElement) {\n\t\tDOM.storage(el, '#' + this.componentName, this);\n\t}\n\n\t// функция подключения компонента\n\tmount(): void {\n\t\tthrow 'Please, add method mount() to component: ' + this.componentName;\n\t}\n\n\t// функция отключения компонента\n\tunmount(): void {\n\t\tDOM.storage(this.el, '#' + this.componentName, null);\n\n\t\tthis.unmountEls.forEach((el) => {\n\t\t\tel.remove();\n\t\t});\n\n\t\tthis.unmountEls = [];\n\n\t\tthis.unmountEvents.forEach((eventData) => {\n\t\t\teventData.el.removeEventListener(eventData.type, eventData.listener, eventData.options);\n\t\t});\n\n\t\tthis.unmountEvents = [];\n\t}\n\n\t// указание новые элементы, которые должны будут удалиться после unmount\n\tregisterElForUnmount(el: HTMLElement): void {\n\t\tthis.unmountEls.push(el);\n\t}\n\n\t// указание новые события, которые должны будут удалиться после unmount\n\taddEventListenerWithUnmount(\n\t\tel: HTMLElement | Document | Window,\n\t\ttype: keyof GlobalEventHandlersEventMap,\n\t\tlistener: (this: HTMLElement, e: Event) => any,\n\t\toptions?: any,\n\t): void {\n\t\tel.addEventListener(type, listener, options);\n\n\t\tthis.registerEventForUnmount(el, type, listener, options);\n\t}\n\n\t// указание новые события, которые должны будут удалиться после unmount\n\tregisterEventForUnmount(\n\t\tel: HTMLElement | Document | Window,\n\t\ttype: keyof GlobalEventHandlersEventMap,\n\t\tlistener: (this: HTMLElement, e: Event) => any,\n\t\toptions?: any,\n\t): void {\n\t\tconst eventData = {\n\t\t\tel: el,\n\t\t\ttype: type,\n\t\t\tlistener: listener,\n\t\t\toptions: options,\n\t\t};\n\n\t\tthis.unmountEvents.push(eventData);\n\t}\n\n\t// функция перенастройки уже подключенного компонента\n\treInit(_options: object): void {\n\t\tthrow 'Please, add method reInit() to component: ' + this.componentName;\n\t}\n\n\t// удалить элементы из DOM, но не из памяти\n\tstatic detach(nodes: NodeList | HTMLElement): void {\n\t\tif (nodes instanceof NodeList) {\n\t\t\tnodes.forEach((node) => node.parentElement?.removeChild(node));\n\t\t} else {\n\t\t\tconst el = nodes;\n\t\t\tel.parentElement?.removeChild(el);\n\t\t}\n\t}\n\n}\n\nexport default Component;\n","import Worker from '@/components/popup/lib/worker';\nimport DOM from '@/core/utils/dom';\n\n/**\n * Глобальные события, для реализации Popup\n * Автоматически инициируется при первой загрузке, не является выгружаемым модулем\n *\n * Если в меню встречает класс .preloader, то событие нажатия на кнопку через enter будет остановлено\n */\nclass GlobalEvents {\n\n\tprivate static isInited = false;\n\n\t/**\n\t * Добавить глобальные обработчики\n\t *\n\t * Добавляются на страницу один раз и навсегда\n\t */\n\tstatic init(): void {\n\t\tif (this.isInited) return;\n\n\t\tthis.isInited = true;\n\n\t\tdocument.addEventListener('click', this.onclickCapture, { capture: true });\n\t\tdocument.addEventListener('click', this.onclick);\n\t\tdocument.addEventListener('keydown', this.onkeydown);\n\t}\n\n\t/**\n\t * Глобальный обработчик захватов кликов\n\t *\n\t * Обрабатывает захватов клики внутри Popup\n\t */\n\tprivate static onclickCapture(e: Event): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\t// меню\n\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\t// клик вне меню\n\t\tif (!elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик по кнопке открытия другого меню\n\t\tif (e.target.matches('[data-top-popup]')) {\n\t\t\t// список меню, в котором был сделан клик\n\t\t\tconst elUl = e.target.closest<HTMLElement>('ul');\n\n\t\t\t// элемент меню, по которому был сделан клик\n\t\t\tconst elItem = e.target.closest<HTMLElement>('a, .a');\n\n\t\t\t// сделать элемент меню, по которому сделан клик активным\n\t\t\tif (elUl) {\n\t\t\t\telUl.querySelector('a.top-active, .a.top-active')?.classList.remove('top-active');\n\t\t\t}\n\n\t\t\tif (elItem) {\n\t\t\t\telItem.classList.add('top-active');\n\t\t\t}\n\n\t\t\te.stopPropagation();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// клик по фону меню\n\t\tif (e.target.matches('.top-popup-wrapper')) {\n\t\t\tconst elPopup = e.target;\n\n\t\t\tWorker.close(elPopup);\n\n\t\t\te.stopPropagation();\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Глобальный обработчик кликов\n\t *\n\t * Обрабатывает клики внутри Popup\n\t */\n\tprivate static onclick(e: Event): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\t// элементы меню, клик по которым должен его закрыть\n\t\tconst elCloser = e.target.closest<HTMLElement>('.closer, a, .a, .top-button');\n\t\tif (elCloser) {\n\t\t\t// меню\n\t\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\t\t// клик вне меню\n\t\t\tif (!elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// элемент имеет модификатор, запрещаюущий закрытие меню по клику на него\n\t\t\tif (elCloser.matches('.top-popup-noCloser')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// deprecated, ссылки с href=\".\" запрещены, они должны быть заменены на .top-popup_listItem-button\n\t\t\tif (elCloser.getAttribute('href') === '.') {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\t// закрыть меню\n\t\t\tWorker.close(elPopup);\n\t\t}\n\t}\n\n\t/**\n\t * Глобальный обработчик нажатия кнопки на клавиатуре\n\t */\n\tprivate static onkeydown(e: KeyboardEvent): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\tlet elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\tif (!elPopup) {\n\t\t\telPopup = Worker.getPopupFromOpener(e.target)?.elPopup ?? null;\n\t\t}\n\n\t\t// нажатие не в меню\n\t\tif (!elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elUl = elPopup.querySelector<HTMLElement>('ul.top-popup_content');\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tWorker.close(elPopup);\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Enter':\n\t\t\t\t// атоматическое нажатие кнопок при нажатии Enter\n\t\t\t\tif (!elUl) {\n\t\t\t\t\tif (DOM.querySelectorVisible(elPopup, '.preloader')) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// deprecated, старый код на сайте\n\t\t\t\t\tconst elBtn = DOM.querySelectorVisible(elPopup, '.top-popup_footer .go, .top-popup_footer [data-action]');\n\t\t\t\t\tif (elBtn instanceof HTMLElement) {\n\t\t\t\t\t\telBtn.click();\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Запуск клика последней кнопки, расположенной в footer'е Popup'а, нажатием клавиши Enter\n\t\t\t\t\tlet elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button:focus');\n\t\t\t\t\tif (!elFooterLastBtn) elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button');\n\t\t\t\t\tif (elFooterLastBtn instanceof HTMLElement) {\n\t\t\t\t\t\telFooterLastBtn.click();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// перейти по ссылке по нажатию на Enter\n\t\t\t\t// данный функуционал игнорирует SPA\n\t\t\t\tconst elLink = DOM.querySelectorVisible(elPopup, 'li > a.top-active');\n\t\t\t\tif (elLink && elLink.getAttribute('href')) {\n\t\t\t\t\t// фокус может находиться на другой ссылке\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tlocation.href = elLink.getAttribute('href')!;\n\t\t\t\t}\n\n\t\t\t\t// кликнуть по элементу меню по нажатию на Enter\n\t\t\t\tconst elItem = elPopup.querySelector<HTMLElement>('li > .top-active');\n\t\t\t\tif (elItem instanceof HTMLElement) {\n\t\t\t\t\telItem.click();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t// управление стрелками\n\t\t\tcase 'ArrowUp':\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tif (!elUl) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n\t\t\t\t\tconst elMoreVisible = DOM.querySelectorVisible(\n\t\t\t\t\t\telPopup,\n\t\t\t\t\t\t'ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active > .top-popup_listMore',\n\t\t\t\t\t);\n\n\t\t\t\t\tif (elMoreVisible) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}else if((e.target as HTMLElement).tagName === 'INPUT'){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tconst elItemActive = elPopup.querySelector<HTMLElement>('ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active')?.parentElement;\n\n\t\t\t\t// есть подменю\n\t\t\t\tif (e.key === 'ArrowRight' && elItemActive) {\n\t\t\t\t\t// const elItemMoreActive = elItemActive.querySelector<HTMLElement>('[data-top-popup].top-active');\n\t\t\t\t\t// if (elItemMoreActive) {\n\t\t\t\t\t// \treturn elItemMoreActive.click();\n\t\t\t\t\t// }\n\n\t\t\t\t\tconst elMore = elItemActive.querySelector<HTMLElement>('.top-active > .top-popup_listMore');\n\t\t\t\t\tif (elMore instanceof HTMLElement) {\n\t\t\t\t\t\treturn elMore.click();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst elsLiVisible = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li:not(.top-popup_liNoSelectable)');\n\t\t\t\tconst countLi = elsLiVisible.length;\n\n\t\t\t\tif (!countLi) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet index = -1;\n\t\t\t\tif (elItemActive) {\n\t\t\t\t\tindex = elsLiVisible.indexOf(elItemActive);\n\t\t\t\t}\n\n\t\t\t\tif (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {\n\t\t\t\t\tindex--;\n\t\t\t\t} else {\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\t// это первый элемен, \"Назад\" должен закрывать окно\n\t\t\t\tif (e.key === 'ArrowLeft' && index === -1) {\n\t\t\t\t\tif (e.target.matches('input')) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Worker.close(elPopup);\n\t\t\t\t}\n\n\t\t\t\t// это последний элемен, \"Вперед\" не должен ни чего делать\n\t\t\t\tif (e.key === 'ArrowRight' && index === countLi) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tindex = countLi - 1;\n\t\t\t\t}\n\n\t\t\t\tif (index > countLi - 1) {\n\t\t\t\t\tindex = 0;\n\t\t\t\t}\n\n\t\t\t\telPopup.querySelectorAll('ul.top-popup_content > li > .top-active').forEach(el => el.classList.remove('top-active'));\n\t\t\t\telsLiVisible[index].querySelector(':scope > a, :scope > .a')?.classList.add('top-active');\n\n\t\t\t\tWorker.scrollToActive(elPopup);\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n}\n\nexport default GlobalEvents;\n","import Core from '@/core/core/core';\nimport Component from '@/components/component';\nimport DOM from '@/core/utils/dom';\nimport Worker from '@/components/popup/lib/worker';\nimport GlobalEvents from '@/components/popup/lib/popup.globalEvents';\n\nimport css from '@/components/popup/popup/style/popup.css?inline';\nimport cssM from '@/components/popup/popup/style/popup.m.css?inline';\nimport cssPC from '@/components/popup/popup/style/popup.pc.css?inline';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { OpenerProps } from '../popup/types';\n\nCore.insertStyleToPage(css);\nCore.insertStyleToPage(cssM, 'm');\nCore.insertStyleToPage(cssPC, 'pc');\n\nexport interface PopupOptions {\n\tpopup?: string,\n\tid?: string,\n\tp?: number,\n\tnotch?: boolean,\n\tclass?: string,\n\tposBy?: 'left' | 'right' | 'fixed' | Element,\n\tfrontSelector?: string,\n\tinvertX?: boolean,\n\topenByHover?: boolean,\n\tuseOriginal?: boolean,\n\ttransitionDuration?: number,\n\tisFullScreen?: boolean,\n}\n\n/**\n * Основной объект js компонента TopPopup\n *\n * Добавляет jQuery события на this.el, если jQuery загружен:\n *\n * - aftershow.top-menu-popup\n * - afterclose.top-menu-popup\n */\nexport class TopLibPopup<T extends Record<string, any> | undefined = undefined> extends Component {\n\n\tstatic componentName = 'TopPopup';\n\n\tdeclare el: HTMLElement & { __TopPopupOpenerProps: OpenerProps<T> }; // элемент, вызвавший открытие Popup\n\telActiveByDefault: boolean | undefined; // элемент уже имеет класс top-active перед открытием окна\n\telPopup: HTMLElement | undefined; // Popup .top-popup-wrapper\n\telPopupInner: HTMLElement | undefined; // контентная часть Popup .top-popup\n\telPopupHeader: HTMLElement | undefined | null;\n\telPopupWidget: HTMLElement | undefined | null;\n\telPopupBody: HTMLElement | undefined | null;\n\telPopupFooter: HTMLElement | undefined | null;\n\telFront: HTMLElement | undefined | null;\n\topenerIsInput = false;\n\n\tpopupParent: TopLibPopup | undefined;\n\n\t$: JQuery<HTMLElement> | undefined; // только если есть jQuery\n\n\telStartPosition: HTMLElement | undefined | null; // используется для useOriginal\n\tshift = {\n\t\ttop: 0,\n\t\tleft: 0,\n\t};\n\tisClosed = false; // флаг того, что меню закрыто\n\tisFirstClick = true;\n\ttype: string | undefined; // selector или html\n\n\toptions: PopupOptions = {\n\t\tpopup: '', // selector, text\n\t\tp: 0, // положение меню (0 - над элементом, 1 - сверху, 2 - справа, 3 - снизу, 4 слева)\n\t\tnotch: false, // отображать ли клювик\n\n\t\tclass: '', // класс, добавляемый меню\n\n\t\tposBy: 'left', // способ привязки позиционирования меню (left/right - левый/правый край родителя, fixed - по документу)\n\t\tfrontSelector: '',\n\t\tinvertX: false, // базовая ордината - правая граница элемента, а не левая\n\t\topenByHover: false, // открывать при наведении\n\n\t\tuseOriginal: false, // использовать оригинальный шаблон, без клонирвоания (для сохранения состояния меню)\n\n\t\ttransitionDuration: 100, // значение прописано в css\n\n\t\tisFullScreen: false,\n\t};\n\n\tevents = {};\n\n\t/**\n\t * Создать Popup\n\t * @param el - элемент, открывающий меню\n\t * @param options\n\t */\n\tconstructor(el: HTMLElement, options: PopupOptions) {\n\t\tsuper();\n\n\t\tthis.init(TopLibPopup.componentName, el, options);\n\t}\n\n\tasync mount(): Promise<void> {\n\t\tif (!(this.el instanceof HTMLElement)) return;\n\t\tconst vueConnector = this.vueGetComponent();\n\n\t\tif (this.el.closest('.top-popup-wrapper')) this.popupParent = Worker.getPopup(this.el.closest('.top-popup-wrapper')!);\n\n\t\tawait this.mountJQuery();\n\n\t\tif (DOM.css(this.el, 'position') !== 'absolute') {\n\t\t\tthis.el.style.position = 'relative';\n\t\t}\n\n\t\tthis.el.dataset.topPopupOpened = 'opened';\n\t\tthis.elActiveByDefault = this.el.classList.contains('top-active');\n\t\tthis.el.classList.add('top-active');\n\n\t\tthis.openerIsInput = this.el.classList.contains('top-input');\n\n\t\tif (vueConnector) {\n\t\t\t// компонент vue Popup\n\t\t\tthis.type = 'vue';\n\n\t\t\tthis.options.popup = '';\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup);\n\t\t} else if (this.options.popup?.match(/^[#.]/)) {\n\t\t\t// selector\n\t\t\tthis.type = 'selector';\n\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.template`) || undefined;\n\t\t} else {\n\t\t\t// html\n\t\t\tthis.type = 'html';\n\n\t\t\tif (this.options.useOriginal) {\n\t\t\t\tthrow ('Option useOriginal not allowed for text templates');\n\t\t\t}\n\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup ?? '');\n\t\t}\n\n\t\tif (!this.elPopup || vueConnector?.opened) {\n\t\t\t// возможно шаблон не найден, так как он используется в уже открытом меню\n\t\t\tif (this.options.useOriginal || vueConnector?.opened) {\n\t\t\t\t// закрыть открытое меню\n\t\t\t\tif (vueConnector?.opened) {\n\t\t\t\t\tthis.elPopup = vueConnector.popup.elPopup;\n\t\t\t\t} else {\n\t\t\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.top-popup-wrapper-shown`) || undefined;\n\t\t\t\t}\n\n\t\t\t\tif (this.elPopup) {\n\t\t\t\t\tthis.el.dataset.topPopupOpened = '';\n\n\t\t\t\t\tif (!this.elActiveByDefault) {\n\t\t\t\t\t\tthis.el.classList.remove('top-active');\n\t\t\t\t\t}\n\n\t\t\t\t\tWorker.close(this.elPopup);\n\n\t\t\t\t\t// повторит попытку открыть меню\n\t\t\t\t\tsetTimeout(() => this.mount(), this.options.transitionDuration);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow ('Option useOriginal state allowed only elements .template');\n\t\t\t}\n\n\t\t\t// возможно вместо шаблона используется другой элемент\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}:not(.top-popup-wrapper)`) || undefined;\n\t\t}\n\n\t\tif (!this.elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.useOriginal) {\n\t\t\tthis.elStartPosition = this.elPopup.closest<HTMLElement>('.top-popup-el-start-position');\n\t\t\tif (!this.elStartPosition) {\n\t\t\t\tthis.elStartPosition = DOM.wrap(this.elPopup, 'i');\n\t\t\t\tthis.elStartPosition.classList.add('top-popup-el-start-position', 'hidden');\n\t\t\t}\n\t\t} else {\n\t\t\tthis.elPopup = this.elPopup.cloneNode(true) as HTMLElement;\n\n\t\t\t// вывод в меню копии произвольного элемента\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template')) {\n\t\t\t\tthis.elPopup.classList.remove('hidden');\n\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\n\t\t\t\t}\n\n\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\n\t\t\t}\n\n\t\t\tif (this.type === 'html') {\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\n\n\t\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// вложенный Popup\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template') || this.type === 'html' || this.type === 'vue') {\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '[data-top-popup]').forEach(el => {\n\t\t\t\t\tif (el instanceof HTMLElement) el.dataset.topPopupPosBy = 'fixed';\n\t\t\t\t});\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '.top-popup-wrapper').forEach(el => el.remove());\n\t\t\t}\n\t\t}\n\n\t\tWorker.decoratorBeforeOpen(this);\n\n\t\tif (vueConnector) {\n\t\t\tthis.options.class = vueConnector.classRef.value;\n\t\t\tif (vueConnector.transitionDurationRef.value !== undefined) {\n\t\t\t\tthis.options.transitionDuration = vueConnector.transitionDurationRef.value;\n\n\t\t\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\t\t\tthis.elPopup.style.setProperty(\n\t\t\t\t\t\t'--top-popup-transition-delay',\n\t\t\t\t\t\tthis.options.transitionDuration + 'ms',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.elPopupInner = document.createElement('div');\n\t\tthis.elPopupInner.classList.add('top-popupPanel', 'top-popup');\n\n\t\twhile (this.elPopup.firstChild) {\n\t\t\tthis.elPopupInner.appendChild(this.elPopup.firstChild);\n\t\t}\n\n\t\tthis.elPopup.append(this.elPopupInner);\n\n\t\tthis.elPopup.classList.add('top-popup-wrapper');\n\n\t\tif (this.options.class) {\n\t\t\tconst classes = this.options.class.split(' ');\n\t\t\tthis.elPopup.classList.add(...classes);\n\t\t}\n\n\t\tif (this.options.notch) {\n\t\t\tthis.elPopup.classList.add('with_notch');\n\t\t\tthis.elPopup.insertAdjacentHTML('beforeend', '<i class=\"notch notch-border\"></i><i class=\"notch\"></i>');\n\t\t}\n\n\t\tawait this.vueOpen();\n\n\t\tthis.elPopupHeader = this.elPopupInner.querySelector<HTMLElement>('.top-popup_header');\n\t\tthis.elPopupWidget = this.elPopupInner.querySelector<HTMLElement>('.top-popup_widget');\n\t\tthis.elPopupBody = this.elPopupInner.querySelector<HTMLElement>('.top-popup_content');\n\t\tthis.elPopupFooter = this.elPopupInner.querySelector<HTMLElement>('.top-popup_footer');\n\n\t\tconst existsWidgetSearch = !!this.elPopup.querySelector('[data-widget=\"search\"]');\n\n\t\tif (this.options.isFullScreen && !existsWidgetSearch) {\n\t\t\tconst i18n = useI18n();\n\n\t\t\tif (!this.elPopupHeader && i18n.Common.Close) {\n\t\t\t\tthis.elPopupHeader = DOM.genEl('i', { class: 'top-popup_header' });\n\t\t\t\tthis.elPopupInner.prepend(this.elPopupHeader);\n\n\t\t\t\tthis.elPopupHeader.prepend(DOM.genEl('i', { class: 'a closer' }, i18n.Common.Close));\n\t\t\t\tthis.elPopupHeader.append(DOM.genEl('i', { class: 'top-popup_headerButton' }));\n\t\t\t}\n\t\t}\n\n\t\tDOM.storage(this.elPopup, TopLibPopup.componentName, this);\n\n\t\tif (this.options.frontSelector) {\n\t\t\tthis.elFront = document.querySelector<HTMLElement>(this.options.frontSelector);\n\t\t}\n\t\tif (!this.elFront) {\n\t\t\tthis.elFront = this.el.closest<HTMLElement>('.top-popup-front');\n\t\t}\n\t\tif (!this.elFront) {\n\t\t\tthis.elFront = document.body;\n\t\t}\n\n\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.width = this.el.offsetWidth + 'px';\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\n\t\t\tthis.elPopup.style.top = this.el.offsetTop + 'px';\n\t\t\tthis.elPopup.style.right = parseInt(this.el.style.right || '0') + 'px';\n\t\t\tthis.elPopup.style.bottom = parseInt(this.el.style.bottom || '0') + 'px';\n\t\t}\n\n\t\tthis.el.parentElement?.insertBefore(this.elPopup, this.el);\n\t\tthis.elPopup.classList.remove('template');\n\n\t\tif (this.options.invertX) {\n\t\t\tthis.elPopup.classList.add('invert-x');\n\t\t}\n\n\t\tlet fromTop = !!this.el.closest('.modal-header');\n\t\tif (!fromTop) {\n\t\t\tfromTop = !!this.el.closest('#top_panel');\n\t\t}\n\t\tif (!fromTop) {\n\t\t\tfromTop = !!this.el.closest('#secondmenu');\n\t\t}\n\t\tif (fromTop) {\n\t\t\tthis.elPopup.classList.add('p-from-top');\n\t\t}\n\n\t\t// появление с анимацией\n\t\tsetTimeout(() => this.elPopup?.classList.add('top-popup-wrapper-shown'));\n\n\t\tif (this.elFront && !this.elFront.matches('body')) {\n\t\t\tthis.elFront.append(this.elPopup);\n\n\t\t\tthis.shift.top = DOM.offset(this.el).top - this.el.offsetTop - DOM.offset(this.elFront).top;\n\t\t\tthis.shift.left = DOM.offset(this.el).left - this.el.offsetLeft - DOM.offset(this.elFront).left;\n\n\t\t\t// position() не учитывает margin, замечено для flex\n\t\t\tthis.shift.top -= parseInt(this.el.style['margin-top'] || 0);\n\t\t\tthis.shift.left -= parseInt(this.el.style['margin-left'] || 0);\n\n\t\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\t\tthis.elPopup.style.top = parseInt(this.elPopup.style.top || '0') + this.shift.top + 'px';\n\t\t\t\tthis.elPopup.style.left = parseInt(this.elPopup.style.left || '0') + this.shift.left + 'px';\n\t\t\t}\n\t\t}\n\n\t\tif (this.$ && Core.$) {\n\t\t\tthis.$.trigger('aftershow.top-menu-popup', [Core.$(this.elPopup)]);\n\t\t}\n\n\t\tthis.recalcPosition();\n\n\t\tthis.elPopup.setAttribute('tabindex', '0');\n\t\tthis.focus();\n\n\t\tWorker.decoratorAfterOpen(this);\n\n\t\tthis.mountEvents();\n\t}\n\n\tasync mountJQuery() {\n\t\tif (!Core.$) return;\n\n\t\tthis.$ = Core.$(this.el);\n\t}\n\n\t/**\n\t * Выполнить фокусировку на нужный элемент после открытия окна\n\t */\n\tfocus(): void {\n\t\tlet el: Element | null;\n\n\t\tif (this.elPopup) {\n\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup-autofocus');\n\n\t\t\t// поле ввода\n\t\t\tif (!el) {\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, ':read-write, select:not(:disabled)');\n\t\t\t}\n\n\t\t\t// кнопка\n\t\t\tif (!el) {\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup_footer .top-button');\n\t\t\t}\n\n\t\t\tif (!el) {\n\t\t\t\tel = this.elPopup;\n\t\t\t}\n\n\t\t\tif (!this.openerIsInput) {\n\t\t\t\t// выполнить фокусировку сразу, для применения необходимых стилей\n\t\t\t\tif (el instanceof HTMLElement) el.focus();\n\n\t\t\t\t// выполнить фокусировку после завершения анимации открытия popup\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (el instanceof HTMLElement) el.focus();\n\t\t\t\t}, this.options.transitionDuration);\n\t\t\t}\n\t\t}\n\t}\n\n\tmountEvents(): void {\n\t\t// закрытие при клике вне контекстного меню\n\t\tthis.addEventListenerWithUnmount(document, 'mousedown', (e) => this.onMousedown(e as MouseEvent));\n\n\t\tif (this.elPopup && this.elPopupInner) {\n\t\t\t// закрыть другие меню\n\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'focus', (e) => this.onFocus(e as FocusEvent));\n\n\t\t\t// автоматическое закрытие при отведении мыши\n\t\t\tif (this.options.openByHover) {\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopupInner, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\n\t\t\t}\n\t\t}\n\n\t\t// не скроллить страницу\n\t\tif (this.options.isFullScreen && this.elPopupBody) {\n\t\t\tthis.addEventListenerWithUnmount(this.elPopupBody, 'touchmove', (e) => this.onTouchmove(e as TouchEvent));\n\t\t}\n\t}\n\n\t/**\n\t * Обработка клика вне окна\n\t */\n\tprivate onMousedown(e: MouseEvent): void {\n\t\t// // не оригинальное событие\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\n\t\t// \treturn;\n\t\t// }\n\n\t\t// Popup уже закрыт\n\t\tif (!this.elPopup || !(e.target instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик на внешнем элементе\n\t\tif (!this.isFirstClick) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isFirstClick = false;\n\t\tsetTimeout(() => this.isFirstClick = true);\n\n\t\t// клик не основной кнопкой мыши\n\t\tif (e instanceof MouseEvent && e.button !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// открыто другое меню с posBy = fixed, сначала должно быть закрыто оно\n\t\tlet elPopupOpened = DOM.querySelectorVisibleLast(document.body, ':scope > .top-popup-wrapper');\n\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\t// открыто другое меню в top-popup-front, сначала должно быть закрыто оно\n\t\tif (e.target.closest('.top-popup-front')) {\n\t\t\telPopupOpened = DOM.querySelectorVisibleLast(e.target.closest('.top-popup-front')!, ':scope > .top-popup-wrapper');\n\n\t\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// клик внутри этого меню\n\t\tif (this.elPopup.contains(e.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик вне родительского диалогового окна\n\t\tif (this.elPopup.closest('.ui-dialog') && !e.target.closest('.ui-dialog')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Worker.decoratorIsIgnoreOuterClick(e)) {\n\t\t\treturn;\n\t\t}\n\n\t\tWorker.close(this.elPopup);\n\t}\n\n\t/**\n\t * Закрыть другие Popup при фокусе на элемент формы в текущем\n\t */\n\tprivate onFocus(e: FocusEvent): void {\n\t\tif (e.target instanceof Element && e.target.matches('input')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// // не оригинальное событие\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\n\t\t// \treturn;\n\t\t// }\n\n\t\t// это окно уже закрывается\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elsPopups = Worker.getAllVisible();\n\t\telsPopups.forEach(elPopup => {\n\t\t\t// фокус внутри этого окна\n\t\t\tif (this.elPopup?.contains(elPopup)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// это Popup из которого был открыт Popup с фокусом\n\t\t\t// глубина вложенности: до 3 подменю\n\t\t\tif (\n\t\t\t\tthis.popupParent?.elPopup === elPopup ||\n\t\t\t\tthis.popupParent?.popupParent?.elPopup === elPopup\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.close(elPopup);\n\t\t});\n\t}\n\n\t/**\n\t * Закрыть Popup при отведении мыши\n\t */\n\tprivate onMouseleave(_e: MouseEvent): void {\n\t\tsetTimeout(() => {\n\t\t\tif (this.elPopupInner && this.elPopupInner.matches(':hover') || !this.elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.close(this.elPopup);\n\t\t}, 100);\n\t}\n\n\t/**\n\t * Контроль положения Popup при fixed позиционировании\n\t */\n\tprivate onResize(): void {\n\t\t// на android при вызове метода append сбрасывается фокус с input внутри this.elPopup\n\t\tif (this.elPopup && this.elPopup.parentElement !== document.body) {\n\t\t\tdocument.body.append(this.elPopup);\n\t\t}\n\n\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.top = DOM.offset(this.el).top + 'px';\n\t\t\tthis.elPopup.style.left = DOM.offset(this.el).left + 'px';\n\t\t}\n\t}\n\n\tunmount(): void {\n\t\tsuper.unmount();\n\n\t\tif (this.el instanceof HTMLElement) this.el.dataset.topPopupOpened = '';\n\t\tif (!this.elActiveByDefault) {\n\t\t\tthis.el.classList.remove('top-active');\n\t\t}\n\n\t\tlet style = this.el.getAttribute('style');\n\t\tif (style) {\n\t\t\tstyle = style.replace(/position:[^;]*;?/g, '');\n\t\t\tthis.el.setAttribute('style', style);\n\t\t}\n\t}\n\n\t// контроль за положением Popup, чтобы оно не вылезало за пределы документа\n\trecalcPosition(pForce?: typeof this.options.p): void {\n\t\tif (!(this.elPopup instanceof HTMLElement)) return;\n\n\t\tlet p = pForce ?? this.options.p;\n\t\tlet leftPos: number;\n\n\t\tif (this.el instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\n\n\t\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\n\t\t\tthis.elPopup.classList.add('p' + p);\n\n\t\t\tswitch (this.options.posBy) {\n\t\t\t\tcase 'left':\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\n\t\t\t\t\tleftPos += this.shift.left;\n\t\t\t\t\tthis.elPopup.style.left = leftPos + 'px';\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'right':\n\t\t\t\t\tif (!(this.el.offsetParent instanceof HTMLElement)) break;\n\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\n\t\t\t\t\tthis.elPopup.style.right = this.el.offsetParent.offsetWidth - this.el.offsetWidth - leftPos + 'px';\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'fixed':\n\t\t\t\t\tthis.addEventListenerWithUnmount(window, 'resize', () => this.onResize());\n\n\t\t\t\t\tthis.onResize();\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.options.posBy?.append(this.elPopup);\n\t\t\t}\n\t\t}\n\n\t\t// контроль за пложением Popup, чтобы оно не вылезало за пределы документа\n\t\tconst boundingClientRect = this.elPopup.getBoundingClientRect();\n\t\tthis.elPopup.style.setProperty('--top-popup-height', this.elPopup.offsetHeight + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-right-bounding', boundingClientRect.right + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-bottom-bounding', boundingClientRect.bottom + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-top', boundingClientRect.top + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-left', boundingClientRect.left + 'px');\n\n\t\tif (this.elPopupInner instanceof HTMLElement) {\n\t\t\tthis.elPopupInner.style.maxWidth = 'unset';\n\t\t\tthis.elPopupInner.style.maxHeight = 'unset';\n\t\t}\n\n\t\t// выходит ли popup за экран с конкретного края\n\t\tconst out = {\n\t\t\ttop: false,\n\t\t\tright: false,\n\t\t\tbottom: false,\n\t\t\tleft: false,\n\t\t};\n\n\t\t// выходит ли popup за экран с конкретного края, если применено инвертирование\n\t\tconst outWithInvert = {\n\t\t\ttop: false,\n\t\t\tright: false,\n\t\t\tbottom: false,\n\t\t\tleft: false,\n\t\t};\n\n\t\t// имеет ли смысл прикреплять окно к другой стороне кнопки\n\t\tlet canUseInvertX = boundingClientRect.left > window.innerWidth / 2;\n\t\tlet canUseInvertY = boundingClientRect.top > window.innerHeight / 2;\n\n\t\tif (p === 4) {\n\t\t\tcanUseInvertX = !canUseInvertX;\n\t\t}\n\n\t\tif (p === 1) {\n\t\t\tcanUseInvertY = !canUseInvertY;\n\t\t}\n\n\t\tconst contentBoundingClientRect = this.elPopupInner?.getBoundingClientRect();\n\n\t\tlet contentRight: number;\n\t\tlet contentBottom: number;\n\n\t\tconst margin = DOM.cssNumber(this.elPopup, '--top-popup-offset');\n\t\tconst elHeight = this.el.offsetHeight;\n\t\tconst elWidth = this.el.offsetWidth;\n\n\t\tif (contentBoundingClientRect) {\n\t\t\tcontentRight = window.innerWidth - contentBoundingClientRect.right;\n\t\t\tcontentBottom = window.innerHeight - contentBoundingClientRect.bottom;\n\n\t\t\tif (contentBoundingClientRect.top < margin) {\n\t\t\t\tout.top = true;\n\n\t\t\t\tif (contentBoundingClientRect.top < margin * 2 - contentBoundingClientRect.height + elHeight) {\n\t\t\t\t\toutWithInvert.top = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (contentRight < margin) {\n\t\t\t\tout.right = true;\n\n\t\t\t\tif (contentRight < margin * 2 - contentBoundingClientRect.width + elWidth) {\n\t\t\t\t\toutWithInvert.right = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (contentBottom < margin) {\n\t\t\t\tout.bottom = true;\n\n\t\t\t\tif (contentBottom < margin * 2 - contentBoundingClientRect.height + elHeight) {\n\t\t\t\t\toutWithInvert.bottom = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (contentBoundingClientRect.left < margin) {\n\t\t\t\tout.left = true;\n\n\t\t\t\tif (contentBoundingClientRect.left < margin * 2 - contentBoundingClientRect.width + elHeight) {\n\t\t\t\t\toutWithInvert.left = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Определить новое положение p, если popup не помещается\n\t\t *\n\t\t * Следует выполнять в два этапа:\n\t\t * - по горизонтали\n\t\t * - по вертикали\n\t\t */\n\t\tconst genP = (axis: 'x' | 'y', p: number) => {\n\t\t\t// проверяем горизонталь\n\t\t\tif (axis === 'x') {\n\t\t\t\tif (!out.right && !out.left) return p;\n\n\t\t\t\tif (p === 1 || p === 3) {\n\t\t\t\t\tif (!outWithInvert.right && !outWithInvert.left && canUseInvertX) return p;\n\t\t\t\t}\n\n\t\t\t\tif (out.right && (p === 0 || p === 2) && canUseInvertX) {\n\t\t\t\t\tp = 4;\n\t\t\t\t}\n\n\t\t\t\tif (out.left && (p === 0 || p === 4) && canUseInvertX) {\n\t\t\t\t\tp = 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// проверяем вертикаль\n\t\t\tif (axis === 'y') {\n\t\t\t\t// не помещается и можно использовать инвертирование\n\t\t\t\tif (!out.top && !out.bottom) return p;\n\n\t\t\t\tif (p === 2 || p === 4) {\n\t\t\t\t\tif (!outWithInvert.top && !outWithInvert.bottom && canUseInvertY) return p;\n\t\t\t\t}\n\n\t\t\t\tif (out.top && (p === 0 || p === 1) && canUseInvertY) {\n\t\t\t\t\tp = 3;\n\t\t\t\t}\n\n\t\t\t\tif (out.bottom && canUseInvertY) {\n\t\t\t\t\tp = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn p;\n\t\t};\n\n\t\t/**\n\t\t * Приоритет определения `p` по осям зависит от начального значения `p`\n\t\t *\n\t\t * Пытаемся сохранить выбранную ось: X или Y\n\t\t */\n\t\tlet axis: Array<'x' | 'y'> = ['x', 'y'];\n\t\tif (p === 0 || p === 1 || p === 3) axis = ['y', 'x'];\n\n\t\tlet newP = p ?? 0;\n\t\taxis.forEach((axisI) => {\n\t\t\tnewP = genP(axisI, newP);\n\t\t});\n\t\tp = newP;\n\n\t\tif (out.bottom && (p === 2 || p === 4) && canUseInvertY) {\n\t\t\t// меню справа может перемещаться вверх, только если есть место слева\n\t\t\tthis.elPopup.classList.add('invert-y');\n\t\t}\n\n\t\tif (out.right && (p === 0 || p === 1 || p === 3)) {\n\t\t\tthis.elPopup.classList.add('invert-x');\n\t\t}\n\n\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\n\t\tthis.elPopup.classList.add('p' + p);\n\n\t\tif (this.elPopupInner instanceof HTMLElement) {\n\t\t\tthis.elPopupInner.style.maxWidth = '';\n\t\t\tthis.elPopupInner.style.maxHeight = '';\n\t\t}\n\n\t\t// if (this.elPopupBody instanceof HTMLElement) {\n\t\t// \t// отобразить popup по вертикали с другой стороны, если с другой стороны больше места\n\t\t// \tconst hasScroll = this.elPopupBody.offsetHeight < this.elPopupBody.scrollHeight;\n\t\t// \tvd(this.elPopupBody.scrollHeight);\n\t\t// \tvd(this.elPopupBody.offsetHeight);\n\t\t// \tif (hasScroll && pForce === undefined) {\n\t\t// \t\tconst contentBoundingClientRect = this.elPopupBody?.getBoundingClientRect();\n\t\t// \t\tif (\n\t\t// \t\t\tp === 1 && contentBoundingClientRect.top * 2 < contentBoundingClientRect.bottom ||\n\t\t// \t\t\tp === 3 && contentBoundingClientRect.bottom * 2 < contentBoundingClientRect.top\n\t\t// \t\t) {\n\t\t// \t\t\tthis.recalcPosition(p === 1 ? 3 : 1);\n\t\t//\n\t\t// \t\t\treturn;\n\t\t// \t\t}\n\t\t// \t}\n\t\t// }\n\n\t\tWorker.scrollToActive(this.elPopup);\n\t};\n\n\tonTouchmove(e: TouchEvent): void {\n\t\tif (e.currentTarget instanceof HTMLElement && e.target instanceof HTMLElement) {\n\t\t\t// разрешить горизональный скролл\n\t\t\tlet hasScrollX = e.currentTarget.scrollWidth > e.currentTarget.offsetWidth;\n\t\t\tif (hasScrollX) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.target.parentElement?.scrollWidth && e.target.parentElement?.offsetWidth) {\n\t\t\t\t// разрешить горизональный скролл\n\t\t\t\tlet hasScrollX2 = e.target.parentElement.scrollWidth > e.target.parentElement?.offsetWidth;\n\t\t\t\tif (hasScrollX2) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!e.currentTarget.matches('.has_scroll')) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\tclose(): void {\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isClosed = true;\n\n\t\tif (this.$ && Core.$ && this.elPopup) {\n\t\t\tthis.$.trigger('afterclose.top-menu-popup', [Core.$(this.elPopup)]);\n\t\t}\n\n\t\tif (Worker.noClose) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.unmount();\n\n\t\tthis.elPopup?.classList.add('top-popup-wrapper-closed');\n\n\t\tsetTimeout(() => {\n\t\t\tthis.vueClose();\n\n\t\t\tif (!this.elPopup) return;\n\n\t\t\tif (this.options.useOriginal) {\n\t\t\t\tthis.elPopup.removeAttribute('style');\n\t\t\t\tthis.elPopup.classList.remove('top-popup-wrapper-shown', 'top-popup-wrapper-closed');\n\t\t\t\tthis.elPopup.classList.add('template');\n\t\t\t\tthis.elStartPosition?.append(this.elPopup);\n\n\t\t\t\tthis.elPopup.querySelector('div.top-popup_content.top-column')?.classList.remove('top-column');\n\t\t\t\tthis.elPopup.querySelector('.notch-border')?.remove();\n\t\t\t\tthis.elPopup.querySelector('.notch')?.remove();\n\n\t\t\t\tthis.elPopupInner?.replaceWith(...this.elPopupInner.childNodes);\n\n\t\t\t\tDOM.storageClear(this.elPopup);\n\t\t\t} else {\n\t\t\t\tDOM.storageClear(this.elPopup);\n\n\t\t\t\tthis.elPopup.remove();\n\t\t\t\tdelete this.elPopup;\n\t\t\t}\n\n\t\t\tconst elsPopups = Worker.getAllVisible();\n\t\t\tconst elPopupLast = elsPopups.length && elsPopups[elsPopups.length - 1];\n\n\t\t\tif (elPopupLast) {\n\t\t\t\tWorker.getPopup(elPopupLast).focus();\n\t\t\t} else {\n\t\t\t\tdocument.documentElement.classList.remove('with_popup');\n\t\t\t}\n\t\t}, this.options.transitionDuration);\n\t}\n\n\tasync vueOpen(): Promise<void> {\n\t\tawait this.vueGetComponent()?.onOpen(this);\n\t}\n\n\tvueClose(): void {\n\t\tthis.vueGetComponent()?.onClose(this);\n\t}\n\n\t// получить vueConnectors компонента Popup\n\tvueGetComponent() {\n\t\tif (this.el instanceof HTMLElement && this.options.id) return Worker.vueConnectors.get(this.options.id);\n\t}\n}\n\nGlobalEvents.init();\n"],"names":["Component","componentName","el","options","component","DOM","eventData","type","listener","_options","nodes","node","_a","GlobalEvents","e","elUl","elItem","elPopup","Worker","elCloser","elBtn","elFooterLastBtn","elLink","elItemActive","_b","elMore","elsLiVisible","countLi","index","_c","Core","css","cssM","cssPC","TopLibPopup","vueConnector","classes","existsWidgetSearch","i18n","useI18n","fromTop","elPopupOpened","_d","_e","style","pForce","leftPos","boundingClientRect","out","outWithInvert","canUseInvertX","canUseInvertY","contentBoundingClientRect","contentRight","contentBottom","margin","elHeight","elWidth","genP","axis","p","newP","axisI","elsPopups","elPopupLast"],"mappings":"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"}
1
+ {"version":3,"file":"popup-axQQEyIk.es.js","sources":["../../src/components/component.ts","../../src/components/popup/lib/popup.globalEvents.ts","../../src/components/popup/lib/popup.ts"],"sourcesContent":["import DOM from '@/core/utils/dom';\n\n/**\n * Базовый компонент для js компонентов, не имеет отношения к Vue\n */\nclass Component {\n\n\tstatic componentName = 'Top';\n\n\tcomponentName: string | undefined; // имя класса компонента\n\tclassName: string | undefined; // имя css класса компонента\n\tuid: string | undefined; // уникальный id компонента\n\tel: HTMLElement | undefined; // элемент, связанный с компонентом\n\toptions = {}; // параметры компонента\n\n\tunmountEls: HTMLElement[] = [];\n\tunmountEvents: any[] = [];\n\n\t// переопредлять нельзя\n\t// если компонент инициирован, необходимо сразу его вернуть и выполнить reInit() вместо mount()\n\t// используется init вместо constructor, так как super constructor выполняется до Object.defineProperty() параметров класса\n\tinit(componentName: string, el: HTMLElement, options: object): Component | void {\n\t\tif (!el) {\n\t\t\tthrow componentName + ': el is undefined';\n\t\t}\n\n\t\tconst component = Component.getComponent(el, componentName);\n\n\t\tif (component) {\n\t\t\tcomponent.reInit(options);\n\n\t\t\treturn component;\n\t\t}\n\n\t\tthis.componentName = componentName;\n\t\tthis.className = 'top' + componentName[0].toUpperCase() + componentName.substring(1);\n\t\tthis.uid = this.componentName + (Math.random() + '').replace('.', '');\n\n\t\tthis._setComponent(el);\n\t\tthis.el = el;\n\t\tthis.el.classList.add(this.className);\n\t\tthis.options = Object.assign(this.options, options);\n\n\t\tthis.mount();\n\t}\n\n\t// получить инициированный компонент\n\tstatic getComponent(el: HTMLElement, componentName: string): any {\n\t\treturn DOM.storage(el, '#' + componentName);\n\t}\n\n\t// устанвоить компонент\n\t_setComponent(el: HTMLElement) {\n\t\tDOM.storage(el, '#' + this.componentName, this);\n\t}\n\n\t// функция подключения компонента\n\tmount(): void {\n\t\tthrow 'Please, add method mount() to component: ' + this.componentName;\n\t}\n\n\t// функция отключения компонента\n\tunmount(): void {\n\t\tDOM.storage(this.el, '#' + this.componentName, null);\n\n\t\tthis.unmountEls.forEach((el) => {\n\t\t\tel.remove();\n\t\t});\n\n\t\tthis.unmountEls = [];\n\n\t\tthis.unmountEvents.forEach((eventData) => {\n\t\t\teventData.el.removeEventListener(eventData.type, eventData.listener, eventData.options);\n\t\t});\n\n\t\tthis.unmountEvents = [];\n\t}\n\n\t// указание новые элементы, которые должны будут удалиться после unmount\n\tregisterElForUnmount(el: HTMLElement): void {\n\t\tthis.unmountEls.push(el);\n\t}\n\n\t// указание новые события, которые должны будут удалиться после unmount\n\taddEventListenerWithUnmount(\n\t\tel: HTMLElement | Document | Window,\n\t\ttype: keyof GlobalEventHandlersEventMap,\n\t\tlistener: (this: HTMLElement, e: Event) => any,\n\t\toptions?: any,\n\t): void {\n\t\tel.addEventListener(type, listener, options);\n\n\t\tthis.registerEventForUnmount(el, type, listener, options);\n\t}\n\n\t// указание новые события, которые должны будут удалиться после unmount\n\tregisterEventForUnmount(\n\t\tel: HTMLElement | Document | Window,\n\t\ttype: keyof GlobalEventHandlersEventMap,\n\t\tlistener: (this: HTMLElement, e: Event) => any,\n\t\toptions?: any,\n\t): void {\n\t\tconst eventData = {\n\t\t\tel: el,\n\t\t\ttype: type,\n\t\t\tlistener: listener,\n\t\t\toptions: options,\n\t\t};\n\n\t\tthis.unmountEvents.push(eventData);\n\t}\n\n\t// функция перенастройки уже подключенного компонента\n\treInit(_options: object): void {\n\t\tthrow 'Please, add method reInit() to component: ' + this.componentName;\n\t}\n\n\t// удалить элементы из DOM, но не из памяти\n\tstatic detach(nodes: NodeList | HTMLElement): void {\n\t\tif (nodes instanceof NodeList) {\n\t\t\tnodes.forEach((node) => node.parentElement?.removeChild(node));\n\t\t} else {\n\t\t\tconst el = nodes;\n\t\t\tel.parentElement?.removeChild(el);\n\t\t}\n\t}\n\n}\n\nexport default Component;\n","import Worker from '@/components/popup/lib/worker';\nimport DOM from '@/core/utils/dom';\n\n/**\n * Глобальные события, для реализации Popup\n * Автоматически инициируется при первой загрузке, не является выгружаемым модулем\n *\n * Если в меню встречает класс .preloader, то событие нажатия на кнопку через enter будет остановлено\n */\nclass GlobalEvents {\n\n\tprivate static isInited = false;\n\n\t/**\n\t * Добавить глобальные обработчики\n\t *\n\t * Добавляются на страницу один раз и навсегда\n\t */\n\tstatic init(): void {\n\t\tif (this.isInited) return;\n\n\t\tthis.isInited = true;\n\n\t\tdocument.addEventListener('click', this.onclickCapture, { capture: true });\n\t\tdocument.addEventListener('click', this.onclick);\n\t\tdocument.addEventListener('keydown', this.onkeydown);\n\t}\n\n\t/**\n\t * Глобальный обработчик захватов кликов\n\t *\n\t * Обрабатывает захватов клики внутри Popup\n\t */\n\tprivate static onclickCapture(e: Event): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\t// меню\n\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\t// клик вне меню\n\t\tif (!elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик по кнопке открытия другого меню\n\t\tif (e.target.matches('[data-top-popup]')) {\n\t\t\t// список меню, в котором был сделан клик\n\t\t\tconst elUl = e.target.closest<HTMLElement>('ul');\n\n\t\t\t// элемент меню, по которому был сделан клик\n\t\t\tconst elItem = e.target.closest<HTMLElement>('a, .a');\n\n\t\t\t// сделать элемент меню, по которому сделан клик активным\n\t\t\tif (elUl) {\n\t\t\t\telUl.querySelector('a.top-active, .a.top-active')?.classList.remove('top-active');\n\t\t\t}\n\n\t\t\tif (elItem) {\n\t\t\t\telItem.classList.add('top-active');\n\t\t\t}\n\n\t\t\te.stopPropagation();\n\n\t\t\treturn;\n\t\t}\n\n\t\t// клик по фону меню\n\t\tif (e.target.matches('.top-popup-wrapper')) {\n\t\t\tconst elPopup = e.target;\n\n\t\t\tWorker.close(elPopup);\n\n\t\t\te.stopPropagation();\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t/**\n\t * Глобальный обработчик кликов\n\t *\n\t * Обрабатывает клики внутри Popup\n\t */\n\tprivate static onclick(e: Event): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\t// элементы меню, клик по которым должен его закрыть\n\t\tconst elCloser = e.target.closest<HTMLElement>('.closer, a, .a, .top-button');\n\t\tif (elCloser) {\n\t\t\t// меню\n\t\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\t\t// клик вне меню\n\t\t\tif (!elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// элемент имеет модификатор, запрещаюущий закрытие меню по клику на него\n\t\t\tif (elCloser.matches('.top-popup-noCloser')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// deprecated, ссылки с href=\".\" запрещены, они должны быть заменены на .top-popup_listItem-button\n\t\t\tif (elCloser.getAttribute('href') === '.') {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\t// закрыть меню\n\t\t\tWorker.close(elPopup);\n\t\t}\n\t}\n\n\t/**\n\t * Глобальный обработчик нажатия кнопки на клавиатуре\n\t */\n\tprivate static onkeydown(e: KeyboardEvent): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\tlet elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\tif (!elPopup) {\n\t\t\telPopup = Worker.getPopupFromOpener(e.target)?.elPopup ?? null;\n\t\t}\n\n\t\t// нажатие не в меню\n\t\tif (!elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elUl = elPopup.querySelector<HTMLElement>('ul.top-popup_content');\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tWorker.close(elPopup);\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Enter':\n\t\t\t\t// атоматическое нажатие кнопок при нажатии Enter\n\t\t\t\tif (!elUl) {\n\t\t\t\t\tif (DOM.querySelectorVisible(elPopup, '.preloader')) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// deprecated, старый код на сайте\n\t\t\t\t\tconst elBtn = DOM.querySelectorVisible(elPopup, '.top-popup_footer .go, .top-popup_footer [data-action]');\n\t\t\t\t\tif (elBtn instanceof HTMLElement) {\n\t\t\t\t\t\telBtn.click();\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Запуск клика последней кнопки, расположенной в footer'е Popup'а, нажатием клавиши Enter\n\t\t\t\t\tlet elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button:focus');\n\t\t\t\t\tif (!elFooterLastBtn) elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button');\n\t\t\t\t\tif (elFooterLastBtn instanceof HTMLElement) {\n\t\t\t\t\t\telFooterLastBtn.click();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// перейти по ссылке по нажатию на Enter\n\t\t\t\t// данный функуционал игнорирует SPA\n\t\t\t\tconst elLink = DOM.querySelectorVisible(elPopup, 'li > a.top-active');\n\t\t\t\tif (elLink && elLink.getAttribute('href')) {\n\t\t\t\t\t// фокус может находиться на другой ссылке\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tlocation.href = elLink.getAttribute('href')!;\n\t\t\t\t}\n\n\t\t\t\t// кликнуть по элементу меню по нажатию на Enter\n\t\t\t\tconst elItem = elPopup.querySelector<HTMLElement>('li > .top-active');\n\t\t\t\tif (elItem instanceof HTMLElement) {\n\t\t\t\t\telItem.click();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t// управление стрелками\n\t\t\tcase 'ArrowUp':\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tif (!elUl) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n\t\t\t\t\tconst elMoreVisible = DOM.querySelectorVisible(\n\t\t\t\t\t\telPopup,\n\t\t\t\t\t\t'ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active > .top-popup_listMore',\n\t\t\t\t\t);\n\n\t\t\t\t\tif (elMoreVisible) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}else if((e.target as HTMLElement).tagName === 'INPUT'){\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tconst elItemActive = elPopup.querySelector<HTMLElement>('ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active')?.parentElement;\n\n\t\t\t\t// есть подменю\n\t\t\t\tif (e.key === 'ArrowRight' && elItemActive) {\n\t\t\t\t\t// const elItemMoreActive = elItemActive.querySelector<HTMLElement>('[data-top-popup].top-active');\n\t\t\t\t\t// if (elItemMoreActive) {\n\t\t\t\t\t// \treturn elItemMoreActive.click();\n\t\t\t\t\t// }\n\n\t\t\t\t\tconst elMore = elItemActive.querySelector<HTMLElement>('.top-active > .top-popup_listMore');\n\t\t\t\t\tif (elMore instanceof HTMLElement) {\n\t\t\t\t\t\treturn elMore.click();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst elsLiVisible = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li:not(.top-popup_liNoSelectable)');\n\t\t\t\tconst countLi = elsLiVisible.length;\n\n\t\t\t\tif (!countLi) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet index = -1;\n\t\t\t\tif (elItemActive) {\n\t\t\t\t\tindex = elsLiVisible.indexOf(elItemActive);\n\t\t\t\t}\n\n\t\t\t\tif (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {\n\t\t\t\t\tindex--;\n\t\t\t\t} else {\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\t// это первый элемен, \"Назад\" должен закрывать окно\n\t\t\t\tif (e.key === 'ArrowLeft' && index === -1) {\n\t\t\t\t\tif (e.target.matches('input')) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Worker.close(elPopup);\n\t\t\t\t}\n\n\t\t\t\t// это последний элемен, \"Вперед\" не должен ни чего делать\n\t\t\t\tif (e.key === 'ArrowRight' && index === countLi) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tindex = countLi - 1;\n\t\t\t\t}\n\n\t\t\t\tif (index > countLi - 1) {\n\t\t\t\t\tindex = 0;\n\t\t\t\t}\n\n\t\t\t\telPopup.querySelectorAll('ul.top-popup_content > li > .top-active').forEach(el => el.classList.remove('top-active'));\n\t\t\t\telsLiVisible[index].querySelector(':scope > a, :scope > .a')?.classList.add('top-active');\n\n\t\t\t\tWorker.scrollToActive(elPopup);\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n}\n\nexport default GlobalEvents;\n","import Core from '@/core/core/core';\nimport Component from '@/components/component';\nimport DOM from '@/core/utils/dom';\nimport Worker from '@/components/popup/lib/worker';\nimport GlobalEvents from '@/components/popup/lib/popup.globalEvents';\n\nimport css from '@/components/popup/popup/style/popup.css?inline';\nimport cssM from '@/components/popup/popup/style/popup.m.css?inline';\nimport cssPC from '@/components/popup/popup/style/popup.pc.css?inline';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { OpenerProps } from '../popup/types';\n\nCore.insertStyleToPage(css);\nCore.insertStyleToPage(cssM, 'm');\nCore.insertStyleToPage(cssPC, 'pc');\n\nexport interface PopupOptions {\n\tpopup?: string,\n\tid?: string,\n\tp?: number,\n\tnotch?: boolean,\n\tclass?: string,\n\tposBy?: 'left' | 'right' | 'fixed' | Element,\n\tfrontSelector?: string,\n\tinvertX?: boolean,\n\topenByHover?: boolean,\n\tuseOriginal?: boolean,\n\ttransitionDuration?: number,\n\tisFullScreen?: boolean,\n}\n\n/**\n * Основной объект js компонента TopPopup\n *\n * Добавляет jQuery события на this.el, если jQuery загружен:\n *\n * - aftershow.top-menu-popup\n * - afterclose.top-menu-popup\n */\nexport class TopLibPopup<T extends Record<string, any> | undefined = undefined> extends Component {\n\n\tstatic componentName = 'TopPopup';\n\n\tdeclare el: HTMLElement & { __TopPopupOpenerProps: OpenerProps<T> }; // элемент, вызвавший открытие Popup\n\telActiveByDefault: boolean | undefined; // элемент уже имеет класс top-active перед открытием окна\n\telPopup: HTMLElement | undefined; // Popup .top-popup-wrapper\n\telPopupInner: HTMLElement | undefined; // контентная часть Popup .top-popup\n\telPopupHeader: HTMLElement | undefined | null;\n\telPopupWidget: HTMLElement | undefined | null;\n\telPopupBody: HTMLElement | undefined | null;\n\telPopupFooter: HTMLElement | undefined | null;\n\telFront: HTMLElement | undefined | null;\n\topenerIsInput = false;\n\n\tpopupParent: TopLibPopup | undefined;\n\n\t$: JQuery<HTMLElement> | undefined; // только если есть jQuery\n\n\telStartPosition: HTMLElement | undefined | null; // используется для useOriginal\n\tshift = {\n\t\ttop: 0,\n\t\tleft: 0,\n\t};\n\tisClosed = false; // флаг того, что меню закрыто\n\tisFirstClick = true;\n\ttype: string | undefined; // selector или html\n\n\toptions: PopupOptions = {\n\t\tpopup: '', // selector, text\n\t\tp: 0, // положение меню (0 - над элементом, 1 - сверху, 2 - справа, 3 - снизу, 4 слева)\n\t\tnotch: false, // отображать ли клювик\n\n\t\tclass: '', // класс, добавляемый меню\n\n\t\tposBy: 'left', // способ привязки позиционирования меню (left/right - левый/правый край родителя, fixed - по документу)\n\t\tfrontSelector: '',\n\t\tinvertX: false, // базовая ордината - правая граница элемента, а не левая\n\t\topenByHover: false, // открывать при наведении\n\n\t\tuseOriginal: false, // использовать оригинальный шаблон, без клонирвоания (для сохранения состояния меню)\n\n\t\ttransitionDuration: 100, // значение прописано в css\n\n\t\tisFullScreen: false,\n\t};\n\n\tevents = {};\n\n\t/**\n\t * Создать Popup\n\t * @param el - элемент, открывающий меню\n\t * @param options\n\t */\n\tconstructor(el: HTMLElement, options: PopupOptions) {\n\t\tsuper();\n\n\t\tthis.init(TopLibPopup.componentName, el, options);\n\t}\n\n\tasync mount(): Promise<void> {\n\t\tif (!(this.el instanceof HTMLElement)) return;\n\t\tconst vueConnector = this.vueGetComponent();\n\n\t\tif (this.el.closest('.top-popup-wrapper')) this.popupParent = Worker.getPopup(this.el.closest('.top-popup-wrapper')!);\n\n\t\tawait this.mountJQuery();\n\n\t\tif (DOM.css(this.el, 'position') !== 'absolute') {\n\t\t\tthis.el.style.position = 'relative';\n\t\t}\n\n\t\tthis.el.dataset.topPopupOpened = 'opened';\n\t\tthis.elActiveByDefault = this.el.classList.contains('top-active');\n\t\tthis.el.classList.add('top-active');\n\n\t\tthis.openerIsInput = this.el.classList.contains('top-input');\n\n\t\tif (vueConnector) {\n\t\t\t// компонент vue Popup\n\t\t\tthis.type = 'vue';\n\n\t\t\tthis.options.popup = '';\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup);\n\t\t} else if (this.options.popup?.match(/^[#.]/)) {\n\t\t\t// selector\n\t\t\tthis.type = 'selector';\n\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.template`) || undefined;\n\t\t} else {\n\t\t\t// html\n\t\t\tthis.type = 'html';\n\n\t\t\tif (this.options.useOriginal) {\n\t\t\t\tthrow ('Option useOriginal not allowed for text templates');\n\t\t\t}\n\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup ?? '');\n\t\t}\n\n\t\tif (!this.elPopup || vueConnector?.opened) {\n\t\t\t// возможно шаблон не найден, так как он используется в уже открытом меню\n\t\t\tif (this.options.useOriginal || vueConnector?.opened) {\n\t\t\t\t// закрыть открытое меню\n\t\t\t\tif (vueConnector?.opened) {\n\t\t\t\t\tthis.elPopup = vueConnector.popup.elPopup;\n\t\t\t\t} else {\n\t\t\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.top-popup-wrapper-shown`) || undefined;\n\t\t\t\t}\n\n\t\t\t\tif (this.elPopup) {\n\t\t\t\t\tthis.el.dataset.topPopupOpened = '';\n\n\t\t\t\t\tif (!this.elActiveByDefault) {\n\t\t\t\t\t\tthis.el.classList.remove('top-active');\n\t\t\t\t\t}\n\n\t\t\t\t\tWorker.close(this.elPopup);\n\n\t\t\t\t\t// повторит попытку открыть меню\n\t\t\t\t\tsetTimeout(() => this.mount(), this.options.transitionDuration);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow ('Option useOriginal state allowed only elements .template');\n\t\t\t}\n\n\t\t\t// возможно вместо шаблона используется другой элемент\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}:not(.top-popup-wrapper)`) || undefined;\n\t\t}\n\n\t\tif (!this.elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.useOriginal) {\n\t\t\tthis.elStartPosition = this.elPopup.closest<HTMLElement>('.top-popup-el-start-position');\n\t\t\tif (!this.elStartPosition) {\n\t\t\t\tthis.elStartPosition = DOM.wrap(this.elPopup, 'i');\n\t\t\t\tthis.elStartPosition.classList.add('top-popup-el-start-position', 'hidden');\n\t\t\t}\n\t\t} else {\n\t\t\tthis.elPopup = this.elPopup.cloneNode(true) as HTMLElement;\n\n\t\t\t// вывод в меню копии произвольного элемента\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template')) {\n\t\t\t\tthis.elPopup.classList.remove('hidden');\n\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\n\t\t\t\t}\n\n\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\n\t\t\t}\n\n\t\t\tif (this.type === 'html') {\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\n\n\t\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// вложенный Popup\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template') || this.type === 'html' || this.type === 'vue') {\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '[data-top-popup]').forEach(el => {\n\t\t\t\t\tif (el instanceof HTMLElement) el.dataset.topPopupPosBy = 'fixed';\n\t\t\t\t});\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '.top-popup-wrapper').forEach(el => el.remove());\n\t\t\t}\n\t\t}\n\n\t\tWorker.decoratorBeforeOpen(this);\n\n\t\tif (vueConnector) {\n\t\t\tthis.options.class = vueConnector.classRef.value;\n\t\t\tif (vueConnector.transitionDurationRef.value !== undefined) {\n\t\t\t\tthis.options.transitionDuration = vueConnector.transitionDurationRef.value;\n\n\t\t\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\t\t\tthis.elPopup.style.setProperty(\n\t\t\t\t\t\t'--top-popup-transition-delay',\n\t\t\t\t\t\tthis.options.transitionDuration + 'ms',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.elPopupInner = document.createElement('div');\n\t\tthis.elPopupInner.classList.add('top-popupPanel', 'top-popup');\n\n\t\twhile (this.elPopup.firstChild) {\n\t\t\tthis.elPopupInner.appendChild(this.elPopup.firstChild);\n\t\t}\n\n\t\tthis.elPopup.append(this.elPopupInner);\n\n\t\tthis.elPopup.classList.add('top-popup-wrapper');\n\n\t\tif (this.options.class) {\n\t\t\tconst classes = this.options.class.split(' ');\n\t\t\tthis.elPopup.classList.add(...classes);\n\t\t}\n\n\t\tif (this.options.notch) {\n\t\t\tthis.elPopup.classList.add('with_notch');\n\t\t\tthis.elPopup.insertAdjacentHTML('beforeend', '<i class=\"notch notch-border\"></i><i class=\"notch\"></i>');\n\t\t}\n\n\t\tawait this.vueOpen();\n\n\t\tthis.elPopupHeader = this.elPopupInner.querySelector<HTMLElement>('.top-popup_header');\n\t\tthis.elPopupWidget = this.elPopupInner.querySelector<HTMLElement>('.top-popup_widget');\n\t\tthis.elPopupBody = this.elPopupInner.querySelector<HTMLElement>('.top-popup_content');\n\t\tthis.elPopupFooter = this.elPopupInner.querySelector<HTMLElement>('.top-popup_footer');\n\n\t\tconst existsWidgetSearch = !!this.elPopup.querySelector('[data-widget=\"search\"]');\n\n\t\tif (this.options.isFullScreen && !existsWidgetSearch) {\n\t\t\tconst i18n = useI18n();\n\n\t\t\tif (!this.elPopupHeader && i18n.Common.Close) {\n\t\t\t\tthis.elPopupHeader = DOM.genEl('i', { class: 'top-popup_header' });\n\t\t\t\tthis.elPopupInner.prepend(this.elPopupHeader);\n\n\t\t\t\tthis.elPopupHeader.prepend(DOM.genEl('i', { class: 'a closer' }, i18n.Common.Close));\n\t\t\t\tthis.elPopupHeader.append(DOM.genEl('i', { class: 'top-popup_headerButton' }));\n\t\t\t}\n\t\t}\n\n\t\tDOM.storage(this.elPopup, TopLibPopup.componentName, this);\n\n\t\tif (this.options.frontSelector) {\n\t\t\tthis.elFront = document.querySelector<HTMLElement>(this.options.frontSelector);\n\t\t}\n\t\tif (!this.elFront) {\n\t\t\tthis.elFront = this.el.closest<HTMLElement>('.top-popup-front');\n\t\t}\n\t\tif (!this.elFront) {\n\t\t\tthis.elFront = document.body;\n\t\t}\n\n\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.width = this.el.offsetWidth + 'px';\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\n\t\t\tthis.elPopup.style.top = this.el.offsetTop + 'px';\n\t\t\tthis.elPopup.style.right = parseInt(this.el.style.right || '0') + 'px';\n\t\t\tthis.elPopup.style.bottom = parseInt(this.el.style.bottom || '0') + 'px';\n\t\t}\n\n\t\tthis.el.parentElement?.insertBefore(this.elPopup, this.el);\n\t\tthis.elPopup.classList.remove('template');\n\n\t\tif (this.options.invertX) {\n\t\t\tthis.elPopup.classList.add('invert-x');\n\t\t}\n\n\t\tlet fromTop = !!this.el.closest('.modal-header');\n\t\tif (!fromTop) {\n\t\t\tfromTop = !!this.el.closest('#top_panel');\n\t\t}\n\t\tif (!fromTop) {\n\t\t\tfromTop = !!this.el.closest('#secondmenu');\n\t\t}\n\t\tif (fromTop) {\n\t\t\tthis.elPopup.classList.add('p-from-top');\n\t\t}\n\n\t\t// появление с анимацией\n\t\tsetTimeout(() => this.elPopup?.classList.add('top-popup-wrapper-shown'));\n\n\t\tif (this.elFront && !this.elFront.matches('body')) {\n\t\t\tthis.elFront.append(this.elPopup);\n\n\t\t\tthis.shift.top = DOM.offset(this.el).top - this.el.offsetTop - DOM.offset(this.elFront).top;\n\t\t\tthis.shift.left = DOM.offset(this.el).left - this.el.offsetLeft - DOM.offset(this.elFront).left;\n\n\t\t\t// position() не учитывает margin, замечено для flex\n\t\t\tthis.shift.top -= parseInt(this.el.style['margin-top'] || 0);\n\t\t\tthis.shift.left -= parseInt(this.el.style['margin-left'] || 0);\n\n\t\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\t\tthis.elPopup.style.top = parseInt(this.elPopup.style.top || '0') + this.shift.top + 'px';\n\t\t\t\tthis.elPopup.style.left = parseInt(this.elPopup.style.left || '0') + this.shift.left + 'px';\n\t\t\t}\n\t\t}\n\n\t\tif (this.$ && Core.$) {\n\t\t\tthis.$.trigger('aftershow.top-menu-popup', [Core.$(this.elPopup)]);\n\t\t}\n\n\t\tthis.recalcPosition();\n\n\t\tthis.elPopup.setAttribute('tabindex', '0');\n\t\tthis.focus();\n\n\t\tWorker.decoratorAfterOpen(this);\n\n\t\tthis.mountEvents();\n\t}\n\n\tasync mountJQuery() {\n\t\tif (!Core.$) return;\n\n\t\tthis.$ = Core.$(this.el);\n\t}\n\n\t/**\n\t * Выполнить фокусировку на нужный элемент после открытия окна\n\t */\n\tfocus(): void {\n\t\tlet el: Element | null;\n\n\t\tif (this.elPopup) {\n\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup-autofocus');\n\n\t\t\t// поле ввода\n\t\t\tif (!el) {\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, ':read-write, select:not(:disabled)');\n\t\t\t}\n\n\t\t\t// кнопка\n\t\t\tif (!el) {\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup_footer .top-button');\n\t\t\t}\n\n\t\t\tif (!el) {\n\t\t\t\tel = this.elPopup;\n\t\t\t}\n\n\t\t\tif (!this.openerIsInput) {\n\t\t\t\t// выполнить фокусировку сразу, для применения необходимых стилей\n\t\t\t\tif (el instanceof HTMLElement) el.focus();\n\n\t\t\t\t// выполнить фокусировку после завершения анимации открытия popup\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (el instanceof HTMLElement) el.focus();\n\t\t\t\t}, this.options.transitionDuration);\n\t\t\t}\n\t\t}\n\t}\n\n\tmountEvents(): void {\n\t\t// закрытие при клике вне контекстного меню\n\t\tthis.addEventListenerWithUnmount(document, 'mousedown', (e) => this.onMousedown(e as MouseEvent));\n\n\t\tif (this.elPopup && this.elPopupInner) {\n\t\t\t// закрыть другие меню\n\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'focus', (e) => this.onFocus(e as FocusEvent));\n\n\t\t\t// автоматическое закрытие при отведении мыши\n\t\t\tif (this.options.openByHover) {\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopupInner, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\n\t\t\t}\n\t\t}\n\n\t\t// не скроллить страницу\n\t\tif (this.options.isFullScreen && this.elPopupBody) {\n\t\t\tthis.addEventListenerWithUnmount(this.elPopupBody, 'touchmove', (e) => this.onTouchmove(e as TouchEvent));\n\t\t}\n\t}\n\n\t/**\n\t * Обработка клика вне окна\n\t */\n\tprivate onMousedown(e: MouseEvent): void {\n\t\t// // не оригинальное событие\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\n\t\t// \treturn;\n\t\t// }\n\n\t\t// Popup уже закрыт\n\t\tif (!this.elPopup || !(e.target instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик на внешнем элементе\n\t\tif (!this.isFirstClick) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isFirstClick = false;\n\t\tsetTimeout(() => this.isFirstClick = true);\n\n\t\t// клик не основной кнопкой мыши\n\t\tif (e instanceof MouseEvent && e.button !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// открыто другое меню с posBy = fixed, сначала должно быть закрыто оно\n\t\tlet elPopupOpened = DOM.querySelectorVisibleLast(document.body, ':scope > .top-popup-wrapper');\n\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\t// открыто другое меню в top-popup-front, сначала должно быть закрыто оно\n\t\tif (e.target.closest('.top-popup-front')) {\n\t\t\telPopupOpened = DOM.querySelectorVisibleLast(e.target.closest('.top-popup-front')!, ':scope > .top-popup-wrapper');\n\n\t\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// клик внутри этого меню\n\t\tif (this.elPopup.contains(e.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик вне родительского диалогового окна\n\t\tif (this.elPopup.closest('.ui-dialog') && !e.target.closest('.ui-dialog')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Worker.decoratorIsIgnoreOuterClick(e)) {\n\t\t\treturn;\n\t\t}\n\n\t\tWorker.close(this.elPopup);\n\t}\n\n\t/**\n\t * Закрыть другие Popup при фокусе на элемент формы в текущем\n\t */\n\tprivate onFocus(e: FocusEvent): void {\n\t\tif (e.target instanceof Element && e.target.matches('input')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// // не оригинальное событие\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\n\t\t// \treturn;\n\t\t// }\n\n\t\t// это окно уже закрывается\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elsPopups = Worker.getAllVisible();\n\t\telsPopups.forEach(elPopup => {\n\t\t\t// фокус внутри этого окна\n\t\t\tif (this.elPopup?.contains(elPopup)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// это Popup из которого был открыт Popup с фокусом\n\t\t\t// глубина вложенности: до 3 подменю\n\t\t\tif (\n\t\t\t\tthis.popupParent?.elPopup === elPopup ||\n\t\t\t\tthis.popupParent?.popupParent?.elPopup === elPopup\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.close(elPopup);\n\t\t});\n\t}\n\n\t/**\n\t * Закрыть Popup при отведении мыши\n\t */\n\tprivate onMouseleave(_e: MouseEvent): void {\n\t\tsetTimeout(() => {\n\t\t\tif (this.elPopupInner && this.elPopupInner.matches(':hover') || !this.elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.close(this.elPopup);\n\t\t}, 100);\n\t}\n\n\t/**\n\t * Контроль положения Popup при fixed позиционировании\n\t */\n\tprivate onResize(): void {\n\t\t// на android при вызове метода append сбрасывается фокус с input внутри this.elPopup\n\t\tif (this.elPopup && this.elPopup.parentElement !== document.body) {\n\t\t\tdocument.body.append(this.elPopup);\n\t\t}\n\n\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.top = DOM.offset(this.el).top + 'px';\n\t\t\tthis.elPopup.style.left = DOM.offset(this.el).left + 'px';\n\t\t}\n\t}\n\n\tunmount(): void {\n\t\tsuper.unmount();\n\n\t\tif (this.el instanceof HTMLElement) this.el.dataset.topPopupOpened = '';\n\t\tif (!this.elActiveByDefault) {\n\t\t\tthis.el.classList.remove('top-active');\n\t\t}\n\n\t\tlet style = this.el.getAttribute('style');\n\t\tif (style) {\n\t\t\tstyle = style.replace(/position:[^;]*;?/g, '');\n\t\t\tthis.el.setAttribute('style', style);\n\t\t}\n\t}\n\n\t// контроль за положением Popup, чтобы оно не вылезало за пределы документа\n\trecalcPosition(pForce?: typeof this.options.p): void {\n\t\tif (!(this.elPopup instanceof HTMLElement)) return;\n\n\t\tlet p = pForce ?? this.options.p;\n\t\tlet leftPos: number;\n\n\t\tif (this.el instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\n\n\t\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\n\t\t\tthis.elPopup.classList.add('p' + p);\n\n\t\t\tswitch (this.options.posBy) {\n\t\t\t\tcase 'left':\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\n\t\t\t\t\tleftPos += this.shift.left;\n\t\t\t\t\tthis.elPopup.style.left = leftPos + 'px';\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'right':\n\t\t\t\t\tif (!(this.el.offsetParent instanceof HTMLElement)) break;\n\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\n\t\t\t\t\tthis.elPopup.style.right = this.el.offsetParent.offsetWidth - this.el.offsetWidth - leftPos + 'px';\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'fixed':\n\t\t\t\t\tthis.addEventListenerWithUnmount(window, 'resize', () => this.onResize());\n\n\t\t\t\t\tthis.onResize();\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.options.posBy?.append(this.elPopup);\n\t\t\t}\n\t\t}\n\n\t\t// контроль за пложением Popup, чтобы оно не вылезало за пределы документа\n\t\tconst boundingClientRect = this.elPopup.getBoundingClientRect();\n\t\tthis.elPopup.style.setProperty('--top-popup-height', this.elPopup.offsetHeight + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-right-bounding', boundingClientRect.right + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-bottom-bounding', boundingClientRect.bottom + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-top', boundingClientRect.top + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-left', boundingClientRect.left + 'px');\n\n\t\tif (this.elPopupInner instanceof HTMLElement) {\n\t\t\tthis.elPopupInner.style.maxWidth = 'unset';\n\t\t\tthis.elPopupInner.style.maxHeight = 'unset';\n\t\t}\n\n\t\t// выходит ли popup за экран с конкретного края\n\t\tconst out = {\n\t\t\ttop: false,\n\t\t\tright: false,\n\t\t\tbottom: false,\n\t\t\tleft: false,\n\t\t};\n\n\t\t// выходит ли popup за экран с конкретного края, если применено инвертирование\n\t\tconst outWithInvert = {\n\t\t\ttop: false,\n\t\t\tright: false,\n\t\t\tbottom: false,\n\t\t\tleft: false,\n\t\t};\n\n\t\t// имеет ли смысл прикреплять окно к другой стороне кнопки\n\t\tlet canUseInvertX = boundingClientRect.left > window.innerWidth / 2;\n\t\tlet canUseInvertY = boundingClientRect.top > window.innerHeight / 2;\n\n\t\tif (p === 4) {\n\t\t\tcanUseInvertX = !canUseInvertX;\n\t\t}\n\n\t\tif (p === 1) {\n\t\t\tcanUseInvertY = !canUseInvertY;\n\t\t}\n\n\t\tconst contentBoundingClientRect = this.elPopupInner?.getBoundingClientRect();\n\n\t\tlet contentRight: number;\n\t\tlet contentBottom: number;\n\n\t\tconst margin = DOM.cssNumber(this.elPopup, '--top-popup-offset');\n\t\tconst elHeight = this.el.offsetHeight;\n\t\tconst elWidth = this.el.offsetWidth;\n\n\t\tif (contentBoundingClientRect) {\n\t\t\tcontentRight = window.innerWidth - contentBoundingClientRect.right;\n\t\t\tcontentBottom = window.innerHeight - contentBoundingClientRect.bottom;\n\n\t\t\tif (contentBoundingClientRect.top < margin) {\n\t\t\t\tout.top = true;\n\n\t\t\t\tif (contentBoundingClientRect.top < margin * 2 - contentBoundingClientRect.height + elHeight) {\n\t\t\t\t\toutWithInvert.top = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (contentRight < margin) {\n\t\t\t\tout.right = true;\n\n\t\t\t\tif (contentRight < margin * 2 - contentBoundingClientRect.width + elWidth) {\n\t\t\t\t\toutWithInvert.right = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (contentBottom < margin) {\n\t\t\t\tout.bottom = true;\n\n\t\t\t\tif (contentBottom < margin * 2 - contentBoundingClientRect.height + elHeight) {\n\t\t\t\t\toutWithInvert.bottom = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (contentBoundingClientRect.left < margin) {\n\t\t\t\tout.left = true;\n\n\t\t\t\tif (contentBoundingClientRect.left < margin * 2 - contentBoundingClientRect.width + elHeight) {\n\t\t\t\t\toutWithInvert.left = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Определить новое положение p, если popup не помещается\n\t\t *\n\t\t * Следует выполнять в два этапа:\n\t\t * - по горизонтали\n\t\t * - по вертикали\n\t\t */\n\t\tconst genP = (axis: 'x' | 'y', p: number) => {\n\t\t\t// проверяем горизонталь\n\t\t\tif (axis === 'x') {\n\t\t\t\tif (!out.right && !out.left) return p;\n\n\t\t\t\tif (p === 1 || p === 3) {\n\t\t\t\t\tif (!outWithInvert.right && !outWithInvert.left && canUseInvertX) return p;\n\t\t\t\t}\n\n\t\t\t\tif (out.right && (p === 0 || p === 2) && canUseInvertX) {\n\t\t\t\t\tp = 4;\n\t\t\t\t}\n\n\t\t\t\tif (out.left && (p === 0 || p === 4) && canUseInvertX) {\n\t\t\t\t\tp = 2;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// проверяем вертикаль\n\t\t\tif (axis === 'y') {\n\t\t\t\t// не помещается и можно использовать инвертирование\n\t\t\t\tif (!out.top && !out.bottom) return p;\n\n\t\t\t\tif (p === 2 || p === 4) {\n\t\t\t\t\tif (!outWithInvert.top && !outWithInvert.bottom && canUseInvertY) return p;\n\t\t\t\t}\n\n\t\t\t\tif (out.top && (p === 0 || p === 1) && canUseInvertY) {\n\t\t\t\t\tp = 3;\n\t\t\t\t}\n\n\t\t\t\tif (out.bottom && canUseInvertY) {\n\t\t\t\t\tp = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn p;\n\t\t};\n\n\t\t/**\n\t\t * Приоритет определения `p` по осям зависит от начального значения `p`\n\t\t *\n\t\t * Пытаемся сохранить выбранную ось: X или Y\n\t\t */\n\t\tlet axis: Array<'x' | 'y'> = ['x', 'y'];\n\t\tif (p === 0 || p === 1 || p === 3) axis = ['y', 'x'];\n\n\t\tlet newP = p ?? 0;\n\t\taxis.forEach((axisI) => {\n\t\t\tnewP = genP(axisI, newP);\n\t\t});\n\t\tp = newP;\n\n\t\tif (out.bottom && (p === 2 || p === 4) && canUseInvertY) {\n\t\t\t// меню справа может перемещаться вверх, только если есть место слева\n\t\t\tthis.elPopup.classList.add('invert-y');\n\t\t}\n\n\t\tif (out.right && (p === 0 || p === 1 || p === 3)) {\n\t\t\tthis.elPopup.classList.add('invert-x');\n\t\t}\n\n\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\n\t\tthis.elPopup.classList.add('p' + p);\n\n\t\tif (this.elPopupInner instanceof HTMLElement) {\n\t\t\tthis.elPopupInner.style.maxWidth = '';\n\t\t\tthis.elPopupInner.style.maxHeight = '';\n\t\t}\n\n\t\t// if (this.elPopupBody instanceof HTMLElement) {\n\t\t// \t// отобразить popup по вертикали с другой стороны, если с другой стороны больше места\n\t\t// \tconst hasScroll = this.elPopupBody.offsetHeight < this.elPopupBody.scrollHeight;\n\t\t// \tvd(this.elPopupBody.scrollHeight);\n\t\t// \tvd(this.elPopupBody.offsetHeight);\n\t\t// \tif (hasScroll && pForce === undefined) {\n\t\t// \t\tconst contentBoundingClientRect = this.elPopupBody?.getBoundingClientRect();\n\t\t// \t\tif (\n\t\t// \t\t\tp === 1 && contentBoundingClientRect.top * 2 < contentBoundingClientRect.bottom ||\n\t\t// \t\t\tp === 3 && contentBoundingClientRect.bottom * 2 < contentBoundingClientRect.top\n\t\t// \t\t) {\n\t\t// \t\t\tthis.recalcPosition(p === 1 ? 3 : 1);\n\t\t//\n\t\t// \t\t\treturn;\n\t\t// \t\t}\n\t\t// \t}\n\t\t// }\n\n\t\tWorker.scrollToActive(this.elPopup);\n\t};\n\n\tonTouchmove(e: TouchEvent): void {\n\t\tif (e.currentTarget instanceof HTMLElement && e.target instanceof HTMLElement) {\n\t\t\t// разрешить горизональный скролл\n\t\t\tlet hasScrollX = e.currentTarget.scrollWidth > e.currentTarget.offsetWidth;\n\t\t\tif (hasScrollX) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.target.parentElement?.scrollWidth && e.target.parentElement?.offsetWidth) {\n\t\t\t\t// разрешить горизональный скролл\n\t\t\t\tlet hasScrollX2 = e.target.parentElement.scrollWidth > e.target.parentElement?.offsetWidth;\n\t\t\t\tif (hasScrollX2) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!e.currentTarget.matches('.has_scroll')) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\tclose(): void {\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isClosed = true;\n\n\t\tif (this.$ && Core.$ && this.elPopup) {\n\t\t\tthis.$.trigger('afterclose.top-menu-popup', [Core.$(this.elPopup)]);\n\t\t}\n\n\t\tif (Worker.noClose) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.unmount();\n\n\t\tthis.elPopup?.classList.add('top-popup-wrapper-closed');\n\n\t\tsetTimeout(() => {\n\t\t\tthis.vueClose();\n\n\t\t\tif (!this.elPopup) return;\n\n\t\t\tif (this.options.useOriginal) {\n\t\t\t\tthis.elPopup.removeAttribute('style');\n\t\t\t\tthis.elPopup.classList.remove('top-popup-wrapper-shown', 'top-popup-wrapper-closed');\n\t\t\t\tthis.elPopup.classList.add('template');\n\t\t\t\tthis.elStartPosition?.append(this.elPopup);\n\n\t\t\t\tthis.elPopup.querySelector('div.top-popup_content.top-column')?.classList.remove('top-column');\n\t\t\t\tthis.elPopup.querySelector('.notch-border')?.remove();\n\t\t\t\tthis.elPopup.querySelector('.notch')?.remove();\n\n\t\t\t\tthis.elPopupInner?.replaceWith(...this.elPopupInner.childNodes);\n\n\t\t\t\tDOM.storageClear(this.elPopup);\n\t\t\t} else {\n\t\t\t\tDOM.storageClear(this.elPopup);\n\n\t\t\t\tthis.elPopup.remove();\n\t\t\t\tdelete this.elPopup;\n\t\t\t}\n\n\t\t\tconst elsPopups = Worker.getAllVisible();\n\t\t\tconst elPopupLast = elsPopups.length && elsPopups[elsPopups.length - 1];\n\n\t\t\tif (elPopupLast) {\n\t\t\t\tWorker.getPopup(elPopupLast).focus();\n\t\t\t} else {\n\t\t\t\tdocument.documentElement.classList.remove('with_popup');\n\t\t\t}\n\t\t}, this.options.transitionDuration);\n\t}\n\n\tasync vueOpen(): Promise<void> {\n\t\tawait this.vueGetComponent()?.onOpen(this);\n\t}\n\n\tvueClose(): void {\n\t\tthis.vueGetComponent()?.onClose(this);\n\t}\n\n\t// получить vueConnectors компонента Popup\n\tvueGetComponent() {\n\t\tif (this.el instanceof HTMLElement && this.options.id) return Worker.vueConnectors.get(this.options.id);\n\t}\n}\n\nGlobalEvents.init();\n"],"names":["Component","componentName","el","options","component","DOM","eventData","type","listener","_options","nodes","node","_a","GlobalEvents","e","elUl","elItem","elPopup","Worker","elCloser","elBtn","elFooterLastBtn","elLink","elItemActive","_b","elMore","elsLiVisible","countLi","index","_c","Core","css","cssM","cssPC","TopLibPopup","vueConnector","classes","existsWidgetSearch","i18n","useI18n","fromTop","elPopupOpened","_d","_e","style","pForce","leftPos","boundingClientRect","out","outWithInvert","canUseInvertX","canUseInvertY","contentBoundingClientRect","contentRight","contentBottom","margin","elHeight","elWidth","genP","axis","p","newP","axisI","elsPopups","elPopupLast"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ define((function(){"use strict";if(typeof e>"u")var e=window.Vue}));
2
+ //# sourceMappingURL=popupHint.vue_vue_type_style_index_0_lang-Cce9ZdtW.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popupHint.vue_vue_type_style_index_0_lang-Cce9ZdtW.amd.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { ref as s, getCurrentInstance as a, inject as i } from "vue";
2
- import { a as n, g as c } from "./dialogs.vue_vue_type_script_setup_true_lang-8LLCo4IK.es.js";
2
+ import { a as n, g as c } from "./dialogs.vue_vue_type_script_setup_true_lang-Bei7eCOi.es.js";
3
3
  import { waitWhile as w } from "../utils/system.js";
4
4
  class l {
5
5
  /**
@@ -76,4 +76,4 @@ export {
76
76
  d as b,
77
77
  h as u
78
78
  };
79
- //# sourceMappingURL=utils-Dk7uXZsi.es.js.map
79
+ //# sourceMappingURL=utils-BHW-ownM.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils-Dk7uXZsi.es.js","sources":["../../src/components/dialog/dialog/composables/asyncDialogHandle.ts","../../src/components/dialog/dialog/composables/utils.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { useTopDialog } from './utils';\nimport { waitWhile } from '@/core/utils/system';\nimport type { AsyncTopDialogComponentLoader, TopDialogComponent } from './types';\nimport { TopDialogHandle } from './dialogHandle';\n\n/**\n * Объект для работы с асинхронным диалоговым окном\n *\n * Является прослойкой для доступа к TopDialogHandle\n */\nexport class AsyncTopDialogHandle<T extends TopDialogComponent> {\n\n\t/**\n\t * Функция, определяющая компонент TopDialogComponent\n\t */\n\treadonly resolve: AsyncTopDialogComponentLoader<T>;\n\n\t/**\n\t * Реактивная Сссылка на объект worker,\n\t *\n\t * Ссылка не будет указывать на объект, если диалоговое окно еще не загружено\n\t */\n\treadonly worker: Ref<TopDialogHandle<T> | null> = ref(null);\n\n\tconstructor(resolve: AsyncTopDialogComponentLoader<T>) {\n\t\tthis.resolve = resolve;\n\t}\n\n\t/**\n\t * Получить доступ к TopDialogHandle\n\t */\n\tasync get() {\n\t\tif (this.worker.value) return this.worker.value;\n\n\t\tconst result = await this.resolve();\n\t\tconst TopDialogComponent = result.default;\n\n\t\tthis.worker.value = useTopDialog(TopDialogComponent);\n\n\t\tconst worker = this.worker.value;\n\n\t\tawait waitWhile(() => !worker.isMounted);\n\n\t\treturn worker;\n\t}\n\n\t/**\n\t * Открыть диалоговое окно\n\t */\n\tasync open(...args: Parameters<TopDialogHandle<T>['open']>) {\n\t\tconst worker = await this.get();\n\n\t\tawait worker.open(...args);\n\t}\n\n\t/**\n\t * Открыть диалоговое окно как ссылку, для хеш-навигации\n\t *\n\t * Только общедоступные диалоговые окна, расположенные в @/dialogs\n\t */\n\tasync openAsLink(...args: Parameters<TopDialogHandle<T>['open']>) {\n\t\tconst worker = await this.get();\n\n\t\tvoid worker.openAsLink(...args);\n\t}\n\n\t/**\n\t * Закрыть диалоговое окно\n\t *\n\t * Не меняет состояние компонента диалогового окна\n\t */\n\tasync close(...args: Parameters<TopDialogHandle<T>['close']>) {\n\t\tconst worker = await this.get();\n\n\t\tworker.close(...args);\n\t}\n\n\t/**\n\t * Размонтировать виджет диалогового окна\n\t */\n\tasync destroy(...args: Parameters<TopDialogHandle<T>['close']>) {\n\t\tconst worker = await this.get();\n\n\t\tworker.destroy(...args);\n\t}\n\n\t/**\n\t * Устанвоить props\n\t *\n\t * Полностью сбрасывается состояние props\n\t */\n\tasync setProps(...args: Parameters<TopDialogHandle<T>['setProps']>) {\n\t\tconst worker = await this.get();\n\n\t\tawait worker.setProps(...args);\n\t}\n}\n","import { getCurrentInstance, inject } from 'vue';\nimport { TopDialogHandle } from './dialogHandle';\nimport { AsyncTopDialogHandle } from './asyncDialogHandle';\nimport type { AsyncTopDialogComponentLoader, TopDialogComponent } from './types';\nimport { addDialogWorker, getDialogWorker } from '../dialogs/dialogs.vue';\n\n/**\n * Получить объект управленя текущим диалоговым окном\n */\nexport const useTopDialogSelf = () => {\n\t// вызов из пользовтаельского компонента диалога\n\tconst topDialogComponent = getCurrentInstance() as any;\n\tif (topDialogComponent?.type?.id) {\n\t\tconst dialogWorker = getDialogWorker(topDialogComponent.type.id);\n\t\tif (dialogWorker) return dialogWorker;\n\t}\n\n\treturn inject('dialogWorker') as TopDialogHandle<TopDialogComponent>;\n};\n\n/**\n * Получить объект управленя диалоговым окном\n *\n * При первом вызове компонент диалогового окна будет внедрен в компонент DialogWrapper\n */\nexport const useTopDialog = <T extends TopDialogComponent>(DialogComponent: T): TopDialogHandle<T> => {\n\treturn addDialogWorker(DialogComponent);\n};\n\n/**\n * Получить объект управленя асинхронным диалоговым окном\n *\n * Компонент диалогового окна будет загружен и инициирован при первом взаимодействии с объектом\n *\n * Использует useTopDialog()\n */\nexport const useAsyncTopDialog = <T extends TopDialogComponent>(resolve: AsyncTopDialogComponentLoader<T>): AsyncTopDialogHandle<T> => {\n\treturn new AsyncTopDialogHandle(resolve);\n};\n"],"names":["AsyncTopDialogHandle","ref","resolve","TopDialogComponent","useTopDialog","worker","waitWhile","args","useTopDialogSelf","topDialogComponent","getCurrentInstance","_a","dialogWorker","getDialogWorker","inject","DialogComponent","addDialogWorker","useAsyncTopDialog"],"mappings":";;;AAYO,MAAMA,EAAmD;AAAA;AAAA;AAAA;AAAA,EAKtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAyCC,EAAI,IAAI;AAAA,EAE1D,YAAYC,GAA2C;AACtD,SAAK,UAAUA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM;AACX,QAAI,KAAK,OAAO,MAAO,QAAO,KAAK,OAAO;AAG1C,UAAMC,KADS,MAAM,KAAK,QAAA,GACQ;AAElC,SAAK,OAAO,QAAQC,EAAaD,CAAkB;AAEnD,UAAME,IAAS,KAAK,OAAO;AAE3B,iBAAMC,EAAU,MAAM,CAACD,EAAO,SAAS,GAEhCA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQE,GAA8C;AAG3D,WAFe,MAAM,KAAK,IAAA,GAEb,KAAK,GAAGA,CAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAcA,GAA8C;AAGjE,KAFe,MAAM,KAAK,IAAA,GAEd,WAAW,GAAGA,CAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAASA,GAA+C;AAG7D,KAFe,MAAM,KAAK,IAAA,GAEnB,MAAM,GAAGA,CAAI;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAWA,GAA+C;AAG/D,KAFe,MAAM,KAAK,IAAA,GAEnB,QAAQ,GAAGA,CAAI;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAYA,GAAkD;AAGnE,WAFe,MAAM,KAAK,IAAA,GAEb,SAAS,GAAGA,CAAI;AAAA,EAC9B;AACD;ACzFO,MAAMC,IAAmB,MAAM;;AAErC,QAAMC,IAAqBC,EAAA;AAC3B,OAAIC,IAAAF,KAAA,gBAAAA,EAAoB,SAApB,QAAAE,EAA0B,IAAI;AACjC,UAAMC,IAAeC,EAAgBJ,EAAmB,KAAK,EAAE;AAC/D,QAAIG,EAAc,QAAOA;AAAA,EAC1B;AAEA,SAAOE,EAAO,cAAc;AAC7B,GAOaV,IAAe,CAA+BW,MACnDC,EAAgBD,CAAe,GAU1BE,IAAoB,CAA+Bf,MACxD,IAAIF,EAAqBE,CAAO;"}
1
+ {"version":3,"file":"utils-BHW-ownM.es.js","sources":["../../src/components/dialog/dialog/composables/asyncDialogHandle.ts","../../src/components/dialog/dialog/composables/utils.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport { ref } from 'vue';\nimport { useTopDialog } from './utils';\nimport { waitWhile } from '@/core/utils/system';\nimport type { AsyncTopDialogComponentLoader, TopDialogComponent } from './types';\nimport { TopDialogHandle } from './dialogHandle';\n\n/**\n * Объект для работы с асинхронным диалоговым окном\n *\n * Является прослойкой для доступа к TopDialogHandle\n */\nexport class AsyncTopDialogHandle<T extends TopDialogComponent> {\n\n\t/**\n\t * Функция, определяющая компонент TopDialogComponent\n\t */\n\treadonly resolve: AsyncTopDialogComponentLoader<T>;\n\n\t/**\n\t * Реактивная Сссылка на объект worker,\n\t *\n\t * Ссылка не будет указывать на объект, если диалоговое окно еще не загружено\n\t */\n\treadonly worker: Ref<TopDialogHandle<T> | null> = ref(null);\n\n\tconstructor(resolve: AsyncTopDialogComponentLoader<T>) {\n\t\tthis.resolve = resolve;\n\t}\n\n\t/**\n\t * Получить доступ к TopDialogHandle\n\t */\n\tasync get() {\n\t\tif (this.worker.value) return this.worker.value;\n\n\t\tconst result = await this.resolve();\n\t\tconst TopDialogComponent = result.default;\n\n\t\tthis.worker.value = useTopDialog(TopDialogComponent);\n\n\t\tconst worker = this.worker.value;\n\n\t\tawait waitWhile(() => !worker.isMounted);\n\n\t\treturn worker;\n\t}\n\n\t/**\n\t * Открыть диалоговое окно\n\t */\n\tasync open(...args: Parameters<TopDialogHandle<T>['open']>) {\n\t\tconst worker = await this.get();\n\n\t\tawait worker.open(...args);\n\t}\n\n\t/**\n\t * Открыть диалоговое окно как ссылку, для хеш-навигации\n\t *\n\t * Только общедоступные диалоговые окна, расположенные в @/dialogs\n\t */\n\tasync openAsLink(...args: Parameters<TopDialogHandle<T>['open']>) {\n\t\tconst worker = await this.get();\n\n\t\tvoid worker.openAsLink(...args);\n\t}\n\n\t/**\n\t * Закрыть диалоговое окно\n\t *\n\t * Не меняет состояние компонента диалогового окна\n\t */\n\tasync close(...args: Parameters<TopDialogHandle<T>['close']>) {\n\t\tconst worker = await this.get();\n\n\t\tworker.close(...args);\n\t}\n\n\t/**\n\t * Размонтировать виджет диалогового окна\n\t */\n\tasync destroy(...args: Parameters<TopDialogHandle<T>['close']>) {\n\t\tconst worker = await this.get();\n\n\t\tworker.destroy(...args);\n\t}\n\n\t/**\n\t * Устанвоить props\n\t *\n\t * Полностью сбрасывается состояние props\n\t */\n\tasync setProps(...args: Parameters<TopDialogHandle<T>['setProps']>) {\n\t\tconst worker = await this.get();\n\n\t\tawait worker.setProps(...args);\n\t}\n}\n","import { getCurrentInstance, inject } from 'vue';\nimport { TopDialogHandle } from './dialogHandle';\nimport { AsyncTopDialogHandle } from './asyncDialogHandle';\nimport type { AsyncTopDialogComponentLoader, TopDialogComponent } from './types';\nimport { addDialogWorker, getDialogWorker } from '../dialogs/dialogs.vue';\n\n/**\n * Получить объект управленя текущим диалоговым окном\n */\nexport const useTopDialogSelf = () => {\n\t// вызов из пользовтаельского компонента диалога\n\tconst topDialogComponent = getCurrentInstance() as any;\n\tif (topDialogComponent?.type?.id) {\n\t\tconst dialogWorker = getDialogWorker(topDialogComponent.type.id);\n\t\tif (dialogWorker) return dialogWorker;\n\t}\n\n\treturn inject('dialogWorker') as TopDialogHandle<TopDialogComponent>;\n};\n\n/**\n * Получить объект управленя диалоговым окном\n *\n * При первом вызове компонент диалогового окна будет внедрен в компонент DialogWrapper\n */\nexport const useTopDialog = <T extends TopDialogComponent>(DialogComponent: T): TopDialogHandle<T> => {\n\treturn addDialogWorker(DialogComponent);\n};\n\n/**\n * Получить объект управленя асинхронным диалоговым окном\n *\n * Компонент диалогового окна будет загружен и инициирован при первом взаимодействии с объектом\n *\n * Использует useTopDialog()\n */\nexport const useAsyncTopDialog = <T extends TopDialogComponent>(resolve: AsyncTopDialogComponentLoader<T>): AsyncTopDialogHandle<T> => {\n\treturn new AsyncTopDialogHandle(resolve);\n};\n"],"names":["AsyncTopDialogHandle","ref","resolve","TopDialogComponent","useTopDialog","worker","waitWhile","args","useTopDialogSelf","topDialogComponent","getCurrentInstance","_a","dialogWorker","getDialogWorker","inject","DialogComponent","addDialogWorker","useAsyncTopDialog"],"mappings":";;;AAYO,MAAMA,EAAmD;AAAA;AAAA;AAAA;AAAA,EAKtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAyCC,EAAI,IAAI;AAAA,EAE1D,YAAYC,GAA2C;AACtD,SAAK,UAAUA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAM;AACX,QAAI,KAAK,OAAO,MAAO,QAAO,KAAK,OAAO;AAG1C,UAAMC,KADS,MAAM,KAAK,QAAA,GACQ;AAElC,SAAK,OAAO,QAAQC,EAAaD,CAAkB;AAEnD,UAAME,IAAS,KAAK,OAAO;AAE3B,iBAAMC,EAAU,MAAM,CAACD,EAAO,SAAS,GAEhCA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQE,GAA8C;AAG3D,WAFe,MAAM,KAAK,IAAA,GAEb,KAAK,GAAGA,CAAI;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,cAAcA,GAA8C;AAGjE,KAFe,MAAM,KAAK,IAAA,GAEd,WAAW,GAAGA,CAAI;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAASA,GAA+C;AAG7D,KAFe,MAAM,KAAK,IAAA,GAEnB,MAAM,GAAGA,CAAI;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAWA,GAA+C;AAG/D,KAFe,MAAM,KAAK,IAAA,GAEnB,QAAQ,GAAGA,CAAI;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAYA,GAAkD;AAGnE,WAFe,MAAM,KAAK,IAAA,GAEb,SAAS,GAAGA,CAAI;AAAA,EAC9B;AACD;ACzFO,MAAMC,IAAmB,MAAM;;AAErC,QAAMC,IAAqBC,EAAA;AAC3B,OAAIC,IAAAF,KAAA,gBAAAA,EAAoB,SAApB,QAAAE,EAA0B,IAAI;AACjC,UAAMC,IAAeC,EAAgBJ,EAAmB,KAAK,EAAE;AAC/D,QAAIG,EAAc,QAAOA;AAAA,EAC1B;AAEA,SAAOE,EAAO,cAAc;AAC7B,GAOaV,IAAe,CAA+BW,MACnDC,EAAgBD,CAAe,GAU1BE,IAAoB,CAA+Bf,MACxD,IAAIF,EAAqBE,CAAO;"}
@@ -1,10 +1,10 @@
1
1
  import { nextTick as V } from "vue";
2
- import { C as f } from "./forms-BWoAyEVH.es.js";
2
+ import { C as f } from "./forms-CuEEAPvm.es.js";
3
3
  import { TopPopupWorker as H } from "../popup/worker.js";
4
4
  import { sleep as I, waitWhile as O } from "../utils/system.js";
5
5
  import { historySetState as F, setHashs as K } from "../utils/route.js";
6
6
  import { connectScrollShadow as R } from "../utils/scroll.js";
7
- import { T as u, g as L } from "./dialogs.vue_vue_type_script_setup_true_lang-8LLCo4IK.es.js";
7
+ import { T as u, g as L } from "./dialogs.vue_vue_type_script_setup_true_lang-Bei7eCOi.es.js";
8
8
  import { querySelectorVisible as T, querySelectorAllArray as c, isVisible as h } from "../utils/dom.js";
9
9
  $;
10
10
  let E = !1;
@@ -301,4 +301,4 @@ Y();
301
301
  export {
302
302
  x as TopDialogUtils
303
303
  };
304
- //# sourceMappingURL=utils-C_yz4vdX.es.js.map
304
+ //# sourceMappingURL=utils-D1fvioEG.es.js.map