@topvisor/ui 1.0.42-policy.0 → 1.1.0-addNativeDialog.6

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 (511) hide show
  1. package/.chunks/core-6NjSIwIA.amd.js +2 -0
  2. package/.chunks/{core-SEtL6T0A.amd.js.map → core-6NjSIwIA.amd.js.map} +1 -1
  3. package/.chunks/{core-BCV4xehV.es.js → core-CKa0qCEH.es.js} +4 -4
  4. package/.chunks/{core-BCV4xehV.es.js.map → core-CKa0qCEH.es.js.map} +1 -1
  5. package/.chunks/datepicker-DsKl-YZR.amd.js +2 -0
  6. package/.chunks/{datepicker-Ba8QPoiv.amd.js.map → datepicker-DsKl-YZR.amd.js.map} +1 -1
  7. package/.chunks/{datepicker-DHxSFb-9.es.js → datepicker-U31BrqE_.es.js} +2 -2
  8. package/.chunks/{datepicker-DHxSFb-9.es.js.map → datepicker-U31BrqE_.es.js.map} +1 -1
  9. package/.chunks/dialog_selectorRegions-BCXCCaXi.amd.js +2 -0
  10. package/.chunks/{dialog_selectorRegions-CiWJsA9r.amd.js.map → dialog_selectorRegions-BCXCCaXi.amd.js.map} +1 -1
  11. package/.chunks/{dialog_selectorRegions-Cd7_dHoH.es.js → dialog_selectorRegions-C_RhsGzk.es.js} +4 -4
  12. package/.chunks/{dialog_selectorRegions-Cd7_dHoH.es.js.map → dialog_selectorRegions-C_RhsGzk.es.js.map} +1 -1
  13. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-BhAl3bT-.es.js +700 -0
  14. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-BhAl3bT-.es.js.map +1 -0
  15. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-DVp-tQ6l.amd.js +2 -0
  16. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-DVp-tQ6l.amd.js.map +1 -0
  17. package/.chunks/field-Cvv0SRcJ.amd.js +2 -0
  18. package/.chunks/field-Cvv0SRcJ.amd.js.map +1 -0
  19. package/.chunks/field-CyyFzM-Y.es.js +16 -0
  20. package/.chunks/field-CyyFzM-Y.es.js.map +1 -0
  21. package/.chunks/forms-DRhpgERJ.amd.js +3 -0
  22. package/.chunks/{forms-L6BGV_om.amd.js.map → forms-DRhpgERJ.amd.js.map} +1 -1
  23. package/.chunks/{forms-DC7ffuv2.es.js → forms-t2AEUjqg.es.js} +16 -16
  24. package/.chunks/{forms-DC7ffuv2.es.js.map → forms-t2AEUjqg.es.js.map} +1 -1
  25. package/.chunks/lazy-Dr-Frbwe.amd.js +2 -0
  26. package/.chunks/lazy-Dr-Frbwe.amd.js.map +1 -0
  27. package/.chunks/lazy-Dy9IVVUy.es.js +19 -0
  28. package/.chunks/lazy-Dy9IVVUy.es.js.map +1 -0
  29. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-CXp02bYr.es.js → listItem.vue_vue_type_script_setup_true_lang-B6psuRkm.es.js} +2 -2
  30. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-CXp02bYr.es.js.map → listItem.vue_vue_type_script_setup_true_lang-B6psuRkm.es.js.map} +1 -1
  31. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C8PDRggQ.amd.js +2 -0
  32. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-M0ZTpQlF.amd.js.map → listItem.vue_vue_type_script_setup_true_lang-C8PDRggQ.amd.js.map} +1 -1
  33. package/.chunks/{menu.vue_vue_type_style_index_0_lang-DNsbNhVH.es.js → menu.vue_vue_type_style_index_0_lang-6kqWYFuX.es.js} +2 -2
  34. package/.chunks/{menu.vue_vue_type_style_index_0_lang-DNsbNhVH.es.js.map → menu.vue_vue_type_style_index_0_lang-6kqWYFuX.es.js.map} +1 -1
  35. package/.chunks/menu.vue_vue_type_style_index_0_lang-DRHk9iBB.amd.js +2 -0
  36. package/.chunks/{menu.vue_vue_type_style_index_0_lang-DepdFfhE.amd.js.map → menu.vue_vue_type_style_index_0_lang-DRHk9iBB.amd.js.map} +1 -1
  37. package/.chunks/{notice-DQXlrM4Y.es.js → notice-4bdzRXtl.es.js} +2 -2
  38. package/.chunks/{notice-DQXlrM4Y.es.js.map → notice-4bdzRXtl.es.js.map} +1 -1
  39. package/.chunks/{notice-ZTC1xm1R.amd.js → notice-DQ9qFyQ2.amd.js} +3 -3
  40. package/.chunks/{notice-ZTC1xm1R.amd.js.map → notice-DQ9qFyQ2.amd.js.map} +1 -1
  41. package/.chunks/page.vue_vue_type_script_setup_true_lang-BgGzBbMZ.amd.js +2 -0
  42. package/.chunks/page.vue_vue_type_script_setup_true_lang-BgGzBbMZ.amd.js.map +1 -0
  43. package/.chunks/page.vue_vue_type_script_setup_true_lang-BstJVz3j.es.js +176 -0
  44. package/.chunks/page.vue_vue_type_script_setup_true_lang-BstJVz3j.es.js.map +1 -0
  45. package/.chunks/pageComponent.vue_vue_type_script_setup_true_lang-B6ollFUC.amd.js +2 -0
  46. package/.chunks/pageComponent.vue_vue_type_script_setup_true_lang-B6ollFUC.amd.js.map +1 -0
  47. package/.chunks/pageComponent.vue_vue_type_script_setup_true_lang-DbaqFJra.es.js +56 -0
  48. package/.chunks/pageComponent.vue_vue_type_script_setup_true_lang-DbaqFJra.es.js.map +1 -0
  49. package/.chunks/{popup-B7GI-vlM.es.js → popup-DuraSW2f.es.js} +2 -2
  50. package/.chunks/{popup-B7GI-vlM.es.js.map → popup-DuraSW2f.es.js.map} +1 -1
  51. package/.chunks/popup-IcMnYYXr.amd.js +2 -0
  52. package/.chunks/{popup-Kvk7IPNI.amd.js.map → popup-IcMnYYXr.amd.js.map} +1 -1
  53. package/.chunks/punycode.es6-CNOnFR2-.amd.js +2 -0
  54. package/.chunks/{punycode.es6-C2yitnNb.amd.js.map → punycode.es6-CNOnFR2-.amd.js.map} +1 -1
  55. package/.chunks/punycode.es6-CgGegfA_.es.js +134 -0
  56. package/.chunks/{punycode.es6-CNI-zL6U.es.js.map → punycode.es6-CgGegfA_.es.js.map} +1 -1
  57. package/.chunks/store-CX_6ZXhO.es.js.map +1 -1
  58. package/.chunks/store-YRW59xEF.amd.js +2 -0
  59. package/.chunks/{store-esTid5oI.amd.js.map → store-YRW59xEF.amd.js.map} +1 -1
  60. package/.chunks/{utils-BkchlCXw.es.js → utils-Bd5whKoS.es.js} +5 -5
  61. package/.chunks/{utils-BkchlCXw.es.js.map → utils-Bd5whKoS.es.js.map} +1 -1
  62. package/.chunks/utils-BkF4g-PH.amd.js +2 -0
  63. package/.chunks/{utils-Bg7IV0KZ.amd.js.map → utils-BkF4g-PH.amd.js.map} +1 -1
  64. package/api/additional.amd.js +2 -0
  65. package/api/additional.amd.js.map +1 -0
  66. package/api/additional.js +66 -0
  67. package/api/additional.js.map +1 -0
  68. package/api/index.amd.js +2 -0
  69. package/api/index.amd.js.map +1 -0
  70. package/api/index.js +257 -0
  71. package/api/index.js.map +1 -0
  72. package/assets/themes/dark-th.css +1 -1
  73. package/assets/themes/dark.css +1 -1
  74. package/assets/themes/light.css +1 -1
  75. package/charts/charts.amd.js +1 -1
  76. package/charts/charts.amd.js.map +1 -1
  77. package/charts/charts.js +1 -1
  78. package/charts/charts.js.map +1 -1
  79. package/core/app.amd.js +1 -1
  80. package/core/app.amd.js.map +1 -1
  81. package/core/app.js +8 -8
  82. package/core/app.js.map +1 -1
  83. package/dialog/dialog.amd.js +1 -1
  84. package/dialog/dialog.amd.js.map +1 -1
  85. package/dialog/dialog.js +8 -57
  86. package/dialog/dialog.js.map +1 -1
  87. package/dialogV1AndDialogV2/dialog.amd.js +2 -0
  88. package/dialogV1AndDialogV2/dialog.amd.js.map +1 -0
  89. package/dialogV1AndDialogV2/dialog.js +11 -0
  90. package/dialogV1AndDialogV2/dialog.js.map +1 -0
  91. package/dialogV1Original/dialog.amd.js +2 -0
  92. package/dialogV1Original/dialog.amd.js.map +1 -0
  93. package/dialogV1Original/dialog.js +11 -0
  94. package/dialogV1Original/dialog.js.map +1 -0
  95. package/dialogV2/dialog.amd.js +2 -0
  96. package/dialogV2/dialog.amd.js.map +1 -0
  97. package/dialogV2/dialog.js +11 -0
  98. package/dialogV2/dialog.js.map +1 -0
  99. package/extra/extra.amd.js +1 -1
  100. package/extra/extra.amd.js.map +1 -1
  101. package/forms/forms.amd.js +1 -1
  102. package/forms/forms.js +1 -1
  103. package/forms/helpers.amd.js +1 -1
  104. package/formsExt/formsExt.amd.js +1 -1
  105. package/formsExt/formsExt.amd.js.map +1 -1
  106. package/formsExt/formsExt.js +3 -4
  107. package/formsExt/formsExt.js.map +1 -1
  108. package/layout/layout.amd.js +1 -1
  109. package/layout/layout.amd.js.map +1 -1
  110. package/layout/layout.js +1 -1
  111. package/package.json +3 -4
  112. package/popup/popup.amd.js +1 -1
  113. package/popup/popup.amd.js.map +1 -1
  114. package/popup/popup.js +2 -2
  115. package/popup/popup.js.map +1 -1
  116. package/popup/worker.amd.js +1 -1
  117. package/popup/worker.amd.js.map +1 -1
  118. package/popup/worker.js +2 -2
  119. package/popup/worker.js.map +1 -1
  120. package/project/project.amd.js +1 -1
  121. package/project/project.amd.js.map +1 -1
  122. package/project/project.js +157 -157
  123. package/project/project.js.map +1 -1
  124. package/tabs/tabs.amd.js +1 -1
  125. package/tabs/tabs.amd.js.map +1 -1
  126. package/tabs/tabs.js.map +1 -1
  127. package/tabsView/tabsView.amd.js +1 -1
  128. package/tabsView/tabsView.amd.js.map +1 -1
  129. package/tabsView/tabsView.js +1 -1
  130. package/tabsView/tabsView.js.map +1 -1
  131. package/types/api/additional.d.ts +2 -0
  132. package/types/api/api/additional.d.ts +1 -0
  133. package/types/api/api/client/client.d.ts +55 -0
  134. package/types/api/api/client/request-options.d.ts +1 -0
  135. package/types/api/api/client/request.d.ts +2 -0
  136. package/types/api/api/index.d.ts +12 -0
  137. package/types/api/api/tests/model.d.ts +0 -0
  138. package/types/api/api/tests/test.d.ts +16 -0
  139. package/types/api/api/types/api.d.ts +139 -0
  140. package/types/api/api/types/client/middleware.d.ts +65 -0
  141. package/types/api/api/types/client/options.d.ts +60 -0
  142. package/types/api/api/types/client/request-context.d.ts +35 -0
  143. package/types/api/api/types/client/request-options.d.ts +73 -0
  144. package/types/api/api/types/client/request.d.ts +85 -0
  145. package/types/api/api/types/ext.d.ts +51 -0
  146. package/types/api/api/types/field.d.ts +33 -0
  147. package/types/api/api/types/index.d.ts +11 -0
  148. package/types/api/api/types/schema.d.ts +50 -0
  149. package/types/api/api/types/tv.d.ts +59 -0
  150. package/types/api/api/types/utils.d.ts +51 -0
  151. package/types/api/api/utils/common.d.ts +16 -0
  152. package/types/api/api/utils/field.d.ts +8 -0
  153. package/types/api/api/utils/filters.d.ts +48 -0
  154. package/types/api/api/utils/lazy.d.ts +13 -0
  155. package/types/api/index.d.ts +2 -0
  156. package/types/components/dialog/dialog/dialog.vue.d.ts +28 -0
  157. package/types/components/dialog/lib/utils.d.ts +54 -0
  158. package/types/components/dialog/lib/worker.d.ts +78 -0
  159. package/types/components/dialogV1AndDialogV2/dialog/composables/asyncDialogHandle.d.ts +51 -0
  160. package/types/components/dialogV1AndDialogV2/dialog/composables/dialogHandle.d.ts +108 -0
  161. package/types/components/dialogV1AndDialogV2/dialog/composables/types.d.ts +11 -0
  162. package/types/components/dialogV1AndDialogV2/dialog/composables/utils.d.ts +23 -0
  163. package/types/components/dialogV1AndDialogV2/dialog/dialog.vue.d.ts +28 -0
  164. package/types/components/dialogV1AndDialogV2/dialog/dialogs/dialogs.vue.d.ts +13 -0
  165. package/types/components/dialogV1AndDialogV2/dialog/page/types.d.ts +72 -0
  166. package/types/components/dialogV1AndDialogV2/dialog/pageComponent/types.d.ts +18 -0
  167. package/types/components/dialogV1AndDialogV2/dialog/stories/dialog_example/pages/utils.d.ts +7 -0
  168. package/types/components/dialogV1AndDialogV2/dialog/types.d.ts +58 -0
  169. package/types/components/dialogV1AndDialogV2/dialog.d.ts +6 -0
  170. package/types/components/dialogV1AndDialogV2/lib/types.d.ts +44 -0
  171. package/types/components/dialogV1AndDialogV2/lib/utils.d.ts +18 -0
  172. package/types/components/dialogV1AndDialogV2/lib/utils.globalEvents.d.ts +8 -0
  173. package/types/components/dialogV1AndDialogV2/lib/worker.d.ts +72 -0
  174. package/types/components/dialogV1Original/dialog/composables/asyncDialogHandle.d.ts +51 -0
  175. package/types/components/dialogV1Original/dialog/composables/dialogHandle.d.ts +108 -0
  176. package/types/components/dialogV1Original/dialog/composables/types.d.ts +11 -0
  177. package/types/components/dialogV1Original/dialog/composables/utils.d.ts +23 -0
  178. package/types/components/dialogV1Original/dialog/dialogs/dialogs.vue.d.ts +13 -0
  179. package/types/components/dialogV1Original/dialog/page/types.d.ts +72 -0
  180. package/types/components/dialogV1Original/dialog/pageComponent/types.d.ts +18 -0
  181. package/types/components/dialogV1Original/dialog/stories/dialog_example/pages/utils.d.ts +7 -0
  182. package/types/components/dialogV1Original/dialog/types.d.ts +58 -0
  183. package/types/components/dialogV1Original/dialog.d.ts +6 -0
  184. package/types/components/dialogV1Original/lib/types.d.ts +44 -0
  185. package/types/components/dialogV1Original/lib/utils.globalEvents.d.ts +8 -0
  186. package/types/components/dialogV2/dialog/composables/asyncDialogHandle.d.ts +51 -0
  187. package/types/components/dialogV2/dialog/composables/dialogHandle.d.ts +108 -0
  188. package/types/components/dialogV2/dialog/composables/types.d.ts +11 -0
  189. package/types/components/dialogV2/dialog/composables/utils.d.ts +23 -0
  190. package/types/components/dialogV2/dialog/dialog.vue.d.ts +28 -0
  191. package/types/components/dialogV2/dialog/dialogs/dialogs.vue.d.ts +13 -0
  192. package/types/components/dialogV2/dialog/page/types.d.ts +72 -0
  193. package/types/components/dialogV2/dialog/pageComponent/types.d.ts +18 -0
  194. package/types/components/dialogV2/dialog/stories/dialog_example/pages/utils.d.ts +7 -0
  195. package/types/components/dialogV2/dialog/types.d.ts +58 -0
  196. package/types/components/dialogV2/dialog.d.ts +6 -0
  197. package/types/components/dialogV2/lib/types.d.ts +44 -0
  198. package/types/components/dialogV2/lib/utils.d.ts +15 -0
  199. package/types/components/dialogV2/lib/utils.globalEvents.d.ts +8 -0
  200. package/types/components/dialogV2/lib/worker.d.ts +62 -0
  201. package/{components → types/components}/forms/checkbox/checkbox.vue.d.ts +2 -2
  202. package/types/components/formsExt/policy/policy.vue.d.ts +8 -0
  203. package/{components → types/components}/formsExt/policy/types.d.ts +0 -4
  204. package/{components → types/components}/project/selectorRegion/dialog_selectorRegions/dialog_selectorRegions.vue.d.ts +1 -1
  205. package/{components → types/components}/project/selectorRegion/utils/utils.d.ts +1 -1
  206. package/types/dialogV1AndDialogV2/dialog.d.ts +2 -0
  207. package/types/dialogV1Original/dialog.d.ts +2 -0
  208. package/types/dialogV2/dialog.d.ts +2 -0
  209. package/types/for-delete/dark-positions.d.ts +1 -0
  210. package/types/for-delete/dark-th-positions.d.ts +1 -0
  211. package/types/for-delete/dark-th.d.ts +1 -0
  212. package/types/for-delete/dark.d.ts +1 -0
  213. package/types/for-delete/light-positions.d.ts +1 -0
  214. package/types/for-delete/light.d.ts +1 -0
  215. package/types/forms/helpers.d.ts +1 -0
  216. package/utils/check.amd.js +1 -1
  217. package/utils/check.amd.js.map +1 -1
  218. package/utils/check.js.map +1 -1
  219. package/utils/clipboard.amd.js +2 -2
  220. package/utils/clipboard.amd.js.map +1 -1
  221. package/utils/clipboard.js +1 -1
  222. package/utils/clipboard.js.map +1 -1
  223. package/utils/date.amd.js +1 -1
  224. package/utils/date.js +1 -1
  225. package/utils/device.amd.js +1 -1
  226. package/utils/device.js +1 -1
  227. package/utils/dom.amd.js +1 -1
  228. package/utils/dom.amd.js.map +1 -1
  229. package/utils/dom.js.map +1 -1
  230. package/utils/image.amd.js +2 -2
  231. package/utils/image.amd.js.map +1 -1
  232. package/utils/image.js +1 -1
  233. package/utils/image.js.map +1 -1
  234. package/utils/keyboard.amd.js +1 -1
  235. package/utils/keyboard.amd.js.map +1 -1
  236. package/utils/keyboard.js.map +1 -1
  237. package/utils/lodash.amd.js +1 -1
  238. package/utils/lodash.js +1 -1
  239. package/utils/number.amd.js +1 -1
  240. package/utils/number.amd.js.map +1 -1
  241. package/utils/number.js.map +1 -1
  242. package/utils/price.amd.js +1 -1
  243. package/utils/price.amd.js.map +1 -1
  244. package/utils/price.js +1 -1
  245. package/utils/price.js.map +1 -1
  246. package/utils/route.amd.js +1 -1
  247. package/utils/route.amd.js.map +1 -1
  248. package/utils/route.js.map +1 -1
  249. package/utils/scroll.amd.js +1 -1
  250. package/utils/scroll.amd.js.map +1 -1
  251. package/utils/scroll.js.map +1 -1
  252. package/utils/searchers.amd.js +1 -1
  253. package/utils/searchers.amd.js.map +1 -1
  254. package/utils/searchers.js +3 -3
  255. package/utils/searchers.js.map +1 -1
  256. package/utils/store.amd.js +1 -1
  257. package/utils/string.amd.js +1 -1
  258. package/utils/string.amd.js.map +1 -1
  259. package/utils/string.js +1 -1
  260. package/utils/string.js.map +1 -1
  261. package/utils/system.amd.js +1 -1
  262. package/utils/system.amd.js.map +1 -1
  263. package/utils/system.js.map +1 -1
  264. package/utils/url.amd.js +2 -2
  265. package/utils/url.amd.js.map +1 -1
  266. package/utils/url.js +1 -1
  267. package/utils/url.js.map +1 -1
  268. package/.chunks/core-SEtL6T0A.amd.js +0 -2
  269. package/.chunks/datepicker-Ba8QPoiv.amd.js +0 -2
  270. package/.chunks/dialog_selectorRegions-CiWJsA9r.amd.js +0 -2
  271. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-C-wpHg-4.amd.js +0 -2
  272. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-C-wpHg-4.amd.js.map +0 -1
  273. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-Deg17t8D.es.js +0 -322
  274. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-Deg17t8D.es.js.map +0 -1
  275. package/.chunks/forms-L6BGV_om.amd.js +0 -3
  276. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-M0ZTpQlF.amd.js +0 -2
  277. package/.chunks/menu.vue_vue_type_style_index_0_lang-DepdFfhE.amd.js +0 -2
  278. package/.chunks/page.vue_vue_type_script_setup_true_lang-CDgPLGAn.es.js +0 -143
  279. package/.chunks/page.vue_vue_type_script_setup_true_lang-CDgPLGAn.es.js.map +0 -1
  280. package/.chunks/page.vue_vue_type_script_setup_true_lang-ZB87yGeU.amd.js +0 -2
  281. package/.chunks/page.vue_vue_type_script_setup_true_lang-ZB87yGeU.amd.js.map +0 -1
  282. package/.chunks/popup-Kvk7IPNI.amd.js +0 -2
  283. package/.chunks/punycode.es6-C2yitnNb.amd.js +0 -2
  284. package/.chunks/punycode.es6-CNI-zL6U.es.js +0 -134
  285. package/.chunks/store-esTid5oI.amd.js +0 -2
  286. package/.chunks/utils-BKooGtxR.amd.js +0 -2
  287. package/.chunks/utils-BKooGtxR.amd.js.map +0 -1
  288. package/.chunks/utils-Bg7IV0KZ.amd.js +0 -2
  289. package/.chunks/utils-CyqZFHE6.es.js +0 -304
  290. package/.chunks/utils-CyqZFHE6.es.js.map +0 -1
  291. package/components/charts/miniChart/stories/dummy.d.ts +0 -13
  292. package/components/charts/miniCharts/stories/dummy.d.ts +0 -6
  293. package/components/dialog/dialog/stories/autoload.d.ts +0 -2
  294. package/components/forms/select/stories/exampleOptions.d.ts +0 -5
  295. package/components/formsExt/checkboxGroup/stories/example.d.ts +0 -15
  296. package/components/formsExt/menu/stories/items.d.ts +0 -3
  297. package/components/formsExt/policy/policy.vue.d.ts +0 -21
  298. package/components/formsExt/radioGroup/stories/example.d.ts +0 -20
  299. package/components/formsExt/selector2/stories/dummyAPIRequest.d.ts +0 -9
  300. package/components/project/selectorCompetitors/stories/items.d.ts +0 -3
  301. package/components/project/selectorRegion/stories/searchers.d.ts +0 -3
  302. package/{charts → types/charts}/charts.d.ts +0 -0
  303. package/{components → types/components}/charts/charts.d.ts +0 -0
  304. package/{components → types/components}/charts/miniChart/miniChart.vue.d.ts +0 -0
  305. package/{components → types/components}/charts/miniChart/types.d.ts +0 -0
  306. package/{components → types/components}/charts/miniChart/utils/consts.d.ts +0 -0
  307. package/{components → types/components}/charts/miniCharts/miniCharts.d.ts +0 -0
  308. package/{components → types/components}/charts/miniCharts/miniCharts.vue.d.ts +0 -0
  309. package/{components → types/components}/core/notice/item/item.vue.d.ts +0 -0
  310. package/{components → types/components}/core/notice/item/types.d.ts +0 -0
  311. package/{components → types/components}/core/notice/notice.vue.d.ts +0 -0
  312. package/{components → types/components}/core/notice/types.d.ts +0 -0
  313. package/{components → types/components}/core/notice/utils.d.ts +0 -0
  314. package/{components → types/components}/dialog/dialog/composables/asyncDialogHandle.d.ts +0 -0
  315. package/{components → types/components}/dialog/dialog/composables/dialogHandle.d.ts +0 -0
  316. package/{components → types/components}/dialog/dialog/composables/types.d.ts +0 -0
  317. package/{components → types/components}/dialog/dialog/composables/utils.d.ts +0 -0
  318. package/{components → types/components}/dialog/dialog/dialogs/dialogs.vue.d.ts +0 -0
  319. package/{components → types/components}/dialog/dialog/page/page.vue.d.ts +0 -0
  320. package/{components → types/components}/dialog/dialog/page/types.d.ts +0 -0
  321. package/{components → types/components}/dialog/dialog/pageComponent/pageComponent.vue.d.ts +0 -0
  322. package/{components → types/components}/dialog/dialog/pageComponent/types.d.ts +0 -0
  323. package/{components → types/components}/dialog/dialog/stories/dialog_example/pages/utils.d.ts +0 -0
  324. package/{components → types/components}/dialog/dialog/types.d.ts +0 -0
  325. package/{components → types/components}/dialog/dialog.d.ts +0 -0
  326. package/{components → types/components}/dialog/lib/types.d.ts +0 -0
  327. package/{components → types/components}/dialog/lib/utils.globalEvents.d.ts +0 -0
  328. package/{components/dialog → types/components/dialogV1Original}/dialog/dialog.vue.d.ts +1 -1
  329. package/{components/dialog → types/components/dialogV1Original}/lib/utils.d.ts +0 -0
  330. package/{components/dialog → types/components/dialogV1Original}/lib/worker.d.ts +0 -0
  331. package/{components → types/components}/extra/extra.d.ts +0 -0
  332. package/{components → types/components}/extra/rive/rive.vue.d.ts +0 -0
  333. package/{components → types/components}/extra/rive/types.d.ts +0 -0
  334. package/{components → types/components}/forms/avatar/avatar.vue.d.ts +1 -1
  335. /package/{components → types/components}/forms/avatar/types.d.ts +0 -0
  336. /package/{components → types/components}/forms/button/button.vue.d.ts +0 -0
  337. /package/{components → types/components}/forms/button/types.d.ts +0 -0
  338. /package/{components → types/components}/forms/caption/caption.vue.d.ts +0 -0
  339. /package/{components → types/components}/forms/caption/types.d.ts +0 -0
  340. /package/{components → types/components}/forms/checkbox/types.d.ts +0 -0
  341. /package/{components → types/components}/forms/controlLabel/controlLabel.vue.d.ts +0 -0
  342. /package/{components → types/components}/forms/controlLabel/types.d.ts +0 -0
  343. /package/{components → types/components}/forms/forms.d.ts +0 -0
  344. /package/{components → types/components}/forms/helpers.d.ts +0 -0
  345. /package/{components → types/components}/forms/hint/hint.vue.d.ts +0 -0
  346. /package/{components → types/components}/forms/hint/types.d.ts +0 -0
  347. /package/{components → types/components}/forms/input/input.vue.d.ts +0 -0
  348. /package/{components → types/components}/forms/input/types.d.ts +0 -0
  349. /package/{components → types/components}/forms/inputDate/datepicker.d.ts +0 -0
  350. /package/{components → types/components}/forms/inputDate/inputDate.vue.d.ts +0 -0
  351. /package/{components → types/components}/forms/inputDate/types.d.ts +0 -0
  352. /package/{components → types/components}/forms/inputRange/inputRange.vue.d.ts +0 -0
  353. /package/{components → types/components}/forms/inputRange/types.d.ts +0 -0
  354. /package/{components → types/components}/forms/loadbar/loadbar.vue.d.ts +0 -0
  355. /package/{components → types/components}/forms/preloader/preloader.vue.d.ts +0 -0
  356. /package/{components → types/components}/forms/preloader/types.d.ts +0 -0
  357. /package/{components → types/components}/forms/radio/radio.vue.d.ts +0 -0
  358. /package/{components → types/components}/forms/radio/types.d.ts +0 -0
  359. /package/{components → types/components}/forms/select/select.vue.d.ts +0 -0
  360. /package/{components → types/components}/forms/select/types.d.ts +0 -0
  361. /package/{components → types/components}/forms/switcher/switcher.vue.d.ts +0 -0
  362. /package/{components → types/components}/forms/switcher/types.d.ts +0 -0
  363. /package/{components → types/components}/forms/textarea/textarea.vue.d.ts +0 -0
  364. /package/{components → types/components}/forms/textarea/types.d.ts +0 -0
  365. /package/{components → types/components}/formsExt/checkboxGroup/checkboxGroup.vue.d.ts +0 -0
  366. /package/{components → types/components}/formsExt/checkboxGroup/types.d.ts +0 -0
  367. /package/{components → types/components}/formsExt/editArea/editArea.vue.d.ts +0 -0
  368. /package/{components → types/components}/formsExt/editArea/types.d.ts +0 -0
  369. /package/{components → types/components}/formsExt/editInput/editInput.vue.d.ts +0 -0
  370. /package/{components → types/components}/formsExt/editInput/types.d.ts +0 -0
  371. /package/{components → types/components}/formsExt/formsExt.d.ts +0 -0
  372. /package/{components → types/components}/formsExt/info/info.vue.d.ts +0 -0
  373. /package/{components → types/components}/formsExt/info/types.d.ts +0 -0
  374. /package/{components → types/components}/formsExt/menu/menu.vue.d.ts +0 -0
  375. /package/{components → types/components}/formsExt/menu/types.d.ts +0 -0
  376. /package/{components → types/components}/formsExt/radioGroup/radioGroup.vue.d.ts +0 -0
  377. /package/{components → types/components}/formsExt/radioGroup/types.d.ts +0 -0
  378. /package/{components → types/components}/formsExt/selector2/composables/useAPI.d.ts +0 -0
  379. /package/{components → types/components}/formsExt/selector2/composables/useMenu.d.ts +0 -0
  380. /package/{components → types/components}/formsExt/selector2/itemMulti.vue.d.ts +0 -0
  381. /package/{components → types/components}/formsExt/selector2/selector2.vue.d.ts +0 -0
  382. /package/{components → types/components}/formsExt/selector2/types.d.ts +0 -0
  383. /package/{components → types/components}/formsExt/selector2/utils.d.ts +0 -0
  384. /package/{components → types/components}/layout/islandRows/islandRows.vue.d.ts +0 -0
  385. /package/{components → types/components}/layout/islandRows/islandRowsRow/islandRowsRow.vue.d.ts +0 -0
  386. /package/{components → types/components}/layout/islandRows/islandRowsRow/types.d.ts +0 -0
  387. /package/{components → types/components}/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue.d.ts +0 -0
  388. /package/{components → types/components}/layout/islandRows/types.d.ts +0 -0
  389. /package/{components → types/components}/layout/layout.d.ts +0 -0
  390. /package/{components → types/components}/layout/rows/rows.vue.d.ts +0 -0
  391. /package/{components → types/components}/layout/rows/types.d.ts +0 -0
  392. /package/{components → types/components}/popup/alert/alert.vue.d.ts +0 -0
  393. /package/{components → types/components}/popup/alert/types.d.ts +0 -0
  394. /package/{components → types/components}/popup/confirm/confirm.vue.d.ts +0 -0
  395. /package/{components → types/components}/popup/confirm/types.d.ts +0 -0
  396. /package/{components → types/components}/popup/lib/popup.d.ts +0 -0
  397. /package/{components → types/components}/popup/lib/popup.globalEvents.d.ts +0 -0
  398. /package/{components → types/components}/popup/lib/worker.d.ts +0 -0
  399. /package/{components → types/components}/popup/lib/worker.globalEvents.d.ts +0 -0
  400. /package/{components → types/components}/popup/popup/listItem.vue.d.ts +0 -0
  401. /package/{components → types/components}/popup/popup/opener.vue.d.ts +0 -0
  402. /package/{components → types/components}/popup/popup/popup.vue.d.ts +0 -0
  403. /package/{components → types/components}/popup/popup/types.d.ts +0 -0
  404. /package/{components → types/components}/popup/popup/widgetInput.vue.d.ts +0 -0
  405. /package/{components → types/components}/popup/popup.d.ts +0 -0
  406. /package/{components → types/components}/popup/prompt/prompt.vue.d.ts +0 -0
  407. /package/{components → types/components}/popup/prompt/types.d.ts +0 -0
  408. /package/{components → types/components}/popup/worker.d.ts +0 -0
  409. /package/{components → types/components}/project/project.d.ts +0 -0
  410. /package/{components → types/components}/project/selectorCompetitors/composables.d.ts +0 -0
  411. /package/{components → types/components}/project/selectorCompetitors/selectorCompetitors.vue.d.ts +0 -0
  412. /package/{components → types/components}/project/selectorCompetitors/types.d.ts +0 -0
  413. /package/{components → types/components}/project/selectorRegion/composables/compare.d.ts +0 -0
  414. /package/{components → types/components}/project/selectorRegion/composables/selectRegion.d.ts +0 -0
  415. /package/{components → types/components}/project/selectorRegion/composables/selectSearcher.d.ts +0 -0
  416. /package/{components → types/components}/project/selectorRegion/composables/selectorRegion.d.ts +0 -0
  417. /package/{components → types/components}/project/selectorRegion/dialog_selectorRegions/types.d.ts +0 -0
  418. /package/{components → types/components}/project/selectorRegion/selectorRegion.vue.d.ts +0 -0
  419. /package/{components → types/components}/project/selectorRegion/types.d.ts +0 -0
  420. /package/{components → types/components}/project/selectorRegion/utils/consts.d.ts +0 -0
  421. /package/{components → types/components}/project/tagSelector/popupListItem/tagPopupListItem.vue.d.ts +0 -0
  422. /package/{components → types/components}/project/tagSelector/popupListItem/types.d.ts +0 -0
  423. /package/{components → types/components}/project/tagSelector/popupOpener/popupOpener.vue.d.ts +0 -0
  424. /package/{components → types/components}/project/tagSelector/popupOpener/types.d.ts +0 -0
  425. /package/{components → types/components}/project/tagSelector/tagIcon/tagIcon.vue.d.ts +0 -0
  426. /package/{components → types/components}/project/tagSelector/tagIcon/types.d.ts +0 -0
  427. /package/{components → types/components}/project/tagSelector/tagSelector.vue.d.ts +0 -0
  428. /package/{components → types/components}/project/tagSelector/tagsDefaults.d.ts +0 -0
  429. /package/{components → types/components}/project/tagSelector/types.d.ts +0 -0
  430. /package/{components → types/components}/project/tagSelector/utils/el.d.ts +0 -0
  431. /package/{components → types/components}/project/tagSelector/utils/utils.d.ts +0 -0
  432. /package/{components → types/components}/tabs/tabs/content.vue.d.ts +0 -0
  433. /package/{components → types/components}/tabs/tabs/tab.vue.d.ts +0 -0
  434. /package/{components → types/components}/tabs/tabs/tabs.vue.d.ts +0 -0
  435. /package/{components → types/components}/tabs/tabs/types.d.ts +0 -0
  436. /package/{components → types/components}/tabs/tabs.d.ts +0 -0
  437. /package/{components → types/components}/tabsView/tabsView/menu.vue.d.ts +0 -0
  438. /package/{components → types/components}/tabsView/tabsView/menuDelimeter.vue.d.ts +0 -0
  439. /package/{components → types/components}/tabsView/tabsView/menuItem.vue.d.ts +0 -0
  440. /package/{components → types/components}/tabsView/tabsView/menuTitle.vue.d.ts +0 -0
  441. /package/{components → types/components}/tabsView/tabsView/store.d.ts +0 -0
  442. /package/{components → types/components}/tabsView/tabsView/tabsView.vue.d.ts +0 -0
  443. /package/{components → types/components}/tabsView/tabsView/types.d.ts +0 -0
  444. /package/{components → types/components}/tabsView/tabsView/utils.d.ts +0 -0
  445. /package/{components → types/components}/tabsView/tabsView.d.ts +0 -0
  446. /package/{core → types/core}/app.d.ts +0 -0
  447. /package/{core → types/core}/core/core.d.ts +0 -0
  448. /package/{core → types/core}/core/events/resize.d.ts +0 -0
  449. /package/{core → types/core}/core/events.d.ts +0 -0
  450. /package/{core → types/core}/core/options.d.ts +0 -0
  451. /package/{core → types/core}/core/preloaders.d.ts +0 -0
  452. /package/{core → types/core}/core/state.d.ts +0 -0
  453. /package/{core → types/core}/directives/data.d.ts +0 -0
  454. /package/{core → types/core}/directives/focus.d.ts +0 -0
  455. /package/{core → types/core}/directives/preloader.d.ts +0 -0
  456. /package/{core → types/core}/directives/scrollIntoView.d.ts +0 -0
  457. /package/{core → types/core}/directives/scrollShadow.d.ts +0 -0
  458. /package/{core → types/core}/directives/sticky.d.ts +0 -0
  459. /package/{core → types/core}/directives/swimUp.d.ts +0 -0
  460. /package/{core → types/core}/directives/tooltip.d.ts +0 -0
  461. /package/{core → types/core}/plugins/core.d.ts +0 -0
  462. /package/{core → types/core}/plugins/i18n.d.ts +0 -0
  463. /package/{core → types/core}/plugins/piniaTPA.d.ts +0 -0
  464. /package/{core → types/core}/utils/check.d.ts +0 -0
  465. /package/{core → types/core}/utils/clipboard.d.ts +0 -0
  466. /package/{core → types/core}/utils/date.d.ts +0 -0
  467. /package/{core → types/core}/utils/device.d.ts +0 -0
  468. /package/{core → types/core}/utils/dom.d.ts +0 -0
  469. /package/{core → types/core}/utils/image.d.ts +0 -0
  470. /package/{core → types/core}/utils/keyboard.d.ts +0 -0
  471. /package/{core → types/core}/utils/lodash.d.ts +0 -0
  472. /package/{core → types/core}/utils/number.d.ts +0 -0
  473. /package/{core → types/core}/utils/price.d.ts +0 -0
  474. /package/{core → types/core}/utils/route.d.ts +0 -0
  475. /package/{core → types/core}/utils/scroll.d.ts +0 -0
  476. /package/{core → types/core}/utils/searchers.d.ts +0 -0
  477. /package/{core → types/core}/utils/store/localStorage.d.ts +0 -0
  478. /package/{core → types/core}/utils/store/plugin.d.ts +0 -0
  479. /package/{core → types/core}/utils/store/store.d.ts +0 -0
  480. /package/{core → types/core}/utils/store.d.ts +0 -0
  481. /package/{core → types/core}/utils/string.d.ts +0 -0
  482. /package/{core → types/core}/utils/system.d.ts +0 -0
  483. /package/{core → types/core}/utils/url.d.ts +0 -0
  484. /package/{dialog → types/dialog}/dialog.d.ts +0 -0
  485. /package/{extra → types/extra}/extra.d.ts +0 -0
  486. /package/{forms/helpers.d.ts → types/for-delete/core.d.ts} +0 -0
  487. /package/{forms → types/forms}/forms.d.ts +0 -0
  488. /package/{formsExt → types/formsExt}/formsExt.d.ts +0 -0
  489. /package/{layout → types/layout}/layout.d.ts +0 -0
  490. /package/{popup → types/popup}/popup.d.ts +0 -0
  491. /package/{popup → types/popup}/worker.d.ts +0 -0
  492. /package/{project → types/project}/project.d.ts +0 -0
  493. /package/{tabs → types/tabs}/tabs.d.ts +0 -0
  494. /package/{tabsView → types/tabsView}/tabsView.d.ts +0 -0
  495. /package/{utils → types/utils}/check.d.ts +0 -0
  496. /package/{utils → types/utils}/clipboard.d.ts +0 -0
  497. /package/{utils → types/utils}/date.d.ts +0 -0
  498. /package/{utils → types/utils}/device.d.ts +0 -0
  499. /package/{utils → types/utils}/dom.d.ts +0 -0
  500. /package/{utils → types/utils}/image.d.ts +0 -0
  501. /package/{utils → types/utils}/keyboard.d.ts +0 -0
  502. /package/{utils → types/utils}/lodash.d.ts +0 -0
  503. /package/{utils → types/utils}/number.d.ts +0 -0
  504. /package/{utils → types/utils}/price.d.ts +0 -0
  505. /package/{utils → types/utils}/route.d.ts +0 -0
  506. /package/{utils → types/utils}/scroll.d.ts +0 -0
  507. /package/{utils → types/utils}/searchers.d.ts +0 -0
  508. /package/{utils → types/utils}/store.d.ts +0 -0
  509. /package/{utils → types/utils}/string.d.ts +0 -0
  510. /package/{utils → types/utils}/system.d.ts +0 -0
  511. /package/{utils → types/utils}/url.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"project.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/tagIcon/tagIcon.vue","../../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\">\nimport { computed } from 'vue';\nimport type { Props } from './types';\nimport Core from '@/core/core/core';\nimport Button from '@/components/forms/button/button.vue';\nimport Popup from '@/components/popup/popup/popup.vue';\nimport ListItem from '@/components/popup/popup/listItem.vue';\nimport Menu from '@/components/formsExt/menu/menu.vue';\nimport { useI18n } from '@/core/plugins/i18n';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tshowSelectAllItem: true,\n});\nconst model = defineModel<Props['modelValue']>();\n\nconst selectAllItem = computed(() => {\n\tif (props.showSelectAllItem) {\n\t\treturn {\n\t\t\ticon: '',\n\t\t\ttitle: useI18n().Common.Select_all,\n\t\t\tvalue: 'all',\n\t\t\tcontent: '',\n\t\t};\n\t}\n});\n</script>\n\n<template>\n\t<div class=\"top-selectorCompetitors\">\n\t\t<Popup v-if=\"Core.state.isMobile\">\n\t\t\t<template #opener>\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"top-selectorCompetitors_opener\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\ticon2=\"\"\n\t\t\t\t>\n\t\t\t\t\t{{ items.find((item) => item.value === model?.[0])?.content }}\n\t\t\t\t</Button>\n\t\t\t</template>\n\n\t\t\t<template #contentList>\n\t\t\t\t<ListItem\n\t\t\t\t\tv-for=\"(item) in items\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'top-active': model?.includes(item.value)\n\t\t\t\t\t}\"\n\t\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t\t\t:title=\"item.title\"\n\t\t\t\t\t@click=\"() => model = [item.value]\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"top-ellipsis1\">\n\t\t\t\t\t\t{{ item.content }}\n\t\t\t\t\t</span>\n\t\t\t\t</ListItem>\n\t\t\t</template>\n\t\t</Popup>\n\n\t\t<Menu\n\t\t\tv-else\n\t\t\tv-model=\"model\"\n\t\t\t:items=\"items\"\n\t\t\t:isMultiple=\"true\"\n\t\t\tstyling=\"bar\"\n\t\t\t:canBeEmptyMultiple=\"false\"\n\t\t\t:selectAllItem=\"selectAllItem\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n.top-selectorCompetitors_opener.top-button {\n\twidth: 100%;\n}\n</style>\n","import type { Region, SearcherIndexed } from '../types';\nimport { useI18n } from '@/core/plugins/i18n';\n\n/**\n * Ключ ПС - для выбора нескольких ПС или регионов\n */\nexport const searhcerCompareKey = -1;\n\n/**\n * Ключ ПС или индекса Региона, используется для ПС или Региона, не настроенных в проекте\n *\n * Также, используется для API с возможностью не указывать регион, см. `props.autoRegion`\n */\nexport const dummyIndex = -2;\n\n/**\n * Регион - без региона\n */\nexport const globalRegionIndex = -1;\n\nexport const searchersNames = {\n\t0: 'Yandex',\n\t1: 'Google',\n\t4: 'YouTube',\n\t5: 'Bing',\n\t7: 'Seznam',\n\t8: 'AppStore',\n\t9: 'GoogleStore',\n\t20: 'Yandex.com',\n\t21: 'Yandex.com.tr',\n};\n\nexport const regionUndefined: Region = {\n\tkey: dummyIndex,\n\tname: '--',\n\tindex: dummyIndex,\n};\n\nexport const searcherUndefined: SearcherIndexed = {\n\tkey: dummyIndex,\n\tname: '--',\n\tregions: [regionUndefined],\n\tregionByIndex: new Map([[dummyIndex, regionUndefined]]),\n};\n\nconst regionAuto: Region = {\n\tkey: dummyIndex,\n\tname: 'Autoselect',\n\tindex: dummyIndex,\n};\n\nconst searcherAuto: SearcherIndexed = {\n\tkey: dummyIndex,\n\tname: 'Autoselect',\n\tregions: [regionAuto],\n\tregionByIndex: new Map([[dummyIndex, regionAuto]]),\n};\n\nconst regionGlobal: Region = {\n\tcountryCode: '00',\n\tdepth: 1,\n\tdevice: 0,\n\tkey: globalRegionIndex,\n\tindex: globalRegionIndex,\n\tlang: 'ru',\n\tname: 'Without region',\n};\n\nexport const getRegionAuto = () => {\n\tregionAuto.name = useI18n().Common.Autoselect!;\n\n\treturn regionAuto;\n};\n\nexport const getSearcherAuto = () => {\n\tgetRegionAuto();\n\n\tsearcherAuto.name = useI18n().Common.Autoselect!;\n\tconsole.log(searcherAuto);\n\n\treturn searcherAuto;\n};\n\nexport const getRegionGlobal = () => {\n\tregionGlobal.name = useI18n().Keywords.Without_region!;\n\n\treturn regionGlobal;\n};\n","import type { Region, Searcher, SearcherByKey, SearcherIndexed } from '../types';\nimport { dummyIndex, getRegionGlobal, getSearcherAuto, searchersNames, searcherUndefined } from './consts';\nimport { useAsyncTopDialog } from '@/components/dialog/dialog/composables/utils';\n\n/**\n * Генерация Map ПС с Map регионов из массива searchers\n * - ключ для ПС - searcherKey\n * - ключ для региона - regionIndex\n *\n * Если поисковиков в списке нет, в список будет добавлен searcherUndefined\n *\n * Если регионов в списке нет, в список будет добавлен regionUndefined\n *\n * @param forFrequency - получить массив для просмотра частоты (или ставок)\n * @param autoRegion - добавить элемент с ключем -2, который в API заменяется на нужный ключ в зависимости от контекста\n * @param searchers - поисковики с регионами проекта, см.: get/projects_2/projects, show_searchers_and_regions = 1\n */\nexport const genSearcherByKey = (\n\tforFrequency: boolean = false,\n\tautoRegion: boolean = false,\n\tsearchers: Searcher[] = [],\n) => {\n\tlet searcherByKey: SearcherByKey;\n\n\tif (forFrequency) {\n\t\tsearcherByKey = genSearchersMapVolume(searchers);\n\t} else {\n\t\tsearcherByKey = genSearchersMapCommon(searchers);\n\t}\n\n\tif (autoRegion) searcherByKey.set(dummyIndex, getSearcherAuto());\n\tif (!searcherByKey.size) searcherByKey.set(dummyIndex, searcherUndefined);\n\n\treturn searcherByKey;\n};\n\n/**\n * Список ПС с регионами\n *\n * @param searchers\n * @param onlyEnabledRegions\n * @param forceSearchersKeys - ключи ПС, которые нееобходимо вывести в любом случае\n * @param forFrequency - для частоты будут выводиться только Яндекс, Google и Mail\n */\nconst genSearchersMapCommon = (\n\tsearchers: Searcher[],\n\tonlyEnabledRegions: boolean = true,\n\tforceSearchersKeys: Searcher['key'][] = [],\n\tforFrequency: boolean = false,\n) => {\n\tconst searcherByKey: Map<Searcher['key'], SearcherIndexed> = new Map();\n\n\t// настроенные ПС\n\tsearchers.forEach((searcher) => {\n\t\tif (!searcher.enabled) return;\n\t\tif (forFrequency && typeof searcher.key === 'number' && searcher.key > 1) return;\n\n\t\tconst searcherI = { ...searcher } as SearcherIndexed;\n\t\tsearcherI.regionByIndex = new Map();\n\n\t\tif (searcher.regions) {\n\t\t\tsearcher.regions.forEach((region: Region) => {\n\t\t\t\tif (onlyEnabledRegions && !region.enabled) return;\n\n\t\t\t\tconst regionI = { ...region };\n\t\t\t\tsearcherI.regionByIndex.set(regionI.index, regionI);\n\t\t\t});\n\t\t}\n\n\t\tif (!searcherI.regionByIndex.size && !forceSearchersKeys.length) {\n\t\t\t// searcherI.regionByIndex.set(regionUndefined.index, regionUndefined);\n\t\t}\n\n\t\tif (\n\t\t\t// режим вывода ПС без регионов\n\t\t\t!searcher.regions ||\n\n\t\t\t// есть включенные регионы\n\t\t\tsearcherI.regionByIndex.size ||\n\n\t\t\t// запрошен вывод конкретных ПС\n\t\t\tforceSearchersKeys.length\n\t\t) {\n\t\t\tif (typeof searcherI.key === 'number') searcherByKey.set(searcherI.key, searcherI);\n\t\t}\n\t});\n\n\t// дополнительные ПС\n\tforceSearchersKeys.forEach((searcherKey) => {\n\t\tif (searcherByKey.has(searcherKey)) return;\n\n\t\tconst searcherI: SearcherIndexed = {\n\t\t\tkey: searcherKey,\n\t\t\tname: searchersNames[searcherKey],\n\t\t\tregions: [],\n\t\t\tregionByIndex: new Map(),\n\t\t};\n\n\t\tsearcherByKey.set(searcherI.key, searcherI);\n\t});\n\n\treturn searcherByKey;\n};\n\n/**\n * Список ПС с регионами для проверки частоты (Яндекс, Google, Mail если добавлен в проект)\n *\n * @param searchers\n */\nconst genSearchersMapVolume = (searchers: Searcher[]) => {\n\tconst serarcherByKey = genSearchersMapCommon(searchers, false, [0, 1], true);\n\n\t// в Mail нет регионов\n\tif (serarcherByKey.has(2)) {\n\t\tconst searcherMail = serarcherByKey.get(2);\n\t\tif (searcherMail) searcherMail.regionByIndex = new Map();\n\t}\n\n\t// добавление глобального региона\n\tserarcherByKey.forEach((searcher) => {\n\t\tif (!searcher.regionByIndex) return;\n\n\t\tconst region = { ...getRegionGlobal() };\n\t\tsearcher.regionByIndex.set(region.index, region);\n\t});\n\n\treturn serarcherByKey;\n};\n\n/**\n * Поиск региона по заданному критерию из списка поисковиков проекта\n *\n * @param forFrequency - поиск региона для просмотра частоты или ставок\n * @param searchRegion - объект с параметрами региона, который следует найти\n * @param searchers\n */\nexport const findRegion = (forFrequency: boolean, searchRegion: Partial<Region>, searchers: Searcher[] = []) => {\n\tconst searcherByKey = genSearcherByKey(forFrequency, false, searchers);\n\n\tlet findedRegion: Region | undefined;\n\n\t// поиск ПС\n\tsearcherByKey.forEach((searcher) => {\n\t\tif (searchRegion.searcher_key !== undefined && searchRegion.searcher_key != searcher.key) return;\n\t\tif (!searcher.regions) return;\n\n\t\t// поиск региона\n\t\tsearcher.regions.forEach((region) => {\n\t\t\tif (findedRegion) return;\n\n\t\t\tif (searchRegion.key !== undefined && searchRegion.key != region.key) return;\n\t\t\tif (searchRegion.index !== undefined && searchRegion.index != region.index) return;\n\n\t\t\tif (!forFrequency) {\n\t\t\t\tif (searchRegion.lang !== undefined && searchRegion.lang != region.lang) return;\n\t\t\t\tif (searchRegion.device !== undefined && searchRegion.device != region.device) return;\n\t\t\t}\n\n\t\t\tregion.searcher_key = searcher.key;\n\t\t\tfindedRegion = region;\n\n\t\t\treturn false;\n\t\t});\n\n\t\tif (findedRegion) return false;\n\t});\n\n\treturn findedRegion;\n};\n\n/**\n * Открыть диалоговое окно с выбором нескольких регионов\n *\n * @see import('../dialog_selectorRegions/types').Props\n */\nexport const dialogSelectorRegions = useAsyncTopDialog(() => {\n\treturn import('@/components/project/selectorRegion/dialog_selectorRegions/dialog_selectorRegions.vue');\n});\n","import { computed, type ComputedRef, ref } from 'vue';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, SearcherByKey } from '../types';\nimport type { Option, Options } from '@/components/forms/select/types';\nimport { dummyIndex, searhcerCompareKey } from '../utils/consts';\nimport { getSearcherGIcon } from '@/core/utils/searchers';\n\n/**\n * Создание и управление реактивными переменными для выбора ПС\n *\n * @param props - входные props компонента\n * @param mapSearchers - Map ПС (реактивная)\n */\nexport const useSelectSearcher = (\n\tprops: Props,\n\tmapSearchers: ComputedRef<SearcherByKey>,\n) => {\n\tconst i18n = useI18n();\n\n\t/**\n\t * Ключ выбранной поисковой системы\n\t */\n\tconst searcherKey = ref(mapSearchers.value.keys().next().value ?? dummyIndex);\n\n\t/**\n\t * Коллекция опций для выбора ПС\n\t */\n\tconst optionBySearcherKey = computed(() => {\n\t\tconst res: Options = new Map();\n\t\tmapSearchers.value.forEach((searcher) => {\n\t\t\tlet option: Option = {\n\t\t\t\tvalue: searcher.key,\n\t\t\t\ttitle: searcher.name,\n\t\t\t};\n\n\t\t\tif (props.addSearcherIcon) option.icon = getSearcherGIcon(searcher.key);\n\n\t\t\tres.set(searcher.key, option);\n\t\t});\n\n\t\t// добавить режим сравнения, если есть хотя бы одна ПС с одним регионом\n\t\tif (props.addCompare && !res.has(dummyIndex)) {\n\t\t\tconst dummyOption: Option = {\n\t\t\t\tvalue: '',\n\t\t\t\ttitle: '--------------------',\n\t\t\t\tdisabled: true,\n\t\t\t};\n\t\t\tres.set(dummyOption.value, dummyOption);\n\n\t\t\tconst compareOption: Option = {\n\t\t\t\tvalue: searhcerCompareKey,\n\t\t\t\ttitle: i18n.Common.Compare!,\n\t\t\t};\n\t\t\tres.set(compareOption.value, compareOption);\n\t\t}\n\n\t\treturn res;\n\t});\n\n\treturn {\n\t\tsearcherKey,\n\t\toptionBySearcherKey,\n\t};\n};\n","import { computed, type ComputedRef, ref, watch } from 'vue';\nimport { useI18n } from '@/core/plugins/i18n';\nimport { getDeviceGIcon, getLangLabel } from '@/core/utils/searchers';\nimport type { Option } from '@/components/forms/select/types';\nimport { dummyIndex } from '../utils/consts';\nimport type { Props, Region, SearcherIndexed } from '../types';\n\n/**\n * Создание и управление реактивными переменными для выбора региона\n *\n * @param props - входные props компонента\n * @param activeSearcherIndexed - объект активной поисковой системы (реактивная)\n */\nexport const useSelectRegion = (props: Props, activeSearcherIndexed: ComputedRef<SearcherIndexed>) => {\n\tconst i18n = useI18n();\n\n\t/**\n\t * Индекс выбранного региона\n\t */\n\tconst regionIndex = ref(dummyIndex);\n\n\tif (props.modelValue.length === 1) {\n\t\tregionIndex.value = props.modelValue[0];\n\t}\n\n\tif (regionIndex.value === dummyIndex) {\n\t\tif (props.forFrequency) {\n\t\t\t// в качетсве ключа используется region.key, а не region.index\n\t\t\tregionIndex.value = activeSearcherIndexed.value?.regionByIndex.values().next().value?.key ?? dummyIndex;\n\t\t} else {\n\t\t\tregionIndex.value = activeSearcherIndexed.value?.regionByIndex.keys().next().value ?? dummyIndex;\n\t\t}\n\t}\n\n\t/**\n\t * Коллекция опций для выбора региона\n\t */\n\tconst optionByRegionIndex = computed(() => {\n\t\tconst options = new Map<number, Option>();\n\n\t\tactiveSearcherIndexed.value.regionByIndex?.forEach((region) => {\n\t\t\tlet regionLabel = region.name;\n\n\t\t\t// на частоту в текущей версии устройство и язык не влияют\n\t\t\t// обратите внимание, в качетсве ключа используется region.key, а не region.index\n\t\t\tif (props.forFrequency) {\n\t\t\t\tconst option: Option = {\n\t\t\t\t\tvalue: region.key,\n\t\t\t\t\ttitle: regionLabel,\n\t\t\t\t};\n\t\t\t\tif (!options.has(region.key)) options.set(region.key, option);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (region.device) {\n\t\t\t\tregionLabel += ' (' + i18n.Common['Device_' + region.device] + ')';\n\t\t\t}\n\n\t\t\tconst langLabel = getLangLabel(activeSearcherIndexed.value.key || 0, region.lang ?? '');\n\t\t\tif (langLabel) regionLabel += ' / ' + langLabel;\n\n\t\t\tconst option: Option = {\n\t\t\t\tvalue: region.index,\n\t\t\t\ttitle: regionLabel,\n\t\t\t\ticon: region.device ? getDeviceGIcon(region.device) : undefined,\n\t\t\t};\n\n\t\t\toptions.set(region.index, option);\n\t\t});\n\n\t\treturn options;\n\t});\n\n\t/**\n\t * Выбор максимально похожего региона в новой коллекции регионов\n\t */\n\twatch(optionByRegionIndex, (optionByRegionIndex, oldOptionByRegionIndex) => {\n\t\tif (props.onlySearcher || regionIndex.value !== undefined && optionByRegionIndex.get(regionIndex.value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet newRegionIndex = optionByRegionIndex.keys().next().value as Region['index'];\n\t\tif (regionIndex.value === dummyIndex || newRegionIndex === dummyIndex) {\n\t\t\tregionIndex.value = newRegionIndex;\n\n\t\t\treturn;\n\t\t}\n\n\t\tlet regionName = (oldOptionByRegionIndex?.get(regionIndex.value) as Option)?.title || '';\n\t\tlet regionMatchLevel = -1;\n\t\tfor (const [index, option] of optionByRegionIndex.entries()) {\n\t\t\tconst title = (option as Option).title;\n\n\t\t\tif (typeof title !== 'string' || typeof index === 'string') {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// полное совпадение\n\t\t\tif (title === regionName) {\n\t\t\t\tnewRegionIndex = index;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst regexpDevice = new RegExp(` \\\\((${i18n.Common['Device_1']}|${i18n.Common['Device_2']})\\\\)`);\n\t\t\tlet regionNameCompare = regionName;\n\t\t\tlet regionMatchLevelI = 3;\n\n\t\t\t// без устройства\n\t\t\tif (title.indexOf(regionNameCompare) === -1) {\n\t\t\t\tregionNameCompare = regionName.replace(/^[^a-zа-я]/i, '').replace(regexpDevice, '');\n\n\t\t\t\tregionMatchLevelI--;\n\t\t\t}\n\n\t\t\t// без языка\n\t\t\tif (title.indexOf(regionNameCompare) === -1) {\n\t\t\t\tregionNameCompare = regionName.replace(/ \\/.*/, '');\n\n\t\t\t\tregionMatchLevelI--;\n\t\t\t}\n\n\t\t\t// без устройства и без языка\n\t\t\tif (title.indexOf(regionNameCompare) === -1) {\n\t\t\t\tregionNameCompare = regionName.replace(/ \\/.*/, '');\n\t\t\t\tregionNameCompare = regionNameCompare.replace(/^[^a-zа-я]/i, '').replace(regexpDevice, '');\n\n\t\t\t\tregionMatchLevelI--;\n\t\t\t}\n\n\t\t\tif (title.indexOf(regionNameCompare) === -1) continue;\n\t\t\tif (regionMatchLevelI <= regionMatchLevel) continue;\n\n\t\t\tregionMatchLevel = regionMatchLevelI;\n\t\t\tnewRegionIndex = index;\n\t\t}\n\n\t\tregionIndex.value = newRegionIndex;\n\t});\n\n\treturn {\n\t\tregionIndex,\n\t\toptionByRegionIndex,\n\t};\n};\n","import { type ComputedRef, ref, watch } from 'vue';\nimport type { Props, SearcherByKey } from '../types';\n\n/**\n * Создание и управление реактивными переменными для сравнения\n *\n * @param props - входные props компонента\n * @param searcherByKey - Map ПС (реактивная)\n * @param allRegionsIndexes - Все доступные индексы регионов (реактивная)\n */\nexport const useCompare = (props: Props, searcherByKey: ComputedRef<SearcherByKey>, allRegionsIndexes: ComputedRef<Set<number>>) => {\n\t/**\n\t * Индексы регионов/ПС в сравнение\n\t */\n\tconst regionsIndexes = ref<number[]>([]);\n\n\t/**\n\t * Загрузка индексов регионов для сравнения\n\t *\n\t * Если в modelValue передано несколько регионов, они будут установлены как выбранные для сравнения\n\t */\n\tconst compareLoad = () => {\n\t\tif (props.onlySearcher && searcherByKey.value) {\n\t\t\tregionsIndexes.value = Array.from(searcherByKey.value.keys());\n\n\t\t\treturn;\n\t\t}\n\n\t\tlet regionsIndexesSaved: Props['modelValue'] = [];\n\n\t\tif (props.modelValue.length > 1) {\n\t\t\tregionsIndexesSaved = [...props.modelValue];\n\t\t} else {\n\t\t\ttry {\n\t\t\t\t// загрузить индексы регионов, если они были сохранены\n\t\t\t\tregionsIndexesSaved = JSON.parse(\n\t\t\t\t\tlocalStorage.getItem('ui:project:regionSelector' + props.projectId + ':regionsIndexes') as string,\n\t\t\t\t) ?? [];\n\t\t\t} catch (e) {\n\n\t\t\t}\n\t\t}\n\n\t\t// убрать из сравнения регионы, которых нет в props.searchers\n\t\tif (regionsIndexesSaved.length) {\n\t\t\tregionsIndexesSaved = regionsIndexesSaved.filter((regionIndex) => {\n\t\t\t\treturn allRegionsIndexes.value.has(regionIndex);\n\t\t\t});\n\t\t}\n\n\t\t// если не сохранено ни одного региона, выбрать все регионы проекта\n\t\tif (!regionsIndexesSaved.length) {\n\t\t\tregionsIndexesSaved = Array.from(allRegionsIndexes.value);\n\t\t}\n\n\t\tregionsIndexes.value = [...regionsIndexesSaved];\n\t};\n\n\t/**\n\t * Сохранение выбранных регионов\n\t */\n\tconst compareSave = () => {\n\t\tif (regionsIndexes.value.length) {\n\t\t\tlocalStorage.setItem('ui:project:regionSelector:' + props.projectId + ':regionsIndexes', JSON.stringify(regionsIndexes.value));\n\t\t} else {\n\t\t\tlocalStorage.removeItem('ui:project:regionSelector:' + props.projectId + ':regionsIndexes');\n\t\t}\n\t};\n\n\twatch(regionsIndexes, () => {\n\t\tcompareSave();\n\t});\n\n\tif (props.addCompare) {\n\t\t// if (props.compareRegionsIndexes?.length) {\n\t\t// \tcompareRegionsIndexes.value = [...props.compareRegionsIndexes];\n\t\t// } else {\n\t\t// \tcompareLoad();\n\t\t// }\n\n\t\tcompareLoad();\n\t}\n\n\treturn {\n\t\tregionsIndexes,\n\t};\n};\n","import { computed, watch } from 'vue';\nimport { findRegion, genSearcherByKey } from '../utils/utils';\nimport { dummyIndex, globalRegionIndex, searcherUndefined, searhcerCompareKey } from '../utils/consts';\nimport type { Props, Region, SearcherIndexed } from '../types';\nimport { useSelectSearcher } from './selectSearcher';\nimport { useSelectRegion } from './selectRegion';\nimport { useCompare } from './compare';\n\n/**\n * Создание и управления рективными переменными компонента\n *\n * @param props - входные props компонента\n */\nexport const useSelectorRegion = (props: Props) => {\n\tconst searcherByKey = computed(() => {\n\t\treturn genSearcherByKey(props.forFrequency, props.autoRegion, props.searchers);\n\t});\n\n\tconst activeSearcherIndexed = computed(() => {\n\t\treturn searcherByKey.value.get(selectSearcher.searcherKey.value) || searcherUndefined;\n\t});\n\n\t/**\n\t * Все индексы регионов из searcherByKey\n\t *\n\t * Активность регионов определяется в searcherByKey\n\t */\n\tconst allRegionsIndexes = computed(() => {\n\t\tconst regionsIndexes = new Set<number>();\n\n\t\tsearcherByKey.value.forEach((searcher) => {\n\t\t\tsearcher.regionByIndex.forEach((region) => {\n\t\t\t\tif (region.index === globalRegionIndex) return;\n\t\t\t\tif (region.index === dummyIndex) return;\n\n\t\t\t\tregionsIndexes.add(region.index);\n\t\t\t});\n\t\t});\n\n\t\treturn regionsIndexes;\n\t});\n\n\tconst selectSearcher = useSelectSearcher(props, searcherByKey);\n\tconst selectRegion = useSelectRegion(props, activeSearcherIndexed);\n\tconst compare = useCompare(props, searcherByKey, allRegionsIndexes);\n\n\t// контроль за внешним изменением списка ПС\n\twatch(searcherByKey, () => {\n\t\t// возможные значения для сравнения регионов/пс\n\t\tif (props.onlySearcher) {\n\t\t\tcompare.regionsIndexes.value = Array.from(searcherByKey.value.keys());\n\t\t} else {\n\t\t\tcompare.regionsIndexes.value = compare.regionsIndexes.value.filter(regionIndex => {\n\t\t\t\treturn allRegionsIndexes.value.has(regionIndex);\n\t\t\t});\n\t\t}\n\n\t\tif (selectSearcher.searcherKey.value === searhcerCompareKey) return;\n\n\t\tlet newSearcherKey = searcherByKey.value.keys().next().value;\n\n\t\tsearcherByKey.value.forEach((searcher) => {\n\t\t\t// определить выбранную ПС\n\t\t\tif (props.onlySearcher && searcher.key === selectSearcher.searcherKey.value) {\n\t\t\t\tnewSearcherKey = selectSearcher.searcherKey.value;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tselectRegion.regionIndex.value &&\n\t\t\t\tsearcher.regionByIndex?.has(selectRegion.regionIndex.value)\n\t\t\t) {\n\t\t\t\tnewSearcherKey = searcher.key;\n\t\t\t}\n\n\t\t\t// выбрать первую ПС с выбранным регионом\n\t\t\tif (!props.onlySearcher) {\n\t\t\t\tlet regionsNewSearcher: SearcherIndexed['regionByIndex'] | undefined;\n\n\t\t\t\tif (newSearcherKey !== undefined) {\n\t\t\t\t\tregionsNewSearcher = searcherByKey.value.get(newSearcherKey)?.regionByIndex;\n\t\t\t\t}\n\n\t\t\t\tconst regionsCurrentSearcher = searcherByKey.value.get(searcher.key)?.regionByIndex;\n\t\t\t\tif (\n\t\t\t\t\tregionsNewSearcher?.has(dummyIndex) &&\n\t\t\t\t\t!regionsCurrentSearcher?.has(dummyIndex)\n\t\t\t\t) {\n\t\t\t\t\tnewSearcherKey = searcher.key;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// if (props.addCompare && !selectSearcher.optionBySearcherKey.value.has(dummyIndex)) {\n\t\t// \tif (!selectRegion.regionIndex.value && compare.regionsIndexes.value?.length) newSearcherKey = searhcerCompareKey;\n\t\t// }\n\n\t\t// if (props.onlySearcher && selectRegion.regionIndex.value !== dummyIndex) newSearcherKey = selectRegion.regionIndex.value;\n\n\t\tif (newSearcherKey !== undefined) {\n\t\t\tselectSearcher.searcherKey.value = newSearcherKey;\n\t\t}\n\n\t\tif (\n\t\t\tselectRegion.regionIndex.value !== undefined &&\n\t\t\t!(activeSearcherIndexed.value?.regionByIndex)?.has(selectRegion.regionIndex.value)\n\t\t) {\n\t\t\tselectRegion.regionIndex.value = activeSearcherIndexed.value?.regions?.keys().next().value as number;\n\t\t}\n\t}, { immediate: true });\n\n\tconst getSearcherKey = () => {\n\t\tif (selectSearcher.searcherKey.value === searhcerCompareKey || selectSearcher.searcherKey.value === dummyIndex) return;\n\n\t\treturn selectSearcher.searcherKey.value;\n\t};\n\n\tconst getRegionIndex = () => {\n\t\tif (props.onlySearcher) return;\n\n\t\tif (selectRegion.regionIndex.value === dummyIndex) return;\n\n\t\tlet res: Region['index'] | undefined = selectRegion.regionIndex.value;\n\n\t\t// в качестве ключа используется region.key\n\t\tif (props.forFrequency) {\n\t\t\tconst regionKey = selectRegion.regionIndex.value;\n\t\t\tconst region = findRegion(props.forFrequency, { searcher_key: getSearcherKey(), key: regionKey } as Region, props.searchers);\n\n\t\t\tres = region?.index;\n\t\t}\n\n\t\treturn res;\n\t};\n\n\t/**\n\t * Получить выбранную ПС\n\t */\n\tconst getSearcher = () => {\n\t\tconst searcherKey = getSearcherKey();\n\t\tif (searcherKey === undefined) return;\n\n\t\treturn searcherByKey.value.get(searcherKey);\n\t};\n\n\t/**\n\t * Получить выбранный регион\n\t */\n\tconst getRegion = () => {\n\t\tconst regionIndex = getRegionIndex();\n\t\tif (regionIndex === undefined) return;\n\n\t\treturn getSearcher()?.regionByIndex?.get(regionIndex);\n\t};\n\n\treturn {\n\t\tselectSearcher,\n\t\tselectRegion,\n\t\tcompare,\n\n\t\tsearcherByKey,\n\t\tallRegionsIndexes,\n\n\t\tgetSearcher,\n\t\tgetRegion,\n\t};\n};\n","<script setup lang=\"ts\">\nimport { watch } from 'vue';\nimport type { Props, Region } from './types';\nimport Select from '@/components/forms/select/select.vue';\nimport Button from '@/components/forms/button/button.vue';\nimport { useSelectorRegion } from './composables/selectorRegion';\nimport { dummyIndex, globalRegionIndex, searhcerCompareKey } from './utils/consts';\nimport { dialogSelectorRegions } from '@/components/project/selectorRegion/utils/utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsearchers: () => [],\n\t// compareRegionsIndexes: () => [],\n\taddSearcherIcon: true,\n\taddRegionIcon: true,\n\taddChanger: true,\n});\n\nconst model = defineModel<Props['modelValue']>({ required: true });\nconst modelSingle = defineModel<Props['modelValueSingle']>('modelValueSingle');\n\nconst {\n\tselectSearcher,\n\tselectRegion,\n\tcompare,\n\n\tsearcherByKey,\n\tallRegionsIndexes,\n\n\tgetSearcher,\n\tgetRegion,\n} = useSelectorRegion(props);\n\nconst onClickCompare = () => {\n\tconst regions: Region[] = [];\n\n\tsearcherByKey.value.forEach((searcher) => {\n\t\tif (!searcher.enabled) return;\n\n\t\tsearcher.regions.forEach((region) => {\n\t\t\tif (!region.enabled) return;\n\n\t\t\tregions.push(region);\n\t\t});\n\t});\n\n\tdialogSelectorRegions.open('selectorRegions', {\n\t\tregions,\n\t\tregionsIndexes: compare.regionsIndexes.value,\n\t\t'@update:regionsIndexes': (regionsIndexes: number[]) => compare.regionsIndexes.value = regionsIndexes,\n\t});\n};\n\nwatch([selectRegion.regionIndex, selectSearcher.searcherKey, compare.regionsIndexes], () => {\n\tif (selectSearcher.searcherKey.value === searhcerCompareKey && compare.regionsIndexes.value.length) {\n\t\tif (JSON.stringify(model.value) === JSON.stringify(compare.regionsIndexes.value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tmodel.value = [...compare.regionsIndexes.value];\n\t} else {\n\t\tif (props.onlySearcher) {\n\t\t\tmodel.value = [selectSearcher.searcherKey.value];\n\n\t\t\tif (selectSearcher.searcherKey.value === dummyIndex && !props.autoRegion) model.value.length = 0;\n\t\t} else {\n\t\t\tmodel.value = [selectRegion.regionIndex.value];\n\n\t\t\t// не добавлять несуществующий регион в результаты\n\t\t\tif (selectRegion.regionIndex.value === dummyIndex && !props.autoRegion) model.value.length = 0;\n\t\t}\n\t}\n\n\t// регионов нет\n\tif (!props.onlySearcher && !allRegionsIndexes.value.size) {\n\t\tselectSearcher.searcherKey.value = dummyIndex;\n\t}\n});\n\nif (modelSingle.value) {\n\twatch(modelSingle, () => {\n\t\tif (modelSingle.value) {\n\t\t\tmodel.value = [modelSingle.value];\n\t\t}\n\t}, { immediate: true });\n}\n\nwatch(model, () => {\n\tif (model.value[0]) {\n\t\tmodelSingle.value = model.value[0];\n\t}\n\n\t// проверка входных данных v-model на корректность\n\tif (props.onlySearcher) {\n\t\tif (\n\t\t\t!model.value.length ||\n\t\t\tmodel.value.length === 1 && !searcherByKey.value.has(model.value[0]) ||\n\t\t\tmodel.value.length === 1 && model.value[0] === dummyIndex && !props.autoRegion\n\t\t) {\n\t\t\tlet defaultKey: number | undefined = searcherByKey.value.keys().next().value;\n\n\t\t\t// запретить устанавливать несуществующий регион\n\t\t\tif (defaultKey === dummyIndex && !props.autoRegion) {\n\t\t\t\tdefaultKey = undefined;\n\n\t\t\t\tmodelSingle.value = dummyIndex;\n\t\t\t}\n\n\t\t\tif (defaultKey !== undefined) {\n\t\t\t\tmodel.value = [defaultKey];\n\t\t\t}else{\n\t\t\t\tmodel.value.length = 0;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tmodel.value.length > 1 &&\n\t\t\tJSON.stringify(model.value) !== JSON.stringify(compare.regionsIndexes.value)\n\t\t) {\n\t\t\tmodel.value = [...compare.regionsIndexes.value];\n\n\t\t\treturn;\n\t\t}\n\t} else {\n\t\tlet newModel = [...new Set(model.value)];\n\n\t\tlet defaultIndex = searcherByKey.value.values().next().value?.regionByIndex?.keys().next().value;\n\t\tif (props.forFrequency) {\n\t\t\tdefaultIndex = searcherByKey.value.values().next().value?.regionByIndex?.values().next().value?.key;\n\t\t}\n\n\t\t// запретить устанавливать несуществующий регион\n\t\tif (defaultIndex === dummyIndex && !props.autoRegion) {\n\t\t\tdefaultIndex = undefined;\n\n\t\t\tmodelSingle.value = dummyIndex;\n\t\t}\n\n\t\tif (!newModel.length) {\n\t\t\tif (defaultIndex !== undefined) {\n\t\t\t\tnewModel.push(defaultIndex);\n\t\t\t}\n\t\t} else if (newModel.length === 1) {\n\t\t\tlet all = allRegionsIndexes.value;\n\n\t\t\tif (props.forFrequency) {\n\t\t\t\tall = new Set();\n\t\t\t\tsearcherByKey.value.forEach((searcher) => {\n\t\t\t\t\tsearcher.regionByIndex.forEach((region) => {\n\t\t\t\t\t\tif (region.index === globalRegionIndex) return;\n\t\t\t\t\t\tif (region.index === dummyIndex) return;\n\n\t\t\t\t\t\tall.add(region.key);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// убрано, так как dummyIndex запрещено выбирать в model\n\t\t\t// if (!all.has(newModel[0]) && newModel[0] !== dummyIndex) {\n\t\t\tif (!all.has(newModel[0])) {\n\t\t\t\tnewModel = [];\n\t\t\t\tif (defaultIndex !== undefined) {\n\t\t\t\t\tnewModel.push(defaultIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tnewModel = newModel.filter(index => allRegionsIndexes.value.has(index));\n\t\t\tif (!newModel.length && defaultIndex !== undefined) {\n\t\t\t\tnewModel.push(defaultIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (JSON.stringify(model.value) !== JSON.stringify(newModel)) {\n\t\t\tmodel.value = newModel;\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// входные данные v-model совпадают с внутренними значениями\n\tif (\n\t\tmodel.value.length === 1 &&\n\t\tmodel.value[0] === (props.onlySearcher ? selectSearcher.searcherKey.value : selectRegion.regionIndex.value)\n\t) {\n\t\treturn;\n\t}\n\n\t// if (\n\t// \tmodel.value.length > 1 &&\n\t// \tselectorSearcher.searcherKey.value === searhcerCompareKey &&\n\t// \tJSON.stringify(model.value) === JSON.stringify(selectorCompare.regionsIndexes.value)\n\t// ) {\n\t// \treturn;\n\t// }\n\n\t// обновление regionIndex, searcherKey, selectorCompare.regionsIndexes\n\tif (props.onlySearcher) {\n\t\t// if (!model.value.length) {\n\t\t// \tselectorSearcher.searcherKey.value = dummyIndex;\n\t\t//\n\t\t// \treturn;\n\t\t// }\n\n\t\tif (model.value.length === 1) {\n\t\t\tselectSearcher.searcherKey.value = model.value[0];\n\n\t\t\treturn;\n\t\t}\n\n\t\tselectSearcher.searcherKey.value = searhcerCompareKey;\n\n\t\treturn;\n\t} else {\n\t\tif (!model.value.length) {\n\t\t\t// selectSearcher.searcherKey.value = dummyIndex;\n\t\t\t// selectRegion.regionIndex.value = dummyIndex;\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (model.value.length === 1 && selectSearcher.searcherKey.value !== searhcerCompareKey) {\n\t\t\tselectRegion.regionIndex.value = model.value[0];\n\n\t\t\tlet newSearherKey: number | undefined;\n\t\t\tfor (const searcher of searcherByKey.value.values()) {\n\t\t\t\tfor (const region of searcher.regionByIndex.values()) {\n\t\t\t\t\tconst currentRegionIndex = props.forFrequency ? region.key : region.index;\n\t\t\t\t\tif (currentRegionIndex === selectRegion.regionIndex.value) {\n\t\t\t\t\t\tnewSearherKey = searcher.key;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (newSearherKey !== undefined) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newSearherKey !== undefined) {\n\t\t\t\tselectSearcher.searcherKey.value = newSearherKey;\n\t\t\t}\n\t\t} else {\n\t\t\tselectSearcher.searcherKey.value = searhcerCompareKey;\n\t\t\tcompare.regionsIndexes.value = [...model.value];\n\t\t}\n\t}\n}, { immediate: true });\n\ndefineExpose({\n\tgetSearcher,\n\tgetRegion,\n});\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-selectorRegion': true,\n\t\t\t'top-selectorRegion-onlySearcher': onlySearcher,\n\t\t}\"\n\t>\n\t\t<Select\n\t\t\t:options=\"selectSearcher.optionBySearcherKey.value\"\n\t\t\tv-model=\"selectSearcher.searcherKey.value\"\n\t\t\tname=\"searcher_key\"\n\t\t\t:addChanger=\"addChanger\"\n\t\t/>\n\n\t\t<Select\n\t\t\tv-if=\"!onlySearcher && selectSearcher.searcherKey.value !== searhcerCompareKey\"\n\t\t\tclass=\"top-select-region\"\n\t\t\t:options=\"selectRegion.optionByRegionIndex.value\"\n\t\t\tv-model=\"selectRegion.regionIndex.value\"\n\t\t\t:name=\"forFrequency ? 'region_key' : 'region_index'\"\n\t\t\t:addChanger=\"addChanger\"\n\t\t\t:data-top-icon=\"addRegionIcon ? '' : undefined\"\n\t\t/>\n\n\t\t<Button\n\t\t\tv-if=\"addCompare && !onlySearcher && selectSearcher.searcherKey.value === searhcerCompareKey\"\n\t\t\tname=\"compare\"\n\t\t\t@click=\"onClickCompare\"\n\t\t\t:data-count-compare-regions-indexes=\"compare.regionsIndexes.value.length\"\n\t\t>\n\t\t\t{{ $i18n.Common.Selected_regions }}\n\t\t</Button>\n\t</div>\n</template>\n\n<style>\n@import \"./styles/searcherColors.css\";\n\n.top-selectorRegion {\n\twidth: 340px;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n}\n\n.top-selectorRegion > .top-select {\n\tflex-grow: 1;\n}\n\n.top-selectorRegion > .top-select:focus-within {\n\tz-index: 4;\n}\n\n.top-selectorRegion > .top-select > .top-select_select:hover,\n.top-selectorRegion > .top-select > .top-select_select.top-error {\n\tz-index: 1;\n}\n\n.top-selectorRegion > .top-select-searcher_key {\n\twidth: 140px;\n\tmax-width: 160px;\n\tmargin-right: -1px;\n}\n\n.top-selectorRegion > .top-select-region > select {\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.top-selectorRegion > .top-select-region {\n\t--top-icon-size: 20px;\n\t--top-icon-color: var(--color-text-primary);\n\n\t--top-icon2-size: 20px;\n\t--top-icon2-color: var(--color-text-primary);\n}\n\n.top-selectorRegion > .top-select-region[data-top-icon][data-top-icon2] {\n\t--top-icon2-size: 16px;\n}\n\n.top-selectorRegion > .top-select-region[data-top-icon][data-top-icon2]:after {\n\ttext-indent: -4px;\n}\n\n.top-selectorRegion > [name=\"compare\"] {\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n\tflex-grow: 1;\n}\n\n.top-selectorRegion > [name=\"compare\"]:after {\n\tcontent: \"(\" attr(data-count-compare-regions-indexes) \")\";\n\tmargin: 0 0 0 6px;\n}\n\n.top-selectorRegion:not(.top-selectorRegion-onlySearcher) > .top-select-searcher_key > select {\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n\tmargin-right: 0;\n}\n\n.top-selectorRegion:not(.top-selectorRegion-onlySearcher) > .top-select-searcher_key[data-value=\"-1\"] > select {\n\tborder-right: none;\n}\n\n.top-selectorRegion-onlySearcher {\n\twidth: 140px;\n}\n</style>\n","import type { Tag } from './types';\n\nexport default [\n\t{\n\t\tid: '1',\n\t\tname: 'Without Tag',\n\t\tcolor_id: '1',\n\t},\n\t{\n\t\tid: '2',\n\t\tname: 'Red',\n\t\tcolor_id: '2',\n\t},\n\t{\n\t\tid: '3',\n\t\tname: 'Orange',\n\t\tcolor_id: '3',\n\t},\n\t{\n\t\tid: '4',\n\t\tname: 'Yellow',\n\t\tcolor_id: '4',\n\t},\n\t{\n\t\tid: '5',\n\t\tname: 'Blue',\n\t\tcolor_id: '5',\n\t},\n\t{\n\t\tid: '6',\n\t\tname: 'Purple',\n\t\tcolor_id: '6',\n\t},\n\t{\n\t\tid: '7',\n\t\tname: 'Green',\n\t\tcolor_id: '7',\n\t},\n\t{\n\t\tid: '8',\n\t\tname: 'Magenta',\n\t\tcolor_id: '8',\n\t},\n\t{\n\t\tid: '9',\n\t\tname: 'Dark blue',\n\t\tcolor_id: '9',\n\t},\n\t{\n\t\tid: '10',\n\t\tname: 'Turquoise',\n\t\tcolor_id: '10',\n\t},\n] as Tag[];\n","import type { Props as TagSelectorOpenerProps } from '../popupOpener/types';\nimport type { Tag, TagIdExclude } from '../types';\n\n/**\n * Полуичить значение исключения тега tagId\n */\nexport const genTagIdExcluded = (tagId: Tag['id']): TagIdExclude => {\n\treturn '-' + tagId as TagIdExclude;\n};\n\n/**\n * Вернуть чистый tagId без exclude флага\n */\nexport const genTagIdClear = (tagId: Tag['id'] | TagIdExclude) => {\n\tif (tagId[0] === '-') return tagId.substring(1) as Tag['id'];\n\n\treturn tagId as Tag['id'];\n};\n\n/**\n * Получить инфомрацию о теге по его id\n */\nexport const getTagById = (tagId: Tag['id'] | TagIdExclude, tags: TagSelectorOpenerProps['tags']) => {\n\ttagId = genTagIdClear(tagId);\n\n\tconst tag = tags.find(tag => tag.id === tagId);\n\tif (!tag) return;\n\n\treturn tag;\n};\n","<script setup lang=\"ts\">\nimport type { Props } from './types';\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tagSelector_tagIcon': true,\n\t\t\t'top-tagSelector-active': !!state,\n\t\t\t'top-tagSelector-excluded': state === 'excluded',\n\t\t}\"\n\t\t:data-tag_id=\"id\"\n\t\t:data-tag_color_id=\"colorId\"\n\t\t:title=\"name\"\n\t></div>\n</template>\n\n<style>\n[data-tag_id] { display: inline-flex; gap: var(--top-gap-2); align-items: center; }\n\n[data-tag_id=\"\"] { border-color: #bdc3c7 !important; color: #55555F !important; }\n[data-tag_color_id=\"1\"] { border-color: var(--color-tag-1) !important; color: #55555F !important; }\n[data-tag_color_id=\"2\"] { border-color: var(--color-tag-2) !important; color: var(--color-tag-2) !important; }\n[data-tag_color_id=\"3\"] { border-color: var(--color-tag-3) !important; color: var(--color-tag-3) !important; }\n[data-tag_color_id=\"4\"] { border-color: var(--color-tag-4) !important; color: var(--color-tag-4) !important; }\n[data-tag_color_id=\"5\"] { border-color: var(--color-tag-5) !important; color: var(--color-tag-5) !important; }\n[data-tag_color_id=\"6\"] { border-color: var(--color-tag-6) !important; color: var(--color-tag-6) !important; }\n[data-tag_color_id=\"7\"] { border-color: var(--color-tag-7) !important; color: var(--color-tag-7) !important; }\n[data-tag_color_id=\"8\"] { border-color: var(--color-tag-8) !important; color: var(--color-tag-8) !important; }\n[data-tag_color_id=\"9\"] { border-color: var(--color-tag-9) !important; color: var(--color-tag-9) !important; }\n[data-tag_color_id=\"10\"] { border-color: var(--color-tag-10) !important; color: var(--color-tag-10) !important; }\n\n[data-tag_id=\"\"].top-tagSelector-active { background: #bdc3c7 !important; }\n[data-tag_color_id=\"1\"].top-tagSelector-active { background: var(--color-tag-1) !important; }\n[data-tag_color_id=\"2\"].top-tagSelector-active { background: var(--color-tag-2) !important; }\n[data-tag_color_id=\"3\"].top-tagSelector-active { background: var(--color-tag-3) !important; }\n[data-tag_color_id=\"4\"].top-tagSelector-active { background: var(--color-tag-4) !important; }\n[data-tag_color_id=\"5\"].top-tagSelector-active { background: var(--color-tag-5) !important; }\n[data-tag_color_id=\"6\"].top-tagSelector-active { background: var(--color-tag-6) !important; }\n[data-tag_color_id=\"7\"].top-tagSelector-active { background: var(--color-tag-7) !important; }\n[data-tag_color_id=\"8\"].top-tagSelector-active { background: var(--color-tag-8) !important; }\n[data-tag_color_id=\"9\"].top-tagSelector-active { background: var(--color-tag-9) !important; }\n[data-tag_color_id=\"10\"].top-tagSelector-active { background: var(--color-tag-10) !important; }\n\n[data-tag_id=\"all\"] {\n\tborder-color: transparent !important; background: none !important;\n}\n\n[data-tag_id=\"all\"]:before {\n\tcontent: \"\";\n\tcolor: var(--color-tag-all) !important;\n\tfont-size: 26px;\n\tmin-width: calc(100% + 4px);\n\theight: calc(100% + 4px);\n\tmargin-top: -18px;\n\tmargin-left: -8px;\n}\n\n/* в кнопке выбора тэгов и в popup */\n.top-tagSelector-filter [data-tag_id],\n.top-tagSelector_popup [data-tag_id] {\n\t--top-tag-selector-size: 10px;\n\n\tbox-sizing: content-box;\n\tborder-radius: 100%; border: 2px solid var(--color-layout-front-1); background: var(--color-layout-front-1);\n\twidth: var(--top-tag-selector-size);\n\theight: var(--top-tag-selector-size);\n\tfont-size: calc(var(--top-tag-selector-size) + 4px);\n\t/*font-family: inherit !important;*/\n}\n\n/* исключение тегов */\n.top-body-press_ctrl .top-tagSelector_tagListItem-canExclude:hover [data-tag_id],\n[data-tag_id].top-tagSelector-excluded { position: relative; }\n\n.top-body-press_ctrl .top-tagSelector_tagListItem-canExclude:hover [data-tag_id]:before,\n[data-tag_id].top-tagSelector-excluded:before {\n\tcontent: \"\";\n\twidth: calc(var(--top-tag-selector-size) * 2); height: 1px; background: inherit;\n\ttransform: rotate(-45deg); filter: brightness(80%);\n\tdisplay: block;\n\tposition: absolute; top: calc(var(--top-tag-selector-size) / 2); left: calc(0px - var(--top-tag-selector-size) / 2);\n}\n.top-body-press_ctrl .top-tagSelector_tagListItem-canExclude:hover [data-tag_id]:not([data-tag_id=\"all\"]):not(.top-tagSelector-active):before { background: #AAA; }\n[data-tag_id].top-tagSelector-excluded:after,\n[data-tag_id].top-tagSelector-excluded ~ .top-tagSelector_tagListItemName { text-decoration: line-through; }\n\n/* popup */\n.top-popup_listItem.top-tagSelector-active { background: var(--top-popup-background-color-active) !important; }\n\n.top-popup_listItem:hover [data-tag_id=\"all\"]:before { border-color: var(--top-popup-background-color-hover); }\n.top-popup_listItem.top-tagSelector-active [data-tag_id=\"all\"]:before,\n.top-popup_listItem.top-active [data-tag_id=\"all\"]:before { border-color: var(--top-popup-background-color-active); }\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from 'vue';\nimport type { Emits, Props } from './types';\nimport TopTagIcon from '../tagIcon/tagIcon.vue';\nimport TopPopupListItem from '@/components/popup/popup/listItem.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst name = defineModel<Props['name']>('name', {\n\trequired: true,\n});\n\nconst elName = ref<HTMLElement | null>(null);\n\n/**\n * @todo Удалить через пол года после выхода версии firefox с поддержкой contenteditable plaintext-only, включая бета версии\n */\nconst firefoxProps = computed(() => {\n\tif (navigator.userAgent.indexOf('Firefox') != -1) {\n\n\t\treturn {\n\t\t\tcontenteditable: inEdit.value,\n\t\t\tonpaste: (event: Event) => event.preventDefault(),\n\t\t};\n\t}\n\n\treturn {};\n});\n\n/**\n * Включен режим редактирвоания\n */\nconst inEdit = ref(false);\n\n/**\n * Включить режим редактирование\n */\nconst turnToEdit = async () => {\n\tinEdit.value = true;\n\n\tawait nextTick();\n\n\telName.value?.focus();\n};\n\n/**\n * Применить редактирование\n */\nconst editCommit = () => {\n\tconst name = elName.value?.innerText;\n\tif (!name) return editCancel();\n\n\tif (elName.value) elName.value.innerText = name;\n\n\tinEdit.value = false;\n\n\temit('update:name', name);\n};\n\n/**\n * Отменить редактирование\n */\nconst editCancel = async () => {\n\tif (elName.value) elName.value.innerText = props.name;\n\n\tinEdit.value = false;\n};\n\n/**\n * Применить выбор\n */\nconst changeSelect = (e: MouseEvent) => {\n\t// в режиме редактирования выбор не применяется\n\tif (inEdit.value) return;\n\n\t// тег запрещено выбирать\n\tif (props.disabled) return;\n\n\tlet toState: Props['state'] = 'selected';\n\n\tif (props.canExclude) {\n\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\ttoState = 'excluded';\n\t\t}\n\t}\n\n\tif (props.state == toState) {\n\t\ttoState = '';\n\t}\n\n\tif (toState === '') emit('unselect');\n\tif (toState === 'selected') emit('select');\n\tif (toState === 'excluded') emit('exclude');\n};\n</script>\n\n<template>\n\t<TopPopupListItem\n\t\t:class=\"{\n\t\t\t'top-tagSelector_tagListItem': true,\n\t\t\t'top-tagSelector_tagListItem-inEdit': inEdit,\n\t\t\t'top-tagSelector_tagListItem-disabled': disabled,\n\t\t\t'top-tagSelector_tagListItem-canExclude': canExclude,\n\t\t\t'top-tagSelector-active': !!state,\n\t\t\t'top-tagSelector-excluded': state === 'excluded'\n\t\t}\"\n\t\t@click.stop=\"changeSelect\"\n\t>\n\t\t<TopTagIcon\n\t\t\t:id\n\t\t\t:name\n\t\t\t:colorId\n\t\t\t:state\n\t\t/>\n\n\t\t<span\n\t\t\tref=\"elName\"\n\t\t\tclass=\"top-tagSelector_tagListItemName\"\n\t\t\t:contenteditable=\"inEdit ? 'plaintext-only' : false\"\n\t\t\t:=\"firefoxProps\"\n\t\t\t@keydown.enter.stop=\"editCommit\"\n\t\t\t@keydown.esc.stop=\"editCancel\"\n\t\t>\n\t\t\t{{ name }}\n\t\t</span>\n\n\t\t<template v-if=\"editable\">\n\t\t\t<span\n\t\t\t\tv-if=\"!inEdit\"\n\t\t\t\tdata-top-icon=\"\"\n\t\t\t\tclass=\"top-tagSelector_edit\"\n\t\t\t\t@click=\"turnToEdit\"\n\t\t\t></span>\n\n\t\t\t<span\n\t\t\t\tv-else\n\t\t\t\tdata-top-icon=\"\"\n\t\t\t\tclass=\"top-tagSelector_edit\"\n\t\t\t\t@click.stop=\"editCommit\"\n\t\t\t></span>\n\t\t</template>\n\t</TopPopupListItem>\n</template>\n\n<style>\n.top-tagSelector_tagListItem.top-popup_listItem {\n\tpadding-top: var(--top-padding-2) !important;\n\tpadding-bottom: var(--top-padding-2) !important;\n\tgap: 10px;\n}\n\n.top-tagSelector_tagListItemName {\n\tborder-radius: var(--top-radius-1);\n\twidth: 120px;\n\tpadding: 4px 2px;\n\tmargin: -4px -2px;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\tflex-grow: 1;\n}\n\n/* редактирование */\n.top-tagSelector_edit {\n\t--top-icon-size: 18px;\n\t--top-icon-color: var(--color-text-3);\n\n\twidth: 20px;\n\tflex-grow: 0;\n}\n\n.top-tagSelector_edit:before {\n\tline-height: 0;\n}\n\n.top-tagSelector_edit { opacity: 0; }\n.top-tagSelector_edit:hover {\n\t--top-icon-color: var(--color-text-primary);\n}\n\n.top-tagSelector_tagListItem:hover .top-tagSelector_edit,\n.top-tagSelector_tagListItem-inEdit .top-tagSelector_edit {\n\tcursor: pointer;\n\topacity: 1;\n}\n\n.top-tagSelector_tagListItem-inEdit {\n\tbackground: var(--color-layout-front-3) !important;\n\toutline: 1px dashed var(--color-line-2);\n\toutline-offset: -1px;\n}\n\n.top-tagSelector_tagListItem-inEdit .top-tagSelector_tagListItemName {\n\tcursor: text;\n\tbackground: var(--color-layout-front-1);\n}\n\n/* disabled */\n.top-tagSelector_tagListItem-disabled {\n\tcursor: not-allowed !important;\n\topacity: 0.85;\n}\n.top-tagSelector_tagListItem-disabled:hover {\n\tbackground: inherit;\n}\n.top-tagSelector_tagListItem-disabled [data-tag_id] {\n\topacity: 0.6;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, TagSelectorTarget } from './types';\nimport TopPopupOpener from '../../../popup/popup/opener.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport { genTagIdClear, getTagById } from '../utils/utils';\nimport TopTagIcon from '../tagIcon/tagIcon.vue';\n\ndefineOptions({\n\tinheritAttrs: false,\n});\n\nconst props = defineProps<Props>();\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\nconst component = props.useTopButton ? TopButton : 'div';\nconst componentSlotName = props.useTopButton ? 'html' : 'default';\n\nconst topTagSelectorTarget: TagSelectorTarget = {\n\tmodel,\n\tmode: props.mode,\n\ttargetId: props.targetId,\n\tfilters: props.filters,\n\tpayload: props.payload,\n};\n</script>\n\n<template>\n\t<TopPopupOpener :id>\n\t\t<component\n\t\t\t:is=\"component\"\n\t\t\t:class=\"{\n\t\t\t\t'top-tagSelector': true,\n\t\t\t\t'top-tagSelector-filter': props.mode === 'filter',\n\t\t\t\t'top-tagSelector-setter_single': props.mode === 'setter' && !filters,\n\t\t\t\t'top-tagSelector-setter_several': props.mode === 'setter' && filters,\n\t\t\t\t'top-tagSelector-selectedOne': !model.length || model.length === 1,\n\t\t\t\t'top-tagSelector-toTwoLine': model.length > 5,\n\t\t\t}\"\n\t\t\tcolor=\"theme\"\n\t\t\t:styling\n\t\t\tv-top-data:topTagSelectorTarget=\"topTagSelectorTarget\"\n\t\t\t:=$attrs\n\t\t>\n\t\t\t<template #[componentSlotName]>\n\t\t\t\t<TopTagIcon\n\t\t\t\t\tv-if=\"!model.length && mode === 'filter'\"\n\t\t\t\t\tid=\"all\"\n\t\t\t\t\tcolorId=\"\"\n\t\t\t\t\t:name=\"$i18n.Common.All_tags ?? ''\"\n\t\t\t\t\tstate=\"\"\n\t\t\t\t/>\n\n\t\t\t\t<!-- Массовое редактирование -->\n\t\t\t\t<div v-if=\"mode === 'setter' && filters\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Список тегов -->\n\t\t\t\t<TopTagIcon\n\t\t\t\t\tv-else\n\t\t\t\t\tv-for=\"tagId in model\"\n\t\t\t\t\t:id=\"genTagIdClear(tagId)\"\n\t\t\t\t\t:colorId=\"getTagById(tagId, tags)?.color_id ?? ''\"\n\t\t\t\t\t:name=\"getTagById(tagId, tags)?.name ?? ''\"\n\t\t\t\t\t:state=\"genTagIdClear(tagId) === tagId ? 'selected' : 'excluded'\"\n\t\t\t\t/>\n\t\t\t</template>\n\t\t</component>\n\t</TopPopupOpener>\n</template>\n\n<style>\n.top-tagSelector {\n\tcursor: pointer;\n\tmin-width: 0;\n\twhite-space: nowrap;\n\tjustify-content: left;\n}\n\n.top-tagSelector.top-button {\n\twidth: 112px;\n\tvertical-align: middle;\n}\n\n.top-tagSelector.top-button.top-as-selector {\n\twidth: calc(112px + 20px);\n}\n\n.top-tagSelector-filter {\n\tgap: var(--top-gap-1);\n}\n\n/* все теги в фильтре */\n.top-tagSelector-filter [data-tag_id=\"all\"]:before {\n\tmargin-right: 6px;\n}\n\n/* фильтр по одному тегу */\n.top-tagSelector-filter.top-tagSelector-selectedOne [data-tag_id]:after {\n\tcontent: attr(title);\n\tmargin-left: 20px;\n\tmin-width: 74px;\n\ttext-align: left;\n\tline-height: 1.2;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n\n.top-tagSelector-filter.top-tagSelector-selectedOne [data-tag_id=\"all\"]:after {\n\tmargin-left: 0;\n}\n\n/* фильтр по многим тегам */\n.top-button.top-tagSelector-filter.top-tagSelector-toTwoLine {\n\tflex-wrap: wrap;\n\talign-content: center;\n}\n\n.top-button.top-tagSelector-filter.top-tagSelector-toTwoLine [data-tag_id] {\n\t--top-tag-selector-size: 8px;\n}\n\n.top-button.top-tagSelector-filter.top-tagSelector-toTwoLine [data-tag_id]:nth-child(5) {\n\tmargin-right: 5px;\n}\n\n/* установка тегов */\n.top-tagSelector-setter_single {\n\tposition: relative;\n\tdisplay: flex !important; flex-direction: column; flex-wrap: wrap; align-items: stretch !important;\n}\n\n.top-tagSelector-setter_single [data-tag_id] {\n\twidth: auto; min-height: 20%; min-width: 50%;\n\tflex: 1 1 auto;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, reactive, ref, shallowRef, watch } from 'vue';\n\nimport Core from '@/core/core/core';\nimport { useI18n } from '@/core/plugins/i18n';\nimport { storage } from '@/core/utils/dom';\nimport { debounce } from '@/core/utils/lodash';\n\nimport type { Option } from '@/components/forms/select/types';\nimport TopSelect from '@/components/forms/select/select.vue';\n\nimport TopButton from '@/components/forms/button/button.vue';\n\nimport type { PopupEvent } from '@/components/popup/popup/types';\nimport TopPopup from '../../popup/popup/popup.vue';\nimport TopPopupListItem from '../../popup/popup/listItem.vue';\n\nimport type { Emits, FiltersAction, Props, Tag } from './types';\nimport tagsDefaults from './tagsDefaults';\nimport { genTagIdExcluded } from './utils/utils';\n\nimport type { Props as TagListItemProps } from './popupListItem/types';\nimport TopTagListItem from './popupListItem/tagPopupListItem.vue';\n\nimport type { TagSelectorTarget } from './popupOpener/types';\nimport TopTagSelectorPopupOpener from './popupOpener/popupOpener.vue';\n\nconst i18n = useI18n();\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttagsMax: 10,\n\trequiredForSetter: true,\n\temitDelay: 500,\n});\n\n/**\n * Выбранные теги кнопки в этом компоненте\n *\n * Редактирвоание ведется только через `editTarget.model`\n */\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\n/**\n * Список тегов\n */\nconst tags = defineModel<Tag[]>('tags', {\n\tdefault: reactive(tagsDefaults),\n});\n\nconst emit = defineEmits<Emits>();\n\nconst emitDebounce: typeof emit = debounce((name, e) => {\n\temit(name, e);\n}, props.emitDelay);\n\n// требуется сразу указать один тег\nif (props.singleMode && !model.value.length) {\n\tmodel.value = [tags.value[0].id];\n}\n\nconst id = props.id ?? 'top-popup-id-' + Math.random() + '';\n\nconst filtersAction = ref<FiltersAction>('add');\n\n/**\n * Сгенерировать опции для выбора дейсвтия массого редактирования\n */\nconst genFiltersActionOptions = () => {\n\tconst tagsText = ' ' + i18n.Common.Tags?.toLowerCase();\n\n\tconst res = new Map<FiltersAction, Option>();\n\tres.set('add', { value: 'add', title: i18n.Common.Add + tagsText });\n\tres.set('replace', { value: 'replace', title: i18n.Common.Replace + tagsText });\n\tres.set('delete', { value: 'delete', title: i18n.Common.Delete + tagsText });\n\n\treturn res;\n};\n\n/**\n * Целевой объект редактирвоания тегов\n *\n * Определяется кнопкой, которая открыла popup выбора тегов\n */\nlet target = shallowRef<TagSelectorTarget>({\n\tmodel,\n\tmode: 'filter',\n\ttargetId: undefined,\n\tfilters: undefined,\n\tpayload: undefined,\n});\n\nwatch(model, () => {\n\temitDebounce('selector', model.value);\n});\n\n/**\n * Можно ли выбрать еще теги\n */\nconst disabled = computed(() => {\n\tif (target.value.mode !== 'setter') return;\n\n\tif (!props.maxTagsForSetter) return;\n\n\t// массовая смена тегов, количество тегов в результате узнать невозможно\n\tif (target.value.filters) return;\n\n\treturn target.value.model.value.length >= props.maxTagsForSetter;\n});\n\nconst genTargetTagState = (tagId: Tag['id'] | 'all'): TagListItemProps['state'] => {\n\tif (tagId !== 'all') {\n\t\tif (target.value.model.value.includes(tagId)) return 'selected';\n\n\t\tif (target.value.model.value.includes(genTagIdExcluded(tagId))) return 'excluded';\n\t}\n\n\t// Все теги, ни один из тегов не выбран\n\tif (tagId === 'all' && !target.value.model.value.length) return 'selected';\n\n\treturn '';\n};\n\nconst updateTargetModel = (tagId: Tag['id'], action: 'unselect' | 'select' | 'exclude') => {\n\tconst tagIdExcluded = genTagIdExcluded(tagId);\n\n\tlet tagsIds = target.value.model.value.filter(modelTagId => modelTagId !== tagId && modelTagId !== tagIdExcluded);\n\n\tif (action === 'select') tagsIds.push(tagId);\n\tif (action === 'exclude') tagsIds.push(tagIdExcluded);\n\n\t// режим редактирвоания тегов одного объекта с требованием указать хотя бы один тег\n\tif (target.value.mode === 'setter' && target.value.targetId !== undefined && props.requiredForSetter) {\n\t\t// нельзя снимать выделение со всех тегов\n\t\tif (!tagsIds.length) {\n\t\t\ttagsIds.push('1');\n\t\t}\n\n\t\t// при первом выборе сразу снять тег \"Без тега\"\n\t\tif (tagsIds.length === 2 && target.value.model.value.length === 1 && target.value.model.value[0] === '1') {\n\t\t\ttagsIds = tagsIds.filter((tagId) => tagId !== '1');\n\t\t}\n\t}\n\n\t// режим выбора одного тега\n\tif (props.singleMode && !target.value.filters) {\n\t\t// нужно указать хотя бы один тег\n\t\tif (!tagsIds.length) {\n\t\t\ttagsIds = target.value.model.value;\n\t\t}\n\n\t\tif (tagsIds.length > 1) {\n\t\t\ttagsIds = [tagsIds[tagsIds.length - 1]];\n\t\t}\n\t}\n\n\t// всегда выводить теги в порядке, указанном в настройках tags\n\ttagsIds.sort((a, b) => {\n\t\tif (!props.tags) return 0;\n\n\t\tconst aIndex = props.tags.findIndex((tag) => tag.id === a);\n\t\tconst bIndex = props.tags.findIndex((tag) => tag.id === b);\n\n\t\treturn aIndex - bIndex;\n\t});\n\n\ttarget.value.model.value = tagsIds;\n\n\tif (target.value.mode === 'setter' && target.value.targetId !== undefined) {\n\t\temitDebounce('setter', {\n\t\t\ttagsIds: tagsIds as Tag['id'][],\n\t\t\ttargetId: target.value.targetId,\n\t\t\tpayload: target.value.payload,\n\t\t});\n\t}\n};\n\nconst classString = computed(() => {\n\tlet res = 'top-tagSelector_popup';\n\n\tif (target.value.mode === 'filter') res += ' top-tagSelector_popup-filter';\n\tif (target.value.mode === 'setter') res += ' top-tagSelector_popup-setter';\n\n\treturn res;\n});\n\n/**\n * Добавить тег\n */\nconst addTag = () => {\n\tconst tagName = prompt('', 'New tag');\n\tif (!tagName || tagName === 'New tag') return;\n\n\tconst tagId = tags.value.length + 1;\n\n\ttags.value.push({\n\t\tid: String(tagId) as Tag['id'],\n\t\tname: tagName,\n\t\tcolor_id: String((tagId - 1) % 10 + 1) as Tag['color_id'],\n\t});\n\n\temit('tagsChanged', tags.value);\n};\n\nconst onOpen = (popupEvent: PopupEvent) => {\n\t// popup открыт другой кнопкой c другим modelValue, для редактирвоания объектов\n\ttarget.value = storage(popupEvent.elPopupOpener, 'topTagSelectorTarget');\n\tif (!target.value) throw new Error('Open popup TopTagSelector required v-data:topTagSelectorTarget');\n\n\t// при начале массовой установки тегов сбросить состояние формы\n\tif (target.value.filters) {\n\t\tfiltersAction.value = 'add';\n\t\ttarget.value.model.value = [];\n\t}\n\n\tif (!Core.$?.ui['sortable']) {\n\t\tconsole.info('Для работы сортировки требуется глобальная загрузка jQuery UI Sortable');\n\n\t\treturn;\n\t}\n\n\tif (!Core.state.isMobile && !Core.state.isMobileUA && tags.value) {\n\t\t$(popupEvent.elPopup).sortable({\n\t\t\titems: 'li:has([data-tag_id]:not([data-tag_id=\"all\"]))',\n\n\t\t\t/**\n\t\t\t * @todo Удалить `[contenteditable=\"true\"]` через пол года после выхода версии firefox с поддержкой contenteditable plaintext-only, включая бета версии\n\t\t\t */\n\t\t\tcancel: '[contenteditable=\"plaintext-only\"], [contenteditable=\"true\"]',\n\n\t\t\tdistance: 10,\n\t\t\tstop: function (_e, ui) {\n\t\t\t\tif (!tags.value) return;\n\n\t\t\t\tconst $tags = $(ui.item).parent().find('[data-tag_id]');\n\n\t\t\t\tconst tagsSorted: Tag['id'][] = [];\n\t\t\t\t$tags.each((_index, elTag) => {\n\t\t\t\t\tif (!tags.value) return;\n\n\t\t\t\t\tconst tagId = $(elTag).attr('data-tag_id') as Tag['id'];\n\t\t\t\t\ttagsSorted.push(tagId);\n\t\t\t\t});\n\n\t\t\t\ttags.value.sort((tagIdA, tagIdB) => {\n\t\t\t\t\tconst a = tagsSorted.findIndex(tagSorted => tagSorted === tagIdA.id);\n\t\t\t\t\tconst b = tagsSorted.findIndex(tagSorted => tagSorted === tagIdB.id);\n\n\t\t\t\t\treturn a - b;\n\t\t\t\t});\n\n\t\t\t\temitDebounce('tagsChanged', tags.value);\n\t\t\t},\n\t\t});\n\t}\n};\n\nconst onClose = (popupEvent: PopupEvent) => {\n\tif (!Core.$?.ui['sortable']) return;\n\n\tif ($(popupEvent.elPopup).data('ui-sortable')) {\n\t\t$(popupEvent.elPopup).sortable('destroy');\n\t}\n};\n</script>\n\n<template>\n\t<TopTagSelectorPopupOpener\n\t\tclass=\"top-as-selector\"\n\t\tv-model=\"model\"\n\t\t:id\n\t\t:tags\n\t\t:styling\n\t\tmode=\"filter\"\n\t\tuseTopButton\n\t/>\n\n\t<TopPopup\n\t\t:id\n\t\t:class=\"classString\"\n\t\t@open=\"onOpen($event)\"\n\t\t@close=\"onClose($event)\"\n\t\t:transition-duration=\"50\"\n\t>\n\t\t<!-- Массовое редактирвоание-->\n\t\t<template #header v-if=\"target.mode === 'setter' && target.filters\">\n\t\t\t<TopSelect\n\t\t\t\tv-model=\"filtersAction\"\n\t\t\t\t:options=\"genFiltersActionOptions()\"\n\t\t\t/>\n\t\t</template>\n\n\t\t<template #footer v-if=\"target.mode === 'setter' && target.filters\">\n\t\t\t<TopButton color=\"theme\">\n\t\t\t\t{{ $i18n.Common.Cancel }}\n\t\t\t</TopButton>\n\n\t\t\t<TopButton\n\t\t\t\t@click=\"emitDebounce('setter', {\n\t\t\t\t\ttagsIds: target.model.value as Tag['id'][],\n\t\t\t\t\tfilters: target.filters,\n\t\t\t\t\tfiltersAction,\n\t\t\t\t\tpayload: target.payload,\n\t\t\t\t})\"\n\t\t\t>\n\t\t\t\t{{ filtersAction === 'add' ? $i18n.Common['Add'] : '' }}\n\t\t\t\t{{ filtersAction === 'replace' ? $i18n.Common['Replace'] : '' }}\n\t\t\t\t{{ filtersAction === 'delete' ? $i18n.Common['Remove'] : '' }}\n\t\t\t</TopButton>\n\t\t</template>\n\n\t\t<template #contentList>\n\t\t\t<TopTagListItem\n\t\t\t\tv-if=\"target.mode === 'filter' && !singleMode\"\n\t\t\t\tid=\"all\"\n\t\t\t\tcolorId=\"\"\n\t\t\t\t:name=\"$i18n.Common.All_tags ?? ''\"\n\t\t\t\t:state=\"target.model.value.length ? '' : 'selected'\"\n\t\t\t\t@select=\"target.model.value = []\"\n\t\t\t/>\n\n\t\t\t<TopTagListItem\n\t\t\t\tv-for=\"tag in tags\"\n\t\t\t\t:key=\"tag.id\"\n\t\t\t\t:id=\"tag.id\"\n\t\t\t\t:colorId=\"tag.color_id\"\n\t\t\t\t:name=\"tag.name\"\n\t\t\t\t:state=\"genTargetTagState(tag.id)\"\n\t\t\t\t:canExclude=\"target.mode === 'filter' && !singleMode\"\n\t\t\t\t:editable=\"tagsEditable\"\n\t\t\t\t:disabled=\"disabled && genTargetTagState(tag.id) === ''\"\n\t\t\t\t@unselect=\"updateTargetModel(tag.id, 'unselect')\"\n\t\t\t\t@select=\"updateTargetModel(tag.id, 'select')\"\n\t\t\t\t@exclude=\"updateTargetModel(tag.id, 'exclude')\"\n\t\t\t\t@update:name=\"tag.name = $event as string, emitDebounce('tagsChanged', tags);\"\n\t\t\t/>\n\n\t\t\t<TopPopupListItem\n\t\t\t\tv-if=\"tagsEditable && tags.length < tagsMax && tags.length < 20\"\n\t\t\t\tdata-top-icon=\"\"\n\t\t\t\t@click.stop=\"addTag\"\n\t\t\t>\n\t\t\t\t{{ $i18n.Common.Add }}\n\t\t\t</TopPopupListItem>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style>\n.top-tagSelector_popup .top-popup {\n\tuser-select: none;\n\tmin-width: 220px !important;\n\ttext-align: left;\n}\n\n.top-tagSelector_popup .top-popup_header .top-select{\n\tflex-grow: 1;\n}\n</style>\n","import type { MaybeRefOrGetter } from 'vue';\nimport { computed, toValue } from 'vue';\nimport type { Competitor, Item } from '@/components/project/selectorCompetitors/types';\n\nexport const useItemsFromCompetitors = (competitors: MaybeRefOrGetter<Competitor[]>, projectId: MaybeRefOrGetter<number>) => {\n\treturn computed(() => {\n\t\tconst activeCompetitors = toValue(competitors).filter(competitor => competitor.on >= 0 || competitor.id === projectId);\n\n\t\tconst items: Item[] = activeCompetitors.map(competitor => {\n\t\t\treturn {\n\t\t\t\tvalue: competitor.id,\n\t\t\t\ttitle: competitor.url + ` [${competitor.id}]`,\n\t\t\t\ticon: competitor.id === toValue(projectId) ? '' : '',\n\t\t\t\tcontent: competitor.name,\n\t\t\t};\n\t\t});\n\n\t\treturn items;\n\t});\n};\n","import { isRef, type Ref, ref, unref, watch } from 'vue';\nimport { useI18n } from '@/core/plugins/i18n';\nimport { storage } from '@/core/utils/dom';\nimport TopPopupWorker from '@/components/popup/lib/worker';\nimport type { OpenerProps as PopupOpenerProps } from '@/components/popup/popup/types';\nimport type { Props as TagSelectorOpenerProps, TagSelectorTarget } from '../popupOpener/types';\nimport type { Props as TagIconProps } from '../tagIcon/types';\nimport { genTagIdClear, getTagById } from '../utils/utils';\n\n/**\n * Сгенерировтаь элемент для открытия popup с выбором тегов\n *\n * Альтернатива TopTagSelecorPopupOpener для работы вне vue\n *\n * Требует монтирования компонента TopTagSelecor\n */\nexport const genElPopupOpener = (\n\tprops: TagSelectorOpenerProps & { modelValue: TagSelectorOpenerProps['modelValue'] | Ref<TagSelectorOpenerProps['modelValue']> },\n\tpropsPopup?: Partial<PopupOpenerProps>,\n\thtmlSetterSeveral?: string,\n): HTMLElement => {\n\tif (!propsPopup) propsPopup = { id: props.id };\n\n\tpropsPopup.id = props.id;\n\n\tconst el = TopPopupWorker.genElPopupOpener('div', propsPopup as PopupOpenerProps);\n\n\tel.classList.add('top-tagSelector');\n\tif (props.useTopButton) el.classList.add('top-button', 'top-color_theme');\n\tif (props.mode === 'filter') el.classList.add('top-tagSelector-filter');\n\tif (props.mode === 'setter' && !props.filters) el.classList.add('top-tagSelector-setter_single');\n\tif (props.mode === 'setter' && props.filters) el.classList.add('top-tagSelector-setter_several');\n\n\t// прокcи клик: lazy connect\n\tel.onclick = (e) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tel.onclick = null;\n\n\t\tconst model = ref(props.modelValue);\n\n\t\tconst target: TagSelectorTarget = {\n\t\t\tmodel,\n\t\t\tmode: props.mode,\n\t\t\ttargetId: props.targetId,\n\t\t\tfilters: props.filters,\n\t\t\tpayload: props.payload,\n\t\t};\n\n\t\tstorage(el, 'topTagSelectorTarget', target);\n\n\t\tdelete el.dataset.topPopupDisabled;\n\n\t\tif (!isRef(props.modelValue)) {\n\t\t\twatch(model, () => {\n\t\t\t\tprops.modelValue = model.value;\n\n\t\t\t\telPopupOpenerRender(el, props, htmlSetterSeveral);\n\t\t\t});\n\t\t}\n\n\t\t// выполнение клика\n\t\tel.click();\n\t};\n\n\tif (isRef(props.modelValue)) {\n\t\twatch(props.modelValue, () => elPopupOpenerRender(el, props, htmlSetterSeveral));\n\t} else {\n\t\tstorage(el, 'topTagSelectorRender', (modelValue: TagSelectorOpenerProps['modelValue']) => {\n\t\t\tprops.modelValue = modelValue;\n\n\t\t\tconst target = storage(el, 'topTagSelectorTarget');\n\t\t\tif (target) target.model.value = modelValue;\n\n\t\t\telPopupOpenerRender(el, props, htmlSetterSeveral);\n\t\t});\n\t}\n\n\telPopupOpenerRender(el, props, htmlSetterSeveral);\n\n\treturn el;\n};\n\n/**\n * Вызвать перерисовку элемента, который был создан через genElPopupOpener()\n *\n * Работет только для элементов не с реактивным modelValue\n */\nexport const renderElPopupOpener = (el: HTMLElement, modelValue: TagSelectorOpenerProps['modelValue']) => {\n\tstorage(el, 'topTagSelectorRender')?.(modelValue);\n};\n\n/**\n * Отрисовать TopTagSelecorPopupOpener\n */\nconst elPopupOpenerRender = (el, props: TagSelectorOpenerProps, htmlSetterSeveral?: string) => {\n\tconst tagsIds = unref(props.modelValue);\n\n\tel.classList.toggle('top-tagSelector-selectedOne', !tagsIds.length || tagsIds.length === 1);\n\tel.classList.toggle('top-tagSelector-toTwoLine', tagsIds.length > 5);\n\n\tif (props.mode === 'setter' && props.filters) {\n\t\tel.innerHTML = `<div>${htmlSetterSeveral}</div>`;\n\n\t\treturn;\n\t}\n\n\tel.innerHTML = '';\n\n\tif (!tagsIds.length && props.mode === 'filter') {\n\t\tconst elTagIcon = genElTagIcon({\n\t\t\tid: 'all',\n\t\t\tcolorId: '',\n\t\t\tname: useI18n().Common?.All_tags ?? '',\n\t\t\tstate: '',\n\t\t});\n\n\t\tel.append(elTagIcon);\n\t}\n\n\ttagsIds.forEach(tagId => {\n\t\tconst elTagIcon = genElTagIcon({\n\t\t\tid: genTagIdClear(tagId),\n\t\t\tcolorId: getTagById(tagId, props.tags)?.color_id ?? '',\n\t\t\tname: getTagById(tagId, props.tags)?.name ?? '',\n\t\t\tstate: genTagIdClear(tagId) === tagId ? 'selected' : 'excluded',\n\t\t});\n\n\t\tel.append(elTagIcon);\n\t});\n};\n\n/**\n * Сгенерировтаь элемент для открытия popup с выбором тегов\n *\n * Альтернатива TopTagSelecorTagIcon для работы вне vue\n */\nconst genElTagIcon = (props: TagIconProps) => {\n\tconst el = document.createElement('div');\n\n\tel.classList.add('top-tagSelector_tagIcon');\n\tel.classList.toggle('top-tagSelector-active', !!props.state);\n\tel.classList.toggle('top-tagSelector-excluded', props.state === 'excluded');\n\n\tel.dataset.tag_id = props.id;\n\tel.dataset.tag_color_id = props.colorId;\n\tel.title = props.name;\n\n\treturn el;\n};\n","import type { ComponentCustomProps } from 'vue';\n\nimport SelectorCompetitors from './selectorCompetitors/selectorCompetitors.vue';\nimport SelectorRegion from './selectorRegion/selectorRegion.vue';\n\nimport TagSelector from './tagSelector/tagSelector.vue';\nimport TagSelectorPopupOpener from './tagSelector/popupOpener/popupOpener.vue';\nimport TagSelectorTagIcon from './tagSelector/tagIcon/tagIcon.vue';\n\nexport const TopSelectorCompetitors = SelectorCompetitors as typeof SelectorCompetitors & ComponentCustomProps;\nexport { useItemsFromCompetitors } from './selectorCompetitors/composables';\n\nexport { findRegion, genSearcherByKey, dialogSelectorRegions } from './selectorRegion/utils/utils';\nexport const TopSelectorRegion = SelectorRegion as typeof SelectorRegion & ComponentCustomProps;\n\nexport type { Emits as TopTagSelectorEmits, Tag, TagId, TagIdExclude } from './tagSelector/types';\nexport {\n\tgenElPopupOpener as genElTopTagSelectorPopupOpener,\n\trenderElPopupOpener as renderElTopTagSelectorPopupOpener,\n} from './tagSelector/utils/el';\nexport const TopTagSelector = TagSelector as typeof TagSelector & ComponentCustomProps;\nexport const TopTagSelectorPopupOpener = TagSelectorPopupOpener as typeof TagSelectorPopupOpener & ComponentCustomProps;\nexport const TopTagSelectorTagIcon = TagSelectorTagIcon as typeof TagSelectorTagIcon & ComponentCustomProps;\n"],"names":["props","__props","model","useModel","selectAllItem","computed","useI18n","openBlock","createElementBlock","_hoisted_1$3","unref","Core","createBlock","_sfc_main$6","withCtx","createVNode","_sfc_main$8","createTextVNode","toDisplayString","_a","_ctx","item","Fragment","renderList","normalizeClass","createElementVNode","_hoisted_2","_cache","$event","searhcerCompareKey","dummyIndex","globalRegionIndex","searchersNames","regionUndefined","searcherUndefined","regionAuto","searcherAuto","regionGlobal","getRegionAuto","getSearcherAuto","getRegionGlobal","genSearcherByKey","forFrequency","autoRegion","searchers","searcherByKey","genSearchersMapVolume","genSearchersMapCommon","onlyEnabledRegions","forceSearchersKeys","searcher","searcherI","region","regionI","searcherKey","serarcherByKey","searcherMail","findRegion","searchRegion","findedRegion","dialogSelectorRegions","useAsyncTopDialog","useSelectSearcher","mapSearchers","i18n","ref","optionBySearcherKey","res","option","getSearcherGIcon","dummyOption","compareOption","useSelectRegion","activeSearcherIndexed","regionIndex","_b","_c","optionByRegionIndex","options","regionLabel","option2","langLabel","getLangLabel","getDeviceGIcon","watch","optionByRegionIndex2","oldOptionByRegionIndex","newRegionIndex","regionName","regionMatchLevel","index","title","regexpDevice","regionNameCompare","regionMatchLevelI","useCompare","allRegionsIndexes","regionsIndexes","compareLoad","regionsIndexesSaved","compareSave","useSelectorRegion","selectSearcher","selectRegion","compare","newSearcherKey","regionsNewSearcher","regionsCurrentSearcher","_d","getSearcherKey","getRegionIndex","regionKey","getSearcher","modelSingle","getRegion","onClickCompare","regions","defaultKey","newModel","defaultIndex","_e","all","newSearherKey","__expose","createCommentVNode","tagsDefaults","genTagIdExcluded","tagId","genTagIdClear","getTagById","tags","tag","tag2","_hoisted_1$2","emit","__emit","name","elName","firefoxProps","inEdit","event","turnToEdit","nextTick","editCommit","name2","editCancel","changeSelect","e","toState","_sfc_main$3","withKeys","withModifiers","component","componentSlotName","topTagSelectorTarget","withDirectives","resolveDynamicComponent","mergeProps","renderSlot","emitDebounce","debounce","id","filtersAction","genFiltersActionOptions","tagsText","target","shallowRef","disabled","genTargetTagState","updateTargetModel","action","tagIdExcluded","tagsIds","modelTagId","tagId2","a","b","aIndex","bIndex","classString","addTag","tagName","onOpen","popupEvent","storage","ui","$tags","tagsSorted","_index","elTag","tagIdA","tagIdB","tagSorted","onClose","createSlots","_sfc_main$2","_sfc_main$a","useItemsFromCompetitors","competitors","projectId","toValue","competitor","genElPopupOpener","propsPopup","htmlSetterSeveral","el","Worker","isRef","elPopupOpenerRender","modelValue","renderElPopupOpener","elTagIcon","genElTagIcon","TopSelectorCompetitors","_sfc_main$5","TopSelectorRegion","_sfc_main$4","TopTagSelector","_sfc_main","TopTagSelectorPopupOpener","_sfc_main$1","TopTagSelectorTagIcon"],"mappings":"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"}
