@topvisor/ui 1.4.0-TopGroupSelector.9 → 1.4.1-projectSelector.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.chunks/core-BgoBbm_5.es.js +242 -0
- package/.chunks/core-BgoBbm_5.es.js.map +1 -0
- package/.chunks/core-D1KnwO7l.amd.js +2 -0
- package/.chunks/core-D1KnwO7l.amd.js.map +1 -0
- package/.chunks/{datepicker-D1Hw3a3o.es.js → datepicker-BPTUHd97.es.js} +2 -2
- package/.chunks/datepicker-BPTUHd97.es.js.map +1 -0
- package/.chunks/{datepicker-3coUsFW2.amd.js → datepicker-O_SK-Dz4.amd.js} +2 -2
- package/.chunks/datepicker-O_SK-Dz4.amd.js.map +1 -0
- package/.chunks/{dialog_regionSelectorRegions-CZ8IX7la.amd.js → dialog_regionSelectorRegions-Ba-Eypgv.amd.js} +2 -2
- package/.chunks/dialog_regionSelectorRegions-Ba-Eypgv.amd.js.map +1 -0
- package/.chunks/{dialog_regionSelectorRegions-1UVhgK2f.es.js → dialog_regionSelectorRegions-DA38RsiW.es.js} +4 -4
- package/.chunks/dialog_regionSelectorRegions-DA38RsiW.es.js.map +1 -0
- package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-Dq9kWWMg.amd.js → dialogs.vue_vue_type_script_setup_true_lang-CWprVs8d.amd.js} +2 -2
- package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-CWprVs8d.amd.js.map +1 -0
- package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-DRbTG0vh.es.js → dialogs.vue_vue_type_script_setup_true_lang-CzFMOjlE.es.js} +2 -2
- package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-CzFMOjlE.es.js.map +1 -0
- package/.chunks/field-Cvv0SRcJ.amd.js.map +1 -1
- package/.chunks/field-CyyFzM-Y.es.js.map +1 -1
- package/.chunks/{forms-CUSCBQu3.amd.js → forms-4D_EVI46.amd.js} +3 -3
- package/.chunks/forms-4D_EVI46.amd.js.map +1 -0
- package/.chunks/{forms-BseC3Ftz.es.js → forms-xkXHvvah.es.js} +565 -551
- package/.chunks/forms-xkXHvvah.es.js.map +1 -0
- package/.chunks/index-DLUtoTUg.amd.js.map +1 -1
- package/.chunks/index-DkQWJkMc.es.js.map +1 -1
- package/.chunks/lazy-40pjr8cZ.es.js.map +1 -1
- package/.chunks/lazy-DSFLxvj4.amd.js.map +1 -1
- package/.chunks/{notice-DwjipV21.amd.js → notice-hF3z8ewG.amd.js} +2 -2
- package/.chunks/notice-hF3z8ewG.amd.js.map +1 -0
- package/.chunks/{notice-Cl3ZgiHm.es.js → notice-wqZxmsUH.es.js} +2 -2
- package/.chunks/notice-wqZxmsUH.es.js.map +1 -0
- package/.chunks/{page.vue_vue_type_script_setup_true_lang-CpRJQFD1.es.js → page.vue_vue_type_script_setup_true_lang-rW3w9LMh.es.js} +4 -4
- package/.chunks/page.vue_vue_type_script_setup_true_lang-rW3w9LMh.es.js.map +1 -0
- package/.chunks/{page.vue_vue_type_script_setup_true_lang-CjIiZU-D.amd.js → page.vue_vue_type_script_setup_true_lang-tiWuQ_ZK.amd.js} +2 -2
- package/.chunks/page.vue_vue_type_script_setup_true_lang-tiWuQ_ZK.amd.js.map +1 -0
- package/.chunks/policy.vue_vue_type_style_index_0_lang-C9A--uWd.es.js +503 -0
- package/.chunks/policy.vue_vue_type_style_index_0_lang-C9A--uWd.es.js.map +1 -0
- package/.chunks/policy.vue_vue_type_style_index_0_lang-DABqSSXw.amd.js +2 -0
- package/.chunks/policy.vue_vue_type_style_index_0_lang-DABqSSXw.amd.js.map +1 -0
- package/.chunks/{popup-Jw_Yyg3U.es.js → popup-BeLPdHWv.es.js} +2 -2
- package/.chunks/popup-BeLPdHWv.es.js.map +1 -0
- package/.chunks/{popup-DRuyYFGB.amd.js → popup-Bwmu8rOb.amd.js} +2 -2
- package/.chunks/popup-Bwmu8rOb.amd.js.map +1 -0
- package/.chunks/{popupHint.vue_vue_type_style_index_0_lang-DtiT6NE4.amd.js → popupHint.vue_vue_type_style_index_0_lang-B0BWXhHK.amd.js} +2 -2
- package/.chunks/popupHint.vue_vue_type_style_index_0_lang-B0BWXhHK.amd.js.map +1 -0
- package/.chunks/{popupHint.vue_vue_type_style_index_0_lang-DD59yF6H.es.js → popupHint.vue_vue_type_style_index_0_lang-fnjq0yg1.es.js} +2 -2
- package/.chunks/popupHint.vue_vue_type_style_index_0_lang-fnjq0yg1.es.js.map +1 -0
- package/.chunks/store-CX_6ZXhO.es.js.map +1 -1
- package/.chunks/store-YRW59xEF.amd.js.map +1 -1
- package/.chunks/{utils-D9nYQabE.amd.js → utils-BRJvuqe_.amd.js} +2 -2
- package/.chunks/utils-BRJvuqe_.amd.js.map +1 -0
- package/.chunks/{utils-YrUExsH7.es.js → utils-ByqQkftW.es.js} +2 -2
- package/.chunks/utils-ByqQkftW.es.js.map +1 -0
- package/.chunks/{utils-Q69SXlnV.es.js → utils-YVlPlqDK.es.js} +3 -3
- package/.chunks/utils-YVlPlqDK.es.js.map +1 -0
- package/.chunks/{utils-CzHUG_xz.amd.js → utils-cAJahDml.amd.js} +2 -2
- package/.chunks/utils-cAJahDml.amd.js.map +1 -0
- package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-CkE912ll.amd.js → widgetInput.vue_vue_type_script_setup_true_lang-D7lVLE3D.amd.js} +2 -2
- package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-D7lVLE3D.amd.js.map +1 -0
- package/.chunks/{widgetInput.vue_vue_type_script_setup_true_lang-CDkeKVqY.es.js → widgetInput.vue_vue_type_script_setup_true_lang-UUovJzhL.es.js} +2 -2
- package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-UUovJzhL.es.js.map +1 -0
- package/README.md +82 -82
- package/api/additional.amd.js.map +1 -1
- package/api/additional.js.map +1 -1
- package/api/index.amd.js +1 -1
- package/api/index.amd.js.map +1 -1
- package/api/index.js +1 -1
- package/api/index.js.map +1 -1
- package/assets/core.css +1 -1
- package/assets/forms.css +1 -1
- package/assets/policy.css +1 -1
- package/assets/project.css +1 -1
- package/charts/charts.amd.js +1 -1
- package/charts/charts.amd.js.map +1 -1
- package/charts/charts.js +1 -1
- package/charts/charts.js.map +1 -1
- package/core/app.amd.js +1 -1
- package/core/app.amd.js.map +1 -1
- package/core/app.js +5 -5
- package/core/app.js.map +1 -1
- package/dialog/dialog.amd.js +1 -1
- package/dialog/dialog.amd.js.map +1 -1
- package/dialog/dialog.js +2 -2
- package/dialog/dialog.js.map +1 -1
- package/extra/extra.amd.js.map +1 -1
- package/extra/extra.js.map +1 -1
- package/forms/forms.amd.js +1 -1
- package/forms/forms.js +3 -3
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.js +123 -111
- package/formsExt/formsExt.js.map +1 -1
- package/icomoon/Read Me.txt +7 -7
- package/icomoon/Topvisor icons.json +6658 -0
- package/icomoon/demo-files/demo.css +158 -158
- package/icomoon/demo-files/demo.js +30 -30
- package/icomoon/demo.css +158 -158
- package/icomoon/demo.html +15 -1
- package/icomoon/demo.js +30 -30
- package/icomoon/fonts/Topvisor-2.eot +0 -0
- package/icomoon/fonts/Topvisor-2.svg +1 -0
- package/icomoon/fonts/Topvisor-2.ttf +0 -0
- package/icomoon/fonts/Topvisor-2.woff +0 -0
- package/icomoon/selection.json +1 -1
- package/icomoon/style.css +8 -5
- package/jquery-ui.min.css +5 -5
- package/layout/layout.amd.js +1 -1
- package/layout/layout.amd.js.map +1 -1
- package/layout/layout.js +1 -1
- package/layout/layout.js.map +1 -1
- package/package.json +1 -1
- package/popup/popup.amd.js +1 -1
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.js +6 -6
- package/popup/popup.js.map +1 -1
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.js +2 -2
- package/popup/worker.js.map +1 -1
- package/project/project.amd.js +1 -1
- package/project/project.amd.js.map +1 -1
- package/project/project.js +892 -613
- package/project/project.js.map +1 -1
- package/require/css.amd.js +12 -12
- package/src/api/api/types/client/request-options.d.ts +8 -3
- package/src/components/forms/caption/types.d.ts +5 -1
- package/src/components/forms/input/input.vue.d.ts +2 -4
- package/src/components/forms/input/types.d.ts +15 -0
- package/src/components/forms/select/select.vue.d.ts +15 -2
- package/src/components/forms/select/types.d.ts +6 -0
- package/src/components/formsExt/editArea/editArea.vue.d.ts +15 -2
- package/src/components/formsExt/editArea/types.d.ts +6 -0
- package/src/components/formsExt/editInput/editInput.vue.d.ts +16 -1
- package/src/components/formsExt/selector2/composables/useAPI.d.ts +2 -0
- package/src/components/formsExt/selector2/composables/useMenu.d.ts +3 -1
- package/src/components/formsExt/selector2/types.d.ts +14 -0
- package/src/components/popup/popup/listItem.vue.d.ts +24 -4
- package/src/components/popup/popup/types.d.ts +1 -0
- package/src/components/project/groupSelector/groupSelector.vue.d.ts +5 -0
- package/src/components/project/groupSelector/groups/groups.vue.d.ts +2 -0
- package/src/components/project/groupSelector/groups/types.d.ts +4 -0
- package/src/components/project/groupSelector/groups/utils.d.ts +1 -1
- package/src/components/project/groupSelector/types.d.ts +4 -0
- package/src/components/project/project.d.ts +1 -0
- package/src/components/project/projectSelector/projectSelector.vue.d.ts +121 -0
- package/src/components/project/projectSelector/stories/mocks/projects.d.ts +10 -0
- package/src/components/project/projectSelector/submenu/submenu.vue.d.ts +4 -0
- package/src/components/project/projectSelector/submenu/types.d.ts +17 -0
- package/src/components/project/projectSelector/types.d.ts +57 -0
- package/src/components/project/projectSelector/utils.d.ts +206 -0
- package/src/core/directives/shortcut.d.ts +12 -0
- package/src/core/utils/string.d.ts +1 -1
- package/tabs/tabs.amd.js.map +1 -1
- package/tabs/tabs.js.map +1 -1
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/tabsView/tabsView.js +2 -2
- package/tabsView/tabsView.js.map +1 -1
- package/utils/check.amd.js.map +1 -1
- package/utils/check.js.map +1 -1
- package/utils/clipboard.amd.js +1 -1
- package/utils/clipboard.amd.js.map +1 -1
- package/utils/clipboard.js +1 -1
- package/utils/clipboard.js.map +1 -1
- package/utils/date.amd.js +1 -1
- package/utils/date.js +1 -1
- package/utils/device.amd.js +1 -1
- package/utils/device.js +1 -1
- package/utils/dom.amd.js.map +1 -1
- package/utils/dom.js.map +1 -1
- package/utils/image.amd.js.map +1 -1
- package/utils/image.js.map +1 -1
- package/utils/keyboard.amd.js.map +1 -1
- package/utils/keyboard.js.map +1 -1
- package/utils/lodash.amd.js +1 -1
- package/utils/lodash.js +1 -1
- package/utils/number.amd.js.map +1 -1
- package/utils/number.js.map +1 -1
- package/utils/price.amd.js +1 -1
- package/utils/price.amd.js.map +1 -1
- package/utils/price.js +1 -1
- package/utils/price.js.map +1 -1
- package/utils/route.amd.js.map +1 -1
- package/utils/route.js.map +1 -1
- package/utils/scroll.amd.js.map +1 -1
- package/utils/scroll.js.map +1 -1
- package/utils/searchers.amd.js +1 -1
- package/utils/searchers.amd.js.map +1 -1
- package/utils/searchers.js +3 -3
- package/utils/searchers.js.map +1 -1
- package/utils/string.amd.js +1 -1
- package/utils/string.amd.js.map +1 -1
- package/utils/string.js +50 -50
- package/utils/string.js.map +1 -1
- package/utils/system.amd.js.map +1 -1
- package/utils/system.js.map +1 -1
- package/utils/url.amd.js.map +1 -1
- package/utils/url.js.map +1 -1
- package/web-types.json +31 -0
- package/.chunks/core-BL-38XF7.es.js +0 -196
- package/.chunks/core-BL-38XF7.es.js.map +0 -1
- package/.chunks/core-BsPx05H9.amd.js +0 -2
- package/.chunks/core-BsPx05H9.amd.js.map +0 -1
- package/.chunks/datepicker-3coUsFW2.amd.js.map +0 -1
- package/.chunks/datepicker-D1Hw3a3o.es.js.map +0 -1
- package/.chunks/dialog_regionSelectorRegions-1UVhgK2f.es.js.map +0 -1
- package/.chunks/dialog_regionSelectorRegions-CZ8IX7la.amd.js.map +0 -1
- package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-DRbTG0vh.es.js.map +0 -1
- package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-Dq9kWWMg.amd.js.map +0 -1
- package/.chunks/forms-BseC3Ftz.es.js.map +0 -1
- package/.chunks/forms-CUSCBQu3.amd.js.map +0 -1
- package/.chunks/notice-Cl3ZgiHm.es.js.map +0 -1
- package/.chunks/notice-DwjipV21.amd.js.map +0 -1
- package/.chunks/page.vue_vue_type_script_setup_true_lang-CjIiZU-D.amd.js.map +0 -1
- package/.chunks/page.vue_vue_type_script_setup_true_lang-CpRJQFD1.es.js.map +0 -1
- package/.chunks/policy.vue_vue_type_style_index_0_lang-BBDJEs5Q.es.js +0 -496
- package/.chunks/policy.vue_vue_type_style_index_0_lang-BBDJEs5Q.es.js.map +0 -1
- package/.chunks/policy.vue_vue_type_style_index_0_lang-DJOaMdBm.amd.js +0 -2
- package/.chunks/policy.vue_vue_type_style_index_0_lang-DJOaMdBm.amd.js.map +0 -1
- package/.chunks/popup-DRuyYFGB.amd.js.map +0 -1
- package/.chunks/popup-Jw_Yyg3U.es.js.map +0 -1
- package/.chunks/popupHint.vue_vue_type_style_index_0_lang-DD59yF6H.es.js.map +0 -1
- package/.chunks/popupHint.vue_vue_type_style_index_0_lang-DtiT6NE4.amd.js.map +0 -1
- package/.chunks/utils-CzHUG_xz.amd.js.map +0 -1
- package/.chunks/utils-D9nYQabE.amd.js.map +0 -1
- package/.chunks/utils-Q69SXlnV.es.js.map +0 -1
- package/.chunks/utils-YrUExsH7.es.js.map +0 -1
- package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-CDkeKVqY.es.js.map +0 -1
- package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-CkE912ll.amd.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popup-Bwmu8rOb.amd.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';\r\n\r\n/**\r\n * Базовый компонент для js компонентов, не имеет отношения к Vue\r\n */\r\nclass Component {\r\n\r\n\tstatic componentName = 'Top';\r\n\r\n\tcomponentName: string | undefined; // имя класса компонента\r\n\tclassName: string | undefined; // имя css класса компонента\r\n\tuid: string | undefined; // уникальный id компонента\r\n\tel: HTMLElement | undefined; // элемент, связанный с компонентом\r\n\toptions = {}; // параметры компонента\r\n\r\n\tunmountEls: HTMLElement[] = [];\r\n\tunmountEvents: any[] = [];\r\n\r\n\t// переопредлять нельзя\r\n\t// если компонент инициирован, необходимо сразу его вернуть и выполнить reInit() вместо mount()\r\n\t// используется init вместо constructor, так как super constructor выполняется до Object.defineProperty() параметров класса\r\n\tinit(componentName: string, el: HTMLElement, options: object): Component | void {\r\n\t\tif (!el) {\r\n\t\t\tthrow componentName + ': el is undefined';\r\n\t\t}\r\n\r\n\t\tconst component = Component.getComponent(el, componentName);\r\n\r\n\t\tif (component) {\r\n\t\t\tcomponent.reInit(options);\r\n\r\n\t\t\treturn component;\r\n\t\t}\r\n\r\n\t\tthis.componentName = componentName;\r\n\t\tthis.className = 'top' + componentName[0].toUpperCase() + componentName.substring(1);\r\n\t\tthis.uid = this.componentName + (Math.random() + '').replace('.', '');\r\n\r\n\t\tthis._setComponent(el);\r\n\t\tthis.el = el;\r\n\t\tthis.el.classList.add(this.className);\r\n\t\tthis.options = Object.assign(this.options, options);\r\n\r\n\t\tthis.mount();\r\n\t}\r\n\r\n\t// получить инициированный компонент\r\n\tstatic getComponent(el: HTMLElement, componentName: string): any {\r\n\t\treturn DOM.storage(el, '#' + componentName);\r\n\t}\r\n\r\n\t// устанвоить компонент\r\n\t_setComponent(el: HTMLElement) {\r\n\t\tDOM.storage(el, '#' + this.componentName, this);\r\n\t}\r\n\r\n\t// функция подключения компонента\r\n\tmount(): void {\r\n\t\tthrow 'Please, add method mount() to component: ' + this.componentName;\r\n\t}\r\n\r\n\t// функция отключения компонента\r\n\tunmount(): void {\r\n\t\tDOM.storage(this.el, '#' + this.componentName, null);\r\n\r\n\t\tthis.unmountEls.forEach((el) => {\r\n\t\t\tel.remove();\r\n\t\t});\r\n\r\n\t\tthis.unmountEls = [];\r\n\r\n\t\tthis.unmountEvents.forEach((eventData) => {\r\n\t\t\teventData.el.removeEventListener(eventData.type, eventData.listener, eventData.options);\r\n\t\t});\r\n\r\n\t\tthis.unmountEvents = [];\r\n\t}\r\n\r\n\t// указание новые элементы, которые должны будут удалиться после unmount\r\n\tregisterElForUnmount(el: HTMLElement): void {\r\n\t\tthis.unmountEls.push(el);\r\n\t}\r\n\r\n\t// указание новые события, которые должны будут удалиться после unmount\r\n\taddEventListenerWithUnmount(\r\n\t\tel: HTMLElement | Document | Window,\r\n\t\ttype: keyof GlobalEventHandlersEventMap,\r\n\t\tlistener: (this: HTMLElement, e: Event) => any,\r\n\t\toptions?: any,\r\n\t): void {\r\n\t\tel.addEventListener(type, listener, options);\r\n\r\n\t\tthis.registerEventForUnmount(el, type, listener, options);\r\n\t}\r\n\r\n\t// указание новые события, которые должны будут удалиться после unmount\r\n\tregisterEventForUnmount(\r\n\t\tel: HTMLElement | Document | Window,\r\n\t\ttype: keyof GlobalEventHandlersEventMap,\r\n\t\tlistener: (this: HTMLElement, e: Event) => any,\r\n\t\toptions?: any,\r\n\t): void {\r\n\t\tconst eventData = {\r\n\t\t\tel: el,\r\n\t\t\ttype: type,\r\n\t\t\tlistener: listener,\r\n\t\t\toptions: options,\r\n\t\t};\r\n\r\n\t\tthis.unmountEvents.push(eventData);\r\n\t}\r\n\r\n\t// функция перенастройки уже подключенного компонента\r\n\treInit(_options: object): void {\r\n\t\tthrow 'Please, add method reInit() to component: ' + this.componentName;\r\n\t}\r\n\r\n\t// удалить элементы из DOM, но не из памяти\r\n\tstatic detach(nodes: NodeList | HTMLElement): void {\r\n\t\tif (nodes instanceof NodeList) {\r\n\t\t\tnodes.forEach((node) => node.parentElement?.removeChild(node));\r\n\t\t} else {\r\n\t\t\tconst el = nodes;\r\n\t\t\tel.parentElement?.removeChild(el);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default Component;\r\n","import Worker from '@/components/popup/lib/worker';\r\nimport DOM from '@/core/utils/dom';\r\n\r\n/**\r\n * Глобальные события, для реализации Popup\r\n * Автоматически инициируется при первой загрузке, не является выгружаемым модулем\r\n *\r\n * Если в меню встречает класс .preloader, то событие нажатия на кнопку через enter будет остановлено\r\n */\r\nclass GlobalEvents {\r\n\r\n\tprivate static isInited = false;\r\n\r\n\t/**\r\n\t * Добавить глобальные обработчики\r\n\t *\r\n\t * Добавляются на страницу один раз и навсегда\r\n\t */\r\n\tstatic init(): void {\r\n\t\tif (this.isInited) return;\r\n\r\n\t\tthis.isInited = true;\r\n\r\n\t\tdocument.addEventListener('click', this.onclickCapture, { capture: true });\r\n\t\tdocument.addEventListener('click', this.onclick);\r\n\t\tdocument.addEventListener('keydown', this.onkeydown);\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик захватов кликов\r\n\t *\r\n\t * Обрабатывает захватов клики внутри Popup\r\n\t */\r\n\tprivate static onclickCapture(e: Event): void {\r\n\t\tif (!(e.target instanceof HTMLElement)) return;\r\n\r\n\t\t// меню\r\n\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\r\n\r\n\t\t// клик вне меню\r\n\t\tif (!elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// клик по кнопке открытия другого меню\r\n\t\tif (e.target.matches('[data-top-popup]')) {\r\n\t\t\t// список меню, в котором был сделан клик\r\n\t\t\tconst elUl = e.target.closest<HTMLElement>('ul');\r\n\r\n\t\t\t// элемент меню, по которому был сделан клик\r\n\t\t\tconst elItem = e.target.closest<HTMLElement>('a, .a');\r\n\r\n\t\t\t// сделать элемент меню, по которому сделан клик активным\r\n\t\t\tif (elUl) {\r\n\t\t\t\telUl.querySelector('a.top-active, .a.top-active')?.classList.remove('top-active');\r\n\t\t\t}\r\n\r\n\t\t\tif (elItem) {\r\n\t\t\t\telItem.classList.add('top-active');\r\n\t\t\t}\r\n\r\n\t\t\te.stopPropagation();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// клик по фону меню\r\n\t\tif (e.target.matches('.top-popup-wrapper')) {\r\n\t\t\tconst elPopup = e.target;\r\n\r\n\t\t\tWorker.close(elPopup, true);\r\n\r\n\t\t\te.stopPropagation();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик кликов\r\n\t *\r\n\t * Обрабатывает клики внутри Popup\r\n\t */\r\n\tprivate static onclick(e: Event): void {\r\n\t\tif (!(e.target instanceof HTMLElement)) return;\r\n\r\n\t\t// элементы меню, клик по которым должен его закрыть\r\n\t\tconst elCloser = e.target.closest<HTMLElement>('.closer, a, .a, .top-button');\r\n\t\tif (elCloser) {\r\n\t\t\t// меню\r\n\t\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\r\n\r\n\t\t\t// клик вне меню\r\n\t\t\tif (!elPopup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// элемент имеет модификатор, запрещаюущий закрытие меню по клику на него\r\n\t\t\tif (elCloser.matches('.top-popup-noCloser')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated, ссылки с href=\".\" запрещены, они должны быть заменены на .top-popup_listItem-button\r\n\t\t\tif (elCloser.getAttribute('href') === '.') {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\t// закрыть меню\r\n\t\t\tWorker.close(elPopup, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик нажатия кнопки на клавиатуре\r\n\t */\r\n\tprivate static onkeydown(e: KeyboardEvent): void {\r\n\t\tif (!(e.target instanceof HTMLElement)) return;\r\n\r\n\t\tlet elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\r\n\r\n\t\tif (!elPopup) {\r\n\t\t\telPopup = Worker.getPopupFromOpener(e.target)?.elPopup ?? null;\r\n\t\t}\r\n\r\n\t\t// нажатие не в меню\r\n\t\tif (!elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elUl = elPopup.querySelector<HTMLElement>('ul.top-popup_content');\r\n\r\n\t\tswitch (e.key) {\r\n\t\t\tcase 'Escape':\r\n\t\t\t\tWorker.close(elPopup, true);\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'Enter':\r\n\t\t\t\t// атоматическое нажатие кнопок при нажатии Enter\r\n\t\t\t\tif (!elUl) {\r\n\t\t\t\t\tif (DOM.querySelectorVisible(elPopup, '.preloader')) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// deprecated, старый код на сайте\r\n\t\t\t\t\tconst elBtn = DOM.querySelectorVisible(elPopup, '.top-popup_footer .go, .top-popup_footer [data-action]');\r\n\t\t\t\t\tif (elBtn instanceof HTMLElement) {\r\n\t\t\t\t\t\telBtn.click();\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Запуск клика последней кнопки, расположенной в footer'е Popup'а, нажатием клавиши Enter\r\n\t\t\t\t\tlet elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button:focus');\r\n\t\t\t\t\tif (!elFooterLastBtn) elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button');\r\n\t\t\t\t\tif (elFooterLastBtn instanceof HTMLElement) {\r\n\t\t\t\t\t\telFooterLastBtn.click();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// перейти по ссылке по нажатию на Enter\r\n\t\t\t\t// данный функуционал игнорирует SPA\r\n\t\t\t\tconst elLink = DOM.querySelectorVisible(elPopup, 'li > a.top-active');\r\n\t\t\t\tif (elLink && elLink.getAttribute('href')) {\r\n\t\t\t\t\t// фокус может находиться на другой ссылке\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tlocation.href = elLink.getAttribute('href')!;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// кликнуть по элементу меню по нажатию на Enter\r\n\t\t\t\tconst elItem = elPopup.querySelector<HTMLElement>('li > .top-active');\r\n\t\t\t\tif (elItem instanceof HTMLElement) {\r\n\t\t\t\t\telItem.click();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// управление стрелками\r\n\t\t\tcase 'ArrowUp':\r\n\t\t\tcase 'ArrowRight':\r\n\t\t\tcase 'ArrowDown':\r\n\t\t\tcase 'ArrowLeft':\r\n\t\t\t\tif (!elUl) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\r\n\t\t\t\t\tconst elMoreVisible = DOM.querySelectorVisible(\r\n\t\t\t\t\t\telPopup,\r\n\t\t\t\t\t\t'ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active > .top-popup_listMore',\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (elMoreVisible) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t}else if((e.target as HTMLElement).tagName === 'INPUT'){\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst elItemActive = elPopup.querySelector<HTMLElement>('ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active')?.parentElement;\r\n\r\n\t\t\t\t// есть подменю\r\n\t\t\t\tif (e.key === 'ArrowRight' && elItemActive) {\r\n\t\t\t\t\t// const elItemMoreActive = elItemActive.querySelector<HTMLElement>('[data-top-popup].top-active');\r\n\t\t\t\t\t// if (elItemMoreActive) {\r\n\t\t\t\t\t// \treturn elItemMoreActive.click();\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tconst elMore = elItemActive.querySelector<HTMLElement>('.top-active > .top-popup_listMore');\r\n\t\t\t\t\tif (elMore instanceof HTMLElement) {\r\n\t\t\t\t\t\treturn elMore.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst elsLiVisible = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li:not(.top-popup_liNoSelectable)');\r\n\t\t\t\tconst countLi = elsLiVisible.length;\r\n\r\n\t\t\t\tif (!countLi) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet index = -1;\r\n\t\t\t\tif (elItemActive) {\r\n\t\t\t\t\tindex = elsLiVisible.indexOf(elItemActive);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {\r\n\t\t\t\t\tindex--;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// это первый элемен, \"Назад\" должен закрывать окно\r\n\t\t\t\tif (e.key === 'ArrowLeft' && index === -1) {\r\n\t\t\t\t\tif (e.target.matches('input')) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn Worker.close(elPopup, true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// это последний элемен, \"Вперед\" не должен ни чего делать\r\n\t\t\t\tif (e.key === 'ArrowRight' && index === countLi) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (index < 0) {\r\n\t\t\t\t\tindex = countLi - 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (index > countLi - 1) {\r\n\t\t\t\t\tindex = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\telPopup.querySelectorAll('ul.top-popup_content > li > .top-active').forEach(el => el.classList.remove('top-active'));\r\n\t\t\t\telsLiVisible[index].querySelector(':scope > a, :scope > .a')?.classList.add('top-active');\r\n\r\n\t\t\t\tWorker.scrollToActive(elPopup);\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default GlobalEvents;\r\n","import Core from '@/core/core/core';\r\nimport Component from '@/components/component';\r\nimport DOM from '@/core/utils/dom';\r\nimport Worker from '@/components/popup/lib/worker';\r\nimport GlobalEvents from '@/components/popup/lib/popup.globalEvents';\r\n\r\nimport css from '@/components/popup/popup/style/popup.css?inline';\r\nimport cssM from '@/components/popup/popup/style/popup.m.css?inline';\r\nimport cssPC from '@/components/popup/popup/style/popup.pc.css?inline';\r\nimport { useI18n } from '@/core/plugins/i18n';\r\nimport type { OpenerProps } from '@/components/popup/popup/opener/types';\r\n\r\nCore.insertStyleToPage(css);\r\nCore.insertStyleToPage(cssM, 'm');\r\nCore.insertStyleToPage(cssPC, 'pc');\r\n\r\nexport interface PopupOptions {\r\n\tpopup?: string,\r\n\tid?: string,\r\n\tp?: number,\r\n\tnotch?: boolean,\r\n\tclass?: string,\r\n\tposBy?: 'left' | 'right' | 'fixed' | Element,\r\n\tfrontSelector?: string,\r\n\tinvertX?: boolean,\r\n\topenByHover?: boolean,\r\n\tuseOriginal?: boolean,\r\n\ttransitionDuration?: number,\r\n\tisFullScreen?: boolean,\r\n}\r\n\r\n/**\r\n * Основной объект js компонента TopPopup\r\n *\r\n * Добавляет jQuery события на this.el, если jQuery загружен:\r\n *\r\n * - aftershow.top-menu-popup\r\n * - afterclose.top-menu-popup\r\n */\r\nexport class TopLibPopup<T extends Record<string, any> | undefined = undefined> extends Component {\r\n\r\n\tstatic componentName = 'TopPopup';\r\n\r\n\tdeclare el: HTMLElement & { __TopPopupOpenerProps: OpenerProps<T> }; // элемент, вызвавший открытие Popup\r\n\telActiveByDefault: boolean | undefined; // элемент уже имеет класс top-active перед открытием окна\r\n\telPopup: HTMLElement | undefined; // Popup .top-popup-wrapper\r\n\telPopupInner: HTMLElement | undefined; // контентная часть Popup .top-popup\r\n\telPopupHeader: HTMLElement | undefined | null;\r\n\telPopupWidget: HTMLElement | undefined | null;\r\n\telPopupBody: HTMLElement | undefined | null;\r\n\telPopupFooter: HTMLElement | undefined | null;\r\n\telFront: HTMLElement | undefined | null;\r\n\r\n\t/**\r\n\t * Для openerIsInput фокусировка срабатывает при входе в поле ввода\r\n\t *\r\n\t * Фокусировка на сам Popup не производится\r\n\t *\r\n\t * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/combobox_role\r\n\t */\r\n\topenerIsInput = false;\r\n\r\n\tpopupParent: TopLibPopup | undefined;\r\n\r\n\t$: JQuery<HTMLElement> | undefined; // только если есть jQuery\r\n\r\n\telStartPosition: HTMLElement | undefined | null; // используется для useOriginal\r\n\tshift = {\r\n\t\ttop: 0,\r\n\t\tleft: 0,\r\n\t};\r\n\tisClosed = false; // флаг того, что меню закрыто\r\n\tisFirstClick = true;\r\n\ttype: string | undefined; // selector или html\r\n\r\n\toptions: PopupOptions = {\r\n\t\tpopup: '', // selector, text\r\n\t\tp: 0, // положение меню (0 - над элементом, 1 - сверху, 2 - справа, 3 - снизу, 4 слева)\r\n\t\tnotch: false, // отображать ли клювик\r\n\r\n\t\tclass: '', // класс, добавляемый меню\r\n\r\n\t\tposBy: 'left', // способ привязки позиционирования меню (left/right - левый/правый край родителя, fixed - по документу)\r\n\t\tfrontSelector: '',\r\n\t\tinvertX: false, // базовая ордината - правая граница элемента, а не левая\r\n\t\topenByHover: false, // открывать при наведении\r\n\r\n\t\tuseOriginal: false, // использовать оригинальный шаблон, без клонирвоания (для сохранения состояния меню)\r\n\r\n\t\ttransitionDuration: 100, // значение прописано в css\r\n\r\n\t\tisFullScreen: false,\r\n\t};\r\n\r\n\tevents = {};\r\n\r\n\t/**\r\n\t * Создать Popup\r\n\t * @param el - элемент, открывающий меню\r\n\t * @param options\r\n\t */\r\n\tconstructor(el: HTMLElement, options: PopupOptions) {\r\n\t\tsuper();\r\n\r\n\t\tthis.init(TopLibPopup.componentName, el, options);\r\n\t}\r\n\r\n\tasync mount(): Promise<void> {\r\n\t\tif (!(this.el instanceof HTMLElement)) return;\r\n\t\tconst vueConnector = this.vueGetComponent();\r\n\r\n\t\tif (this.el.closest('.top-popup-wrapper')) this.popupParent = Worker.getPopup(this.el.closest('.top-popup-wrapper')!);\r\n\r\n\t\tawait this.mountJQuery();\r\n\r\n\t\tif (DOM.css(this.el, 'position') !== 'absolute') {\r\n\t\t\tthis.el.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis.el.dataset.topPopupOpened = 'opened';\r\n\t\tthis.elActiveByDefault = this.el.classList.contains('top-active');\r\n\t\tthis.el.classList.add('top-active');\r\n\r\n\t\tthis.openerIsInput = this.el.classList.contains('top-input');\r\n\r\n\t\t// todo: удалить после переписать TopProjectSelector на vue\r\n\t\tif (this.el.classList.contains('top-input-project_name')) {\r\n\t\t\tthis.openerIsInput = false;\r\n\t\t}\r\n\r\n\t\tif (this.openerIsInput) {\r\n\t\t\tconst elInput = this.el.querySelector('input');\r\n\t\t\tif (elInput && !elInput['__popupOnBlur']) {\r\n\t\t\t\telInput['__popupOnBlur'] = true;\r\n\r\n\t\t\t\telInput.addEventListener('blur', e => {\r\n\t\t\t\t\t// элемент один, экземпляры popup разные\r\n\t\t\t\t\tWorker.getPopupFromOpener(this.el)?.close();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (vueConnector) {\r\n\t\t\t// компонент vue Popup\r\n\t\t\tthis.type = 'vue';\r\n\r\n\t\t\tthis.options.popup = '';\r\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup);\r\n\t\t} else if (this.options.popup?.match(/^[#.]/)) {\r\n\t\t\t// selector\r\n\t\t\tthis.type = 'selector';\r\n\r\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.template`) || undefined;\r\n\t\t} else {\r\n\t\t\t// html\r\n\t\t\tthis.type = 'html';\r\n\r\n\t\t\tif (this.options.useOriginal) {\r\n\t\t\t\tthrow ('Option useOriginal not allowed for text templates');\r\n\t\t\t}\r\n\r\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup ?? '');\r\n\t\t}\r\n\r\n\t\tif (!this.elPopup || vueConnector?.opened) {\r\n\t\t\t// возможно шаблон не найден, так как он используется в уже открытом меню\r\n\t\t\tif (this.options.useOriginal || vueConnector?.opened) {\r\n\t\t\t\t// закрыть открытое меню\r\n\t\t\t\tif (vueConnector?.opened) {\r\n\t\t\t\t\tthis.elPopup = vueConnector.popup.elPopup;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.top-popup-wrapper-shown`) || undefined;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.elPopup) {\r\n\t\t\t\t\tthis.el.dataset.topPopupOpened = '';\r\n\r\n\t\t\t\t\tif (!this.elActiveByDefault) {\r\n\t\t\t\t\t\tthis.el.classList.remove('top-active');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tWorker.close(this.elPopup);\r\n\r\n\t\t\t\t\t// повторит попытку открыть меню\r\n\t\t\t\t\tsetTimeout(() => this.mount(), this.options.transitionDuration);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthrow ('Option useOriginal state allowed only elements .template');\r\n\t\t\t}\r\n\r\n\t\t\t// возможно вместо шаблона используется другой элемент\r\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}:not(.top-popup-wrapper)`) || undefined;\r\n\t\t}\r\n\r\n\t\tif (!this.elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.options.useOriginal) {\r\n\t\t\tthis.elStartPosition = this.elPopup.closest<HTMLElement>('.top-popup-el-start-position');\r\n\t\t\tif (!this.elStartPosition) {\r\n\t\t\t\tthis.elStartPosition = DOM.wrap(this.elPopup, 'i');\r\n\t\t\t\tthis.elStartPosition.classList.add('top-popup-el-start-position', 'hidden');\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.elPopup = this.elPopup.cloneNode(true) as HTMLElement;\r\n\r\n\t\t\t// вывод в меню копии произвольного элемента\r\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template')) {\r\n\t\t\t\tthis.elPopup.classList.remove('hidden');\r\n\r\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\r\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\r\n\t\t\t}\r\n\r\n\t\t\tif (this.type === 'html') {\r\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\r\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\r\n\r\n\t\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// вложенный Popup\r\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template') || this.type === 'html' || this.type === 'vue') {\r\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '[data-top-popup]').forEach(el => {\r\n\t\t\t\t\tif (el instanceof HTMLElement) el.dataset.topPopupPosBy = 'fixed';\r\n\t\t\t\t});\r\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '.top-popup-wrapper').forEach(el => el.remove());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tWorker.decoratorBeforeOpen(this);\r\n\r\n\t\tif (vueConnector) {\r\n\t\t\tthis.options.class = vueConnector.classRef.value;\r\n\t\t\tif (vueConnector.transitionDurationRef.value !== undefined) {\r\n\t\t\t\tthis.options.transitionDuration = vueConnector.transitionDurationRef.value;\r\n\r\n\t\t\t\tif (this.elPopup instanceof HTMLElement) {\r\n\t\t\t\t\tthis.elPopup.style.setProperty(\r\n\t\t\t\t\t\t'--top-popup-transition-delay',\r\n\t\t\t\t\t\tthis.options.transitionDuration + 'ms',\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.elPopupInner = document.createElement('div');\r\n\t\tthis.elPopupInner.classList.add('top-popupPanel', 'top-popup');\r\n\r\n\t\twhile (this.elPopup.firstChild) {\r\n\t\t\tthis.elPopupInner.appendChild(this.elPopup.firstChild);\r\n\t\t}\r\n\r\n\t\tthis.elPopup.append(this.elPopupInner);\r\n\r\n\t\tthis.elPopup.classList.add('top-popup-wrapper');\r\n\r\n\t\tif (this.options.class) {\r\n\t\t\tconst classes = this.options.class.split(' ');\r\n\r\n\t\t\tthis.elPopup.classList.add(...classes);\r\n\t\t}\r\n\r\n\t\tif (this.options.notch) {\r\n\t\t\tthis.elPopup.classList.add('with_notch');\r\n\r\n\t\t\tthis.elPopup.insertAdjacentHTML('beforeend', '<i class=\"notch notch-border\"></i><i class=\"notch\"></i>');\r\n\t\t}\r\n\r\n\t\tawait this.vueOpen();\r\n\r\n\t\tthis.elPopupHeader = this.elPopupInner.querySelector<HTMLElement>('.top-popup_header');\r\n\t\tthis.elPopupWidget = this.elPopupInner.querySelector<HTMLElement>('.top-popup_widget');\r\n\t\tthis.elPopupBody = this.elPopupInner.querySelector<HTMLElement>('.top-popup_content');\r\n\t\tthis.elPopupFooter = this.elPopupInner.querySelector<HTMLElement>('.top-popup_footer');\r\n\r\n\t\tconst existsWidgetSearch = !!this.elPopup.querySelector('[data-widget=\"search\"]');\r\n\r\n\t\tif (this.options.isFullScreen && !existsWidgetSearch) {\r\n\t\t\tconst i18n = useI18n();\r\n\r\n\t\t\tif (!this.elPopupHeader && i18n.Common.Close) {\r\n\t\t\t\tthis.elPopupHeader = DOM.genEl('i', { class: 'top-popup_header' });\r\n\t\t\t\tthis.elPopupInner.prepend(this.elPopupHeader);\r\n\r\n\t\t\t\tthis.elPopupHeader.prepend(DOM.genEl('i', { class: 'a closer' }, i18n.Common.Close));\r\n\t\t\t\tthis.elPopupHeader.append(DOM.genEl('i', { class: 'top-popup_headerButton' }));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDOM.storage(this.elPopup, TopLibPopup.componentName, this);\r\n\r\n\t\tif (this.options.frontSelector) {\r\n\t\t\tthis.elFront = document.querySelector<HTMLElement>(this.options.frontSelector);\r\n\t\t}\r\n\t\tif (!this.elFront) {\r\n\t\t\tthis.elFront = this.el.closest<HTMLElement>('.top-popup-front');\r\n\t\t}\r\n\t\tif (!this.elFront) {\r\n\t\t\tthis.elFront = document.body;\r\n\t\t}\r\n\r\n\t\tif (this.elPopup instanceof HTMLElement) {\r\n\t\t\tthis.elPopup.style.width = this.el.offsetWidth + 'px';\r\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\r\n\t\t\tthis.elPopup.style.top = this.el.offsetTop + 'px';\r\n\t\t\tthis.elPopup.style.right = parseInt(this.el.style.right || '0') + 'px';\r\n\t\t\tthis.elPopup.style.bottom = parseInt(this.el.style.bottom || '0') + 'px';\r\n\t\t}\r\n\r\n\t\tthis.el.parentElement?.insertBefore(this.elPopup, this.el);\r\n\t\tthis.elPopup.classList.remove('template');\r\n\r\n\t\tif (this.options.invertX) {\r\n\t\t\tthis.elPopup.classList.add('invert-x');\r\n\t\t}\r\n\r\n\t\tlet fromTop = !!this.el.closest('.modal-header');\r\n\t\tif (!fromTop) {\r\n\t\t\tfromTop = !!this.el.closest('#top_panel');\r\n\t\t}\r\n\t\tif (!fromTop) {\r\n\t\t\tfromTop = !!this.el.closest('#secondmenu');\r\n\t\t}\r\n\t\tif (fromTop) {\r\n\t\t\tthis.elPopup.classList.add('p-from-top');\r\n\t\t}\r\n\r\n\t\t// появление с анимацией\r\n\t\tsetTimeout(() => this.elPopup?.classList.add('top-popup-wrapper-shown'));\r\n\r\n\t\tif (this.elFront && !this.elFront.matches('body')) {\r\n\t\t\tthis.elFront.append(this.elPopup);\r\n\r\n\t\t\tthis.shift.top = DOM.offset(this.el).top - this.el.offsetTop - DOM.offset(this.elFront).top;\r\n\t\t\tthis.shift.left = DOM.offset(this.el).left - this.el.offsetLeft - DOM.offset(this.elFront).left;\r\n\r\n\t\t\t// position() не учитывает margin, замечено для flex\r\n\t\t\tthis.shift.top -= parseInt(this.el.style['margin-top'] || 0);\r\n\t\t\tthis.shift.left -= parseInt(this.el.style['margin-left'] || 0);\r\n\r\n\t\t\tif (this.elPopup instanceof HTMLElement) {\r\n\t\t\t\tthis.elPopup.style.top = parseInt(this.elPopup.style.top || '0') + this.shift.top + 'px';\r\n\t\t\t\tthis.elPopup.style.left = parseInt(this.elPopup.style.left || '0') + this.shift.left + 'px';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.$ && Core.$) {\r\n\t\t\tthis.$.trigger('aftershow.top-menu-popup', [Core.$(this.elPopup)]);\r\n\t\t}\r\n\r\n\t\tthis.recalcPosition();\r\n\r\n\t\tthis.elPopup.setAttribute('tabindex', '0');\r\n\t\tthis.focus();\r\n\r\n\t\tWorker.decoratorAfterOpen(this);\r\n\r\n\t\tthis.mountEvents();\r\n\t}\r\n\r\n\tasync mountJQuery() {\r\n\t\tif (!Core.$) return;\r\n\r\n\t\tthis.$ = Core.$(this.el);\r\n\t}\r\n\r\n\t/**\r\n\t * Выполнить фокусировку на нужный элемент после открытия окна\r\n\t */\r\n\tfocus(): void {\r\n\t\tlet el: Element | null;\r\n\r\n\t\tif (this.elPopup) {\r\n\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup-autofocus');\r\n\r\n\t\t\t// поле ввода\r\n\t\t\tif (!el) {\r\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, ':read-write, select:not(:disabled)');\r\n\t\t\t}\r\n\r\n\t\t\t// кнопка\r\n\t\t\tif (!el) {\r\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup_footer .top-button');\r\n\t\t\t}\r\n\r\n\t\t\tif (!el) {\r\n\t\t\t\tel = this.elPopup;\r\n\t\t\t}\r\n\r\n\t\t\t/**\r\n\t\t\t * @see this.openerIsInput\r\n\t\t\t */\r\n\t\t\tif (!this.openerIsInput) {\r\n\t\t\t\t// выполнить фокусировку сразу, для применения необходимых стилей\r\n\t\t\t\tif (el instanceof HTMLElement) el.focus();\r\n\r\n\t\t\t\t// выполнить фокусировку после завершения анимации открытия popup\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tif (el instanceof HTMLElement) el.focus();\r\n\t\t\t\t}, this.options.transitionDuration);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmountEvents(): void {\r\n\t\t// закрытие при клике вне контекстного меню\r\n\t\tthis.addEventListenerWithUnmount(document, 'mousedown', (e) => this.onMousedown(e as MouseEvent));\r\n\r\n\t\tif (this.openerIsInput) {\r\n\t\t\t/**\r\n\t\t\t * Фокусировка к моменту открытия popup уже установлена на поле ввода\r\n\t\t\t *\r\n\t\t\t * @see this.openerIsInput\r\n\t\t\t */\r\n\t\t\tthis.onFocusCloseOthers();\r\n\t\t} else {\r\n\t\t\tif (this.elPopup && this.elPopupInner) {\r\n\t\t\t\t// закрыть другие меню\r\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'focus', (e) => this.onFocus(e as FocusEvent));\r\n\r\n\t\t\t\t// автоматическое закрытие при отведении мыши\r\n\t\t\t\tif (this.options.openByHover) {\r\n\t\t\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\r\n\t\t\t\t\tthis.addEventListenerWithUnmount(this.elPopupInner, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// не скроллить страницу\r\n\t\tif (this.options.isFullScreen && this.elPopupBody) {\r\n\t\t\tthis.addEventListenerWithUnmount(this.elPopupBody, 'touchmove', (e) => this.onTouchmove(e as TouchEvent));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Обработка клика вне окна\r\n\t */\r\n\tprivate onMousedown(e: MouseEvent): void {\r\n\t\t// // не оригинальное событие\r\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\r\n\t\t// \treturn;\r\n\t\t// }\r\n\r\n\t\t// Popup уже закрыт\r\n\t\tif (!this.elPopup || !(e.target instanceof Element)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// клик на внешнем элементе\r\n\t\tif (!this.isFirstClick) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isFirstClick = false;\r\n\t\tsetTimeout(() => this.isFirstClick = true);\r\n\r\n\t\t// клик не основной кнопкой мыши\r\n\t\tif (e instanceof MouseEvent && e.button !== 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// открыто другое меню с posBy = fixed, сначала должно быть закрыто оно\r\n\t\tlet elPopupOpened = DOM.querySelectorVisibleLast(document.body, ':scope > .top-popup-wrapper');\r\n\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// открыто другое меню в top-popup-front, сначала должно быть закрыто оно\r\n\t\tif (e.target.closest('.top-popup-front')) {\r\n\t\t\telPopupOpened = DOM.querySelectorVisibleLast(e.target.closest('.top-popup-front')!, ':scope > .top-popup-wrapper');\r\n\r\n\t\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// клик на кнопке открытия этого меню\r\n\t\tif (e.target.closest(`[data-top-popup-id=\"${this.options.id}\"]`)) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// элемент формы, к которому идет переход\r\n\t\tlet toFormEl: HTMLElement | null = e.target.closest('input, select, textarea, button, [tabindex]');\r\n\t\tif (toFormEl === this.elPopup) toFormEl = null;\r\n\r\n\t\t// сохранить фокус после закрытия popup, если это не переход к другому элементу\r\n\t\tconst restoreFocus = !toFormEl;\r\n\r\n\t\t/**\r\n\t\t * Не сбравсывать уже установленный фокус\r\n\t\t */\r\n\t\tif (restoreFocus && this.openerIsInput) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\r\n\t\t// клик внутри этого меню\r\n\t\tif (this.elPopup.contains(e.target)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// клик вне родительского диалогового окна\r\n\t\tif (this.elPopup.closest('.ui-dialog') && !e.target.closest('.ui-dialog')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Worker.decoratorIsIgnoreOuterClick(e)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tWorker.close(this.elPopup, restoreFocus);\r\n\t}\r\n\r\n\t/**\r\n\t * Произошла фокусировка на этот popup\r\n\t */\r\n\tprivate onFocus(e: FocusEvent): void {\r\n\t\t// // не оригинальное событие\r\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\r\n\t\t// \treturn;\r\n\t\t// }\r\n\r\n\t\tif (e.target instanceof Element && e.target.matches('input')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.onFocusCloseOthers();\r\n\t}\r\n\r\n\t/**\r\n\t * Закрыть другие Popup при фокусе на элемент формы в текущем\r\n\t */\r\n\tprivate onFocusCloseOthers(): void {\r\n\t\t// это окно уже закрывается\r\n\t\tif (this.isClosed) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elsPopups = Worker.getAllVisible();\r\n\t\telsPopups.forEach(elPopup => {\r\n\t\t\t// фокус внутри этого окна\r\n\t\t\tif (this.elPopup?.contains(elPopup)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// это Popup из которого был открыт Popup с фокусом\r\n\t\t\t// глубина вложенности: до 3 подменю\r\n\t\t\tif (\r\n\t\t\t\tthis.popupParent?.elPopup === elPopup ||\r\n\t\t\t\tthis.popupParent?.popupParent?.elPopup === elPopup\r\n\t\t\t) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tWorker.close(elPopup);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Закрыть Popup при отведении мыши\r\n\t */\r\n\tprivate onMouseleave(_e: MouseEvent): void {\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (this.elPopupInner && this.elPopupInner.matches(':hover') || !this.elPopup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tWorker.close(this.elPopup);\r\n\t\t}, 100);\r\n\t}\r\n\r\n\t/**\r\n\t * Контроль положения Popup при fixed позиционировании\r\n\t */\r\n\tprivate onResize(): void {\r\n\t\t// на android при вызове метода append сбрасывается фокус с input внутри this.elPopup\r\n\t\tif (this.elPopup && this.elPopup.parentElement !== document.body) {\r\n\t\t\tdocument.body.append(this.elPopup);\r\n\t\t}\r\n\r\n\t\tif (this.elPopup instanceof HTMLElement) {\r\n\t\t\tthis.elPopup.style.top = DOM.offset(this.el).top + 'px';\r\n\t\t\tthis.elPopup.style.left = DOM.offset(this.el).left + 'px';\r\n\t\t}\r\n\t}\r\n\r\n\tunmount(): void {\r\n\t\tsuper.unmount();\r\n\r\n\t\tif (this.el instanceof HTMLElement) this.el.dataset.topPopupOpened = '';\r\n\t\tif (!this.elActiveByDefault) {\r\n\t\t\tthis.el.classList.remove('top-active');\r\n\t\t}\r\n\r\n\t\tlet style = this.el.getAttribute('style');\r\n\t\tif (style) {\r\n\t\t\tstyle = style.replace(/position:[^;]*;?/g, '');\r\n\t\t\tthis.el.setAttribute('style', style);\r\n\t\t}\r\n\t}\r\n\r\n\t// контроль за положением Popup, чтобы оно не вылезало за пределы документа\r\n\trecalcPosition(pForce?: typeof this.options.p): void {\r\n\t\tif (!(this.elPopup instanceof HTMLElement)) return;\r\n\r\n\t\tlet p = pForce ?? this.options.p;\r\n\t\tlet leftPos: number;\r\n\r\n\t\tif (this.el instanceof HTMLElement) {\r\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\r\n\r\n\t\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\r\n\t\t\tthis.elPopup.classList.add('p' + p);\r\n\r\n\t\t\tswitch (this.options.posBy) {\r\n\t\t\t\tcase 'left':\r\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\r\n\t\t\t\t\tleftPos += this.shift.left;\r\n\t\t\t\t\tthis.elPopup.style.left = leftPos + 'px';\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'right':\r\n\t\t\t\t\tif (!(this.el.offsetParent instanceof HTMLElement)) break;\r\n\r\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\r\n\t\t\t\t\tthis.elPopup.style.right = this.el.offsetParent.offsetWidth - this.el.offsetWidth - leftPos + 'px';\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'fixed':\r\n\t\t\t\t\tthis.addEventListenerWithUnmount(window, 'resize', () => this.onResize());\r\n\r\n\t\t\t\t\tthis.onResize();\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis.options.posBy?.append(this.elPopup);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// контроль за пложением Popup, чтобы оно не вылезало за пределы документа\r\n\t\tconst boundingClientRect = this.elPopup.getBoundingClientRect();\r\n\t\tthis.elPopup.style.setProperty('--top-popup-height', this.elPopup.offsetHeight + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-right-bounding', boundingClientRect.right + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-bottom-bounding', boundingClientRect.bottom + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-top', boundingClientRect.top + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-left', boundingClientRect.left + 'px');\r\n\r\n\t\tif (this.elPopupInner instanceof HTMLElement) {\r\n\t\t\tthis.elPopupInner.style.maxWidth = 'unset';\r\n\t\t\tthis.elPopupInner.style.maxHeight = 'unset';\r\n\t\t}\r\n\r\n\t\t// выходит ли popup за экран с конкретного края\r\n\t\tconst out = {\r\n\t\t\ttop: false,\r\n\t\t\tright: false,\r\n\t\t\tbottom: false,\r\n\t\t\tleft: false,\r\n\t\t};\r\n\r\n\t\t// выходит ли popup за экран с конкретного края, если применено инвертирование\r\n\t\tconst outWithInvert = {\r\n\t\t\ttop: false,\r\n\t\t\tright: false,\r\n\t\t\tbottom: false,\r\n\t\t\tleft: false,\r\n\t\t};\r\n\r\n\t\t// имеет ли смысл прикреплять окно к другой стороне кнопки\r\n\t\tlet canUseInvertX = boundingClientRect.left > window.innerWidth / 2;\r\n\t\tlet canUseInvertY = boundingClientRect.top > window.innerHeight / 2;\r\n\r\n\t\tif (p === 4) {\r\n\t\t\tcanUseInvertX = !canUseInvertX;\r\n\t\t}\r\n\r\n\t\tif (p === 1) {\r\n\t\t\tcanUseInvertY = !canUseInvertY;\r\n\t\t}\r\n\r\n\t\tconst contentBoundingClientRect = this.elPopupInner?.getBoundingClientRect();\r\n\r\n\t\tlet contentRight: number;\r\n\t\tlet contentBottom: number;\r\n\r\n\t\tconst margin = DOM.cssNumber(this.elPopup, '--top-popup-offset');\r\n\t\tconst elHeight = this.el.offsetHeight;\r\n\t\tconst elWidth = this.el.offsetWidth;\r\n\r\n\t\tif (contentBoundingClientRect) {\r\n\t\t\tcontentRight = window.innerWidth - contentBoundingClientRect.right;\r\n\t\t\tcontentBottom = window.innerHeight - contentBoundingClientRect.bottom;\r\n\r\n\t\t\tif (contentBoundingClientRect.top < margin) {\r\n\t\t\t\tout.top = true;\r\n\r\n\t\t\t\tif (contentBoundingClientRect.top < margin * 2 - contentBoundingClientRect.height + elHeight) {\r\n\t\t\t\t\toutWithInvert.top = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (contentRight < margin) {\r\n\t\t\t\tout.right = true;\r\n\r\n\t\t\t\tif (contentRight < margin * 2 - contentBoundingClientRect.width + elWidth) {\r\n\t\t\t\t\toutWithInvert.right = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (contentBottom < margin) {\r\n\t\t\t\tout.bottom = true;\r\n\r\n\t\t\t\tif (contentBottom < margin * 2 - contentBoundingClientRect.height + elHeight) {\r\n\t\t\t\t\toutWithInvert.bottom = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (contentBoundingClientRect.left < margin) {\r\n\t\t\t\tout.left = true;\r\n\r\n\t\t\t\tif (contentBoundingClientRect.left < margin * 2 - contentBoundingClientRect.width + elHeight) {\r\n\t\t\t\t\toutWithInvert.left = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * Определить новое положение p, если popup не помещается\r\n\t\t *\r\n\t\t * Следует выполнять в два этапа:\r\n\t\t * - по горизонтали\r\n\t\t * - по вертикали\r\n\t\t */\r\n\t\tconst genP = (axis: 'x' | 'y', p: number) => {\r\n\t\t\t// проверяем горизонталь\r\n\t\t\tif (axis === 'x') {\r\n\t\t\t\tif (!out.right && !out.left) return p;\r\n\r\n\t\t\t\tif (p === 1 || p === 3) {\r\n\t\t\t\t\tif (!outWithInvert.right && !outWithInvert.left && canUseInvertX) return p;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (out.right && (p === 0 || p === 2) && canUseInvertX) {\r\n\t\t\t\t\tp = 4;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (out.left && (p === 0 || p === 4) && canUseInvertX) {\r\n\t\t\t\t\tp = 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// проверяем вертикаль\r\n\t\t\tif (axis === 'y') {\r\n\t\t\t\t// не помещается и можно использовать инвертирование\r\n\t\t\t\tif (!out.top && !out.bottom) return p;\r\n\r\n\t\t\t\tif (p === 2 || p === 4) {\r\n\t\t\t\t\tif (!outWithInvert.top && !outWithInvert.bottom && canUseInvertY) return p;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (out.top && (p === 0 || p === 1) && canUseInvertY) {\r\n\t\t\t\t\tp = 3;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (out.bottom && canUseInvertY) {\r\n\t\t\t\t\tp = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn p;\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Приоритет определения `p` по осям зависит от начального значения `p`\r\n\t\t *\r\n\t\t * Пытаемся сохранить выбранную ось: X или Y\r\n\t\t */\r\n\t\tlet axis: Array<'x' | 'y'> = ['x', 'y'];\r\n\t\tif (p === 0 || p === 1 || p === 3) axis = ['y', 'x'];\r\n\r\n\t\tlet newP = p ?? 0;\r\n\t\taxis.forEach((axisI) => {\r\n\t\t\tnewP = genP(axisI, newP);\r\n\t\t});\r\n\t\tp = newP;\r\n\r\n\t\tif (out.bottom && (p === 2 || p === 4) && canUseInvertY) {\r\n\t\t\t// меню справа может перемещаться вверх, только если есть место слева\r\n\t\t\tthis.elPopup.classList.add('invert-y');\r\n\t\t}\r\n\r\n\t\tif (out.right && (p === 0 || p === 1 || p === 3)) {\r\n\t\t\tthis.elPopup.classList.add('invert-x');\r\n\t\t}\r\n\r\n\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\r\n\t\tthis.elPopup.classList.add('p' + p);\r\n\r\n\t\tif (this.elPopupInner instanceof HTMLElement) {\r\n\t\t\tthis.elPopupInner.style.maxWidth = '';\r\n\t\t\tthis.elPopupInner.style.maxHeight = '';\r\n\t\t}\r\n\r\n\t\t// if (this.elPopupBody instanceof HTMLElement) {\r\n\t\t// \t// отобразить popup по вертикали с другой стороны, если с другой стороны больше места\r\n\t\t// \tconst hasScroll = this.elPopupBody.offsetHeight < this.elPopupBody.scrollHeight;\r\n\t\t// \tvd(this.elPopupBody.scrollHeight);\r\n\t\t// \tvd(this.elPopupBody.offsetHeight);\r\n\t\t// \tif (hasScroll && pForce === undefined) {\r\n\t\t// \t\tconst contentBoundingClientRect = this.elPopupBody?.getBoundingClientRect();\r\n\t\t// \t\tif (\r\n\t\t// \t\t\tp === 1 && contentBoundingClientRect.top * 2 < contentBoundingClientRect.bottom ||\r\n\t\t// \t\t\tp === 3 && contentBoundingClientRect.bottom * 2 < contentBoundingClientRect.top\r\n\t\t// \t\t) {\r\n\t\t// \t\t\tthis.recalcPosition(p === 1 ? 3 : 1);\r\n\t\t//\r\n\t\t// \t\t\treturn;\r\n\t\t// \t\t}\r\n\t\t// \t}\r\n\t\t// }\r\n\r\n\t\tWorker.scrollToActive(this.elPopup);\r\n\t};\r\n\r\n\tonTouchmove(e: TouchEvent): void {\r\n\t\tif (e.currentTarget instanceof HTMLElement && e.target instanceof HTMLElement) {\r\n\t\t\t// разрешить горизональный скролл\r\n\t\t\tlet hasScrollX = e.currentTarget.scrollWidth > e.currentTarget.offsetWidth;\r\n\t\t\tif (hasScrollX) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (e.target.parentElement?.scrollWidth && e.target.parentElement?.offsetWidth) {\r\n\t\t\t\t// разрешить горизональный скролл\r\n\t\t\t\tlet hasScrollX2 = e.target.parentElement.scrollWidth > e.target.parentElement?.offsetWidth;\r\n\t\t\t\tif (hasScrollX2) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!e.currentTarget.matches('.has_scroll')) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclose(): void {\r\n\t\tif (this.isClosed) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isClosed = true;\r\n\r\n\t\tif (this.$ && Core.$ && this.elPopup) {\r\n\t\t\tthis.$.trigger('afterclose.top-menu-popup', [Core.$(this.elPopup)]);\r\n\t\t}\r\n\r\n\t\tif (Worker.noClose) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.unmount();\r\n\r\n\t\tthis.elPopup?.classList.add('top-popup-wrapper-closed');\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.vueClose();\r\n\r\n\t\t\tif (!this.elPopup) return;\r\n\r\n\t\t\tif (this.options.useOriginal) {\r\n\t\t\t\tthis.elPopup.removeAttribute('style');\r\n\t\t\t\tthis.elPopup.classList.remove('top-popup-wrapper-shown', 'top-popup-wrapper-closed');\r\n\t\t\t\tthis.elPopup.classList.add('template');\r\n\t\t\t\tthis.elStartPosition?.append(this.elPopup);\r\n\r\n\t\t\t\tthis.elPopup.querySelector('div.top-popup_content.top-column')?.classList.remove('top-column');\r\n\t\t\t\tthis.elPopup.querySelector('.notch-border')?.remove();\r\n\t\t\t\tthis.elPopup.querySelector('.notch')?.remove();\r\n\r\n\t\t\t\tthis.elPopupInner?.replaceWith(...this.elPopupInner.childNodes);\r\n\r\n\t\t\t\tDOM.storageClear(this.elPopup);\r\n\t\t\t} else {\r\n\t\t\t\tDOM.storageClear(this.elPopup);\r\n\r\n\t\t\t\tthis.elPopup.remove();\r\n\t\t\t\tdelete this.elPopup;\r\n\t\t\t}\r\n\r\n\t\t\tconst elsPopups = Worker.getAllVisible();\r\n\t\t\tconst elPopupLast = elsPopups.length && elsPopups[elsPopups.length - 1];\r\n\r\n\t\t\tif (elPopupLast) {\r\n\t\t\t\tWorker.getPopup(elPopupLast).focus();\r\n\t\t\t} else {\r\n\t\t\t\tdocument.documentElement.classList.remove('with_popup');\r\n\t\t\t}\r\n\t\t}, this.options.transitionDuration);\r\n\t}\r\n\r\n\tasync vueOpen(): Promise<void> {\r\n\t\tawait this.vueGetComponent()?.onOpen(this);\r\n\t}\r\n\r\n\tvueClose(): void {\r\n\t\tthis.vueGetComponent()?.onClose(this);\r\n\t}\r\n\r\n\t// получить vueConnectors компонента Popup\r\n\tvueGetComponent() {\r\n\t\tif (this.el instanceof HTMLElement && this.options.id) return Worker.vueConnectors.get(this.options.id);\r\n\t}\r\n}\r\n\r\nGlobalEvents.init();\r\n"],"names":["Component","componentName","el","options","component","utils_dom","eventData","type","listener","nodes","node","GlobalEvents","e","elUl","elItem","elPopup2","popup_worker","elCloser","elPopup","elBtn","elFooterLastBtn","elMore","countLi","elsLiVisible","index","elItemActive","Core","vueConnector","elInput","classes","existsWidgetSearch","i18n","forms","TopLibPopup","fromTop","elPopupOpened","restoreFocus","toFormEl","leftPos","boundingClientRect","contentRight","contentBottom","margin","elHeight","elWidth","contentBoundingClientRect","out","outWithInvert","genP","axis2","p2","canUseInvertX","canUseInvertY","axis","newP","axisI","elsPopups","elPopupLast"],"mappings":"gKAKA,MAAAA,CAAA,4BAEwB,cAEvB,UACA,IACA,6CAKwB,KAAAC,EAAAC,EAAAC,EAAA,oEAatB,OAAAC,EAAA,OAAAD,CAAA,EAEAC,EAGD,KAAA,cAAAH,EACA,KAAA,UAAA,MAAAA,EAAA,CAAA,EAAA,YAAA,EAAAA,EAAA,UAAA,CAAA,iEAGA,KAAA,cAAAC,CAAA,EACA,KAAA,GAAAA,wCAEA,KAAA,QAAA,OAAA,OAAA,KAAA,QAAAC,CAAA,eAGD,OAAA,aAAAD,EAAAD,EAAA,oDASCI,EAAA,QAAA,QAAAH,EAAA,IAAA,KAAA,cAAA,IAAA,EACD,OAAA,CAIC,KAAA,4CAAA,KAAA,cACD,SAAA,CAICG,EAAA,QAAA,QAAA,KAAA,GAAA,IAAA,KAAA,cAAA,IAAA,wCAGW,CAAA,EAGX,KAAA,WAAA,CAAA,iCAGCC,EAAA,GAAA,oBAAAA,EAAA,KAAAA,EAAA,SAAAA,EAAA,OAAA,CAAsF,CAAA,EAGvF,KAAA,cAAA,CAAA,0BAKA,KAAA,WAAA,KAAAJ,CAAA,iJAsBkB,GAAAA,EACjB,KAAAK,EACA,SAAAC,aAKD,KAAA,cAAA,KAAAF,CAAA,YAKA,KAAA,6CAAA,KAAA,cACD,OAAA,OAAAG,EAAA,CAIC,GAAAA,aAAA,SACCA,EAAA,QAAAC,GAAAA,EAAA,eAAA,YAAAA,CAAA,CAAA,MAA6D,WAG7DR,EAAA,eAAA,YAAAA,CAAA,GAIH,CCtHA,MAAAS,CAAA,kCAUE,KAAA,WAEA,KAAA,SAAA,GAEA,SAAA,iBAAA,QAAA,KAAA,eAAA,CAAA,QAAA,EAAA,CAAA,uGAGD,OAAA,eAAAC,EAAA,2LA4BGC,EAAA,cAAA,6BAAA,GAAA,UAAA,OAAA,YAAA,KAIAC,EAAA,UAAA,IAAA,YAAA,wEAUD,MAAAC,EAAAH,EAAA,OAEAI,EAAA,eAAA,MAAAD,EAAA,EAAA,+BAMF,OAAA,QAAAH,EAAA,2JAsBE,OAAAK,EAAA,QAAA,qBAAA,0DAUAD,EAAA,eAAA,MAAAE,EAAA,EAAA,GAEF,OAAA,UAAAN,EAAA,kGAWEM,EAAAF,EAAA,eAAA,mBAAAJ,EAAA,MAAA,GAAA,SAAA,8EAUc,IAAA,SAEbI,EAAA,eAAA,MAAAE,EAAA,EAAA,QAEA,IAAA,0KAWC,GAAAC,aAAA,YAAA,mGAQAC,IAAAA,EAAAf,EAAA,QAAA,yBAAAa,EAAA,+BAAA,GACAE,aAAA,4NAmBDN,aAAA,6BAIA,IAAA,UAGI,IAAA,aACA,IAAA,YACA,IAAA,wBAMJ,GAAAF,EAAA,MAAA,cAAAA,EAAA,MAAA,gBACCP,EAAA,QAAA,qBAA0Ba,gYAwB1B,GAAAG,aAAA,YACC,OAAAA,EAAA,MAAA,0GAKFC,EAAAC,EAAA,oCAQCC,EAAAD,EAAA,QAAAE,CAAA,GAGDb,EAAA,MAAA,WAAAA,EAAA,MAAA,YACCY,IAEAA,2IAiBDA,EAAA,IACCA,EAAAF,EAAA,GAGDE,EAAAF,EAAA,oHAKAC,EAAAC,CAAA,EAAA,cAAA,yBAAA,GAAA,UAAA,IAAA,YAAA,EAEAR,EAAA,eAAA,eAAAE,CAAA,OAEA,EAIJ,ohaChQAQ,EAAAA,KAAAA,kBAAAA,CAAAA,EACAA,EAAAA,KAAAA,kBAAAA,EAAAA,GAAAA,EACAA,EAAAA,KAAAA,kBAAAA,EAAAA,IAAAA,oDA2BwB,kBAGvB,QACA,aACA,cACA,cACA,YACA,cACA,yBAUgB,YAEhB,EAEA,gBAEA,MAAA,OAEM,KAAA,+BAIS,KACf,QAAA,8HAgBqB,aAAA,cAKX,YAAAxB,EAAAC,EAAA,CAQT,MAAA,2FAOA,MAAAwB,EAAA,KAAA,gBAAA,EAqBA,8HAjBA,MAAA,KAAA,YAAA,EAEAtB,EAAA,QAAA,IAAA,KAAA,GAAA,UAAA,IAAA,wFAKA,KAAA,kBAAA,KAAA,GAAA,UAAA,SAAA,YAAA,sCAGA,KAAA,cAAA,KAAA,GAAA,UAAA,SAAA,WAAA,yDAIC,KAAA,cAAA,IAGD,KAAA,cAAA,8DAGEuB,EAAA,cAAA,sFAI2C,CAAA,QAO5C,KAAA,KAAA,MAEA,KAAA,QAAA,MAAA,GACA,KAAA,QAAAvB,EAAA,QAAA,MAAA,MAAA,CAAA,EAAA,KAAA,QAAA,KAAA,UAAsD,KAAA,QAAA,OAAA,MAAA,OAAA,EAGtD,KAAA,KAAA,6FAEwF,CAKxF,GAFA,KAAA,KAAA,OAEA,KAAA,QAAA,YACC,KAAA,oDAGD,KAAA,QAAAA,EAAA,QAAA,MAAA,MAAA,CAAA,EAAA,KAAA,QAAA,OAAA,EAAA,uEAaC,GANAsB,GAAA,iIAMA,KAAA,QAAA,mCAGC,KAAA,0DAIAX,EAAA,eAAA,MAAA,KAAA,OAAA,EAGA,WAAA,IAAA,KAAA,MAAA,EAAA,KAAA,QAAA,kBAAA,SAKD,KAAA,wJAOF,GAAA,CAAA,KAAA,eA4DA,IAxDA,KAAA,QAAA,uFAEC,KAAA,kBACC,KAAA,gBAAAX,EAAA,QAAA,KAAA,KAAA,QAAA,GAAA,wHAOD,KAAA,OAAA,YAAA,CAAA,KAAA,QAAA,QAAA,WAAA,uJAOC,KAAA,QAAAA,EAAA,QAAA,KAAA,KAAA,QAAA,KAAA,GAGD,KAAA,OAAA,qHAIE,KAAA,QAAAA,EAAA,QAAA,KAAA,KAAA,QAAA,KAAA,KAKF,KAAA,OAAA,YAAA,CAAA,KAAA,QAAA,QAAA,WAAA,GAAA,KAAA,OAAA,QAAA,KAAA,OAAA,SACCA,EAAA,QAAA,sBAAA,KAAA,QAAA,kBAAA,EAAA,QAAAH,GAAA,4DAC2D,CAAA,8FAM7Dc,EAAA,eAAA,oBAAA,IAAA,iJAOE,KAAA,mBAAA,aACC,KAAA,QAAA,MAAA,YAAmB,+BAClB,KAAA,QAAA,mBAAA,sHAUJ,KAAA,QAAA,mEAQA,0FAAA,KAAA,QAAA,MAAA,CACC,MAAAa,EAAA,KAAA,QAAA,MAAA,MAAA,GAAA,mCAKD,KAAA,QAAA,yJAMA,MAAA,KAAA,QAAA,iSAOA,MAAAC,EAAA,CAAA,CAAA,KAAA,QAAA,cAAA,wBAAA,oCAGC,MAAAC,EAAAC,EAAA,QAAA,wCAGC,KAAA,cAAA3B,EAAA,QAAA,MAAA,IAAA,CAAA,MAAA,kBAAA,CAAA,mIAIA,KAAA,cAAA,OAAAA,EAAA,QAAA,MAAA,IAAA,CAAA,MAAA,wBAAA,CAAA,CAAA,GAIFA,EAAA,QAAA,QAAA,KAAA,QAAA4B,EAAA,cAAA,IAAA,EAEA,KAAA,QAAA,gBACC,KAAA,QAAA,SAAA,cAAA,KAAA,QAAA,aAAA,GAED,KAAA,4DAGA,KAAA,UACC,KAAA,QAAA,SAAA,MAGD,KAAA,mBAAA,cACC,KAAA,QAAA,MAAA,MAAA,KAAA,GAAA,YAAA,KACA,KAAA,QAAA,MAAA,OAAA,KAAA,GAAA,aAAA,KACA,KAAA,QAAA,MAAA,IAAA,KAAA,GAAA,UAAA,0IAKD,KAAA,GAAA,eAAA,aAAA,KAAA,QAAA,KAAA,EAAA,4CAGA,KAAA,QAAA,gDAIA,IAAAC,EAAA,CAAA,CAAA,KAAA,GAAA,QAAA,eAAA,6HAYA,WAAA,IAAA,KAAA,SAAA,UAAA,IAAA,yBAAA,CAAA,EAEA,KAAA,SAAA,CAAA,KAAA,QAAA,QAAA,MAAA,sCAGC,KAAA,MAAA,IAAA7B,EAAA,QAAA,OAAA,KAAA,EAAA,EAAA,IAAA,KAAA,GAAA,UAAAA,EAAA,QAAA,OAAA,KAAA,OAAA,EAAA,IACA,KAAA,MAAA,KAAAA,EAAA,QAAA,OAAA,KAAA,EAAA,EAAA,KAAA,KAAA,GAAA,WAAAA,EAAA,QAAA,OAAA,KAAA,OAAA,EAAA,KAGA,KAAA,MAAA,KAAA,SAAA,KAAA,GAAA,MAAA,YAAA,GAAA,CAAA,EACA,KAAA,MAAA,MAAA,SAAA,KAAA,GAAA,MAAA,aAAA,GAAA,CAAA,EAEA,KAAA,mBAAA,uMAOA,KAAA,EAAA,QAAA,2BAAA,CAAA2B,EAAA,KAAA,EAAA,KAAA,OAAA,CAAA,CAAA,+EAQDhB,EAAA,eAAA,mBAAA,IAAA,yCAMAgB,EAAA,KAAA,8BAGD,OAAA,CAMC,IAAA9B,EAEA,KAAA,iQAcEA,EAAA,KAAA,SAMD,KAAA,uGAM0C,EAAA,KAAA,QAAA,kBAAA,IAI5C,aAAA,CAIC,KAAA,4BAAA,SAAA,YAAAU,GAAA,KAAA,YAAAA,CAAA,CAAA,EAEA,KAAA,0EAUE,KAAA,4BAAA,KAAA,QAAA,QAAAA,GAAA,KAAA,QAAAA,CAAA,CAAA,EAGA,KAAA,QAAA,cACC,KAAA,4BAAA,KAAA,QAAA,aAAAA,GAAA,KAAA,aAAAA,CAAA,CAAA,EACA,KAAA,4BAAA,KAAA,aAAA,aAAAA,GAAA,KAAA,aAAAA,CAAA,CAAA,iDAOF,KAAA,4BAAA,KAAA,YAAA,YAAAA,GAAA,KAAA,YAAAA,CAAA,CAAA,oBAcD,CAAA,KAAA,SAAA,EAAAA,EAAA,kBAAA,UAKA,CAAA,KAAA,eAIA,KAAA,aAAA,sFASA,IAAAuB,EAAA9B,EAAA,QAAA,yBAAA,SAAA,KAAA,6BAAA,iEAOC8B,EAAA9B,EAAA,QAAA,yBAAAO,EAAA,OAAA,QAAA,kBAAA,EAAA,6BAAA,8BAQD,GAAAA,EAAA,OAAA,QAAA,uBAAA,KAAA,QAAA,EAAA,IAAA,EAAA,4HAWA,MAAAwB,EAAA,CAAAC,EAKAD,GAAA,KAAA,qEAUA,KAAA,QAAA,QAAA,YAAA,GAAA,CAAAxB,EAAA,OAAA,QAAA,YAAA,GAIAI,EAAA,eAAA,4BAAAJ,CAAA,sDAgBAA,EAAA,kBAAA,SAAAA,EAAA,OAAA,QAAA,OAAA,6BAKD,oBAAA,CAOC,GAAA,KAAA,gBAIAI,EAAA,eAAA,cAAA,EACA,QAAAE,GAAA,4BAQC,KAAA,aAAA,UAAAA,GAAA,KAAA,aAAA,aAAA,UAAAA,GAOAF,EAAA,eAAA,MAAAE,CAAA,CAAoB,CAAA,kCASpB,KAAA,cAAA,KAAA,aAAA,QAAA,QAAA,GAAA,CAAA,KAAA,SAIAF,EAAA,eAAA,MAAA,KAAA,OAAA,QAEF,UAAA,CAOC,KAAA,SAAA,KAAA,QAAA,gBAAA,SAAA,yCAIA,KAAA,mBAAA,cACC,KAAA,QAAA,MAAA,IAAAX,EAAA,QAAA,OAAA,KAAA,EAAA,EAAA,IAAA,KACA,KAAA,QAAA,MAAA,KAAAA,EAAA,QAAA,OAAA,KAAA,EAAA,EAAA,KAAA,MAEF,SAAA,iBAKC,KAAA,cAAA,cAAA,KAAA,GAAA,QAAA,eAAA,IACA,KAAA,kQAgBAiC,EAEA,GAAA,KAAA,cAAA,YAMC,OALA,KAAA,QAAA,MAAA,OAAA,KAAA,GAAA,aAAA,KAEA,KAAA,QAAA,UAAA,OAAA,KAAA,KAAA,KAAA,KAAA,IAAA,oCAGA,KAAA,QAAA,MAAA,CAA4B,IAAA,wEAG1BA,GAAA,KAAA,MAAA,0CAGA,IAAA,4NAOA,IAAA,QAEA,KAAA,4BAAA,OAAA,SAAA,IAAA,KAAA,SAAA,CAAA,wEAMuC,8CAM1C,KAAA,QAAA,MAAA,YAAA,qBAAA,KAAA,QAAA,aAAA,IAAA,EACA,KAAA,QAAA,MAAA,YAAA,6BAAAC,EAAA,MAAA,IAAA,EACA,KAAA,QAAA,MAAA,YAAA,8BAAAA,EAAA,OAAA,IAAA,EACA,KAAA,QAAA,MAAA,YAAA,kBAAAA,EAAA,IAAA,IAAA,EACA,KAAA,QAAA,MAAA,YAAA,mBAAAA,EAAA,KAAA,IAAA,EAEA,KAAA,wBAAA,qIASS,KAAA,iCAQA,KAAA,kEAQT,IAAA,UAIA,IAAA,6DAMA,IAAAC,EACAC,EAEA,MAAAC,EAAArC,EAAA,QAAA,UAAA,KAAA,QAAA,oBAAA,EACAsC,EAAA,KAAA,GAAA,aACAC,EAAA,KAAA,GAAA,0EAMCC,EAAA,IAAAH,IACCI,EAAA,IAAA,GAEAD,EAAA,IAAAH,EAAA,EAAAG,EAAA,OAAAF,IACCI,EAAA,IAAA,KAIFP,EAAAE,IACCI,EAAA,MAAA,GAEAN,EAAAE,EAAA,EAAAG,EAAA,MAAAD,IACCG,EAAA,MAAA,KAIFN,EAAAC,IACCI,EAAA,OAAA,GAEAL,EAAAC,EAAA,EAAAG,EAAA,OAAAF,IACCI,EAAA,OAAA,KAIFF,EAAA,KAAAH,IACCI,EAAA,KAAA,GAEAD,EAAA,KAAAH,EAAA,EAAAG,EAAA,MAAAF,IACCI,EAAA,KAAA,MAYH,MAAAC,EAAA,CAAAC,EAAAC,IAAA,CAEC,GAAAD,IAAA,IAAA,IACC,CAAAH,EAAA,OAAA,CAAAA,EAAA,sBAGC,CAAAC,EAAA,OAAA,CAAAA,EAAA,MAAAI,EAAA,OAAAD,EAGDJ,EAAA,QAAAI,IAAA,GAAAA,IAAA,IAAAC,SAIAL,EAAA,OAAAI,IAAA,GAAAA,IAAA,IAAAC,SAMD,GAAAF,IAAA,IAAA,IAEC,CAAAH,EAAA,KAAA,CAAAA,EAAA,wBAGC,CAAAC,EAAA,KAAA,CAAAA,EAAA,QAAAK,EAAA,OAAAF,EAGDJ,EAAA,MAAAI,IAAA,GAAAA,IAAA,IAAAE,SAIAN,EAAA,QAAAM,SAKD,OAAAF,CAAO,EAQR,IAAAG,EAAA,CAAA,IAAA,GAAA,GACA,IAAA,GAAA,IAAA,GAAA,IAAA,KAAAA,EAAA,CAAA,IAAA,GAAA,GAEA,IAAAC,EAAA,GAAA,EACAD,EAAA,QAAAE,GAAA,CACCD,EAAAN,EAAAO,EAAAD,CAAA,CAAuB,CAAA,MAIxBR,EAAA,SAAA,IAAA,GAAA,IAAA,IAAAM,0CAKAN,EAAA,QAAA,IAAA,GAAA,IAAA,GAAA,IAAA,2CAIA,KAAA,QAAA,UAAA,OAAA,KAAA,KAAA,KAAA,KAAA,IAAA,oCAGA,KAAA,wBAAA,wFAuBA9B,EAAA,eAAA,eAAA,KAAA,OAAA,iBAIA,GAAAJ,EAAA,yBAAA,aAAAA,EAAA,kBAAA,YAAA,CAOC,GALAA,EAAA,cAAA,YAAAA,EAAA,cAAA,aAKAA,EAAA,OAAA,eAAA,aAAAA,EAAA,OAAA,eAAA,aAECA,EAAA,OAAA,cAAA,YAAAA,EAAA,OAAA,eAAA,+EAUH,OAAA,CAGC,KAAA,WAIA,KAAA,SAAA,GAEA,KAAA,GAAAoB,EAAA,KAAA,GAAA,KAAA,SACC,KAAA,EAAA,QAAA,4BAAA,CAAAA,EAAA,KAAA,EAAA,KAAA,OAAA,CAAA,CAAA,EAGD,CAAAhB,EAAA,eAAA,iGAWC,mBAAA,CAAA,KAAA,QAAA,OAEA,KAAA,QAAA,aACC,KAAA,QAAA,gBAAA,OAAA,wKAKA,KAAA,QAAA,cAAA,kCAAA,GAAA,UAAA,OAAA,YAAA,uGAIA,KAAA,cAAA,YAAA,GAAA,KAAA,aAAA,UAAA,EAEAX,EAAA,QAAA,aAAA,KAAA,OAAA,IAEAA,EAAA,QAAA,aAAA,KAAA,OAAA,EAEA,KAAA,QAAA,OAAA,uBAID,MAAAmD,EAAAxC,EAAA,eAAA,cAAA,EACAyC,EAAAD,EAAA,QAAAA,EAAAA,EAAA,OAAA,CAAA,gGAMA,EAAA,KAAA,QAAA,kBAAA,+DAMF,UAAA,uCAIA,iBAAA,+GAMD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","vue","./forms-
|
|
2
|
-
//# sourceMappingURL=popupHint.vue_vue_type_style_index_0_lang-
|
|
1
|
+
define(["require","exports","vue","./forms-4D_EVI46.amd","../popup/worker.amd","../require/css.amd!../assets/popupHint.css"],(function(w,y,e,P,u){"use strict";if(typeof e>"u")var e=window.Vue;const k=e.defineComponent({__name:"opener",props:{id:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByFocusInput:{type:Boolean},openByHover:{type:Boolean},disabled:{type:Boolean},posBy:{default:"fixed"},data:{}},setup(s){const n=s,l=n.id||Math.random()+"";let p;function f(t){setTimeout(()=>{p=t.nextElementSibling,p&&r(p)})}e.onUpdated(()=>{p&&r(p)});function r(t){t.dataset.topPopup="#"+l;const i=!!t.dataset.topPopupDisabled;if(t.dataset.topPopupId=l,t.dataset.topPopupPos=n.pos,t.dataset.topPopupPosBy=n.posBy,t.dataset.topPopupNotch=n.notch?"true":"",t.dataset.topPopupOpenByHover=n.openByHover?"true":"",t.dataset.topPopupDisabled=n.disabled?"true":"",t.__TopPopupOpenerProps=n,n.openByFocusInput&&t.classList.contains("top-input")){const c=t.querySelector("input");if(c.onfocus=()=>{t.dataset.topPopupDisabled||u.TopPopupWorker.openByOpener(t)},n.disabled!==i&&c===document.activeElement){const a=u.TopPopupWorker.getPopupFromOpener(t);!n.disabled&&!a&&u.TopPopupWorker.openByOpener(t),n.disabled&&a&&a.close()}}}return(t,i)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("template",{ref:f}),e.renderSlot(t.$slots,"default")],64))}}),h={key:0,class:"top-popup_header"},$={key:0,class:"top-as-a closer"},C={key:1,class:"top-popup_widget"},b={key:2,class:"top-popup_content"},S={key:4,class:"top-popup_footer"},I=["href"],E=e.defineComponent({__name:"popup",props:{id:{default:""},class:{},transitionDuration:{},footerSupportLink:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByFocusInput:{type:Boolean},openByHover:{type:Boolean},disabled:{type:Boolean},posBy:{default:"fixed"},data:{}},emits:["open","close","scrollContentList"],setup(s,{expose:n,emit:l}){const p=s,f=l,r=p.id||"top-popup-id-"+Math.random(),t={id:r,popup:void 0};n(t);const i=e.ref(null),c=e.ref(null),a=e.ref(),d={onOpen:async o=>{o.elPopup&&(i.value=o.elPopup),o.elPopupInner&&(o.elPopupInner.innerText="",c.value=o.elPopupInner),d.opened=!0,d.popup=o,t.popup=o,a.value=o.el.__TopPopupOpenerProps.data,f("open",{elPopup:o.elPopup,elPopupOpener:o.el,data:a.value})},onClose:o=>{c.value=null,d.opened=!1,d.popup=void 0,a.value=void 0,f("close",{elPopup:o.elPopup,elPopupOpener:o.el,data:o.el.__TopPopupOpenerProps.data})},classRef:e.toRef(p,"class"),opened:!1,popup:void 0,transitionDurationRef:e.toRef(p,"transitionDuration")};return e.watch(()=>p.class,(o,B)=>{if(!i.value)return;const m=o?.split(" ")??[],L=(B?.split(" ")??[]).filter(_=>!m.includes(_));i.value.classList.remove(...L),i.value.classList.add(...m)}),u.TopPopupWorker.regVueComponent(r,d),e.onUnmounted(()=>{u.TopPopupWorker.unregVueComponent(r)}),(o,B)=>{const m=e.resolveDirective("top-scroll-shadow");return e.openBlock(),e.createElementBlock(e.Fragment,null,[o.$slots.opener?(e.openBlock(),e.createBlock(k,{key:0,id:e.unref(r),pos:s.pos,posBy:s.posBy,notch:s.notch,openByFocusInput:s.openByFocusInput,openByHover:o.$core.state.isMobile||o.$core.state.isMobileUA?!1:s.openByHover,disabled:s.disabled},{default:e.withCtx(()=>[e.renderSlot(o.$slots,"opener")]),_:3},8,["id","pos","posBy","notch","openByFocusInput","openByHover","disabled"])):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createBlock(e.Teleport,{key:1,to:c.value},[o.$slots.header||o.$core.state.isMobile?(e.openBlock(),e.createElementBlock("div",h,[o.$core.state.isMobile?(e.openBlock(),e.createElementBlock("span",$,e.toDisplayString(o.$i18n.Common.Close),1)):e.createCommentVNode("",!0),e.renderSlot(o.$slots,"header",{data:a.value})])):e.createCommentVNode("",!0),o.$slots.widget?(e.openBlock(),e.createElementBlock("div",C,[e.renderSlot(o.$slots,"widget")])):e.createCommentVNode("",!0),o.$slots.content?e.withDirectives((e.openBlock(),e.createElementBlock("div",b,[e.renderSlot(o.$slots,"content",{data:a.value})])),[[m]]):e.createCommentVNode("",!0),o.$slots.contentList?e.withDirectives((e.openBlock(),e.createElementBlock("ul",{key:3,class:"top-popup_content",onScroll:B[0]||(B[0]=v=>o.$emit("scrollContentList",v))},[e.renderSlot(o.$slots,"contentList",{data:a.value})],32)),[[m]]):e.createCommentVNode("",!0),o.$slots.footer||s.footerSupportLink?(e.openBlock(),e.createElementBlock("div",S,[s.footerSupportLink?(e.openBlock(),e.createElementBlock("a",{key:0,class:"top-popup_footerSupportLink",href:s.footerSupportLink,target:"_blank"},[e.createVNode(P._sfc_main$2,{hint:""})],8,I)):e.createCommentVNode("",!0),e.renderSlot(o.$slots,"footer",{data:a.value})])):e.createCommentVNode("",!0)],8,["to"])):e.createCommentVNode("",!0)],64)}}}),V={class:"top-popup_listItemActionsLabel top-ellipsis1"},N={class:"top-popup_listItemActions"},g=e.defineComponent({inheritAttrs:!1,__name:"listItem",props:{type:{default:"button"},closeByClick:{type:Boolean,default:!0},attrs:{}},setup(s){const n=s;return(l,p)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass({"top-popup_liNoSelectable":n.type!=="button"})},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.$attrs.href?"a":"div"),e.mergeProps({class:{"top-popup_listItem":!0,["top-popup_listItem-"+n.type]:!!n.type,"top-popup_liastItem-withActions":l.$slots.actions,"top-popup-noCloser":!s.closeByClick,a:n.type==="button"}},{...l.$attrs,...s.attrs}),{default:e.withCtx(()=>[l.$slots.actions?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createElementVNode("div",V,[e.renderSlot(l.$slots,"default")]),e.createElementVNode("div",N,[e.renderSlot(l.$slots,"actions")])],64)):e.renderSlot(l.$slots,"default",{key:1})]),_:3},16,["class"])),e.renderSlot(l.$slots,"buttons")],2))}});y._sfc_main=E,y._sfc_main$1=k,y._sfc_main$2=g}));
|
|
2
|
+
//# sourceMappingURL=popupHint.vue_vue_type_style_index_0_lang-B0BWXhHK.amd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popupHint.vue_vue_type_style_index_0_lang-B0BWXhHK.amd.js","sources":["../../src/components/popup/popup/opener/opener.vue","../../src/components/popup/popup/popup.vue","../../src/components/popup/popup/listItem.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T extends Record<string, any> | undefined = undefined\">\r\nimport { onUpdated } from 'vue';\r\nimport type { OpenerProps } from './types';\r\nimport Worker from '../../lib/worker';\r\n\r\nconst props = withDefaults(defineProps<OpenerProps<T>>(), {\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst id = props.id || Math.random() + '';\r\n\r\nlet elOpener: Element;\r\n\r\n/**\r\n * Необычная функция для проброски props внутрь элемента слота\r\n *\r\n * @param el - вспомогательный элемент для доступа к элементам слота\r\n */\r\nfunction render(el: any) {\r\n\tsetTimeout(() => {\r\n\t\telOpener = el.nextElementSibling;\r\n\r\n\t\tif (elOpener) {\r\n\t\t\trenderOpener(elOpener);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nonUpdated(() => {\r\n\tif (elOpener) {\r\n\t\trenderOpener(elOpener);\r\n\t}\r\n});\r\n\r\nfunction renderOpener(elOpener: any) {\r\n\t/**\r\n\t * topPopup - необходимый атрибут для всез Popup\r\n\t *\r\n\t * Для Vue вместо него используется атрибут topPopupId\r\n\t */\r\n\telOpener.dataset.topPopup = '#' + id;\r\n\r\n\tconst disabledOld = !!elOpener.dataset.topPopupDisabled;\r\n\r\n\telOpener.dataset.topPopupId = id;\r\n\telOpener.dataset.topPopupPos = props.pos;\r\n\telOpener.dataset.topPopupPosBy = props.posBy;\r\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\r\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\r\n\telOpener.dataset.topPopupDisabled = props.disabled ? 'true' : '';\r\n\telOpener.__TopPopupOpenerProps = props;\r\n\r\n\tif (props.openByFocusInput && elOpener.classList.contains('top-input')) {\r\n\t\tconst elInput = elOpener.querySelector('input');\r\n\r\n\t\telInput.onfocus = () => {\r\n\t\t\tif (elOpener.dataset.topPopupDisabled) return;\r\n\r\n\t\t\tWorker.openByOpener(elOpener);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Открыть или закрыть `popup` в момент ввода значения, если он становится активным\r\n\t\t *\r\n\t\t * Для обработки ввода значения с проверкой `minLength`\r\n\t\t */\r\n\t\tif (props.disabled !== disabledOld && elInput === document.activeElement) {\r\n\t\t\tconst popup = Worker.getPopupFromOpener(elOpener);\r\n\r\n\t\t\tif (!props.disabled && !popup) {\r\n\t\t\t\tWorker.openByOpener(elOpener);\r\n\t\t\t}\r\n\r\n\t\t\tif (props.disabled && popup) {\r\n\t\t\t\tpopup.close();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<template :ref=\"render\"></template>\r\n\r\n\t<!-- @slot элемент для открытия Popup -->\r\n\t<slot></slot>\r\n</template>\r\n\r\n<!-- Использует общий deprecated класс .btn -->\r\n<style>\r\nh3[data-top-popup],\r\ndiv[data-top-popup],\r\ni[data-top-popup]:not(.btn),\r\nb[data-top-popup]:not(.btn) {\r\n\tcursor: pointer;\r\n\tuser-select: none;\r\n\tfont-style: normal;\r\n\ttext-decoration: none;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n}\r\n\r\n[data-top-popup][data-top-popup-disabled] {\r\n\t/*\r\n\tpointer-events: none;\r\n\tcursor: auto !important;\r\n\t*/\r\n}\r\n\r\ni[contenteditable] {\r\n\tcursor: text !important;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\" generic=\"T extends Record<string, any> | undefined = undefined\">\r\nimport { onUnmounted, ref, toRef, watch } from 'vue';\r\nimport TopHint from '@/components/forms/hint/hint.vue';\r\nimport type { TopLibPopup } from '@/components/popup/lib/popup';\r\nimport type { Emits, Props } from './types';\r\nimport Opener from './opener/opener.vue';\r\nimport Worker from '@/components/popup/lib/worker';\r\n\r\nconst props = withDefaults(defineProps<Props<T>>(), {\r\n\tid: '',\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst emit = defineEmits<Emits<T>>();\r\n\r\nconst id = props.id || 'top-popup-id-' + Math.random() + '';\r\n\r\nconst expose = {\r\n\tid,\r\n\tpopup: undefined as TopLibPopup<T> | undefined,\r\n};\r\n\r\ndefineExpose(expose);\r\n\r\nconst elPopupRef = ref<HTMLElement | null>(null);\r\nconst elPopupInnerRef = ref<HTMLElement | null>(null);\r\n\r\nconst data = ref<T>();\r\n\r\n// см. lib/popup\r\nconst onOpen = async (popup: TopLibPopup<T>) => {\r\n\tif (popup.elPopup) elPopupRef.value = popup.elPopup;\r\n\r\n\tif (popup.elPopupInner) {\r\n\t\tpopup.elPopupInner.innerText = '';\r\n\r\n\t\telPopupInnerRef.value = popup.elPopupInner;\r\n\t}\r\n\r\n\tvueConnector.opened = true;\r\n\tvueConnector.popup = popup;\r\n\r\n\texpose.popup = popup;\r\n\r\n\tdata.value = popup.el.__TopPopupOpenerProps.data;\r\n\r\n\temit('open', { elPopup: popup.elPopup!, elPopupOpener: popup.el, data: data.value });\r\n};\r\n\r\n// см. lib/popup\r\nconst onClose = (popup: TopLibPopup<T>) => {\r\n\telPopupInnerRef.value = null;\r\n\r\n\tvueConnector.opened = false;\r\n\tvueConnector.popup = undefined;\r\n\r\n\tdata.value = undefined;\r\n\r\n\temit('close', { elPopup: popup.elPopup!, elPopupOpener: popup.el, data: popup.el.__TopPopupOpenerProps.data });\r\n};\r\n\r\nconst vueConnector = {\r\n\tonOpen,\r\n\tonClose,\r\n\tclassRef: toRef(props, 'class'),\r\n\topened: false,\r\n\tpopup: undefined as TopLibPopup<T> | undefined,\r\n\ttransitionDurationRef: toRef(props, 'transitionDuration'),\r\n};\r\n\r\nwatch(() => props.class, (newValue, oldValue) => {\r\n\tif (!elPopupRef.value) return;\r\n\r\n\tconst newClasses = newValue?.split(' ') ?? [];\r\n\tconst oldClasses = oldValue?.split(' ') ?? [];\r\n\r\n\tconst delClasses = oldClasses.filter((oldClass) => !newClasses.includes(oldClass));\r\n\r\n\telPopupRef.value.classList.remove(...delClasses);\r\n\telPopupRef.value.classList.add(...newClasses);\r\n});\r\n\r\nWorker.regVueComponent(id, vueConnector);\r\n\r\nonUnmounted(() => {\r\n\tWorker.unregVueComponent(id);\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<Opener\r\n\t\tv-if=\"$slots.opener\"\r\n\t\t:id\r\n\t\t:pos\r\n\t\t:posBy\r\n\t\t:notch\r\n\t\t:openByFocusInput\r\n\t\t:openByHover=\"($core.state.isMobile || $core.state.isMobileUA) ? false : openByHover\"\r\n\t\t:disabled\r\n\t>\r\n\t\t<!-- @slot элемент для открытия Popup -->\r\n\t\t<slot name=\"opener\"></slot>\r\n\t</Opener>\r\n\r\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\r\n\t<!-- elPopupInnerRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\r\n\t<teleport\r\n\t\tv-if=\"elPopupInnerRef\"\r\n\t\t:to=\"elPopupInnerRef\"\r\n\t>\r\n\t\t<div\r\n\t\t\tv-if=\"$slots.header || $core.state.isMobile\"\r\n\t\t\tclass=\"top-popup_header\"\r\n\t\t>\r\n\t\t\t<span\r\n\t\t\t\tv-if=\"$core.state.isMobile\"\r\n\t\t\t\tclass=\"top-as-a closer\"\r\n\t\t\t>\r\n\t\t\t\t{{ $i18n.Common.Close }}\r\n\t\t\t</span>\r\n\r\n\t\t\t<!-- @slot Шапка -->\r\n\t\t\t<slot name=\"header\" :data=\"data\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"$slots.widget\"\r\n\t\t\tclass=\"top-popup_widget\"\r\n\t\t>\r\n\t\t\t<!-- @slot Виджет -->\r\n\t\t\t<slot name=\"widget\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"$slots.content\"\r\n\t\t\tclass=\"top-popup_content\"\r\n\t\t\tv-top-scroll-shadow\r\n\t\t>\r\n\t\t\t<!-- @slot Контент в свободной форме -->\r\n\t\t\t<slot name=\"content\" :data=\"data\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<ul\r\n\t\t\tv-if=\"$slots.contentList\"\r\n\t\t\tclass=\"top-popup_content\"\r\n\t\t\t@scroll=\"$emit('scrollContentList', $event)\"\r\n\t\t\tv-top-scroll-shadow\r\n\t\t>\r\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка используйте компонент popup/listItem -->\r\n\t\t\t<slot name=\"contentList\" :data=\"data\"></slot>\r\n\t\t</ul>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"$slots.footer || footerSupportLink\"\r\n\t\t\tclass=\"top-popup_footer\"\r\n\t\t>\r\n\t\t\t<a\r\n\t\t\t\tv-if=\"footerSupportLink\"\r\n\t\t\t\tclass=\"top-popup_footerSupportLink\"\r\n\t\t\t\t:href=\"footerSupportLink\"\r\n\t\t\t\ttarget=\"_blank\"\r\n\t\t\t>\r\n\t\t\t\t<TopHint hint=\"\"/>\r\n\t\t\t</a>\r\n\r\n\t\t\t<!-- @slot Футер -->\r\n\t\t\t<slot name=\"footer\" :data=\"data\"></slot>\r\n\t\t</div>\r\n\t</teleport>\r\n</template>\r\n\r\n<style>\r\n.top-popup_footerSupportLink {\r\n\tmargin-right: auto;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { ListItemProps } from './types';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<ListItemProps>(), {\r\n\ttype: 'button',\r\n\tcloseByClick: true,\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<li\r\n\t\t:class=\"{\r\n\t\t\t'top-popup_liNoSelectable': props.type !== 'button'\r\n\t\t}\"\r\n\t>\r\n\t\t<component\r\n\t\t\t:is=\"$attrs.href ? 'a' : 'div'\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t'top-popup_listItem': true,\r\n\t\t\t\t['top-popup_listItem-' + props.type]: !!props.type,\r\n\t\t\t\t'top-popup_liastItem-withActions': $slots.actions,\r\n\t\t\t\t'top-popup-noCloser': !closeByClick,\r\n\r\n\t\t\t\t'a': props.type === 'button', // оформления кнопки, deprecated\r\n\t\t\t}\"\r\n\t\t\t:=\"{...$attrs, ...attrs}\"\r\n\t\t>\r\n\t\t\t<template v-if=\"$slots.actions\">\r\n\t\t\t\t<div class=\"top-popup_listItemActionsLabel top-ellipsis1\">\r\n\t\t\t\t\t<slot></slot>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div class=\"top-popup_listItemActions\">\r\n\t\t\t\t\t<slot name=\"actions\"></slot>\r\n\t\t\t\t</div>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template v-else>\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</template>\r\n\t\t</component>\r\n\r\n\t\t<slot name=\"buttons\"></slot>\r\n\t</li>\r\n</template>\r\n"],"names":["id","props","elOpener","render","el","renderOpener","elOpener2","elInput","popup_worker","disabledOld","popup","vue","_ctx","elPopupRef","elPopupInnerRef","data","vueConnector","expose","delClasses","oldClass","newClasses","__props","_hoisted_2$1","_hoisted_1"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
_autoloadCSSCore.insertCSSLinkToPage(fileNames, true);
|
|
5
5
|
|
|
6
6
|
import { defineComponent as k, onUpdated as D, createElementBlock as i, openBlock as n, Fragment as C, createElementVNode as $, renderSlot as u, ref as h, toRef as L, watch as F, onUnmounted as H, resolveDirective as T, createBlock as b, createCommentVNode as r, unref as M, withCtx as S, Teleport as A, withDirectives as g, toDisplayString as N, createVNode as R, normalizeClass as V, resolveDynamicComponent as E, mergeProps as U } from "vue";
|
|
7
|
-
import { f as W } from "./forms-
|
|
7
|
+
import { f as W } from "./forms-xkXHvvah.es.js";
|
|
8
8
|
import { TopPopupWorker as v } from "../popup/worker.js";
|
|
9
9
|
const q = /* @__PURE__ */ k({
|
|
10
10
|
__name: "opener",
|
|
@@ -206,4 +206,4 @@ export {
|
|
|
206
206
|
q as a,
|
|
207
207
|
so as b
|
|
208
208
|
};
|
|
209
|
-
//# sourceMappingURL=popupHint.vue_vue_type_style_index_0_lang-
|
|
209
|
+
//# sourceMappingURL=popupHint.vue_vue_type_style_index_0_lang-fnjq0yg1.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popupHint.vue_vue_type_style_index_0_lang-fnjq0yg1.es.js","sources":["../../src/components/popup/popup/opener/opener.vue","../../src/components/popup/popup/popup.vue","../../src/components/popup/popup/listItem.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T extends Record<string, any> | undefined = undefined\">\r\nimport { onUpdated } from 'vue';\r\nimport type { OpenerProps } from './types';\r\nimport Worker from '../../lib/worker';\r\n\r\nconst props = withDefaults(defineProps<OpenerProps<T>>(), {\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst id = props.id || Math.random() + '';\r\n\r\nlet elOpener: Element;\r\n\r\n/**\r\n * Необычная функция для проброски props внутрь элемента слота\r\n *\r\n * @param el - вспомогательный элемент для доступа к элементам слота\r\n */\r\nfunction render(el: any) {\r\n\tsetTimeout(() => {\r\n\t\telOpener = el.nextElementSibling;\r\n\r\n\t\tif (elOpener) {\r\n\t\t\trenderOpener(elOpener);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nonUpdated(() => {\r\n\tif (elOpener) {\r\n\t\trenderOpener(elOpener);\r\n\t}\r\n});\r\n\r\nfunction renderOpener(elOpener: any) {\r\n\t/**\r\n\t * topPopup - необходимый атрибут для всез Popup\r\n\t *\r\n\t * Для Vue вместо него используется атрибут topPopupId\r\n\t */\r\n\telOpener.dataset.topPopup = '#' + id;\r\n\r\n\tconst disabledOld = !!elOpener.dataset.topPopupDisabled;\r\n\r\n\telOpener.dataset.topPopupId = id;\r\n\telOpener.dataset.topPopupPos = props.pos;\r\n\telOpener.dataset.topPopupPosBy = props.posBy;\r\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\r\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\r\n\telOpener.dataset.topPopupDisabled = props.disabled ? 'true' : '';\r\n\telOpener.__TopPopupOpenerProps = props;\r\n\r\n\tif (props.openByFocusInput && elOpener.classList.contains('top-input')) {\r\n\t\tconst elInput = elOpener.querySelector('input');\r\n\r\n\t\telInput.onfocus = () => {\r\n\t\t\tif (elOpener.dataset.topPopupDisabled) return;\r\n\r\n\t\t\tWorker.openByOpener(elOpener);\r\n\t\t};\r\n\r\n\t\t/**\r\n\t\t * Открыть или закрыть `popup` в момент ввода значения, если он становится активным\r\n\t\t *\r\n\t\t * Для обработки ввода значения с проверкой `minLength`\r\n\t\t */\r\n\t\tif (props.disabled !== disabledOld && elInput === document.activeElement) {\r\n\t\t\tconst popup = Worker.getPopupFromOpener(elOpener);\r\n\r\n\t\t\tif (!props.disabled && !popup) {\r\n\t\t\t\tWorker.openByOpener(elOpener);\r\n\t\t\t}\r\n\r\n\t\t\tif (props.disabled && popup) {\r\n\t\t\t\tpopup.close();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<template :ref=\"render\"></template>\r\n\r\n\t<!-- @slot элемент для открытия Popup -->\r\n\t<slot></slot>\r\n</template>\r\n\r\n<!-- Использует общий deprecated класс .btn -->\r\n<style>\r\nh3[data-top-popup],\r\ndiv[data-top-popup],\r\ni[data-top-popup]:not(.btn),\r\nb[data-top-popup]:not(.btn) {\r\n\tcursor: pointer;\r\n\tuser-select: none;\r\n\tfont-style: normal;\r\n\ttext-decoration: none;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n}\r\n\r\n[data-top-popup][data-top-popup-disabled] {\r\n\t/*\r\n\tpointer-events: none;\r\n\tcursor: auto !important;\r\n\t*/\r\n}\r\n\r\ni[contenteditable] {\r\n\tcursor: text !important;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\" generic=\"T extends Record<string, any> | undefined = undefined\">\r\nimport { onUnmounted, ref, toRef, watch } from 'vue';\r\nimport TopHint from '@/components/forms/hint/hint.vue';\r\nimport type { TopLibPopup } from '@/components/popup/lib/popup';\r\nimport type { Emits, Props } from './types';\r\nimport Opener from './opener/opener.vue';\r\nimport Worker from '@/components/popup/lib/worker';\r\n\r\nconst props = withDefaults(defineProps<Props<T>>(), {\r\n\tid: '',\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst emit = defineEmits<Emits<T>>();\r\n\r\nconst id = props.id || 'top-popup-id-' + Math.random() + '';\r\n\r\nconst expose = {\r\n\tid,\r\n\tpopup: undefined as TopLibPopup<T> | undefined,\r\n};\r\n\r\ndefineExpose(expose);\r\n\r\nconst elPopupRef = ref<HTMLElement | null>(null);\r\nconst elPopupInnerRef = ref<HTMLElement | null>(null);\r\n\r\nconst data = ref<T>();\r\n\r\n// см. lib/popup\r\nconst onOpen = async (popup: TopLibPopup<T>) => {\r\n\tif (popup.elPopup) elPopupRef.value = popup.elPopup;\r\n\r\n\tif (popup.elPopupInner) {\r\n\t\tpopup.elPopupInner.innerText = '';\r\n\r\n\t\telPopupInnerRef.value = popup.elPopupInner;\r\n\t}\r\n\r\n\tvueConnector.opened = true;\r\n\tvueConnector.popup = popup;\r\n\r\n\texpose.popup = popup;\r\n\r\n\tdata.value = popup.el.__TopPopupOpenerProps.data;\r\n\r\n\temit('open', { elPopup: popup.elPopup!, elPopupOpener: popup.el, data: data.value });\r\n};\r\n\r\n// см. lib/popup\r\nconst onClose = (popup: TopLibPopup<T>) => {\r\n\telPopupInnerRef.value = null;\r\n\r\n\tvueConnector.opened = false;\r\n\tvueConnector.popup = undefined;\r\n\r\n\tdata.value = undefined;\r\n\r\n\temit('close', { elPopup: popup.elPopup!, elPopupOpener: popup.el, data: popup.el.__TopPopupOpenerProps.data });\r\n};\r\n\r\nconst vueConnector = {\r\n\tonOpen,\r\n\tonClose,\r\n\tclassRef: toRef(props, 'class'),\r\n\topened: false,\r\n\tpopup: undefined as TopLibPopup<T> | undefined,\r\n\ttransitionDurationRef: toRef(props, 'transitionDuration'),\r\n};\r\n\r\nwatch(() => props.class, (newValue, oldValue) => {\r\n\tif (!elPopupRef.value) return;\r\n\r\n\tconst newClasses = newValue?.split(' ') ?? [];\r\n\tconst oldClasses = oldValue?.split(' ') ?? [];\r\n\r\n\tconst delClasses = oldClasses.filter((oldClass) => !newClasses.includes(oldClass));\r\n\r\n\telPopupRef.value.classList.remove(...delClasses);\r\n\telPopupRef.value.classList.add(...newClasses);\r\n});\r\n\r\nWorker.regVueComponent(id, vueConnector);\r\n\r\nonUnmounted(() => {\r\n\tWorker.unregVueComponent(id);\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<Opener\r\n\t\tv-if=\"$slots.opener\"\r\n\t\t:id\r\n\t\t:pos\r\n\t\t:posBy\r\n\t\t:notch\r\n\t\t:openByFocusInput\r\n\t\t:openByHover=\"($core.state.isMobile || $core.state.isMobileUA) ? false : openByHover\"\r\n\t\t:disabled\r\n\t>\r\n\t\t<!-- @slot элемент для открытия Popup -->\r\n\t\t<slot name=\"opener\"></slot>\r\n\t</Opener>\r\n\r\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\r\n\t<!-- elPopupInnerRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\r\n\t<teleport\r\n\t\tv-if=\"elPopupInnerRef\"\r\n\t\t:to=\"elPopupInnerRef\"\r\n\t>\r\n\t\t<div\r\n\t\t\tv-if=\"$slots.header || $core.state.isMobile\"\r\n\t\t\tclass=\"top-popup_header\"\r\n\t\t>\r\n\t\t\t<span\r\n\t\t\t\tv-if=\"$core.state.isMobile\"\r\n\t\t\t\tclass=\"top-as-a closer\"\r\n\t\t\t>\r\n\t\t\t\t{{ $i18n.Common.Close }}\r\n\t\t\t</span>\r\n\r\n\t\t\t<!-- @slot Шапка -->\r\n\t\t\t<slot name=\"header\" :data=\"data\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"$slots.widget\"\r\n\t\t\tclass=\"top-popup_widget\"\r\n\t\t>\r\n\t\t\t<!-- @slot Виджет -->\r\n\t\t\t<slot name=\"widget\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"$slots.content\"\r\n\t\t\tclass=\"top-popup_content\"\r\n\t\t\tv-top-scroll-shadow\r\n\t\t>\r\n\t\t\t<!-- @slot Контент в свободной форме -->\r\n\t\t\t<slot name=\"content\" :data=\"data\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<ul\r\n\t\t\tv-if=\"$slots.contentList\"\r\n\t\t\tclass=\"top-popup_content\"\r\n\t\t\t@scroll=\"$emit('scrollContentList', $event)\"\r\n\t\t\tv-top-scroll-shadow\r\n\t\t>\r\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка используйте компонент popup/listItem -->\r\n\t\t\t<slot name=\"contentList\" :data=\"data\"></slot>\r\n\t\t</ul>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"$slots.footer || footerSupportLink\"\r\n\t\t\tclass=\"top-popup_footer\"\r\n\t\t>\r\n\t\t\t<a\r\n\t\t\t\tv-if=\"footerSupportLink\"\r\n\t\t\t\tclass=\"top-popup_footerSupportLink\"\r\n\t\t\t\t:href=\"footerSupportLink\"\r\n\t\t\t\ttarget=\"_blank\"\r\n\t\t\t>\r\n\t\t\t\t<TopHint hint=\"\"/>\r\n\t\t\t</a>\r\n\r\n\t\t\t<!-- @slot Футер -->\r\n\t\t\t<slot name=\"footer\" :data=\"data\"></slot>\r\n\t\t</div>\r\n\t</teleport>\r\n</template>\r\n\r\n<style>\r\n.top-popup_footerSupportLink {\r\n\tmargin-right: auto;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { ListItemProps } from './types';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<ListItemProps>(), {\r\n\ttype: 'button',\r\n\tcloseByClick: true,\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<li\r\n\t\t:class=\"{\r\n\t\t\t'top-popup_liNoSelectable': props.type !== 'button'\r\n\t\t}\"\r\n\t>\r\n\t\t<component\r\n\t\t\t:is=\"$attrs.href ? 'a' : 'div'\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t'top-popup_listItem': true,\r\n\t\t\t\t['top-popup_listItem-' + props.type]: !!props.type,\r\n\t\t\t\t'top-popup_liastItem-withActions': $slots.actions,\r\n\t\t\t\t'top-popup-noCloser': !closeByClick,\r\n\r\n\t\t\t\t'a': props.type === 'button', // оформления кнопки, deprecated\r\n\t\t\t}\"\r\n\t\t\t:=\"{...$attrs, ...attrs}\"\r\n\t\t>\r\n\t\t\t<template v-if=\"$slots.actions\">\r\n\t\t\t\t<div class=\"top-popup_listItemActionsLabel top-ellipsis1\">\r\n\t\t\t\t\t<slot></slot>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<div class=\"top-popup_listItemActions\">\r\n\t\t\t\t\t<slot name=\"actions\"></slot>\r\n\t\t\t\t</div>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template v-else>\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</template>\r\n\t\t</component>\r\n\r\n\t\t<slot name=\"buttons\"></slot>\r\n\t</li>\r\n</template>\r\n"],"names":["props","__props","id","elOpener","render","el","renderOpener","onUpdated","disabledOld","elInput","Worker","popup","_createElementVNode","_renderSlot","_ctx","emit","__emit","expose","__expose","elPopupRef","ref","elPopupInnerRef","data","vueConnector","toRef","watch","newValue","oldValue","newClasses","delClasses","oldClass","onUnmounted","$slots","_createBlock","Opener","_unref","$core","_Teleport","_openBlock","_createElementBlock","_hoisted_1","_hoisted_2","_toDisplayString","$i18n","_hoisted_3","_withDirectives","_hoisted_4","_cache","$event","$emit","_hoisted_5","_createVNode","TopHint","_normalizeClass","_resolveDynamicComponent","$attrs","_mergeProps","_Fragment"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-CX_6ZXhO.es.js","sources":["../../src/core/utils/store/plugin.ts","../../src/core/utils/store/store.ts"],"sourcesContent":["import { inject, type ObjectPlugin } from 'vue';\nimport type { Store } from './store';\n\nconst PluginsByApp = new WeakMap();\n\ntype Options = {\n\tonInit: (context: Context) => void;\n}\n\ntype Context = {\n\tstore: Store,\n\toptions: object,\n}\n\n/**\n * Плагин tpa (Third-party access) для pinia\n *\n * Сейчас не используется\n *\n * TODO: Должен реализовывать возмоэности piniaTPAPlugin\n */\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!PluginsByApp.has(app)) {\n\t\t\tPluginsByApp.set(app, []);\n\t\t}\n\n\t\tconst onInits = PluginsByApp.get(app);\n\n\t\tonInits.push(options.onInit);\n\n\t\tapp.provide('TopStoreOnInits', onInits);\n\t},\n} satisfies ObjectPlugin<Options>;\n\n/**\n * Применить плагины к store\n */\nexport const usePlugins = (store: Store, options: object = {}) => {\n\tconst context: Context = {\n\t\tstore,\n\t\toptions,\n\t};\n\n\tconst onInits: Array<Function> = inject('TopStoreOnInits', []);\n\n\tonInits.forEach((onInit) => {\n\t\tonInit.call(context);\n\t});\n};\n","/**\n * Храналище выполненное по аналогии с https://pinia.vuejs.org/\n *\n * Основное отличие от Pinia - реализация Храналища на уровне компонента, а не приложения.\n * Каждый экземдяр компонента будет иметь свой Store.\n *\n * Основное отличие от классического State - является общим для компонента и всех его дочерних компонентов. Основано на принципе provide/inject.\n * https://vuejs.org/guide/components/provide-inject.html\n *\n * @packageDocumentation\n */\n\nimport type { InjectionKey, UnwrapNestedRefs } from 'vue';\nimport { inject, provide, reactive, watch } from 'vue';\nimport { usePlugins } from './plugin';\n\n/**\n * Определить Store\n *\n * Следует определять на уровне корневого компонента, использующего Store\n * @param injectionKey - InjectionKey для provide / inject в области компонента\n * @param setup - Нстройки Store, см. https://pinia.vuejs.org/core-concepts/#Setup-Stores\n * @param $id - строковой id Store, используется в плагинах\n * @param options - настройки Store, используются в плагинах\n */\nexport const defineStore = <T extends object>(\n\tinjectionKey: InjectionKey<UnwrapNestedRefs<T>>,\n\tsetup: () => T | object,\n\t$id?: string,\n\toptions?: object,\n): UnwrapNestedRefs<T> & Store => {\n\tconst store = reactive(setup()) as UnwrapNestedRefs<T> & Store;\n\n\tstore.$id = $id;\n\tstore.$subscribe = (cb: Function) => {\n\t\twatch(store, () => cb(), { deep: true });\n\t};\n\n\tusePlugins(store, options);\n\n\tprovide(injectionKey, store);\n\n\treturn store;\n};\n\n/**\n * Получить State компонента\n * @param injectionKey - InjectionKey для provide / inject в области компонента\n * @return - State компонента\n */\nexport const useStore = <T>(injectionKey: InjectionKey<T>): T & Store => {\n\tconst store = inject(injectionKey);\n\n\tif (!store) {\n\t\tthrow Error('Попытка использовать Store до его инициализации, убедитесь, что defineStore() вызван в setup() необходимого компонента');\n\t}\n\n\treturn store;\n};\n\n/**\n * Легковесный аналог объекта Store Pinia для совместимости с плагинами Pinia\n */\nexport interface Store {\n\t/**\n\t * Строковой идентификатор Store\n\t *\n\t * Не уникален в рамках приложения\n\t */\n\t$id?: string;\n\t$subscribe?: Function;\n}\n\nexport default {\n\tdefineStore,\n\tuseStore,\n};\n"],"names":["usePlugins","store","options","context","inject","onInit","defineStore","injectionKey","setup","$id","reactive","cb","watch","provide","useStore"],"mappings":";AAsCO,MAAMA,IAAa,CAACC,GAAcC,IAAkB,OAAO;AACjE,QAAMC,IAAmB;AAAA,IACxB,OAAAF;AAAA,IACA,SAAAC;AAAA,EAAA;AAKD,EAFiCE,EAAO,mBAAmB,EAAE,EAErD,QAAQ,CAACC,MAAW;AAC3B,IAAAA,EAAO,KAAKF,CAAO;AAAA,EACpB,CAAC;AACF,GCxBaG,IAAc,CAC1BC,GACAC,GACAC,GACAP,MACiC;AACjC,QAAMD,IAAQS,EAASF,GAAO;AAE9B,SAAAP,EAAM,MAAMQ,GACZR,EAAM,aAAa,CAACU,MAAiB;AACpC,IAAAC,EAAMX,GAAO,MAAMU,EAAA,GAAM,EAAE,MAAM,IAAM;AAAA,EACxC,GAEAX,EAAWC,GAAOC,CAAO,GAEzBW,EAAQN,GAAcN,CAAK,GAEpBA;AACR,GAOaa,IAAW,CAAIP,MAA6C;AACxE,QAAMN,IAAQG,EAAOG,CAAY;AAEjC,MAAI,CAACN;AACJ,UAAM,MAAM,wHAAwH;AAGrI,SAAOA;AACR,GAeAA,IAAe;AAAA,EACd,aAAAK;AAAA,EACA,UAAAQ;AACD;"}
|
|
1
|
+
{"version":3,"file":"store-CX_6ZXhO.es.js","sources":["../../src/core/utils/store/plugin.ts","../../src/core/utils/store/store.ts"],"sourcesContent":["import { inject, type ObjectPlugin } from 'vue';\r\nimport type { Store } from './store';\r\n\r\nconst PluginsByApp = new WeakMap();\r\n\r\ntype Options = {\r\n\tonInit: (context: Context) => void;\r\n}\r\n\r\ntype Context = {\r\n\tstore: Store,\r\n\toptions: object,\r\n}\r\n\r\n/**\r\n * Плагин tpa (Third-party access) для pinia\r\n *\r\n * Сейчас не используется\r\n *\r\n * TODO: Должен реализовывать возмоэности piniaTPAPlugin\r\n */\r\nexport default {\r\n\tinstall: (app, options) => {\r\n\t\tif (!PluginsByApp.has(app)) {\r\n\t\t\tPluginsByApp.set(app, []);\r\n\t\t}\r\n\r\n\t\tconst onInits = PluginsByApp.get(app);\r\n\r\n\t\tonInits.push(options.onInit);\r\n\r\n\t\tapp.provide('TopStoreOnInits', onInits);\r\n\t},\r\n} satisfies ObjectPlugin<Options>;\r\n\r\n/**\r\n * Применить плагины к store\r\n */\r\nexport const usePlugins = (store: Store, options: object = {}) => {\r\n\tconst context: Context = {\r\n\t\tstore,\r\n\t\toptions,\r\n\t};\r\n\r\n\tconst onInits: Array<Function> = inject('TopStoreOnInits', []);\r\n\r\n\tonInits.forEach((onInit) => {\r\n\t\tonInit.call(context);\r\n\t});\r\n};\r\n","/**\r\n * Храналище выполненное по аналогии с https://pinia.vuejs.org/\r\n *\r\n * Основное отличие от Pinia - реализация Храналища на уровне компонента, а не приложения.\r\n * Каждый экземдяр компонента будет иметь свой Store.\r\n *\r\n * Основное отличие от классического State - является общим для компонента и всех его дочерних компонентов. Основано на принципе provide/inject.\r\n * https://vuejs.org/guide/components/provide-inject.html\r\n *\r\n * @packageDocumentation\r\n */\r\n\r\nimport type { InjectionKey, UnwrapNestedRefs } from 'vue';\r\nimport { inject, provide, reactive, watch } from 'vue';\r\nimport { usePlugins } from './plugin';\r\n\r\n/**\r\n * Определить Store\r\n *\r\n * Следует определять на уровне корневого компонента, использующего Store\r\n * @param injectionKey - InjectionKey для provide / inject в области компонента\r\n * @param setup - Нстройки Store, см. https://pinia.vuejs.org/core-concepts/#Setup-Stores\r\n * @param $id - строковой id Store, используется в плагинах\r\n * @param options - настройки Store, используются в плагинах\r\n */\r\nexport const defineStore = <T extends object>(\r\n\tinjectionKey: InjectionKey<UnwrapNestedRefs<T>>,\r\n\tsetup: () => T | object,\r\n\t$id?: string,\r\n\toptions?: object,\r\n): UnwrapNestedRefs<T> & Store => {\r\n\tconst store = reactive(setup()) as UnwrapNestedRefs<T> & Store;\r\n\r\n\tstore.$id = $id;\r\n\tstore.$subscribe = (cb: Function) => {\r\n\t\twatch(store, () => cb(), { deep: true });\r\n\t};\r\n\r\n\tusePlugins(store, options);\r\n\r\n\tprovide(injectionKey, store);\r\n\r\n\treturn store;\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n * @param injectionKey - InjectionKey для provide / inject в области компонента\r\n * @return - State компонента\r\n */\r\nexport const useStore = <T>(injectionKey: InjectionKey<T>): T & Store => {\r\n\tconst store = inject(injectionKey);\r\n\r\n\tif (!store) {\r\n\t\tthrow Error('Попытка использовать Store до его инициализации, убедитесь, что defineStore() вызван в setup() необходимого компонента');\r\n\t}\r\n\r\n\treturn store;\r\n};\r\n\r\n/**\r\n * Легковесный аналог объекта Store Pinia для совместимости с плагинами Pinia\r\n */\r\nexport interface Store {\r\n\t/**\r\n\t * Строковой идентификатор Store\r\n\t *\r\n\t * Не уникален в рамках приложения\r\n\t */\r\n\t$id?: string;\r\n\t$subscribe?: Function;\r\n}\r\n\r\nexport default {\r\n\tdefineStore,\r\n\tuseStore,\r\n};\r\n"],"names":["usePlugins","store","options","context","inject","onInit","defineStore","injectionKey","setup","$id","reactive","cb","watch","provide","useStore"],"mappings":";AAsCO,MAAMA,IAAa,CAACC,GAAcC,IAAkB,OAAO;AACjE,QAAMC,IAAmB;AAAA,IACxB,OAAAF;AAAA,IACA,SAAAC;AAAA,EAAA;AAKD,EAFiCE,EAAO,mBAAmB,EAAE,EAErD,QAAQ,CAACC,MAAW;AAC3B,IAAAA,EAAO,KAAKF,CAAO;AAAA,EACpB,CAAC;AACF,GCxBaG,IAAc,CAC1BC,GACAC,GACAC,GACAP,MACiC;AACjC,QAAMD,IAAQS,EAASF,GAAO;AAE9B,SAAAP,EAAM,MAAMQ,GACZR,EAAM,aAAa,CAACU,MAAiB;AACpC,IAAAC,EAAMX,GAAO,MAAMU,EAAA,GAAM,EAAE,MAAM,IAAM;AAAA,EACxC,GAEAX,EAAWC,GAAOC,CAAO,GAEzBW,EAAQN,GAAcN,CAAK,GAEpBA;AACR,GAOaa,IAAW,CAAIP,MAA6C;AACxE,QAAMN,IAAQG,EAAOG,CAAY;AAEjC,MAAI,CAACN;AACJ,UAAM,MAAM,wHAAwH;AAGrI,SAAOA;AACR,GAeAA,IAAe;AAAA,EACd,aAAAK;AAAA,EACA,UAAAQ;AACD;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-YRW59xEF.amd.js","sources":["../../src/core/utils/store/plugin.ts","../../src/core/utils/store/store.ts"],"sourcesContent":["import { inject, type ObjectPlugin } from 'vue';\nimport type { Store } from './store';\n\nconst PluginsByApp = new WeakMap();\n\ntype Options = {\n\tonInit: (context: Context) => void;\n}\n\ntype Context = {\n\tstore: Store,\n\toptions: object,\n}\n\n/**\n * Плагин tpa (Third-party access) для pinia\n *\n * Сейчас не используется\n *\n * TODO: Должен реализовывать возмоэности piniaTPAPlugin\n */\nexport default {\n\tinstall: (app, options) => {\n\t\tif (!PluginsByApp.has(app)) {\n\t\t\tPluginsByApp.set(app, []);\n\t\t}\n\n\t\tconst onInits = PluginsByApp.get(app);\n\n\t\tonInits.push(options.onInit);\n\n\t\tapp.provide('TopStoreOnInits', onInits);\n\t},\n} satisfies ObjectPlugin<Options>;\n\n/**\n * Применить плагины к store\n */\nexport const usePlugins = (store: Store, options: object = {}) => {\n\tconst context: Context = {\n\t\tstore,\n\t\toptions,\n\t};\n\n\tconst onInits: Array<Function> = inject('TopStoreOnInits', []);\n\n\tonInits.forEach((onInit) => {\n\t\tonInit.call(context);\n\t});\n};\n","/**\n * Храналище выполненное по аналогии с https://pinia.vuejs.org/\n *\n * Основное отличие от Pinia - реализация Храналища на уровне компонента, а не приложения.\n * Каждый экземдяр компонента будет иметь свой Store.\n *\n * Основное отличие от классического State - является общим для компонента и всех его дочерних компонентов. Основано на принципе provide/inject.\n * https://vuejs.org/guide/components/provide-inject.html\n *\n * @packageDocumentation\n */\n\nimport type { InjectionKey, UnwrapNestedRefs } from 'vue';\nimport { inject, provide, reactive, watch } from 'vue';\nimport { usePlugins } from './plugin';\n\n/**\n * Определить Store\n *\n * Следует определять на уровне корневого компонента, использующего Store\n * @param injectionKey - InjectionKey для provide / inject в области компонента\n * @param setup - Нстройки Store, см. https://pinia.vuejs.org/core-concepts/#Setup-Stores\n * @param $id - строковой id Store, используется в плагинах\n * @param options - настройки Store, используются в плагинах\n */\nexport const defineStore = <T extends object>(\n\tinjectionKey: InjectionKey<UnwrapNestedRefs<T>>,\n\tsetup: () => T | object,\n\t$id?: string,\n\toptions?: object,\n): UnwrapNestedRefs<T> & Store => {\n\tconst store = reactive(setup()) as UnwrapNestedRefs<T> & Store;\n\n\tstore.$id = $id;\n\tstore.$subscribe = (cb: Function) => {\n\t\twatch(store, () => cb(), { deep: true });\n\t};\n\n\tusePlugins(store, options);\n\n\tprovide(injectionKey, store);\n\n\treturn store;\n};\n\n/**\n * Получить State компонента\n * @param injectionKey - InjectionKey для provide / inject в области компонента\n * @return - State компонента\n */\nexport const useStore = <T>(injectionKey: InjectionKey<T>): T & Store => {\n\tconst store = inject(injectionKey);\n\n\tif (!store) {\n\t\tthrow Error('Попытка использовать Store до его инициализации, убедитесь, что defineStore() вызван в setup() необходимого компонента');\n\t}\n\n\treturn store;\n};\n\n/**\n * Легковесный аналог объекта Store Pinia для совместимости с плагинами Pinia\n */\nexport interface Store {\n\t/**\n\t * Строковой идентификатор Store\n\t *\n\t * Не уникален в рамках приложения\n\t */\n\t$id?: string;\n\t$subscribe?: Function;\n}\n\nexport default {\n\tdefineStore,\n\tuseStore,\n};\n"],"names":["store","onInit","context","defineStore","injectionKey","setup","$id","options","vue","cb","usePlugins","useStore"],"mappings":"8HAuC0B,MAAAA,4CAOzB,QAAAC,GAAA,CACCA,EAAA,KAAAC,CAAA,CAAmB,CAAA,GCtBdC,EAAA,CAAAC,EAAAC,EAAAC,EAAAC,IAAA,CAMN,MAAAP,EAAAQ,EAAA,SAAAH,EAAA,CAAA,EAEA,OAAAL,EAAA,IAAAM,EACAN,EAAA,WAAAS,GAAA,CACCD,EAAA,MAAAR,EAAA,IAAAS,EAAA,EAAA,CAAA,KAAA,EAAA,CAAA,CAAuC,EAGxCC,EAAAV,EAAAO,CAAA,EAEAC,EAAA,QAAAJ,EAAAJ,CAAA,EAEAA,CACD,EAOOW,EAAAP,GAAA,CACN,MAAAJ,EAAAQ,EAAA,OAAAJ,CAAA,QAGC,MAAA,MAAA,wHAAA,EAGD,OAAAJ,CACD,EAeAA,EAAA,CAAe,YAAAG"}
|
|
1
|
+
{"version":3,"file":"store-YRW59xEF.amd.js","sources":["../../src/core/utils/store/plugin.ts","../../src/core/utils/store/store.ts"],"sourcesContent":["import { inject, type ObjectPlugin } from 'vue';\r\nimport type { Store } from './store';\r\n\r\nconst PluginsByApp = new WeakMap();\r\n\r\ntype Options = {\r\n\tonInit: (context: Context) => void;\r\n}\r\n\r\ntype Context = {\r\n\tstore: Store,\r\n\toptions: object,\r\n}\r\n\r\n/**\r\n * Плагин tpa (Third-party access) для pinia\r\n *\r\n * Сейчас не используется\r\n *\r\n * TODO: Должен реализовывать возмоэности piniaTPAPlugin\r\n */\r\nexport default {\r\n\tinstall: (app, options) => {\r\n\t\tif (!PluginsByApp.has(app)) {\r\n\t\t\tPluginsByApp.set(app, []);\r\n\t\t}\r\n\r\n\t\tconst onInits = PluginsByApp.get(app);\r\n\r\n\t\tonInits.push(options.onInit);\r\n\r\n\t\tapp.provide('TopStoreOnInits', onInits);\r\n\t},\r\n} satisfies ObjectPlugin<Options>;\r\n\r\n/**\r\n * Применить плагины к store\r\n */\r\nexport const usePlugins = (store: Store, options: object = {}) => {\r\n\tconst context: Context = {\r\n\t\tstore,\r\n\t\toptions,\r\n\t};\r\n\r\n\tconst onInits: Array<Function> = inject('TopStoreOnInits', []);\r\n\r\n\tonInits.forEach((onInit) => {\r\n\t\tonInit.call(context);\r\n\t});\r\n};\r\n","/**\r\n * Храналище выполненное по аналогии с https://pinia.vuejs.org/\r\n *\r\n * Основное отличие от Pinia - реализация Храналища на уровне компонента, а не приложения.\r\n * Каждый экземдяр компонента будет иметь свой Store.\r\n *\r\n * Основное отличие от классического State - является общим для компонента и всех его дочерних компонентов. Основано на принципе provide/inject.\r\n * https://vuejs.org/guide/components/provide-inject.html\r\n *\r\n * @packageDocumentation\r\n */\r\n\r\nimport type { InjectionKey, UnwrapNestedRefs } from 'vue';\r\nimport { inject, provide, reactive, watch } from 'vue';\r\nimport { usePlugins } from './plugin';\r\n\r\n/**\r\n * Определить Store\r\n *\r\n * Следует определять на уровне корневого компонента, использующего Store\r\n * @param injectionKey - InjectionKey для provide / inject в области компонента\r\n * @param setup - Нстройки Store, см. https://pinia.vuejs.org/core-concepts/#Setup-Stores\r\n * @param $id - строковой id Store, используется в плагинах\r\n * @param options - настройки Store, используются в плагинах\r\n */\r\nexport const defineStore = <T extends object>(\r\n\tinjectionKey: InjectionKey<UnwrapNestedRefs<T>>,\r\n\tsetup: () => T | object,\r\n\t$id?: string,\r\n\toptions?: object,\r\n): UnwrapNestedRefs<T> & Store => {\r\n\tconst store = reactive(setup()) as UnwrapNestedRefs<T> & Store;\r\n\r\n\tstore.$id = $id;\r\n\tstore.$subscribe = (cb: Function) => {\r\n\t\twatch(store, () => cb(), { deep: true });\r\n\t};\r\n\r\n\tusePlugins(store, options);\r\n\r\n\tprovide(injectionKey, store);\r\n\r\n\treturn store;\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n * @param injectionKey - InjectionKey для provide / inject в области компонента\r\n * @return - State компонента\r\n */\r\nexport const useStore = <T>(injectionKey: InjectionKey<T>): T & Store => {\r\n\tconst store = inject(injectionKey);\r\n\r\n\tif (!store) {\r\n\t\tthrow Error('Попытка использовать Store до его инициализации, убедитесь, что defineStore() вызван в setup() необходимого компонента');\r\n\t}\r\n\r\n\treturn store;\r\n};\r\n\r\n/**\r\n * Легковесный аналог объекта Store Pinia для совместимости с плагинами Pinia\r\n */\r\nexport interface Store {\r\n\t/**\r\n\t * Строковой идентификатор Store\r\n\t *\r\n\t * Не уникален в рамках приложения\r\n\t */\r\n\t$id?: string;\r\n\t$subscribe?: Function;\r\n}\r\n\r\nexport default {\r\n\tdefineStore,\r\n\tuseStore,\r\n};\r\n"],"names":["store","onInit","context","defineStore","injectionKey","setup","$id","options","vue","cb","usePlugins","useStore"],"mappings":"8HAuC0B,MAAAA,4CAOzB,QAAAC,GAAA,CACCA,EAAA,KAAAC,CAAA,CAAmB,CAAA,GCtBdC,EAAA,CAAAC,EAAAC,EAAAC,EAAAC,IAAA,CAMN,MAAAP,EAAAQ,EAAA,SAAAH,EAAA,CAAA,EAEA,OAAAL,EAAA,IAAAM,EACAN,EAAA,WAAAS,GAAA,CACCD,EAAA,MAAAR,EAAA,IAAAS,EAAA,EAAA,CAAA,KAAA,EAAA,CAAA,CAAuC,EAGxCC,EAAAV,EAAAO,CAAA,EAEAC,EAAA,QAAAJ,EAAAJ,CAAA,EAEAA,CACD,EAOOW,EAAAP,GAAA,CACN,MAAAJ,EAAAQ,EAAA,OAAAJ,CAAA,QAGC,MAAA,MAAA,wHAAA,EAGD,OAAAJ,CACD,EAeAA,EAAA,CAAe,YAAAG"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","vue","./forms-CUSCBQu3.amd","../popup/worker.amd","../utils/system.amd","../utils/route.amd","../utils/scroll.amd","./dialogs.vue_vue_type_script_setup_true_lang-Dq9kWWMg.amd","../utils/dom.amd"],(function(Y,_,v,g,M,A,P,j,p,s){"use strict";if(typeof v>"u")var v=window.Vue;$;let T=!1;const B=()=>{T||(T=!0,document.addEventListener("keydown",e=>{if(e.key!=="Escape"||!e.target||!(e.target instanceof HTMLElement))return;const t=e.target;if(!t.closest(".ui-dialog")||t.contentEditable==="true"||t.contentEditable==="plaintext-only"||s.querySelectorVisible(document.documentElement,".top-popup-wrapper")||t.classList.contains("autocomplete")||s.querySelectorVisible(document.documentElement,".fancybox-container"))return;const a=s.querySelectorAllArray(document,".ui-dialog-content").filter(o=>s.isVisible(o));$(a[a.length-1]).dialog("close")}),document.addEventListener("click",e=>{if(!(e.target instanceof HTMLElement))return;const t=e.target.closest('[data-action="top-dialog-close"]');if(!t)return;e.preventDefault();const a=t.closest(".ui-dialog-content");if(!a)return;const o=t.dataset.toView;if(o=="toPrevPage()"){f.toPrevPage(a);return}if(o){const r=o.split("-"),d=r.shift(),l=r.join("-");if(!d)return;const h=f.getElDialogById(d);if(!h)return;const n=s.querySelectorAllArray(h,`[data-view-page="${l}"]`);if(!n)return;if(!s.isVisible(n[0])){const c=p.TopDialogWorker.genViewPageHash(o,"prev");P.historySetState(!1,c);return}}$(a).dialog("close")}),document.addEventListener("submit",e=>{const t=e.target;(t.matches(".modal-body > form")||t.matches(".modal-layer-body > form"))&&e.preventDefault()}),document.addEventListener("keypress",e=>{if(!(e.target instanceof HTMLElement))return;const t=e.target;if(!(!t.closest(".ui-dialog .modal-body")||!(t.matches("input:not(.searcher), textarea:not(.searcher), select:not(.searcher), button:not(.searcher)")||t.hasAttribute("contenteditable")))&&e.key==="Enter"){if(t.classList.contains("autocomplete")){e.preventDefault();return}if(t.tagName==="TEXTAREA"){if(!e.ctrlKey&&!e.metaKey)return;const i=t.closest("form");i&&s.querySelectorAllArray(i,'button[type="submit"]').concat(s.querySelectorAllArray(i,'input[type="submit"]')).find(d=>s.isVisible(d))?.click()}}}),document.addEventListener("click",function(e){if(!(e.target instanceof HTMLElement)||!e.target.classList.contains("ui-widget-overlay"))return;let a,o=0;if(s.querySelectorAllArray(document,".ui-dialog").filter(r=>s.isVisible(r)).forEach(r=>{const d=Number(window.getComputedStyle(r).zIndex);d<o||(a=r,o=d)}),a){const r=a.querySelector(".ui-dialog-content");$(r).dialog("close")}}),window.addEventListener("resize",f.recalcPositions),f.recalcPositions())},O=':root{--dialog-border-color: var(--color-line-1);--dialog-loading-duration: 10s;--top-dialog-footer-height: var(--top-forms-base-height_s)}html.with_dialog{overflow:hidden!important}a[data-to-view]{cursor:pointer}.ui-widget-overlay{background:#040404;opacity:.5;filter:Alpha(Opacity=50)}.ui-dialog{border-radius:8px;border:none;padding:0}.ui-dialog.ui-widget{border:none}.ui-dialog-titlebar{display:none}.ui-dialog .ui-dialog-content{padding:0;overflow:visible}.ui-dialog .project_name{word-break:break-all}.ui-dialog-content{--dialog-header-height: 50px;--dialog-layer-pageSelector: 0px}.ui-dialog-content-withPageSelector{--dialog-layer-pageSelector: 42px}.modal-header,.modal-body,.modal-footer{font-size:14px;position:relative}.modal-body{padding:var(--padding-default)}.modal-body:has(>.topTable:first-child){padding-top:calc(var(--padding-default) / 4)}.modal-header{border-bottom:1px solid var(--dialog-border-color);height:var(--dialog-header-height);padding:0 var(--padding-default);display:flex;justify-content:space-between;align-items:center;gap:var(--top-padding-2)}.modal-header>*{padding:10px 0;font-size:16px}.modal-header>.top-title{margin:0;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1;order:50;display:flex;align-items:center}.modal-header>.top-title>div[class*=icon]{display:none}.modal-header>div:not(.top-title){order:60}.modal-header>div.close{--top-icon-color: var(--color-text-2);cursor:pointer;background:var(--color-layout-front-1);font-size:16px;order:100;animation-name:none!important}.modal-header>div.close:hover{--top-icon-color: var(--color-text-1)}.modal-header .links_icons{position:absolute;right:50px}.modal-header .links_icons [class*=icon-]{width:auto;height:auto;padding:0 5px;color:#d6dee0}.modal-header .links_icons [class*=icon-].active{color:var(--color-bg-warning-1)}.modal-layer-pageSelector{padding:0 10px!important}.modal-body{max-height:calc(var(--100vh) - var(--dialog-header-height) - 1px - var(--dialog-layer-pageSelector) - var(--top-dialog-footer-height) - 1px);overflow-y:auto;overflow-x:hidden;box-sizing:border-box;flex-grow:1}.modal-body hr{margin:16px -15px}.modal-body h4{padding:0;margin:0 0 10px;line-height:normal}.modal-body .inner{padding:var(--padding-default);margin:0 calc(0px - var(--padding-default));position:relative}.modal-body .inner .bt{border-top:1px dashed var(--color-layout-front-primary-3);position:absolute;top:0;right:0;left:0}.modal-body .inner .bb{border-bottom:1px dashed var(--color-layout-front-primary-3);position:absolute;right:0;bottom:0;left:0}.modal-body .inner.color-1{background:var(--color-layout-front-primary-3);color:var(--color-text-1)}.modal-body .inner strong{color:var(--color-text-1)}.modal-body .comment{line-height:18px}.modal-footer{min-height:var(--top-dialog-footer-height);padding:var(--top-gap-2);display:flex;flex-shrink:0;align-items:center;justify-content:flex-end;gap:var(--top-gap-2)}.modal-footer .modal-footer-btn-left{margin-right:auto}.modal-footer>.btn.full_width,.modal-footer>.top-button.full_width{flex-grow:1;align-self:flex-end}.modal-footer-fullWith{flex-wrap:wrap}.modal-footer-fullWith>*{flex-grow:1}.modal-footer-fullWith>.top-info{flex-grow:5}.modal-footer-fullWith>*:empty{flex-grow:0}.ui-dialog-content>.modal-layer>[data-view-page]>input[type=submit]{position:absolute;visibility:hidden}.help_popup .modal-header{display:none}.help_popup .modal-header a{top:2px;z-index:10}.help_popup .modal-header .top-title{display:none}.modal-layer{overflow:hidden}.modal-layer a[data-top-icon]:empty{color:var(--color-text-4);text-decoration:none}.modal-layer>[data-view-page]>div>div.buttons{display:flex;white-space:nowrap;gap:var(--top-padding-1)}.modal-layer>[data-view-page]>div>div.buttons:empty{display:none}.modal-layer>[data-view-page]>div>div.buttons>div,.modal-layer>[data-view-page]>div>div.buttons>a{cursor:pointer;width:auto;height:auto;min-width:auto;min-height:auto;padding:10px 9px;color:var(--color-text-4)}.modal-layer>[data-view-page]>div>div.buttons>div:hover{color:var(--color-text-2)}.modal-layer>[data-view-page]>div>div.buttons>div.hidden{display:none!important}.ui-dialog-content[data-view-page-active]{display:flex!important;flex-direction:column;justify-items:stretch}.ui-dialog-content>.modal-layer{display:flex!important;align-items:stretch;position:relative}.ui-dialog-content.i-change-page>.modal-layer{overflow:hidden}.ui-dialog-content>.modal-layer>[data-view-page]{width:100%;position:relative;display:none;flex-direction:column;justify-content:space-between;animation:.3s cubic-bezier(.4,0,.2,1) forwards}.ui-dialog-content>.modal-layer>[data-view-page].active{display:flex}.ui-dialog-content>.modal-layer>[data-view-page].reverse{animation-direction:reverse}.ui-dialog-content>.modal-layer>[data-view-page].center-to-left,.ui-dialog-content>.modal-layer>[data-view-page].right-to-center{display:flex;position:absolute;inset:0}.ui-dialog-content>.modal-layer>[data-view-page].center-to-left>div,.ui-dialog-content>.modal-layer>[data-view-page].right-to-center>div{overflow:hidden}.ui-dialog-content>.modal-layer-header{border-bottom:1px solid var(--dialog-border-color);min-height:var(--dialog-header-height)}.ui-dialog-content>.modal-layer-header>[data-view-page]>.modal-header{border:none;background:none}.ui-dialog-content>.modal-layer-header>[data-view-page]>.modal-header>*{animation:.3s cubic-bezier(.4,0,.2,1) forwards}.ui-dialog-content>.modal-layer-header>[data-view-page].reverse>.modal-header>*{animation-direction:reverse}.ui-dialog-content>.modal-layer-header>[data-view-page].center-to-left>.modal-header>.top-title{animation-name:dialog-center-to-left-header-title}.ui-dialog-content>.modal-layer-header>[data-view-page].right-to-center>.modal-header>.top-title{animation-name:dialog-right-to-center-header-title}.ui-dialog-content>.modal-layer-header>[data-view-page].center-to-left>.modal-header>[class*=widget-]{animation-name:dialog-center-to-left-header-title}.ui-dialog-content>.modal-layer-header>[data-view-page].right-to-center>.modal-header>[class*=widget-]{animation-name:dialog-right-to-center-header-title}.ui-dialog-content>.modal-layer-header>[data-view-page].center-to-left>.modal-header>div{animation-name:dialog-center-to-left-header-icons}.ui-dialog-content>.modal-layer-header>[data-view-page].right-to-center>.modal-header>div{animation-name:dialog-right-to-center-header-icons}.ui-dialog-content>.modal-layer-body{border-radius:0 0 8px 8px;max-height:calc(var(--100vh) - var(--dialog-header-height) - var(--dialog-layer-pageSelector) - var(--toolbar-height));flex-grow:2}.ui-dialog-content.i-change-page>.modal-layer-body>[data-view-page]{background:var(--color-layout-front-1)}.ui-dialog-content>.modal-layer-body>[data-view-page].center-to-left{animation-name:dialog-center-to-left}.ui-dialog-content>.modal-layer-body>[data-view-page].right-to-center{animation-name:dialog-right-to-center}.ui-dialog-content .modal-footer .second_level{box-sizing:border-box;background:var(--color-layout-front-1);width:100%;min-height:25px;display:flex;align-items:center;justify-content:center}.ui-dialog-content .modal-footer .second_level input{border-radius:8px;width:100%;height:var(--top-forms-base-height);padding:var(--top-padding-1) var(--top-padding-3);box-sizing:border-box}.ui-dialog-content>.modal-layer-body>[data-view-page].i-load-data{pointer-events:none}.ui-dialog-content>.modal-layer-body>[data-view-page].i-load-data:before{content:" ";background:#378dc6;width:0;height:4px;position:absolute;top:0;left:0;z-index:100;animation:top-loadbar var(--dialog-loading-duration) forwards}.ui-dialog-content.modal-expanded{width:100vw!important;height:calc(var(--100vh) + 10px)!important}.modal-header>[data-widget]{padding:0 8px;position:absolute;inset:0;opacity:0;overflow:hidden;align-items:center;visibility:hidden;transition:opacity .3s;z-index:1}.modal-header>[data-widget=search] div.cancel{opacity:0;transform:translate(100%);transition:transform,opacity;transition-duration:.3s}[data-view-page].i-show-search .modal-header>:not([data-widget=search]){visibility:hidden}[data-view-page].i-show-search [data-widget=search]{visibility:visible;opacity:1}[data-view-page].i-show-search [data-widget=search] .cancel{transform:translate(0);opacity:1}[data-view-page]>.modal-header>*{transition:opacity .3s}[data-view-page].i-show-search>.modal-header>div.buttons{opacity:0}.modal-layer .top-popup-wrapper{height:100%!important}@keyframes dialog-center-to-left-header-title{0%{transform:translate(0);opacity:1}75%{opacity:0}to{transform:translate(-30%);opacity:0}}@keyframes dialog-right-to-center-header-title{0%{transform:translate(100%);opacity:0}25%{opacity:0}to{transform:translate(0);opacity:1}}@keyframes dialog-center-to-left-header-icons{0%{transform:translate(0);opacity:1}35%{transform:translate(-20%);opacity:0}to{transform:translate(-20%);opacity:0}}@keyframes dialog-right-to-center-header-icons{0%{transform:translate(20%);opacity:0}65%{transform:translate(20%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes dialog-center-to-left{0%{transform:translate(0);filter:brightness(1)}to{transform:translate(-30%);filter:brightness(.9)}}@keyframes dialog-right-to-center{0%{transform:translate(100%);box-shadow:#0000001a 0 0 10px}to{transform:translate(0);box-shadow:#0003 0 0 10px}}@media only screen and (max-width: 1480px){.win_side_panel_opener{display:none}}@media only screen and (min-width: 1480px){.ui-dialog-content.with_side_panel{box-shadow:#0003 0 0 6px}.ui-dialog-content.with_side_panel .modal-layer-body{background:var(--color-layout-front-1)}[data-widget=side_panel]{--side_panel_width: calc((100vw - 900px)/2 - 28px) ;box-sizing:border-box;background:var(--color-layout-front-1);max-width:var(--side_panel_width);padding:18px;position:absolute;top:calc(var(--dialog-header-height) + 1px + var(--dialog-layer-pageSelector));bottom:calc(var(--top-dialog-footer-height) + 1px);z-index:-1;display:block;transition:.2s}.win_side_panel_left{border-radius:8px 0 0 8px;right:100%}.win_side_panel_right{border-radius:0 8px 8px 0;left:100%}.win_side_panel_closed.win_side_panel_left{right:calc(100% - var(--side_panel_width))}.win_side_panel_closed.win_side_panel_right{left:calc(100% - var(--side_panel_width))}[data-widget=side_panel] .template{display:block}[data-widget=side_panel] .template>.header,[data-widget=side_panel] .template>.footer{display:flex}.win_side_panel_opener{cursor:pointer;background:var(--color-cyan);color:#fff;padding:4px;position:absolute;top:20px}.win_side_panel_closed .win_side_panel_opener:not(:hover){opacity:.3}.win_side_panel_left .win_side_panel_opener{border-radius:4px 0 0 4px;right:100%}.win_side_panel_right .win_side_panel_opener{border-radius:0 6px 6px 0;left:100%}}@media only screen and (max-height: 900px){html.with_dialog{background:#f1f1f1;overflow:hidden}.ui-dialog.me-tightly{border-radius:0;height:auto!important;position:fixed;top:0!important;bottom:0!important}.ui-dialog.me-tightly .ui-dialog-content{min-height:100%!important}.ui-dialog.me-tightly>div>.modal-body{position:absolute;top:var(--dialog-header-height);right:0;left:0;bottom:var(--dialog-header-height)}.ui-dialog.me-tightly>div>.modal-body:last-child{bottom:0}.ui-dialog.me-tightly>div>.modal-footer{position:absolute;right:0;bottom:0;left:0}.ui-dialog.me-tightly .modal-layer-body{border-radius:0;min-height:0!important}.ui-dialog.me-tightly .modal-layer-body .modal-footer{min-height:unset}}',H='html.with_dialog body{height:var(--100vh);overflow:hidden}.ui-widget-overlay{height:calc(100% - var(--toolbar-height))}.ui-dialog{border-radius:0;width:auto!important;height:auto!important;position:fixed;inset:0!important}.ui-dialog-content{width:100%!important;height:100%!important;min-width:0!important;max-width:100%!important}.modal-header>.top-title{text-align:center;font-size:14px}.modal-header>div.close{font-size:14px;order:1}.modal-header>div.close:before{content:""}.modal-body:last-child{bottom:0}.modal-footer{bottom:0}.modal-footer .second_level{padding:10px 8px}.modal-layer-body{min-height:0!important}.ui-dialog-content>.modal-layer-body{border-radius:0}.modal-body,.modal-footer{padding-right:12px;padding-left:12px}.modal-footer .btn:last-child{margin-right:12px}.modal-body .inner{padding:12px;margin:0 -12px;position:relative}',I=".modal-menu-opener{order:1!important}.modal-menu-opener:before{--top-icon-size: 20px;--top-icon-color: #FFF;--top-icon-width: var(--top-icon-size);border-radius:50%;background:var(--color-bg-primary-1);padding:3px;transition:transform .1s}.modal-menu-opener:hover:before{background:var(--color-bg-primary-2)}.modal-menu-opener.top-active:before{background:var(--color-bg-primary-2);transform:scale(.8)}.modal-layer .top-popup-wrapper{background:transparent;width:auto!important;padding:0!important;margin:0!important;top:0!important;right:0!important;left:0!important;transition:background .3s}.modal-layer .top-popup-wrapper>.top-popup[class],.modal-layer .top-popup-wrapper.with_notch>.top-popup[class]{border-radius:8px;border:none;margin:12px!important;max-width:100%;max-height:calc(100% - 24px);inset:0 0 auto!important;overflow:auto;display:flex;flex-direction:column;opacity:1;transform:translateY(calc(-100% - 24px));transition:transform .3s}.modal-layer .top-popup>.top-popup_header{background:var(--color-theme-50)}.modal-layer .top-theme-lite .top-popup>.top-popup_header .select{border:none}.modal-layer .top-theme-lite .top-popup>.top-popup_header .select .text{color:#fff}.modal-layer .top-theme-lite .top-popup>.top-popup_header .select .arrow{background:none}.modal-layer .top-popup-wrapper-shown:not(.top-popup-wrapper-closed){pointer-events:auto;background:#34495e40}@media only screen and (min-width: 1480px){.ui-dialog-content.with_side_panel{box-shadow:#0003 0 0 6px}.ui-dialog-content.with_side_panel .modal-layer-body{background:var(--color-layout-front-1)}[data-widget=side_panel]{--side_panel_width: calc((100vw - 900px)/2 - 28px) ;box-sizing:border-box;background:var(--color-layout-front-1);max-width:var(--side_panel_width);padding:18px;display:block;position:absolute;top:51px;bottom:51px;z-index:-1;transition:.2s}.win_side_panel_left{border-radius:8px 0 0 8px;right:100%}.win_side_panel_right{border-radius:0 8px 8px 0;left:100%}.win_side_panel_closed.win_side_panel_left{right:calc(100% - var(--side_panel_width))}.win_side_panel_closed.win_side_panel_right{left:calc(100% - var(--side_panel_width))}[data-widget=side_panel] .template{display:block}[data-widget=side_panel] .template>.header,[data-widget=side_panel] .template>.footer{display:flex}.win_side_panel_opener{cursor:pointer;background:var(--color-cyan);color:#fff;padding:4px;position:absolute;top:20px}.win_side_panel_closed .win_side_panel_opener:not(:hover){opacity:.3}.win_side_panel_left .win_side_panel_opener{border-radius:4px 0 0 4px;right:100%}.win_side_panel_right .win_side_panel_opener{border-radius:0 6px 6px 0;left:100%}}",F="html{--top-dialog-width: auto;--top-dialog-height: auto}.top-dialog{max-width:100vw}.top-dialog .modal-layer-body{height:var(--top-dialog-height)}",U=".top-dialog{width:var(--top-dialog-width)!important}";g.Core.insertStyleToPage(O),g.Core.insertStyleToPage(H,"m"),g.Core.insertStyleToPage(I,"pc"),g.Core.insertStyleToPage(F),g.Core.insertStyleToPage(U,"pc");let E,b=!1;const u=e=>!!e&&typeof e=="object"&&"jquery"in e,K=()=>{$.extend($.ui.dialog.prototype.options,{focus:e=>{e.target.focus(),$("[autofocus]",e.target)[0]?.focus()},create:e=>R(e.target),open:e=>Z(e.target),close:e=>G(e.target),modal:!0,resizable:!1,closeOnEscape:!1,width:"auto",minHeight:0}),$.ui.dialog.prototype._focusTabbable=$.noop,$.ui.dialog.prototype._moveToTopOriginal=$.ui.dialog.prototype._moveToTop,$.ui.dialog.prototype._moveToTop=function(){this._moveToTopOriginal();const e=$(this.element);e.trigger("dialogsMoveToTop",[e])},B(),b=!0},L=e=>{const t={};return e.dataset?.modal==="false"&&(t.modal=!1),e.dataset?.position&&(t.position=JSON.parse(e.dataset.position)),t},m=e=>document.getElementById(e),w=async(e,t,a)=>{if(!e.startsWith("dialog_"))return;const o=p.getDialogWorker(e);if(o&&(o.isOpened.value=!0,t!==void 0&&(o.pageActive.value=t),a!==void 0&&(o.pageActiveNext.value=a),await v.nextTick(),a)){const i=m(e);if(!i)return;i.querySelectorAll(`[data-view-page="${a}"]`).length||await A.waitWhile(()=>!i.querySelectorAll(`[data-view-page="${a}"]`).length)}},R=e=>{const t=e.querySelector(".modal-body");t&&(j.connectScrollShadow(t),p.TopDialogWorker.state.decoratorOnCreate?.(e),J(e))},J=e=>{$(e).on("aftershow.top-menu-popup","[data-top-popup]",(t,a)=>{const o=a[0];p.TopDialogWorker.getPairPage(o)?.[1]?.prepend(o)})},Z=async e=>{const t=e.dataset.viewPageActive,a=window.innerWidth;g.Core.state.documentClassModificators.set("top-dialog","with_dialog");const i=window.innerWidth-a;document.documentElement.scrollHeight>window.innerHeight&&(document.querySelector("html").style.marginRight=i+"px"),q(),p.getDialogWorker(e.getAttribute("id"))?.emit?.("open",t)},G=async e=>{const t=e.getAttribute("id"),a=e.dataset.viewPageActive;if(a){const r={vpn:p.TopDialogWorker.state.viewPageN,["view-"+t]:null};r["view-"+t]=null,(p.TopDialogWorker.state.viewPageN===0||p.TopDialogWorker.state.viewPageN===1)&&(r.vpn=null),P.setHashs(r,!1)}s.querySelectorAllArray(document,".ui-widget-overlay").filter(r=>s.isVisible(r)).length||(g.Core.state.documentClassModificators.delete("top-dialog"),document.querySelector("html").style.marginRight=""),$(e).trigger("viewAfterClose",[$(e)]);const i=p.getDialogWorker(t);i&&(i.isOpened.value=!1,i.emit?.("close",a),i.onCloseOnce&&(i.onCloseOnce(i.props,a),i.onCloseOnce=void 0)),window.dispatchEvent(new Event("resize"))},q=()=>{s.querySelectorAllArray(document,".ui-dialog").filter(t=>s.isVisible(t)&&t.querySelector(":scope > .ui-dialog-content")).map(t=>t.querySelector(":scope > .ui-dialog-content")).forEach(t=>{if(!t.querySelector(".modal-body"))return;const o=t.closest(".ui-dialog"),i=L(t);i.position??={of:window},$(t).dialog("option",i),o.classList.remove("me-tightly"),(o.clientHeight??0)>window.innerHeight&&o.classList.add("me-tightly")})},Q=async(e,t)=>{const o=/(\w+)[=-]([\w-]+)(?::([\w.:-]+))?/g.exec(e);if(o){const i=o[1],r=o[2],d=o[3];let l=[];d&&(l=d.split(":")),await V(i,r,l,t)}},V=async(e,t,a,o,i)=>{b||await new Promise((l,h)=>{const n=setInterval(()=>{b&&(clearInterval(n),l())},10)}),await v.nextTick();let r;if(typeof e=="object"?(u(e)&&(e=e?.[0]),r=e):r=m(e),!r&&typeof e=="string"&&p.TopDialogWorker.state.load&&(await p.TopDialogWorker.state.load(e),r=m(e),!r))throw new Error("Dialog no exists: "+e);if(!r)return;await x(r,t,a,o);const d=$(r);if(r?.classList.contains("ui-dialog-content"))d.dialog("open");else{const l=L(r);d.dialog(l)}i&&i(d)},x=async(e,t,a,o)=>{u(e)&&(e=e?.[0]),t===void 0&&(t=e.dataset.viewPageActive),t!==e.dataset.viewPageActive&&z(e)&&await A.sleep(100),a===void 0&&(a=[]),await w(e.getAttribute("id"),void 0,t);const i=s.querySelectorAllArray(e,".modal-layer"),r=i.reduce((n,c)=>{const y=c.querySelector(":scope > .active");return y&&n.push(y),n},[]),d=i.reduce((n,c)=>{const y=c.querySelector(`:scope > [data-view-page="${t}"]`);return y&&n.push(y),n},[]),l=a.join(":");if(o===void 0&&(o="next",(d[0]?.dataset.order??0)<(r[0]?.dataset.order??0)&&(o="prev")),!d.length)return;if(e.dataset.viewPageActive=t,d[0].classList.contains("active")){d[0].dataset.viewPageArgs!==l&&d.forEach(n=>{n.dataset.viewPageArgs=l}),W(e,d,t,a),S(e,d,t,a);return}d.forEach(n=>{n.dataset.viewPageArgs=l}),r.forEach(n=>{n.querySelector(".top-popup-wrapper")&&M.TopPopupWorker.close(n.querySelector(".top-popup-wrapper"))});const h=d[0].closest(".ui-dialog");switch(h&&!s.isVisible(h)&&(o="none"),r.length||(o="none"),s.isVisible(d[0])&&(o="none"),o){case"prev":{d.forEach(n=>{const c=n.parentNode?.querySelector(":scope > .active");c&&n.parentNode?.insertBefore(n,c)}),r.forEach(n=>{n.classList.add("right-to-center","reverse")}),d.forEach(n=>{n.classList.add("center-to-left","reverse")});break}case"next":{d.forEach(n=>{const c=n.parentNode?.querySelector(":scope > .active");c&&n.parentNode?.insertBefore(n,c.nextSibling)}),r.forEach(n=>{n?.classList.add("center-to-left")}),d.forEach(n=>{n.classList.add("right-to-center")});break}}if(e.setAttribute("view-page-active",t),r.forEach(n=>{n.classList.remove("active")}),d.forEach(n=>{n.classList.add("active")}),W(e,d,t,a),o){e.classList.add("i-change-page");const n=Number(window.getComputedStyle(d[0]).animationDuration.replace("s",""))*1e3;E=setTimeout(function(){w(e.getAttribute("id"),t,""),z(e),S(e,d,t,a)},n)}else await w(e.getAttribute("id"),t,""),S(e,d,t,a)},X=e=>{const i=s.querySelectorAllArray(e,".modal-layer").reduce((r,d)=>{const l=d.querySelector(":scope > .active");return l&&r.push(l),r},[]).reduce((r,d)=>{let l=d.previousElementSibling;for(;l&&!l.hasAttribute("data-view-page");)l=l.previousElementSibling;return l&&r.push(l),r},[])[0]?.dataset.viewPage;i?x(e,i,void 0,"prev"):$(e).dialog("close")},k=new Set,W=(e,t,a,o)=>{const i=e.getAttribute("id")+t[0].dataset.viewPage+a+o.join();k.has(i)||(k.add(i),setTimeout(function(){k.delete(i),$(e).trigger("viewBeforeOpen",[$(e),$(t),a,o])}))},S=(e,t,a,o)=>{setTimeout(function(){$(e).trigger("viewAfterOpen",[$(e),$(t),a,o])})},C=e=>(u(e)&&(e=e?.[0]),e.classList.contains("i-change-page")),z=e=>{if(!C(e))return!1;clearTimeout(E);const t=s.querySelectorAllArray(e,".modal-layer"),a=e.dataset.viewPageActive;return e.classList.remove("i-change-page"),t.forEach(o=>{o.querySelectorAll(":scope > [data-view-page]").forEach(i=>{i.classList.remove("center-to-left","right-to-center","reverse","active")})}),t.forEach(o=>{o.querySelector(`:scope > [data-view-page="${a}"]`)?.classList.add("active")}),!0},f={getElDialogById:m,updatePageVue:w,recalcPositions:q,toViewDirty:Q,toView:V,toViewPage:x,toPrevPage:X,setLoading:(e,t,a)=>{u(e)&&(e=e.toArray());const o=e.reduce((i,r)=>(r.hasAttribute("data-view-page")&&s.isVisible(r)&&i.push(r),i),[]);t?(a!==void 0&&o.forEach(i=>{i.style.setProperty("--dialog-loading-duration",a+"s")}),o.forEach(i=>{i.classList.add("i-load-data")})):(o.forEach(i=>{i.classList.remove("i-load-data")}),o.forEach(i=>{i.style.setProperty("--dialog-loading-duration","10s")}))},isLoading:e=>(u(e)&&(e=e?.[0]),e.classList.contains("i-load-data")),inAnimation:C,close:function(e){const t=m(e);if(!t)return;const a=$(t);a.dialog("instance")&&a.dialog("close")}};K(),_.TopDialogUtils=f,Object.defineProperty(_,Symbol.toStringTag,{value:"Module"})}));
|
|
2
|
-
//# sourceMappingURL=utils-
|
|
1
|
+
define(["require","exports","vue","./forms-4D_EVI46.amd","../popup/worker.amd","../utils/system.amd","../utils/route.amd","../utils/scroll.amd","./dialogs.vue_vue_type_script_setup_true_lang-CWprVs8d.amd","../utils/dom.amd"],(function(Y,_,v,g,M,A,P,j,p,s){"use strict";if(typeof v>"u")var v=window.Vue;$;let T=!1;const B=()=>{T||(T=!0,document.addEventListener("keydown",e=>{if(e.key!=="Escape"||!e.target||!(e.target instanceof HTMLElement))return;const t=e.target;if(!t.closest(".ui-dialog")||t.contentEditable==="true"||t.contentEditable==="plaintext-only"||s.querySelectorVisible(document.documentElement,".top-popup-wrapper")||t.classList.contains("autocomplete")||s.querySelectorVisible(document.documentElement,".fancybox-container"))return;const a=s.querySelectorAllArray(document,".ui-dialog-content").filter(o=>s.isVisible(o));$(a[a.length-1]).dialog("close")}),document.addEventListener("click",e=>{if(!(e.target instanceof HTMLElement))return;const t=e.target.closest('[data-action="top-dialog-close"]');if(!t)return;e.preventDefault();const a=t.closest(".ui-dialog-content");if(!a)return;const o=t.dataset.toView;if(o=="toPrevPage()"){f.toPrevPage(a);return}if(o){const r=o.split("-"),d=r.shift(),l=r.join("-");if(!d)return;const h=f.getElDialogById(d);if(!h)return;const n=s.querySelectorAllArray(h,`[data-view-page="${l}"]`);if(!n)return;if(!s.isVisible(n[0])){const c=p.TopDialogWorker.genViewPageHash(o,"prev");P.historySetState(!1,c);return}}$(a).dialog("close")}),document.addEventListener("submit",e=>{const t=e.target;(t.matches(".modal-body > form")||t.matches(".modal-layer-body > form"))&&e.preventDefault()}),document.addEventListener("keypress",e=>{if(!(e.target instanceof HTMLElement))return;const t=e.target;if(!(!t.closest(".ui-dialog .modal-body")||!(t.matches("input:not(.searcher), textarea:not(.searcher), select:not(.searcher), button:not(.searcher)")||t.hasAttribute("contenteditable")))&&e.key==="Enter"){if(t.classList.contains("autocomplete")){e.preventDefault();return}if(t.tagName==="TEXTAREA"){if(!e.ctrlKey&&!e.metaKey)return;const i=t.closest("form");i&&s.querySelectorAllArray(i,'button[type="submit"]').concat(s.querySelectorAllArray(i,'input[type="submit"]')).find(d=>s.isVisible(d))?.click()}}}),document.addEventListener("click",function(e){if(!(e.target instanceof HTMLElement)||!e.target.classList.contains("ui-widget-overlay"))return;let a,o=0;if(s.querySelectorAllArray(document,".ui-dialog").filter(r=>s.isVisible(r)).forEach(r=>{const d=Number(window.getComputedStyle(r).zIndex);d<o||(a=r,o=d)}),a){const r=a.querySelector(".ui-dialog-content");$(r).dialog("close")}}),window.addEventListener("resize",f.recalcPositions),f.recalcPositions())},O=':root{--dialog-border-color: var(--color-line-1);--dialog-loading-duration: 10s;--top-dialog-footer-height: var(--top-forms-base-height_s)}html.with_dialog{overflow:hidden!important}a[data-to-view]{cursor:pointer}.ui-widget-overlay{background:#040404;opacity:.5;filter:Alpha(Opacity=50)}.ui-dialog{border-radius:8px;border:none;padding:0}.ui-dialog.ui-widget{border:none}.ui-dialog-titlebar{display:none}.ui-dialog .ui-dialog-content{padding:0;overflow:visible}.ui-dialog .project_name{word-break:break-all}.ui-dialog-content{--dialog-header-height: 50px;--dialog-layer-pageSelector: 0px}.ui-dialog-content-withPageSelector{--dialog-layer-pageSelector: 42px}.modal-header,.modal-body,.modal-footer{font-size:14px;position:relative}.modal-body{padding:var(--padding-default)}.modal-body:has(>.topTable:first-child){padding-top:calc(var(--padding-default) / 4)}.modal-header{border-bottom:1px solid var(--dialog-border-color);height:var(--dialog-header-height);padding:0 var(--padding-default);display:flex;justify-content:space-between;align-items:center;gap:var(--top-padding-2)}.modal-header>*{padding:10px 0;font-size:16px}.modal-header>.top-title{margin:0;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-grow:1;order:50;display:flex;align-items:center}.modal-header>.top-title>div[class*=icon]{display:none}.modal-header>div:not(.top-title){order:60}.modal-header>div.close{--top-icon-color: var(--color-text-2);cursor:pointer;background:var(--color-layout-front-1);font-size:16px;order:100;animation-name:none!important}.modal-header>div.close:hover{--top-icon-color: var(--color-text-1)}.modal-header .links_icons{position:absolute;right:50px}.modal-header .links_icons [class*=icon-]{width:auto;height:auto;padding:0 5px;color:#d6dee0}.modal-header .links_icons [class*=icon-].active{color:var(--color-bg-warning-1)}.modal-layer-pageSelector{padding:0 10px!important}.modal-body{max-height:calc(var(--100vh) - var(--dialog-header-height) - 1px - var(--dialog-layer-pageSelector) - var(--top-dialog-footer-height) - 1px);overflow-y:auto;overflow-x:hidden;box-sizing:border-box;flex-grow:1}.modal-body hr{margin:16px -15px}.modal-body h4{padding:0;margin:0 0 10px;line-height:normal}.modal-body .inner{padding:var(--padding-default);margin:0 calc(0px - var(--padding-default));position:relative}.modal-body .inner .bt{border-top:1px dashed var(--color-layout-front-primary-3);position:absolute;top:0;right:0;left:0}.modal-body .inner .bb{border-bottom:1px dashed var(--color-layout-front-primary-3);position:absolute;right:0;bottom:0;left:0}.modal-body .inner.color-1{background:var(--color-layout-front-primary-3);color:var(--color-text-1)}.modal-body .inner strong{color:var(--color-text-1)}.modal-body .comment{line-height:18px}.modal-footer{min-height:var(--top-dialog-footer-height);padding:var(--top-gap-2);display:flex;flex-shrink:0;align-items:center;justify-content:flex-end;gap:var(--top-gap-2)}.modal-footer .modal-footer-btn-left{margin-right:auto}.modal-footer>.btn.full_width,.modal-footer>.top-button.full_width{flex-grow:1;align-self:flex-end}.modal-footer-fullWith{flex-wrap:wrap}.modal-footer-fullWith>*{flex-grow:1}.modal-footer-fullWith>.top-info{flex-grow:5}.modal-footer-fullWith>*:empty{flex-grow:0}.ui-dialog-content>.modal-layer>[data-view-page]>input[type=submit]{position:absolute;visibility:hidden}.help_popup .modal-header{display:none}.help_popup .modal-header a{top:2px;z-index:10}.help_popup .modal-header .top-title{display:none}.modal-layer{overflow:hidden}.modal-layer a[data-top-icon]:empty{color:var(--color-text-4);text-decoration:none}.modal-layer>[data-view-page]>div>div.buttons{display:flex;white-space:nowrap;gap:var(--top-padding-1)}.modal-layer>[data-view-page]>div>div.buttons:empty{display:none}.modal-layer>[data-view-page]>div>div.buttons>div,.modal-layer>[data-view-page]>div>div.buttons>a{cursor:pointer;width:auto;height:auto;min-width:auto;min-height:auto;padding:10px 9px;color:var(--color-text-4)}.modal-layer>[data-view-page]>div>div.buttons>div:hover{color:var(--color-text-2)}.modal-layer>[data-view-page]>div>div.buttons>div.hidden{display:none!important}.ui-dialog-content[data-view-page-active]{display:flex!important;flex-direction:column;justify-items:stretch}.ui-dialog-content>.modal-layer{display:flex!important;align-items:stretch;position:relative}.ui-dialog-content.i-change-page>.modal-layer{overflow:hidden}.ui-dialog-content>.modal-layer>[data-view-page]{width:100%;position:relative;display:none;flex-direction:column;justify-content:space-between;animation:.3s cubic-bezier(.4,0,.2,1) forwards}.ui-dialog-content>.modal-layer>[data-view-page].active{display:flex}.ui-dialog-content>.modal-layer>[data-view-page].reverse{animation-direction:reverse}.ui-dialog-content>.modal-layer>[data-view-page].center-to-left,.ui-dialog-content>.modal-layer>[data-view-page].right-to-center{display:flex;position:absolute;inset:0}.ui-dialog-content>.modal-layer>[data-view-page].center-to-left>div,.ui-dialog-content>.modal-layer>[data-view-page].right-to-center>div{overflow:hidden}.ui-dialog-content>.modal-layer-header{border-bottom:1px solid var(--dialog-border-color);min-height:var(--dialog-header-height)}.ui-dialog-content>.modal-layer-header>[data-view-page]>.modal-header{border:none;background:none}.ui-dialog-content>.modal-layer-header>[data-view-page]>.modal-header>*{animation:.3s cubic-bezier(.4,0,.2,1) forwards}.ui-dialog-content>.modal-layer-header>[data-view-page].reverse>.modal-header>*{animation-direction:reverse}.ui-dialog-content>.modal-layer-header>[data-view-page].center-to-left>.modal-header>.top-title{animation-name:dialog-center-to-left-header-title}.ui-dialog-content>.modal-layer-header>[data-view-page].right-to-center>.modal-header>.top-title{animation-name:dialog-right-to-center-header-title}.ui-dialog-content>.modal-layer-header>[data-view-page].center-to-left>.modal-header>[class*=widget-]{animation-name:dialog-center-to-left-header-title}.ui-dialog-content>.modal-layer-header>[data-view-page].right-to-center>.modal-header>[class*=widget-]{animation-name:dialog-right-to-center-header-title}.ui-dialog-content>.modal-layer-header>[data-view-page].center-to-left>.modal-header>div{animation-name:dialog-center-to-left-header-icons}.ui-dialog-content>.modal-layer-header>[data-view-page].right-to-center>.modal-header>div{animation-name:dialog-right-to-center-header-icons}.ui-dialog-content>.modal-layer-body{border-radius:0 0 8px 8px;max-height:calc(var(--100vh) - var(--dialog-header-height) - var(--dialog-layer-pageSelector) - var(--toolbar-height));flex-grow:2}.ui-dialog-content.i-change-page>.modal-layer-body>[data-view-page]{background:var(--color-layout-front-1)}.ui-dialog-content>.modal-layer-body>[data-view-page].center-to-left{animation-name:dialog-center-to-left}.ui-dialog-content>.modal-layer-body>[data-view-page].right-to-center{animation-name:dialog-right-to-center}.ui-dialog-content .modal-footer .second_level{box-sizing:border-box;background:var(--color-layout-front-1);width:100%;min-height:25px;display:flex;align-items:center;justify-content:center}.ui-dialog-content .modal-footer .second_level input{border-radius:8px;width:100%;height:var(--top-forms-base-height);padding:var(--top-padding-1) var(--top-padding-3);box-sizing:border-box}.ui-dialog-content>.modal-layer-body>[data-view-page].i-load-data{pointer-events:none}.ui-dialog-content>.modal-layer-body>[data-view-page].i-load-data:before{content:" ";background:#378dc6;width:0;height:4px;position:absolute;top:0;left:0;z-index:100;animation:top-loadbar var(--dialog-loading-duration) forwards}.ui-dialog-content.modal-expanded{width:100vw!important;height:calc(var(--100vh) + 10px)!important}.modal-header>[data-widget]{padding:0 8px;position:absolute;inset:0;opacity:0;overflow:hidden;align-items:center;visibility:hidden;transition:opacity .3s;z-index:1}.modal-header>[data-widget=search] div.cancel{opacity:0;transform:translate(100%);transition:transform,opacity;transition-duration:.3s}[data-view-page].i-show-search .modal-header>:not([data-widget=search]){visibility:hidden}[data-view-page].i-show-search [data-widget=search]{visibility:visible;opacity:1}[data-view-page].i-show-search [data-widget=search] .cancel{transform:translate(0);opacity:1}[data-view-page]>.modal-header>*{transition:opacity .3s}[data-view-page].i-show-search>.modal-header>div.buttons{opacity:0}.modal-layer .top-popup-wrapper{height:100%!important}@keyframes dialog-center-to-left-header-title{0%{transform:translate(0);opacity:1}75%{opacity:0}to{transform:translate(-30%);opacity:0}}@keyframes dialog-right-to-center-header-title{0%{transform:translate(100%);opacity:0}25%{opacity:0}to{transform:translate(0);opacity:1}}@keyframes dialog-center-to-left-header-icons{0%{transform:translate(0);opacity:1}35%{transform:translate(-20%);opacity:0}to{transform:translate(-20%);opacity:0}}@keyframes dialog-right-to-center-header-icons{0%{transform:translate(20%);opacity:0}65%{transform:translate(20%);opacity:0}to{transform:translate(0);opacity:1}}@keyframes dialog-center-to-left{0%{transform:translate(0);filter:brightness(1)}to{transform:translate(-30%);filter:brightness(.9)}}@keyframes dialog-right-to-center{0%{transform:translate(100%);box-shadow:#0000001a 0 0 10px}to{transform:translate(0);box-shadow:#0003 0 0 10px}}@media only screen and (max-width: 1480px){.win_side_panel_opener{display:none}}@media only screen and (min-width: 1480px){.ui-dialog-content.with_side_panel{box-shadow:#0003 0 0 6px}.ui-dialog-content.with_side_panel .modal-layer-body{background:var(--color-layout-front-1)}[data-widget=side_panel]{--side_panel_width: calc((100vw - 900px)/2 - 28px) ;box-sizing:border-box;background:var(--color-layout-front-1);max-width:var(--side_panel_width);padding:18px;position:absolute;top:calc(var(--dialog-header-height) + 1px + var(--dialog-layer-pageSelector));bottom:calc(var(--top-dialog-footer-height) + 1px);z-index:-1;display:block;transition:.2s}.win_side_panel_left{border-radius:8px 0 0 8px;right:100%}.win_side_panel_right{border-radius:0 8px 8px 0;left:100%}.win_side_panel_closed.win_side_panel_left{right:calc(100% - var(--side_panel_width))}.win_side_panel_closed.win_side_panel_right{left:calc(100% - var(--side_panel_width))}[data-widget=side_panel] .template{display:block}[data-widget=side_panel] .template>.header,[data-widget=side_panel] .template>.footer{display:flex}.win_side_panel_opener{cursor:pointer;background:var(--color-cyan);color:#fff;padding:4px;position:absolute;top:20px}.win_side_panel_closed .win_side_panel_opener:not(:hover){opacity:.3}.win_side_panel_left .win_side_panel_opener{border-radius:4px 0 0 4px;right:100%}.win_side_panel_right .win_side_panel_opener{border-radius:0 6px 6px 0;left:100%}}@media only screen and (max-height: 900px){html.with_dialog{background:#f1f1f1;overflow:hidden}.ui-dialog.me-tightly{border-radius:0;height:auto!important;position:fixed;top:0!important;bottom:0!important}.ui-dialog.me-tightly .ui-dialog-content{min-height:100%!important}.ui-dialog.me-tightly>div>.modal-body{position:absolute;top:var(--dialog-header-height);right:0;left:0;bottom:var(--dialog-header-height)}.ui-dialog.me-tightly>div>.modal-body:last-child{bottom:0}.ui-dialog.me-tightly>div>.modal-footer{position:absolute;right:0;bottom:0;left:0}.ui-dialog.me-tightly .modal-layer-body{border-radius:0;min-height:0!important}.ui-dialog.me-tightly .modal-layer-body .modal-footer{min-height:unset}}',H='html.with_dialog body{height:var(--100vh);overflow:hidden}.ui-widget-overlay{height:calc(100% - var(--toolbar-height))}.ui-dialog{border-radius:0;width:auto!important;height:auto!important;position:fixed;inset:0!important}.ui-dialog-content{width:100%!important;height:100%!important;min-width:0!important;max-width:100%!important}.modal-header>.top-title{text-align:center;font-size:14px}.modal-header>div.close{font-size:14px;order:1}.modal-header>div.close:before{content:""}.modal-body:last-child{bottom:0}.modal-footer{bottom:0}.modal-footer .second_level{padding:10px 8px}.modal-layer-body{min-height:0!important}.ui-dialog-content>.modal-layer-body{border-radius:0}.modal-body,.modal-footer{padding-right:12px;padding-left:12px}.modal-footer .btn:last-child{margin-right:12px}.modal-body .inner{padding:12px;margin:0 -12px;position:relative}',I=".modal-menu-opener{order:1!important}.modal-menu-opener:before{--top-icon-size: 20px;--top-icon-color: #FFF;--top-icon-width: var(--top-icon-size);border-radius:50%;background:var(--color-bg-primary-1);padding:3px;transition:transform .1s}.modal-menu-opener:hover:before{background:var(--color-bg-primary-2)}.modal-menu-opener.top-active:before{background:var(--color-bg-primary-2);transform:scale(.8)}.modal-layer .top-popup-wrapper{background:transparent;width:auto!important;padding:0!important;margin:0!important;top:0!important;right:0!important;left:0!important;transition:background .3s}.modal-layer .top-popup-wrapper>.top-popup[class],.modal-layer .top-popup-wrapper.with_notch>.top-popup[class]{border-radius:8px;border:none;margin:12px!important;max-width:100%;max-height:calc(100% - 24px);inset:0 0 auto!important;overflow:auto;display:flex;flex-direction:column;opacity:1;transform:translateY(calc(-100% - 24px));transition:transform .3s}.modal-layer .top-popup>.top-popup_header{background:var(--color-theme-50)}.modal-layer .top-theme-lite .top-popup>.top-popup_header .select{border:none}.modal-layer .top-theme-lite .top-popup>.top-popup_header .select .text{color:#fff}.modal-layer .top-theme-lite .top-popup>.top-popup_header .select .arrow{background:none}.modal-layer .top-popup-wrapper-shown:not(.top-popup-wrapper-closed){pointer-events:auto;background:#34495e40}@media only screen and (min-width: 1480px){.ui-dialog-content.with_side_panel{box-shadow:#0003 0 0 6px}.ui-dialog-content.with_side_panel .modal-layer-body{background:var(--color-layout-front-1)}[data-widget=side_panel]{--side_panel_width: calc((100vw - 900px)/2 - 28px) ;box-sizing:border-box;background:var(--color-layout-front-1);max-width:var(--side_panel_width);padding:18px;display:block;position:absolute;top:51px;bottom:51px;z-index:-1;transition:.2s}.win_side_panel_left{border-radius:8px 0 0 8px;right:100%}.win_side_panel_right{border-radius:0 8px 8px 0;left:100%}.win_side_panel_closed.win_side_panel_left{right:calc(100% - var(--side_panel_width))}.win_side_panel_closed.win_side_panel_right{left:calc(100% - var(--side_panel_width))}[data-widget=side_panel] .template{display:block}[data-widget=side_panel] .template>.header,[data-widget=side_panel] .template>.footer{display:flex}.win_side_panel_opener{cursor:pointer;background:var(--color-cyan);color:#fff;padding:4px;position:absolute;top:20px}.win_side_panel_closed .win_side_panel_opener:not(:hover){opacity:.3}.win_side_panel_left .win_side_panel_opener{border-radius:4px 0 0 4px;right:100%}.win_side_panel_right .win_side_panel_opener{border-radius:0 6px 6px 0;left:100%}}",F="html{--top-dialog-width: auto;--top-dialog-height: auto}.top-dialog{max-width:100vw}.top-dialog .modal-layer-body{height:var(--top-dialog-height)}",U=".top-dialog{width:var(--top-dialog-width)!important}";g.Core.insertStyleToPage(O),g.Core.insertStyleToPage(H,"m"),g.Core.insertStyleToPage(I,"pc"),g.Core.insertStyleToPage(F),g.Core.insertStyleToPage(U,"pc");let E,b=!1;const u=e=>!!e&&typeof e=="object"&&"jquery"in e,K=()=>{$.extend($.ui.dialog.prototype.options,{focus:e=>{e.target.focus(),$("[autofocus]",e.target)[0]?.focus()},create:e=>R(e.target),open:e=>Z(e.target),close:e=>G(e.target),modal:!0,resizable:!1,closeOnEscape:!1,width:"auto",minHeight:0}),$.ui.dialog.prototype._focusTabbable=$.noop,$.ui.dialog.prototype._moveToTopOriginal=$.ui.dialog.prototype._moveToTop,$.ui.dialog.prototype._moveToTop=function(){this._moveToTopOriginal();const e=$(this.element);e.trigger("dialogsMoveToTop",[e])},B(),b=!0},L=e=>{const t={};return e.dataset?.modal==="false"&&(t.modal=!1),e.dataset?.position&&(t.position=JSON.parse(e.dataset.position)),t},m=e=>document.getElementById(e),w=async(e,t,a)=>{if(!e.startsWith("dialog_"))return;const o=p.getDialogWorker(e);if(o&&(o.isOpened.value=!0,t!==void 0&&(o.pageActive.value=t),a!==void 0&&(o.pageActiveNext.value=a),await v.nextTick(),a)){const i=m(e);if(!i)return;i.querySelectorAll(`[data-view-page="${a}"]`).length||await A.waitWhile(()=>!i.querySelectorAll(`[data-view-page="${a}"]`).length)}},R=e=>{const t=e.querySelector(".modal-body");t&&(j.connectScrollShadow(t),p.TopDialogWorker.state.decoratorOnCreate?.(e),J(e))},J=e=>{$(e).on("aftershow.top-menu-popup","[data-top-popup]",(t,a)=>{const o=a[0];p.TopDialogWorker.getPairPage(o)?.[1]?.prepend(o)})},Z=async e=>{const t=e.dataset.viewPageActive,a=window.innerWidth;g.Core.state.documentClassModificators.set("top-dialog","with_dialog");const i=window.innerWidth-a;document.documentElement.scrollHeight>window.innerHeight&&(document.querySelector("html").style.marginRight=i+"px"),q(),p.getDialogWorker(e.getAttribute("id"))?.emit?.("open",t)},G=async e=>{const t=e.getAttribute("id"),a=e.dataset.viewPageActive;if(a){const r={vpn:p.TopDialogWorker.state.viewPageN,["view-"+t]:null};r["view-"+t]=null,(p.TopDialogWorker.state.viewPageN===0||p.TopDialogWorker.state.viewPageN===1)&&(r.vpn=null),P.setHashs(r,!1)}s.querySelectorAllArray(document,".ui-widget-overlay").filter(r=>s.isVisible(r)).length||(g.Core.state.documentClassModificators.delete("top-dialog"),document.querySelector("html").style.marginRight=""),$(e).trigger("viewAfterClose",[$(e)]);const i=p.getDialogWorker(t);i&&(i.isOpened.value=!1,i.emit?.("close",a),i.onCloseOnce&&(i.onCloseOnce(i.props,a),i.onCloseOnce=void 0)),window.dispatchEvent(new Event("resize"))},q=()=>{s.querySelectorAllArray(document,".ui-dialog").filter(t=>s.isVisible(t)&&t.querySelector(":scope > .ui-dialog-content")).map(t=>t.querySelector(":scope > .ui-dialog-content")).forEach(t=>{if(!t.querySelector(".modal-body"))return;const o=t.closest(".ui-dialog"),i=L(t);i.position??={of:window},$(t).dialog("option",i),o.classList.remove("me-tightly"),(o.clientHeight??0)>window.innerHeight&&o.classList.add("me-tightly")})},Q=async(e,t)=>{const o=/(\w+)[=-]([\w-]+)(?::([\w.:-]+))?/g.exec(e);if(o){const i=o[1],r=o[2],d=o[3];let l=[];d&&(l=d.split(":")),await V(i,r,l,t)}},V=async(e,t,a,o,i)=>{b||await new Promise((l,h)=>{const n=setInterval(()=>{b&&(clearInterval(n),l())},10)}),await v.nextTick();let r;if(typeof e=="object"?(u(e)&&(e=e?.[0]),r=e):r=m(e),!r&&typeof e=="string"&&p.TopDialogWorker.state.load&&(await p.TopDialogWorker.state.load(e),r=m(e),!r))throw new Error("Dialog no exists: "+e);if(!r)return;await x(r,t,a,o);const d=$(r);if(r?.classList.contains("ui-dialog-content"))d.dialog("open");else{const l=L(r);d.dialog(l)}i&&i(d)},x=async(e,t,a,o)=>{u(e)&&(e=e?.[0]),t===void 0&&(t=e.dataset.viewPageActive),t!==e.dataset.viewPageActive&&z(e)&&await A.sleep(100),a===void 0&&(a=[]),await w(e.getAttribute("id"),void 0,t);const i=s.querySelectorAllArray(e,".modal-layer"),r=i.reduce((n,c)=>{const y=c.querySelector(":scope > .active");return y&&n.push(y),n},[]),d=i.reduce((n,c)=>{const y=c.querySelector(`:scope > [data-view-page="${t}"]`);return y&&n.push(y),n},[]),l=a.join(":");if(o===void 0&&(o="next",(d[0]?.dataset.order??0)<(r[0]?.dataset.order??0)&&(o="prev")),!d.length)return;if(e.dataset.viewPageActive=t,d[0].classList.contains("active")){d[0].dataset.viewPageArgs!==l&&d.forEach(n=>{n.dataset.viewPageArgs=l}),W(e,d,t,a),S(e,d,t,a);return}d.forEach(n=>{n.dataset.viewPageArgs=l}),r.forEach(n=>{n.querySelector(".top-popup-wrapper")&&M.TopPopupWorker.close(n.querySelector(".top-popup-wrapper"))});const h=d[0].closest(".ui-dialog");switch(h&&!s.isVisible(h)&&(o="none"),r.length||(o="none"),s.isVisible(d[0])&&(o="none"),o){case"prev":{d.forEach(n=>{const c=n.parentNode?.querySelector(":scope > .active");c&&n.parentNode?.insertBefore(n,c)}),r.forEach(n=>{n.classList.add("right-to-center","reverse")}),d.forEach(n=>{n.classList.add("center-to-left","reverse")});break}case"next":{d.forEach(n=>{const c=n.parentNode?.querySelector(":scope > .active");c&&n.parentNode?.insertBefore(n,c.nextSibling)}),r.forEach(n=>{n?.classList.add("center-to-left")}),d.forEach(n=>{n.classList.add("right-to-center")});break}}if(e.setAttribute("view-page-active",t),r.forEach(n=>{n.classList.remove("active")}),d.forEach(n=>{n.classList.add("active")}),W(e,d,t,a),o){e.classList.add("i-change-page");const n=Number(window.getComputedStyle(d[0]).animationDuration.replace("s",""))*1e3;E=setTimeout(function(){w(e.getAttribute("id"),t,""),z(e),S(e,d,t,a)},n)}else await w(e.getAttribute("id"),t,""),S(e,d,t,a)},X=e=>{const i=s.querySelectorAllArray(e,".modal-layer").reduce((r,d)=>{const l=d.querySelector(":scope > .active");return l&&r.push(l),r},[]).reduce((r,d)=>{let l=d.previousElementSibling;for(;l&&!l.hasAttribute("data-view-page");)l=l.previousElementSibling;return l&&r.push(l),r},[])[0]?.dataset.viewPage;i?x(e,i,void 0,"prev"):$(e).dialog("close")},k=new Set,W=(e,t,a,o)=>{const i=e.getAttribute("id")+t[0].dataset.viewPage+a+o.join();k.has(i)||(k.add(i),setTimeout(function(){k.delete(i),$(e).trigger("viewBeforeOpen",[$(e),$(t),a,o])}))},S=(e,t,a,o)=>{setTimeout(function(){$(e).trigger("viewAfterOpen",[$(e),$(t),a,o])})},C=e=>(u(e)&&(e=e?.[0]),e.classList.contains("i-change-page")),z=e=>{if(!C(e))return!1;clearTimeout(E);const t=s.querySelectorAllArray(e,".modal-layer"),a=e.dataset.viewPageActive;return e.classList.remove("i-change-page"),t.forEach(o=>{o.querySelectorAll(":scope > [data-view-page]").forEach(i=>{i.classList.remove("center-to-left","right-to-center","reverse","active")})}),t.forEach(o=>{o.querySelector(`:scope > [data-view-page="${a}"]`)?.classList.add("active")}),!0},f={getElDialogById:m,updatePageVue:w,recalcPositions:q,toViewDirty:Q,toView:V,toViewPage:x,toPrevPage:X,setLoading:(e,t,a)=>{u(e)&&(e=e.toArray());const o=e.reduce((i,r)=>(r.hasAttribute("data-view-page")&&s.isVisible(r)&&i.push(r),i),[]);t?(a!==void 0&&o.forEach(i=>{i.style.setProperty("--dialog-loading-duration",a+"s")}),o.forEach(i=>{i.classList.add("i-load-data")})):(o.forEach(i=>{i.classList.remove("i-load-data")}),o.forEach(i=>{i.style.setProperty("--dialog-loading-duration","10s")}))},isLoading:e=>(u(e)&&(e=e?.[0]),e.classList.contains("i-load-data")),inAnimation:C,close:function(e){const t=m(e);if(!t)return;const a=$(t);a.dialog("instance")&&a.dialog("close")}};K(),_.TopDialogUtils=f,Object.defineProperty(_,Symbol.toStringTag,{value:"Module"})}));
|
|
2
|
+
//# sourceMappingURL=utils-BRJvuqe_.amd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-BRJvuqe_.amd.js","sources":["../../src/components/dialog/lib/utils.globalEvents.ts","../../src/components/dialog/lib/utils.ts"],"sourcesContent":["import { TopDialogUtils } from './utils';\r\nimport { TopDialogWorker } from './worker';\r\nimport { isVisible, querySelectorAllArray, querySelectorVisible } from '@/core/utils/dom';\r\nimport { historySetState } from '@/core/utils/route';\r\nimport type { ElTopDialog, ElTopDialogWrapper } from '@/components/dialog/lib/types';\r\n\r\nlet inited = false;\r\n\r\n/**\r\n * Инициализация глобальных событий для диалоговых окон\r\n *\r\n * Производится один раз при подключении диалогового окна\r\n *\r\n * События не размонтируются\r\n */\r\nexport const initDialogGlobalEvents = () => {\r\n\tif (inited) return;\r\n\tinited = true;\r\n\r\n\t/**\r\n\t * Закрытие диалога по Esc\r\n\t */\r\n\tdocument.addEventListener('keydown', (e) => {\r\n\t\tif (e.key !== 'Escape') return;\r\n\t\tif (!e.target || !(e.target instanceof HTMLElement)) return;\r\n\r\n\t\tconst el = e.target;\r\n\r\n\t\t// событие произошло вне диалогового окна\r\n\t\tif (!el.closest('.ui-dialog')) return;\r\n\r\n\t\tif (el.contentEditable === 'true' || el.contentEditable === 'plaintext-only') return;\r\n\r\n\t\t// не закрывать окно при открытом TopPopup\r\n\t\tif (querySelectorVisible(document.documentElement, '.top-popup-wrapper')) return;\r\n\r\n\t\t// не закрывать окно при работе с jquery autocomplete\r\n\t\tif (el.classList.contains('autocomplete')) return;\r\n\r\n\t\t// не закрывать окно при открытом fancybox\r\n\t\tif (querySelectorVisible(document.documentElement, '.fancybox-container')) return;\r\n\r\n\t\tconst elDialogs = querySelectorAllArray<ElTopDialog>(document, '.ui-dialog-content').filter((elDialog) => {\r\n\t\t\treturn isVisible(elDialog);\r\n\t\t});\r\n\r\n\t\t$(elDialogs[elDialogs.length - 1]).dialog('close');\r\n\t});\r\n\r\n\t/**\r\n\t * Закрытие диалога по кнопке закрыть\r\n\t */\r\n\tdocument.addEventListener('click', (e) => {\r\n\t\t// // навигация без истории\r\n\t\t// var $dialog = $(this).closest('.ui-dialog-content');\r\n\t\t// var viewName = $dialog.attr('id');\r\n\t\t// var pageName = getHash('view-' + viewName);\r\n\t\t// if (!pageName) {\r\n\t\t// \ttoPrevPage($dialog);\r\n\t\t//\r\n\t\t// \treturn;\r\n\t\t// }\r\n\t\t//\r\n\t\t// // навигация по истории\r\n\t\t// if (Core.state.isMobile && history.length > 1 && $(this).closest('.modal-layer').length) {\r\n\t\t// \tvar href = location.href;\r\n\t\t//\r\n\t\t// \thistory.go(-1);\r\n\t\t//\r\n\t\t// \tsetTimeout(() => {\r\n\t\t// \t\t// это первая страница в истории вкладки браузера\r\n\t\t// \t\tif (href === location.href) $(e.target).closest('.ui-dialog-content').dialog('close');\r\n\t\t// \t});\r\n\t\t// } else {\r\n\t\t// \t$(this).closest('.ui-dialog-content').dialog('close');\r\n\t\t// }\r\n\r\n\t\tif (!(e.target instanceof HTMLElement)) return;\r\n\r\n\t\tconst el = e.target.closest('[data-action=\"top-dialog-close\"]') as HTMLElement | null;\r\n\t\tif (!el) return;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tconst elDialog = el.closest<ElTopDialog>('.ui-dialog-content');\r\n\t\tif (!elDialog) return;\r\n\r\n\t\t// если к кнопке привязана ссылка, диалоговое окно не нужно закрывать\r\n\t\tconst toView = el.dataset.toView;\r\n\r\n\t\tif (toView == 'toPrevPage()') {\r\n\t\t\tTopDialogUtils.toPrevPage(elDialog);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (toView) {\r\n\t\t\tconst viewNameAndPageLink = toView.split('-');\r\n\t\t\tconst viewName = viewNameAndPageLink.shift();\r\n\t\t\tconst pageLink = viewNameAndPageLink.join('-');\r\n\r\n\t\t\tif (!viewName) return;\r\n\r\n\t\t\tconst elDialog = TopDialogUtils.getElDialogById(viewName);\r\n\t\t\tif (!elDialog) return;\r\n\r\n\t\t\tconst elToPages = querySelectorAllArray(elDialog, `[data-view-page=\"${pageLink}\"]`);\r\n\t\t\tif (!elToPages) return;\r\n\r\n\t\t\tif (!isVisible(elToPages[0])) {\r\n\t\t\t\tconst hash = TopDialogWorker.genViewPageHash(toView, 'prev');\r\n\r\n\t\t\t\t// // не убирает кнопку \"Вперед\" в браузере\r\n\t\t\t\t// history.replaceState(null, '', hash);\r\n\t\t\t\t// toViewDirty(toView, 'prev');\r\n\r\n\t\t\t\t// // добавляет текущую страницу в историю браузера\r\n\t\t\t\thistorySetState(false, hash);\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst $dialog = $(elDialog);\r\n\r\n\t\t$dialog.dialog('close');\r\n\t});\r\n\r\n\t/**\r\n\t * Все submit должны обрабатываться через js\r\n\t */\r\n\tdocument.addEventListener('submit', (e) => {\r\n\t\tconst elForm = e.target as HTMLElement;\r\n\r\n\t\tif (elForm.matches('.modal-body > form') || elForm.matches('.modal-layer-body > form')) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t});\r\n\r\n\t/**\r\n\t * Выполнение действия по нажатию Enter\r\n\t *\r\n\t * @todo Убрать `.searcher`\r\n\t */\r\n\tdocument.addEventListener('keypress', (e) => {\r\n\t\tif (!(e.target instanceof HTMLElement)) return;\r\n\r\n\t\tconst eventTarget = e.target;\r\n\r\n\t\tconst elModalBody = eventTarget.closest('.ui-dialog .modal-body');\r\n\t\tif (!elModalBody) return;\r\n\r\n\t\tconst isInput =\r\n\t\t\teventTarget.matches('input:not(.searcher), textarea:not(.searcher), select:not(.searcher), button:not(.searcher)')\r\n\t\t\t|| eventTarget.hasAttribute('contenteditable');\r\n\t\tif (!isInput) return;\r\n\r\n\t\t// if (e.keyCode !== 10 && e.key !== 'ENTER') return;\r\n\t\tif (e.key !== 'Enter') return;\r\n\r\n\t\t// не выполнять submit действий при работе с jquery autocomplete\r\n\t\tif (eventTarget.classList.contains('autocomplete')) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (eventTarget.tagName === 'TEXTAREA') {\r\n\t\t\tif (!e.ctrlKey && !e.metaKey) return;\r\n\r\n\t\t\tconst elForm = eventTarget.closest('form');\r\n\r\n\t\t\tif (elForm) {\r\n\t\t\t\t// Find visible submit buttons\r\n\t\t\t\tconst elSubmitButton = querySelectorAllArray(elForm, 'button[type=\"submit\"]')\r\n\t\t\t\t\t.concat(querySelectorAllArray(elForm, 'input[type=\"submit\"]'))\r\n\t\t\t\t\t.find((elSubmitButton) => {\r\n\t\t\t\t\t\treturn isVisible(elSubmitButton);\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\telSubmitButton?.click();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t/**\r\n\t * Закрытие диалога по клику вне окна\r\n\t */\r\n\tdocument.addEventListener('click', function (event) {\r\n\t\tif (!(event.target instanceof HTMLElement)) return;\r\n\r\n\t\tconst eventTarget = event.target;\r\n\r\n\t\tif (!eventTarget.classList.contains('ui-widget-overlay')) return;\r\n\r\n\t\tlet elDialogWrapperWithTopZIndex: ElTopDialogWrapper | undefined;\r\n\t\tlet topZIndex = 0;\r\n\r\n\t\tconst elDialogWrapperVisibles = querySelectorAllArray<ElTopDialogWrapper>(document, '.ui-dialog').filter((elDialogWrapper) => {\r\n\t\t\treturn isVisible(elDialogWrapper);\r\n\t\t});\r\n\r\n\t\telDialogWrapperVisibles.forEach((elDialogWrapper) => {\r\n\t\t\tconst zIndex = Number(window.getComputedStyle(elDialogWrapper).zIndex);\r\n\t\t\tif (zIndex < topZIndex) return;\r\n\r\n\t\t\telDialogWrapperWithTopZIndex = elDialogWrapper;\r\n\t\t\ttopZIndex = zIndex;\r\n\t\t});\r\n\r\n\t\tif (elDialogWrapperWithTopZIndex) {\r\n\t\t\tconst elDialog = elDialogWrapperWithTopZIndex.querySelector('.ui-dialog-content');\r\n\r\n\t\t\t$(elDialog).dialog('close');\r\n\t\t}\r\n\t});\r\n\r\n\twindow.addEventListener('resize', TopDialogUtils.recalcPositions);\r\n\tTopDialogUtils.recalcPositions();\r\n};\r\n","import 'jquery';\r\nimport { nextTick } from 'vue';\r\n\r\nimport Core from '@/core/core/core';\r\nimport { TopPopupWorker } from '@/components/popup/worker';\r\nimport { sleep, waitWhile } from '@/core/utils/system';\r\nimport { setHashs } from '@/core/utils/route';\r\nimport { connectScrollShadow } from '@/core/utils/scroll';\r\n\r\nimport type { ElTopDialog, ElTopDialogBody, ElTopDialogModalLayer, ElTopDialogPage, ElTopDialogWrapper, MoveDirection } from './types';\r\nimport { TopDialogWorker } from './worker';\r\nimport { initDialogGlobalEvents } from './utils.globalEvents';\r\nimport { getDialogWorker } from '../dialog/dialogs/dialogs.vue';\r\n\r\nimport css from '../dialog/style/dialog.css?inline';\r\nimport cssM from '../dialog/style/dialog.m.css?inline';\r\nimport cssPC from '../dialog/style/dialog.pc.css?inline';\r\nimport cssModern from '../dialog/style/modern/dialog.css?inline';\r\nimport cssModernPC from '../dialog/style/modern/dialog.pc.css?inline';\r\nimport { isVisible, querySelectorAllArray } from '@/core/utils/dom';\r\n\r\nCore.insertStyleToPage(css);\r\nCore.insertStyleToPage(cssM, 'm');\r\nCore.insertStyleToPage(cssPC, 'pc');\r\nCore.insertStyleToPage(cssModern);\r\nCore.insertStyleToPage(cssModernPC, 'pc');\r\n\r\nlet timerClearAnimation: NodeJS.Timeout;\r\nlet isInited = false;\r\n\r\n/**\r\n * Является ли элемент JQuery<HTMLElement>\r\n */\r\nconst isElJQuery = (el: JQuery<HTMLElement> | HTMLElement | HTMLElement[]) => {\r\n\treturn !!el && typeof el === 'object' && 'jquery' in el;\r\n};\r\n\r\nconst init = () => {\r\n\t$.extend($.ui.dialog.prototype.options, {\r\n\t\tfocus: (e: any) => {\r\n\t\t\te.target.focus();\r\n\r\n\t\t\t$('[autofocus]', e.target)[0]?.focus();\r\n\r\n\t\t\t// setTimeout(function () {\r\n\t\t\t// \tif ($('[autofocus]', e.target).length) return;\r\n\t\t\t// \t$('.modal-footer button:first, .modal-body :input:first', e.target).eq(0).focus();\r\n\t\t\t//\r\n\t\t\t// \t// fix пропадающего autocomplete при нажатии на scroll в autocomplete\r\n\t\t\t// \t$(e.target).add($(e.target).closest('.ui-dialog')).removeAttr('tabindex');\r\n\t\t\t// });\r\n\t\t},\r\n\t\tcreate: (e: any) => onCreate(e.target),\r\n\t\topen: (e: any) => onOpen(e.target),\r\n\t\tclose: (e: any) => onClose(e.target),\r\n\t\tmodal: true,\r\n\t\tresizable: false,\r\n\t\tcloseOnEscape: false,\r\n\t\twidth: 'auto',\r\n\t\tminHeight: 0,\r\n\t});\r\n\r\n\t$.ui.dialog.prototype._focusTabbable = $.noop;\r\n\r\n\t$.ui.dialog.prototype._moveToTopOriginal = $.ui.dialog.prototype._moveToTop;\r\n\t$.ui.dialog.prototype._moveToTop = function () {\r\n\t\tthis._moveToTopOriginal();\r\n\r\n\t\tconst $dialog = $(this.element);\r\n\t\t$dialog.trigger('dialogsMoveToTop', [$dialog]);\r\n\t};\r\n\r\n\tinitDialogGlobalEvents();\r\n\r\n\tisInited = true;\r\n};\r\n\r\n/**\r\n * Получить настройки диалогового окна из Vue компонента\r\n */\r\nconst genVueOptions = (elDialog: ElTopDialog) => {\r\n\tconst options: {\r\n\t\tmodal?: boolean,\r\n\t\tposition?: any,\r\n\t} = {};\r\n\r\n\tif (elDialog.dataset?.modal === 'false') options.modal = false;\r\n\tif (elDialog.dataset?.position) options.position = JSON.parse(elDialog.dataset.position);\r\n\r\n\treturn options;\r\n};\r\n\r\nconst getElDialogById = (id: string) => {\r\n\treturn <ElTopDialog | null>document.getElementById(id);\r\n};\r\n\r\n/**\r\n * Сменить состояние диалогового окна Vue\r\n */\r\nconst updatePageVue = async (dialogId: string, pageName?: string, pageNameNext?: string) => {\r\n\tif (!dialogId.startsWith('dialog_')) return;\r\n\r\n\tconst dialog = getDialogWorker(dialogId);\r\n\tif (!dialog) return;\r\n\r\n\tdialog.isOpened.value = true;\r\n\tif (pageName !== undefined) dialog.pageActive.value = pageName;\r\n\tif (pageNameNext !== undefined) dialog.pageActiveNext.value = pageNameNext;\r\n\r\n\tawait nextTick();\r\n\r\n\tif (pageNameNext) {\r\n\t\tconst elDialog = getElDialogById(dialogId);\r\n\t\tif (!elDialog) return;\r\n\r\n\t\tconst elNextpages = elDialog.querySelectorAll(`[data-view-page=\"${pageNameNext}\"]`);\r\n\r\n\t\tif (!elNextpages.length) {\r\n\t\t\tawait waitWhile(() => !elDialog.querySelectorAll(`[data-view-page=\"${pageNameNext}\"]`).length);\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/**\r\n * Callback for jQuery dialog onCreate\r\n */\r\nconst onCreate = (elDialog: ElTopDialog) => {\r\n\tconst elDialogBody = elDialog.querySelector<ElTopDialogBody>('.modal-body');\r\n\tif (!elDialogBody) return;\r\n\r\n\tconnectScrollShadow(elDialogBody);\r\n\r\n\tTopDialogWorker.state.decoratorOnCreate?.(elDialog);\r\n\r\n\tinitPopup(elDialog);\r\n};\r\n\r\n/**\r\n * Инициирование событий TopPopup в диалоговом окне\r\n */\r\nconst initPopup = (elDialog: HTMLElement) => {\r\n\t$(elDialog).on('aftershow.top-menu-popup', '[data-top-popup]', (_e, $popup) => {\r\n\t\t// перенести popup в корневой элемент страницы диалогового окна\r\n\t\tconst elPopup = $popup[0];\r\n\r\n\t\t// перенести popup в корневой элемент страницы диалогового окна\r\n\t\tconst elPageContents = TopDialogWorker.getPairPage(elPopup);\r\n\t\telPageContents?.[1]?.prepend(elPopup);\r\n\t});\r\n};\r\n\r\n/**\r\n * Callback for jQuery dialog onOpen\r\n */\r\nconst onOpen = async (elDialog: ElTopDialog) => {\r\n\tconst pageName = elDialog.dataset.viewPageActive;\r\n\r\n\tconst w1 = window.innerWidth;\r\n\r\n\tCore.state.documentClassModificators.set('top-dialog', 'with_dialog');\r\n\r\n\tconst w2 = window.innerWidth;\r\n\r\n\tconst scrollBarWidth = w2 - w1;\r\n\tif (document.documentElement.scrollHeight > window.innerHeight) document.querySelector('html')!.style.marginRight = scrollBarWidth + 'px';\r\n\r\n\trecalcPositions();\r\n\r\n\tconst dialog = getDialogWorker(elDialog.getAttribute('id')!);\r\n\tdialog?.emit?.('open', pageName);\r\n};\r\n\r\n/**\r\n * Callback for jQuery dialog onClose\r\n */\r\nconst onClose = async (elDialog: ElTopDialog) => {\r\n\tconst viewName = elDialog.getAttribute('id');\r\n\tconst pageName = elDialog.dataset.viewPageActive;\r\n\r\n\tif (pageName) {\r\n\t\tconst hashData = {\r\n\t\t\tvpn: TopDialogWorker.state.viewPageN as number | null,\r\n\t\t\t['view-' + viewName]: null,\r\n\t\t};\r\n\t\thashData['view-' + viewName] = null;\r\n\r\n\t\tif (TopDialogWorker.state.viewPageN === 0 || TopDialogWorker.state.viewPageN === 1) {\r\n\t\t\thashData.vpn = null;\r\n\t\t}\r\n\r\n\t\tsetHashs(hashData, false);\r\n\t}\r\n\r\n\tconst elUiWidgetOverlayVisibles = querySelectorAllArray(document, '.ui-widget-overlay').filter((el) => {\r\n\t\treturn isVisible(el);\r\n\t});\r\n\r\n\tif (!elUiWidgetOverlayVisibles.length) {\r\n\t\tCore.state.documentClassModificators.delete('top-dialog');\r\n\r\n\t\tdocument.querySelector('html')!.style.marginRight = '';\r\n\t}\r\n\r\n\t$(elDialog).trigger('viewAfterClose', [$(elDialog)]);\r\n\r\n\tconst dialog = getDialogWorker(viewName);\r\n\r\n\tif (dialog) {\r\n\t\tdialog.isOpened.value = false;\r\n\t\tdialog.emit?.('close', pageName);\r\n\r\n\t\tif (dialog.onCloseOnce) {\r\n\t\t\tdialog.onCloseOnce(dialog.props, pageName);\r\n\t\t\tdialog.onCloseOnce = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t// после закрытия диалога может потребоваться пересчет позиций элементов\r\n\twindow.dispatchEvent(new Event('resize'));\r\n};\r\n\r\n/**\r\n * Пересчитать положения и размеры открытых диалоговых окон\r\n */\r\nconst recalcPositions = () => {\r\n\tconst elDialogVisibilityes = querySelectorAllArray(document, '.ui-dialog').filter((el) => {\r\n\t\treturn isVisible(el) && el.querySelector<ElTopDialog>(':scope > .ui-dialog-content');\r\n\t}).map((el) => {\r\n\t\treturn el.querySelector<ElTopDialog>(':scope > .ui-dialog-content')!;\r\n\t});\r\n\r\n\telDialogVisibilityes.forEach((elDialog) => {\r\n\t\tconst elDialogBody = elDialog.querySelector<ElTopDialogBody>('.modal-body');\r\n\t\tif (!elDialogBody) return;\r\n\r\n\t\tconst elDialogWrapper = elDialog.closest('.ui-dialog');\r\n\r\n\t\tconst options = genVueOptions(elDialog);\r\n\r\n\t\toptions.position ??= { of: window };\r\n\r\n\t\tconst $dialog = $(elDialog);\r\n\t\t$dialog.dialog('option', options);\r\n\r\n\t\telDialogWrapper.classList.remove('me-tightly');\r\n\t\tif ((elDialogWrapper.clientHeight ?? 0) > window.innerHeight) elDialogWrapper.classList.add('me-tightly');\r\n\t});\r\n};\r\n\r\n/**\r\n * Переход к view page по неразобранной ссылке в формате: {viewName}-{pageName}[:args]\r\n */\r\nconst toViewDirty = async (toViewPageName: string, moveDirection?: MoveDirection) => {\r\n\tconst regexp = /(\\w+)[=-]([\\w-]+)(?::([\\w.:-]+))?/g;\r\n\tconst toViewParts = regexp.exec(toViewPageName);\r\n\tif (toViewParts) {\r\n\t\tconst viewName = toViewParts[1];\r\n\t\tconst pageName = toViewParts[2];\r\n\t\tconst argsString = toViewParts[3];\r\n\r\n\t\tlet args: string[] = [];\r\n\t\tif (argsString) args = argsString.split(':');\r\n\r\n\t\tawait toView(viewName, pageName, args, moveDirection);\r\n\t}\r\n};\r\n\r\n/**\r\n * Открыть диалоговое окно, возможно указать нужную страницу\r\n * @param viewNameOrElDialog - id страницы окна или элемент окна\r\n * @param pageName - имя страницы\r\n * @param args - аргументы, набор проивзольных параметров, которые могут обрабатываться каждым окном по своему\r\n * @param moveDirection\r\n * @param callback - функция, которая будет запущена после октытия страницы\r\n */\r\nconst toView = async (\r\n\tviewNameOrElDialog: ElTopDialog | JQuery<ElTopDialog> | string,\r\n\tpageName?: string,\r\n\targs?: string[],\r\n\tmoveDirection?: MoveDirection,\r\n\tcallback?: Function,\r\n) => {\r\n\tif (!isInited) {\r\n\t\tawait new Promise<void>((resolve, _reject) => {\r\n\t\t\tconst timer = setInterval(() => {\r\n\t\t\t\tif (!isInited) return;\r\n\r\n\t\t\t\tclearInterval(timer);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}, 10);\r\n\t\t});\r\n\t}\r\n\r\n\tawait nextTick();\r\n\r\n\tlet elDialog: ElTopDialog | null;\r\n\tif (typeof (viewNameOrElDialog) === 'object') {\r\n\t\tif (isElJQuery(viewNameOrElDialog)) viewNameOrElDialog = viewNameOrElDialog?.[0]; // todo: убрать после переписки jquery на сайте\r\n\r\n\t\telDialog = viewNameOrElDialog;\r\n\t} else {\r\n\t\telDialog = getElDialogById(viewNameOrElDialog);\r\n\t}\r\n\r\n\t// Диалоговое окно еще не загружено\r\n\tif (!elDialog && typeof viewNameOrElDialog === 'string' && TopDialogWorker.state.load) {\r\n\t\tawait TopDialogWorker.state.load(viewNameOrElDialog);\r\n\r\n\t\telDialog = getElDialogById(viewNameOrElDialog);\r\n\t\tif (!elDialog) {\r\n\t\t\tthrow new Error('Dialog no exists: ' + viewNameOrElDialog);\r\n\t\t}\r\n\t}\r\n\r\n\tif (!elDialog) return;\r\n\r\n\tawait toViewPage(elDialog, pageName, args, moveDirection);\r\n\r\n\tconst $dialog = $(elDialog);\r\n\r\n\tif (elDialog?.classList.contains('ui-dialog-content')) {\r\n\t\t// var zIndexMax = 0;\r\n\t\t// $.map($('.ui-dialog'), function (el) {\r\n\t\t// \tvar zIndex = $(el).css('z-index') * 1;\r\n\t\t// \tif (zIndex > zIndexMax) zIndexMax = zIndex;\r\n\t\t// });\r\n\t\t//\r\n\t\t// if ($dialog.is(':hidden')) $dialog.dialog('open');\r\n\t\t//\r\n\t\t// var $dialogWrapper = $dialog.parent();\r\n\t\t// var $dialogOverlay = $dialogWrapper.next();\r\n\t\t//\r\n\t\t// if ($dialogWrapper.css('z-index') * 1 < zIndexMax) {\r\n\t\t// \t$dialogWrapper.css('z-index', zIndexMax + 2);\r\n\t\t// \t$dialogOverlay.css('z-index', zIndexMax + 1);\r\n\t\t// }\r\n\r\n\t\t$dialog.dialog('open');\r\n\t} else {\r\n\t\tconst options = genVueOptions(elDialog);\r\n\r\n\t\t$dialog.dialog(options);\r\n\t}\r\n\r\n\tif (callback) callback($dialog);\r\n};\r\n\r\nconst toViewPage = async (elDialog: ElTopDialog | JQuery<ElTopDialog>, pageName?: string, args?: string[], moveDirection?: MoveDirection) => {\r\n\t// todo: убрать после переписки jquery на сайте\r\n\tif (isElJQuery(elDialog)) elDialog = elDialog?.[0];\r\n\r\n\tif (pageName === undefined) pageName = elDialog.dataset.viewPageActive;\r\n\r\n\tif (pageName !== elDialog.dataset.viewPageActive) {\r\n\t\tconst stopped = stopAnimations(elDialog);\r\n\t\tif (stopped) await sleep(100);\r\n\t}\r\n\r\n\tif (args === undefined) args = [];\r\n\r\n\tawait updatePageVue(elDialog.getAttribute('id') as string, undefined, pageName);\r\n\r\n\tconst elModalLayers = querySelectorAllArray<ElTopDialogModalLayer>(elDialog, '.modal-layer');\r\n\tconst elCurrentPages = elModalLayers.reduce<ElTopDialogPage[]>((acc, elModalLayer) => {\r\n\t\tconst elCurrentPage = elModalLayer.querySelector<ElTopDialogPage>(':scope > .active');\r\n\t\tif (elCurrentPage) {\r\n\t\t\tacc.push(elCurrentPage);\r\n\t\t}\r\n\r\n\t\treturn acc;\r\n\t}, []);\r\n\r\n\tconst elNextPages = elModalLayers.reduce<ElTopDialogPage[]>((acc, elModalLayer) => {\r\n\t\tconst elNextPage = elModalLayer.querySelector<ElTopDialogPage>(`:scope > [data-view-page=\"${pageName}\"]`);\r\n\t\tif (elNextPage) {\r\n\t\t\tacc.push(elNextPage);\r\n\t\t}\r\n\r\n\t\treturn acc;\r\n\t}, []);\r\n\r\n\tconst argsString = args.join(':');\r\n\r\n\tif (moveDirection === undefined) {\r\n\t\tmoveDirection = 'next';\r\n\t\tif ((elNextPages[0]?.dataset.order ?? 0) < (elCurrentPages[0]?.dataset.order ?? 0)) moveDirection = 'prev';\r\n\t}\r\n\r\n\tif (!elNextPages.length) return;\r\n\r\n\telDialog.dataset.viewPageActive = pageName;\r\n\r\n\t// запрашиваемая страница уже открыта\r\n\tif (elNextPages[0].classList.contains('active')) {\r\n\t\tif (elNextPages[0].dataset.viewPageArgs !== argsString) {\r\n\t\t\telNextPages.forEach((elNextPage) => {\r\n\t\t\t\telNextPage.dataset.viewPageArgs = argsString;\r\n\t\t\t});\r\n\r\n\t\t\t// dialogs.beforeOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\t\t// dialogs.afterOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\t}\r\n\r\n\t\tbeforeOpenViewPage(elDialog, elNextPages, pageName, args);\r\n\t\tafterOpenViewPage(elDialog, elNextPages, pageName, args);\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\telNextPages.forEach((elNextPage) => {\r\n\t\telNextPage.dataset.viewPageArgs = argsString;\r\n\t});\r\n\r\n\telCurrentPages.forEach((elCurrentPage) => {\r\n\t\tif (elCurrentPage.querySelector('.top-popup-wrapper')) {\r\n\t\t\tTopPopupWorker.close(elCurrentPage.querySelector('.top-popup-wrapper')!);\r\n\t\t}\r\n\t});\r\n\r\n\tconst elDialogWrapper = elNextPages[0].closest<ElTopDialogWrapper>('.ui-dialog');\r\n\r\n\tif (elDialogWrapper && !isVisible(elDialogWrapper)) moveDirection = 'none';\r\n\tif (!elCurrentPages.length) moveDirection = 'none';\r\n\tif (isVisible(elNextPages[0])) moveDirection = 'none';\r\n\r\n\tswitch (moveDirection) {\r\n\t\tcase 'prev': {\r\n\t\t\telNextPages.forEach((elNextPage) => {\r\n\t\t\t\tconst elActive = elNextPage.parentNode?.querySelector(':scope > .active');\r\n\t\t\t\tif (elActive) elNextPage.parentNode?.insertBefore(elNextPage, elActive);\r\n\t\t\t});\r\n\r\n\t\t\telCurrentPages.forEach((elCurrentPage) => {\r\n\t\t\t\telCurrentPage.classList.add('right-to-center', 'reverse');\r\n\t\t\t});\r\n\r\n\t\t\telNextPages.forEach((elNextPage) => {\r\n\t\t\t\telNextPage.classList.add('center-to-left', 'reverse');\r\n\t\t\t});\r\n\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tcase 'next': {\r\n\t\t\telNextPages.forEach((elNextPage) => {\r\n\t\t\t\tconst elActive = elNextPage.parentNode?.querySelector(':scope > .active');\r\n\t\t\t\tif (elActive) elNextPage.parentNode?.insertBefore(elNextPage, elActive.nextSibling);\r\n\t\t\t});\r\n\r\n\t\t\telCurrentPages.forEach((elCurrentPage) => {\r\n\t\t\t\telCurrentPage?.classList.add('center-to-left');\r\n\t\t\t});\r\n\r\n\t\t\telNextPages.forEach((elNextPage) => {\r\n\t\t\t\telNextPage.classList.add('right-to-center');\r\n\t\t\t});\r\n\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\telDialog.setAttribute('view-page-active', pageName);\r\n\r\n\telCurrentPages.forEach((elCurrentPage) => {\r\n\t\telCurrentPage.classList.remove('active');\r\n\t});\r\n\r\n\telNextPages.forEach((elNextPage) => {\r\n\t\telNextPage.classList.add('active');\r\n\t});\r\n\r\n\tbeforeOpenViewPage(elDialog, elNextPages, pageName, args);\r\n\r\n\tif (moveDirection) {\r\n\t\telDialog.classList.add('i-change-page');\r\n\r\n\t\tconst delay = Number(window.getComputedStyle(elNextPages[0]).animationDuration.replace('s', '')) * 1000;\r\n\r\n\t\ttimerClearAnimation = setTimeout(function () {\r\n\t\t\tupdatePageVue(elDialog.getAttribute('id'), pageName, '');\r\n\t\t\tstopAnimations(elDialog);\r\n\t\t\tafterOpenViewPage(elDialog, elNextPages, pageName, args);\r\n\t\t}, delay);\r\n\t} else {\r\n\t\tawait updatePageVue(elDialog.getAttribute('id'), pageName, '');\r\n\t\tafterOpenViewPage(elDialog, elNextPages, pageName, args);\r\n\t}\r\n};\r\n\r\n/**\r\n * К предыдущему представлению\r\n */\r\nconst toPrevPage = (elDialog: ElTopDialog) => {\r\n\tconst elModalLayers = querySelectorAllArray<ElTopDialogModalLayer>(elDialog, '.modal-layer');\r\n\tconst elCurrentPages = elModalLayers.reduce<ElTopDialogPage[]>((acc, elModalLayer) => {\r\n\t\tconst elCurrentPage = elModalLayer.querySelector<ElTopDialogPage>(':scope > .active');\r\n\r\n\t\tif (elCurrentPage) {\r\n\t\t\tacc.push(elCurrentPage);\r\n\t\t}\r\n\r\n\t\treturn acc;\r\n\t}, []);\r\n\r\n\tconst elPrevPages = elCurrentPages.reduce<ElTopDialogPage[]>((acc, elCurrentPage) => {\r\n\t\tlet elPrevPage = elCurrentPage.previousElementSibling as ElTopDialogPage | null;\r\n\t\twhile (elPrevPage && !elPrevPage.hasAttribute('data-view-page')) {\r\n\t\t\telPrevPage = elPrevPage.previousElementSibling as ElTopDialogPage | null;\r\n\t\t}\r\n\r\n\t\tif (elPrevPage) acc.push(elPrevPage);\r\n\r\n\t\treturn acc;\r\n\t}, []);\r\n\r\n\tconst prevPageName = (elPrevPages[0])?.dataset.viewPage;\r\n\r\n\tif (prevPageName) {\r\n\t\tvoid toViewPage(elDialog, prevPageName, undefined, 'prev');\r\n\t} else {\r\n\t\tconst $dialog = $(elDialog);\r\n\t\t$dialog.dialog('close');\r\n\t}\r\n};\r\n\r\n/**\r\n * Для обработки событий вне vue\r\n */\r\nconst beforeOpenViewPageTimers = new Set();\r\nconst beforeOpenViewPage = (elDialog: ElTopDialog, elPages: ElTopDialogPage[], pageName: string, args: string[]) => {\r\n\t// группировка цепочки событий\r\n\t// запрос на открытие страницы может выполняться несколько раз, чаще такое может быть при открытии, загрузке и переходе сразу к нужной странице\r\n\tconst eventKey = elDialog.getAttribute('id') + elPages[0].dataset.viewPage + pageName + args.join();\r\n\r\n\tif (beforeOpenViewPageTimers.has(eventKey)) return;\r\n\tbeforeOpenViewPageTimers.add(eventKey);\r\n\r\n\tsetTimeout(function () {\r\n\t\tbeforeOpenViewPageTimers.delete(eventKey);\r\n\r\n\t\t$(elDialog).trigger('viewBeforeOpen', [$(elDialog), $(elPages), pageName, args]);\r\n\t});\r\n};\r\n\r\n/**\r\n * Для обработки событий вне vue\r\n */\r\nconst afterOpenViewPage = (elDialog: ElTopDialog, elPages: ElTopDialogPage[], pageName: string, args: string[]) => {\r\n\tsetTimeout(function () {\r\n\t\t$(elDialog).trigger('viewAfterOpen', [$(elDialog), $(elPages), pageName, args]);\r\n\t});\r\n};\r\n\r\n/**\r\n * Получить состояние: Диалоговое окно находится в состоянии смены страницы\r\n */\r\nconst inAnimation = (elDialog: ElTopDialog | JQuery<ElTopDialog>) => {\r\n\tif (isElJQuery(elDialog)) elDialog = elDialog?.[0]; // todo: убрать после переписки jquery на сайте\r\n\r\n\treturn elDialog.classList.contains('i-change-page');\r\n};\r\n\r\n/**\r\n * Остановить анимацию смены страницы\r\n *\r\n * @returns Вернет true, если анимация производилась и была остановлена\r\n */\r\nconst stopAnimations = (elDialog: ElTopDialog) => {\r\n\tif (!inAnimation(elDialog)) return false;\r\n\r\n\tclearTimeout(timerClearAnimation);\r\n\r\n\tconst elModalLayers = querySelectorAllArray(elDialog, '.modal-layer');\r\n\r\n\tconst pageName = elDialog.dataset.viewPageActive;\r\n\telDialog.classList.remove('i-change-page');\r\n\r\n\telModalLayers.forEach((elModalLayer) => {\r\n\t\telModalLayer.querySelectorAll(':scope > [data-view-page]').forEach((el) => {\r\n\t\t\tel.classList.remove('center-to-left', 'right-to-center', 'reverse', 'active');\r\n\t\t});\r\n\t});\r\n\r\n\telModalLayers.forEach((elModalLayer) => {\r\n\t\telModalLayer.querySelector(`:scope > [data-view-page=\"${pageName}\"]`)?.classList.add('active');\r\n\t});\r\n\r\n\treturn true;\r\n};\r\n\r\n/**\r\n * Закрыть диалоговое окно\r\n */\r\nconst close = function (dialogId: string) {\r\n\tconst elDialog = getElDialogById(dialogId);\r\n\tif (!elDialog) return;\r\n\r\n\tconst $dialog = $(elDialog);\r\n\r\n\tif (!$dialog.dialog('instance')) return;\r\n\r\n\t$dialog.dialog('close');\r\n};\r\n\r\n/**\r\n * Управление props.isLoading\r\n */\r\nconst setLoading = (elPages: ElTopDialogPage[] | JQuery<ElTopDialogPage>, isLoading: boolean, duration?: number) => {\r\n\tif (isElJQuery(elPages)) elPages = elPages.toArray(); // todo: убрать после переписки jquery на сайте\r\n\r\n\tconst elPagesVisibleds = elPages.reduce<ElTopDialogPage[]>((acc, elPage) => {\r\n\t\tif (elPage.hasAttribute('data-view-page') && isVisible(elPage)) acc.push(elPage);\r\n\r\n\t\treturn acc;\r\n\t}, []);\r\n\r\n\tif (isLoading) {\r\n\t\tif (duration !== undefined) {\r\n\t\t\telPagesVisibleds.forEach((elPagesVisibled) => {\r\n\t\t\t\telPagesVisibled.style.setProperty('--dialog-loading-duration', duration + 's');\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\telPagesVisibleds.forEach((elPagesVisibled) => {\r\n\t\t\telPagesVisibled.classList.add('i-load-data');\r\n\t\t});\r\n\t} else {\r\n\t\telPagesVisibleds.forEach((elPagesVisibled) => {\r\n\t\t\telPagesVisibled.classList.remove('i-load-data');\r\n\t\t});\r\n\r\n\t\telPagesVisibleds.forEach((elPagesVisibled) => {\r\n\t\t\telPagesVisibled.style.setProperty('--dialog-loading-duration', '10s');\r\n\t\t});\r\n\t}\r\n};\r\n\r\nconst isLoading = (elPage: ElTopDialogPage | JQuery<ElTopDialogPage>) => {\r\n\tif (isElJQuery(elPage)) elPage = elPage?.[0]; // todo: убрать после переписки jquery на сайте\r\n\r\n\treturn elPage.classList.contains('i-load-data');\r\n};\r\n\r\nexport const TopDialogUtils = {\r\n\tgetElDialogById,\r\n\tupdatePageVue,\r\n\trecalcPositions,\r\n\ttoViewDirty,\r\n\ttoView,\r\n\ttoViewPage,\r\n\ttoPrevPage,\r\n\tsetLoading,\r\n\tisLoading,\r\n\tinAnimation,\r\n\tclose,\r\n};\r\n\r\ninit();\r\n"],"names":["el","elDialogs","utils_dom","elDialog","toView","TopDialogUtils","viewName","viewNameAndPageLink","elToPages","elDialog2","pageLink","utils_route","hash","elForm","eventTarget","elSubmitButton2","event","elDialogWrapperWithTopZIndex","elDialogWrapper","zIndex","topZIndex","Core","timerClearAnimation","isElJQuery","initDialogGlobalEvents","genVueOptions","options","getElDialogById","id","dialog","dialogs_vue_vue_type_script_setup_true_lang","dialogId","pageNameNext","utils_system","onCreate","initPopup","_e","$popup","elPopup","onOpen","pageName","w1","scrollBarWidth","recalcPositions","onClose","hashData","toViewDirty","toViewPageName","moveDirection","toViewParts","argsString","viewNameOrElDialog","args","callback","timer","resolve","$dialog","stopAnimations","updatePageVue","acc","elCurrentPage","elNextPage","elModalLayer","elNextPages","elCurrentPages","elActive","toPrevPage","elPrevPage","beforeOpenViewPageTimers","eventKey","inAnimation","elModalLayers","toViewPage","elPage","duration","elPagesVisibleds","elPagesVisibled","init"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref as s, getCurrentInstance as a, inject as n } from "vue";
|
|
2
|
-
import { a as i, g as c } from "./dialogs.vue_vue_type_script_setup_true_lang-
|
|
2
|
+
import { a as i, g as c } from "./dialogs.vue_vue_type_script_setup_true_lang-CzFMOjlE.es.js";
|
|
3
3
|
import { waitWhile as l } from "../utils/system.js";
|
|
4
4
|
class w {
|
|
5
5
|
/**
|
|
@@ -75,4 +75,4 @@ export {
|
|
|
75
75
|
d as b,
|
|
76
76
|
h as u
|
|
77
77
|
};
|
|
78
|
-
//# sourceMappingURL=utils-
|
|
78
|
+
//# sourceMappingURL=utils-ByqQkftW.es.js.map
|