@topvisor/ui 0.0.36 → 0.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.chunks/{datepicker-ad465c48.es.js → datepicker-778ddcc5.es.js} +2 -2
- package/.chunks/{datepicker-ad465c48.es.js.map → datepicker-778ddcc5.es.js.map} +1 -1
- package/.chunks/{datepicker-1e725859.amd.js → datepicker-80599025.amd.js} +3 -3
- package/.chunks/{datepicker-1e725859.amd.js.map → datepicker-80599025.amd.js.map} +1 -1
- package/.chunks/forms-58420e52.amd.js +3 -0
- package/.chunks/forms-58420e52.amd.js.map +1 -0
- package/.chunks/forms-779fee37.es.js +1107 -0
- package/.chunks/forms-779fee37.es.js.map +1 -0
- package/.chunks/{popup-0f540839.es.js → popup-672d6531.es.js} +120 -85
- package/.chunks/popup-672d6531.es.js.map +1 -0
- package/.chunks/popup-d53450b6.amd.js +377 -0
- package/.chunks/popup-d53450b6.amd.js.map +1 -0
- package/{core.css → assets/core.css} +1 -1
- package/assets/forms.css +1 -0
- package/{formsExt.css → assets/formsExt.css} +1 -1
- package/assets/popup.css +1 -0
- package/common/common.amd.js +1 -1
- package/core/core.amd.js +1 -1
- package/core/core.js +1 -1
- package/forms/forms.amd.js +1 -1
- package/forms/forms.js +9 -7
- package/forms/helpers.amd.js +1 -1
- package/forms/helpers.amd.js.map +1 -1
- package/forms/helpers.js +1 -0
- package/forms/helpers.js.map +1 -1
- package/formsExt/formsExt.amd.js +1 -2
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.js +97 -80
- package/formsExt/formsExt.js.map +1 -1
- package/package.json +17 -17
- package/popup/popup.amd.js +1 -2
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.js +74 -68
- package/popup/popup.js.map +1 -1
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.js +2 -3
- package/popup/worker.js.map +1 -1
- package/tabs/tabs.amd.js +1 -2
- package/tabs/tabs.amd.js.map +1 -1
- package/tabs/tabs.js +30 -26
- package/tabs/tabs.js.map +1 -1
- package/utils/date.amd.js +1 -1
- package/utils/date.js +1 -1
- package/utils/device.amd.js +1 -1
- package/utils/device.js +2 -2
- package/utils/dom.amd.js +1 -1
- package/utils/dom.amd.js.map +1 -1
- package/utils/dom.js +3 -61
- package/utils/dom.js.map +1 -1
- package/.chunks/forms-2891e074.amd.js +0 -3
- package/.chunks/forms-2891e074.amd.js.map +0 -1
- package/.chunks/forms-db4cb24d.es.js +0 -946
- package/.chunks/forms-db4cb24d.es.js.map +0 -1
- package/.chunks/popup-0f540839.es.js.map +0 -1
- package/.chunks/popup-e49a9bab.amd.js +0 -341
- package/.chunks/popup-e49a9bab.amd.js.map +0 -1
- package/forms.css +0 -1
- package/popup.css +0 -1
- /package/{dark.css → assets/dark.css} +0 -0
- /package/{light.css → assets/light.css} +0 -0
- /package/{tabs.css → assets/tabs.css} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forms-779fee37.es.js","sources":["../../src/core/utils/device.ts","../../src/core/utils/dom.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/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/input/input.vue","../../src/components/forms/inputDate/inputDate.vue","../../src/components/forms/radio/radio.vue","../../src/components/forms/switcher/switcher.vue","../../src/components/forms/textarea/textarea.vue","../../src/components/forms/select/select.vue"],"sourcesContent":["class Device {\n\n\tstatic isRetina () {\n\t\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\n\t}\n\n\t// определить, является ли устройство мобильным\n\tstatic isMobile (): boolean {\n\t\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\n\t}\n\n\t// определить, открыт ли сайт в приложении\n\tstatic isApp () {\n\t\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\n\t}\n\n\t// определить, является ли OS пользователя macOS\n\tstatic isMacOS () {\n\t\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\n\t}\n\n\t// определить, является ли текущий браузер пользователя Safari\n\tstatic isSafari () {\n\t\tconst isChrome = /Chrome|Android/.test(navigator.userAgent);\n\n\t\tlet isSafari = /Safari/.test(navigator.userAgent);\n\t\tif (isChrome && isSafari) {\n\t\t\tisSafari = false;\n\t\t}\n\n\t\treturn isSafari;\n\t};\n\n\t/**\n\t * Вернуть текст для обозначения клавиши Ctrl / Command в зависимости от OS\n\t * @returns {'Ctrl'|'⌘'}\n\t */\n\tstatic getCommandKeyLabel (): 'Ctrl' | '⌘' {\n\t\tif (this.isMacOS()) {\n\t\t\treturn '⌘';\n\t\t} else {\n\t\t\treturn 'Ctrl';\n\t\t}\n\t}\n\n}\n\nexport default Device;\n","/**\n * Функции для работы с работы с Document Object Model (DOM)\n */\n\n/**\n * Создать элемент\n * @param {string} tagName\n * @param {any} attrs - атрибуты\n * @param {Element[]} elsChildrens\n * @returns {Element} - созданный элемент\n */\nfunction genEl (tagName: string, attrs: any, ...elsChildrens: Element[]): Element {\n\tconst el: any = document.createElement(tagName);\n\n\tfor (const name in attrs) {\n\t\tif (name.indexOf('on') === 0) {\n\t\t\t// events\n\t\t\tel[name] = attrs[name];\n\t\t} else {\n\t\t\tel.setAttribute(name, attrs[name]);\n\t\t}\n\t}\n\n\telsChildrens.forEach((elChildren) => {\n\t\tif (typeof (elChildren) === 'string') {\n\t\t\tel.insertAdjacentHTML('beforeend', elChildren);\n\t\t} else {\n\t\t\tel.append(elChildren);\n\t\t}\n\t});\n\n\treturn el;\n}\n\n/**\n * Проверить видимость элемента\n * @param {?Element} el\n * @returns boolean - вернет true, если элемент считается видимым\n */\nfunction isVisible (el?: Element) {\n\tif (!el) {\n\t\treturn false;\n\t}\n\n\tconst boundingClientRect = el.getBoundingClientRect();\n\treturn !!(boundingClientRect.width || boundingClientRect.height);\n}\n\n/**\n * Получить координаты элемента относительно документа\n * @param {Element} el\n * @returns {{top: number, left: number}} - координаты элемента относительно документа\n */\nfunction offset (el: Element): { top: number, left: number } {\n\tconst boundingClientRect = el.getBoundingClientRect();\n\n\treturn {\n\t\ttop: boundingClientRect.top + window.scrollY,\n\t\tleft: boundingClientRect.left + window.scrollX,\n\t};\n}\n\n/**\n * Получить значение css свойства элемента\n * @param {Element} el\n * @param {string} property - имя свойства\n * @return {string} - значение css стиля\n */\nfunction css (el: Element, property: string): string {\n\treturn window.getComputedStyle(el).getPropertyValue(property);\n}\n\n/**\n * Обернуть элемент и вернуть только что созданный элемент\n * @param {Element} el - элемент, который требуется обернуть\n * @param {string} tagName - имя тега элемента, в который треубется обернуть элемент\n * @returns {Element}\n */\nfunction wrap (el: Element, tagName: string): Element {\n\tconst elWrapper = document.createElement(tagName);\n\tel.after(elWrapper);\n\n\telWrapper.append(el);\n\n\treturn elWrapper;\n}\n\n/**\n * Найти и вернуть первый видимый элемент\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element|null}\n */\nfunction querySelectorVisible (el: Element, selectors: string): Element | null {\n\treturn querySelectorAllArray(el, selectors).find(isVisible) || null;\n}\n\n/**\n * Найти и вернуть последний видимый элемент\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element|null}\n */\nfunction querySelectorVisibleLast (el: Element, selectors: string): Element | null {\n\treturn querySelectorAllArray(el, selectors).findLast(isVisible) || null;\n}\n\n/**\n * Найти видимые элементы\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element[]} - обратите внимание, возвращается не NodeList[], а Element[]\n */\nfunction querySelectorAllVisible (el: Element, selectors: string): Element[] {\n\treturn querySelectorAllArray(el, selectors).filter(isVisible);\n}\n\n/**\n * Найти элементы и вернуть в виде массива\n * @param {?Document|Element} el - корневой элемент поиска\n * @param selectors - см. параметр selectors в Document.querySelectorAll()\n * @returns {Element[]}\n */\nfunction querySelectorAllArray (el: Element, selectors: string): Element[] {\n\tif (!el) {\n\t\treturn [];\n\t}\n\n\treturn [...el.querySelectorAll(selectors)];\n}\n\n/**\n * Хранилище данных элемента\n * @param {Element} el\n * @param {string} contextName - контекст, обычно используется имя компонента\n * @param {?object | null} contextData - установить объект с данными, предыдущие данные будут заменены, установите null для удаления данных\n * @returns {?object} - вернет объект контекста или undefined, если данные контекста не найдены\n */\nfunction storage (\n\tel?: Element & { topData?: any },\n\tcontextName: string = 'common', contextData: object | null | undefined = undefined,\n): object | undefined {\n\tif (!el) {\n\t\treturn;\n\t}\n\n\tif (!el.topData) {\n\t\tel.topData = {};\n\t}\n\n\tif (contextData) {\n\t\tel.topData[contextName] = contextData;\n\t}\n\n\tif (contextData === null) {\n\t\tdelete el.topData[contextName];\n\t}\n\n\treturn el.topData[contextName];\n}\n\n/**\n * Очистить хранилище элемента\n */\nfunction storageClear (el?: Element & { topData?: any }) {\n\tif (!el) {\n\t\treturn;\n\t}\n\n\tdelete el.topData;\n}\n\nexport default {\n\tgenEl,\n\tisVisible,\n\toffset,\n\tcss,\n\twrap,\n\tquerySelectorVisible,\n\tquerySelectorVisibleLast,\n\tquerySelectorAllVisible,\n\tquerySelectorAllArray,\n\tstorage,\n\tstorageClear,\n};\n","import Dom from '@/core/utils/dom';\n\nclass Page {\n\n\t/**\n\t * Вставить css стили на страницу с автоматическим определением media\n\t * @param fileNames - список ссылок на css файлы\n\t * @param props - атрибуты <link>\n\t */\n\tstatic addCss(fileNames: Array<String>, props: any = {}) {\n\t\tconst cssFilesByOptions = new Map();\n\t\tcssFilesByOptions.set('::', []);\n\n\t\tfileNames.forEach(filename => {\n\t\t\tlet m = false;\n\t\t\tlet pc = false;\n\n\t\t\tif (filename.match(/\\.m\\./)) {\n\t\t\t\tm = true;\n\t\t\t}\n\t\t\tif (filename.match(/\\.pc\\./)) {\n\t\t\t\tpc = true;\n\t\t\t}\n\n\t\t\tconst key = `${m}:${pc}`;\n\t\t\tif (!cssFilesByOptions.has(key)) {\n\t\t\t\tcssFilesByOptions.set(`${m}:${pc}`, []);\n\t\t\t}\n\t\t\tcssFilesByOptions.get(`${m}:${pc}`).push(filename);\n\t\t});\n\n\t\tcssFilesByOptions.forEach((fileNames, options: string) => {\n\t\t\tif (!fileNames.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst [m, pc] = options.split(':').map(item => item === 'true');\n\n\t\t\tlet media = 'all';\n\t\t\tif (m) {\n\t\t\t\tmedia = '(max-width: 900px)';\n\t\t\t}\n\t\t\tif (pc) {\n\t\t\t\tmedia = '(min-width: 900px)';\n\t\t\t}\n\n\t\t\tprops.media = media;\n\n\t\t\tPage._addCss(fileNames, props);\n\t\t});\n\t}\n\n\tstatic _addCss(fileNames: Array<String>, props: any) {\n\t\tfileNames.forEach(fileName => {\n\t\t\tprops.id ??= 'topCSSLink-' + fileName.replace(/\\W/g, '-');\n\n\t\t\t// стиль уже загружен\n\t\t\tif(window[props.id]) return;\n\n\t\t\tprops.rel = 'stylesheet';\n\t\t\tprops.href = fileName;\n\n\t\t\tconst elLink = Dom.genEl('link', props);\n\t\t\tdocument.head.append(elLink);\n\t\t});\n\t}\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';\n\nconst _window: any = window;\n\nconst $ = (el: VNode) => {\n\tif (!_window?.jQuery?.ui?.tooltip) {\n\t\tconsole.info('Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip');\n\n\t\treturn;\n\t}\n\n\treturn _window.jQuery(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\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');\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 { reactive } from 'vue';\nimport Device 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';\n\nconst _window: any = 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\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}\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 = Device.isMobile();\n\t\tCore.state.isRetina = Device.isRetina();\n\t\tCore.state.isApp = Device.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\nclass UtilsDate {\n\n\t/**\n\t * Получить объект Date из строки\n\t * @param date - строка с датой\n\t */\n\tstatic stringToDate(date: string) {\n\t\tif (date.indexOf('T') === -1) {\n\t\t\tif (date.length == 10) {\n\t\t\t\tdate += ' 00:00:00';\n\t\t\t}\n\n\t\t\tdate = date.replace(' ', 'T') + Core.state.gmt;\n\t\t}\n\n\t\treturn new Date(date);\n\t}\n\n\t// Перевод миллисекунд (UTC) в дату-строку (время локальное)\n\n\t/**\n\t * Перевод миллисекунд (UTC) в дату-строку (время локальное)\n\t * @param {?number} ms\n\t * @param {?boolean} useFormat\n\t */\n\tstatic ms2Date(ms: number, useFormat: boolean = true): string {\n\t\tlet date;\n\t\tif (ms != undefined) {\n\t\t\tdate = new Date(ms);\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t}\n\n\t\tconst d = date.getDate().toString().padStart(2, '0');\n\t\tconst m = String(date.getMonth() + 1).padStart(2, '0');\n\t\tconst Y = date.getFullYear();\n\t\tconst H = date.getHours().toString().padStart(2, '0');\n\t\tconst i = date.getMinutes().toString().padStart(2, '0');\n\t\tconst s = date.getSeconds().toString().padStart(2, '0');\n\n\t\tdate = Y + '-' + m + '-' + d + ' ' + H + ':' + i + ':' + s;\n\n\t\tif (useFormat) {\n\t\t\tdate = this.dateFormat(date);\n\t\t}\n\n\t\treturn date;\n\t}\n\n\t/**\n\t * Перевод даты в формат пользователя\n\t * @param {string} date - строка в формате Y-m-d H:i:s\n\t * @param {0|1|2|3} time - 0: только дата, 1: дата и часы, 2: дата и часы с минутами, 3: дата и часы с минутами и секундами\n\t * @param {string} emptyValue - значение, которое надо вернуть, если дата не указана\n\t */\n\tstatic dateFormat(date: string, time: 0 | 1 | 2 | 3 = 2, emptyValue: string = Core.L.Not_date): string {\n\t\tif (!date || date.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\n\t\tconst dateFormat = Core.state.dateFormat.toLowerCase();\n\n\t\tlet dateForObj = date.substring(0, 10);\n\n\t\tif (dateForObj.length === 7) {\n\t\t\tdateForObj += '-01';\n\t\t}\n\n\t\tdateForObj += ' 00:00';\n\n\t\t// safari fix\n\t\tdateForObj = dateForObj.replace(/-/g, '/');\n\n\t\tconst dateObject = new Date(dateForObj);\n\t\tif (isNaN(Number(dateObject))) {\n\t\t\treturn emptyValue;\n\t\t}\n\n\t\tlet result = dateFormat.\n\t\t\treplace('y', String(dateObject.getFullYear()).padStart(2, '0')).\n\t\t\treplace('m', String(dateObject.getMonth() + 1).padStart(2, '0')).\n\t\t\treplace('d', String(dateObject.getDate()).padStart(2, '0'));\n\n\t\tif (date.length > 10) {\n\t\t\tswitch (time) {\n\t\t\t\t// часы\n\t\t\t\tcase 1:\n\t\t\t\t\tresult += ' ' + date.substring(11, 13);\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t// часы и минуты\n\t\t\t\tcase 2:\n\t\t\t\t\tresult += ' ' + date.substring(11, 16);\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t// часы, минуты и секунды\n\t\t\t\tcase 3:\n\t\t\t\t\tresult += ' ' + date.substring(11, 19);\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Перевод даты из формата пользователя в системный формат\n\t * @param {string} date - строка в формате Y-m-d H:i:s\n\t * @param {string} emptyValue - значение, которое надо вернуть, если дата не указана\n\t */\n\tstatic dateUnformat(date: string, emptyValue: string = Core.L.Not_date): string {\n\t\tif (!date) {\n\t\t\treturn emptyValue;\n\t\t}\n\n\t\tif (date.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\n\t\t\treturn date;\n\t\t}\n\n\t\tconst dateFormat = Core.state.dateFormat.toLowerCase();\n\n\t\tconst dateChunks = date.split(/\\W/);\n\t\tconst dateFormatChunks = dateFormat.split(/\\W/);\n\n\t\tlet d = '';\n\t\tlet m = '';\n\t\tlet y = '';\n\n\t\tdateFormatChunks.forEach((type, index) => {\n\t\t\tswitch (type) {\n\t\t\t\tcase 'd':\n\t\t\t\t\td = dateChunks[index];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'm':\n\t\t\t\t\tm = dateChunks[index];\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'y':\n\t\t\t\t\ty = dateChunks[index];\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\n\t\tlet result = y + '-' + m + '-' + d;\n\n\t\tif (!result.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\n\t\t\tconsole.info('Неверный формат даты, будет возращена текущая дата, ' + result);\n\n\t\t\tresult = this.ms2Date((new Date()).getTime(), false).substring(0, 10);\n\t\t}\n\n\t\treturn result;\n\t}\n\n}\n\nexport default UtilsDate;","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { Props } from './avatar';\nimport Date from '@/core/utils/date';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 64,\n});\n\n// TODO: сделать компонент i18n\nconst i18n = {\n\tuser: {\n\t\tOnline: 'Онлайн',\n\t\tLastSeen: 'Заходил(а)',\n\t},\n};\n\nconst titleStatus = computed(() => {\n\tif (props.isOnline) {\n\t\treturn i18n.user.Online;\n\t}\n\n\tif (props.lastActiveTime) {\n\t\treturn i18n.user.LastSeen + ': ' + Date.dateFormat(props.lastActiveTime, 2);\n\t}\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=\"props.nickname + (titleStatus ? `\\n${titleStatus}` : '')\"\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\tdisplay: flex;\n\theight: v-bind(size+ \"px\");\n\tleft: 0;\n\tposition: relative;\n\ttop: 0;\n\twidth: v-bind(size+ \"px\");\n}\n\n.top-avatar_image {\n\tborder-radius: 50%;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.top-avatar_status {\n\tbackground-color: var(--color-green-500);\n\tborder: 2px solid var(--content-background-color);\n\tborder-radius: 50%;\n\tbottom: 0;\n\theight: 25%;\n\tposition: absolute;\n\tright: 0;\n\twidth: 25%;\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}\"\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<!-- @slot Текст или HTML в кнопке -->\n\t\t<slot>\n\t\t\t{{ !icon ? 'Button' : '' }}\n\t\t</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 { computed } from 'vue';\nimport type { Props, Emits } from './checkbox';\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-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=\"localValue\"\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 setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } from './input';\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 = () => {\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<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.stop=\"() => (addCleaner || !!$slots.btn) && clean()\"\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\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: 20px;\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: 24px;\n\theight: 24px;\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</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 UtilsDate 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\nconst el = ref();\n\nconst localValue = computed({\n\tget() {\n\t\treturn UtilsDate.dateFormat(props.modelValue, 2, '0000-00-00');\n\t},\n\n\tset(value) {\n\t\tvalue = UtilsDate.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 dateUnformat = UtilsDate.dateUnformat(e.target.value);\n\tconst dateFormat = UtilsDate.dateFormat(dateUnformat);\n\n\tif (!dateFormat || dateFormat === Core.L.Not_date || e.target.value !== dateFormat) {\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\tconst $el = datepicker.connectDatepicker(e.target, {\n\t\tonSelect: () => onchange(e),\n\t});\n\n\tif ($el) {\n\t\t$el.datepicker('show');\n\n\t\tonUnmounted(() => $el.datepicker('destroy'));\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 { toRef, computed, watch } from 'vue';\nimport type { Props, Emits } from './select';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\n/**\n * Иконка выбранного option\n */\nconst optionIcon = computed(() => {\n\treturn optionByValue.value.get(localValue.value)?.icon;\n});\n\n/**\n * Словарь с доступными options\n */\nconst optionByValue = computed(() => {\n\tconst res = new Map();\n\n\tprops.options.forEach((option) => {\n\t\tif (option.disabled) {\n\t\t\treturn;\n\t\t}\n\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 * Логика для обртаной своместимости:\n * - null - заменить на первое доступное значение\n * - undefined - заменить на первое доступное значение\n */\nwatch([\n\ttoRef(props.modelValue),\n\toptionByValue,\n], () => {\n\tif ((localValue.value === null || localValue.value === undefined) && optionByValue.value.size) {\n\t\tconsole.warn('Пожалуйста, не передавайте в компонент Select значения null и undefined');\n\n\t\tlocalValue.value = optionByValue.value.keys().next().value;\n\t}\n}, { immediate: true });\n\n/**\n * Выбрать следующее доступное значение\n */\nconst selectNextValue = () => {\n\tconst listEnabledValues = [...optionByValue.value.keys()];\n\tconst currentIndex = listEnabledValues.indexOf(localValue.value);\n\tconst nextIndex = (currentIndex + 1) % listEnabledValues.length;\n\n\tlocalValue.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=\"localValue\"\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=\"localValue\"\n\t\t>\n\t\t\t<template v-for=\"[_index, option] of options.entries()\">\n\t\t\t\t<optgroup\n\t\t\t\t\tv-if=\"option.children\"\n\t\t\t\t\t:key=\"'group_' + option.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=\"[_index, subOption] of option.children.entries()\"\n\t\t\t\t\t\t:key=\"option.value\"\n\t\t\t\t\t\t:value=\"subOption.value\"\n\t\t\t\t\t\t:selected=\"subOption.value === localValue\"\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=\"option.value\"\n\t\t\t\t\t:value=\"option.value\"\n\t\t\t\t\t:selected=\"option.value === localValue\"\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 && optionByValue.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 {\n\tbackground: var(--content-background-color);\n\tcolor: var(--color-text-1);\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>"],"names":["Device","isChrome","isSafari","genEl","tagName","attrs","elsChildrens","el","name","elChildren","isVisible","boundingClientRect","offset","css","property","wrap","elWrapper","querySelectorVisible","selectors","querySelectorAllArray","querySelectorVisibleLast","querySelectorAllVisible","storage","contextName","contextData","storageClear","DOM","Page","fileNames","props","cssFilesByOptions","filename","m","pc","key","fileNames2","options","item","media","fileName","elLink","onResizeDelay","onResizeTimer","onResizeListeners","windowSize","addOnReize","listener","removeOnResize","onResize","e","callback","Events","_a","state","_window$1","$","_b","tvTooltipGenOptions","binding","vnode","tooltip","_prevVnode","instance","_window","Core","reactive","style","type","elStyle","app","options2","device","UtilsDate","date","ms","useFormat","d","Y","H","i","s","time","emptyValue","dateFormat","dateForObj","dateObject","result","dateChunks","dateFormatChunks","y","index","__props","i18n","titleStatus","computed","emit","__emit","localValue","value","placeholder","clean","useNativeDatepicker","onInputLazy","_e","ref","oninput","onchange","dateUnformat","init","datepicker","$el","onUnmounted","value2","optionIcon","optionByValue","res","option","subOption","watch","toRef","selectNextValue","listEnabledValues","nextIndex"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { C as f } from "./forms-
|
|
2
|
-
import n from "../utils/dom.js";
|
|
1
|
+
import { D as n, C as f } from "./forms-779fee37.es.js";
|
|
3
2
|
import i from "../popup/worker.js";
|
|
4
3
|
import "vue";
|
|
5
4
|
class m {
|
|
@@ -143,14 +142,14 @@ class b {
|
|
|
143
142
|
case "ArrowLeft":
|
|
144
143
|
if (!o)
|
|
145
144
|
break;
|
|
146
|
-
t.key === "ArrowRight" || t.key === "ArrowLeft" ? n.querySelectorVisible(p, "ul.top-popup_content > li:not(.top-
|
|
147
|
-
const h = (e = p.querySelector("ul.top-popup_content > li:not(.top-
|
|
148
|
-
if (t.key === "ArrowRight" && h) {
|
|
145
|
+
t.key === "ArrowRight" || t.key === "ArrowLeft" ? n.querySelectorVisible(p, "ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active > .top-popup_listMore") && t.preventDefault() : t.preventDefault();
|
|
146
|
+
const h = (e = p.querySelector("ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active")) == null ? void 0 : e.parentElement;
|
|
147
|
+
if (console.log(h), t.key === "ArrowRight" && h) {
|
|
149
148
|
const u = h.querySelector(".top-active > .top-popup_listMore");
|
|
150
149
|
if (u)
|
|
151
150
|
return u.click();
|
|
152
151
|
}
|
|
153
|
-
const a = n.querySelectorAllVisible(p, "ul.top-popup_content > li:not(.top-
|
|
152
|
+
const a = n.querySelectorAllVisible(p, "ul.top-popup_content > li:not(.top-popup_liNoSelectable)"), c = a.length;
|
|
154
153
|
let s = a.indexOf(h);
|
|
155
154
|
if (t.key === "ArrowUp" || t.key === "ArrowLeft" ? s-- : s++, t.key === "ArrowLeft" && s === -1)
|
|
156
155
|
return t.target.matches("input") ? void 0 : i.close(p);
|
|
@@ -163,24 +162,25 @@ class b {
|
|
|
163
162
|
}
|
|
164
163
|
const x = `:root{
|
|
165
164
|
--top-popup-background-color: var(--color-bg-3);
|
|
166
|
-
--top-popup-background-color-hover: var(--color-
|
|
167
|
-
--top-popup-background-color-active: var(--color-
|
|
168
|
-
|
|
169
|
-
--top-popup-
|
|
170
|
-
|
|
165
|
+
--top-popup-background-color-hover: var(--color-theme-75);
|
|
166
|
+
--top-popup-background-color-active: var(--color-theme-100);
|
|
167
|
+
|
|
168
|
+
--top-popup-border-color: var(--color-line-2-opacity);
|
|
169
|
+
--top-popup-title-background-color: var(--color-theme-50);
|
|
170
|
+
|
|
171
|
+
/* суммарный отсуп от каря popup до элемента */
|
|
172
|
+
--top-popup-content-padding: calc(var(--top-popup-list-padding) + var(--top-popup-listItem-padding));
|
|
171
173
|
|
|
172
|
-
|
|
173
|
-
--top-popup-
|
|
174
|
-
|
|
175
|
-
--top-popup-
|
|
174
|
+
/* списки */
|
|
175
|
+
--top-popup-list-padding: var(--top-padding-2);
|
|
176
|
+
|
|
177
|
+
--top-popup-listItem-radius: var(--top-radius-2);
|
|
178
|
+
--top-popup-listItem-padding: var(--top-padding-2);
|
|
176
179
|
}
|
|
177
180
|
|
|
178
181
|
.top-popup-front{ position: relative; }
|
|
179
182
|
|
|
180
183
|
.top-popup-wrapper{
|
|
181
|
-
--top-popup-padding-h: 8px;
|
|
182
|
-
--top-popup-padding-v: 8px;
|
|
183
|
-
|
|
184
184
|
/* см. recalcPosition() */
|
|
185
185
|
--top-popup-height: 0px;
|
|
186
186
|
--top-popup-right-bounding: 0px;
|
|
@@ -214,7 +214,7 @@ const x = `:root{
|
|
|
214
214
|
.top-popup-wrapper.p4 > *{ transform: translateX(-8px); }
|
|
215
215
|
.top-popup-wrapper-shown:not(.top-popup-wrapper-closed) > *{opacity: 1;transform: translate(0, 0) !important;}
|
|
216
216
|
|
|
217
|
-
.top-popup-wrapper.p0 > .top-popup{ top: calc(-16px); left: calc(0px -
|
|
217
|
+
.top-popup-wrapper.p0 > .top-popup{ top: calc(-16px); left: calc(0px - 8px); }
|
|
218
218
|
.top-popup-wrapper.p1 > .top-popup{ bottom: calc(100% + 8px); }
|
|
219
219
|
.top-popup-wrapper.p2 > .top-popup{ left: calc(100% + 8px); }
|
|
220
220
|
.top-popup-wrapper.p3 > .top-popup{ top: calc(100% + 8px); }
|
|
@@ -246,12 +246,16 @@ const x = `:root{
|
|
|
246
246
|
/* common */
|
|
247
247
|
.top-popup_header,
|
|
248
248
|
.top-popup_content,
|
|
249
|
-
.top-popup_footer{
|
|
249
|
+
.top-popup_footer{ font-size: 14px; }
|
|
250
250
|
.top-popup_header,
|
|
251
251
|
.top-popup_footer{ display: flex; align-items: center; justify-content: space-between; }
|
|
252
252
|
|
|
253
253
|
/* header */
|
|
254
|
-
.top-popup_header{
|
|
254
|
+
.top-popup_header{
|
|
255
|
+
border-bottom: 1px solid var(--top-popup-border-color);
|
|
256
|
+
padding: var(--top-padding-3);
|
|
257
|
+
font-weight: 600;
|
|
258
|
+
}
|
|
255
259
|
.top-popup_header > *{ font-weight: 400; }
|
|
256
260
|
.top-popup_header > .a{ cursor: pointer; color: var(--color-blue-450); }
|
|
257
261
|
.top-popup_header > .a:hover{ color: var(--color-blue-350); }
|
|
@@ -259,91 +263,119 @@ const x = `:root{
|
|
|
259
263
|
.top-popup_headerButton{ width: 60px; }
|
|
260
264
|
|
|
261
265
|
/* content */
|
|
262
|
-
.top-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
+
.top-popup_content{
|
|
267
|
+
margin: 0;
|
|
268
|
+
line-height:1 !important;
|
|
269
|
+
flex-grow: 1;
|
|
270
|
+
overflow-y: auto;
|
|
271
|
+
display: flex;
|
|
272
|
+
flex-direction: column;
|
|
273
|
+
gap: var(--top-gap-4);
|
|
266
274
|
|
|
267
|
-
padding-top: var(--top-popup-padding-v); padding-bottom: var(--top-popup-padding-v); margin: 0; line-height:1.3 !important;
|
|
268
|
-
flex-grow: 1; overflow-y: auto;
|
|
269
275
|
-webkit-overflow-scrolling: touch;
|
|
270
276
|
}
|
|
271
277
|
|
|
272
|
-
.top-
|
|
273
|
-
|
|
278
|
+
div.top-popup_content{
|
|
279
|
+
/* has_scroll */
|
|
280
|
+
--scroll-padding-top: var(--top-popup-content-padding);
|
|
281
|
+
--scroll-padding-bottom: var(--top-popup-content-padding);
|
|
282
|
+
|
|
283
|
+
padding: var(--top-popup-content-padding);
|
|
274
284
|
}
|
|
285
|
+
div.top-popup_content > *{ flex-shrink: 0; }
|
|
286
|
+
div.top-popup_content > .top-button{ margin: 0; }
|
|
275
287
|
|
|
276
|
-
.top-
|
|
277
|
-
|
|
278
|
-
|
|
288
|
+
div.top-popup_content .top-unwrap{
|
|
289
|
+
--top-unwrap-x: var(--top-popup-content-padding);
|
|
290
|
+
}
|
|
279
291
|
|
|
280
|
-
|
|
281
|
-
--scroll-padding-top:
|
|
282
|
-
--scroll-padding-bottom: var(--
|
|
292
|
+
ul.top-popup_content{
|
|
293
|
+
--scroll-padding-top: var(--top-popup-list-padding);
|
|
294
|
+
--scroll-padding-bottom: var(--top-popup-list-padding);
|
|
295
|
+
|
|
296
|
+
padding: var(--top-popup-list-padding);
|
|
297
|
+
gap: 2px;
|
|
298
|
+
}
|
|
283
299
|
|
|
284
|
-
|
|
300
|
+
ul.top-popup_content .top-unwrap{
|
|
301
|
+
--top-unwrap-x: var(--top-popup-list-padding);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
.top-popup_listItem{
|
|
305
|
+
border-radius: var(--top-popup-listItem-radius);
|
|
306
|
+
padding: var(--top-popup-listItem-padding);
|
|
285
307
|
}
|
|
286
308
|
|
|
287
309
|
ul.top-popup_content li{ margin: 0; list-style:none; display: flex; position: relative }
|
|
288
310
|
ul.top-popup_content li > *{ flex-grow: 1; }
|
|
289
311
|
ul.top-popup_content li > a:not(.top-button),
|
|
290
|
-
ul.top-popup_content li >
|
|
312
|
+
ul.top-popup_content li > .a{
|
|
291
313
|
cursor: pointer;
|
|
292
314
|
box-sizing: border-box;
|
|
293
|
-
|
|
315
|
+
border-radius: var(--top-popup-listItem-radius);
|
|
316
|
+
background: var(--top-popup-background-color);
|
|
317
|
+
padding: var(--top-popup-listItem-padding);
|
|
294
318
|
color:var(--color-text) !important; font-size: 14px; font-weight: normal !important; text-decoration:none !important; font-style: normal;
|
|
295
319
|
display:flex; flex: 1 1 100%; align-items: center;
|
|
296
320
|
transition: background-color 0.1s ease-in-out;
|
|
297
321
|
}
|
|
298
322
|
.top-popup-wrapper-no_animate ul.top-popup_content li > a:not(.top-button),
|
|
299
|
-
.top-popup-wrapper-no_animate ul.top-popup_content li >
|
|
323
|
+
.top-popup-wrapper-no_animate ul.top-popup_content li > .a{ transition: none; }
|
|
300
324
|
|
|
301
325
|
ul.top-popup_content li > a:not(.top-button):hover,
|
|
302
|
-
ul.top-popup_content li >
|
|
326
|
+
ul.top-popup_content li > .a:hover{ background: var(--top-popup-background-color-hover); }
|
|
303
327
|
ul.top-popup_content li > a:not(.top-button).top-active,
|
|
304
|
-
ul.top-popup_content li >
|
|
328
|
+
ul.top-popup_content li > .a.top-active{ background: var(--top-popup-background-color-active); }
|
|
329
|
+
|
|
330
|
+
.top-popup_content + .top-popup_content{ padding-top: 0; }
|
|
305
331
|
|
|
306
332
|
/* listTitle */
|
|
307
|
-
|
|
308
|
-
background: var(--top-popup-title-background-color);
|
|
309
|
-
color: var(--color-text-
|
|
310
|
-
}
|
|
311
|
-
li.top-popup_listTitle:first-child{
|
|
312
|
-
padding-top: calc(var(--top-popup-padding-v) + var(--scroll-padding-top));
|
|
313
|
-
margin-top: calc(0px - var(--scroll-padding-top));
|
|
333
|
+
.top-popup_listItem-title{
|
|
334
|
+
background: var(--top-popup-title-background-color);
|
|
335
|
+
color: var(--color-text-2); font-size: 12px;
|
|
314
336
|
}
|
|
315
337
|
|
|
316
338
|
/* listDelimiter */
|
|
317
|
-
|
|
339
|
+
.top-popup_listItem-delimiter{
|
|
318
340
|
border-radius: 3px;
|
|
319
341
|
background: var(--top-popup-border-color);
|
|
320
|
-
height:
|
|
321
|
-
|
|
342
|
+
height: 1px;
|
|
343
|
+
padding: 0;
|
|
344
|
+
margin: 4px;
|
|
322
345
|
}
|
|
323
346
|
|
|
324
347
|
/* listMore */
|
|
325
|
-
|
|
348
|
+
.top-popup_listMore{
|
|
349
|
+
margin: calc(0px - var(--top-popup-listItem-padding)) 0;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
ul.top-popup_content li > .a.top-popup_listMore{
|
|
326
353
|
height: auto; padding-right: 4px; padding-left: 4px;
|
|
327
354
|
font-size: 24px; line-height: 17px; text-align: center;
|
|
328
355
|
flex-basis: 10px;
|
|
329
356
|
}
|
|
330
|
-
ul.top-popup_content li >
|
|
331
|
-
ul.top-popup_content li > * >
|
|
332
|
-
padding: 0 var(--top-popup-padding
|
|
357
|
+
ul.top-popup_content li > .a.top-popup_listMore:before{ color: var(--color-gray-500); }
|
|
358
|
+
ul.top-popup_content li > * > .top-popup_listMore{
|
|
359
|
+
padding: 0 var(--top-popup-listItem-padding); margin-left: auto;
|
|
333
360
|
color: var(--color-gray-500);
|
|
334
361
|
font-size: 14px;
|
|
335
362
|
}
|
|
336
363
|
ul.top-popup_content li > * > i.top-popup_listMore:hover,
|
|
337
364
|
ul.top-popup_content li > * > i.top-popup_listMore.top-active{ color: var(--color-blue-500); }
|
|
338
|
-
ul.top-popup_content li > * > i.top-popup_listMore:before{
|
|
365
|
+
ul.top-popup_content li > * > i.top-popup_listMore:before{
|
|
366
|
+
transform: rotate(90deg);
|
|
367
|
+
display: block;
|
|
368
|
+
}
|
|
339
369
|
|
|
340
370
|
ul.top-popup_content li a.close{ background: none !important; }
|
|
341
371
|
|
|
342
372
|
/* data-top-icon */
|
|
343
|
-
.top-popup_content > [data-top-icon]:before{
|
|
373
|
+
.top-popup_content > [data-top-icon]:before{
|
|
374
|
+
--top-icon-size: 20px;
|
|
375
|
+
}
|
|
344
376
|
|
|
345
377
|
ul.top-popup_content li > [data-top-icon]:not(.top-button):before{
|
|
346
|
-
--top-icon-color:
|
|
378
|
+
--top-icon-color: var(--color-text-3);
|
|
347
379
|
--top-icon-size: 20px;
|
|
348
380
|
--top-icon-width: 20px;
|
|
349
381
|
|
|
@@ -351,18 +383,21 @@ ul.top-popup_content li > [data-top-icon]:not(.top-button):before{
|
|
|
351
383
|
}
|
|
352
384
|
ul.top-popup_content li:hover > [data-top-icon]:not(.top-button):before,
|
|
353
385
|
ul.top-popup_content li > [data-top-icon]:not(.top-button).top-active:before{
|
|
354
|
-
--top-icon-color:
|
|
386
|
+
--top-icon-color: var(--color-text-2);
|
|
355
387
|
}
|
|
356
388
|
|
|
357
389
|
/* footer */
|
|
358
390
|
.top-popup_footer{
|
|
359
|
-
padding: var(--top-popup-
|
|
391
|
+
padding: var(--top-popup-list-padding);
|
|
392
|
+
border-top: 1px solid var(--top-popup-border-color);
|
|
393
|
+
display: flex;
|
|
394
|
+
gap:var(--top-gap-2);
|
|
395
|
+
justify-content: flex-end;
|
|
360
396
|
}
|
|
361
|
-
.top-popup_footer > .top-button{ margin: 0; }
|
|
362
397
|
|
|
363
398
|
/* Виджеты */
|
|
364
|
-
.top-popup > [data-widget]{ padding: 0 var(--top-popup-padding
|
|
365
|
-
.top-popup > [data-widget] + hr{ margin: 0 var(--top-popup-padding
|
|
399
|
+
.top-popup > [data-widget]{ padding: 0 var(--top-popup-list-padding); }
|
|
400
|
+
.top-popup > [data-widget] + hr{ margin: 0 var(--top-popup-list-padding); }
|
|
366
401
|
|
|
367
402
|
.top-popup .placeholder{
|
|
368
403
|
border:1px solid #E0D9D9 !important; border-right: none !important; border-left: none !important; background:#F9F9F9 !important; margin: -1px 0; z-index: 1;
|
|
@@ -373,8 +408,9 @@ ul.top-popup_content li > [data-top-icon]:not(.top-button).top-active:before{
|
|
|
373
408
|
.top-popup-wrapper.simple_list > .top-popup{ min-width: 0; white-space: nowrap; }
|
|
374
409
|
|
|
375
410
|
.top-popup_content .top-column{ display: flex; flex-direction: column; gap: 4px; }
|
|
376
|
-
.top-popup_content li >
|
|
377
|
-
|
|
411
|
+
html .top-popup .top-popup_content li > .top-button{
|
|
412
|
+
margin:calc(var(--top-popup-listItem-padding) / 2) var(--top-popup-listItem-padding);
|
|
413
|
+
}
|
|
378
414
|
|
|
379
415
|
.top-popup li .check_all,
|
|
380
416
|
.top-popup li .clear_all{ cursor: pointer; color: var(--color-cyan); padding: 8px; display: inline-block; }
|
|
@@ -385,7 +421,7 @@ html .top-popup .top-popup_content li > .top-button{ margin:calc(var(--top-popup
|
|
|
385
421
|
/* table */
|
|
386
422
|
.top-popup_content table{ margin: -9px 0; }
|
|
387
423
|
.top-popup_content table td,
|
|
388
|
-
.top-popup_content table th{ padding: 9px var(--top-popup-padding
|
|
424
|
+
.top-popup_content table th{ padding: 9px var(--top-popup-listItem-padding) 9px 0; vertical-align: top; }
|
|
389
425
|
.top-popup_content table th{ width: 40%; font-weight: 600; white-space: nowrap; }
|
|
390
426
|
|
|
391
427
|
/* формы */
|
|
@@ -395,19 +431,22 @@ ul.top-popup_content .a > [type="radio"]{ margin: -8px 0 -8px auto; }
|
|
|
395
431
|
/* deprecated */
|
|
396
432
|
ul.top-popup_content a > [class*=icon],
|
|
397
433
|
ul.top-popup_content i.a > [class*=icon]{
|
|
398
|
-
margin-right: 14px; text-align: center;
|
|
399
|
-
width: auto; height: 16px; font-size: 16px; vertical-align: top;
|
|
400
434
|
transition: 0.1s;
|
|
401
435
|
}
|
|
402
436
|
|
|
403
437
|
.top-popup .buttons{ border-radius:0 0 4px 4px; border-top:1px solid #BDC3C7; background:#ECF0F1; padding:10px 15px; margin:10px -15px -10px -15px; white-space: nowrap; }
|
|
404
438
|
.top-popup_footer [class*=btn]:not(.btn-transparent){ min-width: 100px; padding: 5px 14px; margin-left: 10px; }
|
|
405
439
|
.top-popup_footer [class*=btn]:first-child{ margin-left: 0; }
|
|
406
|
-
.top-popup_footer .btn.full_width{ margin: 0; flex-grow: 1; }`, w =
|
|
440
|
+
.top-popup_footer .btn.full_width{ margin: 0; flex-grow: 1; }`, w = `:root{
|
|
441
|
+
--top-popup-list-padding: 0px;
|
|
442
|
+
|
|
443
|
+
--top-popup-listItem-radius: 0px;
|
|
444
|
+
--top-popup-listItem-padding: var(--top-padding-4);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
html.with_popup{ background: #808080; }
|
|
407
448
|
|
|
408
449
|
.top-popup-wrapper{
|
|
409
|
-
--top-popup-padding-h: 19px;
|
|
410
|
-
--top-popup-padding-v: 16px;
|
|
411
450
|
--top-popup-footer-offset: 25px;
|
|
412
451
|
|
|
413
452
|
width: auto !important; height: auto !important;
|
|
@@ -419,7 +458,7 @@ ul.top-popup_content i.a > [class*=icon]{
|
|
|
419
458
|
.top-popup-wrapper-shown:not(.top-popup-wrapper-closed) > .top-popup{ opacity: 1 !important; }
|
|
420
459
|
|
|
421
460
|
.top-popup{
|
|
422
|
-
border-radius: 8px 8px 0 0; width: auto !important; max-height: calc(100% - var(--header-height) - 12px);
|
|
461
|
+
border-radius: 8px 8px 0 0; width: auto !important; max-height: calc(100% - var(--header-height) - 12px); margin: 0 !important;
|
|
423
462
|
top: auto !important; right: 0 !important; bottom: 0 !important; left: 0 !important;
|
|
424
463
|
display: flex; flex-direction: column;
|
|
425
464
|
|
|
@@ -441,39 +480,35 @@ ul.top-popup_content i.a > [class*=icon]{
|
|
|
441
480
|
transform: translateY(calc(-100% - 24px));
|
|
442
481
|
}
|
|
443
482
|
|
|
444
|
-
.top-popup_content:last-child,
|
|
445
|
-
.top-popup_footer{
|
|
446
|
-
--scroll-padding-bottom: calc(var(--top-popup-padding-v) + var(--top-popup-footer-offset));
|
|
447
|
-
|
|
448
|
-
padding-bottom: var(--scroll-padding-bottom);
|
|
449
|
-
}
|
|
450
|
-
|
|
451
483
|
/* content */
|
|
452
484
|
ul.top-popup_content{
|
|
453
485
|
--scroll-padding-top: 0px;
|
|
454
486
|
--scroll-padding-bottom: var(--scroll-padding-top);
|
|
455
487
|
|
|
456
|
-
|
|
488
|
+
gap: 0;
|
|
457
489
|
}
|
|
458
490
|
ul.top-popup_content li:not(:last-child){ border-bottom: 1px solid var(--top-popup-border-color); }
|
|
459
491
|
|
|
460
492
|
.top-popup-wrapper.top-style_alt > .top-popup > ul > li{ border-bottom: none; }
|
|
461
493
|
|
|
462
494
|
/* footer */
|
|
463
|
-
.top-popup_footer{
|
|
495
|
+
.top-popup_footer{
|
|
496
|
+
flex-direction: column-reverse;
|
|
497
|
+
}
|
|
464
498
|
.top-popup_footer > .top-button{
|
|
465
499
|
--top-forms-base-height: var(--top-forms-base-height_xl);
|
|
466
500
|
|
|
467
|
-
|
|
501
|
+
width: 100%;
|
|
468
502
|
}
|
|
469
503
|
|
|
470
504
|
/* listTitle */
|
|
471
|
-
ul.top-popup_content
|
|
505
|
+
ul.top-popup_content .top-popup_listItem-title{
|
|
472
506
|
--top-popup-padding-v: 12px;
|
|
473
507
|
}
|
|
474
508
|
|
|
475
509
|
/* listDelimiter */
|
|
476
|
-
ul.top-popup_content
|
|
510
|
+
ul.top-popup_content .top-popup_listItem-delimiter{ background: var(--color-line-1-opacity); height: 4px; margin: 0; }
|
|
511
|
+
ul.top-popup_content li:first-child > .top-popup_listItem-delimiter{ border-top: 1px solid var(--top-popup-border-color); }`, P = `html:not(.with_dialog){ margin-right: 0 !important; }
|
|
477
512
|
|
|
478
513
|
.top-popup{ min-width: 250px; max-width: calc(100vw - var(--top-popup-left) - 16px); max-height: calc(var(--top-popup-bottom) + var(--top-popup-height)); }
|
|
479
514
|
.top-popup-wrapper.invert-x > .top-popup{ max-width: calc(100vw - var(--top-popup-right) - 16px); }
|
|
@@ -697,4 +732,4 @@ b.init();
|
|
|
697
732
|
export {
|
|
698
733
|
g as default
|
|
699
734
|
};
|
|
700
|
-
//# sourceMappingURL=popup-
|
|
735
|
+
//# sourceMappingURL=popup-672d6531.es.js.map
|