@topvisor/ui 0.9.21 → 0.9.23

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 (93) hide show
  1. package/.chunks/datepicker-B28_yC8V.es.js +277 -0
  2. package/.chunks/datepicker-B28_yC8V.es.js.map +1 -0
  3. package/.chunks/datepicker-CDoo2d0x.amd.js +234 -0
  4. package/.chunks/datepicker-CDoo2d0x.amd.js.map +1 -0
  5. package/.chunks/forms-DNRGCC9P.amd.js +3 -0
  6. package/.chunks/forms-DNRGCC9P.amd.js.map +1 -0
  7. package/.chunks/{forms-gb7uf2K8.es.js → forms-U97cW1zp.es.js} +39 -39
  8. package/.chunks/forms-U97cW1zp.es.js.map +1 -0
  9. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-2TAzIZZA.amd.js → listItem.vue_vue_type_script_setup_true_lang-C67aHWhi.amd.js} +2 -2
  10. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C67aHWhi.amd.js.map +1 -0
  11. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-Caw4oFU-.es.js → listItem.vue_vue_type_script_setup_true_lang-C_o5sC8m.es.js} +2 -2
  12. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C_o5sC8m.es.js.map +1 -0
  13. package/.chunks/{popup-B-BAfp1v.es.js → popup-C1hmF9NI.es.js} +432 -442
  14. package/.chunks/popup-C1hmF9NI.es.js.map +1 -0
  15. package/.chunks/popup-Cg-GRa9u.amd.js +386 -0
  16. package/.chunks/popup-Cg-GRa9u.amd.js.map +1 -0
  17. package/.chunks/store-Bl79G7T_.amd.js.map +1 -1
  18. package/.chunks/store-PoMCiuBr.es.js.map +1 -1
  19. package/.chunks/{widgetInput-BxO9y9L7.amd.js → widgetInput-DgylW6NK.amd.js} +2 -2
  20. package/.chunks/widgetInput-DgylW6NK.amd.js.map +1 -0
  21. package/.chunks/{widgetInput-DPOH_qya.es.js → widgetInput-DmpYL1aA.es.js} +2 -2
  22. package/.chunks/widgetInput-DmpYL1aA.es.js.map +1 -0
  23. package/README.md +86 -86
  24. package/assets/dark.css +1 -1
  25. package/assets/forms.css +1 -1
  26. package/assets/light.css +1 -1
  27. package/core/core.amd.js +1 -1
  28. package/core/core.js +1 -1
  29. package/forms/forms.amd.js +1 -1
  30. package/forms/forms.js +1 -1
  31. package/forms/helpers.amd.js.map +1 -1
  32. package/forms/helpers.js.map +1 -1
  33. package/formsExt/formsExt.amd.js +1 -1
  34. package/formsExt/formsExt.amd.js.map +1 -1
  35. package/formsExt/formsExt.js +4 -4
  36. package/formsExt/formsExt.js.map +1 -1
  37. package/icomoon/Read Me.txt +7 -7
  38. package/icomoon/demo-files/demo.css +161 -161
  39. package/icomoon/demo-files/demo.js +30 -30
  40. package/icomoon/demo.html +3225 -3211
  41. package/icomoon/fonts/Topvisor-2.svg +252 -251
  42. package/icomoon/fonts/Topvisor-2.ttf +0 -0
  43. package/icomoon/fonts/Topvisor-2.woff +0 -0
  44. package/icomoon/selection.json +1 -1
  45. package/icomoon/style.css +707 -704
  46. package/package.json +20 -20
  47. package/popup/popup.amd.js +1 -1
  48. package/popup/popup.js +2 -2
  49. package/popup/worker.amd.js +1 -1
  50. package/popup/worker.amd.js.map +1 -1
  51. package/popup/worker.js +2 -2
  52. package/popup/worker.js.map +1 -1
  53. package/require/css.amd.js +11 -11
  54. package/tabs/tabs.amd.js +1 -1
  55. package/tabs/tabs.js +1 -1
  56. package/tabsView/tabsView.amd.js +1 -1
  57. package/tabsView/tabsView.amd.js.map +1 -1
  58. package/tabsView/tabsView.js +19 -18
  59. package/tabsView/tabsView.js.map +1 -1
  60. package/utils/css.amd.js.map +1 -1
  61. package/utils/css.js.map +1 -1
  62. package/utils/date.amd.js +1 -1
  63. package/utils/date.js +1 -1
  64. package/utils/device.amd.js +1 -1
  65. package/utils/device.js +1 -1
  66. package/utils/dom.amd.js.map +1 -1
  67. package/utils/dom.js.map +1 -1
  68. package/utils/keyboard.amd.js.map +1 -1
  69. package/utils/keyboard.js.map +1 -1
  70. package/utils/route.amd.js.map +1 -1
  71. package/utils/route.js.map +1 -1
  72. package/utils/scroll.amd.js +1 -1
  73. package/utils/scroll.amd.js.map +1 -1
  74. package/utils/scroll.js +5 -5
  75. package/utils/scroll.js.map +1 -1
  76. package/utils/system.amd.js.map +1 -1
  77. package/utils/system.js.map +1 -1
  78. package/utils/window.amd.js +1 -1
  79. package/utils/window.js +1 -1
  80. package/.chunks/datepicker-B9eprAyk.amd.js +0 -234
  81. package/.chunks/datepicker-B9eprAyk.amd.js.map +0 -1
  82. package/.chunks/datepicker-C86O1mQq.es.js +0 -277
  83. package/.chunks/datepicker-C86O1mQq.es.js.map +0 -1
  84. package/.chunks/forms-DkNAMd-D.amd.js +0 -3
  85. package/.chunks/forms-DkNAMd-D.amd.js.map +0 -1
  86. package/.chunks/forms-gb7uf2K8.es.js.map +0 -1
  87. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-2TAzIZZA.amd.js.map +0 -1
  88. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-Caw4oFU-.es.js.map +0 -1
  89. package/.chunks/popup-B-BAfp1v.es.js.map +0 -1
  90. package/.chunks/popup-CV5MPPEu.amd.js +0 -396
  91. package/.chunks/popup-CV5MPPEu.amd.js.map +0 -1
  92. package/.chunks/widgetInput-BxO9y9L7.amd.js.map +0 -1
  93. package/.chunks/widgetInput-DPOH_qya.es.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-DNRGCC9P.amd.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/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/input/input.vue","../../src/components/forms/inputDate/inputDate.vue","../../src/components/forms/radio/radio.vue","../../src/components/forms/switcher/switcher.vue","../../src/components/forms/textarea/textarea.vue","../../src/components/forms/select/select.vue","../../src/components/forms/loadbar/loadbar.vue"],"sourcesContent":["export function isRetina() {\n\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\n}\n\n// определить, является ли устройство мобильным\nexport function isMobile(): boolean {\n\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\n}\n\n// определить, открыт ли сайт в приложении\nexport function isApp() {\n\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\n}\n\n// определить, является ли OS пользователя macOS\nexport function isMacOS() {\n\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\n}\n\n// определить, является ли текущий браузер пользователя Safari\nexport function isSafari() {\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 * @returns {'Ctrl'|'⌘'}\n */\nexport function getCommandKeyLabel(): 'Ctrl' | '⌘' {\n\tif (isMacOS()) {\n\t\treturn '⌘';\n\t} else {\n\t\treturn 'Ctrl';\n\t}\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\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;","/**\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 { _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}\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\n/**\n * Получить объект Date из строки\n * @param date - строка с датой\n */\nexport function stringToDate(date: string) {\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 * Генерация строки с датой в формате Y-m-d H:i:s или в формате Core.state.dateFormat, если указан useFormat = true\n * @param {?number} timestamp\n * @param {?boolean} useFormat\n * @param {0|1|2|3} time - 0: только дата, 1: дата и часы, 2: дата и часы с минутами, 3: дата и часы с минутами и секундами\n */\nexport function genDate(timestamp: number | undefined = 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 * Перевод даты в формат пользователя\n * @param {string} date - строка в формате Y-m-d H:i:s\n * @param {0|1|2|3} time - 0: только дата, 1: дата и часы, 2: дата и часы с минутами, 3: дата и часы с минутами и секундами\n * @param {string} emptyValue - значение, которое надо вернуть, если дата не указана\n */\nexport function dateFormat(date: string, time: 0 | 1 | 2 | 3 = 2, emptyValue: string = Core.L.Not_date): string {\n\tif (!date || date.substring(0, 10) === '0000-00-00') {\n\t\tif (emptyValue && emptyValue !== '0000-00-00') {\n\t\t\treturn emptyValue;\n\t\t}\n\t}\n\n\tconst dateFormat = Core.state.dateFormat.toLowerCase();\n\n\tlet dateForObj = date.substring(0, 10);\n\n\tif (dateForObj.length === 7) {\n\t\tdateForObj += '-01';\n\t}\n\n\tdateForObj += ' 00:00';\n\n\t// safari fix\n\tdateForObj = dateForObj.replace(/-/g, '/');\n\n\tconst dateObject = new Date(dateForObj);\n\tif (isNaN(Number(dateObject))) {\n\t\treturn emptyValue;\n\t}\n\n\tlet result = dateFormat.\n\t\treplace('y', String(dateObject.getFullYear()).padStart(2, '0')).\n\t\treplace('m', String(dateObject.getMonth() + 1).padStart(2, '0')).\n\t\treplace('d', String(dateObject.getDate()).padStart(2, '0'));\n\n\tif (date.length > 10) {\n\t\tswitch (time) {\n\t\t\t// часы\n\t\t\tcase 1:\n\t\t\t\tresult += ' ' + date.substring(11, 13);\n\n\t\t\t\tbreak;\n\n\t\t\t// часы и минуты\n\t\t\tcase 2:\n\t\t\t\tresult += ' ' + date.substring(11, 16);\n\n\t\t\t\tbreak;\n\n\t\t\t// часы, минуты и секунды\n\t\t\tcase 3:\n\t\t\t\tresult += ' ' + date.substring(11, 19);\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Перевод даты из формата пользователя в системный формат\n * @param {string} date - строка в формате Y-m-d H:i:s\n * @param {string} emptyValue - значение, которое надо вернуть, если дата не указана\n */\nexport function dateUnformat(date: string, emptyValue: string = Core.L.Not_date): string {\n\tif (!date) {\n\t\treturn emptyValue;\n\t}\n\n\tif (date.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\n\t\treturn date;\n\t}\n\n\tconst dateFormat = Core.state.dateFormat.toLowerCase();\n\n\tconst dateChunks = date.split(/\\W/);\n\tconst dateFormatChunks = dateFormat.split(/\\W/);\n\n\tlet d = '';\n\tlet m = '';\n\tlet y = '';\n\n\tdateFormatChunks.forEach((type, index) => {\n\t\tswitch (type) {\n\t\t\tcase 'd':\n\t\t\t\td = dateChunks[index];\n\n\t\t\t\tbreak;\n\t\t\tcase 'm':\n\t\t\t\tm = dateChunks[index];\n\n\t\t\t\tbreak;\n\t\t\tcase 'y':\n\t\t\t\ty = dateChunks[index];\n\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tlet result = y + '-' + m + '-' + d;\n\n\tif (!result.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\n\t\tconsole.info('Неверный формат даты, будет возращена текущая дата, ' + result);\n\n\t\tresult = genDate((new Date()).getTime(), false).substring(0, 10);\n\t}\n\n\treturn result;\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { Props } from './avatar';\nimport { dateFormat } from '@/core/utils/date';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 64,\n});\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 + ': ' + 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\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 { 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>","<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, '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 {\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>","<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>"],"names":["isRetina","isMobile","isApp","isMacOS","isSafari","isChrome","isSafari2","getCommandKeyLabel","Page","onResizeTimer","onResizeListeners","windowSize","listener","callback","e","onResize","Events","addOnReize","removeOnResize","options","_a","state","_b","$","el","Core","tvTooltipGenOptions","binding","vnode","tooltip","instance","_binding","_vnode","_window","vue","media","type","elStyle","style","app","options2","device","date","genDate","timestamp","useFormat","time","Y","m","d","H","i","s","dateFormat","emptyValue","dateForObj","result","dateFormat2","dateObject","y","dateChunks","index","props","__props","titleStatus","i18n","tagName","emit","__emit","localValue","value","placeholder","clean","event","onInputLazy","_e","$el","oninput","onchange","dateFormatted","init","datepicker","resolve","reject","require","value2","optionByValue","res","option","children","subOption","flatOptionByValue","genOption","title","model","optionIcon","listEnabledValues","_sfc_render","_ctx","_cache"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { insertToPage as Z } from "../utils/css.js";
