@topvisor/ui 0.9.18 → 0.9.21

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 (51) hide show
  1. package/.chunks/{datepicker-C7YUpcvo.amd.js → datepicker-B9eprAyk.amd.js} +2 -2
  2. package/.chunks/{datepicker-C7YUpcvo.amd.js.map → datepicker-B9eprAyk.amd.js.map} +1 -1
  3. package/.chunks/{datepicker-Bv7QQgby.es.js → datepicker-C86O1mQq.es.js} +2 -2
  4. package/.chunks/{datepicker-Bv7QQgby.es.js.map → datepicker-C86O1mQq.es.js.map} +1 -1
  5. package/.chunks/{forms-_rDwj89q.amd.js → forms-DkNAMd-D.amd.js} +3 -3
  6. package/.chunks/forms-DkNAMd-D.amd.js.map +1 -0
  7. package/.chunks/{forms-C4Cwecin.es.js → forms-gb7uf2K8.es.js} +159 -159
  8. package/.chunks/forms-gb7uf2K8.es.js.map +1 -0
  9. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-HTufWVek.amd.js → listItem.vue_vue_type_script_setup_true_lang-2TAzIZZA.amd.js} +2 -2
  10. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-HTufWVek.amd.js.map → listItem.vue_vue_type_script_setup_true_lang-2TAzIZZA.amd.js.map} +1 -1
  11. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-Bdn15bn4.es.js → listItem.vue_vue_type_script_setup_true_lang-Caw4oFU-.es.js} +2 -2
  12. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-Bdn15bn4.es.js.map → listItem.vue_vue_type_script_setup_true_lang-Caw4oFU-.es.js.map} +1 -1
  13. package/.chunks/{popup-DFeFrj9j.es.js → popup-B-BAfp1v.es.js} +5 -3
  14. package/.chunks/popup-B-BAfp1v.es.js.map +1 -0
  15. package/.chunks/{popup-DsGIUjVp.amd.js → popup-CV5MPPEu.amd.js} +5 -3
  16. package/.chunks/popup-CV5MPPEu.amd.js.map +1 -0
  17. package/.chunks/{widgetInput-VXzd43n4.amd.js → widgetInput-BxO9y9L7.amd.js} +2 -2
  18. package/.chunks/widgetInput-BxO9y9L7.amd.js.map +1 -0
  19. package/.chunks/{widgetInput-CRzxG31N.es.js → widgetInput-DPOH_qya.es.js} +9 -9
  20. package/.chunks/{widgetInput-CRzxG31N.es.js.map → widgetInput-DPOH_qya.es.js.map} +1 -1
  21. package/core/core.amd.js +1 -1
  22. package/core/core.js +1 -1
  23. package/forms/forms.amd.js +1 -1
  24. package/forms/forms.js +1 -1
  25. package/formsExt/formsExt.amd.js +1 -1
  26. package/formsExt/formsExt.js +3 -3
  27. package/package.json +1 -1
  28. package/popup/popup.amd.js +1 -1
  29. package/popup/popup.js +2 -2
  30. package/popup/worker.amd.js +1 -1
  31. package/popup/worker.js +2 -2
  32. package/src/core/utils/window.d.ts +1 -1
  33. package/tabs/tabs.amd.js +1 -1
  34. package/tabs/tabs.js +1 -1
  35. package/tabsView/tabsView.amd.js +1 -1
  36. package/tabsView/tabsView.js +2 -2
  37. package/utils/date.amd.js +1 -1
  38. package/utils/date.js +1 -1
  39. package/utils/device.amd.js +1 -1
  40. package/utils/device.js +3 -3
  41. package/utils/scroll.amd.js +1 -1
  42. package/utils/scroll.amd.js.map +1 -1
  43. package/utils/scroll.js +1 -1
  44. package/utils/scroll.js.map +1 -1
  45. package/utils/window.amd.js +1 -1
  46. package/utils/window.js +2 -2
  47. package/.chunks/forms-C4Cwecin.es.js.map +0 -1
  48. package/.chunks/forms-_rDwj89q.amd.js.map +0 -1
  49. package/.chunks/popup-DFeFrj9j.es.js.map +0 -1
  50. package/.chunks/popup-DsGIUjVp.amd.js.map +0 -1
  51. package/.chunks/widgetInput-VXzd43n4.amd.js.map +0 -1
