@topvisor/ui 0.9.29 → 0.9.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/.chunks/{datepicker-C5l1LY9e.es.js → datepicker-C5qdwKuQ.es.js} +2 -2
  2. package/.chunks/{datepicker-C5l1LY9e.es.js.map → datepicker-C5qdwKuQ.es.js.map} +1 -1
  3. package/.chunks/{forms-BwLbWSIF.es.js → forms-BkBLBZBn.es.js} +56 -58
  4. package/.chunks/{forms-BwLbWSIF.es.js.map → forms-BkBLBZBn.es.js.map} +1 -1
  5. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-C4297RyP.es.js → listItem.vue_vue_type_script_setup_true_lang-CmrUY2go.es.js} +34 -36
  6. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-C4297RyP.es.js.map → listItem.vue_vue_type_script_setup_true_lang-CmrUY2go.es.js.map} +1 -1
  7. package/.chunks/{menu-Czk2awpe.es.js → menu-DMBqYUnZ.es.js} +39 -41
  8. package/.chunks/{menu-Czk2awpe.es.js.map → menu-DMBqYUnZ.es.js.map} +1 -1
  9. package/.chunks/{popup-C5Ha2nU3.es.js → popup-CTCFSYwA.es.js} +2 -2
  10. package/.chunks/{popup-C5Ha2nU3.es.js.map → popup-CTCFSYwA.es.js.map} +1 -1
  11. package/.chunks/{widgetInput-DZXnw5Ms.es.js → widgetInput-Crf7T-Na.es.js} +12 -14
  12. package/.chunks/{widgetInput-DZXnw5Ms.es.js.map → widgetInput-Crf7T-Na.es.js.map} +1 -1
  13. package/core/core.js +1 -1
  14. package/forms/forms.js +1 -1
  15. package/formsExt/formsExt.js +60 -62
  16. package/formsExt/formsExt.js.map +1 -1
  17. package/package.json +1 -1
  18. package/popup/popup.js +2 -2
  19. package/popup/worker.js +2 -2
  20. package/project/project.js +29 -31
  21. package/project/project.js.map +1 -1
  22. package/tabs/tabs.js +21 -23
  23. package/tabs/tabs.js.map +1 -1
  24. package/tabsView/tabsView.js +43 -45
  25. package/tabsView/tabsView.js.map +1 -1
  26. package/utils/date.js +1 -1
  27. package/utils/device.js +1 -1
  28. package/utils/scroll.js +1 -1
  29. package/utils/window.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"forms-BwLbWSIF.es.js","sources":["../../src/core/utils/device.ts","../../src/core/core/page.ts","../../src/core/core/events.ts","../../src/core/core/options.ts","../../src/core/core/state.ts","../../src/core/directives/tooltip.ts","../../src/core/directives/focus.ts","../../src/core/directives/sticky.ts","../../src/core/directives/swimUp.ts","../../src/core/utils/window.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/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/loadbar/loadbar.vue","../../src/components/forms/input/input.vue"],"sourcesContent":["/**\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 */\nconst 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};","class Page {\n\n}\n\nexport default Page;","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: Element, ev: TopEvent) => any) {\n\tonResizeListeners.set(listener, listener);\n}\n\n/**\n * Удаление обработчика на событие изменений размеров экрана\n */\nfunction removeOnResize (listener: (this: Element, 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 * Можно переопределить при подклчюении UI во Vue приложение через app.use(Core, options)\n */\nconst options = {\n\twidthForMobile: 900,\n\tdateFormat: 'Y-m-d',\n\n\t/**\n\t * Для Москвы: +0300\n\t */\n\tgmt: new Date().toString().match(/GMT(\\S+)/)?.[1],\n};\n\nexport default options;","/**\n * State UI для взаимодейсвтиями с приложениями Vue\n */\nconst state = {\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\tsize: 0,\n\n\t// См. core.options\n\tdateFormat: 'Y-m-d',\n\n\t// См. core.options\n\tgmt: new Date().toString().match(/GMT(\\S+)/)?.[1],\n};\n\nexport default state;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\nimport Core from '@/core/core/core';\n\nconst $ = (el: VNode) => {\n\tif (!Core.$?.ui?.tooltip) {\n\t\tconsole.info('Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip');\n\n\t\treturn;\n\t}\n\n\treturn Core.$(el);\n};\n\nconst tvTooltipGenOptions = (binding: DirectiveBinding, vnode: VNode) => {\n\tconst options = binding.value ?? {};\n\n\toptions.content ??= vnode.props?.title;\n\toptions.content = String(options.content).replace(/\\r\\n|\\r|\\n/g, '<br>');\n\n\toptions.position ??= {\n\t\tmy: 'bottom-18px',\n\t\tat: 'top center',\n\t};\n\n\treturn options;\n};\n\n/**\n * Добавление всплывающей подсказки к элементу.\n */\nconst tooltip = {\n\tmounted(el: VNode, binding: DirectiveBinding, vnode: VNode) {\n\t\t$(el)?.tooltip(tvTooltipGenOptions(binding, vnode));\n\t},\n\n\tupdated(el: VNode, binding: DirectiveBinding, vnode: VNode, _prevVnode: VNode) {\n\t\t/**\n\t\t * В результате обновления может быть открыто несколько тултипов поэтому изменить опции, без перерисовки тултипа\n\t\t */\n\t\tconst options = tvTooltipGenOptions(binding, vnode);\n\t\tconst instance = $(el)?.tooltip('instance') as { options: JQueryUI.TooltipOptions } | undefined;\n\t\tif (!instance) {\n\t\t\treturn;\n\t\t}\n\n\t\tinstance.options = {\n\t\t\t...instance.options,\n\t\t\t...options,\n\t\t};\n\t},\n\n\tunmounted(el: VNode, _binding: DirectiveBinding, _vnode: VNode) {\n\t\t$(el)?.tooltip('destroy');\n\t},\n} satisfies ObjectDirective;\n\nexport default tooltip;","import type { DirectiveBinding, ObjectDirective } from 'vue';\n\n/**\n * Фокусировка на элементе сразу после его отображения\n */\nconst focus = {\n\tmounted: function (el: HTMLElement, binding: DirectiveBinding) {\n\t\tif (binding.value || binding.value === undefined) el.focus();\n\t}\n} satisfies ObjectDirective;\n\nexport default focus;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\n\nlet appStickyObserver: IntersectionObserver;\n\n/**\n * Добавление sticky\n * К элементу добляется класс переданный как значение диррективы либо **'top-sticky'** по умолчанию\n */\nconst sticky = {\n\tmounted(el: HTMLElement, binding: DirectiveBinding, _vnode: VNode){\n\t\tconst className = binding.value || 'top-sticky';\n\n\t\tappStickyObserver = new IntersectionObserver(entries => {\n\t\t\tlet condition = entries[0].intersectionRatio < 1;\n\t\t\tif(condition){\n\t\t\t\tif(binding.arg === 'bottom' && entries[0].intersectionRect.y === 0) condition = false;\n\t\t\t}\n\n\t\t\tel.classList.toggle(className, condition);\n\t\t}, {\n\t\t\tthreshold:[1]\n\t\t});\n\n\t\tappStickyObserver.observe(el);\n\t},\n\n\tunmounted(_el: HTMLElement, _binding: DirectiveBinding, _vnode: VNode){\n\t\tappStickyObserver?.disconnect();\n\t},\n} satisfies ObjectDirective;\n\nexport default sticky;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\nimport Core from '@/core/core/core';\n\ninterface SwipUpOptions {\n\tdistance: number,\n\tpercent: number,\n}\n\nlet appSwimUpInited = false;\nlet appSwimUpObserver: IntersectionObserver;\nlet directiveSwipUpOptions: SwipUpOptions;\nconst appSwimUpEls = new Map();\n\n\n/**\n * Отодвинуть блок в зависимости от скролла старинцы\n * @param el\n * @param windowHeight\n */\nconst swimUpElTransform = (el: HTMLElement, windowHeight: number): void => {\n\tconst { distance, percent } = directiveSwipUpOptions;\n\n\tconst elTop = el.getBoundingClientRect().top;\n\n\t// во столько раз triggerHeight должен быть меньше, чтобы закончить подплытие к нужной высоте экрана\n\tconst triggerHeightReducer = windowHeight * percent / 100 / distance;\n\tconst triggerHeight = (windowHeight - elTop) / triggerHeightReducer;\n\n\tif (triggerHeight <= distance) {\n\t\tel.style.transform = `translateY(${distance - triggerHeight}px)`;\n\t} else {\n\t\tel.style.transform = 'translateY(0px)';\n\t}\n}\n\nconst swimUpInit = (el: HTMLElement): void => {\n\tlet windowHeight = window.innerHeight;\n\n\twindow.addEventListener('scroll', () => {\n\t\tappSwimUpEls.forEach((el) => swimUpElTransform(el, windowHeight));\n\t}, { passive: true });\n\n\t// проверка того, что элемент в зоне видимости\n\tappSwimUpObserver = new IntersectionObserver(entries => {\n\t\twindowHeight = window.innerHeight;\n\n\t\tentries.forEach((entry) => {\n\t\t\tconst el = entry.target as HTMLElement;\n\n\t\t\tif (entry.intersectionRatio < 0.1) {\n\t\t\t\t// элемент за областью видимости\n\t\t\t\tappSwimUpEls.delete(el);\n\t\t\t} else {\n\t\t\t\t// элемент на экране\n\t\t\t\tappSwimUpEls.set(el, el);\n\t\t\t}\n\n\t\t\tif (entry.intersectionRatio === 0) {\n\t\t\t\tconst { distance, percent } = directiveSwipUpOptions;\n\t\t\t\tel.style.transform = `translateY(${distance}px)`;\n\t\t\t}\n\t\t});\n\t}, {\n\t\tthreshold: 0.1,\n\t});\n}\n\n/**\n * Добавление анимации подплытия вверх для блока\n */\nconst swimUp = {\n\tmounted(el: HTMLElement, binding: DirectiveBinding, _vnode: VNode): void {\n\t\tif (Core.state.isMobileUA) return;\n\n\t\tconst args = binding.arg?.split(':');\n\n\t\tlet distance = Number(args?.[0] ?? 100); // количество px на которые блок изначально смещен вниз\n\t\tlet percent = Number(args?.[1] ?? 30); // процент высоты экрана поднявшись на который блок закончит подплытие\n\n\t\tdirectiveSwipUpOptions = {\n\t\t\tdistance,\n\t\t\tpercent\n\t\t}\n\n\t\tif (!appSwimUpInited) {\n\t\t\tswimUpInit(el);\n\n\t\t\tappSwimUpInited = true;\n\t\t}\n\n\t\tappSwimUpObserver.observe(el);\n\t},\n\n\tunmounted(el: HTMLElement, _binding: DirectiveBinding, _vnode: VNode) {\n\t\tappSwimUpEls.delete(el);\n\t\tappSwimUpObserver?.unobserve(el);\n\t}\n} satisfies ObjectDirective;\n\nexport default swimUp;","/**\n * Генерация объекта window\n *\n * На backend объекта window не существует\n */\nconst genWindow = (): any => {\n\tif (typeof window === 'undefined') {\n\t\treturn {};\n\t}\n\n\treturn window;\n};\n\nexport const _window = genWindow();","import { reactive } from 'vue';\nimport { isMobile, isRetina, isApp } from '@/core/utils/device';\nimport Page from '@/core/core/page';\nimport Events from '@/core/core/events';\nimport options from '@/core/core/options';\nimport state from '@/core/core/state';\nimport directiveTooltip from '@/core/directives/tooltip';\nimport directiveFocus from '@/core/directives/focus';\nimport directiveSticky from '@/core/directives/sticky';\nimport directiveSwimUp from '@/core/directives/swimUp';\nimport { _window } from '@/core/utils/window';\n\nclass Core {\n\n\t/**\n\t * Настройки словаря\n\t */\n\tstatic L = reactive({\n\t\tNot_date: 'Not date',\n\t});\n\n\tstatic page = _window.page ?? {};\n\n\tstatic Page = Page;\n\n\tstatic options = options;\n\n\tstatic state = reactive({ ...state });\n\n\tstatic matchMediaIsMobile?: MediaQueryList;\n\n\tstatic $ = _window.$ as typeof $ | undefined;\n\n\t/**\n\t * Добавить на страницу стили, используется для загрузки стилей из js\n\t *\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\n\t * @param style - css стили в строке\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\n\t */\n\tstatic appendStyle(style: string, type: '' | 'm' | 'pc' = ''): void {\n\t\tlet media = 'all';\n\n\t\tif (type === 'm') {\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tif (type === 'pc') {\n\t\t\tmedia = '(min-width: ' + this.options.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\t/**\n\t * Установить как плагин в прилоежнии Vue\n\t * Core.state является общим для всех приложений Vue на странице\n\t * Core.options является общим для всех приложений Vue на странице\n\t * @param app - Vue App\n\t * @param {typeof options} options - параметры UI\n\t */\n\tstatic install(app: any, options: typeof this.options) {\n\t\tCore.defineOptions(options);\n\n\t\tapp.provide('top-core', Core);\n\n\t\tthis.installDirectives(app);\n\t}\n\n\tstatic installDirectives(app: any) {\n\t\tapp.directive('top-tooltip', directiveTooltip);\n\t\tapp.directive('top-focus', directiveFocus);\n\t\tapp.directive('top-sticky', directiveSticky);\n\t\tapp.directive('top-swim-up', directiveSwimUp);\n\t}\n\n\t/**\n\t * Установить конфигурацию UI\n\t * @param {typeof options} options\n\t */\n\tstatic defineOptions(options: typeof this.options) {\n\t\tif (options?.widthForMobile) {\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\n\t\t}\n\n\t\tif (options?.dateFormat) {\n\t\t\tthis.options.dateFormat = options.dateFormat;\n\t\t}\n\n\t\tif (options?.gmt) {\n\t\t\tthis.options.gmt = options.gmt;\n\t\t}\n\n\t\tCore.setState();\n\t}\n\n\tstatic setState() {\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\n\n\t\tCore.state.isMobileUA = isMobile();\n\t\tCore.state.isRetina = isRetina();\n\t\tCore.state.isApp = isApp();\n\t\tCore.state.dateFormat = this.options.dateFormat;\n\t\tCore.state.gmt = this.options.gmt;\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\tstatic onResize() {\n\t\tCore.setStateByWindowSize();\n\n\t\t// честный vh\n\t\tdocument.documentElement.style.setProperty('--100vh', window.innerHeight + 'px');\n\t}\n\n\tstatic 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\tstatic 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}\n\nexport default Core;","import 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 (!dateFormat) {\n\t\tdateFormat = Core.state.dateFormat.toLowerCase().toLowerCase().replace('m', 'mm').replace('y', 'yy').replace('d', 'dd');\n\t}\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}","<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-green-500);\n\twidth: 25%;\n\theight: 25%;\n\tposition: absolute;\n\tright: 0;\n\tbottom: 0;\n}\n</style>","<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=\"$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-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.top-size_xl {\n\t--top-forms-padding: var(--top-forms-padding_xl);\n\t--top-forms-base-height: var(--top-forms-base-height_xl);\n}\n</style>","<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-option-color);\n\tbackground: var(--color-theme-50)\n}\n\n/* checked / indeterminate */\n.top-checkbox_input:checked,\n.top-checkbox_input:indeterminate {\n\tborder-color: var(--top-forms-option-color);\n\tbackground: var(--top-forms-option-color);\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(--top-forms-option-color-hover);\n\tbackground: var(--top-forms-option-color-hover);\n}\n\n/* disabled selected */\n.top-checkbox_input:disabled {\n\tborder-color: var(--color-line-1-opacity);\n\tbackground: var(--color-theme-50);\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-negative);\n}\n\n.top-checkbox_input.top-error:hover {\n\tborder-color: var(--color-negative-2);\n}\n\n/* isError selected */\n.top-checkbox_input:checked.top-error,\n.top-checkbox_input:indeterminate.top-error {\n\tbackground: var(--color-negative);\n}\n\n.top-checkbox_input:checked.top-error:hover,\n.top-checkbox_input:indeterminate.top-error:hover {\n\tbackground: var(--color-negative-2);\n}\n</style>","<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 { Input } from '@/components/forms/forms';\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<Input\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</Input>\n\n\t<Input\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>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } 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(--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-radio_input:hover {\n\tborder-color: var(--top-forms-option-color);\n\tbackground: var(--color-theme-50)\n}\n\n.top-radio_input:checked {\n\tborder-color: var(--top-forms-option-color);\n\tborder-width: 5px;\n}\n\n.top-radio_input:checked:hover {\n\tborder-color: var(--top-forms-option-color-hover);\n}\n\n/* disabled */\n.top-radio_input:disabled {\n\tborder-color: var(--color-line-1-opacity);\n\tbackground: var(--color-theme-50);\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-negative);\n}\n\n.top-radio_input.top-error:hover {\n\tborder-color: var(--color-negative-2);\n}\n</style>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } 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-theme-100);\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-theme-150);\n}\n\n/* checked */\n.top-checkboxSwitcher_input:checked {\n\tbackground: var(--top-forms-option-color);\n}\n\n.top-checkboxSwitcher_input:checked:hover {\n\tbackground: var(--top-forms-option-color-hover);\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-negative);\n}\n\n.top-checkboxSwitcher_input.top-error:hover {\n\tbackground: var(--color-negative-2);\n}\n</style>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport Hint from '@/components/forms/hint/hint.vue';\nimport type { Props, Emits } 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\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\toutline-color: var(--color-theme-75);\n\toutline-offset: 0px;\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>","<script setup lang=\"ts\">\nimport { computed, watch } from 'vue';\nimport type { ComputedRef } from 'vue';\nimport type { Props, Emits, Option, LocalOptions } 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\t--top-icon-color: var(--color-text-3);\n\t--top-icon2-color: var(--color-text-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-negative);\n\t--top-icon2-color: var(--color-negative);\n}\n\n.top-select_select {\n\tbackground-color: var(--top-forms-background-color);\n\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:focus {\n\toutline-color: var(--color-theme-75);\n\toutline-offset: 0;\n}\n\n.top-select_select:disabled {\n\tbackground: var(--color-theme-50);\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-secondary-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>","<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-blue-500);\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>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } from './input';\nimport { Loadbar } from '@/components/forms/forms';\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<Loadbar 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\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\toutline-color: var(--color-theme-75);\n\toutline-offset: 0;\n}\n\n/* значки */\n.top-input[data-top-icon]:before,\n.top-input[data-top-icon2]:after {\n\t--top-icon-color: var(--color-text-secondary);\n\t--top-icon2-color: var(--color-text-secondary);\n\n\tposition: absolute;\n\tz-index: 3;\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 {\n\t--top-icon-size: 16px;\n\t--top-icon-width: 20px;\n\t--top-icon-color: var(--color-text-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:hover {\n\t--top-icon-color: var(--color-text-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>"],"names":["isRetina","isMobile","isApp","isMacOS","isSafari","isChrome","isSafari2","getCommandKeyLabel","getScrollTop","get$scroll","getElsScroll","getOS","os","res","i","getOSAsync","platformVersion","_a","Page","onResizeDelay","onResizeTimer","onResizeListeners","windowSize","addOnReize","listener","removeOnResize","onResize","e","callback","Events","options","state","$$1","el","_b","Core","tvTooltipGenOptions","binding","vnode","tooltip","_prevVnode","instance","_binding","_vnode","focus","appStickyObserver","sticky","className","entries","condition","_el","appSwimUpInited","appSwimUpObserver","directiveSwipUpOptions","appSwimUpEls","swimUpElTransform","windowHeight","distance","percent","elTop","triggerHeightReducer","triggerHeight","swimUpInit","el2","entry","swimUp","args","genWindow","_window","reactive","style","type","media","elStyle","app","options2","device","L","getDayOfWeek","y","m","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","titleImage","tagName","model","useModel","useNativeDatepicker","onInputLazy","_e","emit","__emit","onUnmounted","$el","ref","localValue","value","oninput","onchange","dateFormatted","init","datepicker","value2","optionByValue","option","genOption","children","subOption","subIndex","flatOptionByValue","title","watch","optionIcon","selectNextValue","listEnabledValues","nextIndex","_sfc_render","_ctx","_cache","placeholder","clean","event"],"mappings":"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"}