2
- import { reactive as W, defineComponent as w, useCssVars as q, computed as g, openBlock as u, createElementBlock as m, createElementVNode as $, createCommentVNode as h, createBlock as M, resolveDynamicComponent as ee, normalizeClass as v, withCtx as L, renderSlot as k, createTextVNode as te, toDisplayString as S, mergeModels as A, useModel as Q, withDirectives as V, vModelCheckbox as X, unref as B, mergeProps as T, withKeys as oe, vModelText as J, withModifiers as ae, onUnmounted as se, ref as ne, vModelRadio as ie, resolveDirective as le, watch as re, Fragment as R, renderList as N, vModelSelect as de } from "vue";
2
+ import { reactive as W, defineComponent as w, useCssVars as K, computed as g, openBlock as u, createElementBlock as m, createElementVNode as $, createCommentVNode as h, createBlock as M, resolveDynamicComponent as ee, normalizeClass as v, withCtx as L, renderSlot as k, createTextVNode as te, toDisplayString as S, mergeModels as C, useModel as Q, withDirectives as V, vModelCheckbox as X, unref as B, mergeProps as T, withKeys as oe, vModelText as J, withModifiers as ae, onUnmounted as se, ref as ne, vModelRadio as ie, resolveDirective as le, watch as re, Fragment as R, renderList as N, vModelSelect as de } from "vue";
3
3
  const x = ["../assets/forms.css"].map((a) => import.meta.resolve(a));
