@topvisor/ui 1.4.3-3 → 1.4.3-fixDialogPage.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/.chunks/{core-DBWAn2Eg.es.js → core-BfkJRzIa.es.js} +2 -2
  2. package/.chunks/{core-DBWAn2Eg.es.js.map → core-BfkJRzIa.es.js.map} +1 -1
  3. package/.chunks/{core-BEpKBNHt.amd.js → core-KZCK3nz9.amd.js} +2 -2
  4. package/.chunks/{core-BEpKBNHt.amd.js.map → core-KZCK3nz9.amd.js.map} +1 -1
  5. package/.chunks/{dialog_regionSelectorRegions-CHC-Blbu.amd.js → dialog_regionSelectorRegions-CeXFum_o.amd.js} +2 -2
  6. package/.chunks/{dialog_regionSelectorRegions-CHC-Blbu.amd.js.map → dialog_regionSelectorRegions-CeXFum_o.amd.js.map} +1 -1
  7. package/.chunks/{dialog_regionSelectorRegions-BMWyYCfD.es.js → dialog_regionSelectorRegions-Ch378Kqq.es.js} +3 -3
  8. package/.chunks/{dialog_regionSelectorRegions-BMWyYCfD.es.js.map → dialog_regionSelectorRegions-Ch378Kqq.es.js.map} +1 -1
  9. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-BZM_iKPW.es.js → dialogs.vue_vue_type_script_setup_true_lang-BGpebQij.es.js} +2 -2
  10. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-BZM_iKPW.es.js.map → dialogs.vue_vue_type_script_setup_true_lang-BGpebQij.es.js.map} +1 -1
  11. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-C3qaTBlO.amd.js → dialogs.vue_vue_type_script_setup_true_lang-CSTjTwQA.amd.js} +2 -2
  12. package/.chunks/{dialogs.vue_vue_type_script_setup_true_lang-C3qaTBlO.amd.js.map → dialogs.vue_vue_type_script_setup_true_lang-CSTjTwQA.amd.js.map} +1 -1
  13. package/.chunks/{page.vue_vue_type_script_setup_true_lang-bUK5c5qn.amd.js → page.vue_vue_type_script_setup_true_lang-CUfKoByk.amd.js} +2 -2
  14. package/.chunks/{page.vue_vue_type_script_setup_true_lang-bUK5c5qn.amd.js.map → page.vue_vue_type_script_setup_true_lang-CUfKoByk.amd.js.map} +1 -1
  15. package/.chunks/{page.vue_vue_type_script_setup_true_lang-C-xQ-eC7.es.js → page.vue_vue_type_script_setup_true_lang-w4Ajsm9A.es.js} +3 -3
  16. package/.chunks/{page.vue_vue_type_script_setup_true_lang-C-xQ-eC7.es.js.map → page.vue_vue_type_script_setup_true_lang-w4Ajsm9A.es.js.map} +1 -1
  17. package/.chunks/policy.vue_vue_type_style_index_0_lang-6S_OFLu6.amd.js +2 -0
  18. package/.chunks/policy.vue_vue_type_style_index_0_lang-6S_OFLu6.amd.js.map +1 -0
  19. package/.chunks/policy.vue_vue_type_style_index_0_lang-BRUOmEM8.es.js +498 -0
  20. package/.chunks/policy.vue_vue_type_style_index_0_lang-BRUOmEM8.es.js.map +1 -0
  21. package/.chunks/{utils-DQ-xahGh.es.js → utils-BJXd6gcx.es.js} +66 -66
  22. package/.chunks/utils-BJXd6gcx.es.js.map +1 -0
  23. package/.chunks/{utils-C2_4b48S.amd.js → utils-CH5NNXaV.amd.js} +2 -2
  24. package/.chunks/utils-CH5NNXaV.amd.js.map +1 -0
  25. package/.chunks/{utils-DsGgpnXD.amd.js → utils-CT09IY6X.amd.js} +2 -2
  26. package/.chunks/{utils-DsGgpnXD.amd.js.map → utils-CT09IY6X.amd.js.map} +1 -1
  27. package/.chunks/{utils-Kzz2mc2t.es.js → utils-DTC01RKg.es.js} +2 -2
  28. package/.chunks/{utils-Kzz2mc2t.es.js.map → utils-DTC01RKg.es.js.map} +1 -1
  29. package/core/app.amd.js +1 -1
  30. package/core/app.js +3 -3
  31. package/dialog/dialog.amd.js +1 -1
  32. package/dialog/dialog.js +2 -2
  33. package/formsExt/formsExt.amd.js +1 -1
  34. package/formsExt/formsExt.js +1 -1
  35. package/icomoon/Topvisor icons.json +653 -313
  36. package/icomoon/demo.html +29 -1
  37. package/icomoon/fonts/Topvisor-2.eot +0 -0
  38. package/icomoon/fonts/Topvisor-2.svg +2 -0
  39. package/icomoon/fonts/Topvisor-2.ttf +0 -0
  40. package/icomoon/fonts/Topvisor-2.woff +0 -0
  41. package/icomoon/selection.json +1 -1
  42. package/icomoon/style.css +11 -5
  43. package/package.json +2 -2
  44. package/project/project.amd.js +1 -1
  45. package/project/project.amd.js.map +1 -1
  46. package/project/project.js +64 -59
  47. package/project/project.js.map +1 -1
  48. package/src/components/formsExt/selector2/composables/useMenu.d.ts +1 -1
  49. package/src/components/formsExt/selector2/selector2.vue.d.ts +1 -0
  50. package/src/components/formsExt/selector2/types.d.ts +8 -0
  51. package/src/components/project/groupSelector/folders/types.d.ts +1 -0
  52. package/src/components/project/groupSelector/folders/utils.d.ts +417 -38
  53. package/src/components/project/groupSelector/groupSelector.vue.d.ts +1 -0
  54. package/src/components/project/groupSelector/groups/groups.vue.d.ts +4 -1
  55. package/src/components/project/groupSelector/groups/types.d.ts +1 -0
  56. package/src/components/project/groupSelector/groups/utils.d.ts +790 -56
  57. package/src/components/project/groupSelector/types.d.ts +6 -0
  58. package/utils/searchers.amd.js +1 -1
  59. package/utils/searchers.js +2 -2
  60. package/.chunks/policy.vue_vue_type_style_index_0_lang-8Te7yOxJ.amd.js +0 -2
  61. package/.chunks/policy.vue_vue_type_style_index_0_lang-8Te7yOxJ.amd.js.map +0 -1
  62. package/.chunks/policy.vue_vue_type_style_index_0_lang-uPC0N7jl.es.js +0 -496
  63. package/.chunks/policy.vue_vue_type_style_index_0_lang-uPC0N7jl.es.js.map +0 -1
  64. package/.chunks/utils-C2_4b48S.amd.js.map +0 -1
  65. package/.chunks/utils-DQ-xahGh.es.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.vue_vue_type_style_index_0_lang-BRUOmEM8.es.js","sources":["../../src/components/formsExt/menu/menu.vue","../../src/components/formsExt/selector2/itemMulti.vue","../../src/components/formsExt/selector2/cache.ts","../../src/components/formsExt/selector2/composables/useAPI.ts","../../src/components/formsExt/selector2/utils.ts","../../src/components/formsExt/selector2/composables/useMenu.ts","../../src/components/formsExt/selector2/selector2.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, onUpdated, ref } from 'vue';\nimport type { Item, Props } from './types';\nimport Core from '@/core/core/core';\nimport { isSafari } from '@/core/utils/device';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tstyling: 'default',\n});\n\nconst model = defineModel({\n\trequired: true,\n});\n\nconst el = ref();\n\n// валидация типа modelValue без возможности выбора нескольких значений (ожидается строка или число)\nif (!props.isMultiple && typeof (model.value) !== 'string' && typeof (model.value) !== 'number') {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected String: ' + typeof (model.value));\n}\n\n// валидация типа modelValue с возможностью выбора нескольких значений (ожидается массив)\nif (props.isMultiple && !Array.isArray(model.value)) {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected Array: ' + typeof (model.value));\n}\n\n/**\n * Для множественного выбора без пустого множества\n *\n * Если ничего не выбрано, присваиваем 1-ое значение\n */\nif (props.isMultiple && !props.canBeEmptyMultiple && Array.isArray(model.value) && !model.value.length && props.items[0]) {\n\tmodel.value = [props.items[0]?.href ?? props.items[0]?.value];\n}\n\nconst itemIsActive = (item: Item) => {\n\tif (!Array.isArray(model.value)) {\n\t\treturn item.value === model.value;\n\t}\n\n\treturn model.value.includes(item.value);\n};\n\n/**\n * Выбрать элемент\n * @param item\n * @param toggle - добавить или исключить элемент, для isMultiple\n */\nconst select = (item: Item, toggle = false) => {\n\tif (Array.isArray(model.value)) {\n\t\tlet modelNew = model.value.slice();\n\n\t\tif (toggle) {\n\t\t\tif (!modelNew.length) modelNew = props.items.map(item => item.value);\n\n\t\t\tconst index = modelNew.indexOf(item.value);\n\t\t\tif (index === -1) {\n\t\t\t\tmodelNew.push(item.value);\n\t\t\t} else {\n\t\t\t\tmodelNew.splice(index, 1);\n\t\t\t}\n\t\t} else {\n\t\t\tif (modelNew.length === 1 && modelNew[0] === item.value) {\n\t\t\t\tmodelNew = [];\n\t\t\t} else {\n\t\t\t\tmodelNew = [item.value];\n\t\t\t}\n\t\t}\n\n\t\tif (!props.canBeEmptyMultiple && !modelNew.length) modelNew = [item.value];\n\n\t\tmodel.value = modelNew;\n\n\t\treturn;\n\t}\n\n\tmodel.value = item.value;\n};\n\n// вертикальный скролл в горизонтальный скролл\nconst onWheel = (event: WheelEvent) => {\n\tif (el.value.scrollWidth <= el.value.offsetWidth) return;\n\tif (event.shiftKey) return;\n\tif (Math.abs(event.deltaY) < 50) return; // устройство с высокой точностью, например тачпад\n\n\tevent.preventDefault();\n\n\tconst delta = event.deltaY > 0 ? 30 : -30;\n\tel.value.scrollLeft = el.value.scrollLeft + delta;\n};\n\n/**\n * Замена стандартному scrollIntoView, который меняет скролл документа\n *\n * Выравнивание по ближнему краю элемента\n *\n * Выравнивается таким образом, чтобы был виден соседний элемент\n */\nconst scrollIntoView = (isSmooth = true) => {\n\tconst elBtn = el.value.querySelector('.top-active');\n\tif (!elBtn) return;\n\n\tconst gap = 24;\n\n\t// левая и правая координаты элемента\n\tconst leftMargin = elBtn.offsetLeft - el.value.offsetLeft - gap;\n\tconst rightMargin = elBtn.offsetLeft - el.value.offsetLeft + elBtn.clientWidth + gap;\n\n\t// левая и правая границы видимой части меню\n\tconst leftMarginParent = el.value.scrollLeft;\n\tconst rightMarginParent = el.value.clientWidth + el.value.scrollLeft;\n\n\tlet scrollLeft: number | undefined = undefined;\n\n\t// левую границу элемента к левой границе меню\n\tif (leftMargin < leftMarginParent) scrollLeft = leftMargin;\n\n\t// правую границу элемента к правой границе меню\n\tif (rightMargin > rightMarginParent) scrollLeft = rightMargin - el.value.clientWidth;\n\n\tif (scrollLeft !== undefined) {\n\t\tif (isSafari()) {\n\t\t\tCore.$?.(el.value).animate({ scrollLeft: scrollLeft }, isSmooth ? 200 : 0);\n\t\t} else {\n\t\t\tel.value.scrollTo({ left: scrollLeft, behavior: isSmooth ? 'smooth' : 'auto' });\n\t\t}\n\t}\n};\n\n/**\n * Выбрать все элементы в меню\n */\nconst selectAll = () => {\n\tif (!Array.isArray(model.value)) return;\n\n\tif (model.value.length === props.items.length) {\n\t\tmodel.value = [props.items[0].href ?? props.items[0].value];\n\t\treturn;\n\t}\n\n\tmodel.value = props.items.map(item => item.href ?? item.value);\n};\n\nonMounted(() => scrollIntoView(false));\nonUpdated(() => scrollIntoView(true));\n\n</script>\n\n<template>\n\t<div\n\t\tref=\"el\"\n\t\t:class=\"{\n\t\t\t'top-menu': true,\n\t\t\t['top-style_' + styling]: true,\n\t\t\t// ['top-unwrap-x']: styling === 'default',\n\t\t}\"\n\t\t@wheel=\"onWheel\"\n\t>\n\t\t<TopButton\n\t\t\tv-for=\"item in items\"\n\t\t\t:=\"item\"\n\t\t\tclass=\"top-menu_item\"\n\t\t\tcolor=\"theme\"\n\t\t\t@click=\"select(item, $event.ctrlKey || $event.metaKey)\"\n\t\t\t:isActive=\"itemIsActive(item)\"\n\t\t>\n\t\t\t<template #default v-if=\"item.content\">\n\t\t\t\t{{ item.content }}\n\t\t\t</template>\n\t\t</TopButton>\n\n\t\t<div\n\t\t\tv-if=\"Array.isArray(model) && selectAllItem\"\n\t\t\tclass=\"top-menu_selectAll\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\t:=\"selectAllItem\"\n\t\t\t\tclass=\"top-menu_item\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\tstyling=\"\"\n\t\t\t\t@click=\"selectAll()\"\n\t\t\t\t:isActive=\"model.length === items.length\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"selectAllItem.content\">\n\t\t\t\t\t{{ selectAllItem.content }}\n\t\t\t\t</template>\n\t\t\t</TopButton>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-menu {\n\t--scroll-thumb-color: var(--color-line-1);\n\t--scroll-thumb-color-hover: var(--color-line-2);\n\t--scroll-thumb-color-active: var(--color-line-3);\n\n\tmax-width: 100%;\n\tdisplay: flex;\n\talign-items: flex-start;\n\tgap: var(--top-gap-2);\n\toverflow-x: auto;\n\tscrollbar-width: none; /* firefox */\n\n\t/* предотвратить натинвые события браузера (назад / вперед) */\n\toverscroll-behavior-x: contain;\n}\n\n.top-menu::-webkit-scrollbar { display: none; }\n\n.top-menu .top-menu_item {\n\t--top-button-color: var(--color-text-2);\n\n\toutline-offset: -2px !important;\n\tmin-width: 0;\n\tmax-width: 200px;\n\tmargin: 0;\n\tflex-shrink: 0;\n}\n\n.top-menu .top-menu_item[data-top-icon] {\n\t--top-icon-color: var(--color-text-2);\n}\n\n.top-menu_selectAll {\n\tposition: sticky;\n\tright: 0;\n\tbackground: var(--color-layout-front-1);\n\tborder-left: 1px solid var(--color-line-1);\n\tpadding-left: var(--top-padding-1);\n\tbox-shadow: var(--color-layout-front-1) var(--top-padding-2) 0px;\n}\n\n/* style default */\n.top-menu.top-style_default .top-menu_item {\n\t--top-forms-radius: 0;\n\t--top-forms-border-color: transparent;\n\t--top-forms-border-width: 2px;\n\n\tfilter: none;\n\tbox-shadow: none;\n\tborder: none;\n\tborder-bottom: var(--top-forms-border-width) solid var(--top-forms-border-color);\n\tbackground: none;\n}\n\n.top-style_default > .top-menu_item > [data-top-badge] {\n\tmargin-top: 0;\n}\n\n.top-menu.top-style_default .top-menu_item:hover {\n\t--top-icon-color: var(--color-text-1);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-2);\n}\n\n.top-menu.top-style_default .top-menu_item:active,\n.top-menu.top-style_default .top-menu_item.top-active {\n\t--top-icon-color: var(--color-text-primary);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-primary-1);\n}\n\n.top-menu.top-style_default .top-menu_selectAll {\n\tpadding-left: var(--top-padding-2);\n}\n\n/* style bar */\n.top-menu.top-style_bar {\n\tborder-radius: var(--top-radius-3);\n\tborder: 1px solid var(--color-line-2);\n\tpadding: var(--top-padding-1);\n\tgap: 3px;\n}\n.top-menu.top-style_bar .top-menu_item {\n\t--top-button-background-color-hover: var(--color-layer-1);\n\t--top-button-background-color-active: var(--color-layer-2);\n\t--top-button-background-color-selected: var(--color-layer-primary-1);\n\n\tposition: relative;\n}\n\n.top-menu.top-style_bar .top-menu_item:hover {\n\t--top-icon-color: var(--color-text-1);\n\t--top-button-color: var(--color-text-1);\n}\n\n.top-menu.top-style_bar .top-menu_item.top-active {\n\t--top-icon-color: var(--color-text-primary);\n\t--top-button-color: var(--color-text-primary);\n}\n\n/* разделители кнопок в баре */\n.top-menu.top-style_bar .top-menu_item:not(:first-child):not(.top-active):not(:hover):after {\n\tcontent: \"\";\n\tbackground: var(--color-line-1-opacity);\n\twidth: 1px;\n\theight: 60%;\n\tdisplay: block;\n\tposition: absolute;\n\tleft: -2px;\n}\n.top-menu.top-style_bar .top-menu_item.top-active + .top-menu_item:after,\n.top-menu.top-style_bar .top-menu_item:hover + .top-menu_item:after {\n\tcontent: none !important;\n}\n\n/*\n.top-style_bar > .top-menu_item > [data-top-badge] {\n\tmargin-top: -3px;\n}\n*/\n\n/** TODO: .top-unwrap-x надо вынести глобально в UI или добавить в стили для storybook */\n/*\n.top-menu.top-unwrap-x {\n\tpadding-right: var(--top-unwrap-x);\n\tpadding-left: var(--top-unwrap-x);\n\tmargin-right: calc(0px - var(--top-unwrap-x));\n\tmargin-left: calc(0px - var(--top-unwrap-x));\n}\n*/\n</style>\n","<script setup lang=\"ts\">\nimport type { EmitsItemMulti, PropsItemMulti } from './types';\n\ndefineProps<PropsItemMulti>();\ndefineEmits<EmitsItemMulti>();\n</script>\n\n<template>\n\t<div class=\"top-selector2_itemMulti top-ellipsis\">\n\t\t{{ name }}\n\n\t\t<span\n\t\t\tclass=\"top-selector2_itemMultiDelete\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t@click=\"$emit('delete', {id, name})\"\n\t\t\t@mousedown.stop\n\t\t></span>\n\t</div>\n</template>\n\n<style>\n.top-selector2_itemMulti {\n\tbox-sizing: border-box;\n\tpadding-left: var(--top-padding-2);\n\tborder-radius: var(--top-radius-1, 4px);\n\tborder: 1px solid var(--color-line-primary-1);\n\tbackground: var(--color-layer-primary-2);\n\tmin-height: 22px;\n\tmax-width: 100%;\n\tcolor: var(--color-text-1);\n\tflex-grow: 0;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--top-gap-1);\n}\n\n.top-selector2_itemMultiDelete {\n\t--top-icon-size: 14px;\n\t--top-icon-width: 18px;\n\t--top-icon-color: var(--color-text-1);\n\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 100%;\n\tcursor: pointer;\n}\n\n.top-selector2_itemMultiDelete:hover {\n\tbackground: var(--color-layer-primary-2);\n}\n\n@media screen and (min-width: 900px) {\n\t.top-selector2.top-active .top-selector2_itemMultiDelete {\n\t\tz-index: calc(var(--top-popup-z-index) + 1);\n\t}\n}\n</style>\n","import type { Props } from './types';\n\n/**\n * Список кешей для конкретного API метода\n */\nexport const cacheByMethod = new Map<Api.PathAbstract, Map<string, any>>();\n\n/**\n * Сброс кеша конкретного API метода\n */\nexport const clearCache = (apiPath: Api.PathAbstract) => {\n\tcacheByMethod.get(apiPath)?.clear();\n};\n\nexport const genCacheKey = (api: NonNullable<Props['api']>) => {\n\tconst userId = window['mo']?.user?.id;\n\n\tconst cacheKey = JSON.stringify(api.params) + ':' + api.url + ':' + userId;\n\n\treturn cacheKey;\n};\n\nexport const getCache = (cacheKey: string, apiPath: Api.PathAbstract) => {\n\treturn cacheByMethod.get(apiPath)?.get(cacheKey);\n};\n\nexport const setCache = (cacheKey: string, apiPath: Api.PathAbstract, data: any) => {\n\tif (!cacheByMethod.has(apiPath)) {\n\t\tcacheByMethod.set(apiPath, new Map());\n\t}\n\n\tcacheByMethod.get(apiPath)?.set(cacheKey, data);\n};\n","import { ref } from 'vue';\nimport { debounce } from '../../../../core/utils/lodash';\nimport type { Item, Props } from '../types';\nimport { genCacheKey, getCache, setCache } from '../cache';\n\nexport type API = ReturnType<typeof useAPI>;\n\nexport const useAPI = (\n\tapi: Props['api'],\n\tapiSetSearchParams: Props['apiSetSearchParams'],\n\tminLength: number,\n\tuseCache: Props['useCache'],\n) => {\n\t/**\n\t * Список, полученный через API\n\t */\n\tconst items = ref<Item[]>([]);\n\n\t/**\n\t * Флаг - идет загрузка\n\t */\n\tconst isLoading = ref(false);\n\n\tconst countLoading = ref(0);\n\n\tlet searchText = '';\n\tlet nextOffset: number | null | undefined;\n\n\tif (api && !api.params.limit) {\n\t\tapi.params.limit = 100;\n\t}\n\n\t/**\n\t * Выполнить обращение к API\n\t *\n\t * При ошибке вернет undefined\n\t */\n\tconst callAPI = async (): Promise<Api.ResponseSuccess<any, 'get'> | undefined> => {\n\t\tif (!api) return;\n\n\t\tconst cacheKey = useCache ? genCacheKey(api) : undefined;\n\n\t\tif (cacheKey) {\n\t\t\tconst cache = getCache(cacheKey, api.path);\n\t\t\tif (cache) {\n\t\t\t\t// остановить запущенные api запросы\n\t\t\t\tapi.abortByFingerprint();\n\n\t\t\t\treturn cache;\n\t\t\t}\n\t\t}\n\n\t\tconst res = await api.call();\n\n\t\tif (res.errors) return;\n\n\t\tif (!Array.isArray(res.result)) {\n\t\t\tconsole.warn('Array expected in `res.result`');\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst indexWithError = (res.result as Array<Item | any>).findIndex(item => item.id === undefined || item.name === undefined);\n\t\tif (indexWithError !== -1) {\n\t\t\tconsole.warn(`В result[${indexWithError}] нет id или name`);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (cacheKey) {\n\t\t\tsetCache(cacheKey, api.path, res);\n\t\t}\n\n\t\treturn res as Api.ResponseSuccess<any, 'get'>;\n\t};\n\n\t/**\n\t * Загрузить items\n\t */\n\tconst load = async (append: boolean) => {\n\t\tif (!api) return;\n\n\t\tif (append) {\n\t\t\t// данных о следующих страницах не обнаружено\n\t\t\tif (!nextOffset) return;\n\n\t\t\t// дозагружать нельзя, если не завершена предыдущая загрузка\n\t\t\tif (isLoading.value) return;\n\n\t\t\tapi.params.offset = nextOffset;\n\t\t} else {\n\t\t\tapi.params.offset = 0;\n\t\t}\n\n\t\tapiSetSearchParams?.(api, searchText);\n\n\t\tisLoading.value = true;\n\t\tconst res = await callAPI();\n\t\tisLoading.value = false;\n\n\t\tcountLoading.value++;\n\n\t\tif (!res) return;\n\n\t\tnextOffset = res.nextOffset;\n\n\t\tif (append) {\n\t\t\titems.value = items.value.concat(res.result);\n\t\t} else {\n\t\t\titems.value = res.result;\n\t\t}\n\t};\n\n\tconst loadDebounce = debounce(() => load(false), 200);\n\n\t/**\n\t * Выполнить поиск по указанному тексту\n\t *\n\t * Если длина текста меньше minLength, поиск не будет произведен\n\t *\n\t * Если текст не изменился, поиск не будет произведен\n\t *\n\t * @param newSearchText - текст поиска\n\t * @param useDebounce - дедупликация загрузки списка\n\t */\n\tconst setSearchTextAndLoad = (newSearchText: string, useDebounce = true) => {\n\t\tif (!api) return;\n\n\t\t// остановить начатый поиск и сбросить результаты\n\t\tif (newSearchText.length < minLength) {\n\t\t\tapi.abortByFingerprint();\n\n\t\t\titems.value = [];\n\n\t\t\treturn;\n\t\t}\n\n\t\t// условия поиска не поменялись, данные загружены\n\t\tif (newSearchText === searchText && items.value.length) return;\n\n\t\tsearchText = newSearchText;\n\n\t\tif (useDebounce) {\n\t\t\tvoid loadDebounce();\n\t\t} else {\n\t\t\tvoid load(false);\n\t\t}\n\t};\n\n\treturn {\n\t\tapiRequest: api,\n\t\titems,\n\t\tisLoading,\n\t\tcountLoading,\n\t\tload,\n\t\tsetSearchTextAndLoad,\n\t};\n};\n","import type { Item, Props } from './types';\nimport { genFieldFilter } from '@/api/api';\n\n/**\n * Универсальный id для всех элементов \"Все элементы\" / \"Без фильтра\" в `TopSelector`\n */\nexport const ITEM_ID_ALL = 0;\n\n/**\n * Универсальный id для всех добавляемых элементов через `TopSelector`\n */\nexport const ITEM_ID_NEW = null;\n\n/**\n * Выбран ли элемент\n */\nexport const isSelected = (modelValue: Props['modelValue'], item: Item, checkNameForNullId = true) => {\n\tif (checkNameForNullId && item.id === ITEM_ID_NEW) {\n\t\tif (Array.isArray(modelValue)) {\n\t\t\treturn modelValue.some(itemSelected => itemSelected.id === item.id && itemSelected.name === item.name);\n\t\t} else {\n\t\t\treturn item.name === modelValue.name;\n\t\t}\n\t}\n\n\tif (Array.isArray(modelValue)) {\n\t\treturn modelValue.some(itemSelected => itemSelected.id === item.id);\n\t} else {\n\t\treturn item.id === modelValue.id;\n\t}\n};\n\n/**\n * Вспомогательная утилита для создания `callback` функции на добавление фильтра по полю в api запрос\n *\n * Другие фильтры по указанному полю будут удалены\n *\n * @param api - api, которое используется в `TopSelector`\n * @param search - введенная строка поиска\n * @param fieldName - имя поля, по которому надо добавить фильтр на поиск по нестрогому соответствию\n */\nexport const apiSetSearchParamsFilter = (api: NonNullable<Props['api']>, search: string, fieldName: string) => {\n\tlet filters = api.params.filters ?? [];\n\n\t// удаление других фильтров по этому полю\n\tfilters = filters.filter((filter) => filter.name !== fieldName);\n\n\tif (search) {\n\t\tfilters.push(genFieldFilter(fieldName, 'CONTAINS', [search]));\n\t}\n\n\tapi.changeParams({ filters });\n};\n","import { computed, type ComputedRef, ref, type Ref, watch } from 'vue';\nimport { invertKeyboardLayout } from '@/core/utils/keyboard';\nimport type { Item, Props } from '../types';\nimport { type API } from './useAPI';\nimport { isSelected, ITEM_ID_ALL, ITEM_ID_NEW } from '../utils';\nimport { useI18n } from '@/core/plugins/i18n';\n\n/**\n * Функционал поиска\n */\nexport const useMenu = (\n\tmodel: Ref<Props['modelValue']>,\n\temits: ReturnType<typeof defineEmits>,\n\titems: Ref<Props['items']>,\n\tmultiselect: Props['multiselect'],\n\tuseAllItem: Ref<Props['useAllItem']>,\n\tappendSearchToResult: Ref<Props['appendSearchToResult']>,\n\tsearchFields: Ref<Props['searchFields']>,\n\tsearchType: Ref<Props['searchType']>,\n\tminLength: number,\n\tapi: API,\n) => {\n\t/**\n\t * Текст поиска по результатам\n\t */\n\tconst searchText = ref('');\n\n\t/**\n\t * Объект, представляющий опцию \"Все\"\n\t */\n\tconst itemAll = {\n\t\tid: ITEM_ID_ALL,\n\t\tname: useI18n().Common.All as string,\n\t};\n\n\t/**\n\t * Сброс поиска\n\t */\n\tconst resetSearch = () => {\n\t\tsearchText.value = '';\n\t};\n\n\t/**\n\t * Является ли строка поиска достаточной длины для отображения меню\n\t */\n\tconst genIsShort = () => {\n\t\tif (!api.apiRequest) return false;\n\t\tif (searchText.value.length >= minLength) return false;\n\n\t\treturn true;\n\t};\n\n\t/**\n\t * Варианты выбора: props.items + \"Выбрать все\"\n\t */\n\tconst localItems: ComputedRef<Item[]> = computed(() => {\n\t\tconst localItems: Item[] = [];\n\n\t\tif (!multiselect && useAllItem.value) {\n\t\t\tif (typeof useAllItem.value === 'string') {\n\t\t\t\titemAll.name = useAllItem.value;\n\t\t\t}\n\n\t\t\tlocalItems.push(itemAll);\n\t\t}\n\n\t\titems.value?.forEach(item => localItems.push({ ...item }));\n\n\t\treturn localItems;\n\t});\n\n\t/**\n\t * Не используем `computed` в пользу ручного порядка пересчета значения\n\t */\n\tconst itemsForShow = ref<Item[]>([]);\n\n\tconst recalcItemsForShow = () => {\n\t\titemsForShow.value = genItemsForShow();\n\t};\n\n\t/**\n\t * Подготовленный список меню, который содержит в сумме:\n\t * - prop.items: указанный список с учетом фильтра и опций компонента\n\t * - api.items: результаты api запроса, если используется api\n\t *\n\t * @returns Отфильтрованный массив элементов для отображения\n\t */\n\tconst genItemsForShow = () => {\n\t\tconst searchString = searchText.value.toLowerCase();\n\t\tconst searchStringInvertKeyboard = invertKeyboardLayout(searchString);\n\n\t\tlet items: Item[] = [];\n\n\t\t/**\n\t\t * Элемент текущего разделителя в цикле\n\t\t *\n\t\t * Для скрытия / отображения только нужных заголовков и разделителей при поиске\n\t\t *\n\t\t * Логика для `api.items` должна реализовываться в api или api клиенте при генерации элементов\n\t\t */\n\t\tlet itemTitleCategory: Item | undefined;\n\t\tconst itemsCategory: Item[] = [];\n\n\t\t/**\n\t\t * Добавить элементы в результирующий список\n\t\t */\n\t\tconst flushCategory = () => {\n\t\t\t// крайний разделитель не выводить\n\t\t\tif (itemsCategory.at(-1)?.listItemProps?.type === 'delimiter') {\n\t\t\t\titemsCategory.pop();\n\t\t\t}\n\n\t\t\tif (itemsCategory.length) {\n\t\t\t\tif (itemTitleCategory) {\n\t\t\t\t\titems.push(itemTitleCategory);\n\t\t\t\t}\n\n\t\t\t\titems.push(...itemsCategory);\n\n\t\t\t\titemsCategory.length = 0;\n\t\t\t}\n\t\t};\n\n\t\tfor (const item of localItems.value) {\n\t\t\tswitch (item.listItemProps?.type) {\n\t\t\t\tcase 'title':\n\t\t\t\t\tflushCategory();\n\n\t\t\t\t\titemTitleCategory = item;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'delimiter':\n\t\t\t\t\t// вставить разделитель один раз и только если категория не пуста\n\t\t\t\t\tif (itemsCategory.length) {\n\t\t\t\t\t\tlet index = itemsCategory.length;\n\t\t\t\t\t\tif (itemsCategory.at(-1)?.listItemProps?.type === 'delimiter') index--;\n\n\t\t\t\t\t\titemsCategory[index] = item;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tconst hasIdSearch = searchFields.value.includes('id');\n\t\t\t\t\tconst name = item.name.toLowerCase();\n\n\t\t\t\t\tconst searchFieldsText = searchFields.value\n\t\t\t\t\t\t.filter(field => field !== 'id')\n\t\t\t\t\t\t.map(field => typeof item[field] === 'string' || typeof item[field] === 'number' ? item[field] : '')\n\t\t\t\t\t\t.join('☼')\n\t\t\t\t\t\t.toLowerCase();\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(hasIdSearch && item.id === Number(searchString)) ||\n\t\t\t\t\t\tsearchFieldsText.includes(searchString) ||\n\t\t\t\t\t\tsearchFieldsText.includes(searchStringInvertKeyboard)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (name === searchString || name === searchStringInvertKeyboard) {\n\t\t\t\t\t\t\t// точные совпадения в начало\n\t\t\t\t\t\t\titemsCategory.unshift(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\titemsCategory.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tflushCategory();\n\n\t\titems.push(...api.items.value);\n\n\t\t// ввод произвольного значения\n\t\tif (\n\t\t\tappendSearchToResult.value &&\n\t\t\t!!searchText.value &&\n\n\t\t\t// результаты могут быть найдены, но не точные, тогда предложить добавить элемент\n\t\t\t!items.find((item) => item.name.toLowerCase() === searchString)\n\t\t) {\n\t\t\tconst itemNew = {\n\t\t\t\tid: ITEM_ID_NEW,\n\t\t\t\tname: searchText.value,\n\t\t\t};\n\n\t\t\t// предложение всегда отображается внизу, чтобы не мешать результатам поиска\n\t\t\titems.push(itemNew);\n\t\t}\n\n\t\tif (multiselect) {\n\t\t\titems = items.filter(item => !isSelected(model.value, item));\n\t\t}\n\n\t\treturn items;\n\t};\n\n\t/**\n\t * Выбрать элемент\n\t *\n\t * @param item Элемент для выбора\n\t */\n\tconst selectItem = (item: Item) => {\n\t\t// это невыбираемый элемент\n\t\tif (item.listItemProps?.type === 'title' || item.listItemProps?.type === 'delimiter') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (multiselect && Array.isArray(model.value)) {\n\t\t\tif (!isSelected(model.value, item)) {\n\t\t\t\tmodel.value = [...model.value, item];\n\t\t\t}\n\t\t} else {\n\t\t\tmodel.value = item;\n\t\t}\n\n\t\tif (item.id === ITEM_ID_NEW) {\n\t\t\temits('appendItem', item);\n\t\t}\n\n\t\t/**\n\t\t * Отложить перерисовку\n\t\t *\n\t\t * fix: Перерисовка меню выполняется раньше, чем срабатывает `click`.\n\t\t * Из-за этого обработчик кликов думает, что клик был вне меню и не закрывает окно\n\t\t *\n\t\t * Файл: @/components/popup/lib/popup.globalEvents.ts\n\t\t *\n\t\t * Функция: onclick()\n\t\t *\n\t\t * ```\n\t\t * const elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\t\t * ```\n\t\t */\n\t\tsetTimeout(() => {\n\t\t\t/**\n\t\t\t * Завершить поиск после выбора\n\t\t\t */\n\t\t\tresetSearch();\n\t\t});\n\n\t\t// /**\n\t\t// * При изменении значения модели в режиме inline необходимо очистить поле поиска,\n\t\t// * так как поиск больше не актуален после выбора значения\n\t\t// */\n\t\t// if (searchType.value === 'inline') {\n\t\t// \tresetSearch();\n\t\t// }\n\t};\n\n\tif (api.apiRequest) {\n\t\t// загрузка только при открытии popup\n\t\tconst fieldsForWatch: any = [items, api.items];\n\n\t\t// model нужен только для multiselect, без необходимости не использовать для улучшения UX при работе с API\n\t\tif (multiselect) {\n\t\t\tfieldsForWatch.push(model);\n\t\t}\n\n\t\twatch(fieldsForWatch, () => {\n\t\t\trecalcItemsForShow();\n\t\t});\n\t} else {\n\t\twatch([model, items, searchText], () => {\n\t\t\trecalcItemsForShow();\n\t\t}, {\n\t\t\timmediate: true,\n\n\t\t\t// слежение за изменениями `items`\n\t\t\tdeep: 2,\n\t\t});\n\t}\n\n\t/**\n\t * Выбрать следующее значение\n\t */\n\tconst selectNextItem = () => {\n\t\tif (Array.isArray(model.value)) return;\n\n\t\tconst selectableItems = itemsForShow.value.filter((item) => !['title', 'delimiter'].includes(item.listItemProps?.type ?? ''));\n\n\t\tconst currentIndex = selectableItems.findIndex(item => item.id === (model.value as Item).id);\n\t\tconst nextIndex = (currentIndex + 1) % selectableItems.length;\n\t\tmodel.value = { ...selectableItems[nextIndex] };\n\t};\n\n\t/**\n\t * Удалить элемент, `id` и `name` которого равны указанному `item`\n\t */\n\tconst deleteItemByItem = async (item: Item) => {\n\t\tif (Array.isArray(model.value)) {\n\t\t\tmodel.value = model.value.filter((itemI) => itemI.id !== item.id || itemI.name !== item.name);\n\t\t}\n\t};\n\n\treturn {\n\t\tsearchText,\n\t\tresetSearch,\n\t\tgenIsShort,\n\t\titemsForShow,\n\t\tselectItem,\n\t\tselectNextItem,\n\t\tdeleteItemByItem,\n\t};\n};\n","<script setup lang=\"ts\">\nimport { computed, ref, toRef, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { TopPopup, TopPopupListItem, TopPopupWidgetInput } from '@/components/popup/popup';\nimport { TopPreloader } from '@/components/forms/forms';\nimport type { Emits, Item, Props, Slots } from './types';\nimport Selector2ItemMulti from './itemMulti.vue';\nimport { useAPI } from './composables/useAPI';\nimport { useMenu } from './composables/useMenu';\nimport type { TopLibPopup } from '../../popup/lib/popup';\nimport { clearCache } from './cache';\nimport { ITEM_ID_ALL, ITEM_ID_NEW } from './utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\titems: () => [] as Item[],\n\tsize: 's',\n\tminLength: 0,\n\tsearchType: 'popup',\n\topenByFocusInput: undefined,\n\tsearchFields: () => ['id', 'name'],\n});\n\nconst model = defineModel<Props['modelValue']>({ required: true });\n\ndefineSlots<Slots>();\n\nconst emits = defineEmits<Emits>();\n\ndefineExpose({\n\t/**\n\t * Сброс локального кеша и кеша api\n\t *\n\t * @param resetAPICache - Сбросить API кеш, по умолчанию не сбрасывается. Для случаев, когда загруженные данные становятся неактуальными\n\t */\n\tresetCache: (resetAPICache: boolean = false) => {\n\t\tif (!api.apiRequest) return;\n\n\t\t// сброс кеша api\n\t\tif (resetAPICache) {\n\t\t\tclearCache(api.apiRequest.path);\n\t\t}\n\n\t\t// сброс кеша списка\n\t\tapi.items.value = [];\n\n\t\t// сброс флага первичной загрузки\n\t\tapi.countLoading.value = 0;\n\n\t\t// сброс параметров дозагрузки\n\t\tapi.apiRequest.params.offset = 0;\n\n\t\t// сброс кеша локального списка с дополнительными элементами, например `useAllItem`\n\t\trequestAnimationFrame(() => {\n\t\t\tmenu.itemsForShow.value = [];\n\t\t});\n\n\t\t// сразу загрузить данные после сброса, если popup уже открыт\n\t\tif (getPopup()?.elPopup) {\n\t\t\tapi.setSearchTextAndLoad(menu.searchText.value);\n\t\t}\n\t},\n});\n\nconst searchTypeLocal = computed(() => {\n\t// multiselect не поддерживает inline ввода\n\tif (props.searchType === 'inline' && props.multiselect) return 'popup';\n\n\t// В мобильной версии popup работает в полноэкранном режиме\n\tif (props.searchType === 'inline' && Core.state.isMobile) return 'popup';\n\n\treturn props.searchType;\n});\n\n/**\n * Объект для работы с API\n */\nconst api = useAPI(props.api, props.apiSetSearchParams, props.minLength, props.useCache);\n\n/**\n * Объект для работы с меню\n */\nconst menu = useMenu(\n\tmodel,\n\temits,\n\ttoRef(props, 'items'),\n\tprops.multiselect,\n\ttoRef(props, 'useAllItem'),\n\ttoRef(props, 'appendSearchToResult'),\n\ttoRef(props, 'searchFields'),\n\tsearchTypeLocal,\n\tprops.minLength,\n\tapi,\n);\n\nconst component = computed(() => {\n\tif (props.buttonProps) return 'TopButton';\n\tif (searchTypeLocal.value === 'inline') return 'TopInput';\n\n\treturn 'div';\n});\n\n/**\n * Экземпляр компонента Popup\n */\nconst popupRef = ref<any>(null);\n\n/**\n * Получить доступ к объекту popup\n */\nconst getPopup = (): TopLibPopup | undefined => {\n\treturn popupRef.value?.popup;\n};\n\nif (api.apiRequest) {\n\t// отложенный поиск при вводе текста\n\twatch(menu.searchText, () => {\n\t\tapi.setSearchTextAndLoad(menu.searchText.value);\n\t});\n}\n\nconst placeholder = computed(() => {\n\tif (Array.isArray(model.value) || props.multiselect || !props.selectedAsPlaceholder && searchTypeLocal.value !== 'inline') {\n\t\treturn props.placeholder;\n\t}\n\n\treturn model.value?.name || props.placeholder;\n});\n\n/**\n * Обработчик ввода клавиш на кнопке или поле ввода\n */\nconst onOpenerKeydown = (e: KeyboardEvent) => {\n\tlet needOpen = false;\n\n\tswitch (e.key) {\n\t\tcase 'Delete':\n\t\tcase 'Backspace':\n\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tmodel.value.pop();\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'ArrowUp':\n\t\tcase 'ArrowRight':\n\t\tcase 'ArrowDown':\n\t\tcase 'ArrowLeft':\n\t\tcase 'Enter':\n\t\tcase ' ':\n\t\t\tneedOpen = true;\n\n\t\t\tbreak;\n\t\tcase 'Escape':\n\t\t\tif (searchTypeLocal.value === 'inline') {\n\t\t\t\t// очистка введенного текста\n\t\t\t\tmenu.resetSearch();\n\t\t\t}\n\n\t\t\tbreak;\n\t}\n\n\t// введен символ\n\tconst symbolPressed = e.key.length === 1 && !e.ctrlKey && !e.metaKey;\n\n\t// введен символ\n\tif (searchTypeLocal.value === 'popup' || searchTypeLocal.value === 'inline') {\n\t\tif (symbolPressed) {\n\t\t\tneedOpen = true;\n\t\t}\n\t}\n\n\t// popup уже открыт\n\tif (getPopup()?.elPopup) {\n\t\tneedOpen = false;\n\t}\n\n\tif (needOpen) {\n\t\tif (searchTypeLocal.value === 'popup') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\t// введен символ\n\t\t\tif (symbolPressed) {\n\t\t\t\t// начало ввода, сразу ввести первый символ вместе с открытием popup\n\t\t\t\tif (!menu.searchText.value) {\n\t\t\t\t\tmenu.searchText.value = e.key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t(e.currentTarget as HTMLElement)?.click();\n\t}\n};\n\nconst onClickChanger = (e: MouseEvent) => {\n\te.preventDefault();\n\n\tmenu.selectNextItem();\n};\n\n/**\n * Обработчик открытия попапа\n */\nconst onOpen = () => {\n\tif (api.apiRequest) {\n\t\t// при открытии сразу выполнить поиск\n\t\tapi.setSearchTextAndLoad(menu.searchText.value, false);\n\t}\n};\n\n/**\n * Обработчик закрытия попапа\n */\nconst onClose = () => {\n\t// очистка введенного текста, в режиме `inline` input вызывается при `blur`\n\tif (searchTypeLocal.value === 'popup') {\n\t\tif (menu.searchText.value) menu.resetSearch();\n\t}\n};\n\n/**\n * Обработчик прокрутки списка контента\n *\n * Для дозагрузки элеменов через api\n *\n * @param {Event} e - Событие прокрутки\n */\nconst onScrollContentList = (e: Event) => {\n\tconst el = e.target as HTMLElement;\n\n\tif (el.scrollTop / (el.scrollHeight - el.offsetHeight) > 0.8) {\n\t\tapi.load(true);\n\t}\n};\n\nif (import.meta.env.STORYBOOK) {\n\twatch(\n\t\t() => props.multiselect,\n\t\t() => {\n\t\t\tif (props.multiselect) {\n\t\t\t\tif (!Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\tname: 'Выбери меня',\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = {\n\t\t\t\t\t\tid: null,\n\t\t\t\t\t\tname: '',\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ immediate: true },\n\t);\n\n\twatch(\n\t\t() => props.searchType,\n\t\t() => {\n\t\t\t// пауза для установки props в адресной строке\n\t\t\tsetTimeout(() => {\n\t\t\t\tlocation.reload();\n\t\t\t}, 500);\n\t\t},\n\t);\n}\n</script>\n\n<template>\n\t<TopPopup\n\t\tref=\"popupRef\"\n\t\t@open=\"onOpen()\"\n\t\t@close=\"onClose()\"\n\t\t@scrollContentList=\"api ? onScrollContentList($event) : undefined\"\n\t\t:notch=\"false\"\n\t\t:transitionDuration=\"0\"\n\t\t:openByFocusInput=\"searchTypeLocal === 'inline' && (openByFocusInput ?? true)\"\n\t\t:disabled=\"searchTypeLocal === 'inline' && menu.genIsShort()\"\n\t>\n\t\t<template #opener>\n\t\t\t<component\n\t\t\t\t:is=\"component\"\n\n\t\t\t\t:=\"buttonProps\"\n\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-selector2': true,\n\t\t\t\t\t'top-selector2-multiselect': multiselect,\n\t\t\t\t\t['top-selector2-' + modificator]: !!modificator,\n\t\t\t\t\t'top-as-input': !buttonProps && searchTypeLocal !== 'inline',\n\t\t\t\t\t'top-as-selector': true,\n\t\t\t\t\t['top-size_' + size]: true,\n\t\t\t\t\t['top-disabled']: disabled,\n\t\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t\t['top-error']: isError,\n\t\t\t\t}\"\n\t\t\t\t:icon\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@keydown=\"onOpenerKeydown\"\n\t\t\t\t@blur=\"searchTypeLocal === 'inline' && menu.resetSearch()\"\n\t\t\t\tv-top-focus.onupdate=\"isError\"\n\n\t\t\t\t:placeholder\n\t\t\t\t:title\n\t\t\t\t:captionType=\"searchTypeLocal === 'inline' && title !== undefined ? 'top' : undefined\"\n\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t>\n\t\t\t\t<template v-if=\"multiselect\">\n\t\t\t\t\t<div class=\"top-selector2_activeItems\">\n\t\t\t\t\t\t<Selector2ItemMulti\n\t\t\t\t\t\t\tv-for=\"item of model as Item[]\"\n\t\t\t\t\t\t\t:id=\"item.id\"\n\t\t\t\t\t\t\t:name=\"item.name\"\n\t\t\t\t\t\t\t@delete=\"menu.deleteItemByItem\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<span v-if=\"searchTypeLocal !== 'inline' && !multiselect\" class=\"top-selector2_activeName top-ellipsis\">\n\t\t\t\t\t{{ !Array.isArray(model) ? model.name : '' }}\n\t\t\t\t</span>\n\n\t\t\t\t<span v-if=\"multiselect && !model.length\" class=\"top-selector2_placeholder top-ellipsis\">\n\t\t\t\t\t{{ placeholder }}\n\t\t\t\t</span>\n\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"addChanger && !buttonProps && !multiselect && menu.itemsForShow.value.length > 1 && !disabled\"\n\t\t\t\t\tclass=\"top-changer top-changer-selector\"\n\t\t\t\t\tdata-top-popup-disabled=\"true\"\n\t\t\t\t\t@click=\"onClickChanger\"\n\t\t\t\t></span>\n\t\t\t</component>\n\t\t</template>\n\n\t\t<template #widget v-if=\"searchTypeLocal === 'popup'\">\n\t\t\t<TopPopupWidgetInput\n\t\t\t\ttitle=\"Поиск\"\n\t\t\t\ticon=\"\"\n\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t\tv-top-focus.onupdate=\"model\"\n\t\t\t\t:isLoading=\"!!api.countLoading.value && api.isLoading.value\"\n\t\t\t\t:placeholder\n\t\t\t/>\n\t\t</template>\n\n\t\t<template #contentList>\n\t\t\t<TopPopupListItem\n\t\t\t\tv-for=\"item of menu.itemsForShow.value\"\n\t\t\t\t:key=\"item.id ?? undefined\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-active': !Array.isArray(model) && !multiselect && model.id === item.id && model.name === item.name,\n\t\t\t\t\t'top-selector2_item-all':item.id === ITEM_ID_ALL,\n\t\t\t\t\t'top-selector2_item-new':item.id === ITEM_ID_NEW,\n\t\t\t\t}\"\n\t\t\t\t:=\"item.listItemProps\"\n\t\t\t\t:closeByClick=\"!multiselect || Core.state.isMobile\"\n\t\t\t\t@click=\"menu.selectItem(item)\"\n\t\t\t>\n\t\t\t\t<slot\n\t\t\t\t\tv-if=\"$slots.item\"\n\t\t\t\t\tname=\"item\"\n\t\t\t\t\t:item\n\t\t\t\t></slot>\n\n\t\t\t\t<template\n\t\t\t\t\tv-else\n\t\t\t\t>\n\t\t\t\t\t{{ item.name }}\n\t\t\t\t</template>\n\t\t\t</TopPopupListItem>\n\n\t\t\t<!-- Элементов для отображения нет -->\n\t\t\t<template v-if=\"!menu.itemsForShow.value.length && !menu.genIsShort()\">\n\t\t\t\t<TopPopupListItem type=\"regular\">\n\t\t\t\t\t<template v-if=\"!api.isLoading.value || api.countLoading.value\">\n\t\t\t\t\t\t{{ $i18n.Common.No_results }}\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<!-- Индикатор первичной загрузки -->\n\t\t\t\t\t<TopPreloader\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\ttype=\"circles\"\n\t\t\t\t\t/>\n\t\t\t\t</TopPopupListItem>\n\t\t\t</template>\n\n\t\t\t<!-- Индикатор повторной загрузки -->\n\t\t\t<TopLoadbar v-if=\"!!api.countLoading.value && api.isLoading.value && searchTypeLocal === 'inline'\"/>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style>\n.top-selector2 {\n\twidth: 180px;\n}\n\n.top-selector2::placeholder,\n.top-selector2_placeholder {\n\tcolor: var(--color-text-2);\n}\n\n.top-selector2_placeholder {\n\tpadding-left: var(--top-padding-1);\n}\n\n.top-selector2.top-as-input {\n\tpadding: var(--top-padding-1) var(--top-forms-padding);\n}\n\n.top-selector2.top-selector2-multiselect {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tflex-grow: 1;\n}\n\n.top-selector2.top-active {\n\t--top-forms-border-color: var(--top-forms-border-color-hover);\n}\n\n.top-selector2_activeItems {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--top-padding-1);\n\tmax-width: 100%;\n}\n\n.top-selector2_activeName {\n\twhite-space: nowrap;\n}\n\n.top-changer-selector {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tmargin: calc(0px - var(--top-padding-1));\n\ttransform: translateX(0);\n}\n\n.top-selector2.top-button {\n\tjustify-content: start;\n}\n\n.top-selector2.top-input_input ~ .top-changer-selector {\n\ttransform: translateX(-52px);\n}\n\n.top-selector2.top-as-selector {\n\tpadding-right: calc(var(--top-selector-arrow-width) + var(--top-padding-2));\n}\n</style>\n"],"names":["props","__props","model","_useModel","el","ref","itemIsActive","item","select","toggle","modelNew","index","onWheel","event","delta","scrollIntoView","isSmooth","elBtn","gap","leftMargin","rightMargin","leftMarginParent","rightMarginParent","scrollLeft","isSafari","Core","selectAll","onMounted","onUpdated","_createElementBlock","_normalizeClass","_Fragment","_renderList","_createBlock","TopButton","_mergeProps","$event","_createTextVNode","_toDisplayString","_openBlock","_hoisted_1","_createVNode","_createElementVNode","_cache","$emit","cacheByMethod","clearCache","apiPath","genCacheKey","api","userId","getCache","cacheKey","setCache","data","useAPI","apiSetSearchParams","minLength","useCache","items","isLoading","countLoading","searchText","nextOffset","callAPI","cache","res","indexWithError","load","append","loadDebounce","debounce","newSearchText","useDebounce","ITEM_ID_ALL","ITEM_ID_NEW","isSelected","modelValue","checkNameForNullId","itemSelected","apiSetSearchParamsFilter","search","fieldName","filters","filter","genFieldFilter","useMenu","emits","multiselect","useAllItem","appendSearchToResult","searchFields","searchType","itemAll","useI18n","resetSearch","genIsShort","localItems","computed","itemsForShow","recalcItemsForShow","genItemsForShow","searchString","searchStringInvertKeyboard","invertKeyboardLayout","itemTitleCategory","itemsCategory","flushCategory","hasIdSearch","name","searchFieldsText","field","itemNew","selectItem","fieldsForWatch","watch","selectableItems","nextIndex","itemI","__emit","__expose","resetAPICache","menu","getPopup","searchTypeLocal","toRef","component","popupRef","placeholder","onOpenerKeydown","e","needOpen","symbolPressed","onClickChanger","onOpen","onClose","onScrollContentList","_unref","TopPopup","_withDirectives","_resolveDynamicComponent","Selector2ItemMulti","_hoisted_2","_hoisted_3","$slots","_renderSlot","_ctx","TopPopupListItem","$i18n","TopPreloader","_component_TopLoadbar","TopPopupWidgetInput"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { TopPopupWorker as M } from "../popup/worker.js";
