@topvisor/ui 0.9.6 → 0.9.7

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 (111) hide show
  1. package/.chunks/datepicker-0tFN0clU.amd.js +234 -0
  2. package/.chunks/datepicker-0tFN0clU.amd.js.map +1 -0
  3. package/.chunks/datepicker-8geHBNBn.es.js +275 -0
  4. package/.chunks/datepicker-8geHBNBn.es.js.map +1 -0
  5. package/.chunks/{forms-260b848a.es.js → forms-dneLtREE.es.js} +14 -14
  6. package/.chunks/forms-dneLtREE.es.js.map +1 -0
  7. package/.chunks/{forms-2250b8db.amd.js → forms-hIalWiGK.amd.js} +3 -3
  8. package/.chunks/forms-hIalWiGK.amd.js.map +1 -0
  9. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-bLJ0dcPn.amd.js +2 -0
  10. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-bLJ0dcPn.amd.js.map +1 -0
  11. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-qWOlkuQ3.es.js +148 -0
  12. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-qWOlkuQ3.es.js.map +1 -0
  13. package/.chunks/{popup-3a721019.amd.js → popup-2azH2gGP.amd.js} +378 -378
  14. package/.chunks/popup-2azH2gGP.amd.js.map +1 -0
  15. package/.chunks/{popup-90783ce2.es.js → popup-GFcVEZf5.es.js} +423 -423
  16. package/.chunks/popup-GFcVEZf5.es.js.map +1 -0
  17. package/README.md +80 -80
  18. package/assets/forms.css +1 -1
  19. package/assets/light.css +1 -1
  20. package/core/core.amd.js +1 -1
  21. package/core/core.js +1 -1
  22. package/forms/forms.amd.js +1 -1
  23. package/forms/forms.js +1 -1
  24. package/forms/helpers.amd.js.map +1 -1
  25. package/forms/helpers.js.map +1 -1
  26. package/formsExt/formsExt.amd.js +1 -1
  27. package/formsExt/formsExt.amd.js.map +1 -1
  28. package/formsExt/formsExt.js +1 -1
  29. package/formsExt/formsExt.js.map +1 -1
  30. package/icomoon/demo-files/demo.css +161 -161
  31. package/icomoon/demo-files/demo.js +30 -30
  32. package/icomoon/demo.html +2945 -2945
  33. package/icomoon/fonts/Topvisor-2.svg +232 -232
  34. package/icomoon/style.css +647 -647
  35. package/package.json +19 -22
  36. package/popup/popup.amd.js +1 -1
  37. package/popup/popup.amd.js.map +1 -1
  38. package/popup/popup.js +7 -146
  39. package/popup/popup.js.map +1 -1
  40. package/popup/worker.amd.js +1 -1
  41. package/popup/worker.amd.js.map +1 -1
  42. package/popup/worker.js +2 -2
  43. package/popup/worker.js.map +1 -1
  44. package/require/css.amd.js +11 -11
  45. package/src/components/forms/avatar/avatar.stories.d.ts +1 -1
  46. package/src/components/forms/avatar/avatar.vue.d.ts +1 -1
  47. package/src/components/forms/button/button.d.ts +2 -2
  48. package/src/components/forms/button/button.vue.d.ts +1 -1
  49. package/src/components/forms/checkbox/checkbox.vue.d.ts +1 -1
  50. package/src/components/forms/controlLabel/controlLabel.vue.d.ts +1 -1
  51. package/src/components/forms/hint/hint.stories.d.ts +2 -2
  52. package/src/components/forms/hint/hint.vue.d.ts +1 -1
  53. package/src/components/forms/input/input.d.ts +2 -2
  54. package/src/components/forms/input/input.vue.d.ts +1 -1
  55. package/src/components/forms/inputDate/inputDate.d.ts +2 -2
  56. package/src/components/forms/inputDate/inputDate.stories.d.ts +1 -1
  57. package/src/components/forms/inputDate/inputDate.vue.d.ts +1 -1
  58. package/src/components/forms/inputRange/inputRange.vue.d.ts +1 -1
  59. package/src/components/forms/radio/radio.vue.d.ts +1 -1
  60. package/src/components/forms/select/select.d.ts +2 -2
  61. package/src/components/forms/select/select.stories.d.ts +1 -1
  62. package/src/components/forms/select/select.vue.d.ts +1 -1
  63. package/src/components/forms/switcher/switcher.vue.d.ts +1 -1
  64. package/src/components/forms/textarea/textarea.stories.d.ts +1 -1
  65. package/src/components/forms/textarea/textarea.vue.d.ts +1 -1
  66. package/src/components/formsExt/editArea/editArea.d.ts +1 -1
  67. package/src/components/formsExt/editArea/editArea.stories.d.ts +1 -1
  68. package/src/components/formsExt/editArea/editArea.vue.d.ts +1 -1
  69. package/src/components/formsExt/editInput/editInput.d.ts +2 -2
  70. package/src/components/formsExt/editInput/editInput.vue.d.ts +1 -1
  71. package/src/components/formsExt/radioGroup/radioGroup.d.ts +2 -2
  72. package/src/components/formsExt/radioGroup/radioGroup.stories.d.ts +1 -1
  73. package/src/components/formsExt/radioGroup/radioGroup.vue.d.ts +1 -1
  74. package/src/components/popup/popup/listItem.vue.d.ts +1 -1
  75. package/src/components/popup/popup/opener.vue.d.ts +1 -1
  76. package/src/components/popup/popup/popup.vue.d.ts +1 -1
  77. package/src/components/tabs/tabs/content.vue.d.ts +1 -1
  78. package/src/components/tabs/tabs/tab.vue.d.ts +1 -1
  79. package/src/components/tabs/tabs/tabs.stories.d.ts +2 -2
  80. package/src/components/tabs/tabs/tabs.vue.d.ts +1 -1
  81. package/src/components/tabsView/tabsView/content.vue.d.ts +1 -1
  82. package/src/components/tabsView/tabsView/menu.vue.d.ts +1 -1
  83. package/src/components/tabsView/tabsView/menuDelimeter.vue.d.ts +1 -1
  84. package/src/components/tabsView/tabsView/menuItem.vue.d.ts +1 -1
  85. package/src/components/tabsView/tabsView/menuTitle.vue.d.ts +1 -1
  86. package/src/components/tabsView/tabsView/tabsView.d.ts +1 -1
  87. package/src/components/tabsView/tabsView/tabsView.vue.d.ts +1 -1
  88. package/src/core/core/core.d.ts +1 -1
  89. package/tabs/tabs.amd.js +1 -1
  90. package/tabs/tabs.js +1 -1
  91. package/tabsView/tabsView.amd.js +1 -1
  92. package/tabsView/tabsView.amd.js.map +1 -1
  93. package/tabsView/tabsView.js +27 -27
  94. package/tabsView/tabsView.js.map +1 -1
  95. package/utils/css.amd.js.map +1 -1
  96. package/utils/css.js.map +1 -1
  97. package/utils/date.amd.js +1 -1
  98. package/utils/date.js +1 -1
  99. package/utils/device.amd.js +1 -1
  100. package/utils/device.js +1 -1
  101. package/utils/dom.amd.js.map +1 -1
  102. package/utils/dom.js.map +1 -1
  103. package/.chunks/datepicker-2f8eb2f7.amd.js +0 -234
  104. package/.chunks/datepicker-2f8eb2f7.amd.js.map +0 -1
  105. package/.chunks/datepicker-a62ae260.es.js +0 -275
  106. package/.chunks/datepicker-a62ae260.es.js.map +0 -1
  107. package/.chunks/forms-2250b8db.amd.js.map +0 -1
  108. package/.chunks/forms-260b848a.es.js.map +0 -1
  109. package/.chunks/popup-3a721019.amd.js.map +0 -1
  110. package/.chunks/popup-90783ce2.es.js.map +0 -1
  111. /package/assets/{popup.css → listItem.css} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-dneLtREE.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/core/core.ts","../../src/core/utils/date.ts","../../src/components/forms/avatar/avatar.vue","../../src/components/forms/button/button.vue","../../src/components/forms/checkbox/checkbox.vue","../../src/components/forms/input/input.vue","../../src/components/forms/inputDate/inputDate.vue","../../src/components/forms/radio/radio.vue","../../src/components/forms/switcher/switcher.vue","../../src/components/forms/textarea/textarea.vue","../../src/components/forms/select/select.vue"],"sourcesContent":["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';\n\nconst _window: any = window;\n\nconst $ = (el: VNode) => {\n\tif (!_window?.jQuery?.ui?.tooltip) {\n\t\tconsole.info('Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip');\n\n\t\treturn;\n\t}\n\n\treturn _window.jQuery(el);\n};\n\nconst tvTooltipGenOptions = (binding: DirectiveBinding, vnode: VNode) => {\n\tconst options = binding.value ?? {};\n\n\toptions.content ??= vnode.props?.title;\n\toptions.content = String(options.content).replace(/\\r\\n|\\r|\\n/g, '<br>');\n\n\toptions.position ??= {\n\t\tmy: 'bottom-18px',\n\t\tat: 'top center',\n\t};\n\n\treturn options;\n};\n\nconst tooltip = {\n\tmounted(el: VNode, binding: DirectiveBinding, vnode: VNode) {\n\t\t$(el)?.tooltip(tvTooltipGenOptions(binding, vnode));\n\t},\n\n\tupdated(el: VNode, binding: DirectiveBinding, vnode: VNode, _prevVnode: VNode) {\n\t\t/**\n\t\t * В результате обновления может быть открыто несколько тултипов поэтому изменить опции, без перерисовки тултипа\n\t\t */\n\t\tconst options = tvTooltipGenOptions(binding, vnode);\n\t\tconst instance = $(el)?.tooltip('instance');\n\t\tif (!instance) {\n\t\t\treturn;\n\t\t}\n\n\t\tinstance.options = {\n\t\t\t...instance.options,\n\t\t\t...options,\n\t\t};\n\t},\n\n\tunmounted(el: VNode, binding: DirectiveBinding, vnode: VNode) {\n\t\t$(el)?.tooltip('destroy');\n\t},\n} satisfies ObjectDirective;\n\nexport default tooltip;","import { reactive } from 'vue';\nimport { 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';\n\nconst _window: any = window;\n\nclass Core {\n\n\t/**\n\t * Настройки словаря\n\t */\n\tstatic L = reactive({\n\t\tNot_date: 'Not date',\n\t});\n\n\tstatic page = _window?.page || {};\n\n\tstatic Page = Page;\n\n\tstatic options = options;\n\n\tstatic state = reactive({ ...state });\n\n\tstatic matchMediaIsMobile?: MediaQueryList;\n\n\t/**\n\t * Добавить на страницу стили, используется для загрузки стилей из js\n\t *\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\n\t * @param style - css стили в строке\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\n\t */\n\tstatic appendStyle(style: string, type: '' | 'm' | 'pc' = ''): void {\n\t\tlet media = 'all';\n\n\t\tif (type === 'm') {\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tif (type === 'pc') {\n\t\t\tmedia = '(min-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tconst elStyle = document.createElement('style');\n\t\telStyle.innerHTML = style;\n\t\telStyle.media = media;\n\n\t\tdocument.head.append(elStyle);\n\t}\n\n\t/**\n\t * Установить как плагин в прилоежнии Vue\n\t * Core.state является общим для всех приложений Vue на странице\n\t * Core.options является общим для всех приложений Vue на странице\n\t * @param app - Vue App\n\t * @param {typeof options} options - параметры UI\n\t */\n\tstatic install(app: any, options: typeof this.options) {\n\t\tCore.defineOptions(options);\n\n\t\tapp.provide('top-core', Core);\n\n\t\tthis.installDirectives(app);\n\t}\n\n\tstatic installDirectives(app: any) {\n\t\tapp.directive('top-tooltip', directiveTooltip);\n\t}\n\n\t/**\n\t * Установить конфигурацию UI\n\t * @param {typeof options} options\n\t */\n\tstatic defineOptions(options: typeof this.options) {\n\t\tif (options?.widthForMobile) {\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\n\t\t}\n\n\t\tif (options?.dateFormat) {\n\t\t\tthis.options.dateFormat = options.dateFormat;\n\t\t}\n\n\t\tif (options?.gmt) {\n\t\t\tthis.options.gmt = options.gmt;\n\t\t}\n\n\t\tCore.setState();\n\t}\n\n\tstatic setState() {\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\n\n\t\tCore.state.isMobileUA = 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, 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}\"\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 './checkbox';\nimport ControlLabel from '../controlLabel/controlLabel.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-forms-optionWrapper']: true,\n\t\t\t['top-checkbox']: true,\n\t\t\t['top-checkbox_' + name]: name !== '',\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-error']: isError && !disabled,\n\t\t}\"\n\t>\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\t:class=\"{\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-forms-option']: true,\n\t\t\t\t['top-checkbox_input']: true,\n\t\t\t\t['top-error']: isError && !disabled,\n\t\t\t}\"\n\t\t\t:name=\"name\"\n\t\t\tv-model=\"localValue\"\n\t\t\t:value=\"value\"\n\t\t\t:indeterminate=\"indeterminate\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\n\t\t<ControlLabel\n\t\t\tv-if=\"$slots.default\"\n\t\t\t:description=\"description\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\t\t\t<!-- @slot Слот с заголовком -->\n\t\t\t<slot></slot>\n\t\t</ControlLabel>\n\t</label>\n</template>\n\n<style module>\n.top-checkbox {\n\tcursor: pointer;\n\tdisplay: inline-flex;\n}\n\n.top-checkbox_input {\n\tcursor: inherit;\n\tborder-radius: 4px;\n\tbackground: var(--content-background-color);\n\tborder: 1px solid var(--top-forms-border-color);\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\n}\n\n.top-checkbox_input:before {\n\tcontent: ' ';\n\tcolor: #FFF;\n\tfont-family: 'Topvisor-2';\n\tfont-size: 16px;\n}\n\n.top-checkbox_input:hover {\n\tborder-color: var(--top-forms-option-color);\n\tbackground: var(--color-theme-50)\n}\n\n/* checked / indeterminate */\n.top-checkbox_input:checked,\n.top-checkbox_input:indeterminate {\n\tborder-color: var(--top-forms-option-color);\n\tbackground: var(--top-forms-option-color);\n}\n\n.top-checkbox_input:checked:before {\n\tcontent: '';\n}\n\n.top-checkbox_input:indeterminate:before {\n\tcontent: '';\n}\n\n.top-checkbox_input:checked:hover,\n.top-checkbox_input:indeterminate:hover {\n\tborder-color: var(--top-forms-option-color-hover);\n\tbackground: var(--top-forms-option-color-hover);\n}\n\n/* disabled selected */\n.top-checkbox_input:disabled {\n\tborder-color: var(--color-line-1-opacity);\n\tbackground: var(--color-theme-50);\n}\n\n.top-checkbox_input:checked:disabled,\n.top-checkbox_input:indeterminate:disabled {\n\tborder-color: transparent;\n\tbackground: var(--color-theme-400);\n}\n\n/* isError */\n.top-checkbox_input.top-error {\n\tborder-color: var(--color-negative);\n}\n\n.top-checkbox_input.top-error:hover {\n\tborder-color: var(--color-negative-2);\n}\n\n/* isError selected */\n.top-checkbox_input:checked.top-error,\n.top-checkbox_input:indeterminate.top-error {\n\tbackground: var(--color-negative);\n}\n\n.top-checkbox_input:checked.top-error:hover,\n.top-checkbox_input:indeterminate.top-error:hover {\n\tbackground: var(--color-negative-2);\n}\n</style>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } from './input';\n\ndefineOptions({\n\tinheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n\tcaptionType: '',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\nconst placeholder = computed(() => {\n\tif (props.addCleaner && !props.title) {\n\t\treturn '';\n\t}\n\tif (props.captionType !== '') {\n\t\treturn '';\n\t}\n\n\treturn props.title;\n});\n\nconst clean = () => {\n\temit('update:modelValue', '');\n};\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-input']: true,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-input-' + modificator]: !!modificator,\n\t\t\t['top-input-withCleaner']: addCleaner && localValue && localValue !== '0000-00-00',\n\t\t\t['top-formsCaptionWrapper']: captionType !== '',\n\t\t\t['top-formsCaptionWrapper-always']: captionType === 'top',\n\t\t}\"\n\t\t:data-top-icon=\"icon\"\n\t\t:data-top-icon2=\"icon2\"\n\t>\n\t\t<input\n\t\t\ttype=\"text\"\n\t\t\t:class=\"{\n\t\t\t\t['top-input_input']: true,\n\t\t\t\t['top-input_input-' + modificator]: !!modificator,\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-error']: isError,\n\t\t\t}\"\n\t\t\tautocomplete=\"off_always\"\n\t\t\t:name=\"name\"\n\t\t\tv-model=\"localValue\"\n\t\t\t:title=\"title\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\t@keydown.esc.stop=\"() => (addCleaner || !!$slots.btn) && clean()\"\n\t\t\t:=\"$attrs\"\n\t\t>\n\n\t\t<span\n\t\t\tv-if=\"addCleaner && localValue && localValue !== '0000-00-00'\"\n\t\t\tclass=\"top-input_cleaner\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t@click.prevent=\"clean\"\n\t\t></span>\n\n\t\t<span\n\t\t\tv-if=\"captionType !== ''\"\n\t\t\tclass=\"top-formsCaption\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</span>\n\n\t\t<!-- @slot Слот для вставки произвольного кода в label -->\n\t\t<slot></slot>\n\t</label>\n</template>\n\n<style module>\n.top-input {\n\t--top-forms_clear-width: 0px;\n\n\twidth: 180px;\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--top-gap-1);\n}\n\n.top-input_input {\n\tbackground: var(--top-forms-background-color);\n\theight: var(--top-forms-base-height);\n\tpadding: 0;\n\tpadding-right: calc(max(var(--top-forms-padding), calc(var(--top-icon2-width) + var(--top-forms_clear-width))));\n\tpadding-left: calc(max(var(--top-forms-padding), var(--top-icon-width)));\n}\n\n.top-input_input:hover {\n\tbackground: var(--top-forms-background-color-hover);\n}\n\n.top-input_input:focus {\n\toutline-color: var(--color-theme-75);\n\toutline-offset: 0;\n}\n\n/* значки */\n.top-input[data-top-icon]:before,\n.top-input[data-top-icon2]:after {\n\t--top-icon-color: var(--color-text-secondary);\n\t--top-icon2-color: var(--color-text-secondary);\n\n\tposition: absolute;\n\tz-index: 3;\n}\n\n.top-input[data-top-icon]:before {\n\tleft: 0;\n}\n\n.top-input[data-top-icon2]:after {\n\tright: 0;\n}\n\n/* cleaner */\n.top-input-withCleaner {\n\t--top-forms_clear-width: 24px;\n}\n\n.top-input_cleaner {\n\t--top-icon-size: 20px;\n\t--top-icon-width: 20px;\n\t--top-icon-color: var(--color-text-3);\n\n\tcursor: pointer;\n\tborder-radius: 50%;\n\twidth: 24px;\n\theight: 24px;\n\tposition: absolute;\n\tright: calc(var(--top-forms-border-width) + max(var(--top-icon2-width), var(--top-forms-padding) / 2));\n\tz-index: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.top-input_cleaner:hover {\n\t--top-icon-color: var(--color-text-2);\n}\n\n/* TODO: перенести в inputsRange */\n.top-input_input {\n\twidth: 50%;\n\tflex-grow: 1;\n}\n</style>","<script lang=\"ts\">\nconst useNativeDatepicker = !!document.documentElement.ontouchstart && !!document.createElement('input').showPicker;\n\nlet onInputLazy = (_e: any) => { };\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onUnmounted } from 'vue';\nimport { 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 { toRef, computed, watch } from 'vue';\nimport type { Props, Emits } from './select';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\n/**\n * Иконка выбранного option\n */\nconst optionIcon = computed(() => {\n\treturn optionByValue.value.get(localValue.value)?.icon;\n});\n\n/**\n * Словарь с доступными options\n */\nconst optionByValue = computed(() => {\n\tconst res = new Map();\n\n\tprops.options.forEach((option) => {\n\t\tif (option.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (option.children) {\n\t\t\toption.children.forEach(subOption => {\n\t\t\t\tif (subOption.disabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tres.set(subOption.value, subOption);\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tres.set(option.value, option);\n\t});\n\n\treturn res;\n});\n\n/**\n * Логика для обртаной своместимости:\n * - null - заменить на первое доступное значение\n * - undefined - заменить на первое доступное значение\n */\nwatch([\n\ttoRef(props.modelValue),\n\toptionByValue,\n], () => {\n\tif ((localValue.value === null || localValue.value === undefined) && optionByValue.value.size) {\n\t\tconsole.warn('Пожалуйста, не передавайте в компонент Select значения null и undefined');\n\n\t\tlocalValue.value = optionByValue.value.keys().next().value;\n\t}\n}, { immediate: true });\n\n/**\n * Выбрать следующее доступное значение\n */\nconst selectNextValue = () => {\n\tconst listEnabledValues = [...optionByValue.value.keys()];\n\tconst currentIndex = listEnabledValues.indexOf(localValue.value);\n\tconst nextIndex = (currentIndex + 1) % listEnabledValues.length;\n\n\tlocalValue.value = listEnabledValues[nextIndex];\n};\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-select']:true,\n\t\t\t['top-select-' + name]:name,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-formsCaptionWrapper']: !!title,\n\t\t\t['top-select-error']: isError,\n\t\t\t['top-disabled']: disabled,\n\t\t}\"\n\t\t:data-value=\"localValue\"\n\t\t:data-top-icon=\"icon\"\n\t\t:data-top-icon2=\"optionIcon\"\n\t>\n\t\t<select\n\t\t\t:class=\"{\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-select_select']: true,\n\t\t\t\t['top-select_arrow']: true,\n\t\t\t\t['top-error']: isError,\n\t\t\t}\"\n\t\t\t:name=\"name\"\n\t\t\t:disabled=\"disabled\"\n\t\t\tv-model=\"localValue\"\n\t\t>\n\t\t\t<template v-for=\"[_index, option] of options.entries()\">\n\t\t\t\t<optgroup\n\t\t\t\t\tv-if=\"option.children\"\n\t\t\t\t\t:key=\"'group_' + option.value\"\n\t\t\t\t\t:label=\"option.title\"\n\t\t\t\t\t:disabled=\"option.disabled\"\n\t\t\t\t>\n\t\t\t\t\t<option\n\t\t\t\t\t\tv-for=\"[_index, subOption] of option.children.entries()\"\n\t\t\t\t\t\t:key=\"option.value\"\n\t\t\t\t\t\t:value=\"subOption.value\"\n\t\t\t\t\t\t:selected=\"subOption.value === localValue\"\n\t\t\t\t\t\t:disabled=\"subOption.disabled\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ subOption.title }}\n\t\t\t\t\t</option>\n\t\t\t\t</optgroup>\n\n\t\t\t\t<option\n\t\t\t\t\tv-else\n\t\t\t\t\t:key=\"option.value\"\n\t\t\t\t\t:value=\"option.value\"\n\t\t\t\t\t:selected=\"option.value === localValue\"\n\t\t\t\t\t:disabled=\"option.disabled\"\n\t\t\t\t>\n\t\t\t\t\t{{ option.title }}\n\t\t\t\t</option>\n\t\t\t</template>\n\t\t</select>\n\n\t\t<span\n\t\t\tv-if=\"addChanger && optionByValue.size && !disabled\"\n\t\t\tclass=\"top-changer\"\n\t\t\t@click=\"selectNextValue\"\n\t\t></span>\n\n\t\t<span\n\t\t\tv-if=\"title\"\n\t\t\tclass=\"top-formsCaption\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</span>\n\t</label>\n</template>\n\n<style module>\n.top-select {\n\t--top-icon-color: var(--color-text-3);\n\t--top-icon2-color: var(--color-text-2);\n\n\talign-items: center;\n\twidth: 180px;\n\tmax-width: 100%;\n\tdisplay: inline-flex;\n}\n\n.top-select-error {\n\t--top-icon-color: var(--color-negative);\n\t--top-icon2-color: var(--color-negative);\n}\n\n.top-select_select {\n\tbackground-color: var(--top-forms-background-color);\n\n\t/* для select вместо padding нужно использовать text-indent */\n\tpadding-left: var(--top-forms-padding);\n\n\t/* если есть значки, добавить отступ на их ширину с учетом уже добавленного padding */\n\ttext-indent: calc(clamp(0px, calc(var(--top-icon-both-width) - var(--top-forms-padding)), calc(var(--top-icon-both-width) - var(--top-forms-padding))));\n\n\twidth: 100%;\n\theight: var(--top-forms-base-height);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tflex-grow: 1;\n\toverflow: hidden;\n}\n\n.top-select_select:focus {\n\toutline-color: var(--color-theme-75);\n\toutline-offset: 0;\n}\n\n.top-select_select:disabled {\n\tbackground: var(--color-theme-50);\n}\n\n.top-select optgroup {\n\tcolor: var(--color-text-1);\n\tfont-style: normal;\n}\n\n.top-select option {\n\tbackground: var(--content-background-color);\n\tcolor: var(--color-text-1);\n}\n\n/* хром не мерняет цвет для optgroup option, стили оставлены по умолчанию */\n/*\n.top-select optgroup:disabled,\n.top-select optgroup option,\n.top-select option:disabled {\n\n}\n*/\n\n/* https://bugzilla.mozilla.org/show_bug.cgi?id=1743066 */\n@-moz-document url-prefix() {\n\t.top-select_select {\n\t\ttext-indent: calc(clamp(0px, calc(var(--top-icon-both-width) - var(--top-forms-padding)), calc(var(--top-icon-both-width) - var(--top-forms-padding))) / 2);\n\t}\n}\n\n@media only screen and (min-width: 900px) {\n\t/* changer */\n\t.top-changer {\n\t\tcursor: pointer;\n\t\tborder-radius: 100%;\n\t\twidth: 0;\n\t\ttransform: translateX(-44px);\n\t\tcolor: var(--color-text-secondary-2);\n\t\tfont-size: 16px;\n\t\tline-height: 1;\n\t\tdisplay: none;\n\t\tz-index: 2;\n\t\torder: 4;\n\t}\n\n\t.top-changer:hover {\n\t\tcolor: var(--color-primary);\n\t}\n\n\t.top-changer:after {\n\t\tcontent: '';\n\t\tbackground-color: var(--top-forms-background-color);\n\t\tfont-family: 'Topvisor-2';\n\t}\n\n\t*:hover > .top-changer {\n\t\tdisplay: block;\n\t}\n}\n</style>"],"names":["isRetina","isMobile","isApp","isMacOS","isSafari","isChrome","isSafari2","getCommandKeyLabel","Page","onResizeDelay","onResizeTimer","onResizeListeners","windowSize","addOnReize","listener","removeOnResize","onResize","e","callback","Events","options","_a","state","_window$1","$","el","_b","tvTooltipGenOptions","binding","vnode","tooltip","_prevVnode","instance","_window","Core","reactive","style","type","media","elStyle","app","options2","device","stringToDate","date","genDate","timestamp","useFormat","time","Y","m","d","H","s","dateFormat","emptyValue","dateFormat2","dateForObj","dateObject","result","dateUnformat","dateChunks","dateFormatChunks","y","index","props","__props","i18n","titleStatus","computed","tagName","emit","__emit","localValue","value","placeholder","clean","useNativeDatepicker","onInputLazy","_e","onUnmounted","$el","ref","oninput","onchange","dateFormatted","init","datepicker","value2","optionIcon","optionByValue","res","option","subOption","watch","toRef","selectNextValue","listEnabledValues","nextIndex"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- define(["require","exports","vue","../require/css.amd!../assets/forms.css"],function(O,u,e){var A,P;"use strict";if(typeof e>"u")var e=window.Vue;function S(){return"devicePixelRatio"in window&&window.devicePixelRatio>1}function E(){return!!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i)}function C(){return navigator.userAgent.indexOf("Topvisor_App")!=-1}function z(){return navigator.userAgent.indexOf("Mac OS X")!==-1}function W(){const n=/Chrome|Android/.test(navigator.userAgent);let o=/Safari/.test(navigator.userAgent);return n&&o&&(o=!1),o}function H(){return z()?"⌘":"Ctrl"}class I{}const U=100;let D;const $=new Map,g={width:window.innerWidth,height:window.innerHeight};function j(n){$.set(n,n)}function Y(n){$.delete(n)}function K(n){clearTimeout(D),D=setTimeout(function(){n.topEvent={widthDiff:g.width-window.innerWidth,hightDiff:g.height-window.innerHeight},g.width=window.innerWidth,g.height=window.innerHeight,$.forEach(o=>o(n))},U)}window.addEventListener("resize",K);const L={addOnReize:j,removeOnResize:Y},G={widthForMobile:900,dateFormat:"Y-m-d",gmt:(A=new Date().toString().match(/GMT(\S+)/))==null?void 0:A[1]},Q={isMobile:!1,isMobileUA:!1,isRetina:!1,isApp:!1,isLandscape:!0,isPortrait:!1,size:0,dateFormat:"Y-m-d",gmt:(P=new Date().toString().match(/GMT(\S+)/))==null?void 0:P[1]},k=window,_=n=>{var o,s;if(!((s=(o=k==null?void 0:k.jQuery)==null?void 0:o.ui)!=null&&s.tooltip)){console.info("Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip");return}return k.jQuery(n)},N=(n,o)=>{var i;const s=n.value??{};return s.content??=(i=o.props)==null?void 0:i.title,s.content=String(s.content).replace(/\r\n|\r|\n/g,"<br>"),s.position??={my:"bottom-18px",at:"top center"},s},q={mounted(n,o,s){var i;(i=_(n))==null||i.tooltip(N(o,s))},updated(n,o,s,i){var d;const a=N(o,s),t=(d=_(n))==null?void 0:d.tooltip("instance");t&&(t.options={...t.options,...a})},unmounted(n,o,s){var i;(i=_(n))==null||i.tooltip("destroy")}},B=window;class p{static L=e.reactive({Not_date:"Not date"});static page=(B==null?void 0:B.page)||{};static Page=I;static options=G;static state=e.reactive({...Q});static matchMediaIsMobile;static appendStyle(o,s=""){let i="all";s==="m"&&(i="(max-width: "+this.options.widthForMobile+"px)"),s==="pc"&&(i="(min-width: "+this.options.widthForMobile+"px)");const a=document.createElement("style");a.innerHTML=o,a.media=i,document.head.append(a)}static install(o,s){p.defineOptions(s),o.provide("top-core",p),this.installDirectives(o)}static installDirectives(o){o.directive("top-tooltip",q)}static defineOptions(o){o!=null&&o.widthForMobile&&(this.options.widthForMobile=o.widthForMobile),o!=null&&o.dateFormat&&(this.options.dateFormat=o.dateFormat),o!=null&&o.gmt&&(this.options.gmt=o.gmt),p.setState()}static setState(){p.matchMediaIsMobile=window.matchMedia(`(max-width: ${p.options.widthForMobile}px)`),p.state.isMobileUA=E(),p.state.isRetina=S(),p.state.isApp=C(),p.state.dateFormat=this.options.dateFormat,p.state.gmt=this.options.gmt,p.setStateByWindowSize(),L.addOnReize(p.onResize),p.onResize(),p.saveToCookie()}static onResize(){p.setStateByWindowSize(),document.documentElement.style.setProperty("--100vh",window.innerHeight+"px")}static setStateByWindowSize(){var o;p.state.isMobile=!!((o=p.matchMediaIsMobile)!=null&&o.matches),p.state.isLandscape=window.innerWidth>window.innerHeight,p.state.isPortrait=!p.state.isLandscape,p.state.size=window.innerWidth>window.innerHeight?window.innerWidth:window.innerHeight,p.saveToCookie()}static saveToCookie(){const o=[1,window.innerWidth,window.innerHeight,window.devicePixelRatio,Number(p.state.isMobile),Number(p.state.isRetina)];document.cookie="device="+o.join(",")+"; path=/;"}}function X(n){return n.indexOf("T")===-1&&(n.length==10&&(n+=" 00:00:00"),n=n.replace(" ","T")+p.state.gmt),new Date(n)}function T(n,o=!0,s=0){let i;n!=null?i=new Date(n):i=new Date;const a=i.getFullYear(),t=String(i.getMonth()+1).padStart(2,"0"),d=i.getDate().toString().padStart(2,"0"),r=i.getHours().toString().padStart(2,"0"),l=i.getMinutes().toString().padStart(2,"0"),f=i.getSeconds().toString().padStart(2,"0");return i=a+"-"+t+"-"+d,s&&(i+=" "),s>=1&&(i+=r),s>=2&&(i+=":"+l),s>=3&&(i+=":"+f),o&&(i=y(i,s)),i}function y(n,o=2,s=p.L.Not_date){if((!n||n.substring(0,10)==="0000-00-00")&&s&&s!=="0000-00-00")return s;const i=p.state.dateFormat.toLowerCase();let a=n.substring(0,10);a.length===7&&(a+="-01"),a+=" 00:00",a=a.replace(/-/g,"/");const t=new Date(a);if(isNaN(Number(t)))return s;let d=i.replace("y",String(t.getFullYear()).padStart(2,"0")).replace("m",String(t.getMonth()+1).padStart(2,"0")).replace("d",String(t.getDate()).padStart(2,"0"));if(n.length>10)switch(o){case 1:d+=" "+n.substring(11,13);break;case 2:d+=" "+n.substring(11,16);break;case 3:d+=" "+n.substring(11,19);break}return d}function M(n,o=p.L.Not_date){if(!n)return o;if(n.match(/\d\d\d\d-\d\d-\d\d/))return n;const s=p.state.dateFormat.toLowerCase(),i=n.split(/\W/),a=s.split(/\W/);let t="",d="",r="";a.forEach((f,c)=>{switch(f){case"d":t=i[c];break;case"m":d=i[c];break;case"y":r=i[c];break}});let l=r+"-"+d+"-"+t;return l.match(/\d\d\d\d-\d\d-\d\d/)||(console.info("Неверный формат даты, будет возращена текущая дата, "+l),l=T(new Date().getTime(),!1).substring(0,10)),l}const J={class:"top-avatar"},Z=["src","title"],x=["title"],ee=e.defineComponent({__name:"avatar",props:{size:{default:64},image:{},nickname:{},isOnline:{type:Boolean},lastActiveTime:{}},setup(n){e.useCssVars(a=>({ed0c8a30:a.size+"px"}));const o=n,s={user:{Online:"Онлайн",LastSeen:"Заходил(а)"}},i=e.computed(()=>{if(o.isOnline)return s.user.Online;if(o.lastActiveTime)return s.user.LastSeen+": "+y(o.lastActiveTime,2)});return(a,t)=>(e.openBlock(),e.createElementBlock("div",J,[e.createElementVNode("img",{class:"top-avatar_image",src:a.image,title:o.nickname+(i.value?`
2
- ${i.value}`:""),alt:""},null,8,Z),a.isOnline?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-avatar_status",title:i.value},null,8,x)):e.createCommentVNode("",!0)]))}}),te={"top-avatar":"top-avatar","top-avatar_image":"top-avatar_image","top-avatar_status":"top-avatar_status"},b=(n,o)=>{const s=n.__vccOpts||n;for(const[i,a]of o)s[i]=a;return s},oe=b(ee,[["__cssModules",{$style:te}]]),ae={key:0,class:"top-ellipsis"},ne=b(e.defineComponent({__name:"button",props:{color:{default:"blue"},styling:{default:""},size:{default:"s"},name:{},title:{},icon:{},icon2:{},href:{},disabled:{type:Boolean},isSubmit:{type:Boolean},isActive:{type:Boolean},isProgress:{type:Boolean}},setup(n){const o=n,s=e.computed(()=>o.href?"a":"button"),i=e.computed(()=>o.isSubmit?"submit":void 0);return(a,t)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.value),{class:e.normalizeClass({"top-active":a.isActive,"top-disabled":a.disabled,"top-forms-focusable":!a.disabled,"top-button":!0,"top-button-progress":a.isProgress,[`top-size_${a.size}`]:!!a.size,[`top-color_${a.color}`]:!0,[`top-style_${a.styling}`]:!!a.styling}),name:a.name,title:a.title,href:a.href,type:i.value,"data-top-icon":a.icon||void 0,"data-top-icon2":a.icon2||void 0,disabled:a.disabled||void 0,inProgress:a.isProgress},{default:e.withCtx(()=>[a.$slots.default?(e.openBlock(),e.createElementBlock("span",ae,[e.renderSlot(a.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.icon?"":"Button"),1)])])):e.createCommentVNode("",!0),e.renderSlot(a.$slots,"html")]),_:3},8,["class","name","title","href","type","data-top-icon","data-top-icon2","disabled","inProgress"]))}}),[["__cssModules",{$style:{"top-button":"top-button","top-active":"top-active","top-button-progress":"top-button-progress",progress:"_progress_1f1nw_1","top-color_blue":"top-color_blue","top-color_green":"top-color_green","top-color_orange":"top-color_orange","top-color_red":"top-color_red","top-color_pink":"top-color_pink","top-color_theme":"top-color_theme","top-style_outline":"top-style_outline","top-style_soft":"top-style_soft","top-style_transparent":"top-style_transparent","top-size_l":"top-size_l","top-size_xl":"top-size_xl"}}]]),se={class:"top-forms-optionLabel"},w=b(e.defineComponent({__name:"controlLabel",props:{description:{},disabled:{type:Boolean}},setup(n){return(o,s)=>(e.openBlock(),e.createElementBlock("div",se,[e.createElementVNode("div",{class:e.normalizeClass({"top-forms-optionLabel_title":!0,"top-forms-optionLabel_title-disabled":o.disabled})},[e.renderSlot(o.$slots,"default")],2),o.description?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["top-forms-optionLabel_description",{"top-forms-optionLabel_description-disabled":o.disabled}])},e.toDisplayString(o.description),3)):e.createCommentVNode("",!0)]))}}),[["__cssModules",{$style:{"top-forms-optionLabel":"top-forms-optionLabel","top-forms-optionLabel_title":"top-forms-optionLabel_title","top-forms-optionLabel_title-disabled":"top-forms-optionLabel_title-disabled","top-forms-optionLabel_description":"top-forms-optionLabel_description","top-forms-optionLabel_description-disabled":"top-forms-optionLabel_description-disabled"}}]]),ie=["name","value","indeterminate","disabled"],le=b(e.defineComponent({__name:"checkbox",props:{modelValue:{type:[Boolean,Array,Set]},name:{},value:{},description:{},disabled:{type:Boolean},indeterminate:{type:Boolean},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(t){i("update:modelValue",t)}});return(t,d)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-forms-optionWrapper":!0,"top-checkbox":!0,["top-checkbox_"+t.name]:t.name!=="","top-disabled":t.disabled,"top-error":t.isError&&!t.disabled})},[e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:e.normalizeClass({"top-forms-focusable":!t.disabled,"top-forms-option":!0,"top-checkbox_input":!0,"top-error":t.isError&&!t.disabled}),name:t.name,"onUpdate:modelValue":d[0]||(d[0]=r=>a.value=r),value:t.value,indeterminate:t.indeterminate,disabled:t.disabled},null,10,ie),[[e.vModelCheckbox,a.value]]),t.$slots.default?(e.openBlock(),e.createBlock(w,{key:0,description:t.description,disabled:t.disabled},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},8,["description","disabled"])):e.createCommentVNode("",!0)],2))}}),[["__cssModules",{$style:{"top-checkbox":"top-checkbox","top-checkbox_input":"top-checkbox_input","top-error":"top-error"}}]]),re=["title"],F=b(e.defineComponent({__name:"hint",props:{hint:{}},setup(n){return(o,s)=>(e.openBlock(),e.createElementBlock("span",{class:"top-hint","data-top-icon":"",title:o.hint},null,8,re))}}),[["__cssModules",{$style:{"top-hint":"top-hint"}}]]),de=["data-top-icon","data-top-icon2"],pe=["name","title","placeholder","disabled","readonly"],ce={key:1,class:"top-formsCaption"},V=b(e.defineComponent({inheritAttrs:!1,__name:"input",props:{modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},title:{},captionType:{default:""},size:{default:"s"},icon:{},icon2:{},addCleaner:{type:Boolean},isError:{type:Boolean},modificator:{}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(r){i("update:modelValue",r)}}),t=e.computed(()=>s.addCleaner&&!s.title||s.captionType!==""?"":s.title),d=()=>{i("update:modelValue","")};return(r,l)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-input":!0,["top-size_"+r.size]:!0,"top-disabled":r.disabled,["top-input-"+r.modificator]:!!r.modificator,"top-input-withCleaner":r.addCleaner&&a.value&&a.value!=="0000-00-00","top-formsCaptionWrapper":r.captionType!=="","top-formsCaptionWrapper-always":r.captionType==="top"}),"data-top-icon":r.icon,"data-top-icon2":r.icon2},[e.withDirectives(e.createElementVNode("input",e.mergeProps({type:"text",class:{"top-input_input":!0,["top-input_input-"+r.modificator]:!!r.modificator,"top-forms-focusable":!r.disabled,"top-error":r.isError},autocomplete:"off_always",name:r.name,"onUpdate:modelValue":l[0]||(l[0]=f=>a.value=f),title:r.title,placeholder:t.value,disabled:r.disabled,readonly:r.readonly,onKeydown:l[1]||(l[1]=e.withKeys(e.withModifiers(()=>(r.addCleaner||!!r.$slots.btn)&&d(),["stop"]),["esc"]))},r.$attrs),null,16,pe),[[e.vModelText,a.value]]),r.addCleaner&&a.value&&a.value!=="0000-00-00"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"top-input_cleaner","data-top-icon":"",onClick:e.withModifiers(d,["prevent"])})):e.createCommentVNode("",!0),r.captionType!==""?(e.openBlock(),e.createElementBlock("span",ce,e.toDisplayString(r.title),1)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default")],10,de))}}),[["__cssModules",{$style:{"top-input":"top-input","top-input_input":"top-input_input","top-input-withCleaner":"top-input-withCleaner","top-input_cleaner":"top-input_cleaner"}}]]),ue=["modelValue"],me=!!document.documentElement.ontouchstart&&!!document.createElement("input").showPicker;let R=n=>{};const fe=b(e.defineComponent({__name:"inputDate",props:{modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},title:{},captionType:{},size:{},icon:{},icon2:{default:""},addCleaner:{type:Boolean},isError:{type:Boolean},modificator:{}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o;e.onUnmounted(()=>{t&&t.datepicker("destroy")});const a=e.ref();let t;const d=e.computed({get(){return y(s.modelValue,2,"0000-00-00")},set(c){c=M(c,"0000-00-00"),i("update:modelValue",c)}});let r=c=>{R(c)},l=c=>{const m=M(c.target.value),h=y(m);if(!h||h===p.L.Not_date||c.target.value!==h){c.target.value=d.value;return}d.value=c.target.value};async function f(c){const m=await new Promise((h,v)=>O(["./datepicker-2f8eb2f7.amd"],h,v));R=m.oninput,t=m.connectDatepicker(c.target,{onSelect:()=>l(c)}),t&&t.datepicker("show")}return(c,m)=>e.unref(me)?(e.openBlock(),e.createBlock(e.unref(V),e.mergeProps({key:0},c.$props,{modelValue:d.value,readonly:"",onClick:m[1]||(m[1]=h=>a.value.showPicker())}),{default:e.withCtx(()=>[e.createElementVNode("input",{ref_key:"el",ref:a,type:"date",class:"top-input_input-date",modelValue:c.modelValue,onChange:m[0]||(m[0]=h=>d.value=h.target.value),tabindex:"-1"},null,40,ue)]),_:1},16,["modelValue"])):(e.openBlock(),e.createBlock(e.unref(V),e.mergeProps({key:1},c.$props,{modelValue:d.value,"onUpdate:modelValue":m[2]||(m[2]=h=>h===""?d.value="":""),onInput:e.unref(r),onFocusOnce:f,onChange:e.unref(l),modificator:"datepicker"}),null,16,["modelValue","onInput","onChange"]))}}),[["__cssModules",{$style:{"top-input-datepicker":"top-input-datepicker","top-input_input-date":"top-input_input-date"}}]]),be={class:"top-inputRange"},he=e.createElementVNode("span",{class:"top-inputRange_dash"}," — ",-1),ve=b(e.defineComponent({__name:"inputRange",setup(n){return(o,s)=>(e.openBlock(),e.createElementBlock("div",be,[e.renderSlot(o.$slots,"from"),he,e.renderSlot(o.$slots,"to")]))}}),[["__cssModules",{$style:{"top-inputRange":"top-inputRange","top-inputRange_dash":"top-inputRange_dash","top-input":"top-input"}}]]),ye=["name","value","disabled"],ge=b(e.defineComponent({__name:"radio",props:{modelValue:{},value:{},name:{},description:{},disabled:{type:Boolean},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(t){i("update:modelValue",t)}});return(t,d)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-forms-optionWrapper":!0,"top-radio":!0,["top-radio_"+t.name]:t.name!=="","top-disabled":t.disabled,"top-error":t.isError&&!t.disabled})},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:e.normalizeClass({"top-forms-focusable":!t.disabled,"top-forms-option":!0,"top-radio_input":!0,"top-error":t.isError&&!t.disabled}),"onUpdate:modelValue":d[0]||(d[0]=r=>a.value=r),name:t.name,value:t.value,disabled:t.disabled},null,10,ye),[[e.vModelRadio,a.value]]),t.$slots.default?(e.openBlock(),e.createBlock(w,{key:0,description:t.description,disabled:t.disabled},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},8,["description","disabled"])):e.createCommentVNode("",!0)],2))}}),[["__cssModules",{$style:{"top-radio":"top-radio","top-radio_input":"top-radio_input","top-error":"top-error"}}]]),ke=["name","value","disabled"],we=b(e.defineComponent({__name:"switcher",props:{modelValue:{type:[Boolean,Array,Set]},name:{},value:{},description:{},disabled:{type:Boolean},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(t){i("update:modelValue",t)}});return(t,d)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-forms-optionWrapper":!0,"top-checkboxSwitcher":!0,"top-disabled":t.disabled,"top-error":t.isError&&!t.disabled})},[e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:e.normalizeClass({"top-forms-focusable":!t.disabled,"top-forms-option":!0,"top-checkboxSwitcher_input":!0,"top-error":t.isError&&!t.disabled}),"onUpdate:modelValue":d[0]||(d[0]=r=>a.value=r),name:t.name,value:t.value,disabled:t.disabled},null,10,ke),[[e.vModelCheckbox,a.value]]),t.$slots.default?(e.openBlock(),e.createBlock(w,{key:0,description:t.description,disabled:t.disabled},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},8,["description","disabled"])):e.createCommentVNode("",!0)],2))}}),[["__cssModules",{$style:{"top-checkboxSwitcher":"top-checkboxSwitcher","top-checkboxSwitcher_input":"top-checkboxSwitcher_input","top-error":"top-error"}}]]),$e=["name","placeholder","disabled","readonly","rows"],_e={key:0,class:"top-textarea_pseudoContent"},Be=b(e.defineComponent({inheritAttrs:!1,__name:"textarea",props:{modelValue:{},name:{},placeholder:{},rows:{default:5},minHeight:{default:120},expandable:{type:Boolean},disabled:{type:Boolean},readonly:{type:Boolean},isError:{type:Boolean},hint:{}},emits:["update:modelValue"],setup(n,{emit:o}){e.useCssVars(t=>({c838a038:t.minHeight+"px"}));const s=n,i=o,a=e.computed({get(){return s.modelValue},set(t){i("update:modelValue",t)}});return(t,d)=>{const r=e.resolveDirective("top-tooltip");return e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-textarea":!0,["top-textarea-"+t.name]:t.name,"top-disabled":t.disabled})},[e.withDirectives(e.createElementVNode("textarea",e.mergeProps({type:"text",class:{"top-forms-focusable":!t.disabled,"top-textarea_textarea":!0,"top-textarea_textarea-expandable":t.expandable,"top-error":t.isError},autocomplete:"off_always",name:t.name,placeholder:t.placeholder,disabled:t.disabled,readonly:t.readonly,rows:t.expandable?void 0:t.rows},t.$attrs,{"onUpdate:modelValue":d[0]||(d[0]=l=>a.value=l)}),null,16,$e),[[e.vModelText,a.value]]),t.expandable?(e.openBlock(),e.createElementBlock("div",_e,e.toDisplayString(a.value+" "),1)):e.createCommentVNode("",!0),t.hint?e.withDirectives((e.openBlock(),e.createBlock(F,{key:1,class:"top-textarea_hint",hint:t.hint},null,8,["hint"])),[[r]]):e.createCommentVNode("",!0)],2)}}}),[["__cssModules",{$style:{"top-textarea":"top-textarea","top-textarea_textarea":"top-textarea_textarea","top-textarea_textarea-expandable":"top-textarea_textarea-expandable","top-textarea_pseudoContent":"top-textarea_pseudoContent","top-textarea_hint":"top-textarea_hint"}}]]),Me=["data-value","data-top-icon","data-top-icon2"],Ve=["name","disabled"],Se=["label","disabled"],Ee=["value","selected","disabled"],Ce=["value","selected","disabled"],ze={key:1,class:"top-formsCaption"},De=b(e.defineComponent({__name:"select",props:{modelValue:{},options:{},name:{},disabled:{type:Boolean},icon:{},size:{default:"s"},addChanger:{type:Boolean},title:{},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(l){i("update:modelValue",l)}}),t=e.computed(()=>{var l;return(l=d.value.get(a.value))==null?void 0:l.icon}),d=e.computed(()=>{const l=new Map;return s.options.forEach(f=>{if(!f.disabled){if(f.children){f.children.forEach(c=>{c.disabled||l.set(c.value,c)});return}l.set(f.value,f)}}),l});e.watch([e.toRef(s.modelValue),d],()=>{(a.value===null||a.value===void 0)&&d.value.size&&(console.warn("Пожалуйста, не передавайте в компонент Select значения null и undefined"),a.value=d.value.keys().next().value)},{immediate:!0});const r=()=>{const l=[...d.value.keys()],c=(l.indexOf(a.value)+1)%l.length;a.value=l[c]};return(l,f)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-select":!0,["top-select-"+l.name]:l.name,["top-size_"+l.size]:!0,"top-formsCaptionWrapper":!!l.title,"top-select-error":l.isError,"top-disabled":l.disabled}),"data-value":a.value,"data-top-icon":l.icon,"data-top-icon2":t.value},[e.withDirectives(e.createElementVNode("select",{class:e.normalizeClass({"top-forms-focusable":!l.disabled,"top-select_select":!0,"top-select_arrow":!0,"top-error":l.isError}),name:l.name,disabled:l.disabled,"onUpdate:modelValue":f[0]||(f[0]=c=>a.value=c)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.options.entries(),([c,m])=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[m.children?(e.openBlock(),e.createElementBlock("optgroup",{key:"group_"+m.value,label:m.title,disabled:m.disabled},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.children.entries(),([h,v])=>(e.openBlock(),e.createElementBlock("option",{key:m.value,value:v.value,selected:v.value===a.value,disabled:v.disabled},e.toDisplayString(v.title),9,Ee))),128))],8,Se)):(e.openBlock(),e.createElementBlock("option",{key:m.value,value:m.value,selected:m.value===a.value,disabled:m.disabled},e.toDisplayString(m.title),9,Ce))],64))),256))],10,Ve),[[e.vModelSelect,a.value]]),l.addChanger&&d.value.size&&!l.disabled?(e.openBlock(),e.createElementBlock("span",{key:0,class:"top-changer",onClick:r})):e.createCommentVNode("",!0),l.title?(e.openBlock(),e.createElementBlock("span",ze,e.toDisplayString(l.title),1)):e.createCommentVNode("",!0)],10,Me))}}),[["__cssModules",{$style:{"top-select":"top-select","top-select-error":"top-select-error","top-select_select":"top-select_select","top-changer":"top-changer"}}]]);u.Button=ne,u.ControlLabel=w,u.Core=p,u.Events=L,u.Hint=F,u.Input=V,u.Textarea=Be,u._export_sfc=b,u.avatar=oe,u.checkbox=le,u.dateFormat=y,u.dateUnformat=M,u.genDate=T,u.getCommandKeyLabel=H,u.inputDate=fe,u.inputRange=ve,u.isApp=C,u.isMacOS=z,u.isMobile=E,u.isRetina=S,u.isSafari=W,u.radio=ge,u.select=De,u.stringToDate=X,u.switcher=we});
3
- //# sourceMappingURL=forms-2250b8db.amd.js.map
1
+ define(["require","exports","vue","../require/css.amd!../assets/forms.css"],function(O,u,e){"use strict";var A,P;if(typeof e>"u")var e=window.Vue;function S(){return"devicePixelRatio"in window&&window.devicePixelRatio>1}function E(){return!!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i)}function C(){return navigator.userAgent.indexOf("Topvisor_App")!=-1}function z(){return navigator.userAgent.indexOf("Mac OS X")!==-1}function W(){const n=/Chrome|Android/.test(navigator.userAgent);let o=/Safari/.test(navigator.userAgent);return n&&o&&(o=!1),o}function H(){return z()?"⌘":"Ctrl"}class I{}const U=100;let D;const w=new Map,g={width:window.innerWidth,height:window.innerHeight};function j(n){w.set(n,n)}function Y(n){w.delete(n)}function K(n){clearTimeout(D),D=setTimeout(function(){n.topEvent={widthDiff:g.width-window.innerWidth,hightDiff:g.height-window.innerHeight},g.width=window.innerWidth,g.height=window.innerHeight,w.forEach(o=>o(n))},U)}window.addEventListener("resize",K);const L={addOnReize:j,removeOnResize:Y},q={widthForMobile:900,dateFormat:"Y-m-d",gmt:(A=new Date().toString().match(/GMT(\S+)/))==null?void 0:A[1]},G={isMobile:!1,isMobileUA:!1,isRetina:!1,isApp:!1,isLandscape:!0,isPortrait:!1,size:0,dateFormat:"Y-m-d",gmt:(P=new Date().toString().match(/GMT(\S+)/))==null?void 0:P[1]},k=window,_=n=>{var o,s;if(!((s=(o=k==null?void 0:k.jQuery)==null?void 0:o.ui)!=null&&s.tooltip)){console.info("Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip");return}return k.jQuery(n)},N=(n,o)=>{var i;const s=n.value??{};return s.content??=(i=o.props)==null?void 0:i.title,s.content=String(s.content).replace(/\r\n|\r|\n/g,"<br>"),s.position??={my:"bottom-18px",at:"top center"},s},Q={mounted(n,o,s){var i;(i=_(n))==null||i.tooltip(N(o,s))},updated(n,o,s,i){var d;const a=N(o,s),t=(d=_(n))==null?void 0:d.tooltip("instance");t&&(t.options={...t.options,...a})},unmounted(n,o,s){var i;(i=_(n))==null||i.tooltip("destroy")}},B=window;class p{static L=e.reactive({Not_date:"Not date"});static page=(B==null?void 0:B.page)||{};static Page=I;static options=q;static state=e.reactive({...G});static matchMediaIsMobile;static appendStyle(o,s=""){let i="all";s==="m"&&(i="(max-width: "+this.options.widthForMobile+"px)"),s==="pc"&&(i="(min-width: "+this.options.widthForMobile+"px)");const a=document.createElement("style");a.innerHTML=o,a.media=i,document.head.append(a)}static install(o,s){p.defineOptions(s),o.provide("top-core",p),this.installDirectives(o)}static installDirectives(o){o.directive("top-tooltip",Q)}static defineOptions(o){o!=null&&o.widthForMobile&&(this.options.widthForMobile=o.widthForMobile),o!=null&&o.dateFormat&&(this.options.dateFormat=o.dateFormat),o!=null&&o.gmt&&(this.options.gmt=o.gmt),p.setState()}static setState(){p.matchMediaIsMobile=window.matchMedia(`(max-width: ${p.options.widthForMobile}px)`),p.state.isMobileUA=E(),p.state.isRetina=S(),p.state.isApp=C(),p.state.dateFormat=this.options.dateFormat,p.state.gmt=this.options.gmt,p.setStateByWindowSize(),L.addOnReize(p.onResize),p.onResize(),p.saveToCookie()}static onResize(){p.setStateByWindowSize(),document.documentElement.style.setProperty("--100vh",window.innerHeight+"px")}static setStateByWindowSize(){var o;p.state.isMobile=!!((o=p.matchMediaIsMobile)!=null&&o.matches),p.state.isLandscape=window.innerWidth>window.innerHeight,p.state.isPortrait=!p.state.isLandscape,p.state.size=window.innerWidth>window.innerHeight?window.innerWidth:window.innerHeight,p.saveToCookie()}static saveToCookie(){const o=[1,window.innerWidth,window.innerHeight,window.devicePixelRatio,Number(p.state.isMobile),Number(p.state.isRetina)];document.cookie="device="+o.join(",")+"; path=/;"}}function X(n){return n.indexOf("T")===-1&&(n.length==10&&(n+=" 00:00:00"),n=n.replace(" ","T")+p.state.gmt),new Date(n)}function T(n,o=!0,s=0){let i;n!=null?i=new Date(n):i=new Date;const a=i.getFullYear(),t=String(i.getMonth()+1).padStart(2,"0"),d=i.getDate().toString().padStart(2,"0"),r=i.getHours().toString().padStart(2,"0"),l=i.getMinutes().toString().padStart(2,"0"),f=i.getSeconds().toString().padStart(2,"0");return i=a+"-"+t+"-"+d,s&&(i+=" "),s>=1&&(i+=r),s>=2&&(i+=":"+l),s>=3&&(i+=":"+f),o&&(i=y(i,s)),i}function y(n,o=2,s=p.L.Not_date){if((!n||n.substring(0,10)==="0000-00-00")&&s&&s!=="0000-00-00")return s;const i=p.state.dateFormat.toLowerCase();let a=n.substring(0,10);a.length===7&&(a+="-01"),a+=" 00:00",a=a.replace(/-/g,"/");const t=new Date(a);if(isNaN(Number(t)))return s;let d=i.replace("y",String(t.getFullYear()).padStart(2,"0")).replace("m",String(t.getMonth()+1).padStart(2,"0")).replace("d",String(t.getDate()).padStart(2,"0"));if(n.length>10)switch(o){case 1:d+=" "+n.substring(11,13);break;case 2:d+=" "+n.substring(11,16);break;case 3:d+=" "+n.substring(11,19);break}return d}function M(n,o=p.L.Not_date){if(!n)return o;if(n.match(/\d\d\d\d-\d\d-\d\d/))return n;const s=p.state.dateFormat.toLowerCase(),i=n.split(/\W/),a=s.split(/\W/);let t="",d="",r="";a.forEach((f,c)=>{switch(f){case"d":t=i[c];break;case"m":d=i[c];break;case"y":r=i[c];break}});let l=r+"-"+d+"-"+t;return l.match(/\d\d\d\d-\d\d-\d\d/)||(console.info("Неверный формат даты, будет возращена текущая дата, "+l),l=T(new Date().getTime(),!1).substring(0,10)),l}const J={class:"top-avatar"},Z=["src","title"],x=["title"],ee=e.defineComponent({__name:"avatar",props:{size:{default:64},image:{},nickname:{},isOnline:{type:Boolean},lastActiveTime:{}},setup(n){e.useCssVars(a=>({"566609b7":a.size+"px"}));const o=n,s={user:{Online:"Онлайн",LastSeen:"Заходил(а)"}},i=e.computed(()=>{if(o.isOnline)return s.user.Online;if(o.lastActiveTime)return s.user.LastSeen+": "+y(o.lastActiveTime,2)});return(a,t)=>(e.openBlock(),e.createElementBlock("div",J,[e.createElementVNode("img",{class:"top-avatar_image",src:a.image,title:o.nickname+(i.value?`
2
+ ${i.value}`:""),alt:""},null,8,Z),a.isOnline?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-avatar_status",title:i.value},null,8,x)):e.createCommentVNode("",!0)]))}}),te={"top-avatar":"top-avatar","top-avatar_image":"top-avatar_image","top-avatar_status":"top-avatar_status"},b=(n,o)=>{const s=n.__vccOpts||n;for(const[i,a]of o)s[i]=a;return s},oe=b(ee,[["__cssModules",{$style:te}]]),ae={key:0,class:"top-ellipsis"},ne=b(e.defineComponent({__name:"button",props:{color:{default:"blue"},styling:{default:""},size:{default:"s"},name:{},title:{},icon:{},icon2:{},href:{},disabled:{type:Boolean},isSubmit:{type:Boolean},isActive:{type:Boolean},isProgress:{type:Boolean}},setup(n){const o=n,s=e.computed(()=>o.href?"a":"button"),i=e.computed(()=>o.isSubmit?"submit":void 0);return(a,t)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.value),{class:e.normalizeClass({"top-active":a.isActive,"top-disabled":a.disabled,"top-forms-focusable":!a.disabled,"top-button":!0,"top-button-progress":a.isProgress,[`top-size_${a.size}`]:!!a.size,[`top-color_${a.color}`]:!0,[`top-style_${a.styling}`]:!!a.styling}),name:a.name,title:a.title,href:a.href,type:i.value,"data-top-icon":a.icon||void 0,"data-top-icon2":a.icon2||void 0,disabled:a.disabled||void 0,inProgress:a.isProgress},{default:e.withCtx(()=>[a.$slots.default?(e.openBlock(),e.createElementBlock("span",ae,[e.renderSlot(a.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(a.icon?"":"Button"),1)])])):e.createCommentVNode("",!0),e.renderSlot(a.$slots,"html")]),_:3},8,["class","name","title","href","type","data-top-icon","data-top-icon2","disabled","inProgress"]))}}),[["__cssModules",{$style:{"top-button":"top-button","top-active":"top-active","top-button-progress":"top-button-progress",progress:"_progress_1hqxk_1","top-color_blue":"top-color_blue","top-color_green":"top-color_green","top-color_orange":"top-color_orange","top-color_red":"top-color_red","top-color_pink":"top-color_pink","top-color_theme":"top-color_theme","top-style_outline":"top-style_outline","top-style_soft":"top-style_soft","top-style_transparent":"top-style_transparent","top-size_l":"top-size_l","top-size_xl":"top-size_xl"}}]]),se={class:"top-forms-optionLabel"},$=b(e.defineComponent({__name:"controlLabel",props:{description:{},disabled:{type:Boolean}},setup(n){return(o,s)=>(e.openBlock(),e.createElementBlock("div",se,[e.createElementVNode("div",{class:e.normalizeClass({"top-forms-optionLabel_title":!0,"top-forms-optionLabel_title-disabled":o.disabled})},[e.renderSlot(o.$slots,"default")],2),o.description?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["top-forms-optionLabel_description",{"top-forms-optionLabel_description-disabled":o.disabled}])},e.toDisplayString(o.description),3)):e.createCommentVNode("",!0)]))}}),[["__cssModules",{$style:{"top-forms-optionLabel":"top-forms-optionLabel","top-forms-optionLabel_title":"top-forms-optionLabel_title","top-forms-optionLabel_title-disabled":"top-forms-optionLabel_title-disabled","top-forms-optionLabel_description":"top-forms-optionLabel_description","top-forms-optionLabel_description-disabled":"top-forms-optionLabel_description-disabled"}}]]),ie=["name","value","indeterminate","disabled"],le=b(e.defineComponent({__name:"checkbox",props:{modelValue:{type:[Boolean,Array,Set]},name:{},value:{},description:{},disabled:{type:Boolean},indeterminate:{type:Boolean},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(t){i("update:modelValue",t)}});return(t,d)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-forms-optionWrapper":!0,"top-checkbox":!0,["top-checkbox_"+t.name]:t.name!=="","top-disabled":t.disabled,"top-error":t.isError&&!t.disabled})},[e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:e.normalizeClass({"top-forms-focusable":!t.disabled,"top-forms-option":!0,"top-checkbox_input":!0,"top-error":t.isError&&!t.disabled}),name:t.name,"onUpdate:modelValue":d[0]||(d[0]=r=>a.value=r),value:t.value,indeterminate:t.indeterminate,disabled:t.disabled},null,10,ie),[[e.vModelCheckbox,a.value]]),t.$slots.default?(e.openBlock(),e.createBlock($,{key:0,description:t.description,disabled:t.disabled},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},8,["description","disabled"])):e.createCommentVNode("",!0)],2))}}),[["__cssModules",{$style:{"top-checkbox":"top-checkbox","top-checkbox_input":"top-checkbox_input","top-error":"top-error"}}]]),re=["title"],F=b(e.defineComponent({__name:"hint",props:{hint:{}},setup(n){return(o,s)=>(e.openBlock(),e.createElementBlock("span",{class:"top-hint","data-top-icon":"",title:o.hint},null,8,re))}}),[["__cssModules",{$style:{"top-hint":"top-hint"}}]]),de=["data-top-icon","data-top-icon2"],pe=["name","title","placeholder","disabled","readonly"],ce={key:1,class:"top-formsCaption"},V=b(e.defineComponent({inheritAttrs:!1,__name:"input",props:{modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},title:{},captionType:{default:""},size:{default:"s"},icon:{},icon2:{},addCleaner:{type:Boolean},isError:{type:Boolean},modificator:{}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(r){i("update:modelValue",r)}}),t=e.computed(()=>s.addCleaner&&!s.title||s.captionType!==""?"":s.title),d=()=>{i("update:modelValue","")};return(r,l)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-input":!0,["top-size_"+r.size]:!0,"top-disabled":r.disabled,["top-input-"+r.modificator]:!!r.modificator,"top-input-withCleaner":r.addCleaner&&a.value&&a.value!=="0000-00-00","top-formsCaptionWrapper":r.captionType!=="","top-formsCaptionWrapper-always":r.captionType==="top"}),"data-top-icon":r.icon,"data-top-icon2":r.icon2},[e.withDirectives(e.createElementVNode("input",e.mergeProps({type:"text",class:{"top-input_input":!0,["top-input_input-"+r.modificator]:!!r.modificator,"top-forms-focusable":!r.disabled,"top-error":r.isError},autocomplete:"off_always",name:r.name,"onUpdate:modelValue":l[0]||(l[0]=f=>a.value=f),title:r.title,placeholder:t.value,disabled:r.disabled,readonly:r.readonly,onKeydown:l[1]||(l[1]=e.withKeys(e.withModifiers(()=>(r.addCleaner||!!r.$slots.btn)&&d(),["stop"]),["esc"]))},r.$attrs),null,16,pe),[[e.vModelText,a.value]]),r.addCleaner&&a.value&&a.value!=="0000-00-00"?(e.openBlock(),e.createElementBlock("span",{key:0,class:"top-input_cleaner","data-top-icon":"",onClick:e.withModifiers(d,["prevent"])})):e.createCommentVNode("",!0),r.captionType!==""?(e.openBlock(),e.createElementBlock("span",ce,e.toDisplayString(r.title),1)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default")],10,de))}}),[["__cssModules",{$style:{"top-input":"top-input","top-input_input":"top-input_input","top-input-withCleaner":"top-input-withCleaner","top-input_cleaner":"top-input_cleaner"}}]]),ue=["modelValue"],me=!!document.documentElement.ontouchstart&&!!document.createElement("input").showPicker;let R=n=>{};const fe=b(e.defineComponent({__name:"inputDate",props:{modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},title:{},captionType:{},size:{},icon:{},icon2:{default:""},addCleaner:{type:Boolean},isError:{type:Boolean},modificator:{}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o;e.onUnmounted(()=>{t&&t.datepicker("destroy")});const a=e.ref();let t;const d=e.computed({get(){return y(s.modelValue,2,"0000-00-00")},set(c){c=M(c,"0000-00-00"),i("update:modelValue",c)}});let r=c=>{R(c)},l=c=>{const m=M(c.target.value),h=y(m);if(!h||h===p.L.Not_date||c.target.value!==h){c.target.value=d.value;return}d.value=c.target.value};async function f(c){const m=await new Promise((h,v)=>O(["./datepicker-0tFN0clU.amd"],h,v));R=m.oninput,t=m.connectDatepicker(c.target,{onSelect:()=>l(c)}),t&&t.datepicker("show")}return(c,m)=>e.unref(me)?(e.openBlock(),e.createBlock(e.unref(V),e.mergeProps({key:0},c.$props,{modelValue:d.value,readonly:"",onClick:m[1]||(m[1]=h=>a.value.showPicker())}),{default:e.withCtx(()=>[e.createElementVNode("input",{ref_key:"el",ref:a,type:"date",class:"top-input_input-date",modelValue:c.modelValue,onChange:m[0]||(m[0]=h=>d.value=h.target.value),tabindex:"-1"},null,40,ue)]),_:1},16,["modelValue"])):(e.openBlock(),e.createBlock(e.unref(V),e.mergeProps({key:1},c.$props,{modelValue:d.value,"onUpdate:modelValue":m[2]||(m[2]=h=>h===""?d.value="":""),onInput:e.unref(r),onFocusOnce:f,onChange:e.unref(l),modificator:"datepicker"}),null,16,["modelValue","onInput","onChange"]))}}),[["__cssModules",{$style:{"top-input-datepicker":"top-input-datepicker","top-input_input-date":"top-input_input-date"}}]]),be={class:"top-inputRange"},he=e.createElementVNode("span",{class:"top-inputRange_dash"}," — ",-1),ve=b(e.defineComponent({__name:"inputRange",setup(n){return(o,s)=>(e.openBlock(),e.createElementBlock("div",be,[e.renderSlot(o.$slots,"from"),he,e.renderSlot(o.$slots,"to")]))}}),[["__cssModules",{$style:{"top-inputRange":"top-inputRange","top-inputRange_dash":"top-inputRange_dash","top-input":"top-input"}}]]),ye=["name","value","disabled"],ge=b(e.defineComponent({__name:"radio",props:{modelValue:{},value:{},name:{},description:{},disabled:{type:Boolean},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(t){i("update:modelValue",t)}});return(t,d)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-forms-optionWrapper":!0,"top-radio":!0,["top-radio_"+t.name]:t.name!=="","top-disabled":t.disabled,"top-error":t.isError&&!t.disabled})},[e.withDirectives(e.createElementVNode("input",{type:"radio",class:e.normalizeClass({"top-forms-focusable":!t.disabled,"top-forms-option":!0,"top-radio_input":!0,"top-error":t.isError&&!t.disabled}),"onUpdate:modelValue":d[0]||(d[0]=r=>a.value=r),name:t.name,value:t.value,disabled:t.disabled},null,10,ye),[[e.vModelRadio,a.value]]),t.$slots.default?(e.openBlock(),e.createBlock($,{key:0,description:t.description,disabled:t.disabled},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},8,["description","disabled"])):e.createCommentVNode("",!0)],2))}}),[["__cssModules",{$style:{"top-radio":"top-radio","top-radio_input":"top-radio_input","top-error":"top-error"}}]]),ke=["name","value","disabled"],$e=b(e.defineComponent({__name:"switcher",props:{modelValue:{type:[Boolean,Array,Set]},name:{},value:{},description:{},disabled:{type:Boolean},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(t){i("update:modelValue",t)}});return(t,d)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-forms-optionWrapper":!0,"top-checkboxSwitcher":!0,"top-disabled":t.disabled,"top-error":t.isError&&!t.disabled})},[e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:e.normalizeClass({"top-forms-focusable":!t.disabled,"top-forms-option":!0,"top-checkboxSwitcher_input":!0,"top-error":t.isError&&!t.disabled}),"onUpdate:modelValue":d[0]||(d[0]=r=>a.value=r),name:t.name,value:t.value,disabled:t.disabled},null,10,ke),[[e.vModelCheckbox,a.value]]),t.$slots.default?(e.openBlock(),e.createBlock($,{key:0,description:t.description,disabled:t.disabled},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3},8,["description","disabled"])):e.createCommentVNode("",!0)],2))}}),[["__cssModules",{$style:{"top-checkboxSwitcher":"top-checkboxSwitcher","top-checkboxSwitcher_input":"top-checkboxSwitcher_input","top-error":"top-error"}}]]),we=["name","placeholder","disabled","readonly","rows"],_e={key:0,class:"top-textarea_pseudoContent"},Be=b(e.defineComponent({inheritAttrs:!1,__name:"textarea",props:{modelValue:{},name:{},placeholder:{},rows:{default:5},minHeight:{default:120},expandable:{type:Boolean},disabled:{type:Boolean},readonly:{type:Boolean},isError:{type:Boolean},hint:{}},emits:["update:modelValue"],setup(n,{emit:o}){e.useCssVars(t=>({c35baa86:t.minHeight+"px"}));const s=n,i=o,a=e.computed({get(){return s.modelValue},set(t){i("update:modelValue",t)}});return(t,d)=>{const r=e.resolveDirective("top-tooltip");return e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-textarea":!0,["top-textarea-"+t.name]:t.name,"top-disabled":t.disabled})},[e.withDirectives(e.createElementVNode("textarea",e.mergeProps({type:"text",class:{"top-forms-focusable":!t.disabled,"top-textarea_textarea":!0,"top-textarea_textarea-expandable":t.expandable,"top-error":t.isError},autocomplete:"off_always",name:t.name,placeholder:t.placeholder,disabled:t.disabled,readonly:t.readonly,rows:t.expandable?void 0:t.rows},t.$attrs,{"onUpdate:modelValue":d[0]||(d[0]=l=>a.value=l)}),null,16,we),[[e.vModelText,a.value]]),t.expandable?(e.openBlock(),e.createElementBlock("div",_e,e.toDisplayString(a.value+" "),1)):e.createCommentVNode("",!0),t.hint?e.withDirectives((e.openBlock(),e.createBlock(F,{key:1,class:"top-textarea_hint",hint:t.hint},null,8,["hint"])),[[r]]):e.createCommentVNode("",!0)],2)}}}),[["__cssModules",{$style:{"top-textarea":"top-textarea","top-textarea_textarea":"top-textarea_textarea","top-textarea_textarea-expandable":"top-textarea_textarea-expandable","top-textarea_pseudoContent":"top-textarea_pseudoContent","top-textarea_hint":"top-textarea_hint"}}]]),Me=["data-value","data-top-icon","data-top-icon2"],Ve=["name","disabled"],Se=["label","disabled"],Ee=["value","selected","disabled"],Ce=["value","selected","disabled"],ze={key:1,class:"top-formsCaption"},De=b(e.defineComponent({__name:"select",props:{modelValue:{},options:{},name:{},disabled:{type:Boolean},icon:{},size:{default:"s"},addChanger:{type:Boolean},title:{},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const s=n,i=o,a=e.computed({get(){return s.modelValue},set(l){i("update:modelValue",l)}}),t=e.computed(()=>{var l;return(l=d.value.get(a.value))==null?void 0:l.icon}),d=e.computed(()=>{const l=new Map;return s.options.forEach(f=>{if(!f.disabled){if(f.children){f.children.forEach(c=>{c.disabled||l.set(c.value,c)});return}l.set(f.value,f)}}),l});e.watch([e.toRef(s.modelValue),d],()=>{(a.value===null||a.value===void 0)&&d.value.size&&(console.warn("Пожалуйста, не передавайте в компонент Select значения null и undefined"),a.value=d.value.keys().next().value)},{immediate:!0});const r=()=>{const l=[...d.value.keys()],c=(l.indexOf(a.value)+1)%l.length;a.value=l[c]};return(l,f)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-select":!0,["top-select-"+l.name]:l.name,["top-size_"+l.size]:!0,"top-formsCaptionWrapper":!!l.title,"top-select-error":l.isError,"top-disabled":l.disabled}),"data-value":a.value,"data-top-icon":l.icon,"data-top-icon2":t.value},[e.withDirectives(e.createElementVNode("select",{class:e.normalizeClass({"top-forms-focusable":!l.disabled,"top-select_select":!0,"top-select_arrow":!0,"top-error":l.isError}),name:l.name,disabled:l.disabled,"onUpdate:modelValue":f[0]||(f[0]=c=>a.value=c)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.options.entries(),([c,m])=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[m.children?(e.openBlock(),e.createElementBlock("optgroup",{key:"group_"+m.value,label:m.title,disabled:m.disabled},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.children.entries(),([h,v])=>(e.openBlock(),e.createElementBlock("option",{key:m.value,value:v.value,selected:v.value===a.value,disabled:v.disabled},e.toDisplayString(v.title),9,Ee))),128))],8,Se)):(e.openBlock(),e.createElementBlock("option",{key:m.value,value:m.value,selected:m.value===a.value,disabled:m.disabled},e.toDisplayString(m.title),9,Ce))],64))),256))],10,Ve),[[e.vModelSelect,a.value]]),l.addChanger&&d.value.size&&!l.disabled?(e.openBlock(),e.createElementBlock("span",{key:0,class:"top-changer",onClick:r})):e.createCommentVNode("",!0),l.title?(e.openBlock(),e.createElementBlock("span",ze,e.toDisplayString(l.title),1)):e.createCommentVNode("",!0)],10,Me))}}),[["__cssModules",{$style:{"top-select":"top-select","top-select-error":"top-select-error","top-select_select":"top-select_select","top-changer":"top-changer"}}]]);u.Button=ne,u.ControlLabel=$,u.Core=p,u.Events=L,u.Hint=F,u.Input=V,u.Textarea=Be,u._export_sfc=b,u.avatar=oe,u.checkbox=le,u.dateFormat=y,u.dateUnformat=M,u.genDate=T,u.getCommandKeyLabel=H,u.inputDate=fe,u.inputRange=ve,u.isApp=C,u.isMacOS=z,u.isMobile=E,u.isRetina=S,u.isSafari=W,u.radio=ge,u.select=De,u.stringToDate=X,u.switcher=$e});
3
+ //# sourceMappingURL=forms-hIalWiGK.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-hIalWiGK.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/core/core.ts","../../src/core/utils/date.ts","../../src/components/forms/avatar/avatar.vue","../../src/components/forms/button/button.vue","../../src/components/forms/checkbox/checkbox.vue","../../src/components/forms/input/input.vue","../../src/components/forms/inputDate/inputDate.vue","../../src/components/forms/radio/radio.vue","../../src/components/forms/switcher/switcher.vue","../../src/components/forms/textarea/textarea.vue","../../src/components/forms/select/select.vue"],"sourcesContent":["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';\n\nconst _window: any = window;\n\nconst $ = (el: VNode) => {\n\tif (!_window?.jQuery?.ui?.tooltip) {\n\t\tconsole.info('Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip');\n\n\t\treturn;\n\t}\n\n\treturn _window.jQuery(el);\n};\n\nconst tvTooltipGenOptions = (binding: DirectiveBinding, vnode: VNode) => {\n\tconst options = binding.value ?? {};\n\n\toptions.content ??= vnode.props?.title;\n\toptions.content = String(options.content).replace(/\\r\\n|\\r|\\n/g, '<br>');\n\n\toptions.position ??= {\n\t\tmy: 'bottom-18px',\n\t\tat: 'top center',\n\t};\n\n\treturn options;\n};\n\nconst tooltip = {\n\tmounted(el: VNode, binding: DirectiveBinding, vnode: VNode) {\n\t\t$(el)?.tooltip(tvTooltipGenOptions(binding, vnode));\n\t},\n\n\tupdated(el: VNode, binding: DirectiveBinding, vnode: VNode, _prevVnode: VNode) {\n\t\t/**\n\t\t * В результате обновления может быть открыто несколько тултипов поэтому изменить опции, без перерисовки тултипа\n\t\t */\n\t\tconst options = tvTooltipGenOptions(binding, vnode);\n\t\tconst instance = $(el)?.tooltip('instance');\n\t\tif (!instance) {\n\t\t\treturn;\n\t\t}\n\n\t\tinstance.options = {\n\t\t\t...instance.options,\n\t\t\t...options,\n\t\t};\n\t},\n\n\tunmounted(el: VNode, binding: DirectiveBinding, vnode: VNode) {\n\t\t$(el)?.tooltip('destroy');\n\t},\n} satisfies ObjectDirective;\n\nexport default tooltip;","import { reactive } from 'vue';\nimport { 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';\n\nconst _window: any = window;\n\nclass Core {\n\n\t/**\n\t * Настройки словаря\n\t */\n\tstatic L = reactive({\n\t\tNot_date: 'Not date',\n\t});\n\n\tstatic page = _window?.page || {};\n\n\tstatic Page = Page;\n\n\tstatic options = options;\n\n\tstatic state = reactive({ ...state });\n\n\tstatic matchMediaIsMobile?: MediaQueryList;\n\n\t/**\n\t * Добавить на страницу стили, используется для загрузки стилей из js\n\t *\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\n\t * @param style - css стили в строке\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\n\t */\n\tstatic appendStyle(style: string, type: '' | 'm' | 'pc' = ''): void {\n\t\tlet media = 'all';\n\n\t\tif (type === 'm') {\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tif (type === 'pc') {\n\t\t\tmedia = '(min-width: ' + this.options.widthForMobile + 'px)';\n\t\t}\n\n\t\tconst elStyle = document.createElement('style');\n\t\telStyle.innerHTML = style;\n\t\telStyle.media = media;\n\n\t\tdocument.head.append(elStyle);\n\t}\n\n\t/**\n\t * Установить как плагин в прилоежнии Vue\n\t * Core.state является общим для всех приложений Vue на странице\n\t * Core.options является общим для всех приложений Vue на странице\n\t * @param app - Vue App\n\t * @param {typeof options} options - параметры UI\n\t */\n\tstatic install(app: any, options: typeof this.options) {\n\t\tCore.defineOptions(options);\n\n\t\tapp.provide('top-core', Core);\n\n\t\tthis.installDirectives(app);\n\t}\n\n\tstatic installDirectives(app: any) {\n\t\tapp.directive('top-tooltip', directiveTooltip);\n\t}\n\n\t/**\n\t * Установить конфигурацию UI\n\t * @param {typeof options} options\n\t */\n\tstatic defineOptions(options: typeof this.options) {\n\t\tif (options?.widthForMobile) {\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\n\t\t}\n\n\t\tif (options?.dateFormat) {\n\t\t\tthis.options.dateFormat = options.dateFormat;\n\t\t}\n\n\t\tif (options?.gmt) {\n\t\t\tthis.options.gmt = options.gmt;\n\t\t}\n\n\t\tCore.setState();\n\t}\n\n\tstatic setState() {\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\n\n\t\tCore.state.isMobileUA = 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, 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}\"\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 './checkbox';\nimport ControlLabel from '../controlLabel/controlLabel.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-forms-optionWrapper']: true,\n\t\t\t['top-checkbox']: true,\n\t\t\t['top-checkbox_' + name]: name !== '',\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-error']: isError && !disabled,\n\t\t}\"\n\t>\n\t\t<input\n\t\t\ttype=\"checkbox\"\n\t\t\t:class=\"{\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-forms-option']: true,\n\t\t\t\t['top-checkbox_input']: true,\n\t\t\t\t['top-error']: isError && !disabled,\n\t\t\t}\"\n\t\t\t:name=\"name\"\n\t\t\tv-model=\"localValue\"\n\t\t\t:value=\"value\"\n\t\t\t:indeterminate=\"indeterminate\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\n\t\t<ControlLabel\n\t\t\tv-if=\"$slots.default\"\n\t\t\t:description=\"description\"\n\t\t\t:disabled=\"disabled\"\n\t\t>\n\t\t\t<!-- @slot Слот с заголовком -->\n\t\t\t<slot></slot>\n\t\t</ControlLabel>\n\t</label>\n</template>\n\n<style module>\n.top-checkbox {\n\tcursor: pointer;\n\tdisplay: inline-flex;\n}\n\n.top-checkbox_input {\n\tcursor: inherit;\n\tborder-radius: 4px;\n\tbackground: var(--content-background-color);\n\tborder: 1px solid var(--top-forms-border-color);\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\n}\n\n.top-checkbox_input:before {\n\tcontent: ' ';\n\tcolor: #FFF;\n\tfont-family: 'Topvisor-2';\n\tfont-size: 16px;\n}\n\n.top-checkbox_input:hover {\n\tborder-color: var(--top-forms-option-color);\n\tbackground: var(--color-theme-50)\n}\n\n/* checked / indeterminate */\n.top-checkbox_input:checked,\n.top-checkbox_input:indeterminate {\n\tborder-color: var(--top-forms-option-color);\n\tbackground: var(--top-forms-option-color);\n}\n\n.top-checkbox_input:checked:before {\n\tcontent: '';\n}\n\n.top-checkbox_input:indeterminate:before {\n\tcontent: '';\n}\n\n.top-checkbox_input:checked:hover,\n.top-checkbox_input:indeterminate:hover {\n\tborder-color: var(--top-forms-option-color-hover);\n\tbackground: var(--top-forms-option-color-hover);\n}\n\n/* disabled selected */\n.top-checkbox_input:disabled {\n\tborder-color: var(--color-line-1-opacity);\n\tbackground: var(--color-theme-50);\n}\n\n.top-checkbox_input:checked:disabled,\n.top-checkbox_input:indeterminate:disabled {\n\tborder-color: transparent;\n\tbackground: var(--color-theme-400);\n}\n\n/* isError */\n.top-checkbox_input.top-error {\n\tborder-color: var(--color-negative);\n}\n\n.top-checkbox_input.top-error:hover {\n\tborder-color: var(--color-negative-2);\n}\n\n/* isError selected */\n.top-checkbox_input:checked.top-error,\n.top-checkbox_input:indeterminate.top-error {\n\tbackground: var(--color-negative);\n}\n\n.top-checkbox_input:checked.top-error:hover,\n.top-checkbox_input:indeterminate.top-error:hover {\n\tbackground: var(--color-negative-2);\n}\n</style>","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { Props, Emits } from './input';\n\ndefineOptions({\n\tinheritAttrs: false,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n\tcaptionType: '',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\nconst placeholder = computed(() => {\n\tif (props.addCleaner && !props.title) {\n\t\treturn '';\n\t}\n\tif (props.captionType !== '') {\n\t\treturn '';\n\t}\n\n\treturn props.title;\n});\n\nconst clean = () => {\n\temit('update:modelValue', '');\n};\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-input']: true,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-input-' + modificator]: !!modificator,\n\t\t\t['top-input-withCleaner']: addCleaner && localValue && localValue !== '0000-00-00',\n\t\t\t['top-formsCaptionWrapper']: captionType !== '',\n\t\t\t['top-formsCaptionWrapper-always']: captionType === 'top',\n\t\t}\"\n\t\t:data-top-icon=\"icon\"\n\t\t:data-top-icon2=\"icon2\"\n\t>\n\t\t<input\n\t\t\ttype=\"text\"\n\t\t\t:class=\"{\n\t\t\t\t['top-input_input']: true,\n\t\t\t\t['top-input_input-' + modificator]: !!modificator,\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-error']: isError,\n\t\t\t}\"\n\t\t\tautocomplete=\"off_always\"\n\t\t\t:name=\"name\"\n\t\t\tv-model=\"localValue\"\n\t\t\t:title=\"title\"\n\t\t\t:placeholder=\"placeholder\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:readonly=\"readonly\"\n\t\t\t@keydown.esc.stop=\"() => (addCleaner || !!$slots.btn) && clean()\"\n\t\t\t:=\"$attrs\"\n\t\t>\n\n\t\t<span\n\t\t\tv-if=\"addCleaner && localValue && localValue !== '0000-00-00'\"\n\t\t\tclass=\"top-input_cleaner\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t@click.prevent=\"clean\"\n\t\t></span>\n\n\t\t<span\n\t\t\tv-if=\"captionType !== ''\"\n\t\t\tclass=\"top-formsCaption\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</span>\n\n\t\t<!-- @slot Слот для вставки произвольного кода в label -->\n\t\t<slot></slot>\n\t</label>\n</template>\n\n<style module>\n.top-input {\n\t--top-forms_clear-width: 0px;\n\n\twidth: 180px;\n\tposition: relative;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--top-gap-1);\n}\n\n.top-input_input {\n\tbackground: var(--top-forms-background-color);\n\theight: var(--top-forms-base-height);\n\tpadding: 0;\n\tpadding-right: calc(max(var(--top-forms-padding), calc(var(--top-icon2-width) + var(--top-forms_clear-width))));\n\tpadding-left: calc(max(var(--top-forms-padding), var(--top-icon-width)));\n}\n\n.top-input_input:hover {\n\tbackground: var(--top-forms-background-color-hover);\n}\n\n.top-input_input:focus {\n\toutline-color: var(--color-theme-75);\n\toutline-offset: 0;\n}\n\n/* значки */\n.top-input[data-top-icon]:before,\n.top-input[data-top-icon2]:after {\n\t--top-icon-color: var(--color-text-secondary);\n\t--top-icon2-color: var(--color-text-secondary);\n\n\tposition: absolute;\n\tz-index: 3;\n}\n\n.top-input[data-top-icon]:before {\n\tleft: 0;\n}\n\n.top-input[data-top-icon2]:after {\n\tright: 0;\n}\n\n/* cleaner */\n.top-input-withCleaner {\n\t--top-forms_clear-width: 24px;\n}\n\n.top-input_cleaner {\n\t--top-icon-size: 20px;\n\t--top-icon-width: 20px;\n\t--top-icon-color: var(--color-text-3);\n\n\tcursor: pointer;\n\tborder-radius: 50%;\n\twidth: 24px;\n\theight: 24px;\n\tposition: absolute;\n\tright: calc(var(--top-forms-border-width) + max(var(--top-icon2-width), var(--top-forms-padding) / 2));\n\tz-index: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.top-input_cleaner:hover {\n\t--top-icon-color: var(--color-text-2);\n}\n\n/* TODO: перенести в inputsRange */\n.top-input_input {\n\twidth: 50%;\n\tflex-grow: 1;\n}\n</style>","<script lang=\"ts\">\nconst useNativeDatepicker = !!document.documentElement.ontouchstart && !!document.createElement('input').showPicker;\n\nlet onInputLazy = (_e: any) => { };\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, onUnmounted } from 'vue';\nimport { 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 { toRef, computed, watch } from 'vue';\nimport type { Props, Emits } from './select';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst localValue = computed({\n\tget() {\n\t\treturn props.modelValue;\n\t},\n\n\tset(value) {\n\t\temit('update:modelValue', value);\n\t},\n});\n\n/**\n * Иконка выбранного option\n */\nconst optionIcon = computed(() => {\n\treturn optionByValue.value.get(localValue.value)?.icon;\n});\n\n/**\n * Словарь с доступными options\n */\nconst optionByValue = computed(() => {\n\tconst res = new Map();\n\n\tprops.options.forEach((option) => {\n\t\tif (option.disabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (option.children) {\n\t\t\toption.children.forEach(subOption => {\n\t\t\t\tif (subOption.disabled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tres.set(subOption.value, subOption);\n\t\t\t});\n\n\t\t\treturn;\n\t\t}\n\n\t\tres.set(option.value, option);\n\t});\n\n\treturn res;\n});\n\n/**\n * Логика для обртаной своместимости:\n * - null - заменить на первое доступное значение\n * - undefined - заменить на первое доступное значение\n */\nwatch([\n\ttoRef(props.modelValue),\n\toptionByValue,\n], () => {\n\tif ((localValue.value === null || localValue.value === undefined) && optionByValue.value.size) {\n\t\tconsole.warn('Пожалуйста, не передавайте в компонент Select значения null и undefined');\n\n\t\tlocalValue.value = optionByValue.value.keys().next().value;\n\t}\n}, { immediate: true });\n\n/**\n * Выбрать следующее доступное значение\n */\nconst selectNextValue = () => {\n\tconst listEnabledValues = [...optionByValue.value.keys()];\n\tconst currentIndex = listEnabledValues.indexOf(localValue.value);\n\tconst nextIndex = (currentIndex + 1) % listEnabledValues.length;\n\n\tlocalValue.value = listEnabledValues[nextIndex];\n};\n</script>\n\n<template>\n\t<label\n\t\t:class=\"{\n\t\t\t['top-select']:true,\n\t\t\t['top-select-' + name]:name,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-formsCaptionWrapper']: !!title,\n\t\t\t['top-select-error']: isError,\n\t\t\t['top-disabled']: disabled,\n\t\t}\"\n\t\t:data-value=\"localValue\"\n\t\t:data-top-icon=\"icon\"\n\t\t:data-top-icon2=\"optionIcon\"\n\t>\n\t\t<select\n\t\t\t:class=\"{\n\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t['top-select_select']: true,\n\t\t\t\t['top-select_arrow']: true,\n\t\t\t\t['top-error']: isError,\n\t\t\t}\"\n\t\t\t:name=\"name\"\n\t\t\t:disabled=\"disabled\"\n\t\t\tv-model=\"localValue\"\n\t\t>\n\t\t\t<template v-for=\"[_index, option] of options.entries()\">\n\t\t\t\t<optgroup\n\t\t\t\t\tv-if=\"option.children\"\n\t\t\t\t\t:key=\"'group_' + option.value\"\n\t\t\t\t\t:label=\"option.title\"\n\t\t\t\t\t:disabled=\"option.disabled\"\n\t\t\t\t>\n\t\t\t\t\t<option\n\t\t\t\t\t\tv-for=\"[_index, subOption] of option.children.entries()\"\n\t\t\t\t\t\t:key=\"option.value\"\n\t\t\t\t\t\t:value=\"subOption.value\"\n\t\t\t\t\t\t:selected=\"subOption.value === localValue\"\n\t\t\t\t\t\t:disabled=\"subOption.disabled\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ subOption.title }}\n\t\t\t\t\t</option>\n\t\t\t\t</optgroup>\n\n\t\t\t\t<option\n\t\t\t\t\tv-else\n\t\t\t\t\t:key=\"option.value\"\n\t\t\t\t\t:value=\"option.value\"\n\t\t\t\t\t:selected=\"option.value === localValue\"\n\t\t\t\t\t:disabled=\"option.disabled\"\n\t\t\t\t>\n\t\t\t\t\t{{ option.title }}\n\t\t\t\t</option>\n\t\t\t</template>\n\t\t</select>\n\n\t\t<span\n\t\t\tv-if=\"addChanger && optionByValue.size && !disabled\"\n\t\t\tclass=\"top-changer\"\n\t\t\t@click=\"selectNextValue\"\n\t\t></span>\n\n\t\t<span\n\t\t\tv-if=\"title\"\n\t\t\tclass=\"top-formsCaption\"\n\t\t>\n\t\t\t{{ title }}\n\t\t</span>\n\t</label>\n</template>\n\n<style module>\n.top-select {\n\t--top-icon-color: var(--color-text-3);\n\t--top-icon2-color: var(--color-text-2);\n\n\talign-items: center;\n\twidth: 180px;\n\tmax-width: 100%;\n\tdisplay: inline-flex;\n}\n\n.top-select-error {\n\t--top-icon-color: var(--color-negative);\n\t--top-icon2-color: var(--color-negative);\n}\n\n.top-select_select {\n\tbackground-color: var(--top-forms-background-color);\n\n\t/* для select вместо padding нужно использовать text-indent */\n\tpadding-left: var(--top-forms-padding);\n\n\t/* если есть значки, добавить отступ на их ширину с учетом уже добавленного padding */\n\ttext-indent: calc(clamp(0px, calc(var(--top-icon-both-width) - var(--top-forms-padding)), calc(var(--top-icon-both-width) - var(--top-forms-padding))));\n\n\twidth: 100%;\n\theight: var(--top-forms-base-height);\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tflex-grow: 1;\n\toverflow: hidden;\n}\n\n.top-select_select:focus {\n\toutline-color: var(--color-theme-75);\n\toutline-offset: 0;\n}\n\n.top-select_select:disabled {\n\tbackground: var(--color-theme-50);\n}\n\n.top-select optgroup {\n\tcolor: var(--color-text-1);\n\tfont-style: normal;\n}\n\n.top-select option {\n\tbackground: var(--content-background-color);\n\tcolor: var(--color-text-1);\n}\n\n/* хром не мерняет цвет для optgroup option, стили оставлены по умолчанию */\n/*\n.top-select optgroup:disabled,\n.top-select optgroup option,\n.top-select option:disabled {\n\n}\n*/\n\n/* https://bugzilla.mozilla.org/show_bug.cgi?id=1743066 */\n@-moz-document url-prefix() {\n\t.top-select_select {\n\t\ttext-indent: calc(clamp(0px, calc(var(--top-icon-both-width) - var(--top-forms-padding)), calc(var(--top-icon-both-width) - var(--top-forms-padding))) / 2);\n\t}\n}\n\n@media only screen and (min-width: 900px) {\n\t/* changer */\n\t.top-changer {\n\t\tcursor: pointer;\n\t\tborder-radius: 100%;\n\t\twidth: 0;\n\t\ttransform: translateX(-44px);\n\t\tcolor: var(--color-text-secondary-2);\n\t\tfont-size: 16px;\n\t\tline-height: 1;\n\t\tdisplay: none;\n\t\tz-index: 2;\n\t\torder: 4;\n\t}\n\n\t.top-changer:hover {\n\t\tcolor: var(--color-primary);\n\t}\n\n\t.top-changer:after {\n\t\tcontent: '';\n\t\tbackground-color: var(--top-forms-background-color);\n\t\tfont-family: 'Topvisor-2';\n\t}\n\n\t*:hover > .top-changer {\n\t\tdisplay: block;\n\t}\n}\n</style>"],"names":["isRetina","isMobile","isApp","isMacOS","isSafari","isChrome","isSafari2","getCommandKeyLabel","Page","onResizeTimer","onResizeListeners","windowSize","listener","callback","e","onResize","Events","addOnReize","removeOnResize","options","_a","state","_b","$","el","_window$1","tvTooltipGenOptions","binding","vnode","tooltip","instance","Core","vue","media","type","elStyle","style","app","options2","device","date","timestamp","Y","m","H","i","s","time","dateFormat","emptyValue","dateForObj","result","dateFormat2","dateObject","d","y","dateChunks","index","props","__props","titleStatus","i18n","tagName","emit","__emit","localValue","value","placeholder","onInputLazy","_e","$el","oninput","onchange","dateFormatted","init","datepicker","resolve","reject","require","value2","optionIcon","optionByValue","res","option","subOption","listEnabledValues"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ define(["require","exports","vue","./forms-hIalWiGK.amd","../popup/worker.amd","../require/css.amd!../assets/listItem.css"],function($,c,e,i,d){"use strict";if(typeof e>"u")var e=window.Vue;const m=e.defineComponent({__name:"opener",props:{id:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByHover:{type:Boolean},posBy:{default:"fixed"}},setup(a){const t=a,p=t.id||Math.random()+"";let s;function u(n){setTimeout(()=>{s=n.nextElementSibling,s&&l(s)})}e.onUpdated(()=>{s&&l(s)});function l(n){n.dataset.topPopup="vue-"+p,n.dataset.topPopupId=p,n.dataset.topPopupP=t.pos,n.dataset.topPopupPosBy=t.posBy,n.dataset.topPopupNotch=t.notch?"true":"",n.dataset.topPopupOpenByHover=t.openByHover?"true":""}return(n,v)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("template",{ref:u}),e.renderSlot(n.$slots,"default")],64))}}),f={key:0,class:"top-popup_header"},B={key:0,class:"top-as-a closer"},y={key:1,class:"top-popup_content"},k={key:2,class:"top-popup_content"},C={key:3,class:"top-popup_footer"},_=e.defineComponent({__name:"popup",props:{id:{default:""},class:{},pos:{default:"3"},notch:{type:Boolean,default:!0},openByHover:{type:Boolean},posBy:{default:"fixed"}},emits:["open","close"],setup(a,{emit:t}){const p=a,s=t,u=p.id||Math.random()+"",l=e.ref(null),r={onOpen:async o=>{o.elPopupInner.innerText="",l.value=o.elPopupInner,r.opened=!0,r.popup=o,s("open")},onClose:o=>{l.value=null,r.opened=!1,r.popup=null,s("close")},classRef:e.toRef(p,"class"),opened:!1,popup:null};return d.PopupWorker.regVueComponent(u,r),e.onUnmounted(()=>{d.PopupWorker.unregVueComponent(u)}),(o,P)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[o.$slots.opener?(e.openBlock(),e.createBlock(m,{key:0,id:e.unref(u),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),l.value?(e.openBlock(),e.createBlock(e.Teleport,{key:1,to:l.value},[o.$slots.header||e.unref(i.Core).state.isMobile?(e.openBlock(),e.createElementBlock("div",f,[e.unref(i.Core).state.isMobile?(e.openBlock(),e.createElementBlock("span",B,e.toDisplayString(r.popup.options.i18n.Close),1)):e.createCommentVNode("",!0),e.renderSlot(o.$slots,"header")])):e.createCommentVNode("",!0),o.$slots.content?(e.openBlock(),e.createElementBlock("div",y,[e.renderSlot(o.$slots,"content")])):e.createCommentVNode("",!0),o.$slots.contentList?(e.openBlock(),e.createElementBlock("ul",k,[e.renderSlot(o.$slots,"contentList")])):e.createCommentVNode("",!0),o.$slots.footer?(e.openBlock(),e.createElementBlock("div",C,[e.renderSlot(o.$slots,"footer")])):e.createCommentVNode("",!0)],8,["to"])):e.createCommentVNode("",!0)],64))}}),h=e.defineComponent({inheritAttrs:!1,__name:"listItem",props:{type:{default:"button"},closeByClick:{type:Boolean,default:!0}},setup(a){const t=a;return(p,s)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass({"top-popup_liNoSelectable":t.type!=="button"})},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(p.$attrs.href?"a":"div"),e.mergeProps({class:{"top-popup_listItem":!0,"top-popup_listItem-button":t.type==="button",a:t.type==="button","top-popup_listItem-title":t.type==="title","top-popup_listItem-delimiter":t.type==="delimiter","top-popup-noCloser":!p.closeByClick}},p.$attrs),{default:e.withCtx(()=>[e.renderSlot(p.$slots,"default")]),_:3},16,["class"]))],2))}});c._sfc_main=_,c._sfc_main$1=m,c._sfc_main$2=h});
2
+ //# sourceMappingURL=listItem.vue_vue_type_script_setup_true_lang-bLJ0dcPn.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listItem.vue_vue_type_script_setup_true_lang-bLJ0dcPn.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 type { Props, Emits } from './popup';\nimport Core from '@/core/core/core';\nimport Opener from './opener.vue';\nimport Worker from '@/components/popup/lib/worker';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tid: '',\n\tpos: '3',\n\tnotch: true,\n\tposBy: 'fixed',\n});\n\nconst emit = defineEmits<Emits>();\n\nconst id = props.id || Math.random() + '';\nconst elPopupRef = ref(null);\n\n// см. lib/popup\nconst onOpen = async (popup: any) => {\n\tpopup.elPopupInner.innerText = '';\n\n\telPopupRef.value = popup.elPopupInner;\n\n\tvueConnector.opened = true;\n\tvueConnector.popup = popup;\n\n\temit('open');\n};\n\n// см. lib/popup\nconst onClose = (popup: any) => {\n\telPopupRef.value = null;\n\n\tvueConnector.opened = false;\n\tvueConnector.popup = null;\n\n\temit('close');\n};\n\nconst vueConnector = {\n\tonOpen,\n\tonClose,\n\tclassRef: toRef(props, 'class'),\n\topened: false,\n\tpopup: null,\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.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 v-if=\"$slots.contentList\" class=\"top-popup_content\">\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","elPopupRef","vue","popup","vueConnector","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,2hBClCD,MAAAA,EAAAC,EAOAO,EAAAC,EAEAP,EAAAF,EAAA,IAAA,KAAA,OAAA,EAAA,GACAU,EAAAC,EAAA,IAAA,IAAA,KAwBqB,OArBrB,MAAAC,GAAA,CACCA,EAAA,aAAA,UAAA,GAEAF,EAAA,MAAAE,EAAA,aAEAC,EAAA,OAAA,GACAA,EAAA,MAAAD,EAEAJ,EAAA,MAAA,CAAW,EAcX,QAVDI,GAAA,CACCF,EAAA,MAAA,KAEAG,EAAA,OAAA,GACAA,EAAA,MAAA,KAEAL,EAAA,OAAA,CAAY,EAKZ,SAAAG,EAAA,MAAAX,EAAA,OAAA,sBAGO,+DAMPc,EAAA,YAAA,kBAAAZ,CAAA,CAA2B,CAAA,8vCC7C5B,MAAAF,EAAAC"}
@@ -0,0 +1,148 @@
1
+ import { insertToPage as $ } from "../utils/css.js";
2
+ import { defineComponent as y, onUpdated as k, openBlock as s, createElementBlock as l, Fragment as _, createElementVNode as b, renderSlot as i, ref as I, toRef as g, onUnmounted as H, createBlock as f, unref as m, withCtx as v, createCommentVNode as u, Teleport as S, toDisplayString as N, normalizeClass as T, resolveDynamicComponent as M, mergeProps as V } from "vue";
3
+ import { C as B } from "./forms-dneLtREE.es.js";
4
+ import { PopupWorker as h } from "../popup/worker.js";
5
+ const P = ["../assets/listItem.css"].map((a) => import.meta.resolve(a));
6
+ await $(P);
7
+ const E = /* @__PURE__ */ y({
8
+ __name: "opener",
9
+ props: {
10
+ id: {},
11
+ pos: { default: "3" },
12
+ notch: { type: Boolean, default: !0 },
13
+ openByHover: { type: Boolean },
14
+ posBy: { default: "fixed" }
15
+ },
16
+ setup(a) {
17
+ const o = a, p = o.id || Math.random() + "";
18
+ let n;
19
+ function c(t) {
20
+ setTimeout(() => {
21
+ n = t.nextElementSibling, n && r(n);
22
+ });
23
+ }
24
+ k(() => {
25
+ n && r(n);
26
+ });
27
+ function r(t) {
28
+ t.dataset.topPopup = "vue-" + p, t.dataset.topPopupId = p, t.dataset.topPopupP = o.pos, t.dataset.topPopupPosBy = o.posBy, t.dataset.topPopupNotch = o.notch ? "true" : "", t.dataset.topPopupOpenByHover = o.openByHover ? "true" : "";
29
+ }
30
+ return (t, C) => (s(), l(_, null, [
31
+ b("template", { ref: c }),
32
+ i(t.$slots, "default")
33
+ ], 64));
34
+ }
35
+ }), R = {
36
+ key: 0,
37
+ class: "top-popup_header"
38
+ }, U = {
39
+ key: 0,
40
+ class: "top-as-a closer"
41
+ }, w = {
42
+ key: 1,
43
+ class: "top-popup_content"
44
+ }, D = {
45
+ key: 2,
46
+ class: "top-popup_content"
47
+ }, L = {
48
+ key: 3,
49
+ class: "top-popup_footer"
50
+ }, q = /* @__PURE__ */ y({
51
+ __name: "popup",
52
+ props: {
53
+ id: { default: "" },
54
+ class: {},
55
+ pos: { default: "3" },
56
+ notch: { type: Boolean, default: !0 },
57
+ openByHover: { type: Boolean },
58
+ posBy: { default: "fixed" }
59
+ },
60
+ emits: ["open", "close"],
61
+ setup(a, { emit: o }) {
62
+ const p = a, n = o, c = p.id || Math.random() + "", r = I(null), d = {
63
+ onOpen: async (e) => {
64
+ e.elPopupInner.innerText = "", r.value = e.elPopupInner, d.opened = !0, d.popup = e, n("open");
65
+ },
66
+ onClose: (e) => {
67
+ r.value = null, d.opened = !1, d.popup = null, n("close");
68
+ },
69
+ classRef: g(p, "class"),
70
+ opened: !1,
71
+ popup: null
72
+ };
73
+ return h.regVueComponent(c, d), H(() => {
74
+ h.unregVueComponent(c);
75
+ }), (e, W) => (s(), l(_, null, [
76
+ e.$slots.opener ? (s(), f(E, {
77
+ key: 0,
78
+ id: m(c),
79
+ pos: e.pos,
80
+ posBy: e.posBy,
81
+ notch: e.notch,
82
+ openByHover: e.openByHover
83
+ }, {
84
+ default: v(() => [
85
+ i(e.$slots, "opener")
86
+ ]),
87
+ _: 3
88
+ }, 8, ["id", "pos", "posBy", "notch", "openByHover"])) : u("", !0),
89
+ r.value ? (s(), f(S, {
90
+ key: 1,
91
+ to: r.value
92
+ }, [
93
+ e.$slots.header || m(B).state.isMobile ? (s(), l("div", R, [
94
+ m(B).state.isMobile ? (s(), l("span", U, N(d.popup.options.i18n.Close), 1)) : u("", !0),
95
+ i(e.$slots, "header")
96
+ ])) : u("", !0),
97
+ e.$slots.content ? (s(), l("div", w, [
98
+ i(e.$slots, "content")
99
+ ])) : u("", !0),
100
+ e.$slots.contentList ? (s(), l("ul", D, [
101
+ i(e.$slots, "contentList")
102
+ ])) : u("", !0),
103
+ e.$slots.footer ? (s(), l("div", L, [
104
+ i(e.$slots, "footer")
105
+ ])) : u("", !0)
106
+ ], 8, ["to"])) : u("", !0)
107
+ ], 64));
108
+ }
109
+ }), G = /* @__PURE__ */ y({
110
+ inheritAttrs: !1,
111
+ __name: "listItem",
112
+ props: {
113
+ type: { default: "button" },
114
+ closeByClick: { type: Boolean, default: !0 }
115
+ },
116
+ setup(a) {
117
+ const o = a;
118
+ return (p, n) => (s(), l("li", {
119
+ class: T({
120
+ "top-popup_liNoSelectable": o.type !== "button"
121
+ })
122
+ }, [
123
+ (s(), f(M(p.$attrs.href ? "a" : "div"), V({
124
+ class: {
125
+ "top-popup_listItem": !0,
126
+ "top-popup_listItem-button": o.type === "button",
127
+ // оформления кнопки
128
+ a: o.type === "button",
129
+ // оформления кнопки, deprecated
130
+ "top-popup_listItem-title": o.type === "title",
131
+ "top-popup_listItem-delimiter": o.type === "delimiter",
132
+ "top-popup-noCloser": !p.closeByClick
133
+ }
134
+ }, p.$attrs), {
135
+ default: v(() => [
136
+ i(p.$slots, "default")
137
+ ]),
138
+ _: 3
139
+ }, 16, ["class"]))
140
+ ], 2));
141
+ }
142
+ });
143
+ export {
144
+ q as _,
145
+ E as a,
146
+ G as b
147
+ };
148
+ //# sourceMappingURL=listItem.vue_vue_type_script_setup_true_lang-qWOlkuQ3.es.js.map