@topvisor/ui 1.5.7-0 → 1.5.7-5

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 (142) hide show
  1. package/.chunks/{api-DupNAJPm.amd.js → api-Dy2x6A8L.amd.js} +2 -2
  2. package/.chunks/{api-DupNAJPm.amd.js.map → api-Dy2x6A8L.amd.js.map} +1 -1
  3. package/.chunks/{api-DupNAJPm.esm.js → api-Dy2x6A8L.esm.js} +2 -2
  4. package/.chunks/{api-DupNAJPm.esm.js.map → api-Dy2x6A8L.esm.js.map} +1 -1
  5. package/.chunks/app-CyODeY0D.amd.js +2 -0
  6. package/.chunks/app-CyODeY0D.amd.js.map +1 -0
  7. package/.chunks/{app-DinkodXi.esm.js → app-CyODeY0D.esm.js} +146 -141
  8. package/.chunks/app-CyODeY0D.esm.js.map +1 -0
  9. package/.chunks/{datepicker-bozIEbDA.amd.js → datepicker-CBAwfPPW.amd.js} +2 -2
  10. package/.chunks/{datepicker-bozIEbDA.amd.js.map → datepicker-CBAwfPPW.amd.js.map} +1 -1
  11. package/.chunks/{datepicker-bozIEbDA.esm.js → datepicker-CBAwfPPW.esm.js} +2 -2
  12. package/.chunks/{datepicker-bozIEbDA.esm.js.map → datepicker-CBAwfPPW.esm.js.map} +1 -1
  13. package/.chunks/{dialog-BCDVMWG1.amd.js → dialog-C8fss11q.amd.js} +2 -2
  14. package/.chunks/{dialog-BCDVMWG1.amd.js.map → dialog-C8fss11q.amd.js.map} +1 -1
  15. package/.chunks/{dialog-BCDVMWG1.esm.js → dialog-C8fss11q.esm.js} +3 -3
  16. package/.chunks/{dialog-BCDVMWG1.esm.js.map → dialog-C8fss11q.esm.js.map} +1 -1
  17. package/.chunks/{dialog_regionSelectorRegions-0M1fMu1a.amd.js → dialog_regionSelectorRegions-zJShjr2f.amd.js} +2 -2
  18. package/.chunks/{dialog_regionSelectorRegions-0M1fMu1a.amd.js.map → dialog_regionSelectorRegions-zJShjr2f.amd.js.map} +1 -1
  19. package/.chunks/{dialog_regionSelectorRegions-0M1fMu1a.esm.js → dialog_regionSelectorRegions-zJShjr2f.esm.js} +4 -4
  20. package/.chunks/{dialog_regionSelectorRegions-0M1fMu1a.esm.js.map → dialog_regionSelectorRegions-zJShjr2f.esm.js.map} +1 -1
  21. package/.chunks/{forms-CY5MOh7a.amd.js → forms-LywqKN9I.amd.js} +2 -2
  22. package/.chunks/forms-LywqKN9I.amd.js.map +1 -0
  23. package/.chunks/{forms-CY5MOh7a.esm.js → forms-LywqKN9I.esm.js} +14 -18
  24. package/.chunks/{forms-CY5MOh7a.esm.js.map → forms-LywqKN9I.esm.js.map} +1 -1
  25. package/.chunks/formsExt-D16-9Jor.amd.js +2 -0
  26. package/.chunks/formsExt-D16-9Jor.amd.js.map +1 -0
  27. package/.chunks/{formsExt-DzXSTWaT.esm.js → formsExt-D16-9Jor.esm.js} +34 -26
  28. package/.chunks/formsExt-D16-9Jor.esm.js.map +1 -0
  29. package/.chunks/{notice-bro62vCA.amd.js → notice-Dw5ZUJxW.amd.js} +2 -2
  30. package/.chunks/{notice-bro62vCA.amd.js.map → notice-Dw5ZUJxW.amd.js.map} +1 -1
  31. package/.chunks/{notice-bro62vCA.esm.js → notice-Dw5ZUJxW.esm.js} +2 -2
  32. package/.chunks/{notice-bro62vCA.esm.js.map → notice-Dw5ZUJxW.esm.js.map} +1 -1
  33. package/.chunks/{popup-3cwJ8Hev.amd.js → popup-BWD4eASc.amd.js} +2 -2
  34. package/.chunks/popup-BWD4eASc.amd.js.map +1 -0
  35. package/.chunks/{popup-3cwJ8Hev.esm.js → popup-BWD4eASc.esm.js} +4 -4
  36. package/.chunks/{popup-3cwJ8Hev.esm.js.map → popup-BWD4eASc.esm.js.map} +1 -1
  37. package/.chunks/{popup-CzhBQhVH.amd.js → popup-BqacuTuJ.amd.js} +2 -2
  38. package/.chunks/{popup-CzhBQhVH.amd.js.map → popup-BqacuTuJ.amd.js.map} +1 -1
  39. package/.chunks/{popup-CzhBQhVH.esm.js → popup-BqacuTuJ.esm.js} +3 -3
  40. package/.chunks/{popup-CzhBQhVH.esm.js.map → popup-BqacuTuJ.esm.js.map} +1 -1
  41. package/.chunks/{utils-Be-ScFyj.amd.js → utils-CZnFOkS6.amd.js} +2 -2
  42. package/.chunks/{utils-Be-ScFyj.amd.js.map → utils-CZnFOkS6.amd.js.map} +1 -1
  43. package/.chunks/{utils-Be-ScFyj.esm.js → utils-CZnFOkS6.esm.js} +3 -3
  44. package/.chunks/{utils-Be-ScFyj.esm.js.map → utils-CZnFOkS6.esm.js.map} +1 -1
  45. package/.chunks/{utils-ds_g-L_r.amd.js → utils-ZgQqVN0T.amd.js} +2 -2
  46. package/.chunks/{utils-ds_g-L_r.amd.js.map → utils-ZgQqVN0T.amd.js.map} +1 -1
  47. package/.chunks/{utils-ds_g-L_r.esm.js → utils-ZgQqVN0T.esm.js} +4 -4
  48. package/.chunks/{utils-ds_g-L_r.esm.js.map → utils-ZgQqVN0T.esm.js.map} +1 -1
  49. package/.chunks/{worker-Bv_yPPMv.amd.js → worker-a6MSM1uV.amd.js} +2 -2
  50. package/.chunks/{worker-Bv_yPPMv.amd.js.map → worker-a6MSM1uV.amd.js.map} +1 -1
  51. package/.chunks/{worker-Bv_yPPMv.esm.js → worker-a6MSM1uV.esm.js} +3 -3
  52. package/.chunks/{worker-Bv_yPPMv.esm.js.map → worker-a6MSM1uV.esm.js.map} +1 -1
  53. package/api/index.amd.js +1 -1
  54. package/api/index.amd.js.map +1 -1
  55. package/api/index.js +1 -1
  56. package/assets/forms.css +1 -1
  57. package/assets/schedule.css +1 -1
  58. package/autoload-css-manifest.amd.json +4 -4
  59. package/autoload-css-manifest.json +4 -4
  60. package/charts/charts.amd.js +1 -1
  61. package/charts/charts.amd.js.map +1 -1
  62. package/charts/charts.js +1 -1
  63. package/core/app.amd.js +1 -1
  64. package/core/app.amd.js.map +1 -1
  65. package/core/app.js +3 -3
  66. package/dialog/dialog.amd.js +1 -1
  67. package/dialog/dialog.amd.js.map +1 -1
  68. package/dialog/dialog.js +2 -2
  69. package/extra/extra.amd.js +1 -1
  70. package/extra/extra.amd.js.map +1 -1
  71. package/extra/extra.js +4 -0
  72. package/extra/extra.js.map +1 -1
  73. package/forms/forms.amd.js +1 -1
  74. package/forms/forms.amd.js.map +1 -1
  75. package/forms/forms.js +1 -1
  76. package/formsExt/formsExt.amd.js +1 -1
  77. package/formsExt/formsExt.amd.js.map +1 -1
  78. package/formsExt/formsExt.js +1 -1
  79. package/layout/layout.amd.js +1 -1
  80. package/layout/layout.amd.js.map +1 -1
  81. package/layout/layout.js +1 -1
  82. package/package.json +3 -2
  83. package/popup/popup.amd.js +1 -1
  84. package/popup/popup.amd.js.map +1 -1
  85. package/popup/popup.js +1 -1
  86. package/popup/worker.amd.js +1 -1
  87. package/popup/worker.amd.js.map +1 -1
  88. package/popup/worker.js +1 -1
  89. package/project/project.amd.js +1 -1
  90. package/project/project.amd.js.map +1 -1
  91. package/project/project.js +12 -12
  92. package/project/project.js.map +1 -1
  93. package/schedule/schedule.amd.js +1 -1
  94. package/schedule/schedule.amd.js.map +1 -1
  95. package/schedule/schedule.js +12 -11
  96. package/schedule/schedule.js.map +1 -1
  97. package/src/components/forms/avatar/types.d.ts +0 -9
  98. package/src/components/formsExt/selector2/composables/useMenu.d.ts +2 -0
  99. package/src/components/formsExt/selector2/types.d.ts +8 -0
  100. package/src/components/project/regionSelector/utils/utils.d.ts +2 -2
  101. package/src/components/schedule/schedule/compoents/calendar/types.d.ts +9 -3
  102. package/src/components/schedule/schedule/compoents/calendar/utils.d.ts +1 -1
  103. package/src/components/schedule/schedule/compoents/email/types.d.ts +3 -0
  104. package/src/components/schedule/schedule/compoents/reportSend/types.d.ts +9 -0
  105. package/src/components/schedule/schedule/compoents/timeSelector/types.d.ts +12 -6
  106. package/src/components/schedule/schedule/compoents/timeSelectors/types.d.ts +3 -0
  107. package/src/components/schedule/schedule/types.d.ts +48 -3
  108. package/src/core/directives/swimUp.d.ts +1 -1
  109. package/src/core/plugins/core.d.ts +2 -2
  110. package/tabsView/tabsView.amd.js +1 -1
  111. package/tabsView/tabsView.amd.js.map +1 -1
  112. package/tabsView/tabsView.js +3 -3
  113. package/tabsView/tabsView.js.map +1 -1
  114. package/utils/clipboard.amd.js +1 -1
  115. package/utils/clipboard.amd.js.map +1 -1
  116. package/utils/clipboard.js +1 -1
  117. package/utils/date.amd.js +1 -1
  118. package/utils/date.amd.js.map +1 -1
  119. package/utils/date.js +1 -1
  120. package/utils/device.amd.js +1 -1
  121. package/utils/device.amd.js.map +1 -1
  122. package/utils/device.js +1 -1
  123. package/utils/lodash.amd.js +1 -1
  124. package/utils/lodash.amd.js.map +1 -1
  125. package/utils/lodash.js +1 -1
  126. package/utils/price.amd.js +1 -1
  127. package/utils/price.amd.js.map +1 -1
  128. package/utils/price.js +1 -1
  129. package/utils/searchers.amd.js +1 -1
  130. package/utils/searchers.amd.js.map +1 -1
  131. package/utils/searchers.js +1 -1
  132. package/utils/string.amd.js +1 -1
  133. package/utils/string.amd.js.map +1 -1
  134. package/utils/string.js +1 -1
  135. package/.chunks/app-DinkodXi.amd.js +0 -2
  136. package/.chunks/app-DinkodXi.amd.js.map +0 -1
  137. package/.chunks/app-DinkodXi.esm.js.map +0 -1
  138. package/.chunks/forms-CY5MOh7a.amd.js.map +0 -1
  139. package/.chunks/formsExt-DzXSTWaT.amd.js +0 -2
  140. package/.chunks/formsExt-DzXSTWaT.amd.js.map +0 -1
  141. package/.chunks/formsExt-DzXSTWaT.esm.js.map +0 -1
  142. package/.chunks/popup-3cwJ8Hev.amd.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schedule.js","names":["$emit","$slots","$i18n","$emit","$i18n","$i18n","$emit","$i18n","$emit","$emit","$emit"],"sources":["../../src/components/schedule/schedule/schedule.vue","../../src/components/schedule/schedule/schedule.vue","../../src/components/schedule/schedule/compoents/container/container.vue","../../src/components/schedule/schedule/compoents/calendar/utils.ts","../../src/components/schedule/schedule/compoents/calendar/calendar.vue","../../src/components/schedule/schedule/compoents/calendar/calendar.vue","../../src/components/schedule/schedule/compoents/email/selector/selector.vue","../../src/components/schedule/schedule/compoents/email/selector/selector.vue","../../src/components/schedule/schedule/compoents/email/email.vue","../../src/components/schedule/schedule/compoents/email/email.vue","../../src/components/schedule/schedule/compoents/reportSend/reportSend.vue","../../src/components/schedule/schedule/compoents/reportSend/reportSend.vue","../../src/components/schedule/schedule/compoents/timeSelector/timeSelector.vue","../../src/components/schedule/schedule/compoents/timeSelector/timeSelector.vue","../../src/components/schedule/schedule/compoents/timeSelectors/timeSelectors.vue","../../src/components/schedule/schedule/compoents/timeSelectors/timeSelectors.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport TopSelect from '@/components/forms/select/select.vue';\nimport type { Props, Emits, TriggerType } from '@/components/schedule/schedule/types';\nimport { useI18n } from '@/core/plugins/i18n';\n\ndefineOptions({\n\tname: 'TopSchedule',\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttriggerType: 'onDemand',\n});\n\ndefineEmits<Emits>();\n\nconst i18n = useI18n();\nconst labelByStyling = {\n\t'track': i18n.Projects.Checks,\n\t'report': i18n.Projects.Reports,\n\t'neutral': '',\n};\nconst title = props.title ?? labelByStyling[props.styling];\n\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-schedule': true,\n\t\t\t[`top-schedule-style_${styling}`]: true,\n\t\t}\"\n\t>\n\t\t<div class=\"top-schedule_header\">\n\t\t\t<div class=\"top-schedule_headerTitle\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\n\t\t\t<TopSelect\n\t\t\t\tclass=\"top-schedule_headerTriggerType\"\n\t\t\t\t:modelValue=\"triggerType\"\n\t\t\t\t@update:modelValue=\"$emit('update:triggerType', $event as TriggerType)\"\n\t\t\t\t:options=\"triggerTypeOptions\"\n\t\t\t\tsize=\"s\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"triggerType !== 'onDemand' && $slots.body\"\n\t\t\tclass=\"top-schedule_body\"\n\t\t>\n\t\t\t<slot name=\"body\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport TopSelect from '@/components/forms/select/select.vue';\nimport type { Props, Emits, TriggerType } from '@/components/schedule/schedule/types';\nimport { useI18n } from '@/core/plugins/i18n';\n\ndefineOptions({\n\tname: 'TopSchedule',\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttriggerType: 'onDemand',\n});\n\ndefineEmits<Emits>();\n\nconst i18n = useI18n();\nconst labelByStyling = {\n\t'track': i18n.Projects.Checks,\n\t'report': i18n.Projects.Reports,\n\t'neutral': '',\n};\nconst title = props.title ?? labelByStyling[props.styling];\n\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-schedule': true,\n\t\t\t[`top-schedule-style_${styling}`]: true,\n\t\t}\"\n\t>\n\t\t<div class=\"top-schedule_header\">\n\t\t\t<div class=\"top-schedule_headerTitle\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\n\t\t\t<TopSelect\n\t\t\t\tclass=\"top-schedule_headerTriggerType\"\n\t\t\t\t:modelValue=\"triggerType\"\n\t\t\t\t@update:modelValue=\"$emit('update:triggerType', $event as TriggerType)\"\n\t\t\t\t:options=\"triggerTypeOptions\"\n\t\t\t\tsize=\"s\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"triggerType !== 'onDemand' && $slots.body\"\n\t\t\tclass=\"top-schedule_body\"\n\t\t>\n\t\t\t<slot name=\"body\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<template>\n\t<div class=\"top-schedule_bodyContainer\">\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","import type { Day, Props } from '@/components/schedule/schedule/compoents/calendar/types';\nimport { useI18n } from '@/core/app';\n\n/**\n * Количество дней в месяце\n */\nexport const COUNT_DAYS_IN_MONTS = 27;\n\n/**\n * Количество дней в неделе\n */\nexport const COUNT_DAYS_IN_WEEK = 7;\n\nexport const genDaysByCalendarMode = (mode: Props['mode']): Day[] => {\n\tconst i18n = useI18n();\n\n\tswitch (mode) {\n\t\tcase 'dayOfMonth': {\n\t\t\tconst days: Day[] = Array.from({ length: COUNT_DAYS_IN_MONTS }, (_, i) => ({\n\t\t\t\tvalue: i + 1,\n\t\t\t\ttitle: String(i + 1),\n\t\t\t}));\n\n\t\t\tdays.push({\n\t\t\t\tvalue: 'LAST_OF_MONTH',\n\t\t\t\ttitle: '',\n\t\t\t\tisIcon: true,\n\t\t\t});\n\n\t\t\treturn days;\n\t\t}\n\n\t\tcase 'dayOfWeek': {\n\t\t\treturn [\n\t\t\t\t{ value: 'MONDAY', title: i18n.Calendar.Dw_1 },\n\t\t\t\t{ value: 'TUESDAY', title: i18n.Calendar.Dw_2 },\n\t\t\t\t{ value: 'WEDNESDAY', title: i18n.Calendar.Dw_3 },\n\t\t\t\t{ value: 'THURSDAY', title: i18n.Calendar.Dw_4 },\n\t\t\t\t{ value: 'FRIDAY', title: i18n.Calendar.Dw_5 },\n\t\t\t\t{ value: 'SATURDAY', title: i18n.Calendar.Dw_6 },\n\t\t\t\t{ value: 'SUNDAY', title: i18n.Calendar.Dw_7 },\n\t\t\t];\n\t\t}\n\t}\n};","<script setup lang=\"ts\">\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/calendar/types';\nimport { COUNT_DAYS_IN_MONTS, COUNT_DAYS_IN_WEEK, genDaysByCalendarMode } from '@/components/schedule/schedule/compoents/calendar/utils';\nimport { numberEnding } from '@/core/utils/string';\nimport { computed } from 'vue';\nimport { useI18n } from '@/core/app';\n\nconst i18n = useI18n();\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst selectedDays = computed<Props['modelValue']>({\n\tget: () => props.modelValue,\n\tset: value => emit('update:modelValue', value),\n});\n\nconst days = computed(() => genDaysByCalendarMode(props.mode));\n\nconst selectedCountLabel = computed(() => {\n\tconst daysCount = selectedDays.value.length;\n\tlet postfix = '';\n\n\tswitch (props.mode) {\n\t\tcase 'dayOfWeek': {\n\t\t\tif (daysCount === COUNT_DAYS_IN_WEEK) return i18n.Common.Every_day;\n\n\t\t\tpostfix = i18n.Common.a_week;\n\n\t\t\tbreak;\n\t\t}\n\t\tcase 'dayOfMonth': {\n\t\t\t// плюс \"последний день месяца\"\n\t\t\tif (daysCount === COUNT_DAYS_IN_MONTS + 1) return i18n.Common.Every_day;\n\n\t\t\tpostfix = i18n.Common.a_month;\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn `${daysCount} ${numberEnding(\n\t\tdaysCount,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_2,\n\t)} ${postfix}`;\n});\n\nconst isClearAction = computed(() => selectedDays.value.length > 1);\n\nconst toggleAllDays = () => {\n\tselectedDays.value = isClearAction.value ? [] : days.value.map(day => day.value);\n};\n\n</script>\n\n<template>\n\t<div class=\"top-scheduleCalendar\">\n\t\t<div class=\"top-scheduleCalendar_header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleCalendar_headerButton\"\n\t\t\t\t@click=\"toggleAllDays\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t{{ isClearAction ? $i18n.Common.Clear : $i18n.Common.Select_all}}\n\t\t\t</TopButton>\n\t\t</div>\n\n\t\t<div class=\"top-scheduleCalendar_calendar\">\n\t\t\t<label\n\t\t\t\tclass=\"top-scheduleCalendar_calendarDay\"\n\t\t\t\tv-for=\"day in days\"\n\t\t\t\t:key=\"day.value\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayRadio\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"day.value\"\n\t\t\t\t\tv-model=\"selectedDays\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayTitle\"\n\t\t\t\t\t:data-top-icon=\"day.isIcon ? day.title : undefined\"\n\t\t\t\t>\n\t\t\t\t\t<template v-if=\"!day.isIcon\">\n\t\t\t\t\t\t{{ day.title }}\n\t\t\t\t\t</template>\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-scheduleCalendar_selectedCount': true,\n\t\t\t\t'top-error': !selectedDays.length\n\t\t\t}\"\n\t\t>\n\t\t\t{{ selectedCountLabel }}\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/calendar/types';\nimport { COUNT_DAYS_IN_MONTS, COUNT_DAYS_IN_WEEK, genDaysByCalendarMode } from '@/components/schedule/schedule/compoents/calendar/utils';\nimport { numberEnding } from '@/core/utils/string';\nimport { computed } from 'vue';\nimport { useI18n } from '@/core/app';\n\nconst i18n = useI18n();\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst selectedDays = computed<Props['modelValue']>({\n\tget: () => props.modelValue,\n\tset: value => emit('update:modelValue', value),\n});\n\nconst days = computed(() => genDaysByCalendarMode(props.mode));\n\nconst selectedCountLabel = computed(() => {\n\tconst daysCount = selectedDays.value.length;\n\tlet postfix = '';\n\n\tswitch (props.mode) {\n\t\tcase 'dayOfWeek': {\n\t\t\tif (daysCount === COUNT_DAYS_IN_WEEK) return i18n.Common.Every_day;\n\n\t\t\tpostfix = i18n.Common.a_week;\n\n\t\t\tbreak;\n\t\t}\n\t\tcase 'dayOfMonth': {\n\t\t\t// плюс \"последний день месяца\"\n\t\t\tif (daysCount === COUNT_DAYS_IN_MONTS + 1) return i18n.Common.Every_day;\n\n\t\t\tpostfix = i18n.Common.a_month;\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn `${daysCount} ${numberEnding(\n\t\tdaysCount,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_2,\n\t)} ${postfix}`;\n});\n\nconst isClearAction = computed(() => selectedDays.value.length > 1);\n\nconst toggleAllDays = () => {\n\tselectedDays.value = isClearAction.value ? [] : days.value.map(day => day.value);\n};\n\n</script>\n\n<template>\n\t<div class=\"top-scheduleCalendar\">\n\t\t<div class=\"top-scheduleCalendar_header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleCalendar_headerButton\"\n\t\t\t\t@click=\"toggleAllDays\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t{{ isClearAction ? $i18n.Common.Clear : $i18n.Common.Select_all}}\n\t\t\t</TopButton>\n\t\t</div>\n\n\t\t<div class=\"top-scheduleCalendar_calendar\">\n\t\t\t<label\n\t\t\t\tclass=\"top-scheduleCalendar_calendarDay\"\n\t\t\t\tv-for=\"day in days\"\n\t\t\t\t:key=\"day.value\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayRadio\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"day.value\"\n\t\t\t\t\tv-model=\"selectedDays\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayTitle\"\n\t\t\t\t\t:data-top-icon=\"day.isIcon ? day.title : undefined\"\n\t\t\t\t>\n\t\t\t\t\t<template v-if=\"!day.isIcon\">\n\t\t\t\t\t\t{{ day.title }}\n\t\t\t\t\t</template>\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-scheduleCalendar_selectedCount': true,\n\t\t\t\t'top-error': !selectedDays.length\n\t\t\t}\"\n\t\t>\n\t\t\t{{ selectedCountLabel }}\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport Core from '@/core/core/core';\nimport { isEmail } from '@/core/utils/check';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/selector/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n});\n\nconst emit = defineEmits<Emits>();\nconst i18n = useI18n();\nconst $ = Core.$;\n\nconst elRootRef = ref<HTMLElement>();\nconst elInputRef = ref<InstanceType<typeof TopInput>>();\nlet elInput: HTMLInputElement | null = null;\nconst autocompleteCache: Record<string, string[]> = {};\n\nconst filterEmails = (emails: string[]) => emails.filter(email => !props.emails.includes(email));\n\nconst submit = (value: unknown = props.modelValue) => {\n\tconst email = String(value).trim();\n\tif (!email) return;\n\tif (!isEmail(email)) {\n\t\tvoid Core.notice(i18n.Common.Enter_valid_email_notice, 'error');\n\n\t\treturn;\n\t}\n\n\temit('submit', email);\n};\n\nconst initAutocomplete = async () => {\n\tawait nextTick();\n\n\telInput = elInputRef.value?.$el.querySelector('input') ?? null;\n\tif (!elInput) return;\n\n\tif (!$?.ui?.autocomplete) {\n\t\tconsole.info('Для работы autocomplete требуется глобальная загрузка jQuery UI Autocomplete');\n\n\t\treturn;\n\t}\n\n\t$(elInput).autocomplete({\n\t\tappendTo: elRootRef.value,\n\t\tminLength: 0,\n\t\tsource: async (request: { term: string }, response: (items: Array<{ label: string, value: string }>) => void) => {\n\t\t\tconst term = request.term;\n\t\t\tif (!(term in autocompleteCache)) {\n\t\t\t\tautocompleteCache[term] = await props.getEmailSuggestions(term);\n\t\t\t}\n\n\t\t\tresponse(filterEmails(autocompleteCache[term]).map(email => ({\n\t\t\t\tlabel: email,\n\t\t\t\tvalue: email,\n\t\t\t})));\n\t\t},\n\t\tselect: (event: Event, ui: { item?: { value: string } }) => {\n\t\t\tif (!ui.item || !elInput) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tsubmit(ui.item.value);\n\t\t\temit('update:modelValue', '');\n\n\t\t\t$(elInput).trigger('focus');\n\t\t},\n\t});\n\n\t$(elInput).attr('autocomplete', 'disabled');\n\t$(elInput).on('focus.scheduleEmailSelector', () => {\n\t\tif (!elInput) return;\n\n\t\t$(elInput).trigger('input');\n\t});\n};\n\nonMounted(() => {\n\tvoid initAutocomplete();\n});\n\nonBeforeUnmount(() => {\n\tif (!$?.ui?.autocomplete || !elInput) return;\n\n\t$(elInput).off('focus.scheduleEmailSelector');\n\t$(elInput).autocomplete('destroy');\n});\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-scheduleEmailSelector\"\n\t\tref=\"elRootRef\"\n\t>\n\t\t<TopInput\n\t\t\tref=\"elInputRef\"\n\t\t\t:modelValue\n\t\t\t@update:modelValue=\"$emit('update:modelValue', $event)\"\n\t\t\t@keydown.enter.prevent=\"submit()\"\n\t\t\t:title=\"$i18n.Common.Enter_email\"\n\t\t\ttype=\"email\"\n\t\t\tsize=\"l\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleEmailSelector_submit\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t\t@click.prevent=\"submit()\"\n\t\t\t/>\n\t\t</TopInput>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport Core from '@/core/core/core';\nimport { isEmail } from '@/core/utils/check';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/selector/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n});\n\nconst emit = defineEmits<Emits>();\nconst i18n = useI18n();\nconst $ = Core.$;\n\nconst elRootRef = ref<HTMLElement>();\nconst elInputRef = ref<InstanceType<typeof TopInput>>();\nlet elInput: HTMLInputElement | null = null;\nconst autocompleteCache: Record<string, string[]> = {};\n\nconst filterEmails = (emails: string[]) => emails.filter(email => !props.emails.includes(email));\n\nconst submit = (value: unknown = props.modelValue) => {\n\tconst email = String(value).trim();\n\tif (!email) return;\n\tif (!isEmail(email)) {\n\t\tvoid Core.notice(i18n.Common.Enter_valid_email_notice, 'error');\n\n\t\treturn;\n\t}\n\n\temit('submit', email);\n};\n\nconst initAutocomplete = async () => {\n\tawait nextTick();\n\n\telInput = elInputRef.value?.$el.querySelector('input') ?? null;\n\tif (!elInput) return;\n\n\tif (!$?.ui?.autocomplete) {\n\t\tconsole.info('Для работы autocomplete требуется глобальная загрузка jQuery UI Autocomplete');\n\n\t\treturn;\n\t}\n\n\t$(elInput).autocomplete({\n\t\tappendTo: elRootRef.value,\n\t\tminLength: 0,\n\t\tsource: async (request: { term: string }, response: (items: Array<{ label: string, value: string }>) => void) => {\n\t\t\tconst term = request.term;\n\t\t\tif (!(term in autocompleteCache)) {\n\t\t\t\tautocompleteCache[term] = await props.getEmailSuggestions(term);\n\t\t\t}\n\n\t\t\tresponse(filterEmails(autocompleteCache[term]).map(email => ({\n\t\t\t\tlabel: email,\n\t\t\t\tvalue: email,\n\t\t\t})));\n\t\t},\n\t\tselect: (event: Event, ui: { item?: { value: string } }) => {\n\t\t\tif (!ui.item || !elInput) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tsubmit(ui.item.value);\n\t\t\temit('update:modelValue', '');\n\n\t\t\t$(elInput).trigger('focus');\n\t\t},\n\t});\n\n\t$(elInput).attr('autocomplete', 'disabled');\n\t$(elInput).on('focus.scheduleEmailSelector', () => {\n\t\tif (!elInput) return;\n\n\t\t$(elInput).trigger('input');\n\t});\n};\n\nonMounted(() => {\n\tvoid initAutocomplete();\n});\n\nonBeforeUnmount(() => {\n\tif (!$?.ui?.autocomplete || !elInput) return;\n\n\t$(elInput).off('focus.scheduleEmailSelector');\n\t$(elInput).autocomplete('destroy');\n});\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-scheduleEmailSelector\"\n\t\tref=\"elRootRef\"\n\t>\n\t\t<TopInput\n\t\t\tref=\"elInputRef\"\n\t\t\t:modelValue\n\t\t\t@update:modelValue=\"$emit('update:modelValue', $event)\"\n\t\t\t@keydown.enter.prevent=\"submit()\"\n\t\t\t:title=\"$i18n.Common.Enter_email\"\n\t\t\ttype=\"email\"\n\t\t\tsize=\"l\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleEmailSelector_submit\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t\t@click.prevent=\"submit()\"\n\t\t\t/>\n\t\t</TopInput>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/types';\nimport ScheduleEmailSelector from '@/components/schedule/schedule/compoents/email/selector/selector.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n\tmaxEmailsCount: -1,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst value = ref('');\n\nconst addEmail = (email: string) => {\n\tconst preparedEmail = email.trim();\n\tif (!preparedEmail || props.emails.includes(preparedEmail)) {\n\t\tvalue.value = '';\n\n\t\treturn;\n\t}\n\n\temit('add:email', preparedEmail);\n\n\tvalue.value = '';\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleEmail\">\n\t\t<div class=\"top-scheduleEmail_title\">\n\t\t\t{{ $i18n.Projects.Reports_send_to_address }} E-mail:\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"!(maxEmailsCount && emails.length === maxEmailsCount)\"\n\t\t\tclass=\"top-scheduleEmail_selector\"\n\t\t>\n\t\t\t<ScheduleEmailSelector\n\t\t\t\tv-model=\"value\"\n\t\t\t\t:getEmailSuggestions=\"getEmailSuggestions\"\n\t\t\t\t:emails=\"emails\"\n\t\t\t\t@submit=\"addEmail\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"emails.length\"\n\t\t\tclass=\"top-scheduleEmail_emails\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleEmail_emailsItem\"\n\t\t\t\tv-for=\"email in emails\"\n\t\t\t\t:key=\"email\"\n\t\t\t>\n\t\t\t\t{{ email }}\n\n\t\t\t\t<TopButton\n\t\t\t\t\t@click=\"$emit('remove:email', email)\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/types';\nimport ScheduleEmailSelector from '@/components/schedule/schedule/compoents/email/selector/selector.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n\tmaxEmailsCount: -1,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst value = ref('');\n\nconst addEmail = (email: string) => {\n\tconst preparedEmail = email.trim();\n\tif (!preparedEmail || props.emails.includes(preparedEmail)) {\n\t\tvalue.value = '';\n\n\t\treturn;\n\t}\n\n\temit('add:email', preparedEmail);\n\n\tvalue.value = '';\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleEmail\">\n\t\t<div class=\"top-scheduleEmail_title\">\n\t\t\t{{ $i18n.Projects.Reports_send_to_address }} E-mail:\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"!(maxEmailsCount && emails.length === maxEmailsCount)\"\n\t\t\tclass=\"top-scheduleEmail_selector\"\n\t\t>\n\t\t\t<ScheduleEmailSelector\n\t\t\t\tv-model=\"value\"\n\t\t\t\t:getEmailSuggestions=\"getEmailSuggestions\"\n\t\t\t\t:emails=\"emails\"\n\t\t\t\t@submit=\"addEmail\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"emails.length\"\n\t\t\tclass=\"top-scheduleEmail_emails\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleEmail_emailsItem\"\n\t\t\t\tv-for=\"email in emails\"\n\t\t\t\t:key=\"email\"\n\t\t\t>\n\t\t\t\t{{ email }}\n\n\t\t\t\t<TopButton\n\t\t\t\t\t@click=\"$emit('remove:email', email)\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Emits, Props, ReportChannelSource } from '@/components/schedule/schedule/compoents/reportSend/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tconnectors: () => [],\n});\ndefineEmits<Emits>();\n\nconst hasChannel = (source: ReportChannelSource) => props.channels.some(channel => channel.source === source);\n\nconst sourceIconBySource: Record<ReportChannelSource, string> = {\n\tinformer: '',\n\ttelegram: '',\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleReportSend\">\n\t\t<div class=\"top-scheduleReportSend_title\">\n\t\t\t{{ $i18n.Projects.Reports_send }}\n\t\t</div>\n\n\t\t<div class=\"top-scheduleReportSend_channels\">\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\tv-for=\"channel in channels\"\n\t\t\t\t:key=\"`${channel.source}-${channel.id}`\"\n\t\t\t>\n\t\t\t\t<div class=\"top-scheduleReportSend_channelInfo\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoIcon\"\n\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[channel.source]\"\n\t\t\t\t\t></div>\n\n\t\t\t\t\t<div class=\"top-scheduleReportSend_channelInfoLabel\">\n\t\t\t\t\t\t{{ channel.label }}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<TopButton\n\t\t\t\t\t\tv-if=\"channel.settingLink\"\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoSettings\"\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t:href=\"channel.settingLink\"\n\t\t\t\t\t\ticon=\"\"\n\t\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t></TopButton>\n\t\t\t\t</div>\n\n\t\t\t\t<TopSwitcher\n\t\t\t\t\t:modelValue=\"channel.selected\"\n\t\t\t\t\t@update:modelValue=\"$emit('update:channelSelected', {\n\t\t\t\t\t\tid: channel.id,\n\t\t\t\t\t\tsource: channel.source,\n\t\t\t\t\t\tselected: $event as boolean,\n\t\t\t\t\t})\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<template\n\t\t\t\tv-for=\"connector in connectors\"\n\t\t\t\t:key=\"connector.source\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!hasChannel(connector.source)\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"top-scheduleReportSend_channelInfo\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoIcon\"\n\t\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[connector.source]\"\n\t\t\t\t\t\t></div>\n\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoLabel top-scheduleReportSend_channelInfoLink\"\n\t\t\t\t\t\t\t:href=\"connector.connectLink\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ connector.connectLabel }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Emits, Props, ReportChannelSource } from '@/components/schedule/schedule/compoents/reportSend/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tconnectors: () => [],\n});\ndefineEmits<Emits>();\n\nconst hasChannel = (source: ReportChannelSource) => props.channels.some(channel => channel.source === source);\n\nconst sourceIconBySource: Record<ReportChannelSource, string> = {\n\tinformer: '',\n\ttelegram: '',\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleReportSend\">\n\t\t<div class=\"top-scheduleReportSend_title\">\n\t\t\t{{ $i18n.Projects.Reports_send }}\n\t\t</div>\n\n\t\t<div class=\"top-scheduleReportSend_channels\">\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\tv-for=\"channel in channels\"\n\t\t\t\t:key=\"`${channel.source}-${channel.id}`\"\n\t\t\t>\n\t\t\t\t<div class=\"top-scheduleReportSend_channelInfo\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoIcon\"\n\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[channel.source]\"\n\t\t\t\t\t></div>\n\n\t\t\t\t\t<div class=\"top-scheduleReportSend_channelInfoLabel\">\n\t\t\t\t\t\t{{ channel.label }}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<TopButton\n\t\t\t\t\t\tv-if=\"channel.settingLink\"\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoSettings\"\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t:href=\"channel.settingLink\"\n\t\t\t\t\t\ticon=\"\"\n\t\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t></TopButton>\n\t\t\t\t</div>\n\n\t\t\t\t<TopSwitcher\n\t\t\t\t\t:modelValue=\"channel.selected\"\n\t\t\t\t\t@update:modelValue=\"$emit('update:channelSelected', {\n\t\t\t\t\t\tid: channel.id,\n\t\t\t\t\t\tsource: channel.source,\n\t\t\t\t\t\tselected: $event as boolean,\n\t\t\t\t\t})\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<template\n\t\t\t\tv-for=\"connector in connectors\"\n\t\t\t\t:key=\"connector.source\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!hasChannel(connector.source)\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"top-scheduleReportSend_channelInfo\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoIcon\"\n\t\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[connector.source]\"\n\t\t\t\t\t\t></div>\n\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoLabel top-scheduleReportSend_channelInfoLink\"\n\t\t\t\t\t\t\t:href=\"connector.connectLink\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ connector.connectLabel }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, Emits, Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\n\ndefineProps<Props>();\ndefineEmits<Emits>();\n\nconst hourOptions = Array.from({ length: 24 }, (_, value) => ({\n\tvalue,\n\ttitle: String(value).padStart(2, '0'),\n}));\nconst minuteOptions = [\n\t{\n\t\tvalue: 0,\n\t\ttitle: '00',\n\t},\n\t{\n\t\tvalue: 15,\n\t\ttitle: '15',\n\t},\n\t{\n\t\tvalue: 30,\n\t\ttitle: '30',\n\t},\n\t{\n\t\tvalue: 45,\n\t\ttitle: '45',\n\t},\n];\n\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelector\">\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_hour\"\n\t\t\t:modelValue=\"hour\"\n\t\t\t:options=\"hourOptions\"\n\t\t\t@update:modelValue=\"$emit('update:hour', $event as Time['hour'])\"\n\t\t/>\n\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_minute\"\n\t\t\t:modelValue=\"minute\"\n\t\t\t:options=\"minuteOptions\"\n\t\t\t@update:modelValue=\"$emit('update:minute', $event as Time['minute'])\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, Emits, Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\n\ndefineProps<Props>();\ndefineEmits<Emits>();\n\nconst hourOptions = Array.from({ length: 24 }, (_, value) => ({\n\tvalue,\n\ttitle: String(value).padStart(2, '0'),\n}));\nconst minuteOptions = [\n\t{\n\t\tvalue: 0,\n\t\ttitle: '00',\n\t},\n\t{\n\t\tvalue: 15,\n\t\ttitle: '15',\n\t},\n\t{\n\t\tvalue: 30,\n\t\ttitle: '30',\n\t},\n\t{\n\t\tvalue: 45,\n\t\ttitle: '45',\n\t},\n];\n\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelector\">\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_hour\"\n\t\t\t:modelValue=\"hour\"\n\t\t\t:options=\"hourOptions\"\n\t\t\t@update:modelValue=\"$emit('update:hour', $event as Time['hour'])\"\n\t\t/>\n\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_minute\"\n\t\t\t:modelValue=\"minute\"\n\t\t\t:options=\"minuteOptions\"\n\t\t\t@update:modelValue=\"$emit('update:minute', $event as Time['minute'])\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { toRaw } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/timeSelectors/types';\nimport type { Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\nimport TimeSelector from '@/components/schedule/schedule/compoents/timeSelector/timeSelector.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\nconst timeKeys = new WeakMap<Time, number>();\nlet nextTimeKey = 0;\n\nconst getTimeKey = (rawOrProxyTime: Time) => {\n\t// time может быть proxy или обычным объектом\n\tconst time = toRaw(rawOrProxyTime);\n\n\tconst existingKey = timeKeys.get(time);\n\tif (existingKey !== undefined) return existingKey;\n\n\tconst key = nextTimeKey++;\n\ttimeKeys.set(time, key);\n\n\treturn key;\n};\n\nconst updateTime = (index: number, patch: Partial<Props['times'][number]>) => {\n\tconst updatedTimes = props.times.map((time, i) => {\n\t\tif (i !== index) return time;\n\n\t\tconst updatedTime = { ...time, ...patch };\n\t\ttimeKeys.set(updatedTime, getTimeKey(time));\n\n\t\treturn updatedTime;\n\t});\n\n\temit('update:times', updatedTimes);\n};\n\nconst addTime = () => {\n\tconst time: Time = { hour: 0, minute: 0 };\n\tconst updatedTimes = [\n\t\ttime,\n\t\t...props.times,\n\t];\n\n\temit('update:times', updatedTimes);\n};\n\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelectors\">\n\t\t<div\n\t\t\tclass=\"top-scheduleTimeSelectors_item\"\n\t\t\tv-for=\"(time, index) in times\"\n\t\t\t:key=\"getTimeKey(time)\"\n\t\t>\n\t\t\t<TimeSelector\n\t\t\t\t:hour=\"time.hour\"\n\t\t\t\t:minute=\"time.minute\"\n\t\t\t\t@update:hour=\"updateTime(index, { hour: $event as Time['hour'] })\"\n\t\t\t\t@update:minute=\"updateTime(index, { minute: $event as Time['minute'] })\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-if=\"index\"\n\t\t\t\t@click=\"$emit('update:times', times.filter((_, i) => i !== index))\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-else\n\t\t\t\tclass=\"top-scheduleTimeSelectors_itemAdd\"\n\t\t\t\t@click=\"addTime\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { toRaw } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/timeSelectors/types';\nimport type { Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\nimport TimeSelector from '@/components/schedule/schedule/compoents/timeSelector/timeSelector.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\nconst timeKeys = new WeakMap<Time, number>();\nlet nextTimeKey = 0;\n\nconst getTimeKey = (rawOrProxyTime: Time) => {\n\t// time может быть proxy или обычным объектом\n\tconst time = toRaw(rawOrProxyTime);\n\n\tconst existingKey = timeKeys.get(time);\n\tif (existingKey !== undefined) return existingKey;\n\n\tconst key = nextTimeKey++;\n\ttimeKeys.set(time, key);\n\n\treturn key;\n};\n\nconst updateTime = (index: number, patch: Partial<Props['times'][number]>) => {\n\tconst updatedTimes = props.times.map((time, i) => {\n\t\tif (i !== index) return time;\n\n\t\tconst updatedTime = { ...time, ...patch };\n\t\ttimeKeys.set(updatedTime, getTimeKey(time));\n\n\t\treturn updatedTime;\n\t});\n\n\temit('update:times', updatedTimes);\n};\n\nconst addTime = () => {\n\tconst time: Time = { hour: 0, minute: 0 };\n\tconst updatedTimes = [\n\t\ttime,\n\t\t...props.times,\n\t];\n\n\temit('update:times', updatedTimes);\n};\n\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelectors\">\n\t\t<div\n\t\t\tclass=\"top-scheduleTimeSelectors_item\"\n\t\t\tv-for=\"(time, index) in times\"\n\t\t\t:key=\"getTimeKey(time)\"\n\t\t>\n\t\t\t<TimeSelector\n\t\t\t\t:hour=\"time.hour\"\n\t\t\t\t:minute=\"time.minute\"\n\t\t\t\t@update:hour=\"updateTime(index, { hour: $event as Time['hour'] })\"\n\t\t\t\t@update:minute=\"updateTime(index, { minute: $event as Time['minute'] })\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-if=\"index\"\n\t\t\t\t@click=\"$emit('update:times', times.filter((_, i) => i !== index))\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-else\n\t\t\t\tclass=\"top-scheduleTimeSelectors_itemAdd\"\n\t\t\t\t@click=\"addTime\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"schedule.js","names":["$emit","$slots","$i18n","$emit","$i18n","$i18n","$emit","$i18n","$emit","$emit","$emit"],"sources":["../../src/components/schedule/schedule/schedule.vue","../../src/components/schedule/schedule/schedule.vue","../../src/components/schedule/schedule/compoents/container/container.vue","../../src/components/schedule/schedule/compoents/calendar/utils.ts","../../src/components/schedule/schedule/compoents/calendar/calendar.vue","../../src/components/schedule/schedule/compoents/calendar/calendar.vue","../../src/components/schedule/schedule/compoents/email/selector/selector.vue","../../src/components/schedule/schedule/compoents/email/selector/selector.vue","../../src/components/schedule/schedule/compoents/email/email.vue","../../src/components/schedule/schedule/compoents/email/email.vue","../../src/components/schedule/schedule/compoents/reportSend/reportSend.vue","../../src/components/schedule/schedule/compoents/reportSend/reportSend.vue","../../src/components/schedule/schedule/compoents/timeSelector/timeSelector.vue","../../src/components/schedule/schedule/compoents/timeSelector/timeSelector.vue","../../src/components/schedule/schedule/compoents/timeSelectors/timeSelectors.vue","../../src/components/schedule/schedule/compoents/timeSelectors/timeSelectors.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport TopSelect from '@/components/forms/select/select.vue';\nimport type { Props, Emits, TriggerType } from '@/components/schedule/schedule/types';\nimport { useI18n } from '@/core/plugins/i18n';\n\ndefineOptions({\n\tname: 'TopSchedule',\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttriggerType: 'onDemand',\n});\n\ndefineEmits<Emits>();\n\nconst i18n = useI18n();\nconst labelByStyling = {\n\t'go': i18n.Projects.Checks,\n\t'report': i18n.Projects.Reports,\n\t'neutral': '',\n};\nconst title = props.title ?? labelByStyling[props.styling];\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-schedule': true,\n\t\t\t[`top-schedule-style_${styling}`]: true,\n\t\t}\"\n\t>\n\t\t<div class=\"top-schedule_header\">\n\t\t\t<div class=\"top-schedule_headerTitle\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\n\t\t\t<TopSelect\n\t\t\t\tclass=\"top-schedule_headerTriggerType\"\n\t\t\t\t:modelValue=\"triggerType\"\n\t\t\t\t@update:modelValue=\"$emit('update:triggerType', $event as TriggerType)\"\n\t\t\t\t:options=\"triggerTypeOptions\"\n\t\t\t\tsize=\"s\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"triggerType !== 'onDemand' && $slots.body\"\n\t\t\tclass=\"top-schedule_body\"\n\t\t>\n\t\t\t<slot name=\"body\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport TopSelect from '@/components/forms/select/select.vue';\nimport type { Props, Emits, TriggerType } from '@/components/schedule/schedule/types';\nimport { useI18n } from '@/core/plugins/i18n';\n\ndefineOptions({\n\tname: 'TopSchedule',\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttriggerType: 'onDemand',\n});\n\ndefineEmits<Emits>();\n\nconst i18n = useI18n();\nconst labelByStyling = {\n\t'go': i18n.Projects.Checks,\n\t'report': i18n.Projects.Reports,\n\t'neutral': '',\n};\nconst title = props.title ?? labelByStyling[props.styling];\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-schedule': true,\n\t\t\t[`top-schedule-style_${styling}`]: true,\n\t\t}\"\n\t>\n\t\t<div class=\"top-schedule_header\">\n\t\t\t<div class=\"top-schedule_headerTitle\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\n\t\t\t<TopSelect\n\t\t\t\tclass=\"top-schedule_headerTriggerType\"\n\t\t\t\t:modelValue=\"triggerType\"\n\t\t\t\t@update:modelValue=\"$emit('update:triggerType', $event as TriggerType)\"\n\t\t\t\t:options=\"triggerTypeOptions\"\n\t\t\t\tsize=\"s\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"triggerType !== 'onDemand' && $slots.body\"\n\t\t\tclass=\"top-schedule_body\"\n\t\t>\n\t\t\t<slot name=\"body\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<template>\n\t<div class=\"top-schedule_bodyContainer\">\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","import type { Day, Props } from './types';\nimport { useI18n } from '@/core/app';\n\n/**\n * Количество дней в месяце\n */\nexport const COUNT_DAYS_IN_MONTHS = 27;\n\n/**\n * Количество дней в неделе\n */\nexport const COUNT_DAYS_IN_WEEK = 7;\n\nexport const genDaysByCalendarMode = (mode: Props['mode']): Day[] => {\n\tconst i18n = useI18n();\n\n\tswitch (mode) {\n\t\tcase 'dayOfMonth': {\n\t\t\tconst days: Day[] = Array.from({ length: COUNT_DAYS_IN_MONTHS }, (_, index) => ({\n\t\t\t\tvalue: String(index + 1) as Day['value'],\n\t\t\t\ttitle: String(index + 1),\n\t\t\t}));\n\n\t\t\tdays.push({\n\t\t\t\tvalue: 'LAST_OF_MONTH',\n\t\t\t\ttitle: '',\n\t\t\t\tisIcon: true,\n\t\t\t});\n\n\t\t\treturn days;\n\t\t}\n\n\t\tcase 'dayOfWeek': {\n\t\t\treturn [\n\t\t\t\t{ value: 'MONDAY', title: i18n.Calendar.Dw_1 },\n\t\t\t\t{ value: 'TUESDAY', title: i18n.Calendar.Dw_2 },\n\t\t\t\t{ value: 'WEDNESDAY', title: i18n.Calendar.Dw_3 },\n\t\t\t\t{ value: 'THURSDAY', title: i18n.Calendar.Dw_4 },\n\t\t\t\t{ value: 'FRIDAY', title: i18n.Calendar.Dw_5 },\n\t\t\t\t{ value: 'SATURDAY', title: i18n.Calendar.Dw_6 },\n\t\t\t\t{ value: 'SUNDAY', title: i18n.Calendar.Dw_7 },\n\t\t\t];\n\t\t}\n\t}\n};\n","<script setup lang=\"ts\">\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/calendar/types';\nimport { COUNT_DAYS_IN_MONTHS, COUNT_DAYS_IN_WEEK, genDaysByCalendarMode } from '@/components/schedule/schedule/compoents/calendar/utils';\nimport { numberEnding } from '@/core/utils/string';\nimport { computed } from 'vue';\nimport { useI18n } from '@/core/app';\n\nconst i18n = useI18n();\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst selectedDays = computed<Props['modelValue']>({\n\tget: () => props.modelValue,\n\tset: value => emit('update:modelValue', value),\n});\n\nconst days = computed(() => genDaysByCalendarMode(props.mode));\n\nconst selectedCountLabel = computed(() => {\n\tconst daysCount = selectedDays.value.length;\n\tlet postfix = '';\n\n\tswitch (props.mode) {\n\t\tcase 'dayOfWeek': {\n\t\t\tif (daysCount === COUNT_DAYS_IN_WEEK) return i18n.Common.Every_day;\n\n\t\t\tpostfix = i18n.Common.a_week;\n\n\t\t\tbreak;\n\t\t}\n\t\tcase 'dayOfMonth': {\n\t\t\t// плюс \"последний день месяца\"\n\t\t\tif (daysCount === COUNT_DAYS_IN_MONTHS + 1) return i18n.Common.Every_day;\n\n\t\t\tpostfix = i18n.Common.a_month;\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn `${daysCount} ${numberEnding(\n\t\tdaysCount,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_2,\n\t)} ${postfix}`;\n});\n\nconst isClearAction = computed(() => selectedDays.value.length > 1);\n\nconst toggleAllDays = () => {\n\tselectedDays.value = isClearAction.value ? [] : days.value.map(day => day.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleCalendar\">\n\t\t<div class=\"top-scheduleCalendar_header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleCalendar_headerButton\"\n\t\t\t\t@click=\"toggleAllDays\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t{{ isClearAction ? $i18n.Common.Clear : $i18n.Common.Select_all}}\n\t\t\t</TopButton>\n\t\t</div>\n\n\t\t<div class=\"top-scheduleCalendar_calendar\">\n\t\t\t<label\n\t\t\t\tclass=\"top-scheduleCalendar_calendarDay\"\n\t\t\t\tv-for=\"day in days\"\n\t\t\t\t:key=\"day.value\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayRadio\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"day.value\"\n\t\t\t\t\tv-model=\"selectedDays\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayTitle\"\n\t\t\t\t\t:data-top-icon=\"day.isIcon ? day.title : undefined\"\n\t\t\t\t>\n\t\t\t\t\t<template v-if=\"!day.isIcon\">\n\t\t\t\t\t\t{{ day.title }}\n\t\t\t\t\t</template>\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-scheduleCalendar_selectedCount': true,\n\t\t\t\t'top-error': !selectedDays.length\n\t\t\t}\"\n\t\t>\n\t\t\t{{ selectedCountLabel }}\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/calendar/types';\nimport { COUNT_DAYS_IN_MONTHS, COUNT_DAYS_IN_WEEK, genDaysByCalendarMode } from '@/components/schedule/schedule/compoents/calendar/utils';\nimport { numberEnding } from '@/core/utils/string';\nimport { computed } from 'vue';\nimport { useI18n } from '@/core/app';\n\nconst i18n = useI18n();\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst selectedDays = computed<Props['modelValue']>({\n\tget: () => props.modelValue,\n\tset: value => emit('update:modelValue', value),\n});\n\nconst days = computed(() => genDaysByCalendarMode(props.mode));\n\nconst selectedCountLabel = computed(() => {\n\tconst daysCount = selectedDays.value.length;\n\tlet postfix = '';\n\n\tswitch (props.mode) {\n\t\tcase 'dayOfWeek': {\n\t\t\tif (daysCount === COUNT_DAYS_IN_WEEK) return i18n.Common.Every_day;\n\n\t\t\tpostfix = i18n.Common.a_week;\n\n\t\t\tbreak;\n\t\t}\n\t\tcase 'dayOfMonth': {\n\t\t\t// плюс \"последний день месяца\"\n\t\t\tif (daysCount === COUNT_DAYS_IN_MONTHS + 1) return i18n.Common.Every_day;\n\n\t\t\tpostfix = i18n.Common.a_month;\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn `${daysCount} ${numberEnding(\n\t\tdaysCount,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_0,\n\t\ti18n.Common.time_a_2,\n\t)} ${postfix}`;\n});\n\nconst isClearAction = computed(() => selectedDays.value.length > 1);\n\nconst toggleAllDays = () => {\n\tselectedDays.value = isClearAction.value ? [] : days.value.map(day => day.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleCalendar\">\n\t\t<div class=\"top-scheduleCalendar_header\">\n\t\t\t<slot name=\"header\"></slot>\n\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleCalendar_headerButton\"\n\t\t\t\t@click=\"toggleAllDays\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t>\n\t\t\t\t{{ isClearAction ? $i18n.Common.Clear : $i18n.Common.Select_all}}\n\t\t\t</TopButton>\n\t\t</div>\n\n\t\t<div class=\"top-scheduleCalendar_calendar\">\n\t\t\t<label\n\t\t\t\tclass=\"top-scheduleCalendar_calendarDay\"\n\t\t\t\tv-for=\"day in days\"\n\t\t\t\t:key=\"day.value\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayRadio\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"day.value\"\n\t\t\t\t\tv-model=\"selectedDays\"\n\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\n\t\t\t\t<span\n\t\t\t\t\tclass=\"top-scheduleCalendar_calendarDayTitle\"\n\t\t\t\t\t:data-top-icon=\"day.isIcon ? day.title : undefined\"\n\t\t\t\t>\n\t\t\t\t\t<template v-if=\"!day.isIcon\">\n\t\t\t\t\t\t{{ day.title }}\n\t\t\t\t\t</template>\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-scheduleCalendar_selectedCount': true,\n\t\t\t\t'top-error': !selectedDays.length\n\t\t\t}\"\n\t\t>\n\t\t\t{{ selectedCountLabel }}\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport Core from '@/core/core/core';\nimport { isEmail } from '@/core/utils/check';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/selector/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n});\n\nconst emit = defineEmits<Emits>();\nconst i18n = useI18n();\nconst $ = Core.$;\n\nconst elRootRef = ref<HTMLElement>();\nconst elInputRef = ref<InstanceType<typeof TopInput>>();\nlet elInput: HTMLInputElement | null = null;\nconst autocompleteCache: Record<string, string[]> = {};\n\nconst filterEmails = (emails: string[]) => emails.filter(email => !props.emails.includes(email));\n\nconst submit = (value: unknown = props.modelValue) => {\n\tconst email = String(value).trim();\n\tif (!email) return;\n\tif (!isEmail(email)) {\n\t\tvoid Core.notice(i18n.Common.Enter_valid_email_notice, 'error');\n\n\t\treturn;\n\t}\n\n\temit('submit', email);\n};\n\nconst initAutocomplete = async () => {\n\tawait nextTick();\n\n\telInput = elInputRef.value?.$el.querySelector('input') ?? null;\n\tif (!elInput) return;\n\n\tif (!$?.ui?.autocomplete) {\n\t\tconsole.info('Для работы autocomplete требуется глобальная загрузка jQuery UI Autocomplete');\n\n\t\treturn;\n\t}\n\n\t$(elInput).autocomplete({\n\t\tappendTo: elRootRef.value,\n\t\tminLength: 0,\n\t\tsource: async (request: { term: string }, response: (items: Array<{ label: string, value: string }>) => void) => {\n\t\t\tconst term = request.term;\n\t\t\tif (!(term in autocompleteCache)) {\n\t\t\t\tautocompleteCache[term] = await props.getEmailSuggestions(term);\n\t\t\t}\n\n\t\t\tresponse(filterEmails(autocompleteCache[term]).map(email => ({\n\t\t\t\tlabel: email,\n\t\t\t\tvalue: email,\n\t\t\t})));\n\t\t},\n\t\tselect: (event: Event, ui: { item?: { value: string } }) => {\n\t\t\tif (!ui.item || !elInput) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tsubmit(ui.item.value);\n\t\t\temit('update:modelValue', '');\n\n\t\t\t$(elInput).trigger('focus');\n\t\t},\n\t});\n\n\t$(elInput).attr('autocomplete', 'disabled');\n\t$(elInput).on('focus.scheduleEmailSelector', () => {\n\t\tif (!elInput) return;\n\n\t\t$(elInput).trigger('input');\n\t});\n};\n\nonMounted(() => {\n\tvoid initAutocomplete();\n});\n\nonBeforeUnmount(() => {\n\tif (!$?.ui?.autocomplete || !elInput) return;\n\n\t$(elInput).off('focus.scheduleEmailSelector');\n\t$(elInput).autocomplete('destroy');\n});\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-scheduleEmailSelector\"\n\t\tref=\"elRootRef\"\n\t>\n\t\t<TopInput\n\t\t\tref=\"elInputRef\"\n\t\t\t:modelValue\n\t\t\t@update:modelValue=\"$emit('update:modelValue', $event)\"\n\t\t\t@keydown.enter.prevent=\"submit()\"\n\t\t\t:title=\"$i18n.Common.Enter_email\"\n\t\t\ttype=\"email\"\n\t\t\tsize=\"l\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleEmailSelector_submit\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t\t@click.prevent=\"submit()\"\n\t\t\t/>\n\t\t</TopInput>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, onMounted, ref } from 'vue';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport Core from '@/core/core/core';\nimport { isEmail } from '@/core/utils/check';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/selector/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n});\n\nconst emit = defineEmits<Emits>();\nconst i18n = useI18n();\nconst $ = Core.$;\n\nconst elRootRef = ref<HTMLElement>();\nconst elInputRef = ref<InstanceType<typeof TopInput>>();\nlet elInput: HTMLInputElement | null = null;\nconst autocompleteCache: Record<string, string[]> = {};\n\nconst filterEmails = (emails: string[]) => emails.filter(email => !props.emails.includes(email));\n\nconst submit = (value: unknown = props.modelValue) => {\n\tconst email = String(value).trim();\n\tif (!email) return;\n\tif (!isEmail(email)) {\n\t\tvoid Core.notice(i18n.Common.Enter_valid_email_notice, 'error');\n\n\t\treturn;\n\t}\n\n\temit('submit', email);\n};\n\nconst initAutocomplete = async () => {\n\tawait nextTick();\n\n\telInput = elInputRef.value?.$el.querySelector('input') ?? null;\n\tif (!elInput) return;\n\n\tif (!$?.ui?.autocomplete) {\n\t\tconsole.info('Для работы autocomplete требуется глобальная загрузка jQuery UI Autocomplete');\n\n\t\treturn;\n\t}\n\n\t$(elInput).autocomplete({\n\t\tappendTo: elRootRef.value,\n\t\tminLength: 0,\n\t\tsource: async (request: { term: string }, response: (items: Array<{ label: string, value: string }>) => void) => {\n\t\t\tconst term = request.term;\n\t\t\tif (!(term in autocompleteCache)) {\n\t\t\t\tautocompleteCache[term] = await props.getEmailSuggestions(term);\n\t\t\t}\n\n\t\t\tresponse(filterEmails(autocompleteCache[term]).map(email => ({\n\t\t\t\tlabel: email,\n\t\t\t\tvalue: email,\n\t\t\t})));\n\t\t},\n\t\tselect: (event: Event, ui: { item?: { value: string } }) => {\n\t\t\tif (!ui.item || !elInput) return;\n\n\t\t\tevent.preventDefault();\n\t\t\tsubmit(ui.item.value);\n\t\t\temit('update:modelValue', '');\n\n\t\t\t$(elInput).trigger('focus');\n\t\t},\n\t});\n\n\t$(elInput).attr('autocomplete', 'disabled');\n\t$(elInput).on('focus.scheduleEmailSelector', () => {\n\t\tif (!elInput) return;\n\n\t\t$(elInput).trigger('input');\n\t});\n};\n\nonMounted(() => {\n\tvoid initAutocomplete();\n});\n\nonBeforeUnmount(() => {\n\tif (!$?.ui?.autocomplete || !elInput) return;\n\n\t$(elInput).off('focus.scheduleEmailSelector');\n\t$(elInput).autocomplete('destroy');\n});\n</script>\n\n<template>\n\t<div\n\t\tclass=\"top-scheduleEmailSelector\"\n\t\tref=\"elRootRef\"\n\t>\n\t\t<TopInput\n\t\t\tref=\"elInputRef\"\n\t\t\t:modelValue\n\t\t\t@update:modelValue=\"$emit('update:modelValue', $event)\"\n\t\t\t@keydown.enter.prevent=\"submit()\"\n\t\t\t:title=\"$i18n.Common.Enter_email\"\n\t\t\ttype=\"email\"\n\t\t\tsize=\"l\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\tclass=\"top-scheduleEmailSelector_submit\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t\t@click.prevent=\"submit()\"\n\t\t\t/>\n\t\t</TopInput>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/types';\nimport ScheduleEmailSelector from '@/components/schedule/schedule/compoents/email/selector/selector.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n\tmaxEmailsCount: -1,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst value = ref('');\n\nconst addEmail = (email: string) => {\n\tconst preparedEmail = email.trim();\n\tif (!preparedEmail || props.emails.includes(preparedEmail)) {\n\t\tvalue.value = '';\n\n\t\treturn;\n\t}\n\n\temit('add:email', preparedEmail);\n\n\tvalue.value = '';\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleEmail\">\n\t\t<div class=\"top-scheduleEmail_title\">\n\t\t\t{{ $i18n.Projects.Reports_send_to_address }} E-mail:\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"!(maxEmailsCount && emails.length === maxEmailsCount)\"\n\t\t\tclass=\"top-scheduleEmail_selector\"\n\t\t>\n\t\t\t<ScheduleEmailSelector\n\t\t\t\tv-model=\"value\"\n\t\t\t\t:getEmailSuggestions=\"getEmailSuggestions\"\n\t\t\t\t:emails=\"emails\"\n\t\t\t\t@submit=\"addEmail\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"emails.length\"\n\t\t\tclass=\"top-scheduleEmail_emails\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleEmail_emailsItem\"\n\t\t\t\tv-for=\"email in emails\"\n\t\t\t\t:key=\"email\"\n\t\t\t>\n\t\t\t\t{{ email }}\n\n\t\t\t\t<TopButton\n\t\t\t\t\t@click=\"$emit('remove:email', email)\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/email/types';\nimport ScheduleEmailSelector from '@/components/schedule/schedule/compoents/email/selector/selector.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\temails: () => [],\n\tgetEmailSuggestions: () => [],\n\tmaxEmailsCount: -1,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst value = ref('');\n\nconst addEmail = (email: string) => {\n\tconst preparedEmail = email.trim();\n\tif (!preparedEmail || props.emails.includes(preparedEmail)) {\n\t\tvalue.value = '';\n\n\t\treturn;\n\t}\n\n\temit('add:email', preparedEmail);\n\n\tvalue.value = '';\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleEmail\">\n\t\t<div class=\"top-scheduleEmail_title\">\n\t\t\t{{ $i18n.Projects.Reports_send_to_address }} E-mail:\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"!(maxEmailsCount && emails.length === maxEmailsCount)\"\n\t\t\tclass=\"top-scheduleEmail_selector\"\n\t\t>\n\t\t\t<ScheduleEmailSelector\n\t\t\t\tv-model=\"value\"\n\t\t\t\t:getEmailSuggestions=\"getEmailSuggestions\"\n\t\t\t\t:emails=\"emails\"\n\t\t\t\t@submit=\"addEmail\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div\n\t\t\tv-if=\"emails.length\"\n\t\t\tclass=\"top-scheduleEmail_emails\"\n\t\t>\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleEmail_emailsItem\"\n\t\t\t\tv-for=\"email in emails\"\n\t\t\t\t:key=\"email\"\n\t\t\t>\n\t\t\t\t{{ email }}\n\n\t\t\t\t<TopButton\n\t\t\t\t\t@click=\"$emit('remove:email', email)\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Emits, Props, ReportChannelSource } from '@/components/schedule/schedule/compoents/reportSend/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tconnectors: () => [],\n});\ndefineEmits<Emits>();\n\nconst hasChannel = (source: ReportChannelSource) => props.channels.some(channel => channel.source === source);\n\nconst sourceIconBySource: Record<ReportChannelSource, string> = {\n\tinformer: '',\n\ttelegram: '',\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleReportSend\">\n\t\t<div class=\"top-scheduleReportSend_title\">\n\t\t\t{{ $i18n.Projects.Reports_send }}\n\t\t</div>\n\n\t\t<div class=\"top-scheduleReportSend_channels\">\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\tv-for=\"channel in channels\"\n\t\t\t\t:key=\"`${channel.source}-${channel.id}`\"\n\t\t\t>\n\t\t\t\t<div class=\"top-scheduleReportSend_channelInfo\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoIcon\"\n\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[channel.source]\"\n\t\t\t\t\t></div>\n\n\t\t\t\t\t<div class=\"top-scheduleReportSend_channelInfoLabel\">\n\t\t\t\t\t\t{{ channel.label }}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<TopButton\n\t\t\t\t\t\tv-if=\"channel.settingLink\"\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoSettings\"\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t:href=\"channel.settingLink\"\n\t\t\t\t\t\ticon=\"\"\n\t\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t></TopButton>\n\t\t\t\t</div>\n\n\t\t\t\t<TopSwitcher\n\t\t\t\t\t:modelValue=\"channel.selected\"\n\t\t\t\t\t@update:modelValue=\"$emit('update:channelSelected', {\n\t\t\t\t\t\tid: channel.id,\n\t\t\t\t\t\tsource: channel.source,\n\t\t\t\t\t\tselected: $event as boolean,\n\t\t\t\t\t})\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<template\n\t\t\t\tv-for=\"connector in connectors\"\n\t\t\t\t:key=\"connector.source\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!hasChannel(connector.source)\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"top-scheduleReportSend_channelInfo\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoIcon\"\n\t\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[connector.source]\"\n\t\t\t\t\t\t></div>\n\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoLabel top-scheduleReportSend_channelInfoLink\"\n\t\t\t\t\t\t\t:href=\"connector.connectLink\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ connector.connectLabel }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Emits, Props, ReportChannelSource } from '@/components/schedule/schedule/compoents/reportSend/types';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tconnectors: () => [],\n});\ndefineEmits<Emits>();\n\nconst hasChannel = (source: ReportChannelSource) => props.channels.some(channel => channel.source === source);\n\nconst sourceIconBySource: Record<ReportChannelSource, string> = {\n\tinformer: '',\n\ttelegram: '',\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleReportSend\">\n\t\t<div class=\"top-scheduleReportSend_title\">\n\t\t\t{{ $i18n.Projects.Reports_send }}\n\t\t</div>\n\n\t\t<div class=\"top-scheduleReportSend_channels\">\n\t\t\t<div\n\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\tv-for=\"channel in channels\"\n\t\t\t\t:key=\"`${channel.source}-${channel.id}`\"\n\t\t\t>\n\t\t\t\t<div class=\"top-scheduleReportSend_channelInfo\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoIcon\"\n\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[channel.source]\"\n\t\t\t\t\t></div>\n\n\t\t\t\t\t<div class=\"top-scheduleReportSend_channelInfoLabel\">\n\t\t\t\t\t\t{{ channel.label }}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<TopButton\n\t\t\t\t\t\tv-if=\"channel.settingLink\"\n\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoSettings\"\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t:href=\"channel.settingLink\"\n\t\t\t\t\t\ticon=\"\"\n\t\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t></TopButton>\n\t\t\t\t</div>\n\n\t\t\t\t<TopSwitcher\n\t\t\t\t\t:modelValue=\"channel.selected\"\n\t\t\t\t\t@update:modelValue=\"$emit('update:channelSelected', {\n\t\t\t\t\t\tid: channel.id,\n\t\t\t\t\t\tsource: channel.source,\n\t\t\t\t\t\tselected: $event as boolean,\n\t\t\t\t\t})\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<template\n\t\t\t\tv-for=\"connector in connectors\"\n\t\t\t\t:key=\"connector.source\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"!hasChannel(connector.source)\"\n\t\t\t\t\tclass=\"top-scheduleReportSend_channel\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"top-scheduleReportSend_channelInfo\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoIcon\"\n\t\t\t\t\t\t\t:data-top-icon=\"sourceIconBySource[connector.source]\"\n\t\t\t\t\t\t></div>\n\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclass=\"top-scheduleReportSend_channelInfoLabel top-scheduleReportSend_channelInfoLink\"\n\t\t\t\t\t\t\t:href=\"connector.connectLink\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ connector.connectLabel }}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, Emits, Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\n\ndefineProps<Props>();\ndefineEmits<Emits>();\n\nconst hourOptions = Array.from({ length: 24 }, (_, index) => ({\n\tvalue: String(index),\n\ttitle: String(index).padStart(2, '0'),\n}));\nconst minuteOptions = [\n\t{\n\t\tvalue: '0',\n\t\ttitle: '00',\n\t},\n\t{\n\t\tvalue: '15',\n\t\ttitle: '15',\n\t},\n\t{\n\t\tvalue: '30',\n\t\ttitle: '30',\n\t},\n\t{\n\t\tvalue: '45',\n\t\ttitle: '45',\n\t},\n];\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelector\">\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_hour\"\n\t\t\t:modelValue=\"hour\"\n\t\t\t:options=\"hourOptions\"\n\t\t\t@update:modelValue=\"$emit('update:hour', $event as Time['hour'])\"\n\t\t/>\n\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_minute\"\n\t\t\t:modelValue=\"minute\"\n\t\t\t:options=\"minuteOptions\"\n\t\t\t@update:modelValue=\"$emit('update:minute', $event as Time['minute'])\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, Emits, Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\n\ndefineProps<Props>();\ndefineEmits<Emits>();\n\nconst hourOptions = Array.from({ length: 24 }, (_, index) => ({\n\tvalue: String(index),\n\ttitle: String(index).padStart(2, '0'),\n}));\nconst minuteOptions = [\n\t{\n\t\tvalue: '0',\n\t\ttitle: '00',\n\t},\n\t{\n\t\tvalue: '15',\n\t\ttitle: '15',\n\t},\n\t{\n\t\tvalue: '30',\n\t\ttitle: '30',\n\t},\n\t{\n\t\tvalue: '45',\n\t\ttitle: '45',\n\t},\n];\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelector\">\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_hour\"\n\t\t\t:modelValue=\"hour\"\n\t\t\t:options=\"hourOptions\"\n\t\t\t@update:modelValue=\"$emit('update:hour', $event as Time['hour'])\"\n\t\t/>\n\n\t\t<TopSelect\n\t\t\tclass=\"top-scheduleTimeSelector_minute\"\n\t\t\t:modelValue=\"minute\"\n\t\t\t:options=\"minuteOptions\"\n\t\t\t@update:modelValue=\"$emit('update:minute', $event as Time['minute'])\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { toRaw } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/timeSelectors/types';\nimport type { Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\nimport TimeSelector from '@/components/schedule/schedule/compoents/timeSelector/timeSelector.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\nconst timeKeys = new WeakMap<Time, number>();\nlet nextTimeKey = 0;\n\nconst getTimeKey = (rawOrProxyTime: Time) => {\n\t// time может быть proxy или обычным объектом\n\tconst time = toRaw(rawOrProxyTime);\n\n\tconst existingKey = timeKeys.get(time);\n\tif (existingKey !== undefined) return existingKey;\n\n\tconst key = nextTimeKey++;\n\ttimeKeys.set(time, key);\n\n\treturn key;\n};\n\nconst updateTime = (index: number, patch: Partial<Props['times'][number]>) => {\n\tconst updatedTimes = props.times.map((time, i) => {\n\t\tif (i !== index) return time;\n\n\t\tconst updatedTime = { ...time, ...patch };\n\t\ttimeKeys.set(updatedTime, getTimeKey(time));\n\n\t\treturn updatedTime;\n\t});\n\n\temit('update:times', updatedTimes);\n};\n\nconst addTime = () => {\n\tconst time: Time = {\n\t\thour: '0',\n\t\tminute: '0',\n\t};\n\n\tconst updatedTimes = [\n\t\ttime,\n\t\t...props.times,\n\t];\n\n\temit('update:times', updatedTimes);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelectors\">\n\t\t<div\n\t\t\tclass=\"top-scheduleTimeSelectors_item\"\n\t\t\tv-for=\"(time, index) in times\"\n\t\t\t:key=\"getTimeKey(time)\"\n\t\t>\n\t\t\t<TimeSelector\n\t\t\t\t:hour=\"time.hour\"\n\t\t\t\t:minute=\"time.minute\"\n\t\t\t\t@update:hour=\"updateTime(index, { hour: $event as Time['hour'] })\"\n\t\t\t\t@update:minute=\"updateTime(index, { minute: $event as Time['minute'] })\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-if=\"index\"\n\t\t\t\t@click=\"$emit('update:times', times.filter((_, i) => i !== index))\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-else\n\t\t\t\tclass=\"top-scheduleTimeSelectors_itemAdd\"\n\t\t\t\t@click=\"addTime\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n","<script setup lang=\"ts\">\nimport { toRaw } from 'vue';\nimport type { Props, Emits } from '@/components/schedule/schedule/compoents/timeSelectors/types';\nimport type { Time } from '@/components/schedule/schedule/compoents/timeSelector/types';\nimport TimeSelector from '@/components/schedule/schedule/compoents/timeSelector/timeSelector.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\nconst timeKeys = new WeakMap<Time, number>();\nlet nextTimeKey = 0;\n\nconst getTimeKey = (rawOrProxyTime: Time) => {\n\t// time может быть proxy или обычным объектом\n\tconst time = toRaw(rawOrProxyTime);\n\n\tconst existingKey = timeKeys.get(time);\n\tif (existingKey !== undefined) return existingKey;\n\n\tconst key = nextTimeKey++;\n\ttimeKeys.set(time, key);\n\n\treturn key;\n};\n\nconst updateTime = (index: number, patch: Partial<Props['times'][number]>) => {\n\tconst updatedTimes = props.times.map((time, i) => {\n\t\tif (i !== index) return time;\n\n\t\tconst updatedTime = { ...time, ...patch };\n\t\ttimeKeys.set(updatedTime, getTimeKey(time));\n\n\t\treturn updatedTime;\n\t});\n\n\temit('update:times', updatedTimes);\n};\n\nconst addTime = () => {\n\tconst time: Time = {\n\t\thour: '0',\n\t\tminute: '0',\n\t};\n\n\tconst updatedTimes = [\n\t\ttime,\n\t\t...props.times,\n\t];\n\n\temit('update:times', updatedTimes);\n};\n</script>\n\n<template>\n\t<div class=\"top-scheduleTimeSelectors\">\n\t\t<div\n\t\t\tclass=\"top-scheduleTimeSelectors_item\"\n\t\t\tv-for=\"(time, index) in times\"\n\t\t\t:key=\"getTimeKey(time)\"\n\t\t>\n\t\t\t<TimeSelector\n\t\t\t\t:hour=\"time.hour\"\n\t\t\t\t:minute=\"time.minute\"\n\t\t\t\t@update:hour=\"updateTime(index, { hour: $event as Time['hour'] })\"\n\t\t\t\t@update:minute=\"updateTime(index, { minute: $event as Time['minute'] })\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-if=\"index\"\n\t\t\t\t@click=\"$emit('update:times', times.filter((_, i) => i !== index))\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\n\t\t\t<TopButton\n\t\t\t\tv-else\n\t\t\t\tclass=\"top-scheduleTimeSelectors_itemAdd\"\n\t\t\t\t@click=\"addTime\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\ticon=\"\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n@import \"./style.css\";\n</style>\n"],"mappings":"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"}