1
+ {"version":3,"file":"project.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/tagIcon/tagIcon.vue","../../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\">\nimport { computed } from 'vue';\nimport type { Props } from './types';\nimport Core from '@/core/core/core';\nimport Button from '@/components/forms/button/button.vue';\nimport Popup from '@/components/popup/popup/popup.vue';\nimport ListItem from '@/components/popup/popup/listItem.vue';\nimport Menu from '@/components/formsExt/menu/menu.vue';\nimport { useI18n } from '@/core/plugins/i18n';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tshowSelectAllItem: true,\n});\nconst model = defineModel<Props['modelValue']>();\n\nconst selectAllItem = computed(() => {\n\tif (props.showSelectAllItem) {\n\t\treturn {\n\t\t\ticon: '',\n\t\t\ttitle: useI18n().Common.Select_all,\n\t\t\tvalue: 'all',\n\t\t\tcontent: '',\n\t\t};\n\t}\n});\n</script>\n\n<template>\n\t<div class=\"top-selectorCompetitors\">\n\t\t<Popup v-if=\"Core.state.isMobile\">\n\t\t\t<template #opener>\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"top-selectorCompetitors_opener\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\ticon2=\"\"\n\t\t\t\t>\n\t\t\t\t\t{{ items.find((item) => item.value === model?.[0])?.content }}\n\t\t\t\t</Button>\n\t\t\t</template>\n\n\t\t\t<template #contentList>\n\t\t\t\t<ListItem\n\t\t\t\t\tv-for=\"(item) in items\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'top-active': model?.includes(item.value)\n\t\t\t\t\t}\"\n\t\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t\t\t:title=\"item.title\"\n\t\t\t\t\t@click=\"() => model = [item.value]\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"top-ellipsis1\">\n\t\t\t\t\t\t{{ item.content }}\n\t\t\t\t\t</span>\n\t\t\t\t</ListItem>\n\t\t\t</template>\n\t\t</Popup>\n\n\t\t<Menu\n\t\t\tv-else\n\t\t\tv-model=\"model\"\n\t\t\t:items=\"items\"\n\t\t\t:isMultiple=\"true\"\n\t\t\tstyling=\"bar\"\n\t\t\t:canBeEmptyMultiple=\"false\"\n\t\t\t:selectAllItem=\"selectAllItem\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n.top-selectorCompetitors_opener.top-button {\n\twidth: 100%;\n}\n</style>\n","import type { Region, SearcherIndexed } from '../types';\nimport { useI18n } from '@/core/plugins/i18n';\n\n/**\n * Ключ ПС - для выбора нескольких ПС или регионов\n */\nexport const searhcerCompareKey = -1;\n\n/**\n * Ключ ПС или индекса Региона, используется для ПС или Региона, не настроенных в проекте\n *\n * Также, используется для API с возможностью не указывать регион, см. `props.autoRegion`\n */\nexport const dummyIndex = -2;\n\n/**\n * Регион - без региона\n */\nexport const globalRegionIndex = -1;\n\nexport const searchersNames = {\n\t0: 'Yandex',\n\t1: 'Google',\n\t4: 'YouTube',\n\t5: 'Bing',\n\t7: 'Seznam',\n\t8: 'AppStore',\n\t9: 'GoogleStore',\n\t20: 'Yandex.com',\n\t21: 'Yandex.com.tr',\n};\n\nexport const regionUndefined: Region = {\n\tkey: dummyIndex,\n\tname: '--',\n\tindex: dummyIndex,\n};\n\nexport const searcherUndefined: SearcherIndexed = {\n\tkey: dummyIndex,\n\tname: '--',\n\tregions: [regionUndefined],\n\tregionByIndex: new Map([[dummyIndex, regionUndefined]]),\n};\n\nconst regionAuto: Region = {\n\tkey: dummyIndex,\n\tname: 'Autoselect',\n\tindex: dummyIndex,\n};\n\nconst searcherAuto: SearcherIndexed = {\n\tkey: dummyIndex,\n\tname: 'Autoselect',\n\tregions: [regionAuto],\n\tregionByIndex: new Map([[dummyIndex, regionAuto]]),\n};\n\nconst regionGlobal: Region = {\n\tcountryCode: '00',\n\tdepth: 1,\n\tdevice: 0,\n\tkey: globalRegionIndex,\n\tindex: globalRegionIndex,\n\tlang: 'ru',\n\tname: 'Without region',\n};\n\nexport const getRegionAuto = () => {\n\tregionAuto.name = useI18n().Common.Autoselect!;\n\n\treturn regionAuto;\n};\n\nexport const getSearcherAuto = () => {\n\tgetRegionAuto();\n\n\tsearcherAuto.name = useI18n().Common.Autoselect!;\n\tconsole.log(searcherAuto);\n\n\treturn searcherAuto;\n};\n\nexport const getRegionGlobal = () => {\n\tregionGlobal.name = useI18n().Keywords.Without_region!;\n\n\treturn regionGlobal;\n};\n","import type { Region, Searcher, SearcherByKey, SearcherIndexed } from '../types';\nimport { dummyIndex, getRegionGlobal, getSearcherAuto, searchersNames, searcherUndefined } from './consts';\nimport { useAsyncTopDialog } from '@/components/dialog/dialog/composables/utils';\n\n/**\n * Генерация Map ПС с Map регионов из массива searchers\n * - ключ для ПС - searcherKey\n * - ключ для региона - regionIndex\n *\n * Если поисковиков в списке нет, в список будет добавлен searcherUndefined\n *\n * Если регионов в списке нет, в список будет добавлен regionUndefined\n *\n * @param forFrequency - получить массив для просмотра частоты (или ставок)\n * @param autoRegion - добавить элемент с ключем -2, который в API заменяется на нужный ключ в зависимости от контекста\n * @param searchers - поисковики с регионами проекта, см.: get/projects_2/projects, show_searchers_and_regions = 1\n */\nexport const genSearcherByKey = (\n\tforFrequency: boolean = false,\n\tautoRegion: boolean = false,\n\tsearchers: Searcher[] = [],\n) => {\n\tlet searcherByKey: SearcherByKey;\n\n\tif (forFrequency) {\n\t\tsearcherByKey = genSearchersMapVolume(searchers);\n\t} else {\n\t\tsearcherByKey = genSearchersMapCommon(searchers);\n\t}\n\n\tif (autoRegion) searcherByKey.set(dummyIndex, getSearcherAuto());\n\tif (!searcherByKey.size) searcherByKey.set(dummyIndex, searcherUndefined);\n\n\treturn searcherByKey;\n};\n\n/**\n * Список ПС с регионами\n *\n * @param searchers\n * @param onlyEnabledRegions\n * @param forceSearchersKeys - ключи ПС, которые нееобходимо вывести в любом случае\n * @param forFrequency - для частоты будут выводиться только Яндекс, Google и Mail\n */\nconst genSearchersMapCommon = (\n\tsearchers: Searcher[],\n\tonlyEnabledRegions: boolean = true,\n\tforceSearchersKeys: Searcher['key'][] = [],\n\tforFrequency: boolean = false,\n) => {\n\tconst searcherByKey: Map<Searcher['key'], SearcherIndexed> = new Map();\n\n\t// настроенные ПС\n\tsearchers.forEach((searcher) => {\n\t\tif (!searcher.enabled) return;\n\t\tif (forFrequency && typeof searcher.key === 'number' && searcher.key > 1) return;\n\n\t\tconst searcherI = { ...searcher } as SearcherIndexed;\n\t\tsearcherI.regionByIndex = new Map();\n\n\t\tif (searcher.regions) {\n\t\t\tsearcher.regions.forEach((region: Region) => {\n\t\t\t\tif (onlyEnabledRegions && !region.enabled) return;\n\n\t\t\t\tconst regionI = { ...region };\n\t\t\t\tsearcherI.regionByIndex.set(regionI.index, regionI);\n\t\t\t});\n\t\t}\n\n\t\tif (!searcherI.regionByIndex.size && !forceSearchersKeys.length) {\n\t\t\t// searcherI.regionByIndex.set(regionUndefined.index, regionUndefined);\n\t\t}\n\n\t\tif (\n\t\t\t// режим вывода ПС без регионов\n\t\t\t!searcher.regions ||\n\n\t\t\t// есть включенные регионы\n\t\t\tsearcherI.regionByIndex.size ||\n\n\t\t\t// запрошен вывод конкретных ПС\n\t\t\tforceSearchersKeys.length\n\t\t) {\n\t\t\tif (typeof searcherI.key === 'number') searcherByKey.set(searcherI.key, searcherI);\n\t\t}\n\t});\n\n\t// дополнительные ПС\n\tforceSearchersKeys.forEach((searcherKey) => {\n\t\tif (searcherByKey.has(searcherKey)) return;\n\n\t\tconst searcherI: SearcherIndexed = {\n\t\t\tkey: searcherKey,\n\t\t\tname: searchersNames[searcherKey],\n\t\t\tregions: [],\n\t\t\tregionByIndex: new Map(),\n\t\t};\n\n\t\tsearcherByKey.set(searcherI.key, searcherI);\n\t});\n\n\treturn searcherByKey;\n};\n\n/**\n * Список ПС с регионами для проверки частоты (Яндекс, Google, Mail если добавлен в проект)\n *\n * @param searchers\n */\nconst genSearchersMapVolume = (searchers: Searcher[]) => {\n\tconst serarcherByKey = genSearchersMapCommon(searchers, false, [0, 1], true);\n\n\t// в Mail нет регионов\n\tif (serarcherByKey.has(2)) {\n\t\tconst searcherMail = serarcherByKey.get(2);\n\t\tif (searcherMail) searcherMail.regionByIndex = new Map();\n\t}\n\n\t// добавление глобального региона\n\tserarcherByKey.forEach((searcher) => {\n\t\tif (!searcher.regionByIndex) return;\n\n\t\tconst region = { ...getRegionGlobal() };\n\t\tsearcher.regionByIndex.set(region.index, region);\n\t});\n\n\treturn serarcherByKey;\n};\n\n/**\n * Поиск региона по заданному критерию из списка поисковиков проекта\n *\n * @param forFrequency - поиск региона для просмотра частоты или ставок\n * @param searchRegion - объект с параметрами региона, который следует найти\n * @param searchers\n */\nexport const findRegion = (forFrequency: boolean, searchRegion: Partial<Region>, searchers: Searcher[] = []) => {\n\tconst searcherByKey = genSearcherByKey(forFrequency, false, searchers);\n\n\tlet findedRegion: Region | undefined;\n\n\t// поиск ПС\n\tsearcherByKey.forEach((searcher) => {\n\t\tif (searchRegion.searcher_key !== undefined && searchRegion.searcher_key != searcher.key) return;\n\t\tif (!searcher.regions) return;\n\n\t\t// поиск региона\n\t\tsearcher.regions.forEach((region) => {\n\t\t\tif (findedRegion) return;\n\n\t\t\tif (searchRegion.key !== undefined && searchRegion.key != region.key) return;\n\t\t\tif (searchRegion.index !== undefined && searchRegion.index != region.index) return;\n\n\t\t\tif (!forFrequency) {\n\t\t\t\tif (searchRegion.lang !== undefined && searchRegion.lang != region.lang) return;\n\t\t\t\tif (searchRegion.device !== undefined && searchRegion.device != region.device) return;\n\t\t\t}\n\n\t\t\tregion.searcher_key = searcher.key;\n\t\t\tfindedRegion = region;\n\n\t\t\treturn false;\n\t\t});\n\n\t\tif (findedRegion) return false;\n\t});\n\n\treturn findedRegion;\n};\n\n/**\n * Открыть диалоговое окно с выбором нескольких регионов\n *\n * @see import('../dialog_selectorRegions/types').Props\n */\nexport const dialogSelectorRegions = useAsyncTopDialog(() => {\n\treturn import('@/components/project/selectorRegion/dialog_selectorRegions/dialog_selectorRegions.vue');\n});\n","import { computed, type ComputedRef, ref } from 'vue';\nimport { useI18n } from '@/core/plugins/i18n';\nimport type { Props, SearcherByKey } from '../types';\nimport type { Option, Options } from '@/components/forms/select/types';\nimport { dummyIndex, searhcerCompareKey } from '../utils/consts';\nimport { getSearcherGIcon } from '@/core/utils/searchers';\n\n/**\n * Создание и управление реактивными переменными для выбора ПС\n *\n * @param props - входные props компонента\n * @param mapSearchers - Map ПС (реактивная)\n */\nexport const useSelectSearcher = (\n\tprops: Props,\n\tmapSearchers: ComputedRef<SearcherByKey>,\n) => {\n\tconst i18n = useI18n();\n\n\t/**\n\t * Ключ выбранной поисковой системы\n\t */\n\tconst searcherKey = ref(mapSearchers.value.keys().next().value ?? dummyIndex);\n\n\t/**\n\t * Коллекция опций для выбора ПС\n\t */\n\tconst optionBySearcherKey = computed(() => {\n\t\tconst res: Options = new Map();\n\t\tmapSearchers.value.forEach((searcher) => {\n\t\t\tlet option: Option = {\n\t\t\t\tvalue: searcher.key,\n\t\t\t\ttitle: searcher.name,\n\t\t\t};\n\n\t\t\tif (props.addSearcherIcon) option.icon = getSearcherGIcon(searcher.key);\n\n\t\t\tres.set(searcher.key, option);\n\t\t});\n\n\t\t// добавить режим сравнения, если есть хотя бы одна ПС с одним регионом\n\t\tif (props.addCompare && !res.has(dummyIndex)) {\n\t\t\tconst dummyOption: Option = {\n\t\t\t\tvalue: '',\n\t\t\t\ttitle: '--------------------',\n\t\t\t\tdisabled: true,\n\t\t\t};\n\t\t\tres.set(dummyOption.value, dummyOption);\n\n\t\t\tconst compareOption: Option = {\n\t\t\t\tvalue: searhcerCompareKey,\n\t\t\t\ttitle: i18n.Common.Compare!,\n\t\t\t};\n\t\t\tres.set(compareOption.value, compareOption);\n\t\t}\n\n\t\treturn res;\n\t});\n\n\treturn {\n\t\tsearcherKey,\n\t\toptionBySearcherKey,\n\t};\n};\n","import { computed, type ComputedRef, ref, watch } from 'vue';\nimport { useI18n } from '@/core/plugins/i18n';\nimport { getDeviceGIcon, getLangLabel } from '@/core/utils/searchers';\nimport type { Option } from '@/components/forms/select/types';\nimport { dummyIndex } from '../utils/consts';\nimport type { Props, Region, SearcherIndexed } from '../types';\n\n/**\n * Создание и управление реактивными переменными для выбора региона\n *\n * @param props - входные props компонента\n * @param activeSearcherIndexed - объект активной поисковой системы (реактивная)\n */\nexport const useSelectRegion = (props: Props, activeSearcherIndexed: ComputedRef<SearcherIndexed>) => {\n\tconst i18n = useI18n();\n\n\t/**\n\t * Индекс выбранного региона\n\t */\n\tconst regionIndex = ref(dummyIndex);\n\n\tif (props.modelValue.length === 1) {\n\t\tregionIndex.value = props.modelValue[0];\n\t}\n\n\tif (regionIndex.value === dummyIndex) {\n\t\tif (props.forFrequency) {\n\t\t\t// в качетсве ключа используется region.key, а не region.index\n\t\t\tregionIndex.value = activeSearcherIndexed.value?.regionByIndex.values().next().value?.key ?? dummyIndex;\n\t\t} else {\n\t\t\tregionIndex.value = activeSearcherIndexed.value?.regionByIndex.keys().next().value ?? dummyIndex;\n\t\t}\n\t}\n\n\t/**\n\t * Коллекция опций для выбора региона\n\t */\n\tconst optionByRegionIndex = computed(() => {\n\t\tconst options = new Map<number, Option>();\n\n\t\tactiveSearcherIndexed.value.regionByIndex?.forEach((region) => {\n\t\t\tlet regionLabel = region.name;\n\n\t\t\t// на частоту в текущей версии устройство и язык не влияют\n\t\t\t// обратите внимание, в качетсве ключа используется region.key, а не region.index\n\t\t\tif (props.forFrequency) {\n\t\t\t\tconst option: Option = {\n\t\t\t\t\tvalue: region.key,\n\t\t\t\t\ttitle: regionLabel,\n\t\t\t\t};\n\t\t\t\tif (!options.has(region.key)) options.set(region.key, option);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (region.device) {\n\t\t\t\tregionLabel += ' (' + i18n.Common['Device_' + region.device] + ')';\n\t\t\t}\n\n\t\t\tconst langLabel = getLangLabel(activeSearcherIndexed.value.key || 0, region.lang ?? '');\n\t\t\tif (langLabel) regionLabel += ' / ' + langLabel;\n\n\t\t\tconst option: Option = {\n\t\t\t\tvalue: region.index,\n\t\t\t\ttitle: regionLabel,\n\t\t\t\ticon: region.device ? getDeviceGIcon(region.device) : undefined,\n\t\t\t};\n\n\t\t\toptions.set(region.index, option);\n\t\t});\n\n\t\treturn options;\n\t});\n\n\t/**\n\t * Выбор максимально похожего региона в новой коллекции регионов\n\t */\n\twatch(optionByRegionIndex, (optionByRegionIndex, oldOptionByRegionIndex) => {\n\t\tif (props.onlySearcher || regionIndex.value !== undefined && optionByRegionIndex.get(regionIndex.value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet newRegionIndex = optionByRegionIndex.keys().next().value as Region['index'];\n\t\tif (regionIndex.value === dummyIndex || newRegionIndex === dummyIndex) {\n\t\t\tregionIndex.value = newRegionIndex;\n\n\t\t\treturn;\n\t\t}\n\n\t\tlet regionName = (oldOptionByRegionIndex?.get(regionIndex.value) as Option)?.title || '';\n\t\tlet regionMatchLevel = -1;\n\t\tfor (const [index, option] of optionByRegionIndex.entries()) {\n\t\t\tconst title = (option as Option).title;\n\n\t\t\tif (typeof title !== 'string' || typeof index === 'string') {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// полное совпадение\n\t\t\tif (title === regionName) {\n\t\t\t\tnewRegionIndex = index;\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst regexpDevice = new RegExp(` \\\\((${i18n.Common['Device_1']}|${i18n.Common['Device_2']})\\\\)`);\n\t\t\tlet regionNameCompare = regionName;\n\t\t\tlet regionMatchLevelI = 3;\n\n\t\t\t// без устройства\n\t\t\tif (title.indexOf(regionNameCompare) === -1) {\n\t\t\t\tregionNameCompare = regionName.replace(/^[^a-zа-я]/i, '').replace(regexpDevice, '');\n\n\t\t\t\tregionMatchLevelI--;\n\t\t\t}\n\n\t\t\t// без языка\n\t\t\tif (title.indexOf(regionNameCompare) === -1) {\n\t\t\t\tregionNameCompare = regionName.replace(/ \\/.*/, '');\n\n\t\t\t\tregionMatchLevelI--;\n\t\t\t}\n\n\t\t\t// без устройства и без языка\n\t\t\tif (title.indexOf(regionNameCompare) === -1) {\n\t\t\t\tregionNameCompare = regionName.replace(/ \\/.*/, '');\n\t\t\t\tregionNameCompare = regionNameCompare.replace(/^[^a-zа-я]/i, '').replace(regexpDevice, '');\n\n\t\t\t\tregionMatchLevelI--;\n\t\t\t}\n\n\t\t\tif (title.indexOf(regionNameCompare) === -1) continue;\n\t\t\tif (regionMatchLevelI <= regionMatchLevel) continue;\n\n\t\t\tregionMatchLevel = regionMatchLevelI;\n\t\t\tnewRegionIndex = index;\n\t\t}\n\n\t\tregionIndex.value = newRegionIndex;\n\t});\n\n\treturn {\n\t\tregionIndex,\n\t\toptionByRegionIndex,\n\t};\n};\n","import { type ComputedRef, ref, watch } from 'vue';\nimport type { Props, SearcherByKey } from '../types';\n\n/**\n * Создание и управление реактивными переменными для сравнения\n *\n * @param props - входные props компонента\n * @param searcherByKey - Map ПС (реактивная)\n * @param allRegionsIndexes - Все доступные индексы регионов (реактивная)\n */\nexport const useCompare = (props: Props, searcherByKey: ComputedRef<SearcherByKey>, allRegionsIndexes: ComputedRef<Set<number>>) => {\n\t/**\n\t * Индексы регионов/ПС в сравнение\n\t */\n\tconst regionsIndexes = ref<number[]>([]);\n\n\t/**\n\t * Загрузка индексов регионов для сравнения\n\t *\n\t * Если в modelValue передано несколько регионов, они будут установлены как выбранные для сравнения\n\t */\n\tconst compareLoad = () => {\n\t\tif (props.onlySearcher && searcherByKey.value) {\n\t\t\tregionsIndexes.value = Array.from(searcherByKey.value.keys());\n\n\t\t\treturn;\n\t\t}\n\n\t\tlet regionsIndexesSaved: Props['modelValue'] = [];\n\n\t\tif (props.modelValue.length > 1) {\n\t\t\tregionsIndexesSaved = [...props.modelValue];\n\t\t} else {\n\t\t\ttry {\n\t\t\t\t// загрузить индексы регионов, если они были сохранены\n\t\t\t\tregionsIndexesSaved = JSON.parse(\n\t\t\t\t\tlocalStorage.getItem('ui:project:regionSelector' + props.projectId + ':regionsIndexes') as string,\n\t\t\t\t) ?? [];\n\t\t\t} catch (e) {\n\n\t\t\t}\n\t\t}\n\n\t\t// убрать из сравнения регионы, которых нет в props.searchers\n\t\tif (regionsIndexesSaved.length) {\n\t\t\tregionsIndexesSaved = regionsIndexesSaved.filter((regionIndex) => {\n\t\t\t\treturn allRegionsIndexes.value.has(regionIndex);\n\t\t\t});\n\t\t}\n\n\t\t// если не сохранено ни одного региона, выбрать все регионы проекта\n\t\tif (!regionsIndexesSaved.length) {\n\t\t\tregionsIndexesSaved = Array.from(allRegionsIndexes.value);\n\t\t}\n\n\t\tregionsIndexes.value = [...regionsIndexesSaved];\n\t};\n\n\t/**\n\t * Сохранение выбранных регионов\n\t */\n\tconst compareSave = () => {\n\t\tif (regionsIndexes.value.length) {\n\t\t\tlocalStorage.setItem('ui:project:regionSelector:' + props.projectId + ':regionsIndexes', JSON.stringify(regionsIndexes.value));\n\t\t} else {\n\t\t\tlocalStorage.removeItem('ui:project:regionSelector:' + props.projectId + ':regionsIndexes');\n\t\t}\n\t};\n\n\twatch(regionsIndexes, () => {\n\t\tcompareSave();\n\t});\n\n\tif (props.addCompare) {\n\t\t// if (props.compareRegionsIndexes?.length) {\n\t\t// \tcompareRegionsIndexes.value = [...props.compareRegionsIndexes];\n\t\t// } else {\n\t\t// \tcompareLoad();\n\t\t// }\n\n\t\tcompareLoad();\n\t}\n\n\treturn {\n\t\tregionsIndexes,\n\t};\n};\n","import { computed, watch } from 'vue';\nimport { findRegion, genSearcherByKey } from '../utils/utils';\nimport { dummyIndex, globalRegionIndex, searcherUndefined, searhcerCompareKey } from '../utils/consts';\nimport type { Props, Region, SearcherIndexed } from '../types';\nimport { useSelectSearcher } from './selectSearcher';\nimport { useSelectRegion } from './selectRegion';\nimport { useCompare } from './compare';\n\n/**\n * Создание и управления рективными переменными компонента\n *\n * @param props - входные props компонента\n */\nexport const useSelectorRegion = (props: Props) => {\n\tconst searcherByKey = computed(() => {\n\t\treturn genSearcherByKey(props.forFrequency, props.autoRegion, props.searchers);\n\t});\n\n\tconst activeSearcherIndexed = computed(() => {\n\t\treturn searcherByKey.value.get(selectSearcher.searcherKey.value) || searcherUndefined;\n\t});\n\n\t/**\n\t * Все индексы регионов из searcherByKey\n\t *\n\t * Активность регионов определяется в searcherByKey\n\t */\n\tconst allRegionsIndexes = computed(() => {\n\t\tconst regionsIndexes = new Set<number>();\n\n\t\tsearcherByKey.value.forEach((searcher) => {\n\t\t\tsearcher.regionByIndex.forEach((region) => {\n\t\t\t\tif (region.index === globalRegionIndex) return;\n\t\t\t\tif (region.index === dummyIndex) return;\n\n\t\t\t\tregionsIndexes.add(region.index);\n\t\t\t});\n\t\t});\n\n\t\treturn regionsIndexes;\n\t});\n\n\tconst selectSearcher = useSelectSearcher(props, searcherByKey);\n\tconst selectRegion = useSelectRegion(props, activeSearcherIndexed);\n\tconst compare = useCompare(props, searcherByKey, allRegionsIndexes);\n\n\t// контроль за внешним изменением списка ПС\n\twatch(searcherByKey, () => {\n\t\t// возможные значения для сравнения регионов/пс\n\t\tif (props.onlySearcher) {\n\t\t\tcompare.regionsIndexes.value = Array.from(searcherByKey.value.keys());\n\t\t} else {\n\t\t\tcompare.regionsIndexes.value = compare.regionsIndexes.value.filter(regionIndex => {\n\t\t\t\treturn allRegionsIndexes.value.has(regionIndex);\n\t\t\t});\n\t\t}\n\n\t\tif (selectSearcher.searcherKey.value === searhcerCompareKey) return;\n\n\t\tlet newSearcherKey = searcherByKey.value.keys().next().value;\n\n\t\tsearcherByKey.value.forEach((searcher) => {\n\t\t\t// определить выбранную ПС\n\t\t\tif (props.onlySearcher && searcher.key === selectSearcher.searcherKey.value) {\n\t\t\t\tnewSearcherKey = selectSearcher.searcherKey.value;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tselectRegion.regionIndex.value &&\n\t\t\t\tsearcher.regionByIndex?.has(selectRegion.regionIndex.value)\n\t\t\t) {\n\t\t\t\tnewSearcherKey = searcher.key;\n\t\t\t}\n\n\t\t\t// выбрать первую ПС с выбранным регионом\n\t\t\tif (!props.onlySearcher) {\n\t\t\t\tlet regionsNewSearcher: SearcherIndexed['regionByIndex'] | undefined;\n\n\t\t\t\tif (newSearcherKey !== undefined) {\n\t\t\t\t\tregionsNewSearcher = searcherByKey.value.get(newSearcherKey)?.regionByIndex;\n\t\t\t\t}\n\n\t\t\t\tconst regionsCurrentSearcher = searcherByKey.value.get(searcher.key)?.regionByIndex;\n\t\t\t\tif (\n\t\t\t\t\tregionsNewSearcher?.has(dummyIndex) &&\n\t\t\t\t\t!regionsCurrentSearcher?.has(dummyIndex)\n\t\t\t\t) {\n\t\t\t\t\tnewSearcherKey = searcher.key;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// if (props.addCompare && !selectSearcher.optionBySearcherKey.value.has(dummyIndex)) {\n\t\t// \tif (!selectRegion.regionIndex.value && compare.regionsIndexes.value?.length) newSearcherKey = searhcerCompareKey;\n\t\t// }\n\n\t\t// if (props.onlySearcher && selectRegion.regionIndex.value !== dummyIndex) newSearcherKey = selectRegion.regionIndex.value;\n\n\t\tif (newSearcherKey !== undefined) {\n\t\t\tselectSearcher.searcherKey.value = newSearcherKey;\n\t\t}\n\n\t\tif (\n\t\t\tselectRegion.regionIndex.value !== undefined &&\n\t\t\t!(activeSearcherIndexed.value?.regionByIndex)?.has(selectRegion.regionIndex.value)\n\t\t) {\n\t\t\tselectRegion.regionIndex.value = activeSearcherIndexed.value?.regions?.keys().next().value as number;\n\t\t}\n\t}, { immediate: true });\n\n\tconst getSearcherKey = () => {\n\t\tif (selectSearcher.searcherKey.value === searhcerCompareKey || selectSearcher.searcherKey.value === dummyIndex) return;\n\n\t\treturn selectSearcher.searcherKey.value;\n\t};\n\n\tconst getRegionIndex = () => {\n\t\tif (props.onlySearcher) return;\n\n\t\tif (selectRegion.regionIndex.value === dummyIndex) return;\n\n\t\tlet res: Region['index'] | undefined = selectRegion.regionIndex.value;\n\n\t\t// в качестве ключа используется region.key\n\t\tif (props.forFrequency) {\n\t\t\tconst regionKey = selectRegion.regionIndex.value;\n\t\t\tconst region = findRegion(props.forFrequency, { searcher_key: getSearcherKey(), key: regionKey } as Region, props.searchers);\n\n\t\t\tres = region?.index;\n\t\t}\n\n\t\treturn res;\n\t};\n\n\t/**\n\t * Получить выбранную ПС\n\t */\n\tconst getSearcher = () => {\n\t\tconst searcherKey = getSearcherKey();\n\t\tif (searcherKey === undefined) return;\n\n\t\treturn searcherByKey.value.get(searcherKey);\n\t};\n\n\t/**\n\t * Получить выбранный регион\n\t */\n\tconst getRegion = () => {\n\t\tconst regionIndex = getRegionIndex();\n\t\tif (regionIndex === undefined) return;\n\n\t\treturn getSearcher()?.regionByIndex?.get(regionIndex);\n\t};\n\n\treturn {\n\t\tselectSearcher,\n\t\tselectRegion,\n\t\tcompare,\n\n\t\tsearcherByKey,\n\t\tallRegionsIndexes,\n\n\t\tgetSearcher,\n\t\tgetRegion,\n\t};\n};\n","<script setup lang=\"ts\">\nimport { watch } from 'vue';\nimport type { Props, Region } from './types';\nimport Select from '@/components/forms/select/select.vue';\nimport Button from '@/components/forms/button/button.vue';\nimport { useSelectorRegion } from './composables/selectorRegion';\nimport { dummyIndex, globalRegionIndex, searhcerCompareKey } from './utils/consts';\nimport { dialogSelectorRegions } from '@/components/project/selectorRegion/utils/utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsearchers: () => [],\n\t// compareRegionsIndexes: () => [],\n\taddSearcherIcon: true,\n\taddRegionIcon: true,\n\taddChanger: true,\n});\n\nconst model = defineModel<Props['modelValue']>({ required: true });\nconst modelSingle = defineModel<Props['modelValueSingle']>('modelValueSingle');\n\nconst {\n\tselectSearcher,\n\tselectRegion,\n\tcompare,\n\n\tsearcherByKey,\n\tallRegionsIndexes,\n\n\tgetSearcher,\n\tgetRegion,\n} = useSelectorRegion(props);\n\nconst onClickCompare = () => {\n\tconst regions: Region[] = [];\n\n\tsearcherByKey.value.forEach((searcher) => {\n\t\tif (!searcher.enabled) return;\n\n\t\tsearcher.regions.forEach((region) => {\n\t\t\tif (!region.enabled) return;\n\n\t\t\tregions.push(region);\n\t\t});\n\t});\n\n\tdialogSelectorRegions.open('selectorRegions', {\n\t\tregions,\n\t\tregionsIndexes: compare.regionsIndexes.value,\n\t\t'@update:regionsIndexes': (regionsIndexes: number[]) => compare.regionsIndexes.value = regionsIndexes,\n\t});\n};\n\nwatch([selectRegion.regionIndex, selectSearcher.searcherKey, compare.regionsIndexes], () => {\n\tif (selectSearcher.searcherKey.value === searhcerCompareKey && compare.regionsIndexes.value.length) {\n\t\tif (JSON.stringify(model.value) === JSON.stringify(compare.regionsIndexes.value)) {\n\t\t\treturn;\n\t\t}\n\n\t\tmodel.value = [...compare.regionsIndexes.value];\n\t} else {\n\t\tif (props.onlySearcher) {\n\t\t\tmodel.value = [selectSearcher.searcherKey.value];\n\n\t\t\tif (selectSearcher.searcherKey.value === dummyIndex && !props.autoRegion) model.value.length = 0;\n\t\t} else {\n\t\t\tmodel.value = [selectRegion.regionIndex.value];\n\n\t\t\t// не добавлять несуществующий регион в результаты\n\t\t\tif (selectRegion.regionIndex.value === dummyIndex && !props.autoRegion) model.value.length = 0;\n\t\t}\n\t}\n\n\t// регионов нет\n\tif (!props.onlySearcher && !allRegionsIndexes.value.size) {\n\t\tselectSearcher.searcherKey.value = dummyIndex;\n\t}\n});\n\nif (modelSingle.value) {\n\twatch(modelSingle, () => {\n\t\tif (modelSingle.value) {\n\t\t\tmodel.value = [modelSingle.value];\n\t\t}\n\t}, { immediate: true });\n}\n\nwatch(model, () => {\n\tif (model.value[0]) {\n\t\tmodelSingle.value = model.value[0];\n\t}\n\n\t// проверка входных данных v-model на корректность\n\tif (props.onlySearcher) {\n\t\tif (\n\t\t\t!model.value.length ||\n\t\t\tmodel.value.length === 1 && !searcherByKey.value.has(model.value[0]) ||\n\t\t\tmodel.value.length === 1 && model.value[0] === dummyIndex && !props.autoRegion\n\t\t) {\n\t\t\tlet defaultKey: number | undefined = searcherByKey.value.keys().next().value;\n\n\t\t\t// запретить устанавливать несуществующий регион\n\t\t\tif (defaultKey === dummyIndex && !props.autoRegion) {\n\t\t\t\tdefaultKey = undefined;\n\n\t\t\t\tmodelSingle.value = dummyIndex;\n\t\t\t}\n\n\t\t\tif (defaultKey !== undefined) {\n\t\t\t\tmodel.value = [defaultKey];\n\t\t\t}else{\n\t\t\t\tmodel.value.length = 0;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tmodel.value.length > 1 &&\n\t\t\tJSON.stringify(model.value) !== JSON.stringify(compare.regionsIndexes.value)\n\t\t) {\n\t\t\tmodel.value = [...compare.regionsIndexes.value];\n\n\t\t\treturn;\n\t\t}\n\t} else {\n\t\tlet newModel = [...new Set(model.value)];\n\n\t\tlet defaultIndex = searcherByKey.value.values().next().value?.regionByIndex?.keys().next().value;\n\t\tif (props.forFrequency) {\n\t\t\tdefaultIndex = searcherByKey.value.values().next().value?.regionByIndex?.values().next().value?.key;\n\t\t}\n\n\t\t// запретить устанавливать несуществующий регион\n\t\tif (defaultIndex === dummyIndex && !props.autoRegion) {\n\t\t\tdefaultIndex = undefined;\n\n\t\t\tmodelSingle.value = dummyIndex;\n\t\t}\n\n\t\tif (!newModel.length) {\n\t\t\tif (defaultIndex !== undefined) {\n\t\t\t\tnewModel.push(defaultIndex);\n\t\t\t}\n\t\t} else if (newModel.length === 1) {\n\t\t\tlet all = allRegionsIndexes.value;\n\n\t\t\tif (props.forFrequency) {\n\t\t\t\tall = new Set();\n\t\t\t\tsearcherByKey.value.forEach((searcher) => {\n\t\t\t\t\tsearcher.regionByIndex.forEach((region) => {\n\t\t\t\t\t\tif (region.index === globalRegionIndex) return;\n\t\t\t\t\t\tif (region.index === dummyIndex) return;\n\n\t\t\t\t\t\tall.add(region.key);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// убрано, так как dummyIndex запрещено выбирать в model\n\t\t\t// if (!all.has(newModel[0]) && newModel[0] !== dummyIndex) {\n\t\t\tif (!all.has(newModel[0])) {\n\t\t\t\tnewModel = [];\n\t\t\t\tif (defaultIndex !== undefined) {\n\t\t\t\t\tnewModel.push(defaultIndex);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tnewModel = newModel.filter(index => allRegionsIndexes.value.has(index));\n\t\t\tif (!newModel.length && defaultIndex !== undefined) {\n\t\t\t\tnewModel.push(defaultIndex);\n\t\t\t}\n\t\t}\n\n\t\tif (JSON.stringify(model.value) !== JSON.stringify(newModel)) {\n\t\t\tmodel.value = newModel;\n\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// входные данные v-model совпадают с внутренними значениями\n\tif (\n\t\tmodel.value.length === 1 &&\n\t\tmodel.value[0] === (props.onlySearcher ? selectSearcher.searcherKey.value : selectRegion.regionIndex.value)\n\t) {\n\t\treturn;\n\t}\n\n\t// if (\n\t// \tmodel.value.length > 1 &&\n\t// \tselectorSearcher.searcherKey.value === searhcerCompareKey &&\n\t// \tJSON.stringify(model.value) === JSON.stringify(selectorCompare.regionsIndexes.value)\n\t// ) {\n\t// \treturn;\n\t// }\n\n\t// обновление regionIndex, searcherKey, selectorCompare.regionsIndexes\n\tif (props.onlySearcher) {\n\t\t// if (!model.value.length) {\n\t\t// \tselectorSearcher.searcherKey.value = dummyIndex;\n\t\t//\n\t\t// \treturn;\n\t\t// }\n\n\t\tif (model.value.length === 1) {\n\t\t\tselectSearcher.searcherKey.value = model.value[0];\n\n\t\t\treturn;\n\t\t}\n\n\t\tselectSearcher.searcherKey.value = searhcerCompareKey;\n\n\t\treturn;\n\t} else {\n\t\tif (!model.value.length) {\n\t\t\t// selectSearcher.searcherKey.value = dummyIndex;\n\t\t\t// selectRegion.regionIndex.value = dummyIndex;\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (model.value.length === 1 && selectSearcher.searcherKey.value !== searhcerCompareKey) {\n\t\t\tselectRegion.regionIndex.value = model.value[0];\n\n\t\t\tlet newSearherKey: number | undefined;\n\t\t\tfor (const searcher of searcherByKey.value.values()) {\n\t\t\t\tfor (const region of searcher.regionByIndex.values()) {\n\t\t\t\t\tconst currentRegionIndex = props.forFrequency ? region.key : region.index;\n\t\t\t\t\tif (currentRegionIndex === selectRegion.regionIndex.value) {\n\t\t\t\t\t\tnewSearherKey = searcher.key;\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (newSearherKey !== undefined) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (newSearherKey !== undefined) {\n\t\t\t\tselectSearcher.searcherKey.value = newSearherKey;\n\t\t\t}\n\t\t} else {\n\t\t\tselectSearcher.searcherKey.value = searhcerCompareKey;\n\t\t\tcompare.regionsIndexes.value = [...model.value];\n\t\t}\n\t}\n}, { immediate: true });\n\ndefineExpose({\n\tgetSearcher,\n\tgetRegion,\n});\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-selectorRegion': true,\n\t\t\t'top-selectorRegion-onlySearcher': onlySearcher,\n\t\t}\"\n\t>\n\t\t<Select\n\t\t\t:options=\"selectSearcher.optionBySearcherKey.value\"\n\t\t\tv-model=\"selectSearcher.searcherKey.value\"\n\t\t\tname=\"searcher_key\"\n\t\t\t:addChanger=\"addChanger\"\n\t\t/>\n\n\t\t<Select\n\t\t\tv-if=\"!onlySearcher && selectSearcher.searcherKey.value !== searhcerCompareKey\"\n\t\t\tclass=\"top-select-region\"\n\t\t\t:options=\"selectRegion.optionByRegionIndex.value\"\n\t\t\tv-model=\"selectRegion.regionIndex.value\"\n\t\t\t:name=\"forFrequency ? 'region_key' : 'region_index'\"\n\t\t\t:addChanger=\"addChanger\"\n\t\t\t:data-top-icon=\"addRegionIcon ? '' : undefined\"\n\t\t/>\n\n\t\t<Button\n\t\t\tv-if=\"addCompare && !onlySearcher && selectSearcher.searcherKey.value === searhcerCompareKey\"\n\t\t\tname=\"compare\"\n\t\t\t@click=\"onClickCompare\"\n\t\t\t:data-count-compare-regions-indexes=\"compare.regionsIndexes.value.length\"\n\t\t>\n\t\t\t{{ $i18n.Common.Selected_regions }}\n\t\t</Button>\n\t</div>\n</template>\n\n<style>\n@import \"./styles/searcherColors.css\";\n\n.top-selectorRegion {\n\twidth: 340px;\n\tdisplay: inline-flex;\n\tvertical-align: middle;\n}\n\n.top-selectorRegion > .top-select {\n\tflex-grow: 1;\n}\n\n.top-selectorRegion > .top-select:focus-within {\n\tz-index: 4;\n}\n\n.top-selectorRegion > .top-select > .top-select_select:hover,\n.top-selectorRegion > .top-select > .top-select_select.top-error {\n\tz-index: 1;\n}\n\n.top-selectorRegion > .top-select-searcher_key {\n\twidth: 140px;\n\tmax-width: 160px;\n\tmargin-right: -1px;\n}\n\n.top-selectorRegion > .top-select-region > select {\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n}\n\n.top-selectorRegion > .top-select-region {\n\t--top-icon-size: 20px;\n\t--top-icon-color: var(--color-text-primary);\n\n\t--top-icon2-size: 20px;\n\t--top-icon2-color: var(--color-text-primary);\n}\n\n.top-selectorRegion > .top-select-region[data-top-icon][data-top-icon2] {\n\t--top-icon2-size: 16px;\n}\n\n.top-selectorRegion > .top-select-region[data-top-icon][data-top-icon2]:after {\n\ttext-indent: -4px;\n}\n\n.top-selectorRegion > [name=\"compare\"] {\n\tborder-top-left-radius: 0;\n\tborder-bottom-left-radius: 0;\n\tflex-grow: 1;\n}\n\n.top-selectorRegion > [name=\"compare\"]:after {\n\tcontent: \"(\" attr(data-count-compare-regions-indexes) \")\";\n\tmargin: 0 0 0 6px;\n}\n\n.top-selectorRegion:not(.top-selectorRegion-onlySearcher) > .top-select-searcher_key > select {\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n\tmargin-right: 0;\n}\n\n.top-selectorRegion:not(.top-selectorRegion-onlySearcher) > .top-select-searcher_key[data-value=\"-1\"] > select {\n\tborder-right: none;\n}\n\n.top-selectorRegion-onlySearcher {\n\twidth: 140px;\n}\n</style>\n","import type { Tag } from './types';\n\nexport default [\n\t{\n\t\tid: '1',\n\t\tname: 'Without Tag',\n\t\tcolor_id: '1',\n\t},\n\t{\n\t\tid: '2',\n\t\tname: 'Red',\n\t\tcolor_id: '2',\n\t},\n\t{\n\t\tid: '3',\n\t\tname: 'Orange',\n\t\tcolor_id: '3',\n\t},\n\t{\n\t\tid: '4',\n\t\tname: 'Yellow',\n\t\tcolor_id: '4',\n\t},\n\t{\n\t\tid: '5',\n\t\tname: 'Blue',\n\t\tcolor_id: '5',\n\t},\n\t{\n\t\tid: '6',\n\t\tname: 'Purple',\n\t\tcolor_id: '6',\n\t},\n\t{\n\t\tid: '7',\n\t\tname: 'Green',\n\t\tcolor_id: '7',\n\t},\n\t{\n\t\tid: '8',\n\t\tname: 'Magenta',\n\t\tcolor_id: '8',\n\t},\n\t{\n\t\tid: '9',\n\t\tname: 'Dark blue',\n\t\tcolor_id: '9',\n\t},\n\t{\n\t\tid: '10',\n\t\tname: 'Turquoise',\n\t\tcolor_id: '10',\n\t},\n] as Tag[];\n","import type { Props as TagSelectorOpenerProps } from '../popupOpener/types';\nimport type { Tag, TagIdExclude } from '../types';\n\n/**\n * Полуичить значение исключения тега tagId\n */\nexport const genTagIdExcluded = (tagId: Tag['id']): TagIdExclude => {\n\treturn '-' + tagId as TagIdExclude;\n};\n\n/**\n * Вернуть чистый tagId без exclude флага\n */\nexport const genTagIdClear = (tagId: Tag['id'] | TagIdExclude) => {\n\tif (tagId[0] === '-') return tagId.substring(1) as Tag['id'];\n\n\treturn tagId as Tag['id'];\n};\n\n/**\n * Получить инфомрацию о теге по его id\n */\nexport const getTagById = (tagId: Tag['id'] | TagIdExclude, tags: TagSelectorOpenerProps['tags']) => {\n\ttagId = genTagIdClear(tagId);\n\n\tconst tag = tags.find(tag => tag.id === tagId);\n\tif (!tag) return;\n\n\treturn tag;\n};\n","<script setup lang=\"ts\">\nimport type { Props } from './types';\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tagSelector_tagIcon': true,\n\t\t\t'top-tagSelector-active': !!state,\n\t\t\t'top-tagSelector-excluded': state === 'excluded',\n\t\t}\"\n\t\t:data-tag_id=\"id\"\n\t\t:data-tag_color_id=\"colorId\"\n\t\t:title=\"name\"\n\t></div>\n</template>\n\n<style>\n[data-tag_id] { display: inline-flex; gap: var(--top-gap-2); align-items: center; }\n\n[data-tag_id=\"\"] { border-color: #bdc3c7 !important; color: #55555F !important; }\n[data-tag_color_id=\"1\"] { border-color: var(--color-tag-1) !important; color: #55555F !important; }\n[data-tag_color_id=\"2\"] { border-color: var(--color-tag-2) !important; color: var(--color-tag-2) !important; }\n[data-tag_color_id=\"3\"] { border-color: var(--color-tag-3) !important; color: var(--color-tag-3) !important; }\n[data-tag_color_id=\"4\"] { border-color: var(--color-tag-4) !important; color: var(--color-tag-4) !important; }\n[data-tag_color_id=\"5\"] { border-color: var(--color-tag-5) !important; color: var(--color-tag-5) !important; }\n[data-tag_color_id=\"6\"] { border-color: var(--color-tag-6) !important; color: var(--color-tag-6) !important; }\n[data-tag_color_id=\"7\"] { border-color: var(--color-tag-7) !important; color: var(--color-tag-7) !important; }\n[data-tag_color_id=\"8\"] { border-color: var(--color-tag-8) !important; color: var(--color-tag-8) !important; }\n[data-tag_color_id=\"9\"] { border-color: var(--color-tag-9) !important; color: var(--color-tag-9) !important; }\n[data-tag_color_id=\"10\"] { border-color: var(--color-tag-10) !important; color: var(--color-tag-10) !important; }\n\n[data-tag_id=\"\"].top-tagSelector-active { background: #bdc3c7 !important; }\n[data-tag_color_id=\"1\"].top-tagSelector-active { background: var(--color-tag-1) !important; }\n[data-tag_color_id=\"2\"].top-tagSelector-active { background: var(--color-tag-2) !important; }\n[data-tag_color_id=\"3\"].top-tagSelector-active { background: var(--color-tag-3) !important; }\n[data-tag_color_id=\"4\"].top-tagSelector-active { background: var(--color-tag-4) !important; }\n[data-tag_color_id=\"5\"].top-tagSelector-active { background: var(--color-tag-5) !important; }\n[data-tag_color_id=\"6\"].top-tagSelector-active { background: var(--color-tag-6) !important; }\n[data-tag_color_id=\"7\"].top-tagSelector-active { background: var(--color-tag-7) !important; }\n[data-tag_color_id=\"8\"].top-tagSelector-active { background: var(--color-tag-8) !important; }\n[data-tag_color_id=\"9\"].top-tagSelector-active { background: var(--color-tag-9) !important; }\n[data-tag_color_id=\"10\"].top-tagSelector-active { background: var(--color-tag-10) !important; }\n\n[data-tag_id=\"all\"] {\n\tborder-color: transparent !important; background: none !important;\n}\n\n[data-tag_id=\"all\"]:before {\n\tcontent: \"\";\n\tcolor: var(--color-tag-all) !important;\n\tfont-size: 26px;\n\tmin-width: calc(100% + 4px);\n\theight: calc(100% + 4px);\n\tmargin-top: -18px;\n\tmargin-left: -8px;\n}\n\n/* в кнопке выбора тэгов и в popup */\n.top-tagSelector-filter [data-tag_id],\n.top-tagSelector_popup [data-tag_id] {\n\t--top-tag-selector-size: 10px;\n\n\tbox-sizing: content-box;\n\tborder-radius: 100%; border: 2px solid var(--color-layout-front-1); background: var(--color-layout-front-1);\n\twidth: var(--top-tag-selector-size);\n\theight: var(--top-tag-selector-size);\n\tfont-size: calc(var(--top-tag-selector-size) + 4px);\n\t/*font-family: inherit !important;*/\n}\n\n/* исключение тегов */\n.top-body-press_ctrl .top-tagSelector_tagListItem-canExclude:hover [data-tag_id],\n[data-tag_id].top-tagSelector-excluded { position: relative; }\n\n.top-body-press_ctrl .top-tagSelector_tagListItem-canExclude:hover [data-tag_id]:before,\n[data-tag_id].top-tagSelector-excluded:before {\n\tcontent: \"\";\n\twidth: calc(var(--top-tag-selector-size) * 2); height: 1px; background: inherit;\n\ttransform: rotate(-45deg); filter: brightness(80%);\n\tdisplay: block;\n\tposition: absolute; top: calc(var(--top-tag-selector-size) / 2); left: calc(0px - var(--top-tag-selector-size) / 2);\n}\n.top-body-press_ctrl .top-tagSelector_tagListItem-canExclude:hover [data-tag_id]:not([data-tag_id=\"all\"]):not(.top-tagSelector-active):before { background: #AAA; }\n[data-tag_id].top-tagSelector-excluded:after,\n[data-tag_id].top-tagSelector-excluded ~ .top-tagSelector_tagListItemName { text-decoration: line-through; }\n\n/* popup */\n.top-popup_listItem.top-tagSelector-active { background: var(--top-popup-background-color-active) !important; }\n\n.top-popup_listItem:hover [data-tag_id=\"all\"]:before { border-color: var(--top-popup-background-color-hover); }\n.top-popup_listItem.top-tagSelector-active [data-tag_id=\"all\"]:before,\n.top-popup_listItem.top-active [data-tag_id=\"all\"]:before { border-color: var(--top-popup-background-color-active); }\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from 'vue';\nimport type { Emits, Props } from './types';\nimport TopTagIcon from '../tagIcon/tagIcon.vue';\nimport TopPopupListItem from '@/components/popup/popup/listItem.vue';\n\nconst props = defineProps<Props>();\nconst emit = defineEmits<Emits>();\n\nconst name = defineModel<Props['name']>('name', {\n\trequired: true,\n});\n\nconst elName = ref<HTMLElement | null>(null);\n\n/**\n * @todo Удалить через пол года после выхода версии firefox с поддержкой contenteditable plaintext-only, включая бета версии\n */\nconst firefoxProps = computed(() => {\n\tif (navigator.userAgent.indexOf('Firefox') != -1) {\n\n\t\treturn {\n\t\t\tcontenteditable: inEdit.value,\n\t\t\tonpaste: (event: Event) => event.preventDefault(),\n\t\t};\n\t}\n\n\treturn {};\n});\n\n/**\n * Включен режим редактирвоания\n */\nconst inEdit = ref(false);\n\n/**\n * Включить режим редактирование\n */\nconst turnToEdit = async () => {\n\tinEdit.value = true;\n\n\tawait nextTick();\n\n\telName.value?.focus();\n};\n\n/**\n * Применить редактирование\n */\nconst editCommit = () => {\n\tconst name = elName.value?.innerText;\n\tif (!name) return editCancel();\n\n\tif (elName.value) elName.value.innerText = name;\n\n\tinEdit.value = false;\n\n\temit('update:name', name);\n};\n\n/**\n * Отменить редактирование\n */\nconst editCancel = async () => {\n\tif (elName.value) elName.value.innerText = props.name;\n\n\tinEdit.value = false;\n};\n\n/**\n * Применить выбор\n */\nconst changeSelect = (e: MouseEvent) => {\n\t// в режиме редактирования выбор не применяется\n\tif (inEdit.value) return;\n\n\t// тег запрещено выбирать\n\tif (props.disabled) return;\n\n\tlet toState: Props['state'] = 'selected';\n\n\tif (props.canExclude) {\n\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\ttoState = 'excluded';\n\t\t}\n\t}\n\n\tif (props.state == toState) {\n\t\ttoState = '';\n\t}\n\n\tif (toState === '') emit('unselect');\n\tif (toState === 'selected') emit('select');\n\tif (toState === 'excluded') emit('exclude');\n};\n</script>\n\n<template>\n\t<TopPopupListItem\n\t\t:class=\"{\n\t\t\t'top-tagSelector_tagListItem': true,\n\t\t\t'top-tagSelector_tagListItem-inEdit': inEdit,\n\t\t\t'top-tagSelector_tagListItem-disabled': disabled,\n\t\t\t'top-tagSelector_tagListItem-canExclude': canExclude,\n\t\t\t'top-tagSelector-active': !!state,\n\t\t\t'top-tagSelector-excluded': state === 'excluded'\n\t\t}\"\n\t\t@click.stop=\"changeSelect\"\n\t>\n\t\t<TopTagIcon\n\t\t\t:id\n\t\t\t:name\n\t\t\t:colorId\n\t\t\t:state\n\t\t/>\n\n\t\t<span\n\t\t\tref=\"elName\"\n\t\t\tclass=\"top-tagSelector_tagListItemName\"\n\t\t\t:contenteditable=\"inEdit ? 'plaintext-only' : false\"\n\t\t\t:=\"firefoxProps\"\n\t\t\t@keydown.enter.stop=\"editCommit\"\n\t\t\t@keydown.esc.stop=\"editCancel\"\n\t\t>\n\t\t\t{{ name }}\n\t\t</span>\n\n\t\t<template v-if=\"editable\">\n\t\t\t<span\n\t\t\t\tv-if=\"!inEdit\"\n\t\t\t\tdata-top-icon=\"\"\n\t\t\t\tclass=\"top-tagSelector_edit\"\n\t\t\t\t@click=\"turnToEdit\"\n\t\t\t></span>\n\n\t\t\t<span\n\t\t\t\tv-else\n\t\t\t\tdata-top-icon=\"\"\n\t\t\t\tclass=\"top-tagSelector_edit\"\n\t\t\t\t@click.stop=\"editCommit\"\n\t\t\t></span>\n\t\t</template>\n\t</TopPopupListItem>\n</template>\n\n<style>\n.top-tagSelector_tagListItem.top-popup_listItem {\n\tpadding-top: var(--top-padding-2) !important;\n\tpadding-bottom: var(--top-padding-2) !important;\n\tgap: 10px;\n}\n\n.top-tagSelector_tagListItemName {\n\tborder-radius: var(--top-radius-1);\n\twidth: 120px;\n\tpadding: 4px 2px;\n\tmargin: -4px -2px;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\tflex-grow: 1;\n}\n\n/* редактирование */\n.top-tagSelector_edit {\n\t--top-icon-size: 18px;\n\t--top-icon-color: var(--color-text-3);\n\n\twidth: 20px;\n\tflex-grow: 0;\n}\n\n.top-tagSelector_edit:before {\n\tline-height: 0;\n}\n\n.top-tagSelector_edit { opacity: 0; }\n.top-tagSelector_edit:hover {\n\t--top-icon-color: var(--color-text-primary);\n}\n\n.top-tagSelector_tagListItem:hover .top-tagSelector_edit,\n.top-tagSelector_tagListItem-inEdit .top-tagSelector_edit {\n\tcursor: pointer;\n\topacity: 1;\n}\n\n.top-tagSelector_tagListItem-inEdit {\n\tbackground: var(--color-layout-front-3) !important;\n\toutline: 1px dashed var(--color-line-2);\n\toutline-offset: -1px;\n}\n\n.top-tagSelector_tagListItem-inEdit .top-tagSelector_tagListItemName {\n\tcursor: text;\n\tbackground: var(--color-layout-front-1);\n}\n\n/* disabled */\n.top-tagSelector_tagListItem-disabled {\n\tcursor: not-allowed !important;\n\topacity: 0.85;\n}\n.top-tagSelector_tagListItem-disabled:hover {\n\tbackground: inherit;\n}\n.top-tagSelector_tagListItem-disabled [data-tag_id] {\n\topacity: 0.6;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { Props, TagSelectorTarget } from './types';\nimport TopPopupOpener from '../../../popup/popup/opener.vue';\nimport TopButton from '@/components/forms/button/button.vue';\nimport { genTagIdClear, getTagById } from '../utils/utils';\nimport TopTagIcon from '../tagIcon/tagIcon.vue';\n\ndefineOptions({\n\tinheritAttrs: false,\n});\n\nconst props = defineProps<Props>();\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\nconst component = props.useTopButton ? TopButton : 'div';\nconst componentSlotName = props.useTopButton ? 'html' : 'default';\n\nconst topTagSelectorTarget: TagSelectorTarget = {\n\tmodel,\n\tmode: props.mode,\n\ttargetId: props.targetId,\n\tfilters: props.filters,\n\tpayload: props.payload,\n};\n</script>\n\n<template>\n\t<TopPopupOpener :id>\n\t\t<component\n\t\t\t:is=\"component\"\n\t\t\t:class=\"{\n\t\t\t\t'top-tagSelector': true,\n\t\t\t\t'top-tagSelector-filter': props.mode === 'filter',\n\t\t\t\t'top-tagSelector-setter_single': props.mode === 'setter' && !filters,\n\t\t\t\t'top-tagSelector-setter_several': props.mode === 'setter' && filters,\n\t\t\t\t'top-tagSelector-selectedOne': !model.length || model.length === 1,\n\t\t\t\t'top-tagSelector-toTwoLine': model.length > 5,\n\t\t\t}\"\n\t\t\tcolor=\"theme\"\n\t\t\t:styling\n\t\t\tv-top-data:topTagSelectorTarget=\"topTagSelectorTarget\"\n\t\t\t:=$attrs\n\t\t>\n\t\t\t<template #[componentSlotName]>\n\t\t\t\t<TopTagIcon\n\t\t\t\t\tv-if=\"!model.length && mode === 'filter'\"\n\t\t\t\t\tid=\"all\"\n\t\t\t\t\tcolorId=\"\"\n\t\t\t\t\t:name=\"$i18n.Common.All_tags ?? ''\"\n\t\t\t\t\tstate=\"\"\n\t\t\t\t/>\n\n\t\t\t\t<!-- Массовое редактирование -->\n\t\t\t\t<div v-if=\"mode === 'setter' && filters\">\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Список тегов -->\n\t\t\t\t<TopTagIcon\n\t\t\t\t\tv-else\n\t\t\t\t\tv-for=\"tagId in model\"\n\t\t\t\t\t:id=\"genTagIdClear(tagId)\"\n\t\t\t\t\t:colorId=\"getTagById(tagId, tags)?.color_id ?? ''\"\n\t\t\t\t\t:name=\"getTagById(tagId, tags)?.name ?? ''\"\n\t\t\t\t\t:state=\"genTagIdClear(tagId) === tagId ? 'selected' : 'excluded'\"\n\t\t\t\t/>\n\t\t\t</template>\n\t\t</component>\n\t</TopPopupOpener>\n</template>\n\n<style>\n.top-tagSelector {\n\tcursor: pointer;\n\tmin-width: 0;\n\twhite-space: nowrap;\n\tjustify-content: left;\n}\n\n.top-tagSelector.top-button {\n\twidth: 112px;\n\tvertical-align: middle;\n}\n\n.top-tagSelector.top-button.top-as-selector {\n\twidth: calc(112px + 20px);\n}\n\n.top-tagSelector-filter {\n\tgap: var(--top-gap-1);\n}\n\n/* все теги в фильтре */\n.top-tagSelector-filter [data-tag_id=\"all\"]:before {\n\tmargin-right: 6px;\n}\n\n/* фильтр по одному тегу */\n.top-tagSelector-filter.top-tagSelector-selectedOne [data-tag_id]:after {\n\tcontent: attr(title);\n\tmargin-left: 20px;\n\tmin-width: 74px;\n\ttext-align: left;\n\tline-height: 1.2;\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n}\n\n.top-tagSelector-filter.top-tagSelector-selectedOne [data-tag_id=\"all\"]:after {\n\tmargin-left: 0;\n}\n\n/* фильтр по многим тегам */\n.top-button.top-tagSelector-filter.top-tagSelector-toTwoLine {\n\tflex-wrap: wrap;\n\talign-content: center;\n}\n\n.top-button.top-tagSelector-filter.top-tagSelector-toTwoLine [data-tag_id] {\n\t--top-tag-selector-size: 8px;\n}\n\n.top-button.top-tagSelector-filter.top-tagSelector-toTwoLine [data-tag_id]:nth-child(5) {\n\tmargin-right: 5px;\n}\n\n/* установка тегов */\n.top-tagSelector-setter_single {\n\tposition: relative;\n\tdisplay: flex !important; flex-direction: column; flex-wrap: wrap; align-items: stretch !important;\n}\n\n.top-tagSelector-setter_single [data-tag_id] {\n\twidth: auto; min-height: 20%; min-width: 50%;\n\tflex: 1 1 auto;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, reactive, ref, shallowRef, watch } from 'vue';\n\nimport Core from '@/core/core/core';\nimport { useI18n } from '@/core/plugins/i18n';\nimport { storage } from '@/core/utils/dom';\nimport { debounce } from '@/core/utils/lodash';\n\nimport type { Option } from '@/components/forms/select/types';\nimport TopSelect from '@/components/forms/select/select.vue';\n\nimport TopButton from '@/components/forms/button/button.vue';\n\nimport type { PopupEvent } from '@/components/popup/popup/types';\nimport TopPopup from '../../popup/popup/popup.vue';\nimport TopPopupListItem from '../../popup/popup/listItem.vue';\n\nimport type { Emits, FiltersAction, Props, Tag } from './types';\nimport tagsDefaults from './tagsDefaults';\nimport { genTagIdExcluded } from './utils/utils';\n\nimport type { Props as TagListItemProps } from './popupListItem/types';\nimport TopTagListItem from './popupListItem/tagPopupListItem.vue';\n\nimport type { TagSelectorTarget } from './popupOpener/types';\nimport TopTagSelectorPopupOpener from './popupOpener/popupOpener.vue';\n\nconst i18n = useI18n();\n\nconst props = withDefaults(defineProps<Props>(), {\n\ttagsMax: 10,\n\trequiredForSetter: true,\n\temitDelay: 500,\n});\n\n/**\n * Выбранные теги кнопки в этом компоненте\n *\n * Редактирвоание ведется только через `editTarget.model`\n */\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\n/**\n * Список тегов\n */\nconst tags = defineModel<Tag[]>('tags', {\n\tdefault: reactive(tagsDefaults),\n});\n\nconst emit = defineEmits<Emits>();\n\nconst emitDebounce: typeof emit = debounce((name, e) => {\n\temit(name, e);\n}, props.emitDelay);\n\n// требуется сразу указать один тег\nif (props.singleMode && !model.value.length) {\n\tmodel.value = [tags.value[0].id];\n}\n\nconst id = props.id ?? 'top-popup-id-' + Math.random() + '';\n\nconst filtersAction = ref<FiltersAction>('add');\n\n/**\n * Сгенерировать опции для выбора дейсвтия массого редактирования\n */\nconst genFiltersActionOptions = () => {\n\tconst tagsText = ' ' + i18n.Common.Tags?.toLowerCase();\n\n\tconst res = new Map<FiltersAction, Option>();\n\tres.set('add', { value: 'add', title: i18n.Common.Add + tagsText });\n\tres.set('replace', { value: 'replace', title: i18n.Common.Replace + tagsText });\n\tres.set('delete', { value: 'delete', title: i18n.Common.Delete + tagsText });\n\n\treturn res;\n};\n\n/**\n * Целевой объект редактирвоания тегов\n *\n * Определяется кнопкой, которая открыла popup выбора тегов\n */\nlet target = shallowRef<TagSelectorTarget>({\n\tmodel,\n\tmode: 'filter',\n\ttargetId: undefined,\n\tfilters: undefined,\n\tpayload: undefined,\n});\n\nwatch(model, () => {\n\temitDebounce('selector', model.value);\n});\n\n/**\n * Можно ли выбрать еще теги\n */\nconst disabled = computed(() => {\n\tif (target.value.mode !== 'setter') return;\n\n\tif (!props.maxTagsForSetter) return;\n\n\t// массовая смена тегов, количество тегов в результате узнать невозможно\n\tif (target.value.filters) return;\n\n\treturn target.value.model.value.length >= props.maxTagsForSetter;\n});\n\nconst genTargetTagState = (tagId: Tag['id'] | 'all'): TagListItemProps['state'] => {\n\tif (tagId !== 'all') {\n\t\tif (target.value.model.value.includes(tagId)) return 'selected';\n\n\t\tif (target.value.model.value.includes(genTagIdExcluded(tagId))) return 'excluded';\n\t}\n\n\t// Все теги, ни один из тегов не выбран\n\tif (tagId === 'all' && !target.value.model.value.length) return 'selected';\n\n\treturn '';\n};\n\nconst updateTargetModel = (tagId: Tag['id'], action: 'unselect' | 'select' | 'exclude') => {\n\tconst tagIdExcluded = genTagIdExcluded(tagId);\n\n\tlet tagsIds = target.value.model.value.filter(modelTagId => modelTagId !== tagId && modelTagId !== tagIdExcluded);\n\n\tif (action === 'select') tagsIds.push(tagId);\n\tif (action === 'exclude') tagsIds.push(tagIdExcluded);\n\n\t// режим редактирвоания тегов одного объекта с требованием указать хотя бы один тег\n\tif (target.value.mode === 'setter' && target.value.targetId !== undefined && props.requiredForSetter) {\n\t\t// нельзя снимать выделение со всех тегов\n\t\tif (!tagsIds.length) {\n\t\t\ttagsIds.push('1');\n\t\t}\n\n\t\t// при первом выборе сразу снять тег \"Без тега\"\n\t\tif (tagsIds.length === 2 && target.value.model.value.length === 1 && target.value.model.value[0] === '1') {\n\t\t\ttagsIds = tagsIds.filter((tagId) => tagId !== '1');\n\t\t}\n\t}\n\n\t// режим выбора одного тега\n\tif (props.singleMode && !target.value.filters) {\n\t\t// нужно указать хотя бы один тег\n\t\tif (!tagsIds.length) {\n\t\t\ttagsIds = target.value.model.value;\n\t\t}\n\n\t\tif (tagsIds.length > 1) {\n\t\t\ttagsIds = [tagsIds[tagsIds.length - 1]];\n\t\t}\n\t}\n\n\t// всегда выводить теги в порядке, указанном в настройках tags\n\ttagsIds.sort((a, b) => {\n\t\tif (!props.tags) return 0;\n\n\t\tconst aIndex = props.tags.findIndex((tag) => tag.id === a);\n\t\tconst bIndex = props.tags.findIndex((tag) => tag.id === b);\n\n\t\treturn aIndex - bIndex;\n\t});\n\n\ttarget.value.model.value = tagsIds;\n\n\tif (target.value.mode === 'setter' && target.value.targetId !== undefined) {\n\t\temitDebounce('setter', {\n\t\t\ttagsIds: tagsIds as Tag['id'][],\n\t\t\ttargetId: target.value.targetId,\n\t\t\tpayload: target.value.payload,\n\t\t});\n\t}\n};\n\nconst classString = computed(() => {\n\tlet res = 'top-tagSelector_popup';\n\n\tif (target.value.mode === 'filter') res += ' top-tagSelector_popup-filter';\n\tif (target.value.mode === 'setter') res += ' top-tagSelector_popup-setter';\n\n\treturn res;\n});\n\n/**\n * Добавить тег\n */\nconst addTag = () => {\n\tconst tagName = prompt('', 'New tag');\n\tif (!tagName || tagName === 'New tag') return;\n\n\tconst tagId = tags.value.length + 1;\n\n\ttags.value.push({\n\t\tid: String(tagId) as Tag['id'],\n\t\tname: tagName,\n\t\tcolor_id: String((tagId - 1) % 10 + 1) as Tag['color_id'],\n\t});\n\n\temit('tagsChanged', tags.value);\n};\n\nconst onOpen = (popupEvent: PopupEvent) => {\n\t// popup открыт другой кнопкой c другим modelValue, для редактирвоания объектов\n\ttarget.value = storage(popupEvent.elPopupOpener, 'topTagSelectorTarget');\n\tif (!target.value) throw new Error('Open popup TopTagSelector required v-data:topTagSelectorTarget');\n\n\t// при начале массовой установки тегов сбросить состояние формы\n\tif (target.value.filters) {\n\t\tfiltersAction.value = 'add';\n\t\ttarget.value.model.value = [];\n\t}\n\n\tif (!Core.$?.ui['sortable']) {\n\t\tconsole.info('Для работы сортировки требуется глобальная загрузка jQuery UI Sortable');\n\n\t\treturn;\n\t}\n\n\tif (!Core.state.isMobile && !Core.state.isMobileUA && tags.value) {\n\t\t$(popupEvent.elPopup).sortable({\n\t\t\titems: 'li:has([data-tag_id]:not([data-tag_id=\"all\"]))',\n\n\t\t\t/**\n\t\t\t * @todo Удалить `[contenteditable=\"true\"]` через пол года после выхода версии firefox с поддержкой contenteditable plaintext-only, включая бета версии\n\t\t\t */\n\t\t\tcancel: '[contenteditable=\"plaintext-only\"], [contenteditable=\"true\"]',\n\n\t\t\tdistance: 10,\n\t\t\tstop: function (_e, ui) {\n\t\t\t\tif (!tags.value) return;\n\n\t\t\t\tconst $tags = $(ui.item).parent().find('[data-tag_id]');\n\n\t\t\t\tconst tagsSorted: Tag['id'][] = [];\n\t\t\t\t$tags.each((_index, elTag) => {\n\t\t\t\t\tif (!tags.value) return;\n\n\t\t\t\t\tconst tagId = $(elTag).attr('data-tag_id') as Tag['id'];\n\t\t\t\t\ttagsSorted.push(tagId);\n\t\t\t\t});\n\n\t\t\t\ttags.value.sort((tagIdA, tagIdB) => {\n\t\t\t\t\tconst a = tagsSorted.findIndex(tagSorted => tagSorted === tagIdA.id);\n\t\t\t\t\tconst b = tagsSorted.findIndex(tagSorted => tagSorted === tagIdB.id);\n\n\t\t\t\t\treturn a - b;\n\t\t\t\t});\n\n\t\t\t\temitDebounce('tagsChanged', tags.value);\n\t\t\t},\n\t\t});\n\t}\n};\n\nconst onClose = (popupEvent: PopupEvent) => {\n\tif (!Core.$?.ui['sortable']) return;\n\n\tif ($(popupEvent.elPopup).data('ui-sortable')) {\n\t\t$(popupEvent.elPopup).sortable('destroy');\n\t}\n};\n</script>\n\n<template>\n\t<TopTagSelectorPopupOpener\n\t\tclass=\"top-as-selector\"\n\t\tv-model=\"model\"\n\t\t:id\n\t\t:tags\n\t\t:styling\n\t\tmode=\"filter\"\n\t\tuseTopButton\n\t/>\n\n\t<TopPopup\n\t\t:id\n\t\t:class=\"classString\"\n\t\t@open=\"onOpen($event)\"\n\t\t@close=\"onClose($event)\"\n\t\t:transition-duration=\"50\"\n\t>\n\t\t<!-- Массовое редактирвоание-->\n\t\t<template #header v-if=\"target.mode === 'setter' && target.filters\">\n\t\t\t<TopSelect\n\t\t\t\tv-model=\"filtersAction\"\n\t\t\t\t:options=\"genFiltersActionOptions()\"\n\t\t\t/>\n\t\t</template>\n\n\t\t<template #footer v-if=\"target.mode === 'setter' && target.filters\">\n\t\t\t<TopButton color=\"theme\">\n\t\t\t\t{{ $i18n.Common.Cancel }}\n\t\t\t</TopButton>\n\n\t\t\t<TopButton\n\t\t\t\t@click=\"emitDebounce('setter', {\n\t\t\t\t\ttagsIds: target.model.value as Tag['id'][],\n\t\t\t\t\tfilters: target.filters,\n\t\t\t\t\tfiltersAction,\n\t\t\t\t\tpayload: target.payload,\n\t\t\t\t})\"\n\t\t\t>\n\t\t\t\t{{ filtersAction === 'add' ? $i18n.Common['Add'] : '' }}\n\t\t\t\t{{ filtersAction === 'replace' ? $i18n.Common['Replace'] : '' }}\n\t\t\t\t{{ filtersAction === 'delete' ? $i18n.Common['Remove'] : '' }}\n\t\t\t</TopButton>\n\t\t</template>\n\n\t\t<template #contentList>\n\t\t\t<TopTagListItem\n\t\t\t\tv-if=\"target.mode === 'filter' && !singleMode\"\n\t\t\t\tid=\"all\"\n\t\t\t\tcolorId=\"\"\n\t\t\t\t:name=\"$i18n.Common.All_tags ?? ''\"\n\t\t\t\t:state=\"target.model.value.length ? '' : 'selected'\"\n\t\t\t\t@select=\"target.model.value = []\"\n\t\t\t/>\n\n\t\t\t<TopTagListItem\n\t\t\t\tv-for=\"tag in tags\"\n\t\t\t\t:key=\"tag.id\"\n\t\t\t\t:id=\"tag.id\"\n\t\t\t\t:colorId=\"tag.color_id\"\n\t\t\t\t:name=\"tag.name\"\n\t\t\t\t:state=\"genTargetTagState(tag.id)\"\n\t\t\t\t:canExclude=\"target.mode === 'filter' && !singleMode\"\n\t\t\t\t:editable=\"tagsEditable\"\n\t\t\t\t:disabled=\"disabled && genTargetTagState(tag.id) === ''\"\n\t\t\t\t@unselect=\"updateTargetModel(tag.id, 'unselect')\"\n\t\t\t\t@select=\"updateTargetModel(tag.id, 'select')\"\n\t\t\t\t@exclude=\"updateTargetModel(tag.id, 'exclude')\"\n\t\t\t\t@update:name=\"tag.name = $event as string, emitDebounce('tagsChanged', tags);\"\n\t\t\t/>\n\n\t\t\t<TopPopupListItem\n\t\t\t\tv-if=\"tagsEditable && tags.length < tagsMax && tags.length < 20\"\n\t\t\t\tdata-top-icon=\"\"\n\t\t\t\t@click.stop=\"addTag\"\n\t\t\t>\n\t\t\t\t{{ $i18n.Common.Add }}\n\t\t\t</TopPopupListItem>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style>\n.top-tagSelector_popup .top-popup {\n\tuser-select: none;\n\tmin-width: 220px !important;\n\ttext-align: left;\n}\n\n.top-tagSelector_popup .top-popup_header .top-select{\n\tflex-grow: 1;\n}\n</style>\n","import type { MaybeRefOrGetter } from 'vue';\nimport { computed, toValue } from 'vue';\nimport type { Competitor, Item } from '@/components/project/selectorCompetitors/types';\n\nexport const useItemsFromCompetitors = (competitors: MaybeRefOrGetter<Competitor[]>, projectId: MaybeRefOrGetter<number>) => {\n\treturn computed(() => {\n\t\tconst activeCompetitors = toValue(competitors).filter(competitor => competitor.on >= 0 || competitor.id === projectId);\n\n\t\tconst items: Item[] = activeCompetitors.map(competitor => {\n\t\t\treturn {\n\t\t\t\tvalue: competitor.id,\n\t\t\t\ttitle: competitor.url + ` [${competitor.id}]`,\n\t\t\t\ticon: competitor.id === toValue(projectId) ? '' : '',\n\t\t\t\tcontent: competitor.name,\n\t\t\t};\n\t\t});\n\n\t\treturn items;\n\t});\n};\n","import { isRef, type Ref, ref, unref, watch } from 'vue';\nimport { useI18n } from '@/core/plugins/i18n';\nimport { storage } from '@/core/utils/dom';\nimport TopPopupWorker from '@/components/popup/lib/worker';\nimport type { OpenerProps as PopupOpenerProps } from '@/components/popup/popup/types';\nimport type { Props as TagSelectorOpenerProps, TagSelectorTarget } from '../popupOpener/types';\nimport type { Props as TagIconProps } from '../tagIcon/types';\nimport { genTagIdClear, getTagById } from '../utils/utils';\n\n/**\n * Сгенерировтаь элемент для открытия popup с выбором тегов\n *\n * Альтернатива TopTagSelecorPopupOpener для работы вне vue\n *\n * Требует монтирования компонента TopTagSelecor\n */\nexport const genElPopupOpener = (\n\tprops: TagSelectorOpenerProps & { modelValue: TagSelectorOpenerProps['modelValue'] | Ref<TagSelectorOpenerProps['modelValue']> },\n\tpropsPopup?: Partial<PopupOpenerProps>,\n\thtmlSetterSeveral?: string,\n): HTMLElement => {\n\tif (!propsPopup) propsPopup = { id: props.id };\n\n\tpropsPopup.id = props.id;\n\n\tconst el = TopPopupWorker.genElPopupOpener('div', propsPopup as PopupOpenerProps);\n\n\tel.classList.add('top-tagSelector');\n\tif (props.useTopButton) el.classList.add('top-button', 'top-color_theme');\n\tif (props.mode === 'filter') el.classList.add('top-tagSelector-filter');\n\tif (props.mode === 'setter' && !props.filters) el.classList.add('top-tagSelector-setter_single');\n\tif (props.mode === 'setter' && props.filters) el.classList.add('top-tagSelector-setter_several');\n\n\t// прокcи клик: lazy connect\n\tel.onclick = (e) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tel.onclick = null;\n\n\t\tconst model = ref(props.modelValue);\n\n\t\tconst target: TagSelectorTarget = {\n\t\t\tmodel,\n\t\t\tmode: props.mode,\n\t\t\ttargetId: props.targetId,\n\t\t\tfilters: props.filters,\n\t\t\tpayload: props.payload,\n\t\t};\n\n\t\tstorage(el, 'topTagSelectorTarget', target);\n\n\t\tdelete el.dataset.topPopupDisabled;\n\n\t\tif (!isRef(props.modelValue)) {\n\t\t\twatch(model, () => {\n\t\t\t\tprops.modelValue = model.value;\n\n\t\t\t\telPopupOpenerRender(el, props, htmlSetterSeveral);\n\t\t\t});\n\t\t}\n\n\t\t// выполнение клика\n\t\tel.click();\n\t};\n\n\tif (isRef(props.modelValue)) {\n\t\twatch(props.modelValue, () => elPopupOpenerRender(el, props, htmlSetterSeveral));\n\t} else {\n\t\tstorage(el, 'topTagSelectorRender', (modelValue: TagSelectorOpenerProps['modelValue']) => {\n\t\t\tprops.modelValue = modelValue;\n\n\t\t\tconst target = storage(el, 'topTagSelectorTarget');\n\t\t\tif (target) target.model.value = modelValue;\n\n\t\t\telPopupOpenerRender(el, props, htmlSetterSeveral);\n\t\t});\n\t}\n\n\telPopupOpenerRender(el, props, htmlSetterSeveral);\n\n\treturn el;\n};\n\n/**\n * Вызвать перерисовку элемента, который был создан через genElPopupOpener()\n *\n * Работет только для элементов не с реактивным modelValue\n */\nexport const renderElPopupOpener = (el: HTMLElement, modelValue: TagSelectorOpenerProps['modelValue']) => {\n\tstorage(el, 'topTagSelectorRender')?.(modelValue);\n};\n\n/**\n * Отрисовать TopTagSelecorPopupOpener\n */\nconst elPopupOpenerRender = (el, props: TagSelectorOpenerProps, htmlSetterSeveral?: string) => {\n\tconst tagsIds = unref(props.modelValue);\n\n\tel.classList.toggle('top-tagSelector-selectedOne', !tagsIds.length || tagsIds.length === 1);\n\tel.classList.toggle('top-tagSelector-toTwoLine', tagsIds.length > 5);\n\n\tif (props.mode === 'setter' && props.filters) {\n\t\tel.innerHTML = `<div>${htmlSetterSeveral}</div>`;\n\n\t\treturn;\n\t}\n\n\tel.innerHTML = '';\n\n\tif (!tagsIds.length && props.mode === 'filter') {\n\t\tconst elTagIcon = genElTagIcon({\n\t\t\tid: 'all',\n\t\t\tcolorId: '',\n\t\t\tname: useI18n().Common?.All_tags ?? '',\n\t\t\tstate: '',\n\t\t});\n\n\t\tel.append(elTagIcon);\n\t}\n\n\ttagsIds.forEach(tagId => {\n\t\tconst elTagIcon = genElTagIcon({\n\t\t\tid: genTagIdClear(tagId),\n\t\t\tcolorId: getTagById(tagId, props.tags)?.color_id ?? '',\n\t\t\tname: getTagById(tagId, props.tags)?.name ?? '',\n\t\t\tstate: genTagIdClear(tagId) === tagId ? 'selected' : 'excluded',\n\t\t});\n\n\t\tel.append(elTagIcon);\n\t});\n};\n\n/**\n * Сгенерировтаь элемент для открытия popup с выбором тегов\n *\n * Альтернатива TopTagSelecorTagIcon для работы вне vue\n */\nconst genElTagIcon = (props: TagIconProps) => {\n\tconst el = document.createElement('div');\n\n\tel.classList.add('top-tagSelector_tagIcon');\n\tel.classList.toggle('top-tagSelector-active', !!props.state);\n\tel.classList.toggle('top-tagSelector-excluded', props.state === 'excluded');\n\n\tel.dataset.tag_id = props.id;\n\tel.dataset.tag_color_id = props.colorId;\n\tel.title = props.name;\n\n\treturn el;\n};\n","import type { ComponentCustomProps } from 'vue';\n\nimport SelectorCompetitors from './selectorCompetitors/selectorCompetitors.vue';\nimport SelectorRegion from './selectorRegion/selectorRegion.vue';\n\nimport TagSelector from './tagSelector/tagSelector.vue';\nimport TagSelectorPopupOpener from './tagSelector/popupOpener/popupOpener.vue';\nimport TagSelectorTagIcon from './tagSelector/tagIcon/tagIcon.vue';\n\nexport const TopSelectorCompetitors = SelectorCompetitors as typeof SelectorCompetitors & ComponentCustomProps;\nexport { useItemsFromCompetitors } from './selectorCompetitors/composables';\n\nexport { findRegion, genSearcherByKey, dialogSelectorRegions } from './selectorRegion/utils/utils';\nexport const TopSelectorRegion = SelectorRegion as typeof SelectorRegion & ComponentCustomProps;\n\nexport type { Emits as TopTagSelectorEmits, Tag, TagId, TagIdExclude } from './tagSelector/types';\nexport {\n\tgenElPopupOpener as genElTopTagSelectorPopupOpener,\n\trenderElPopupOpener as renderElTopTagSelectorPopupOpener,\n} from './tagSelector/utils/el';\nexport const TopTagSelector = TagSelector as typeof TagSelector & ComponentCustomProps;\nexport const TopTagSelectorPopupOpener = TagSelectorPopupOpener as typeof TagSelectorPopupOpener & ComponentCustomProps;\nexport const TopTagSelectorTagIcon = TagSelectorTagIcon as typeof TagSelectorTagIcon & ComponentCustomProps;\n"],"names":["props","__props","model","useModel","selectAllItem","computed","useI18n","openBlock","createElementBlock","_hoisted_1$3","unref","Core","createBlock","_sfc_main$6","withCtx","createVNode","_sfc_main$8","createTextVNode","toDisplayString","_a","_ctx","item","Fragment","renderList","normalizeClass","createElementVNode","_hoisted_2","_cache","$event","items","searhcerCompareKey","dummyIndex","globalRegionIndex","searchersNames","regionUndefined","searcherUndefined","regionAuto","searcherAuto","regionGlobal","getRegionAuto","getSearcherAuto","getRegionGlobal","genSearcherByKey","forFrequency","autoRegion","searchers","searcherByKey","genSearchersMapVolume","genSearchersMapCommon","onlyEnabledRegions","forceSearchersKeys","searcher","searcherI","region","regionI","searcherKey","serarcherByKey","searcherMail","findRegion","searchRegion","findedRegion","dialogSelectorRegions","useAsyncTopDialog","useSelectSearcher","mapSearchers","i18n","ref","optionBySearcherKey","res","option","getSearcherGIcon","dummyOption","compareOption","useSelectRegion","activeSearcherIndexed","regionIndex","_b","_c","optionByRegionIndex","options","regionLabel","option2","langLabel","getLangLabel","getDeviceGIcon","watch","optionByRegionIndex2","oldOptionByRegionIndex","newRegionIndex","regionName","regionMatchLevel","index","title","regexpDevice","regionNameCompare","regionMatchLevelI","useCompare","allRegionsIndexes","regionsIndexes","compareLoad","regionsIndexesSaved","compareSave","useSelectorRegion","selectSearcher","selectRegion","compare","newSearcherKey","regionsNewSearcher","regionsCurrentSearcher","_d","getSearcherKey","getRegionIndex","regionKey","getSearcher","modelSingle","getRegion","onClickCompare","regions","defaultKey","newModel","defaultIndex","_e","all","newSearherKey","__expose","onlySearcher","addChanger","createCommentVNode","tagsDefaults","genTagIdExcluded","tagId","genTagIdClear","getTagById","tags","tag","tag2","state","id","colorId","name","emit","__emit","elName","firefoxProps","inEdit","event","turnToEdit","nextTick","editCommit","name2","editCancel","changeSelect","e","toState","disabled","canExclude","_sfc_main$3","withKeys","withModifiers","component","componentSlotName","topTagSelectorTarget","withDirectives","resolveDynamicComponent","mergeProps","filters","styling","renderSlot","emitDebounce","debounce","filtersAction","genFiltersActionOptions","tagsText","target","shallowRef","genTargetTagState","updateTargetModel","action","tagIdExcluded","tagsIds","modelTagId","tagId2","a","b","aIndex","bIndex","classString","addTag","tagName","onOpen","popupEvent","storage","ui","$tags","tagsSorted","_index","elTag","tagIdA","tagIdB","tagSorted","onClose","createSlots","_sfc_main$2","singleMode","tagsEditable","_sfc_main$a","useItemsFromCompetitors","competitors","projectId","toValue","competitor","genElPopupOpener","propsPopup","htmlSetterSeveral","el","Worker","isRef","elPopupOpenerRender","modelValue","renderElPopupOpener","elTagIcon","genElTagIcon","TopSelectorCompetitors","_sfc_main$5","TopSelectorRegion","_sfc_main$4","TopTagSelector","_sfc_main","TopTagSelectorPopupOpener","_sfc_main$1","TopTagSelectorTagIcon"],"mappings":"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"}
package/tabs/tabs.amd.js CHANGED
@@ -1,2 +1,2 @@
1
- define(["require","exports","vue","../require/css.amd!../assets/tabs.css"],function(T,s,e){"use strict";if(typeof e>"u")var e=window.Vue;const n={class:e.normalizeClass({"top-tabs":!0})},l={key:0,class:"top-tabs_header"},r={class:"top-tabs_contents"},d=e.defineComponent({__name:"tabs",props:{id:{}},setup(o){return(t,a)=>(e.openBlock(),e.createElementBlock("div",n,[e.renderSlot(t.$slots,"buttons"),t.$slots.header?(e.openBlock(),e.createElementBlock("div",l,[e.renderSlot(t.$slots,"header")])):e.createCommentVNode("",!0),e.createElementVNode("div",r,[e.renderSlot(t.$slots,"contents")])]))}}),c=["id","name","value","checked","disabled"],i=["for"],p=e.defineComponent({__name:"tab",props:{tabsId:{},name:{},title:{},active:{type:Boolean},disabled:{type:Boolean}},setup(o){return(t,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("input",{type:"radio",class:"top-tabs_tabInput top-unvisible",id:t.tabsId+t.name,name:t.tabsId,value:t.name,checked:t.active,disabled:t.disabled},null,8,c),e.createElementVNode("label",{class:e.normalizeClass({"top-tabs_tabLabel":!0,"top-forms-focusable":!0,"top-disabled":t.disabled}),for:t.tabsId+t.name},[e.renderSlot(t.$slots,"default")],10,i)],64))}}),b=["data-tabs-name"],u=e.defineComponent({__name:"content",props:{name:{}},setup(o){return(t,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-tabs_content":!0}),"data-tabs-name":t.name},[e.renderSlot(t.$slots,"default")],8,b))}}),m=d,_=p,f=u;s.TopTabs=m,s.TopTabsContent=f,s.TopTabsTab=_,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
1
+ define(["require","exports","vue","../require/css.amd!../assets/tabs.css"],(function(T,s,e){"use strict";if(typeof e>"u")var e=window.Vue;const n={class:e.normalizeClass({"top-tabs":!0})},l={key:0,class:"top-tabs_header"},r={class:"top-tabs_contents"},d=e.defineComponent({__name:"tabs",props:{id:{}},setup(o){return(t,a)=>(e.openBlock(),e.createElementBlock("div",n,[e.renderSlot(t.$slots,"buttons"),t.$slots.header?(e.openBlock(),e.createElementBlock("div",l,[e.renderSlot(t.$slots,"header")])):e.createCommentVNode("",!0),e.createElementVNode("div",r,[e.renderSlot(t.$slots,"contents")])]))}}),c=["id","name","value","checked","disabled"],i=["for"],p=e.defineComponent({__name:"tab",props:{tabsId:{},name:{},title:{},active:{type:Boolean},disabled:{type:Boolean}},setup(o){return(t,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("input",{type:"radio",class:"top-tabs_tabInput top-unvisible",id:t.tabsId+t.name,name:t.tabsId,value:t.name,checked:t.active,disabled:t.disabled},null,8,c),e.createElementVNode("label",{class:e.normalizeClass({"top-tabs_tabLabel":!0,"top-forms-focusable":!0,"top-disabled":t.disabled}),for:t.tabsId+t.name},[e.renderSlot(t.$slots,"default")],10,i)],64))}}),b=["data-tabs-name"],u=e.defineComponent({__name:"content",props:{name:{}},setup(o){return(t,a)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-tabs_content":!0}),"data-tabs-name":t.name},[e.renderSlot(t.$slots,"default")],8,b))}}),m=d,_=p,f=u;s.TopTabs=m,s.TopTabsContent=f,s.TopTabsTab=_,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})}));
2
2
  //# sourceMappingURL=tabs.amd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.amd.js","sources":["../../src/components/tabs/tabs/tabs.vue","../../src/components/tabs/tabs/tab.vue","../../src/components/tabs/tabs/content.vue","../../src/components/tabs/tabs.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Props } from './types';\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabs': true,\n\t\t}\"\n\t>\n\t\t<!-- @slot Кнопки вкладок, ожидает передачу компонентов TabTitle -->\n\t\t<slot name=\"buttons\"></slot>\n\n\t\t<div v-if=\"$slots.header\" class=\"top-tabs_header\">\n\t\t\t<!-- @slot Слот с проивзольным содержимым, которое будет добавлено справа от вкладок -->\n\t\t\t<slot name=\"header\"></slot>\n\t\t</div>\n\n\t\t<div class=\"top-tabs_contents\">\n\t\t\t<!-- @slot Контент вкладок, ожидает передачу компонентов TabContent -->\n\t\t\t<slot name=\"contents\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-tabs {\n\tbackground: var(--color-layout-front-1);\n\tborder-radius: 8px;\n\tborder: 1px solid var(--color-line-2-opacity);\n\tpadding: 0;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: stretch;\n}\n\n.top-tabs_header {\n\tpadding: 6px;\n\tmargin-left: auto;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tflex-wrap: wrap;\n}\n\n/* Содержимое вкладок */\n.top-tabs_contents {\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\twidth: 100%;\n\tmargin-top: -1px;\n}\n\n/* Состояние открытости вкладок */\n.top-tabs_tabInput:checked:nth-child(1) ~ .top-tabs_contents > .top-tabs_content:nth-child(1),\n.top-tabs_tabInput:checked:nth-child(3) ~ .top-tabs_contents > .top-tabs_content:nth-child(2),\n.top-tabs_tabInput:checked:nth-child(5) ~ .top-tabs_contents > .top-tabs_content:nth-child(3),\n.top-tabs_tabInput:checked:nth-child(7) ~ .top-tabs_contents > .top-tabs_content:nth-child(4),\n.top-tabs_tabInput:checked:nth-child(9) ~ .top-tabs_contents > .top-tabs_content:nth-child(5),\n.top-tabs_tabInput:checked:nth-child(11) ~ .top-tabs_contents > .top-tabs_content:nth-child(6) {\n\tdisplay: block;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { PropsTab } from './types';\n\ndefineProps<PropsTab>();\n</script>\n\n<template>\n\t<input\n\t\ttype=\"radio\"\n\t\tclass=\"top-tabs_tabInput top-unvisible\"\n\t\t:id=\"tabsId + name\"\n\t\t:name=\"tabsId\"\n\t\t:value=\"name\"\n\t\t:checked=\"active\"\n\t\t:disabled=\"disabled\"\n\t/>\n\n\t<label\n\t\t:class=\"{\n\t\t\t'top-tabs_tabLabel': true,\n\t\t\t'top-forms-focusable': true,\n\t\t\t'top-disabled': disabled,\n\t\t}\"\n\t\t:for=\"tabsId + name\"\n\t>\n\t\t<slot></slot>\n\t</label>\n</template>\n\n<style>\n.top-tabs_tabLabel {\n\tcolor: var(--color-text-1);\n\tcursor: pointer;\n\tborder-bottom: 2px solid transparent;\n\tpadding: 14px 20px;\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.top-tabs_tabLabel:hover {\n\tborder-color: var(--color-line-2);\n}\n\n.top-tabs_tabInput:checked + .top-tabs_tabLabel {\n\tborder-color: var(--color-line-primary-1);\n\tcolor: var(--color-text-primary);\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { PropsContent } from './types';\n\ndefineProps<PropsContent>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabs_content': true,\n\t\t}\"\n\t\t:data-tabs-name=\"name\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-tabs_content {\n\tpadding: 14px;\n\toverflow: auto;\n\tdisplay: none;\n}\n</style>\n","import type { ComponentCustomProps } from 'vue';\n\nimport Tabs from './tabs/tabs.vue';\nimport TabsTab from './tabs/tab.vue';\nimport TabsContent from './tabs/content.vue';\n\nexport const TopTabs = Tabs as typeof Tabs & ComponentCustomProps;\nexport const TopTabsTab = TabsTab as typeof TabsTab & ComponentCustomProps;\nexport const TopTabsContent = TabsContent as typeof TabsContent & ComponentCustomProps;\n"],"names":["vue","_ctx","_hoisted_2$1","_hoisted_1$1","_hoisted_1","TopTabs","_sfc_main$2","TopTabsTab","_sfc_main$1","TopTabsContent","_sfc_main"],"mappings":"+WAwBOA,EAAA,WAAAC,EAAA,OAAA,SAAA,EAXuBA,EAAA,OAAA,QAAAD,EAAA,UAAA,EAAAA,EAAA,mBAAA,MAAAE,EAAA,CAKtBF,EAAA,WAAAC,EAAA,OAAA,QAAA,CADsB,CAAA,GAAAD,EAAA,mBAAA,GAAA,EAAA,gCAMtBA,EAAA,WAAAC,EAAA,OAAA,UAAA,qWCbY,KAAAA,EAAA,OACL,MAAAA,EAAA,KACD,QAAAA,EAAA,0BAEO,EAAA,KAAA,EAAAE,CAAA,iIAIgF,CAAA,qBAKhF,EAAA,sNCfX,mBAAA,4BAGa,EAAA,iCAER,EAAA,EAAAC,CAAA,MCPRC,EAAAC,EACAC,EAAAC,EACAC,EAAAC"}
1
+ {"version":3,"file":"tabs.amd.js","sources":["../../src/components/tabs/tabs/tabs.vue","../../src/components/tabs/tabs/tab.vue","../../src/components/tabs/tabs/content.vue","../../src/components/tabs/tabs.ts"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Props } from './types';\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabs': true,\n\t\t}\"\n\t>\n\t\t<!-- @slot Кнопки вкладок, ожидает передачу компонентов TabTitle -->\n\t\t<slot name=\"buttons\"></slot>\n\n\t\t<div v-if=\"$slots.header\" class=\"top-tabs_header\">\n\t\t\t<!-- @slot Слот с проивзольным содержимым, которое будет добавлено справа от вкладок -->\n\t\t\t<slot name=\"header\"></slot>\n\t\t</div>\n\n\t\t<div class=\"top-tabs_contents\">\n\t\t\t<!-- @slot Контент вкладок, ожидает передачу компонентов TabContent -->\n\t\t\t<slot name=\"contents\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-tabs {\n\tbackground: var(--color-layout-front-1);\n\tborder-radius: 8px;\n\tborder: 1px solid var(--color-line-2-opacity);\n\tpadding: 0;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: stretch;\n}\n\n.top-tabs_header {\n\tpadding: 6px;\n\tmargin-left: auto;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tflex-wrap: wrap;\n}\n\n/* Содержимое вкладок */\n.top-tabs_contents {\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\twidth: 100%;\n\tmargin-top: -1px;\n}\n\n/* Состояние открытости вкладок */\n.top-tabs_tabInput:checked:nth-child(1) ~ .top-tabs_contents > .top-tabs_content:nth-child(1),\n.top-tabs_tabInput:checked:nth-child(3) ~ .top-tabs_contents > .top-tabs_content:nth-child(2),\n.top-tabs_tabInput:checked:nth-child(5) ~ .top-tabs_contents > .top-tabs_content:nth-child(3),\n.top-tabs_tabInput:checked:nth-child(7) ~ .top-tabs_contents > .top-tabs_content:nth-child(4),\n.top-tabs_tabInput:checked:nth-child(9) ~ .top-tabs_contents > .top-tabs_content:nth-child(5),\n.top-tabs_tabInput:checked:nth-child(11) ~ .top-tabs_contents > .top-tabs_content:nth-child(6) {\n\tdisplay: block;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { PropsTab } from './types';\n\ndefineProps<PropsTab>();\n</script>\n\n<template>\n\t<input\n\t\ttype=\"radio\"\n\t\tclass=\"top-tabs_tabInput top-unvisible\"\n\t\t:id=\"tabsId + name\"\n\t\t:name=\"tabsId\"\n\t\t:value=\"name\"\n\t\t:checked=\"active\"\n\t\t:disabled=\"disabled\"\n\t/>\n\n\t<label\n\t\t:class=\"{\n\t\t\t'top-tabs_tabLabel': true,\n\t\t\t'top-forms-focusable': true,\n\t\t\t'top-disabled': disabled,\n\t\t}\"\n\t\t:for=\"tabsId + name\"\n\t>\n\t\t<slot></slot>\n\t</label>\n</template>\n\n<style>\n.top-tabs_tabLabel {\n\tcolor: var(--color-text-1);\n\tcursor: pointer;\n\tborder-bottom: 2px solid transparent;\n\tpadding: 14px 20px;\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.top-tabs_tabLabel:hover {\n\tborder-color: var(--color-line-2);\n}\n\n.top-tabs_tabInput:checked + .top-tabs_tabLabel {\n\tborder-color: var(--color-line-primary-1);\n\tcolor: var(--color-text-primary);\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { PropsContent } from './types';\n\ndefineProps<PropsContent>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabs_content': true,\n\t\t}\"\n\t\t:data-tabs-name=\"name\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-tabs_content {\n\tpadding: 14px;\n\toverflow: auto;\n\tdisplay: none;\n}\n</style>\n","import type { ComponentCustomProps } from 'vue';\n\nimport Tabs from './tabs/tabs.vue';\nimport TabsTab from './tabs/tab.vue';\nimport TabsContent from './tabs/content.vue';\n\nexport const TopTabs = Tabs as typeof Tabs & ComponentCustomProps;\nexport const TopTabsTab = TabsTab as typeof TabsTab & ComponentCustomProps;\nexport const TopTabsContent = TabsContent as typeof TabsContent & ComponentCustomProps;\n"],"names":["vue","_ctx","_hoisted_2$1","name","tabsId","disabled","_hoisted_1","TopTabs","_sfc_main$2","TopTabsTab","_sfc_main$1","TopTabsContent","_sfc_main"],"mappings":"gXAwBOA,EAAA,WAAAC,EAAA,OAAA,SAAA,EAXuBA,EAAA,OAAA,QAAAD,EAAA,UAAA,EAAAA,EAAA,mBAAA,MAAAE,EAAA,CAKtBF,EAAA,WAAAC,EAAA,OAAA,QAAA,CADsB,CAAA,GAAAD,EAAA,mBAAA,GAAA,EAAA,gCAMtBA,EAAA,WAAAC,EAAA,OAAA,UAAA,qWCbQE,KAAAA,EAAAA,OACPC,MAAAA,EAAAA,KACCD,QAAAA,EAAAA,0BAEGE,EAAAA,KAAAA,EAAAA,CAAAA,iIAIgFA,CAAAA,qBAK5EF,EAAAA,sNCfP,mBAAA,4BAGSA,EAAAA,iCAEJ,EAAA,EAAAG,CAAA,MCPRC,EAAAC,EACAC,EAAAC,EACAC,EAAAC"}