@topvisor/ui 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.chunks/datepicker-3uPurK_5.es.js +290 -0
- package/.chunks/datepicker-3uPurK_5.es.js.map +1 -0
- package/.chunks/datepicker-BJGX0c7G.amd.js +248 -0
- package/.chunks/datepicker-BJGX0c7G.amd.js.map +1 -0
- package/.chunks/forms-BImXJ_ZO.amd.js +3 -0
- package/.chunks/forms-BImXJ_ZO.amd.js.map +1 -0
- package/.chunks/forms-D9r2-H5Y.es.js +2000 -0
- package/.chunks/forms-D9r2-H5Y.es.js.map +1 -0
- package/.chunks/i18n-C_OH9IT3.amd.js.map +1 -1
- package/.chunks/i18n-DuTvft1T.es.js.map +1 -1
- package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-B3E-SDdg.es.js → listItem.vue_vue_type_script_setup_true_lang-Bdv8YBAk.es.js} +2 -2
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-Bdv8YBAk.es.js.map +1 -0
- package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-uKhci19t.amd.js → listItem.vue_vue_type_script_setup_true_lang-BxpjEUsq.amd.js} +2 -2
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-BxpjEUsq.amd.js.map +1 -0
- package/.chunks/{menu-CcyqVSfg.es.js → menu-B0Ul7Kbg.es.js} +2 -2
- package/.chunks/menu-B0Ul7Kbg.es.js.map +1 -0
- package/.chunks/{menu-DTbsTDGK.amd.js → menu-CbhB9e4x.amd.js} +2 -2
- package/.chunks/menu-CbhB9e4x.amd.js.map +1 -0
- package/.chunks/{popup-C5yk4q8p.es.js → popup-Coq_61yv.es.js} +495 -495
- package/.chunks/popup-Coq_61yv.es.js.map +1 -0
- package/.chunks/{popup-DAruCfQv.amd.js → popup-pQCswyfj.amd.js} +447 -447
- package/.chunks/popup-pQCswyfj.amd.js.map +1 -0
- package/.chunks/store-CX_6ZXhO.es.js.map +1 -1
- package/.chunks/store-esTid5oI.amd.js.map +1 -1
- package/README.md +86 -86
- package/assets/core.css +1 -1
- package/assets/forms.css +1 -1
- package/assets/formsExt.css +1 -1
- package/assets/menu.css +1 -1
- package/assets/popup.css +1 -1
- package/assets/tabs.css +1 -1
- package/assets/tabsView.css +1 -1
- package/assets/themes/dark.css +1 -0
- package/assets/themes/light.css +1 -0
- package/components/forms/select/select.d.ts +1 -2
- package/components/tabsView/tabsView/store.d.ts +1 -1
- package/components/tabsView/tabsView/tabsView.d.ts +1 -1
- package/core/app.amd.js +1 -1
- package/core/app.amd.js.map +1 -1
- package/core/app.js +58 -59
- package/core/app.js.map +1 -1
- package/core/core/core.d.ts +10 -9
- package/core/core/events/resize.d.ts +16 -0
- package/core/core/events.d.ts +12 -17
- package/core/core/options.d.ts +22 -0
- package/core/core/state.d.ts +12 -1
- package/core/core.amd.js +1 -1
- package/core/core.js +1 -1
- package/forms/forms.amd.js +1 -1
- package/forms/forms.js +1 -1
- package/forms/helpers.amd.js.map +1 -1
- package/forms/helpers.js.map +1 -1
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.js +17 -18
- package/formsExt/formsExt.js.map +1 -1
- package/icomoon/Read Me.txt +7 -7
- package/icomoon/demo-files/demo.css +161 -161
- package/icomoon/demo-files/demo.js +30 -30
- package/icomoon/demo.html +3379 -3379
- package/icomoon/fonts/Topvisor-2.svg +263 -263
- package/icomoon/style.css +740 -740
- package/package.json +37 -36
- package/popup/popup.amd.js +1 -1
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.js +18 -18
- package/popup/popup.js.map +1 -1
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.js +2 -2
- package/popup/worker.js.map +1 -1
- package/project/project.amd.js +1 -1
- package/project/project.amd.js.map +1 -1
- package/project/project.js +3 -3
- package/project/project.js.map +1 -1
- package/require/css.amd.js +12 -12
- package/tabs/tabs.amd.js +1 -1
- package/tabs/tabs.amd.js.map +1 -1
- package/tabs/tabs.js +7 -8
- package/tabs/tabs.js.map +1 -1
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/tabsView/tabsView.js +106 -98
- package/tabsView/tabsView.js.map +1 -1
- package/test/themes/themes/dark-positions.amd.js +2 -0
- package/test/themes/themes/dark-positions.amd.js.map +1 -0
- package/test/themes/themes/dark-positions.d.ts +1 -0
- package/test/themes/themes/dark-positions.js +2 -0
- package/test/themes/themes/dark-positions.js.map +1 -0
- package/test/themes/themes/dark.amd.js +2 -0
- package/test/themes/themes/dark.amd.js.map +1 -0
- package/test/themes/themes/dark.d.ts +1 -0
- package/test/themes/themes/dark.js +4 -0
- package/test/themes/themes/dark.js.map +1 -0
- package/test/themes/themes/light-positions.amd.js +2 -0
- package/test/themes/themes/light-positions.amd.js.map +1 -0
- package/test/themes/themes/light-positions.d.ts +1 -0
- package/test/themes/themes/light-positions.js +2 -0
- package/test/themes/themes/light-positions.js.map +1 -0
- package/test/themes/themes/light.amd.js +2 -0
- package/test/themes/themes/light.amd.js.map +1 -0
- package/test/themes/themes/light.d.ts +1 -0
- package/test/themes/themes/light.js +4 -0
- package/test/themes/themes/light.js.map +1 -0
- package/utils/check.amd.js.map +1 -1
- package/utils/check.js.map +1 -1
- package/utils/clipboard.amd.js.map +1 -1
- package/utils/clipboard.js.map +1 -1
- package/utils/date.amd.js +1 -1
- package/utils/date.js +1 -1
- package/utils/device.amd.js +1 -1
- package/utils/device.js +3 -3
- package/utils/dom.amd.js.map +1 -1
- package/utils/dom.js.map +1 -1
- package/utils/image.amd.js.map +1 -1
- package/utils/image.js.map +1 -1
- package/utils/keyboard.amd.js.map +1 -1
- package/utils/keyboard.js.map +1 -1
- package/utils/lodash.amd.js +1 -1
- package/utils/lodash.amd.js.map +1 -1
- package/utils/lodash.js +6 -703
- package/utils/lodash.js.map +1 -1
- package/utils/number.amd.js.map +1 -1
- package/utils/number.js.map +1 -1
- package/utils/price.amd.js +1 -1
- package/utils/price.amd.js.map +1 -1
- package/utils/price.js +1 -1
- package/utils/price.js.map +1 -1
- package/utils/route.amd.js.map +1 -1
- package/utils/route.js.map +1 -1
- package/utils/scroll.amd.js.map +1 -1
- package/utils/scroll.js.map +1 -1
- package/utils/string.amd.js.map +1 -1
- package/utils/string.js.map +1 -1
- package/utils/system.amd.js.map +1 -1
- package/utils/system.js.map +1 -1
- package/utils/url.amd.js.map +1 -1
- package/utils/url.js.map +1 -1
- package/web-types.json +72 -72
- package/.chunks/datepicker-CS24dmLk.es.js +0 -290
- package/.chunks/datepicker-CS24dmLk.es.js.map +0 -1
- package/.chunks/datepicker-DsMs2YKL.amd.js +0 -248
- package/.chunks/datepicker-DsMs2YKL.amd.js.map +0 -1
- package/.chunks/debounce-4ipCj607.amd.js +0 -2
- package/.chunks/debounce-4ipCj607.amd.js.map +0 -1
- package/.chunks/debounce-BISRz08p.es.js +0 -116
- package/.chunks/debounce-BISRz08p.es.js.map +0 -1
- package/.chunks/forms-DKL0e9tp.amd.js +0 -3
- package/.chunks/forms-DKL0e9tp.amd.js.map +0 -1
- package/.chunks/forms-DT_fsN6V.es.js +0 -1161
- package/.chunks/forms-DT_fsN6V.es.js.map +0 -1
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-B3E-SDdg.es.js.map +0 -1
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-uKhci19t.amd.js.map +0 -1
- package/.chunks/menu-CcyqVSfg.es.js.map +0 -1
- package/.chunks/menu-DTbsTDGK.amd.js.map +0 -1
- package/.chunks/popup-C5yk4q8p.es.js.map +0 -1
- package/.chunks/popup-DAruCfQv.amd.js.map +0 -1
- package/assets/dark.css +0 -1
- package/assets/light.css +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"forms-DT_fsN6V.es.js","sources":["../../src/core/utils/device.ts","../../src/core/core/events.ts","../../src/core/core/options.ts","../../src/core/core/state.ts","../../src/core/core/core.ts","../../src/core/utils/date.ts","../../src/components/forms/avatar/avatar.vue","../../src/components/forms/button/button.vue","../../src/components/forms/checkbox/checkbox.vue","../../src/components/forms/loadbar/loadbar.vue","../../src/components/forms/input/input.vue","../../src/components/forms/inputDate/inputDate.vue","../../src/components/forms/radio/radio.vue","../../src/components/forms/switcher/switcher.vue","../../src/components/forms/textarea/textarea.vue","../../src/components/forms/select/select.vue","../../src/components/forms/forms.ts"],"sourcesContent":["/**\n * Получение информации об устройстве\n * @packageDocumentation\n */\n\n/**\n * Определить, увеличинная ли плотность пикселей у экрана (DPR > 1)\n */\nexport function isRetina(): boolean {\n\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\n}\n\n/**\n * Определить, является ли устройство мобильным\n */\nexport function isMobile(): boolean {\n\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\n}\n\n/**\n * Определить, открыт ли сайт в приложении\n */\nexport function isApp(): boolean {\n\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\n}\n\n/**\n * Определить, является ли OS пользователя macOS\n */\nexport function isMacOS(): boolean {\n\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\n}\n\n/**\n * Определить, является ли текущий браузер пользователя Safari\n */\nexport function isSafari(): boolean {\n\tconst isChrome = /Chrome|Android/.test(navigator.userAgent);\n\n\tlet isSafari = /Safari/.test(navigator.userAgent);\n\tif (isChrome && isSafari) {\n\t\tisSafari = false;\n\t}\n\n\treturn isSafari;\n}\n\n/**\n * Вернуть текст для обозначения клавиши Ctrl / Command в зависимости от OS\n */\nexport function getCommandKeyLabel(): 'Ctrl' | '⌘' {\n\tif (isMacOS()) {\n\t\treturn '⌘';\n\t} else {\n\t\treturn 'Ctrl';\n\t}\n}\n\n/**\n * Вернуть скролл с учетом устройства\n */\nexport const getScrollTop = (): number | undefined => {\n\treturn $(document).scrollTop();\n};\n\n/**\n * Вернуть контейнеры со скроллом (требует jquery)\n */\nexport const get$scroll = (): JQuery<Document> => {\n\treturn $(document);\n};\n\n/**\n * Вернуть контейнеры со скроллом (без jquery)\n */\nexport const getElsScroll = (): Document[] => {\n\treturn [document];\n};\n\n/**\n * Получить операционную систему пользователя\n *\n * Не определяет Windows 11, см. getOSAsync()\n */\nexport const getOS = (): string => {\n\tconst os: [string, RegExp][] = [\n\t\t['iOS', /(iPhone|iPad)/i],\n\t\t['Android', /(Android)/i],\n\t\t['Windows Phone', /(IEMobile)/i],\n\t\t['Windows 3.11', /Win16/i],\n\t\t['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/i],\n\t\t['Windows 98', /(Windows 98)|(Win98)/i],\n\t\t['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/i],\n\t\t['Windows XP', /(Windows NT 5.1)|(Windows XP)/i],\n\t\t['Windows Server 2003', /(Windows NT 5.2)/i],\n\t\t['Windows Vista', /(Windows NT 6.0)/i],\n\t\t['Windows 7', /(Windows NT 6.1)/i],\n\t\t['Windows 8', /(Windows NT 6.[23])|(Windows 8)/i],\n\t\t['Windows 10', /(Windows NT 10)/i],\n\t\t['Windows NT 4.0', /(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)/i],\n\t\t['Windows ME', /Windows ME/i],\n\t\t['Windows', /Windows/i],\n\t\t['Open BSD', /OpenBSD/i],\n\t\t['Sun OS', /SunOS/i],\n\t\t['Linux', /(Linux)|(X11)/i],\n\t\t['Macintosh', /(Mac_PowerPC)|(Macintosh)|(Mac OS X 10.4)|(Mac OS X 10.5)|(Mac OS X 10.6)/i],\n\t\t['QNX', /QNX/i],\n\t\t['BeOS', /BeOS/i],\n\t\t['OS/2', /OS\\/2/i],\n\t];\n\n\tlet res = '';\n\tfor (let i = 0; i < os.length; i++) {\n\t\tif (os[i][1].test(navigator.userAgent)) {\n\t\t\tres = os[i][0];\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn res;\n};\n\n/**\n * Получить операционную систему пользователя, в том числе Windows 11\n */\nexport const getOSAsync = async (): Promise<string> => {\n\tlet os = getOS();\n\n\tif (os === 'Windows 10') {\n\t\t// @ts-ignore - experimental technology\n\t\tconst platformVersion = await navigator?.userAgentData?.getHighEntropyValues(['platformVersion']);\n\t\tif (platformVersion && platformVersion.platformVersion >= '13') {\n\t\t\tos = 'Windows 11';\n\t\t}\n\t}\n\n\treturn os;\n};\n","const onResizeDelay = 100;\n\nlet onResizeTimer: NodeJS.Timeout;\n\ntype TopEvent = Event & { topEvent: { widthDiff: number, hightDiff: number } }\n\n/**\n * Установленные обрабочики на событие изменения размеров окна\n */\nconst onResizeListeners: Map<(ev: TopEvent) => any, (ev: TopEvent) => any> = new Map();\n\n// зафиксированное состояние размеров окна\nconst windowSize = {\n\twidth: window.innerWidth,\n\theight: window.innerHeight,\n};\n\n/**\n * Добавить обработчик на событие изменения размеров экрана\n * вызов таких обработчиков будет опмизирован и объединен в одно событие\n */\nfunction addOnReize(listener: (this: HTMLElement, ev: TopEvent) => any) {\n\tonResizeListeners.set(listener, listener);\n}\n\n/**\n * Удаление обработчика на событие изменений размеров экрана\n */\nfunction removeOnResize(listener: (this: HTMLElement, ev: TopEvent) => any) {\n\tonResizeListeners.delete(listener);\n}\n\nfunction onResize(e: any) {\n\tclearTimeout(onResizeTimer);\n\n\tonResizeTimer = setTimeout(function () {\n\t\te.topEvent = {\n\t\t\twidthDiff: windowSize.width - window.innerWidth,\n\t\t\thightDiff: windowSize.height - window.innerHeight,\n\t\t};\n\n\t\twindowSize.width = window.innerWidth;\n\t\twindowSize.height = window.innerHeight;\n\n\t\tonResizeListeners.forEach((callback) => callback(e));\n\t}, onResizeDelay);\n}\n\nwindow.addEventListener('resize', onResize);\n\nexport default {\n\taddOnReize,\n\tremoveOnResize,\n};\n","/**\n * Конфигурация UI\n *\n * Начальные значений устанавилаются при подклчюении Core во Vue приложение через app.use(PluginCore, options)\n */\nexport default {\n\t/**\n\t * Базовая ширина страницы для отображения ПК / Мобильной версии сайта\n\t */\n\twidthForMobile: 900,\n\n\t/**\n\t * Формат даты, который будет испоьзоваться по умолчанию для вывода даты, как правило, завсит от текущего пользователя\n\t */\n\tdateFormat: 'Y-m-d',\n\n\t/**\n\t * Валюта, которая будет испоьзоваться по умолчанию, как правило, завсит от текущего пользователя\n\t */\n\tcurrency: 'USD' as 'RUB' | 'USD' | 'EUR',\n\n\t/**\n\t * Для Москвы: +0300\n\t */\n\tgmt: new Date().toString().match(/GMT(\\S+)/)?.[1] as string,\n};\n","import options from './options';\n\n/**\n * State UI для взаимодейсвтиями с приложениями Vue\n */\nconst state = {\n\tdateFormat: options.dateFormat,\n\tcurrency: options.currency,\n\tgmt: options.gmt,\n\n\t/**\n\t * Device by size\n\t * @see widthForMobile\n\t */\n\tisMobile: false,\n\n\t/**\n\t * Device by user agent\n\t */\n\tisMobileUA: false,\n\n\t/**\n\t * true, если плотность пикселей экрана больше 1\n\t */\n\tisRetina: false,\n\n\t/**\n\t * true, елси это приложение\n\t */\n\tisApp: false,\n\n\t/**\n\t * true при горизонтальном расположении устройства\n\t */\n\tisLandscape: true,\n\n\t/**\n\t * true при вертикальном расположении устройства\n\t */\n\tisPortrait: false,\n\n\t/**\n\t * Максимальная сторона страницы\n\t */\n\tsize: 0,\n\n\t// /**\n\t// * true, если страница скрыта\n\t// */\n\t// isHidden: false,\n};\n\nexport default state;\n","import { reactive } from 'vue';\nimport { isApp, isMobile, isRetina } from '@/core/utils/device';\nimport Events from '@/core/core/events';\nimport state from '@/core/core/state';\n\n/**\n * Статический класс с текущим состоянимем UI\n */\nexport default class Core {\n\n\t/**\n\t * Настройки словаря\n\t *\n\t * @deprecated - используйте useI18n() и $i18n;\n\t */\n\tstatic L = reactive({\n\t\tNot_date: 'Not date',\n\t});\n\n\tstatic state = reactive({ ...state });\n\n\tstatic widthForMobile = 900;\n\n\tstatic matchMediaIsMobile?: MediaQueryList;\n\n\tstatic $ = window['$'] as typeof $ | undefined;\n\n\tstatic Events = Events;\n\n\tstatic _setState() {\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.widthForMobile}px)`);\n\n\t\tCore.state.isMobileUA = isMobile();\n\t\tCore.state.isRetina = isRetina();\n\t\tCore.state.isApp = isApp();\n\t\t// Core.state.isHidden = this.isHidden();\n\n\t\tCore.setStateByWindowSize();\n\n\t\t// пересчет значений, зависящих от рамзеров окна\n\t\tEvents.addOnReize(Core.onResize);\n\n\t\tCore.onResize();\n\n\t\tCore.saveToCookie();\n\t}\n\n\tprivate static onResize() {\n\t\tCore.setStateByWindowSize();\n\n\t\t// честный vh\n\t\tdocument.documentElement.style.setProperty('--100vh', window.innerHeight + 'px');\n\t}\n\n\tprivate static setStateByWindowSize() {\n\t\tCore.state.isMobile = !!Core.matchMediaIsMobile?.matches;\n\t\tCore.state.isLandscape = (window.innerWidth > window.innerHeight);\n\t\tCore.state.isPortrait = !Core.state.isLandscape;\n\t\tCore.state.size = (window.innerWidth > window.innerHeight) ? window.innerWidth : window.innerHeight;\n\n\t\tCore.saveToCookie();\n\t}\n\n\t/**\n\t * Сохранить информацию об устройстве в cookie\n\t */\n\tprivate static saveToCookie() {\n\t\tconst device = [\n\t\t\t1,\n\t\t\twindow.innerWidth,\n\t\t\twindow.innerHeight,\n\t\t\twindow.devicePixelRatio,\n\t\t\tNumber(Core.state.isMobile),\n\t\t\tNumber(Core.state.isRetina),\n\t\t];\n\n\t\tdocument.cookie = 'device=' + device.join(',') + '; path=/;';\n\t}\n\n\t/**\n\t * Проверить скрыта страница или нет\n\t */\n\tstatic isHidden = (): boolean => document.hidden;\n\n\t/**\n\t * Вставить css стили на страницу по ссылке с автоматическим добавлением правил media\n\t *\n\t * Правила media:\n\t * - Файлы *.m.css будут грузиться, только на экранах с шириной менее, чем Core.widthForMobile\n\t * - Файлы *.pc.css будут грузиться, только на экранах с шириной более, чем Core.widthForMobile\n\t *\n\t * Настройкой Core.widthForMobile можно управлять через plugin: @topvisor/ui/plugin/core\n\t *\n\t * @param fileNames - список ссылок на css файлы\n\t * @param useSync - использовать синхронную загрузку css, только для css с того же домена. В синхронном режиме стили предзагружаются независимо от\n\t * media\n\t */\n\tstatic insertCSSLinkToPage = (fileNames: Array<string>, useSync = false) => {\n\t\tconst cssFilesByOptions = new Map();\n\t\tcssFilesByOptions.set('::', []);\n\n\t\tfileNames.forEach(filename => {\n\t\t\tlet m = false;\n\t\t\tlet pc = false;\n\n\t\t\tif (filename.match(/\\.m\\./)) {\n\t\t\t\tm = true;\n\t\t\t}\n\t\t\tif (filename.match(/\\.pc\\./)) {\n\t\t\t\tpc = true;\n\t\t\t}\n\n\t\t\tconst key = `${m}:${pc}`;\n\t\t\tif (!cssFilesByOptions.has(key)) {\n\t\t\t\tcssFilesByOptions.set(`${m}:${pc}`, []);\n\t\t\t}\n\t\t\tcssFilesByOptions.get(`${m}:${pc}`).push(filename);\n\t\t});\n\n\t\tconst promises: Array<Promise<unknown>> = [];\n\n\t\tcssFilesByOptions.forEach((fileNames, options: string) => {\n\t\t\tif (!fileNames.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [m, pc] = options.split(':').map(item => item === 'true');\n\n\t\t\tlet media = 'all';\n\t\t\tif (m) {\n\t\t\t\tmedia = '(max-width: ' + Core.widthForMobile + 'px)';\n\t\t\t}\n\t\t\tif (pc) {\n\t\t\t\tmedia = '(min-width: ' + Core.widthForMobile + 'px)';\n\t\t\t}\n\n\t\t\tconst promisesI = Core._insertToPage(fileNames, media, useSync);\n\t\t\tpromisesI.forEach(promise => promises.push(promise));\n\t\t});\n\n\t\treturn Promise.all(promises);\n\t};\n\n\tprivate static _insertToPage = (fileNames: Array<string>, media: string, useSync: boolean) => {\n\t\tconst promises: Array<Promise<unknown>> = [];\n\n\t\tfileNames.forEach(fileName => {\n\t\t\t// синхронная загрузка, чтобы функция не выполнилась раньше загрузки стилей\n\t\t\tif (useSync) {\n\t\t\t\tconst request = new XMLHttpRequest();\n\t\t\t\trequest.open('GET', fileName, false);\n\t\t\t\trequest.send();\n\t\t\t}\n\n\t\t\tconst id = 'topCSSLink-' + fileName.replace(/\\W/g, '-');\n\n\t\t\t// стиль уже загружен\n\t\t\tif (window.hasOwnProperty(id)) return;\n\n\t\t\tlet resolve: Function;\n\t\t\tlet reject: Function;\n\t\t\tconst promise = new Promise((_resolve, _reject) => {\n\t\t\t\tresolve = _resolve;\n\t\t\t\treject = _reject;\n\t\t\t});\n\t\t\tpromises.push(promise);\n\n\t\t\tconst elLink = document.createElement('link');\n\t\t\telLink.id = id;\n\t\t\telLink.rel = 'stylesheet';\n\t\t\telLink.media = media;\n\t\t\telLink.href = fileName;\n\t\t\telLink.onload = () => resolve();\n\t\t\telLink.onerror = () => reject();\n\n\t\t\tdocument.head.append(elLink);\n\t\t});\n\n\t\treturn promises;\n\t};\n\n\t/**\n\t * Вставить css стили на страницу с автоматическим добавлением правил media\n\t *\n\t * Загрузка с Vite:\n\t *\n\t * ```js\n\t * import style from '/style.css?raw';\n\t *\n\t * insertToPageAsInine(style);\n\t * ```\n\t *\n\t * Загрузка с fetch:\n\t *\n\t * ```js\n\t * const style = await fetch('./style.css');\n\t *\n\t * insertToPageAsInine(style);\n\t * ```\n\t *\n\t * @param style - css стили в строке\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.widthForMobile\n\t *\n\t * @see insertToPage\n\t */\n\tstatic insertStyleToPage = (style: string, type: '' | 'm' | 'pc' = '') => {\n\t\tlet media = 'all';\n\n\t\tif (type === 'm') {\n\t\t\tmedia = '(max-width: ' + Core.widthForMobile + 'px)';\n\t\t}\n\n\t\tif (type === 'pc') {\n\t\t\tmedia = '(min-width: ' + Core.widthForMobile + 'px)';\n\t\t}\n\n\t\tconst elStyle = document.createElement('style');\n\t\telStyle.innerHTML = style;\n\t\telStyle.media = media;\n\n\t\tdocument.head.append(elStyle);\n\t};\n\n}\n","/**\n * Работа с датами\n * @packageDocumentation\n */\n\nimport Core from '@/core/core/core';\n\nconst L = (window as any).L ?? {};\n\n/**\n * Получить день недели\n */\nexport const getDayOfWeek = (y: number, m: number, d: number): string => {\n\tswitch ((new Date(y, m, d)).getDay()) {\n\t\tcase 0:\n\t\t\treturn L.Vs + '.';\n\t\tcase 1:\n\t\t\treturn L.Pn + '.';\n\t\tcase 2:\n\t\t\treturn L.Vt + '.';\n\t\tcase 3:\n\t\t\treturn L.Sr + '.';\n\t\tcase 4:\n\t\t\treturn L.Ct + '.';\n\t\tcase 5:\n\t\t\treturn L.Pt + '.';\n\t\tcase 6:\n\t\t\treturn L.Sb + '.';\n\t\tdefault:\n\t\t\treturn '';\n\t}\n};\n\n/**\n * Преобразовать дату в строку формата Y-m-d H:i:s\n * @param dateObject - объект Date\n * @param langFormat - если true, формат даты будет взят из Core.state.dateFormat\n * @param timeFormat - 0-только дата | 1-дата и часы | 2-дата и часы с минутами | 3-дата и часы с минутами и секундами\n */\nexport const dateToString = (dateObject: Date, langFormat: boolean = true, timeFormat: 0 | 1 | 2 | 3 = 2): string => {\n\tlet Y = String(dateObject.getFullYear());\n\tlet d = String(dateObject.getDate()).padStart(2, '0');\n\tlet m = String(dateObject.getMonth() + 1).padStart(2, '0');\n\tlet H = String(dateObject.getHours()).padStart(2, '0');\n\tlet i = String(dateObject.getMinutes()).padStart(2, '0');\n\tlet s = String(dateObject.getSeconds()).padStart(2, '0');\n\n\tlet date = Y + '-' + m + '-' + d;\n\tif (timeFormat >= 1) date += ' ' + H;\n\tif (timeFormat >= 2) date += ':' + i;\n\tif (timeFormat === 3) date += ':' + s;\n\tif (langFormat) date = dateFormat(date, timeFormat);\n\n\treturn date;\n};\n\n/**\n * Получить объект Date из строки\n * @param date - строка с датой\n */\nexport function stringToDate(date: string): Date {\n\tif (date.indexOf('T') === -1) {\n\t\tif (date.length == 10) {\n\t\t\tdate += ' 00:00:00';\n\t\t}\n\n\t\tdate = date.replace(' ', 'T') + Core.state.gmt;\n\t}\n\n\treturn new Date(date);\n}\n\n/**\n * Генерация даты-строки из миллисекунд (UTC), в формате Y-m-d H:i:s\n * @param timestamp - дата в мс, если не передана, берется дата на момент вызова функции\n * @param useFormat - если true, формат даты будет взят из Core.state.dateFormat\n * @param time - 0-только дата | 1-дата и часы | 2-дата и часы с минутами | 3-дата и часы с минутами и секундами\n */\nexport function genDate(timestamp: number | undefined, useFormat: boolean = true, time: 0 | 1 | 2 | 3 = 0): string {\n\tlet date;\n\tif (timestamp != undefined) {\n\t\tdate = new Date(timestamp);\n\t} else {\n\t\tdate = new Date();\n\t}\n\n\tconst Y = date.getFullYear();\n\tconst m = String(date.getMonth() + 1).padStart(2, '0');\n\tconst d = date.getDate().toString().padStart(2, '0');\n\n\tconst H = date.getHours().toString().padStart(2, '0');\n\tconst i = date.getMinutes().toString().padStart(2, '0');\n\tconst s = date.getSeconds().toString().padStart(2, '0');\n\n\tdate = Y + '-' + m + '-' + d;\n\n\tif (time) date += ' ';\n\tif (time >= 1) date += H;\n\tif (time >= 2) date += ':' + i;\n\tif (time >= 3) date += ':' + s;\n\n\tif (useFormat) {\n\t\tdate = dateFormat(date, time);\n\t}\n\n\treturn date;\n}\n\n/**\n * Генерация даты-строки (время московское) из миллисекунд (UTC), в формате Y-m-d H:i:s\n * @param ms - дата в мс, если не передана, берется дата на момент вызова функции\n * @param langFormat - если true, формат даты будет взят из Core.state.dateFormat\n */\nexport function genDateMoscow(ms: number | undefined, langFormat: boolean = true): string {\n\tconst time_zone = (new Date().getTimezoneOffset() / 60) * (-1);\n\tconst dateoffset = time_zone * 60 * 60 * 1000;\n\tconst moscow_dateoffset = 3 * 60 * 60 * 1000;\n\n\tlet date: Date;\n\tif (ms !== undefined) {\n\t\tdate = new Date(ms);\n\t} else {\n\t\tdate = new Date();\n\t}\n\n\tdate.setTime(date.getTime() - dateoffset + moscow_dateoffset);\n\n\tlet Y = String(date.getFullYear());\n\tlet d = String(date.getDate()).padStart(2, '0');\n\tlet m = String(date.getMonth() + 1).padStart(2, '0');\n\tlet H = String(date.getHours()).padStart(2, '0');\n\tlet i = String(date.getMinutes()).padStart(2, '0');\n\tlet s = String(date.getSeconds()).padStart(2, '0');\n\n\tlet dateStr = Y + '-' + m + '-' + d + ' ' + H + ':' + i + ':' + s;\n\tif (langFormat) {\n\t\tdateStr = dateFormat(dateStr);\n\t}\n\n\treturn dateStr;\n}\n\n/**\n * Перевод даты в формат пользователя\n * @param date - объект даты или строка в формате Y-m-d H:i:s\n * @param time - 0-только дата | 1-дата и часы | 2-дата и часы с минутами | 3-дата и часы с минутами и секундами\n * @param dateformat -\n * @param emptyValue - значение, которое надо вернуть, если дата не указана\n */\nexport function dateFormat(dateMixed: string | Date, time: 0 | 1 | 2 | 3 = 2, dateFormat?: string, emptyValue: string = Core.L.Not_date): string {\n\tif (typeof dateMixed === 'string') {\n\t\tif (!dateMixed || dateMixed.substring(0, 10) === '0000-00-00') {\n\t\t\tif (emptyValue && emptyValue !== '0000-00-00') {\n\t\t\t\treturn emptyValue;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!dateMixed) return emptyValue;\n\n\tif (!dateFormat) {\n\t\tdateFormat = Core.state.dateFormat;\n\t}\n\n\tdateFormat = dateFormat.toLowerCase().replace('m', 'mm').replace('y', 'yy').replace('d', 'dd');\n\n\tlet date: Date;\n\tif (dateMixed instanceof Date) {\n\t\tdate = dateMixed;\n\t} else {\n\t\tlet dateForObj = dateMixed.substring(0, 10);\n\t\tif (dateForObj.length === 7) dateForObj += '-01';\n\t\tdateForObj += ' 00:00';\n\t\tdateForObj = dateForObj.replace(/-/g, '/'); // safari fix\n\n\t\tdate = new Date(dateForObj);\n\t\tif (isNaN(Number(date))) return emptyValue;\n\t}\n\n\tlet result = '';\n\n\tif (dateFormat && window['$']) {\n\t\tresult = $.datepicker.formatDate(dateFormat, date);\n\t}\n\n\tif (time && typeof dateMixed === 'string' && dateMixed.length > 10 || time && dateMixed instanceof Date) {\n\t\tlet timeStr: string = '';\n\t\tif (dateMixed instanceof Date) {\n\t\t\ttimeStr = new Date().toLocaleTimeString('en-US', {\n\t\t\t\thour12: false,\n\t\t\t\thour: 'numeric',\n\t\t\t\tminute: time >= 2 ? 'numeric' : undefined,\n\t\t\t\tsecond: time >= 3 ? 'numeric' : undefined,\n\t\t\t});\n\t\t} else {\n\t\t\tswitch (time) {\n\t\t\t\t// часы\n\t\t\t\tcase 1:\n\t\t\t\t\ttimeStr = dateMixed.substring(11, 13);\n\n\t\t\t\t\tbreak;\n\t\t\t\t// часы и минуты\n\t\t\t\tcase 2:\n\t\t\t\t\ttimeStr = dateMixed.substring(11, 16);\n\n\t\t\t\t\tbreak;\n\t\t\t\t// часы, минуты и секунды\n\t\t\t\tcase 3:\n\t\t\t\t\ttimeStr = dateMixed.substring(11, 19);\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tresult += ' ' + timeStr;\n\t}\n\n\tresult = result.trim();\n\n\treturn result;\n}\n\n/**\n * Перевод даты из формата пользователя в системный формат Y-m-d H:i:s\n * @param date - строка с датой\n * @param emptyValue - значение, которое надо вернуть, если дата не указана\n */\nexport function dateUnformat(date: string, emptyValue: string = Core.L.Not_date): string {\n\tif (!date) {\n\t\treturn emptyValue;\n\t}\n\n\tif (date.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\n\t\treturn date;\n\t}\n\n\tconst dateFormat = Core.state.dateFormat.toLowerCase();\n\n\tconst dateChunks = date.split(/\\W/);\n\tconst dateFormatChunks = dateFormat.split(/\\W/);\n\n\tlet d = '';\n\tlet m = '';\n\tlet y = '';\n\n\tdateFormatChunks.forEach((type, index) => {\n\t\tswitch (type) {\n\t\t\tcase 'd':\n\t\t\t\td = dateChunks[index];\n\n\t\t\t\tbreak;\n\t\t\tcase 'm':\n\t\t\t\tm = dateChunks[index];\n\n\t\t\t\tbreak;\n\t\t\tcase 'y':\n\t\t\t\ty = dateChunks[index];\n\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tlet result = y + '-' + m + '-' + d;\n\n\tif (!result.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\n\t\tconsole.info('Неверный формат даты, будет возращена текущая дата, ' + result);\n\n\t\tresult = genDate((new Date()).getTime(), false).substring(0, 10);\n\t}\n\n\treturn result;\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { Props } from './avatar';\nimport { dateFormat } from '@/core/utils/date';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 64,\n\ti18n: () => ({\n\t\tOnline: 'Online',\n\t\tLastSeen: 'Last seen',\n\t}),\n});\n\nconst titleStatus = computed(() => {\n\tif (props.isOnline) {\n\t\treturn props.i18n?.Online;\n\t}\n\n\tif (props.lastActiveTime) {\n\t\treturn props.i18n?.LastSeen + ': ' + dateFormat(props.lastActiveTime, 2);\n\t}\n});\n\nconst titleImage = computed(() => {\n\tif (!props.nickname) return titleStatus.value;\n\n\treturn props.nickname + (titleStatus.value ? `\\n${titleStatus.value}` : '');\n});\n</script>\n\n<template>\n\t<div class=\"top-avatar\">\n\t\t<img\n\t\t\tclass=\"top-avatar_image\"\n\t\t\t:src=\"image\"\n\t\t\t:title=\"titleImage\"\n\t\t\talt=\"\"\n\t\t>\n\n\t\t<div\n\t\t\tv-if=\"isOnline\"\n\t\t\tclass=\"top-avatar_status\"\n\t\t\t:title=\"titleStatus\"\n\t\t>\n\t\t</div>\n\t</div>\n</template>\n\n<style module>\n.top-avatar {\n\twidth: v-bind(size+ \"px\");\n\theight: v-bind(size+ \"px\");\n\tdisplay: flex;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tposition: relative;\n\ttop: 0;\n\tleft: 0;\n}\n\n.top-avatar_image {\n\tborder-radius: 50%;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.top-avatar_status {\n\tborder-radius: 50%;\n\tborder: 2px solid var(--content-background-color);\n\tbackground-color: var(--color-bg-positive-2);\n\twidth: 25%;\n\theight: 25%;\n\tposition: absolute;\n\tright: 0;\n\tbottom: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props } from './button';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tcolor: 'blue',\n\tstyling: '',\n\tsize: 's',\n});\n\nconst tagName = computed(() => props.href ? 'a' : 'button');\n\nconst type = computed(() => props.isSubmit ? 'submit' : undefined);\n</script>\n\n<template>\n\t<component\n\t\t:is=\"tagName\"\n\t\t:class=\"{\n\t\t\t['top-active']: isActive,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t['top-button']: true,\n\t\t\t['top-button-progress']: isProgress,\n\t\t\t[`top-size_${size}`]: !!size,\n\t\t\t[`top-color_${color}`]: true,\n\t\t\t[`top-style_${styling}`]: !!styling,\n\t\t\t['top-button-withoutText']: !$slots.default,\n\t\t}\"\n\t\t:name=\"name\"\n\t\t:title=\"title\"\n\t\t:href=\"href\"\n\t\t:type=\"type\"\n\t\t:data-top-icon=\"icon || undefined\"\n\t\t:data-top-icon2=\"icon2 || undefined\"\n\t\t:disabled=\"disabled || undefined\"\n\t\t:inProgress=\"isProgress\"\n\t>\n\t\t<span\n\t\t\tv-if=\"badgeNumber\"\n\t\t\t:data-top-badge=\"badgeNumber\"\n\t\t\tclass=\"top-button_badge\"\n\t\t\t:class=\"{\n\t\t\t\t['top-button_badge-afterText']: badgePosAfterText,\n\t\t\t}\"\n\t\t></span>\n\n\t\t<span\n\t\t\tv-if=\"$slots.default\"\n\t\t\tclass=\"top-ellipsis\"\n\t\t>\n\t\t\t<!-- @slot Текст в кнопке -->\n\t\t\t<slot>\n\t\t\t\t{{ !icon ? 'Button' : '' }}\n\t\t\t</slot>\n\t\t</span>\n\n\t\t<!-- @slot HTML в кнопке -->\n\t\t<slot name=\"html\"></slot>\n\t</component>\n</template>\n\n<style module>\n@import \"./style/button.css\";\n@import \"./style/style-outline.css\";\n@import \"./style/style-soft.css\";\n@import \"./style/style-transparent.css\";\n\n.top-button {\n\t--top-button-color: var(--color-white);\n\t--top-button-background-color: transparent;\n\t--top-button-background-color-hover: var(--top-button-background-color);\n\t--top-button-background-color-active: var(--top-button-background-color-hover);\n\t--top-button-background-color-selected: var(--top-button-background-color-hover);\n\t--top-button-box-shadow: none;\n\t--top-button-box-shadow-hover: var(--top-shadow-darken-2);\n\t--top-button-box-shadow-active: var(--top-shadow-darken-3);\n\t--top-button-box-shadow-selected: var(--top-shadow-darken-3);\n\t--top-forms-border-width: 0px;\n\t--top-icon-width: calc(var(--top-icon-size) + var(--top-forms-padding));\n\t--top-icon2-width: calc(var(--top-icon2-size) + var(--top-forms-padding));\n}\n\n.top-button > .top-ellipsis { flex-grow: 0; }\n\n.top-button.top-size_xs {\n\t--top-forms-padding: var(--top-forms-padding_xs);\n\t--top-forms-base-height: var(--top-forms-base-height_xs);\n}\n\n.top-button.top-size_m {\n\t--top-forms-padding: var(--top-forms-padding_m);\n\t--top-forms-base-height: var(--top-forms-base-height_m);\n}\n\n.top-button.top-size_l {\n\t--top-forms-padding: var(--top-forms-padding_l);\n\t--top-forms-base-height: var(--top-forms-base-height_l);\n}\n\n.top-button_badge-afterText {\n\torder: 100;\n}\n\n.top-button:not([data-top-icon2]) > .top-button_badge-afterText {\n\tmargin-left: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Props } from './checkbox';\nimport ControlLabel from '../controlLabel/controlLabel.vue';\n\ndefineProps<Props>();\n\nconst model = defineModel<Props['modelValue']>();\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-forms-optionWrapper']: true,\n\t\t\t['top-checkbox']: true,\n\t\t\t['top-checkbox_' + name]: !!name,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-error']: isError && !disabled,\n\t\t}\"\n\t>\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\t:class=\"{\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-forms-option']: true,\n\t\t\t\t['top-checkbox_input']: true,\n\t\t\t\t['top-error']: isError && !disabled,\n\t\t\t}\"\n\t\t\t:name=\"name\"\n\t\t\tv-model=\"model\"\n\t\t\t:value=\"value\"\n\t\t\t:indeterminate=\"indeterminate\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\n\t\t<ControlLabel\n\t\t\tv-if=\"$slots.default\"\n\t\t\t:description=\"description\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\t\t\t<!-- @slot Слот с заголовком -->\n\t\t\t<slot></slot>\n\t\t</ControlLabel>\n\t</label>\n</template>\n\n<style module>\n.top-checkbox {\n\tcursor: pointer;\n\tdisplay: inline-flex;\n}\n\n.top-checkbox_input {\n\tcursor: inherit;\n\tborder-radius: 4px;\n\tbackground: var(--content-background-color);\n\tborder: 1px solid var(--top-forms-border-color);\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\n}\n\n.top-checkbox_input:before {\n\tcontent: \" \";\n\tcolor: #FFF;\n\tfont-family: \"Topvisor-2\";\n\tfont-size: 16px;\n}\n\n.top-checkbox_input:hover {\n\tborder-color: var(--top-forms-border-color-hover);\n\tbackground: var(--color-theme-100);\n}\n\n/* checked / indeterminate */\n.top-checkbox_input:checked,\n.top-checkbox_input:indeterminate {\n\tborder-color: var(--color-bg-primary-2);\n\tbackground: var(--color-bg-primary-2);\n}\n\n.top-checkbox_input:checked:before {\n\tcontent: \"\";\n}\n\n.top-checkbox_input:indeterminate:before {\n\tcontent: \"\";\n}\n\n.top-checkbox_input:checked:hover,\n.top-checkbox_input:indeterminate:hover {\n\tborder-color: var(--color-bg-primary-1);\n\tbackground: var(--color-bg-primary-1);\n}\n\n/* disabled selected */\n.top-checkbox_input:disabled {\n\tborder-color: var(--color-line-1);\n\tbackground: var(--color-theme-100);\n}\n\n.top-checkbox_input:checked:disabled,\n.top-checkbox_input:indeterminate:disabled {\n\tborder-color: transparent;\n\tbackground: var(--color-theme-400);\n}\n\n/* isError */\n.top-checkbox_input.top-error {\n\tborder-color: var(--color-bg-negative-2);\n}\n\n.top-checkbox_input.top-error:hover {\n\tborder-color: var(--color-bg-negative-1);\n}\n\n/* isError selected */\n.top-checkbox_input:checked.top-error,\n.top-checkbox_input:indeterminate.top-error {\n\tbackground: var(--color-bg-negative-2);\n}\n\n.top-checkbox_input:checked.top-error:hover,\n.top-checkbox_input:indeterminate.top-error:hover {\n\tbackground: var(--color-bg-negative-1);\n}\n</style>\n","<template>\n\t<div class=\"top-loadbar\"></div>\n</template>\n\n<style module>\n:root {\n\t--top-loadbar-duration: 10s;\n\t--top-loadbar-color: var(--color-line-primary-2);\n}\n\n.top-loadbar {\n\tbackground: var(--top-loadbar-color);\n\twidth: 0;\n\theight: 4px;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\n\tanimation: top-loadbar var(--top-loadbar-duration) forwards;\n}\n\n@keyframes top-loadbar {\n\tfrom {\n\t\t/* fix render pixels */\n\t\twidth: 4px;\n\t}\n\t4% {\n\t\twidth: calc(4%);\n\t}\n\t5% {\n\t\twidth: 5%;\n\t}\n\tto {\n\t\twidth: 95%;\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Emits, Props } from './input';\nimport TopLoadbar from '@/components/forms/loadbar/loadbar.vue';\n\ndefineOptions({\n\tinheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n\tcaptionType: '',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\nconst placeholder = computed(() => {\n\tif (props.addCleaner && !props.title) {\n\t\treturn '';\n\t}\n\tif (props.captionType !== '') {\n\t\treturn '';\n\t}\n\n\treturn props.title;\n});\n\nconst clean = (event: Event) => {\n\tif (props.modelValue) {\n\t\tevent.stopPropagation();\n\t}\n\n\temit('update:modelValue', '');\n};\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-input']: true,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-input-' + modificator]: !!modificator,\n\t\t\t['top-input-withCleaner']: addCleaner && localValue && localValue !== '0000-00-00',\n\t\t\t['top-formsCaptionWrapper']: captionType !== '',\n\t\t\t['top-formsCaptionWrapper-always']: captionType === 'top',\n\t\t}\"\n\t\t:data-top-icon=\"icon\"\n\t\t:data-top-icon2=\"icon2\"\n\t>\n\t\t<TopLoadbar v-if=\"isLoading\"/>\n\n\t\t<input\n\t\t\ttype=\"text\"\n\t\t\t:class=\"{\n\t\t\t\t['top-input_input']: true,\n\t\t\t\t['top-input_input-' + modificator]: !!modificator,\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-error']: isError,\n\t\t\t}\"\n\t\t\tautocomplete=\"off_always\"\n\t\t\t:name=\"name\"\n\t\t\tv-model=\"localValue\"\n\t\t\t:title=\"title\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\t@keydown.esc=\"(event) => (addCleaner || !!$slots.btn) && clean(event)\"\n\t\t\t:=\"$attrs\"\n\t\t>\n\n\t\t<span\n\t\t\tv-if=\"addCleaner && localValue && localValue !== '0000-00-00'\"\n\t\t\tclass=\"top-input_cleaner\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t@click.prevent=\"clean\"\n\t\t></span>\n\n\t\t<span\n\t\t\tv-if=\"captionType !== ''\"\n\t\t\tclass=\"top-formsCaption\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</span>\n\n\t\t<!-- @slot Слот для вставки произвольного кода в label -->\n\t\t<slot></slot>\n\t</label>\n</template>\n\n<style module>\n.top-input {\n\t--top-forms_clear-width: 0px;\n\n\tborder-radius: var(--top-forms-radius);\n\twidth: 180px;\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--top-gap-1);\n}\n\n.top-input_input {\n\tcolor: var(--color-text-2);\n\tbackground: var(--top-forms-background-color);\n\theight: var(--top-forms-base-height);\n\tpadding: 0;\n\tpadding-right: calc(max(var(--top-forms-padding), calc(var(--top-icon2-width) + var(--top-forms_clear-width))));\n\tpadding-left: calc(max(var(--top-forms-padding), var(--top-icon-width)));\n}\n\n.top-input_input:hover {\n\tbackground: var(--top-forms-background-color-hover);\n}\n\n.top-input_input:focus {\n\tcolor: var(--color-text-1);\n\tborder-color: var(--color-line-primary-1);\n\toutline: none;\n}\n\n/* значки */\n.top-input[data-top-icon]:before,\n.top-input[data-top-icon2]:after {\n\t--top-icon-color: var(--color-icon-4);\n\t--top-icon2-color: var(--color-icon-4);\n\n\tposition: absolute;\n\tz-index: 3;\n\tfont-size: 20px;\n}\n\n.top-input[data-top-icon]:before {\n\tleft: 0;\n}\n\n.top-input[data-top-icon2]:after {\n\tright: 0;\n}\n\n/* cleaner */\n.top-input-withCleaner {\n\t--top-forms_clear-width: 24px;\n}\n\n.top-input_cleaner[data-top-icon] {\n\t--top-icon-size: 16px;\n\t--top-icon-width: 20px;\n\t--top-icon-color: var(--color-icon-3);\n\n\tcursor: pointer;\n\tborder-radius: 50%;\n\twidth: 20px;\n\theight: 16px;\n\tposition: absolute;\n\tright: calc(var(--top-forms-border-width) + max(var(--top-icon2-width), var(--top-forms-padding) / 2));\n\tz-index: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.top-input_cleaner[data-top-icon]:hover {\n\t--top-icon-color: var(--color-icon-2);\n}\n\n/* TODO: перенести в inputsRange */\n.top-input_input {\n\twidth: 50%;\n\tflex-grow: 1;\n}\n\n/* top-loadbar */\n.top-input .top-loadbar {\n\tborder-radius: var(--top-forms-radius) 0 0 0;\n}\n</style>\n","<script lang=\"ts\">\nconst useNativeDatepicker = !!document.documentElement.ontouchstart && !!document.createElement('input').showPicker;\n\nlet onInputLazy = (_e: any) => { };\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onUnmounted } from 'vue';\nimport { dateFormat, dateUnformat } from '@/core/utils/date';\nimport type { Props, Emits } from './inputDate';\nimport TopInput from '@/components/forms/input/input.vue';\nimport Core from '@/core/core/core';\n\nconst props = withDefaults(defineProps<Props>(), {\n\ticon2: '',\n});\n\nconst emit = defineEmits<Emits>();\n\nonUnmounted(() => {\n\tif ($el) {\n\t\t$el.datepicker('destroy');\n\t}\n});\n\nconst el = ref();\nlet $el: any;\n\nconst localValue = computed({\n\tget() {\n\t\treturn dateFormat(props.modelValue, 2, undefined, '0000-00-00');\n\t},\n\n\tset(value) {\n\t\tvalue = dateUnformat(value, '0000-00-00');\n\n\t\temit('update:modelValue', value);\n\t},\n});\n\nlet oninput = (e: any) => {\n\tonInputLazy(e);\n};\n\nlet onchange = (e: any) => {\n\tconst date = dateUnformat(e.target.value);\n\tconst dateFormatted = dateFormat(date);\n\n\tif (!dateFormatted || dateFormatted === Core.L.Not_date || e.target.value !== dateFormatted) {\n\t\te.target.value = localValue.value;\n\n\t\treturn;\n\t}\n\n\tlocalValue.value = e.target.value;\n};\n\n/**\n * Инициализпация функций выбора дат\n *\n * Для не нативного datepicker\n */\nasync function init(e: any) {\n\tconst datepicker = await import('./datepicker');\n\n\t// формат ввода\n\tonInputLazy = datepicker.oninput;\n\n\t// datepicker\n\t$el = datepicker.connectDatepicker(e.target, {\n\t\tonSelect: () => onchange(e),\n\t});\n\n\tif ($el) {\n\t\t$el.datepicker('show');\n\t}\n}\n</script>\n\n<template>\n\t<TopInput\n\t\tv-if=\"useNativeDatepicker\"\n\t\t:=\"$props\"\n\t\t:modelValue=\"localValue\"\n\t\treadonly\n\t\t@click=\"el.showPicker()\"\n\t>\n\t\t<input\n\t\t\tref=\"el\"\n\t\t\ttype=\"date\"\n\t\t\tclass=\"top-input_input-date\"\n\t\t\t:modelValue=\"modelValue\"\n\t\t\t@change=\"(e: any) => localValue = e.target.value\"\n\t\t\ttabindex=\"-1\"\n\t\t/>\n\t</TopInput>\n\n\t<TopInput\n\t\tv-else\n\t\t:=\"$props\"\n\t\t:modelValue=\"localValue\"\n\t\t@update:modelValue=\"(newValue) => (newValue === '') ? localValue = '' : ''\"\n\t\t@input.date=\"oninput\"\n\t\t@focus.once.date=\"init\"\n\t\t@change.date=\"onchange\"\n\t\tmodificator=\"datepicker\"\n\t/>\n</template>\n\n<style module>\n.top-input-datepicker {\n\twidth: calc(105px + var(--top-icon-width) + var(--top-icon2-width));\n}\n\n.top-input_input-date {\n\topacity: 0;\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: -1;\n}\n\n.top-input_input-date::-webkit-inner-spin-button {\n\tdisplay: none;\n}\n\n.top-input_input-date::-webkit-calendar-picker-indicator {\n\topacity: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Emits, Props } from './radio';\nimport ControlLabel from '../controlLabel/controlLabel.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-forms-optionWrapper']: true,\n\t\t\t['top-radio']: true,\n\t\t\t['top-radio_' + name]: name !== '',\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-error']: isError && !disabled,\n\t\t}\"\n\t>\n\t\t<input\n\t\t\ttype=\"radio\"\n\t\t\t:class=\"{\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-forms-option']: true,\n\t\t\t\t['top-radio_input']: true,\n\t\t\t\t['top-error']: isError && !disabled,\n\t\t\t}\"\n\t\t\tv-model=\"localValue\"\n\t\t\t:name=\"name\"\n\t\t\t:value=\"value\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\n\t\t<ControlLabel\n\t\t\tv-if=\"$slots.default\"\n\t\t\t:description=\"description\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\t\t\t<!-- @slot Слот с заголовком -->\n\t\t\t<slot></slot>\n\t\t</ControlLabel>\n\t</label>\n</template>\n\n<style module>\n:root {\n\t--top-radio-background-color: var(--content-background-color);\n\t--top-radio-background-color-hover: var(--top-radio-background-color);\n\t--top-radio-background-color-active: var(--top-radio-background-color);\n}\n\n.top-radio {\n\tcursor: pointer;\n}\n\n.top-radio_input {\n\tborder-radius: 50%;\n\tbackground: var(--content-background-color);\n\tborder: 1px solid var(--color-line-3);\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\n}\n\n.top-radio_input:hover {\n\tborder-color: var(--color-line-3);\n\tbackground: var(--color-layer-secondary-1);\n}\n\n.top-radio_input:checked {\n\tborder-color: var(--color-line-primary-1);\n\tborder-width: 5px;\n}\n\n.top-radio_input:checked:hover {\n\tborder-color: var(--color-line-primary-2);\n}\n\n/* disabled */\n.top-radio_input:disabled {\n\tborder-color: var(--color-line-1-opacity);\n\tbackground: var(--color-theme-100);\n}\n\n/* disabled selected */\n.top-radio_input:checked:disabled {\n\tborder-color: var(--color-theme-400);\n}\n\n/* isError */\n.top-radio_input.top-error {\n\tborder-color: var(--color-line-negative-1);\n}\n\n.top-radio_input.top-error:hover {\n\tborder-color: var(--color-line-negative-2);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Emits, Props } from './switcher';\nimport ControlLabel from '../controlLabel/controlLabel.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t['top-forms-optionWrapper']: true,\n\t\t['top-checkboxSwitcher']: true,\n\t\t['top-disabled']: disabled,\n\t\t['top-error']: isError && !disabled,\n\t}\"\n\t>\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\t:class=\"{\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-forms-option']: true,\n\t\t\t\t['top-checkboxSwitcher_input']: true,\n\t\t\t\t['top-error']: isError && !disabled,\n\t\t\t}\"\n\t\t\tv-model=\"localValue\"\n\t\t\t:name=\"name\"\n\t\t\t:value=\"value\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\n\t\t<ControlLabel\n\t\t\tv-if=\"$slots.default\"\n\t\t\t:description=\"description\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\t\t\t<!-- @slot Слот с заголовком -->\n\t\t\t<slot></slot>\n\t\t</ControlLabel>\n\t</label>\n</template>\n\n<style module>\n.top-checkboxSwitcher {\n\tcursor: pointer;\n\tdisplay: inline-flex;\n\tgap: 4px;\n}\n\n.top-checkboxSwitcher_input {\n\tborder-radius: 9px;\n\tborder: none;\n\tbackground: var(--color-layer-secondary-2);\n\twidth: 36px;\n\theight: 18px;\n\tposition: relative;\n}\n\n.top-checkboxSwitcher_input:before {\n\tcontent: \"\";\n\tborder-radius: 50%;\n\tbackground: var(--color-white);\n\twidth: 12px;\n\theight: 12px;\n\tmargin: 3px;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\n\ttransition: left 0.1s;\n}\n\n.top-checkboxSwitcher_input:hover {\n\tbackground: var(--color-layer-secondary-4);\n}\n\n/* checked */\n.top-checkboxSwitcher_input:checked {\n\tbackground: var(--color-bg-primary-2);\n}\n\n.top-checkboxSwitcher_input:checked:hover {\n\tbackground: var(--color-bg-primary-1);\n}\n\n.top-checkboxSwitcher_input:checked:before {\n\tleft: 50%;\n}\n\n/* disabled */\n.top-checkboxSwitcher_input:disabled {\n\tbackground: var(--color-theme-400);\n}\n\n/* isError */\n.top-checkboxSwitcher_input.top-error {\n\tbackground: var(--color-layer-negative-3);\n}\n\n.top-checkboxSwitcher_input.top-error:hover {\n\tbackground: var(--color-layer-negative-4);\n}\n\n.top-checkboxSwitcher_input.top-error:checked {\n\tbackground: var(--color-bg-negative-2);\n}\n\n.top-checkboxSwitcher_input.top-error:checked:hover {\n\tbackground: var(--color-bg-negative-1);\n}\n\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport Hint from '@/components/forms/hint/hint.vue';\nimport type { Emits, Props } from './textarea';\n\ndefineOptions({\n\tinheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\trows: 5,\n\tminHeight: 120,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst value = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-textarea']: true,\n\t\t\t['top-textarea-' + name]: name,\n\t\t\t['top-disabled']: disabled,\n\t\t}\"\n\t>\n\t\t<textarea\n\t\t\ttype=\"text\"\n\t\t\t:class=\"{\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-textarea_textarea']: true,\n\t\t\t\t['top-textarea_textarea-expandable']: expandable,\n\t\t\t\t['top-error']: isError,\n\t\t\t}\"\n\t\t\tautocomplete=\"off_always\"\n\t\t\t:name=\"name\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\t:rows=\"!expandable ? rows : undefined\"\n\t\t\t:=\"$attrs\"\n\t\t\tv-model=\"value\"\n\t\t/>\n\n\t\t<div\n\t\t\tv-if=\"expandable\"\n\t\t\tclass=\"top-textarea_pseudoContent\"\n\t\t>\n\t\t\t{{ value + ' ' }}\n\t\t</div>\n\n\t\t<Hint\n\t\t\tv-if=\"hint\"\n\t\t\tclass=\"top-textarea_hint\"\n\t\t\t:hint=\"hint\"\n\t\t\tv-top-tooltip\n\t\t/>\n\t</label>\n</template>\n\n<style module>\n.top-textarea {\n\twidth: 180px;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tposition: relative;\n}\n\n.top-textarea_textarea {\n\tcolor: var(--color-text-1);\n\tbackground: var(--top-forms-background-color);\n\twidth: 100%;\n\tpadding: var(--top-forms-padding);\n\tresize: none;\n}\n\n.top-textarea_textarea:hover {\n\tbackground: var(--top-forms-background-color-hover);\n}\n\n.top-textarea_textarea:focus {\n\tborder-color: var(--color-line-primary-1);\n\toutline: none;\n}\n\n.top-textarea_textarea.top-textarea_textarea-expandable {\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n}\n\n.top-textarea_pseudoContent {\n\tbox-sizing: border-box;\n\tmin-height: v-bind(minHeight+ \"px\");\n\tpadding: var(--top-forms-padding);\n\tfont-size: 14px;\n\twhite-space: pre-wrap;\n\toverflow-wrap: anywhere;\n\tpointer-events: none;\n\topacity: 0;\n\tz-index: -1;\n}\n\n.top-textarea_hint {\n\tposition: absolute;\n\ttop: 2px;\n\tright: 2px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { ComputedRef } from 'vue';\nimport { computed, watch } from 'vue';\nimport type { Emits, LocalOptions, Option, Props } from './select';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\nconst emit = defineEmits<Emits>();\n\n/**\n * Словарь с учетом вложенных Props['options']\n *\n * Этот словарь должен использовать в логике компонента, чтобы она не зависила от типа входных данных\n */\nconst optionByValue: ComputedRef<LocalOptions> = computed(() => {\n\t/**\n\t * Преобразование:\n\t * - Array => Map\n\t * - string => Option\n\t */\n\tconst res = new Map();\n\n\tprops.options.forEach((option, index) => {\n\t\t// базовый Options со строками\n\t\tif (typeof option === 'string') option = genOption(index, option);\n\n\t\tif (option.children) {\n\t\t\t// вложенные элементы Option для <optgroup>\n\t\t\tconst children = new Map();\n\n\t\t\toption.children.forEach((subOption, subIndex) => {\n\t\t\t\t// базовый Options со строками\n\t\t\t\tif (typeof subOption === 'string') subOption = genOption(subIndex, subOption);\n\n\t\t\t\tchildren.set(subOption.value, subOption);\n\t\t\t});\n\n\t\t\toption = { ...option };\n\t\t\toption.children = children;\n\n\t\t\tres.set(option.value, option);\n\t\t} else {\n\t\t\t// самостоятельный элемент Option\n\t\t\tres.set(option.value, option);\n\t\t}\n\t});\n\n\treturn res;\n});\n\n/**\n * Словарь со всеми не disabled значениями Props['options'] в порядке следования с учетом вложенных Props['options']\n */\nconst flatOptionByValue: ComputedRef<Map<Props['modelValue'], Option>> = computed(() => {\n\tconst res = new Map();\n\n\toptionByValue.value.forEach(option => {\n\t\tif (option.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// вложенные элементы Option для <optgroup>\n\t\tif (option.children) {\n\t\t\toption.children.forEach(subOption => {\n\t\t\t\tif (subOption.disabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tres.set(subOption.value, subOption);\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tres.set(option.value, option);\n\t});\n\n\treturn res;\n});\n\n/**\n * Генерация Объекта option из строки\n *\n * Для базового способа указания props\n */\nconst genOption = (value: Props['modelValue'], title: string): Option => {\n\treturn {\n\t\tvalue,\n\t\ttitle,\n\t};\n};\n\n/**\n * Логика для обртаной своместимости:\n * - null - заменить на первое доступное значение\n * - undefined - заменить на первое доступное значение\n */\nwatch([\n\t() => props.modelValue,\n\tflatOptionByValue,\n], () => {\n\tif ((model.value === null || model.value === undefined) && flatOptionByValue.value.size) {\n\t\tconsole.warn('Пожалуйста, не передавайте в компонент Select значения null и undefined');\n\n\t\tmodel.value = flatOptionByValue.value.keys().next().value;\n\t}\n}, { immediate: true });\n\n/**\n * Иконка выбранного option\n */\nconst optionIcon = computed(() => {\n\treturn flatOptionByValue.value.get(model.value)?.icon;\n});\n\n/**\n * Выбрать следующее доступное значение\n */\nconst selectNextValue = () => {\n\tconst listEnabledValues = [...flatOptionByValue.value.keys()];\n\tconst currentIndex = listEnabledValues.indexOf(model.value);\n\tconst nextIndex = (currentIndex + 1) % listEnabledValues.length;\n\n\tmodel.value = listEnabledValues[nextIndex];\n};\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-select']:true,\n\t\t\t['top-select-' + name]:name,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-formsCaptionWrapper']: !!title,\n\t\t\t['top-select-error']: isError,\n\t\t\t['top-disabled']: disabled,\n\t\t}\"\n\t\t:data-value=\"model\"\n\t\t:data-top-icon=\"icon\"\n\t\t:data-top-icon2=\"optionIcon\"\n\t>\n\t\t<select\n\t\t\t:class=\"{\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-select_select']: true,\n\t\t\t\t['top-select_arrow']: true,\n\t\t\t\t['top-error']: isError,\n\t\t\t}\"\n\t\t\t:name=\"name\"\n\t\t\t:disabled=\"disabled\"\n\t\t\tv-model=\"model\"\n\t\t>\n\t\t\t<template v-for=\"[value, option] of optionByValue\">\n\t\t\t\t<optgroup\n\t\t\t\t\tv-if=\"option.children\"\n\t\t\t\t\t:key=\"'group_' + value\"\n\t\t\t\t\t:label=\"option.title\"\n\t\t\t\t\t:disabled=\"option.disabled\"\n\t\t\t\t>\n\t\t\t\t\t<option\n\t\t\t\t\t\tv-for=\"[subValue, subOption] of option.children\"\n\t\t\t\t\t\t:key=\"subValue\"\n\t\t\t\t\t\t:value=\"subValue\"\n\t\t\t\t\t\t:selected=\"subValue === model\"\n\t\t\t\t\t\t:disabled=\"subOption.disabled\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ subOption.title }}\n\t\t\t\t\t</option>\n\t\t\t\t</optgroup>\n\n\t\t\t\t<option\n\t\t\t\t\tv-else\n\t\t\t\t\t:key=\"value ?? undefined\"\n\t\t\t\t\t:value=\"value\"\n\t\t\t\t\t:selected=\"value === model\"\n\t\t\t\t\t:disabled=\"option.disabled\"\n\t\t\t\t>\n\t\t\t\t\t{{ option.title }}\n\t\t\t\t</option>\n\t\t\t</template>\n\t\t</select>\n\n\t\t<span\n\t\t\tv-if=\"addChanger && flatOptionByValue.size && !disabled\"\n\t\t\tclass=\"top-changer\"\n\t\t\t@click=\"selectNextValue\"\n\t\t></span>\n\n\t\t<span\n\t\t\tv-if=\"title\"\n\t\t\tclass=\"top-formsCaption\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</span>\n\t</label>\n</template>\n\n<style module>\n.top-select {\n\tcolor: var(--color-text-1);\n\t--top-icon-color: var(--color-icon-2);\n\t--top-icon2-color: var(--color-icon-2);\n\n\talign-items: center;\n\twidth: 180px;\n\tmax-width: 100%;\n\tdisplay: inline-flex;\n}\n\n.top-select-error {\n\t--top-icon-color: var(--color-icon-negative-1);\n\t--top-icon2-color: var(--color-icon-negative-1);\n}\n\n.top-select_select {\n\tbackground-color: var(--top-forms-background-color);\n\t/* для select вместо padding нужно использовать text-indent */\n\tpadding-left: var(--top-forms-padding);\n\n\t/* если есть значки, добавить отступ на их ширину с учетом уже добавленного padding */\n\ttext-indent: calc(clamp(0px, calc(var(--top-icon-both-width) - var(--top-forms-padding)), calc(var(--top-icon-both-width) - var(--top-forms-padding))));\n\n\twidth: 100%;\n\theight: var(--top-forms-base-height);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tflex-grow: 1;\n\toverflow: hidden;\n}\n\n.top-select_select:disabled {\n\tcolor: var(--color-text-3);\n}\n\n.top-select optgroup {\n\tcolor: var(--color-text-1);\n\tfont-style: normal;\n}\n\n.top-select option:not(:disabled) {\n\tbackground: var(--content-background-color);\n\tcolor: var(--color-text-1);\n}\n\n.top-select option:disabled {\n\tbackground: unset;\n\tcolor: unset;\n}\n\n/* хром не мерняет цвет для optgroup option, стили оставлены по умолчанию */\n/*\n.top-select optgroup:disabled,\n.top-select optgroup option,\n.top-select option:disabled {\n\n}\n*/\n\n/* https://bugzilla.mozilla.org/show_bug.cgi?id=1743066 */\n@-moz-document url-prefix() {\n\t.top-select_select {\n\t\ttext-indent: calc(clamp(0px, calc(var(--top-icon-both-width) - var(--top-forms-padding)), calc(var(--top-icon-both-width) - var(--top-forms-padding))) / 2);\n\t}\n}\n\n@media only screen and (min-width: 900px) {\n\t/* changer */\n\t.top-changer {\n\t\tcursor: pointer;\n\t\tborder-radius: 100%;\n\t\twidth: 0;\n\t\ttransform: translateX(-44px);\n\t\tcolor: var(--color-text-2);\n\t\tfont-size: 16px;\n\t\tline-height: 1;\n\t\tdisplay: none;\n\t\tz-index: 2;\n\t\torder: 4;\n\t}\n\n\t.top-changer:hover {\n\t\tcolor: var(--color-primary);\n\t}\n\n\t.top-changer:after {\n\t\tcontent: \"\";\n\t\tbackground-color: var(--top-forms-background-color);\n\t\tfont-family: \"Topvisor-2\";\n\t}\n\n\t*:hover > .top-changer {\n\t\tdisplay: block;\n\t}\n}\n</style>\n","/**\n * Замечание для разработчиков\n *\n * При изменении библиотеки Forms не забудьте обновить ее подключение в плагине\n *\n * @see import('@/core/core/plugin')\n */\n\nimport type { ComponentCustomProps } from 'vue';\n\nimport Avatar from './avatar/avatar.vue';\nimport Button from './button/button.vue';\nimport Checkbox from './checkbox/checkbox.vue';\nimport ControlLabel from './controlLabel/controlLabel.vue';\nimport Hint from './hint/hint.vue';\nimport Input from './input/input.vue';\nimport InputDate from './inputDate/inputDate.vue';\nimport InputRange from './inputRange/inputRange.vue';\nimport Radio from './radio/radio.vue';\nimport Switcher from './switcher/switcher.vue';\nimport Textarea from './textarea/textarea.vue';\nimport Select from './select/select.vue';\nimport Loadbar from './loadbar/loadbar.vue';\n\n// Для не SFC, чтобы работало автозаполнение в template в ComponentOptions\n// Имена намеренно делаются разными, чтобы типы не конфликтовали: `Button` и `TopButton`\n\nexport const TopAvatar = Avatar as typeof Avatar & ComponentCustomProps;\nexport const TopButton = Button as typeof Button & ComponentCustomProps;\nexport const TopCheckbox = Checkbox as typeof Checkbox & ComponentCustomProps;\nexport const TopControlLabel = ControlLabel as typeof ControlLabel & ComponentCustomProps;\nexport const TopHint = Hint as typeof Hint & ComponentCustomProps;\nexport const TopInput = Input as typeof Input & ComponentCustomProps;\nexport const TopInputDate = InputDate as typeof InputDate & ComponentCustomProps;\nexport const TopInputRange = InputRange as typeof InputRange & ComponentCustomProps;\nexport const TopRadio = Radio as typeof Radio & ComponentCustomProps;\nexport const TopSwitcher = Switcher as typeof Switcher & ComponentCustomProps;\nexport const TopTextarea = Textarea as typeof Textarea & ComponentCustomProps;\nexport const TopSelect = Select as typeof Select & ComponentCustomProps;\nexport const TopLoadbar = Loadbar as typeof Loadbar & ComponentCustomProps;\n"],"names":["isRetina","isMobile","isApp","isMacOS","isSafari","isChrome","isSafari2","getCommandKeyLabel","getScrollTop","get$scroll","getElsScroll","getOS","os","res","i","getOSAsync","platformVersion","_a","onResizeDelay","onResizeTimer","onResizeListeners","windowSize","addOnReize","listener","removeOnResize","onResize","e","callback","Events","options","state","Core","reactive","device","fileNames","useSync","cssFilesByOptions","filename","m","pc","key","promises","fileNames2","item","media","promise","fileName","request","id","resolve","reject","_resolve","_reject","elLink","style","type","elStyle","L","getDayOfWeek","y","d","dateToString","dateObject","langFormat","timeFormat","Y","H","s","date","dateFormat","stringToDate","genDate","timestamp","useFormat","time","genDateMoscow","ms","dateoffset","moscow_dateoffset","dateStr","dateMixed","dateFormat2","emptyValue","dateForObj","result","timeStr","dateUnformat","dateChunks","dateFormatChunks","index","props","__props","titleStatus","computed","_b","titleImage","tagName","model","useModel","_sfc_render","_ctx","_cache","emit","__emit","localValue","value","placeholder","clean","event","useNativeDatepicker","onInputLazy","_e","onUnmounted","$el","el","ref","oninput","onchange","dateFormatted","init","datepicker","value2","optionByValue","option","genOption","children","subOption","subIndex","flatOptionByValue","title","watch","optionIcon","selectNextValue","listEnabledValues","nextIndex","TopAvatar","Avatar","TopButton","TopButton$1","TopCheckbox","Checkbox","TopControlLabel","ControlLabel","TopHint","TopHint$1","TopInput","TopInput$1","TopInputDate","InputDate","TopInputRange","InputRange","TopRadio","Radio","TopSwitcher","Switcher","TopTextarea","Textarea","TopSelect","Select","TopLoadbar","TopLoadbar$1"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"listItem.vue_vue_type_script_setup_true_lang-B3E-SDdg.es.js","sources":["../../src/components/popup/popup/opener.vue","../../src/components/popup/popup/popup.vue","../../src/components/popup/popup/listItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onUpdated } from 'vue';\nimport type { OpenerProps } from './popup';\n\nconst props = withDefaults(defineProps<OpenerProps>(), {\n\tpos: '3',\n\tnotch: true,\n\tposBy: 'fixed',\n});\n\nconst id = props.id || Math.random() + '';\n\nlet elOpener: Element;\n\n/**\n * Необычная функция для проброски props внтурь элемента слота\n *\n * @param el - вспомогательрный элемент для доступа к элементам слота\n */\nfunction render(el: any) {\n\tsetTimeout(() => {\n\t\telOpener = el.nextElementSibling;\n\n\t\tif (elOpener) {\n\t\t\trenderOpener(elOpener);\n\t\t}\n\t});\n}\n\nonUpdated(() => {\n\tif (elOpener) {\n\t\trenderOpener(elOpener);\n\t}\n});\n\nfunction renderOpener(elOpener: any) {\n\t/**\n\t * topPopup - необходимый атрибут для всез Popup\n\t *\n\t * Для Vue вместо него используется атрибут topPopupId\n\t */\n\telOpener.dataset.topPopup = '#' + id;\n\n\telOpener.dataset.topPopupId = id;\n\telOpener.dataset.topPopupPos = props.pos;\n\telOpener.dataset.topPopupPosBy = props.posBy;\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\n}\n</script>\n\n<template>\n\t<template :ref=\"render\"></template>\n\n\t<!-- @slot элемент для открытия Popup -->\n\t<slot></slot>\n</template>\n\n<!-- Использует общий deprecated класс .btn -->\n<style>\nh3[data-top-popup],\ndiv[data-top-popup],\ni[data-top-popup]:not(.btn),\nb[data-top-popup]:not(.btn) {\n\tcursor: pointer;\n\tuser-select: none;\n\tfont-style: normal;\n\ttext-decoration: none;\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n[data-top-popup][data-top-popup-disabled] {\n\tpointer-events: none;\n\tcursor: auto !important;\n}\n\ni[contenteditable] {\n\tcursor: text !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { type Ref } from 'vue';\nimport { onUnmounted, ref, toRef } from 'vue';\nimport TopHint from '@/components/forms/hint/hint.vue';\nimport type PopupClass from '@/components/popup/lib/popup';\nimport Core from '@/core/core/core';\nimport type { Emits, Props } from './popup';\nimport Opener from './opener.vue';\nimport Worker from '@/components/popup/lib/worker';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tid: '',\n\tpos: '3',\n\tnotch: true,\n\tposBy: 'fixed',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst expose = {\n\tpopup: undefined as PopupClass | undefined,\n};\ndefineExpose(expose);\n\nconst id = props.id || 'top-popup-id-' + Math.random() + '';\nconst elPopupRef: Ref<null | Element> = ref(null);\n\n// см. lib/popup\nconst onOpen = async (popup: PopupClass) => {\n\tif (popup.elPopupInner) {\n\t\tpopup.elPopupInner.innerText = '';\n\n\t\telPopupRef.value = popup.elPopupInner;\n\t}\n\n\tvueConnector.opened = true;\n\tvueConnector.popup = popup;\n\n\texpose.popup = popup;\n\n\temit('open');\n};\n\n// см. lib/popup\nconst onClose = (_popup: PopupClass) => {\n\telPopupRef.value = null;\n\n\tvueConnector.opened = false;\n\tvueConnector.popup = undefined;\n\n\temit('close');\n};\n\nconst vueConnector = {\n\tonOpen,\n\tonClose,\n\tclassRef: toRef(props, 'class'),\n\topened: false,\n\tpopup: undefined as PopupClass | undefined,\n\ttransitionDurationRef: toRef(props, 'transitionDuration'),\n};\n\nWorker.regVueComponent(id, vueConnector);\n\nonUnmounted(() => {\n\tWorker.unregVueComponent(id);\n});\n</script>\n\n<template>\n\t<Opener\n\t\tv-if=\"$slots.opener\"\n\t\t:id=\"id\"\n\t\t:pos=\"pos\"\n\t\t:posBy=\"posBy\"\n\t\t:notch=\"notch\"\n\t\t:openByHover=\"openByHover\"\n\t>\n\t\t<!-- @slot элемент для открытия Popup -->\n\t\t<slot name=\"opener\"></slot>\n\t</Opener>\n\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\n\t<!-- elPopupRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\n\t<teleport\n\t\tv-if=\"elPopupRef\"\n\t\t:to=\"elPopupRef\"\n\t>\n\t\t<div v-if=\"$slots.header || Core.state.isMobile\" class=\"top-popup_header\">\n\t\t\t<span\n\t\t\t\tv-if=\"Core.state.isMobile\"\n\t\t\t\tclass=\"top-as-a closer\"\n\t\t\t>\n\t\t\t\t{{ $i18n.Common.Close }}\n\t\t\t</span>\n\n\t\t\t<!-- @slot Шапка -->\n\t\t\t<slot name=\"header\"></slot>\n\t\t</div>\n\n\t\t<div v-if=\"$slots.widget\" class=\"top-popup_widget\">\n\t\t\t<!-- @slot Виджет -->\n\t\t\t<slot name=\"widget\"></slot>\n\t\t</div>\n\n\t\t<div v-if=\"$slots.content\" class=\"top-popup_content\">\n\t\t\t<!-- @slot Контент в свободной форме -->\n\t\t\t<slot name=\"content\"></slot>\n\t\t</div>\n\n\t\t<ul\n\t\t\tv-if=\"$slots.contentList\"\n\t\t\tclass=\"top-popup_content\"\n\t\t\t@scroll=\"$emit('scrollContentList', $event)\"\n\t\t>\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка используйте компонент popup/listItem -->\n\t\t\t<slot name=\"contentList\"></slot>\n\t\t</ul>\n\n\t\t<div v-if=\"$slots.footer || footerSupportLink\" class=\"top-popup_footer\">\n\t\t\t<a\n\t\t\t\tv-if=\"footerSupportLink\"\n\t\t\t\tclass=\"top-popup_footerSupportLink\"\n\t\t\t\t:href=\"footerSupportLink\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t>\n\t\t\t\t<TopHint hint=\"\"/>\n\t\t\t</a>\n\n\t\t\t<!-- @slot Футер -->\n\t\t\t<slot name=\"footer\"></slot>\n\t\t</div>\n\t</teleport>\n</template>\n\n<style module>\n.top-popup_footerSupportLink {\n\tmargin-right: auto;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { ListItemProps } from './popup';\n\ndefineOptions({\n\tinheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<ListItemProps>(), {\n\ttype: 'button',\n\tcloseByClick: true,\n});\n</script>\n\n<template>\n\t<li\n\t\t:class=\"{\n\t\t'top-popup_liNoSelectable': props.type !== 'button'\n\t}\"\n\t>\n\t\t<component\n\t\t\t:is=\"$attrs.href ? 'a' : 'div'\"\n\t\t\t:class=\"{\n\t\t\t\t'top-popup_listItem': true,\n\t\t\t\t'top-popup_listItem-button': props.type === 'button', // оформления кнопки\n\t\t\t\t'a': props.type === 'button', // оформления кнопки, deprecated\n\t\t\t\t'top-popup_listItem-title': props.type === 'title',\n\t\t\t\t'top-popup_listItem-delimiter': props.type === 'delimiter',\n\t\t\t\t'top-popup-noCloser': !closeByClick\n\t\t\t}\"\n\t\t\t:=$attrs\n\t\t>\n\t\t\t<slot></slot>\n\t\t</component>\n\t</li>\n</template>\n"],"names":["props","__props","id","elOpener","render","el","renderOpener","onUpdated","elOpener2","emit","__emit","expose","__expose","elPopupRef","ref","vueConnector","popup","_popup","toRef","Worker","onUnmounted"],"mappings":";;;;;;;;;;;;;;;;AAIA,UAAAA,IAAAC,GAMAC,IAAAF,EAAA,MAAA,KAAA,OAAA,IAAA;AAEA,QAAAG;AAOA,aAAAC,EAAAC,GAAA;AACC,iBAAA,MAAA;AACC,QAAAF,IAAAE,EAAA,oBAEAF,KACCG,EAAAH,CAAA;AAAA,MACD,CAAA;AAAA,IACA;AAGF,IAAAI,EAAA,MAAA;AACC,MAAAJ,KACCG,EAAAH,CAAA;AAAA,IACD,CAAA;AAGD,aAAAG,EAAAE,GAAA;AAMC,MAAAA,EAAA,QAAA,WAAA,MAAAN,GAEAM,EAAA,QAAA,aAAAN,GACAM,EAAA,QAAA,cAAAR,EAAA,KACAQ,EAAA,QAAA,gBAAAR,EAAA,OACAQ,EAAA,QAAA,gBAAAR,EAAA,QAAA,SAAA,IACAQ,EAAA,QAAA,sBAAAR,EAAA,cAAA,SAAA;AAAA,IAAoE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrCrE,UAAAA,IAAAC,GAOAQ,IAAAC,GAEAC,IAAA;AAAA,MAAe,OAAA;AAAA,IACP;AAER,IAAAC,EAAAD,CAAA;AAEA,UAAAT,IAAAF,EAAA,MAAA,kBAAA,KAAA,OAAA,GACAa,IAAAC,EAAA,IAAA,GA4BAC,IAAA;AAAA,MAAqB,QAzBrB,OAAAC,MAAA;AACC,QAAAA,EAAA,iBACCA,EAAA,aAAA,YAAA,IAEAH,EAAA,QAAAG,EAAA,eAGDD,EAAA,SAAA,IACAA,EAAA,QAAAC,GAEAL,EAAA,QAAAK,GAEAP,EAAA,MAAA;AAAA,MAAW;AAAA,MAcX,SAVD,CAAAQ,MAAA;AACC,QAAAJ,EAAA,QAAA,MAEAE,EAAA,SAAA,IACAA,EAAA,QAAA,QAEAN,EAAA,OAAA;AAAA,MAAY;AAAA,MAKZ,UAAAS,EAAAlB,GAAA,OAAA;AAAA,MAC8B,QAAA;AAAA,MACtB,OAAA;AAAA,MACD,uBAAAkB,EAAAlB,GAAA,oBAAA;AAAA,IACiD;AAGzD,WAAAmB,EAAA,gBAAAjB,GAAAa,CAAA,GAEAK,EAAA,MAAA;AACC,MAAAD,EAAA,kBAAAjB,CAAA;AAAA,IAA2B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1D5B,UAAAF,IAAAC;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"listItem.vue_vue_type_script_setup_true_lang-uKhci19t.amd.js","sources":["../../src/components/popup/popup/opener.vue","../../src/components/popup/popup/popup.vue","../../src/components/popup/popup/listItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onUpdated } from 'vue';\nimport type { OpenerProps } from './popup';\n\nconst props = withDefaults(defineProps<OpenerProps>(), {\n\tpos: '3',\n\tnotch: true,\n\tposBy: 'fixed',\n});\n\nconst id = props.id || Math.random() + '';\n\nlet elOpener: Element;\n\n/**\n * Необычная функция для проброски props внтурь элемента слота\n *\n * @param el - вспомогательрный элемент для доступа к элементам слота\n */\nfunction render(el: any) {\n\tsetTimeout(() => {\n\t\telOpener = el.nextElementSibling;\n\n\t\tif (elOpener) {\n\t\t\trenderOpener(elOpener);\n\t\t}\n\t});\n}\n\nonUpdated(() => {\n\tif (elOpener) {\n\t\trenderOpener(elOpener);\n\t}\n});\n\nfunction renderOpener(elOpener: any) {\n\t/**\n\t * topPopup - необходимый атрибут для всез Popup\n\t *\n\t * Для Vue вместо него используется атрибут topPopupId\n\t */\n\telOpener.dataset.topPopup = '#' + id;\n\n\telOpener.dataset.topPopupId = id;\n\telOpener.dataset.topPopupPos = props.pos;\n\telOpener.dataset.topPopupPosBy = props.posBy;\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\n}\n</script>\n\n<template>\n\t<template :ref=\"render\"></template>\n\n\t<!-- @slot элемент для открытия Popup -->\n\t<slot></slot>\n</template>\n\n<!-- Использует общий deprecated класс .btn -->\n<style>\nh3[data-top-popup],\ndiv[data-top-popup],\ni[data-top-popup]:not(.btn),\nb[data-top-popup]:not(.btn) {\n\tcursor: pointer;\n\tuser-select: none;\n\tfont-style: normal;\n\ttext-decoration: none;\n\tdisplay: inline-flex;\n\talign-items: center;\n}\n\n[data-top-popup][data-top-popup-disabled] {\n\tpointer-events: none;\n\tcursor: auto !important;\n}\n\ni[contenteditable] {\n\tcursor: text !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { type Ref } from 'vue';\nimport { onUnmounted, ref, toRef } from 'vue';\nimport TopHint from '@/components/forms/hint/hint.vue';\nimport type PopupClass from '@/components/popup/lib/popup';\nimport Core from '@/core/core/core';\nimport type { Emits, Props } from './popup';\nimport Opener from './opener.vue';\nimport Worker from '@/components/popup/lib/worker';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tid: '',\n\tpos: '3',\n\tnotch: true,\n\tposBy: 'fixed',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst expose = {\n\tpopup: undefined as PopupClass | undefined,\n};\ndefineExpose(expose);\n\nconst id = props.id || 'top-popup-id-' + Math.random() + '';\nconst elPopupRef: Ref<null | Element> = ref(null);\n\n// см. lib/popup\nconst onOpen = async (popup: PopupClass) => {\n\tif (popup.elPopupInner) {\n\t\tpopup.elPopupInner.innerText = '';\n\n\t\telPopupRef.value = popup.elPopupInner;\n\t}\n\n\tvueConnector.opened = true;\n\tvueConnector.popup = popup;\n\n\texpose.popup = popup;\n\n\temit('open');\n};\n\n// см. lib/popup\nconst onClose = (_popup: PopupClass) => {\n\telPopupRef.value = null;\n\n\tvueConnector.opened = false;\n\tvueConnector.popup = undefined;\n\n\temit('close');\n};\n\nconst vueConnector = {\n\tonOpen,\n\tonClose,\n\tclassRef: toRef(props, 'class'),\n\topened: false,\n\tpopup: undefined as PopupClass | undefined,\n\ttransitionDurationRef: toRef(props, 'transitionDuration'),\n};\n\nWorker.regVueComponent(id, vueConnector);\n\nonUnmounted(() => {\n\tWorker.unregVueComponent(id);\n});\n</script>\n\n<template>\n\t<Opener\n\t\tv-if=\"$slots.opener\"\n\t\t:id=\"id\"\n\t\t:pos=\"pos\"\n\t\t:posBy=\"posBy\"\n\t\t:notch=\"notch\"\n\t\t:openByHover=\"openByHover\"\n\t>\n\t\t<!-- @slot элемент для открытия Popup -->\n\t\t<slot name=\"opener\"></slot>\n\t</Opener>\n\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\n\t<!-- elPopupRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\n\t<teleport\n\t\tv-if=\"elPopupRef\"\n\t\t:to=\"elPopupRef\"\n\t>\n\t\t<div v-if=\"$slots.header || Core.state.isMobile\" class=\"top-popup_header\">\n\t\t\t<span\n\t\t\t\tv-if=\"Core.state.isMobile\"\n\t\t\t\tclass=\"top-as-a closer\"\n\t\t\t>\n\t\t\t\t{{ $i18n.Common.Close }}\n\t\t\t</span>\n\n\t\t\t<!-- @slot Шапка -->\n\t\t\t<slot name=\"header\"></slot>\n\t\t</div>\n\n\t\t<div v-if=\"$slots.widget\" class=\"top-popup_widget\">\n\t\t\t<!-- @slot Виджет -->\n\t\t\t<slot name=\"widget\"></slot>\n\t\t</div>\n\n\t\t<div v-if=\"$slots.content\" class=\"top-popup_content\">\n\t\t\t<!-- @slot Контент в свободной форме -->\n\t\t\t<slot name=\"content\"></slot>\n\t\t</div>\n\n\t\t<ul\n\t\t\tv-if=\"$slots.contentList\"\n\t\t\tclass=\"top-popup_content\"\n\t\t\t@scroll=\"$emit('scrollContentList', $event)\"\n\t\t>\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка используйте компонент popup/listItem -->\n\t\t\t<slot name=\"contentList\"></slot>\n\t\t</ul>\n\n\t\t<div v-if=\"$slots.footer || footerSupportLink\" class=\"top-popup_footer\">\n\t\t\t<a\n\t\t\t\tv-if=\"footerSupportLink\"\n\t\t\t\tclass=\"top-popup_footerSupportLink\"\n\t\t\t\t:href=\"footerSupportLink\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t>\n\t\t\t\t<TopHint hint=\"\"/>\n\t\t\t</a>\n\n\t\t\t<!-- @slot Футер -->\n\t\t\t<slot name=\"footer\"></slot>\n\t\t</div>\n\t</teleport>\n</template>\n\n<style module>\n.top-popup_footerSupportLink {\n\tmargin-right: auto;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { ListItemProps } from './popup';\n\ndefineOptions({\n\tinheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<ListItemProps>(), {\n\ttype: 'button',\n\tcloseByClick: true,\n});\n</script>\n\n<template>\n\t<li\n\t\t:class=\"{\n\t\t'top-popup_liNoSelectable': props.type !== 'button'\n\t}\"\n\t>\n\t\t<component\n\t\t\t:is=\"$attrs.href ? 'a' : 'div'\"\n\t\t\t:class=\"{\n\t\t\t\t'top-popup_listItem': true,\n\t\t\t\t'top-popup_listItem-button': props.type === 'button', // оформления кнопки\n\t\t\t\t'a': props.type === 'button', // оформления кнопки, deprecated\n\t\t\t\t'top-popup_listItem-title': props.type === 'title',\n\t\t\t\t'top-popup_listItem-delimiter': props.type === 'delimiter',\n\t\t\t\t'top-popup-noCloser': !closeByClick\n\t\t\t}\"\n\t\t\t:=$attrs\n\t\t>\n\t\t\t<slot></slot>\n\t\t</component>\n\t</li>\n</template>\n"],"names":["props","__props","id","render","el","elOpener","renderOpener","elOpener2","emit","__emit","__expose","expose","elPopupRef","vue","popup","vueConnector","_popup","popup_worker"],"mappings":"qWAIA,MAAAA,EAAAC,EAMAC,EAAAF,EAAA,IAAA,KAAA,OAAA,EAAA,SASA,SAAAG,EAAAC,EAAA,iBAEEC,EAAAD,EAAA,sBAGCE,EAAAD,CAAA,CACD,CAAA,sBAMAC,EAAAD,CAAA,CACD,CAAA,EAGD,SAAAC,EAAAC,EAAA,0BAQCA,EAAA,QAAA,WAAAL,8DAGAK,EAAA,QAAA,cAAAP,EAAA,MAAA,OAAA,GACAO,EAAA,QAAA,oBAAAP,EAAA,YAAA,OAAA,6mBCrCD,MAAAA,EAAAC,EAOAO,EAAAC,iBAGQ,EAERC,EAAAC,CAAA,EAEA,MAAAT,EAAAF,EAAA,IAAA,gBAAA,KAAA,OAAA,EACAY,EAAAC,EAAA,IAAA,IAAA,KA4BqB,OAzBrB,MAAAC,GAAA,CACCA,EAAA,eACCA,EAAA,aAAA,UAAA,GAEAF,EAAA,MAAAE,EAAA,cAGDC,EAAA,OAAA,GACAA,EAAA,MAAAD,EAEAH,EAAA,MAAAG,EAEAN,EAAA,MAAA,CAAW,EAcX,QAVDQ,GAAA,CACCJ,EAAA,MAAA,KAEAG,EAAA,OAAA,GACAA,EAAA,MAAA,OAEAP,EAAA,OAAA,CAAY,EAKZ,SAAAK,EAAA,MAAAb,EAAA,OAAA,yBAGO,sBAAAa,EAAA,MAAAb,EAAA,oBAAA,CACiD,kEAMxDiB,EAAA,eAAA,kBAAAf,CAAA,CAA2B,CAAA,6yDC1D5B,MAAAF,EAAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu-CcyqVSfg.es.js","sources":["../../src/components/formsExt/menu/menu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, onUpdated, ref } from 'vue';\nimport type { Item, Props } from './menu';\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' || model.value instanceof String)) {\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// если ничего не выбрано, присваиваем 1-ое значение\nif (props.isMultiple && !props.canBeEmptyMultiple && Array.isArray(model.value) && !model.value.length) {\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)\"\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 module>\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\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(--content-background-color);\n\tborder-left: 1px solid var(--color-line-1-opacity);\n\tpadding-left: var(--top-padding-1);\n\tbox-shadow: var(--content-background-color) 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-opacity);\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-icon-primary-2);\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-opacity);\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-secondary-1);\n\t--top-button-background-color-active: var(--color-layer-secondary-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-icon-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-icon-primary-2);\n\t--top-button-color: var(--color-text-primary-1);\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"],"names":["props","__props","model","useModel","el","ref","itemIsActive","item","select","toggle","modelNew","item2","index","onWheel","event","delta","scrollIntoView","isSmooth","elBtn","gap","leftMargin","rightMargin","leftMarginParent","rightMarginParent","scrollLeft","isSafari","_b","_a","Core","selectAll","onMounted","onUpdated"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu-DTbsTDGK.amd.js","sources":["../../src/components/formsExt/menu/menu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, onUpdated, ref } from 'vue';\nimport type { Item, Props } from './menu';\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' || model.value instanceof String)) {\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// если ничего не выбрано, присваиваем 1-ое значение\nif (props.isMultiple && !props.canBeEmptyMultiple && Array.isArray(model.value) && !model.value.length) {\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)\"\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 module>\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\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(--content-background-color);\n\tborder-left: 1px solid var(--color-line-1-opacity);\n\tpadding-left: var(--top-padding-1);\n\tbox-shadow: var(--content-background-color) 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-opacity);\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-icon-primary-2);\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-opacity);\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-secondary-1);\n\t--top-button-background-color-active: var(--color-layer-secondary-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-icon-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-icon-primary-2);\n\t--top-button-color: var(--color-text-primary-1);\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"],"names":["props","__props","el","vue","model","itemIsActive","item","index","modelNew","onWheel","event","delta","scrollIntoView","isSmooth","elBtn","gap","leftMargin","rightMargin","rightMarginParent","scrollLeft"],"mappings":"ydAOA,MAAAA,EAAAC,+BAQAC,EAAAC,EAAA,IAAA,mKAQAH,EAAA,YAAA,CAAA,MAAA,QAAAI,EAAA,KAAA,wNAUA,MAAAC,EAAAC,2MAqBGC,IAAA,gCAIA,MAEAC,EAAA,SAAA,GAAAA,EAAA,CAAA,IAAAF,EAAA,WAGCE,EAAA,CAAAF,EAAA,KAAA,EAIF,CAAAN,EAAA,oBAAA,CAAAQ,EAAA,SAAAA,EAAA,CAAAF,EAAA,KAAA,GAEAF,EAAA,MAAAI,EAEA,OAGDJ,EAAA,MAAAE,EAAA,KAAmB,EAIpBG,EAAAC,GAAA,CAGC,GAFAR,EAAA,MAAA,aAAAA,EAAA,MAAA,aACAQ,EAAA,UACA,KAAA,IAAAA,EAAA,MAAA,EAAA,GAAA,OAEAA,EAAA,eAAA,EAEA,MAAAC,EAAAD,EAAA,OAAA,EAAA,GAAA,IACAR,EAAA,MAAA,WAAAA,EAAA,MAAA,WAAAS,CAA4C,EAU7CC,EAAA,CAAAC,EAAA,KAAA,sDAEC,GAAA,CAAAC,EAAA,OAEA,MAAAC,EAAA,GAGAC,EAAAF,EAAA,WAAAZ,EAAA,MAAA,WAAAa,EACAE,EAAAH,EAAA,WAAAZ,EAAA,MAAA,WAAAY,EAAA,YAAAC,uBAIAG,EAAAhB,EAAA,MAAA,YAAAA,EAAA,MAAA,WAEA,IAAAiB,aAMAF,EAAAC,IAAAC,EAAAF,EAAAf,EAAA,MAAA,aAEAiB,IAAA,sJAMA,mCASA,IAAAf,EAAA,MAAA,SAAAJ,EAAA,MAAA,OAAA,6CAEC,+CAG4D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"popup-C5yk4q8p.es.js","sources":["../../src/components/component.ts","../../src/components/popup/lib/popup.globalEvents.ts","../../src/components/popup/popup/style/popup.css?raw","../../src/components/popup/popup/style/popup.m.css?raw","../../src/components/popup/popup/style/popup.pc.css?raw","../../src/components/popup/lib/popup.ts"],"sourcesContent":["import DOM from '@/core/utils/dom';\n\n/**\n * Базовый компонент для js компонентов, не имеет отношения к Vue\n */\nclass Component {\n\n\tstatic componentName = 'Top';\n\n\tcomponentName: string | undefined; // имя класса компонента\n\tclassName: string | undefined; // имя css класса компонента\n\tuid: string | undefined; // уникальный id компонента\n\tel: HTMLElement | undefined; // элемент, связанный с компонентом\n\toptions = {}; // параметры компонента\n\n\tunmountEls: HTMLElement[] = [];\n\tunmountEvents: any[] = [];\n\n\t// переопредлять нельзя\n\t// если компонент инициирован, необходимо сразу его вернуть и выполнить reInit() вместо mount()\n\t// используется init вместо constructor, так как super constructor выполняется до Object.defineProperty() параметров класса\n\tinit(componentName: string, el: HTMLElement, options: object): Component | void {\n\t\tif (!el) {\n\t\t\tthrow componentName + ': el is undefined';\n\t\t}\n\n\t\tconst component = Component.getComponent(el, componentName);\n\n\t\tif (component) {\n\t\t\tcomponent.reInit(options);\n\n\t\t\treturn component;\n\t\t}\n\n\t\tthis.componentName = componentName;\n\t\tthis.className = 'top' + componentName[0].toUpperCase() + componentName.substring(1);\n\t\tthis.uid = this.componentName + (Math.random() + '').replace('.', '');\n\n\t\tthis._setComponent(el);\n\t\tthis.el = el;\n\t\tthis.el.classList.add(this.className);\n\t\tthis.options = Object.assign(this.options, options);\n\n\t\tthis.mount();\n\t}\n\n\t// получить инициированный компонент\n\tstatic getComponent(el: HTMLElement, componentName: string): any {\n\t\treturn DOM.storage(el, '#' + componentName);\n\t}\n\n\t// устанвоить компонент\n\t_setComponent(el: HTMLElement) {\n\t\tDOM.storage(el, '#' + this.componentName, this);\n\t}\n\n\t// функция подключения компонента\n\tmount(): void {\n\t\tthrow 'Please, add method mount() to component: ' + this.componentName;\n\t}\n\n\t// функция отключения компонента\n\tunmount(): void {\n\t\tDOM.storage(this.el, '#' + this.componentName, null);\n\n\t\tthis.unmountEls.forEach((el) => {\n\t\t\tel.remove();\n\t\t});\n\n\t\tthis.unmountEls = [];\n\n\t\tthis.unmountEvents.forEach((eventData) => {\n\t\t\teventData.el.removeEventListener(eventData.type, eventData.listener, eventData.options);\n\t\t});\n\n\t\tthis.unmountEvents = [];\n\t}\n\n\t// указание новые элементы, которые должны будут удалиться после unmount\n\tregisterElForUnmount(el: HTMLElement): void {\n\t\tthis.unmountEls.push(el);\n\t}\n\n\t// указание новые события, которые должны будут удалиться после unmount\n\taddEventListenerWithUnmount(\n\t\tel: HTMLElement | Document | Window,\n\t\ttype: keyof GlobalEventHandlersEventMap,\n\t\tlistener: (this: HTMLElement, e: Event) => any,\n\t\toptions?: any,\n\t): void {\n\t\tel.addEventListener(type, listener, options);\n\n\t\tthis.registerEventForUnmount(el, type, listener, options);\n\t}\n\n\t// указание новые события, которые должны будут удалиться после unmount\n\tregisterEventForUnmount(\n\t\tel: HTMLElement | Document | Window,\n\t\ttype: keyof GlobalEventHandlersEventMap,\n\t\tlistener: (this: HTMLElement, e: Event) => any,\n\t\toptions?: any,\n\t): void {\n\t\tconst eventData = {\n\t\t\tel: el,\n\t\t\ttype: type,\n\t\t\tlistener: listener,\n\t\t\toptions: options,\n\t\t};\n\n\t\tthis.unmountEvents.push(eventData);\n\t}\n\n\t// функция перенастройки уже подключенного компонента\n\treInit(_options: object): void {\n\t\tthrow 'Please, add method reInit() to component: ' + this.componentName;\n\t}\n\n\tstatic detach(nodes: Node[]): void\n\tstatic detach(nodes: HTMLElement): void\n\n\t// удалить элементы из DOM, но не из памяти\n\tstatic detach(nodes: any): void {\n\t\tif (nodes.forEach) {\n\t\t\tnodes.forEach((node: Node) => node.parentElement?.removeChild(node));\n\t\t} else {\n\t\t\tconst el = nodes;\n\t\t\tel.parentElement?.removeChild(el);\n\t\t}\n\t}\n\n}\n\nexport default Component;\n","import Worker from '@/components/popup/lib/worker';\nimport DOM from '@/core/utils/dom';\n\n/**\n * Глобальные события, для реализации Popup\n * Автоматически инициируется при первой загрузке, не является выгружаемым модулем\n *\n * Если в меню встречает класс .preloader, то событие нажатия на кнопку через enter будет остановлено\n */\nclass GlobalEvents {\n\n\tprivate static isInited = false;\n\n\t/**\n\t * Добавить глобальные обработчики\n\t *\n\t * Добавляются на страницу один раз и навсегда\n\t */\n\tstatic init(): void {\n\t\tif (this.isInited) return;\n\n\t\tthis.isInited = true;\n\n\t\tdocument.addEventListener('click', this.onclick);\n\t\tdocument.addEventListener('keydown', this.onkeydown);\n\t}\n\n\t/**\n\t * Глобальный обработчик кликов\n\t *\n\t * Обрабатывает клики внутри Popup\n\t */\n\tprivate static onclick(e: Event): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\t// элементы меню, клик по которым должен его закрыть\n\t\tconst elCloser = e.target.closest<HTMLElement>('.closer, a, .a, .top-button');\n\t\tif (elCloser) {\n\t\t\t// меню\n\t\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\t\t// клик вне меню\n\t\t\tif (!elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// элемент имеет модификатор, запрещаюущий закрытие меню по клику на него\n\t\t\tif (elCloser.matches('.top-popup-noCloser')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// deprecated, ссылки с href=\".\" запрещены, они должны быть заменены на .top-popup_listItem-button\n\t\t\tif (elCloser.getAttribute('href') === '.') {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\t// клик по кнопке открытия другого меню\n\t\t\tif (e.target.matches('[data-top-popup]')) {\n\t\t\t\t// список меню, в котором был сделан клик\n\t\t\t\tconst elUl = e.target.closest<HTMLElement>('ul');\n\n\t\t\t\t// элемент меню, по которому был сделан клик\n\t\t\t\tconst elItem = e.target.closest<HTMLElement>('a, .a');\n\n\t\t\t\t// сделать элемент меню, по которому сделан клик активным\n\t\t\t\tif (elUl) {\n\t\t\t\t\telUl.querySelector('a.top-active, .a.top-active')?.classList.remove('top-active');\n\t\t\t\t}\n\n\t\t\t\tif (elItem) {\n\t\t\t\t\telItem.classList.add('top-active');\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// закрыть меню\n\t\t\tWorker.close(elPopup);\n\t\t}\n\n\t\t// клик по фону меню\n\t\tif (e.target.matches('.top-popup-wrapper')) {\n\t\t\tconst elPopup = e.target;\n\n\t\t\tWorker.close(elPopup);\n\t\t}\n\t}\n\n\t/**\n\t * Глобальный обработчик нажатия кнопки на клавиатуре\n\t */\n\tprivate static onkeydown(e: KeyboardEvent): void {\n\t\tif (!(e.target instanceof HTMLElement)) return;\n\n\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\n\t\t// нажатие не в меню\n\t\tif (!elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elUl = elPopup.querySelector<HTMLElement>('ul.top-popup_content');\n\n\t\tswitch (e.key) {\n\t\t\tcase 'Escape':\n\t\t\t\tWorker.close(elPopup);\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Enter':\n\t\t\t\t// атоматическое нажатие кнопок при нажатии Enter\n\t\t\t\tif (!elUl) {\n\t\t\t\t\tif (DOM.querySelectorVisible(elPopup, '.preloader')) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// deprecated, старый код на сайте\n\t\t\t\t\tconst elBtn = DOM.querySelectorVisible(elPopup, '.top-popup_footer .go, .top-popup_footer [data-action]');\n\t\t\t\t\tif (elBtn instanceof HTMLElement) {\n\t\t\t\t\t\telBtn.click();\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Запуск клика последней кнопки, расположенной в footer'е Popup'а, нажатием клавиши Enter\n\t\t\t\t\tconst elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button');\n\t\t\t\t\tif (elFooterLastBtn instanceof HTMLElement) {\n\t\t\t\t\t\telFooterLastBtn.click();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\t// перейти по ссылке по нажатию на Enter\n\t\t\t\t// данный функуционал игнорирует SPA\n\t\t\t\tconst elLink = DOM.querySelectorVisible(elPopup, 'li > a.top-active');\n\t\t\t\tif (elLink && elLink.getAttribute('href')) {\n\t\t\t\t\t// фокус может находиться на другой ссылке\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tlocation.href = elLink.getAttribute('href')!;\n\t\t\t\t}\n\n\t\t\t\t// кликнуть по элементу меню по нажатию на Enter\n\t\t\t\tconst elItem = elPopup.querySelector<HTMLElement>('li > .top-active');\n\t\t\t\tif (elItem instanceof HTMLElement) {\n\t\t\t\t\telItem.click();\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t// управление стрелками\n\t\t\tcase 'ArrowUp':\n\t\t\tcase 'ArrowRight':\n\t\t\tcase 'ArrowDown':\n\t\t\tcase 'ArrowLeft':\n\t\t\t\tif (!elUl) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\n\t\t\t\t\tconst elMoreVisible = DOM.querySelectorVisible(\n\t\t\t\t\t\telPopup,\n\t\t\t\t\t\t'ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active > .top-popup_listMore',\n\t\t\t\t\t);\n\t\t\t\t\tif (elMoreVisible) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tconst elItemActive = elPopup.querySelector<HTMLElement>('ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active')?.parentElement;\n\n\t\t\t\t// есть подменю\n\t\t\t\tif (e.key === 'ArrowRight' && elItemActive) {\n\t\t\t\t\t// const elItemMoreActive = elItemActive.querySelector<HTMLElement>('[data-top-popup].top-active');\n\t\t\t\t\t// if (elItemMoreActive) {\n\t\t\t\t\t// \treturn elItemMoreActive.click();\n\t\t\t\t\t// }\n\n\t\t\t\t\tconst elMore = elItemActive.querySelector<HTMLElement>('.top-active > .top-popup_listMore');\n\t\t\t\t\tif (elMore instanceof HTMLElement) {\n\t\t\t\t\t\treturn elMore.click();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst elsLiVisible = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li:not(.top-popup_liNoSelectable)');\n\t\t\t\tconst countLi = elsLiVisible.length;\n\n\t\t\t\tif (!countLi) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tlet index = -1;\n\t\t\t\tif (elItemActive) {\n\t\t\t\t\tindex = elsLiVisible.indexOf(elItemActive);\n\t\t\t\t}\n\n\t\t\t\tif (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {\n\t\t\t\t\tindex--;\n\t\t\t\t} else {\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\t// это первый элемен, \"Назад\" должен закрывать окно\n\t\t\t\tif (e.key === 'ArrowLeft' && index === -1) {\n\t\t\t\t\tif (e.target.matches('input')) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Worker.close(elPopup);\n\t\t\t\t}\n\n\t\t\t\t// это последний элемен, \"Вперед\" не должен ни чего делать\n\t\t\t\tif (e.key === 'ArrowRight' && index === countLi) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tindex = countLi - 1;\n\t\t\t\t}\n\n\t\t\t\tif (index > countLi - 1) {\n\t\t\t\t\tindex = 0;\n\t\t\t\t}\n\n\t\t\t\telPopup.querySelectorAll('ul.top-popup_content > li > .top-active').forEach(el => el.classList.remove('top-active'));\n\t\t\t\telsLiVisible[index].querySelector(':scope > a, :scope > .a')?.classList.add('top-active');\n\n\t\t\t\tWorker.scrollToActive(elPopup);\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n}\n\nexport default GlobalEvents;\n","export default \":root {\\n\\t--top-popup-z-index: 200000;\\n\\t--top-popup-transition-delay: 100ms;\\n\\n\\t--top-popup-background-color: var(--color-bg-3);\\n\\t--top-popup-background-color-hover: var(--color-cell-secondary-2);\\n\\t--top-popup-background-color-active: var(--color-layer-primary-1);\\n\\n\\t--top-popup-border-color: var(--color-line-2-opacity);\\n\\t--top-popup-title-background-color: var(--color-layer-secondary-1);\\n\\n\\t/* суммарный отсуп от каря popup до элемента */\\n\\t--top-popup-content-padding: calc(var(--top-popup-list-padding) + var(--top-popup-listItem-padding));\\n\\n\\t/* списки */\\n\\t--top-popup-list-padding: var(--top-padding-2);\\n\\n\\t--top-popup-listItem-radius: var(--top-radius-2);\\n\\t--top-popup-listItem-padding: var(--top-padding-2);\\n}\\n\\n.top-popup-front { position: relative; }\\n\\n.top-popup-wrapper {\\n\\t/* см. recalcPosition() */\\n\\t--top-popup-height: 0px;\\n\\t--top-popup-right-bounding: 0px;\\n\\t--top-popup-bottom-bounding: 0px;\\n\\t--top-popup-top: 0px;\\n\\t--top-popup-right: calc(100vw - var(--top-popup-right-bounding));\\n\\t--top-popup-bottom: calc(var(--100vh) - var(--top-popup-bottom-bounding));\\n\\t--top-popup-left: 0px;\\n\\n\\ttext-align: initial; white-space: normal; word-break: normal;\\n\\tposition: absolute; z-index: 200000;\\n}\\n\\n.top-popup-wrapper:not(.top-popup-wrapper-shown) { overflow: hidden; }\\n\\n/* top-popupPanel */\\n.top-popupPanel {\\n\\tcursor: default;\\n\\tbox-shadow: var(--top-shadow-b);\\n\\tborder-radius: 14px;\\n\\tbackground: var(--top-popup-background-color);\\n\\tposition: absolute; overflow: hidden;\\n\\tdisplay: flex; flex-direction: column;\\n}\\n\\n/* position */\\n.top-popup-wrapper > * {\\n\\topacity: 0;\\n\\ttransition: opacity var(--top-popup-transition-delay) linear, transform var(--top-popup-transition-delay) linear;\\n}\\n\\n.top-popup-wrapper.p0 > * { transform: translateY(-8px); }\\n\\n.top-popup-wrapper.p1 > * { transform: translateY(8px); }\\n\\n.top-popup-wrapper.p2 > * { transform: translateX(8px); }\\n\\n.top-popup-wrapper.p3 > * { transform: translateY(8px); }\\n\\n.top-popup-wrapper.p4 > * { transform: translateX(-8px); }\\n\\n.top-popup-wrapper-shown:not(.top-popup-wrapper-closed) > * {opacity: 1;transform: translate(0, 0) !important;}\\n\\n.top-popup-wrapper.p0 > .top-popup { top: calc(-16px); left: calc(0px - 8px); }\\n\\n.top-popup-wrapper.p1 > .top-popup { bottom: calc(100% + 8px); }\\n\\n.top-popup-wrapper.p2 > .top-popup { left: calc(100% + 8px); }\\n\\n.top-popup-wrapper.p3 > .top-popup { top: calc(100% + 8px); }\\n\\n.top-popup-wrapper.p4 > .top-popup { right: calc(100% + 8px); }\\n\\n.top-popup-wrapper.p2 > .top-popup,\\n.top-popup-wrapper.p4 > .top-popup { margin-top: -10px; }\\n\\n.top-popup-wrapper.p1.with_notch > .top-popup { margin-bottom: 5px; }\\n\\n.top-popup-wrapper.p2.with_notch > .top-popup { margin-left: 5px; }\\n\\n.top-popup-wrapper.p3.with_notch > .top-popup { margin-top: 5px; }\\n\\n.top-popup-wrapper.p4.with_notch > .top-popup { margin-right: 5px; }\\n\\n.top-popup-wrapper.invert-x > .top-popup { right: 0; }\\n\\n.top-popup-wrapper.invert-y > .top-popup { bottom: 0; }\\n\\n/* notch */\\n.top-popup-wrapper > .notch { border: 7.4px solid transparent; position: absolute; display: block; }\\n\\n.top-popup-wrapper.p1 > .notch { border-bottom: 0; border-top: 7.4px solid var(--content-background-color); margin: 0 0 7.4px -7.4px; bottom: 100%; left: 50% }\\n\\n.top-popup-wrapper.p2 > .notch { border-left: 0; border-right: 7.4px solid var(--content-background-color); margin: 0 0 -7.4px 7.4px; bottom: 50%; left: 100%; }\\n\\n.top-popup-wrapper.p3 > .notch { border-top: 0; border-bottom: 7.4px solid var(--content-background-color); margin: 7.4px 0 0 -7.4px; top: 100%; left: 50%; }\\n\\n.top-popup-wrapper.p4 > .notch { border-right: 0; border-left: 7.4px solid var(--content-background-color); margin: 0 7.4px -7.4px 0; bottom: 50%; right: 100%; }\\n\\n.top-popup-wrapper.p1 > .notch-border { border-top-color: rgba(0, 0, 0, 0.05); margin-bottom: 6px; }\\n\\n.top-popup-wrapper.p2 > .notch-border { border-right-color: rgba(0, 0, 0, 0.05); margin-left: 6px; }\\n\\n.top-popup-wrapper.p3 > .notch-border { border-bottom-color: rgba(0, 0, 0, 0.05); margin-top: 6px; }\\n\\n.top-popup-wrapper.p4 > .notch-border { border-left-color: rgba(0, 0, 0, 0.05); margin-right: 6px; }\\n\\n/* common */\\n.top-popup_header,\\n.top-popup_content,\\n.top-popup_footer { font-size: 14px; }\\n\\n.top-popup_header,\\n.top-popup_footer { display: flex; align-items: center; justify-content: space-between; }\\n\\n/* header */\\n.top-popup_header {\\n\\tcolor: var(--color-text-1);\\n\\tborder-bottom: 1px solid var(--top-popup-border-color);\\n\\tpadding: var(--top-padding-3);\\n\\tfont-weight: 600;\\n}\\n\\n.top-popup_header > * { font-weight: 400; }\\n\\n.top-popup_header > .a { cursor: pointer;}\\n\\n.top-popup_header > .a:hover { color: var(--color-text-primary-2); }\\n\\n.top-popup_headerButton { width: 60px; }\\n\\n/* widget */\\n.top-popup_widget {\\n\\tpadding: var(--top-padding-2) var(--top-padding-2) 0 var(--top-padding-2);\\n}\\n\\n/* content */\\n.top-popup_content {\\n\\tmargin: 0;\\n\\tflex-grow: 1;\\n\\toverflow-y: auto;\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tgap: var(--top-gap-4);\\n\\n\\t-webkit-overflow-scrolling: touch;\\n}\\n\\ndiv.top-popup_content {\\n\\tcolor: var(--color-text-1);\\n\\tpadding: var(--top-popup-content-padding);\\n}\\n\\ndiv.top-popup_content > * { flex-shrink: 0; }\\n\\ndiv.top-popup_content > .top-button { margin: 0; }\\n\\ndiv.top-popup_content .top-unwrap {\\n\\t--top-unwrap-x: var(--top-popup-content-padding);\\n}\\n\\nul.top-popup_content {\\n\\tcolor: var(--color-text-1);\\n\\tpadding: var(--top-popup-list-padding);\\n\\tgap: 2px;\\n}\\n\\nul.top-popup_content .top-unwrap {\\n\\t--top-unwrap-x: var(--top-popup-list-padding);\\n}\\n\\n.top-popup_listItem {\\n\\tborder-radius: var(--top-popup-listItem-radius);\\n\\tpadding: var(--top-popup-listItem-padding);\\n\\tline-height: 1 !important;\\n}\\n\\nul.top-popup_content li { margin: 0; list-style: none; display: flex; position: relative }\\n\\nul.top-popup_content li > * { flex-grow: 1; }\\n\\nul.top-popup_content li > a:not(.top-button),\\nul.top-popup_content li > .a {\\n\\tcursor: pointer;\\n\\tbox-sizing: border-box;\\n\\tborder-radius: var(--top-popup-listItem-radius);\\n\\tbackground: var(--top-popup-background-color);\\n\\tpadding: var(--top-popup-listItem-padding);\\n\\tcolor: var(--color-text-1) !important; font-size: 14px; font-weight: normal !important; text-decoration: none !important; font-style: normal;\\n\\tline-height: 1 !important;\\n\\tdisplay: flex; flex: 1 1 100%; align-items: center;\\n\\ttransition: background-color 0.1s ease-in-out;\\n}\\n\\n.top-popup-wrapper-no_animate ul.top-popup_content li > a:not(.top-button),\\n.top-popup-wrapper-no_animate ul.top-popup_content li > .a { transition: none; }\\n\\nul.top-popup_content li > a:not(.top-button):hover,\\nul.top-popup_content li > .a:hover { background: var(--top-popup-background-color-hover); }\\n\\nul.top-popup_content li > a:not(.top-button).top-active,\\nul.top-popup_content li > .a.top-active {\\n\\t--top-icon-color: var(--color-icon-primary-1) !important;\\n\\n\\tbackground: var(--top-popup-background-color-active);\\n}\\n\\n.top-popup_content + .top-popup_content { padding-top: 0; }\\n\\n/* listTitle */\\n.top-popup_listItem-title {\\n\\tbackground: var(--color-layer-secondary-1);\\n\\tcolor: var(--color-text-1); font-size: 12px;\\n}\\n\\n/* listDelimiter */\\n.top-popup_listItem-delimiter {\\n\\tborder-radius: 3px;\\n\\tbackground: var(--top-popup-border-color);\\n\\theight: 1px;\\n\\tpadding: 0;\\n\\tmargin: 4px;\\n}\\n\\n/* listMore */\\n.top-popup_listMore {\\n\\tfont-size: 20px;\\n\\tmargin: calc(0px - var(--top-popup-listItem-padding)) calc(0px - var(--top-popup-listItem-padding) / 2) calc(0px - var(--top-popup-listItem-padding)) 0;\\n}\\n\\n.top-popup_listMore.top-button { margin: 0; }\\n\\nul.top-popup_content li > .a.top-popup_listMore {\\n\\ttext-align: center;\\n\\tflex-basis: 10px;\\n}\\n\\nul.top-popup_content li > .a.top-popup_listMore:before { color: var(--color-icon-2); }\\n\\nul.top-popup_content li > * > .top-popup_listMore {\\n\\tmargin-left: auto;\\n\\tcolor: var(--color-layer-secondary-4);\\n\\tfont-size: 14px;\\n}\\n\\nul.top-popup_content li > * > i.top-popup_listMore:hover,\\nul.top-popup_content li > * > i.top-popup_listMore.top-active { color: var(--color-text-primary-1); }\\n\\nul.top-popup_content li > * > i.top-popup_listMore:before {\\n\\ttransform: rotate(90deg);\\n\\tdisplay: block;\\n}\\n\\nul.top-popup_content li a.close { background: none !important; }\\n\\n/* data-top-icon */\\n.top-popup_content > [data-top-icon]:before {\\n\\t--top-icon-size: 20px;\\n}\\n\\nul.top-popup_content li > [data-top-icon]:not(.top-button) {\\n\\t--top-icon-color: var(--color-icon-3);\\n\\t--top-icon-size: 20px;\\n\\t--top-icon-width: 20px;\\n}\\n\\nul.top-popup_content li > [data-top-icon]:not(.top-button):before {\\n\\theight: 1rem; margin-right: 8px; transition: color 0.1s;\\n}\\n\\nul.top-popup_content li:hover > [data-top-icon]:not(.top-button) {\\n\\t--top-icon-color: var(--color-icon-2);\\n}\\n\\n/* footer */\\n.top-popup_footer {\\n\\tpadding: var(--top-popup-list-padding);\\n\\tborder-top: 1px solid var(--top-popup-border-color);\\n\\tdisplay: flex;\\n\\tgap: var(--top-gap-2);\\n\\tjustify-content: flex-end;\\n}\\n\\n/* footerSupportLink */\\n.top-popup_footerSupportLink {\\n\\tmargin-right: auto;\\n}\\n\\n/* Виджеты */\\n.top-popup > [data-widget] { padding: 0 var(--top-popup-list-padding); }\\n\\n.top-popup > [data-widget] + hr { margin: 0 var(--top-popup-list-padding); }\\n\\n.top-popup .placeholder {\\n\\tborder: 1px solid #E0D9D9 !important; border-right: none !important; border-left: none !important; background: #F9F9F9 !important; margin: -1px 0; z-index: 1;\\n\\tposition: relative;\\n}\\n\\n/* компоненты */\\n.top-popup-wrapper.simple_list > .top-popup { min-width: 0; white-space: nowrap; }\\n\\n.top-popup_content .top-column { display: flex; flex-direction: column; gap: 4px; }\\n\\nhtml .top-popup .top-popup_content li > .top-button {\\n\\tmargin: calc(var(--top-popup-listItem-padding) / 2) var(--top-popup-listItem-padding);\\n}\\n\\n.top-popup li .check_all,\\n.top-popup li .clear_all { cursor: pointer; color: var(--color-text-primary-1); padding: 8px; display: inline-block; }\\n\\n.top-popup li .check_all:hover,\\n.top-popup li .clear_all:hover { text-decoration: underline; }\\n\\n.top-popup li .clear_all { display: none; }\\n\\n/* table */\\n.top-popup_content table { margin: -9px 0; }\\n\\n.top-popup_content table td,\\n.top-popup_content table th { padding: 9px var(--top-popup-listItem-padding) 9px 0; vertical-align: top; }\\n\\n.top-popup_content table th { width: 40%; font-weight: 600; white-space: nowrap; }\\n\\n/* формы */\\nul.top-popup_content .a > [type=\\\"checkbox\\\"],\\nul.top-popup_content .a > [type=\\\"radio\\\"] { margin: -8px 0 -8px auto; }\\n\\n/* deprecated */\\nul.top-popup_content a > [class*=icon],\\nul.top-popup_content i.a > [class*=icon] {\\n\\ttransition: 0.1s;\\n}\\n\\n.top-popup .buttons { border-radius: 0 0 4px 4px; border-top: 1px solid #BDC3C7; background: #ECF0F1; padding: 10px 15px; margin: 10px -15px -10px -15px; white-space: nowrap; }\\n\\n.top-popup_footer [class*=btn]:not(.btn-transparent) { min-width: 100px; padding: 5px 14px; margin-left: 10px; }\\n\\n.top-popup_footer [class*=btn]:first-child { margin-left: 0; }\\n\\n.top-popup_footer .btn.full_width { margin: 0; flex-grow: 1; }\\n\"","export default \":root {\\n\\t--top-popup-list-padding: 0px;\\n\\n\\t--top-popup-listItem-radius: 0px;\\n\\t--top-popup-listItem-padding: var(--top-padding-4);\\n}\\n\\nhtml.with_popup { background: #808080; }\\n\\n.top-popup-wrapper {\\n\\t--top-popup-footer-offset: 25px;\\n\\n\\twidth: auto !important; height: auto !important;\\n\\tposition: fixed; top: 0 !important; right: 0 !important; left: 0 !important; overflow: hidden;\\n\\ttransition: background 0.3s;\\n}\\n\\n.top-popup-wrapper-shown:not(.top-popup-wrapper-closed) { background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(1px); }\\n.top-popup-wrapper-shown:not(.top-popup-wrapper-closed) > .top-popup { opacity: 1 !important; }\\n\\n.top-popup {\\n\\tborder-radius: 8px 8px 0 0; width: auto !important; max-height: calc(100% - var(--header-height, 0px) - var(--toolbar-height, 0px) - 12px); margin: 0 !important;\\n\\ttop: auto !important; right: 0 !important; bottom: var(--toolbar-height, 0px) !important; left: 0 !important;\\n\\tdisplay: flex; flex-direction: column;\\n\\n\\t/* невозможно опустить элемент вниз за экран на 100%, fix: opacity и translateY(80%) */\\n\\ttransform: translateY(80%);\\n\\n\\ttransition: opacity 0.3s, transform 0.3s;\\n}\\n\\n/* from top */\\n.top-popup-wrapper.p-from-top {\\n\\t--top-popup-footer-offset: 0px;\\n\\n\\ttop: var(--header-height, 0px) !important;\\n}\\n.with_dialog .top-popup-wrapper.p-from-top { top: 50px !important; }\\n.top-popup-wrapper.p-from-top > .top-popup {\\n\\tborder-radius: 0 0 8px 8px; max-height: calc(100% - 24px); top: 0 !important; bottom: auto !important;\\n\\ttransform: translateY(calc(-100% - 24px));\\n}\\n\\n/* widget */\\n.top-popup_widget { padding: var(--top-padding-2);}\\n.top-popup_widget:not(.p-from-top) { order: 10; }\\n\\n/* content */\\nul.top-popup_content {\\n\\tgap: 0;\\n}\\nul.top-popup_content li:not(:last-child) { border-bottom: 1px solid var(--top-popup-border-color); }\\n\\n.top-popup-wrapper.top-style_alt > .top-popup > ul > li { border-bottom: none; }\\n\\n/* footer */\\n.top-popup_footer {\\n\\tflex-direction: column-reverse;\\n}\\n.top-popup_footer > .top-button {\\n\\t--top-forms-base-height: var(--top-forms-base-height_l);\\n\\n\\twidth: 100%;\\n}\\n\\n/* listTitle */\\nul.top-popup_content .top-popup_listItem-title {\\n\\t--top-popup-padding-v: 12px;\\n}\\n\\n/* listDelimiter */\\nul.top-popup_content .top-popup_listItem-delimiter { background: var(--color-line-1-opacity); height: 4px; margin: 0; }\\nul.top-popup_content li:first-child > .top-popup_listItem-delimiter { border-top: 1px solid var(--top-popup-border-color); }\\n\"","export default \"html:not(.with_dialog) { margin-right: 0 !important; }\\n\\n.top-popup { min-width: 250px; max-width: calc(100vw - var(--top-popup-left) - 16px); max-height: calc(var(--top-popup-bottom) + var(--top-popup-height)); }\\n.top-popup-wrapper.invert-x > .top-popup { max-width: calc(100vw - var(--top-popup-right) - 16px); }\\n.top-popup-wrapper.invert-y > .top-popup { max-height: calc(100vh - var(--top-popup-bottom) - 16px); }\\n\\n/* position */\\n.top-popup-wrapper.p1 > .top-popup { max-height: calc(var(--top-popup-top) - var(--header-height, 0px) - 16px); }\\n.top-popup-wrapper.p3 > .top-popup { max-height: calc(var(--top-popup-bottom) - 16px); }\\n.top-popup-wrapper.p2 > .top-popup { max-width: calc(var(--top-popup-right) - 16px); }\\n.top-popup-wrapper.p4 > .top-popup { max-width: calc(var(--top-popup-left) - 16px); }\\n\\n/* notch */\\n.top-popup-wrapper.p1.with_notch > .top-popup,\\n.top-popup-wrapper.p3.with_notch > .top-popup { margin-left: -16px !important; }\\n.top-popup-wrapper.p1.with_notch > .notch,\\n.top-popup-wrapper.p3.with_notch > .notch { margin-left: -8px !important; }\\n\\n.top-popup-wrapper.p1.with_notch.invert-x,\\n.top-popup-wrapper.p3.with_notch.invert-x { margin-left: 3px !important; }\\n.top-popup-wrapper.p1.with_notch.invert-x > .notch,\\n.top-popup-wrapper.p3.with_notch.invert-x > .notch { margin-left: -9px !important; }\\n\\n/* listMore */\\nul.top-popup_content li > * > i.top-popup_listMore { visibility: hidden; transition: none; }\\nul.top-popup_content li:hover > * > i.top-popup_listMore,\\nul.top-popup_content li > *.top-active > i.top-popup_listMore,\\nul.top-popup_content li > * > i.top-popup_listMore.top-active { visibility: visible; }\\n\"","import Core from '@/core/core/core';\nimport Component from '@/components/component';\nimport DOM from '@/core/utils/dom';\nimport Worker from '@/components/popup/lib/worker';\nimport GlobalEvents from '@/components/popup/lib/popup.globalEvents';\n\nimport css from '@/components/popup/popup/style/popup.css?raw';\nimport cssM from '@/components/popup/popup/style/popup.m.css?raw';\nimport cssPC from '@/components/popup/popup/style/popup.pc.css?raw';\nimport { useI18n } from '@/core/plugins/i18n';\n\nCore.insertStyleToPage(css);\nCore.insertStyleToPage(cssM, 'm');\nCore.insertStyleToPage(cssPC, 'pc');\n\nexport interface PopupOptions {\n\tpopup?: string,\n\tid?: string,\n\tp?: number,\n\tnotch?: boolean,\n\tclass?: string,\n\tposBy?: 'left' | 'right' | 'fixed' | Element,\n\tfrontSelector?: string,\n\tinvertX?: boolean,\n\topenByHover?: boolean,\n\tuseOriginal?: boolean,\n\ttransitionDuration?: number,\n\tisFullScreen?: boolean,\n}\n\n/**\n * Основной объект js компонента TopPopup\n *\n * Добавляет jQuery события на this.el, если jQuery загружен:\n *\n * - aftershow.top-menu-popup\n * - afterclose.top-menu-popup\n */\nexport class Popup extends Component {\n\n\tstatic componentName = 'TopPopup';\n\n\tdeclare el: HTMLElement; // элемент, вызвавший открытие Popup\n\telActiveByDefault: boolean | undefined; // элемент уже имеет класс top-active перед открытием окна\n\telPopup: HTMLElement | undefined | null; // Popup .top-popup-wrapper\n\telPopupInner: HTMLElement | undefined; // контентная часть Popup .top-popup\n\telPopupHeader: HTMLElement | undefined | null;\n\telPopupWidget: HTMLElement | undefined | null;\n\telPopupBody: HTMLElement | undefined | null;\n\telPopupFooter: HTMLElement | undefined | null;\n\telFront: HTMLElement | undefined | null;\n\n\tpopupParent: Popup | undefined;\n\n\t$: JQuery<HTMLElement> | undefined; // только, если есть jQuery\n\n\telStartPosition: HTMLElement | undefined | null; // используется для useOriginal\n\tshift = {\n\t\ttop: 0,\n\t\tleft: 0,\n\t};\n\tisClosed = false; // флаг того, что меню закрыто\n\tisFirstClick = true;\n\ttype: string | undefined; // selector или html\n\n\toptions: PopupOptions = {\n\t\tpopup: '', // selector, text\n\t\tp: 0, // положение меню (0 - над элементом, 1 - сверху, 2 - справа, 3 - снизу, 4 слева)\n\t\tnotch: false, // отображать ли клювик\n\n\t\tclass: '', // класс, добавляемый меню\n\n\t\tposBy: 'left', // способ привязки позиционирования меню (left/right - левый/правый край родителя, fixed - по окну)\n\t\tfrontSelector: '',\n\t\tinvertX: false, // базовая ордината - правая граница элемента, а не левая\n\t\topenByHover: false, // открывать при наведении\n\n\t\tuseOriginal: false, // использовать оригинальный шаблон, без клонирвоания (для сохранения состояния меню)\n\n\t\ttransitionDuration: 100, // значение прописано в css\n\n\t\tisFullScreen: false,\n\t};\n\n\tevents = {};\n\n\t/**\n\t * Создать Popup\n\t * @param el - элемент, открывающий меню\n\t * @param options\n\t */\n\tconstructor(el: HTMLElement, options: PopupOptions) {\n\t\tsuper();\n\n\t\tthis.init(Popup.componentName, el, options);\n\t}\n\n\tasync mount(): Promise<void> {\n\t\tif (!(this.el instanceof HTMLElement)) return;\n\t\tconst vueConnector = this.vueGetComponent();\n\n\t\tif (this.el.closest('.top-popup-wrapper')) this.popupParent = Worker.getPopup(this.el.closest('.top-popup-wrapper')!);\n\n\t\tawait this.mountJQuery();\n\n\t\tif (DOM.css(this.el, 'position') !== 'absolute') {\n\t\t\tthis.el.style.position = 'relative';\n\t\t}\n\n\t\tthis.el.dataset.topPopupOpened = 'opened';\n\t\tthis.elActiveByDefault = this.el.classList.contains('top-active');\n\t\tthis.el.classList.add('top-active');\n\n\t\tif (vueConnector) {\n\t\t\t// компонент vue Popup\n\t\t\tthis.type = 'vue';\n\n\t\t\tthis.options.popup = '';\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup);\n\t\t} else if (this.options.popup?.match(/^[#.]/)) {\n\t\t\t// selector\n\t\t\tthis.type = 'selector';\n\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.template`);\n\t\t} else {\n\t\t\t// html\n\t\t\tthis.type = 'html';\n\n\t\t\tif (this.options.useOriginal) {\n\t\t\t\tthrow ('Option useOriginal not allowed for text templates');\n\t\t\t}\n\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup ?? '');\n\t\t}\n\n\t\tif (!this.elPopup || vueConnector?.opened) {\n\t\t\t// возможно шаблон не найден, так как он используется в уже открытом меню\n\t\t\tif (this.options.useOriginal || vueConnector?.opened) {\n\t\t\t\t// закрыть открытое меню\n\t\t\t\tif (vueConnector?.opened) {\n\t\t\t\t\tthis.elPopup = vueConnector.popup.elPopup;\n\t\t\t\t} else {\n\t\t\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.top-popup-wrapper-shown`);\n\t\t\t\t}\n\n\t\t\t\tif (this.elPopup) {\n\t\t\t\t\tthis.el.dataset.topPopupOpened = '';\n\n\t\t\t\t\tif (!this.elActiveByDefault) {\n\t\t\t\t\t\tthis.el.classList.remove('top-active');\n\t\t\t\t\t}\n\n\t\t\t\t\tWorker.close(this.elPopup);\n\n\t\t\t\t\t// повторит попытку открыть меню\n\t\t\t\t\tsetTimeout(() => this.mount(), this.options.transitionDuration);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthrow ('Option useOriginal state allowed only elements .template');\n\t\t\t}\n\n\t\t\t// возможно вместо шаблона используется другой элемент\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}:not(.top-popup-wrapper)`);\n\t\t}\n\n\t\tif (!this.elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.useOriginal) {\n\t\t\tthis.elStartPosition = this.elPopup.closest<HTMLElement>('.top-popup-el-start-position');\n\t\t\tif (!this.elStartPosition) {\n\t\t\t\tthis.elStartPosition = DOM.wrap(this.elPopup, 'i');\n\t\t\t\tthis.elStartPosition.classList.add('top-popup-el-start-position', 'hidden');\n\t\t\t}\n\t\t} else {\n\t\t\tthis.elPopup = this.elPopup.cloneNode(true) as HTMLElement;\n\n\t\t\t// вывод в меню копии произвольного элемента\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template')) {\n\t\t\t\tthis.elPopup.classList.remove('hidden');\n\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\n\t\t\t\t}\n\n\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\n\t\t\t}\n\n\t\t\tif (this.type === 'html') {\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\n\n\t\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// вложенный Popup\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template') || this.type === 'html' || this.type === 'vue') {\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '[data-top-popup]').forEach(el => {\n\t\t\t\t\tif (el instanceof HTMLElement) el.dataset.topPopupPosBy = 'fixed';\n\t\t\t\t});\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '.top-popup-wrapper').forEach(el => el.remove());\n\t\t\t}\n\t\t}\n\n\t\tWorker.decoratorBeforeOpen(this);\n\n\t\tif (vueConnector) {\n\t\t\tthis.options.class = vueConnector.classRef.value;\n\t\t\tif (vueConnector.transitionDurationRef.value !== undefined) {\n\t\t\t\tthis.options.transitionDuration = vueConnector.transitionDurationRef.value;\n\n\t\t\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\t\t\tthis.elPopup.style.setProperty(\n\t\t\t\t\t\t'--top-popup-transition-delay',\n\t\t\t\t\t\tthis.options.transitionDuration + 'ms',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.elPopupInner = document.createElement('div');\n\t\tthis.elPopupInner.classList.add('top-popupPanel', 'top-popup');\n\n\t\twhile (this.elPopup.firstChild) {\n\t\t\tthis.elPopupInner.appendChild(this.elPopup.firstChild);\n\t\t}\n\n\t\tthis.elPopup.append(this.elPopupInner);\n\n\t\tthis.elPopup.classList.add('top-popup-wrapper');\n\n\t\tif (this.options.class) {\n\t\t\tconst classes = this.options.class.split(' ');\n\t\t\tthis.elPopup.classList.add(...classes);\n\t\t}\n\n\t\tif (this.options.notch) {\n\t\t\tthis.elPopup.classList.add('with_notch');\n\t\t\tthis.elPopup.insertAdjacentHTML('beforeend', '<i class=\"notch notch-border\"></i><i class=\"notch\"></i>');\n\t\t}\n\n\t\tawait this.vueOpen();\n\n\t\tthis.elPopupHeader = this.elPopupInner.querySelector<HTMLElement>('.top-popup_header');\n\t\tthis.elPopupWidget = this.elPopupInner.querySelector<HTMLElement>('.top-popup_widget');\n\t\tthis.elPopupBody = this.elPopupInner.querySelector<HTMLElement>('.top-popup_content');\n\t\tthis.elPopupFooter = this.elPopupInner.querySelector<HTMLElement>('.top-popup_footer');\n\n\t\tconst existsWidgetSearch = !!this.elPopup.querySelector('[data-widget=\"search\"]');\n\n\t\tif (this.options.isFullScreen && !existsWidgetSearch) {\n\t\t\tconst i18n = useI18n();\n\n\t\t\tif (!this.elPopupHeader && i18n.Common.Close) {\n\t\t\t\tthis.elPopupHeader = DOM.genEl('i', { class: 'top-popup_header' });\n\t\t\t\tthis.elPopupInner.prepend(this.elPopupHeader);\n\n\t\t\t\tthis.elPopupHeader.prepend(DOM.genEl('i', { class: 'a closer' }, i18n.Common.Close));\n\t\t\t\tthis.elPopupHeader.append(DOM.genEl('i', { class: 'top-popup_headerButton' }));\n\t\t\t}\n\t\t}\n\n\t\tDOM.storage(this.elPopup, Popup.componentName, this);\n\n\t\tif (this.options.frontSelector) {\n\t\t\tthis.elFront = document.querySelector<HTMLElement>(this.options.frontSelector);\n\t\t}\n\t\tif (!this.elFront) {\n\t\t\tthis.elFront = this.el.closest<HTMLElement>('.top-popup-front');\n\t\t}\n\t\tif (!this.elFront) {\n\t\t\tthis.elFront = document.body;\n\t\t}\n\n\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.width = this.el.offsetWidth + 'px';\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\n\t\t\tthis.elPopup.style.top = this.el.offsetTop + 'px';\n\t\t\tthis.elPopup.style.right = parseInt(this.el.style.right || '0') + 'px';\n\t\t\tthis.elPopup.style.bottom = parseInt(this.el.style.bottom || '0') + 'px';\n\t\t}\n\n\t\tthis.el.parentElement?.insertBefore(this.elPopup, this.el);\n\t\tthis.elPopup.classList.remove('template');\n\n\t\tif (this.options.invertX) {\n\t\t\tthis.elPopup.classList.add('invert-x');\n\t\t}\n\n\t\tlet fromTop = !!this.el.closest('.modal-header');\n\t\tif (!fromTop) {\n\t\t\tfromTop = !!this.el.closest('#top_panel');\n\t\t}\n\t\tif (!fromTop) {\n\t\t\tfromTop = !!this.el.closest('#secondmenu');\n\t\t}\n\t\tif (fromTop) {\n\t\t\tthis.elPopup.classList.add('p-from-top');\n\t\t}\n\n\t\t// появление с анимацией\n\t\tsetTimeout(() => this.elPopup?.classList.add('top-popup-wrapper-shown'));\n\n\t\tif (this.elFront && !this.elFront.matches('body')) {\n\t\t\tthis.elFront.append(this.elPopup);\n\n\t\t\tthis.shift.top = DOM.offset(this.el).top - this.el.offsetTop - DOM.offset(this.elFront).top;\n\t\t\tthis.shift.left = DOM.offset(this.el).left - this.el.offsetLeft - DOM.offset(this.elFront).left;\n\n\t\t\t// position() не учитывает margin, замечено для flex\n\t\t\tthis.shift.top -= parseInt(this.el.style['margin-top'] || 0);\n\t\t\tthis.shift.left -= parseInt(this.el.style['margin-left'] || 0);\n\n\t\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\t\tthis.elPopup.style.top = parseInt(this.elPopup.style.top || '0') + this.shift.top + 'px';\n\t\t\t\tthis.elPopup.style.left = parseInt(this.elPopup.style.left || '0') + this.shift.left + 'px';\n\t\t\t}\n\t\t}\n\n\t\tif (this.$ && Core.$) {\n\t\t\tthis.$.trigger('aftershow.top-menu-popup', [Core.$(this.elPopup)]);\n\t\t}\n\n\t\tthis.recalcPosition();\n\n\t\tthis.elPopup.setAttribute('tabindex', '0');\n\t\tthis.focus();\n\n\t\tWorker.decoratorAfterOpen(this);\n\n\t\tthis.mountEvents();\n\t}\n\n\tasync mountJQuery() {\n\t\tif (!Core.$) return;\n\n\t\tthis.$ = Core.$(this.el);\n\t}\n\n\t/**\n\t * Выполнить фокусировку на нужный элемент после открытия окна\n\t */\n\tfocus(): void {\n\t\tlet el: Element | null;\n\n\t\tif (this.elPopup) {\n\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup-autofocus');\n\n\t\t\t// поле ввода\n\t\t\tif (!el) {\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, ':read-write, select:not(:disabled)');\n\t\t\t}\n\n\t\t\t// кнопка\n\t\t\tif (!el) {\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup_footer .top-button');\n\t\t\t}\n\n\t\t\tif (!el) {\n\t\t\t\tel = this.elPopup;\n\t\t\t}\n\n\t\t\t// выполнить фокусировку сразу, для применения необъодимых стилей\n\t\t\tif (el instanceof HTMLElement) el.focus();\n\n\t\t\t// выполнить фокусировку после завершения анимации открытия popup\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (el instanceof HTMLElement) el.focus();\n\t\t\t}, this.options.transitionDuration);\n\t\t}\n\t}\n\n\tmountEvents(): void {\n\t\t// закрытие при клике вне контекстного меню\n\t\tthis.addEventListenerWithUnmount(document, 'mousedown', (e) => this.onMousedown(e as MouseEvent));\n\n\t\tif (this.elPopup && this.elPopupInner) {\n\t\t\t// закрыть другие меню\n\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'focus', (e) => this.onFocus(e as FocusEvent));\n\n\t\t\t// автоматическое закрытие при отведении мыши\n\t\t\tif (this.options.openByHover) {\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopupInner, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\n\t\t\t}\n\t\t}\n\n\t\t// не скроллить страницу\n\t\tif (this.options.isFullScreen && this.elPopupBody) {\n\t\t\tthis.addEventListenerWithUnmount(this.elPopupBody, 'touchmove', (e) => this.onTouchmove(e as TouchEvent));\n\t\t}\n\t}\n\n\t/**\n\t * Обработка клика вне окна\n\t */\n\tprivate onMousedown(e: MouseEvent): void {\n\t\t// // не оригинальное событие\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\n\t\t// \treturn;\n\t\t// }\n\n\t\t// Popup уже закрыт\n\t\tif (!this.elPopup || !(e.target instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик на внешнем элементе\n\t\tif (!this.isFirstClick) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isFirstClick = false;\n\t\tsetTimeout(() => this.isFirstClick = true);\n\n\t\t// клик не основной кнопкой мыши\n\t\tif (e instanceof MouseEvent && e.button !== 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// открыто другое меню с posBy = fixed, сначала должно быть закрыто оно\n\t\tlet elPopupOpened = DOM.querySelectorVisibleLast(document.body, ':scope > .top-popup-wrapper');\n\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\n\t\t\treturn;\n\t\t}\n\n\t\t// открыто другое меню в top-popup-front, сначала должно быть закрыто оно\n\t\tif (e.target.closest('.top-popup-front')) {\n\t\t\telPopupOpened = DOM.querySelectorVisibleLast(e.target.closest('.top-popup-front')!, ':scope > .top-popup-wrapper');\n\n\t\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// клик внутри этого меню\n\t\tif (this.elPopup.contains(e.target)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// клик вне родительского диалогового окна\n\t\tif (this.elPopup.closest('.ui-dialog') && !e.target.closest('.ui-dialog')) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (Worker.decoratorIsIgnoreOuterClick(e)) {\n\t\t\treturn;\n\t\t}\n\n\t\tWorker.close(this.elPopup);\n\t}\n\n\t/**\n\t * Закрыть другие Popup при фокусе на элемент формы в текущем\n\t */\n\tprivate onFocus(e: FocusEvent): void {\n\t\tif (e.target instanceof Element && e.target.matches('input')) {\n\t\t\treturn;\n\t\t}\n\n\t\t// // не оригинальное событие\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\n\t\t// \treturn;\n\t\t// }\n\n\t\t// это окно уже закрывается\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst elsPopups = Worker.getAllVisible();\n\t\telsPopups.forEach(elPopup => {\n\t\t\t// фокус внутри этого окна\n\t\t\tif (this.elPopup?.contains(elPopup)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// это Popup из которого был открыт Popup с фокусом\n\t\t\t// глубина вложенности: до 3 подменю\n\t\t\tif (\n\t\t\t\tthis.popupParent?.elPopup === elPopup ||\n\t\t\t\tthis.popupParent?.popupParent?.elPopup === elPopup\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.close(elPopup);\n\t\t});\n\t}\n\n\t/**\n\t * Закрыть Popup при отведении мыши\n\t */\n\tprivate onMouseleave(_e: MouseEvent): void {\n\t\tsetTimeout(() => {\n\t\t\tif (this.elPopupInner && this.elPopupInner.matches(':hover') || !this.elPopup) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tWorker.close(this.elPopup);\n\t\t}, 100);\n\t}\n\n\t/**\n\t * Контроль положения Popup при fixed позиционировании\n\t */\n\tprivate onResize(): void {\n\t\t// на android при вызове метода append сбрасывается фокус с input внутри this.elPopup\n\t\tif (this.elPopup && this.elPopup.parentElement !== document.body) {\n\t\t\tdocument.body.append(this.elPopup);\n\t\t}\n\n\t\tif (this.elPopup instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.top = DOM.offset(this.el).top + 'px';\n\t\t\tthis.elPopup.style.left = DOM.offset(this.el).left + 'px';\n\t\t}\n\t}\n\n\tunmount(): void {\n\t\tsuper.unmount();\n\n\t\tif (this.el instanceof HTMLElement) this.el.dataset.topPopupOpened = '';\n\t\tif (!this.elActiveByDefault) {\n\t\t\tthis.el.classList.remove('top-active');\n\t\t}\n\n\t\tlet style = this.el.getAttribute('style');\n\t\tif (style) {\n\t\t\tstyle = style.replace(/position:[^;]*;?/g, '');\n\t\t\tthis.el.setAttribute('style', style);\n\t\t}\n\t}\n\n\t// контроль за положением Popup, чтобы оно не вылезало за пределы документа\n\trecalcPosition(): void {\n\t\tif (!(this.elPopup instanceof HTMLElement)) return;\n\n\t\tlet p = this.options.p;\n\t\tlet leftPos: number;\n\n\t\tif (this.el instanceof HTMLElement) {\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\n\n\t\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\n\t\t\tthis.elPopup.classList.add('p' + p);\n\n\t\t\tswitch (this.options.posBy) {\n\t\t\t\tcase 'left':\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\n\t\t\t\t\tleftPos += this.shift.left;\n\t\t\t\t\tthis.elPopup.style.left = leftPos + 'px';\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'right':\n\t\t\t\t\tif (!(this.el.offsetParent instanceof HTMLElement)) break;\n\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\n\t\t\t\t\tthis.elPopup.style.right = this.el.offsetParent.offsetWidth - this.el.offsetWidth - leftPos + 'px';\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'fixed':\n\t\t\t\t\tthis.addEventListenerWithUnmount(window, 'resize', () => this.onResize());\n\n\t\t\t\t\tthis.onResize();\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthis.options.posBy?.append(this.elPopup);\n\t\t\t}\n\t\t}\n\n\t\t// контроль за пложением Popup, чтобы оно не вылезало за пределы документа\n\t\tconst boundingClientRect = this.elPopup.getBoundingClientRect();\n\t\tthis.elPopup.style.setProperty('--top-popup-height', this.elPopup.offsetHeight + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-right-bounding', boundingClientRect.right + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-bottom-bounding', boundingClientRect.bottom + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-top', boundingClientRect.top + 'px');\n\t\tthis.elPopup.style.setProperty('--top-popup-left', boundingClientRect.left + 'px');\n\n\t\tif (this.elPopupInner instanceof HTMLElement) {\n\t\t\tthis.elPopupInner.style.maxWidth = 'unset';\n\t\t\tthis.elPopupInner.style.maxHeight = 'unset';\n\t\t}\n\n\t\tlet outTop = false;\n\t\tlet outRight = false;\n\t\tlet outBottom = false;\n\t\tlet outLeft = false;\n\n\t\t// имеет ли смысл прикреплять окно к другой стороне кнопки\n\t\tlet usefulInvertX = boundingClientRect.left > window.innerWidth / 2;\n\t\tlet usefulInvertY = boundingClientRect.top > window.innerHeight / 2;\n\n\t\tif (p === 4) {\n\t\t\tusefulInvertX = !usefulInvertX;\n\t\t}\n\n\t\tif (p === 1) {\n\t\t\tusefulInvertY = !usefulInvertY;\n\t\t}\n\n\t\tconst contentBoundingClientRect = this.elPopupInner?.getBoundingClientRect();\n\t\tlet contentRight: number;\n\t\tlet contentBottom: number;\n\n\t\tif (contentBoundingClientRect) {\n\t\t\tcontentRight = window.innerWidth - contentBoundingClientRect.right;\n\t\t\tcontentBottom = window.innerHeight - contentBoundingClientRect.bottom;\n\n\t\t\tconst margin = 8;\n\n\t\t\tif (contentBoundingClientRect.top < margin) {\n\t\t\t\toutTop = true;\n\t\t\t}\n\n\t\t\tif (contentRight < margin) {\n\t\t\t\toutRight = true;\n\t\t\t}\n\n\t\t\tif (contentBottom < margin) {\n\t\t\t\toutBottom = true;\n\t\t\t}\n\n\t\t\tif (contentBoundingClientRect.left < margin) {\n\t\t\t\toutLeft = true;\n\t\t\t}\n\t\t}\n\n\t\tif (outTop && (p === 0 || p === 1) && usefulInvertY) {\n\t\t\tp = 3;\n\t\t}\n\n\t\tif (outBottom && p === 3 && usefulInvertY) {\n\t\t\tp = 1;\n\t\t}\n\n\t\tif (outRight && p === 2 && usefulInvertX) {\n\t\t\tp = 4;\n\t\t}\n\n\t\tif (outLeft && p === 4 && usefulInvertX) {\n\t\t\tp = 2;\n\t\t}\n\n\t\tif (outRight && (p === 0 || p === 1 || p === 3)) {\n\t\t\tthis.elPopup.classList.add('invert-x');\n\t\t}\n\n\t\tif (outBottom && (p === 2 || p === 4) && usefulInvertY) {\n\t\t\t// меню справа может перемещаться вверх, толкьо если есть место слева\n\t\t\tif (p === 2 && !usefulInvertX) {\n\t\t\t\tthis.elPopup.classList.add('invert-y');\n\t\t\t}\n\n\t\t\t// меню слева перемещаясь вверх, должно открываться влево\n\t\t\tif (p === 4 && !usefulInvertX) {\n\t\t\t\tthis.elPopup.classList.add('invert-x');\n\t\t\t}\n\n\t\t\tif (!this.elPopup.matches('.invert-y')) {\n\t\t\t\tp = 1;\n\t\t\t}\n\t\t}\n\n\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\n\t\tthis.elPopup.classList.add('p' + p);\n\n\t\tif (this.elPopupInner instanceof HTMLElement) {\n\t\t\tthis.elPopupInner.style.maxWidth = '';\n\t\t\tthis.elPopupInner.style.maxHeight = '';\n\t\t}\n\n\t\tWorker.scrollToActive(this.elPopup);\n\t};\n\n\tonTouchmove(e: TouchEvent): void {\n\t\tif (e.currentTarget instanceof HTMLElement && e.target instanceof HTMLElement) {\n\t\t\t// разрешить горизональный скролл\n\t\t\tlet hasScrollX = e.currentTarget.scrollWidth > e.currentTarget.offsetWidth;\n\t\t\tif (hasScrollX) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.target.parentElement?.scrollWidth && e.target.parentElement?.offsetWidth) {\n\t\t\t\t// разрешить горизональный скролл\n\t\t\t\tlet hasScrollX2 = e.target.parentElement.scrollWidth > e.target.parentElement?.offsetWidth;\n\t\t\t\tif (hasScrollX2) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!e.currentTarget.matches('.has_scroll')) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t}\n\t}\n\n\tclose(): void {\n\t\tif (this.isClosed) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isClosed = true;\n\n\t\tif (this.$ && Core.$ && this.elPopup) {\n\t\t\tthis.$.trigger('afterclose.top-menu-popup', [Core.$(this.elPopup)]);\n\t\t}\n\n\t\tif (Worker.noClose) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.unmount();\n\n\t\tthis.elPopup?.classList.add('top-popup-wrapper-closed');\n\n\t\tsetTimeout(() => {\n\t\t\tthis.vueClose();\n\n\t\t\tif (!this.elPopup) return;\n\n\t\t\tif (this.options.useOriginal) {\n\t\t\t\tthis.elPopup.removeAttribute('style');\n\t\t\t\tthis.elPopup.classList.remove('top-popup-wrapper-shown', 'top-popup-wrapper-closed');\n\t\t\t\tthis.elPopup.classList.add('template');\n\t\t\t\tthis.elStartPosition?.append(this.elPopup);\n\n\t\t\t\tthis.elPopup.querySelector('div.top-popup_content.top-column')?.classList.remove('top-column');\n\t\t\t\tthis.elPopup.querySelector('.notch-border')?.remove();\n\t\t\t\tthis.elPopup.querySelector('.notch')?.remove();\n\n\t\t\t\tthis.elPopupInner?.replaceWith(...this.elPopupInner.childNodes);\n\n\t\t\t\tDOM.storageClear(this.elPopup);\n\t\t\t} else {\n\t\t\t\tDOM.storageClear(this.elPopup);\n\n\t\t\t\tthis.elPopup.remove();\n\t\t\t\tdelete this.elPopup;\n\t\t\t}\n\n\t\t\tconst elsPopups = Worker.getAllVisible();\n\t\t\tconst elPopupLast = elsPopups.length && elsPopups[elsPopups.length - 1];\n\n\t\t\tif (elPopupLast) {\n\t\t\t\tWorker.getPopup(elPopupLast).focus();\n\t\t\t} else {\n\t\t\t\tdocument.documentElement.classList.remove('with_popup');\n\t\t\t}\n\t\t}, this.options.transitionDuration);\n\t}\n\n\tasync vueOpen(): Promise<void> {\n\t\tawait this.vueGetComponent()?.onOpen(this);\n\t}\n\n\tvueClose(): void {\n\t\tthis.vueGetComponent()?.onClose(this);\n\t}\n\n\t// получить vueConnectors компонента Popup\n\tvueGetComponent() {\n\t\tif (this.el instanceof HTMLElement && this.options.id) return Worker.vueConnectors.get(this.options.id);\n\t}\n}\n\nGlobalEvents.init();\n\nexport default Popup;\n"],"names":["Component","componentName","el","options","component","DOM","eventData","type","listener","_options","nodes","node","_a","GlobalEvents","e","elCloser","elPopup","elUl","elItem","Worker","elBtn","elFooterLastBtn","elLink","elItemActive","elMore","elsLiVisible","countLi","index","_b","css","cssM","cssPC","Core","Popup","vueConnector","classes","existsWidgetSearch","i18n","useI18n","fromTop","elPopupOpened","_d","_c","_e","style","p","leftPos","boundingClientRect","outTop","outRight","outBottom","outLeft","usefulInvertX","usefulInvertY","contentBoundingClientRect","contentRight","contentBottom","margin","elsPopups","elPopupLast"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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"}
|