@@ -19,14 +19,5 @@ export interface Props {
19
19
  * Время в формате Y-m-d H:i:s, когда пользователь был онлайн
20
20
  */
21
21
  lastActiveTime?: string;
22
- /**
23
- * Объект со списком перевода Online и LastSeen
24
- */
25
- i18n?: I18n;
26
22
  }
27
- type I18n = {
28
- Online: string;
29
- LastSeen: string;
30
- };
31
23
  export type Size = 24 | 28 | 40 | 64;
32
- export {};
@@ -406,6 +406,8 @@ export declare const useMenu: <T extends Item = Item>(model: Ref<Props<T>["model
406
406
  } | undefined;
407
407
  } | undefined;
408
408
  }[]>;
409
+ showMoreLocalItems: () => void;
410
+ resetItemsRenderLimit: () => void;
409
411
  selectItem: (item: Item) => void;
410
412
  selectNextItem: () => void;
411
413
  deleteItemByItem: (item: Item) => Promise<void>;
@@ -19,6 +19,14 @@ export interface Props<T extends Item = Item> {
19
19
  * Не указывайте одновременно `items` и `api` запрос на получение тех же `items`, в этом нет смысла
20
20
  */
21
21
  items?: T[];
22
+ /**
23
+ * Количество элементов отображаемых при первом рендере
24
+ * При прокрутке списка следующие элементы загружаются такими же порциями
25
+ *
26
+ * Только для элементов загружаемых локально
27
+ * Если не передан — выводится весь список сразу
28
+ */
29
+ itemsChunkSize?: number;
22
30
  /**
23
31
  * Форсировать состояние загрузки, если в отоборажаемом списке нет элементов
24
32
  *
@@ -1,6 +1,6 @@
1
1
  import { ForMode, Region, Searcher, SearcherByKey } from '../types';
2
2
  import { AsyncTopDialogHandle } from '../../../dialog/dialog/composables/asyncDialogHandle';
3
- import { TopDialogComponent } from '../../../dialog/dialog/composables/types';
3
+ import { DefineComponent } from 'vue';
4
4
  /**
5
5
  * Генерация Map ПС с Map регионов из массива searchers
6
6
  * - ключ для ПС - searcherKey
@@ -28,4 +28,4 @@ export declare const findRegion: (forMode: ForMode, searchRegion: Partial<Region
28
28
  *
29
29
  * @see import('../dialog_regionSelectorRegions/types').Props
30
30
  */
31
- export declare const dialogRegionSelector: AsyncTopDialogHandle<TopDialogComponent>;
31
+ export declare const dialogRegionSelector: AsyncTopDialogHandle<DefineComponent<{}, {}, any>>;
@@ -1,8 +1,13 @@
1
1
  import { TriggerType } from '../../types';
2
+ import { components as DayComponents } from 'topvisor-openapi/src/ts/Schedule_2/Types/Day';
3
+ type ScheduleDay = DayComponents['schemas']['Schedule_2.Types.Day'];
2
4
  export interface Props {
3
- modelValue: Array<string | number>;
4
5
  /**
5
- * Режим отображения календаря
6
+ * Выбранные дни недели или дни месяца
7
+ */
8
+ modelValue: ScheduleDay[];
9
+ /**
10
+ * Режим отображения календаря: дни недели или дни месяца
6
11
  */
7
12
  mode: Extract<TriggerType, 'dayOfWeek' | 'dayOfMonth'>;
8
13
  }
@@ -10,10 +15,11 @@ export interface Emits {
10
15
  (e: 'update:modelValue', value: Props['modelValue']): void;
11
16
  }
12
17
  export type Day = {
13
- value: number | string;
18
+ value: ScheduleDay;
14
19
  title: string;
15
20
  /**
16
21
  * Является ли title - иконкой
17
22
  */
18
23
  isIcon?: boolean;
19
24
  };
25
+ export {};
@@ -2,7 +2,7 @@ import { Day, Props } from './types';
2
2
  /**
3
3
  * Количество дней в месяце
4
4
  */
5
- export declare const COUNT_DAYS_IN_MONTS = 27;
5
+ export declare const COUNT_DAYS_IN_MONTHS = 27;
6
6
  /**
7
7
  * Количество дней в неделе
8
8
  */
@@ -1,6 +1,9 @@
1
1
  export type EmailSuggestionsGetter = (search: string) => string[] | Promise<string[]>;
2
2
  export interface Props {
3
3
  emails: string[];
4
+ /**
5
+ * Функция для автозаполнения при вводе значения в полях ввода email
6
+ */
4
7
  getEmailSuggestions?: EmailSuggestionsGetter;
5
8
  /**
6
9
  * Максимальное число email
@@ -12,12 +12,21 @@ export type Connector = {
12
12
  connectLink: string;
13
13
  };
14
14
  export interface Props {
15
+ /**
16
+ * Каналы отправки отчёта
17
+ */
15
18
  channels: Channel[];
19
+ /**
20
+ * Настройки коннекторов для подключюения новых каналов
21
+ */
16
22
  connectors?: Connector[];
17
23
  }
18
24
  export type ChannelSelectedChange = Pick<Channel, 'id' | 'source'> & {
19
25
  selected: boolean;
20
26
  };
21
27
  export interface Emits {
28
+ /**
29
+ * Произошла смена выбранных каналов отравки отчёта
30
+ */
22
31
  (e: 'update:channelSelected', value: ChannelSelectedChange): void;
23
32
  }
@@ -1,11 +1,17 @@
1
- export type Hour = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23;
2
- export type Minute = 0 | 15 | 30 | 45;
3
- export type Time = {
4
- hour: Hour;
5
- minute: Minute;
6
- };
1
+ import { components as TimeComponents } from 'topvisor-openapi/src/ts/Schedule_2/Types/Time';
2
+ import { components as HourComponents } from 'topvisor-openapi/src/ts/Schedule_2/Types/Hour';
3
+ import { components as MinuteComponents } from 'topvisor-openapi/src/ts/Schedule_2/Types/Minute';
4
+ export type Time = TimeComponents['schemas']['Schedule_2.Types.Time'];
5
+ export type Hour = HourComponents['schemas']['Schedule_2.Types.Hour'];
6
+ export type Minute = MinuteComponents['schemas']['Schedule_2.Types.Minute'];
7
7
  export interface Props {
8
+ /**
9
+ * Выбранный час / период времени
10
+ */
8
11
  hour: Time['hour'];
12
+ /**
13
+ * Выбранная минута / период времени
14
+ */
9
15
  minute: Time['minute'];
10
16
  }
11
17
  export interface Emits {
@@ -1,5 +1,8 @@
1
1
  import { Time } from '../timeSelector/types';
2
2
  export interface Props {
3
+ /**
4
+ * Кортежи времени
5
+ */
3
6
  times: Time[];
4
7
  }
5
8
  export interface Emits {
@@ -1,25 +1,70 @@
1
1
  import { Option as TopSelectOption } from '../../forms/select/types';
2
+ import { components as TypeMethodComponents } from 'topvisor-openapi/src/ts/Schedule_2/Types/TypeMethod';
3
+ /**
4
+ * Режим вывода календаря
5
+ */
2
6
  export type TriggerType = 'onDemand' | 'dayOfWeek' | 'dayOfMonth' | 'afterYandexUpdated' | 'afterCheck';
3
7
  export type TriggerTypeOption = Omit<TopSelectOption, 'value'> & {
4
8
  value: TriggerType;
5
9
  };
6
10
  export interface Props {
7
- styling: 'track' | 'report' | 'neutral';
8
11
  /**
9
- * Тип тригера
12
+ * Стили для компонента
13
+ *
14
+ * - `go`: Календарь запуска инструмента
15
+ * - `report`: Календарь рассылки отчетов
16
+ * - `neutral`: Другое
17
+ */
18
+ styling: TypeMethodComponents['schemas']['Schedule_2.Types.TypeMethod'] | 'neutral';
19
+ /**
20
+ * Выбранный режим календаря
21
+ *
22
+ * - По дням недели
23
+ * - По дням месяца
24
+ * - После апдейтов
25
+ * - После проверки
26
+ *
27
+ * todo: Сдлеать modelValue
28
+ * todo: Рекомендую переименовать в `mode`, имя короткое, определяет вид вывода календаря, а не рельное значение `times`
10
29
  */
11
30
  triggerType: TriggerType;
31
+ /**
32
+ * Дотсупные режимы календаря
33
+ *
34
+ * todo: Исползовать вместо triggerTypeOptions
35
+ */
36
+ triggerTypes?: ['onDemand', 'onDayOfWeek', 'onDayOfMonth', 'afterYandexUpdated', 'afterCheck'];
12
37
  /**
13
38
  * Типы тригера
39
+ *
40
+ * todo: Переписать на triggerTypes
14
41
  */
15
42
  triggerTypeOptions: TriggerTypeOption[];
16
43
  /**
17
- * Кастомный заголовок.
44
+ * Кастомный заголовок
18
45
  *
19
46
  * Имеет приоритет над дефолтными заголовками
20
47
  */
21
48
  title?: string;
22
49
  }
50
+ /**
51
+ * @todo: реализовать слоты вместо container.vue, сам container.vue можно по условию исползовать внутри компонента при укаазнии слота
52
+ *
53
+ * - Если в дизайне нужен разделитель слотов, то можно добавить компонент Delimiter и использовать его для разделения
54
+ * контент им, это удобнее, чем
55
+ * - Календарь должен вставялться всегда в завсисимости от выбранного `triggerTypes` в самом компоненте, его кастомаизпация из родительского
56
+ * компонента не предусмотрена
57
+ */
58
+ export interface Slots {
59
+ /**
60
+ * Слот для вставки проивзольного контента после календаря
61
+ */
62
+ settings?(props: {}): any;
63
+ /**
64
+ * Слот для вставки футера
65
+ */
66
+ footer?(props: {}): any;
67
+ }
23
68
  export interface Emits {
24
69
  (e: 'update:triggerType', value: TriggerType): void;
25
70
  }
@@ -1,6 +1,6 @@
1
1
  import { DirectiveBinding, VNode } from 'vue';
2
2
  interface HTMLElementWithSwimUpOptions extends HTMLElement {
3
- directiveSwipUpOptions: {
3
+ directiveSwimUpOptions: {
4
4
  distance: number;
5
5
  percent: number;
6
6
  };
@@ -4,9 +4,9 @@ import { default as coreDefaultOptions } from '../core/options';
4
4
  import { Options as TopPopupOptions } from '../../components/popup/lib/worker';
5
5
  import { default as TopDialogs } from '../../components/dialog/dialog/dialogs/dialogs.vue';
6
6
  import { TopDialogOptions } from '../../components/dialog/lib/types';
7
- import { App } from 'vue';
7
+ import { DefineComponent, App } from 'vue';
8
8
  import * as Forms from '../../components/forms/forms';
9
- declare const TopNotice: any;
9
+ declare const TopNotice: DefineComponent<{}, {}, any>;
10
10
  declare global {
11
11
  const vd: typeof console.log;
12
12
  }
@@ -1,2 +1,2 @@
1
- define([`require`,`exports`,`../.chunks/forms-CY5MOh7a.amd`,`../utils/system.amd`,`../utils/route.amd`,`../.chunks/store-DjQAOnrn.amd`,`../.chunks/popup-3cwJ8Hev.amd`,`vue`,`../require/css.amd!../assets/tabsView.css`],function(e,t,n,r,i,a,o,s){"use strict";if(c===void 0)var c=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.TopTabsViewMenuTitle=t.TopTabsViewMenuItem=t.TopTabsView=void 0;var l=(e,t)=>`top:${String(e)}:${t}`,u={loadLocalStorge:(e,t)=>{if(!t.$id)return;let n=l(e,t.$id);try{let r=JSON.parse(localStorage.getItem(n));typeof r==typeof t[e]&&(t[e]=r)}catch{console.warn(Error(`В localStorage[${n}] не корректный json`))}},addSaverLocalStorge:(e,t)=>{if(!t.$id)return;let n=l(e,t.$id);(0,s.watch)(()=>t[e],()=>{localStorage.setItem(n,JSON.stringify(t[e]))},{immediate:!0})}},d=new Set;addEventListener(`popstate`,e=>{d.forEach(t=>t(e))});var f=Symbol(),p=(e,t)=>{let r=(0,a.t)(f,()=>({showMenuInPopup:(0,s.computed)(()=>e.showMenuInPopup??n.O.state.isMobile),pageMod:(0,s.computed)(()=>e.pageMod),isShort:(0,s.ref)(!1),activeItemName:t,component:(0,s.ref)(void 0),scrollable:(0,s.ref)(!0)}),e.idState);if(e.isShortable){let e=`isShort`;u.loadLocalStorge(e,r),u.addSaverLocalStorge(e,r)}return r.$id&&d.add(e=>{t.value=(0,i.getHash)(r.$id)}),r},m=()=>(0,a.r)(f),h={key:1,class:`top-ellipsis`},g=(0,s.defineComponent)({__name:`menuItem`,props:{name:{},href:{},icon:{},disabled:{type:Boolean},component:{default:void 0},scrollable:{type:Boolean,default:!0}},setup(e){let t=e,n=m(),r=(0,s.computed)(()=>t.name&&n.$id?(0,i.genHash)(n.$id,t.name):t.href),a=(0,s.computed)(()=>n.showMenuInPopup?o.o:r.value?`a`:`button`),c=e=>{!t.href&&r.value&&e.preventDefault(),t.name&&(n.activeItemName=t.name)};return(t,i)=>((0,s.openBlock)(),(0,s.createBlock)((0,s.resolveDynamicComponent)(a.value),{target:`_self`,class:(0,s.normalizeClass)({"top-tabsView_menuItem":!(0,s.unref)(n).showMenuInPopup,"top-active":e.name&&(0,s.unref)(n).activeItemName===e.name,"top-disabled":e.disabled,"top-spa-disabled":!0}),href:r.value,"data-top-icon":e.icon||void 0,disabled:e.disabled||void 0,onClick:c},{default:(0,s.withCtx)(()=>[(0,s.unref)(n).showMenuInPopup?(0,s.renderSlot)(t.$slots,`default`,{key:0}):t.$slots.default&&!(0,s.unref)(n).isShort?((0,s.openBlock)(),(0,s.createElementBlock)(`span`,h,[(0,s.renderSlot)(t.$slots,`default`)])):(0,s.createCommentVNode)(``,!0)]),_:3},8,[`class`,`href`,`data-top-icon`,`disabled`]))}}),_=e=>e?.name===`AsyncComponentWrapper`&&!e?.__asyncResolved,v=async(e,t)=>{e?.name===`AsyncComponentWrapper`&&(e?.__asyncResolved||(e.__asyncLoader(),await(0,r.sleepWhile)(()=>t()&&_(e),200)))},y={class:`top-tabsView_menuOpener`},b=[`data-top-icon`],x={class:`top-ellipsis`},S={class:`top-tabsView_menuList`},C={key:0,class:`top-tabsView_menuFooter`},w=(0,s.defineComponent)({__name:`menu`,props:(0,s.mergeModels)({isShortable:{type:Boolean},isLoading:{type:Boolean}},{isLoading:{},isLoadingModifiers:{}}),emits:[`update:isLoading`],setup(e){let t=(0,s.useModel)(e,`isLoading`),n=m(),r=(0,s.useSlots)(),a=new Map,c=()=>{if(!r.default)return;let e=r.default({}).find(e=>e.key===`_menu`);e&&l(e.children)},l=e=>{e.forEach(e=>{if(e.type.__name&&e.type.__name!==g.__name)return;if(!e.type.__name&&typeof e.children==`object`){l(e.children);return}if(!e.props?.name||e.props?.disabled)return;let t={title:(e.children.default?.()[0].children).trim(),icon:e.props.icon,component:e.props.component?(0,s.markRaw)(e.props.component):g.props.component.default,scrollable:e.props.scrollable??g.props.scrollable.default};a.set(e.props.name,t)})},u=(0,s.ref)(null),d=0;return(0,s.watch)(()=>n.activeItemName,async()=>{let e=++d;if(a.size===0&&c(),a.size===0){n.activeItemName=``;return}if(u.value=a.get(n.activeItemName)??null,!u.value&&n.$id){let e=(0,i.getHash)(n.$id);if(u.value=a.get(e)??null,u.value){n.activeItemName=e;return}}if(!u.value){n.activeItemName=a.keys().next().value;return}if(u.value.component===n.component){t.value=!1;return}n.$id&&(0,i.setHash)(n.$id,n.activeItemName,!1),t.value=!0,await v(u.value.component,()=>e===d),e===d&&(n.scrollable=u.value.scrollable,n.component=u.value.component,u.value&&!n.component&&console.warn(`Компонент вкладки ${n.activeItemName} не найден. Добавьте props.component для пункта меню ${n.activeItemName}.`))},{immediate:!0}),(t,r)=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{class:(0,s.normalizeClass)({"top-tabsView_menu":!0,"top-tabsView_menu-inPopup_0":!(0,s.unref)(n).showMenuInPopup,"top-tabsView_menu-inPopup_1":(0,s.unref)(n).showMenuInPopup,"top-tabsView_menu-short":(0,s.unref)(n).isShort&&!(0,s.unref)(n).showMenuInPopup})},[(0,s.unref)(n).showMenuInPopup?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(o.s),{key:0},{opener:(0,s.withCtx)(()=>[(0,s.createElementVNode)(`div`,y,[u.value?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:0,class:`top-tabsView_menuOpenerActiveItem`,"data-top-icon":u.value.icon},[(0,s.createElementVNode)(`span`,x,(0,s.toDisplayString)(u.value.title),1)],8,b)):(0,s.createCommentVNode)(``,!0),r[1]||=(0,s.createElementVNode)(`div`,{class:`top-tabsView_menuOpenerIcon`,"data-top-icon":``},null,-1)])]),contentList:(0,s.withCtx)(()=>[(0,s.renderSlot)(t.$slots,`default`)]),_:3})):((0,s.openBlock)(),(0,s.createElementBlock)(s.Fragment,{key:1},[(0,s.createElementVNode)(`div`,S,[(0,s.renderSlot)(t.$slots,`default`)]),e.isShortable?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,C,[e.isShortable?((0,s.openBlock)(),(0,s.createBlock)(g,{key:0,icon:(0,s.unref)(n).isShort?``:``,onClick:r[0]||=e=>(0,s.unref)(n).isShort=!(0,s.unref)(n).isShort},{default:(0,s.withCtx)(()=>[(0,s.createTextVNode)((0,s.toDisplayString)((0,s.unref)(n).isShort?``:`Свернуть`),1)]),_:1},8,[`icon`])):(0,s.createCommentVNode)(``,!0)])):(0,s.createCommentVNode)(``,!0)],64))],2))}}),T=(0,s.defineComponent)({__name:`tabsView`,props:(0,s.mergeModels)({modelValue:{},pageMod:{type:Boolean},showMenuInPopup:{type:Boolean,default:void 0},isShortable:{type:Boolean,default:!1},idState:{}},{modelValue:{},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,r=p(t,(0,s.useModel)(e,`modelValue`)),a=Math.random();t.pageMod&&n.O.state.documentClassModificators.set(a,`top-hasTabsViewPageMod`),(0,s.onUnmounted)(()=>{t.pageMod&&n.O.state.documentClassModificators.delete(a),r.$id&&(0,i.delHash)(r.$id,r.activeItemName,!0)});let o=(0,s.ref)(),c=(0,s.ref)(!1);return(0,s.watch)([o,()=>r.component],()=>{c.value=_(r.component)},{immediate:!0}),(i,a)=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{class:(0,s.normalizeClass)({"top-tabsView":!0,"top-tabsView-pageMod":t.pageMod,"top-tabsView-inPopup":(0,s.unref)(r).showMenuInPopup})},[(0,s.createVNode)(w,{isShortable:e.isShortable,isLoading:c.value,"onUpdate:isLoading":a[0]||=e=>c.value=e},{default:(0,s.withCtx)(()=>[(0,s.renderSlot)(i.$slots,`menu`)]),_:3},8,[`isShortable`,`isLoading`]),(0,s.createElementVNode)(`div`,{class:(0,s.normalizeClass)({"top-tabsView_contents":!0,"top-tabsView_contents-isLoading":c.value,"top-tabsView_contents-noScrollable":!(0,s.unref)(r).scrollable})},[c.value?((0,s.openBlock)(),(0,s.createBlock)(n.l,{key:0})):(0,s.createCommentVNode)(``,!0),((0,s.openBlock)(),(0,s.createBlock)(s.KeepAlive,null,[((0,s.openBlock)(),(0,s.createBlock)((0,s.resolveDynamicComponent)((0,s.unref)(r).component),{ref_key:`componentRef`,ref:o},null,512))],1024))],2)],2))}}),E={},D={class:`top-tabsView_menuDelimeter`};t.TopTabsViewMenuItem=g,t.TopTabsView=T;function O(e,t){return(0,s.openBlock)(),(0,s.createElementBlock)(`div`,D)}var k=(0,n.u)(E,[[`render`,O]]);t.TopTabsViewMenuTitle=(0,s.defineComponent)({__name:`menuTitle`,props:{isSubtitle:{type:Boolean}},setup(e){let t=m();return(n,r)=>(0,s.unref)(t).showMenuInPopup?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(o.o),{key:0,type:`title`},{default:(0,s.withCtx)(()=>[(0,s.renderSlot)(n.$slots,`default`)]),_:3})):(0,s.unref)(t).isShort?((0,s.openBlock)(),(0,s.createBlock)(k,{key:1})):((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:2,class:(0,s.normalizeClass)({"top-tabsView_menuTitle":!0,"top-tabsView_menuTitle-subtitle":e.isSubtitle})},[(0,s.renderSlot)(n.$slots,`default`)],2))}})});
1
+ define([`require`,`exports`,`../.chunks/forms-LywqKN9I.amd`,`../utils/system.amd`,`../utils/route.amd`,`../.chunks/store-DjQAOnrn.amd`,`../.chunks/popup-BWD4eASc.amd`,`vue`,`../require/css.amd!../assets/tabsView.css`],function(e,t,n,r,i,a,o,s){"use strict";if(c===void 0)var c=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.TopTabsViewMenuTitle=t.TopTabsViewMenuItem=t.TopTabsView=void 0;var l=(e,t)=>`top:${String(e)}:${t}`,u={loadLocalStorge:(e,t)=>{if(!t.$id)return;let n=l(e,t.$id);try{let r=JSON.parse(localStorage.getItem(n));typeof r==typeof t[e]&&(t[e]=r)}catch{console.warn(Error(`В localStorage[${n}] не корректный json`))}},addSaverLocalStorge:(e,t)=>{if(!t.$id)return;let n=l(e,t.$id);(0,s.watch)(()=>t[e],()=>{localStorage.setItem(n,JSON.stringify(t[e]))},{immediate:!0})}},d=new Set;addEventListener(`popstate`,e=>{d.forEach(t=>t(e))});var f=Symbol(),p=(e,t)=>{let r=(0,a.t)(f,()=>({showMenuInPopup:(0,s.computed)(()=>e.showMenuInPopup??n.O.state.isMobile),pageMod:(0,s.computed)(()=>e.pageMod),isShort:(0,s.ref)(!1),activeItemName:t,component:(0,s.ref)(void 0),scrollable:(0,s.ref)(!0)}),e.idState);if(e.isShortable){let e=`isShort`;u.loadLocalStorge(e,r),u.addSaverLocalStorge(e,r)}return r.$id&&d.add(e=>{t.value=(0,i.getHash)(r.$id)}),r},m=()=>(0,a.r)(f),h={key:1,class:`top-ellipsis`},g=(0,s.defineComponent)({__name:`menuItem`,props:{name:{},href:{},icon:{},disabled:{type:Boolean},component:{default:void 0},scrollable:{type:Boolean,default:!0}},setup(e){let t=e,n=m(),r=(0,s.computed)(()=>t.name&&n.$id?(0,i.genHash)(n.$id,t.name):t.href),a=(0,s.computed)(()=>n.showMenuInPopup?o.o:r.value?`a`:`button`),c=e=>{!t.href&&r.value&&e.preventDefault(),t.name&&(n.activeItemName=t.name)};return(t,i)=>((0,s.openBlock)(),(0,s.createBlock)((0,s.resolveDynamicComponent)(a.value),{target:`_self`,class:(0,s.normalizeClass)({"top-tabsView_menuItem":!(0,s.unref)(n).showMenuInPopup,"top-active":e.name&&(0,s.unref)(n).activeItemName===e.name,"top-disabled":e.disabled,"top-spa-disabled":!0}),href:r.value,"data-top-icon":e.icon||void 0,disabled:e.disabled||void 0,onClick:c},{default:(0,s.withCtx)(()=>[(0,s.unref)(n).showMenuInPopup?(0,s.renderSlot)(t.$slots,`default`,{},void 0,void 0,0):t.$slots.default&&!(0,s.unref)(n).isShort?((0,s.openBlock)(),(0,s.createElementBlock)(`span`,h,[(0,s.renderSlot)(t.$slots,`default`)])):(0,s.createCommentVNode)(``,!0)]),_:3},8,[`class`,`href`,`data-top-icon`,`disabled`]))}}),_=e=>e?.name===`AsyncComponentWrapper`&&!e?.__asyncResolved,v=async(e,t)=>{e?.name===`AsyncComponentWrapper`&&(e?.__asyncResolved||(e.__asyncLoader(),await(0,r.sleepWhile)(()=>t()&&_(e),200)))},y={class:`top-tabsView_menuOpener`},b=[`data-top-icon`],x={class:`top-ellipsis`},S={class:`top-tabsView_menuList`},C={key:0,class:`top-tabsView_menuFooter`},w=(0,s.defineComponent)({__name:`menu`,props:(0,s.mergeModels)({isShortable:{type:Boolean},isLoading:{type:Boolean}},{isLoading:{},isLoadingModifiers:{}}),emits:[`update:isLoading`],setup(e){let t=(0,s.useModel)(e,`isLoading`),n=m(),r=(0,s.useSlots)(),a=new Map,c=()=>{if(!r.default)return;let e=r.default({}).find(e=>e.key===`_menu`);e&&l(e.children)},l=e=>{e.forEach(e=>{if(e.type.__name&&e.type.__name!==g.__name)return;if(!e.type.__name&&typeof e.children==`object`){l(e.children);return}if(!e.props?.name||e.props?.disabled)return;let t={title:(e.children.default?.()[0].children).trim(),icon:e.props.icon,component:e.props.component?(0,s.markRaw)(e.props.component):g.props.component.default,scrollable:e.props.scrollable??g.props.scrollable.default};a.set(e.props.name,t)})},u=(0,s.ref)(null),d=0;return(0,s.watch)(()=>n.activeItemName,async()=>{let e=++d;if(a.size===0&&c(),a.size===0){n.activeItemName=``;return}if(u.value=a.get(n.activeItemName)??null,!u.value&&n.$id){let e=(0,i.getHash)(n.$id);if(u.value=a.get(e)??null,u.value){n.activeItemName=e;return}}if(!u.value){n.activeItemName=a.keys().next().value;return}if(u.value.component===n.component){t.value=!1;return}n.$id&&(0,i.setHash)(n.$id,n.activeItemName,!1),t.value=!0,await v(u.value.component,()=>e===d),e===d&&(n.scrollable=u.value.scrollable,n.component=u.value.component,u.value&&!n.component&&console.warn(`Компонент вкладки ${n.activeItemName} не найден. Добавьте props.component для пункта меню ${n.activeItemName}.`))},{immediate:!0}),(t,r)=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{class:(0,s.normalizeClass)({"top-tabsView_menu":!0,"top-tabsView_menu-inPopup_0":!(0,s.unref)(n).showMenuInPopup,"top-tabsView_menu-inPopup_1":(0,s.unref)(n).showMenuInPopup,"top-tabsView_menu-short":(0,s.unref)(n).isShort&&!(0,s.unref)(n).showMenuInPopup})},[(0,s.unref)(n).showMenuInPopup?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(o.s),{key:0},{opener:(0,s.withCtx)(()=>[(0,s.createElementVNode)(`div`,y,[u.value?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:0,class:`top-tabsView_menuOpenerActiveItem`,"data-top-icon":u.value.icon},[(0,s.createElementVNode)(`span`,x,(0,s.toDisplayString)(u.value.title),1)],8,b)):(0,s.createCommentVNode)(``,!0),r[1]||=(0,s.createElementVNode)(`div`,{class:`top-tabsView_menuOpenerIcon`,"data-top-icon":``},null,-1)])]),contentList:(0,s.withCtx)(()=>[(0,s.renderSlot)(t.$slots,`default`)]),_:3})):((0,s.openBlock)(),(0,s.createElementBlock)(s.Fragment,{key:1},[(0,s.createElementVNode)(`div`,S,[(0,s.renderSlot)(t.$slots,`default`)]),e.isShortable?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,C,[e.isShortable?((0,s.openBlock)(),(0,s.createBlock)(g,{key:0,icon:(0,s.unref)(n).isShort?``:``,onClick:r[0]||=e=>(0,s.unref)(n).isShort=!(0,s.unref)(n).isShort},{default:(0,s.withCtx)(()=>[(0,s.createTextVNode)((0,s.toDisplayString)((0,s.unref)(n).isShort?``:`Свернуть`),1)]),_:1},8,[`icon`])):(0,s.createCommentVNode)(``,!0)])):(0,s.createCommentVNode)(``,!0)],64))],2))}}),T=(0,s.defineComponent)({__name:`tabsView`,props:(0,s.mergeModels)({modelValue:{},pageMod:{type:Boolean},showMenuInPopup:{type:Boolean,default:void 0},isShortable:{type:Boolean,default:!1},idState:{}},{modelValue:{},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,r=p(t,(0,s.useModel)(e,`modelValue`)),a=Math.random();t.pageMod&&n.O.state.documentClassModificators.set(a,`top-hasTabsViewPageMod`),(0,s.onUnmounted)(()=>{t.pageMod&&n.O.state.documentClassModificators.delete(a),r.$id&&(0,i.delHash)(r.$id,r.activeItemName,!0)});let o=(0,s.ref)(),c=(0,s.ref)(!1);return(0,s.watch)([o,()=>r.component],()=>{c.value=_(r.component)},{immediate:!0}),(i,a)=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{class:(0,s.normalizeClass)({"top-tabsView":!0,"top-tabsView-pageMod":t.pageMod,"top-tabsView-inPopup":(0,s.unref)(r).showMenuInPopup})},[(0,s.createVNode)(w,{isShortable:e.isShortable,isLoading:c.value,"onUpdate:isLoading":a[0]||=e=>c.value=e},{default:(0,s.withCtx)(()=>[(0,s.renderSlot)(i.$slots,`menu`)]),_:3},8,[`isShortable`,`isLoading`]),(0,s.createElementVNode)(`div`,{class:(0,s.normalizeClass)({"top-tabsView_contents":!0,"top-tabsView_contents-isLoading":c.value,"top-tabsView_contents-noScrollable":!(0,s.unref)(r).scrollable})},[c.value?((0,s.openBlock)(),(0,s.createBlock)(n.l,{key:0})):(0,s.createCommentVNode)(``,!0),((0,s.openBlock)(),(0,s.createBlock)(s.KeepAlive,null,[((0,s.openBlock)(),(0,s.createBlock)((0,s.resolveDynamicComponent)((0,s.unref)(r).component),{ref_key:`componentRef`,ref:o},null,512))],1024))],2)],2))}}),E={},D={class:`top-tabsView_menuDelimeter`};t.TopTabsViewMenuItem=g,t.TopTabsView=T;function O(e,t){return(0,s.openBlock)(),(0,s.createElementBlock)(`div`,D)}var k=(0,n.u)(E,[[`render`,O]]);t.TopTabsViewMenuTitle=(0,s.defineComponent)({__name:`menuTitle`,props:{isSubtitle:{type:Boolean}},setup(e){let t=m();return(n,r)=>(0,s.unref)(t).showMenuInPopup?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(o.o),{key:0,type:`title`},{default:(0,s.withCtx)(()=>[(0,s.renderSlot)(n.$slots,`default`)]),_:3})):(0,s.unref)(t).isShort?((0,s.openBlock)(),(0,s.createBlock)(k,{key:1})):((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:2,class:(0,s.normalizeClass)({"top-tabsView_menuTitle":!0,"top-tabsView_menuTitle-subtitle":e.isSubtitle})},[(0,s.renderSlot)(n.$slots,`default`)],2))}})});
2
2
  //# sourceMappingURL=tabsView.amd.js.map