4
4
  await Z(x);
5
5
  function pe() {
@@ -26,22 +26,22 @@ class fe {
26
26
  }
27
27
  const be = 100;
28
28
  let O;
29
- const C = /* @__PURE__ */ new Map(), E = {
29
+ const A = /* @__PURE__ */ new Map(), E = {
30
30
  width: window.innerWidth,
31
31
  height: window.innerHeight
32
32
  };
33
33
  function he(a) {
34
- C.set(a, a);
34
+ A.set(a, a);
35
35
  }
36
36
  function ve(a) {
37
- C.delete(a);
37
+ A.delete(a);
38
38
  }
39
39
  function ye(a) {
40
40
  clearTimeout(O), O = setTimeout(function() {
41
41
  a.topEvent = {
42
42
  widthDiff: E.width - window.innerWidth,
43
43
  hightDiff: E.height - window.innerHeight
44
- }, E.width = window.innerWidth, E.height = window.innerHeight, C.forEach((t) => t(a));
44
+ }, E.width = window.innerWidth, E.height = window.innerHeight, A.forEach((t) => t(a));
45
45
  }, be);
46
46
  }
47
47
  window.addEventListener("resize", ye);
@@ -49,16 +49,16 @@ const ge = {
49
49
  addOnReize: he,
50
50
  removeOnResize: ve
51
51
  };
52
- var G;
52
+ var q;
53
53
  const we = {
54
54
  widthForMobile: 900,
55
55
  dateFormat: "Y-m-d",
56
56
  /**
57
57
  * Для Москвы: +0300
58
58
  */
59
- gmt: (G = (/* @__PURE__ */ new Date()).toString().match(/GMT(\S+)/)) == null ? void 0 : G[1]
59
+ gmt: (q = (/* @__PURE__ */ new Date()).toString().match(/GMT(\S+)/)) == null ? void 0 : q[1]
60
60
  };
61
- var K;
61
+ var G;
62
62
  const $e = {
63
63
  /**
64
64
  * Device by size
@@ -89,7 +89,7 @@ const $e = {
89
89
  // См. core.options
90
90
  dateFormat: "Y-m-d",
91
91
  // См. core.options
92
- gmt: (K = (/* @__PURE__ */ new Date()).toString().match(/GMT(\S+)/)) == null ? void 0 : K[1]
92
+ gmt: (G = (/* @__PURE__ */ new Date()).toString().match(/GMT(\S+)/)) == null ? void 0 : G[1]
93
93
  }, D = (a) => {
94
94
  var t, o;
95
95
  if (!((o = (t = p.$) == null ? void 0 : t.ui) != null && o.tooltip)) {
@@ -259,8 +259,8 @@ const Se = { class: "top-avatar" }, Ve = ["src", "title"], Be = ["title"], Le =
259
259
  lastActiveTime: {}
260
260
  },
261
261
  setup(a) {
262
- q((n) => ({
263
- ed0c8a30: n.size + "px"
262
+ K((n) => ({
263
+ "566609b7": n.size + "px"
264
264
  }));
265
265
  const t = a, o = {
266
266
  user: {
@@ -352,7 +352,7 @@ ${s.value}` : ""),
352
352
  _: 3
353
353
  }, 8, ["class", "name", "title", "href", "type", "data-top-icon", "data-top-icon2", "disabled", "inProgress"]));
354
354
  }
355
- }), Re = "_progress_1f1nw_1", De = {
355
+ }), Re = "_progress_1hqxk_1", De = {
356
356
  "top-button": "top-button",
357
357
  "top-active": "top-active",
358
358
  "top-button-progress": "top-button-progress",
@@ -369,16 +369,16 @@ ${s.value}` : ""),
369
369
  "top-style_transparent": "top-style_transparent",
370
370
  "top-size_l": "top-size_l",
371
371
  "top-size_xl": "top-size_xl"
372
- }, Ae = {
372
+ }, Ce = {
373
373
  $style: De
374
- }, Yt = /* @__PURE__ */ y(Fe, [["__cssModules", Ae]]), Ce = { class: "top-forms-optionLabel" }, Pe = /* @__PURE__ */ w({
374
+ }, Yt = /* @__PURE__ */ y(Fe, [["__cssModules", Ce]]), Ae = { class: "top-forms-optionLabel" }, Pe = /* @__PURE__ */ w({
375
375
  __name: "controlLabel",
376
376
  props: {
377
377
  description: {},
378
378
  disabled: { type: Boolean }
379
379
  },
380
380
  setup(a) {
381
- return (t, o) => (u(), m("div", Ce, [
381
+ return (t, o) => (u(), m("div", Ae, [
382
382
  $("div", {
383
383
  class: v({
384
384
  "top-forms-optionLabel_title": !0,
@@ -403,7 +403,7 @@ ${s.value}` : ""),
403
403
  $style: We
404
404
  }, P = /* @__PURE__ */ y(Pe, [["__cssModules", Ne]]), Oe = ["name", "value", "indeterminate", "disabled"], He = /* @__PURE__ */ w({
405
405
  __name: "checkbox",
406
- props: /* @__PURE__ */ A({
406
+ props: /* @__PURE__ */ C({
407
407
  modelValue: { type: [Boolean, Array, Set] },
408
408
  name: {},
409
409
  value: {},
@@ -412,7 +412,7 @@ ${s.value}` : ""),
412
412
  indeterminate: { type: Boolean },
413
413
  isError: { type: Boolean }
414
414
  }, {
415
- modelValue: { type: [Boolean, Array, Set] },
415
+ modelValue: { type: Boolean },
416
416
  modelModifiers: {}
417
417
  }),
418
418
  emits: ["update:modelValue"],
@@ -461,7 +461,7 @@ ${s.value}` : ""),
461
461
  "top-error": "top-error"
462
462
  }, Ue = {
463
463
  $style: Ie
464
- }, Gt = /* @__PURE__ */ y(He, [["__cssModules", Ue]]), je = ["title"], Ye = /* @__PURE__ */ w({
464
+ }, qt = /* @__PURE__ */ y(He, [["__cssModules", Ue]]), je = ["title"], Ye = /* @__PURE__ */ w({
465
465
  __name: "hint",
466
466
  props: {
467
467
  hint: {}
@@ -473,11 +473,11 @@ ${s.value}` : ""),
473
473
  title: t.hint
474
474
  }, null, 8, je));
475
475
  }
476
- }), Ge = {
476
+ }), qe = {
477
477
  "top-hint": "top-hint"
478
- }, Ke = {
479
- $style: Ge
480
- }, qe = /* @__PURE__ */ y(Ye, [["__cssModules", Ke]]), Qe = ["data-top-icon", "data-top-icon2"], Xe = ["name", "title", "placeholder", "disabled", "readonly"], Je = {
478
+ }, Ge = {
479
+ $style: qe
480
+ }, Ke = /* @__PURE__ */ y(Ye, [["__cssModules", Ge]]), Qe = ["data-top-icon", "data-top-icon2"], Xe = ["name", "title", "placeholder", "disabled", "readonly"], Je = {
481
481
  key: 2,
482
482
  class: "top-formsCaption"
483
483
  }, Ze = /* @__PURE__ */ w({
@@ -608,7 +608,7 @@ const at = /* @__PURE__ */ w({
608
608
  d.value = i.target.value;
609
609
  };
610
610
  async function r(i) {
611
- const c = await import("./datepicker-C86O1mQq.es.js");
611
+ const c = await import("./datepicker-B28_yC8V.es.js");
612
612
  Y = c.oninput, e = c.connectDatepicker(i.target, {
613
613
  onSelect: () => f(i)
614
614
  }), e && e.datepicker("show");
@@ -644,7 +644,7 @@ const at = /* @__PURE__ */ w({
644
644
  "top-input_input-date": "top-input_input-date"
645
645
  }, nt = {
646
646
  $style: st
647
- }, Kt = /* @__PURE__ */ y(at, [["__cssModules", nt]]), it = { class: "top-inputRange" }, lt = /* @__PURE__ */ $("span", { class: "top-inputRange_dash" }, " — ", -1), rt = /* @__PURE__ */ w({
647
+ }, Gt = /* @__PURE__ */ y(at, [["__cssModules", nt]]), it = { class: "top-inputRange" }, lt = /* @__PURE__ */ $("span", { class: "top-inputRange_dash" }, " — ", -1), rt = /* @__PURE__ */ w({
648
648
  __name: "inputRange",
649
649
  setup(a) {
650
650
  return (t, o) => (u(), m("div", it, [
@@ -659,7 +659,7 @@ const at = /* @__PURE__ */ w({
659
659
  "top-input": "top-input"
660
660
  }, pt = {
661
661
  $style: dt
662
- }, qt = /* @__PURE__ */ y(rt, [["__cssModules", pt]]), ut = ["name", "value", "disabled"], ct = /* @__PURE__ */ w({
662
+ }, Kt = /* @__PURE__ */ y(rt, [["__cssModules", pt]]), ut = ["name", "value", "disabled"], ct = /* @__PURE__ */ w({
663
663
  __name: "radio",
664
664
  props: {
665
665
  modelValue: {},
@@ -802,8 +802,8 @@ const at = /* @__PURE__ */ w({
802
802
  },
803
803
  emits: ["update:modelValue"],
804
804
  setup(a, { emit: t }) {
805
- q((e) => ({
806
- c838a038: e.minHeight + "px"
805
+ K((e) => ({
806
+ c35baa86: e.minHeight + "px"
807
807
  }));
808
808
  const o = a, s = t, n = g({
809
809
  get() {
@@ -842,7 +842,7 @@ const at = /* @__PURE__ */ w({
842
842
  [J, n.value]
843
843
  ]),
844
844
  e.expandable ? (u(), m("div", wt, S(n.value + " "), 1)) : h("", !0),
845
- e.hint ? V((u(), M(qe, {
845
+ e.hint ? V((u(), M(Ke, {
846
846
  key: 1,
847
847
  class: "top-textarea_hint",
848
848
  hint: e.hint
@@ -865,7 +865,7 @@ const at = /* @__PURE__ */ w({
865
865
  class: "top-formsCaption"
866
866
  }, Et = /* @__PURE__ */ w({
867
867
  __name: "select",
868
- props: /* @__PURE__ */ A({
868
+ props: /* @__PURE__ */ C({
869
869
  modelValue: {},
870
870
  options: {},
871
871
  name: {},
@@ -881,7 +881,7 @@ const at = /* @__PURE__ */ w({
881
881
  },
882
882
  modelModifiers: {}
883
883
  }),
884
- emits: /* @__PURE__ */ A(["update:modelValue"], ["update:modelValue"]),
884
+ emits: /* @__PURE__ */ C(["update:modelValue"], ["update:modelValue"]),
885
885
  setup(a, { emit: t }) {
886
886
  const o = a, s = Q(a, "modelValue"), n = g(() => {
887
887
  const r = /* @__PURE__ */ new Map();
@@ -987,18 +987,18 @@ const at = /* @__PURE__ */ w({
987
987
  $style: Tt
988
988
  }, Zt = /* @__PURE__ */ y(Et, [["__cssModules", Ft]]), Rt = {
989
989
  "top-loadbar": "top-loadbar"
990
- }, Dt = {}, At = { class: "top-loadbar" };
991
- function Ct(a, t) {
992
- return u(), m("div", At);
990
+ }, Dt = {}, Ct = { class: "top-loadbar" };
991
+ function At(a, t) {
992
+ return u(), m("div", Ct);
993
993
  }
994
994
  const Pt = {
995
995
  $style: Rt
996
- }, Wt = /* @__PURE__ */ y(Dt, [["render", Ct], ["__cssModules", Pt]]);
996
+ }, Wt = /* @__PURE__ */ y(Dt, [["render", At], ["__cssModules", Pt]]);
997
997
  export {
998
998
  Yt as B,
999
999
  p as C,
1000
1000
  ge as E,
1001
- qe as H,
1001
+ Ke as H,
1002
1002
  j as I,
1003
1003
  Wt as L,
1004
1004
  Jt as T,
@@ -1014,13 +1014,13 @@ export {
1014
1014
  Ht as i,
1015
1015
  U as j,
1016
1016
  jt as k,
1017
- Gt as l,
1017
+ qt as l,
1018
1018
  P as m,
1019
- Kt as n,
1020
- qt as o,
1019
+ Gt as n,
1020
+ Kt as o,
1021
1021
  Xt as p,
1022
1022
  Zt as q,
1023
1023
  Qt as r,
1024
1024
  Ut as s
1025
1025
  };
1026
- //# sourceMappingURL=forms-gb7uf2K8.es.js.map
1026
+ //# sourceMappingURL=forms-U97cW1zp.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-U97cW1zp.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/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/input/input.vue","../../src/components/forms/inputDate/inputDate.vue","../../src/components/forms/radio/radio.vue","../../src/components/forms/switcher/switcher.vue","../../src/components/forms/textarea/textarea.vue","../../src/components/forms/select/select.vue","../../src/components/forms/loadbar/loadbar.vue"],"sourcesContent":["export function isRetina() {\n\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\n}\n\n// определить, является ли устройство мобильным\nexport function isMobile(): boolean {\n\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\n}\n\n// определить, открыт ли сайт в приложении\nexport function isApp() {\n\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\n}\n\n// определить, является ли OS пользователя macOS\nexport function isMacOS() {\n\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\n}\n\n// определить, является ли текущий браузер пользователя Safari\nexport function isSafari() {\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 * @returns {'Ctrl'|'⌘'}\n */\nexport function getCommandKeyLabel(): 'Ctrl' | '⌘' {\n\tif (isMacOS()) {\n\t\treturn '⌘';\n\t} else {\n\t\treturn 'Ctrl';\n\t}\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\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;","/**\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 { _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}\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\n/**\n * Получить объект Date из строки\n * @param date - строка с датой\n */\nexport function stringToDate(date: string) {\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 * Генерация строки с датой в формате Y-m-d H:i:s или в формате Core.state.dateFormat, если указан useFormat = true\n * @param {?number} timestamp\n * @param {?boolean} useFormat\n * @param {0|1|2|3} time - 0: только дата, 1: дата и часы, 2: дата и часы с минутами, 3: дата и часы с минутами и секундами\n */\nexport function genDate(timestamp: number | undefined = 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 * Перевод даты в формат пользователя\n * @param {string} date - строка в формате Y-m-d H:i:s\n * @param {0|1|2|3} time - 0: только дата, 1: дата и часы, 2: дата и часы с минутами, 3: дата и часы с минутами и секундами\n * @param {string} emptyValue - значение, которое надо вернуть, если дата не указана\n */\nexport function dateFormat(date: string, time: 0 | 1 | 2 | 3 = 2, emptyValue: string = Core.L.Not_date): string {\n\tif (!date || date.substring(0, 10) === '0000-00-00') {\n\t\tif (emptyValue && emptyValue !== '0000-00-00') {\n\t\t\treturn emptyValue;\n\t\t}\n\t}\n\n\tconst dateFormat = Core.state.dateFormat.toLowerCase();\n\n\tlet dateForObj = date.substring(0, 10);\n\n\tif (dateForObj.length === 7) {\n\t\tdateForObj += '-01';\n\t}\n\n\tdateForObj += ' 00:00';\n\n\t// safari fix\n\tdateForObj = dateForObj.replace(/-/g, '/');\n\n\tconst dateObject = new Date(dateForObj);\n\tif (isNaN(Number(dateObject))) {\n\t\treturn emptyValue;\n\t}\n\n\tlet result = dateFormat.\n\t\treplace('y', String(dateObject.getFullYear()).padStart(2, '0')).\n\t\treplace('m', String(dateObject.getMonth() + 1).padStart(2, '0')).\n\t\treplace('d', String(dateObject.getDate()).padStart(2, '0'));\n\n\tif (date.length > 10) {\n\t\tswitch (time) {\n\t\t\t// часы\n\t\t\tcase 1:\n\t\t\t\tresult += ' ' + date.substring(11, 13);\n\n\t\t\t\tbreak;\n\n\t\t\t// часы и минуты\n\t\t\tcase 2:\n\t\t\t\tresult += ' ' + date.substring(11, 16);\n\n\t\t\t\tbreak;\n\n\t\t\t// часы, минуты и секунды\n\t\t\tcase 3:\n\t\t\t\tresult += ' ' + date.substring(11, 19);\n\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Перевод даты из формата пользователя в системный формат\n * @param {string} date - строка в формате Y-m-d H:i:s\n * @param {string} emptyValue - значение, которое надо вернуть, если дата не указана\n */\nexport function dateUnformat(date: string, emptyValue: string = Core.L.Not_date): string {\n\tif (!date) {\n\t\treturn emptyValue;\n\t}\n\n\tif (date.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\n\t\treturn date;\n\t}\n\n\tconst dateFormat = Core.state.dateFormat.toLowerCase();\n\n\tconst dateChunks = date.split(/\\W/);\n\tconst dateFormatChunks = dateFormat.split(/\\W/);\n\n\tlet d = '';\n\tlet m = '';\n\tlet y = '';\n\n\tdateFormatChunks.forEach((type, index) => {\n\t\tswitch (type) {\n\t\t\tcase 'd':\n\t\t\t\td = dateChunks[index];\n\n\t\t\t\tbreak;\n\t\t\tcase 'm':\n\t\t\t\tm = dateChunks[index];\n\n\t\t\t\tbreak;\n\t\t\tcase 'y':\n\t\t\t\ty = dateChunks[index];\n\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tlet result = y + '-' + m + '-' + d;\n\n\tif (!result.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\n\t\tconsole.info('Неверный формат даты, будет возращена текущая дата, ' + result);\n\n\t\tresult = genDate((new Date()).getTime(), false).substring(0, 10);\n\t}\n\n\treturn result;\n}\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { Props } from './avatar';\nimport { dateFormat } from '@/core/utils/date';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 64,\n});\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 + ': ' + 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\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 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>","<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, '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 {\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>","<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>"],"names":["isRetina","isMobile","isApp","isMacOS","isSafari","isChrome","isSafari2","getCommandKeyLabel","Page","onResizeDelay","onResizeTimer","onResizeListeners","windowSize","addOnReize","listener","removeOnResize","onResize","e","callback","Events","options","_a","state","$","el","_b","Core","tvTooltipGenOptions","binding","vnode","tooltip","_prevVnode","instance","_binding","_vnode","genWindow","_window","reactive","style","type","media","elStyle","app","options2","device","stringToDate","date","genDate","timestamp","useFormat","time","Y","m","H","i","s","dateFormat","emptyValue","dateFormat2","dateForObj","dateObject","result","dateUnformat","dateChunks","dateFormatChunks","d","y","index","props","__props","i18n","titleStatus","computed","tagName","model","useModel","emit","__emit","localValue","value","placeholder","clean","event","useNativeDatepicker","onInputLazy","_e","onUnmounted","$el","ref","oninput","onchange","dateFormatted","init","datepicker","value2","optionByValue","res","option","genOption","children","subOption","subIndex","flatOptionByValue","title","watch","optionIcon","selectNextValue","listEnabledValues","nextIndex","_sfc_render","_ctx","_cache"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- define(["require","exports","vue","./forms-DkNAMd-D.amd","../popup/worker.amd","../require/css.amd!../assets/listItem.css"],function(V,c,e,d,m){"use strict";if(typeof e>"u")var e=window.Vue;const f=e.defineComponent({__name:"opener",props:{id:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByHover:{type:Boolean},posBy:{default:"fixed"}},setup(r){const n=r,s=n.id||Math.random()+"";let p;function i(t){setTimeout(()=>{p=t.nextElementSibling,p&&a(p)})}e.onUpdated(()=>{p&&a(p)});function a(t){t.dataset.topPopup="vue-"+s,t.dataset.topPopupId=s,t.dataset.topPopupP=n.pos,t.dataset.topPopupPosBy=n.posBy,t.dataset.topPopupNotch=n.notch?"true":"",t.dataset.topPopupOpenByHover=n.openByHover?"true":""}return(t,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("template",{ref:i}),e.renderSlot(t.$slots,"default")],64))}}),k={key:0,class:"top-popup_header"},C={key:0,class:"top-as-a closer"},v={key:1,class:"top-popup_widget"},h={key:2,class:"top-popup_content"},_={key:4,class:"top-popup_footer"},$=e.defineComponent({__name:"popup",props:{id:{default:""},class:{},transitionDuration:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByHover:{type:Boolean},posBy:{default:"fixed"}},emits:["open","close","scrollContentList"],setup(r,{expose:n,emit:s}){const p=r,i=s,a={popup:void 0};n(a);const t=p.id||Math.random()+"",u=e.ref(null),l={onOpen:async o=>{o.elPopupInner.innerText="",u.value=o.elPopupInner,l.opened=!0,l.popup=o,a.popup=o,i("open")},onClose:o=>{u.value=null,l.opened=!1,l.popup=void 0,i("close")},classRef:e.toRef(p,"class"),opened:!1,popup:void 0,transitionDurationRef:e.toRef(p,"transitionDuration")};return m.PopupWorker.regVueComponent(t,l),e.onUnmounted(()=>{m.PopupWorker.unregVueComponent(t)}),(o,B)=>{var y;return e.openBlock(),e.createElementBlock(e.Fragment,null,[o.$slots.opener?(e.openBlock(),e.createBlock(f,{key:0,id:e.unref(t),pos:o.pos,posBy:o.posBy,notch:o.notch,openByHover:o.openByHover},{default:e.withCtx(()=>[e.renderSlot(o.$slots,"opener")]),_:3},8,["id","pos","posBy","notch","openByHover"])):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createBlock(e.Teleport,{key:1,to:u.value},[o.$slots.header||e.unref(d.Core).state.isMobile?(e.openBlock(),e.createElementBlock("div",k,[e.unref(d.Core).state.isMobile?(e.openBlock(),e.createElementBlock("span",C,e.toDisplayString((y=l.popup)==null?void 0:y.options.i18n.Close),1)):e.createCommentVNode("",!0),e.renderSlot(o.$slots,"header")])):e.createCommentVNode("",!0),o.$slots.widget?(e.openBlock(),e.createElementBlock("div",v,[e.renderSlot(o.$slots,"widget")])):e.createCommentVNode("",!0),o.$slots.content?(e.openBlock(),e.createElementBlock("div",h,[e.renderSlot(o.$slots,"content")])):e.createCommentVNode("",!0),o.$slots.contentList?(e.openBlock(),e.createElementBlock("ul",{key:3,class:"top-popup_content",onScroll:B[0]||(B[0]=S=>o.$emit("scrollContentList",S))},[e.renderSlot(o.$slots,"contentList")],32)):e.createCommentVNode("",!0),o.$slots.footer?(e.openBlock(),e.createElementBlock("div",_,[e.renderSlot(o.$slots,"footer")])):e.createCommentVNode("",!0)],8,["to"])):e.createCommentVNode("",!0)],64)}}}),P=e.defineComponent({inheritAttrs:!1,__name:"listItem",props:{type:{default:"button"},closeByClick:{type:Boolean,default:!0}},setup(r){const n=r;return(s,p)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass({"top-popup_liNoSelectable":n.type!=="button"})},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.$attrs.href?"a":"div"),e.mergeProps({class:{"top-popup_listItem":!0,"top-popup_listItem-button":n.type==="button",a:n.type==="button","top-popup_listItem-title":n.type==="title","top-popup_listItem-delimiter":n.type==="delimiter","top-popup-noCloser":!s.closeByClick}},s.$attrs),{default:e.withCtx(()=>[e.renderSlot(s.$slots,"default")]),_:3},16,["class"]))],2))}});c._sfc_main=$,c._sfc_main$1=f,c._sfc_main$2=P});
2
- //# sourceMappingURL=listItem.vue_vue_type_script_setup_true_lang-2TAzIZZA.amd.js.map
1
+ define(["require","exports","vue","./forms-DNRGCC9P.amd","../popup/worker.amd","../require/css.amd!../assets/listItem.css"],function(V,c,e,d,m){"use strict";if(typeof e>"u")var e=window.Vue;const f=e.defineComponent({__name:"opener",props:{id:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByHover:{type:Boolean},posBy:{default:"fixed"}},setup(r){const n=r,s=n.id||Math.random()+"";let p;function i(t){setTimeout(()=>{p=t.nextElementSibling,p&&a(p)})}e.onUpdated(()=>{p&&a(p)});function a(t){t.dataset.topPopup="vue-"+s,t.dataset.topPopupId=s,t.dataset.topPopupP=n.pos,t.dataset.topPopupPosBy=n.posBy,t.dataset.topPopupNotch=n.notch?"true":"",t.dataset.topPopupOpenByHover=n.openByHover?"true":""}return(t,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("template",{ref:i}),e.renderSlot(t.$slots,"default")],64))}}),k={key:0,class:"top-popup_header"},C={key:0,class:"top-as-a closer"},v={key:1,class:"top-popup_widget"},h={key:2,class:"top-popup_content"},_={key:4,class:"top-popup_footer"},$=e.defineComponent({__name:"popup",props:{id:{default:""},class:{},transitionDuration:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByHover:{type:Boolean},posBy:{default:"fixed"}},emits:["open","close","scrollContentList"],setup(r,{expose:n,emit:s}){const p=r,i=s,a={popup:void 0};n(a);const t=p.id||Math.random()+"",u=e.ref(null),l={onOpen:async o=>{o.elPopupInner.innerText="",u.value=o.elPopupInner,l.opened=!0,l.popup=o,a.popup=o,i("open")},onClose:o=>{u.value=null,l.opened=!1,l.popup=void 0,i("close")},classRef:e.toRef(p,"class"),opened:!1,popup:void 0,transitionDurationRef:e.toRef(p,"transitionDuration")};return m.PopupWorker.regVueComponent(t,l),e.onUnmounted(()=>{m.PopupWorker.unregVueComponent(t)}),(o,B)=>{var y;return e.openBlock(),e.createElementBlock(e.Fragment,null,[o.$slots.opener?(e.openBlock(),e.createBlock(f,{key:0,id:e.unref(t),pos:o.pos,posBy:o.posBy,notch:o.notch,openByHover:o.openByHover},{default:e.withCtx(()=>[e.renderSlot(o.$slots,"opener")]),_:3},8,["id","pos","posBy","notch","openByHover"])):e.createCommentVNode("",!0),u.value?(e.openBlock(),e.createBlock(e.Teleport,{key:1,to:u.value},[o.$slots.header||e.unref(d.Core).state.isMobile?(e.openBlock(),e.createElementBlock("div",k,[e.unref(d.Core).state.isMobile?(e.openBlock(),e.createElementBlock("span",C,e.toDisplayString((y=l.popup)==null?void 0:y.options.i18n.Close),1)):e.createCommentVNode("",!0),e.renderSlot(o.$slots,"header")])):e.createCommentVNode("",!0),o.$slots.widget?(e.openBlock(),e.createElementBlock("div",v,[e.renderSlot(o.$slots,"widget")])):e.createCommentVNode("",!0),o.$slots.content?(e.openBlock(),e.createElementBlock("div",h,[e.renderSlot(o.$slots,"content")])):e.createCommentVNode("",!0),o.$slots.contentList?(e.openBlock(),e.createElementBlock("ul",{key:3,class:"top-popup_content",onScroll:B[0]||(B[0]=S=>o.$emit("scrollContentList",S))},[e.renderSlot(o.$slots,"contentList")],32)):e.createCommentVNode("",!0),o.$slots.footer?(e.openBlock(),e.createElementBlock("div",_,[e.renderSlot(o.$slots,"footer")])):e.createCommentVNode("",!0)],8,["to"])):e.createCommentVNode("",!0)],64)}}}),P=e.defineComponent({inheritAttrs:!1,__name:"listItem",props:{type:{default:"button"},closeByClick:{type:Boolean,default:!0}},setup(r){const n=r;return(s,p)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass({"top-popup_liNoSelectable":n.type!=="button"})},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.$attrs.href?"a":"div"),e.mergeProps({class:{"top-popup_listItem":!0,"top-popup_listItem-button":n.type==="button",a:n.type==="button","top-popup_listItem-title":n.type==="title","top-popup_listItem-delimiter":n.type==="delimiter","top-popup-noCloser":!s.closeByClick}},s.$attrs),{default:e.withCtx(()=>[e.renderSlot(s.$slots,"default")]),_:3},16,["class"]))],2))}});c._sfc_main=$,c._sfc_main$1=f,c._sfc_main$2=P});
2
+ //# sourceMappingURL=listItem.vue_vue_type_script_setup_true_lang-C67aHWhi.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listItem.vue_vue_type_script_setup_true_lang-C67aHWhi.amd.js","sources":["../../src/components/popup/popup/opener.vue","../../src/components/popup/popup/popup.vue","../../src/components/popup/popup/listItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onUpdated, 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 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);\n\n// см. lib/popup\nconst onOpen = async (popup: PopupClass) => {\n\tpopup.elPopupInner.innerText = '';\n\n\telPopupRef.value = popup.elPopupInner;\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","render","el","elOpener","renderOpener","elOpener2","emit","__emit","__expose","expose","elPopupRef","vue","popup","vueConnector","_popup","popup_worker"],"mappings":"qWAIA,MAAAA,EAAAC,EAMAC,EAAAF,EAAA,IAAA,KAAA,OAAA,EAAA,SASA,SAAAG,EAAAC,EAAA,iBAEEC,EAAAD,EAAA,sBAGCE,EAAAD,CAAA,CACD,CAAA,sBAMAC,EAAAD,CAAA,CACD,CAAA,EAGD,SAAAC,EAAAC,EAAA,6BAECA,EAAA,QAAA,WAAAL,4DAGAK,EAAA,QAAA,cAAAP,EAAA,MAAA,OAAA,GACAO,EAAA,QAAA,oBAAAP,EAAA,YAAA,OAAA,6kBCjCD,MAAAA,EAAAC,EAOAO,EAAAC,iBAGQ,EAERC,EAAAC,CAAA,EAEA,MAAAT,EAAAF,EAAA,IAAA,KAAA,OAAA,EAAA,GACAY,EAAAC,EAAA,IAAA,IAAA,KA0BqB,OAvBrB,MAAAC,GAAA,CACCA,EAAA,aAAA,UAAA,GAEAF,EAAA,MAAAE,EAAA,aAEAC,EAAA,OAAA,GACAA,EAAA,MAAAD,EAEAH,EAAA,MAAAG,EAEAN,EAAA,MAAA,CAAW,EAcX,QAVDQ,GAAA,CACCJ,EAAA,MAAA,KAEAG,EAAA,OAAA,GACAA,EAAA,MAAA,OAEAP,EAAA,OAAA,CAAY,EAKZ,SAAAK,EAAA,MAAAb,EAAA,OAAA,yBAGO,sBAAAa,EAAA,MAAAb,EAAA,oBAAA,CACiD,+DAMxDiB,EAAA,YAAA,kBAAAf,CAAA,CAA2B,CAAA,q/CCtD5B,MAAAF,EAAAC"}
@@ -1,6 +1,6 @@
1
1
  import { insertToPage as b } from "../utils/css.js";
2
2
  import { defineComponent as B, onUpdated as H, openBlock as s, createElementBlock as l, Fragment as k, createElementVNode as S, renderSlot as a, ref as w, toRef as C, onUnmounted as D, createBlock as y, unref as f, withCtx as P, createCommentVNode as r, Teleport as N, toDisplayString as T, normalizeClass as L, resolveDynamicComponent as M, mergeProps as R } from "vue";
3
- import { C as $ } from "./forms-gb7uf2K8.es.js";
3
+ import { C as $ } from "./forms-U97cW1zp.es.js";
4
4
  import { PopupWorker as _ } from "../popup/worker.js";
5
5
  const I = ["../assets/listItem.css"].map((i) => import.meta.resolve(i));
6
6
  await b(I);
@@ -161,4 +161,4 @@ export {
161
161
  V as a,
162
162
  Q as b
163
163
  };
164
- //# sourceMappingURL=listItem.vue_vue_type_script_setup_true_lang-Caw4oFU-.es.js.map
164
+ //# sourceMappingURL=listItem.vue_vue_type_script_setup_true_lang-C_o5sC8m.es.js.map