4
4
  import { sleep as j, waitWhile as B } from "../utils/system.js";
5
5
  import { historySetState as H, setHashs as O } from "../utils/route.js";
6
6
  import { connectScrollShadow as I } from "../utils/scroll.js";
7
- import { T as g, g as k } from "./dialogs.vue_vue_type_script_setup_true_lang-BZM_iKPW.es.js";
7
+ import { T as g, g as k } from "./dialogs.vue_vue_type_script_setup_true_lang-BGpebQij.es.js";
8
8
  import { querySelectorVisible as S, querySelectorAllArray as p, isVisible as c } from "../utils/dom.js";
9
9
  $;
10
10
  let E = !1;
@@ -28,7 +28,7 @@ const F = () => {
28
28
  return;
29
29
  }
30
30
  if (o) {
31
- const i = o.split("-"), d = i.shift(), l = i.join("-");
31
+ const r = o.split("-"), d = r.shift(), l = r.join("-");
32
32
  if (!d) return;
33
33
  const h = y.getElDialogById(d);
34
34
  if (!h) return;
@@ -54,19 +54,19 @@ const F = () => {
54
54
  }
55
55
  if (t.tagName === "TEXTAREA") {
56
56
  if (!e.ctrlKey && !e.metaKey) return;
57
- const r = t.closest("form");
58
- r && p(r, 'button[type="submit"]').concat(p(r, 'input[type="submit"]')).find((d) => c(d))?.click();
57
+ const i = t.closest("form");
58
+ i && p(i, 'button[type="submit"]').concat(p(i, 'input[type="submit"]')).find((d) => c(d))?.click();
59
59
  }
60
60
  }