@@ -1,4 +1,4 @@
1
- define(["require","exports","vue","./forms-_rDwj89q.amd"],function(v,k,c,n){"use strict";if(typeof c>"u")var c=window.Vue;n.Core.appendStyle(`/* ui-datepicker */\r
1
+ define(["require","exports","vue","./forms-DkNAMd-D.amd"],function(v,k,c,n){"use strict";if(typeof c>"u")var c=window.Vue;n.Core.appendStyle(`/* ui-datepicker */\r
2
2
  .ui-datepicker {\r
3
3
  --datepicker-day-color: #FFF;\r
4
4
  --datepicker-day-color-hover: var(--color-blue-150);\r
@@ -231,4 +231,4 @@ td.ui-datepicker-today a {\r
231
231
  .ui-datepicker-row-break {\r
232
232
  display: none;\r
233
233
  }`);const h=t=>{var r,e;if(!((e=(r=n.Core.$)==null?void 0:r.ui)!=null&&e.datepicker)){console.info("Для работы datepicker требуется глобальная загрузка jQuery UI Datepicker");return}return n.Core.$.datepicker.setDefaults({dateFormat:n.Core.state.dateFormat.toLowerCase().replace("m","mm").replace("y","yy").replace("d","dd")}),n.Core.$(t)};function m(t,r){var e;return(e=h(t))==null?void 0:e.datepicker(r)}let o,p,l,u;c.watch(c.toRef(n.Core.state.dateFormat),()=>{var t;o=n.dateFormat("2000-01-01"),p=((t=o.match(/\D/))==null?void 0:t[0])??"-",l=o.replace(/\D+/g,"").length,u=[];for(let r=0;r<o.length;r++)o[r]===p&&u.push(r)},{immediate:!0});function b(t){let r=t.target.selectionEnd,e=t.target.value,i=e.substring(0,r).replace(/\D+/g,""),a=e.substring(r).replace(/\D+/g,""),s=i.length+a.length-l;if(s>0){i=i.substring(0,l);const d=l-i.length;a=a.substring(a.length-d)}else s<0&&(t.inputType==="deleteContentForward"?i+="0".repeat(-s):a="0".repeat(-s)+a);r=i.length,e=i+a;for(let d=0;d<u.length;d++){const g=u[d];e=e.substring(0,g)+p+e.substring(g),r>=g&&r++}t.inputType==="deleteContentBackward"&&e[r-1]===p&&r--,e!==t.target.value&&(t.target.value=e,t.target.selectionStart=r,t.target.selectionEnd=r)}k.connectDatepicker=m,k.oninput=b,Object.defineProperty(k,Symbol.toStringTag,{value:"Module"})});
234
- //# sourceMappingURL=datepicker-C7YUpcvo.amd.js.map
234
+ //# sourceMappingURL=datepicker-B9eprAyk.amd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datepicker-C7YUpcvo.amd.js","sources":["../../src/components/forms/inputDate/datepicker.ts","../../src/components/forms/inputDate/datepicker.css?raw"],"sourcesContent":["import { toRef, watch } from 'vue';\r\nimport Core from '@/core/core/core';\r\nimport { dateFormat } from '@/core/utils/date';\r\n\r\nimport css from '@/components/forms/inputDate/datepicker.css?raw';\r\n\r\nCore.appendStyle(css);\r\n\r\nconst $ = (el: HTMLInputElement) => {\r\n\tif (!Core.$?.ui?.datepicker) {\r\n\t\tconsole.info('Для работы datepicker требуется глобальная загрузка jQuery UI Datepicker');\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tCore.$.datepicker.setDefaults({\r\n\t\tdateFormat: Core.state.dateFormat.toLowerCase().replace('m', 'mm').replace('y', 'yy').replace('d', 'dd')\r\n\t});\r\n\r\n\treturn Core.$(el);\r\n};\r\n\r\nexport function connectDatepicker(el: HTMLInputElement, options: any) {\r\n\treturn $(el)?.datepicker(options);\r\n}\r\n\r\nlet dateFormatted;\r\nlet delimiter: string;\r\nlet dateNumbersCount: number;\r\nlet delimitersIndexes: number[];\r\n\r\nwatch(toRef(Core.state.dateFormat), () => {\r\n\t// генерация отформатированной даты, извлечение из нее разделителей и их индексов\r\n\tdateFormatted = dateFormat('2000-01-01');\r\n\tdelimiter = dateFormatted.match(/\\D/)?.[0] ?? '-';\r\n\tdateNumbersCount = dateFormatted.replace(/\\D+/g, '').length;\r\n\tdelimitersIndexes = [];\r\n\r\n\tfor (let i = 0; i < dateFormatted.length; i++) {\r\n\t\tif (dateFormatted[i] === delimiter) {\r\n\t\t\tdelimitersIndexes.push(i);\r\n\t\t}\r\n\t}\r\n}, { immediate: true });\r\n\r\n/**\r\n * Автоформат при вводе в поле с датой\r\n */\r\nexport function oninput(e: any) {\r\n\tlet selectionPos = e.target.selectionEnd;\r\n\tlet value = e.target.value;\r\n\r\n\t// разбить занчение на две половины - до и после каретки\r\n\t// удалить все символы, кроме цифр\r\n\tlet valueChunkLeft = value.substring(0, selectionPos).replace(/\\D+/g, '');\r\n\tlet valueChunkRight = value.substring(selectionPos).replace(/\\D+/g, '');\r\n\r\n\tlet extraNumbersCount = valueChunkLeft.length + valueChunkRight.length - dateNumbersCount;\r\n\tif (extraNumbersCount > 0) {\r\n\t\t// // количество цифр больше требуемого - удалить лишние\r\n\t\tvalueChunkLeft = valueChunkLeft.substring(0, dateNumbersCount);\r\n\r\n\t\tconst valueChunkRightMaxLength = dateNumbersCount - valueChunkLeft.length;\r\n\t\tvalueChunkRight = valueChunkRight.substring(valueChunkRight.length - valueChunkRightMaxLength);\r\n\t} else if (extraNumbersCount < 0) {\r\n\t\t// количество цифр меньше требуемого - добавить 0\r\n\t\tif (e.inputType === 'deleteContentForward') {\r\n\t\t\t// нажатие на delete - добавить к левой части для правильного позиционирования каретки\r\n\t\t\tvalueChunkLeft += '0'.repeat(-extraNumbersCount);\r\n\t\t} else {\r\n\t\t\tvalueChunkRight = '0'.repeat(-extraNumbersCount) + valueChunkRight;\r\n\t\t}\r\n\t}\r\n\r\n\tselectionPos = valueChunkLeft.length;\r\n\tvalue = valueChunkLeft + valueChunkRight;\r\n\r\n\t// вставить разделители\r\n\tfor (let i = 0; i < delimitersIndexes.length; i++) {\r\n\t\tconst delimiterIndex = delimitersIndexes[i];\r\n\r\n\t\tvalue = value.substring(0, delimiterIndex) + delimiter + value.substring(delimiterIndex);\r\n\r\n\t\t// сдвинуть каретку, если разделитель вставлен левее ее\r\n\t\tif (selectionPos >= delimiterIndex) {\r\n\t\t\tselectionPos++;\r\n\t\t}\r\n\t}\r\n\r\n\t// нажатие на backspace - если слева символ разделителя, перенести каретку за него\r\n\tif (e.inputType === 'deleteContentBackward' && value[selectionPos - 1] === delimiter) {\r\n\t\tselectionPos--;\r\n\t}\r\n\r\n\t// если значение изменилось - вставить его и переместить каретку\r\n\tif (value !== e.target.value) {\r\n\t\te.target.value = value;\r\n\t\te.target.selectionStart = selectionPos;\r\n\t\te.target.selectionEnd = selectionPos;\r\n\t}\r\n}","export default \"/* ui-datepicker */\\r\\n.ui-datepicker {\\r\\n\\t--datepicker-day-color: #FFF;\\r\\n\\t--datepicker-day-color-hover: var(--color-blue-150);\\r\\n\\t--datepicker-selected-color: var(--color-blue-500);\\r\\n\\t--datepicker-selected-color-hover: var(--color-blue-550);\\r\\n\\t--datepicker-range-color: var(--color-blue-100);\\r\\n\\t--datepicker-range-color-hover: var(--color-blue-150);\\r\\n\\r\\n\\tuser-select: none;\\r\\n\\twidth: auto;\\r\\n\\tpadding: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker:before,\\r\\n.ui-datepicker:after {\\r\\n\\tdisplay: none;\\r\\n}\\r\\n\\r\\n/* на странице */\\r\\n.ui-datepicker-inline {\\r\\n\\tdisplay: inline-block !important;\\r\\n}\\r\\n\\r\\n/* в popup */\\r\\n.ui-datepicker:not(.ui-datepicker-inline) {\\r\\n\\tborder-radius: 8px;\\r\\n\\tbackground: var(--content-background-color);\\r\\n\\tbox-shadow: var(--top-shadow);\\r\\n\\tz-index: 10000000 !important;\\r\\n\\tpadding: 8px;\\r\\n}\\r\\n\\r\\n.ui-datepicker a {\\r\\n\\ttext-decoration: none !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker option {\\r\\n\\tcolor: var(--color-text);\\r\\n\\tfont-size: 14px;\\r\\n}\\r\\n\\r\\n.ui-datepicker-header {\\r\\n\\tpadding: 0 !important;\\r\\n\\tmargin: 0 0 18px 0;\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-header > * {\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n\\tjustify-content: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-title {\\r\\n\\twidth: 100% !important;\\r\\n\\theight: 24px;\\r\\n\\tmargin: 0 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-month,\\r\\n.ui-datepicker-year {\\r\\n\\toutline: none !important;\\r\\n\\twidth: auto !important;\\r\\n\\tborder: none;\\r\\n\\tpadding: 0;\\r\\n\\tmargin: 0 6px !important;\\r\\n\\ttext-align: center;\\r\\n\\tfont-size: 16px !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-month {\\r\\n\\tcolor: var(--color-text);\\r\\n}\\r\\n\\r\\n.ui-datepicker-year {\\r\\n\\tcolor: var(--color-gray-300);\\r\\n}\\r\\n\\r\\n/*\\tselect.ui-datepicker-month,\\r\\nselect.ui-datepicker-year{ cursor: pointer; color: var(--color-blue-500); }*/\\r\\nselect.ui-datepicker-month,\\r\\nselect.ui-datepicker-year {\\r\\n\\tcursor: pointer;\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev,\\r\\n.ui-datepicker-next {\\r\\n\\tcursor: pointer;\\r\\n\\twidth: 24px !important;\\r\\n\\theight: 24px !important;\\r\\n\\tfont-size: 24px;\\r\\n\\tfont-family: 'Topvisor-2';\\r\\n\\tposition: static !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev:before {\\r\\n\\tcontent: '';\\r\\n}\\r\\n\\r\\n.ui-datepicker-next {\\r\\n\\torder: 1;\\r\\n}\\r\\n\\r\\n.ui-datepicker-next:before {\\r\\n\\tcontent: '';\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev > *,\\r\\n.ui-datepicker-next > * {\\r\\n\\tdisplay: none !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker thead th {\\r\\n\\twidth: auto !important;\\r\\n\\tpadding: 0 !important;\\r\\n\\tcolor: #B3BEBF;\\r\\n\\tfont-size: 14px;\\r\\n\\tfont-weight: 400 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker table {\\r\\n\\tmargin: 0 !important;\\r\\n\\tfont-size: 14px;\\r\\n}\\r\\n\\r\\n.ui-datepicker td {\\r\\n\\tbackground: none;\\r\\n\\tpadding: 0 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker td span,\\r\\n.ui-datepicker td a {\\r\\n\\tborder-radius: 8px;\\r\\n\\tborder: none;\\r\\n\\tmin-width: 32px;\\r\\n\\theight: 32px;\\r\\n\\tpadding: 0;\\r\\n\\tmargin: 1px;\\r\\n\\tcolor: var(--color-text) !important;\\r\\n\\tline-height: 32px;\\r\\n\\ttext-align: center;\\r\\n\\tposition: relative;\\r\\n\\tdisplay: block;\\r\\n}\\r\\n\\r\\n/* обычные даты */\\r\\n.ui-datepicker td a {\\r\\n\\tbackground: var(--datepicker-day-color);\\r\\n}\\r\\n\\r\\n.ui-datepicker td a:hover {\\r\\n\\tbackground: var(--datepicker-day-color-hover);\\r\\n}\\r\\n\\r\\n/* текущий день */\\r\\ntd.ui-datepicker-today span,\\r\\ntd.ui-datepicker-today a {\\r\\n\\tbackground: none;\\r\\n\\tposition: relative;\\r\\n}\\r\\n\\r\\n/* выбранные даты */\\r\\n.ui-datepicker td.selected a {\\r\\n\\tbackground: var(--datepicker-range-color);\\r\\n\\tpadding-right: 0;\\r\\n\\tpadding-left: 1px;\\r\\n\\tmargin-right: 1px;\\r\\n\\tmargin-left: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected a:hover {\\r\\n\\tbackground: var(--datepicker-range-color-hover);\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected:not(.selected-start):not(:first-child):not(.first-of-month) a {\\r\\n\\tborder-top-left-radius: 0;\\r\\n\\tborder-bottom-left-radius: 0;\\r\\n\\tpadding-left: 1px;\\r\\n\\tmargin-left: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected:not(.selected-end):not(:last-child):not(.last-of-month) a {\\r\\n\\tborder-top-right-radius: 0;\\r\\n\\tborder-bottom-right-radius: 0;\\r\\n\\tpadding-right: 1px;\\r\\n\\tmargin-right: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected-start a,\\r\\n.ui-datepicker td.selected-end a,\\r\\n.ui-datepicker td.ui-datepicker-current-day a {\\r\\n\\tbackground: var(--datepicker-selected-color);\\r\\n\\tcolor: #FFF !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected-start a:hover,\\r\\n.ui-datepicker td.selected-end a:hover,\\r\\n.ui-datepicker td.ui-datepicker-current-day a:hover {\\r\\n\\tbackground: var(--datepicker-selected-color-hover);\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks {\\r\\n\\tline-height: normal;\\r\\n\\tposition: absolute;\\r\\n\\tright: 0;\\r\\n\\tbottom: 3px;\\r\\n\\tleft: 0;\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n\\tjustify-content: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks > i {\\r\\n\\tborder-radius: 50%;\\r\\n\\tborder: 1px solid #FFF;\\r\\n\\twidth: 4px;\\r\\n\\theight: 4px;\\r\\n\\tmargin: 0 2px;\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks-exists {\\r\\n\\tbackground: var(--color-blue-500);\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks-update {\\r\\n\\tbackground: var(--color-red-500);\\r\\n}\\r\\n\\r\\n.ui-datepicker-row-break {\\r\\n\\tdisplay: none;\\r\\n}\""],"names":["Core","$","el","forms","connectDatepicker","options","dateFormatted","delimiter","dateNumbersCount","delimitersIndexes","watch","_a","i","valueChunkLeft","value","selectionPos","valueChunkRight","extraNumbersCount","valueChunkRightMaxLength","e","delimiterIndex"],"mappings":"0HAMAA,EAAAA,KAAAA,YCNA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EDMAA,EAEA,MAAAC,EAAAC,GAAA,uEAEE,QAAA,KAAA,0EAAA,EAEA,OAGD,OAAAC,EAAA,KAAA,EAAA,WAAA,YAAA,CAA8B,WAAAA,EAAA,KAAA,MAAA,WAAA,YAAA,EAAA,QAAA,IAAA,IAAA,EAAA,QAAA,IAAA,IAAA,EAAA,QAAA,IAAA,IAAA,CAC0E,CAAA,EAGxGA,EAAA,KAAA,EAAAD,CAAA,CACD,EAEgB,SAAAE,EAAAF,EAAAG,EAAA,mDAIhB,IAAAC,EACAC,EACAC,EACAC,EAEAC,EAAAA,MAAAA,EAAAA,MAAAA,EAAAA,KAAAA,MAAAA,UAAAA,EAAAA,IAAAA,OAECJ,EAAAH,EAAA,WAAA,YAAA,EACAI,IAAAI,EAAAL,EAAA,MAAA,IAAA,IAAA,YAAAK,EAAA,KAAA,IACAH,EAAAF,EAAA,QAAA,OAAA,EAAA,EAAA,YAGA,QAAAM,EAAA,EAAAA,EAAAN,EAAA,OAAAM,IACCN,EAAAM,CAAA,IAAAL,GACCE,EAAA,KAAAG,CAAA,CAGH,EAAA,CAAA,UAAA,EAAA,CAAA,6DAWCC,EAAAC,EAAA,UAAA,EAAAC,CAAA,EAAA,QAAA,OAAA,EAAA,EACAC,EAAAF,EAAA,UAAAC,CAAA,EAAA,QAAA,OAAA,EAAA,EAEAE,EAAAJ,EAAA,OAAAG,EAAA,OAAAR,EACA,GAAAS,EAAA,EAAA,uCAKCD,EAAAA,EAAA,UAAAA,EAAA,OAAAE,CAAA,CAA6F,MAAAD,EAAA,IAG7FE,EAAA,YAAA,6DAQDJ,EAAAF,EAAA,OACAC,EAAAD,EAAAG,EAGA,QAAAJ,EAAA,EAAAA,EAAAH,EAAA,OAAAG,IAAA,CACC,MAAAQ,EAAAX,EAAAG,CAAA,EAEAE,EAAAA,EAAA,UAAA,EAAAM,CAAA,EAAAb,EAAAO,EAAA,UAAAM,CAAA,EAGAL,GAAAK,OAMDD,EAAA,YAAA,yBAAAL,EAAAC,EAAA,CAAA,IAAAR,4BAMCY,EAAA,OAAA,MAAAL,EACAK,EAAA,OAAA,eAAAJ,EACAI,EAAA,OAAA,aAAAJ,EAEF"}
1
+ {"version":3,"file":"datepicker-B9eprAyk.amd.js","sources":["../../src/components/forms/inputDate/datepicker.ts","../../src/components/forms/inputDate/datepicker.css?raw"],"sourcesContent":["import { toRef, watch } from 'vue';\r\nimport Core from '@/core/core/core';\r\nimport { dateFormat } from '@/core/utils/date';\r\n\r\nimport css from '@/components/forms/inputDate/datepicker.css?raw';\r\n\r\nCore.appendStyle(css);\r\n\r\nconst $ = (el: HTMLInputElement) => {\r\n\tif (!Core.$?.ui?.datepicker) {\r\n\t\tconsole.info('Для работы datepicker требуется глобальная загрузка jQuery UI Datepicker');\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tCore.$.datepicker.setDefaults({\r\n\t\tdateFormat: Core.state.dateFormat.toLowerCase().replace('m', 'mm').replace('y', 'yy').replace('d', 'dd')\r\n\t});\r\n\r\n\treturn Core.$(el);\r\n};\r\n\r\nexport function connectDatepicker(el: HTMLInputElement, options: any) {\r\n\treturn $(el)?.datepicker(options);\r\n}\r\n\r\nlet dateFormatted;\r\nlet delimiter: string;\r\nlet dateNumbersCount: number;\r\nlet delimitersIndexes: number[];\r\n\r\nwatch(toRef(Core.state.dateFormat), () => {\r\n\t// генерация отформатированной даты, извлечение из нее разделителей и их индексов\r\n\tdateFormatted = dateFormat('2000-01-01');\r\n\tdelimiter = dateFormatted.match(/\\D/)?.[0] ?? '-';\r\n\tdateNumbersCount = dateFormatted.replace(/\\D+/g, '').length;\r\n\tdelimitersIndexes = [];\r\n\r\n\tfor (let i = 0; i < dateFormatted.length; i++) {\r\n\t\tif (dateFormatted[i] === delimiter) {\r\n\t\t\tdelimitersIndexes.push(i);\r\n\t\t}\r\n\t}\r\n}, { immediate: true });\r\n\r\n/**\r\n * Автоформат при вводе в поле с датой\r\n */\r\nexport function oninput(e: any) {\r\n\tlet selectionPos = e.target.selectionEnd;\r\n\tlet value = e.target.value;\r\n\r\n\t// разбить занчение на две половины - до и после каретки\r\n\t// удалить все символы, кроме цифр\r\n\tlet valueChunkLeft = value.substring(0, selectionPos).replace(/\\D+/g, '');\r\n\tlet valueChunkRight = value.substring(selectionPos).replace(/\\D+/g, '');\r\n\r\n\tlet extraNumbersCount = valueChunkLeft.length + valueChunkRight.length - dateNumbersCount;\r\n\tif (extraNumbersCount > 0) {\r\n\t\t// // количество цифр больше требуемого - удалить лишние\r\n\t\tvalueChunkLeft = valueChunkLeft.substring(0, dateNumbersCount);\r\n\r\n\t\tconst valueChunkRightMaxLength = dateNumbersCount - valueChunkLeft.length;\r\n\t\tvalueChunkRight = valueChunkRight.substring(valueChunkRight.length - valueChunkRightMaxLength);\r\n\t} else if (extraNumbersCount < 0) {\r\n\t\t// количество цифр меньше требуемого - добавить 0\r\n\t\tif (e.inputType === 'deleteContentForward') {\r\n\t\t\t// нажатие на delete - добавить к левой части для правильного позиционирования каретки\r\n\t\t\tvalueChunkLeft += '0'.repeat(-extraNumbersCount);\r\n\t\t} else {\r\n\t\t\tvalueChunkRight = '0'.repeat(-extraNumbersCount) + valueChunkRight;\r\n\t\t}\r\n\t}\r\n\r\n\tselectionPos = valueChunkLeft.length;\r\n\tvalue = valueChunkLeft + valueChunkRight;\r\n\r\n\t// вставить разделители\r\n\tfor (let i = 0; i < delimitersIndexes.length; i++) {\r\n\t\tconst delimiterIndex = delimitersIndexes[i];\r\n\r\n\t\tvalue = value.substring(0, delimiterIndex) + delimiter + value.substring(delimiterIndex);\r\n\r\n\t\t// сдвинуть каретку, если разделитель вставлен левее ее\r\n\t\tif (selectionPos >= delimiterIndex) {\r\n\t\t\tselectionPos++;\r\n\t\t}\r\n\t}\r\n\r\n\t// нажатие на backspace - если слева символ разделителя, перенести каретку за него\r\n\tif (e.inputType === 'deleteContentBackward' && value[selectionPos - 1] === delimiter) {\r\n\t\tselectionPos--;\r\n\t}\r\n\r\n\t// если значение изменилось - вставить его и переместить каретку\r\n\tif (value !== e.target.value) {\r\n\t\te.target.value = value;\r\n\t\te.target.selectionStart = selectionPos;\r\n\t\te.target.selectionEnd = selectionPos;\r\n\t}\r\n}","export default \"/* ui-datepicker */\\r\\n.ui-datepicker {\\r\\n\\t--datepicker-day-color: #FFF;\\r\\n\\t--datepicker-day-color-hover: var(--color-blue-150);\\r\\n\\t--datepicker-selected-color: var(--color-blue-500);\\r\\n\\t--datepicker-selected-color-hover: var(--color-blue-550);\\r\\n\\t--datepicker-range-color: var(--color-blue-100);\\r\\n\\t--datepicker-range-color-hover: var(--color-blue-150);\\r\\n\\r\\n\\tuser-select: none;\\r\\n\\twidth: auto;\\r\\n\\tpadding: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker:before,\\r\\n.ui-datepicker:after {\\r\\n\\tdisplay: none;\\r\\n}\\r\\n\\r\\n/* на странице */\\r\\n.ui-datepicker-inline {\\r\\n\\tdisplay: inline-block !important;\\r\\n}\\r\\n\\r\\n/* в popup */\\r\\n.ui-datepicker:not(.ui-datepicker-inline) {\\r\\n\\tborder-radius: 8px;\\r\\n\\tbackground: var(--content-background-color);\\r\\n\\tbox-shadow: var(--top-shadow);\\r\\n\\tz-index: 10000000 !important;\\r\\n\\tpadding: 8px;\\r\\n}\\r\\n\\r\\n.ui-datepicker a {\\r\\n\\ttext-decoration: none !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker option {\\r\\n\\tcolor: var(--color-text);\\r\\n\\tfont-size: 14px;\\r\\n}\\r\\n\\r\\n.ui-datepicker-header {\\r\\n\\tpadding: 0 !important;\\r\\n\\tmargin: 0 0 18px 0;\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-header > * {\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n\\tjustify-content: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-title {\\r\\n\\twidth: 100% !important;\\r\\n\\theight: 24px;\\r\\n\\tmargin: 0 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-month,\\r\\n.ui-datepicker-year {\\r\\n\\toutline: none !important;\\r\\n\\twidth: auto !important;\\r\\n\\tborder: none;\\r\\n\\tpadding: 0;\\r\\n\\tmargin: 0 6px !important;\\r\\n\\ttext-align: center;\\r\\n\\tfont-size: 16px !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-month {\\r\\n\\tcolor: var(--color-text);\\r\\n}\\r\\n\\r\\n.ui-datepicker-year {\\r\\n\\tcolor: var(--color-gray-300);\\r\\n}\\r\\n\\r\\n/*\\tselect.ui-datepicker-month,\\r\\nselect.ui-datepicker-year{ cursor: pointer; color: var(--color-blue-500); }*/\\r\\nselect.ui-datepicker-month,\\r\\nselect.ui-datepicker-year {\\r\\n\\tcursor: pointer;\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev,\\r\\n.ui-datepicker-next {\\r\\n\\tcursor: pointer;\\r\\n\\twidth: 24px !important;\\r\\n\\theight: 24px !important;\\r\\n\\tfont-size: 24px;\\r\\n\\tfont-family: 'Topvisor-2';\\r\\n\\tposition: static !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev:before {\\r\\n\\tcontent: '';\\r\\n}\\r\\n\\r\\n.ui-datepicker-next {\\r\\n\\torder: 1;\\r\\n}\\r\\n\\r\\n.ui-datepicker-next:before {\\r\\n\\tcontent: '';\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev > *,\\r\\n.ui-datepicker-next > * {\\r\\n\\tdisplay: none !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker thead th {\\r\\n\\twidth: auto !important;\\r\\n\\tpadding: 0 !important;\\r\\n\\tcolor: #B3BEBF;\\r\\n\\tfont-size: 14px;\\r\\n\\tfont-weight: 400 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker table {\\r\\n\\tmargin: 0 !important;\\r\\n\\tfont-size: 14px;\\r\\n}\\r\\n\\r\\n.ui-datepicker td {\\r\\n\\tbackground: none;\\r\\n\\tpadding: 0 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker td span,\\r\\n.ui-datepicker td a {\\r\\n\\tborder-radius: 8px;\\r\\n\\tborder: none;\\r\\n\\tmin-width: 32px;\\r\\n\\theight: 32px;\\r\\n\\tpadding: 0;\\r\\n\\tmargin: 1px;\\r\\n\\tcolor: var(--color-text) !important;\\r\\n\\tline-height: 32px;\\r\\n\\ttext-align: center;\\r\\n\\tposition: relative;\\r\\n\\tdisplay: block;\\r\\n}\\r\\n\\r\\n/* обычные даты */\\r\\n.ui-datepicker td a {\\r\\n\\tbackground: var(--datepicker-day-color);\\r\\n}\\r\\n\\r\\n.ui-datepicker td a:hover {\\r\\n\\tbackground: var(--datepicker-day-color-hover);\\r\\n}\\r\\n\\r\\n/* текущий день */\\r\\ntd.ui-datepicker-today span,\\r\\ntd.ui-datepicker-today a {\\r\\n\\tbackground: none;\\r\\n\\tposition: relative;\\r\\n}\\r\\n\\r\\n/* выбранные даты */\\r\\n.ui-datepicker td.selected a {\\r\\n\\tbackground: var(--datepicker-range-color);\\r\\n\\tpadding-right: 0;\\r\\n\\tpadding-left: 1px;\\r\\n\\tmargin-right: 1px;\\r\\n\\tmargin-left: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected a:hover {\\r\\n\\tbackground: var(--datepicker-range-color-hover);\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected:not(.selected-start):not(:first-child):not(.first-of-month) a {\\r\\n\\tborder-top-left-radius: 0;\\r\\n\\tborder-bottom-left-radius: 0;\\r\\n\\tpadding-left: 1px;\\r\\n\\tmargin-left: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected:not(.selected-end):not(:last-child):not(.last-of-month) a {\\r\\n\\tborder-top-right-radius: 0;\\r\\n\\tborder-bottom-right-radius: 0;\\r\\n\\tpadding-right: 1px;\\r\\n\\tmargin-right: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected-start a,\\r\\n.ui-datepicker td.selected-end a,\\r\\n.ui-datepicker td.ui-datepicker-current-day a {\\r\\n\\tbackground: var(--datepicker-selected-color);\\r\\n\\tcolor: #FFF !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected-start a:hover,\\r\\n.ui-datepicker td.selected-end a:hover,\\r\\n.ui-datepicker td.ui-datepicker-current-day a:hover {\\r\\n\\tbackground: var(--datepicker-selected-color-hover);\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks {\\r\\n\\tline-height: normal;\\r\\n\\tposition: absolute;\\r\\n\\tright: 0;\\r\\n\\tbottom: 3px;\\r\\n\\tleft: 0;\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n\\tjustify-content: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks > i {\\r\\n\\tborder-radius: 50%;\\r\\n\\tborder: 1px solid #FFF;\\r\\n\\twidth: 4px;\\r\\n\\theight: 4px;\\r\\n\\tmargin: 0 2px;\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks-exists {\\r\\n\\tbackground: var(--color-blue-500);\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks-update {\\r\\n\\tbackground: var(--color-red-500);\\r\\n}\\r\\n\\r\\n.ui-datepicker-row-break {\\r\\n\\tdisplay: none;\\r\\n}\""],"names":["Core","$","el","forms","connectDatepicker","options","dateFormatted","delimiter","dateNumbersCount","delimitersIndexes","watch","_a","i","valueChunkLeft","value","selectionPos","valueChunkRight","extraNumbersCount","valueChunkRightMaxLength","e","delimiterIndex"],"mappings":"0HAMAA,EAAAA,KAAAA,YCNA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EDMAA,EAEA,MAAAC,EAAAC,GAAA,uEAEE,QAAA,KAAA,0EAAA,EAEA,OAGD,OAAAC,EAAA,KAAA,EAAA,WAAA,YAAA,CAA8B,WAAAA,EAAA,KAAA,MAAA,WAAA,YAAA,EAAA,QAAA,IAAA,IAAA,EAAA,QAAA,IAAA,IAAA,EAAA,QAAA,IAAA,IAAA,CAC0E,CAAA,EAGxGA,EAAA,KAAA,EAAAD,CAAA,CACD,EAEgB,SAAAE,EAAAF,EAAAG,EAAA,mDAIhB,IAAAC,EACAC,EACAC,EACAC,EAEAC,EAAAA,MAAAA,EAAAA,MAAAA,EAAAA,KAAAA,MAAAA,UAAAA,EAAAA,IAAAA,OAECJ,EAAAH,EAAA,WAAA,YAAA,EACAI,IAAAI,EAAAL,EAAA,MAAA,IAAA,IAAA,YAAAK,EAAA,KAAA,IACAH,EAAAF,EAAA,QAAA,OAAA,EAAA,EAAA,YAGA,QAAAM,EAAA,EAAAA,EAAAN,EAAA,OAAAM,IACCN,EAAAM,CAAA,IAAAL,GACCE,EAAA,KAAAG,CAAA,CAGH,EAAA,CAAA,UAAA,EAAA,CAAA,6DAWCC,EAAAC,EAAA,UAAA,EAAAC,CAAA,EAAA,QAAA,OAAA,EAAA,EACAC,EAAAF,EAAA,UAAAC,CAAA,EAAA,QAAA,OAAA,EAAA,EAEAE,EAAAJ,EAAA,OAAAG,EAAA,OAAAR,EACA,GAAAS,EAAA,EAAA,uCAKCD,EAAAA,EAAA,UAAAA,EAAA,OAAAE,CAAA,CAA6F,MAAAD,EAAA,IAG7FE,EAAA,YAAA,6DAQDJ,EAAAF,EAAA,OACAC,EAAAD,EAAAG,EAGA,QAAAJ,EAAA,EAAAA,EAAAH,EAAA,OAAAG,IAAA,CACC,MAAAQ,EAAAX,EAAAG,CAAA,EAEAE,EAAAA,EAAA,UAAA,EAAAM,CAAA,EAAAb,EAAAO,EAAA,UAAAM,CAAA,EAGAL,GAAAK,OAMDD,EAAA,YAAA,yBAAAL,EAAAC,EAAA,CAAA,IAAAR,4BAMCY,EAAA,OAAA,MAAAL,EACAK,EAAA,OAAA,eAAAJ,EACAI,EAAA,OAAA,aAAAJ,EAEF"}
@@ -1,5 +1,5 @@
1
1
  import { watch as k, toRef as g } from "vue";
2
- import { C as a, d as m } from "./forms-C4Cwecin.es.js";
2
+ import { C as a, d as m } from "./forms-gb7uf2K8.es.js";
3
3
  const h = `/* ui-datepicker */\r
4
4
  .ui-datepicker {\r
5
5
  --datepicker-day-color: #FFF;\r
@@ -274,4 +274,4 @@ export {
274
274
  v as connectDatepicker,
275
275
  y as oninput
276
276
  };
277
- //# sourceMappingURL=datepicker-Bv7QQgby.es.js.map
277
+ //# sourceMappingURL=datepicker-C86O1mQq.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datepicker-Bv7QQgby.es.js","sources":["../../src/components/forms/inputDate/datepicker.css?raw","../../src/components/forms/inputDate/datepicker.ts"],"sourcesContent":["export default \"/* ui-datepicker */\\r\\n.ui-datepicker {\\r\\n\\t--datepicker-day-color: #FFF;\\r\\n\\t--datepicker-day-color-hover: var(--color-blue-150);\\r\\n\\t--datepicker-selected-color: var(--color-blue-500);\\r\\n\\t--datepicker-selected-color-hover: var(--color-blue-550);\\r\\n\\t--datepicker-range-color: var(--color-blue-100);\\r\\n\\t--datepicker-range-color-hover: var(--color-blue-150);\\r\\n\\r\\n\\tuser-select: none;\\r\\n\\twidth: auto;\\r\\n\\tpadding: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker:before,\\r\\n.ui-datepicker:after {\\r\\n\\tdisplay: none;\\r\\n}\\r\\n\\r\\n/* на странице */\\r\\n.ui-datepicker-inline {\\r\\n\\tdisplay: inline-block !important;\\r\\n}\\r\\n\\r\\n/* в popup */\\r\\n.ui-datepicker:not(.ui-datepicker-inline) {\\r\\n\\tborder-radius: 8px;\\r\\n\\tbackground: var(--content-background-color);\\r\\n\\tbox-shadow: var(--top-shadow);\\r\\n\\tz-index: 10000000 !important;\\r\\n\\tpadding: 8px;\\r\\n}\\r\\n\\r\\n.ui-datepicker a {\\r\\n\\ttext-decoration: none !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker option {\\r\\n\\tcolor: var(--color-text);\\r\\n\\tfont-size: 14px;\\r\\n}\\r\\n\\r\\n.ui-datepicker-header {\\r\\n\\tpadding: 0 !important;\\r\\n\\tmargin: 0 0 18px 0;\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-header > * {\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n\\tjustify-content: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-title {\\r\\n\\twidth: 100% !important;\\r\\n\\theight: 24px;\\r\\n\\tmargin: 0 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-month,\\r\\n.ui-datepicker-year {\\r\\n\\toutline: none !important;\\r\\n\\twidth: auto !important;\\r\\n\\tborder: none;\\r\\n\\tpadding: 0;\\r\\n\\tmargin: 0 6px !important;\\r\\n\\ttext-align: center;\\r\\n\\tfont-size: 16px !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-month {\\r\\n\\tcolor: var(--color-text);\\r\\n}\\r\\n\\r\\n.ui-datepicker-year {\\r\\n\\tcolor: var(--color-gray-300);\\r\\n}\\r\\n\\r\\n/*\\tselect.ui-datepicker-month,\\r\\nselect.ui-datepicker-year{ cursor: pointer; color: var(--color-blue-500); }*/\\r\\nselect.ui-datepicker-month,\\r\\nselect.ui-datepicker-year {\\r\\n\\tcursor: pointer;\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev,\\r\\n.ui-datepicker-next {\\r\\n\\tcursor: pointer;\\r\\n\\twidth: 24px !important;\\r\\n\\theight: 24px !important;\\r\\n\\tfont-size: 24px;\\r\\n\\tfont-family: 'Topvisor-2';\\r\\n\\tposition: static !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev:before {\\r\\n\\tcontent: '';\\r\\n}\\r\\n\\r\\n.ui-datepicker-next {\\r\\n\\torder: 1;\\r\\n}\\r\\n\\r\\n.ui-datepicker-next:before {\\r\\n\\tcontent: '';\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev > *,\\r\\n.ui-datepicker-next > * {\\r\\n\\tdisplay: none !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker thead th {\\r\\n\\twidth: auto !important;\\r\\n\\tpadding: 0 !important;\\r\\n\\tcolor: #B3BEBF;\\r\\n\\tfont-size: 14px;\\r\\n\\tfont-weight: 400 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker table {\\r\\n\\tmargin: 0 !important;\\r\\n\\tfont-size: 14px;\\r\\n}\\r\\n\\r\\n.ui-datepicker td {\\r\\n\\tbackground: none;\\r\\n\\tpadding: 0 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker td span,\\r\\n.ui-datepicker td a {\\r\\n\\tborder-radius: 8px;\\r\\n\\tborder: none;\\r\\n\\tmin-width: 32px;\\r\\n\\theight: 32px;\\r\\n\\tpadding: 0;\\r\\n\\tmargin: 1px;\\r\\n\\tcolor: var(--color-text) !important;\\r\\n\\tline-height: 32px;\\r\\n\\ttext-align: center;\\r\\n\\tposition: relative;\\r\\n\\tdisplay: block;\\r\\n}\\r\\n\\r\\n/* обычные даты */\\r\\n.ui-datepicker td a {\\r\\n\\tbackground: var(--datepicker-day-color);\\r\\n}\\r\\n\\r\\n.ui-datepicker td a:hover {\\r\\n\\tbackground: var(--datepicker-day-color-hover);\\r\\n}\\r\\n\\r\\n/* текущий день */\\r\\ntd.ui-datepicker-today span,\\r\\ntd.ui-datepicker-today a {\\r\\n\\tbackground: none;\\r\\n\\tposition: relative;\\r\\n}\\r\\n\\r\\n/* выбранные даты */\\r\\n.ui-datepicker td.selected a {\\r\\n\\tbackground: var(--datepicker-range-color);\\r\\n\\tpadding-right: 0;\\r\\n\\tpadding-left: 1px;\\r\\n\\tmargin-right: 1px;\\r\\n\\tmargin-left: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected a:hover {\\r\\n\\tbackground: var(--datepicker-range-color-hover);\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected:not(.selected-start):not(:first-child):not(.first-of-month) a {\\r\\n\\tborder-top-left-radius: 0;\\r\\n\\tborder-bottom-left-radius: 0;\\r\\n\\tpadding-left: 1px;\\r\\n\\tmargin-left: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected:not(.selected-end):not(:last-child):not(.last-of-month) a {\\r\\n\\tborder-top-right-radius: 0;\\r\\n\\tborder-bottom-right-radius: 0;\\r\\n\\tpadding-right: 1px;\\r\\n\\tmargin-right: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected-start a,\\r\\n.ui-datepicker td.selected-end a,\\r\\n.ui-datepicker td.ui-datepicker-current-day a {\\r\\n\\tbackground: var(--datepicker-selected-color);\\r\\n\\tcolor: #FFF !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected-start a:hover,\\r\\n.ui-datepicker td.selected-end a:hover,\\r\\n.ui-datepicker td.ui-datepicker-current-day a:hover {\\r\\n\\tbackground: var(--datepicker-selected-color-hover);\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks {\\r\\n\\tline-height: normal;\\r\\n\\tposition: absolute;\\r\\n\\tright: 0;\\r\\n\\tbottom: 3px;\\r\\n\\tleft: 0;\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n\\tjustify-content: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks > i {\\r\\n\\tborder-radius: 50%;\\r\\n\\tborder: 1px solid #FFF;\\r\\n\\twidth: 4px;\\r\\n\\theight: 4px;\\r\\n\\tmargin: 0 2px;\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks-exists {\\r\\n\\tbackground: var(--color-blue-500);\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks-update {\\r\\n\\tbackground: var(--color-red-500);\\r\\n}\\r\\n\\r\\n.ui-datepicker-row-break {\\r\\n\\tdisplay: none;\\r\\n}\"","import { toRef, watch } from 'vue';\r\nimport Core from '@/core/core/core';\r\nimport { dateFormat } from '@/core/utils/date';\r\n\r\nimport css from '@/components/forms/inputDate/datepicker.css?raw';\r\n\r\nCore.appendStyle(css);\r\n\r\nconst $ = (el: HTMLInputElement) => {\r\n\tif (!Core.$?.ui?.datepicker) {\r\n\t\tconsole.info('Для работы datepicker требуется глобальная загрузка jQuery UI Datepicker');\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tCore.$.datepicker.setDefaults({\r\n\t\tdateFormat: Core.state.dateFormat.toLowerCase().replace('m', 'mm').replace('y', 'yy').replace('d', 'dd')\r\n\t});\r\n\r\n\treturn Core.$(el);\r\n};\r\n\r\nexport function connectDatepicker(el: HTMLInputElement, options: any) {\r\n\treturn $(el)?.datepicker(options);\r\n}\r\n\r\nlet dateFormatted;\r\nlet delimiter: string;\r\nlet dateNumbersCount: number;\r\nlet delimitersIndexes: number[];\r\n\r\nwatch(toRef(Core.state.dateFormat), () => {\r\n\t// генерация отформатированной даты, извлечение из нее разделителей и их индексов\r\n\tdateFormatted = dateFormat('2000-01-01');\r\n\tdelimiter = dateFormatted.match(/\\D/)?.[0] ?? '-';\r\n\tdateNumbersCount = dateFormatted.replace(/\\D+/g, '').length;\r\n\tdelimitersIndexes = [];\r\n\r\n\tfor (let i = 0; i < dateFormatted.length; i++) {\r\n\t\tif (dateFormatted[i] === delimiter) {\r\n\t\t\tdelimitersIndexes.push(i);\r\n\t\t}\r\n\t}\r\n}, { immediate: true });\r\n\r\n/**\r\n * Автоформат при вводе в поле с датой\r\n */\r\nexport function oninput(e: any) {\r\n\tlet selectionPos = e.target.selectionEnd;\r\n\tlet value = e.target.value;\r\n\r\n\t// разбить занчение на две половины - до и после каретки\r\n\t// удалить все символы, кроме цифр\r\n\tlet valueChunkLeft = value.substring(0, selectionPos).replace(/\\D+/g, '');\r\n\tlet valueChunkRight = value.substring(selectionPos).replace(/\\D+/g, '');\r\n\r\n\tlet extraNumbersCount = valueChunkLeft.length + valueChunkRight.length - dateNumbersCount;\r\n\tif (extraNumbersCount > 0) {\r\n\t\t// // количество цифр больше требуемого - удалить лишние\r\n\t\tvalueChunkLeft = valueChunkLeft.substring(0, dateNumbersCount);\r\n\r\n\t\tconst valueChunkRightMaxLength = dateNumbersCount - valueChunkLeft.length;\r\n\t\tvalueChunkRight = valueChunkRight.substring(valueChunkRight.length - valueChunkRightMaxLength);\r\n\t} else if (extraNumbersCount < 0) {\r\n\t\t// количество цифр меньше требуемого - добавить 0\r\n\t\tif (e.inputType === 'deleteContentForward') {\r\n\t\t\t// нажатие на delete - добавить к левой части для правильного позиционирования каретки\r\n\t\t\tvalueChunkLeft += '0'.repeat(-extraNumbersCount);\r\n\t\t} else {\r\n\t\t\tvalueChunkRight = '0'.repeat(-extraNumbersCount) + valueChunkRight;\r\n\t\t}\r\n\t}\r\n\r\n\tselectionPos = valueChunkLeft.length;\r\n\tvalue = valueChunkLeft + valueChunkRight;\r\n\r\n\t// вставить разделители\r\n\tfor (let i = 0; i < delimitersIndexes.length; i++) {\r\n\t\tconst delimiterIndex = delimitersIndexes[i];\r\n\r\n\t\tvalue = value.substring(0, delimiterIndex) + delimiter + value.substring(delimiterIndex);\r\n\r\n\t\t// сдвинуть каретку, если разделитель вставлен левее ее\r\n\t\tif (selectionPos >= delimiterIndex) {\r\n\t\t\tselectionPos++;\r\n\t\t}\r\n\t}\r\n\r\n\t// нажатие на backspace - если слева символ разделителя, перенести каретку за него\r\n\tif (e.inputType === 'deleteContentBackward' && value[selectionPos - 1] === delimiter) {\r\n\t\tselectionPos--;\r\n\t}\r\n\r\n\t// если значение изменилось - вставить его и переместить каретку\r\n\tif (value !== e.target.value) {\r\n\t\te.target.value = value;\r\n\t\te.target.selectionStart = selectionPos;\r\n\t\te.target.selectionEnd = selectionPos;\r\n\t}\r\n}"],"names":["css","Core","$","el","_b","_a","connectDatepicker","options","dateFormatted","delimiter","dateNumbersCount","delimitersIndexes","watch","toRef","dateFormat","i","oninput","e","selectionPos","value","valueChunkLeft","valueChunkRight","extraNumbersCount","valueChunkRightMaxLength","delimiterIndex"],"mappings":";;AAAA,MAAeA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACMfC,EAAK,YAAYD,CAAG;AAEpB,MAAME,IAAI,CAACC,MAAyB;;AACnC,MAAI,GAACC,KAAAC,IAAAJ,EAAK,MAAL,gBAAAI,EAAQ,OAAR,QAAAD,EAAY,aAAY;AAC5B,YAAQ,KAAK,0EAA0E;AAEvF;AAAA,EACD;AAEK,SAAAH,EAAA,EAAE,WAAW,YAAY;AAAA,IAC7B,YAAYA,EAAK,MAAM,WAAW,YAAA,EAAc,QAAQ,KAAK,IAAI,EAAE,QAAQ,KAAK,IAAI,EAAE,QAAQ,KAAK,IAAI;AAAA,EAAA,CACvG,GAEMA,EAAK,EAAEE,CAAE;AACjB;AAEgB,SAAAG,EAAkBH,GAAsBI,GAAc;;AACrE,UAAOF,IAAAH,EAAEC,CAAE,MAAJ,gBAAAE,EAAO,WAAWE;AAC1B;AAEA,IAAIC,GACAC,GACAC,GACAC;AAEJC,EAAMC,EAAMZ,EAAK,MAAM,UAAU,GAAG,MAAM;;AAEzC,EAAAO,IAAgBM,EAAW,YAAY,GACvCL,MAAYJ,IAAAG,EAAc,MAAM,IAAI,MAAxB,gBAAAH,EAA4B,OAAM,KAC9CK,IAAmBF,EAAc,QAAQ,QAAQ,EAAE,EAAE,QACrDG,IAAoB,CAAA;AAEpB,WAASI,IAAI,GAAGA,IAAIP,EAAc,QAAQO;AACrC,IAAAP,EAAcO,CAAC,MAAMN,KACxBE,EAAkB,KAAKI,CAAC;AAG3B,GAAG,EAAE,WAAW,GAAA,CAAM;AAKf,SAASC,EAAQC,GAAQ;AAC3B,MAAAC,IAAeD,EAAE,OAAO,cACxBE,IAAQF,EAAE,OAAO,OAIjBG,IAAiBD,EAAM,UAAU,GAAGD,CAAY,EAAE,QAAQ,QAAQ,EAAE,GACpEG,IAAkBF,EAAM,UAAUD,CAAY,EAAE,QAAQ,QAAQ,EAAE,GAElEI,IAAoBF,EAAe,SAASC,EAAgB,SAASX;AACzE,MAAIY,IAAoB,GAAG;AAET,IAAAF,IAAAA,EAAe,UAAU,GAAGV,CAAgB;AAEvD,UAAAa,IAA2Bb,IAAmBU,EAAe;AACnE,IAAAC,IAAkBA,EAAgB,UAAUA,EAAgB,SAASE,CAAwB;AAAA,EAAA;AAC9F,IAAWD,IAAoB,MAE1BL,EAAE,cAAc,yBAEDG,KAAA,IAAI,OAAO,CAACE,CAAiB,IAE/CD,IAAkB,IAAI,OAAO,CAACC,CAAiB,IAAID;AAIrD,EAAAH,IAAeE,EAAe,QAC9BD,IAAQC,IAAiBC;AAGzB,WAASN,IAAI,GAAGA,IAAIJ,EAAkB,QAAQI,KAAK;AAC5C,UAAAS,IAAiBb,EAAkBI,CAAC;AAElC,IAAAI,IAAAA,EAAM,UAAU,GAAGK,CAAc,IAAIf,IAAYU,EAAM,UAAUK,CAAc,GAGnFN,KAAgBM,KACnBN;AAAA,EAEF;AAGA,EAAID,EAAE,cAAc,2BAA2BE,EAAMD,IAAe,CAAC,MAAMT,KAC1ES,KAIGC,MAAUF,EAAE,OAAO,UACtBA,EAAE,OAAO,QAAQE,GACjBF,EAAE,OAAO,iBAAiBC,GAC1BD,EAAE,OAAO,eAAeC;AAE1B;"}
1
+ {"version":3,"file":"datepicker-C86O1mQq.es.js","sources":["../../src/components/forms/inputDate/datepicker.css?raw","../../src/components/forms/inputDate/datepicker.ts"],"sourcesContent":["export default \"/* ui-datepicker */\\r\\n.ui-datepicker {\\r\\n\\t--datepicker-day-color: #FFF;\\r\\n\\t--datepicker-day-color-hover: var(--color-blue-150);\\r\\n\\t--datepicker-selected-color: var(--color-blue-500);\\r\\n\\t--datepicker-selected-color-hover: var(--color-blue-550);\\r\\n\\t--datepicker-range-color: var(--color-blue-100);\\r\\n\\t--datepicker-range-color-hover: var(--color-blue-150);\\r\\n\\r\\n\\tuser-select: none;\\r\\n\\twidth: auto;\\r\\n\\tpadding: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker:before,\\r\\n.ui-datepicker:after {\\r\\n\\tdisplay: none;\\r\\n}\\r\\n\\r\\n/* на странице */\\r\\n.ui-datepicker-inline {\\r\\n\\tdisplay: inline-block !important;\\r\\n}\\r\\n\\r\\n/* в popup */\\r\\n.ui-datepicker:not(.ui-datepicker-inline) {\\r\\n\\tborder-radius: 8px;\\r\\n\\tbackground: var(--content-background-color);\\r\\n\\tbox-shadow: var(--top-shadow);\\r\\n\\tz-index: 10000000 !important;\\r\\n\\tpadding: 8px;\\r\\n}\\r\\n\\r\\n.ui-datepicker a {\\r\\n\\ttext-decoration: none !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker option {\\r\\n\\tcolor: var(--color-text);\\r\\n\\tfont-size: 14px;\\r\\n}\\r\\n\\r\\n.ui-datepicker-header {\\r\\n\\tpadding: 0 !important;\\r\\n\\tmargin: 0 0 18px 0;\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-header > * {\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n\\tjustify-content: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-title {\\r\\n\\twidth: 100% !important;\\r\\n\\theight: 24px;\\r\\n\\tmargin: 0 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-month,\\r\\n.ui-datepicker-year {\\r\\n\\toutline: none !important;\\r\\n\\twidth: auto !important;\\r\\n\\tborder: none;\\r\\n\\tpadding: 0;\\r\\n\\tmargin: 0 6px !important;\\r\\n\\ttext-align: center;\\r\\n\\tfont-size: 16px !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-month {\\r\\n\\tcolor: var(--color-text);\\r\\n}\\r\\n\\r\\n.ui-datepicker-year {\\r\\n\\tcolor: var(--color-gray-300);\\r\\n}\\r\\n\\r\\n/*\\tselect.ui-datepicker-month,\\r\\nselect.ui-datepicker-year{ cursor: pointer; color: var(--color-blue-500); }*/\\r\\nselect.ui-datepicker-month,\\r\\nselect.ui-datepicker-year {\\r\\n\\tcursor: pointer;\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev,\\r\\n.ui-datepicker-next {\\r\\n\\tcursor: pointer;\\r\\n\\twidth: 24px !important;\\r\\n\\theight: 24px !important;\\r\\n\\tfont-size: 24px;\\r\\n\\tfont-family: 'Topvisor-2';\\r\\n\\tposition: static !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev:before {\\r\\n\\tcontent: '';\\r\\n}\\r\\n\\r\\n.ui-datepicker-next {\\r\\n\\torder: 1;\\r\\n}\\r\\n\\r\\n.ui-datepicker-next:before {\\r\\n\\tcontent: '';\\r\\n}\\r\\n\\r\\n.ui-datepicker-prev > *,\\r\\n.ui-datepicker-next > * {\\r\\n\\tdisplay: none !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker thead th {\\r\\n\\twidth: auto !important;\\r\\n\\tpadding: 0 !important;\\r\\n\\tcolor: #B3BEBF;\\r\\n\\tfont-size: 14px;\\r\\n\\tfont-weight: 400 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker table {\\r\\n\\tmargin: 0 !important;\\r\\n\\tfont-size: 14px;\\r\\n}\\r\\n\\r\\n.ui-datepicker td {\\r\\n\\tbackground: none;\\r\\n\\tpadding: 0 !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker td span,\\r\\n.ui-datepicker td a {\\r\\n\\tborder-radius: 8px;\\r\\n\\tborder: none;\\r\\n\\tmin-width: 32px;\\r\\n\\theight: 32px;\\r\\n\\tpadding: 0;\\r\\n\\tmargin: 1px;\\r\\n\\tcolor: var(--color-text) !important;\\r\\n\\tline-height: 32px;\\r\\n\\ttext-align: center;\\r\\n\\tposition: relative;\\r\\n\\tdisplay: block;\\r\\n}\\r\\n\\r\\n/* обычные даты */\\r\\n.ui-datepicker td a {\\r\\n\\tbackground: var(--datepicker-day-color);\\r\\n}\\r\\n\\r\\n.ui-datepicker td a:hover {\\r\\n\\tbackground: var(--datepicker-day-color-hover);\\r\\n}\\r\\n\\r\\n/* текущий день */\\r\\ntd.ui-datepicker-today span,\\r\\ntd.ui-datepicker-today a {\\r\\n\\tbackground: none;\\r\\n\\tposition: relative;\\r\\n}\\r\\n\\r\\n/* выбранные даты */\\r\\n.ui-datepicker td.selected a {\\r\\n\\tbackground: var(--datepicker-range-color);\\r\\n\\tpadding-right: 0;\\r\\n\\tpadding-left: 1px;\\r\\n\\tmargin-right: 1px;\\r\\n\\tmargin-left: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected a:hover {\\r\\n\\tbackground: var(--datepicker-range-color-hover);\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected:not(.selected-start):not(:first-child):not(.first-of-month) a {\\r\\n\\tborder-top-left-radius: 0;\\r\\n\\tborder-bottom-left-radius: 0;\\r\\n\\tpadding-left: 1px;\\r\\n\\tmargin-left: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected:not(.selected-end):not(:last-child):not(.last-of-month) a {\\r\\n\\tborder-top-right-radius: 0;\\r\\n\\tborder-bottom-right-radius: 0;\\r\\n\\tpadding-right: 1px;\\r\\n\\tmargin-right: 0;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected-start a,\\r\\n.ui-datepicker td.selected-end a,\\r\\n.ui-datepicker td.ui-datepicker-current-day a {\\r\\n\\tbackground: var(--datepicker-selected-color);\\r\\n\\tcolor: #FFF !important;\\r\\n}\\r\\n\\r\\n.ui-datepicker td.selected-start a:hover,\\r\\n.ui-datepicker td.selected-end a:hover,\\r\\n.ui-datepicker td.ui-datepicker-current-day a:hover {\\r\\n\\tbackground: var(--datepicker-selected-color-hover);\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks {\\r\\n\\tline-height: normal;\\r\\n\\tposition: absolute;\\r\\n\\tright: 0;\\r\\n\\tbottom: 3px;\\r\\n\\tleft: 0;\\r\\n\\tdisplay: flex;\\r\\n\\talign-items: center;\\r\\n\\tjustify-content: center;\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks > i {\\r\\n\\tborder-radius: 50%;\\r\\n\\tborder: 1px solid #FFF;\\r\\n\\twidth: 4px;\\r\\n\\theight: 4px;\\r\\n\\tmargin: 0 2px;\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks-exists {\\r\\n\\tbackground: var(--color-blue-500);\\r\\n}\\r\\n\\r\\n.ui-datepicker-day-marks-update {\\r\\n\\tbackground: var(--color-red-500);\\r\\n}\\r\\n\\r\\n.ui-datepicker-row-break {\\r\\n\\tdisplay: none;\\r\\n}\"","import { toRef, watch } from 'vue';\r\nimport Core from '@/core/core/core';\r\nimport { dateFormat } from '@/core/utils/date';\r\n\r\nimport css from '@/components/forms/inputDate/datepicker.css?raw';\r\n\r\nCore.appendStyle(css);\r\n\r\nconst $ = (el: HTMLInputElement) => {\r\n\tif (!Core.$?.ui?.datepicker) {\r\n\t\tconsole.info('Для работы datepicker требуется глобальная загрузка jQuery UI Datepicker');\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tCore.$.datepicker.setDefaults({\r\n\t\tdateFormat: Core.state.dateFormat.toLowerCase().replace('m', 'mm').replace('y', 'yy').replace('d', 'dd')\r\n\t});\r\n\r\n\treturn Core.$(el);\r\n};\r\n\r\nexport function connectDatepicker(el: HTMLInputElement, options: any) {\r\n\treturn $(el)?.datepicker(options);\r\n}\r\n\r\nlet dateFormatted;\r\nlet delimiter: string;\r\nlet dateNumbersCount: number;\r\nlet delimitersIndexes: number[];\r\n\r\nwatch(toRef(Core.state.dateFormat), () => {\r\n\t// генерация отформатированной даты, извлечение из нее разделителей и их индексов\r\n\tdateFormatted = dateFormat('2000-01-01');\r\n\tdelimiter = dateFormatted.match(/\\D/)?.[0] ?? '-';\r\n\tdateNumbersCount = dateFormatted.replace(/\\D+/g, '').length;\r\n\tdelimitersIndexes = [];\r\n\r\n\tfor (let i = 0; i < dateFormatted.length; i++) {\r\n\t\tif (dateFormatted[i] === delimiter) {\r\n\t\t\tdelimitersIndexes.push(i);\r\n\t\t}\r\n\t}\r\n}, { immediate: true });\r\n\r\n/**\r\n * Автоформат при вводе в поле с датой\r\n */\r\nexport function oninput(e: any) {\r\n\tlet selectionPos = e.target.selectionEnd;\r\n\tlet value = e.target.value;\r\n\r\n\t// разбить занчение на две половины - до и после каретки\r\n\t// удалить все символы, кроме цифр\r\n\tlet valueChunkLeft = value.substring(0, selectionPos).replace(/\\D+/g, '');\r\n\tlet valueChunkRight = value.substring(selectionPos).replace(/\\D+/g, '');\r\n\r\n\tlet extraNumbersCount = valueChunkLeft.length + valueChunkRight.length - dateNumbersCount;\r\n\tif (extraNumbersCount > 0) {\r\n\t\t// // количество цифр больше требуемого - удалить лишние\r\n\t\tvalueChunkLeft = valueChunkLeft.substring(0, dateNumbersCount);\r\n\r\n\t\tconst valueChunkRightMaxLength = dateNumbersCount - valueChunkLeft.length;\r\n\t\tvalueChunkRight = valueChunkRight.substring(valueChunkRight.length - valueChunkRightMaxLength);\r\n\t} else if (extraNumbersCount < 0) {\r\n\t\t// количество цифр меньше требуемого - добавить 0\r\n\t\tif (e.inputType === 'deleteContentForward') {\r\n\t\t\t// нажатие на delete - добавить к левой части для правильного позиционирования каретки\r\n\t\t\tvalueChunkLeft += '0'.repeat(-extraNumbersCount);\r\n\t\t} else {\r\n\t\t\tvalueChunkRight = '0'.repeat(-extraNumbersCount) + valueChunkRight;\r\n\t\t}\r\n\t}\r\n\r\n\tselectionPos = valueChunkLeft.length;\r\n\tvalue = valueChunkLeft + valueChunkRight;\r\n\r\n\t// вставить разделители\r\n\tfor (let i = 0; i < delimitersIndexes.length; i++) {\r\n\t\tconst delimiterIndex = delimitersIndexes[i];\r\n\r\n\t\tvalue = value.substring(0, delimiterIndex) + delimiter + value.substring(delimiterIndex);\r\n\r\n\t\t// сдвинуть каретку, если разделитель вставлен левее ее\r\n\t\tif (selectionPos >= delimiterIndex) {\r\n\t\t\tselectionPos++;\r\n\t\t}\r\n\t}\r\n\r\n\t// нажатие на backspace - если слева символ разделителя, перенести каретку за него\r\n\tif (e.inputType === 'deleteContentBackward' && value[selectionPos - 1] === delimiter) {\r\n\t\tselectionPos--;\r\n\t}\r\n\r\n\t// если значение изменилось - вставить его и переместить каретку\r\n\tif (value !== e.target.value) {\r\n\t\te.target.value = value;\r\n\t\te.target.selectionStart = selectionPos;\r\n\t\te.target.selectionEnd = selectionPos;\r\n\t}\r\n}"],"names":["css","Core","$","el","_b","_a","connectDatepicker","options","dateFormatted","delimiter","dateNumbersCount","delimitersIndexes","watch","toRef","dateFormat","i","oninput","e","selectionPos","value","valueChunkLeft","valueChunkRight","extraNumbersCount","valueChunkRightMaxLength","delimiterIndex"],"mappings":";;AAAA,MAAeA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACMfC,EAAK,YAAYD,CAAG;AAEpB,MAAME,IAAI,CAACC,MAAyB;;AACnC,MAAI,GAACC,KAAAC,IAAAJ,EAAK,MAAL,gBAAAI,EAAQ,OAAR,QAAAD,EAAY,aAAY;AAC5B,YAAQ,KAAK,0EAA0E;AAEvF;AAAA,EACD;AAEK,SAAAH,EAAA,EAAE,WAAW,YAAY;AAAA,IAC7B,YAAYA,EAAK,MAAM,WAAW,YAAA,EAAc,QAAQ,KAAK,IAAI,EAAE,QAAQ,KAAK,IAAI,EAAE,QAAQ,KAAK,IAAI;AAAA,EAAA,CACvG,GAEMA,EAAK,EAAEE,CAAE;AACjB;AAEgB,SAAAG,EAAkBH,GAAsBI,GAAc;;AACrE,UAAOF,IAAAH,EAAEC,CAAE,MAAJ,gBAAAE,EAAO,WAAWE;AAC1B;AAEA,IAAIC,GACAC,GACAC,GACAC;AAEJC,EAAMC,EAAMZ,EAAK,MAAM,UAAU,GAAG,MAAM;;AAEzC,EAAAO,IAAgBM,EAAW,YAAY,GACvCL,MAAYJ,IAAAG,EAAc,MAAM,IAAI,MAAxB,gBAAAH,EAA4B,OAAM,KAC9CK,IAAmBF,EAAc,QAAQ,QAAQ,EAAE,EAAE,QACrDG,IAAoB,CAAA;AAEpB,WAASI,IAAI,GAAGA,IAAIP,EAAc,QAAQO;AACrC,IAAAP,EAAcO,CAAC,MAAMN,KACxBE,EAAkB,KAAKI,CAAC;AAG3B,GAAG,EAAE,WAAW,GAAA,CAAM;AAKf,SAASC,EAAQC,GAAQ;AAC3B,MAAAC,IAAeD,EAAE,OAAO,cACxBE,IAAQF,EAAE,OAAO,OAIjBG,IAAiBD,EAAM,UAAU,GAAGD,CAAY,EAAE,QAAQ,QAAQ,EAAE,GACpEG,IAAkBF,EAAM,UAAUD,CAAY,EAAE,QAAQ,QAAQ,EAAE,GAElEI,IAAoBF,EAAe,SAASC,EAAgB,SAASX;AACzE,MAAIY,IAAoB,GAAG;AAET,IAAAF,IAAAA,EAAe,UAAU,GAAGV,CAAgB;AAEvD,UAAAa,IAA2Bb,IAAmBU,EAAe;AACnE,IAAAC,IAAkBA,EAAgB,UAAUA,EAAgB,SAASE,CAAwB;AAAA,EAAA;AAC9F,IAAWD,IAAoB,MAE1BL,EAAE,cAAc,yBAEDG,KAAA,IAAI,OAAO,CAACE,CAAiB,IAE/CD,IAAkB,IAAI,OAAO,CAACC,CAAiB,IAAID;AAIrD,EAAAH,IAAeE,EAAe,QAC9BD,IAAQC,IAAiBC;AAGzB,WAASN,IAAI,GAAGA,IAAIJ,EAAkB,QAAQI,KAAK;AAC5C,UAAAS,IAAiBb,EAAkBI,CAAC;AAElC,IAAAI,IAAAA,EAAM,UAAU,GAAGK,CAAc,IAAIf,IAAYU,EAAM,UAAUK,CAAc,GAGnFN,KAAgBM,KACnBN;AAAA,EAEF;AAGA,EAAID,EAAE,cAAc,2BAA2BE,EAAMD,IAAe,CAAC,MAAMT,KAC1ES,KAIGC,MAAUF,EAAE,OAAO,UACtBA,EAAE,OAAO,QAAQE,GACjBF,EAAE,OAAO,iBAAiBC,GAC1BD,EAAE,OAAO,eAAeC;AAE1B;"}
@@ -1,3 +1,3 @@
1
- define(["require","exports","vue","../require/css.amd!../assets/forms.css"],function(O,u,e){"use strict";var P,W;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 H(){const n=/Chrome|Android/.test(navigator.userAgent);let o=/Safari/.test(navigator.userAgent);return n&&o&&(o=!1),o}function I(){return z()?"⌘":"Ctrl"}class U{}const Y=100;let L;const B=new Map,k={width:window.innerWidth,height:window.innerHeight};function j(n){B.set(n,n)}function K(n){B.delete(n)}function q(n){clearTimeout(L),L=setTimeout(function(){n.topEvent={widthDiff:k.width-window.innerWidth,hightDiff:k.height-window.innerHeight},k.width=window.innerWidth,k.height=window.innerHeight,B.forEach(o=>o(n))},Y)}window.addEventListener("resize",q);const D={addOnReize:j,removeOnResize:K},G={widthForMobile:900,dateFormat:"Y-m-d",gmt:(P=new Date().toString().match(/GMT(\S+)/))==null?void 0:P[1]},Q={isMobile:!1,isMobileUA:!1,isRetina:!1,isApp:!1,isLandscape:!0,isPortrait:!1,size:0,dateFormat:"Y-m-d",gmt:(W=new Date().toString().match(/GMT(\S+)/))==null?void 0:W[1]},w=n=>{var o,a;if(!((a=(o=p.$)==null?void 0:o.ui)!=null&&a.tooltip)){console.info("Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip");return}return p.$(n)},N=(n,o)=>{var s;const a=n.value??{};return a.content??=(s=o.props)==null?void 0:s.title,a.content=String(a.content).replace(/\r\n|\r|\n/g,"<br>"),a.position??={my:"bottom-18px",at:"top center"},a},X={mounted(n,o,a){var s;(s=w(n))==null||s.tooltip(N(o,a))},updated(n,o,a,s){var c;const l=N(o,a),t=(c=w(n))==null?void 0:c.tooltip("instance");t&&(t.options={...t.options,...l})},unmounted(n,o,a){var s;(s=w(n))==null||s.tooltip("destroy")}},h=typeof h>"u"?{}:h;class p{static L=e.reactive({Not_date:"Not date"});static page=h.page??{};static Page=U;static options=G;static state=e.reactive({...Q});static matchMediaIsMobile;static $=h.$;static appendStyle(o,a=""){let s="all";a==="m"&&(s="(max-width: "+this.options.widthForMobile+"px)"),a==="pc"&&(s="(min-width: "+this.options.widthForMobile+"px)");const l=document.createElement("style");l.innerHTML=o,l.media=s,document.head.append(l)}static install(o,a){p.defineOptions(a),o.provide("top-core",p),this.installDirectives(o)}static installDirectives(o){o.directive("top-tooltip",X)}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=h.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(),D.addOnReize(p.onResize),p.onResize(),p.saveToCookie()}static onResize(){p.setStateByWindowSize(),document.documentElement.style.setProperty("--100vh",h.innerHeight+"px")}static setStateByWindowSize(){var o;p.state.isMobile=!!((o=p.matchMediaIsMobile)!=null&&o.matches),p.state.isLandscape=h.innerWidth>h.innerHeight,p.state.isPortrait=!p.state.isLandscape,p.state.size=h.innerWidth>h.innerHeight?h.innerWidth:h.innerHeight,p.saveToCookie()}static saveToCookie(){const o=[1,h.innerWidth,h.innerHeight,h.devicePixelRatio,Number(p.state.isMobile),Number(p.state.isRetina)];document.cookie="device="+o.join(",")+"; path=/;"}}function J(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=void 0,o=!0,a=0){let s;n!=null?s=new Date(n):s=new Date;const l=s.getFullYear(),t=String(s.getMonth()+1).padStart(2,"0"),c=s.getDate().toString().padStart(2,"0"),r=s.getHours().toString().padStart(2,"0"),b=s.getMinutes().toString().padStart(2,"0"),d=s.getSeconds().toString().padStart(2,"0");return s=l+"-"+t+"-"+c,a&&(s+=" "),a>=1&&(s+=r),a>=2&&(s+=":"+b),a>=3&&(s+=":"+d),o&&(s=g(s,a)),s}function g(n,o=2,a=p.L.Not_date){if((!n||n.substring(0,10)==="0000-00-00")&&a&&a!=="0000-00-00")return a;const s=p.state.dateFormat.toLowerCase();let l=n.substring(0,10);l.length===7&&(l+="-01"),l+=" 00:00",l=l.replace(/-/g,"/");const t=new Date(l);if(isNaN(Number(t)))return a;let c=s.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:c+=" "+n.substring(11,13);break;case 2:c+=" "+n.substring(11,16);break;case 3:c+=" "+n.substring(11,19);break}return c}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 a=p.state.dateFormat.toLowerCase(),s=n.split(/\W/),l=a.split(/\W/);let t="",c="",r="";l.forEach((d,i)=>{switch(d){case"d":t=s[i];break;case"m":c=s[i];break;case"y":r=s[i];break}});let b=r+"-"+c+"-"+t;return b.match(/\d\d\d\d-\d\d-\d\d/)||(console.info("Неверный формат даты, будет возращена текущая дата, "+b),b=T(new Date().getTime(),!1).substring(0,10)),b}const Z={class:"top-avatar"},x=["src","title"],ee=["title"],te=e.defineComponent({__name:"avatar",props:{size:{default:64},image:{},nickname:{},isOnline:{type:Boolean},lastActiveTime:{}},setup(n){e.useCssVars(l=>({ed0c8a30:l.size+"px"}));const o=n,a={user:{Online:"Онлайн",LastSeen:"Заходил(а)"}},s=e.computed(()=>{if(o.isOnline)return a.user.Online;if(o.lastActiveTime)return a.user.LastSeen+": "+g(o.lastActiveTime,2)});return(l,t)=>(e.openBlock(),e.createElementBlock("div",Z,[e.createElementVNode("img",{class:"top-avatar_image",src:l.image,title:o.nickname+(s.value?`
2
- ${s.value}`:""),alt:""},null,8,x),l.isOnline?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-avatar_status",title:s.value},null,8,ee)):e.createCommentVNode("",!0)]))}}),oe={"top-avatar":"top-avatar","top-avatar_image":"top-avatar_image","top-avatar_status":"top-avatar_status"},y=(n,o)=>{const a=n.__vccOpts||n;for(const[s,l]of o)a[s]=l;return a},ae=y(te,[["__cssModules",{$style:oe}]]),ne={key:0,class:"top-ellipsis"},se=y(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,a=e.computed(()=>o.href?"a":"button"),s=e.computed(()=>o.isSubmit?"submit":void 0);return(l,t)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),{class:e.normalizeClass({"top-active":l.isActive,"top-disabled":l.disabled,"top-forms-focusable":!l.disabled,"top-button":!0,"top-button-progress":l.isProgress,[`top-size_${l.size}`]:!!l.size,[`top-color_${l.color}`]:!0,[`top-style_${l.styling}`]:!!l.styling,"top-button-withoutText":!l.$slots.default}),name:l.name,title:l.title,href:l.href,type:s.value,"data-top-icon":l.icon||void 0,"data-top-icon2":l.icon2||void 0,disabled:l.disabled||void 0,inProgress:l.isProgress},{default:e.withCtx(()=>[l.$slots.default?(e.openBlock(),e.createElementBlock("span",ne,[e.renderSlot(l.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(l.icon?"":"Button"),1)])])):e.createCommentVNode("",!0),e.renderSlot(l.$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-button-withoutText":"top-button-withoutText","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"}}]]),le={class:"top-forms-optionLabel"},$=y(e.defineComponent({__name:"controlLabel",props:{description:{},disabled:{type:Boolean}},setup(n){return(o,a)=>(e.openBlock(),e.createElementBlock("div",le,[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"],re=y(e.defineComponent({__name:"checkbox",props:e.mergeModels({modelValue:{type:[Boolean,Array,Set]},name:{},value:{},description:{},disabled:{type:Boolean},indeterminate:{type:Boolean},isError:{type:Boolean}},{modelValue:{type:[Boolean,Array,Set]},modelModifiers:{}}),emits:["update:modelValue"],setup(n){const o=e.useModel(n,"modelValue");return(a,s)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-forms-optionWrapper":!0,"top-checkbox":!0,["top-checkbox_"+a.name]:!!a.name,"top-disabled":a.disabled,"top-error":a.isError&&!a.disabled})},[e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:e.normalizeClass({"top-forms-focusable":!a.disabled,"top-forms-option":!0,"top-checkbox_input":!0,"top-error":a.isError&&!a.disabled}),name:a.name,"onUpdate:modelValue":s[0]||(s[0]=l=>o.value=l),value:a.value,indeterminate:a.indeterminate,disabled:a.disabled},null,10,ie),[[e.vModelCheckbox,o.value]]),a.$slots.default?(e.openBlock(),e.createBlock($,{key:0,description:a.description,disabled:a.disabled},{default:e.withCtx(()=>[e.renderSlot(a.$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"}}]]),de=["title"],F=y(e.defineComponent({__name:"hint",props:{hint:{}},setup(n){return(o,a)=>(e.openBlock(),e.createElementBlock("span",{class:"top-hint","data-top-icon":"",title:o.hint},null,8,de))}}),[["__cssModules",{$style:{"top-hint":"top-hint"}}]]),pe=["data-top-icon","data-top-icon2"],ce=["name","title","placeholder","disabled","readonly"],ue={key:2,class:"top-formsCaption"},V=y(e.defineComponent({inheritAttrs:!1,__name:"input",props:{modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},modificator:{},size:{default:"s"},isError:{type:Boolean},isLoading:{type:Boolean},icon:{},icon2:{},addCleaner:{type:Boolean},title:{},captionType:{default:""}},emits:["update:modelValue"],setup(n,{emit:o}){const a=n,s=o,l=e.computed({get(){return a.modelValue},set(r){s("update:modelValue",r)}}),t=e.computed(()=>a.addCleaner&&!a.title||a.captionType!==""?"":a.title),c=r=>{a.modelValue&&r.stopPropagation(),s("update:modelValue","")};return(r,b)=>(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&&l.value&&l.value!=="0000-00-00","top-formsCaptionWrapper":r.captionType!=="","top-formsCaptionWrapper-always":r.captionType==="top"}),"data-top-icon":r.icon,"data-top-icon2":r.icon2},[r.isLoading?(e.openBlock(),e.createBlock(e.unref(A),{key:0})):e.createCommentVNode("",!0),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":b[0]||(b[0]=d=>l.value=d),title:r.title,placeholder:t.value,disabled:r.disabled,readonly:r.readonly,onKeydown:b[1]||(b[1]=e.withKeys(d=>(r.addCleaner||!!r.$slots.btn)&&c(d),["esc"]))},r.$attrs),null,16,ce),[[e.vModelText,l.value]]),r.addCleaner&&l.value&&l.value!=="0000-00-00"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"top-input_cleaner","data-top-icon":"",onClick:e.withModifiers(c,["prevent"])})):e.createCommentVNode("",!0),r.captionType!==""?(e.openBlock(),e.createElementBlock("span",ue,e.toDisplayString(r.title),1)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default")],10,pe))}}),[["__cssModules",{$style:{"top-input":"top-input","top-input_input":"top-input_input","top-input-withCleaner":"top-input-withCleaner","top-input_cleaner":"top-input_cleaner","top-loadbar":"top-loadbar"}}]]),me=["modelValue"],fe=!!document.documentElement.ontouchstart&&!!document.createElement("input").showPicker;let R=n=>{};const be=y(e.defineComponent({__name:"inputDate",props:{modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},modificator:{},size:{},isError:{type:Boolean},isLoading:{type:Boolean},icon:{},icon2:{default:""},addCleaner:{type:Boolean},title:{},captionType:{}},emits:["update:modelValue"],setup(n,{emit:o}){const a=n,s=o;e.onUnmounted(()=>{t&&t.datepicker("destroy")});const l=e.ref();let t;const c=e.computed({get(){return g(a.modelValue,2,"0000-00-00")},set(i){i=M(i,"0000-00-00"),s("update:modelValue",i)}});let r=i=>{R(i)},b=i=>{const m=M(i.target.value),f=g(m);if(!f||f===p.L.Not_date||i.target.value!==f){i.target.value=c.value;return}c.value=i.target.value};async function d(i){const m=await new Promise((f,v)=>O(["./datepicker-C7YUpcvo.amd"],f,v));R=m.oninput,t=m.connectDatepicker(i.target,{onSelect:()=>b(i)}),t&&t.datepicker("show")}return(i,m)=>e.unref(fe)?(e.openBlock(),e.createBlock(e.unref(V),e.mergeProps({key:0},i.$props,{modelValue:c.value,readonly:"",onClick:m[1]||(m[1]=f=>l.value.showPicker())}),{default:e.withCtx(()=>[e.createElementVNode("input",{ref_key:"el",ref:l,type:"date",class:"top-input_input-date",modelValue:i.modelValue,onChange:m[0]||(m[0]=f=>c.value=f.target.value),tabindex:"-1"},null,40,me)]),_:1},16,["modelValue"])):(e.openBlock(),e.createBlock(e.unref(V),e.mergeProps({key:1},i.$props,{modelValue:c.value,"onUpdate:modelValue":m[2]||(m[2]=f=>f===""?c.value="":""),onInput:e.unref(r),onFocusOnce:d,onChange:e.unref(b),modificator:"datepicker"}),null,16,["modelValue","onInput","onChange"]))}}),[["__cssModules",{$style:{"top-input-datepicker":"top-input-datepicker","top-input_input-date":"top-input_input-date"}}]]),he={class:"top-inputRange"},ye=e.createElementVNode("span",{class:"top-inputRange_dash"}," — ",-1),ve=y(e.defineComponent({__name:"inputRange",setup(n){return(o,a)=>(e.openBlock(),e.createElementBlock("div",he,[e.renderSlot(o.$slots,"from"),ye,e.renderSlot(o.$slots,"to")]))}}),[["__cssModules",{$style:{"top-inputRange":"top-inputRange","top-inputRange_dash":"top-inputRange_dash","top-input":"top-input"}}]]),ge=["name","value","disabled"],ke=y(e.defineComponent({__name:"radio",props:{modelValue:{},value:{},name:{},description:{},disabled:{type:Boolean},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const a=n,s=o,l=e.computed({get(){return a.modelValue},set(t){s("update:modelValue",t)}});return(t,c)=>(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":c[0]||(c[0]=r=>l.value=r),name:t.name,value:t.value,disabled:t.disabled},null,10,ge),[[e.vModelRadio,l.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"}}]]),$e=["name","value","disabled"],_e=y(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 a=n,s=o,l=e.computed({get(){return a.modelValue},set(t){s("update:modelValue",t)}});return(t,c)=>(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":c[0]||(c[0]=r=>l.value=r),name:t.name,value:t.value,disabled:t.disabled},null,10,$e),[[e.vModelCheckbox,l.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"}}]]),Be=["name","placeholder","disabled","readonly","rows"],we={key:0,class:"top-textarea_pseudoContent"},Me=y(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 a=n,s=o,l=e.computed({get(){return a.modelValue},set(t){s("update:modelValue",t)}});return(t,c)=>{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":c[0]||(c[0]=b=>l.value=b)}),null,16,Be),[[e.vModelText,l.value]]),t.expandable?(e.openBlock(),e.createElementBlock("div",we,e.toDisplayString(l.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"}}]]),Ve=["data-value","data-top-icon","data-top-icon2"],Se=["name","disabled"],Ee=["label","disabled"],Ce=["value","selected","disabled"],ze=["value","selected","disabled"],Le={key:1,class:"top-formsCaption"},De=y(e.defineComponent({__name:"select",props:e.mergeModels({modelValue:{},options:{},name:{},disabled:{type:Boolean},icon:{},size:{default:"s"},addChanger:{type:Boolean},title:{},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:e.mergeModels(["update:modelValue"],["update:modelValue"]),setup(n,{emit:o}){const a=n,s=e.useModel(n,"modelValue"),l=e.computed(()=>{const d=new Map;return a.options.forEach((i,m)=>{if(typeof i=="string"&&(i=c(m,i)),i.children){const f=new Map;i.children.forEach((v,_)=>{typeof v=="string"&&(v=c(_,v)),f.set(v.value,v)}),i={...i},i.children=f,d.set(i.value,i)}else d.set(i.value,i)}),d}),t=e.computed(()=>{const d=new Map;return l.value.forEach(i=>{if(!i.disabled){if(i.children){i.children.forEach(m=>{m.disabled||d.set(m.value,m)});return}d.set(i.value,i)}}),d}),c=(d,i)=>({value:d,title:i});e.watch([()=>a.modelValue,t],()=>{(s.value===null||s.value===void 0)&&t.value.size&&(console.warn("Пожалуйста, не передавайте в компонент Select значения null и undefined"),s.value=t.value.keys().next().value)},{immediate:!0});const r=e.computed(()=>{var d;return(d=t.value.get(s.value))==null?void 0:d.icon}),b=()=>{const d=[...t.value.keys()],m=(d.indexOf(s.value)+1)%d.length;s.value=d[m]};return(d,i)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-select":!0,["top-select-"+d.name]:d.name,["top-size_"+d.size]:!0,"top-formsCaptionWrapper":!!d.title,"top-select-error":d.isError,"top-disabled":d.disabled}),"data-value":s.value,"data-top-icon":d.icon,"data-top-icon2":r.value},[e.withDirectives(e.createElementVNode("select",{class:e.normalizeClass({"top-forms-focusable":!d.disabled,"top-select_select":!0,"top-select_arrow":!0,"top-error":d.isError}),name:d.name,disabled:d.disabled,"onUpdate:modelValue":i[0]||(i[0]=m=>s.value=m)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.value,([m,f])=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[f.children?(e.openBlock(),e.createElementBlock("optgroup",{key:"group_"+m,label:f.title,disabled:f.disabled},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.children,([v,_])=>(e.openBlock(),e.createElementBlock("option",{key:v,value:v,selected:v===s.value,disabled:_.disabled},e.toDisplayString(_.title),9,Ce))),128))],8,Ee)):(e.openBlock(),e.createElementBlock("option",{key:m??void 0,value:m,selected:m===s.value,disabled:f.disabled},e.toDisplayString(f.title),9,ze))],64))),256))],10,Se),[[e.vModelSelect,s.value]]),d.addChanger&&t.value.size&&!d.disabled?(e.openBlock(),e.createElementBlock("span",{key:0,class:"top-changer",onClick:b})):e.createCommentVNode("",!0),d.title?(e.openBlock(),e.createElementBlock("span",Le,e.toDisplayString(d.title),1)):e.createCommentVNode("",!0)],10,Ve))}}),[["__cssModules",{$style:{"top-select":"top-select","top-select-error":"top-select-error","top-select_select":"top-select_select","top-changer":"top-changer"}}]]),Ne={"top-loadbar":"top-loadbar"},Te={},Fe={class:"top-loadbar"};function Re(n,o){return e.openBlock(),e.createElementBlock("div",Fe)}const A=y(Te,[["render",Re],["__cssModules",{$style:Ne}]]);u.Button=se,u.ControlLabel=$,u.Core=p,u.Events=D,u.Hint=F,u.Input=V,u.Loadbar=A,u.Textarea=Me,u._export_sfc=y,u.avatar=ae,u.checkbox=re,u.dateFormat=g,u.dateUnformat=M,u.genDate=T,u.getCommandKeyLabel=I,u.inputDate=be,u.inputRange=ve,u.isApp=C,u.isMacOS=z,u.isMobile=E,u.isRetina=S,u.isSafari=H,u.radio=ke,u.select=De,u.stringToDate=J,u.switcher=_e,u.window=h});
3
- //# sourceMappingURL=forms-_rDwj89q.amd.js.map
1
+ define(["require","exports","vue","../require/css.amd!../assets/forms.css"],function(O,u,e){"use strict";var P,W;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 H(){const n=/Chrome|Android/.test(navigator.userAgent);let o=/Safari/.test(navigator.userAgent);return n&&o&&(o=!1),o}function I(){return z()?"⌘":"Ctrl"}class U{}const Y=100;let L;const $=new Map,g={width:window.innerWidth,height:window.innerHeight};function j(n){$.set(n,n)}function K(n){$.delete(n)}function q(n){clearTimeout(L),L=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))},Y)}window.addEventListener("resize",q);const D={addOnReize:j,removeOnResize:K},G={widthForMobile:900,dateFormat:"Y-m-d",gmt:(P=new Date().toString().match(/GMT(\S+)/))==null?void 0:P[1]},Q={isMobile:!1,isMobileUA:!1,isRetina:!1,isApp:!1,isLandscape:!0,isPortrait:!1,size:0,dateFormat:"Y-m-d",gmt:(W=new Date().toString().match(/GMT(\S+)/))==null?void 0:W[1]},_=n=>{var o,a;if(!((a=(o=p.$)==null?void 0:o.ui)!=null&&a.tooltip)){console.info("Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip");return}return p.$(n)},N=(n,o)=>{var s;const a=n.value??{};return a.content??=(s=o.props)==null?void 0:s.title,a.content=String(a.content).replace(/\r\n|\r|\n/g,"<br>"),a.position??={my:"bottom-18px",at:"top center"},a},X={mounted(n,o,a){var s;(s=_(n))==null||s.tooltip(N(o,a))},updated(n,o,a,s){var c;const i=N(o,a),t=(c=_(n))==null?void 0:c.tooltip("instance");t&&(t.options={...t.options,...i})},unmounted(n,o,a){var s;(s=_(n))==null||s.tooltip("destroy")}},B=typeof window>"u"?{}:window;class p{static L=e.reactive({Not_date:"Not date"});static page=B.page??{};static Page=U;static options=G;static state=e.reactive({...Q});static matchMediaIsMobile;static $=B.$;static appendStyle(o,a=""){let s="all";a==="m"&&(s="(max-width: "+this.options.widthForMobile+"px)"),a==="pc"&&(s="(min-width: "+this.options.widthForMobile+"px)");const i=document.createElement("style");i.innerHTML=o,i.media=s,document.head.append(i)}static install(o,a){p.defineOptions(a),o.provide("top-core",p),this.installDirectives(o)}static installDirectives(o){o.directive("top-tooltip",X)}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(),D.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 J(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=void 0,o=!0,a=0){let s;n!=null?s=new Date(n):s=new Date;const i=s.getFullYear(),t=String(s.getMonth()+1).padStart(2,"0"),c=s.getDate().toString().padStart(2,"0"),r=s.getHours().toString().padStart(2,"0"),b=s.getMinutes().toString().padStart(2,"0"),d=s.getSeconds().toString().padStart(2,"0");return s=i+"-"+t+"-"+c,a&&(s+=" "),a>=1&&(s+=r),a>=2&&(s+=":"+b),a>=3&&(s+=":"+d),o&&(s=v(s,a)),s}function v(n,o=2,a=p.L.Not_date){if((!n||n.substring(0,10)==="0000-00-00")&&a&&a!=="0000-00-00")return a;const s=p.state.dateFormat.toLowerCase();let i=n.substring(0,10);i.length===7&&(i+="-01"),i+=" 00:00",i=i.replace(/-/g,"/");const t=new Date(i);if(isNaN(Number(t)))return a;let c=s.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:c+=" "+n.substring(11,13);break;case 2:c+=" "+n.substring(11,16);break;case 3:c+=" "+n.substring(11,19);break}return c}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 a=p.state.dateFormat.toLowerCase(),s=n.split(/\W/),i=a.split(/\W/);let t="",c="",r="";i.forEach((d,l)=>{switch(d){case"d":t=s[l];break;case"m":c=s[l];break;case"y":r=s[l];break}});let b=r+"-"+c+"-"+t;return b.match(/\d\d\d\d-\d\d-\d\d/)||(console.info("Неверный формат даты, будет возращена текущая дата, "+b),b=T(new Date().getTime(),!1).substring(0,10)),b}const Z={class:"top-avatar"},x=["src","title"],ee=["title"],te=e.defineComponent({__name:"avatar",props:{size:{default:64},image:{},nickname:{},isOnline:{type:Boolean},lastActiveTime:{}},setup(n){e.useCssVars(i=>({ed0c8a30:i.size+"px"}));const o=n,a={user:{Online:"Онлайн",LastSeen:"Заходил(а)"}},s=e.computed(()=>{if(o.isOnline)return a.user.Online;if(o.lastActiveTime)return a.user.LastSeen+": "+v(o.lastActiveTime,2)});return(i,t)=>(e.openBlock(),e.createElementBlock("div",Z,[e.createElementVNode("img",{class:"top-avatar_image",src:i.image,title:o.nickname+(s.value?`
2
+ ${s.value}`:""),alt:""},null,8,x),i.isOnline?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-avatar_status",title:s.value},null,8,ee)):e.createCommentVNode("",!0)]))}}),oe={"top-avatar":"top-avatar","top-avatar_image":"top-avatar_image","top-avatar_status":"top-avatar_status"},h=(n,o)=>{const a=n.__vccOpts||n;for(const[s,i]of o)a[s]=i;return a},ae=h(te,[["__cssModules",{$style:oe}]]),ne={key:0,class:"top-ellipsis"},se=h(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,a=e.computed(()=>o.href?"a":"button"),s=e.computed(()=>o.isSubmit?"submit":void 0);return(i,t)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),{class:e.normalizeClass({"top-active":i.isActive,"top-disabled":i.disabled,"top-forms-focusable":!i.disabled,"top-button":!0,"top-button-progress":i.isProgress,[`top-size_${i.size}`]:!!i.size,[`top-color_${i.color}`]:!0,[`top-style_${i.styling}`]:!!i.styling,"top-button-withoutText":!i.$slots.default}),name:i.name,title:i.title,href:i.href,type:s.value,"data-top-icon":i.icon||void 0,"data-top-icon2":i.icon2||void 0,disabled:i.disabled||void 0,inProgress:i.isProgress},{default:e.withCtx(()=>[i.$slots.default?(e.openBlock(),e.createElementBlock("span",ne,[e.renderSlot(i.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(i.icon?"":"Button"),1)])])):e.createCommentVNode("",!0),e.renderSlot(i.$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-button-withoutText":"top-button-withoutText","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"}}]]),ie={class:"top-forms-optionLabel"},k=h(e.defineComponent({__name:"controlLabel",props:{description:{},disabled:{type:Boolean}},setup(n){return(o,a)=>(e.openBlock(),e.createElementBlock("div",ie,[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"}}]]),le=["name","value","indeterminate","disabled"],re=h(e.defineComponent({__name:"checkbox",props:e.mergeModels({modelValue:{type:[Boolean,Array,Set]},name:{},value:{},description:{},disabled:{type:Boolean},indeterminate:{type:Boolean},isError:{type:Boolean}},{modelValue:{type:[Boolean,Array,Set]},modelModifiers:{}}),emits:["update:modelValue"],setup(n){const o=e.useModel(n,"modelValue");return(a,s)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-forms-optionWrapper":!0,"top-checkbox":!0,["top-checkbox_"+a.name]:!!a.name,"top-disabled":a.disabled,"top-error":a.isError&&!a.disabled})},[e.withDirectives(e.createElementVNode("input",{type:"checkbox",class:e.normalizeClass({"top-forms-focusable":!a.disabled,"top-forms-option":!0,"top-checkbox_input":!0,"top-error":a.isError&&!a.disabled}),name:a.name,"onUpdate:modelValue":s[0]||(s[0]=i=>o.value=i),value:a.value,indeterminate:a.indeterminate,disabled:a.disabled},null,10,le),[[e.vModelCheckbox,o.value]]),a.$slots.default?(e.openBlock(),e.createBlock(k,{key:0,description:a.description,disabled:a.disabled},{default:e.withCtx(()=>[e.renderSlot(a.$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"}}]]),de=["title"],F=h(e.defineComponent({__name:"hint",props:{hint:{}},setup(n){return(o,a)=>(e.openBlock(),e.createElementBlock("span",{class:"top-hint","data-top-icon":"",title:o.hint},null,8,de))}}),[["__cssModules",{$style:{"top-hint":"top-hint"}}]]),pe=["data-top-icon","data-top-icon2"],ce=["name","title","placeholder","disabled","readonly"],ue={key:2,class:"top-formsCaption"},V=h(e.defineComponent({inheritAttrs:!1,__name:"input",props:{modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},modificator:{},size:{default:"s"},isError:{type:Boolean},isLoading:{type:Boolean},icon:{},icon2:{},addCleaner:{type:Boolean},title:{},captionType:{default:""}},emits:["update:modelValue"],setup(n,{emit:o}){const a=n,s=o,i=e.computed({get(){return a.modelValue},set(r){s("update:modelValue",r)}}),t=e.computed(()=>a.addCleaner&&!a.title||a.captionType!==""?"":a.title),c=r=>{a.modelValue&&r.stopPropagation(),s("update:modelValue","")};return(r,b)=>(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&&i.value&&i.value!=="0000-00-00","top-formsCaptionWrapper":r.captionType!=="","top-formsCaptionWrapper-always":r.captionType==="top"}),"data-top-icon":r.icon,"data-top-icon2":r.icon2},[r.isLoading?(e.openBlock(),e.createBlock(e.unref(A),{key:0})):e.createCommentVNode("",!0),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":b[0]||(b[0]=d=>i.value=d),title:r.title,placeholder:t.value,disabled:r.disabled,readonly:r.readonly,onKeydown:b[1]||(b[1]=e.withKeys(d=>(r.addCleaner||!!r.$slots.btn)&&c(d),["esc"]))},r.$attrs),null,16,ce),[[e.vModelText,i.value]]),r.addCleaner&&i.value&&i.value!=="0000-00-00"?(e.openBlock(),e.createElementBlock("span",{key:1,class:"top-input_cleaner","data-top-icon":"",onClick:e.withModifiers(c,["prevent"])})):e.createCommentVNode("",!0),r.captionType!==""?(e.openBlock(),e.createElementBlock("span",ue,e.toDisplayString(r.title),1)):e.createCommentVNode("",!0),e.renderSlot(r.$slots,"default")],10,pe))}}),[["__cssModules",{$style:{"top-input":"top-input","top-input_input":"top-input_input","top-input-withCleaner":"top-input-withCleaner","top-input_cleaner":"top-input_cleaner","top-loadbar":"top-loadbar"}}]]),me=["modelValue"],fe=!!document.documentElement.ontouchstart&&!!document.createElement("input").showPicker;let R=n=>{};const be=h(e.defineComponent({__name:"inputDate",props:{modelValue:{},name:{},disabled:{type:Boolean},readonly:{type:Boolean},modificator:{},size:{},isError:{type:Boolean},isLoading:{type:Boolean},icon:{},icon2:{default:""},addCleaner:{type:Boolean},title:{},captionType:{}},emits:["update:modelValue"],setup(n,{emit:o}){const a=n,s=o;e.onUnmounted(()=>{t&&t.datepicker("destroy")});const i=e.ref();let t;const c=e.computed({get(){return v(a.modelValue,2,"0000-00-00")},set(l){l=M(l,"0000-00-00"),s("update:modelValue",l)}});let r=l=>{R(l)},b=l=>{const m=M(l.target.value),f=v(m);if(!f||f===p.L.Not_date||l.target.value!==f){l.target.value=c.value;return}c.value=l.target.value};async function d(l){const m=await new Promise((f,y)=>O(["./datepicker-B9eprAyk.amd"],f,y));R=m.oninput,t=m.connectDatepicker(l.target,{onSelect:()=>b(l)}),t&&t.datepicker("show")}return(l,m)=>e.unref(fe)?(e.openBlock(),e.createBlock(e.unref(V),e.mergeProps({key:0},l.$props,{modelValue:c.value,readonly:"",onClick:m[1]||(m[1]=f=>i.value.showPicker())}),{default:e.withCtx(()=>[e.createElementVNode("input",{ref_key:"el",ref:i,type:"date",class:"top-input_input-date",modelValue:l.modelValue,onChange:m[0]||(m[0]=f=>c.value=f.target.value),tabindex:"-1"},null,40,me)]),_:1},16,["modelValue"])):(e.openBlock(),e.createBlock(e.unref(V),e.mergeProps({key:1},l.$props,{modelValue:c.value,"onUpdate:modelValue":m[2]||(m[2]=f=>f===""?c.value="":""),onInput:e.unref(r),onFocusOnce:d,onChange:e.unref(b),modificator:"datepicker"}),null,16,["modelValue","onInput","onChange"]))}}),[["__cssModules",{$style:{"top-input-datepicker":"top-input-datepicker","top-input_input-date":"top-input_input-date"}}]]),he={class:"top-inputRange"},ye=e.createElementVNode("span",{class:"top-inputRange_dash"}," — ",-1),ve=h(e.defineComponent({__name:"inputRange",setup(n){return(o,a)=>(e.openBlock(),e.createElementBlock("div",he,[e.renderSlot(o.$slots,"from"),ye,e.renderSlot(o.$slots,"to")]))}}),[["__cssModules",{$style:{"top-inputRange":"top-inputRange","top-inputRange_dash":"top-inputRange_dash","top-input":"top-input"}}]]),ge=["name","value","disabled"],ke=h(e.defineComponent({__name:"radio",props:{modelValue:{},value:{},name:{},description:{},disabled:{type:Boolean},isError:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:o}){const a=n,s=o,i=e.computed({get(){return a.modelValue},set(t){s("update:modelValue",t)}});return(t,c)=>(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":c[0]||(c[0]=r=>i.value=r),name:t.name,value:t.value,disabled:t.disabled},null,10,ge),[[e.vModelRadio,i.value]]),t.$slots.default?(e.openBlock(),e.createBlock(k,{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"}}]]),we=["name","value","disabled"],$e=h(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 a=n,s=o,i=e.computed({get(){return a.modelValue},set(t){s("update:modelValue",t)}});return(t,c)=>(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":c[0]||(c[0]=r=>i.value=r),name:t.name,value:t.value,disabled:t.disabled},null,10,we),[[e.vModelCheckbox,i.value]]),t.$slots.default?(e.openBlock(),e.createBlock(k,{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"],Be={key:0,class:"top-textarea_pseudoContent"},Me=h(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 a=n,s=o,i=e.computed({get(){return a.modelValue},set(t){s("update:modelValue",t)}});return(t,c)=>{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":c[0]||(c[0]=b=>i.value=b)}),null,16,_e),[[e.vModelText,i.value]]),t.expandable?(e.openBlock(),e.createElementBlock("div",Be,e.toDisplayString(i.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"}}]]),Ve=["data-value","data-top-icon","data-top-icon2"],Se=["name","disabled"],Ee=["label","disabled"],Ce=["value","selected","disabled"],ze=["value","selected","disabled"],Le={key:1,class:"top-formsCaption"},De=h(e.defineComponent({__name:"select",props:e.mergeModels({modelValue:{},options:{},name:{},disabled:{type:Boolean},icon:{},size:{default:"s"},addChanger:{type:Boolean},title:{},isError:{type:Boolean}},{modelValue:{required:!0},modelModifiers:{}}),emits:e.mergeModels(["update:modelValue"],["update:modelValue"]),setup(n,{emit:o}){const a=n,s=e.useModel(n,"modelValue"),i=e.computed(()=>{const d=new Map;return a.options.forEach((l,m)=>{if(typeof l=="string"&&(l=c(m,l)),l.children){const f=new Map;l.children.forEach((y,w)=>{typeof y=="string"&&(y=c(w,y)),f.set(y.value,y)}),l={...l},l.children=f,d.set(l.value,l)}else d.set(l.value,l)}),d}),t=e.computed(()=>{const d=new Map;return i.value.forEach(l=>{if(!l.disabled){if(l.children){l.children.forEach(m=>{m.disabled||d.set(m.value,m)});return}d.set(l.value,l)}}),d}),c=(d,l)=>({value:d,title:l});e.watch([()=>a.modelValue,t],()=>{(s.value===null||s.value===void 0)&&t.value.size&&(console.warn("Пожалуйста, не передавайте в компонент Select значения null и undefined"),s.value=t.value.keys().next().value)},{immediate:!0});const r=e.computed(()=>{var d;return(d=t.value.get(s.value))==null?void 0:d.icon}),b=()=>{const d=[...t.value.keys()],m=(d.indexOf(s.value)+1)%d.length;s.value=d[m]};return(d,l)=>(e.openBlock(),e.createElementBlock("label",{class:e.normalizeClass({"top-select":!0,["top-select-"+d.name]:d.name,["top-size_"+d.size]:!0,"top-formsCaptionWrapper":!!d.title,"top-select-error":d.isError,"top-disabled":d.disabled}),"data-value":s.value,"data-top-icon":d.icon,"data-top-icon2":r.value},[e.withDirectives(e.createElementVNode("select",{class:e.normalizeClass({"top-forms-focusable":!d.disabled,"top-select_select":!0,"top-select_arrow":!0,"top-error":d.isError}),name:d.name,disabled:d.disabled,"onUpdate:modelValue":l[0]||(l[0]=m=>s.value=m)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,([m,f])=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[f.children?(e.openBlock(),e.createElementBlock("optgroup",{key:"group_"+m,label:f.title,disabled:f.disabled},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.children,([y,w])=>(e.openBlock(),e.createElementBlock("option",{key:y,value:y,selected:y===s.value,disabled:w.disabled},e.toDisplayString(w.title),9,Ce))),128))],8,Ee)):(e.openBlock(),e.createElementBlock("option",{key:m??void 0,value:m,selected:m===s.value,disabled:f.disabled},e.toDisplayString(f.title),9,ze))],64))),256))],10,Se),[[e.vModelSelect,s.value]]),d.addChanger&&t.value.size&&!d.disabled?(e.openBlock(),e.createElementBlock("span",{key:0,class:"top-changer",onClick:b})):e.createCommentVNode("",!0),d.title?(e.openBlock(),e.createElementBlock("span",Le,e.toDisplayString(d.title),1)):e.createCommentVNode("",!0)],10,Ve))}}),[["__cssModules",{$style:{"top-select":"top-select","top-select-error":"top-select-error","top-select_select":"top-select_select","top-changer":"top-changer"}}]]),Ne={"top-loadbar":"top-loadbar"},Te={},Fe={class:"top-loadbar"};function Re(n,o){return e.openBlock(),e.createElementBlock("div",Fe)}const A=h(Te,[["render",Re],["__cssModules",{$style:Ne}]]);u.Button=se,u.ControlLabel=k,u.Core=p,u.Events=D,u.Hint=F,u.Input=V,u.Loadbar=A,u.Textarea=Me,u._export_sfc=h,u._window=B,u.avatar=ae,u.checkbox=re,u.dateFormat=v,u.dateUnformat=M,u.genDate=T,u.getCommandKeyLabel=I,u.inputDate=be,u.inputRange=ve,u.isApp=C,u.isMacOS=z,u.isMobile=E,u.isRetina=S,u.isSafari=H,u.radio=ke,u.select=De,u.stringToDate=J,u.switcher=$e});
3
+ //# sourceMappingURL=forms-DkNAMd-D.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-DkNAMd-D.amd.js","sources":["../../src/core/utils/device.ts","../../src/core/core/page.ts","../../src/core/core/events.ts","../../src/core/core/options.ts","../../src/core/core/state.ts","../../src/core/directives/tooltip.ts","../../src/core/utils/window.ts","../../src/core/core/core.ts","../../src/core/utils/date.ts","../../src/components/forms/avatar/avatar.vue","../../src/components/forms/button/button.vue","../../src/components/forms/input/input.vue","../../src/components/forms/inputDate/inputDate.vue","../../src/components/forms/radio/radio.vue","../../src/components/forms/switcher/switcher.vue","../../src/components/forms/textarea/textarea.vue","../../src/components/forms/select/select.vue","../../src/components/forms/loadbar/loadbar.vue"],"sourcesContent":["export function isRetina() {\r\n\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\r\n}\r\n\r\n// определить, является ли устройство мобильным\r\nexport function isMobile(): boolean {\r\n\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\r\n}\r\n\r\n// определить, открыт ли сайт в приложении\r\nexport function isApp() {\r\n\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\r\n}\r\n\r\n// определить, является ли OS пользователя macOS\r\nexport function isMacOS() {\r\n\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\r\n}\r\n\r\n// определить, является ли текущий браузер пользователя Safari\r\nexport function isSafari() {\r\n\tconst isChrome = /Chrome|Android/.test(navigator.userAgent);\r\n\r\n\tlet isSafari = /Safari/.test(navigator.userAgent);\r\n\tif (isChrome && isSafari) {\r\n\t\tisSafari = false;\r\n\t}\r\n\r\n\treturn isSafari;\r\n};\r\n\r\n/**\r\n * Вернуть текст для обозначения клавиши Ctrl / Command в зависимости от OS\r\n * @returns {'Ctrl'|'⌘'}\r\n */\r\nexport function getCommandKeyLabel(): 'Ctrl' | '⌘' {\r\n\tif (isMacOS()) {\r\n\t\treturn '⌘';\r\n\t} else {\r\n\t\treturn 'Ctrl';\r\n\t}\r\n}","class Page {\r\n\r\n}\r\n\r\nexport default Page;","const onResizeDelay = 100;\r\n\r\nlet onResizeTimer: NodeJS.Timeout;\r\n\r\ntype TopEvent = Event & { topEvent: { widthDiff: number, hightDiff: number } }\r\n\r\n/**\r\n * Установленные обрабочики на событие изменения размеров окна\r\n */\r\nconst onResizeListeners: Map<(ev: TopEvent) => any, (ev: TopEvent) => any> = new Map();\r\n\r\n// зафиксированное состояние размеров окна\r\nconst windowSize = {\r\n\twidth: window.innerWidth,\r\n\theight: window.innerHeight,\r\n};\r\n\r\n/**\r\n * Добавить обработчик на событие изменения размеров экрана\r\n * вызов таких обработчиков будет опмизирован и объединен в одно событие\r\n */\r\nfunction addOnReize (listener: (this: Element, ev: TopEvent) => any) {\r\n\tonResizeListeners.set(listener, listener);\r\n}\r\n\r\n/**\r\n * Удаление обработчика на событие изменений размеров экрана\r\n */\r\nfunction removeOnResize (listener: (this: Element, ev: TopEvent) => any) {\r\n\tonResizeListeners.delete(listener);\r\n}\r\n\r\nfunction onResize (e: any) {\r\n\tclearTimeout(onResizeTimer);\r\n\r\n\tonResizeTimer = setTimeout(function () {\r\n\t\te.topEvent = {\r\n\t\t\twidthDiff: windowSize.width - window.innerWidth,\r\n\t\t\thightDiff: windowSize.height - window.innerHeight,\r\n\t\t};\r\n\r\n\t\twindowSize.width = window.innerWidth;\r\n\t\twindowSize.height = window.innerHeight;\r\n\r\n\t\tonResizeListeners.forEach((callback) => callback(e));\r\n\t}, onResizeDelay);\r\n}\r\n\r\nwindow.addEventListener('resize', onResize);\r\n\r\nexport default {\r\n\taddOnReize,\r\n\tremoveOnResize,\r\n};\r\n","/**\r\n * Конфигурация UI\r\n * Можно переопределить при подклчюении UI во Vue приложение через app.use(Core, options)\r\n */\r\nconst options = {\r\n\twidthForMobile: 900,\r\n\tdateFormat: 'Y-m-d',\r\n\r\n\t/**\r\n\t * Для Москвы: +0300\r\n\t */\r\n\tgmt: new Date().toString().match(/GMT(\\S+)/)?.[1],\r\n};\r\n\r\nexport default options;","/**\r\n * State UI для взаимодейсвтиями с приложениями Vue\r\n */\r\nconst state = {\r\n\t/**\r\n\t * Device by size\r\n\t * @see widthForMobile\r\n\t */\r\n\tisMobile: false,\r\n\r\n\t/**\r\n\t * Device by user agent\r\n\t */\r\n\tisMobileUA: false,\r\n\r\n\t/**\r\n\t * true, если плотность пикселей экрана больше 1\r\n\t */\r\n\tisRetina: false,\r\n\r\n\t/**\r\n\t * true, елси это приложение\r\n\t */\r\n\tisApp: false,\r\n\r\n\t/**\r\n\t * true при горизонтальном расположении устройства\r\n\t */\r\n\tisLandscape: true,\r\n\r\n\t/**\r\n\t * true при вертикальном расположении устройства\r\n\t */\r\n\tisPortrait: false,\r\n\tsize: 0,\r\n\r\n\t// См. core.options\r\n\tdateFormat: 'Y-m-d',\r\n\r\n\t// См. core.options\r\n\tgmt: new Date().toString().match(/GMT(\\S+)/)?.[1],\r\n};\r\n\r\nexport default state;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\r\nimport Core from '@/core/core/core';\r\n\r\nconst $ = (el: VNode) => {\r\n\tif (!Core.$?.ui?.tooltip) {\r\n\t\tconsole.info('Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip');\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\treturn Core.$(el);\r\n};\r\n\r\nconst tvTooltipGenOptions = (binding: DirectiveBinding, vnode: VNode) => {\r\n\tconst options = binding.value ?? {};\r\n\r\n\toptions.content ??= vnode.props?.title;\r\n\toptions.content = String(options.content).replace(/\\r\\n|\\r|\\n/g, '<br>');\r\n\r\n\toptions.position ??= {\r\n\t\tmy: 'bottom-18px',\r\n\t\tat: 'top center',\r\n\t};\r\n\r\n\treturn options;\r\n};\r\n\r\nconst tooltip = {\r\n\tmounted(el: VNode, binding: DirectiveBinding, vnode: VNode) {\r\n\t\t$(el)?.tooltip(tvTooltipGenOptions(binding, vnode));\r\n\t},\r\n\r\n\tupdated(el: VNode, binding: DirectiveBinding, vnode: VNode, _prevVnode: VNode) {\r\n\t\t/**\r\n\t\t * В результате обновления может быть открыто несколько тултипов поэтому изменить опции, без перерисовки тултипа\r\n\t\t */\r\n\t\tconst options = tvTooltipGenOptions(binding, vnode);\r\n\t\tconst instance = $(el)?.tooltip('instance') as { options: JQueryUI.TooltipOptions } | undefined;\r\n\t\tif (!instance) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tinstance.options = {\r\n\t\t\t...instance.options,\r\n\t\t\t...options,\r\n\t\t};\r\n\t},\r\n\r\n\tunmounted(el: VNode, _binding: DirectiveBinding, _vnode: VNode) {\r\n\t\t$(el)?.tooltip('destroy');\r\n\t},\r\n} satisfies ObjectDirective;\r\n\r\nexport default tooltip;","/**\r\n * Генерация объекта window\r\n *\r\n * На backend объекта window не существует\r\n */\r\nconst genWindow = (): any => {\r\n\tif (typeof window === 'undefined') {\r\n\t\treturn {};\r\n\t}\r\n\r\n\treturn window;\r\n};\r\n\r\nexport const _window = genWindow();","import { reactive } from 'vue';\r\nimport { isMobile, isRetina, isApp } from '@/core/utils/device';\r\nimport Page from '@/core/core/page';\r\nimport Events from '@/core/core/events';\r\nimport options from '@/core/core/options';\r\nimport state from '@/core/core/state';\r\nimport directiveTooltip from '@/core/directives/tooltip';\r\nimport { _window } from '@/core/utils/window';\r\n\r\nclass Core {\r\n\r\n\t/**\r\n\t * Настройки словаря\r\n\t */\r\n\tstatic L = reactive({\r\n\t\tNot_date: 'Not date',\r\n\t});\r\n\r\n\tstatic page = _window.page ?? {};\r\n\r\n\tstatic Page = Page;\r\n\r\n\tstatic options = options;\r\n\r\n\tstatic state = reactive({ ...state });\r\n\r\n\tstatic matchMediaIsMobile?: MediaQueryList;\r\n\r\n\tstatic $ = _window.$ as typeof $ | undefined;\r\n\r\n\t/**\r\n\t * Добавить на страницу стили, используется для загрузки стилей из js\r\n\t *\r\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\r\n\t * @param style - css стили в строке\r\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\r\n\t */\r\n\tstatic appendStyle(style: string, type: '' | 'm' | 'pc' = ''): void {\r\n\t\tlet media = 'all';\r\n\r\n\t\tif (type === 'm') {\r\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\r\n\t\t}\r\n\r\n\t\tif (type === 'pc') {\r\n\t\t\tmedia = '(min-width: ' + this.options.widthForMobile + 'px)';\r\n\t\t}\r\n\r\n\t\tconst elStyle = document.createElement('style');\r\n\t\telStyle.innerHTML = style;\r\n\t\telStyle.media = media;\r\n\r\n\t\tdocument.head.append(elStyle);\r\n\t}\r\n\r\n\t/**\r\n\t * Установить как плагин в прилоежнии Vue\r\n\t * Core.state является общим для всех приложений Vue на странице\r\n\t * Core.options является общим для всех приложений Vue на странице\r\n\t * @param app - Vue App\r\n\t * @param {typeof options} options - параметры UI\r\n\t */\r\n\tstatic install(app: any, options: typeof this.options) {\r\n\t\tCore.defineOptions(options);\r\n\r\n\t\tapp.provide('top-core', Core);\r\n\r\n\t\tthis.installDirectives(app);\r\n\t}\r\n\r\n\tstatic installDirectives(app: any) {\r\n\t\tapp.directive('top-tooltip', directiveTooltip);\r\n\t}\r\n\r\n\t/**\r\n\t * Установить конфигурацию UI\r\n\t * @param {typeof options} options\r\n\t */\r\n\tstatic defineOptions(options: typeof this.options) {\r\n\t\tif (options?.widthForMobile) {\r\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\r\n\t\t}\r\n\r\n\t\tif (options?.dateFormat) {\r\n\t\t\tthis.options.dateFormat = options.dateFormat;\r\n\t\t}\r\n\r\n\t\tif (options?.gmt) {\r\n\t\t\tthis.options.gmt = options.gmt;\r\n\t\t}\r\n\r\n\t\tCore.setState();\r\n\t}\r\n\r\n\tstatic setState() {\r\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\r\n\r\n\t\tCore.state.isMobileUA = isMobile();\r\n\t\tCore.state.isRetina = isRetina();\r\n\t\tCore.state.isApp = isApp();\r\n\t\tCore.state.dateFormat = this.options.dateFormat;\r\n\t\tCore.state.gmt = this.options.gmt;\r\n\r\n\t\tCore.setStateByWindowSize();\r\n\r\n\t\t// пересчет значений, зависящих от рамзеров окна\r\n\t\tEvents.addOnReize(Core.onResize);\r\n\r\n\t\tCore.onResize();\r\n\r\n\t\tCore.saveToCookie();\r\n\t}\r\n\r\n\tstatic onResize() {\r\n\t\tCore.setStateByWindowSize();\r\n\r\n\t\t// честный vh\r\n\t\tdocument.documentElement.style.setProperty('--100vh', window.innerHeight + 'px');\r\n\t}\r\n\r\n\tstatic setStateByWindowSize() {\r\n\t\tCore.state.isMobile = !!Core.matchMediaIsMobile?.matches;\r\n\t\tCore.state.isLandscape = (window.innerWidth > window.innerHeight);\r\n\t\tCore.state.isPortrait = !Core.state.isLandscape;\r\n\t\tCore.state.size = (window.innerWidth > window.innerHeight) ? window.innerWidth : window.innerHeight;\r\n\r\n\t\tCore.saveToCookie();\r\n\t}\r\n\r\n\t/**\r\n\t * Сохранить информацию об устройстве в cookie\r\n\t */\r\n\tstatic saveToCookie() {\r\n\t\tconst device = [\r\n\t\t\t1,\r\n\t\t\twindow.innerWidth,\r\n\t\t\twindow.innerHeight,\r\n\t\t\twindow.devicePixelRatio,\r\n\t\t\tNumber(Core.state.isMobile),\r\n\t\t\tNumber(Core.state.isRetina),\r\n\t\t];\r\n\r\n\t\tdocument.cookie = 'device=' + device.join(',') + '; path=/;';\r\n\t}\r\n\r\n}\r\n\r\nexport default Core;","import Core from '@/core/core/core';\r\n\r\n/**\r\n * Получить объект Date из строки\r\n * @param date - строка с датой\r\n */\r\nexport function stringToDate(date: string) {\r\n\tif (date.indexOf('T') === -1) {\r\n\t\tif (date.length == 10) {\r\n\t\t\tdate += ' 00:00:00';\r\n\t\t}\r\n\r\n\t\tdate = date.replace(' ', 'T') + Core.state.gmt;\r\n\t}\r\n\r\n\treturn new Date(date);\r\n}\r\n\r\n/**\r\n * Генерация строки с датой в формате Y-m-d H:i:s или в формате Core.state.dateFormat, если указан useFormat = true\r\n * @param {?number} timestamp\r\n * @param {?boolean} useFormat\r\n * @param {0|1|2|3} time - 0: только дата, 1: дата и часы, 2: дата и часы с минутами, 3: дата и часы с минутами и секундами\r\n */\r\nexport function genDate(timestamp: number | undefined = undefined, useFormat: boolean = true, time: 0 | 1 | 2 | 3 = 0): string {\r\n\tlet date;\r\n\tif (timestamp != undefined) {\r\n\t\tdate = new Date(timestamp);\r\n\t} else {\r\n\t\tdate = new Date();\r\n\t}\r\n\r\n\tconst Y = date.getFullYear();\r\n\tconst m = String(date.getMonth() + 1).padStart(2, '0');\r\n\tconst d = date.getDate().toString().padStart(2, '0');\r\n\r\n\tconst H = date.getHours().toString().padStart(2, '0');\r\n\tconst i = date.getMinutes().toString().padStart(2, '0');\r\n\tconst s = date.getSeconds().toString().padStart(2, '0');\r\n\r\n\tdate = Y + '-' + m + '-' + d;\r\n\r\n\tif (time) date += ' ';\r\n\tif (time >= 1) date += H;\r\n\tif (time >= 2) date += ':' + i;\r\n\tif (time >= 3) date += ':' + s;\r\n\r\n\tif (useFormat) {\r\n\t\tdate = dateFormat(date, time);\r\n\t}\r\n\r\n\treturn date;\r\n}\r\n\r\n/**\r\n * Перевод даты в формат пользователя\r\n * @param {string} date - строка в формате Y-m-d H:i:s\r\n * @param {0|1|2|3} time - 0: только дата, 1: дата и часы, 2: дата и часы с минутами, 3: дата и часы с минутами и секундами\r\n * @param {string} emptyValue - значение, которое надо вернуть, если дата не указана\r\n */\r\nexport function dateFormat(date: string, time: 0 | 1 | 2 | 3 = 2, emptyValue: string = Core.L.Not_date): string {\r\n\tif (!date || date.substring(0, 10) === '0000-00-00') {\r\n\t\tif (emptyValue && emptyValue !== '0000-00-00') {\r\n\t\t\treturn emptyValue;\r\n\t\t}\r\n\t}\r\n\r\n\tconst dateFormat = Core.state.dateFormat.toLowerCase();\r\n\r\n\tlet dateForObj = date.substring(0, 10);\r\n\r\n\tif (dateForObj.length === 7) {\r\n\t\tdateForObj += '-01';\r\n\t}\r\n\r\n\tdateForObj += ' 00:00';\r\n\r\n\t// safari fix\r\n\tdateForObj = dateForObj.replace(/-/g, '/');\r\n\r\n\tconst dateObject = new Date(dateForObj);\r\n\tif (isNaN(Number(dateObject))) {\r\n\t\treturn emptyValue;\r\n\t}\r\n\r\n\tlet result = dateFormat.\r\n\t\treplace('y', String(dateObject.getFullYear()).padStart(2, '0')).\r\n\t\treplace('m', String(dateObject.getMonth() + 1).padStart(2, '0')).\r\n\t\treplace('d', String(dateObject.getDate()).padStart(2, '0'));\r\n\r\n\tif (date.length > 10) {\r\n\t\tswitch (time) {\r\n\t\t\t// часы\r\n\t\t\tcase 1:\r\n\t\t\t\tresult += ' ' + date.substring(11, 13);\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// часы и минуты\r\n\t\t\tcase 2:\r\n\t\t\t\tresult += ' ' + date.substring(11, 16);\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// часы, минуты и секунды\r\n\t\t\tcase 3:\r\n\t\t\t\tresult += ' ' + date.substring(11, 19);\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\n/**\r\n * Перевод даты из формата пользователя в системный формат\r\n * @param {string} date - строка в формате Y-m-d H:i:s\r\n * @param {string} emptyValue - значение, которое надо вернуть, если дата не указана\r\n */\r\nexport function dateUnformat(date: string, emptyValue: string = Core.L.Not_date): string {\r\n\tif (!date) {\r\n\t\treturn emptyValue;\r\n\t}\r\n\r\n\tif (date.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\r\n\t\treturn date;\r\n\t}\r\n\r\n\tconst dateFormat = Core.state.dateFormat.toLowerCase();\r\n\r\n\tconst dateChunks = date.split(/\\W/);\r\n\tconst dateFormatChunks = dateFormat.split(/\\W/);\r\n\r\n\tlet d = '';\r\n\tlet m = '';\r\n\tlet y = '';\r\n\r\n\tdateFormatChunks.forEach((type, index) => {\r\n\t\tswitch (type) {\r\n\t\t\tcase 'd':\r\n\t\t\t\td = dateChunks[index];\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'm':\r\n\t\t\t\tm = dateChunks[index];\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'y':\r\n\t\t\t\ty = dateChunks[index];\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tlet result = y + '-' + m + '-' + d;\r\n\r\n\tif (!result.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\r\n\t\tconsole.info('Неверный формат даты, будет возращена текущая дата, ' + result);\r\n\r\n\t\tresult = genDate((new Date()).getTime(), false).substring(0, 10);\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue';\r\nimport type { Props } from './avatar';\r\nimport { dateFormat } from '@/core/utils/date';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tsize: 64,\r\n});\r\n\r\n// TODO: сделать компонент i18n\r\nconst i18n = {\r\n\tuser: {\r\n\t\tOnline: 'Онлайн',\r\n\t\tLastSeen: 'Заходил(а)',\r\n\t},\r\n};\r\n\r\nconst titleStatus = computed(() => {\r\n\tif (props.isOnline) {\r\n\t\treturn i18n.user.Online;\r\n\t}\r\n\r\n\tif (props.lastActiveTime) {\r\n\t\treturn i18n.user.LastSeen + ': ' + dateFormat(props.lastActiveTime, 2);\r\n\t}\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-avatar\">\r\n\t\t<img\r\n\t\t\tclass=\"top-avatar_image\"\r\n\t\t\t:src=\"image\"\r\n\t\t\t:title=\"props.nickname + (titleStatus ? `\\n${titleStatus}` : '')\"\r\n\t\t\talt=\"\"\r\n\t\t>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"isOnline\"\r\n\t\t\tclass=\"top-avatar_status\"\r\n\t\t\t:title=\"titleStatus\"\r\n\t\t>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-avatar {\r\n\twidth: v-bind(size+ \"px\");\r\n\theight: v-bind(size+ \"px\");\r\n\tdisplay: flex;\r\n\tflex-grow: 0;\r\n\tflex-shrink: 0;\r\n\tposition: relative;\r\n\ttop: 0;\r\n\tleft: 0;\r\n}\r\n\r\n.top-avatar_image {\r\n\tborder-radius: 50%;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n}\r\n\r\n.top-avatar_status {\r\n\tborder-radius: 50%;\r\n\tborder: 2px solid var(--content-background-color);\r\n\tbackground-color: var(--color-green-500);\r\n\twidth: 25%;\r\n\theight: 25%;\r\n\tposition: absolute;\r\n\tright: 0;\r\n\tbottom: 0;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props } from './button';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tcolor: 'blue',\r\n\tstyling: '',\r\n\tsize: 's',\r\n});\r\n\r\nconst tagName = computed(() => props.href ? 'a' : 'button');\r\n\r\nconst type = computed(() => props.isSubmit ? 'submit' : undefined);\r\n</script>\r\n\r\n<template>\r\n\t<component\r\n\t\t:is=\"tagName\"\r\n\t\t:class=\"{\r\n\t\t\t['top-active']: isActive,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t['top-button']: true,\r\n\t\t\t['top-button-progress']: isProgress,\r\n\t\t\t[`top-size_${size}`]: !!size,\r\n\t\t\t[`top-color_${color}`]: true,\r\n\t\t\t[`top-style_${styling}`]: !!styling,\r\n\t\t\t['top-button-withoutText']: !$slots.default,\r\n\t\t}\"\r\n\t\t:name=\"name\"\r\n\t\t:title=\"title\"\r\n\t\t:href=\"href\"\r\n\t\t:type=\"type\"\r\n\t\t:data-top-icon=\"icon || undefined\"\r\n\t\t:data-top-icon2=\"icon2 || undefined\"\r\n\t\t:disabled=\"disabled || undefined\"\r\n\t\t:inProgress=\"isProgress\"\r\n\t>\r\n\t\t<span\r\n\t\t\tv-if=\"$slots.default\"\r\n\t\t\tclass=\"top-ellipsis\"\r\n\t\t>\r\n\t\t\t<!-- @slot Текст в кнопке -->\r\n\t\t\t<slot>\r\n\t\t\t\t{{ !icon ? 'Button' : '' }}\r\n\t\t\t</slot>\r\n\t\t</span>\r\n\r\n\t\t<!-- @slot HTML в кнопке -->\r\n\t\t<slot name=\"html\"></slot>\r\n\t</component>\r\n</template>\r\n\r\n<style module>\r\n@import \"./style/button.css\";\r\n@import \"./style/style-outline.css\";\r\n@import \"./style/style-soft.css\";\r\n@import \"./style/style-transparent.css\";\r\n\r\n.top-button {\r\n\t--top-button-color: var(--color-white);\r\n\t--top-button-background-color: transparent;\r\n\t--top-button-background-color-hover: var(--top-button-background-color);\r\n\t--top-button-background-color-active: var(--top-button-background-color-hover);\r\n\t--top-button-background-color-selected: var(--top-button-background-color-hover);\r\n\t--top-button-box-shadow: none;\r\n\t--top-button-box-shadow-hover: var(--top-shadow-darken-2);\r\n\t--top-button-box-shadow-active: var(--top-shadow-darken-3);\r\n\t--top-button-box-shadow-selected: var(--top-shadow-darken-3);\r\n\t--top-forms-border-width: 0px;\r\n\t--top-icon-width: calc(var(--top-icon-size) + var(--top-forms-padding));\r\n\t--top-icon2-width: calc(var(--top-icon2-size) + var(--top-forms-padding));\r\n}\r\n\r\n.top-button.top-size_l {\r\n\t--top-forms-padding: var(--top-forms-padding_l);\r\n\t--top-forms-base-height: var(--top-forms-base-height_l);\r\n}\r\n\r\n.top-button.top-size_xl {\r\n\t--top-forms-padding: var(--top-forms-padding_xl);\r\n\t--top-forms-base-height: var(--top-forms-base-height_xl);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props, Emits } from './input';\r\nimport { Loadbar } from '@/components/forms/forms';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tsize: 's',\r\n\tcaptionType: '',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst localValue = computed({\r\n\tget() {\r\n\t\treturn props.modelValue;\r\n\t},\r\n\tset(value) {\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n\r\nconst placeholder = computed(() => {\r\n\tif (props.addCleaner && !props.title) {\r\n\t\treturn '';\r\n\t}\r\n\tif (props.captionType !== '') {\r\n\t\treturn '';\r\n\t}\r\n\r\n\treturn props.title;\r\n});\r\n\r\nconst clean = (event: Event) => {\r\n\tif(props.modelValue){\r\n\t\tevent.stopPropagation();\r\n\t}\r\n\r\n\temit('update:modelValue', '');\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t\t['top-input']: true,\r\n\t\t\t['top-size_' + size]: true,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t\t['top-input-' + modificator]: !!modificator,\r\n\t\t\t['top-input-withCleaner']: addCleaner && localValue && localValue !== '0000-00-00',\r\n\t\t\t['top-formsCaptionWrapper']: captionType !== '',\r\n\t\t\t['top-formsCaptionWrapper-always']: captionType === 'top',\r\n\t\t}\"\r\n\t\t:data-top-icon=\"icon\"\r\n\t\t:data-top-icon2=\"icon2\"\r\n\t>\r\n\t\t<Loadbar v-if=\"isLoading\"/>\r\n\r\n\t\t<input\r\n\t\t\ttype=\"text\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-input_input']: true,\r\n\t\t\t\t['top-input_input-' + modificator]: !!modificator,\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-error']: isError,\r\n\t\t\t}\"\r\n\t\t\tautocomplete=\"off_always\"\r\n\t\t\t:name=\"name\"\r\n\t\t\tv-model=\"localValue\"\r\n\t\t\t:title=\"title\"\r\n\t\t\t:placeholder=\"placeholder\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t\t:readonly=\"readonly\"\r\n\t\t\t@keydown.esc=\"(event) => (addCleaner || !!$slots.btn) && clean(event)\"\r\n\t\t\t:=\"$attrs\"\r\n\t\t>\r\n\r\n\t\t<span\r\n\t\t\tv-if=\"addCleaner && localValue && localValue !== '0000-00-00'\"\r\n\t\t\tclass=\"top-input_cleaner\"\r\n\t\t\tdata-top-icon=\"\"\r\n\t\t\t@click.prevent=\"clean\"\r\n\t\t></span>\r\n\r\n\t\t<span\r\n\t\t\tv-if=\"captionType !== ''\"\r\n\t\t\tclass=\"top-formsCaption\"\r\n\t\t>\r\n\t\t\t{{ title }}\r\n\t\t</span>\r\n\r\n\t\t<!-- @slot Слот для вставки произвольного кода в label -->\r\n\t\t<slot></slot>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n.top-input {\r\n\t--top-forms_clear-width: 0px;\r\n\r\n\tborder-radius: var(--top-forms-radius);\r\n\twidth: 180px;\r\n\tposition: relative;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tgap: var(--top-gap-1);\r\n}\r\n\r\n.top-input_input {\r\n\tbackground: var(--top-forms-background-color);\r\n\theight: var(--top-forms-base-height);\r\n\tpadding: 0;\r\n\tpadding-right: calc(max(var(--top-forms-padding), calc(var(--top-icon2-width) + var(--top-forms_clear-width))));\r\n\tpadding-left: calc(max(var(--top-forms-padding), var(--top-icon-width)));\r\n}\r\n\r\n.top-input_input:hover {\r\n\tbackground: var(--top-forms-background-color-hover);\r\n}\r\n\r\n.top-input_input:focus {\r\n\toutline-color: var(--color-theme-75);\r\n\toutline-offset: 0;\r\n}\r\n\r\n/* значки */\r\n.top-input[data-top-icon]:before,\r\n.top-input[data-top-icon2]:after {\r\n\t--top-icon-color: var(--color-text-secondary);\r\n\t--top-icon2-color: var(--color-text-secondary);\r\n\r\n\tposition: absolute;\r\n\tz-index: 3;\r\n}\r\n\r\n.top-input[data-top-icon]:before {\r\n\tleft: 0;\r\n}\r\n\r\n.top-input[data-top-icon2]:after {\r\n\tright: 0;\r\n}\r\n\r\n/* cleaner */\r\n.top-input-withCleaner {\r\n\t--top-forms_clear-width: 24px;\r\n}\r\n\r\n.top-input_cleaner {\r\n\t--top-icon-size: 16px;\r\n\t--top-icon-width: 20px;\r\n\t--top-icon-color: var(--color-text-3);\r\n\r\n\tcursor: pointer;\r\n\tborder-radius: 50%;\r\n\twidth: 20px;\r\n\theight: 16px;\r\n\tposition: absolute;\r\n\tright: calc(var(--top-forms-border-width) + max(var(--top-icon2-width), var(--top-forms-padding) / 2));\r\n\tz-index: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.top-input_cleaner:hover {\r\n\t--top-icon-color: var(--color-text-2);\r\n}\r\n\r\n/* TODO: перенести в inputsRange */\r\n.top-input_input {\r\n\twidth: 50%;\r\n\tflex-grow: 1;\r\n}\r\n\r\n/* top-loadbar */\r\n.top-input .top-loadbar{\r\n\tborder-radius: var(--top-forms-radius) 0 0 0;\r\n}\r\n</style>","<script lang=\"ts\">\r\nconst useNativeDatepicker = !!document.documentElement.ontouchstart && !!document.createElement('input').showPicker;\r\n\r\nlet onInputLazy = (_e: any) => { };\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, onUnmounted } from 'vue';\r\nimport { dateFormat, dateUnformat } from '@/core/utils/date';\r\nimport type { Props, Emits } from './inputDate';\r\nimport { Input } from '@/components/forms/forms';\r\nimport Core from '@/core/core/core';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\ticon2: '',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nonUnmounted(() => {\r\n\tif ($el) {\r\n\t\t$el.datepicker('destroy');\r\n\t}\r\n});\r\n\r\nconst el = ref();\r\nlet $el: any;\r\n\r\nconst localValue = computed({\r\n\tget() {\r\n\t\treturn dateFormat(props.modelValue, 2, '0000-00-00');\r\n\t},\r\n\r\n\tset(value) {\r\n\t\tvalue = dateUnformat(value, '0000-00-00');\r\n\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n\r\nlet oninput = (e: any) => {\r\n\tonInputLazy(e);\r\n};\r\n\r\nlet onchange = (e: any) => {\r\n\tconst date = dateUnformat(e.target.value);\r\n\tconst dateFormatted = dateFormat(date);\r\n\r\n\tif (!dateFormatted || dateFormatted === Core.L.Not_date || e.target.value !== dateFormatted) {\r\n\t\te.target.value = localValue.value;\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tlocalValue.value = e.target.value;\r\n};\r\n\r\n/**\r\n * Инициализпация функций выбора дат\r\n *\r\n * Для не нативного datepicker\r\n */\r\nasync function init(e: any) {\r\n\tconst datepicker = await import('./datepicker');\r\n\r\n\t// формат ввода\r\n\tonInputLazy = datepicker.oninput;\r\n\r\n\t// datepicker\r\n\t$el = datepicker.connectDatepicker(e.target, {\r\n\t\tonSelect: () => onchange(e),\r\n\t});\r\n\r\n\tif ($el) {\r\n\t\t$el.datepicker('show');\r\n\t}\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<Input\r\n\t\tv-if=\"useNativeDatepicker\"\r\n\t\t:=\"$props\"\r\n\t\t:modelValue=\"localValue\"\r\n\t\treadonly\r\n\t\t@click=\"el.showPicker()\"\r\n\t>\r\n\t\t<input\r\n\t\t\tref=\"el\"\r\n\t\t\ttype=\"date\"\r\n\t\t\tclass=\"top-input_input-date\"\r\n\t\t\t:modelValue=\"modelValue\"\r\n\t\t\t@change=\"(e: any) => localValue = e.target.value\"\r\n\t\t\ttabindex=\"-1\"\r\n\t\t/>\r\n\t</Input>\r\n\r\n\t<Input\r\n\t\tv-else\r\n\t\t:=\"$props\"\r\n\t\t:modelValue=\"localValue\"\r\n\t\t@update:modelValue=\"(newValue) => (newValue === '') ? localValue = '' : ''\"\r\n\t\t@input.date=\"oninput\"\r\n\t\t@focus.once.date=\"init\"\r\n\t\t@change.date=\"onchange\"\r\n\t\tmodificator=\"datepicker\"\r\n\t/>\r\n</template>\r\n\r\n<style module>\r\n.top-input-datepicker {\r\n\twidth: calc(105px + var(--top-icon-width) + var(--top-icon2-width));\r\n}\r\n\r\n.top-input_input-date {\r\n\topacity: 0;\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\tleft: 0;\r\n\tz-index: -1;\r\n}\r\n\r\n.top-input_input-date::-webkit-inner-spin-button {\r\n\tdisplay: none;\r\n}\r\n\r\n.top-input_input-date::-webkit-calendar-picker-indicator {\r\n\topacity: 0;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props, Emits } from './radio';\r\nimport ControlLabel from '../controlLabel/controlLabel.vue';\r\n\r\nconst props = defineProps<Props>();\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst localValue = computed({\r\n\tget() {\r\n\t\treturn props.modelValue;\r\n\t},\r\n\tset(value) {\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t\t['top-forms-optionWrapper']: true,\r\n\t\t\t['top-radio']: true,\r\n\t\t\t['top-radio_' + name]: name !== '',\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t\t['top-error']: isError && !disabled,\r\n\t\t}\"\r\n\t>\r\n\t\t<input\r\n\t\t\ttype=\"radio\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-forms-option']: true,\r\n\t\t\t\t['top-radio_input']: true,\r\n\t\t\t\t['top-error']: isError && !disabled,\r\n\t\t\t}\"\r\n\t\t\tv-model=\"localValue\"\r\n\t\t\t:name=\"name\"\r\n\t\t\t:value=\"value\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\r\n\t\t<ControlLabel\r\n\t\t\tv-if=\"$slots.default\"\r\n\t\t\t:description=\"description\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\t\t\t<!-- @slot Слот с заголовком -->\r\n\t\t\t<slot></slot>\r\n\t\t</ControlLabel>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n:root {\r\n\t--top-radio-background-color: var(--content-background-color);\r\n\t--top-radio-background-color-hover: var(--top-radio-background-color);\r\n\t--top-radio-background-color-active: var(--top-radio-background-color);\r\n}\r\n\r\n.top-radio {\r\n\tcursor: pointer;\r\n}\r\n\r\n.top-radio_input {\r\n\tborder-radius: 50%;\r\n\tbackground: var(--content-background-color);\r\n\tborder: 1px solid var(--top-forms-border-color);\r\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\r\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\r\n}\r\n\r\n.top-radio_input:hover {\r\n\tborder-color: var(--top-forms-option-color);\r\n\tbackground: var(--color-theme-50)\r\n}\r\n\r\n.top-radio_input:checked {\r\n\tborder-color: var(--top-forms-option-color);\r\n\tborder-width: 5px;\r\n}\r\n\r\n.top-radio_input:checked:hover {\r\n\tborder-color: var(--top-forms-option-color-hover);\r\n}\r\n\r\n/* disabled */\r\n.top-radio_input:disabled {\r\n\tborder-color: var(--color-line-1-opacity);\r\n\tbackground: var(--color-theme-50);\r\n}\r\n\r\n/* disabled selected */\r\n.top-radio_input:checked:disabled {\r\n\tborder-color: var(--color-theme-400);\r\n}\r\n\r\n/* isError */\r\n.top-radio_input.top-error {\r\n\tborder-color: var(--color-negative);\r\n}\r\n\r\n.top-radio_input.top-error:hover {\r\n\tborder-color: var(--color-negative-2);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props, Emits } from './switcher';\r\nimport ControlLabel from '../controlLabel/controlLabel.vue';\r\n\r\nconst props = defineProps<Props>();\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst localValue = computed({\r\n\tget() {\r\n\t\treturn props.modelValue;\r\n\t},\r\n\tset(value) {\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t['top-forms-optionWrapper']: true,\r\n\t\t['top-checkboxSwitcher']: true,\r\n\t\t['top-disabled']: disabled,\r\n\t\t['top-error']: isError && !disabled,\r\n\t}\"\r\n\t>\r\n\t\t<input\r\n\t\t\ttype=\"checkbox\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-forms-option']: true,\r\n\t\t\t\t['top-checkboxSwitcher_input']: true,\r\n\t\t\t\t['top-error']: isError && !disabled,\r\n\t\t\t}\"\r\n\t\t\tv-model=\"localValue\"\r\n\t\t\t:name=\"name\"\r\n\t\t\t:value=\"value\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\r\n\t\t<ControlLabel\r\n\t\t\tv-if=\"$slots.default\"\r\n\t\t\t:description=\"description\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\t\t\t<!-- @slot Слот с заголовком -->\r\n\t\t\t<slot></slot>\r\n\t\t</ControlLabel>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n.top-checkboxSwitcher {\r\n\tcursor: pointer;\r\n\tdisplay: inline-flex;\r\n\tgap: 4px;\r\n}\r\n\r\n.top-checkboxSwitcher_input {\r\n\tborder-radius: 9px;\r\n\tborder: none;\r\n\tbackground: var(--color-theme-100);\r\n\twidth: 36px;\r\n\theight: 18px;\r\n\tposition: relative;\r\n}\r\n\r\n.top-checkboxSwitcher_input:before {\r\n\tcontent: '';\r\n\tborder-radius: 50%;\r\n\tbackground: var(--color-white);\r\n\twidth: 12px;\r\n\theight: 12px;\r\n\tmargin: 3px;\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\r\n\ttransition: left 0.1s;\r\n}\r\n\r\n.top-checkboxSwitcher_input:hover {\r\n\tbackground: var(--color-theme-150);\r\n}\r\n\r\n/* checked */\r\n.top-checkboxSwitcher_input:checked {\r\n\tbackground: var(--top-forms-option-color);\r\n}\r\n\r\n.top-checkboxSwitcher_input:checked:hover {\r\n\tbackground: var(--top-forms-option-color-hover);\r\n}\r\n\r\n.top-checkboxSwitcher_input:checked:before {\r\n\tleft: 50%;\r\n}\r\n\r\n/* disabled */\r\n.top-checkboxSwitcher_input:disabled {\r\n\tbackground: var(--color-theme-400);\r\n}\r\n\r\n/* isError */\r\n.top-checkboxSwitcher_input.top-error {\r\n\tbackground: var(--color-negative);\r\n}\r\n\r\n.top-checkboxSwitcher_input.top-error:hover {\r\n\tbackground: var(--color-negative-2);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport Hint from '@/components/forms/hint/hint.vue';\r\nimport type { Props, Emits } from './textarea';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\trows: 5,\r\n\tminHeight: 120,\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst value = computed({\r\n\tget () {\r\n\t\treturn props.modelValue;\r\n\t},\r\n\tset (value) {\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t\t['top-textarea']: true,\r\n\t\t\t['top-textarea-' + name]: name,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t}\"\r\n\t>\r\n\t\t<textarea\r\n\t\t\ttype=\"text\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-textarea_textarea']: true,\r\n\t\t\t\t['top-textarea_textarea-expandable']: expandable,\r\n\t\t\t\t['top-error']: isError,\r\n\t\t\t}\"\r\n\t\t\tautocomplete=\"off_always\"\r\n\t\t\t:name=\"name\"\r\n\t\t\t:placeholder=\"placeholder\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t\t:readonly=\"readonly\"\r\n\t\t\t:rows=\"!expandable ? rows : undefined\"\r\n\t\t\t:=\"$attrs\"\r\n\t\t\tv-model=\"value\"\r\n\t\t/>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"expandable\"\r\n\t\t\tclass=\"top-textarea_pseudoContent\"\r\n\t\t>\r\n\t\t\t{{ value + ' ' }}\r\n\t\t</div>\r\n\r\n\t\t<Hint\r\n\t\t\tv-if=\"hint\"\r\n\t\t\tclass=\"top-textarea_hint\"\r\n\t\t\t:hint=\"hint\"\r\n\t\t\tv-top-tooltip\r\n\t\t/>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n.top-textarea {\r\n\twidth: 180px;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tposition: relative;\r\n}\r\n\r\n.top-textarea_textarea {\r\n\tbackground: var(--top-forms-background-color);\r\n\twidth: 100%;\r\n\tpadding: var(--top-forms-padding);\r\n\tresize: none;\r\n}\r\n\r\n.top-textarea_textarea:hover {\r\n\tbackground: var(--top-forms-background-color-hover);\r\n}\r\n\r\n.top-textarea_textarea:focus {\r\n\toutline-color: var(--color-theme-75);\r\n\toutline-offset: 0px;\r\n}\r\n\r\n.top-textarea_textarea.top-textarea_textarea-expandable {\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\toverflow: hidden;\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tleft: 0;\r\n}\r\n\r\n.top-textarea_pseudoContent {\r\n\tbox-sizing: border-box;\r\n\tmin-height: v-bind(minHeight + 'px');\r\n\tpadding: var(--top-forms-padding);\r\n\tfont-size: 14px;\r\n\twhite-space: pre-wrap;\r\n\toverflow-wrap: anywhere;\r\n\tpointer-events: none;\r\n\topacity: 0;\r\n\tz-index: -1;\r\n}\r\n\r\n.top-textarea_hint {\r\n\tposition: absolute;\r\n\ttop: 2px;\r\n\tright: 2px;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed, watch } from 'vue';\r\nimport type { ComputedRef } from 'vue';\r\nimport type { Props, Emits, Option, LocalOptions } from './select';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tsize: 's',\r\n});\r\n\r\nconst model = defineModel<Props['modelValue']>({\r\n\trequired: true,\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\n/**\r\n * Словарь с учетом вложенных Props['options']\r\n *\r\n * Этот словарь должен использовать в логике компонента, чтобы она не зависила от типа входных данных\r\n */\r\nconst optionByValue: ComputedRef<LocalOptions> = computed(() => {\r\n\t/**\r\n\t * Преобразование:\r\n\t * - Array => Map\r\n\t * - string => Option\r\n\t */\r\n\tconst res = new Map();\r\n\r\n\tprops.options.forEach((option, index) => {\r\n\t\t// базовый Options со строками\r\n\t\tif (typeof option === 'string') option = genOption(index, option);\r\n\r\n\t\tif (option.children) {\r\n\t\t\t// вложенные элементы Option для <optgroup>\r\n\t\t\tconst children = new Map();\r\n\r\n\t\t\toption.children.forEach((subOption, subIndex) => {\r\n\t\t\t\t// базовый Options со строками\r\n\t\t\t\tif (typeof subOption === 'string') subOption = genOption(subIndex, subOption);\r\n\r\n\t\t\t\tchildren.set(subOption.value, subOption);\r\n\t\t\t});\r\n\r\n\t\t\toption = { ...option };\r\n\t\t\toption.children = children;\r\n\r\n\t\t\tres.set(option.value, option);\r\n\t\t} else {\r\n\t\t\t// самостоятельный элемент Option\r\n\t\t\tres.set(option.value, option);\r\n\t\t}\r\n\t});\r\n\r\n\treturn res;\r\n});\r\n\r\n/**\r\n * Словарь со всеми не disabled значениями Props['options'] в порядке следования с учетом вложенных Props['options']\r\n */\r\nconst flatOptionByValue: ComputedRef<Map<Props['modelValue'], Option>> = computed(() => {\r\n\tconst res = new Map();\r\n\r\n\toptionByValue.value.forEach(option => {\r\n\t\tif (option.disabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// вложенные элементы Option для <optgroup>\r\n\t\tif (option.children) {\r\n\t\t\toption.children.forEach(subOption => {\r\n\t\t\t\tif (subOption.disabled) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tres.set(subOption.value, subOption);\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tres.set(option.value, option);\r\n\t});\r\n\r\n\treturn res;\r\n});\r\n\r\n/**\r\n * Генерация Объекта option из строки\r\n *\r\n * Для базового способа указания props\r\n */\r\nconst genOption = (value: Props['modelValue'], title: string): Option => {\r\n\treturn {\r\n\t\tvalue,\r\n\t\ttitle,\r\n\t};\r\n};\r\n\r\n/**\r\n * Логика для обртаной своместимости:\r\n * - null - заменить на первое доступное значение\r\n * - undefined - заменить на первое доступное значение\r\n */\r\nwatch([\r\n\t() => props.modelValue,\r\n\tflatOptionByValue,\r\n], () => {\r\n\tif ((model.value === null || model.value === undefined) && flatOptionByValue.value.size) {\r\n\t\tconsole.warn('Пожалуйста, не передавайте в компонент Select значения null и undefined');\r\n\r\n\t\tmodel.value = flatOptionByValue.value.keys().next().value;\r\n\t}\r\n}, { immediate: true });\r\n\r\n/**\r\n * Иконка выбранного option\r\n */\r\nconst optionIcon = computed(() => {\r\n\treturn flatOptionByValue.value.get(model.value)?.icon;\r\n});\r\n\r\n/**\r\n * Выбрать следующее доступное значение\r\n */\r\nconst selectNextValue = () => {\r\n\tconst listEnabledValues = [...flatOptionByValue.value.keys()];\r\n\tconst currentIndex = listEnabledValues.indexOf(model.value);\r\n\tconst nextIndex = (currentIndex + 1) % listEnabledValues.length;\r\n\r\n\tmodel.value = listEnabledValues[nextIndex];\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t\t['top-select']:true,\r\n\t\t\t['top-select-' + name]:name,\r\n\t\t\t['top-size_' + size]: true,\r\n\t\t\t['top-formsCaptionWrapper']: !!title,\r\n\t\t\t['top-select-error']: isError,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t}\"\r\n\t\t:data-value=\"model\"\r\n\t\t:data-top-icon=\"icon\"\r\n\t\t:data-top-icon2=\"optionIcon\"\r\n\t>\r\n\t\t<select\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-select_select']: true,\r\n\t\t\t\t['top-select_arrow']: true,\r\n\t\t\t\t['top-error']: isError,\r\n\t\t\t}\"\r\n\t\t\t:name=\"name\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t\tv-model=\"model\"\r\n\t\t>\r\n\t\t\t<template v-for=\"[value, option] of optionByValue\">\r\n\t\t\t\t<optgroup\r\n\t\t\t\t\tv-if=\"option.children\"\r\n\t\t\t\t\t:key=\"'group_' + value\"\r\n\t\t\t\t\t:label=\"option.title\"\r\n\t\t\t\t\t:disabled=\"option.disabled\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<option\r\n\t\t\t\t\t\tv-for=\"[subValue, subOption] of option.children\"\r\n\t\t\t\t\t\t:key=\"subValue\"\r\n\t\t\t\t\t\t:value=\"subValue\"\r\n\t\t\t\t\t\t:selected=\"subValue === model\"\r\n\t\t\t\t\t\t:disabled=\"subOption.disabled\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ subOption.title }}\r\n\t\t\t\t\t</option>\r\n\t\t\t\t</optgroup>\r\n\r\n\t\t\t\t<option\r\n\t\t\t\t\tv-else\r\n\t\t\t\t\t:key=\"value ?? undefined\"\r\n\t\t\t\t\t:value=\"value\"\r\n\t\t\t\t\t:selected=\"value === model\"\r\n\t\t\t\t\t:disabled=\"option.disabled\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ option.title }}\r\n\t\t\t\t</option>\r\n\t\t\t</template>\r\n\t\t</select>\r\n\r\n\t\t<span\r\n\t\t\tv-if=\"addChanger && flatOptionByValue.size && !disabled\"\r\n\t\t\tclass=\"top-changer\"\r\n\t\t\t@click=\"selectNextValue\"\r\n\t\t></span>\r\n\r\n\t\t<span\r\n\t\t\tv-if=\"title\"\r\n\t\t\tclass=\"top-formsCaption\"\r\n\t\t>\r\n\t\t\t{{ title }}\r\n\t\t</span>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n.top-select {\r\n\t--top-icon-color: var(--color-text-3);\r\n\t--top-icon2-color: var(--color-text-2);\r\n\r\n\talign-items: center;\r\n\twidth: 180px;\r\n\tmax-width: 100%;\r\n\tdisplay: inline-flex;\r\n}\r\n\r\n.top-select-error {\r\n\t--top-icon-color: var(--color-negative);\r\n\t--top-icon2-color: var(--color-negative);\r\n}\r\n\r\n.top-select_select {\r\n\tbackground-color: var(--top-forms-background-color);\r\n\r\n\t/* для select вместо padding нужно использовать text-indent */\r\n\tpadding-left: var(--top-forms-padding);\r\n\r\n\t/* если есть значки, добавить отступ на их ширину с учетом уже добавленного padding */\r\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))));\r\n\r\n\twidth: 100%;\r\n\theight: var(--top-forms-base-height);\r\n\ttext-overflow: ellipsis;\r\n\twhite-space: nowrap;\r\n\tflex-grow: 1;\r\n\toverflow: hidden;\r\n}\r\n\r\n.top-select_select:focus {\r\n\toutline-color: var(--color-theme-75);\r\n\toutline-offset: 0;\r\n}\r\n\r\n.top-select_select:disabled {\r\n\tbackground: var(--color-theme-50);\r\n}\r\n\r\n.top-select optgroup {\r\n\tcolor: var(--color-text-1);\r\n\tfont-style: normal;\r\n}\r\n\r\n.top-select option {\r\n\tbackground: var(--content-background-color);\r\n\tcolor: var(--color-text-1);\r\n}\r\n\r\n/* хром не мерняет цвет для optgroup option, стили оставлены по умолчанию */\r\n/*\r\n.top-select optgroup:disabled,\r\n.top-select optgroup option,\r\n.top-select option:disabled {\r\n\r\n}\r\n*/\r\n\r\n/* https://bugzilla.mozilla.org/show_bug.cgi?id=1743066 */\r\n@-moz-document url-prefix() {\r\n\t.top-select_select {\r\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);\r\n\t}\r\n}\r\n\r\n@media only screen and (min-width: 900px) {\r\n\t/* changer */\r\n\t.top-changer {\r\n\t\tcursor: pointer;\r\n\t\tborder-radius: 100%;\r\n\t\twidth: 0;\r\n\t\ttransform: translateX(-44px);\r\n\t\tcolor: var(--color-text-secondary-2);\r\n\t\tfont-size: 16px;\r\n\t\tline-height: 1;\r\n\t\tdisplay: none;\r\n\t\tz-index: 2;\r\n\t\torder: 4;\r\n\t}\r\n\r\n\t.top-changer:hover {\r\n\t\tcolor: var(--color-primary);\r\n\t}\r\n\r\n\t.top-changer:after {\r\n\t\tcontent: \"\";\r\n\t\tbackground-color: var(--top-forms-background-color);\r\n\t\tfont-family: \"Topvisor-2\";\r\n\t}\r\n\r\n\t*:hover > .top-changer {\r\n\t\tdisplay: block;\r\n\t}\r\n}\r\n</style>","<template>\r\n\t<div class=\"top-loadbar\"></div>\r\n</template>\r\n\r\n<style module>\r\n:root {\r\n\t--top-loadbar-duration: 10s;\r\n\t--top-loadbar-color: var(--color-blue-500);\r\n}\r\n\r\n.top-loadbar {\r\n\tbackground: var(--top-loadbar-color);\r\n\twidth: 0;\r\n\theight: 4px;\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\r\n\tanimation: top-loadbar var(--top-loadbar-duration) forwards;\r\n}\r\n\r\n@keyframes top-loadbar {\r\n\tfrom {\r\n\t\t/* fix render pixels */\r\n\t\twidth: 4px;\r\n\t}\r\n\t4% {\r\n\t\twidth: calc(4%);\r\n\t}\r\n\t5% {\r\n\t\twidth: 5%;\r\n\t}\r\n\tto {\r\n\t\twidth: 95%;\r\n\t}\r\n}\r\n</style>"],"names":["isRetina","isMobile","isApp","isMacOS","isSafari","isChrome","isSafari2","getCommandKeyLabel","Page","onResizeTimer","onResizeListeners","windowSize","listener","callback","e","onResize","Events","addOnReize","removeOnResize","options","_a","state","_b","$","el","Core","tvTooltipGenOptions","binding","vnode","tooltip","instance","_binding","_vnode","_window","vue","media","type","elStyle","style","app","options2","device","date","genDate","timestamp","useFormat","time","Y","m","d","H","i","s","dateFormat","emptyValue","dateForObj","result","dateFormat2","dateObject","y","dateChunks","index","props","__props","titleStatus","i18n","tagName","emit","__emit","localValue","value","placeholder","clean","event","onInputLazy","_e","$el","oninput","onchange","dateFormatted","init","datepicker","resolve","reject","require","value2","optionByValue","res","option","children","subOption","flatOptionByValue","genOption","title","model","optionIcon","listEnabledValues","_sfc_render","_ctx","_cache"],"mappings":"kJAAO,SAAAA,GAAA,8DAKA,SAAAC,GAAA,+FAKA,SAAAC,GAAA,CACN,OAAA,UAAA,UAAA,QAAA,cAAA,GAAA,GAIM,SAAAC,GAAA,CACN,OAAA,UAAA,UAAA,QAAA,UAAA,IAAA,GAIM,SAAAC,GAAA,6FAIN,OAAAC,GAAAC,YAWM,SAAAC,GAAA,sBAMP,CCzCA,MAAAC,CAAA,CAEA,aCAA,IAAAC,EAOA,MAAAC,EAAA,IAAA,IAGAC,EAAA,CAAmB,MAAA,OAAA,WACJ,OAAA,OAAA,WAEf,yCAcCD,EAAA,OAAAE,CAAA,gBAIA,aAAAH,CAAA,EAEAA,EAAA,WAAA,UAAA,sFAGwC,EAGvCE,EAAA,MAAA,OAAA,WACAA,EAAA,OAAA,OAAA,YAEAD,EAAA,QAAAG,GAAAA,EAAAC,CAAA,CAAA,MAIF,OAAA,iBAAA,SAAAC,CAAA,EAEA,MAAAC,EAAA,CAAe,WAAAC,EACd,eAAAC,GC/CDC,EAAA,uCAEa,KAAAC,EAAA,IAAA,KAAA,EAAA,SAAA,EAAA,MAAA,UAAA,IAAA,YAAAA,EAAA,ICHbC,EAAA,uGAkCa,KAAAC,EAAA,IAAA,KAAA,EAAA,SAAA,EAAA,MAAA,UAAA,IAAA,YAAAA,EAAA,IClCbC,EAAAC,GAAA,+DAEE,QAAA,KAAA,0EAAA,EAEA,OAGD,OAAAC,EAAA,EAAAD,CAAA,CACD,EAEAE,EAAA,CAAAC,EAAAC,IAAA,+EAICT,EAAA,QAAA,OAAAA,EAAA,OAAA,EAAA,QAAA,cAAA,MAAA,gDAIK,GAIN,EAEAU,EAAA,CAAgB,QAAAL,EAAAG,EAAAC,EAAA,QAEdR,EAAAG,EAAAC,CAAA,IAAA,MAAAJ,EAAA,QAAAM,EAAAC,EAAAC,CAAA,0CAQAE,GAAAV,EAAAG,EAAAC,CAAA,IAAA,YAAAJ,EAAA,QAAA,wCAMa,GAAAD,CACT,IAEL,UAAAK,EAAAO,EAAAC,EAAA,8CCjCMC,EAPN,OAAA,OAAA,cCGD,MAAAR,CAAA,CAAW,OAAA,EAAAS,EAAA,SAAA,oBAMC,CAAA,yBAGoB,OAAA,KAAA1B,EAEjB,OAAA,QAAAW,4DAMP,OAAA,EAAAc,EAAA,6BAYN,IAAAE,EAAA,MAEAC,IAAA,0DAIAA,IAAA,mGAKAC,EAAA,UAAAC,EACAD,EAAA,MAAAF,0BAGD,OAAA,QAAAI,EAAAC,EAAA,CAUCf,EAAA,cAAAe,CAAA,0BAIA,KAAA,kBAAAD,CAAA,EACD,OAAA,kBAAAA,EAAA,8BAIA,OAAA,cAAAC,EAAA,CAOCA,GAAA,MAAAA,EAAA,+DAIAA,GAAA,MAAAA,EAAA,mDAIAA,GAAA,MAAAA,EAAA,8BAIAf,EAAA,SAAA,+OAYAA,EAAA,qBAAA,2BAKAA,EAAA,SAAA,EAEAA,EAAA,aAAA,oBAIAA,EAAA,qBAAA,EAGA,SAAA,gBAAA,MAAA,YAAA,UAAA,OAAA,YAAA,IAAA,sCAIAA,EAAA,MAAA,SAAA,CAAA,GAAAL,EAAAK,EAAA,qBAAA,MAAAL,EAAA,SACAK,EAAA,MAAA,YAAA,OAAA,WAAA,OAAA,YACAA,EAAA,MAAA,WAAA,CAAAA,EAAA,MAAA,mGAGAA,EAAA,aAAA,iCAOe,+DAIP,OAAAA,EAAA,MAAA,QAAA,EACmB,OAAAA,EAAA,MAAA,QAAA,CACA,EAG3B,SAAA,OAAA,UAAAgB,EAAA,KAAA,GAAA,EAAA,YAGF,4CCzIEC,EAAA,QAAA,qBAIAA,EAAAA,EAAA,QAAA,IAAA,GAAA,EAAAjB,EAAA,MAAA,KAGD,IAAA,KAAAiB,CAAA,EASM,SAAAC,EAAAC,EAAA,OAAAC,EAAA,GAAAC,EAAA,EAAA,OAENF,GAAA,KACCF,EAAA,IAAA,KAAAE,CAAA,EAEAF,EAAA,IAAA,KAGD,MAAAK,EAAAL,EAAA,YAAA,EACAM,EAAA,OAAAN,EAAA,SAAA,EAAA,CAAA,EAAA,SAAA,EAAA,GAAA,EACAO,EAAAP,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EAEAQ,EAAAR,EAAA,SAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EACAS,EAAAT,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,EACAU,EAAAV,EAAA,WAAA,EAAA,SAAA,EAAA,SAAA,EAAA,GAAA,yBAIAI,gCAEeJ,GAAA,IAAAS,UACAT,GAAA,IAAAU,mBAeT,SAAAC,EAAAX,EAAAI,EAAA,EAAAQ,EAAA7B,EAAA,EAAA,SAAA,CACN,IAAA,CAAAiB,GAAAA,EAAA,UAAA,EAAA,EAAA,IAAA,eACCY,GAAAA,IAAA,uFASDC,EAAA,SAAA,iGAcA,IAAAC,EAAAC,EAAA,QAAA,IAAA,OAAAC,EAAA,YAAA,CAAA,EAAA,SAAA,EAAA,GAAA,CAAA,EAAA,QAAA,IAAA,OAAAA,EAAA,SAAA,EAAA,CAAA,EAAA,SAAA,EAAA,GAAA,CAAA,EAAA,QAAA,IAAA,OAAAA,EAAA,QAAA,CAAA,EAAA,SAAA,EAAA,GAAA,CAAA,EAKA,GAAAhB,EAAA,OAAA,GACC,OAAAI,EAAA,CAAc,IAAA,GAGZU,GAAA,IAAAd,EAAA,UAAA,GAAA,EAAA,EAEA,MAAA,IAAA,GAIAc,GAAA,IAAAd,EAAA,UAAA,GAAA,EAAA,EAEA,MAAA,IAAA,GAIAc,GAAA,IAAAd,EAAA,UAAA,GAAA,EAAA,EAEA,2DAiBH,GAAAA,EAAA,MAAA,oBAAA,oFASA,IAAAO,EAAA,GACAD,EAAA,GACAW,EAAA,qBAGC,OAAAvB,EAAA,CAAc,IAAA,IAEZa,EAAAW,EAAAC,CAAA,EAEA,MAAA,IAAA,IAEAb,EAAAY,EAAAC,CAAA,EAEA,MAAA,IAAA,IAEAF,EAAAC,EAAAC,CAAA,EAEA,MACF,CAAA,EAGD,IAAAL,EAAAG,EAAA,IAAAX,EAAA,IAAAC,+JASD,+OC/JA,MAAAa,EAAAC,KAKa,KAAA,uCAIZ,EAGDC,EAAA9B,EAAA,SAAA,IAAA,CACC,GAAA4B,EAAA,SACC,OAAAG,EAAA,KAAA,OAGD,GAAAH,EAAA,eACC,OAAAG,EAAA,KAAA,SAAA,KAAAZ,EAAAS,EAAA,eAAA,CAAA,CACD,CAAA;mrBCpBD,MAAAA,EAAAC,EAMAG,EAAAhC,EAAA,SAAA,IAAA4B,EAAA,KAAA,IAAA,QAAA,EAEA1B,EAAAF,EAAA,SAAA,IAAA4B,EAAA,SAAA,SAAA,MAAA,69ICHA,MAAAA,EAAAC,EAKAI,EAAAC,EAEAC,EAAAnC,EAAA,SAAA,CAA4B,KAAA,CAE1B,OAAA4B,EAAA,mBAGAK,EAAA,oBAAAG,CAAA,EACD,CAAA,EAGDC,EAAArC,EAAA,SAAA,4BAIC4B,EAAA,cAAA,MAIAA,EAAA,KAAa,EAGdU,EAAAC,GAAA,CACCX,EAAA,YACCW,EAAA,gBAAA,EAGDN,EAAA,oBAAA,EAAA,CAA4B,qqDCtC7B,IAAAO,EAAAC,GAAA,CAAiC,oUAUjC,MAAAb,EAAAC,EAIAI,EAAAC,wBAIEQ,EAAA,WAAA,SAAA,CACD,CAAA,EAGD,MAAApD,EAAAU,EAAA,IAAA,QAGA,MAAAmC,EAAAnC,EAAA,SAAA,CAA4B,KAAA,mEAQ1BiC,EAAA,oBAAAG,CAAA,EACD,CAAA,EAGD,IAAAO,EAAA/D,GAAA,CACC4D,EAAA5D,CAAA,CAAa,EAGdgE,EAAAhE,GAAA,2BAECiE,EAAA1B,EAAAX,CAAA,EAEA,GAAA,CAAAqC,GAAAA,IAAAtD,EAAA,EAAA,UAAAX,EAAA,OAAA,QAAAiE,EAAA,wBAGC,6BAG2B,EAQ7B,eAAAC,EAAAlE,EAAA,CACC,MAAAmE,EAAA,MAAA,IAAA,QAAA,CAAAC,EAAAC,IAAAC,EAAA,CAAA,2BAAA,EAAAF,EAAAC,CAAA,CAAA,EAGAT,EAAAO,EAAA,wCAG6C,SAAA,IAAAH,EAAAhE,CAAA,CAClB,CAAA,KAI1B8D,EAAA,WAAA,MAAA,q6CCrEF,MAAAd,EAAAC,EACAI,EAAAC,EAEAC,EAAAnC,EAAA,SAAA,CAA4B,KAAA,CAE1B,OAAA4B,EAAA,mBAGAK,EAAA,oBAAAG,CAAA,EACD,CAAA,+nCCTD,MAAAR,EAAAC,EACAI,EAAAC,EAEAC,EAAAnC,EAAA,SAAA,CAA4B,KAAA,CAE1B,OAAA4B,EAAA,mBAGAK,EAAA,oBAAAG,CAAA,EACD,CAAA,42CCLD,MAAAR,EAAAC,EAKAI,EAAAC,EAEAE,EAAApC,EAAA,SAAA,CAAuB,KAAA,CAErB,OAAA4B,EAAA,mBAGAK,EAAA,oBAAAkB,CAAA,EACD,CAAA,+tDCjBD,MAAAvB,EAAAC,+BAeAuB,EAAApD,EAAA,SAAA,IAAA,CAMC,MAAAqD,EAAA,IAAA,qCAMC,GAFA,OAAAC,GAAA,qBAEAA,EAAA,SAAA,CAEC,MAAAC,EAAA,IAAA,+BAIC,OAAAC,GAAA,qCAEuC,CAAA,EAGxCF,EAAA,CAAA,GAAAA,CAAA,EACAA,EAAA,SAAAC,kBAE4B,sBAI7B,CAAA,GAGM,CAAA,EAMRE,EAAAzD,EAAA,SAAA,IAAA,CACC,MAAAqD,EAAA,IAAA,+BAGC,GAAA,CAAAC,EAAA,SAKA,IAAAA,EAAA,SAAA,wBAEEE,EAAA,0BAIkC,CAAA,EAGnC,wBAG2B,CAAA,GAGtB,CAAA,EAQRE,EAAA,CAAAtB,EAAAuB,KACC,CAAO,MAAAvB,EACN,MAAAuB,CACA,GASF3D,EAAA,MAAA,kBACayD,CACZ,EAAA,IAAA,oDAGC,QAAA,KAAA,yEAAA,EAEAG,EAAA,MAAAH,EAAA,MAAA,KAAA,EAAA,KAAA,EAAA,MACD,EAAA,CAAA,UAAA,EAAA,CAAA,EAMD,MAAAI,EAAA7D,EAAA,SAAA,IAAA,OACC,OAAAd,EAAAuE,EAAA,MAAA,IAAAG,EAAA,KAAA,IAAA,YAAA1E,EAAA,IAAiD,CAAA,SAOjD,MAAA4E,EAAA,CAAA,GAAAL,EAAA,MAAA,KAAA,CAAA,gDAIyC,4tDChIzC,SAAAM,GAAAC,EAAAC,EAAA"}