@topvisor/ui 1.0.20-focus-1 → 1.0.20-selector2-3

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 (903) hide show
  1. package/.idea/.gitignore +11 -0
  2. package/.idea/codeStyles/Project.xml +205 -0
  3. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  4. package/.idea/externalDependencies.xml +6 -0
  5. package/.idea/inspectionProfiles/Disabled.xml +824 -0
  6. package/.idea/inspectionProfiles/Project_Default.xml +33 -0
  7. package/.idea/php.xml +19 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/.storybook/TopTheme.ts +115 -0
  10. package/.storybook/TopThemeManager.ts +53 -0
  11. package/.storybook/main.ts +51 -0
  12. package/.storybook/manager.ts +25 -0
  13. package/.storybook/preview-head.html +21 -0
  14. package/.storybook/preview.ts +47 -0
  15. package/.storybook/vue/coreDecorator.ts +76 -0
  16. package/.storybook/vue/vModelDecorator.ts +46 -0
  17. package/.versionrc.json +16 -0
  18. package/.vscode/extensions.json +11 -0
  19. package/.vscode/keybindings.example.json +121 -0
  20. package/.vscode/settings.json +45 -0
  21. package/CHANGELOG.md +175 -0
  22. package/NPM.md +25 -0
  23. package/PUBLISH.md +63 -0
  24. package/README.md +25 -66
  25. package/STORYBOOK.md +43 -0
  26. package/USE_IN_PROJECT.md +32 -0
  27. package/build/afterBuild.sh +11 -0
  28. package/build/cssModules.ts +39 -0
  29. package/build/genDocs.sh +19 -0
  30. package/build/plugin/amdFix.ts +83 -0
  31. package/build/plugin/autoloadCSS.ts +155 -0
  32. package/build/rollup.config.ts +37 -0
  33. package/package.json +55 -1
  34. package/public/README.md +82 -0
  35. package/src/components/charts/charts.ts +8 -0
  36. package/src/components/charts/miniChart/miniChart.stories.ts +67 -0
  37. package/src/components/charts/miniChart/miniChart.ts +110 -0
  38. package/src/components/charts/miniChart/miniChart.vue +158 -0
  39. package/src/components/charts/miniChart/stories/README.md +9 -0
  40. package/src/components/charts/miniChart/stories/dummy.ts +25 -0
  41. package/src/components/charts/miniChart/styles/miniChart.css +87 -0
  42. package/src/components/charts/miniChart/utils/consts.ts +9 -0
  43. package/src/components/charts/miniCharts/miniCharts.stories.ts +76 -0
  44. package/src/components/charts/miniCharts/miniCharts.ts +24 -0
  45. package/src/components/charts/miniCharts/miniCharts.vue +128 -0
  46. package/src/components/charts/miniCharts/stories/README.md +18 -0
  47. package/src/components/charts/miniCharts/stories/dummy.ts +70 -0
  48. package/src/components/charts/miniCharts/stories/overview.vue +139 -0
  49. package/src/components/charts/miniCharts/styles/miniCharts.css +32 -0
  50. package/src/components/component.ts +130 -0
  51. package/src/components/core/core.mdx +7 -0
  52. package/src/components/core/notice/item/item.vue +145 -0
  53. package/src/components/core/notice/item/style.css +70 -0
  54. package/src/components/core/notice/item/types.ts +71 -0
  55. package/src/components/core/notice/notice.stories.ts +105 -0
  56. package/src/components/core/notice/notice.vue +69 -0
  57. package/src/components/core/notice/stories/README.md +34 -0
  58. package/src/components/core/notice/types.ts +1 -0
  59. package/src/components/core/notice/utils.ts +115 -0
  60. package/src/components/dialog/dialog/Dialog (code).mdx +61 -0
  61. package/src/components/dialog/dialog/composables/asyncDialogHandle.ts +99 -0
  62. package/src/components/dialog/dialog/composables/dialogHandle.ts +176 -0
  63. package/src/components/dialog/dialog/composables/types.ts +12 -0
  64. package/src/components/dialog/dialog/composables/utils.ts +39 -0
  65. package/src/components/dialog/dialog/dialog.stories.ts +83 -0
  66. package/src/components/dialog/dialog/dialog.vue +74 -0
  67. package/src/components/dialog/dialog/dialogs/dialogs.vue +58 -0
  68. package/src/components/dialog/dialog/page/page.vue +86 -0
  69. package/src/components/dialog/dialog/page/types.ts +84 -0
  70. package/src/components/dialog/dialog/page.stories.ts +27 -0
  71. package/src/components/dialog/dialog/pageComponent/pageComponent.vue +57 -0
  72. package/src/components/dialog/dialog/pageComponent/types.ts +21 -0
  73. package/src/components/dialog/dialog/pageComponent.stories.ts +27 -0
  74. package/src/components/dialog/dialog/stories/README.md +117 -0
  75. package/src/components/dialog/dialog/stories/autoload.ts +12 -0
  76. package/src/components/dialog/dialog/stories/dialog_example/dialog_example.vue +73 -0
  77. package/src/components/dialog/dialog/stories/dialog_example/pages/async.vue +57 -0
  78. package/src/components/dialog/dialog/stories/dialog_example/pages/default.vue +64 -0
  79. package/src/components/dialog/dialog/stories/dialog_example/pages/headerButtons.vue +56 -0
  80. package/src/components/dialog/dialog/stories/dialog_example/pages/utils.ts +26 -0
  81. package/src/components/dialog/dialog/stories/dialog_example/pages/withoutCache.vue +64 -0
  82. package/src/components/dialog/dialog/stories/page/README.md +24 -0
  83. package/src/components/dialog/dialog/stories/pageComponent/README.md +12 -0
  84. package/src/components/dialog/dialog/style/dialog.css +316 -0
  85. package/src/components/dialog/dialog/style/dialog.m.css +40 -0
  86. package/src/components/dialog/dialog/style/dialog.pc.css +73 -0
  87. package/src/components/dialog/dialog/style/modern/dialog.css +12 -0
  88. package/src/components/dialog/dialog/style/modern/dialog.pc.css +3 -0
  89. package/src/components/dialog/dialog/types.ts +69 -0
  90. package/src/components/dialog/dialog.ts +7 -0
  91. package/src/components/dialog/lib/types.ts +26 -0
  92. package/src/components/dialog/lib/utils.globalEvents.ts +175 -0
  93. package/src/components/dialog/lib/utils.ts +525 -0
  94. package/src/components/dialog/lib/worker.ts +273 -0
  95. package/src/components/forms/README.mdx +10 -0
  96. package/src/components/forms/avatar/avatar.stories.ts +38 -0
  97. package/src/components/forms/avatar/avatar.ts +40 -0
  98. package/src/components/forms/avatar/avatar.vue +77 -0
  99. package/src/components/forms/avatar/stories/overview.vue +28 -0
  100. package/src/components/forms/button/button.stories.ts +118 -0
  101. package/src/components/forms/button/button.vue +111 -0
  102. package/src/components/forms/button/stories/README.md +9 -0
  103. package/src/components/forms/button/stories/overview.vue +33 -0
  104. package/src/components/forms/button/style/button.css +139 -0
  105. package/src/components/forms/button/style/style-outline.css +129 -0
  106. package/src/components/forms/button/style/style-soft.css +89 -0
  107. package/src/components/forms/button/style/style-transparent.css +39 -0
  108. package/src/components/forms/button/types.ts +66 -0
  109. package/src/components/forms/checkbox/checkbox.stories.ts +33 -0
  110. package/src/components/forms/checkbox/checkbox.ts +21 -0
  111. package/src/components/forms/checkbox/checkbox.vue +114 -0
  112. package/src/components/forms/checkbox/stories/overview.vue +171 -0
  113. package/src/components/forms/controlLabel/controlLabel.stories.ts +32 -0
  114. package/src/components/forms/controlLabel/controlLabel.ts +4 -0
  115. package/src/components/forms/controlLabel/controlLabel.vue +54 -0
  116. package/src/components/forms/forms.ts +40 -0
  117. package/src/components/forms/helpers.ts +11 -0
  118. package/src/components/forms/hint/hint.stories.ts +41 -0
  119. package/src/components/forms/hint/hint.ts +8 -0
  120. package/src/components/forms/hint/hint.vue +32 -0
  121. package/src/components/forms/input/input.stories.ts +31 -0
  122. package/src/components/forms/input/input.ts +37 -0
  123. package/src/components/forms/input/input.vue +187 -0
  124. package/src/components/forms/input/stories/overview.vue +61 -0
  125. package/src/components/forms/inputDate/datepicker.css +246 -0
  126. package/src/components/forms/inputDate/datepicker.ts +101 -0
  127. package/src/components/forms/inputDate/inputDate.stories.ts +41 -0
  128. package/src/components/forms/inputDate/inputDate.ts +5 -0
  129. package/src/components/forms/inputDate/inputDate.vue +133 -0
  130. package/src/components/forms/inputDate/stories/overview.vue +35 -0
  131. package/src/components/forms/inputRange/inputRange.stories.ts +53 -0
  132. package/src/components/forms/inputRange/inputRange.ts +3 -0
  133. package/src/components/forms/inputRange/inputRange.vue +39 -0
  134. package/src/components/forms/inputRange/stories/overview.vue +129 -0
  135. package/src/components/forms/loadbar/loadbar.stories.ts +17 -0
  136. package/src/components/forms/loadbar/loadbar.vue +37 -0
  137. package/src/components/forms/radio/radio.stories.ts +34 -0
  138. package/src/components/forms/radio/radio.ts +15 -0
  139. package/src/components/forms/radio/radio.vue +97 -0
  140. package/src/components/forms/radio/stories/overview.vue +79 -0
  141. package/src/components/forms/select/select.stories.ts +68 -0
  142. package/src/components/forms/select/select.ts +60 -0
  143. package/src/components/forms/select/select.vue +298 -0
  144. package/src/components/forms/select/stories/exampleOptions.ts +61 -0
  145. package/src/components/forms/select/stories/overview.vue +72 -0
  146. package/src/components/forms/switcher/stories/overview.vue +139 -0
  147. package/src/components/forms/switcher/switcher.stories.ts +33 -0
  148. package/src/components/forms/switcher/switcher.ts +22 -0
  149. package/src/components/forms/switcher/switcher.vue +118 -0
  150. package/src/components/forms/textarea/stories/overview.vue +62 -0
  151. package/src/components/forms/textarea/textarea.stories.ts +33 -0
  152. package/src/components/forms/textarea/textarea.ts +38 -0
  153. package/src/components/forms/textarea/textarea.vue +121 -0
  154. package/src/components/formsExt/README.mdx +5 -0
  155. package/src/components/formsExt/editArea/editArea.stories.ts +41 -0
  156. package/src/components/formsExt/editArea/editArea.ts +41 -0
  157. package/src/components/formsExt/editArea/editArea.vue +195 -0
  158. package/src/components/formsExt/editArea/stories/README.md +21 -0
  159. package/src/components/formsExt/editArea/stories/overview.vue +67 -0
  160. package/src/components/formsExt/editInput/editInput.stories.ts +36 -0
  161. package/src/components/formsExt/editInput/editInput.ts +20 -0
  162. package/src/components/formsExt/editInput/editInput.vue +54 -0
  163. package/src/components/formsExt/editInput/stories/overview.vue +54 -0
  164. package/src/components/formsExt/formsExt.ts +15 -0
  165. package/src/components/formsExt/info/info.stories.ts +35 -0
  166. package/src/components/formsExt/info/info.vue +84 -0
  167. package/src/components/formsExt/info/stories/overview.vue +29 -0
  168. package/src/components/formsExt/info/types.ts +25 -0
  169. package/src/components/formsExt/menu/menu.stories.ts +59 -0
  170. package/src/components/formsExt/menu/menu.ts +45 -0
  171. package/src/components/formsExt/menu/menu.vue +321 -0
  172. package/src/components/formsExt/menu/stories/items.ts +18 -0
  173. package/src/components/formsExt/menu/stories/overview.vue +52 -0
  174. package/src/components/formsExt/radioGroup/radioGroup.stories.ts +51 -0
  175. package/src/components/formsExt/radioGroup/radioGroup.ts +28 -0
  176. package/src/components/formsExt/radioGroup/radioGroup.vue +146 -0
  177. package/src/components/formsExt/radioGroup/stories/overview.vue +78 -0
  178. package/src/components/formsExt/radioGroup/styles/top-scrollBar.css +52 -0
  179. package/src/components/formsExt/selector2/api.ts +148 -0
  180. package/src/components/formsExt/selector2/itemMulti.vue +57 -0
  181. package/src/components/formsExt/selector2/selector2.stories.ts +48 -0
  182. package/src/components/formsExt/selector2/selector2.ts +145 -0
  183. package/src/components/formsExt/selector2/selector2.vue +389 -0
  184. package/src/components/formsExt/selector2/stories/dummyAPIRequest.ts +58 -0
  185. package/src/components/formsExt/selector2/stories/overview.vue +93 -0
  186. package/src/components/helper.js +10 -0
  187. package/src/components/helpersStories.ts +205 -0
  188. package/src/components/layout/islandRows/islandRows.stories.ts +139 -0
  189. package/src/components/layout/islandRows/islandRows.vue +53 -0
  190. package/src/components/layout/islandRows/islandRowsRow/islandRowsRow.vue +36 -0
  191. package/src/components/layout/islandRows/islandRowsRow/types.ts +1 -0
  192. package/src/components/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue +16 -0
  193. package/src/components/layout/islandRows/stories/README.md +8 -0
  194. package/src/components/layout/islandRows/types.ts +11 -0
  195. package/src/components/layout/layout.ts +11 -0
  196. package/src/components/layout/rows/rows.stories.ts +48 -0
  197. package/src/components/layout/rows/rows.vue +46 -0
  198. package/src/components/layout/rows/stories/README.md +10 -0
  199. package/src/components/layout/rows/types.ts +6 -0
  200. package/src/components/popup/alert/alert.stories.ts +71 -0
  201. package/src/components/popup/alert/alert.ts +11 -0
  202. package/src/components/popup/alert/alert.vue +46 -0
  203. package/src/components/popup/alert/stories/overview.vue +40 -0
  204. package/src/components/popup/confirm/confirm.stories.ts +75 -0
  205. package/src/components/popup/confirm/confirm.ts +26 -0
  206. package/src/components/popup/confirm/confirm.vue +75 -0
  207. package/src/components/popup/confirm/stories/overview.vue +62 -0
  208. package/src/components/popup/lib/popup.globalEvents.ts +239 -0
  209. package/src/components/popup/lib/popup.ts +790 -0
  210. package/src/components/popup/lib/worker.globalEvents.ts +97 -0
  211. package/src/components/popup/lib/worker.ts +286 -0
  212. package/src/components/popup/popup/listItem.vue +35 -0
  213. package/src/components/popup/popup/opener.vue +81 -0
  214. package/src/components/popup/popup/popup.stories.ts +74 -0
  215. package/src/components/popup/popup/popup.ts +120 -0
  216. package/src/components/popup/popup/popup.vue +168 -0
  217. package/src/components/popup/popup/stories/README.md +55 -0
  218. package/src/components/popup/popup/stories/listItems.vue +44 -0
  219. package/src/components/popup/popup/stories/listSubItems.vue +47 -0
  220. package/src/components/popup/popup/stories/overview.vue +210 -0
  221. package/src/components/popup/popup/style/popup.css +345 -0
  222. package/src/components/popup/popup/style/popup.m.css +72 -0
  223. package/src/components/popup/popup/style/popup.pc.css +26 -0
  224. package/src/components/popup/popup/widgetInput.vue +43 -0
  225. package/src/components/popup/popup.ts +17 -0
  226. package/src/components/popup/prompt/prompt.stories.ts +78 -0
  227. package/src/components/popup/prompt/prompt.ts +26 -0
  228. package/src/components/popup/prompt/prompt.vue +84 -0
  229. package/src/components/popup/prompt/stories/overview.vue +50 -0
  230. package/src/components/popup/worker.ts +1 -0
  231. package/src/components/project/project.ts +23 -0
  232. package/src/components/project/selectorCompetitors/composables.ts +21 -0
  233. package/src/components/project/selectorCompetitors/selectorCompetitors.stories.ts +33 -0
  234. package/src/components/project/selectorCompetitors/selectorCompetitors.ts +27 -0
  235. package/src/components/project/selectorCompetitors/selectorCompetitors.vue +75 -0
  236. package/src/components/project/selectorCompetitors/stories/README.md +20 -0
  237. package/src/components/project/selectorCompetitors/stories/items.ts +30 -0
  238. package/src/components/project/selectorCompetitors/types/competitor.ts +7 -0
  239. package/src/components/project/selectorRegion/composables/compare.ts +87 -0
  240. package/src/components/project/selectorRegion/composables/selectRegion.ts +147 -0
  241. package/src/components/project/selectorRegion/composables/selectSearcher.ts +64 -0
  242. package/src/components/project/selectorRegion/composables/selectorRegion.ts +165 -0
  243. package/src/components/project/selectorRegion/selectorRegion.stories.ts +69 -0
  244. package/src/components/project/selectorRegion/selectorRegion.ts +217 -0
  245. package/src/components/project/selectorRegion/selectorRegion.vue +330 -0
  246. package/src/components/project/selectorRegion/stories/README.md +36 -0
  247. package/src/components/project/selectorRegion/stories/searchers.ts +59 -0
  248. package/src/components/project/selectorRegion/styles/searcherColors.css +41 -0
  249. package/src/components/project/selectorRegion/utils/consts.ts +73 -0
  250. package/src/components/project/selectorRegion/utils/utils.ts +157 -0
  251. package/src/components/project/tagSelector/popupListItem/tagPopupListItem.vue +209 -0
  252. package/src/components/project/tagSelector/popupListItem/types.ts +40 -0
  253. package/src/components/project/tagSelector/popupOpener/popupOpener.vue +145 -0
  254. package/src/components/project/tagSelector/popupOpener/types.ts +71 -0
  255. package/src/components/project/tagSelector/stories/README.md +62 -0
  256. package/src/components/project/tagSelector/stories/overview.vue +152 -0
  257. package/src/components/project/tagSelector/tagIcon/tagIcon.vue +97 -0
  258. package/src/components/project/tagSelector/tagIcon/types.ts +25 -0
  259. package/src/components/project/tagSelector/tagSelector.stories.ts +51 -0
  260. package/src/components/project/tagSelector/tagSelector.vue +359 -0
  261. package/src/components/project/tagSelector/tagsDefaults.ts +54 -0
  262. package/src/components/project/tagSelector/types.ts +159 -0
  263. package/src/components/project/tagSelector/utils/el.ts +151 -0
  264. package/src/components/project/tagSelector/utils/utils.ts +30 -0
  265. package/src/components/tabs/tabs/content.vue +24 -0
  266. package/src/components/tabs/tabs/stories/README.md +12 -0
  267. package/src/components/tabs/tabs/tab.vue +49 -0
  268. package/src/components/tabs/tabs/tabs.stories.ts +171 -0
  269. package/src/components/tabs/tabs/tabs.ts +22 -0
  270. package/src/components/tabs/tabs/tabs.vue +64 -0
  271. package/src/components/tabs/tabs.ts +9 -0
  272. package/src/components/tabsView/tabsView/menu.vue +291 -0
  273. package/src/components/tabsView/tabsView/menuDelimeter.vue +26 -0
  274. package/src/components/tabsView/tabsView/menuItem.vue +125 -0
  275. package/src/components/tabsView/tabsView/menuTitle.vue +46 -0
  276. package/src/components/tabsView/tabsView/store.ts +60 -0
  277. package/src/components/tabsView/tabsView/stories/README.md +22 -0
  278. package/src/components/tabsView/tabsView/tabsView.stories.ts +170 -0
  279. package/src/components/tabsView/tabsView/tabsView.ts +118 -0
  280. package/src/components/tabsView/tabsView/tabsView.vue +120 -0
  281. package/src/components/tabsView/tabsView/utils.ts +27 -0
  282. package/src/components/tabsView/tabsView//320/255/320/273/320/265/320/274/320/265/320/275/321/202/321/213/MenuItem.stories.ts +47 -0
  283. package/src/components/tabsView/tabsView//320/255/320/273/320/265/320/274/320/265/320/275/321/202/321/213/MenuTitle.stories.ts +43 -0
  284. package/src/components/tabsView/tabsView.ts +9 -0
  285. package/src/components/types.ts +3 -0
  286. package/src/core/app.ts +22 -0
  287. package/src/core/core/core.mdx +36 -0
  288. package/src/core/core/core.ts +287 -0
  289. package/src/core/core/events/resize.ts +47 -0
  290. package/src/core/core/events.ts +6 -0
  291. package/src/core/core/jQuery.mdx +41 -0
  292. package/src/core/core/options.ts +51 -0
  293. package/src/core/core/preloaders.ts +31 -0
  294. package/src/core/core/state.ts +61 -0
  295. package/src/core/directives/data.mdx +24 -0
  296. package/src/core/directives/data.ts +25 -0
  297. package/src/core/directives/focus.mdx +28 -0
  298. package/src/core/directives/focus.ts +73 -0
  299. package/src/core/directives/scrollIntoView.mdx +41 -0
  300. package/src/core/directives/scrollIntoView.ts +123 -0
  301. package/src/core/directives/scrollShadow.mdx +23 -0
  302. package/src/core/directives/scrollShadow.ts +27 -0
  303. package/src/core/directives/sticky.mdx +29 -0
  304. package/src/core/directives/sticky.ts +32 -0
  305. package/src/core/directives/swimUp.mdx +27 -0
  306. package/src/core/directives/swimUp.ts +95 -0
  307. package/src/core/directives/tooltip.mdx +13 -0
  308. package/src/core/directives/tooltip.ts +57 -0
  309. package/src/core/icons/gallery.vue +70 -0
  310. package/src/core/icons/icons.mdx +24 -0
  311. package/src/core/icons/icons.stories.ts +14 -0
  312. package/src/core/plugins/core.ts +131 -0
  313. package/src/core/plugins/i18n.ts +184 -0
  314. package/src/core/plugins/piniaTPA.ts +431 -0
  315. package/src/core/plugins/plugins.mdx +82 -0
  316. package/src/core/styles/CSS Variables.stories.ts +17 -0
  317. package/src/core/styles/styles.mdx +26 -0
  318. package/src/core/theme/Variables.stories.ts +16 -0
  319. package/src/core/theme/theme.mdx +117 -0
  320. package/src/core/utils/References/Docs.mdx +23 -0
  321. package/src/core/utils/References/check/Docs.mdx +15 -0
  322. package/src/core/utils/References/check/functions/getDomainRegexp.mdx +15 -0
  323. package/src/core/utils/References/check/functions/isDomain.mdx +21 -0
  324. package/src/core/utils/References/check/functions/isEmail.mdx +22 -0
  325. package/src/core/utils/References/check/functions/isIp.mdx +21 -0
  326. package/src/core/utils/References/check/functions/validUrl.mdx +22 -0
  327. package/src/core/utils/References/clipboard/Docs.mdx +11 -0
  328. package/src/core/utils/References/clipboard/functions/setClipboard.mdx +23 -0
  329. package/src/core/utils/References/date/Docs.mdx +17 -0
  330. package/src/core/utils/References/date/functions/dateFormat.mdx +28 -0
  331. package/src/core/utils/References/date/functions/dateToString.mdx +26 -0
  332. package/src/core/utils/References/date/functions/dateUnformat.mdx +22 -0
  333. package/src/core/utils/References/date/functions/genDate.mdx +26 -0
  334. package/src/core/utils/References/date/functions/genDateMoscow.mdx +22 -0
  335. package/src/core/utils/References/date/functions/getDayOfWeek.mdx +26 -0
  336. package/src/core/utils/References/date/functions/stringToDate.mdx +21 -0
  337. package/src/core/utils/References/device/Docs.mdx +21 -0
  338. package/src/core/utils/References/device/functions/get$scroll.mdx +15 -0
  339. package/src/core/utils/References/device/functions/getCommandKeyLabel.mdx +15 -0
  340. package/src/core/utils/References/device/functions/getElsScroll.mdx +15 -0
  341. package/src/core/utils/References/device/functions/getOS.mdx +17 -0
  342. package/src/core/utils/References/device/functions/getOSAsync.mdx +15 -0
  343. package/src/core/utils/References/device/functions/getScrollTop.mdx +15 -0
  344. package/src/core/utils/References/device/functions/isApp.mdx +15 -0
  345. package/src/core/utils/References/device/functions/isMacOS.mdx +15 -0
  346. package/src/core/utils/References/device/functions/isMobile.mdx +15 -0
  347. package/src/core/utils/References/device/functions/isRetina.mdx +15 -0
  348. package/src/core/utils/References/device/functions/isSafari.mdx +15 -0
  349. package/src/core/utils/References/dom/Docs.mdx +27 -0
  350. package/src/core/utils/References/dom/functions/css.mdx +24 -0
  351. package/src/core/utils/References/dom/functions/genEl.mdx +28 -0
  352. package/src/core/utils/References/dom/functions/isVisible.mdx +23 -0
  353. package/src/core/utils/References/dom/functions/offset.mdx +35 -0
  354. package/src/core/utils/References/dom/functions/querySelectorAllArray.mdx +22 -0
  355. package/src/core/utils/References/dom/functions/querySelectorAllVisible.mdx +22 -0
  356. package/src/core/utils/References/dom/functions/querySelectorVisible.mdx +22 -0
  357. package/src/core/utils/References/dom/functions/querySelectorVisibleLast.mdx +22 -0
  358. package/src/core/utils/References/dom/functions/storage.mdx +28 -0
  359. package/src/core/utils/References/dom/functions/storageClear.mdx +21 -0
  360. package/src/core/utils/References/dom/functions/wrap.mdx +22 -0
  361. package/src/core/utils/References/dom/variables/default.mdx +241 -0
  362. package/src/core/utils/References/image/Docs.mdx +12 -0
  363. package/src/core/utils/References/image/functions/downloadImageFromString.mdx +22 -0
  364. package/src/core/utils/References/image/functions/genFaviconImgHtml.mdx +22 -0
  365. package/src/core/utils/References/keyboard/Docs.mdx +11 -0
  366. package/src/core/utils/References/keyboard/functions/invertKeyboardLayout.mdx +21 -0
  367. package/src/core/utils/References/lodash/Docs.mdx +20 -0
  368. package/src/core/utils/References/lodash/functions/cloneDeep.mdx +29 -0
  369. package/src/core/utils/References/lodash/functions/debounce.mdx +76 -0
  370. package/src/core/utils/References/lodash/functions/memoize.mdx +26 -0
  371. package/src/core/utils/References/lodash/functions/merge.mdx +200 -0
  372. package/src/core/utils/References/lodash/functions/throttle.mdx +73 -0
  373. package/src/core/utils/References/number/Docs.mdx +11 -0
  374. package/src/core/utils/References/number/functions/percentOfNumber.mdx +26 -0
  375. package/src/core/utils/References/price/Docs.mdx +11 -0
  376. package/src/core/utils/References/price/functions/genPrice.mdx +28 -0
  377. package/src/core/utils/References/route/Docs.mdx +16 -0
  378. package/src/core/utils/References/route/functions/delHash.mdx +26 -0
  379. package/src/core/utils/References/route/functions/genHash.mdx +26 -0
  380. package/src/core/utils/References/route/functions/getHash.mdx +22 -0
  381. package/src/core/utils/References/route/functions/historySetState.mdx +31 -0
  382. package/src/core/utils/References/route/functions/setHash.mdx +26 -0
  383. package/src/core/utils/References/route/functions/setHashs.mdx +22 -0
  384. package/src/core/utils/References/scroll/Docs.mdx +14 -0
  385. package/src/core/utils/References/scroll/functions/amountScrolled.mdx +17 -0
  386. package/src/core/utils/References/scroll/functions/connectScrollShadow.mdx +28 -0
  387. package/src/core/utils/References/scroll/functions/genHasScroll.mdx +25 -0
  388. package/src/core/utils/References/scroll/functions/getScrollPercent.mdx +21 -0
  389. package/src/core/utils/References/searchers/Docs.mdx +19 -0
  390. package/src/core/utils/References/searchers/functions/genVolumeLabel.mdx +26 -0
  391. package/src/core/utils/References/searchers/functions/getDeviceGIcon.mdx +21 -0
  392. package/src/core/utils/References/searchers/functions/getLangLabel.mdx +22 -0
  393. package/src/core/utils/References/searchers/functions/getSearcherGIcon.mdx +21 -0
  394. package/src/core/utils/References/searchers/functions/prepareVolumeType.mdx +22 -0
  395. package/src/core/utils/References/searchers/variables/searchersNames.mdx +97 -0
  396. package/src/core/utils/References/store/Docs.mdx +18 -0
  397. package/src/core/utils/References/store/functions/defineStore.mdx +36 -0
  398. package/src/core/utils/References/store/functions/useStore.mdx +29 -0
  399. package/src/core/utils/References/store/variables/plugin.mdx +66 -0
  400. package/src/core/utils/References/string/Docs.mdx +26 -0
  401. package/src/core/utils/References/string/functions/addCommasWhite.mdx +21 -0
  402. package/src/core/utils/References/string/functions/addLinkTags.mdx +23 -0
  403. package/src/core/utils/References/string/functions/camelToSnakeCase.mdx +21 -0
  404. package/src/core/utils/References/string/functions/ellipsis.mdx +26 -0
  405. package/src/core/utils/References/string/functions/genFlagLinkByCountryCode.mdx +21 -0
  406. package/src/core/utils/References/string/functions/genIntHash.mdx +21 -0
  407. package/src/core/utils/References/string/functions/getRandomHash.mdx +21 -0
  408. package/src/core/utils/References/string/functions/highlightHtml.mdx +25 -0
  409. package/src/core/utils/References/string/functions/htmlspecialchars.mdx +21 -0
  410. package/src/core/utils/References/string/functions/isUrl.mdx +21 -0
  411. package/src/core/utils/References/string/functions/nl2br.mdx +21 -0
  412. package/src/core/utils/References/string/functions/numberEnding.mdx +28 -0
  413. package/src/core/utils/References/string/functions/numberWithWord.mdx +28 -0
  414. package/src/core/utils/References/string/functions/rusToLatin.mdx +21 -0
  415. package/src/core/utils/References/string/functions/toCapitalize.mdx +21 -0
  416. package/src/core/utils/References/string/functions/toRoditPadej.mdx +21 -0
  417. package/src/core/utils/References/system/Docs.mdx +13 -0
  418. package/src/core/utils/References/system/functions/sleep.mdx +21 -0
  419. package/src/core/utils/References/system/functions/sleepWhile.mdx +26 -0
  420. package/src/core/utils/References/system/functions/waitWhile.mdx +26 -0
  421. package/src/core/utils/References/url/Docs.mdx +17 -0
  422. package/src/core/utils/References/url/functions/decode.mdx +21 -0
  423. package/src/core/utils/References/url/functions/encode.mdx +21 -0
  424. package/src/core/utils/References/url/functions/fromPuny.mdx +23 -0
  425. package/src/core/utils/References/url/functions/getHost.mdx +21 -0
  426. package/src/core/utils/References/url/functions/hostToLowerCase.mdx +21 -0
  427. package/src/core/utils/References/url/functions/normalize.mdx +21 -0
  428. package/src/core/utils/References/url/functions/toPuny.mdx +23 -0
  429. package/src/core/utils/check.ts +88 -0
  430. package/src/core/utils/clipboard.ts +51 -0
  431. package/src/core/utils/date.ts +291 -0
  432. package/src/core/utils/device.ts +139 -0
  433. package/src/core/utils/dom.ts +182 -0
  434. package/src/core/utils/image.ts +46 -0
  435. package/src/core/utils/keyboard.ts +29 -0
  436. package/src/core/utils/lodash.ts +18 -0
  437. package/src/core/utils/number.ts +37 -0
  438. package/src/core/utils/price.ts +24 -0
  439. package/src/core/utils/route.ts +115 -0
  440. package/src/core/utils/scroll.ts +120 -0
  441. package/src/core/utils/searchers.ts +189 -0
  442. package/src/core/utils/store/localStorage.ts +56 -0
  443. package/src/core/utils/store/plugin.ts +50 -0
  444. package/src/core/utils/store/store.ts +77 -0
  445. package/src/core/utils/store.ts +7 -0
  446. package/src/core/utils/string.ts +315 -0
  447. package/src/core/utils/system.ts +72 -0
  448. package/src/core/utils/url.ts +138 -0
  449. package/src/core/utils/utils.mdx +6 -0
  450. package/src/d.ts +12 -0
  451. package/src/icomoon.d.ts +98 -0
  452. package/src/resources/styles/core/components.css +102 -0
  453. package/src/resources/styles/core/core.ts +11 -0
  454. package/src/resources/styles/core/forms/clear.css +20 -0
  455. package/src/resources/styles/core/forms/controls.css +20 -0
  456. package/src/resources/styles/core/forms/focusable.css +26 -0
  457. package/src/resources/styles/core/forms/forms.css +117 -0
  458. package/src/resources/styles/core/icon.css +58 -0
  459. package/src/resources/styles/core/jquery.css +1 -0
  460. package/src/resources/styles/core/layout.css +59 -0
  461. package/src/resources/styles/core/modifiers/as.css +9 -0
  462. package/src/resources/styles/core/modifiers/ellipsis.css +26 -0
  463. package/src/resources/styles/core/modifiers/modifiers.css +120 -0
  464. package/src/resources/styles/core/modifiers/only.css +19 -0
  465. package/src/resources/styles/core/modifiers/scrollShadow.css +50 -0
  466. package/src/resources/styles/core/select.css +15 -0
  467. package/src/resources/styles/storybook.css +11 -0
  468. package/src/resources/styles/themes/dark/dark-layout.css +47 -0
  469. package/src/resources/styles/themes/dark/dark-positions.css +66 -0
  470. package/src/resources/styles/themes/dark/dark.css +400 -0
  471. package/src/resources/styles/themes/dark-positions.ts +1 -0
  472. package/src/resources/styles/themes/dark-th/dark-th-layout.css +47 -0
  473. package/src/resources/styles/themes/dark-th/dark-th-positions.css +67 -0
  474. package/src/resources/styles/themes/dark-th/dark-th.css +400 -0
  475. package/src/resources/styles/themes/dark-th-positions.ts +1 -0
  476. package/src/resources/styles/themes/dark-th.ts +3 -0
  477. package/src/resources/styles/themes/dark.ts +3 -0
  478. package/src/resources/styles/themes/light/light-layout.css +47 -0
  479. package/src/resources/styles/themes/light/light-positions.css +66 -0
  480. package/src/resources/styles/themes/light/light.css +400 -0
  481. package/src/resources/styles/themes/light-positions.ts +1 -0
  482. package/src/resources/styles/themes/light.ts +3 -0
  483. package/src/storybook/components/color.vue +47 -0
  484. package/src/storybook/components/cssVariables.vue +195 -0
  485. package/src/storybook/components/icomoon.ts +40 -0
  486. package/src/storybook/jquery.ts +4 -0
  487. package/src//320/221/321/213/321/201/321/202/321/200/321/213/320/271 /321/201/321/202/320/260/321/200/321/202.mdx" +181 -0
  488. package/src//320/230/320/275/321/204/320/276/321/200/320/274/320/260/321/206/320/270/321/217 /320/276 /321/201/320/261/320/276/321/200/320/272/320/265.mdx" +12 -0
  489. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CHANGELOG.md.mdx" +4 -0
  490. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS/FAQ.mdx" +43 -0
  491. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/236/320/261/321/211/320/270/320/265 /320/274/320/276/320/264/320/270/321/204/320/270/320/272/320/260/321/202/320/276/321/200/321/213.mdx" +155 -0
  492. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/237/320/265/321/200/320/265/320/274/320/265/320/275/320/275/321/213/320/265.mdx" +35 -0
  493. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/237/321/200/320/265/320/264/320/277/321/200/320/276/321/206/320/265/321/201/321/201/320/276/321/200/321/213.mdx" +15 -0
  494. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/240/320/265/320/272/320/276/320/274/320/265/320/275/320/264/320/260/321/206/320/270/320/270 /320/221/320/255/320/234.mdx" +56 -0
  495. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/241/321/202/320/270/320/273/320/270.mdx" +53 -0
  496. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/247/321/202/320/276 /321/202/320/260/320/272/320/276/320/265 css /320/274/320/276/320/264/321/203/320/273/321/214.mdx" +55 -0
  497. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/PUBLISH.md.mdx" +4 -0
  498. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/README.md.mdx" +4 -0
  499. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/STORYBOOK.md.mdx" +4 -0
  500. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/USE_IN_PROJECT.md.mdx" +3 -0
  501. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/222/320/262/320/265/320/264/320/265/320/275/320/270/320/265 /320/262 NPM.md.mdx" +4 -0
  502. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/224/320/276/320/277/320/276/320/273/320/275/320/270/321/202/320/265/320/273/321/214/320/275/320/260/321/217 /320/273/320/270/321/202/320/265/321/200/320/260/321/202/321/203/321/200/320/260.mdx" +15 -0
  503. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260//320/235/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/260 IDE.mdx" +45 -0
  504. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260//320/236/321/204/320/276/321/200/320/274/320/273/320/265/320/275/320/270/320/265 /320/272/320/276/320/264/320/260.mdx" +31 -0
  505. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260.mdx" +29 -0
  506. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI//320/232/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202/321/213//320/232/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202/321/213.mdx" +41 -0
  507. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI//320/232/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202/321/213//320/241/321/202/320/270/320/273/320/270 /320/272/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202/321/213.mdx" +58 -0
  508. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI.mdx" +11 -0
  509. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI//320/243/321/202/320/270/320/273/320/270/321/202/321/213.mdx" +5 -0
  510. package/tsconfig.json +91 -0
  511. package/typedoc.json +20 -0
  512. package/vite.config.ts +148 -0
  513. package/.chunks/datepicker-BbASdlXo.es.js +0 -44
  514. package/.chunks/datepicker-BbASdlXo.es.js.map +0 -1
  515. package/.chunks/datepicker-CSpzAz1a.amd.js +0 -2
  516. package/.chunks/datepicker-CSpzAz1a.amd.js.map +0 -1
  517. package/.chunks/forms-BciWy0wX.es.js +0 -1992
  518. package/.chunks/forms-BciWy0wX.es.js.map +0 -1
  519. package/.chunks/forms-Dh0QU6P9.amd.js +0 -3
  520. package/.chunks/forms-Dh0QU6P9.amd.js.map +0 -1
  521. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CZqS-tRD.es.js +0 -181
  522. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CZqS-tRD.es.js.map +0 -1
  523. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-Del8bjSk.amd.js +0 -2
  524. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-Del8bjSk.amd.js.map +0 -1
  525. package/.chunks/menu.vue_vue_type_style_index_0_lang-B8-UPDGJ.amd.js +0 -2
  526. package/.chunks/menu.vue_vue_type_style_index_0_lang-B8-UPDGJ.amd.js.map +0 -1
  527. package/.chunks/menu.vue_vue_type_style_index_0_lang-yNOWbXpd.es.js +0 -109
  528. package/.chunks/menu.vue_vue_type_style_index_0_lang-yNOWbXpd.es.js.map +0 -1
  529. package/.chunks/notice-DEcP2RCJ.amd.js +0 -4
  530. package/.chunks/notice-DEcP2RCJ.amd.js.map +0 -1
  531. package/.chunks/notice-DQSQs6yC.es.js +0 -175
  532. package/.chunks/notice-DQSQs6yC.es.js.map +0 -1
  533. package/.chunks/popup-BdJJx21M.amd.js +0 -2
  534. package/.chunks/popup-BdJJx21M.amd.js.map +0 -1
  535. package/.chunks/popup-D-6PIelY.es.js +0 -416
  536. package/.chunks/popup-D-6PIelY.es.js.map +0 -1
  537. package/.chunks/punycode.es6-C2yitnNb.amd.js +0 -2
  538. package/.chunks/punycode.es6-C2yitnNb.amd.js.map +0 -1
  539. package/.chunks/punycode.es6-CNI-zL6U.es.js +0 -134
  540. package/.chunks/punycode.es6-CNI-zL6U.es.js.map +0 -1
  541. package/.chunks/store-CX_6ZXhO.es.js +0 -29
  542. package/.chunks/store-CX_6ZXhO.es.js.map +0 -1
  543. package/.chunks/store-esTid5oI.amd.js +0 -2
  544. package/.chunks/store-esTid5oI.amd.js.map +0 -1
  545. package/.chunks/utils-9b7woobj.es.js +0 -338
  546. package/.chunks/utils-9b7woobj.es.js.map +0 -1
  547. package/.chunks/utils-BvHwHAyQ.es.js +0 -225
  548. package/.chunks/utils-BvHwHAyQ.es.js.map +0 -1
  549. package/.chunks/utils-CPty_L5T.amd.js +0 -2
  550. package/.chunks/utils-CPty_L5T.amd.js.map +0 -1
  551. package/.chunks/utils-DAfofcEq.amd.js +0 -2
  552. package/.chunks/utils-DAfofcEq.amd.js.map +0 -1
  553. package/assets/charts.css +0 -1
  554. package/assets/core.css +0 -1
  555. package/assets/forms.css +0 -1
  556. package/assets/formsExt.css +0 -1
  557. package/assets/layout.css +0 -1
  558. package/assets/listItem.css +0 -1
  559. package/assets/menu.css +0 -1
  560. package/assets/notice.css +0 -1
  561. package/assets/popup.css +0 -1
  562. package/assets/project.css +0 -1
  563. package/assets/tabs.css +0 -1
  564. package/assets/tabsView.css +0 -1
  565. package/assets/themes/dark-th.css +0 -1
  566. package/assets/themes/dark.css +0 -1
  567. package/assets/themes/light.css +0 -1
  568. package/charts/charts.amd.js +0 -2
  569. package/charts/charts.amd.js.map +0 -1
  570. package/charts/charts.d.ts +0 -2
  571. package/charts/charts.js +0 -178
  572. package/charts/charts.js.map +0 -1
  573. package/components/charts/charts.d.ts +0 -5
  574. package/components/charts/miniChart/miniChart.d.ts +0 -92
  575. package/components/charts/miniChart/miniChart.vue.d.ts +0 -15
  576. package/components/charts/miniChart/stories/dummy.d.ts +0 -13
  577. package/components/charts/miniChart/utils/consts.d.ts +0 -8
  578. package/components/charts/miniCharts/miniCharts.d.ts +0 -20
  579. package/components/charts/miniCharts/miniCharts.vue.d.ts +0 -32
  580. package/components/charts/miniCharts/stories/dummy.d.ts +0 -6
  581. package/components/core/notice/item/item.vue.d.ts +0 -10
  582. package/components/core/notice/item/types.d.ts +0 -61
  583. package/components/core/notice/notice.vue.d.ts +0 -5
  584. package/components/core/notice/types.d.ts +0 -1
  585. package/components/core/notice/utils.d.ts +0 -27
  586. package/components/dialog/dialog/composables/asyncDialogHandle.d.ts +0 -51
  587. package/components/dialog/dialog/composables/dialogHandle.d.ts +0 -108
  588. package/components/dialog/dialog/composables/types.d.ts +0 -11
  589. package/components/dialog/dialog/composables/utils.d.ts +0 -21
  590. package/components/dialog/dialog/dialog.vue.d.ts +0 -28
  591. package/components/dialog/dialog/dialogs/dialogs.vue.d.ts +0 -10
  592. package/components/dialog/dialog/page/page.vue.d.ts +0 -19
  593. package/components/dialog/dialog/page/types.d.ts +0 -72
  594. package/components/dialog/dialog/pageComponent/pageComponent.vue.d.ts +0 -6
  595. package/components/dialog/dialog/pageComponent/types.d.ts +0 -18
  596. package/components/dialog/dialog/stories/autoload.d.ts +0 -2
  597. package/components/dialog/dialog/stories/dialog_example/pages/utils.d.ts +0 -7
  598. package/components/dialog/dialog/types.d.ts +0 -58
  599. package/components/dialog/dialog.d.ts +0 -6
  600. package/components/dialog/lib/types.d.ts +0 -21
  601. package/components/dialog/lib/utils.d.ts +0 -14
  602. package/components/dialog/lib/utils.globalEvents.d.ts +0 -8
  603. package/components/dialog/lib/worker.d.ts +0 -60
  604. package/components/forms/avatar/avatar.d.ts +0 -38
  605. package/components/forms/avatar/avatar.vue.d.ts +0 -10
  606. package/components/forms/button/button.vue.d.ts +0 -25
  607. package/components/forms/button/types.d.ts +0 -53
  608. package/components/forms/checkbox/checkbox.d.ts +0 -21
  609. package/components/forms/checkbox/checkbox.vue.d.ts +0 -27
  610. package/components/forms/controlLabel/controlLabel.d.ts +0 -4
  611. package/components/forms/controlLabel/controlLabel.vue.d.ts +0 -19
  612. package/components/forms/forms.d.ts +0 -27
  613. package/components/forms/helpers.d.ts +0 -10
  614. package/components/forms/hint/hint.d.ts +0 -8
  615. package/components/forms/hint/hint.vue.d.ts +0 -4
  616. package/components/forms/input/input.d.ts +0 -26
  617. package/components/forms/input/input.vue.d.ts +0 -27
  618. package/components/forms/inputDate/datepicker.d.ts +0 -5
  619. package/components/forms/inputDate/inputDate.d.ts +0 -3
  620. package/components/forms/inputDate/inputDate.vue.d.ts +0 -12
  621. package/components/forms/inputRange/inputRange.d.ts +0 -2
  622. package/components/forms/inputRange/inputRange.vue.d.ts +0 -19
  623. package/components/forms/loadbar/loadbar.vue.d.ts +0 -3
  624. package/components/forms/radio/radio.d.ts +0 -14
  625. package/components/forms/radio/radio.vue.d.ts +0 -23
  626. package/components/forms/select/select.d.ts +0 -51
  627. package/components/forms/select/select.vue.d.ts +0 -17
  628. package/components/forms/select/stories/exampleOptions.d.ts +0 -5
  629. package/components/forms/switcher/switcher.d.ts +0 -21
  630. package/components/forms/switcher/switcher.vue.d.ts +0 -23
  631. package/components/forms/textarea/textarea.d.ts +0 -33
  632. package/components/forms/textarea/textarea.vue.d.ts +0 -11
  633. package/components/formsExt/editArea/editArea.d.ts +0 -33
  634. package/components/formsExt/editArea/editArea.vue.d.ts +0 -18
  635. package/components/formsExt/editInput/editInput.d.ts +0 -16
  636. package/components/formsExt/editInput/editInput.vue.d.ts +0 -8
  637. package/components/formsExt/formsExt.d.ts +0 -13
  638. package/components/formsExt/info/info.vue.d.ts +0 -20
  639. package/components/formsExt/info/types.d.ts +0 -21
  640. package/components/formsExt/menu/menu.d.ts +0 -37
  641. package/components/formsExt/menu/menu.vue.d.ts +0 -16
  642. package/components/formsExt/menu/stories/items.d.ts +0 -3
  643. package/components/formsExt/radioGroup/radioGroup.d.ts +0 -21
  644. package/components/formsExt/radioGroup/radioGroup.vue.d.ts +0 -19
  645. package/components/formsExt/selector2/api.d.ts +0 -8
  646. package/components/formsExt/selector2/itemMulti.vue.d.ts +0 -8
  647. package/components/formsExt/selector2/selector2.d.ts +0 -130
  648. package/components/formsExt/selector2/selector2.vue.d.ts +0 -210
  649. package/components/formsExt/selector2/stories/dummyAPIRequest.d.ts +0 -10
  650. package/components/layout/islandRows/islandRows.vue.d.ts +0 -17
  651. package/components/layout/islandRows/islandRowsRow/islandRowsRow.vue.d.ts +0 -18
  652. package/components/layout/islandRows/islandRowsRow/types.d.ts +0 -2
  653. package/components/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue.d.ts +0 -18
  654. package/components/layout/islandRows/types.d.ts +0 -10
  655. package/components/layout/layout.d.ts +0 -9
  656. package/components/layout/rows/rows.vue.d.ts +0 -21
  657. package/components/layout/rows/types.d.ts +0 -6
  658. package/components/popup/alert/alert.d.ts +0 -8
  659. package/components/popup/alert/alert.vue.d.ts +0 -31
  660. package/components/popup/confirm/confirm.d.ts +0 -21
  661. package/components/popup/confirm/confirm.vue.d.ts +0 -33
  662. package/components/popup/lib/popup.d.ts +0 -83
  663. package/components/popup/lib/popup.globalEvents.d.ts +0 -26
  664. package/components/popup/lib/worker.d.ts +0 -75
  665. package/components/popup/lib/worker.globalEvents.d.ts +0 -19
  666. package/components/popup/popup/listItem.vue.d.ts +0 -22
  667. package/components/popup/popup/opener.vue.d.ts +0 -23
  668. package/components/popup/popup/popup.d.ts +0 -101
  669. package/components/popup/popup/popup.vue.d.ts +0 -40
  670. package/components/popup/popup/widgetInput.vue.d.ts +0 -17
  671. package/components/popup/popup.d.ts +0 -15
  672. package/components/popup/prompt/prompt.d.ts +0 -21
  673. package/components/popup/prompt/prompt.vue.d.ts +0 -33
  674. package/components/popup/worker.d.ts +0 -1
  675. package/components/project/project.d.ts +0 -15
  676. package/components/project/selectorCompetitors/composables.d.ts +0 -4
  677. package/components/project/selectorCompetitors/selectorCompetitors.d.ts +0 -23
  678. package/components/project/selectorCompetitors/selectorCompetitors.vue.d.ts +0 -14
  679. package/components/project/selectorCompetitors/stories/items.d.ts +0 -3
  680. package/components/project/selectorCompetitors/types/competitor.d.ts +0 -7
  681. package/components/project/selectorRegion/composables/compare.d.ts +0 -12
  682. package/components/project/selectorRegion/composables/selectRegion.d.ts +0 -14
  683. package/components/project/selectorRegion/composables/selectSearcher.d.ts +0 -13
  684. package/components/project/selectorRegion/composables/selectorRegion.d.ts +0 -25
  685. package/components/project/selectorRegion/selectorRegion.d.ts +0 -182
  686. package/components/project/selectorRegion/selectorRegion.vue.d.ts +0 -25
  687. package/components/project/selectorRegion/stories/searchers.d.ts +0 -3
  688. package/components/project/selectorRegion/utils/consts.d.ts +0 -18
  689. package/components/project/selectorRegion/utils/utils.d.ts +0 -23
  690. package/components/project/tagSelector/popupListItem/tagPopupListItem.vue.d.ts +0 -20
  691. package/components/project/tagSelector/popupListItem/types.d.ts +0 -33
  692. package/components/project/tagSelector/popupOpener/popupOpener.vue.d.ts +0 -27
  693. package/components/project/tagSelector/popupOpener/types.d.ts +0 -62
  694. package/components/project/tagSelector/tagIcon/tagIcon.vue.d.ts +0 -4
  695. package/components/project/tagSelector/tagIcon/types.d.ts +0 -21
  696. package/components/project/tagSelector/tagSelector.vue.d.ts +0 -37
  697. package/components/project/tagSelector/tagsDefaults.d.ts +0 -3
  698. package/components/project/tagSelector/types.d.ts +0 -138
  699. package/components/project/tagSelector/utils/el.d.ts +0 -19
  700. package/components/project/tagSelector/utils/utils.d.ts +0 -14
  701. package/components/tabs/tabs/content.vue.d.ts +0 -19
  702. package/components/tabs/tabs/tab.vue.d.ts +0 -19
  703. package/components/tabs/tabs/tabs.d.ts +0 -19
  704. package/components/tabs/tabs/tabs.vue.d.ts +0 -21
  705. package/components/tabs/tabs.d.ts +0 -7
  706. package/components/tabsView/tabsView/menu.vue.d.ts +0 -32
  707. package/components/tabsView/tabsView/menuDelimeter.vue.d.ts +0 -3
  708. package/components/tabsView/tabsView/menuItem.vue.d.ts +0 -23
  709. package/components/tabsView/tabsView/menuTitle.vue.d.ts +0 -20
  710. package/components/tabsView/tabsView/store.d.ts +0 -192
  711. package/components/tabsView/tabsView/tabsView.d.ts +0 -98
  712. package/components/tabsView/tabsView/tabsView.vue.d.ts +0 -34
  713. package/components/tabsView/tabsView/utils.d.ts +0 -11
  714. package/components/tabsView/tabsView.d.ts +0 -7
  715. package/core/app.amd.js +0 -2
  716. package/core/app.amd.js.map +0 -1
  717. package/core/app.d.ts +0 -8
  718. package/core/app.js +0 -402
  719. package/core/app.js.map +0 -1
  720. package/core/core/core.d.ts +0 -113
  721. package/core/core/events/resize.d.ts +0 -16
  722. package/core/core/events.d.ts +0 -15
  723. package/core/core/options.d.ts +0 -46
  724. package/core/core/preloaders.d.ts +0 -19
  725. package/core/core/state.d.ts +0 -49
  726. package/core/directives/data.d.ts +0 -10
  727. package/core/directives/focus.d.ts +0 -10
  728. package/core/directives/scrollIntoView.d.ts +0 -3
  729. package/core/directives/scrollShadow.d.ts +0 -15
  730. package/core/directives/sticky.d.ts +0 -10
  731. package/core/directives/swimUp.d.ts +0 -15
  732. package/core/directives/tooltip.d.ts +0 -10
  733. package/core/plugins/core.d.ts +0 -60
  734. package/core/plugins/i18n.d.ts +0 -97
  735. package/core/plugins/piniaTPA.d.ts +0 -17
  736. package/core/utils/check.d.ts +0 -26
  737. package/core/utils/clipboard.d.ts +0 -12
  738. package/core/utils/date.d.ts +0 -52
  739. package/core/utils/device.d.ts +0 -50
  740. package/core/utils/dom.d.ts +0 -94
  741. package/core/utils/image.d.ts +0 -16
  742. package/core/utils/keyboard.d.ts +0 -8
  743. package/core/utils/lodash.d.ts +0 -6
  744. package/core/utils/number.d.ts +0 -17
  745. package/core/utils/price.d.ts +0 -10
  746. package/core/utils/route.d.ts +0 -33
  747. package/core/utils/scroll.d.ts +0 -32
  748. package/core/utils/searchers.d.ts +0 -38
  749. package/core/utils/store/localStorage.d.ts +0 -6
  750. package/core/utils/store/plugin.d.ts +0 -24
  751. package/core/utils/store/store.d.ts +0 -34
  752. package/core/utils/store.d.ts +0 -6
  753. package/core/utils/string.d.ts +0 -86
  754. package/core/utils/system.d.ts +0 -25
  755. package/core/utils/url.d.ts +0 -36
  756. package/dialog/dialog.amd.js +0 -2
  757. package/dialog/dialog.amd.js.map +0 -1
  758. package/dialog/dialog.d.ts +0 -2
  759. package/dialog/dialog.js +0 -193
  760. package/dialog/dialog.js.map +0 -1
  761. package/forms/forms.amd.js +0 -2
  762. package/forms/forms.amd.js.map +0 -1
  763. package/forms/forms.d.ts +0 -2
  764. package/forms/forms.js +0 -17
  765. package/forms/forms.js.map +0 -1
  766. package/forms/helpers.amd.js +0 -2
  767. package/forms/helpers.amd.js.map +0 -1
  768. package/forms/helpers.d.ts +0 -2
  769. package/forms/helpers.js +0 -10
  770. package/forms/helpers.js.map +0 -1
  771. package/formsExt/formsExt.amd.js +0 -2
  772. package/formsExt/formsExt.amd.js.map +0 -1
  773. package/formsExt/formsExt.d.ts +0 -2
  774. package/formsExt/formsExt.js +0 -483
  775. package/formsExt/formsExt.js.map +0 -1
  776. package/layout/layout.amd.js +0 -2
  777. package/layout/layout.amd.js.map +0 -1
  778. package/layout/layout.d.ts +0 -2
  779. package/layout/layout.js +0 -62
  780. package/layout/layout.js.map +0 -1
  781. package/popup/popup.amd.js +0 -2
  782. package/popup/popup.amd.js.map +0 -1
  783. package/popup/popup.d.ts +0 -2
  784. package/popup/popup.js +0 -243
  785. package/popup/popup.js.map +0 -1
  786. package/popup/worker.amd.js +0 -2
  787. package/popup/worker.amd.js.map +0 -1
  788. package/popup/worker.d.ts +0 -2
  789. package/popup/worker.js +0 -129
  790. package/popup/worker.js.map +0 -1
  791. package/project/project.amd.js +0 -2
  792. package/project/project.amd.js.map +0 -1
  793. package/project/project.d.ts +0 -2
  794. package/project/project.js +0 -975
  795. package/project/project.js.map +0 -1
  796. package/tabs/tabs.amd.js +0 -2
  797. package/tabs/tabs.amd.js.map +0 -1
  798. package/tabs/tabs.d.ts +0 -2
  799. package/tabs/tabs.js +0 -81
  800. package/tabs/tabs.js.map +0 -1
  801. package/tabsView/tabsView.amd.js +0 -2
  802. package/tabsView/tabsView.amd.js.map +0 -1
  803. package/tabsView/tabsView.d.ts +0 -2
  804. package/tabsView/tabsView.js +0 -306
  805. package/tabsView/tabsView.js.map +0 -1
  806. package/utils/check.amd.js +0 -2
  807. package/utils/check.amd.js.map +0 -1
  808. package/utils/check.d.ts +0 -2
  809. package/utils/check.js +0 -26
  810. package/utils/check.js.map +0 -1
  811. package/utils/clipboard.amd.js +0 -6
  812. package/utils/clipboard.amd.js.map +0 -1
  813. package/utils/clipboard.d.ts +0 -2
  814. package/utils/clipboard.js +0 -33
  815. package/utils/clipboard.js.map +0 -1
  816. package/utils/date.amd.js +0 -2
  817. package/utils/date.amd.js.map +0 -1
  818. package/utils/date.d.ts +0 -2
  819. package/utils/date.js +0 -11
  820. package/utils/date.js.map +0 -1
  821. package/utils/device.amd.js +0 -2
  822. package/utils/device.amd.js.map +0 -1
  823. package/utils/device.d.ts +0 -2
  824. package/utils/device.js +0 -15
  825. package/utils/device.js.map +0 -1
  826. package/utils/dom.amd.js +0 -2
  827. package/utils/dom.amd.js.map +0 -1
  828. package/utils/dom.d.ts +0 -6
  829. package/utils/dom.js +0 -75
  830. package/utils/dom.js.map +0 -1
  831. package/utils/image.amd.js +0 -12
  832. package/utils/image.amd.js.map +0 -1
  833. package/utils/image.d.ts +0 -2
  834. package/utils/image.js +0 -23
  835. package/utils/image.js.map +0 -1
  836. package/utils/keyboard.amd.js +0 -2
  837. package/utils/keyboard.amd.js.map +0 -1
  838. package/utils/keyboard.d.ts +0 -2
  839. package/utils/keyboard.js +0 -12
  840. package/utils/keyboard.js.map +0 -1
  841. package/utils/lodash.amd.js +0 -2
  842. package/utils/lodash.amd.js.map +0 -1
  843. package/utils/lodash.d.ts +0 -2
  844. package/utils/lodash.js +0 -9
  845. package/utils/lodash.js.map +0 -1
  846. package/utils/number.amd.js +0 -2
  847. package/utils/number.amd.js.map +0 -1
  848. package/utils/number.d.ts +0 -2
  849. package/utils/number.js +0 -13
  850. package/utils/number.js.map +0 -1
  851. package/utils/price.amd.js +0 -2
  852. package/utils/price.amd.js.map +0 -1
  853. package/utils/price.d.ts +0 -2
  854. package/utils/price.js +0 -10
  855. package/utils/price.js.map +0 -1
  856. package/utils/route.amd.js +0 -2
  857. package/utils/route.amd.js.map +0 -1
  858. package/utils/route.d.ts +0 -2
  859. package/utils/route.js +0 -31
  860. package/utils/route.js.map +0 -1
  861. package/utils/scroll.amd.js +0 -2
  862. package/utils/scroll.amd.js.map +0 -1
  863. package/utils/scroll.d.ts +0 -2
  864. package/utils/scroll.js +0 -45
  865. package/utils/scroll.js.map +0 -1
  866. package/utils/searchers.amd.js +0 -2
  867. package/utils/searchers.amd.js.map +0 -1
  868. package/utils/searchers.d.ts +0 -2
  869. package/utils/searchers.js +0 -130
  870. package/utils/searchers.js.map +0 -1
  871. package/utils/store.amd.js +0 -2
  872. package/utils/store.amd.js.map +0 -1
  873. package/utils/store.d.ts +0 -2
  874. package/utils/store.js +0 -7
  875. package/utils/store.js.map +0 -1
  876. package/utils/string.amd.js +0 -2
  877. package/utils/string.amd.js.map +0 -1
  878. package/utils/string.d.ts +0 -2
  879. package/utils/string.js +0 -139
  880. package/utils/string.js.map +0 -1
  881. package/utils/system.amd.js +0 -2
  882. package/utils/system.amd.js.map +0 -1
  883. package/utils/system.d.ts +0 -2
  884. package/utils/system.js +0 -29
  885. package/utils/system.js.map +0 -1
  886. package/utils/url.amd.js +0 -3
  887. package/utils/url.amd.js.map +0 -1
  888. package/utils/url.d.ts +0 -2
  889. package/utils/url.js +0 -48
  890. package/utils/url.js.map +0 -1
  891. /package/{icomoon → public/icomoon}/Read Me.txt +0 -0
  892. /package/{icomoon → public/icomoon}/Topvisor icons.json +0 -0
  893. /package/{icomoon → public/icomoon}/demo-files/demo.css +0 -0
  894. /package/{icomoon → public/icomoon}/demo-files/demo.js +0 -0
  895. /package/{icomoon → public/icomoon}/demo.html +0 -0
  896. /package/{icomoon → public/icomoon}/fonts/Topvisor-2.eot +0 -0
  897. /package/{icomoon → public/icomoon}/fonts/Topvisor-2.svg +0 -0
  898. /package/{icomoon → public/icomoon}/fonts/Topvisor-2.ttf +0 -0
  899. /package/{icomoon → public/icomoon}/fonts/Topvisor-2.woff +0 -0
  900. /package/{icomoon → public/icomoon}/selection.json +0 -0
  901. /package/{icomoon → public/icomoon}/style.css +0 -0
  902. /package/{jquery-ui.min.css → public/jquery-ui.min.css} +0 -0
  903. /package/{require → public/require}/css.amd.js +0 -0