1
+ {"version":3,"file":"forms-BkBLBZBn.es.js","sources":["../../src/core/utils/device.ts","../../src/core/core/page.ts","../../src/core/core/events.ts","../../src/core/core/options.ts","../../src/core/core/state.ts","../../src/core/directives/tooltip.ts","../../src/core/directives/focus.ts","../../src/core/directives/sticky.ts","../../src/core/directives/swimUp.ts","../../src/core/utils/window.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/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/loadbar/loadbar.vue","../../src/components/forms/input/input.vue"],"sourcesContent":["/**\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 */\nconst 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};","class Page {\n\n}\n\nexport default Page;","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: Element, ev: TopEvent) => any) {\n\tonResizeListeners.set(listener, listener);\n}\n\n/**\n * Удаление обработчика на событие изменений размеров экрана\n */\nfunction removeOnResize (listener: (this: Element, 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 * Можно переопределить при подклчюении UI во Vue приложение через app.use(Core, options)\n */\nconst options = {\n\twidthForMobile: 900,\n\tdateFormat: 'Y-m-d',\n\n\t/**\n\t * Для Москвы: +0300\n\t */\n\tgmt: new Date().toString().match(/GMT(\\S+)/)?.[1],\n};\n\nexport default options;","/**\n * State UI для взаимодейсвтиями с приложениями Vue\n */\nconst state = {\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\tsize: 0,\n\n\t// См. core.options\n\tdateFormat: 'Y-m-d',\n\n\t// См. core.options\n\tgmt: new Date().toString().match(/GMT(\\S+)/)?.[1],\n};\n\nexport default state;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\nimport Core from '@/core/core/core';\n\nconst $ = (el: VNode) => {\n\tif (!Core.$?.ui?.tooltip) {\n\t\tconsole.info('Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip');\n\n\t\treturn;\n\t}\n\n\treturn Core.$(el);\n};\n\nconst tvTooltipGenOptions = (binding: DirectiveBinding, vnode: VNode) => {\n\tconst options = binding.value ?? {};\n\n\toptions.content ??= vnode.props?.title;\n\toptions.content = String(options.content).replace(/\\r\\n|\\r|\\n/g, '<br>');\n\n\toptions.position ??= {\n\t\tmy: 'bottom-18px',\n\t\tat: 'top center',\n\t};\n\n\treturn options;\n};\n\n/**\n * Добавление всплывающей подсказки к элементу.\n */\nconst tooltip = {\n\tmounted(el: VNode, binding: DirectiveBinding, vnode: VNode) {\n\t\t$(el)?.tooltip(tvTooltipGenOptions(binding, vnode));\n\t},\n\n\tupdated(el: VNode, binding: DirectiveBinding, vnode: VNode, _prevVnode: VNode) {\n\t\t/**\n\t\t * В результате обновления может быть открыто несколько тултипов поэтому изменить опции, без перерисовки тултипа\n\t\t */\n\t\tconst options = tvTooltipGenOptions(binding, vnode);\n\t\tconst instance = $(el)?.tooltip('instance') as { options: JQueryUI.TooltipOptions } | undefined;\n\t\tif (!instance) {\n\t\t\treturn;\n\t\t}\n\n\t\tinstance.options = {\n\t\t\t...instance.options,\n\t\t\t...options,\n\t\t};\n\t},\n\n\tunmounted(el: VNode, _binding: DirectiveBinding, _vnode: VNode) {\n\t\t$(el)?.tooltip('destroy');\n\t},\n} satisfies ObjectDirective;\n\nexport default tooltip;","import type { DirectiveBinding, ObjectDirective } from 'vue';\n\n/**\n * Фокусировка на элементе сразу после его отображения\n */\nconst focus = {\n\tmounted: function (el: HTMLElement, binding: DirectiveBinding) {\n\t\tif (binding.value || binding.value === undefined) el.focus();\n\t}\n} satisfies ObjectDirective;\n\nexport default focus;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\n\nlet appStickyObserver: IntersectionObserver;\n\n/**\n * Добавление sticky\n * К элементу добляется класс переданный как значение диррективы либо **'top-sticky'** по умолчанию\n */\nconst sticky = {\n\tmounted(el: HTMLElement, binding: DirectiveBinding, _vnode: VNode){\n\t\tconst className = binding.value || 'top-sticky';\n\n\t\tappStickyObserver = new IntersectionObserver(entries => {\n\t\t\tlet condition = entries[0].intersectionRatio < 1;\n\t\t\tif(condition){\n\t\t\t\tif(binding.arg === 'bottom' && entries[0].intersectionRect.y === 0) condition = false;\n\t\t\t}\n\n\t\t\tel.classList.toggle(className, condition);\n\t\t}, {\n\t\t\tthreshold:[1]\n\t\t});\n\n\t\tappStickyObserver.observe(el);\n\t},\n\n\tunmounted(_el: HTMLElement, _binding: DirectiveBinding, _vnode: VNode){\n\t\tappStickyObserver?.disconnect();\n\t},\n} satisfies ObjectDirective;\n\nexport default sticky;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\nimport Core from '@/core/core/core';\n\ninterface SwipUpOptions {\n\tdistance: number,\n\tpercent: number,\n}\n\nlet appSwimUpInited = false;\nlet appSwimUpObserver: IntersectionObserver;\nlet directiveSwipUpOptions: SwipUpOptions;\nconst appSwimUpEls = new Map();\n\n\n/**\n * Отодвинуть блок в зависимости от скролла старинцы\n * @param el\n * @param windowHeight\n */\nconst swimUpElTransform = (el: HTMLElement, windowHeight: number): void => {\n\tconst { distance, percent } = directiveSwipUpOptions;\n\n\tconst elTop = el.getBoundingClientRect().top;\n\n\t// во столько раз triggerHeight должен быть меньше, чтобы закончить подплытие к нужной высоте экрана\n\tconst triggerHeightReducer = windowHeight * percent / 100 / distance;\n\tconst triggerHeight = (windowHeight - elTop) / triggerHeightReducer;\n\n\tif (triggerHeight <= distance) {\n\t\tel.style.transform = `translateY(${distance - triggerHeight}px)`;\n\t} else {\n\t\tel.style.transform = 'translateY(0px)';\n\t}\n}\n\nconst swimUpInit = (el: HTMLElement): void => {\n\tlet windowHeight = window.innerHeight;\n\n\twindow.addEventListener('scroll', () => {\n\t\tappSwimUpEls.forEach((el) => swimUpElTransform(el, windowHeight));\n\t}, { passive: true });\n\n\t// проверка того, что элемент в зоне видимости\n\tappSwimUpObserver = new IntersectionObserver(entries => {\n\t\twindowHeight = window.innerHeight;\n\n\t\tentries.forEach((entry) => {\n\t\t\tconst el = entry.target as HTMLElement;\n\n\t\t\tif (entry.intersectionRatio < 0.1) {\n\t\t\t\t// элемент за областью видимости\n\t\t\t\tappSwimUpEls.delete(el);\n\t\t\t} else {\n\t\t\t\t// элемент на экране\n\t\t\t\tappSwimUpEls.set(el, el);\n\t\t\t}\n\n\t\t\tif (entry.intersectionRatio === 0) {\n\t\t\t\tconst { distance, percent } = directiveSwipUpOptions;\n\t\t\t\tel.style.transform = `translateY(${distance}px)`;\n\t\t\t}\n\t\t});\n\t}, {\n\t\tthreshold: 0.1,\n\t});\n}\n\n/**\n * Добавление анимации подплытия вверх для блока\n */\nconst swimUp = {\n\tmounted(el: HTMLElement, binding: DirectiveBinding, _vnode: VNode): void {\n\t\tif (Core.state.isMobileUA) return;\n\n\t\tconst args = binding.arg?.split(':');\n\n\t\tlet distance = Number(args?.[0] ?? 100); // количество px на которые блок изначально смещен вниз\n\t\tlet percent = Number(args?.[1] ?? 30); // процент высоты экрана поднявшись на который блок закончит подплытие\n\n\t\tdirectiveSwipUpOptions = {\n\t\t\tdistance,\n\t\t\tpercent\n\t\t}\n\n\t\tif (!appSwimUpInited) {\n\t\t\tswimUpInit(el);\n\n\t\t\tappSwimUpInited = true;\n\t\t}\n\n\t\tappSwimUpObserver.observe(el);\n\t},\n\n\tunmounted(el: HTMLElement, _binding: DirectiveBinding, _vnode: VNode) {\n\t\tappSwimUpEls.delete(el);\n\t\tappSwimUpObserver?.unobserve(el);\n\t}\n} satisfies ObjectDirective;\n\nexport default swimUp;","/**\n * Генерация объекта window\n *\n * На backend объекта window не существует\n */\nconst genWindow = (): any => {\n\tif (typeof window === 'undefined') {\n\t\treturn {};\n\t}\n\n\treturn window;\n};\n\nexport const _window = genWindow();","import { reactive } from 'vue';\nimport { isMobile, isRetina, isApp } from '@/core/utils/device';\nimport Page from '@/core/core/page';\nimport Events from '@/core/core/events';\nimport options from '@/core/core/options';\nimport state from '@/core/core/state';\nimport directiveTooltip from '@/core/directives/tooltip';\nimport directiveFocus from '@/core/directives/focus';\nimport directiveSticky from '@/core/directives/sticky';\nimport directiveSwimUp from '@/core/directives/swimUp';\nimport { _window } from '@/core/utils/window';\n\nclass Core {\n\n\t/**\n\t * Настройки словаря\n\t */\n\tstatic L = reactive({\n\t\tNot_date: 'Not date',\n\t});\n\n\tstatic page = _window.page ?? {};\n\n\tstatic Page = Page;\n\n\tstatic options = options;\n\n\tstatic state = reactive({ ...state });\n\n\tstatic matchMediaIsMobile?: MediaQueryList;\n\n\tstatic $ = _window.$ as typeof $ | undefined;\n\n\t/**\n\t * Добавить на страницу стили, используется для загрузки стилей из js\n\t *\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\n\t * @param style - css стили в строке\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\n\t */\n\tstatic appendStyle(style: string, type: '' | 'm' | 'pc' = ''): void {\n\t\tlet media = 'all';\n\n\t\tif (type === 'm') {\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tif (type === 'pc') {\n\t\t\tmedia = '(min-width: ' + this.options.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\t/**\n\t * Установить как плагин в прилоежнии Vue\n\t * Core.state является общим для всех приложений Vue на странице\n\t * Core.options является общим для всех приложений Vue на странице\n\t * @param app - Vue App\n\t * @param {typeof options} options - параметры UI\n\t */\n\tstatic install(app: any, options: typeof this.options) {\n\t\tCore.defineOptions(options);\n\n\t\tapp.provide('top-core', Core);\n\n\t\tthis.installDirectives(app);\n\t}\n\n\tstatic installDirectives(app: any) {\n\t\tapp.directive('top-tooltip', directiveTooltip);\n\t\tapp.directive('top-focus', directiveFocus);\n\t\tapp.directive('top-sticky', directiveSticky);\n\t\tapp.directive('top-swim-up', directiveSwimUp);\n\t}\n\n\t/**\n\t * Установить конфигурацию UI\n\t * @param {typeof options} options\n\t */\n\tstatic defineOptions(options: typeof this.options) {\n\t\tif (options?.widthForMobile) {\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\n\t\t}\n\n\t\tif (options?.dateFormat) {\n\t\t\tthis.options.dateFormat = options.dateFormat;\n\t\t}\n\n\t\tif (options?.gmt) {\n\t\t\tthis.options.gmt = options.gmt;\n\t\t}\n\n\t\tCore.setState();\n\t}\n\n\tstatic setState() {\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\n\n\t\tCore.state.isMobileUA = isMobile();\n\t\tCore.state.isRetina = isRetina();\n\t\tCore.state.isApp = isApp();\n\t\tCore.state.dateFormat = this.options.dateFormat;\n\t\tCore.state.gmt = this.options.gmt;\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\tstatic onResize() {\n\t\tCore.setStateByWindowSize();\n\n\t\t// честный vh\n\t\tdocument.documentElement.style.setProperty('--100vh', window.innerHeight + 'px');\n\t}\n\n\tstatic 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\tstatic 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}\n\nexport default Core;","import 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 (!dateFormat) {\n\t\tdateFormat = Core.state.dateFormat.toLowerCase().toLowerCase().replace('m', 'mm').replace('y', 'yy').replace('d', 'dd');\n\t}\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}","<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-green-500);\n\twidth: 25%;\n\theight: 25%;\n\tposition: absolute;\n\tright: 0;\n\tbottom: 0;\n}\n</style>","<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=\"$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-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.top-size_xl {\n\t--top-forms-padding: var(--top-forms-padding_xl);\n\t--top-forms-base-height: var(--top-forms-base-height_xl);\n}\n</style>","<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-option-color);\n\tbackground: var(--color-theme-50)\n}\n\n/* checked / indeterminate */\n.top-checkbox_input:checked,\n.top-checkbox_input:indeterminate {\n\tborder-color: var(--top-forms-option-color);\n\tbackground: var(--top-forms-option-color);\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(--top-forms-option-color-hover);\n\tbackground: var(--top-forms-option-color-hover);\n}\n\n/* disabled selected */\n.top-checkbox_input:disabled {\n\tborder-color: var(--color-line-1-opacity);\n\tbackground: var(--color-theme-50);\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-negative);\n}\n\n.top-checkbox_input.top-error:hover {\n\tborder-color: var(--color-negative-2);\n}\n\n/* isError selected */\n.top-checkbox_input:checked.top-error,\n.top-checkbox_input:indeterminate.top-error {\n\tbackground: var(--color-negative);\n}\n\n.top-checkbox_input:checked.top-error:hover,\n.top-checkbox_input:indeterminate.top-error:hover {\n\tbackground: var(--color-negative-2);\n}\n</style>","<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 { Input } from '@/components/forms/forms';\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<Input\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</Input>\n\n\t<Input\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>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } 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(--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-radio_input:hover {\n\tborder-color: var(--top-forms-option-color);\n\tbackground: var(--color-theme-50)\n}\n\n.top-radio_input:checked {\n\tborder-color: var(--top-forms-option-color);\n\tborder-width: 5px;\n}\n\n.top-radio_input:checked:hover {\n\tborder-color: var(--top-forms-option-color-hover);\n}\n\n/* disabled */\n.top-radio_input:disabled {\n\tborder-color: var(--color-line-1-opacity);\n\tbackground: var(--color-theme-50);\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-negative);\n}\n\n.top-radio_input.top-error:hover {\n\tborder-color: var(--color-negative-2);\n}\n</style>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } 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-theme-100);\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-theme-150);\n}\n\n/* checked */\n.top-checkboxSwitcher_input:checked {\n\tbackground: var(--top-forms-option-color);\n}\n\n.top-checkboxSwitcher_input:checked:hover {\n\tbackground: var(--top-forms-option-color-hover);\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-negative);\n}\n\n.top-checkboxSwitcher_input.top-error:hover {\n\tbackground: var(--color-negative-2);\n}\n</style>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport Hint from '@/components/forms/hint/hint.vue';\nimport type { Props, Emits } 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\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\toutline-color: var(--color-theme-75);\n\toutline-offset: 0px;\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>","<script setup lang=\"ts\">\nimport { computed, watch } from 'vue';\nimport type { ComputedRef } from 'vue';\nimport type { Props, Emits, Option, LocalOptions } 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\t--top-icon-color: var(--color-text-3);\n\t--top-icon2-color: var(--color-text-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-negative);\n\t--top-icon2-color: var(--color-negative);\n}\n\n.top-select_select {\n\tbackground-color: var(--top-forms-background-color);\n\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:focus {\n\toutline-color: var(--color-theme-75);\n\toutline-offset: 0;\n}\n\n.top-select_select:disabled {\n\tbackground: var(--color-theme-50);\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-secondary-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>","<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-blue-500);\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>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } from './input';\nimport { Loadbar } from '@/components/forms/forms';\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<Loadbar 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\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\toutline-color: var(--color-theme-75);\n\toutline-offset: 0;\n}\n\n/* значки */\n.top-input[data-top-icon]:before,\n.top-input[data-top-icon2]:after {\n\t--top-icon-color: var(--color-text-secondary);\n\t--top-icon2-color: var(--color-text-secondary);\n\n\tposition: absolute;\n\tz-index: 3;\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 {\n\t--top-icon-size: 16px;\n\t--top-icon-width: 20px;\n\t--top-icon-color: var(--color-text-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:hover {\n\t--top-icon-color: var(--color-text-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>"],"names":["isRetina","isMobile","isApp","isMacOS","isSafari","isChrome","isSafari2","getCommandKeyLabel","getScrollTop","get$scroll","getElsScroll","getOS","os","res","i","getOSAsync","platformVersion","_a","Page","onResizeDelay","onResizeTimer","onResizeListeners","windowSize","addOnReize","listener","removeOnResize","onResize","e","callback","Events","options","state","$$1","el","_b","Core","tvTooltipGenOptions","binding","vnode","tooltip","_prevVnode","instance","_binding","_vnode","focus","appStickyObserver","sticky","className","entries","condition","_el","appSwimUpInited","appSwimUpObserver","directiveSwipUpOptions","appSwimUpEls","swimUpElTransform","windowHeight","distance","percent","elTop","triggerHeightReducer","triggerHeight","swimUpInit","el2","entry","swimUp","args","genWindow","_window","reactive","style","type","media","elStyle","app","options2","device","L","getDayOfWeek","y","m","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","titleImage","tagName","model","useModel","useNativeDatepicker","onInputLazy","_e","emit","__emit","onUnmounted","$el","ref","localValue","value","oninput","onchange","dateFormatted","init","datepicker","value2","optionByValue","option","genOption","children","subOption","subIndex","flatOptionByValue","title","watch","optionIcon","selectNextValue","listEnabledValues","nextIndex","_sfc_render","_ctx","_cache","placeholder","clean","event"],"mappings":"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"}
@@ -1,12 +1,10 @@
1
- import { insertToPage as H } from "../utils/css.js";
2
- import { defineComponent as v, onUpdated as S, openBlock as s, createElementBlock as l, Fragment as g, createElementVNode as D, renderSlot as a, ref as N, toRef as _, onUnmounted as T, createBlock as y, unref as f, withCtx as I, createCommentVNode as r, Teleport as w, toDisplayString as E, normalizeClass as L, resolveDynamicComponent as M, mergeProps as R } from "vue";
3
- import { C as P } from "./forms-BwLbWSIF.es.js";
4
- import { PopupWorker as k } from "../popup/worker.js";
5
- const B = ["../assets/listItem.css"].map((i) => import.meta.resolve(i));
6
- console.time(B.join());
7
- H(B);
8
- console.timeEnd(B.join());
9
- const V = /* @__PURE__ */ v({
1
+ import { insertToPage as b } from "../utils/css.js";
2
+ import { defineComponent as B, onUpdated as S, openBlock as s, createElementBlock as l, Fragment as k, createElementVNode as D, renderSlot as a, ref as N, toRef as $, onUnmounted as T, createBlock as y, unref as f, withCtx as g, createCommentVNode as r, Teleport as w, toDisplayString as L, normalizeClass as M, resolveDynamicComponent as R, mergeProps as V } from "vue";
3
+ import { C as _ } from "./forms-BkBLBZBn.es.js";
4
+ import { PopupWorker as P } from "../popup/worker.js";
5
+ const H = ["../assets/listItem.css"].map((i) => import.meta.resolve(i));
6
+ b(H);
7
+ const E = /* @__PURE__ */ B({
10
8
  __name: "opener",
11
9
  props: {
12
10
  id: {},
@@ -29,7 +27,7 @@ const V = /* @__PURE__ */ v({
29
27
  function d(o) {
30
28
  o.dataset.topPopup = "vue-" + n, o.dataset.topPopupId = n, o.dataset.topPopupP = t.pos, o.dataset.topPopupPosBy = t.posBy, o.dataset.topPopupNotch = t.notch ? "true" : "", o.dataset.topPopupOpenByHover = t.openByHover ? "true" : "";
31
29
  }
32
- return (o, c) => (s(), l(g, null, [
30
+ return (o, c) => (s(), l(k, null, [
33
31
  D("template", { ref: m }),
34
32
  a(o.$slots, "default")
35
33
  ], 64));
@@ -37,19 +35,19 @@ const V = /* @__PURE__ */ v({
37
35
  }), U = {
38
36
  key: 0,
39
37
  class: "top-popup_header"
40
- }, j = {
38
+ }, W = {
41
39
  key: 0,
42
40
  class: "top-as-a closer"
43
- }, W = {
41
+ }, z = {
44
42
  key: 1,
45
43
  class: "top-popup_widget"
46
- }, z = {
44
+ }, A = {
47
45
  key: 2,
48
46
  class: "top-popup_content"
49
- }, A = {
47
+ }, F = {
50
48
  key: 4,
51
49
  class: "top-popup_footer"
52
- }, Q = /* @__PURE__ */ v({
50
+ }, Q = /* @__PURE__ */ B({
53
51
  __name: "popup",
54
52
  props: {
55
53
  id: { default: "" },
@@ -73,17 +71,17 @@ const V = /* @__PURE__ */ v({
73
71
  onClose: (e) => {
74
72
  c.value = null, u.opened = !1, u.popup = void 0, m("close");
75
73
  },
76
- classRef: _(p, "class"),
74
+ classRef: $(p, "class"),
77
75
  opened: !1,
78
76
  popup: void 0,
79
- transitionDurationRef: _(p, "transitionDuration")
77
+ transitionDurationRef: $(p, "transitionDuration")
80
78
  };
81
- return k.regVueComponent(o, u), T(() => {
82
- k.unregVueComponent(o);
83
- }), (e, h) => {
84
- var C, $;
85
- return s(), l(g, null, [
86
- e.$slots.opener ? (s(), y(V, {
79
+ return P.regVueComponent(o, u), T(() => {
80
+ P.unregVueComponent(o);
81
+ }), (e, v) => {
82
+ var h, C;
83
+ return s(), l(k, null, [
84
+ e.$slots.opener ? (s(), y(E, {
87
85
  key: 0,
88
86
  id: f(o),
89
87
  pos: e.pos,
@@ -91,7 +89,7 @@ const V = /* @__PURE__ */ v({
91
89
  notch: e.notch,
92
90
  openByHover: e.openByHover
93
91
  }, {
94
- default: I(() => [
92
+ default: g(() => [
95
93
  a(e.$slots, "opener")
96
94
  ]),
97
95
  _: 3
@@ -100,31 +98,31 @@ const V = /* @__PURE__ */ v({
100
98
  key: 1,
101
99
  to: c.value
102
100
  }, [
103
- e.$slots.header || f(P).state.isMobile ? (s(), l("div", U, [
104
- f(P).state.isMobile ? (s(), l("span", j, E(($ = (C = u.popup) == null ? void 0 : C.options.i18n) == null ? void 0 : $.Close), 1)) : r("", !0),
101
+ e.$slots.header || f(_).state.isMobile ? (s(), l("div", U, [
102
+ f(_).state.isMobile ? (s(), l("span", W, L((C = (h = u.popup) == null ? void 0 : h.options.i18n) == null ? void 0 : C.Close), 1)) : r("", !0),
105
103
  a(e.$slots, "header")
106
104
  ])) : r("", !0),
107
- e.$slots.widget ? (s(), l("div", W, [
105
+ e.$slots.widget ? (s(), l("div", z, [
108
106
  a(e.$slots, "widget")
109
107
  ])) : r("", !0),
110
- e.$slots.content ? (s(), l("div", z, [
108
+ e.$slots.content ? (s(), l("div", A, [
111
109
  a(e.$slots, "content")
112
110
  ])) : r("", !0),
113
111
  e.$slots.contentList ? (s(), l("ul", {
114
112
  key: 3,
115
113
  class: "top-popup_content",
116
- onScroll: h[0] || (h[0] = (b) => e.$emit("scrollContentList", b))
114
+ onScroll: v[0] || (v[0] = (I) => e.$emit("scrollContentList", I))
117
115
  }, [
118
116
  a(e.$slots, "contentList")
119
117
  ], 32)) : r("", !0),
120
- e.$slots.footer ? (s(), l("div", A, [
118
+ e.$slots.footer ? (s(), l("div", F, [
121
119
  a(e.$slots, "footer")
122
120
  ])) : r("", !0)
123
121
  ], 8, ["to"])) : r("", !0)
124
122
  ], 64);
125
123
  };
126
124
  }
127
- }), X = /* @__PURE__ */ v({
125
+ }), X = /* @__PURE__ */ B({
128
126
  inheritAttrs: !1,
129
127
  __name: "listItem",
130
128
  props: {
@@ -134,11 +132,11 @@ const V = /* @__PURE__ */ v({
134
132
  setup(i) {
135
133
  const t = i;
136
134
  return (n, p) => (s(), l("li", {
137
- class: L({
135
+ class: M({
138
136
  "top-popup_liNoSelectable": t.type !== "button"
139
137
  })
140
138
  }, [
141
- (s(), y(M(n.$attrs.href ? "a" : "div"), R({
139
+ (s(), y(R(n.$attrs.href ? "a" : "div"), V({
142
140
  class: {
143
141
  "top-popup_listItem": !0,
144
142
  "top-popup_listItem-button": t.type === "button",
@@ -150,7 +148,7 @@ const V = /* @__PURE__ */ v({
150
148
  "top-popup-noCloser": !n.closeByClick
151
149
  }
152
150
  }, n.$attrs), {
153
- default: I(() => [
151
+ default: g(() => [
154
152
  a(n.$slots, "default")
155
153
  ]),
156
154
  _: 3
@@ -160,7 +158,7 @@ const V = /* @__PURE__ */ v({
160
158
  });
161
159
  export {
162
160
  Q as _,
163
- V as a,
161
+ E as a,
164
162
  X as b
165
163
  };
166
- //# sourceMappingURL=listItem.vue_vue_type_script_setup_true_lang-C4297RyP.es.js.map
164
+ //# sourceMappingURL=listItem.vue_vue_type_script_setup_true_lang-CmrUY2go.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listItem.vue_vue_type_script_setup_true_lang-C4297RyP.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, ref } 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\telOpener.dataset.topPopup = 'vue-' + id;\n\telOpener.dataset.topPopupId = id;\n\telOpener.dataset.topPopupP = 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>","<script setup lang=\"ts\">\nimport { ref, toRef, onUnmounted } from 'vue';\nimport type { Ref } from 'vue';\nimport Core from '@/core/core/core';\nimport type { Props, Emits } from './popup';\nimport Opener from './opener.vue';\nimport Worker from '@/components/popup/lib/worker';\nimport type PopupClass from '@/components/popup/lib/popup';\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 || 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{{ vueConnector.popup?.options.i18n?.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\" class=\"top-popup_footer\">\n\t\t\t<!-- @slot Футер -->\n\t\t\t<slot name=\"footer\"></slot>\n\t\t</div>\n\t</teleport>\n</template>","<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 :class=\"{\n\t\t'top-popup_liNoSelectable': props.type !== 'button'\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>"],"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;AACC,MAAAA,EAAA,QAAA,WAAA,SAAAN,GACAM,EAAA,QAAA,aAAAN,GACAM,EAAA,QAAA,YAAAR,EAAA,KACAQ,EAAA,QAAA,gBAAAR,EAAA,OACAQ,EAAA,QAAA,gBAAAR,EAAA,QAAA,SAAA,IACAQ,EAAA,QAAA,sBAAAR,EAAA,cAAA,SAAA;AAAA,IAAoE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCrE,UAAAA,IAAAC,GAOAQ,IAAAC,GAEAC,IAAA;AAAA,MAAe,OAAA;AAAA,IACP;AAER,IAAAC,EAAAD,CAAA;AAEA,UAAAT,IAAAF,EAAA,MAAA,KAAA,OAAA,IAAA,IACAa,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzD5B,UAAAF,IAAAC;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"listItem.vue_vue_type_script_setup_true_lang-CmrUY2go.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, ref } 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\telOpener.dataset.topPopup = 'vue-' + id;\n\telOpener.dataset.topPopupId = id;\n\telOpener.dataset.topPopupP = 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>","<script setup lang=\"ts\">\nimport { ref, toRef, onUnmounted } from 'vue';\nimport type { Ref } from 'vue';\nimport Core from '@/core/core/core';\nimport type { Props, Emits } from './popup';\nimport Opener from './opener.vue';\nimport Worker from '@/components/popup/lib/worker';\nimport type PopupClass from '@/components/popup/lib/popup';\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 || 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{{ vueConnector.popup?.options.i18n?.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\" class=\"top-popup_footer\">\n\t\t\t<!-- @slot Футер -->\n\t\t\t<slot name=\"footer\"></slot>\n\t\t</div>\n\t</teleport>\n</template>","<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 :class=\"{\n\t\t'top-popup_liNoSelectable': props.type !== 'button'\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>"],"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;AACC,MAAAA,EAAA,QAAA,WAAA,SAAAN,GACAM,EAAA,QAAA,aAAAN,GACAM,EAAA,QAAA,YAAAR,EAAA,KACAQ,EAAA,QAAA,gBAAAR,EAAA,OACAQ,EAAA,QAAA,gBAAAR,EAAA,QAAA,SAAA,IACAQ,EAAA,QAAA,sBAAAR,EAAA,cAAA,SAAA;AAAA,IAAoE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCrE,UAAAA,IAAAC,GAOAQ,IAAAC,GAEAC,IAAA;AAAA,MAAe,OAAA;AAAA,IACP;AAER,IAAAC,EAAAD,CAAA;AAEA,UAAAT,IAAAF,EAAA,MAAA,KAAA,OAAA,IAAA,IACAa,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzD5B,UAAAF,IAAAC;;;;;;;;;;;;;;;;;;;;;;;;;;"}