61
61
  }), document.addEventListener("click", function(e) {
62
62
  if (!(e.target instanceof HTMLElement) || !e.target.classList.contains("ui-widget-overlay")) return;
63
63
  let a, o = 0;
64
- if (p(document, ".ui-dialog").filter((i) => c(i)).forEach((i) => {
65
- const d = Number(window.getComputedStyle(i).zIndex);
66
- d < o || (a = i, o = d);
64
+ if (p(document, ".ui-dialog").filter((r) => c(r)).forEach((r) => {
65
+ const d = Number(window.getComputedStyle(r).zIndex);
66
+ d < o || (a = r, o = d);
67
67
  }), a) {
68
- const i = a.querySelector(".ui-dialog-content");
69
- $(i).dialog("close");
68
+ const r = a.querySelector(".ui-dialog-content");
69
+ $(r).dialog("close");
70
70
  }
71
71
  }), window.addEventListener("resize", y.recalcPositions), y.recalcPositions());
72
72
  }, K = ':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}}', R = '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}', U = ".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%}}", J = "html{--top-dialog-width: auto;--top-dialog-height: auto}.top-dialog{max-width:100vw}.top-dialog .modal-layer-body{height:var(--top-dialog-height)}", Z = ".top-dialog{width:var(--top-dialog-width)!important}";
@@ -101,9 +101,9 @@ const v = (e) => !!e && typeof e == "object" && "jquery" in e, G = () => {
101
101
  if (!e.startsWith("dialog_")) return;
102
102
  const o = k(e);
103
103
  if (o && (o.isOpened.value = !0, t !== void 0 && (o.pageActive.value = t), a !== void 0 && (o.pageActiveNext.value = a), await T(), a)) {
104
- const r = f(e);
105
- if (!r) return;
106
- r.querySelectorAll(`[data-view-page="${a}"]`).length || await B(() => !r.querySelectorAll(`[data-view-page="${a}"]`).length);
104
+ const i = f(e);
105
+ if (!i) return;
106
+ i.querySelectorAll(`[data-view-page="${a}"]`).length || await B(() => !i.querySelectorAll(`[data-view-page="${a}"]`).length);
107
107
  }
108
108
  }, Q = (e) => {
109
109
  const t = e.querySelector(".modal-body");
@@ -116,80 +116,80 @@ const v = (e) => !!e && typeof e == "object" && "jquery" in e, G = () => {
116
116
  }, Y = async (e) => {
117
117
  const t = e.dataset.viewPageActive, a = e.dataset.args ? e.dataset.args?.split(":") : [], o = window.innerWidth;
118
118
  u.state.documentClassModificators.set("top-dialog", "with_dialog");
119
- const i = window.innerWidth - o;
120
- document.documentElement.scrollHeight > window.innerHeight && (document.querySelector("html").style.marginRight = i + "px"), q(), k(e.getAttribute("id"))?.emit?.("open", t, a);
119
+ const r = window.innerWidth - o;
120
+ document.documentElement.scrollHeight > window.innerHeight && (document.querySelector("html").style.marginRight = r + "px"), q(), k(e.getAttribute("id"))?.emit?.("open", t, a);
121
121
  }, N = async (e) => {
122
122
  const t = e.getAttribute("id"), a = e.dataset.viewPageActive;
123
123
  if (a) {
124
- const i = {
124
+ const r = {
125
125
  vpn: g.state.viewPageN,
126
126
  ["view-" + t]: null
127
127
  };
128
- i["view-" + t] = null, (g.state.viewPageN === 0 || g.state.viewPageN === 1) && (i.vpn = null), O(i, !1);
128
+ r["view-" + t] = null, (g.state.viewPageN === 0 || g.state.viewPageN === 1) && (r.vpn = null), O(r, !1);
129
129
  }
130
- p(document, ".ui-widget-overlay").filter((i) => c(i)).length || (u.state.documentClassModificators.delete("top-dialog"), document.querySelector("html").style.marginRight = ""), $(e).trigger("viewAfterClose", [$(e)]);
131
- const r = k(t);
132
- r && (r.isOpened.value = !1, r.emit?.("close", a), r.onCloseOnce && (r.onCloseOnce(r.props, a), r.onCloseOnce = void 0)), window.dispatchEvent(new Event("resize"));
130
+ p(document, ".ui-widget-overlay").filter((r) => c(r)).length || (u.state.documentClassModificators.delete("top-dialog"), document.querySelector("html").style.marginRight = ""), $(e).trigger("viewAfterClose", [$(e)]);
131
+ const i = k(t);
132
+ i && (i.pageActive.value = "", i.isOpened.value = !1, i.emit?.("close", a), i.onCloseOnce && (i.onCloseOnce(i.props, a), i.onCloseOnce = void 0)), window.dispatchEvent(new Event("resize"));
133
133
  }, q = () => {
134
134
  p(document, ".ui-dialog").filter((t) => c(t) && t.querySelector(":scope > .ui-dialog-content")).map((t) => t.querySelector(":scope > .ui-dialog-content")).forEach((t) => {
135
135
  if (!t.querySelector(".modal-body")) return;
136
- const o = t.closest(".ui-dialog"), r = C(t);
137
- r.position ??= { of: window }, $(t).dialog("option", r), o.classList.remove("me-tightly"), (o.clientHeight ?? 0) > window.innerHeight && o.classList.add("me-tightly");
136
+ const o = t.closest(".ui-dialog"), i = C(t);
137
+ i.position ??= { of: window }, $(t).dialog("option", i), o.classList.remove("me-tightly"), (o.clientHeight ?? 0) > window.innerHeight && o.classList.add("me-tightly");
138
138
  });
139
139
  }, D = async (e, t) => {
140
140
  const o = /(\w+)[=-]([\w-]+)(?::([\w.:-]+))?/g.exec(e);
141
141
  if (o) {
142
- const r = o[1], i = o[2], d = o[3];
142
+ const i = o[1], r = o[2], d = o[3];
143
143
  let l = [];
144
- d && (l = d.split(":")), await V(r, i, l, t);
144
+ d && (l = d.split(":")), await V(i, r, l, t);
145
145
  }
146
- }, V = async (e, t, a, o, r) => {
146
+ }, V = async (e, t, a, o, i) => {
147
147
  _ || await new Promise((l, h) => {
148
148
  const n = setInterval(() => {
149
149
  _ && (clearInterval(n), l());
150
150
  }, 10);
151
151
  }), await T();
152
- let i;
153
- if (typeof e == "object" ? (v(e) && (e = e?.[0]), i = e) : i = f(e), !i && typeof e == "string" && g.state.load && (await g.state.load(e), i = f(e), !i))
152
+ let r;
153
+ if (typeof e == "object" ? (v(e) && (e = e?.[0]), r = e) : r = f(e), !r && typeof e == "string" && g.state.load && (await g.state.load(e), r = f(e), !r))
154
154
  throw new Error("Dialog no exists: " + e);
155
- if (!i) return;
156
- await P(i, t, a, o);
157
- const d = $(i);
158
- if (i?.classList.contains("ui-dialog-content"))
155
+ if (!r) return;
156
+ await P(r, t, a, o);
157
+ const d = $(r);
158
+ if (r?.classList.contains("ui-dialog-content"))
159
159
  d.dialog("open");
160
160
  else {
161
- const l = C(i);
161
+ const l = C(r);
162
162
  d.dialog(l);
163
163
  }
164
- r && r(d);
164
+ i && i(d);
165
165
  }, P = async (e, t, a, o) => {
166
- v(e) && (e = e?.[0]), t === void 0 && (t = e.dataset.viewPageActive), a === void 0 && (a = e.dataset.args?.split(":") ?? []), t !== e.dataset.viewPageActive && A(e) && await j(100), await w(e.getAttribute("id"), void 0, t);
167
- const r = p(e, ".modal-layer"), i = r.reduce((n, s) => {
166
+ v(e) && (e = e?.[0]), t === void 0 && (t = e.dataset.viewPageActive), a === void 0 && (a = e.dataset.args?.split(":") ?? []), t !== e.dataset.viewPageActive && L(e) && await j(100), await w(e.getAttribute("id"), void 0, t);
167
+ const i = p(e, ".modal-layer"), r = i.reduce((n, s) => {
168
168
  const m = s.querySelector(":scope > .active");
169
169
  return m && n.push(m), n;
170
- }, []), d = r.reduce((n, s) => {
170
+ }, []), d = i.reduce((n, s) => {
171
171
  const m = s.querySelector(`:scope > [data-view-page="${t}"]`);
172
172
  return m && n.push(m), n;
173
173
  }, []), l = a.join(":");
174
- if (o === void 0 && (o = "next", (d[0]?.dataset.order ?? 0) < (i[0]?.dataset.order ?? 0) && (o = "prev")), !d.length) return;
174
+ if (o === void 0 && (o = "next", (d[0]?.dataset.order ?? 0) < (r[0]?.dataset.order ?? 0) && (o = "prev")), !d.length) return;
175
175
  if (e.dataset.viewPageActive = t, e.dataset.args = a?.join(":") ?? "", d[0].classList.contains("active")) {
176
176
  d[0].dataset.viewPageArgs !== l && d.forEach((n) => {
177
177
  n.dataset.viewPageArgs = l;
178
- }), L(e, d, t, a), x(e, d, t, a);
178
+ }), A(e, d, t, a), x(e, d, t, a);
179
179
  return;
180
180
  }
181
181
  d.forEach((n) => {
182
182
  n.dataset.viewPageArgs = l;
183
- }), i.forEach((n) => {
183
+ }), r.forEach((n) => {
184
184
  n.querySelector(".top-popup-wrapper") && M.close(n.querySelector(".top-popup-wrapper"));
185
185
  });
186
186
  const h = d[0].closest(".ui-dialog");
187
- switch (h && !c(h) && (o = "none"), i.length || (o = "none"), c(d[0]) && (o = "none"), o) {
187
+ switch (h && !c(h) && (o = "none"), r.length || (o = "none"), c(d[0]) && (o = "none"), o) {
188
188
  case "prev": {
189
189
  d.forEach((n) => {
190
190
  const s = n.parentNode?.querySelector(":scope > .active");
191
191
  s && n.parentNode?.insertBefore(n, s);
192
- }), i.forEach((n) => {
192
+ }), r.forEach((n) => {
193
193
  n.classList.add("right-to-center", "reverse");
194
194
  }), d.forEach((n) => {
195
195
  n.classList.add("center-to-left", "reverse");
@@ -200,7 +200,7 @@ const v = (e) => !!e && typeof e == "object" && "jquery" in e, G = () => {
200
200
  d.forEach((n) => {
201
201
  const s = n.parentNode?.querySelector(":scope > .active");
202
202
  s && n.parentNode?.insertBefore(n, s.nextSibling);
203
- }), i.forEach((n) => {
203
+ }), r.forEach((n) => {
204
204
  n?.classList.add("center-to-left");
205
205
  }), d.forEach((n) => {
206
206
  n.classList.add("right-to-center");
@@ -208,45 +208,45 @@ const v = (e) => !!e && typeof e == "object" && "jquery" in e, G = () => {
208
208
  break;
209
209
  }
210
210
  }
211
- if (e.setAttribute("view-page-active", t), i.forEach((n) => {
211
+ if (e.setAttribute("view-page-active", t), r.forEach((n) => {
212
212
  n.classList.remove("active");
213
213
  }), d.forEach((n) => {
214
214
  n.classList.add("active");
215
- }), L(e, d, t, a), o) {
215
+ }), A(e, d, t, a), o) {
216
216
  e.classList.add("i-change-page");
217
217
  const n = Number(window.getComputedStyle(d[0]).animationDuration.replace("s", "")) * 1e3;
218
218
  z = setTimeout(function() {
219
- w(e.getAttribute("id"), t, ""), A(e), x(e, d, t, a);
219
+ w(e.getAttribute("id"), t, ""), L(e), x(e, d, t, a);
220
220
  }, n);
221
221
  } else
222
222
  await w(e.getAttribute("id"), t, ""), x(e, d, t, a);
223
223
  }, ee = (e) => {
224
- const r = p(e, ".modal-layer").reduce((i, d) => {
224
+ const i = p(e, ".modal-layer").reduce((r, d) => {
225
225
  const l = d.querySelector(":scope > .active");
226
- return l && i.push(l), i;
227
- }, []).reduce((i, d) => {
226
+ return l && r.push(l), r;
227
+ }, []).reduce((r, d) => {
228
228
  let l = d.previousElementSibling;
229
229
  for (; l && !l.hasAttribute("data-view-page"); )
230
230
  l = l.previousElementSibling;
231
- return l && i.push(l), i;
231
+ return l && r.push(l), r;
232
232
  }, [])[0]?.dataset.viewPage;
233
- r ? P(e, r, void 0, "prev") : $(e).dialog("close");
234
- }, b = /* @__PURE__ */ new Set(), L = (e, t, a, o) => {
235
- const r = e.getAttribute("id") + t[0].dataset.viewPage + a + o.join();
236
- b.has(r) || (b.add(r), setTimeout(function() {
237
- b.delete(r), $(e).trigger("viewBeforeOpen", [$(e), $(t), a, o]);
233
+ i ? P(e, i, void 0, "prev") : $(e).dialog("close");
234
+ }, b = /* @__PURE__ */ new Set(), A = (e, t, a, o) => {
235
+ const i = e.getAttribute("id") + t[0].dataset.viewPage + a + o.join();
236
+ b.has(i) || (b.add(i), setTimeout(function() {
237
+ b.delete(i), $(e).trigger("viewBeforeOpen", [$(e), $(t), a, o]);
238
238
  }));
239
239
  }, x = (e, t, a, o) => {
240
240
  setTimeout(function() {
241
241
  $(e).trigger("viewAfterOpen", [$(e), $(t), a, o]);
242
242
  });
243
- }, W = (e) => (v(e) && (e = e?.[0]), e.classList.contains("i-change-page")), A = (e) => {
243
+ }, W = (e) => (v(e) && (e = e?.[0]), e.classList.contains("i-change-page")), L = (e) => {
244
244
  if (!W(e)) return !1;
245
245
  clearTimeout(z);
246
246
  const t = p(e, ".modal-layer"), a = e.dataset.viewPageActive;
247
247
  return e.classList.remove("i-change-page"), t.forEach((o) => {
248
- o.querySelectorAll(":scope > [data-view-page]").forEach((r) => {
249
- r.classList.remove("center-to-left", "right-to-center", "reverse", "active");
248
+ o.querySelectorAll(":scope > [data-view-page]").forEach((i) => {
249
+ i.classList.remove("center-to-left", "right-to-center", "reverse", "active");
250
250
  });
251
251
  }), t.forEach((o) => {
252
252
  o.querySelector(`:scope > [data-view-page="${a}"]`)?.classList.add("active");
@@ -258,15 +258,15 @@ const v = (e) => !!e && typeof e == "object" && "jquery" in e, G = () => {
258
258
  a.dialog("instance") && a.dialog("close");
259
259
  }, oe = (e, t, a) => {
260
260
  v(e) && (e = e.toArray());
261
- const o = e.reduce((r, i) => (i.hasAttribute("data-view-page") && c(i) && r.push(i), r), []);
262
- t ? (a !== void 0 && o.forEach((r) => {
263
- r.style.setProperty("--dialog-loading-duration", a + "s");
264
- }), o.forEach((r) => {
265
- r.classList.add("i-load-data");
266
- })) : (o.forEach((r) => {
267
- r.classList.remove("i-load-data");
268
- }), o.forEach((r) => {
269
- r.style.setProperty("--dialog-loading-duration", "10s");
261
+ const o = e.reduce((i, r) => (r.hasAttribute("data-view-page") && c(r) && i.push(r), i), []);
262
+ t ? (a !== void 0 && o.forEach((i) => {
263
+ i.style.setProperty("--dialog-loading-duration", a + "s");
264
+ }), o.forEach((i) => {
265
+ i.classList.add("i-load-data");
266
+ })) : (o.forEach((i) => {
267
+ i.classList.remove("i-load-data");
268
+ }), o.forEach((i) => {
269
+ i.style.setProperty("--dialog-loading-duration", "10s");
270
270
  }));
271
271
  }, ae = (e) => (v(e) && (e = e?.[0]), e.classList.contains("i-load-data")), y = {
272
272
  getElDialogById: f,
@@ -285,4 +285,4 @@ G();
285
285
  export {
286
286
  y as TopDialogUtils
287
287
  };
288
- //# sourceMappingURL=utils-DQ-xahGh.es.js.map
288
+ //# sourceMappingURL=utils-BJXd6gcx.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-BJXd6gcx.es.js","sources":["../../src/storybook/jquery.ts","../../src/components/dialog/lib/utils.globalEvents.ts","../../src/components/dialog/lib/utils.ts"],"sourcesContent":["/**\n * см. /.storybook/preview-head.html\n */\nexport default $;\n","import { TopDialogUtils } from './utils';\nimport { TopDialogWorker } from './worker';\nimport { isVisible, querySelectorAllArray, querySelectorVisible } from '@/core/utils/dom';\nimport { historySetState } from '@/core/utils/route';\nimport type { ElTopDialog, ElTopDialogWrapper } from '@/components/dialog/lib/types';\n\nlet inited = false;\n\n/**\n * Инициализация глобальных событий для диалоговых окон\n *\n * Производится один раз при подключении диалогового окна\n *\n * События не размонтируются\n */\nexport const initDialogGlobalEvents = () => {\n\tif (inited) return;\n\tinited = true;\n\n\t/**\n\t * Закрытие диалога по Esc\n\t */\n\tdocument.addEventListener('keydown', (e) => {\n\t\tif (e.key !== 'Escape') return;\n\t\tif (!e.target || !(e.target instanceof HTMLElement)) return;\n\n\t\tconst el = e.target;\n\n\t\t// событие произошло вне диалогового окна\n\t\tif (!el.closest('.ui-dialog')) return;\n\n\t\tif (el.contentEditable === 'true' || el.contentEditable === 'plaintext-only') return;\n\n\t\t// не закрывать окно при открытом TopPopup\n\t\tif (querySelectorVisible(document.documentElement, '.top-popup-wrapper')) return;\n\n\t\t// не закрывать окно при работе с jquery autocomplete\n\t\tif (el.classList.contains('autocomplete')) return;\n\n\t\t// не закрывать окно при открытом fancybox\n\t\tif (querySelectorVisible(document.documentElement, '.fancybox-container')) return;\n\n\t\tconst elDialogs = querySelectorAllArray<ElTopDialog>(document, '.ui-dialog-content').filter((elDialog) => {\n\t\t\treturn isVisible(elDialog);\n\t\t});\n\n\t\t$(elDialogs[elDialogs.length - 1]).dialog('close');\n\t});\n\n\t/**\n\t * Закрытие диалога по кнопке закрыть\n\t */\n\tdocument.addEventListener('click', (e) => {\n\t\t// // навигация без истории\n\t\t// var $dialog = $(this).closest('.ui-dialog-content');\n\t\t// var viewName = $dialog.attr('id');\n\t\t// var pageName = getHash('view-' + viewName);\n\t\t// if (!pageName) {\n\t\t// \ttoPrevPage($dialog);\n\t\t//\n\t\t// \treturn;\n\t\t// }\n\t\t//\n\t\t// // навигация по истории\n\t\t// if (Core.state.isMobile && history.length > 1 && $(this).closest('.modal-layer').length) {\n\t\t// \tvar href = location.href;\n\t\t//\n\t\t// \thistory.go(-1);\n\t\t//\n\t\t// \tsetTimeout(() => {\n\t\t// \t\t// это первая страница в истории вкладки браузера\n\t\t// \t\tif (href === location.href) $(e.target).closest('.ui-dialog-content').dialog('close');\n\t\t// \t});\n\t\t// } else {\n\t\t// \t$(this).closest('.ui-dialog-content').dialog('close');\n\t\t// }\n\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\tconst el = e.target.closest('[data-action=\"top-dialog-close\"]') as HTMLElement | null;\n\t\tif (!el) return;\n\n\t\te.preventDefault();\n\n\t\tconst elDialog = el.closest<ElTopDialog>('.ui-dialog-content');\n\t\tif (!elDialog) return;\n\n\t\t// если к кнопке привязана ссылка, диалоговое окно не нужно закрывать\n\t\tconst toView = el.dataset.toView;\n\n\t\tif (toView == 'toPrevPage()') {\n\t\t\tTopDialogUtils.toPrevPage(elDialog);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (toView) {\n\t\t\tconst viewNameAndPageLink = toView.split('-');\n\t\t\tconst viewName = viewNameAndPageLink.shift();\n\t\t\tconst pageLink = viewNameAndPageLink.join('-');\n\n\t\t\tif (!viewName) return;\n\n\t\t\tconst elDialog = TopDialogUtils.getElDialogById(viewName);\n\t\t\tif (!elDialog) return;\n\n\t\t\tconst elToPages = querySelectorAllArray(elDialog, `[data-view-page=\"${pageLink}\"]`);\n\t\t\tif (!elToPages) return;\n\n\t\t\tif (!isVisible(elToPages[0])) {\n\t\t\t\tconst hash = TopDialogWorker.genViewPageHash(toView, 'prev');\n\n\t\t\t\t// // не убирает кнопку \"Вперед\" в браузере\n\t\t\t\t// history.replaceState(null, '', hash);\n\t\t\t\t// toViewDirty(toView, 'prev');\n\n\t\t\t\t// // добавляет текущую страницу в историю браузера\n\t\t\t\thistorySetState(false, hash);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tconst $dialog = $(elDialog);\n\n\t\t$dialog.dialog('close');\n\t});\n\n\t/**\n\t * Все submit должны обрабатываться через js\n\t */\n\tdocument.addEventListener('submit', (e) => {\n\t\tconst elForm = e.target as HTMLElement;\n\n\t\tif (elForm.matches('.modal-body > form') || elForm.matches('.modal-layer-body > form')) {\n\t\t\te.preventDefault();\n\t\t}\n\t});\n\n\t/**\n\t * Выполнение действия по нажатию Enter\n\t *\n\t * @todo Убрать `.searcher`\n\t */\n\tdocument.addEventListener('keypress', (e) => {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\tconst eventTarget = e.target;\n\n\t\tconst elModalBody = eventTarget.closest('.ui-dialog .modal-body');\n\t\tif (!elModalBody) return;\n\n\t\tconst isInput =\n\t\t\teventTarget.matches('input:not(.searcher), textarea:not(.searcher), select:not(.searcher), button:not(.searcher)')\n\t\t\t|| eventTarget.hasAttribute('contenteditable');\n\t\tif (!isInput) return;\n\n\t\t// if (e.keyCode !== 10 && e.key !== 'ENTER') return;\n\t\tif (e.key !== 'Enter') return;\n\n\t\t// не выполнять submit действий при работе с jquery autocomplete\n\t\tif (eventTarget.classList.contains('autocomplete')) {\n\t\t\te.preventDefault();\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (eventTarget.tagName === 'TEXTAREA') {\n\t\t\tif (!e.ctrlKey && !e.metaKey) return;\n\n\t\t\tconst elForm = eventTarget.closest('form');\n\n\t\t\tif (elForm) {\n\t\t\t\t// Find visible submit buttons\n\t\t\t\tconst elSubmitButton = querySelectorAllArray(elForm, 'button[type=\"submit\"]')\n\t\t\t\t\t.concat(querySelectorAllArray(elForm, 'input[type=\"submit\"]'))\n\t\t\t\t\t.find((elSubmitButton) => {\n\t\t\t\t\t\treturn isVisible(elSubmitButton);\n\t\t\t\t\t});\n\n\t\t\t\telSubmitButton?.click();\n\t\t\t}\n\t\t}\n\t});\n\n\t/**\n\t * Закрытие диалога по клику вне окна\n\t */\n\tdocument.addEventListener('click', function (event) {\n\t\tif (!(event.target instanceof HTMLElement)) return;\n\n\t\tconst eventTarget = event.target;\n\n\t\tif (!eventTarget.classList.contains('ui-widget-overlay')) return;\n\n\t\tlet elDialogWrapperWithTopZIndex: ElTopDialogWrapper | undefined;\n\t\tlet topZIndex = 0;\n\n\t\tconst elDialogWrapperVisibles = querySelectorAllArray<ElTopDialogWrapper>(document, '.ui-dialog').filter((elDialogWrapper) => {\n\t\t\treturn isVisible(elDialogWrapper);\n\t\t});\n\n\t\telDialogWrapperVisibles.forEach((elDialogWrapper) => {\n\t\t\tconst zIndex = Number(window.getComputedStyle(elDialogWrapper).zIndex);\n\t\t\tif (zIndex < topZIndex) return;\n\n\t\t\telDialogWrapperWithTopZIndex = elDialogWrapper;\n\t\t\ttopZIndex = zIndex;\n\t\t});\n\n\t\tif (elDialogWrapperWithTopZIndex) {\n\t\t\tconst elDialog = elDialogWrapperWithTopZIndex.querySelector('.ui-dialog-content');\n\n\t\t\t$(elDialog).dialog('close');\n\t\t}\n\t});\n\n\twindow.addEventListener('resize', TopDialogUtils.recalcPositions);\n\tTopDialogUtils.recalcPositions();\n};\n","import 'jquery';\nimport { nextTick } from 'vue';\n\nimport Core from '@/core/core/core';\nimport { TopPopupWorker } from '@/components/popup/worker';\nimport { sleep, waitWhile } from '@/core/utils/system';\nimport { setHashs } from '@/core/utils/route';\nimport { connectScrollShadow } from '@/core/utils/scroll';\n\nimport type { ElTopDialog, ElTopDialogBody, ElTopDialogModalLayer, ElTopDialogPage, ElTopDialogWrapper, MoveDirection } from './types';\nimport { TopDialogWorker } from './worker';\nimport { initDialogGlobalEvents } from './utils.globalEvents';\nimport { getDialogWorker } from '../dialog/dialogs/dialogs.vue';\n\nimport css from '../dialog/style/dialog.css?inline';\nimport cssM from '../dialog/style/dialog.m.css?inline';\nimport cssPC from '../dialog/style/dialog.pc.css?inline';\nimport cssModern from '../dialog/style/modern/dialog.css?inline';\nimport cssModernPC from '../dialog/style/modern/dialog.pc.css?inline';\nimport { isVisible, querySelectorAllArray } from '@/core/utils/dom';\n\nCore.insertStyleToPage(css);\nCore.insertStyleToPage(cssM, 'm');\nCore.insertStyleToPage(cssPC, 'pc');\nCore.insertStyleToPage(cssModern);\nCore.insertStyleToPage(cssModernPC, 'pc');\n\nlet timerClearAnimation: NodeJS.Timeout;\nlet isInited = false;\n\n/**\n * Является ли элемент JQuery<HTMLElement>\n */\nconst isElJQuery = (el: JQuery<HTMLElement> | HTMLElement | HTMLElement[]) => {\n\treturn !!el && typeof el === 'object' && 'jquery' in el;\n};\n\nconst init = () => {\n\t$.extend($.ui.dialog.prototype.options, {\n\t\tfocus: (e: any) => {\n\t\t\te.target.focus();\n\n\t\t\t$('[autofocus]', e.target)[0]?.focus();\n\n\t\t\t// setTimeout(function () {\n\t\t\t// \tif ($('[autofocus]', e.target).length) return;\n\t\t\t// \t$('.modal-footer button:first, .modal-body :input:first', e.target).eq(0).focus();\n\t\t\t//\n\t\t\t// \t// fix пропадающего autocomplete при нажатии на scroll в autocomplete\n\t\t\t// \t$(e.target).add($(e.target).closest('.ui-dialog')).removeAttr('tabindex');\n\t\t\t// });\n\t\t},\n\t\tcreate: (e: any) => onCreate(e.target),\n\t\topen: (e: any) => onOpen(e.target),\n\t\tclose: (e: any) => onClose(e.target),\n\t\tmodal: true,\n\t\tresizable: false,\n\t\tcloseOnEscape: false,\n\t\twidth: 'auto',\n\t\tminHeight: 0,\n\t});\n\n\t$.ui.dialog.prototype._focusTabbable = $.noop;\n\n\t$.ui.dialog.prototype._moveToTopOriginal = $.ui.dialog.prototype._moveToTop;\n\t$.ui.dialog.prototype._moveToTop = function () {\n\t\tthis._moveToTopOriginal();\n\n\t\tconst $dialog = $(this.element);\n\t\t$dialog.trigger('dialogsMoveToTop', [$dialog]);\n\t};\n\n\tinitDialogGlobalEvents();\n\n\tisInited = true;\n};\n\n/**\n * Получить настройки диалогового окна из Vue компонента\n */\nconst genVueOptions = (elDialog: ElTopDialog) => {\n\tconst options: {\n\t\tmodal?: boolean,\n\t\tposition?: any,\n\t} = {};\n\n\tif (elDialog.dataset?.modal === 'false') options.modal = false;\n\tif (elDialog.dataset?.position) options.position = JSON.parse(elDialog.dataset.position);\n\n\treturn options;\n};\n\nconst getElDialogById = (id: string) => {\n\treturn <ElTopDialog | null>document.getElementById(id);\n};\n\n/**\n * Сменить состояние диалогового окна Vue\n */\nconst updatePageVue = async (dialogId: string, pageName?: string, pageNameNext?: string) => {\n\tif (!dialogId.startsWith('dialog_')) return;\n\n\tconst dialog = getDialogWorker(dialogId);\n\tif (!dialog) return;\n\n\tdialog.isOpened.value = true;\n\tif (pageName !== undefined) dialog.pageActive.value = pageName;\n\tif (pageNameNext !== undefined) dialog.pageActiveNext.value = pageNameNext;\n\n\tawait nextTick();\n\n\tif (pageNameNext) {\n\t\tconst elDialog = getElDialogById(dialogId);\n\t\tif (!elDialog) return;\n\n\t\tconst elNextpages = elDialog.querySelectorAll(`[data-view-page=\"${pageNameNext}\"]`);\n\n\t\tif (!elNextpages.length) {\n\t\t\tawait waitWhile(() => !elDialog.querySelectorAll(`[data-view-page=\"${pageNameNext}\"]`).length);\n\t\t}\n\t}\n};\n\n/**\n * Callback for jQuery dialog onCreate\n */\nconst onCreate = (elDialog: ElTopDialog) => {\n\tconst elDialogBody = elDialog.querySelector<ElTopDialogBody>('.modal-body');\n\tif (!elDialogBody) return;\n\n\tconnectScrollShadow(elDialogBody);\n\n\tTopDialogWorker.state.decoratorOnCreate?.(elDialog);\n\n\tinitPopup(elDialog);\n};\n\n/**\n * Инициирование событий TopPopup в диалоговом окне\n */\nconst initPopup = (elDialog: HTMLElement) => {\n\t$(elDialog).on('aftershow.top-menu-popup', '[data-top-popup]', (_e, $popup) => {\n\t\t// перенести popup в корневой элемент страницы диалогового окна\n\t\tconst elPopup = $popup[0];\n\n\t\t// перенести popup в корневой элемент страницы диалогового окна\n\t\tconst elPageContents = TopDialogWorker.getPairPage(elPopup);\n\t\telPageContents?.[1]?.prepend(elPopup);\n\t});\n};\n\n/**\n * Callback for jQuery dialog onOpen\n */\nconst onOpen = async (elDialog: ElTopDialog) => {\n\tconst pageName = elDialog.dataset.viewPageActive;\n\tconst args = elDialog.dataset.args ? elDialog.dataset.args?.split(':') : [];\n\n\tconst w1 = window.innerWidth;\n\n\tCore.state.documentClassModificators.set('top-dialog', 'with_dialog');\n\n\tconst w2 = window.innerWidth;\n\n\tconst scrollBarWidth = w2 - w1;\n\tif (document.documentElement.scrollHeight > window.innerHeight) document.querySelector('html')!.style.marginRight = scrollBarWidth + 'px';\n\n\trecalcPositions();\n\n\tconst dialog = getDialogWorker(elDialog.getAttribute('id')!);\n\tdialog?.emit?.('open', pageName, args);\n};\n\n/**\n * Callback for jQuery dialog onClose\n */\nconst onClose = async (elDialog: ElTopDialog) => {\n\tconst viewName = elDialog.getAttribute('id');\n\tconst pageName = elDialog.dataset.viewPageActive;\n\n\tif (pageName) {\n\t\tconst hashData = {\n\t\t\tvpn: TopDialogWorker.state.viewPageN as number | null,\n\t\t\t['view-' + viewName]: null,\n\t\t};\n\t\thashData['view-' + viewName] = null;\n\n\t\tif (TopDialogWorker.state.viewPageN === 0 || TopDialogWorker.state.viewPageN === 1) {\n\t\t\thashData.vpn = null;\n\t\t}\n\n\t\tsetHashs(hashData, false);\n\t}\n\n\tconst elUiWidgetOverlayVisibles = querySelectorAllArray(document, '.ui-widget-overlay').filter((el) => {\n\t\treturn isVisible(el);\n\t});\n\n\tif (!elUiWidgetOverlayVisibles.length) {\n\t\tCore.state.documentClassModificators.delete('top-dialog');\n\n\t\tdocument.querySelector('html')!.style.marginRight = '';\n\t}\n\n\t$(elDialog).trigger('viewAfterClose', [$(elDialog)]);\n\n\tconst dialog = getDialogWorker(viewName);\n\n\tif (dialog) {\n\t\tdialog.pageActive.value = '';\n\t\tdialog.isOpened.value = false;\n\t\tdialog.emit?.('close', pageName);\n\n\t\tif (dialog.onCloseOnce) {\n\t\t\tdialog.onCloseOnce(dialog.props, pageName);\n\t\t\tdialog.onCloseOnce = undefined;\n\t\t}\n\t}\n\n\t// после закрытия диалога может потребоваться пересчет позиций элементов\n\twindow.dispatchEvent(new Event('resize'));\n};\n\n/**\n * Пересчитать положения и размеры открытых диалоговых окон\n */\nconst recalcPositions = () => {\n\tconst elDialogVisibilityes = querySelectorAllArray(document, '.ui-dialog').filter((el) => {\n\t\treturn isVisible(el) && el.querySelector<ElTopDialog>(':scope > .ui-dialog-content');\n\t}).map((el) => {\n\t\treturn el.querySelector<ElTopDialog>(':scope > .ui-dialog-content')!;\n\t});\n\n\telDialogVisibilityes.forEach((elDialog) => {\n\t\tconst elDialogBody = elDialog.querySelector<ElTopDialogBody>('.modal-body');\n\t\tif (!elDialogBody) return;\n\n\t\tconst elDialogWrapper = elDialog.closest('.ui-dialog');\n\n\t\tconst options = genVueOptions(elDialog);\n\n\t\toptions.position ??= { of: window };\n\n\t\tconst $dialog = $(elDialog);\n\t\t$dialog.dialog('option', options);\n\n\t\telDialogWrapper.classList.remove('me-tightly');\n\t\tif ((elDialogWrapper.clientHeight ?? 0) > window.innerHeight) elDialogWrapper.classList.add('me-tightly');\n\t});\n};\n\n/**\n * Переход к view page по неразобранной ссылке в формате: {viewName}-{pageName}[:args]\n */\nconst toViewDirty = async (toViewPageName: string, moveDirection?: MoveDirection) => {\n\tconst regexp = /(\\w+)[=-]([\\w-]+)(?::([\\w.:-]+))?/g;\n\tconst toViewParts = regexp.exec(toViewPageName);\n\tif (toViewParts) {\n\t\tconst viewName = toViewParts[1];\n\t\tconst pageName = toViewParts[2];\n\t\tconst argsString = toViewParts[3];\n\n\t\tlet args: string[] = [];\n\t\tif (argsString) args = argsString.split(':');\n\n\t\tawait toView(viewName, pageName, args, moveDirection);\n\t}\n};\n\n/**\n * Открыть диалоговое окно, возможно указать нужную страницу\n * @param viewNameOrElDialog - id страницы окна или элемент окна\n * @param pageName - имя страницы\n * @param args - аргументы, набор проивзольных параметров, которые могут обрабатываться каждым окном по своему\n * @param moveDirection\n * @param callback - функция, которая будет запущена после октытия страницы\n */\nconst toView = async (\n\tviewNameOrElDialog: ElTopDialog | JQuery<ElTopDialog> | string,\n\tpageName?: string,\n\targs?: string[],\n\tmoveDirection?: MoveDirection,\n\tcallback?: Function,\n) => {\n\tif (!isInited) {\n\t\tawait new Promise<void>((resolve, _reject) => {\n\t\t\tconst timer = setInterval(() => {\n\t\t\t\tif (!isInited) return;\n\n\t\t\t\tclearInterval(timer);\n\n\t\t\t\tresolve();\n\t\t\t}, 10);\n\t\t});\n\t}\n\n\tawait nextTick();\n\n\tlet elDialog: ElTopDialog | null;\n\tif (typeof (viewNameOrElDialog) === 'object') {\n\t\tif (isElJQuery(viewNameOrElDialog)) viewNameOrElDialog = viewNameOrElDialog?.[0]; // todo: убрать после переписки jquery на сайте\n\n\t\telDialog = viewNameOrElDialog;\n\t} else {\n\t\telDialog = getElDialogById(viewNameOrElDialog);\n\t}\n\n\t// Диалоговое окно еще не загружено\n\tif (!elDialog && typeof viewNameOrElDialog === 'string' && TopDialogWorker.state.load) {\n\t\tawait TopDialogWorker.state.load(viewNameOrElDialog);\n\n\t\telDialog = getElDialogById(viewNameOrElDialog);\n\t\tif (!elDialog) {\n\t\t\tthrow new Error('Dialog no exists: ' + viewNameOrElDialog);\n\t\t}\n\t}\n\n\tif (!elDialog) return;\n\n\tawait toViewPage(elDialog, pageName, args, moveDirection);\n\n\tconst $dialog = $(elDialog);\n\n\tif (elDialog?.classList.contains('ui-dialog-content')) {\n\t\t// var zIndexMax = 0;\n\t\t// $.map($('.ui-dialog'), function (el) {\n\t\t// \tvar zIndex = $(el).css('z-index') * 1;\n\t\t// \tif (zIndex > zIndexMax) zIndexMax = zIndex;\n\t\t// });\n\t\t//\n\t\t// if ($dialog.is(':hidden')) $dialog.dialog('open');\n\t\t//\n\t\t// var $dialogWrapper = $dialog.parent();\n\t\t// var $dialogOverlay = $dialogWrapper.next();\n\t\t//\n\t\t// if ($dialogWrapper.css('z-index') * 1 < zIndexMax) {\n\t\t// \t$dialogWrapper.css('z-index', zIndexMax + 2);\n\t\t// \t$dialogOverlay.css('z-index', zIndexMax + 1);\n\t\t// }\n\n\t\t$dialog.dialog('open');\n\t} else {\n\t\tconst options = genVueOptions(elDialog);\n\n\t\t$dialog.dialog(options);\n\t}\n\n\tif (callback) callback($dialog);\n};\n\nconst toViewPage = async (elDialog: ElTopDialog | JQuery<ElTopDialog>, pageName?: string, args?: string[], moveDirection?: MoveDirection) => {\n\t// todo: убрать после переписки jquery на сайте\n\tif (isElJQuery(elDialog)) elDialog = elDialog?.[0];\n\n\tif (pageName === undefined) pageName = elDialog.dataset.viewPageActive;\n\tif (args === undefined) args = elDialog.dataset.args?.split(':') ?? [];\n\n\tif (pageName !== elDialog.dataset.viewPageActive) {\n\t\tconst stopped = stopAnimations(elDialog);\n\t\tif (stopped) await sleep(100);\n\t}\n\n\tawait updatePageVue(elDialog.getAttribute('id') as string, undefined, pageName);\n\n\tconst elModalLayers = querySelectorAllArray<ElTopDialogModalLayer>(elDialog, '.modal-layer');\n\tconst elCurrentPages = elModalLayers.reduce<ElTopDialogPage[]>((acc, elModalLayer) => {\n\t\tconst elCurrentPage = elModalLayer.querySelector<ElTopDialogPage>(':scope > .active');\n\t\tif (elCurrentPage) {\n\t\t\tacc.push(elCurrentPage);\n\t\t}\n\n\t\treturn acc;\n\t}, []);\n\n\tconst elNextPages = elModalLayers.reduce<ElTopDialogPage[]>((acc, elModalLayer) => {\n\t\tconst elNextPage = elModalLayer.querySelector<ElTopDialogPage>(`:scope > [data-view-page=\"${pageName}\"]`);\n\t\tif (elNextPage) {\n\t\t\tacc.push(elNextPage);\n\t\t}\n\n\t\treturn acc;\n\t}, []);\n\n\tconst argsString = args.join(':');\n\n\tif (moveDirection === undefined) {\n\t\tmoveDirection = 'next';\n\t\tif ((elNextPages[0]?.dataset.order ?? 0) < (elCurrentPages[0]?.dataset.order ?? 0)) moveDirection = 'prev';\n\t}\n\n\tif (!elNextPages.length) return;\n\n\telDialog.dataset.viewPageActive = pageName;\n\telDialog.dataset.args = args?.join(':') ?? '';\n\n\t// запрашиваемая страница уже открыта\n\tif (elNextPages[0].classList.contains('active')) {\n\t\tif (elNextPages[0].dataset.viewPageArgs !== argsString) {\n\t\t\telNextPages.forEach((elNextPage) => {\n\t\t\t\telNextPage.dataset.viewPageArgs = argsString;\n\t\t\t});\n\n\t\t\t// dialogs.beforeOpenViewPage($dialog, $nextPage, pageName, args);\n\t\t\t// dialogs.afterOpenViewPage($dialog, $nextPage, pageName, args);\n\t\t}\n\n\t\tbeforeOpenViewPage(elDialog, elNextPages, pageName, args);\n\t\tafterOpenViewPage(elDialog, elNextPages, pageName, args);\n\n\t\treturn;\n\t}\n\n\telNextPages.forEach((elNextPage) => {\n\t\telNextPage.dataset.viewPageArgs = argsString;\n\t});\n\n\telCurrentPages.forEach((elCurrentPage) => {\n\t\tif (elCurrentPage.querySelector('.top-popup-wrapper')) {\n\t\t\tTopPopupWorker.close(elCurrentPage.querySelector('.top-popup-wrapper')!);\n\t\t}\n\t});\n\n\tconst elDialogWrapper = elNextPages[0].closest<ElTopDialogWrapper>('.ui-dialog');\n\n\tif (elDialogWrapper && !isVisible(elDialogWrapper)) moveDirection = 'none';\n\tif (!elCurrentPages.length) moveDirection = 'none';\n\tif (isVisible(elNextPages[0])) moveDirection = 'none';\n\n\tswitch (moveDirection) {\n\t\tcase 'prev': {\n\t\t\telNextPages.forEach((elNextPage) => {\n\t\t\t\tconst elActive = elNextPage.parentNode?.querySelector(':scope > .active');\n\t\t\t\tif (elActive) elNextPage.parentNode?.insertBefore(elNextPage, elActive);\n\t\t\t});\n\n\t\t\telCurrentPages.forEach((elCurrentPage) => {\n\t\t\t\telCurrentPage.classList.add('right-to-center', 'reverse');\n\t\t\t});\n\n\t\t\telNextPages.forEach((elNextPage) => {\n\t\t\t\telNextPage.classList.add('center-to-left', 'reverse');\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\t\tcase 'next': {\n\t\t\telNextPages.forEach((elNextPage) => {\n\t\t\t\tconst elActive = elNextPage.parentNode?.querySelector(':scope > .active');\n\t\t\t\tif (elActive) elNextPage.parentNode?.insertBefore(elNextPage, elActive.nextSibling);\n\t\t\t});\n\n\t\t\telCurrentPages.forEach((elCurrentPage) => {\n\t\t\t\telCurrentPage?.classList.add('center-to-left');\n\t\t\t});\n\n\t\t\telNextPages.forEach((elNextPage) => {\n\t\t\t\telNextPage.classList.add('right-to-center');\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\telDialog.setAttribute('view-page-active', pageName);\n\n\telCurrentPages.forEach((elCurrentPage) => {\n\t\telCurrentPage.classList.remove('active');\n\t});\n\n\telNextPages.forEach((elNextPage) => {\n\t\telNextPage.classList.add('active');\n\t});\n\n\tbeforeOpenViewPage(elDialog, elNextPages, pageName, args);\n\n\tif (moveDirection) {\n\t\telDialog.classList.add('i-change-page');\n\n\t\tconst delay = Number(window.getComputedStyle(elNextPages[0]).animationDuration.replace('s', '')) * 1000;\n\n\t\ttimerClearAnimation = setTimeout(function () {\n\t\t\tupdatePageVue(elDialog.getAttribute('id'), pageName, '');\n\t\t\tstopAnimations(elDialog);\n\t\t\tafterOpenViewPage(elDialog, elNextPages, pageName, args);\n\t\t}, delay);\n\t} else {\n\t\tawait updatePageVue(elDialog.getAttribute('id'), pageName, '');\n\t\tafterOpenViewPage(elDialog, elNextPages, pageName, args);\n\t}\n};\n\n/**\n * К предыдущему представлению\n */\nconst toPrevPage = (elDialog: ElTopDialog) => {\n\tconst elModalLayers = querySelectorAllArray<ElTopDialogModalLayer>(elDialog, '.modal-layer');\n\tconst elCurrentPages = elModalLayers.reduce<ElTopDialogPage[]>((acc, elModalLayer) => {\n\t\tconst elCurrentPage = elModalLayer.querySelector<ElTopDialogPage>(':scope > .active');\n\n\t\tif (elCurrentPage) {\n\t\t\tacc.push(elCurrentPage);\n\t\t}\n\n\t\treturn acc;\n\t}, []);\n\n\tconst elPrevPages = elCurrentPages.reduce<ElTopDialogPage[]>((acc, elCurrentPage) => {\n\t\tlet elPrevPage = elCurrentPage.previousElementSibling as ElTopDialogPage | null;\n\t\twhile (elPrevPage && !elPrevPage.hasAttribute('data-view-page')) {\n\t\t\telPrevPage = elPrevPage.previousElementSibling as ElTopDialogPage | null;\n\t\t}\n\n\t\tif (elPrevPage) acc.push(elPrevPage);\n\n\t\treturn acc;\n\t}, []);\n\n\tconst prevPageName = (elPrevPages[0])?.dataset.viewPage;\n\n\tif (prevPageName) {\n\t\tvoid toViewPage(elDialog, prevPageName, undefined, 'prev');\n\t} else {\n\t\tconst $dialog = $(elDialog);\n\t\t$dialog.dialog('close');\n\t}\n};\n\n/**\n * Для обработки событий вне vue\n */\nconst beforeOpenViewPageTimers = new Set();\nconst beforeOpenViewPage = (elDialog: ElTopDialog, elPages: ElTopDialogPage[], pageName: string, args: string[]) => {\n\t// группировка цепочки событий\n\t// запрос на открытие страницы может выполняться несколько раз, чаще такое может быть при открытии, загрузке и переходе сразу к нужной странице\n\tconst eventKey = elDialog.getAttribute('id') + elPages[0].dataset.viewPage + pageName + args.join();\n\n\tif (beforeOpenViewPageTimers.has(eventKey)) return;\n\tbeforeOpenViewPageTimers.add(eventKey);\n\n\tsetTimeout(function () {\n\t\tbeforeOpenViewPageTimers.delete(eventKey);\n\n\t\t$(elDialog).trigger('viewBeforeOpen', [$(elDialog), $(elPages), pageName, args]);\n\t});\n};\n\n/**\n * Для обработки событий вне vue\n */\nconst afterOpenViewPage = (elDialog: ElTopDialog, elPages: ElTopDialogPage[], pageName: string, args: string[]) => {\n\tsetTimeout(function () {\n\t\t$(elDialog).trigger('viewAfterOpen', [$(elDialog), $(elPages), pageName, args]);\n\t});\n};\n\n/**\n * Получить состояние: Диалоговое окно находится в состоянии смены страницы\n */\nconst inAnimation = (elDialog: ElTopDialog | JQuery<ElTopDialog>) => {\n\tif (isElJQuery(elDialog)) elDialog = elDialog?.[0]; // todo: убрать после переписки jquery на сайте\n\n\treturn elDialog.classList.contains('i-change-page');\n};\n\n/**\n * Остановить анимацию смены страницы\n *\n * @returns Вернет true, если анимация производилась и была остановлена\n */\nconst stopAnimations = (elDialog: ElTopDialog) => {\n\tif (!inAnimation(elDialog)) return false;\n\n\tclearTimeout(timerClearAnimation);\n\n\tconst elModalLayers = querySelectorAllArray(elDialog, '.modal-layer');\n\n\tconst pageName = elDialog.dataset.viewPageActive;\n\telDialog.classList.remove('i-change-page');\n\n\telModalLayers.forEach((elModalLayer) => {\n\t\telModalLayer.querySelectorAll(':scope > [data-view-page]').forEach((el) => {\n\t\t\tel.classList.remove('center-to-left', 'right-to-center', 'reverse', 'active');\n\t\t});\n\t});\n\n\telModalLayers.forEach((elModalLayer) => {\n\t\telModalLayer.querySelector(`:scope > [data-view-page=\"${pageName}\"]`)?.classList.add('active');\n\t});\n\n\treturn true;\n};\n\n/**\n * Закрыть диалоговое окно\n */\nconst close = function (dialogId: string) {\n\tconst elDialog = getElDialogById(dialogId);\n\tif (!elDialog) return;\n\n\tconst $dialog = $(elDialog);\n\n\tif (!$dialog.dialog('instance')) return;\n\n\t$dialog.dialog('close');\n};\n\n/**\n * Управление props.isLoading\n */\nconst setLoading = (elPages: ElTopDialogPage[] | JQuery<ElTopDialogPage>, isLoading: boolean, duration?: number) => {\n\tif (isElJQuery(elPages)) elPages = elPages.toArray(); // todo: убрать после переписки jquery на сайте\n\n\tconst elPagesVisibleds = elPages.reduce<ElTopDialogPage[]>((acc, elPage) => {\n\t\tif (elPage.hasAttribute('data-view-page') && isVisible(elPage)) acc.push(elPage);\n\n\t\treturn acc;\n\t}, []);\n\n\tif (isLoading) {\n\t\tif (duration !== undefined) {\n\t\t\telPagesVisibleds.forEach((elPagesVisibled) => {\n\t\t\t\telPagesVisibled.style.setProperty('--dialog-loading-duration', duration + 's');\n\t\t\t});\n\t\t}\n\n\t\telPagesVisibleds.forEach((elPagesVisibled) => {\n\t\t\telPagesVisibled.classList.add('i-load-data');\n\t\t});\n\t} else {\n\t\telPagesVisibleds.forEach((elPagesVisibled) => {\n\t\t\telPagesVisibled.classList.remove('i-load-data');\n\t\t});\n\n\t\telPagesVisibleds.forEach((elPagesVisibled) => {\n\t\t\telPagesVisibled.style.setProperty('--dialog-loading-duration', '10s');\n\t\t});\n\t}\n};\n\nconst isLoading = (elPage: ElTopDialogPage | JQuery<ElTopDialogPage>) => {\n\tif (isElJQuery(elPage)) elPage = elPage?.[0]; // todo: убрать после переписки jquery на сайте\n\n\treturn elPage.classList.contains('i-load-data');\n};\n\nexport const TopDialogUtils = {\n\tgetElDialogById,\n\tupdatePageVue,\n\trecalcPositions,\n\ttoViewDirty,\n\ttoView,\n\ttoViewPage,\n\ttoPrevPage,\n\tsetLoading,\n\tisLoading,\n\tinAnimation,\n\tclose,\n};\n\ninit();\n"],"names":["inited","initDialogGlobalEvents","el","querySelectorVisible","elDialogs","querySelectorAllArray","elDialog","isVisible","toView","TopDialogUtils","viewNameAndPageLink","viewName","pageLink","elToPages","hash","TopDialogWorker","historySetState","elForm","eventTarget","elSubmitButton","event","elDialogWrapperWithTopZIndex","topZIndex","elDialogWrapper","zIndex","Core","css","cssM","cssPC","cssModern","cssModernPC","timerClearAnimation","isInited","isElJQuery","init","onCreate","onOpen","onClose","$dialog","genVueOptions","options","getElDialogById","id","updatePageVue","dialogId","pageName","pageNameNext","dialog","getDialogWorker","nextTick","waitWhile","elDialogBody","connectScrollShadow","initPopup","_e","$popup","elPopup","args","w1","scrollBarWidth","recalcPositions","hashData","setHashs","toViewDirty","toViewPageName","moveDirection","toViewParts","argsString","viewNameOrElDialog","callback","resolve","_reject","timer","toViewPage","stopAnimations","sleep","elModalLayers","elCurrentPages","acc","elModalLayer","elCurrentPage","elNextPages","elNextPage","beforeOpenViewPage","afterOpenViewPage","TopPopupWorker","elActive","delay","toPrevPage","prevPageName","elPrevPage","beforeOpenViewPageTimers","elPages","eventKey","inAnimation","close","setLoading","isLoading","duration","elPagesVisibleds","elPage","elPagesVisibled"],"mappings":"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"}