package/popup/worker.js DELETED
@@ -1,129 +0,0 @@
1
- import { C as Core } from "../.chunks/forms-BciWy0wX.es.js";
2
- import DOM from "../utils/dom.js";
3
- class Worker {
4
- /**
5
- * Глобальное выключение закрытия меню, используется при различных оверлеях
6
- */
7
- static noClose = !1;
8
- /**
9
- * Для взаимодействия с vue
10
- */
11
- static vueConnectors = /* @__PURE__ */ new Map();
12
- static options = {};
13
- /**
14
- * Вернуть объект компонента popup, привязанный к элементу
15
- */
16
- static getPopup(t) {
17
- return DOM.storage(t, "TopPopup");
18
- }
19
- /**
20
- * Вернуть все элементы с Popup
21
- */
22
- static getAll() {
23
- return DOM.querySelectorAllArray(document, ".top-popup-wrapper");
24
- }
25
- /**
26
- * Вернуть все элементы с открытыми Popup
27
- */
28
- static getAllVisible() {
29
- return DOM.querySelectorAllVisible(document, ".top-popup-wrapper");
30
- }
31
- /**
32
- * Открть Popup от указанного elOpener
33
- * @param {HTMLElement} elOpener - элемент, который должен вызвать открытие Popup
34
- */
35
- static async openByOpener(t) {
36
- if (!(t instanceof HTMLElement)) return;
37
- const o = {};
38
- return o.popup = t.dataset.topPopup, o.id = t.dataset.topPopupId, t.dataset.topPopupP && (o.p = parseInt(t.dataset.topPopupP)), t.dataset.topPopupPos && (o.p = parseInt(t.dataset.topPopupPos)), t.dataset.topPopupNotch && (o.notch = t.dataset.topPopupNotch === "true" || t.dataset.topPopupNotch === "1"), t.dataset.topPopupClass && (o.class = t.dataset.topPopupClass), t.dataset.topPopupPosBy && (o.posBy = t.dataset.topPopupPosBy), t.dataset.topPopupFront && (o.frontSelector = t.dataset.topPopupFront), t.dataset.topPopupInvertX && (o.invertX = t.dataset.topPopupInvertX === "true" || t.dataset.topPopupInvertX === "1"), t.dataset.topPopupOpenByHover && (o.openByHover = t.dataset.topPopupOpenByHover === "true" || t.dataset.topPopupOpenByHover === "1"), t.dataset.topPopupUseOriginal && (o.useOriginal = t.dataset.topPopupUseOriginal === "true" || t.dataset.topPopupUseOriginal === "1"), await Worker.open(t, o);
39
- }
40
- /**
41
- * Создать и открыть Popup
42
- * @param elOpener - элемент, вызвавший открытие Popup
43
- * @param options - опции Popup
44
- */
45
- static async open(elOpener, options) {
46
- elOpener instanceof HTMLElement && (elOpener.dataset.topPopupOpened = "opened");
47
- const { TopLibPopup } = await import("../.chunks/popup-D-6PIelY.es.js");
48
- if (Core.$) {
49
- const $elOpener = Core.$(elOpener);
50
- if ($elOpener.data("aftershow")) {
51
- let afterShow = $elOpener.data("aftershow");
52
- typeof afterShow == "string" && (afterShow = eval(afterShow.replace(/\W/g, ""))), $elOpener.one("aftershow.top-menu-popup", afterShow);
53
- }
54
- if ($elOpener.data("afterclose")) {
55
- let afterclose = $elOpener.data("afterclose");
56
- typeof afterclose == "string" && (afterclose = eval(afterclose.replace(/\W/g, ""))), $elOpener.one("afterclose.top-menu-popup", afterclose);
57
- }
58
- }
59
- return options.isFullScreen = Core.state.isMobile, new TopLibPopup(elOpener, options);
60
- }
61
- static close(t) {
62
- const o = Worker.getPopup(t);
63
- o && o.close();
64
- }
65
- static recalcPosition(t) {
66
- const o = Worker.getPopup(t);
67
- o && o.elPopupBody instanceof HTMLElement && o.recalcPosition();
68
- }
69
- /**
70
- * Скролл к активному элементу списка
71
- */
72
- static scrollToActive(t) {
73
- if (!DOM.querySelectorVisible(t, "ul.top-popup_content > li > .top-active"))
74
- return;
75
- const a = t.querySelector("ul.top-popup_content"), s = DOM.querySelectorAllVisible(t, "ul.top-popup_content > li");
76
- t.classList.add("top-popup-wrapper-no_animate"), setTimeout(() => t.classList.remove("top-popup-wrapper-no_animate"), 100);
77
- let p = 100;
78
- for (const e of s) {
79
- if (e.querySelector(":scope > .top-active"))
80
- break;
81
- e instanceof HTMLElement && (p += e.offsetHeight);
82
- }
83
- if (a instanceof HTMLElement) {
84
- const e = a.offsetHeight;
85
- p > e ? a.scrollTop = p - e : a.scrollTop = 0;
86
- }
87
- }
88
- static decoratorBeforeOpen(t) {
89
- this.options.decoratorBeforeOpen && this.options.decoratorBeforeOpen(t);
90
- }
91
- static decoratorAfterOpen(t) {
92
- this.options.decoratorAfterOpen && this.options.decoratorAfterOpen(t);
93
- }
94
- static decoratorIsIgnoreOuterClick(t) {
95
- return this.options.decoratorIsIgnoreOuterClick ? this.options.decoratorIsIgnoreOuterClick(t) : !1;
96
- }
97
- /**
98
- * Зарегистрировать Vue компонент
99
- *
100
- * Каждый экземляр Popup регистрируется в словаре vueConnectors для последующего доступа из js
101
- */
102
- static regVueComponent(t, o) {
103
- if (Worker.vueConnectors.get(t))
104
- throw "Vue component Popup use duplicated id: " + t;
105
- Worker.vueConnectors.set(t, o);
106
- }
107
- /**
108
- * Снять с регистрации Vue компонент
109
- */
110
- static unregVueComponent(t) {
111
- Worker.vueConnectors.delete(t);
112
- }
113
- /**
114
- * Сгенерировтаь элемент для открытия popup
115
- */
116
- static genElPopupOpener(t, o, ...a) {
117
- const s = DOM.genEl(t, {}, ...a);
118
- s.dataset.topPopup = "#" + o.id;
119
- for (let p in o) {
120
- const e = "topPopup" + p.charAt(0).toUpperCase() + p.slice(1);
121
- s.dataset[e] = o[p];
122
- }
123
- return s;
124
- }
125
- }
126
- export {
127
- Worker as TopPopupWorker
128
- };
129
- //# sourceMappingURL=worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sources":["../../src/components/popup/lib/worker.ts"],"sourcesContent":["/**\r\n * PopupWorker управлеяет работой Popup\r\n *\r\n * Должен грузить TopLibPopup только в отложенном режиме\r\n */\r\n\r\nimport Core from '@/core/core/core';\r\nimport DOM from '@/core/utils/dom';\r\nimport type { TopLibPopup, PopupOptions } from '@/components/popup/lib/popup';\r\nimport type { OpenerProps } from '@/components/popup/popup/popup';\r\n\r\nexport type Options = {\r\n\t/**\r\n\t * Глобальное событие, которое будет вызвано перед открытием TopPopup\r\n\t */\r\n\tdecoratorBeforeOpen?: (popup: TopLibPopup) => void,\r\n\r\n\t/**\r\n\t * Глобальное событие, которое будет вызвано после открытия TopPopup\r\n\t */\r\n\tdecoratorAfterOpen?: (popup: TopLibPopup) => void;\r\n\r\n\t/**\r\n\t * Определитель того, что клик вне Popup нужно игнорировать\r\n\t * @returns {boolean} - если true, то click не приведет к закрытию Popup\r\n\t */\r\n\tdecoratorIsIgnoreOuterClick?: (e: MouseEvent) => boolean\r\n}\r\n\r\nclass Worker {\r\n\r\n\t/**\r\n\t * Глобальное выключение закрытия меню, используется при различных оверлеях\r\n\t */\r\n\tstatic noClose = false;\r\n\r\n\t/**\r\n\t * Для взаимодействия с vue\r\n\t */\r\n\tstatic vueConnectors = new Map();\r\n\r\n\tstatic options: Options = {};\r\n\r\n\t/**\r\n\t * Вернуть объект компонента popup, привязанный к элементу\r\n\t */\r\n\tstatic getPopup(elPopup: HTMLElement): TopLibPopup {\r\n\t\treturn DOM.storage(elPopup, 'TopPopup') as TopLibPopup;\r\n\t}\r\n\r\n\t/**\r\n\t * Вернуть все элементы с Popup\r\n\t */\r\n\tstatic getAll(): HTMLElement[] {\r\n\t\treturn DOM.querySelectorAllArray(document, '.top-popup-wrapper');\r\n\t}\r\n\r\n\t/**\r\n\t * Вернуть все элементы с открытыми Popup\r\n\t */\r\n\tstatic getAllVisible(): HTMLElement[] {\r\n\t\treturn DOM.querySelectorAllVisible(document, '.top-popup-wrapper');\r\n\t}\r\n\r\n\t/**\r\n\t * Открть Popup от указанного elOpener\r\n\t * @param {HTMLElement} elOpener - элемент, который должен вызвать открытие Popup\r\n\t */\r\n\tstatic async openByOpener(elOpener: HTMLElement): Promise<TopLibPopup | undefined> {\r\n\t\tif (!(elOpener instanceof HTMLElement)) return;\r\n\r\n\t\tconst options: PopupOptions = {};\r\n\r\n\t\toptions.popup = elOpener.dataset.topPopup;\r\n\r\n\t\toptions.id = elOpener.dataset.topPopupId;\r\n\r\n\t\t/**\r\n\t\t * @deprecated topPopupP - добавлено для обратной совместимости\r\n\t\t */\r\n\t\tif (elOpener.dataset.topPopupP) {\r\n\t\t\toptions.p = parseInt(elOpener.dataset.topPopupP);\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupPos) {\r\n\t\t\toptions.p = parseInt(elOpener.dataset.topPopupPos);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * @deprecated '1' - добавлено для обратной совместимости\r\n\t\t */\r\n\t\tif (elOpener.dataset.topPopupNotch) {\r\n\t\t\toptions.notch = elOpener.dataset.topPopupNotch === 'true' || elOpener.dataset.topPopupNotch === '1';\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupClass) {\r\n\t\t\toptions.class = elOpener.dataset.topPopupClass;\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupPosBy) {\r\n\t\t\toptions.posBy = elOpener.dataset.topPopupPosBy as PopupOptions['posBy'];\r\n\t\t}\r\n\r\n\t\tif (elOpener.dataset.topPopupFront) {\r\n\t\t\toptions.frontSelector = elOpener.dataset.topPopupFront;\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * @deprecated '1' - добавлено для обратной совместимости\r\n\t\t */\r\n\t\tif (elOpener.dataset.topPopupInvertX) {\r\n\t\t\toptions.invertX = elOpener.dataset.topPopupInvertX === 'true' || elOpener.dataset.topPopupInvertX === '1';\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * @deprecated '1' - добавлено для обратной совместимости\r\n\t\t */\r\n\t\tif (elOpener.dataset.topPopupOpenByHover) {\r\n\t\t\toptions.openByHover = elOpener.dataset.topPopupOpenByHover === 'true' || elOpener.dataset.topPopupOpenByHover === '1';\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * @deprecated '1' - добавлено для обратной совместимости\r\n\t\t */\r\n\t\tif (elOpener.dataset.topPopupUseOriginal) {\r\n\t\t\toptions.useOriginal = elOpener.dataset.topPopupUseOriginal === 'true' || elOpener.dataset.topPopupUseOriginal === '1';\r\n\t\t}\r\n\r\n\t\treturn await Worker.open(elOpener, options);\r\n\t}\r\n\r\n\t/**\r\n\t * Создать и открыть Popup\r\n\t * @param elOpener - элемент, вызвавший открытие Popup\r\n\t * @param options - опции Popup\r\n\t */\r\n\tprivate static async open(elOpener: HTMLElement, options: PopupOptions): Promise<TopLibPopup> {\r\n\t\tif (elOpener instanceof HTMLElement) elOpener.dataset.topPopupOpened = 'opened';\r\n\r\n\t\tconst { TopLibPopup } = await import('./popup');\r\n\r\n\t\tif (Core.$) {\r\n\t\t\tconst $elOpener = Core.$(elOpener);\r\n\r\n\t\t\t// deprecated, используется aftershow.top-menu-popup\r\n\t\t\tif ($elOpener.data('aftershow')) {\r\n\t\t\t\tlet afterShow = $elOpener.data('aftershow');\r\n\t\t\t\tif (typeof (afterShow) == 'string') {\r\n\t\t\t\t\t// TODO: Удалить с сайта указание кода функции в html\r\n\t\t\t\t\t// @deprecated\r\n\t\t\t\t\tafterShow = eval(afterShow.replace(/\\W/g, ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$elOpener.one('aftershow.top-menu-popup', afterShow);\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated, используется afterclose.top-menu-popup\r\n\t\t\tif ($elOpener.data('afterclose')) {\r\n\t\t\t\tlet afterclose = $elOpener.data('afterclose');\r\n\t\t\t\tif (typeof (afterclose) == 'string') {\r\n\t\t\t\t\t// TODO: Удалить с сайта указание кода функции в html\r\n\t\t\t\t\t// @deprecated\r\n\t\t\t\t\tafterclose = eval(afterclose.replace(/\\W/g, ''));\r\n\t\t\t\t}\r\n\r\n\t\t\t\t$elOpener.one('afterclose.top-menu-popup', afterclose);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\toptions.isFullScreen = Core.state.isMobile;\r\n\r\n\t\treturn new TopLibPopup(elOpener, options);\r\n\t}\r\n\r\n\tstatic close(elPopup: HTMLElement): void {\r\n\t\tconst popup = Worker.getPopup(elPopup);\r\n\t\tif (popup) {\r\n\t\t\tpopup.close();\r\n\t\t}\r\n\t}\r\n\r\n\tstatic recalcPosition(elPopup: HTMLElement): void {\r\n\t\tconst popup = Worker.getPopup(elPopup);\r\n\t\tif (popup && popup.elPopupBody instanceof HTMLElement) {\r\n\t\t\tpopup.recalcPosition();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Скролл к активному элементу списка\r\n\t */\r\n\tstatic scrollToActive(elPopup: HTMLElement): void {\r\n\t\tconst elItemActive = DOM.querySelectorVisible(elPopup, 'ul.top-popup_content > li > .top-active');\r\n\t\tif (!elItemActive) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elUl = elPopup.querySelector('ul.top-popup_content');\r\n\t\tconst elsLi = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li');\r\n\r\n\t\telPopup.classList.add('top-popup-wrapper-no_animate');\r\n\t\tsetTimeout(() => elPopup.classList.remove('top-popup-wrapper-no_animate'), 100);\r\n\r\n\t\tlet top = 100;\r\n\t\tfor (const elLi of elsLi) {\r\n\t\t\tif (elLi.querySelector(':scope > .top-active')) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (elLi instanceof HTMLElement) top += elLi.offsetHeight;\r\n\t\t}\r\n\r\n\t\tif (elUl instanceof HTMLElement) {\r\n\t\t\tconst heightWrapper = elUl.offsetHeight;\r\n\t\t\tif (top > heightWrapper) {\r\n\t\t\t\telUl.scrollTop = top - heightWrapper;\r\n\t\t\t} else {\r\n\t\t\t\telUl.scrollTop = 0;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tstatic decoratorBeforeOpen(popup: TopLibPopup): void {\r\n\t\tif (this.options.decoratorBeforeOpen) {\r\n\t\t\tthis.options.decoratorBeforeOpen(popup);\r\n\t\t}\r\n\t};\r\n\r\n\tstatic decoratorAfterOpen(popup: TopLibPopup): void {\r\n\t\tif (this.options.decoratorAfterOpen) {\r\n\t\t\tthis.options.decoratorAfterOpen(popup);\r\n\t\t}\r\n\t};\r\n\r\n\tstatic decoratorIsIgnoreOuterClick(e: MouseEvent): boolean {\r\n\t\tif (this.options.decoratorIsIgnoreOuterClick) {\r\n\t\t\treturn this.options.decoratorIsIgnoreOuterClick(e);\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Зарегистрировать Vue компонент\r\n\t *\r\n\t * Каждый экземляр Popup регистрируется в словаре vueConnectors для последующего доступа из js\r\n\t */\r\n\tstatic regVueComponent(id: string, vueConnector: any): void {\r\n\t\tif (Worker.vueConnectors.get(id)) {\r\n\t\t\tthrow 'Vue component Popup use duplicated id: ' + id;\r\n\t\t}\r\n\r\n\t\tWorker.vueConnectors.set(id, vueConnector);\r\n\t}\r\n\r\n\t/**\r\n\t * Снять с регистрации Vue компонент\r\n\t */\r\n\tstatic unregVueComponent(id: string): void {\r\n\t\tWorker.vueConnectors.delete(id);\r\n\t}\r\n\r\n\t/**\r\n\t * Сгенерировтаь элемент для открытия popup\r\n\t */\r\n\tstatic genElPopupOpener(tagName: string, props: OpenerProps, ...elsChildrens: HTMLElement[] | string[]): HTMLElement {\r\n\t\tconst el = DOM.genEl(tagName, {}, ...elsChildrens);\r\n\r\n\t\tel.dataset.topPopup = '#' + props.id;\r\n\r\n\t\t// if (props.pos === undefined) props.pos = '3';\r\n\t\t// if (props.notch === undefined) props.notch = true;\r\n\t\t// if (props.posBy === undefined) props.posBy = 'fixed';\r\n\r\n\t\tfor (let name in props) {\r\n\t\t\tconst attrName = 'topPopup' + name.charAt(0).toUpperCase() + name.slice(1);\r\n\r\n\t\t\tel.dataset[attrName] = props[name];\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n}\r\n\r\nexport default Worker;\r\n"],"names":["elPopup","elOpener","options","popup","elUl","elsLi","top","elLi","heightWrapper","e","id","vueConnector","tagName","props","elsChildrens","el","name","attrName"],"mappings":";;AA6BA,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA,EAKZ,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,EAKjB,OAAO,gBAAgB,oBAAI,IAAI;AAAA,EAE/B,OAAO,UAAmB,CAAC;AAAA;AAAA;AAAA;AAAA,EAK3B,OAAO,SAASA,GAAmC;AAC3C,WAAA,IAAI,QAAQA,GAAS,UAAU;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAMvC,OAAO,SAAwB;AACvB,WAAA,IAAI,sBAAsB,UAAU,oBAAoB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAMhE,OAAO,gBAA+B;AAC9B,WAAA,IAAI,wBAAwB,UAAU,oBAAoB;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlE,aAAa,aAAaC,GAAyD;AAC9E,QAAA,EAAEA,aAAoB,aAAc;AAExC,UAAMC,IAAwB,CAAC;AAE/BA,WAAAA,EAAQ,QAAQD,EAAS,QAAQ,UAEjCC,EAAQ,KAAKD,EAAS,QAAQ,YAK1BA,EAAS,QAAQ,cACpBC,EAAQ,IAAI,SAASD,EAAS,QAAQ,SAAS,IAG5CA,EAAS,QAAQ,gBACpBC,EAAQ,IAAI,SAASD,EAAS,QAAQ,WAAW,IAM9CA,EAAS,QAAQ,kBACpBC,EAAQ,QAAQD,EAAS,QAAQ,kBAAkB,UAAUA,EAAS,QAAQ,kBAAkB,MAG7FA,EAAS,QAAQ,kBACpBC,EAAQ,QAAQD,EAAS,QAAQ,gBAG9BA,EAAS,QAAQ,kBACpBC,EAAQ,QAAQD,EAAS,QAAQ,gBAG9BA,EAAS,QAAQ,kBACpBC,EAAQ,gBAAgBD,EAAS,QAAQ,gBAMtCA,EAAS,QAAQ,oBACpBC,EAAQ,UAAUD,EAAS,QAAQ,oBAAoB,UAAUA,EAAS,QAAQ,oBAAoB,MAMnGA,EAAS,QAAQ,wBACpBC,EAAQ,cAAcD,EAAS,QAAQ,wBAAwB,UAAUA,EAAS,QAAQ,wBAAwB,MAM/GA,EAAS,QAAQ,wBACpBC,EAAQ,cAAcD,EAAS,QAAQ,wBAAwB,UAAUA,EAAS,QAAQ,wBAAwB,MAG5G,MAAM,OAAO,KAAKA,GAAUC,CAAO;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ3C,aAAqB,KAAK,UAAuB,SAA6C;AAC7F,IAAI,oBAAoB,gBAAsB,SAAA,QAAQ,iBAAiB;AAEvE,UAAM,EAAE,YAAA,IAAgB,MAAM,OAAO,iCAAS;AAE9C,QAAI,KAAK,GAAG;AACL,YAAA,YAAY,KAAK,EAAE,QAAQ;AAG7B,UAAA,UAAU,KAAK,WAAW,GAAG;AAC5B,YAAA,YAAY,UAAU,KAAK,WAAW;AACtC,QAAA,OAAQ,aAAc,aAGzB,YAAY,KAAK,UAAU,QAAQ,OAAO,EAAE,CAAC,IAGpC,UAAA,IAAI,4BAA4B,SAAS;AAAA,MAAA;AAIhD,UAAA,UAAU,KAAK,YAAY,GAAG;AAC7B,YAAA,aAAa,UAAU,KAAK,YAAY;AACxC,QAAA,OAAQ,cAAe,aAG1B,aAAa,KAAK,WAAW,QAAQ,OAAO,EAAE,CAAC,IAGtC,UAAA,IAAI,6BAA6B,UAAU;AAAA,MAAA;AAAA,IACtD;AAGO,mBAAA,eAAe,KAAK,MAAM,UAE3B,IAAI,YAAY,UAAU,OAAO;AAAA,EAAA;AAAA,EAGzC,OAAO,MAAMF,GAA4B;AAClC,UAAAG,IAAQ,OAAO,SAASH,CAAO;AACrC,IAAIG,KACHA,EAAM,MAAM;AAAA,EACb;AAAA,EAGD,OAAO,eAAeH,GAA4B;AAC3C,UAAAG,IAAQ,OAAO,SAASH,CAAO;AACjC,IAAAG,KAASA,EAAM,uBAAuB,eACzCA,EAAM,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAMD,OAAO,eAAeH,GAA4B;AAEjD,QAAI,CADiB,IAAI,qBAAqBA,GAAS,yCAAyC;AAE/F;AAGK,UAAAI,IAAOJ,EAAQ,cAAc,sBAAsB,GACnDK,IAAQ,IAAI,wBAAwBL,GAAS,2BAA2B;AAEtE,IAAAA,EAAA,UAAU,IAAI,8BAA8B,GACpD,WAAW,MAAMA,EAAQ,UAAU,OAAO,8BAA8B,GAAG,GAAG;AAE9E,QAAIM,IAAM;AACV,eAAWC,KAAQF,GAAO;AACrB,UAAAE,EAAK,cAAc,sBAAsB;AAC5C;AAGG,MAAAA,aAAgB,gBAAaD,KAAOC,EAAK;AAAA,IAAA;AAG9C,QAAIH,aAAgB,aAAa;AAChC,YAAMI,IAAgBJ,EAAK;AAC3B,MAAIE,IAAME,IACTJ,EAAK,YAAYE,IAAME,IAEvBJ,EAAK,YAAY;AAAA,IAClB;AAAA,EACD;AAAA,EAGD,OAAO,oBAAoBD,GAA0B;AAChD,IAAA,KAAK,QAAQ,uBACX,KAAA,QAAQ,oBAAoBA,CAAK;AAAA,EACvC;AAAA,EAGD,OAAO,mBAAmBA,GAA0B;AAC/C,IAAA,KAAK,QAAQ,sBACX,KAAA,QAAQ,mBAAmBA,CAAK;AAAA,EACtC;AAAA,EAGD,OAAO,4BAA4BM,GAAwB;AACtD,WAAA,KAAK,QAAQ,8BACT,KAAK,QAAQ,4BAA4BA,CAAC,IAG3C;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQR,OAAO,gBAAgBC,GAAYC,GAAyB;AAC3D,QAAI,OAAO,cAAc,IAAID,CAAE;AAC9B,YAAM,4CAA4CA;AAG5C,WAAA,cAAc,IAAIA,GAAIC,CAAY;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,OAAO,kBAAkBD,GAAkB;AACnC,WAAA,cAAc,OAAOA,CAAE;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAM/B,OAAO,iBAAiBE,GAAiBC,MAAuBC,GAAqD;AACpH,UAAMC,IAAK,IAAI,MAAMH,GAAS,CAAA,GAAI,GAAGE,CAAY;AAE9C,IAAAC,EAAA,QAAQ,WAAW,MAAMF,EAAM;AAMlC,aAASG,KAAQH,GAAO;AACjB,YAAAI,IAAW,aAAaD,EAAK,OAAO,CAAC,EAAE,gBAAgBA,EAAK,MAAM,CAAC;AAEzE,MAAAD,EAAG,QAAQE,CAAQ,IAAIJ,EAAMG,CAAI;AAAA,IAAA;AAG3B,WAAAD;AAAA,EAAA;AAGT;"}
@@ -1,2 +0,0 @@
1
- define(["require","exports","vue","../.chunks/forms-Dh0QU6P9.amd","../.chunks/listItem.vue_vue_type_script_setup_true_lang-Del8bjSk.amd","../.chunks/menu.vue_vue_type_style_index_0_lang-B8-UPDGJ.amd","../utils/searchers.amd","../utils/dom.amd","../popup/worker.amd","../require/css.amd!../assets/project.css"],function(Me,w,e,I,E,Z,q,_,ee){"use strict";if(typeof e>"u")var e=window.Vue;const te={class:"top-selectorCompetitors"},ne={class:"top-ellipsis1"},oe=e.defineComponent({__name:"selectorCompetitors",props:e.mergeModels({modelValue:{},items:{},showSelectAllItem:{type:Boolean,default:!0}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(t){const o=t,d=e.useModel(t,"modelValue"),n=e.computed(()=>{if(o.showSelectAllItem)return{icon:"",title:I.useI18n().Common.Select_all,value:"all",content:""}});return(l,a)=>(e.openBlock(),e.createElementBlock("div",te,[e.unref(I.Core).state.isMobile?(e.openBlock(),e.createBlock(E._sfc_main,{key:0},{opener:e.withCtx(()=>[e.createVNode(I._sfc_main,{class:"top-selectorCompetitors_opener",color:"theme",icon:"",icon2:""},{default:e.withCtx(()=>{var r;return[e.createTextVNode(e.toDisplayString((r=l.items.find(u=>{var f;return u.value===((f=d.value)==null?void 0:f[0])}))==null?void 0:r.content),1)]}),_:1})]),contentList:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.items,(r,u)=>{var f;return e.openBlock(),e.createBlock(E._sfc_main$1,{class:e.normalizeClass({"top-active":(f=d.value)==null?void 0:f.includes(r.value)}),"data-top-icon":r.icon,title:r.title,onClick:()=>d.value=[r.value]},{default:e.withCtx(()=>[e.createElementVNode("span",ne,e.toDisplayString(r.content),1)]),_:2},1032,["class","data-top-icon","title","onClick"])}),256))]),_:1})):(e.openBlock(),e.createBlock(Z._sfc_main,{key:1,modelValue:d.value,"onUpdate:modelValue":a[0]||(a[0]=r=>d.value=r),items:l.items,isMultiple:!0,styling:"bar",canBeEmptyMultiple:!1,selectAllItem:n.value},null,8,["modelValue","items","selectAllItem"]))]))}}),k=-2,le={0:"Yandex",1:"Google",4:"YouTube",5:"Bing",7:"Seznam",8:"AppStore",9:"GoogleStore",20:"Yandex.com",21:"Yandex.com.tr"},L={key:k,name:"--",index:k},j={key:k,name:"--",regions:[L],regionByIndex:new Map([[k,L]])},A={key:k,name:"Autoselect",index:k},P={key:k,name:"Autoselect",regions:[A],regionByIndex:new Map([[k,A]])},J={countryCode:"00",depth:1,device:0,key:-1,index:-1,lang:"ru",name:"Without region"},ae=()=>(A.name=I.useI18n().Common.Autoselect,A),re=()=>(ae(),P.name=I.useI18n().Common.Autoselect,console.log(P),P),ie=()=>(J.name=I.useI18n().Keywords.Without_region,J),U=(t=!1,o=!1,d=[])=>{let n;return t?n=de(d):n=G(d),o&&n.set(k,re()),n.size||n.set(k,j),n},G=(t,o=!0,d=[],n=!1)=>{const l=new Map;return t.forEach(a=>{if(!a.enabled||n&&typeof a.key=="number"&&a.key>1)return;const r={...a};r.regionByIndex=new Map,a.regions&&a.regions.forEach(u=>{if(o&&!u.enabled)return;const f={...u};r.regionByIndex&&r.regionByIndex.set(f.index,f)}),!r.regionByIndex.size&&!d.length&&r.regionByIndex.set(L.index,L),typeof r.key=="number"&&l.set(r.key,r)}),d.forEach(a=>{if(l.has(a))return;const r={key:a,name:le[a],regions:[],regionByIndex:new Map};l.set(r.key,r)}),l},de=t=>{const o=G(t,!1,[0,1],!0);if(o.has(2)){const d=o.get(2);d&&(d.regionByIndex=new Map)}return o.forEach(d=>{if(!d.regionByIndex)return;const n={...ie()};d.regionByIndex.set(n.index,n)}),o},Y=(t,o,d=[])=>{const n=U(t,!1,d);let l;return n.forEach(a=>{if(!(o.searcher_key!==void 0&&o.searcher_key!=a.key)&&a.regions&&(a.regions.forEach(r=>{if(!l&&!(o.key!==void 0&&o.key!=r.key)&&!(o.index!==void 0&&o.index!=r.index)&&!(!t&&(o.lang!==void 0&&o.lang!=r.lang||o.device!==void 0&&o.device!=r.device)))return r.searcher_key=a.key,l=r,!1}),l))return!1}),l},se=(t,o)=>{const d=I.useI18n(),n=e.ref(o.value.keys().next().value??k),l=e.computed(()=>{const a=new Map;if(o.value.forEach(r=>{let u={value:r.key,title:r.name};t.addSearcherIcon&&(u.icon=q.getSearcherGIcon(r.key)),a.set(r.key,u)}),t.addCompare&&!a.has(k)){const r={value:"",title:"--------------------",disabled:!0};a.set(r.value,r);const u={value:-1,title:d.Common.Compare};a.set(u.value,u)}return a});return{searcherKey:n,optionBySearcherKey:l}},ue=(t,o)=>{var a,r,u;const d=I.useI18n(),n=e.ref(k);t.modelValue.length===1&&(n.value=t.modelValue[0]),n.value===k&&(t.forFrequency?n.value=((r=(a=o.value)==null?void 0:a.regionByIndex.values().next().value)==null?void 0:r.key)??k:n.value=((u=o.value)==null?void 0:u.regionByIndex.keys().next().value)??k);const l=e.computed(()=>{var v;const f=new Map;return(v=o.value.regionByIndex)==null||v.forEach(p=>{let i=p.name;if(t.forFrequency){const C={value:p.key,title:i};f.has(p.key)||f.set(p.key,C);return}p.device&&(i+=" ("+d.Common["Device_"+p.device]+")");const g=q.getLangLabel(o.value.key||0,p.lang??"");g&&(i+=" / "+g);const y={value:p.index,title:i,icon:p.device?q.getDeviceGIcon(p.device):void 0};f.set(p.index,y)}),f});return e.watch(l,(f,v)=>{var y;if(t.onlySearcher||n.value!==void 0&&f.get(n.value))return;let p=f.keys().next().value;if(n.value===k||p===k){n.value=p;return}let i=((y=v==null?void 0:v.get(n.value))==null?void 0:y.title)||"",g=-1;for(const[C,x]of f.entries()){const S=x.title;if(typeof S!="string"||typeof C=="string")break;if(S===i){p=C;break}const T=new RegExp(` \\((${d.Common.Device_1}|${d.Common.Device_2})\\)`);let B=i,c=3;S.indexOf(B)===-1&&(B=i.replace(/^[^a-zа-я]/i,"").replace(T,""),c--),S.indexOf(B)===-1&&(B=i.replace(/ \/.*/,""),c--),S.indexOf(B)===-1&&(B=i.replace(/ \/.*/,""),B=B.replace(/^[^a-zа-я]/i,"").replace(T,""),c--),S.indexOf(B)!==-1&&(c<=g||(g=c,p=C))}n.value=p}),{regionIndex:n,optionByRegionIndex:l}},ce=(t,o,d)=>{const n=e.ref([]),l=()=>{if(t.onlySearcher&&o.value){n.value=Array.from(o.value.keys());return}let r=[];if(t.modelValue.length>1)r=[...t.modelValue];else try{r=JSON.parse(localStorage.getItem("ui:project:regionSelector"+t.projectId+":regionsIndexes"))??[]}catch{}r.length&&(r=r.filter(u=>d.value.has(u))),r.length||(r=Array.from(d.value)),n.value=[...r]},a=()=>{n.value.length?localStorage.setItem("ui:project:regionSelector:"+t.projectId+":regionsIndexes",JSON.stringify(n.value)):localStorage.removeItem("ui:project:regionSelector:"+t.projectId+":regionsIndexes")};return e.watch(n,()=>{a()}),t.addCompare&&l(),{regionsIndexes:n}},me=t=>{const o=e.computed(()=>U(t.forFrequency,t.autoRegion,t.searchers)),d=e.computed(()=>o.value.get(l.searcherKey.value)||j),n=e.computed(()=>{const i=new Set;return o.value.forEach(g=>{var y;(y=g.regions)==null||y.forEach(C=>{C.index!==-1&&C.index!==k&&i.add(C.index)})}),i}),l=se(t,o),a=ue(t,d),r=ce(t,o,n);e.watch(o,()=>{var g,y,C,x;if(t.onlySearcher?r.regionsIndexes.value=Array.from(o.value.keys()):r.regionsIndexes.value=r.regionsIndexes.value.filter(S=>n.value.has(S)),l.searcherKey.value===-1)return;let i=o.value.keys().next().value;o.value.forEach(S=>{var T,B,c;if(t.onlySearcher&&S.key===l.searcherKey.value){i=l.searcherKey.value;return}if(a.regionIndex.value&&((T=S.regionByIndex)!=null&&T.has(a.regionIndex.value))&&(i=S.key),!t.onlySearcher){let s;i!==void 0&&(s=(B=o.value.get(i))==null?void 0:B.regionByIndex);const m=(c=o.value.get(S.key))==null?void 0:c.regionByIndex;s!=null&&s.has(k)&&!(m!=null&&m.has(k))&&(i=S.key)}}),i!==void 0&&(l.searcherKey.value=i),a.regionIndex.value!==void 0&&!((y=(g=d.value)==null?void 0:g.regionByIndex)!=null&&y.has(a.regionIndex.value))&&(a.regionIndex.value=(x=(C=d.value)==null?void 0:C.regions)==null?void 0:x.keys().next().value)},{immediate:!0});const u=()=>{if(!(l.searcherKey.value===-1||l.searcherKey.value===k))return l.searcherKey.value},f=()=>{if(t.onlySearcher||a.regionIndex.value===k)return;let i=a.regionIndex.value;if(t.forFrequency){const g=a.regionIndex.value,y=Y(t.forFrequency,{searcher_key:u(),key:g},t.searchers);i=y==null?void 0:y.index}return i},v=()=>{const i=u();if(i!==void 0)return o.value.get(i)};return{selectSearcher:l,selectRegion:a,compare:r,searcherByKey:o,allRegionsIndexes:n,getSearcher:v,getRegion:()=>{var g,y;const i=f();if(i!==void 0)return(y=(g=v())==null?void 0:g.regionByIndex)==null?void 0:y.get(i)}}},ge=e.defineComponent({__name:"selectorRegion",props:e.mergeModels({projectId:{},searchers:{default:()=>[]},modelValue:{},modelValueSingle:{},addCompare:{type:Boolean},forFrequency:{type:Boolean},autoRegion:{type:Boolean},onlySearcher:{type:Boolean},addChanger:{type:Boolean,default:!0},addSearcherIcon:{type:Boolean,default:!0},addRegionIcon:{type:Boolean,default:!0}},{modelValue:{required:!0},modelModifiers:{},modelValueSingle:{},modelValueSingleModifiers:{}}),emits:e.mergeModels(["compareRegions"],["update:modelValue","update:modelValueSingle"]),setup(t,{expose:o,emit:d}){const n=t,l=e.useModel(t,"modelValue"),a=e.useModel(t,"modelValueSingle"),r=d,{selectSearcher:u,selectRegion:f,compare:v,searcherByKey:p,allRegionsIndexes:i,getSearcher:g,getRegion:y}=me(n),C=()=>{var x;if(window.fieldTemplates&&((x=window.fieldTemplates)!=null&&x.openSelectorRegions)){window.fieldTemplates.openSelectorRegions(p.value,v.regionsIndexes.value,S=>v.regionsIndexes.value=S);return}r("compareRegions",p.value)};return e.watch([f.regionIndex,u.searcherKey,v.regionsIndexes],()=>{if(u.searcherKey.value===-1&&v.regionsIndexes.value.length){if(JSON.stringify(l.value)===JSON.stringify(v.regionsIndexes.value))return;l.value=[...v.regionsIndexes.value]}else l.value=[n.onlySearcher?u.searcherKey.value:f.regionIndex.value];!n.onlySearcher&&!i.value.size&&(u.searcherKey.value=k)}),a.value&&e.watch(a,()=>{l.value=[a.value]},{immediate:!0}),e.watch(l,()=>{var x,S,T,B,c;if(l.value[0]&&(a.value=l.value[0]),n.onlySearcher){if(!l.value.length||l.value.length===1&&!p.value.has(l.value[0])){let s=p.value.keys().next().value;s!==void 0&&(l.value=[s]);return}if(l.value.length>1&&JSON.stringify(l.value)!==JSON.stringify(v.regionsIndexes.value)){l.value=[...v.regionsIndexes.value];return}}else{let s=[...new Set(l.value)],m=(S=(x=p.value.values().next().value)==null?void 0:x.regionByIndex)==null?void 0:S.keys().next().value;if(n.forFrequency&&(m=(c=(B=(T=p.value.values().next().value)==null?void 0:T.regionByIndex)==null?void 0:B.values().next().value)==null?void 0:c.key),!s.length)m!==void 0&&s.push(m);else if(s.length===1){let h=i.value;n.forFrequency&&(h=new Set,p.value.forEach(V=>{V.regionByIndex.forEach(M=>{M.index!==-1&&M.index!==k&&h.add(M.key)})})),!h.has(s[0])&&s[0]!==-2&&(s=[],m!==void 0&&s.push(m))}else s=s.filter(h=>i.value.has(h)),!s.length&&m!==void 0&&s.push(m);if(JSON.stringify(l.value)!==JSON.stringify(s)){l.value=s;return}}if(!(l.value.length===1&&l.value[0]===(n.onlySearcher?u.searcherKey.value:f.regionIndex.value)))if(n.onlySearcher){if(l.value.length===1){u.searcherKey.value=l.value[0];return}u.searcherKey.value=-1;return}else if(l.value.length===1&&u.searcherKey.value!==-1){f.regionIndex.value=l.value[0];let s;for(const m of p.value.values()){for(const h of m.regionByIndex.values())if((n.forFrequency?h.key:h.index)===f.regionIndex.value){s=m.key;break}if(s!==void 0)break}s!==void 0&&(u.searcherKey.value=s)}else u.searcherKey.value=-1,v.regionsIndexes.value=[...l.value]},{immediate:!0}),o({getSearcher:g,getRegion:y}),(x,S)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-selectorRegion":!0,"top-selectorRegion-onlySearcher":x.onlySearcher})},[e.createVNode(I._sfc_main$4,{options:e.unref(u).optionBySearcherKey.value,modelValue:e.unref(u).searcherKey.value,"onUpdate:modelValue":S[0]||(S[0]=T=>e.unref(u).searcherKey.value=T),name:"searcher_key",addChanger:x.addChanger},null,8,["options","modelValue","addChanger"]),!x.onlySearcher&&e.unref(u).searcherKey.value!==-1?(e.openBlock(),e.createBlock(I._sfc_main$4,{key:0,class:"top-select-region",options:e.unref(f).optionByRegionIndex.value,modelValue:e.unref(f).regionIndex.value,"onUpdate:modelValue":S[1]||(S[1]=T=>e.unref(f).regionIndex.value=T),name:x.forFrequency?"region_key":"region_index",addChanger:x.addChanger,"data-top-icon":x.addRegionIcon?"":void 0},null,8,["options","modelValue","name","addChanger","data-top-icon"])):e.createCommentVNode("",!0),x.addCompare&&!x.onlySearcher&&e.unref(u).searcherKey.value===-1?(e.openBlock(),e.createBlock(I._sfc_main,{key:1,name:"compare",onClick:C,"data-count-compare-regions-indexes":e.unref(v).regionsIndexes.value.length},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.$i18n.Common.Selected_regions),1)]),_:1},8,["data-count-compare-regions-indexes"])):e.createCommentVNode("",!0)],2))}}),fe=[{id:"1",name:"Without Tag",color_id:"1"},{id:"2",name:"Red",color_id:"2"},{id:"3",name:"Orange",color_id:"3"},{id:"4",name:"Yellow",color_id:"4"},{id:"5",name:"Blue",color_id:"5"},{id:"6",name:"Purple",color_id:"6"},{id:"7",name:"Green",color_id:"7"},{id:"8",name:"Magenta",color_id:"8"},{id:"9",name:"Dark blue",color_id:"9"},{id:"10",name:"Turquoise",color_id:"10"}],W=t=>"-"+t,K=t=>t[0]==="-"?t.substring(1):t,O=(t,o)=>{t=K(t);const d=o.find(n=>n.id===t);if(d)return d},ve=["data-tag_id","data-tag_color_id","title"],R=e.defineComponent({__name:"tagIcon",props:{id:{},colorId:{},name:{},state:{}},setup(t){return(o,d)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-tagSelector_tagIcon":!0,"top-tagSelector-active":!!o.state,"top-tagSelector-excluded":o.state==="excluded"}),"data-tag_id":o.id,"data-tag_color_id":o.colorId,title:o.name},null,10,ve))}}),pe=["contenteditable","onKeydown"],H=e.defineComponent({__name:"tagPopupListItem",props:e.mergeModels({editable:{type:Boolean},disabled:{type:Boolean},canExclude:{type:Boolean},id:{},colorId:{},name:{},state:{}},{name:{required:!0},nameModifiers:{}}),emits:e.mergeModels(["update:name","unselect","exclude","select"],["update:name"]),setup(t,{emit:o}){const d=t,n=o,l=e.useModel(t,"name"),a=e.ref(null),r=e.computed(()=>navigator.userAgent.indexOf("Firefox")!=-1?{contenteditable:u.value,onpaste:g=>g.preventDefault()}:{}),u=e.ref(!1),f=async()=>{var g;u.value=!0,await e.nextTick(),(g=a.value)==null||g.focus()},v=()=>{var y;const g=(y=a.value)==null?void 0:y.innerText;if(!g)return p();a.value&&(a.value.innerText=g),u.value=!1,n("update:name",g)},p=async()=>{a.value&&(a.value.innerText=d.name),u.value=!1},i=g=>{if(u.value||d.disabled)return;let y="selected";d.canExclude&&(g.ctrlKey||g.metaKey)&&(y="excluded"),d.state==y&&(y=""),y===""&&n("unselect"),y==="selected"&&n("select"),y==="excluded"&&n("exclude")};return(g,y)=>(e.openBlock(),e.createBlock(E._sfc_main$1,{class:e.normalizeClass({"top-tagSelector_tagListItem":!0,"top-tagSelector_tagListItem-inEdit":u.value,"top-tagSelector_tagListItem-disabled":g.disabled,"top-tagSelector_tagListItem-canExclude":g.canExclude,"top-tagSelector-active":!!g.state,"top-tagSelector-excluded":g.state==="excluded"}),onClick:e.withModifiers(i,["stop"])},{default:e.withCtx(()=>[e.createVNode(R,{id:g.id,name:l.value,colorId:g.colorId,state:g.state},null,8,["id","name","colorId","state"]),e.createElementVNode("span",e.mergeProps({ref_key:"elName",ref:a,class:"top-tagSelector_tagListItemName",contenteditable:u.value?"plaintext-only":!1},r.value,{onKeydown:[e.withKeys(e.withModifiers(v,["stop"]),["enter"]),e.withKeys(e.withModifiers(p,["stop"]),["esc"])]}),e.toDisplayString(l.value),17,pe),g.editable?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[u.value?(e.openBlock(),e.createElementBlock("span",{key:1,"data-top-icon":"",class:"top-tagSelector_edit",onClick:e.withModifiers(v,["stop"])})):(e.openBlock(),e.createElementBlock("span",{key:0,"data-top-icon":"",class:"top-tagSelector_edit",onClick:f}))],64)):e.createCommentVNode("",!0)]),_:1},8,["class"]))}}),ye={key:1},Q=e.defineComponent({inheritAttrs:!1,__name:"popupOpener",props:e.mergeModels({modelValue:{},id:{},tags:{},mode:{},targetId:{},filters:{},useTopButton:{type:Boolean},payload:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(t){const o=t,d=e.useModel(t,"modelValue"),n=o.useTopButton?I._sfc_main:"div",l=o.useTopButton?"html":"default",a={model:d,mode:o.mode,targetId:o.targetId,filters:o.filters,payload:o.payload};return(r,u)=>{const f=e.resolveDirective("top-data");return e.openBlock(),e.createBlock(E._sfc_main$2,{id:r.id},{default:e.withCtx(()=>[e.withDirectives((e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(n)),e.mergeProps({class:{"top-tagSelector":!0,"top-tagSelector-filter":o.mode==="filter","top-tagSelector-setter_single":o.mode==="setter"&&!r.filters,"top-tagSelector-setter_several":o.mode==="setter"&&r.filters,"top-tagSelector-selectedOne":!d.value.length||d.value.length===1,"top-tagSelector-toTwoLine":d.value.length>5},color:"theme",styling:""},r.$attrs),{[e.unref(l)]:e.withCtx(()=>[!d.value.length&&r.mode==="filter"?(e.openBlock(),e.createBlock(R,{key:0,id:"all",colorId:"",name:r.$i18n.Common.All_tags??"",state:""},null,8,["name"])):e.createCommentVNode("",!0),r.mode==="setter"&&r.filters?(e.openBlock(),e.createElementBlock("div",ye,[e.renderSlot(r.$slots,"default")])):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(d.value,v=>{var p,i;return e.openBlock(),e.createBlock(R,{id:e.unref(K)(v),colorId:((p=e.unref(O)(v,r.tags))==null?void 0:p.color_id)??"",name:((i=e.unref(O)(v,r.tags))==null?void 0:i.name)??"",state:e.unref(K)(v)===v?"selected":"excluded"},null,8,["id","colorId","name","state"])}),256))]),_:2},1040,["class"])),[[f,a,"topTagSelectorTarget"]])]),_:3},8,["id"])}}}),he=e.defineComponent({__name:"tagSelector",props:e.mergeModels({modelValue:{},tags:{},tagsEditable:{type:Boolean},tagsMax:{default:10},id:{},singleMode:{type:Boolean},requiredForSetter:{type:Boolean,default:!0},maxTagsForSetter:{},emitDelay:{default:500}},{modelValue:{required:!0},modelModifiers:{},tags:{default:e.reactive(fe)},tagsModifiers:{}}),emits:e.mergeModels(["selector","setter","tagsChanged"],["update:modelValue","update:tags"]),setup(t,{emit:o}){const d=I.useI18n(),n=t,l=e.useModel(t,"modelValue"),a=e.useModel(t,"tags"),r=o,u=I.debounce((c,s)=>{r(c,s)},n.emitDelay);n.singleMode&&!l.value.length&&(l.value=[a.value[0].id]);const f=n.id??"top-popup-id-"+Math.random(),v=e.ref("add"),p=()=>{var m;const c=" "+((m=d.Common.Tags)==null?void 0:m.toLowerCase()),s=new Map;return s.set("add",{value:"add",title:d.Common.Add+c}),s.set("replace",{value:"replace",title:d.Common.Replace+c}),s.set("delete",{value:"delete",title:d.Common.Delete+c}),s};let i=e.shallowRef({model:l,mode:"filter",targetId:void 0,filters:void 0,payload:void 0});e.watch(l,()=>{u("selector",l.value)});const g=e.computed(()=>{if(i.value.mode==="setter"&&n.maxTagsForSetter&&!i.value.filters)return i.value.model.value.length>=n.maxTagsForSetter}),y=c=>{if(c!=="all"){if(i.value.model.value.includes(c))return"selected";if(i.value.model.value.includes(W(c)))return"excluded"}return c==="all"&&!i.value.model.value.length?"selected":""},C=(c,s)=>{const m=W(c);let h=i.value.model.value.filter(V=>V!==c&&V!==m);s==="select"&&h.push(c),s==="exclude"&&h.push(m),i.value.mode==="setter"&&i.value.targetId!==void 0&&n.requiredForSetter&&(h.length||h.push("1"),h.length===2&&i.value.model.value.length===1&&i.value.model.value[0]==="1"&&(h=h.filter(V=>V!=="1"))),n.singleMode&&!i.value.filters&&(h.length||(h=i.value.model.value),h.length>1&&(h=[h[h.length-1]])),h.sort((V,M)=>{if(!n.tags)return 0;const F=n.tags.findIndex(b=>b.id===V),N=n.tags.findIndex(b=>b.id===M);return F-N}),i.value.model.value=h,i.value.mode==="setter"&&i.value.targetId!==void 0&&u("setter",{tagsIds:h,targetId:i.value.targetId,payload:i.value.payload})},x=e.computed(()=>{let c="top-tagSelector_popup";return i.value.mode==="filter"&&(c+=" top-tagSelector_popup-filter"),i.value.mode==="setter"&&(c+=" top-tagSelector_popup-setter"),c}),S=()=>{const c=prompt("","New tag");if(!c||c==="New tag")return;const s=a.value.length+1;a.value.push({id:String(s),name:c,color_id:String((s-1)%10+1)}),r("tagsChanged",a.value)},T=c=>{var s;if(i.value=_.storage(c.elPopupOpener,"topTagSelectorTarget"),!i.value)throw new Error("Open popup TopTagSelector required v-data:topTagSelectorTarget");if(i.value.filters&&(v.value="add",i.value.model.value=[]),!((s=I.Core.$)!=null&&s.ui.sortable)){console.info("Для работы сортировки требуется глобальная загрузка jQuery UI Sortable");return}!I.Core.state.isMobile&&!I.Core.state.isMobileUA&&a.value&&$(c.elPopup).sortable({items:'li:has([data-tag_id]:not([data-tag_id="all"]))',cancel:'[contenteditable="plaintext-only"], [contenteditable="true"]',distance:10,stop:function(m,h){if(!a.value)return;const V=$(h.item).parent().find("[data-tag_id]"),M=[];V.each((F,N)=>{if(!a.value)return;const b=$(N).attr("data-tag_id");M.push(b)}),a.value.sort((F,N)=>{const b=M.findIndex(z=>z===F.id),Ve=M.findIndex(z=>z===N.id);return b-Ve}),u("tagsChanged",a.value)}})},B=c=>{var s;(s=I.Core.$)!=null&&s.ui.sortable&&$(c.elPopup).data("ui-sortable")&&$(c.elPopup).sortable("destroy")};return(c,s)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(Q,{class:"top-select_arrow",modelValue:l.value,"onUpdate:modelValue":s[0]||(s[0]=m=>l.value=m),id:e.unref(f),tags:a.value,mode:"filter",useTopButton:""},null,8,["modelValue","id","tags"]),e.createVNode(E._sfc_main,{id:e.unref(f),class:e.normalizeClass(x.value),onOpen:s[4]||(s[4]=m=>T(m)),onClose:s[5]||(s[5]=m=>B(m)),"transition-duration":50},e.createSlots({contentList:e.withCtx(()=>[e.unref(i).mode==="filter"&&!c.singleMode?(e.openBlock(),e.createBlock(H,{key:0,id:"all",colorId:"",name:c.$i18n.Common.All_tags??"",state:e.unref(i).model.value.length?"":"selected",onSelect:s[3]||(s[3]=m=>e.unref(i).model.value=[])},null,8,["name","state"])):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.value,m=>(e.openBlock(),e.createBlock(H,{key:m.id,id:m.id,colorId:m.color_id,name:m.name,state:y(m.id),canExclude:e.unref(i).mode==="filter"&&!c.singleMode,editable:c.tagsEditable,disabled:g.value&&y(m.id)==="",onUnselect:h=>C(m.id,"unselect"),onSelect:h=>C(m.id,"select"),onExclude:h=>C(m.id,"exclude"),"onUpdate:name":h=>{m.name=h,e.unref(u)("tagsChanged",a.value)}},null,8,["id","colorId","name","state","canExclude","editable","disabled","onUnselect","onSelect","onExclude","onUpdate:name"]))),128)),c.tagsEditable&&a.value.length<c.tagsMax&&a.value.length<20?(e.openBlock(),e.createBlock(E._sfc_main$1,{key:1,"data-top-icon":"",onClick:e.withModifiers(S,["stop"])},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.$i18n.Common.Add),1)]),_:1})):e.createCommentVNode("",!0)]),_:2},[e.unref(i).mode==="setter"&&e.unref(i).filters?{name:"header",fn:e.withCtx(()=>[e.createVNode(I._sfc_main$4,{modelValue:v.value,"onUpdate:modelValue":s[1]||(s[1]=m=>v.value=m),options:p()},null,8,["modelValue","options"])]),key:"0"}:void 0,e.unref(i).mode==="setter"&&e.unref(i).filters?{name:"footer",fn:e.withCtx(()=>[e.createVNode(I._sfc_main,{color:"theme"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(c.$i18n.Common.Cancel),1)]),_:1}),e.createVNode(I._sfc_main,{onClick:s[2]||(s[2]=m=>e.unref(u)("setter",{tagsIds:e.unref(i).model.value,filters:e.unref(i).filters,filtersAction:v.value,payload:e.unref(i).payload}))},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(v.value==="add"?c.$i18n.Common.Add:"")+" "+e.toDisplayString(v.value==="replace"?c.$i18n.Common.Replace:"")+" "+e.toDisplayString(v.value==="delete"?c.$i18n.Common.Remove:""),1)]),_:1})]),key:"1"}:void 0]),1032,["id","class"])],64))}}),Se=(t,o)=>e.computed(()=>e.toValue(t).filter(l=>l.on>=0||l.id===o).map(l=>({value:l.id,title:l.url+` [${l.id}]`,icon:l.id===e.toValue(o)?"":"",content:l.name}))),ke=(t,o,d)=>{o||(o={id:t.id}),o.id=t.id;const n=ee.TopPopupWorker.genElPopupOpener("div",o);return n.classList.add("top-tagSelector"),t.useTopButton&&n.classList.add("top-button","top-color_theme"),t.mode==="filter"&&n.classList.add("top-tagSelector-filter"),t.mode==="setter"&&!t.filters&&n.classList.add("top-tagSelector-setter_single"),t.mode==="setter"&&t.filters&&n.classList.add("top-tagSelector-setter_several"),n.onclick=l=>{l.preventDefault(),l.stopPropagation(),n.onclick=null;const a=e.ref(t.modelValue),r={model:a,mode:t.mode,targetId:t.targetId,filters:t.filters,payload:t.payload};_.storage(n,"topTagSelectorTarget",r),delete n.dataset.topPopupDisabled,e.isRef(t.modelValue)||e.watch(a,()=>{t.modelValue=a.value,D(n,t,d)}),n.click()},e.isRef(t.modelValue)?e.watch(t.modelValue,()=>D(n,t,d)):_.storage(n,"topTagSelectorRender",l=>{t.modelValue=l;const a=_.storage(n,"topTagSelectorTarget");a&&(a.model.value=l),D(n,t,d)}),D(n,t,d),n},Ie=(t,o)=>{var d;(d=_.storage(t,"topTagSelectorRender"))==null||d(o)},D=(t,o,d)=>{var l;const n=e.unref(o.modelValue);if(t.classList.toggle("top-tagSelector-selectedOne",!n.length||n.length===1),t.classList.toggle("top-tagSelector-toTwoLine",n.length>5),o.mode==="setter"&&o.filters){t.innerHTML=`<div>${d}</div>`;return}if(t.innerHTML="",!n.length&&o.mode==="filter"){const a=X({id:"all",colorId:"",name:((l=I.useI18n().Common)==null?void 0:l.All_tags)??"",state:""});t.append(a)}n.forEach(a=>{var u,f;const r=X({id:K(a),colorId:((u=O(a,o.tags))==null?void 0:u.color_id)??"",name:((f=O(a,o.tags))==null?void 0:f.name)??"",state:K(a)===a?"selected":"excluded"});t.append(r)})},X=t=>{const o=document.createElement("div");return o.classList.add("top-tagSelector_tagIcon"),o.classList.toggle("top-tagSelector-active",!!t.state),o.classList.toggle("top-tagSelector-excluded",t.state==="excluded"),o.dataset.tag_id=t.id,o.dataset.tag_color_id=t.colorId,o.title=t.name,o},xe=oe,Ce=ge,Be=he,Te=Q,we=R;w.TopSelectorCompetitors=xe,w.TopSelectorRegion=Ce,w.TopTagSelector=Be,w.TopTagSelectorPopupOpener=Te,w.TopTagSelectorTagIcon=we,w.findRegion=Y,w.genElTopTagSelectorPopupOpener=ke,w.genSearcherByKey=U,w.renderElTopTagSelectorPopupOpener=Ie,w.useItemsFromCompetitors=Se,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});
2
- //# sourceMappingURL=project.amd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.amd.js","sources":["../../src/components/project/selectorCompetitors/selectorCompetitors.vue","../../src/components/project/selectorRegion/utils/consts.ts","../../src/components/project/selectorRegion/utils/utils.ts","../../src/components/project/selectorRegion/composables/selectSearcher.ts","../../src/components/project/selectorRegion/composables/selectRegion.ts","../../src/components/project/selectorRegion/composables/compare.ts","../../src/components/project/selectorRegion/composables/selectorRegion.ts","../../src/components/project/selectorRegion/selectorRegion.vue","../../src/components/project/tagSelector/tagsDefaults.ts","../../src/components/project/tagSelector/utils/utils.ts","../../src/components/project/tagSelector/popupListItem/tagPopupListItem.vue","../../src/components/project/tagSelector/popupOpener/popupOpener.vue","../../src/components/project/tagSelector/tagSelector.vue","../../src/components/project/selectorCompetitors/composables.ts","../../src/components/project/tagSelector/utils/el.ts","../../src/components/project/project.ts"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props } from './selectorCompetitors';\r\nimport Core from '@/core/core/core';\r\nimport Button from '@/components/forms/button/button.vue';\r\nimport Popup from '@/components/popup/popup/popup.vue';\r\nimport ListItem from '@/components/popup/popup/listItem.vue';\r\nimport Menu from '@/components/formsExt/menu/menu.vue';\r\nimport { useI18n } from '@/core/plugins/i18n';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tshowSelectAllItem: true,\r\n});\r\nconst model = defineModel<Props['modelValue']>();\r\n\r\nconst selectAllItem = computed(() => {\r\n\tif (props.showSelectAllItem) {\r\n\t\treturn {\r\n\t\t\ticon: '',\r\n\t\t\ttitle: useI18n().Common.Select_all,\r\n\t\t\tvalue: 'all',\r\n\t\t\tcontent: '',\r\n\t\t};\r\n\t}\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-selectorCompetitors\">\r\n\t\t<Popup v-if=\"Core.state.isMobile\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<Button\r\n\t\t\t\t\tclass=\"top-selectorCompetitors_opener\"\r\n\t\t\t\t\tcolor=\"theme\"\r\n\t\t\t\t\ticon=\"\"\r\n\t\t\t\t\ticon2=\"\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ items.find((item) => item.value === model?.[0])?.content }}\r\n\t\t\t\t</Button>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<ListItem\r\n\t\t\t\t\tv-for=\"(item, index) in items\"\r\n\t\t\t\t\t:class=\"{\r\n\t\t\t\t\t\t'top-active': model?.includes(item.value)\r\n\t\t\t\t\t}\"\r\n\t\t\t\t\t:data-top-icon=\"item.icon\"\r\n\t\t\t\t\t:title=\"item.title\"\r\n\t\t\t\t\t@click=\"() => model = [item.value]\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<span class=\"top-ellipsis1\">\r\n\t\t\t\t\t\t{{ item.content }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</ListItem>\r\n\t\t\t</template>\r\n\t\t</Popup>\r\n\r\n\t\t<Menu\r\n\t\t\tv-else\r\n\t\t\tv-model=\"model\"\r\n\t\t\t:items=\"items\"\r\n\t\t\t:isMultiple=\"true\"\r\n\t\t\tstyling=\"bar\"\r\n\t\t\t:canBeEmptyMultiple=\"false\"\r\n\t\t\t:selectAllItem=\"selectAllItem\"\r\n\t\t/>\r\n\t</div>\r\n</template>\r\n\r\n<style>\r\n.top-selectorCompetitors_opener.top-button {\r\n\twidth: 100%;\r\n}\r\n</style>\r\n","import type { Region, SearcherIndexed } from '../selectorRegion';\r\nimport { useI18n } from '@/core/plugins/i18n';\r\n\r\nexport const dummyIndex = -2;\r\n\r\nexport const searchersNames = {\r\n\t0: 'Yandex',\r\n\t1: 'Google',\r\n\t4: 'YouTube',\r\n\t5: 'Bing',\r\n\t7: 'Seznam',\r\n\t8: 'AppStore',\r\n\t9: 'GoogleStore',\r\n\t20: 'Yandex.com',\r\n\t21: 'Yandex.com.tr',\r\n};\r\n\r\nexport const regionUndefined: Region = {\r\n\tkey: dummyIndex,\r\n\tname: '--',\r\n\tindex: dummyIndex,\r\n};\r\n\r\nexport const searcherUndefined: SearcherIndexed = {\r\n\tkey: dummyIndex,\r\n\tname: '--',\r\n\tregions: [regionUndefined],\r\n\tregionByIndex: new Map([[dummyIndex, regionUndefined]]),\r\n};\r\n\r\nconst regionAuto: Region = {\r\n\tkey: dummyIndex,\r\n\tname: 'Autoselect',\r\n\tindex: dummyIndex,\r\n};\r\n\r\nconst searcherAuto: SearcherIndexed = {\r\n\tkey: dummyIndex,\r\n\tname: 'Autoselect',\r\n\tregions: [regionAuto],\r\n\tregionByIndex: new Map([[dummyIndex, regionAuto]]),\r\n};\r\n\r\nconst regionGlobal: Region = {\r\n\tcountryCode: '00',\r\n\tdepth: 1,\r\n\tdevice: 0,\r\n\tkey: -1,\r\n\tindex: -1,\r\n\tlang: 'ru',\r\n\tname: 'Without region',\r\n};\r\n\r\nexport const getRegionAuto = () => {\r\n\tregionAuto.name = useI18n().Common.Autoselect!;\r\n\r\n\treturn regionAuto;\r\n};\r\n\r\nexport const getSearcherAuto = () => {\r\n\tgetRegionAuto();\r\n\r\n\tsearcherAuto.name = useI18n().Common.Autoselect!;\r\n\tconsole.log(searcherAuto);\r\n\r\n\treturn searcherAuto;\r\n};\r\n\r\nexport const getRegionGlobal = () => {\r\n\tregionGlobal.name = useI18n().Keywords.Without_region!;\r\n\r\n\treturn regionGlobal;\r\n};\r\n","import type { Region, Searcher, SearcherByKey, SearcherIndexed } from '../selectorRegion';\r\nimport { dummyIndex, getRegionGlobal, getSearcherAuto, regionUndefined, searchersNames, searcherUndefined } from './consts';\r\n\r\n/**\r\n * Генерация Map ПС с Map регионов из массива searchers\r\n * - ключ для ПС - searcherKey\r\n * - ключ для региона - regionIndex\r\n *\r\n * Если поисковиков в списке нет, в список будет добавлен searcherUndefined\r\n *\r\n * Если регионов в списке нет, в список будет добавлен regionUndefined\r\n *\r\n * @param forFrequency - получить массив для просмотра частоты (или ставок)\r\n * @param autoRegion - добавить элемент с ключем -2, который в API заменяется на нужный ключ в зависимости от контекста\r\n * @param searchers - поисковики с регионами проекта, см.: get/projects_2/projects, show_searchers_and_regions = 1\r\n */\r\nexport const genSearcherByKey = (\r\n\tforFrequency: boolean = false,\r\n\tautoRegion: boolean = false,\r\n\tsearchers: Searcher[] = [],\r\n) => {\r\n\tlet searcherByKey: SearcherByKey;\r\n\r\n\tif (forFrequency) {\r\n\t\tsearcherByKey = genSearchersMapVolume(searchers);\r\n\t} else {\r\n\t\tsearcherByKey = genSearchersMapCommon(searchers);\r\n\t}\r\n\r\n\tif (autoRegion) searcherByKey.set(dummyIndex, getSearcherAuto());\r\n\tif (!searcherByKey.size) searcherByKey.set(dummyIndex, searcherUndefined);\r\n\r\n\treturn searcherByKey;\r\n};\r\n\r\n/**\r\n * Список ПС с регионами\r\n *\r\n * @param searchers\r\n * @param onlyEnabledRegions\r\n * @param forceSearchersKeys - ключи ПС, которые нееобходимо вывести в любом случае\r\n * @param forFrequency - для частоты будут выводиться только Яндекс, Google и Mail\r\n */\r\nconst genSearchersMapCommon = (\r\n\tsearchers: Searcher[],\r\n\tonlyEnabledRegions: boolean = true,\r\n\tforceSearchersKeys: Searcher['key'][] = [],\r\n\tforFrequency: boolean = false,\r\n) => {\r\n\tconst searcherByKey: Map<Searcher['key'], SearcherIndexed> = new Map();\r\n\r\n\t// настроенные ПС\r\n\tsearchers.forEach((searcher) => {\r\n\t\tif (!searcher.enabled) return;\r\n\t\tif (forFrequency && typeof searcher.key === 'number' && searcher.key > 1) return;\r\n\r\n\t\tconst searcherI = { ...searcher } as SearcherIndexed;\r\n\t\tsearcherI.regionByIndex = new Map();\r\n\r\n\t\tif (searcher.regions) {\r\n\t\t\tsearcher.regions.forEach((region: Region) => {\r\n\t\t\t\tif (onlyEnabledRegions && !region.enabled) return;\r\n\r\n\t\t\t\tconst regionI = { ...region };\r\n\t\t\t\tif (searcherI.regionByIndex) searcherI.regionByIndex.set(regionI.index, regionI);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (!searcherI.regionByIndex.size && !forceSearchersKeys.length) {\r\n\t\t\tsearcherI.regionByIndex.set(regionUndefined.index, regionUndefined);\r\n\t\t}\r\n\r\n\t\tif (typeof searcherI.key === 'number') searcherByKey.set(searcherI.key, searcherI);\r\n\t});\r\n\r\n\t// дополнительные ПС\r\n\tforceSearchersKeys.forEach((searcherKey) => {\r\n\t\tif (searcherByKey.has(searcherKey)) return;\r\n\r\n\t\tconst searcherI: SearcherIndexed = {\r\n\t\t\tkey: searcherKey,\r\n\t\t\tname: searchersNames[searcherKey],\r\n\t\t\tregions: [],\r\n\t\t\tregionByIndex: new Map(),\r\n\t\t};\r\n\r\n\t\tsearcherByKey.set(searcherI.key, searcherI);\r\n\t});\r\n\r\n\treturn searcherByKey;\r\n};\r\n\r\n/**\r\n * Список ПС с регионами для проверки частоты (Яндекс, Google, Mail если добавлен в проект)\r\n *\r\n * @param searchers\r\n */\r\nconst genSearchersMapVolume = (searchers: Searcher[]) => {\r\n\tconst serarcherByKey = genSearchersMapCommon(searchers, false, [0, 1], true);\r\n\r\n\t// в Mail нет регионов\r\n\tif (serarcherByKey.has(2)) {\r\n\t\tconst searcherMail = serarcherByKey.get(2);\r\n\t\tif (searcherMail) searcherMail.regionByIndex = new Map();\r\n\t}\r\n\r\n\t// добавление глобального региона\r\n\tserarcherByKey.forEach((searcher) => {\r\n\t\tif (!searcher.regionByIndex) return;\r\n\r\n\t\tconst region = { ...getRegionGlobal() };\r\n\t\tsearcher.regionByIndex.set(region.index, region);\r\n\t});\r\n\r\n\treturn serarcherByKey;\r\n};\r\n\r\n/**\r\n * Поиск региона по заданному критерию из списка поисковиков проекта\r\n *\r\n * @param forFrequency - поиск региона для просмотра частоты или ставок\r\n * @param searchRegion - объект с параметрами региона, который следует найти\r\n * @param searchers\r\n */\r\nexport const findRegion = (forFrequency: boolean, searchRegion: Partial<Region>, searchers: Searcher[] = []) => {\r\n\tconst searcherByKey = genSearcherByKey(forFrequency, false, searchers);\r\n\r\n\tlet findedRegion: Region | undefined;\r\n\r\n\t// поиск ПС\r\n\tsearcherByKey.forEach((searcher) => {\r\n\t\tif (searchRegion.searcher_key !== undefined && searchRegion.searcher_key != searcher.key) return;\r\n\t\tif (!searcher.regions) return;\r\n\r\n\t\t// поиск региона\r\n\t\tsearcher.regions.forEach((region) => {\r\n\t\t\tif (findedRegion) return;\r\n\r\n\t\t\tif (searchRegion.key !== undefined && searchRegion.key != region.key) return;\r\n\t\t\tif (searchRegion.index !== undefined && searchRegion.index != region.index) return;\r\n\r\n\t\t\tif (!forFrequency) {\r\n\t\t\t\tif (searchRegion.lang !== undefined && searchRegion.lang != region.lang) return;\r\n\t\t\t\tif (searchRegion.device !== undefined && searchRegion.device != region.device) return;\r\n\t\t\t}\r\n\r\n\t\t\tregion.searcher_key = searcher.key;\r\n\t\t\tfindedRegion = region;\r\n\r\n\t\t\treturn false;\r\n\t\t});\r\n\r\n\t\tif (findedRegion) return false;\r\n\t});\r\n\r\n\treturn findedRegion;\r\n};\r\n","import { computed, type ComputedRef, ref } from 'vue';\r\nimport { useI18n } from '@/core/plugins/i18n';\r\nimport type { Props, SearcherByKey } from '../selectorRegion';\r\nimport type { Option, Options } from '@/components/forms/select/select';\r\nimport { dummyIndex } from '../utils/consts';\r\nimport { getSearcherGIcon } from '@/core/utils/searchers';\r\n\r\n/**\r\n * Создание и управление реактивными переменными для выбора ПС\r\n *\r\n * @param props - входные props компонента\r\n * @param mapSearchers - Map ПС (реактивная)\r\n */\r\nexport const useSelectSearcher = (\r\n\tprops: Props,\r\n\tmapSearchers: ComputedRef<SearcherByKey>,\r\n) => {\r\n\tconst i18n = useI18n();\r\n\r\n\t/**\r\n\t * Ключ выбранной поисковой системы\r\n\t */\r\n\tconst searcherKey = ref(mapSearchers.value.keys().next().value ?? dummyIndex);\r\n\r\n\t/**\r\n\t * Коллекция опций для выбора ПС\r\n\t */\r\n\tconst optionBySearcherKey = computed(() => {\r\n\t\tconst res: Options = new Map();\r\n\t\tmapSearchers.value.forEach((searcher) => {\r\n\t\t\tlet option: Option = {\r\n\t\t\t\tvalue: searcher.key,\r\n\t\t\t\ttitle: searcher.name,\r\n\t\t\t};\r\n\r\n\t\t\tif (props.addSearcherIcon) option.icon = getSearcherGIcon(searcher.key);\r\n\r\n\t\t\tres.set(searcher.key, option);\r\n\t\t});\r\n\r\n\t\t// добавить режим сравнения, если есть хотя бы одна ПС\r\n\t\tif (props.addCompare && !res.has(dummyIndex)) {\r\n\t\t\tconst dummyOption: Option = {\r\n\t\t\t\tvalue: '',\r\n\t\t\t\ttitle: '--------------------',\r\n\t\t\t\tdisabled: true,\r\n\t\t\t};\r\n\t\t\tres.set(dummyOption.value, dummyOption);\r\n\r\n\t\t\tconst compareOption: Option = {\r\n\t\t\t\tvalue: -1,\r\n\t\t\t\ttitle: i18n.Common.Compare!,\r\n\t\t\t};\r\n\t\t\tres.set(compareOption.value, compareOption);\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t});\r\n\r\n\treturn {\r\n\t\tsearcherKey,\r\n\t\toptionBySearcherKey,\r\n\t};\r\n};\r\n","import { computed, type ComputedRef, ref, watch } from 'vue';\r\nimport { useI18n } from '@/core/plugins/i18n';\r\nimport { getDeviceGIcon, getLangLabel } from '@/core/utils/searchers';\r\nimport type { Option } from '@/components/forms/select/select';\r\nimport { dummyIndex } from '../utils/consts';\r\nimport type { Props, Region, SearcherIndexed } from '../selectorRegion';\r\n\r\n/**\r\n * Создание и управление реактивными переменными для выбора региона\r\n *\r\n * @param props - входные props компонента\r\n * @param activeSearcherIndexed - объект активной поисковой системы (реактивная)\r\n * @param regionsIndexes - входные индексы регионов/ПС\r\n */\r\nexport const useSelectRegion = (props: Props, activeSearcherIndexed: ComputedRef<SearcherIndexed>) => {\r\n\tconst i18n = useI18n();\r\n\r\n\t/**\r\n\t * Индекс выбранного региона\r\n\t */\r\n\tconst regionIndex = ref(dummyIndex);\r\n\r\n\tif (props.modelValue.length === 1) {\r\n\t\tregionIndex.value = props.modelValue[0];\r\n\t}\r\n\r\n\tif (regionIndex.value === dummyIndex) {\r\n\t\tif (props.forFrequency) {\r\n\t\t\t// в качетсве ключа используется region.key, а не region.index\r\n\t\t\tregionIndex.value = activeSearcherIndexed.value?.regionByIndex.values().next().value?.key ?? dummyIndex;\r\n\t\t} else {\r\n\t\t\tregionIndex.value = activeSearcherIndexed.value?.regionByIndex.keys().next().value ?? dummyIndex;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Коллекция опций для выбора региона\r\n\t */\r\n\tconst optionByRegionIndex = computed(() => {\r\n\t\tconst options = new Map<number, Option>();\r\n\r\n\t\tactiveSearcherIndexed.value.regionByIndex?.forEach((region) => {\r\n\t\t\tlet regionLabel = region.name;\r\n\r\n\t\t\t// на частоту в текущей версии устройство и язык не влияют\r\n\t\t\t// обратите внимание, в качетсве ключа используется region.key, а не region.index\r\n\t\t\tif (props.forFrequency) {\r\n\t\t\t\tconst option: Option = {\r\n\t\t\t\t\tvalue: region.key,\r\n\t\t\t\t\ttitle: regionLabel,\r\n\t\t\t\t};\r\n\t\t\t\tif (!options.has(region.key)) options.set(region.key, option);\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (region.device) {\r\n\t\t\t\tregionLabel += ' (' + i18n.Common['Device_' + region.device] + ')';\r\n\t\t\t}\r\n\r\n\t\t\tconst langLabel = getLangLabel(activeSearcherIndexed.value.key || 0, region.lang ?? '');\r\n\t\t\tif (langLabel) regionLabel += ' / ' + langLabel;\r\n\r\n\t\t\tconst option: Option = {\r\n\t\t\t\tvalue: region.index,\r\n\t\t\t\ttitle: regionLabel,\r\n\t\t\t\ticon: region.device ? getDeviceGIcon(region.device) : undefined,\r\n\t\t\t};\r\n\r\n\t\t\toptions.set(region.index, option);\r\n\t\t});\r\n\r\n\t\treturn options;\r\n\t});\r\n\r\n\t/**\r\n\t * Выбор максимально похожего региона в новой коллекции регионов\r\n\t */\r\n\twatch(optionByRegionIndex, (optionByRegionIndex, oldOptionByRegionIndex) => {\r\n\t\tif (props.onlySearcher || regionIndex.value !== undefined && optionByRegionIndex.get(regionIndex.value)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet newRegionIndex = optionByRegionIndex.keys().next().value as Region['index'];\r\n\t\tif (regionIndex.value === dummyIndex || newRegionIndex === dummyIndex) {\r\n\t\t\tregionIndex.value = newRegionIndex;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet regionName = (oldOptionByRegionIndex?.get(regionIndex.value) as Option)?.title || '';\r\n\t\tlet regionMatchLevel = -1;\r\n\t\tfor (const [index, option] of optionByRegionIndex.entries()) {\r\n\t\t\tconst title = (option as Option).title;\r\n\r\n\t\t\tif (typeof title !== 'string' || typeof index === 'string') {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\t// полное совпадение\r\n\t\t\tif (title === regionName) {\r\n\t\t\t\tnewRegionIndex = index;\r\n\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tconst regexpDevice = new RegExp(` \\\\((${i18n.Common['Device_1']}|${i18n.Common['Device_2']})\\\\)`);\r\n\t\t\tlet regionNameCompare = regionName;\r\n\t\t\tlet regionMatchLevelI = 3;\r\n\r\n\t\t\t// без устройства\r\n\t\t\tif (title.indexOf(regionNameCompare) === -1) {\r\n\t\t\t\tregionNameCompare = regionName.replace(/^[^a-zа-я]/i, '').replace(regexpDevice, '');\r\n\r\n\t\t\t\tregionMatchLevelI--;\r\n\t\t\t}\r\n\r\n\t\t\t// без языка\r\n\t\t\tif (title.indexOf(regionNameCompare) === -1) {\r\n\t\t\t\tregionNameCompare = regionName.replace(/ \\/.*/, '');\r\n\r\n\t\t\t\tregionMatchLevelI--;\r\n\t\t\t}\r\n\r\n\t\t\t// без устройства и без языка\r\n\t\t\tif (title.indexOf(regionNameCompare) === -1) {\r\n\t\t\t\tregionNameCompare = regionName.replace(/ \\/.*/, '');\r\n\t\t\t\tregionNameCompare = regionNameCompare.replace(/^[^a-zа-я]/i, '').replace(regexpDevice, '');\r\n\r\n\t\t\t\tregionMatchLevelI--;\r\n\t\t\t}\r\n\r\n\t\t\tif (title.indexOf(regionNameCompare) === -1) continue;\r\n\t\t\tif (regionMatchLevelI <= regionMatchLevel) continue;\r\n\r\n\t\t\tregionMatchLevel = regionMatchLevelI;\r\n\t\t\tnewRegionIndex = index;\r\n\t\t}\r\n\r\n\t\tregionIndex.value = newRegionIndex;\r\n\t});\r\n\r\n\treturn {\r\n\t\tregionIndex,\r\n\t\toptionByRegionIndex,\r\n\t};\r\n};\r\n","import { type ComputedRef, ref, watch } from 'vue';\r\nimport type { Props, SearcherByKey } from '../selectorRegion';\r\n\r\n/**\r\n * Создание и управление реактивными переменными для сравнения\r\n *\r\n * @param props - входные props компонента\r\n * @param searcherByKey - Map ПС (реактивная)\r\n * @param allRegionsIndexes - Все доступные индексы регионов (реактивная)\r\n */\r\nexport const useCompare = (props: Props, searcherByKey: ComputedRef<SearcherByKey>, allRegionsIndexes: ComputedRef<Set<number>>) => {\r\n\t/**\r\n\t * Индексы регионов/ПС в сравнение\r\n\t */\r\n\tconst regionsIndexes = ref([] as number[]);\r\n\r\n\t/**\r\n\t * Загрузка индексов регионов для сравнения\r\n\t *\r\n\t * Если в modelValue передано несколько регионов, они будут установлены как выбранные для сравнения\r\n\t */\r\n\tconst compareLoad = () => {\r\n\t\tif (props.onlySearcher && searcherByKey.value) {\r\n\t\t\tregionsIndexes.value = Array.from(searcherByKey.value.keys());\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet regionsIndexesSaved: Props['modelValue'] = [];\r\n\r\n\t\tif (props.modelValue.length > 1) {\r\n\t\t\tregionsIndexesSaved = [...props.modelValue];\r\n\t\t} else {\r\n\t\t\ttry {\r\n\t\t\t\t// загрузить индексы регионов, если они были сохранены\r\n\t\t\t\tregionsIndexesSaved = JSON.parse(\r\n\t\t\t\t\tlocalStorage.getItem('ui:project:regionSelector' + props.projectId + ':regionsIndexes') as string,\r\n\t\t\t\t) ?? [];\r\n\t\t\t} catch (e) {\r\n\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// убрать из сравнения регионы, которых нет в props.searchers\r\n\t\tif (regionsIndexesSaved.length) {\r\n\t\t\tregionsIndexesSaved = regionsIndexesSaved.filter((regionIndex) => {\r\n\t\t\t\treturn allRegionsIndexes.value.has(regionIndex);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// если не сохранено ни одного региона, выбрать все регионы проекта\r\n\t\tif (!regionsIndexesSaved.length) {\r\n\t\t\tregionsIndexesSaved = Array.from(allRegionsIndexes.value);\r\n\t\t}\r\n\r\n\t\tregionsIndexes.value = [...regionsIndexesSaved];\r\n\t};\r\n\r\n\t/**\r\n\t * Сохранение выбранных регионов\r\n\t */\r\n\tconst compareSave = () => {\r\n\t\tif (regionsIndexes.value.length) {\r\n\t\t\tlocalStorage.setItem('ui:project:regionSelector:' + props.projectId + ':regionsIndexes', JSON.stringify(regionsIndexes.value));\r\n\t\t} else {\r\n\t\t\tlocalStorage.removeItem('ui:project:regionSelector:' + props.projectId + ':regionsIndexes');\r\n\t\t}\r\n\t};\r\n\r\n\twatch(regionsIndexes, () => {\r\n\t\tcompareSave();\r\n\t});\r\n\r\n\tif (props.addCompare) {\r\n\t\t// if (props.compareRegionsIndexes?.length) {\r\n\t\t// \tcompareRegionsIndexes.value = [...props.compareRegionsIndexes];\r\n\t\t// } else {\r\n\t\t// \tcompareLoad();\r\n\t\t// }\r\n\r\n\t\tcompareLoad();\r\n\t}\r\n\r\n\treturn {\r\n\t\tregionsIndexes,\r\n\t};\r\n};\r\n","import { computed, watch } from 'vue';\r\nimport { findRegion, genSearcherByKey } from '../utils/utils';\r\nimport { dummyIndex, searcherUndefined } from '../utils/consts';\r\nimport type { Props, Region, SearcherIndexed } from '../selectorRegion';\r\nimport { useSelectSearcher } from './selectSearcher';\r\nimport { useSelectRegion } from './selectRegion';\r\nimport { useCompare } from './compare';\r\n\r\n/**\r\n * Создание и управления рективными переменными компонента\r\n *\r\n * @param props - входные props компонента\r\n */\r\nexport const useSelectorRegion = (props: Props) => {\r\n\tconst searcherByKey = computed(() => {\r\n\t\treturn genSearcherByKey(props.forFrequency, props.autoRegion, props.searchers);\r\n\t});\r\n\r\n\tconst activeSearcherIndexed = computed(() => {\r\n\t\treturn searcherByKey.value.get(selectSearcher.searcherKey.value) || searcherUndefined;\r\n\t});\r\n\r\n\t/**\r\n\t * Все индексы регионов из mapSearchers\r\n\t */\r\n\tconst allRegionsIndexes = computed(() => {\r\n\t\tconst regionsIndexes = new Set<number>();\r\n\r\n\t\tsearcherByKey.value.forEach((searcher) => {\r\n\t\t\tsearcher.regions?.forEach((region) => {\r\n\t\t\t\tif (region.index === -1) return;\r\n\t\t\t\tif (region.index === dummyIndex) return;\r\n\r\n\t\t\t\tregionsIndexes.add(region.index);\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\treturn regionsIndexes;\r\n\t});\r\n\r\n\tconst selectSearcher = useSelectSearcher(props, searcherByKey);\r\n\tconst selectRegion = useSelectRegion(props, activeSearcherIndexed);\r\n\tconst compare = useCompare(props, searcherByKey, allRegionsIndexes);\r\n\r\n\t// контроль за внешним изменением списка ПС\r\n\twatch(searcherByKey, () => {\r\n\t\t// возможные значения для сравнения регионов/пс\r\n\t\tif (props.onlySearcher) {\r\n\t\t\tcompare.regionsIndexes.value = Array.from(searcherByKey.value.keys());\r\n\t\t} else {\r\n\t\t\tcompare.regionsIndexes.value = compare.regionsIndexes.value.filter(regionIndex => {\r\n\t\t\t\treturn allRegionsIndexes.value.has(regionIndex);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (selectSearcher.searcherKey.value === -1) return;\r\n\r\n\t\tlet newSearcherKey = searcherByKey.value.keys().next().value;\r\n\r\n\t\tsearcherByKey.value.forEach((searcher) => {\r\n\t\t\t// определить выбранную ПС\r\n\t\t\tif (props.onlySearcher && searcher.key === selectSearcher.searcherKey.value) {\r\n\t\t\t\tnewSearcherKey = selectSearcher.searcherKey.value;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (\r\n\t\t\t\tselectRegion.regionIndex.value &&\r\n\t\t\t\tsearcher.regionByIndex?.has(selectRegion.regionIndex.value)\r\n\t\t\t) {\r\n\t\t\t\tnewSearcherKey = searcher.key;\r\n\t\t\t}\r\n\r\n\t\t\t// выбрать первую ПС с выбранным регионом\r\n\t\t\tif (!props.onlySearcher) {\r\n\t\t\t\tlet regionsNewSearcher: SearcherIndexed['regionByIndex'] | undefined;\r\n\r\n\t\t\t\tif (newSearcherKey !== undefined) {\r\n\t\t\t\t\tregionsNewSearcher = searcherByKey.value.get(newSearcherKey)?.regionByIndex;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst regionsCurrentSearcher = searcherByKey.value.get(searcher.key)?.regionByIndex;\r\n\t\t\t\tif (\r\n\t\t\t\t\tregionsNewSearcher?.has(dummyIndex) &&\r\n\t\t\t\t\t!regionsCurrentSearcher?.has(dummyIndex)\r\n\t\t\t\t) {\r\n\t\t\t\t\tnewSearcherKey = searcher.key;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// if (props.addCompare && !selectSearcher.optionBySearcherKey.value.has(dummyIndex)) {\r\n\t\t// \tif (!selectRegion.regionIndex.value && compare.regionsIndexes.value?.length) newSearcherKey = -1;\r\n\t\t// }\r\n\r\n\t\t// if (props.onlySearcher && selectRegion.regionIndex.value !== dummyIndex) newSearcherKey = selectRegion.regionIndex.value;\r\n\r\n\t\tif (newSearcherKey !== undefined) {\r\n\t\t\tselectSearcher.searcherKey.value = newSearcherKey;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tselectRegion.regionIndex.value !== undefined &&\r\n\t\t\t!(activeSearcherIndexed.value?.regionByIndex)?.has(selectRegion.regionIndex.value)\r\n\t\t) {\r\n\t\t\tselectRegion.regionIndex.value = activeSearcherIndexed.value?.regions?.keys().next().value as number;\r\n\t\t}\r\n\t}, { immediate: true });\r\n\r\n\tconst getSearcherKey = () => {\r\n\t\tif (selectSearcher.searcherKey.value === -1 || selectSearcher.searcherKey.value === dummyIndex) return;\r\n\r\n\t\treturn selectSearcher.searcherKey.value;\r\n\t};\r\n\r\n\tconst getRegionIndex = () => {\r\n\t\tif (props.onlySearcher) return;\r\n\r\n\t\tif (selectRegion.regionIndex.value === dummyIndex) return;\r\n\r\n\t\tlet res: Region['index'] | undefined = selectRegion.regionIndex.value;\r\n\r\n\t\t// в качестве ключа используется region.key\r\n\t\tif (props.forFrequency) {\r\n\t\t\tconst regionKey = selectRegion.regionIndex.value;\r\n\t\t\tconst region = findRegion(props.forFrequency, { searcher_key: getSearcherKey(), key: regionKey } as Region, props.searchers);\r\n\r\n\t\t\tres = region?.index;\r\n\t\t}\r\n\r\n\t\treturn res;\r\n\t};\r\n\r\n\t/**\r\n\t * Получить выбранную ПС\r\n\t */\r\n\tconst getSearcher = () => {\r\n\t\tconst searcherKey = getSearcherKey();\r\n\t\tif (searcherKey === undefined) return;\r\n\r\n\t\treturn searcherByKey.value.get(searcherKey);\r\n\t};\r\n\r\n\t/**\r\n\t * Получить выбранный регион\r\n\t */\r\n\tconst getRegion = () => {\r\n\t\tconst regionIndex = getRegionIndex();\r\n\t\tif (regionIndex === undefined) return;\r\n\r\n\t\treturn getSearcher()?.regionByIndex?.get(regionIndex);\r\n\t};\r\n\r\n\treturn {\r\n\t\tselectSearcher,\r\n\t\tselectRegion,\r\n\t\tcompare,\r\n\r\n\t\tsearcherByKey,\r\n\t\tallRegionsIndexes,\r\n\r\n\t\tgetSearcher,\r\n\t\tgetRegion,\r\n\t};\r\n};\r\n","<script setup lang=\"ts\">\r\nimport { watch } from 'vue';\r\nimport type { Emits, Props, Region } from './selectorRegion';\r\nimport Select from '@/components/forms/select/select.vue';\r\nimport Button from '@/components/forms/button/button.vue';\r\nimport { useSelectorRegion } from './composables/selectorRegion';\r\nimport { dummyIndex } from './utils/consts';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tsearchers: () => [],\r\n\t// compareRegionsIndexes: () => [],\r\n\taddSearcherIcon: true,\r\n\taddRegionIcon: true,\r\n\taddChanger: true,\r\n});\r\n\r\nconst model = defineModel<Props['modelValue']>({ required: true });\r\nconst modelSingle = defineModel<Props['modelValueSingle']>('modelValueSingle');\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst {\r\n\tselectSearcher,\r\n\tselectRegion,\r\n\tcompare,\r\n\r\n\tsearcherByKey,\r\n\tallRegionsIndexes,\r\n\r\n\tgetSearcher,\r\n\tgetRegion,\r\n} = useSelectorRegion(props);\r\n\r\nconst onClickCompare = () => {\r\n\t// ### TODO: сделать выбор регионов через UI (сейчас в UI выбор региона не работает)\r\n\tif (window['fieldTemplates'] && window['fieldTemplates']?.openSelectorRegions) {\r\n\t\twindow['fieldTemplates'].openSelectorRegions(\r\n\t\t\tsearcherByKey.value,\r\n\t\t\tcompare.regionsIndexes.value,\r\n\t\t\t(regionsIndexes: Region['index'][]) => compare.regionsIndexes.value = regionsIndexes,\r\n\t\t);\r\n\t\treturn;\r\n\t}\r\n\r\n\temit('compareRegions', searcherByKey.value);\r\n};\r\n\r\nwatch([selectRegion.regionIndex, selectSearcher.searcherKey, compare.regionsIndexes], () => {\r\n\tif (selectSearcher.searcherKey.value === -1 && compare.regionsIndexes.value.length) {\r\n\t\tif (JSON.stringify(model.value) === JSON.stringify(compare.regionsIndexes.value)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tmodel.value = [...compare.regionsIndexes.value];\r\n\t} else {\r\n\t\tmodel.value = [props.onlySearcher ? selectSearcher.searcherKey.value : selectRegion.regionIndex.value];\r\n\t}\r\n\r\n\t// регионов нет\r\n\tif (!props.onlySearcher && !allRegionsIndexes.value.size) {\r\n\t\tselectSearcher.searcherKey.value = dummyIndex;\r\n\t}\r\n});\r\n\r\nif (modelSingle.value) {\r\n\twatch(modelSingle, () => {\r\n\t\tmodel.value = [modelSingle.value!];\r\n\t}, { immediate: true });\r\n}\r\n\r\nwatch(model, () => {\r\n\tif (model.value[0]) {\r\n\t\tmodelSingle.value = model.value[0];\r\n\t}\r\n\r\n\t// проверка входных данных v-model на корректность\r\n\tif (props.onlySearcher) {\r\n\t\tif (\r\n\t\t\t!model.value.length ||\r\n\t\t\tmodel.value.length === 1 && !searcherByKey.value.has(model.value[0])\r\n\t\t) {\r\n\t\t\tlet defaultKey: number | undefined = searcherByKey.value.keys().next().value;\r\n\r\n\t\t\tif (defaultKey !== undefined) {\r\n\t\t\t\tmodel.value = [defaultKey];\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\tmodel.value.length > 1 &&\r\n\t\t\tJSON.stringify(model.value) !== JSON.stringify(compare.regionsIndexes.value)\r\n\t\t) {\r\n\t\t\tmodel.value = [...compare.regionsIndexes.value];\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\t} else {\r\n\t\tlet newModel = [...new Set(model.value)];\r\n\r\n\t\tlet defaultIndex = searcherByKey.value.values().next().value?.regionByIndex?.keys().next().value;\r\n\t\tif (props.forFrequency) {\r\n\t\t\tdefaultIndex = searcherByKey.value.values().next().value?.regionByIndex?.values().next().value?.key;\r\n\t\t}\r\n\r\n\t\tif (!newModel.length) {\r\n\t\t\tif (defaultIndex !== undefined) {\r\n\t\t\t\tnewModel.push(defaultIndex);\r\n\t\t\t}\r\n\t\t} else if (newModel.length === 1) {\r\n\t\t\tlet all = allRegionsIndexes.value;\r\n\r\n\t\t\tif (props.forFrequency) {\r\n\t\t\t\tall = new Set();\r\n\t\t\t\tsearcherByKey.value.forEach((searcher) => {\r\n\t\t\t\t\tsearcher.regionByIndex.forEach((region) => {\r\n\t\t\t\t\t\tif (region.index === -1) return;\r\n\t\t\t\t\t\tif (region.index === dummyIndex) return;\r\n\r\n\t\t\t\t\t\tall.add(region.key);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif (!all.has(newModel[0]) && newModel[0] !== -2) {\r\n\t\t\t\tnewModel = [];\r\n\t\t\t\tif (defaultIndex !== undefined) {\r\n\t\t\t\t\tnewModel.push(defaultIndex);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tnewModel = newModel.filter(index => allRegionsIndexes.value.has(index));\r\n\t\t\tif (!newModel.length && defaultIndex !== undefined) {\r\n\t\t\t\tnewModel.push(defaultIndex);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (JSON.stringify(model.value) !== JSON.stringify(newModel)) {\r\n\t\t\tmodel.value = newModel;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t// входные данные v-model совпадают с внутренними значениями\r\n\tif (\r\n\t\tmodel.value.length === 1 &&\r\n\t\tmodel.value[0] === (props.onlySearcher ? selectSearcher.searcherKey.value : selectRegion.regionIndex.value)\r\n\t) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// if (\r\n\t// \tmodel.value.length > 1 &&\r\n\t// \tselectorSearcher.searcherKey.value === -1 &&\r\n\t// \tJSON.stringify(model.value) === JSON.stringify(selectorCompare.regionsIndexes.value)\r\n\t// ) {\r\n\t// \treturn;\r\n\t// }\r\n\r\n\t// обновление regionIndex, searcherKey, selectorCompare.regionsIndexes\r\n\tif (props.onlySearcher) {\r\n\t\t// if (!model.value.length) {\r\n\t\t// \tselectorSearcher.searcherKey.value = dummyIndex;\r\n\t\t//\r\n\t\t// \treturn;\r\n\t\t// }\r\n\r\n\t\tif (model.value.length === 1) {\r\n\t\t\tselectSearcher.searcherKey.value = model.value[0];\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tselectSearcher.searcherKey.value = -1;\r\n\r\n\t\treturn;\r\n\t} else {\r\n\t\t// if (!model.value.length) {\r\n\t\t// \tselectorSearcher.searcherKey.value = dummyIndex;\r\n\t\t// \tselectorRegion.regionIndex.value = dummyIndex;\r\n\t\t//\r\n\t\t// \treturn;\r\n\t\t// }\r\n\r\n\t\tif (model.value.length === 1 && selectSearcher.searcherKey.value !== -1) {\r\n\t\t\tselectRegion.regionIndex.value = model.value[0];\r\n\r\n\t\t\tlet newSearherKey: number | undefined;\r\n\t\t\tfor (const searcher of searcherByKey.value.values()) {\r\n\t\t\t\tfor (const region of searcher.regionByIndex.values()) {\r\n\t\t\t\t\tconst currentRegionIndex = props.forFrequency ? region.key : region.index;\r\n\t\t\t\t\tif (currentRegionIndex === selectRegion.regionIndex.value) {\r\n\t\t\t\t\t\tnewSearherKey = searcher.key;\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (newSearherKey !== undefined) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (newSearherKey !== undefined) {\r\n\t\t\t\tselectSearcher.searcherKey.value = newSearherKey;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tselectSearcher.searcherKey.value = -1;\r\n\t\t\tcompare.regionsIndexes.value = [...model.value];\r\n\t\t}\r\n\t}\r\n}, { immediate: true });\r\n\r\ndefineExpose({\r\n\tgetSearcher,\r\n\tgetRegion,\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-selectorRegion': true,\r\n\t\t\t'top-selectorRegion-onlySearcher': onlySearcher,\r\n\t\t}\"\r\n\t>\r\n\t\t<Select\r\n\t\t\t:options=\"selectSearcher.optionBySearcherKey.value\"\r\n\t\t\tv-model=\"selectSearcher.searcherKey.value\"\r\n\t\t\tname=\"searcher_key\"\r\n\t\t\t:addChanger=\"addChanger\"\r\n\t\t/>\r\n\r\n\t\t<Select\r\n\t\t\tv-if=\"!onlySearcher && selectSearcher.searcherKey.value !== -1\"\r\n\t\t\tclass=\"top-select-region\"\r\n\t\t\t:options=\"selectRegion.optionByRegionIndex.value\"\r\n\t\t\tv-model=\"selectRegion.regionIndex.value\"\r\n\t\t\t:name=\"forFrequency ? 'region_key' : 'region_index'\"\r\n\t\t\t:addChanger=\"addChanger\"\r\n\t\t\t:data-top-icon=\"addRegionIcon ? '' : undefined\"\r\n\t\t/>\r\n\r\n\t\t<Button\r\n\t\t\tv-if=\"addCompare && !onlySearcher && selectSearcher.searcherKey.value === -1\"\r\n\t\t\tname=\"compare\"\r\n\t\t\t@click=\"onClickCompare\"\r\n\t\t\t:data-count-compare-regions-indexes=\"compare.regionsIndexes.value.length\"\r\n\t\t>\r\n\t\t\t{{ $i18n.Common.Selected_regions }}\r\n\t\t</Button>\r\n\t</div>\r\n</template>\r\n\r\n<style>\r\n@import \"./styles/searcherColors.css\";\r\n\r\n.top-selectorRegion {\r\n\twidth: 320px;\r\n\tdisplay: inline-flex;\r\n\tvertical-align: middle;\r\n}\r\n\r\n.top-selectorRegion > .top-select {\r\n\tflex-grow: 1;\r\n}\r\n\r\n.top-selectorRegion > .top-select:focus-within {\r\n\tz-index: 4;\r\n}\r\n\r\n.top-selectorRegion > .top-select > .top-select_select:hover,\r\n.top-selectorRegion > .top-select > .top-select_select.top-error {\r\n\tz-index: 1;\r\n}\r\n\r\n.top-selectorRegion > .top-select-searcher_key {\r\n\twidth: 120px;\r\n\tmax-width: 140px;\r\n\tmargin-right: -1px;\r\n}\r\n\r\n.top-selectorRegion > .top-select-region > select {\r\n\tborder-top-left-radius: 0;\r\n\tborder-bottom-left-radius: 0;\r\n}\r\n\r\n.top-selectorRegion > .top-select-region {\r\n\t--top-icon-size: 20px;\r\n\t--top-icon-color: var(--color-text-primary-1);\r\n\r\n\t--top-icon2-size: 20px;\r\n\t--top-icon2-color: var(--color-text-primary-1);\r\n}\r\n\r\n.top-selectorRegion > .top-select-region[data-top-icon][data-top-icon2] {\r\n\t--top-icon2-size: 16px;\r\n}\r\n\r\n.top-selectorRegion > .top-select-region[data-top-icon][data-top-icon2]:after {\r\n\ttext-indent: -4px;\r\n}\r\n\r\n.top-selectorRegion > [name=\"compare\"] {\r\n\tborder-top-left-radius: 0;\r\n\tborder-bottom-left-radius: 0;\r\n\tflex-grow: 1;\r\n}\r\n\r\n.top-selectorRegion > [name=\"compare\"]:after {\r\n\tcontent: \"(\" attr(data-count-compare-regions-indexes) \")\";\r\n\tmargin: 0 0 0 6px;\r\n}\r\n\r\n.top-selectorRegion:not(.top-selectorRegion-onlySearcher) > .top-select-searcher_key > select {\r\n\tborder-top-right-radius: 0;\r\n\tborder-bottom-right-radius: 0;\r\n\tmargin-right: 0;\r\n}\r\n\r\n.top-selectorRegion:not(.top-selectorRegion-onlySearcher) > .top-select-searcher_key[data-value=\"-1\"] > select {\r\n\tborder-right: none;\r\n}\r\n\r\n.top-selectorRegion-onlySearcher {\r\n\twidth: 120px;\r\n}\r\n</style>\r\n","import type { Tag } from './types';\r\n\r\nexport default [\r\n\t{\r\n\t\tid: '1',\r\n\t\tname: 'Without Tag',\r\n\t\tcolor_id: '1',\r\n\t},\r\n\t{\r\n\t\tid: '2',\r\n\t\tname: 'Red',\r\n\t\tcolor_id: '2',\r\n\t},\r\n\t{\r\n\t\tid: '3',\r\n\t\tname: 'Orange',\r\n\t\tcolor_id: '3',\r\n\t},\r\n\t{\r\n\t\tid: '4',\r\n\t\tname: 'Yellow',\r\n\t\tcolor_id: '4',\r\n\t},\r\n\t{\r\n\t\tid: '5',\r\n\t\tname: 'Blue',\r\n\t\tcolor_id: '5',\r\n\t},\r\n\t{\r\n\t\tid: '6',\r\n\t\tname: 'Purple',\r\n\t\tcolor_id: '6',\r\n\t},\r\n\t{\r\n\t\tid: '7',\r\n\t\tname: 'Green',\r\n\t\tcolor_id: '7',\r\n\t},\r\n\t{\r\n\t\tid: '8',\r\n\t\tname: 'Magenta',\r\n\t\tcolor_id: '8',\r\n\t},\r\n\t{\r\n\t\tid: '9',\r\n\t\tname: 'Dark blue',\r\n\t\tcolor_id: '9',\r\n\t},\r\n\t{\r\n\t\tid: '10',\r\n\t\tname: 'Turquoise',\r\n\t\tcolor_id: '10',\r\n\t},\r\n] as Tag[];\r\n","import type { Props as TagSelectorOpenerProps, TagSelectorTarget } from '../popupOpener/types';\r\nimport type { Tag, TagIdExclude } from '../types';\r\n\r\n/**\r\n * Полуичить значение исключения тега tagId\r\n */\r\nexport const genTagIdExcluded = (tagId: Tag['id']): TagIdExclude => {\r\n\treturn '-' + tagId as TagIdExclude;\r\n};\r\n\r\n/**\r\n * Вернуть чистый tagId без exclude флага\r\n */\r\nexport const genTagIdClear = (tagId: Tag['id'] | TagIdExclude) => {\r\n\tif (tagId[0] === '-') return tagId.substring(1) as Tag['id'];\r\n\r\n\treturn tagId as Tag['id'];\r\n};\r\n\r\n/**\r\n * Получить инфомрацию о теге по его id\r\n */\r\nexport const getTagById = (tagId: Tag['id'] | TagIdExclude, tags: TagSelectorOpenerProps['tags']) => {\r\n\ttagId = genTagIdClear(tagId);\r\n\r\n\tconst tag = tags.find(tag => tag.id === tagId);\r\n\tif (!tag) return;\r\n\r\n\treturn tag;\r\n};\r\n","<script setup lang=\"ts\">\r\nimport { computed, nextTick, ref } from 'vue';\r\nimport type { Emits, Props } from './types';\r\nimport TopTagIcon from '../tagIcon/tagIcon.vue';\r\nimport TopPopupListItem from '@/components/popup/popup/listItem.vue';\r\n\r\nconst props = defineProps<Props>();\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst name = defineModel<Props['name']>('name', {\r\n\trequired: true,\r\n});\r\n\r\nconst elName = ref<HTMLElement | null>(null);\r\n\r\n/**\r\n * @todo Удалить через пол года после выхода версии firefox с поддержкой contenteditable plaintext-only, включая бета версии\r\n */\r\nconst firefoxProps = computed(() => {\r\n\tif (navigator.userAgent.indexOf('Firefox') != -1) {\r\n\r\n\t\treturn {\r\n\t\t\tcontenteditable: inEdit.value,\r\n\t\t\tonpaste: (event: Event) => event.preventDefault(),\r\n\t\t};\r\n\t}\r\n\r\n\treturn {};\r\n});\r\n\r\n/**\r\n * Включен режим редактирвоания\r\n */\r\nconst inEdit = ref(false);\r\n\r\n/**\r\n * Включить режим редактирование\r\n */\r\nconst turnToEdit = async () => {\r\n\tinEdit.value = true;\r\n\r\n\tawait nextTick();\r\n\r\n\telName.value?.focus();\r\n};\r\n\r\n/**\r\n * Применить редактирование\r\n */\r\nconst editCommit = () => {\r\n\tconst name = elName.value?.innerText;\r\n\tif (!name) return editCancel();\r\n\r\n\tif (elName.value) elName.value.innerText = name;\r\n\r\n\tinEdit.value = false;\r\n\r\n\temit('update:name', name);\r\n};\r\n\r\n/**\r\n * Отменить редактирование\r\n */\r\nconst editCancel = async () => {\r\n\tif (elName.value) elName.value.innerText = props.name;\r\n\r\n\tinEdit.value = false;\r\n};\r\n\r\n/**\r\n * Применить выбор\r\n */\r\nconst changeSelect = (e: MouseEvent) => {\r\n\t// в режиме редактирования выбор не применяется\r\n\tif (inEdit.value) return;\r\n\r\n\t// тег запрещено выбирать\r\n\tif (props.disabled) return;\r\n\r\n\tlet toState: Props['state'] = 'selected';\r\n\r\n\tif (props.canExclude) {\r\n\t\tif (e.ctrlKey || e.metaKey) {\r\n\t\t\ttoState = 'excluded';\r\n\t\t}\r\n\t}\r\n\r\n\tif (props.state == toState) {\r\n\t\ttoState = '';\r\n\t}\r\n\r\n\tif (toState === '') emit('unselect');\r\n\tif (toState === 'selected') emit('select');\r\n\tif (toState === 'excluded') emit('exclude');\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<TopPopupListItem\r\n\t\t:class=\"{\r\n\t\t\t'top-tagSelector_tagListItem': true,\r\n\t\t\t'top-tagSelector_tagListItem-inEdit': inEdit,\r\n\t\t\t'top-tagSelector_tagListItem-disabled': disabled,\r\n\t\t\t'top-tagSelector_tagListItem-canExclude': canExclude,\r\n\t\t\t'top-tagSelector-active': !!state,\r\n\t\t\t'top-tagSelector-excluded': state === 'excluded'\r\n\t\t}\"\r\n\t\t@click.stop=\"changeSelect\"\r\n\t>\r\n\t\t<TopTagIcon\r\n\t\t\t:id\r\n\t\t\t:name\r\n\t\t\t:colorId\r\n\t\t\t:state\r\n\t\t/>\r\n\r\n\t\t<span\r\n\t\t\tref=\"elName\"\r\n\t\t\tclass=\"top-tagSelector_tagListItemName\"\r\n\t\t\t:contenteditable=\"inEdit ? 'plaintext-only' : false\"\r\n\t\t\t:=\"firefoxProps\"\r\n\t\t\t@keydown.enter.stop=\"editCommit\"\r\n\t\t\t@keydown.esc.stop=\"editCancel\"\r\n\t\t>\r\n\t\t\t{{ name }}\r\n\t\t</span>\r\n\r\n\t\t<template v-if=\"editable\">\r\n\t\t\t<span\r\n\t\t\t\tv-if=\"!inEdit\"\r\n\t\t\t\tdata-top-icon=\"\"\r\n\t\t\t\tclass=\"top-tagSelector_edit\"\r\n\t\t\t\t@click=\"turnToEdit\"\r\n\t\t\t></span>\r\n\r\n\t\t\t<span\r\n\t\t\t\tv-else\r\n\t\t\t\tdata-top-icon=\"\"\r\n\t\t\t\tclass=\"top-tagSelector_edit\"\r\n\t\t\t\t@click.stop=\"editCommit\"\r\n\t\t\t></span>\r\n\t\t</template>\r\n\t</TopPopupListItem>\r\n</template>\r\n\r\n<style>\r\n.top-tagSelector_tagListItem.top-popup_listItem {\r\n\tpadding-top: var(--top-padding-2) !important;\r\n\tpadding-bottom: var(--top-padding-2) !important;\r\n\tgap: 10px;\r\n}\r\n\r\n.top-tagSelector_tagListItemName {\r\n\tborder-radius: var(--top-radius-1);\r\n\twidth: 120px;\r\n\tpadding: 4px 2px;\r\n\tmargin: -4px -2px;\r\n\ttext-overflow: ellipsis;\r\n\toverflow: hidden;\r\n\tflex-grow: 1;\r\n}\r\n\r\n/* редактирование */\r\n.top-tagSelector_edit {\r\n\t--top-icon-size: 18px;\r\n\t--top-icon-color: var(--color-text-3);\r\n\r\n\twidth: 20px;\r\n\tflex-grow: 0;\r\n}\r\n\r\n.top-tagSelector_edit:before {\r\n\tline-height: 0;\r\n}\r\n\r\n.top-tagSelector_edit { opacity: 0; }\r\n.top-tagSelector_edit:hover {\r\n\t--top-icon-color: var(--color-text-primary);\r\n}\r\n\r\n.top-tagSelector_tagListItem:hover .top-tagSelector_edit,\r\n.top-tagSelector_tagListItem-inEdit .top-tagSelector_edit {\r\n\tcursor: pointer;\r\n\topacity: 1;\r\n}\r\n\r\n.top-tagSelector_tagListItem-inEdit {\r\n\tbackground: var(--color-layout-front-3) !important;\r\n\toutline: 1px dashed var(--color-line-2);\r\n\toutline-offset: -1px;\r\n}\r\n\r\n.top-tagSelector_tagListItem-inEdit .top-tagSelector_tagListItemName {\r\n\tcursor: text;\r\n\tbackground: var(--color-layout-front-1);\r\n}\r\n\r\n/* disabled */\r\n.top-tagSelector_tagListItem-disabled {\r\n\tcursor: not-allowed !important;\r\n\topacity: 0.85;\r\n}\r\n.top-tagSelector_tagListItem-disabled:hover {\r\n\tbackground: inherit;\r\n}\r\n.top-tagSelector_tagListItem-disabled [data-tag_id] {\r\n\topacity: 0.6;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport type { Props, TagSelectorTarget } from './types';\r\nimport TopPopupOpener from '../../../popup/popup/opener.vue';\r\nimport TopButton from '@/components/forms/button/button.vue';\r\nimport { genTagIdClear, getTagById } from '../utils/utils';\r\nimport TopTagIcon from '../tagIcon/tagIcon.vue';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = defineProps<Props>();\r\n\r\nconst model = defineModel<Props['modelValue']>({\r\n\trequired: true,\r\n});\r\n\r\nconst component = props.useTopButton ? TopButton : 'div';\r\nconst componentSlotName = props.useTopButton ? 'html' : 'default';\r\n\r\nconst topTagSelectorTarget: TagSelectorTarget = {\r\n\tmodel,\r\n\tmode: props.mode,\r\n\ttargetId: props.targetId,\r\n\tfilters: props.filters,\r\n\tpayload: props.payload,\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<TopPopupOpener :id>\r\n\t\t<component\r\n\t\t\t:is=\"component\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t'top-tagSelector': true,\r\n\t\t\t\t'top-tagSelector-filter': props.mode === 'filter',\r\n\t\t\t\t'top-tagSelector-setter_single': props.mode === 'setter' && !filters,\r\n\t\t\t\t'top-tagSelector-setter_several': props.mode === 'setter' && filters,\r\n\t\t\t\t'top-tagSelector-selectedOne': !model.length || model.length === 1,\r\n\t\t\t\t'top-tagSelector-toTwoLine': model.length > 5,\r\n\t\t\t}\"\r\n\t\t\tcolor=\"theme\"\r\n\t\t\tstyling=\"\"\r\n\t\t\tv-top-data:topTagSelectorTarget=\"topTagSelectorTarget\"\r\n\t\t\t:=$attrs\r\n\t\t>\r\n\t\t\t<template #[componentSlotName]>\r\n\t\t\t\t<TopTagIcon\r\n\t\t\t\t\tv-if=\"!model.length && mode === 'filter'\"\r\n\t\t\t\t\tid=\"all\"\r\n\t\t\t\t\tcolorId=\"\"\r\n\t\t\t\t\t:name=\"$i18n.Common.All_tags ?? ''\"\r\n\t\t\t\t\tstate=\"\"\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t<!-- Массовое редактирование -->\r\n\t\t\t\t<div v-if=\"mode === 'setter' && filters\">\r\n\t\t\t\t\t<slot></slot>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t<!-- Список тегов -->\r\n\t\t\t\t<TopTagIcon\r\n\t\t\t\t\tv-else\r\n\t\t\t\t\tv-for=\"tagId in model\"\r\n\t\t\t\t\t:id=\"genTagIdClear(tagId)\"\r\n\t\t\t\t\t:colorId=\"getTagById(tagId, tags)?.color_id ?? ''\"\r\n\t\t\t\t\t:name=\"getTagById(tagId, tags)?.name ?? ''\"\r\n\t\t\t\t\t:state=\"genTagIdClear(tagId) === tagId ? 'selected' : 'excluded'\"\r\n\t\t\t\t/>\r\n\t\t\t</template>\r\n\t\t</component>\r\n\t</TopPopupOpener>\r\n</template>\r\n\r\n<style>\r\n.top-tagSelector {\r\n\tcursor: pointer;\r\n\tmin-width: 0;\r\n\twhite-space: nowrap;\r\n\tjustify-content: left;\r\n}\r\n\r\n.top-tagSelector.top-button {\r\n\twidth: 112px;\r\n\tvertical-align: middle;\r\n}\r\n\r\n.top-tagSelector.top-button.top-select_arrow {\r\n\twidth: calc(112px + 20px);\r\n}\r\n\r\n.top-tagSelector-filter {\r\n\tgap: var(--top-gap-1);\r\n}\r\n\r\n/* все теги в фильтре */\r\n.top-tagSelector-filter [data-tag_id=\"all\"] {\r\n\tmargin-left: 0;\r\n}\r\n.top-tagSelector-filter [data-tag_id=\"all\"]:before {\r\n\tborder: none;\r\n\tmargin-left: 3px;\r\n\topacity: 0.5;\r\n}\r\n\r\n/* фильтр по одному тегу */\r\n.top-tagSelector-filter.top-tagSelector-selectedOne [data-tag_id]:after {\r\n\tcontent: attr(title);\r\n\tmargin-left: 20px;\r\n\tmin-width: 74px;\r\n\ttext-align: left;\r\n\tline-height: 1.2;\r\n\ttext-overflow: ellipsis;\r\n\toverflow: hidden;\r\n}\r\n\r\n.top-tagSelector-filter.top-tagSelector-selectedOne [data-tag_id=\"all\"]:after {\r\n\tmargin-left: 0;\r\n}\r\n\r\n/* фильтр по многим тегам */\r\n.top-button.top-tagSelector-filter.top-tagSelector-toTwoLine {\r\n\tflex-wrap: wrap;\r\n\talign-content: center;\r\n}\r\n\r\n.top-button.top-tagSelector-filter.top-tagSelector-toTwoLine [data-tag_id] {\r\n\t--top-tag-selector-size: 8px;\r\n}\r\n\r\n.top-button.top-tagSelector-filter.top-tagSelector-toTwoLine [data-tag_id]:nth-child(5) {\r\n\tmargin-right: 5px;\r\n}\r\n\r\n/* установка тегов */\r\n.top-tagSelector-setter_single {\r\n\tposition: relative;\r\n\tdisplay: flex !important; flex-direction: column; flex-wrap: wrap; align-items: stretch !important;\r\n}\r\n\r\n.top-tagSelector-setter_single [data-tag_id] {\r\n\twidth: auto; min-height: 20%; min-width: 50%;\r\n\tflex: 1 1 auto;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { computed, reactive, ref, shallowRef, watch } from 'vue';\r\n\r\nimport Core from '@/core/core/core';\r\nimport { useI18n } from '@/core/plugins/i18n';\r\nimport { storage } from '@/core/utils/dom';\r\nimport { debounce } from '@/core/utils/lodash';\r\n\r\nimport type { Option } from '@/components/forms/select/select';\r\nimport TopSelect from '@/components/forms/select/select.vue';\r\n\r\nimport TopButton from '@/components/forms/button/button.vue';\r\n\r\nimport type { PopupEvent } from '@/components/popup/popup/popup';\r\nimport TopPopup from '../../popup/popup/popup.vue';\r\nimport TopPopupListItem from '../../popup/popup/listItem.vue';\r\n\r\nimport type { Emits, FiltersAction, Props, Tag } from './types';\r\nimport tagsDefaults from './tagsDefaults';\r\nimport { genTagIdExcluded } from './utils/utils';\r\n\r\nimport type { Props as TagListItemProps } from './popupListItem/types';\r\nimport TopTagListItem from './popupListItem/tagPopupListItem.vue';\r\n\r\nimport type { TagSelectorTarget } from './popupOpener/types';\r\nimport TopTagSelectorPopupOpener from './popupOpener/popupOpener.vue';\r\n\r\nconst i18n = useI18n();\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\ttagsMax: 10,\r\n\trequiredForSetter: true,\r\n\temitDelay: 500,\r\n});\r\n\r\n/**\r\n * Выбранные теги кнопки в этом компоненте\r\n *\r\n * Редактирвоание ведется только через `editTarget.model`\r\n */\r\nconst model = defineModel<Props['modelValue']>({\r\n\trequired: true,\r\n});\r\n\r\n/**\r\n * Список тегов\r\n */\r\nconst tags = defineModel<Tag[]>('tags', {\r\n\tdefault: reactive(tagsDefaults),\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst emitDebounce: typeof emit = debounce((name, e) => {\r\n\temit(name, e);\r\n}, props.emitDelay);\r\n\r\n// требуется сразу указать один тег\r\nif (props.singleMode && !model.value.length) {\r\n\tmodel.value = [tags.value[0].id];\r\n}\r\n\r\nconst id = props.id ?? 'top-popup-id-' + Math.random() + '';\r\n\r\nconst filtersAction = ref<FiltersAction>('add');\r\n\r\n/**\r\n * Сгенерировать опции для выбора дейсвтия массого редактирования\r\n */\r\nconst genFiltersActionOptions = () => {\r\n\tconst tagsText = ' ' + i18n.Common.Tags?.toLowerCase();\r\n\r\n\tconst res = new Map<FiltersAction, Option>();\r\n\tres.set('add', { value: 'add', title: i18n.Common.Add + tagsText });\r\n\tres.set('replace', { value: 'replace', title: i18n.Common.Replace + tagsText });\r\n\tres.set('delete', { value: 'delete', title: i18n.Common.Delete + tagsText });\r\n\r\n\treturn res;\r\n};\r\n\r\n/**\r\n * Целевой объект редактирвоания тегов\r\n *\r\n * Определяется кнопкой, которая открыла popup выбора тегов\r\n */\r\nlet target = shallowRef<TagSelectorTarget>({\r\n\tmodel,\r\n\tmode: 'filter',\r\n\ttargetId: undefined,\r\n\tfilters: undefined,\r\n\tpayload: undefined,\r\n});\r\n\r\nwatch(model, () => {\r\n\temitDebounce('selector', model.value);\r\n});\r\n\r\n/**\r\n * Можно ли выбрать еще теги\r\n */\r\nconst disabled = computed(() => {\r\n\tif (target.value.mode !== 'setter') return;\r\n\r\n\tif (!props.maxTagsForSetter) return;\r\n\r\n\t// массовая смена тегов, количество тегов в результате узнать невозможно\r\n\tif (target.value.filters) return;\r\n\r\n\treturn target.value.model.value.length >= props.maxTagsForSetter;\r\n});\r\n\r\nconst genTargetTagState = (tagId: Tag['id'] | 'all'): TagListItemProps['state'] => {\r\n\tif (tagId !== 'all') {\r\n\t\tif (target.value.model.value.includes(tagId)) return 'selected';\r\n\r\n\t\tif (target.value.model.value.includes(genTagIdExcluded(tagId))) return 'excluded';\r\n\t}\r\n\r\n\t// Все теги, ни один из тегов не выбран\r\n\tif (tagId === 'all' && !target.value.model.value.length) return 'selected';\r\n\r\n\treturn '';\r\n};\r\n\r\nconst updateTargetModel = (tagId: Tag['id'], action: 'unselect' | 'select' | 'exclude') => {\r\n\tconst tagIdExcluded = genTagIdExcluded(tagId);\r\n\r\n\tlet tagsIds = target.value.model.value.filter(modelTagId => modelTagId !== tagId && modelTagId !== tagIdExcluded);\r\n\r\n\tif (action === 'select') tagsIds.push(tagId);\r\n\tif (action === 'exclude') tagsIds.push(tagIdExcluded);\r\n\r\n\t// режим редактирвоания тегов одного объекта с требованием указать хотя бы один тег\r\n\tif (target.value.mode === 'setter' && target.value.targetId !== undefined && props.requiredForSetter) {\r\n\t\t// нельзя снимать выделение со всех тегов\r\n\t\tif (!tagsIds.length) {\r\n\t\t\ttagsIds.push('1');\r\n\t\t}\r\n\r\n\t\t// при первом выборе сразу снять тег \"Без тега\"\r\n\t\tif (tagsIds.length === 2 && target.value.model.value.length === 1 && target.value.model.value[0] === '1') {\r\n\t\t\ttagsIds = tagsIds.filter((tagId) => tagId !== '1');\r\n\t\t}\r\n\t}\r\n\r\n\t// режим выбора одного тега\r\n\tif (props.singleMode && !target.value.filters) {\r\n\t\t// нужно указать хотя бы один тег\r\n\t\tif (!tagsIds.length) {\r\n\t\t\ttagsIds = target.value.model.value;\r\n\t\t}\r\n\r\n\t\tif (tagsIds.length > 1) {\r\n\t\t\ttagsIds = [tagsIds[tagsIds.length - 1]];\r\n\t\t}\r\n\t}\r\n\r\n\t// всегда выводить теги в порядке, указанном в настройках tags\r\n\ttagsIds.sort((a, b) => {\r\n\t\tif (!props.tags) return 0;\r\n\r\n\t\tconst aIndex = props.tags.findIndex((tag) => tag.id === a);\r\n\t\tconst bIndex = props.tags.findIndex((tag) => tag.id === b);\r\n\r\n\t\treturn aIndex - bIndex;\r\n\t});\r\n\r\n\ttarget.value.model.value = tagsIds;\r\n\r\n\tif (target.value.mode === 'setter' && target.value.targetId !== undefined) {\r\n\t\temitDebounce('setter', {\r\n\t\t\ttagsIds: tagsIds as Tag['id'][],\r\n\t\t\ttargetId: target.value.targetId,\r\n\t\t\tpayload: target.value.payload,\r\n\t\t});\r\n\t}\r\n};\r\n\r\nconst classString = computed(() => {\r\n\tlet res = 'top-tagSelector_popup';\r\n\r\n\tif (target.value.mode === 'filter') res += ' top-tagSelector_popup-filter';\r\n\tif (target.value.mode === 'setter') res += ' top-tagSelector_popup-setter';\r\n\r\n\treturn res;\r\n});\r\n\r\n/**\r\n * Добавить тег\r\n */\r\nconst addTag = () => {\r\n\tconst tagName = prompt('', 'New tag');\r\n\tif (!tagName || tagName === 'New tag') return;\r\n\r\n\tconst tagId = tags.value.length + 1;\r\n\r\n\ttags.value.push({\r\n\t\tid: String(tagId) as Tag['id'],\r\n\t\tname: tagName,\r\n\t\tcolor_id: String((tagId - 1) % 10 + 1) as Tag['color_id'],\r\n\t});\r\n\r\n\temit('tagsChanged', tags.value);\r\n};\r\n\r\nconst onOpen = (popupEvent: PopupEvent) => {\r\n\t// popup открыт другой кнопкой c другим modelValue, для редактирвоания объектов\r\n\ttarget.value = storage(popupEvent.elPopupOpener, 'topTagSelectorTarget');\r\n\tif (!target.value) throw new Error('Open popup TopTagSelector required v-data:topTagSelectorTarget');\r\n\r\n\t// при начале массовой установки тегов сбросить состояние формы\r\n\tif (target.value.filters) {\r\n\t\tfiltersAction.value = 'add';\r\n\t\ttarget.value.model.value = [];\r\n\t}\r\n\r\n\tif (!Core.$?.ui['sortable']) {\r\n\t\tconsole.info('Для работы сортировки требуется глобальная загрузка jQuery UI Sortable');\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tif (!Core.state.isMobile && !Core.state.isMobileUA && tags.value) {\r\n\t\t$(popupEvent.elPopup).sortable({\r\n\t\t\titems: 'li:has([data-tag_id]:not([data-tag_id=\"all\"]))',\r\n\r\n\t\t\t/**\r\n\t\t\t * @todo Удалить `[contenteditable=\"true\"]` через пол года после выхода версии firefox с поддержкой contenteditable plaintext-only, включая бета версии\r\n\t\t\t */\r\n\t\t\tcancel: '[contenteditable=\"plaintext-only\"], [contenteditable=\"true\"]',\r\n\r\n\t\t\tdistance: 10,\r\n\t\t\tstop: function (_e, ui) {\r\n\t\t\t\tif (!tags.value) return;\r\n\r\n\t\t\t\tconst $tags = $(ui.item).parent().find('[data-tag_id]');\r\n\r\n\t\t\t\tconst tagsSorted: Tag['id'][] = [];\r\n\t\t\t\t$tags.each((_index, elTag) => {\r\n\t\t\t\t\tif (!tags.value) return;\r\n\r\n\t\t\t\t\tconst tagId = $(elTag).attr('data-tag_id') as Tag['id'];\r\n\t\t\t\t\ttagsSorted.push(tagId);\r\n\t\t\t\t});\r\n\r\n\t\t\t\ttags.value.sort((tagIdA, tagIdB) => {\r\n\t\t\t\t\tconst a = tagsSorted.findIndex(tagSorted => tagSorted === tagIdA.id);\r\n\t\t\t\t\tconst b = tagsSorted.findIndex(tagSorted => tagSorted === tagIdB.id);\r\n\r\n\t\t\t\t\treturn a - b;\r\n\t\t\t\t});\r\n\r\n\t\t\t\temitDebounce('tagsChanged', tags.value);\r\n\t\t\t},\r\n\t\t});\r\n\t}\r\n};\r\n\r\nconst onClose = (popupEvent: PopupEvent) => {\r\n\tif (!Core.$?.ui['sortable']) return;\r\n\r\n\tif ($(popupEvent.elPopup).data('ui-sortable')) {\r\n\t\t$(popupEvent.elPopup).sortable('destroy');\r\n\t}\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<TopTagSelectorPopupOpener\r\n\t\tclass=\"top-select_arrow\"\r\n\t\tv-model=\"model\"\r\n\t\t:id\r\n\t\t:tags\r\n\t\tmode=\"filter\"\r\n\t\tuseTopButton\r\n\t/>\r\n\r\n\t<TopPopup\r\n\t\t:id\r\n\t\t:class=\"classString\"\r\n\t\t@open=\"onOpen($event)\"\r\n\t\t@close=\"onClose($event)\"\r\n\t\t:transition-duration=\"50\"\r\n\t>\r\n\t\t<!-- Массовое редактирвоание-->\r\n\t\t<template #header v-if=\"target.mode === 'setter' && target.filters\">\r\n\t\t\t<TopSelect\r\n\t\t\t\tv-model=\"filtersAction\"\r\n\t\t\t\t:options=\"genFiltersActionOptions()\"\r\n\t\t\t/>\r\n\t\t</template>\r\n\r\n\t\t<template #footer v-if=\"target.mode === 'setter' && target.filters\">\r\n\t\t\t<TopButton color=\"theme\">\r\n\t\t\t\t{{ $i18n.Common.Cancel }}\r\n\t\t\t</TopButton>\r\n\r\n\t\t\t<TopButton\r\n\t\t\t\t@click=\"emitDebounce('setter', {\r\n\t\t\t\t\ttagsIds: target.model.value as Tag['id'][],\r\n\t\t\t\t\tfilters: target.filters,\r\n\t\t\t\t\tfiltersAction,\r\n\t\t\t\t\tpayload: target.payload,\r\n\t\t\t\t})\"\r\n\t\t\t>\r\n\t\t\t\t{{ filtersAction === 'add' ? $i18n.Common['Add'] : '' }}\r\n\t\t\t\t{{ filtersAction === 'replace' ? $i18n.Common['Replace'] : '' }}\r\n\t\t\t\t{{ filtersAction === 'delete' ? $i18n.Common['Remove'] : '' }}\r\n\t\t\t</TopButton>\r\n\t\t</template>\r\n\r\n\t\t<template #contentList>\r\n\t\t\t<TopTagListItem\r\n\t\t\t\tv-if=\"target.mode === 'filter' && !singleMode\"\r\n\t\t\t\tid=\"all\"\r\n\t\t\t\tcolorId=\"\"\r\n\t\t\t\t:name=\"$i18n.Common.All_tags ?? ''\"\r\n\t\t\t\t:state=\"target.model.value.length ? '' : 'selected'\"\r\n\t\t\t\t@select=\"target.model.value = []\"\r\n\t\t\t/>\r\n\r\n\t\t\t<TopTagListItem\r\n\t\t\t\tv-for=\"tag in tags\"\r\n\t\t\t\t:key=\"tag.id\"\r\n\t\t\t\t:id=\"tag.id\"\r\n\t\t\t\t:colorId=\"tag.color_id\"\r\n\t\t\t\t:name=\"tag.name\"\r\n\t\t\t\t:state=\"genTargetTagState(tag.id)\"\r\n\t\t\t\t:canExclude=\"target.mode === 'filter' && !singleMode\"\r\n\t\t\t\t:editable=\"tagsEditable\"\r\n\t\t\t\t:disabled=\"disabled && genTargetTagState(tag.id) === ''\"\r\n\t\t\t\t@unselect=\"updateTargetModel(tag.id, 'unselect')\"\r\n\t\t\t\t@select=\"updateTargetModel(tag.id, 'select')\"\r\n\t\t\t\t@exclude=\"updateTargetModel(tag.id, 'exclude')\"\r\n\t\t\t\t@update:name=\"tag.name = $event as string, emitDebounce('tagsChanged', tags);\"\r\n\t\t\t/>\r\n\r\n\t\t\t<TopPopupListItem\r\n\t\t\t\tv-if=\"tagsEditable && tags.length < tagsMax && tags.length < 20\"\r\n\t\t\t\tdata-top-icon=\"\"\r\n\t\t\t\t@click.stop=\"addTag\"\r\n\t\t\t>\r\n\t\t\t\t{{ $i18n.Common.Add }}\r\n\t\t\t</TopPopupListItem>\r\n\t\t</template>\r\n\t</TopPopup>\r\n</template>\r\n\r\n<style>\r\n.top-tagSelector_popup .top-popup {\r\n\tuser-select: none;\r\n\tmin-width: 220px !important;\r\n\ttext-align: left;\r\n}\r\n\r\n.top-tagSelector_popup .top-popup_header .top-select{\r\n\tflex-grow: 1;\r\n}\r\n</style>\r\n","import type { MaybeRefOrGetter } from 'vue';\r\nimport { computed, toValue } from 'vue';\r\nimport type { Item } from '@/components/project/selectorCompetitors/selectorCompetitors';\r\nimport type { Competitor } from '@/components/project/selectorCompetitors/types/competitor';\r\n\r\nexport const useItemsFromCompetitors = (competitors: MaybeRefOrGetter<Competitor[]>, projectId: MaybeRefOrGetter<number>) => {\r\n\treturn computed(() => {\r\n\t\tconst activeCompetitors = toValue(competitors).filter(competitor => competitor.on >= 0 || competitor.id === projectId);\r\n\r\n\t\tconst items: Item[] = activeCompetitors.map(competitor => {\r\n\t\t\treturn {\r\n\t\t\t\tvalue: competitor.id,\r\n\t\t\t\ttitle: competitor.url + ` [${competitor.id}]`,\r\n\t\t\t\ticon: competitor.id === toValue(projectId) ? '' : '',\r\n\t\t\t\tcontent: competitor.name,\r\n\t\t\t};\r\n\t\t});\r\n\r\n\t\treturn items;\r\n\t});\r\n};\r\n","import { isRef, type Ref, ref, unref, watch } from 'vue';\r\nimport { useI18n } from '@/core/plugins/i18n';\r\nimport { storage } from '@/core/utils/dom';\r\nimport TopPopupWorker from '@/components/popup/lib/worker';\r\nimport type { OpenerProps as PopupOpenerProps } from '@/components/popup/popup/popup';\r\nimport type { Props as TagSelectorOpenerProps, TagSelectorTarget } from '../popupOpener/types';\r\nimport type { Props as TagIconProps } from '../tagIcon/types';\r\nimport { genTagIdClear, getTagById } from '../utils/utils';\r\n\r\n/**\r\n * Сгенерировтаь элемент для открытия popup с выбором тегов\r\n *\r\n * Альтернатива TopTagSelecorPopupOpener для работы вне vue\r\n *\r\n * Требует монтирования компонента TopTagSelecor\r\n */\r\nexport const genElPopupOpener = (\r\n\tprops: TagSelectorOpenerProps & { modelValue: TagSelectorOpenerProps['modelValue'] | Ref<TagSelectorOpenerProps['modelValue']> },\r\n\tpropsPopup?: Partial<PopupOpenerProps>,\r\n\thtmlSetterSeveral?: string,\r\n): HTMLElement => {\r\n\tif (!propsPopup) propsPopup = { id: props.id };\r\n\r\n\tpropsPopup.id = props.id;\r\n\r\n\tconst el = TopPopupWorker.genElPopupOpener('div', propsPopup as PopupOpenerProps);\r\n\r\n\tel.classList.add('top-tagSelector');\r\n\tif (props.useTopButton) el.classList.add('top-button', 'top-color_theme');\r\n\tif (props.mode === 'filter') el.classList.add('top-tagSelector-filter');\r\n\tif (props.mode === 'setter' && !props.filters) el.classList.add('top-tagSelector-setter_single');\r\n\tif (props.mode === 'setter' && props.filters) el.classList.add('top-tagSelector-setter_several');\r\n\r\n\t// прокcи клик: lazy connect\r\n\tel.onclick = (e) => {\r\n\t\te.preventDefault();\r\n\t\te.stopPropagation();\r\n\r\n\t\tel.onclick = null;\r\n\r\n\t\tconst model = ref(props.modelValue);\r\n\r\n\t\tconst target: TagSelectorTarget = {\r\n\t\t\tmodel,\r\n\t\t\tmode: props.mode,\r\n\t\t\ttargetId: props.targetId,\r\n\t\t\tfilters: props.filters,\r\n\t\t\tpayload: props.payload,\r\n\t\t};\r\n\r\n\t\tstorage(el, 'topTagSelectorTarget', target);\r\n\r\n\t\tdelete el.dataset.topPopupDisabled;\r\n\r\n\t\tif (!isRef(props.modelValue)) {\r\n\t\t\twatch(model, () => {\r\n\t\t\t\tprops.modelValue = model.value;\r\n\r\n\t\t\t\telPopupOpenerRender(el, props, htmlSetterSeveral);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// выполнение клика\r\n\t\tel.click();\r\n\t};\r\n\r\n\tif (isRef(props.modelValue)) {\r\n\t\twatch(props.modelValue, () => elPopupOpenerRender(el, props, htmlSetterSeveral));\r\n\t} else {\r\n\t\tstorage(el, 'topTagSelectorRender', (modelValue: TagSelectorOpenerProps['modelValue']) => {\r\n\t\t\tprops.modelValue = modelValue;\r\n\r\n\t\t\tconst target = storage(el, 'topTagSelectorTarget');\r\n\t\t\tif (target) target.model.value = modelValue;\r\n\r\n\t\t\telPopupOpenerRender(el, props, htmlSetterSeveral);\r\n\t\t});\r\n\t}\r\n\r\n\telPopupOpenerRender(el, props, htmlSetterSeveral);\r\n\r\n\treturn el;\r\n};\r\n\r\n/**\r\n * Вызвать перерисовку элемента, который был создан через genElPopupOpener()\r\n *\r\n * Работет только для элементов не с реактивным modelValue\r\n */\r\nexport const renderElPopupOpener = (el: HTMLElement, modelValue: TagSelectorOpenerProps['modelValue']) => {\r\n\tstorage(el, 'topTagSelectorRender')?.(modelValue);\r\n};\r\n\r\n/**\r\n * Отрисовать TopTagSelecorPopupOpener\r\n */\r\nconst elPopupOpenerRender = (el, props: TagSelectorOpenerProps, htmlSetterSeveral?: string) => {\r\n\tconst tagsIds = unref(props.modelValue);\r\n\r\n\tel.classList.toggle('top-tagSelector-selectedOne', !tagsIds.length || tagsIds.length === 1);\r\n\tel.classList.toggle('top-tagSelector-toTwoLine', tagsIds.length > 5);\r\n\r\n\tif (props.mode === 'setter' && props.filters) {\r\n\t\tel.innerHTML = `<div>${htmlSetterSeveral}</div>`;\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.innerHTML = '';\r\n\r\n\tif (!tagsIds.length && props.mode === 'filter') {\r\n\t\tconst elTagIcon = genElTagIcon({\r\n\t\t\tid: 'all',\r\n\t\t\tcolorId: '',\r\n\t\t\tname: useI18n().Common?.All_tags ?? '',\r\n\t\t\tstate: '',\r\n\t\t});\r\n\r\n\t\tel.append(elTagIcon);\r\n\t}\r\n\r\n\ttagsIds.forEach(tagId => {\r\n\t\tconst elTagIcon = genElTagIcon({\r\n\t\t\tid: genTagIdClear(tagId),\r\n\t\t\tcolorId: getTagById(tagId, props.tags)?.color_id ?? '',\r\n\t\t\tname: getTagById(tagId, props.tags)?.name ?? '',\r\n\t\t\tstate: genTagIdClear(tagId) === tagId ? 'selected' : 'excluded',\r\n\t\t});\r\n\r\n\t\tel.append(elTagIcon);\r\n\t});\r\n};\r\n\r\n/**\r\n * Сгенерировтаь элемент для открытия popup с выбором тегов\r\n *\r\n * Альтернатива TopTagSelecorTagIcon для работы вне vue\r\n */\r\nconst genElTagIcon = (props: TagIconProps) => {\r\n\tconst el = document.createElement('div');\r\n\r\n\tel.classList.add('top-tagSelector_tagIcon');\r\n\tel.classList.toggle('top-tagSelector-active', !!props.state);\r\n\tel.classList.toggle('top-tagSelector-excluded', props.state === 'excluded');\r\n\r\n\tel.dataset.tag_id = props.id;\r\n\tel.dataset.tag_color_id = props.colorId;\r\n\tel.title = props.name;\r\n\r\n\treturn el;\r\n};\r\n","import type { ComponentCustomProps } from 'vue';\r\n\r\nimport SelectorCompetitors from './selectorCompetitors/selectorCompetitors.vue';\r\nimport SelectorRegion from './selectorRegion/selectorRegion.vue';\r\n\r\nimport TagSelector from './tagSelector/tagSelector.vue';\r\nimport TagSelectorPopupOpener from './tagSelector/popupOpener/popupOpener.vue';\r\nimport TagSelectorTagIcon from './tagSelector/tagIcon/tagIcon.vue';\r\n\r\nexport const TopSelectorCompetitors = SelectorCompetitors as typeof SelectorCompetitors & ComponentCustomProps;\r\nexport { useItemsFromCompetitors } from './selectorCompetitors/composables';\r\n\r\nexport { findRegion, genSearcherByKey } from './selectorRegion/utils/utils';\r\nexport const TopSelectorRegion = SelectorRegion as typeof SelectorRegion & ComponentCustomProps;\r\n\r\nexport type { Emits as TopTagSelectorEmits, Tag, TagId, TagIdExclude } from './tagSelector/types';\r\nexport {\r\n\tgenElPopupOpener as genElTopTagSelectorPopupOpener,\r\n\trenderElPopupOpener as renderElTopTagSelectorPopupOpener,\r\n} from './tagSelector/utils/el';\r\nexport const TopTagSelector = TagSelector as typeof TagSelector & ComponentCustomProps;\r\nexport const TopTagSelectorPopupOpener = TagSelectorPopupOpener as typeof TagSelectorPopupOpener & ComponentCustomProps;\r\nexport const TopTagSelectorTagIcon = TagSelectorTagIcon as typeof TagSelectorTagIcon & ComponentCustomProps;\r\n"],"names":["selectAllItem","vue","props","forms","searchersNames","regionUndefined","dummyIndex","searcherUndefined","regionAuto","searcherAuto","regionGlobal","getRegionAuto","genSearcherByKey","forFrequency","autoRegion","searchers","searcherByKey","genSearchersMapVolume","genSearchersMapCommon","onlyEnabledRegions","forceSearchersKeys","searcher","searcherI","region","regionI","searcherKey","serarcherByKey","getRegionGlobal","findRegion","searchRegion","findedRegion","useSelectSearcher","mapSearchers","i18n","optionBySearcherKey","res","option","utils_searchers","useSelectRegion","activeSearcherIndexed","regionIndex","_c","optionByRegionIndex","options","regionLabel","langLabel","optionByRegionIndex2","newRegionIndex","regionName","_a","oldOptionByRegionIndex","index","title","regionNameCompare","regexpDevice","regionMatchLevelI","regionMatchLevel","regionsIndexes","regionsIndexesSaved","compareSave","compareLoad","useSelectorRegion","selectSearcher","allRegionsIndexes","compare","newSearcherKey","selectRegion","regionsNewSearcher","regionsCurrentSearcher","_d","regionKey","getSearcherKey","getSearcher","getRegionIndex","emit","modelSingle","model","defaultKey","newModel","defaultIndex","all","newSearherKey","__expose","tagsDefaults","genTagIdExcluded","tagId","genTagIdClear","getTagById","tags","tag","tag2","elName","firefoxProps","inEdit","event","name2","editCancel","changeSelect","e","toState","name","id","filtersAction","tagsText","target","emitDebounce","disabled","genTargetTagState","updateTargetModel","action","tagIdExcluded","tagsIds","tagId2","aIndex","a","bIndex","b","classString","tagName","onOpen","popupEvent","_e","ui","$tags","tagsSorted","tagSorted","tagIdA","tagIdB","onClose","useItemsFromCompetitors","competitors","projectId","competitor","genElPopupOpener","propsPopup","htmlSetterSeveral","el","utils_dom","elPopupOpenerRender","modelValue","renderElPopupOpener","elTagIcon","genElTagIcon","_b","TopSelectorCompetitors","_sfc_main$5","TopSelectorRegion","_sfc_main$4","TopTagSelector","_sfc_main","TopTagSelectorPopupOpener","_sfc_main$1","TopTagSelectorTagIcon","_sfc_main$3"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export * from '../components/project/project'
2
- export {}