@topvisor/ui 1.0.42-date.2 → 1.0.42-dev.2

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 (992) hide show
  1. package/.env_example +1 -0
  2. package/.gitlab-ci/.gitlab-ci.yml +27 -0
  3. package/.gitlab-ci/README.md +59 -0
  4. package/.gitlab-ci/common/install.yml +21 -0
  5. package/.gitlab-ci/common/lint.yml +11 -0
  6. package/.gitlab-ci/common/redmine.yml +12 -0
  7. package/.gitlab-ci/common/version.yml +34 -0
  8. package/.gitlab-ci/storybook/build.yml +18 -0
  9. package/.gitlab-ci/storybook/deploy.yml +50 -0
  10. package/.gitlab-ci/ui/build.yml +12 -0
  11. package/.gitlab-ci/ui/deploy-dist.yml +89 -0
  12. package/.gitlab-ci/ui/deploy.yml +19 -0
  13. package/.idea/.gitignore +11 -0
  14. package/.idea/codeStyles/Project.xml +205 -0
  15. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  16. package/.idea/externalDependencies.xml +6 -0
  17. package/.idea/icon.svg +5 -0
  18. package/.idea/inspectionProfiles/Disabled.xml +824 -0
  19. package/.idea/inspectionProfiles/Project_Default.xml +33 -0
  20. package/.idea/modules.xml +8 -0
  21. package/.idea/php.xml +19 -0
  22. package/.idea/ui.iml +8 -0
  23. package/.idea/vcs.xml +6 -0
  24. package/.storybook/TopTheme.ts +115 -0
  25. package/.storybook/TopThemeManager.ts +53 -0
  26. package/.storybook/argsArrayDecorator.ts +120 -0
  27. package/.storybook/main.ts +78 -0
  28. package/.storybook/manager.ts +25 -0
  29. package/.storybook/preview-head.html +21 -0
  30. package/.storybook/preview.ts +50 -0
  31. package/.storybook/vue/coreDecorator.ts +86 -0
  32. package/.storybook/vue/vModelDecorator.ts +46 -0
  33. package/.versionrc.json +16 -0
  34. package/.vscode/extensions.json +11 -0
  35. package/.vscode/keybindings.example.json +121 -0
  36. package/.vscode/settings.json +45 -0
  37. package/CHANGELOG.md +428 -0
  38. package/NPM.md +25 -0
  39. package/PUBLISH.md +88 -0
  40. package/README.md +37 -59
  41. package/STORYBOOK.md +41 -0
  42. package/USE_IN_PROJECT.md +32 -0
  43. package/package.json +63 -2
  44. package/public/README.md +82 -0
  45. package/rollup.config.ts +38 -0
  46. package/scripts/afterBuild.sh +13 -0
  47. package/scripts/cssModules.ts +39 -0
  48. package/scripts/genDocs.sh +20 -0
  49. package/scripts/plugin/amdFix.ts +83 -0
  50. package/scripts/plugin/autoloadCSS.ts +155 -0
  51. package/src/CHANGELOG.md.mdx +4 -0
  52. package/src/components/charts/charts.ts +8 -0
  53. package/src/components/charts/miniChart/miniChart.stories.ts +66 -0
  54. package/src/components/charts/miniChart/miniChart.vue +158 -0
  55. package/src/components/charts/miniChart/stories/README.md +9 -0
  56. package/src/components/charts/miniChart/stories/dummy.ts +25 -0
  57. package/src/components/charts/miniChart/styles/miniChart.css +87 -0
  58. package/src/components/charts/miniChart/types.ts +110 -0
  59. package/src/components/charts/miniChart/utils/consts.ts +9 -0
  60. package/src/components/charts/miniCharts/miniCharts.stories.ts +75 -0
  61. package/src/components/charts/miniCharts/miniCharts.ts +24 -0
  62. package/src/components/charts/miniCharts/miniCharts.vue +124 -0
  63. package/src/components/charts/miniCharts/stories/README.md +18 -0
  64. package/src/components/charts/miniCharts/stories/dummy.ts +70 -0
  65. package/src/components/charts/miniCharts/stories/overview.vue +139 -0
  66. package/src/components/charts/miniCharts/styles/miniCharts.css +32 -0
  67. package/src/components/component.ts +130 -0
  68. package/src/components/core/core.mdx +7 -0
  69. package/src/components/core/notice/item/item.vue +145 -0
  70. package/src/components/core/notice/item/style.css +70 -0
  71. package/src/components/core/notice/item/types.ts +74 -0
  72. package/src/components/core/notice/notice.stories.ts +104 -0
  73. package/src/components/core/notice/notice.vue +69 -0
  74. package/src/components/core/notice/stories/README.md +34 -0
  75. package/src/components/core/notice/utils.ts +115 -0
  76. package/src/components/dialog/dialog/Dialog (code).mdx +61 -0
  77. package/src/components/dialog/dialog/composables/asyncDialogHandle.ts +99 -0
  78. package/src/components/dialog/dialog/composables/dialogHandle.ts +178 -0
  79. package/src/components/dialog/dialog/composables/types.ts +12 -0
  80. package/src/components/dialog/dialog/composables/utils.ts +39 -0
  81. package/src/components/dialog/dialog/dialog.stories.ts +82 -0
  82. package/src/components/dialog/dialog/dialog.vue +74 -0
  83. package/src/components/dialog/dialog/dialogs/dialogs.vue +61 -0
  84. package/src/components/dialog/dialog/page/page.vue +86 -0
  85. package/src/components/dialog/dialog/page/types.ts +84 -0
  86. package/src/components/dialog/dialog/page.stories.ts +26 -0
  87. package/src/components/dialog/dialog/pageComponent/pageComponent.vue +57 -0
  88. package/src/components/dialog/dialog/pageComponent/types.ts +21 -0
  89. package/src/components/dialog/dialog/pageComponent.stories.ts +26 -0
  90. package/src/components/dialog/dialog/stories/README.md +117 -0
  91. package/src/components/dialog/dialog/stories/autoload.ts +12 -0
  92. package/src/components/dialog/dialog/stories/dialog_example/dialog_example.vue +77 -0
  93. package/src/components/dialog/dialog/stories/dialog_example/pages/async.vue +57 -0
  94. package/src/components/dialog/dialog/stories/dialog_example/pages/default.vue +56 -0
  95. package/src/components/dialog/dialog/stories/dialog_example/pages/headerButtons.vue +56 -0
  96. package/src/components/dialog/dialog/stories/dialog_example/pages/utils.ts +26 -0
  97. package/src/components/dialog/dialog/stories/dialog_example/pages/withoutCache.vue +56 -0
  98. package/src/components/dialog/dialog/stories/page/README.md +24 -0
  99. package/src/components/dialog/dialog/stories/pageComponent/README.md +12 -0
  100. package/src/components/dialog/dialog/style/dialog.css +319 -0
  101. package/src/components/dialog/dialog/style/dialog.m.css +40 -0
  102. package/src/components/dialog/dialog/style/dialog.pc.css +73 -0
  103. package/src/components/dialog/dialog/style/modern/dialog.css +12 -0
  104. package/src/components/dialog/dialog/style/modern/dialog.pc.css +3 -0
  105. package/src/components/dialog/dialog/types.ts +69 -0
  106. package/src/components/dialog/dialog.ts +7 -0
  107. package/src/components/dialog/lib/types.ts +42 -0
  108. package/src/components/dialog/lib/utils.globalEvents.ts +214 -0
  109. package/src/components/dialog/lib/utils.ts +656 -0
  110. package/src/components/dialog/lib/worker.ts +362 -0
  111. package/src/components/extra/extra.ts +5 -0
  112. package/src/components/extra/rive/rive.vue +56 -0
  113. package/src/components/extra/rive/rives.stories.ts +65 -0
  114. package/src/components/extra/rive/stories/README.md +40 -0
  115. package/src/components/extra/rive/stories/nope.riv +0 -0
  116. package/src/components/extra/rive/stories/sadness.riv +0 -0
  117. package/src/components/extra/rive/types.ts +8 -0
  118. package/src/components/forms/README.mdx +10 -0
  119. package/src/components/forms/avatar/avatar.stories.ts +37 -0
  120. package/src/components/forms/avatar/avatar.vue +77 -0
  121. package/src/components/forms/avatar/stories/overview.vue +30 -0
  122. package/src/components/forms/avatar/types.ts +38 -0
  123. package/src/components/forms/button/button.stories.ts +117 -0
  124. package/src/components/forms/button/button.vue +111 -0
  125. package/src/components/forms/button/stories/README.md +9 -0
  126. package/src/components/forms/button/stories/overview.vue +36 -0
  127. package/src/components/forms/button/style/button.css +146 -0
  128. package/src/components/forms/button/style/style-outline.css +129 -0
  129. package/src/components/forms/button/style/style-soft.css +89 -0
  130. package/src/components/forms/button/style/style-transparent.css +39 -0
  131. package/src/components/forms/button/types.ts +59 -0
  132. package/src/components/forms/caption/caption.stories.ts +108 -0
  133. package/src/components/forms/caption/caption.vue +29 -0
  134. package/src/components/forms/caption/types.ts +10 -0
  135. package/src/components/forms/checkbox/checkbox.stories.ts +32 -0
  136. package/src/components/forms/checkbox/checkbox.vue +115 -0
  137. package/src/components/forms/checkbox/stories/overview.vue +171 -0
  138. package/src/components/forms/checkbox/types.ts +21 -0
  139. package/src/components/forms/controlLabel/controlLabel.stories.ts +31 -0
  140. package/src/components/forms/controlLabel/controlLabel.vue +54 -0
  141. package/src/components/forms/controlLabel/types.ts +4 -0
  142. package/src/components/forms/forms.ts +44 -0
  143. package/src/components/forms/hint/hint.stories.ts +40 -0
  144. package/src/components/forms/hint/hint.vue +32 -0
  145. package/src/components/forms/hint/types.ts +8 -0
  146. package/src/components/forms/input/input.stories.ts +31 -0
  147. package/src/components/forms/input/input.vue +178 -0
  148. package/src/components/forms/input/stories/overview.vue +63 -0
  149. package/src/components/forms/input/types.ts +31 -0
  150. package/src/components/forms/inputDate/datepicker.css +246 -0
  151. package/src/components/forms/inputDate/datepicker.ts +101 -0
  152. package/src/components/forms/inputDate/inputDate.stories.ts +40 -0
  153. package/src/components/forms/inputDate/inputDate.vue +133 -0
  154. package/src/components/forms/inputDate/stories/overview.vue +35 -0
  155. package/src/components/forms/inputDate/types.ts +1 -0
  156. package/src/components/forms/inputRange/inputRange.stories.ts +52 -0
  157. package/src/components/forms/inputRange/inputRange.vue +39 -0
  158. package/src/components/forms/inputRange/stories/overview.vue +129 -0
  159. package/src/components/forms/inputRange/types.ts +3 -0
  160. package/src/components/forms/loadbar/loadbar.stories.ts +22 -0
  161. package/src/components/forms/loadbar/loadbar.vue +37 -0
  162. package/src/components/forms/loadbar/stories/README.md +6 -0
  163. package/src/components/forms/preloader/preloader.stories.ts +46 -0
  164. package/src/components/forms/preloader/preloader.vue +103 -0
  165. package/src/components/forms/preloader/stories/README.md +26 -0
  166. package/src/components/forms/preloader/types.ts +3 -0
  167. package/src/components/forms/radio/radio.stories.ts +33 -0
  168. package/src/components/forms/radio/radio.vue +97 -0
  169. package/src/components/forms/radio/stories/overview.vue +79 -0
  170. package/src/components/forms/radio/types.ts +15 -0
  171. package/src/components/forms/select/select.stories.ts +68 -0
  172. package/src/components/forms/select/select.vue +299 -0
  173. package/src/components/forms/select/stories/exampleOptions.ts +61 -0
  174. package/src/components/forms/select/stories/overview.vue +72 -0
  175. package/src/components/forms/select/types.ts +68 -0
  176. package/src/components/forms/switcher/stories/overview.vue +139 -0
  177. package/src/components/forms/switcher/switcher.stories.ts +32 -0
  178. package/src/components/forms/switcher/switcher.vue +118 -0
  179. package/src/components/forms/switcher/types.ts +22 -0
  180. package/src/components/forms/textarea/stories/overview.vue +89 -0
  181. package/src/components/forms/textarea/textarea.stories.ts +33 -0
  182. package/src/components/forms/textarea/textarea.vue +143 -0
  183. package/src/components/forms/textarea/types.ts +52 -0
  184. package/src/components/formsExt/README.mdx +5 -0
  185. package/src/components/formsExt/checkboxGroup/checkboxGroup.stories.ts +36 -0
  186. package/src/components/formsExt/checkboxGroup/checkboxGroup.vue +159 -0
  187. package/src/components/formsExt/checkboxGroup/stories/example.ts +42 -0
  188. package/src/components/formsExt/checkboxGroup/stories/overview.vue +36 -0
  189. package/src/components/formsExt/checkboxGroup/types.ts +23 -0
  190. package/src/components/formsExt/editArea/editArea.stories.ts +40 -0
  191. package/src/components/formsExt/editArea/editArea.vue +194 -0
  192. package/src/components/formsExt/editArea/stories/README.md +21 -0
  193. package/src/components/formsExt/editArea/stories/overview.vue +67 -0
  194. package/src/components/formsExt/editArea/types.ts +41 -0
  195. package/src/components/formsExt/editInput/editInput.stories.ts +35 -0
  196. package/src/components/formsExt/editInput/editInput.vue +54 -0
  197. package/src/components/formsExt/editInput/stories/overview.vue +54 -0
  198. package/src/components/formsExt/editInput/types.ts +20 -0
  199. package/src/components/formsExt/formsExt.ts +19 -0
  200. package/src/components/formsExt/info/info.stories.ts +34 -0
  201. package/src/components/formsExt/info/info.vue +84 -0
  202. package/src/components/formsExt/info/stories/overview.vue +29 -0
  203. package/src/components/formsExt/info/types.ts +25 -0
  204. package/src/components/formsExt/menu/menu.stories.ts +58 -0
  205. package/src/components/formsExt/menu/menu.vue +324 -0
  206. package/src/components/formsExt/menu/stories/items.ts +18 -0
  207. package/src/components/formsExt/menu/stories/overview.vue +52 -0
  208. package/src/components/formsExt/menu/types.ts +45 -0
  209. package/src/components/formsExt/policy/policy.stories.ts +66 -0
  210. package/src/components/formsExt/policy/policy.vue +75 -0
  211. package/src/components/formsExt/policy/types.ts +11 -0
  212. package/src/components/formsExt/radioGroup/radioGroup.stories.ts +35 -0
  213. package/src/components/formsExt/radioGroup/radioGroup.vue +142 -0
  214. package/src/components/formsExt/radioGroup/stories/example.ts +43 -0
  215. package/src/components/formsExt/radioGroup/stories/overview.vue +35 -0
  216. package/src/components/formsExt/radioGroup/types.ts +27 -0
  217. package/src/components/formsExt/selector2/composables/useAPI.ts +151 -0
  218. package/src/components/formsExt/selector2/composables/useMenu.ts +165 -0
  219. package/src/components/formsExt/selector2/itemMulti.vue +57 -0
  220. package/src/components/formsExt/selector2/selector2.stories.ts +123 -0
  221. package/src/components/formsExt/selector2/selector2.vue +448 -0
  222. package/src/components/formsExt/selector2/stories/README.md +146 -0
  223. package/src/components/formsExt/selector2/stories/dummyAPIRequest.ts +57 -0
  224. package/src/components/formsExt/selector2/stories/overview.vue +95 -0
  225. package/src/components/formsExt/selector2/types.ts +184 -0
  226. package/src/components/formsExt/selector2/utils.ts +22 -0
  227. package/src/components/helpersStories.ts +331 -0
  228. package/src/components/layout/islandRows/islandRows.stories.ts +138 -0
  229. package/src/components/layout/islandRows/islandRows.vue +53 -0
  230. package/src/components/layout/islandRows/islandRowsRow/islandRowsRow.vue +36 -0
  231. package/src/components/layout/islandRows/islandRowsRow/types.ts +1 -0
  232. package/src/components/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue +16 -0
  233. package/src/components/layout/islandRows/stories/README.md +8 -0
  234. package/src/components/layout/islandRows/types.ts +11 -0
  235. package/src/components/layout/layout.ts +11 -0
  236. package/src/components/layout/rows/rows.stories.ts +47 -0
  237. package/src/components/layout/rows/rows.vue +46 -0
  238. package/src/components/layout/rows/stories/README.md +10 -0
  239. package/src/components/layout/rows/types.ts +6 -0
  240. package/src/components/popup/alert/alert.stories.ts +70 -0
  241. package/src/components/popup/alert/alert.vue +49 -0
  242. package/src/components/popup/alert/stories/overview.vue +40 -0
  243. package/src/components/popup/alert/types.ts +11 -0
  244. package/src/components/popup/confirm/confirm.stories.ts +74 -0
  245. package/src/components/popup/confirm/confirm.vue +78 -0
  246. package/src/components/popup/confirm/stories/overview.vue +62 -0
  247. package/src/components/popup/confirm/types.ts +26 -0
  248. package/src/components/popup/lib/popup.globalEvents.ts +271 -0
  249. package/src/components/popup/lib/popup.ts +858 -0
  250. package/src/components/popup/lib/worker.globalEvents.ts +101 -0
  251. package/src/components/popup/lib/worker.ts +305 -0
  252. package/src/components/popup/popup/listItem.vue +35 -0
  253. package/src/components/popup/popup/opener.vue +82 -0
  254. package/src/components/popup/popup/popup.stories.ts +73 -0
  255. package/src/components/popup/popup/popup.vue +176 -0
  256. package/src/components/popup/popup/stories/README.md +145 -0
  257. package/src/components/popup/popup/stories/listItems.vue +69 -0
  258. package/src/components/popup/popup/stories/listSubItems.vue +47 -0
  259. package/src/components/popup/popup/stories/overview.vue +224 -0
  260. package/src/components/popup/popup/style/popup.css +355 -0
  261. package/src/components/popup/popup/style/popup.m.css +70 -0
  262. package/src/components/popup/popup/style/popup.pc.css +26 -0
  263. package/src/components/popup/popup/types.ts +131 -0
  264. package/src/components/popup/popup/widgetInput.vue +43 -0
  265. package/src/components/popup/popup.ts +17 -0
  266. package/src/components/popup/prompt/prompt.stories.ts +76 -0
  267. package/src/components/popup/prompt/prompt.vue +87 -0
  268. package/src/components/popup/prompt/stories/overview.vue +50 -0
  269. package/src/components/popup/prompt/types.ts +26 -0
  270. package/src/components/project/project.ts +23 -0
  271. package/src/components/project/selectorCompetitors/composables.ts +20 -0
  272. package/src/components/project/selectorCompetitors/selectorCompetitors.stories.ts +32 -0
  273. package/src/components/project/selectorCompetitors/selectorCompetitors.vue +75 -0
  274. package/src/components/project/selectorCompetitors/stories/README.md +20 -0
  275. package/src/components/project/selectorCompetitors/stories/items.ts +30 -0
  276. package/src/components/project/selectorCompetitors/types.ts +35 -0
  277. package/src/components/project/selectorRegion/composables/compare.ts +87 -0
  278. package/src/components/project/selectorRegion/composables/selectRegion.ts +146 -0
  279. package/src/components/project/selectorRegion/composables/selectSearcher.ts +64 -0
  280. package/src/components/project/selectorRegion/composables/selectorRegion.ts +167 -0
  281. package/src/components/project/selectorRegion/dialog_selectorRegions/dialog_selectorRegions.vue +252 -0
  282. package/src/components/project/selectorRegion/dialog_selectorRegions/style.css +49 -0
  283. package/src/components/project/selectorRegion/dialog_selectorRegions/types.ts +31 -0
  284. package/src/components/project/selectorRegion/selectorRegion.stories.ts +84 -0
  285. package/src/components/project/selectorRegion/selectorRegion.vue +365 -0
  286. package/src/components/project/selectorRegion/stories/README.md +36 -0
  287. package/src/components/project/selectorRegion/stories/searchers.ts +77 -0
  288. package/src/components/project/selectorRegion/styles/searcherColors.css +41 -0
  289. package/src/components/project/selectorRegion/types.ts +206 -0
  290. package/src/components/project/selectorRegion/utils/consts.ts +88 -0
  291. package/src/components/project/selectorRegion/utils/utils.ts +178 -0
  292. package/src/components/project/tagSelector/popupListItem/tagPopupListItem.vue +209 -0
  293. package/src/components/project/tagSelector/popupListItem/types.ts +40 -0
  294. package/src/components/project/tagSelector/popupOpener/popupOpener.vue +140 -0
  295. package/src/components/project/tagSelector/popupOpener/types.ts +74 -0
  296. package/src/components/project/tagSelector/stories/README.md +62 -0
  297. package/src/components/project/tagSelector/stories/overview.vue +152 -0
  298. package/src/components/project/tagSelector/tagIcon/tagIcon.vue +96 -0
  299. package/src/components/project/tagSelector/tagIcon/types.ts +25 -0
  300. package/src/components/project/tagSelector/tagSelector.stories.ts +50 -0
  301. package/src/components/project/tagSelector/tagSelector.vue +360 -0
  302. package/src/components/project/tagSelector/tagsDefaults.ts +54 -0
  303. package/src/components/project/tagSelector/types.ts +162 -0
  304. package/src/components/project/tagSelector/utils/el.ts +151 -0
  305. package/src/components/project/tagSelector/utils/utils.ts +30 -0
  306. package/src/components/tabs/tabs/content.vue +24 -0
  307. package/src/components/tabs/tabs/stories/README.md +12 -0
  308. package/src/components/tabs/tabs/tab.vue +49 -0
  309. package/src/components/tabs/tabs/tabs.stories.ts +170 -0
  310. package/src/components/tabs/tabs/tabs.vue +64 -0
  311. package/src/components/tabs/tabs/types.ts +22 -0
  312. package/src/components/tabs/tabs.ts +9 -0
  313. package/src/components/tabsView/tabsView/menu.vue +291 -0
  314. package/src/components/tabsView/tabsView/menuDelimeter.vue +26 -0
  315. package/src/components/tabsView/tabsView/menuItem.vue +125 -0
  316. package/src/components/tabsView/tabsView/menuTitle.vue +46 -0
  317. package/src/components/tabsView/tabsView/store.ts +60 -0
  318. package/src/components/tabsView/tabsView/stories/README.md +22 -0
  319. package/src/components/tabsView/tabsView/tabsView.stories.ts +169 -0
  320. package/src/components/tabsView/tabsView/tabsView.vue +120 -0
  321. package/src/components/tabsView/tabsView/types.ts +118 -0
  322. package/src/components/tabsView/tabsView/utils.ts +27 -0
  323. package/src/components/tabsView/tabsView//320/255/320/273/320/265/320/274/320/265/320/275/321/202/321/213/MenuItem.stories.ts +46 -0
  324. package/src/components/tabsView/tabsView//320/255/320/273/320/265/320/274/320/265/320/275/321/202/321/213/MenuTitle.stories.ts +42 -0
  325. package/src/components/tabsView/tabsView.ts +9 -0
  326. package/src/components/types.ts +6 -0
  327. package/src/core/app.ts +22 -0
  328. package/src/core/core/core.mdx +36 -0
  329. package/src/core/core/core.ts +287 -0
  330. package/src/core/core/events/resize.ts +47 -0
  331. package/src/core/core/events.ts +6 -0
  332. package/src/core/core/jQuery.mdx +41 -0
  333. package/src/core/core/options.ts +52 -0
  334. package/src/core/core/preloaders.ts +31 -0
  335. package/src/core/core/state.ts +61 -0
  336. package/src/core/directives/data.mdx +24 -0
  337. package/src/core/directives/data.ts +25 -0
  338. package/src/core/directives/focus.mdx +28 -0
  339. package/src/core/directives/focus.ts +73 -0
  340. package/src/core/directives/preloader.ts +23 -0
  341. package/src/core/directives/scrollIntoView.mdx +41 -0
  342. package/src/core/directives/scrollIntoView.ts +123 -0
  343. package/src/core/directives/scrollShadow.mdx +23 -0
  344. package/src/core/directives/scrollShadow.ts +27 -0
  345. package/src/core/directives/sticky.mdx +29 -0
  346. package/src/core/directives/sticky.ts +32 -0
  347. package/src/core/directives/swimUp.mdx +27 -0
  348. package/src/core/directives/swimUp.ts +95 -0
  349. package/src/core/directives/tooltip.mdx +13 -0
  350. package/src/core/directives/tooltip.ts +57 -0
  351. package/src/core/icons/gallery.vue +70 -0
  352. package/src/core/icons/icons.mdx +24 -0
  353. package/src/core/icons/icons.stories.ts +14 -0
  354. package/src/core/plugins/core.ts +131 -0
  355. package/src/core/plugins/i18n.ts +189 -0
  356. package/src/core/plugins/piniaTPA.ts +432 -0
  357. package/src/core/plugins/plugins.mdx +82 -0
  358. package/src/core/styles/CSS Variables.stories.ts +17 -0
  359. package/src/core/styles/styles.mdx +26 -0
  360. package/src/core/theme/Variables.stories.ts +16 -0
  361. package/src/core/theme/theme.mdx +117 -0
  362. package/src/core/utils/References/Docs.mdx +23 -0
  363. package/src/core/utils/References/check/Docs.mdx +13 -0
  364. package/src/core/utils/References/check/functions/getDomainRegexp.mdx +13 -0
  365. package/src/core/utils/References/check/functions/isDomain.mdx +19 -0
  366. package/src/core/utils/References/check/functions/isEmail.mdx +20 -0
  367. package/src/core/utils/References/check/functions/isIp.mdx +19 -0
  368. package/src/core/utils/References/check/functions/validUrl.mdx +20 -0
  369. package/src/core/utils/References/clipboard/Docs.mdx +8 -0
  370. package/src/core/utils/References/clipboard/functions/guestLinkToClipboard.mdx +19 -0
  371. package/src/core/utils/References/clipboard/functions/setClipboard.mdx +20 -0
  372. package/src/core/utils/References/date/Docs.mdx +15 -0
  373. package/src/core/utils/References/date/functions/dateFormat.mdx +26 -0
  374. package/src/core/utils/References/date/functions/dateToString.mdx +24 -0
  375. package/src/core/utils/References/date/functions/dateUnformat.mdx +20 -0
  376. package/src/core/utils/References/date/functions/genDate.mdx +24 -0
  377. package/src/core/utils/References/date/functions/genDateMoscow.mdx +20 -0
  378. package/src/core/utils/References/date/functions/getDayOfWeek.mdx +24 -0
  379. package/src/core/utils/References/date/functions/stringToDate.mdx +19 -0
  380. package/src/core/utils/References/device/Docs.mdx +19 -0
  381. package/src/core/utils/References/device/functions/get$scroll.mdx +13 -0
  382. package/src/core/utils/References/device/functions/getCommandKeyLabel.mdx +13 -0
  383. package/src/core/utils/References/device/functions/getElsScroll.mdx +13 -0
  384. package/src/core/utils/References/device/functions/getOS.mdx +15 -0
  385. package/src/core/utils/References/device/functions/getOSAsync.mdx +13 -0
  386. package/src/core/utils/References/device/functions/getScrollTop.mdx +13 -0
  387. package/src/core/utils/References/device/functions/isApp.mdx +13 -0
  388. package/src/core/utils/References/device/functions/isMacOS.mdx +13 -0
  389. package/src/core/utils/References/device/functions/isMobile.mdx +13 -0
  390. package/src/core/utils/References/device/functions/isRetina.mdx +13 -0
  391. package/src/core/utils/References/device/functions/isSafari.mdx +13 -0
  392. package/src/core/utils/References/dom/Docs.mdx +25 -0
  393. package/src/core/utils/References/dom/functions/css.mdx +22 -0
  394. package/src/core/utils/References/dom/functions/genEl.mdx +26 -0
  395. package/src/core/utils/References/dom/functions/isVisible.mdx +21 -0
  396. package/src/core/utils/References/dom/functions/offset.mdx +33 -0
  397. package/src/core/utils/References/dom/functions/querySelectorAllArray.mdx +20 -0
  398. package/src/core/utils/References/dom/functions/querySelectorAllVisible.mdx +20 -0
  399. package/src/core/utils/References/dom/functions/querySelectorVisible.mdx +23 -0
  400. package/src/core/utils/References/dom/functions/querySelectorVisibleLast.mdx +23 -0
  401. package/src/core/utils/References/dom/functions/storage.mdx +26 -0
  402. package/src/core/utils/References/dom/functions/storageClear.mdx +19 -0
  403. package/src/core/utils/References/dom/functions/wrap.mdx +20 -0
  404. package/src/core/utils/References/dom/variables/default.mdx +245 -0
  405. package/src/core/utils/References/image/Docs.mdx +10 -0
  406. package/src/core/utils/References/image/functions/downloadImageFromString.mdx +20 -0
  407. package/src/core/utils/References/image/functions/genFaviconImgHtml.mdx +20 -0
  408. package/src/core/utils/References/keyboard/Docs.mdx +9 -0
  409. package/src/core/utils/References/keyboard/functions/invertKeyboardLayout.mdx +19 -0
  410. package/src/core/utils/References/lodash/Docs.mdx +18 -0
  411. package/src/core/utils/References/lodash/functions/cloneDeep.mdx +27 -0
  412. package/src/core/utils/References/lodash/functions/debounce.mdx +72 -0
  413. package/src/core/utils/References/lodash/functions/merge.mdx +190 -0
  414. package/src/core/utils/References/lodash/functions/throttle.mdx +69 -0
  415. package/src/core/utils/References/lodash/variables/memoize.mdx +42 -0
  416. package/src/core/utils/References/number/Docs.mdx +10 -0
  417. package/src/core/utils/References/number/functions/percentOfNumber.mdx +24 -0
  418. package/src/core/utils/References/number/functions/randomBySeed.mdx +21 -0
  419. package/src/core/utils/References/price/Docs.mdx +9 -0
  420. package/src/core/utils/References/price/functions/genPrice.mdx +26 -0
  421. package/src/core/utils/References/route/Docs.mdx +14 -0
  422. package/src/core/utils/References/route/functions/delHash.mdx +24 -0
  423. package/src/core/utils/References/route/functions/genHash.mdx +24 -0
  424. package/src/core/utils/References/route/functions/getHash.mdx +20 -0
  425. package/src/core/utils/References/route/functions/historySetState.mdx +29 -0
  426. package/src/core/utils/References/route/functions/setHash.mdx +24 -0
  427. package/src/core/utils/References/route/functions/setHashs.mdx +20 -0
  428. package/src/core/utils/References/scroll/Docs.mdx +13 -0
  429. package/src/core/utils/References/scroll/functions/amountScrolled.mdx +15 -0
  430. package/src/core/utils/References/scroll/functions/connectScrollShadow.mdx +26 -0
  431. package/src/core/utils/References/scroll/functions/genHasScroll.mdx +23 -0
  432. package/src/core/utils/References/scroll/functions/getScrollPercent.mdx +19 -0
  433. package/src/core/utils/References/scroll/functions/unconnectScrollShadow.mdx +17 -0
  434. package/src/core/utils/References/searchers/Docs.mdx +17 -0
  435. package/src/core/utils/References/searchers/functions/genVolumeLabel.mdx +24 -0
  436. package/src/core/utils/References/searchers/functions/getDeviceGIcon.mdx +19 -0
  437. package/src/core/utils/References/searchers/functions/getLangLabel.mdx +20 -0
  438. package/src/core/utils/References/searchers/functions/getSearcherGIcon.mdx +19 -0
  439. package/src/core/utils/References/searchers/functions/prepareVolumeType.mdx +20 -0
  440. package/src/core/utils/References/searchers/variables/searchersNames.mdx +83 -0
  441. package/src/core/utils/References/store/Docs.mdx +22 -0
  442. package/src/core/utils/References/store/functions/defineStore.mdx +34 -0
  443. package/src/core/utils/References/store/functions/useStore.mdx +27 -0
  444. package/src/core/utils/References/store/interfaces/Store.mdx +29 -0
  445. package/src/core/utils/References/store/variables/plugin.mdx +64 -0
  446. package/src/core/utils/References/string/Docs.mdx +24 -0
  447. package/src/core/utils/References/string/functions/addCommasWhite.mdx +19 -0
  448. package/src/core/utils/References/string/functions/addLinkTags.mdx +21 -0
  449. package/src/core/utils/References/string/functions/camelToSnakeCase.mdx +19 -0
  450. package/src/core/utils/References/string/functions/ellipsis.mdx +24 -0
  451. package/src/core/utils/References/string/functions/genFlagLinkByCountryCode.mdx +23 -0
  452. package/src/core/utils/References/string/functions/genIntHash.mdx +19 -0
  453. package/src/core/utils/References/string/functions/getRandomHash.mdx +19 -0
  454. package/src/core/utils/References/string/functions/highlightHtml.mdx +23 -0
  455. package/src/core/utils/References/string/functions/htmlspecialchars.mdx +19 -0
  456. package/src/core/utils/References/string/functions/isUrl.mdx +19 -0
  457. package/src/core/utils/References/string/functions/nl2br.mdx +19 -0
  458. package/src/core/utils/References/string/functions/numberEnding.mdx +26 -0
  459. package/src/core/utils/References/string/functions/numberWithWord.mdx +26 -0
  460. package/src/core/utils/References/string/functions/rusToLatin.mdx +19 -0
  461. package/src/core/utils/References/string/functions/toCapitalize.mdx +19 -0
  462. package/src/core/utils/References/string/functions/toRoditPadej.mdx +19 -0
  463. package/src/core/utils/References/system/Docs.mdx +11 -0
  464. package/src/core/utils/References/system/functions/sleep.mdx +19 -0
  465. package/src/core/utils/References/system/functions/sleepWhile.mdx +27 -0
  466. package/src/core/utils/References/system/functions/waitWhile.mdx +27 -0
  467. package/src/core/utils/References/url/Docs.mdx +15 -0
  468. package/src/core/utils/References/url/functions/decode.mdx +19 -0
  469. package/src/core/utils/References/url/functions/encode.mdx +19 -0
  470. package/src/core/utils/References/url/functions/fromPuny.mdx +21 -0
  471. package/src/core/utils/References/url/functions/getHost.mdx +19 -0
  472. package/src/core/utils/References/url/functions/hostToLowerCase.mdx +19 -0
  473. package/src/core/utils/References/url/functions/normalize.mdx +19 -0
  474. package/src/core/utils/References/url/functions/toPuny.mdx +21 -0
  475. package/src/core/utils/check.ts +88 -0
  476. package/src/core/utils/clipboard.ts +51 -0
  477. package/src/core/utils/date.ts +334 -0
  478. package/src/core/utils/device.ts +139 -0
  479. package/src/core/utils/dom.ts +195 -0
  480. package/src/core/utils/image.ts +46 -0
  481. package/src/core/utils/keyboard.ts +29 -0
  482. package/src/core/utils/lodash.ts +18 -0
  483. package/src/core/utils/number.ts +37 -0
  484. package/src/core/utils/price.ts +24 -0
  485. package/src/core/utils/route.ts +130 -0
  486. package/src/core/utils/scroll.ts +120 -0
  487. package/src/core/utils/searchers.ts +191 -0
  488. package/src/core/utils/store/localStorage.ts +56 -0
  489. package/src/core/utils/store/plugin.ts +50 -0
  490. package/src/core/utils/store/store.ts +77 -0
  491. package/src/core/utils/store.ts +7 -0
  492. package/src/core/utils/string.ts +349 -0
  493. package/src/core/utils/system.ts +72 -0
  494. package/src/core/utils/url.ts +138 -0
  495. package/src/core/utils/utils.mdx +6 -0
  496. package/src/d.ts +12 -0
  497. package/src/icomoon.d.ts +98 -0
  498. package/src/resources/styles/core/components/bage.css +16 -0
  499. package/src/resources/styles/core/components/components.css +94 -0
  500. package/src/resources/styles/core/components/formsCaption.css +43 -0
  501. package/src/resources/styles/core/components/jquery.css +19 -0
  502. package/src/resources/styles/core/core.ts +14 -0
  503. package/src/resources/styles/core/forms/clear.css +20 -0
  504. package/src/resources/styles/core/forms/controls.css +20 -0
  505. package/src/resources/styles/core/forms/focusable.css +27 -0
  506. package/src/resources/styles/core/forms/forms.css +178 -0
  507. package/src/resources/styles/core/icon.css +58 -0
  508. package/src/resources/styles/core/jquery.css +1 -0
  509. package/src/resources/styles/core/layout.css +59 -0
  510. package/src/resources/styles/core/modifiers/as.css +33 -0
  511. package/src/resources/styles/core/modifiers/ellipsis.css +26 -0
  512. package/src/resources/styles/core/modifiers/modifiers.css +120 -0
  513. package/src/resources/styles/core/modifiers/only.css +23 -0
  514. package/src/resources/styles/core/modifiers/scrollBar.css +52 -0
  515. package/src/resources/styles/core/modifiers/scrollShadow.css +50 -0
  516. package/src/resources/styles/storybook.css +11 -0
  517. package/src/resources/styles/themes/dark/dark-layout.css +47 -0
  518. package/src/resources/styles/themes/dark/dark-positions.css +66 -0
  519. package/src/resources/styles/themes/dark/dark.css +405 -0
  520. package/src/resources/styles/themes/dark-positions.ts +1 -0
  521. package/src/resources/styles/themes/dark-th/dark-th-layout.css +47 -0
  522. package/src/resources/styles/themes/dark-th/dark-th-positions.css +67 -0
  523. package/src/resources/styles/themes/dark-th/dark-th.css +405 -0
  524. package/src/resources/styles/themes/dark-th-positions.ts +1 -0
  525. package/src/resources/styles/themes/dark-th.ts +3 -0
  526. package/src/resources/styles/themes/dark.ts +3 -0
  527. package/src/resources/styles/themes/light/light-layout.css +47 -0
  528. package/src/resources/styles/themes/light/light-positions.css +66 -0
  529. package/src/resources/styles/themes/light/light.css +405 -0
  530. package/src/resources/styles/themes/light-positions.ts +1 -0
  531. package/src/resources/styles/themes/light.ts +3 -0
  532. package/src/storybook/components/color.vue +47 -0
  533. package/src/storybook/components/cssVariables.vue +195 -0
  534. package/src/storybook/components/icomoon.ts +40 -0
  535. package/src/storybook/jquery.ts +4 -0
  536. package/src//320/221/321/213/321/201/321/202/321/200/321/213/320/271 /321/201/321/202/320/260/321/200/321/202.mdx" +181 -0
  537. package/src//320/223/320/260/320/271/320/264/320/273/320/260/320/271/320/275.mdx +120 -0
  538. package/src//320/230/320/275/321/204/320/276/321/200/320/274/320/260/321/206/320/270/321/217 /320/276 /321/201/320/261/320/276/321/200/320/272/320/265.mdx" +14 -0
  539. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS/FAQ.mdx" +43 -0
  540. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/236/320/261/321/211/320/270/320/265 /320/274/320/276/320/264/320/270/321/204/320/270/320/272/320/260/321/202/320/276/321/200/321/213.mdx" +155 -0
  541. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/237/320/265/321/200/320/265/320/274/320/265/320/275/320/275/321/213/320/265.mdx" +35 -0
  542. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/237/321/200/320/265/320/264/320/277/321/200/320/276/321/206/320/265/321/201/321/201/320/276/321/200/321/213.mdx" +15 -0
  543. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/240/320/265/320/272/320/276/320/274/320/265/320/275/320/264/320/260/321/206/320/270/320/270 /320/221/320/255/320/234.mdx" +56 -0
  544. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/241/321/202/320/270/320/273/320/270.mdx" +53 -0
  545. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/CSS//320/247/321/202/320/276 /321/202/320/260/320/272/320/276/320/265 css /320/274/320/276/320/264/321/203/320/273/321/214.mdx" +55 -0
  546. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/PUBLISH.md.mdx" +4 -0
  547. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)/README.md.mdx" +4 -0
  548. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/222/320/262/320/265/320/264/320/265/320/275/320/270/320/265 /320/262 NPM.md.mdx" +4 -0
  549. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/224/320/276/320/277/320/276/320/273/320/275/320/270/321/202/320/265/320/273/321/214/320/275/320/260/321/217 /320/273/320/270/321/202/320/265/321/200/320/260/321/202/321/203/321/200/320/260.mdx" +15 -0
  550. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/230/321/201/320/277/320/276/320/273/321/214/320/267/320/276/320/262/320/260/320/275/320/270/320/265 /320/262 /320/277/321/200/320/276/320/265/320/272/321/202/320/260/321/205.mdx" +3 -0
  551. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260//320/235/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/260 IDE.mdx" +45 -0
  552. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260//320/236/321/204/320/276/321/200/320/274/320/273/320/265/320/275/320/270/320/265 /320/272/320/276/320/264/320/260.mdx" +33 -0
  553. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260//320/241/321/202/320/260/320/275/320/264/320/260/321/200/321/202/321/213 /320/272/320/276/320/264/320/260.mdx" +29 -0
  554. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI//320/232/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202/321/213//320/232/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202/321/213.mdx" +66 -0
  555. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI//320/232/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202/321/213//320/241/321/202/320/270/320/273/320/270 /320/272/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202/321/213.mdx" +58 -0
  556. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI.mdx" +11 -0
  557. package/src//320/240/320/260/320/267/321/200/320/260/320/261/320/276/321/202/320/272/320/260 (Contributing)//320/241/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260 UI//320/243/321/202/320/270/320/273/320/270/321/202/321/213.mdx" +5 -0
  558. package/storybook-dev.sh +14 -0
  559. package/tsconfig.json +91 -0
  560. package/typedoc.json +20 -0
  561. package/vite.config.ts +150 -0
  562. package/.chunks/core-BDx1sI2y.amd.js +0 -2
  563. package/.chunks/core-BDx1sI2y.amd.js.map +0 -1
  564. package/.chunks/core-CTWfwyjq.es.js +0 -197
  565. package/.chunks/core-CTWfwyjq.es.js.map +0 -1
  566. package/.chunks/datepicker-Esxy0UQA.amd.js +0 -2
  567. package/.chunks/datepicker-Esxy0UQA.amd.js.map +0 -1
  568. package/.chunks/datepicker-iaUT_eSc.es.js +0 -44
  569. package/.chunks/datepicker-iaUT_eSc.es.js.map +0 -1
  570. package/.chunks/dialog_selectorRegions-B-4xalwM.es.js +0 -188
  571. package/.chunks/dialog_selectorRegions-B-4xalwM.es.js.map +0 -1
  572. package/.chunks/dialog_selectorRegions-C7tvNWJk.amd.js +0 -2
  573. package/.chunks/dialog_selectorRegions-C7tvNWJk.amd.js.map +0 -1
  574. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-CqYKaqcT.amd.js +0 -2
  575. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-CqYKaqcT.amd.js.map +0 -1
  576. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-DBzDS_l7.es.js +0 -322
  577. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-DBzDS_l7.es.js.map +0 -1
  578. package/.chunks/forms-BZlFXc5U.es.js +0 -2052
  579. package/.chunks/forms-BZlFXc5U.es.js.map +0 -1
  580. package/.chunks/forms-DMI0BqCj.amd.js +0 -3
  581. package/.chunks/forms-DMI0BqCj.amd.js.map +0 -1
  582. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CACzwZ0A.amd.js +0 -2
  583. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CACzwZ0A.amd.js.map +0 -1
  584. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-KxTfgv5Z.es.js +0 -181
  585. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-KxTfgv5Z.es.js.map +0 -1
  586. package/.chunks/menu.vue_vue_type_style_index_0_lang-BMpVs3Du.es.js +0 -109
  587. package/.chunks/menu.vue_vue_type_style_index_0_lang-BMpVs3Du.es.js.map +0 -1
  588. package/.chunks/menu.vue_vue_type_style_index_0_lang-CIdaxq15.amd.js +0 -2
  589. package/.chunks/menu.vue_vue_type_style_index_0_lang-CIdaxq15.amd.js.map +0 -1
  590. package/.chunks/notice-C0QQCxdI.es.js +0 -175
  591. package/.chunks/notice-C0QQCxdI.es.js.map +0 -1
  592. package/.chunks/notice-ULAk8EKs.amd.js +0 -4
  593. package/.chunks/notice-ULAk8EKs.amd.js.map +0 -1
  594. package/.chunks/page.vue_vue_type_script_setup_true_lang-BjGqYm-r.es.js +0 -143
  595. package/.chunks/page.vue_vue_type_script_setup_true_lang-BjGqYm-r.es.js.map +0 -1
  596. package/.chunks/page.vue_vue_type_script_setup_true_lang-f557_PUb.amd.js +0 -2
  597. package/.chunks/page.vue_vue_type_script_setup_true_lang-f557_PUb.amd.js.map +0 -1
  598. package/.chunks/popup-BDm3_TJy.amd.js +0 -2
  599. package/.chunks/popup-BDm3_TJy.amd.js.map +0 -1
  600. package/.chunks/popup-Cl0Rac26.es.js +0 -426
  601. package/.chunks/popup-Cl0Rac26.es.js.map +0 -1
  602. package/.chunks/punycode.es6-C2yitnNb.amd.js +0 -2
  603. package/.chunks/punycode.es6-C2yitnNb.amd.js.map +0 -1
  604. package/.chunks/punycode.es6-CNI-zL6U.es.js +0 -134
  605. package/.chunks/punycode.es6-CNI-zL6U.es.js.map +0 -1
  606. package/.chunks/store-CX_6ZXhO.es.js +0 -29
  607. package/.chunks/store-CX_6ZXhO.es.js.map +0 -1
  608. package/.chunks/store-esTid5oI.amd.js +0 -2
  609. package/.chunks/store-esTid5oI.amd.js.map +0 -1
  610. package/.chunks/utils-BV1bu3yj.amd.js +0 -2
  611. package/.chunks/utils-BV1bu3yj.amd.js.map +0 -1
  612. package/.chunks/utils-BfXpHkpA.es.js +0 -304
  613. package/.chunks/utils-BfXpHkpA.es.js.map +0 -1
  614. package/.chunks/utils-C4bTrMJX.amd.js +0 -2
  615. package/.chunks/utils-C4bTrMJX.amd.js.map +0 -1
  616. package/.chunks/utils-D9KqMkio.es.js +0 -79
  617. package/.chunks/utils-D9KqMkio.es.js.map +0 -1
  618. package/assets/charts.css +0 -1
  619. package/assets/core.css +0 -1
  620. package/assets/dialog_selectorRegions.css +0 -1
  621. package/assets/extra.css +0 -1
  622. package/assets/forms.css +0 -1
  623. package/assets/formsExt.css +0 -1
  624. package/assets/layout.css +0 -1
  625. package/assets/listItem.css +0 -1
  626. package/assets/menu.css +0 -1
  627. package/assets/notice.css +0 -1
  628. package/assets/popup.css +0 -1
  629. package/assets/project.css +0 -1
  630. package/assets/tabs.css +0 -1
  631. package/assets/tabsView.css +0 -1
  632. package/assets/themes/dark-th.css +0 -1
  633. package/assets/themes/dark.css +0 -1
  634. package/assets/themes/light.css +0 -1
  635. package/charts/charts.amd.js +0 -2
  636. package/charts/charts.amd.js.map +0 -1
  637. package/charts/charts.d.ts +0 -2
  638. package/charts/charts.js +0 -178
  639. package/charts/charts.js.map +0 -1
  640. package/components/charts/charts.d.ts +0 -5
  641. package/components/charts/miniChart/miniChart.vue.d.ts +0 -15
  642. package/components/charts/miniChart/stories/dummy.d.ts +0 -13
  643. package/components/charts/miniChart/types.d.ts +0 -92
  644. package/components/charts/miniChart/utils/consts.d.ts +0 -8
  645. package/components/charts/miniCharts/miniCharts.d.ts +0 -20
  646. package/components/charts/miniCharts/miniCharts.vue.d.ts +0 -32
  647. package/components/charts/miniCharts/stories/dummy.d.ts +0 -6
  648. package/components/core/notice/item/item.vue.d.ts +0 -10
  649. package/components/core/notice/item/types.d.ts +0 -63
  650. package/components/core/notice/notice.vue.d.ts +0 -5
  651. package/components/core/notice/utils.d.ts +0 -27
  652. package/components/dialog/dialog/composables/asyncDialogHandle.d.ts +0 -51
  653. package/components/dialog/dialog/composables/dialogHandle.d.ts +0 -108
  654. package/components/dialog/dialog/composables/types.d.ts +0 -11
  655. package/components/dialog/dialog/composables/utils.d.ts +0 -21
  656. package/components/dialog/dialog/dialog.vue.d.ts +0 -28
  657. package/components/dialog/dialog/dialogs/dialogs.vue.d.ts +0 -13
  658. package/components/dialog/dialog/page/page.vue.d.ts +0 -19
  659. package/components/dialog/dialog/page/types.d.ts +0 -72
  660. package/components/dialog/dialog/pageComponent/pageComponent.vue.d.ts +0 -6
  661. package/components/dialog/dialog/pageComponent/types.d.ts +0 -18
  662. package/components/dialog/dialog/stories/autoload.d.ts +0 -2
  663. package/components/dialog/dialog/stories/dialog_example/pages/utils.d.ts +0 -7
  664. package/components/dialog/dialog/types.d.ts +0 -58
  665. package/components/dialog/dialog.d.ts +0 -6
  666. package/components/dialog/lib/types.d.ts +0 -44
  667. package/components/dialog/lib/utils.d.ts +0 -14
  668. package/components/dialog/lib/utils.globalEvents.d.ts +0 -8
  669. package/components/dialog/lib/worker.d.ts +0 -76
  670. package/components/extra/extra.d.ts +0 -3
  671. package/components/extra/rive/rive.vue.d.ts +0 -11
  672. package/components/extra/rive/types.d.ts +0 -7
  673. package/components/forms/avatar/avatar.vue.d.ts +0 -10
  674. package/components/forms/avatar/types.d.ts +0 -32
  675. package/components/forms/button/button.vue.d.ts +0 -24
  676. package/components/forms/button/types.d.ts +0 -39
  677. package/components/forms/caption/caption.vue.d.ts +0 -17
  678. package/components/forms/caption/types.d.ts +0 -9
  679. package/components/forms/checkbox/checkbox.vue.d.ts +0 -27
  680. package/components/forms/checkbox/types.d.ts +0 -21
  681. package/components/forms/controlLabel/controlLabel.vue.d.ts +0 -19
  682. package/components/forms/controlLabel/types.d.ts +0 -4
  683. package/components/forms/forms.d.ts +0 -31
  684. package/components/forms/hint/hint.vue.d.ts +0 -4
  685. package/components/forms/hint/types.d.ts +0 -8
  686. package/components/forms/input/input.vue.d.ts +0 -27
  687. package/components/forms/input/types.d.ts +0 -23
  688. package/components/forms/inputDate/datepicker.d.ts +0 -5
  689. package/components/forms/inputDate/inputDate.vue.d.ts +0 -12
  690. package/components/forms/inputDate/types.d.ts +0 -1
  691. package/components/forms/inputRange/inputRange.vue.d.ts +0 -19
  692. package/components/forms/inputRange/types.d.ts +0 -2
  693. package/components/forms/loadbar/loadbar.vue.d.ts +0 -3
  694. package/components/forms/preloader/preloader.vue.d.ts +0 -4
  695. package/components/forms/preloader/types.d.ts +0 -3
  696. package/components/forms/radio/radio.vue.d.ts +0 -23
  697. package/components/forms/radio/types.d.ts +0 -14
  698. package/components/forms/select/select.vue.d.ts +0 -17
  699. package/components/forms/select/stories/exampleOptions.d.ts +0 -5
  700. package/components/forms/select/types.d.ts +0 -58
  701. package/components/forms/switcher/switcher.vue.d.ts +0 -23
  702. package/components/forms/switcher/types.d.ts +0 -21
  703. package/components/forms/textarea/textarea.vue.d.ts +0 -12
  704. package/components/forms/textarea/types.d.ts +0 -44
  705. package/components/formsExt/checkboxGroup/checkboxGroup.vue.d.ts +0 -16
  706. package/components/formsExt/checkboxGroup/stories/example.d.ts +0 -15
  707. package/components/formsExt/checkboxGroup/types.d.ts +0 -19
  708. package/components/formsExt/editArea/editArea.vue.d.ts +0 -18
  709. package/components/formsExt/editArea/types.d.ts +0 -33
  710. package/components/formsExt/editInput/editInput.vue.d.ts +0 -8
  711. package/components/formsExt/editInput/types.d.ts +0 -16
  712. package/components/formsExt/formsExt.d.ts +0 -15
  713. package/components/formsExt/info/info.vue.d.ts +0 -20
  714. package/components/formsExt/info/types.d.ts +0 -21
  715. package/components/formsExt/menu/menu.vue.d.ts +0 -16
  716. package/components/formsExt/menu/stories/items.d.ts +0 -3
  717. package/components/formsExt/menu/types.d.ts +0 -37
  718. package/components/formsExt/radioGroup/radioGroup.vue.d.ts +0 -16
  719. package/components/formsExt/radioGroup/stories/example.d.ts +0 -20
  720. package/components/formsExt/radioGroup/types.d.ts +0 -21
  721. package/components/formsExt/selector2/composables/useAPI.d.ts +0 -30
  722. package/components/formsExt/selector2/composables/useMenu.d.ts +0 -14
  723. package/components/formsExt/selector2/itemMulti.vue.d.ts +0 -8
  724. package/components/formsExt/selector2/selector2.vue.d.ts +0 -35
  725. package/components/formsExt/selector2/stories/dummyAPIRequest.d.ts +0 -10
  726. package/components/formsExt/selector2/types.d.ts +0 -143
  727. package/components/formsExt/selector2/utils.d.ts +0 -6
  728. package/components/layout/islandRows/islandRows.vue.d.ts +0 -17
  729. package/components/layout/islandRows/islandRowsRow/islandRowsRow.vue.d.ts +0 -18
  730. package/components/layout/islandRows/islandRowsRow/types.d.ts +0 -2
  731. package/components/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue.d.ts +0 -18
  732. package/components/layout/islandRows/types.d.ts +0 -10
  733. package/components/layout/layout.d.ts +0 -9
  734. package/components/layout/rows/rows.vue.d.ts +0 -21
  735. package/components/layout/rows/types.d.ts +0 -6
  736. package/components/popup/alert/alert.vue.d.ts +0 -31
  737. package/components/popup/alert/types.d.ts +0 -8
  738. package/components/popup/confirm/confirm.vue.d.ts +0 -33
  739. package/components/popup/confirm/types.d.ts +0 -21
  740. package/components/popup/lib/popup.d.ts +0 -83
  741. package/components/popup/lib/popup.globalEvents.d.ts +0 -32
  742. package/components/popup/lib/worker.d.ts +0 -75
  743. package/components/popup/lib/worker.globalEvents.d.ts +0 -19
  744. package/components/popup/popup/listItem.vue.d.ts +0 -22
  745. package/components/popup/popup/opener.vue.d.ts +0 -23
  746. package/components/popup/popup/popup.vue.d.ts +0 -40
  747. package/components/popup/popup/types.d.ts +0 -101
  748. package/components/popup/popup/widgetInput.vue.d.ts +0 -17
  749. package/components/popup/popup.d.ts +0 -15
  750. package/components/popup/prompt/prompt.vue.d.ts +0 -33
  751. package/components/popup/prompt/types.d.ts +0 -21
  752. package/components/project/project.d.ts +0 -15
  753. package/components/project/selectorCompetitors/composables.d.ts +0 -3
  754. package/components/project/selectorCompetitors/selectorCompetitors.vue.d.ts +0 -14
  755. package/components/project/selectorCompetitors/stories/items.d.ts +0 -3
  756. package/components/project/selectorCompetitors/types.d.ts +0 -30
  757. package/components/project/selectorRegion/composables/compare.d.ts +0 -12
  758. package/components/project/selectorRegion/composables/selectRegion.d.ts +0 -13
  759. package/components/project/selectorRegion/composables/selectSearcher.d.ts +0 -13
  760. package/components/project/selectorRegion/composables/selectorRegion.d.ts +0 -25
  761. package/components/project/selectorRegion/dialog_selectorRegions/dialog_selectorRegions.vue.d.ts +0 -6
  762. package/components/project/selectorRegion/dialog_selectorRegions/types.d.ts +0 -26
  763. package/components/project/selectorRegion/selectorRegion.vue.d.ts +0 -23
  764. package/components/project/selectorRegion/stories/searchers.d.ts +0 -3
  765. package/components/project/selectorRegion/types.d.ts +0 -172
  766. package/components/project/selectorRegion/utils/consts.d.ts +0 -31
  767. package/components/project/selectorRegion/utils/utils.d.ts +0 -34
  768. package/components/project/tagSelector/popupListItem/tagPopupListItem.vue.d.ts +0 -20
  769. package/components/project/tagSelector/popupListItem/types.d.ts +0 -33
  770. package/components/project/tagSelector/popupOpener/popupOpener.vue.d.ts +0 -27
  771. package/components/project/tagSelector/popupOpener/types.d.ts +0 -64
  772. package/components/project/tagSelector/tagIcon/tagIcon.vue.d.ts +0 -4
  773. package/components/project/tagSelector/tagIcon/types.d.ts +0 -21
  774. package/components/project/tagSelector/tagSelector.vue.d.ts +0 -37
  775. package/components/project/tagSelector/tagsDefaults.d.ts +0 -3
  776. package/components/project/tagSelector/types.d.ts +0 -140
  777. package/components/project/tagSelector/utils/el.d.ts +0 -19
  778. package/components/project/tagSelector/utils/utils.d.ts +0 -14
  779. package/components/tabs/tabs/content.vue.d.ts +0 -19
  780. package/components/tabs/tabs/tab.vue.d.ts +0 -19
  781. package/components/tabs/tabs/tabs.vue.d.ts +0 -21
  782. package/components/tabs/tabs/types.d.ts +0 -19
  783. package/components/tabs/tabs.d.ts +0 -7
  784. package/components/tabsView/tabsView/menu.vue.d.ts +0 -32
  785. package/components/tabsView/tabsView/menuDelimeter.vue.d.ts +0 -3
  786. package/components/tabsView/tabsView/menuItem.vue.d.ts +0 -23
  787. package/components/tabsView/tabsView/menuTitle.vue.d.ts +0 -20
  788. package/components/tabsView/tabsView/store.d.ts +0 -12
  789. package/components/tabsView/tabsView/tabsView.vue.d.ts +0 -34
  790. package/components/tabsView/tabsView/types.d.ts +0 -98
  791. package/components/tabsView/tabsView/utils.d.ts +0 -11
  792. package/components/tabsView/tabsView.d.ts +0 -7
  793. package/core/app.amd.js +0 -2
  794. package/core/app.amd.js.map +0 -1
  795. package/core/app.d.ts +0 -8
  796. package/core/app.js +0 -214
  797. package/core/app.js.map +0 -1
  798. package/core/core/core.d.ts +0 -113
  799. package/core/core/events/resize.d.ts +0 -16
  800. package/core/core/events.d.ts +0 -15
  801. package/core/core/options.d.ts +0 -47
  802. package/core/core/preloaders.d.ts +0 -19
  803. package/core/core/state.d.ts +0 -49
  804. package/core/directives/data.d.ts +0 -10
  805. package/core/directives/focus.d.ts +0 -10
  806. package/core/directives/preloader.d.ts +0 -8
  807. package/core/directives/scrollIntoView.d.ts +0 -3
  808. package/core/directives/scrollShadow.d.ts +0 -15
  809. package/core/directives/sticky.d.ts +0 -10
  810. package/core/directives/swimUp.d.ts +0 -15
  811. package/core/directives/tooltip.d.ts +0 -10
  812. package/core/plugins/core.d.ts +0 -60
  813. package/core/plugins/i18n.d.ts +0 -97
  814. package/core/plugins/piniaTPA.d.ts +0 -17
  815. package/core/utils/check.d.ts +0 -26
  816. package/core/utils/clipboard.d.ts +0 -12
  817. package/core/utils/date.d.ts +0 -69
  818. package/core/utils/device.d.ts +0 -50
  819. package/core/utils/dom.d.ts +0 -94
  820. package/core/utils/image.d.ts +0 -16
  821. package/core/utils/keyboard.d.ts +0 -8
  822. package/core/utils/lodash.d.ts +0 -6
  823. package/core/utils/number.d.ts +0 -17
  824. package/core/utils/price.d.ts +0 -10
  825. package/core/utils/route.d.ts +0 -33
  826. package/core/utils/scroll.d.ts +0 -32
  827. package/core/utils/searchers.d.ts +0 -38
  828. package/core/utils/store/localStorage.d.ts +0 -6
  829. package/core/utils/store/plugin.d.ts +0 -24
  830. package/core/utils/store/store.d.ts +0 -34
  831. package/core/utils/store.d.ts +0 -6
  832. package/core/utils/string.d.ts +0 -100
  833. package/core/utils/system.d.ts +0 -25
  834. package/core/utils/url.d.ts +0 -36
  835. package/dialog/dialog.amd.js +0 -2
  836. package/dialog/dialog.amd.js.map +0 -1
  837. package/dialog/dialog.d.ts +0 -2
  838. package/dialog/dialog.js +0 -60
  839. package/dialog/dialog.js.map +0 -1
  840. package/extra/extra.amd.js +0 -2
  841. package/extra/extra.amd.js.map +0 -1
  842. package/extra/extra.d.ts +0 -2
  843. package/extra/extra.js +0 -72
  844. package/extra/extra.js.map +0 -1
  845. package/forms/forms.amd.js +0 -2
  846. package/forms/forms.amd.js.map +0 -1
  847. package/forms/forms.d.ts +0 -2
  848. package/forms/forms.js +0 -19
  849. package/forms/forms.js.map +0 -1
  850. package/forms/helpers.amd.js +0 -2
  851. package/forms/helpers.amd.js.map +0 -1
  852. package/forms/helpers.d.ts +0 -1
  853. package/forms/helpers.js +0 -2
  854. package/forms/helpers.js.map +0 -1
  855. package/formsExt/formsExt.amd.js +0 -2
  856. package/formsExt/formsExt.amd.js.map +0 -1
  857. package/formsExt/formsExt.d.ts +0 -2
  858. package/formsExt/formsExt.js +0 -567
  859. package/formsExt/formsExt.js.map +0 -1
  860. package/icomoon/Topvisor icons.json +0 -6635
  861. package/layout/layout.amd.js +0 -2
  862. package/layout/layout.amd.js.map +0 -1
  863. package/layout/layout.d.ts +0 -2
  864. package/layout/layout.js +0 -62
  865. package/layout/layout.js.map +0 -1
  866. package/popup/popup.amd.js +0 -2
  867. package/popup/popup.amd.js.map +0 -1
  868. package/popup/popup.d.ts +0 -2
  869. package/popup/popup.js +0 -244
  870. package/popup/popup.js.map +0 -1
  871. package/popup/worker.amd.js +0 -2
  872. package/popup/worker.amd.js.map +0 -1
  873. package/popup/worker.d.ts +0 -2
  874. package/popup/worker.js +0 -129
  875. package/popup/worker.js.map +0 -1
  876. package/project/project.amd.js +0 -2
  877. package/project/project.amd.js.map +0 -1
  878. package/project/project.d.ts +0 -2
  879. package/project/project.js +0 -986
  880. package/project/project.js.map +0 -1
  881. package/tabs/tabs.amd.js +0 -2
  882. package/tabs/tabs.amd.js.map +0 -1
  883. package/tabs/tabs.d.ts +0 -2
  884. package/tabs/tabs.js +0 -81
  885. package/tabs/tabs.js.map +0 -1
  886. package/tabsView/tabsView.amd.js +0 -2
  887. package/tabsView/tabsView.amd.js.map +0 -1
  888. package/tabsView/tabsView.d.ts +0 -2
  889. package/tabsView/tabsView.js +0 -306
  890. package/tabsView/tabsView.js.map +0 -1
  891. package/utils/check.amd.js +0 -2
  892. package/utils/check.amd.js.map +0 -1
  893. package/utils/check.d.ts +0 -2
  894. package/utils/check.js +0 -26
  895. package/utils/check.js.map +0 -1
  896. package/utils/clipboard.amd.js +0 -6
  897. package/utils/clipboard.amd.js.map +0 -1
  898. package/utils/clipboard.d.ts +0 -2
  899. package/utils/clipboard.js +0 -33
  900. package/utils/clipboard.js.map +0 -1
  901. package/utils/date.amd.js +0 -2
  902. package/utils/date.amd.js.map +0 -1
  903. package/utils/date.d.ts +0 -2
  904. package/utils/date.js +0 -12
  905. package/utils/date.js.map +0 -1
  906. package/utils/device.amd.js +0 -2
  907. package/utils/device.amd.js.map +0 -1
  908. package/utils/device.d.ts +0 -2
  909. package/utils/device.js +0 -15
  910. package/utils/device.js.map +0 -1
  911. package/utils/dom.amd.js +0 -2
  912. package/utils/dom.amd.js.map +0 -1
  913. package/utils/dom.d.ts +0 -6
  914. package/utils/dom.js +0 -75
  915. package/utils/dom.js.map +0 -1
  916. package/utils/image.amd.js +0 -12
  917. package/utils/image.amd.js.map +0 -1
  918. package/utils/image.d.ts +0 -2
  919. package/utils/image.js +0 -23
  920. package/utils/image.js.map +0 -1
  921. package/utils/keyboard.amd.js +0 -2
  922. package/utils/keyboard.amd.js.map +0 -1
  923. package/utils/keyboard.d.ts +0 -2
  924. package/utils/keyboard.js +0 -12
  925. package/utils/keyboard.js.map +0 -1
  926. package/utils/lodash.amd.js +0 -2
  927. package/utils/lodash.amd.js.map +0 -1
  928. package/utils/lodash.d.ts +0 -2
  929. package/utils/lodash.js +0 -9
  930. package/utils/lodash.js.map +0 -1
  931. package/utils/number.amd.js +0 -2
  932. package/utils/number.amd.js.map +0 -1
  933. package/utils/number.d.ts +0 -2
  934. package/utils/number.js +0 -13
  935. package/utils/number.js.map +0 -1
  936. package/utils/price.amd.js +0 -2
  937. package/utils/price.amd.js.map +0 -1
  938. package/utils/price.d.ts +0 -2
  939. package/utils/price.js +0 -10
  940. package/utils/price.js.map +0 -1
  941. package/utils/route.amd.js +0 -2
  942. package/utils/route.amd.js.map +0 -1
  943. package/utils/route.d.ts +0 -2
  944. package/utils/route.js +0 -38
  945. package/utils/route.js.map +0 -1
  946. package/utils/scroll.amd.js +0 -2
  947. package/utils/scroll.amd.js.map +0 -1
  948. package/utils/scroll.d.ts +0 -2
  949. package/utils/scroll.js +0 -45
  950. package/utils/scroll.js.map +0 -1
  951. package/utils/searchers.amd.js +0 -2
  952. package/utils/searchers.amd.js.map +0 -1
  953. package/utils/searchers.d.ts +0 -2
  954. package/utils/searchers.js +0 -134
  955. package/utils/searchers.js.map +0 -1
  956. package/utils/store.amd.js +0 -2
  957. package/utils/store.amd.js.map +0 -1
  958. package/utils/store.d.ts +0 -2
  959. package/utils/store.js +0 -7
  960. package/utils/store.js.map +0 -1
  961. package/utils/string.amd.js +0 -2
  962. package/utils/string.amd.js.map +0 -1
  963. package/utils/string.d.ts +0 -2
  964. package/utils/string.js +0 -148
  965. package/utils/string.js.map +0 -1
  966. package/utils/system.amd.js +0 -2
  967. package/utils/system.amd.js.map +0 -1
  968. package/utils/system.d.ts +0 -2
  969. package/utils/system.js +0 -29
  970. package/utils/system.js.map +0 -1
  971. package/utils/url.amd.js +0 -3
  972. package/utils/url.amd.js.map +0 -1
  973. package/utils/url.d.ts +0 -2
  974. package/utils/url.js +0 -48
  975. package/utils/url.js.map +0 -1
  976. /package/{icomoon → public/icomoon}/Read Me.txt +0 -0
  977. /package/{icomoon → public/icomoon}/demo-files/demo.css +0 -0
  978. /package/{icomoon → public/icomoon}/demo-files/demo.js +0 -0
  979. /package/{icomoon → public/icomoon}/demo.css +0 -0
  980. /package/{icomoon → public/icomoon}/demo.html +0 -0
  981. /package/{icomoon → public/icomoon}/demo.js +0 -0
  982. /package/{icomoon → public/icomoon}/fonts/Topvisor-2.eot +0 -0
  983. /package/{icomoon → public/icomoon}/fonts/Topvisor-2.svg +0 -0
  984. /package/{icomoon → public/icomoon}/fonts/Topvisor-2.ttf +0 -0
  985. /package/{icomoon → public/icomoon}/fonts/Topvisor-2.woff +0 -0
  986. /package/{icomoon → public/icomoon}/selection.json +0 -0
  987. /package/{icomoon → public/icomoon}/style.css +0 -0
  988. /package/{jquery-ui.min.css → public/jquery-ui.min.css} +0 -0
  989. /package/{require → public/require}/css.amd.js +0 -0
  990. /package/{components/core/notice/types.d.ts → src/components/core/notice/types.ts} +0 -0
  991. /package/{components/forms/helpers.d.ts → src/components/forms/helpers.ts} +0 -0
  992. /package/{components/popup/worker.d.ts → src/components/popup/worker.ts} +0 -0
@@ -1 +0,0 @@
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/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 { 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-select_arrow {\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-select_arrow\"\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","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","_a","_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","tagsDefaults","genTagIdExcluded","tagId","genTagIdClear","getTagById","tags","tag","tag2","emit","__emit","name","elName","firefoxProps","inEdit","event","turnToEdit","nextTick","editCommit","name2","editCancel","changeSelect","e","toState","component","_sfc_main$8","componentSlotName","topTagSelectorTarget","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","Core","ui","$tags","tagsSorted","_index","elTag","tagIdA","tagIdB","tagSorted","onClose","useItemsFromCompetitors","competitors","projectId","toValue","competitor","genElPopupOpener","propsPopup","htmlSetterSeveral","el","Worker","isRef","elPopupOpenerRender","modelValue","renderElPopupOpener","unref","elTagIcon","genElTagIcon","TopSelectorCompetitors","_sfc_main$5","TopSelectorRegion","_sfc_main$4","TopTagSelector","_sfc_main","TopTagSelectorPopupOpener","_sfc_main$1","TopTagSelectorTagIcon","_sfc_main$3"],"mappings":"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"}
package/tabs/tabs.amd.js DELETED
@@ -1,2 +0,0 @@
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
- //# sourceMappingURL=tabs.amd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.amd.js","sources":["../../src/components/tabs/tabs.ts"],"sourcesContent":["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":["TopTabs","_sfc_main$2","TopTabsTab","_sfc_main$1","TopTabsContent","_sfc_main"],"mappings":"o8CAMOA,EAAAC,EACAC,EAAAC,EACAC,EAAAC"}
package/tabs/tabs.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export * from '../components/tabs/tabs'
2
- export {}
package/tabs/tabs.js DELETED
@@ -1,81 +0,0 @@
1
- import { Core as p } from "../core/app.js";
2
- import { defineComponent as r, createElementBlock as a, openBlock as o, normalizeClass as d, renderSlot as s, createCommentVNode as b, createElementVNode as n, Fragment as c } from "vue";
3
- const i = ["../assets/tabs.css"].map((t) => import.meta.resolve(t));
4
- p.insertCSSLinkToPage(i, !0);
5
- const m = {
6
- class: /* @__PURE__ */ d({
7
- "top-tabs": !0
8
- })
9
- }, u = {
10
- key: 0,
11
- class: "top-tabs_header"
12
- }, _ = { class: "top-tabs_contents" }, h = /* @__PURE__ */ r({
13
- __name: "tabs",
14
- props: {
15
- id: {}
16
- },
17
- setup(t) {
18
- return (e, l) => (o(), a("div", m, [
19
- s(e.$slots, "buttons"),
20
- e.$slots.header ? (o(), a("div", u, [
21
- s(e.$slots, "header")
22
- ])) : b("", !0),
23
- n("div", _, [
24
- s(e.$slots, "contents")
25
- ])
26
- ]));
27
- }
28
- }), f = ["id", "name", "value", "checked", "disabled"], $ = ["for"], v = /* @__PURE__ */ r({
29
- __name: "tab",
30
- props: {
31
- tabsId: {},
32
- name: {},
33
- title: {},
34
- active: { type: Boolean },
35
- disabled: { type: Boolean }
36
- },
37
- setup(t) {
38
- return (e, l) => (o(), a(c, null, [
39
- n("input", {
40
- type: "radio",
41
- class: "top-tabs_tabInput top-unvisible",
42
- id: e.tabsId + e.name,
43
- name: e.tabsId,
44
- value: e.name,
45
- checked: e.active,
46
- disabled: e.disabled
47
- }, null, 8, f),
48
- n("label", {
49
- class: d({
50
- "top-tabs_tabLabel": !0,
51
- "top-forms-focusable": !0,
52
- "top-disabled": e.disabled
53
- }),
54
- for: e.tabsId + e.name
55
- }, [
56
- s(e.$slots, "default")
57
- ], 10, $)
58
- ], 64));
59
- }
60
- }), C = ["data-tabs-name"], T = /* @__PURE__ */ r({
61
- __name: "content",
62
- props: {
63
- name: {}
64
- },
65
- setup(t) {
66
- return (e, l) => (o(), a("div", {
67
- class: d({
68
- "top-tabs_content": !0
69
- }),
70
- "data-tabs-name": e.name
71
- }, [
72
- s(e.$slots, "default")
73
- ], 8, C));
74
- }
75
- }), S = h, y = v, B = T;
76
- export {
77
- S as TopTabs,
78
- B as TopTabsContent,
79
- y as TopTabsTab
80
- };
81
- //# sourceMappingURL=tabs.js.map
package/tabs/tabs.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabs.js","sources":["../../src/components/tabs/tabs.ts"],"sourcesContent":["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":["TopTabs","_sfc_main$2","TopTabsTab","_sfc_main$1","TopTabsContent","_sfc_main"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMOA,IAAAC,GACAC,IAAAC,GACAC,IAAAC;"}
@@ -1,2 +0,0 @@
1
- define(["require","exports","vue","../.chunks/forms-DMI0BqCj.amd","../utils/route.amd","../.chunks/store-esTid5oI.amd","../popup/popup.amd","../utils/system.amd","../require/css.amd!../assets/tabsView.css"],function(X,h,e,m,f,_,S,L){"use strict";if(typeof e>"u")var e=window.Vue;const g=(o,n)=>`top:${String(o)}:${n}`,y={loadLocalStorge:(o,n)=>{if(!n.$id)return;const t=g(o,n.$id);try{const a=JSON.parse(localStorage.getItem(t));typeof a==typeof n[o]&&(n[o]=a)}catch{console.warn(new Error(`В localStorage[${t}] не корректный json`))}},addSaverLocalStorge:(o,n)=>{if(!n.$id)return;const t=g(o,n.$id);e.watch(()=>n[o],()=>{localStorage.setItem(t,JSON.stringify(n[o]))},{immediate:!0})}},k=new Set;addEventListener("popstate",o=>{k.forEach(n=>n(o))});const V=Symbol(),C=(o,n)=>{const t=_.defineStore(V,()=>{const a=e.computed(()=>o.showMenuInPopup??m.Core.state.isMobile),i=e.computed(()=>o.pageMod),u=e.ref(!1),r=e.ref(void 0),l=e.ref(!0);return{showMenuInPopup:a,pageMod:i,isShort:u,activeItemName:n,component:r,scrollable:l}},o.idState);if(o.isShortable){const a="isShort";y.loadLocalStorge(a,t),y.addSaverLocalStorge(a,t)}if(t.$id){const a=i=>{n.value=f.getHash(t.$id)};k.add(a)}return t},w=()=>_.useStore(V),P={key:1,class:"top-ellipsis"},v=e.defineComponent({__name:"menuItem",props:{name:{},href:{},icon:{},disabled:{type:Boolean},component:{default:void 0},scrollable:{type:Boolean,default:!0}},setup(o){const n=o,t=w(),a=e.computed(()=>n.name&&t.$id?f.genHash(t.$id,n.name):n.href),i=e.computed(()=>t.showMenuInPopup?S.TopPopupListItem:a?"a":"button"),u=r=>{!n.href&&a.value&&r.preventDefault(),n.name&&(t.activeItemName=n.name)};return(r,l)=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.value),{target:"_self",class:e.normalizeClass({"top-tabsView_menuItem":!e.unref(t).showMenuInPopup,"top-active":r.name&&e.unref(t).activeItemName===r.name,"top-disabled":r.disabled,"top-spa-disabled":!0}),href:a.value,"data-top-icon":r.icon||void 0,disabled:r.disabled||void 0,onClick:u},{default:e.withCtx(()=>[e.unref(t).showMenuInPopup?e.renderSlot(r.$slots,"default",{key:0}):r.$slots.default&&!e.unref(t).isShort?(e.openBlock(),e.createElementBlock("span",P,[e.renderSlot(r.$slots,"default")])):e.createCommentVNode("",!0)]),_:3},8,["class","href","data-top-icon","disabled"]))}}),B=o=>(o==null?void 0:o.name)==="AsyncComponentWrapper"&&!(o!=null&&o.__asyncResolved),E=async(o,n)=>{(o==null?void 0:o.name)==="AsyncComponentWrapper"&&(o!=null&&o.__asyncResolved||(o.__asyncLoader(),await L.sleepWhile(()=>n()&&B(o),200)))},z={class:"top-tabsView_menuOpener"},R=["data-top-icon"],O={class:"top-ellipsis"},D={class:"top-tabsView_menuList"},H={key:0,class:"top-tabsView_menuFooter"},K=e.defineComponent({__name:"menu",props:e.mergeModels({isShortable:{type:Boolean},isLoading:{type:Boolean}},{isLoading:{},isLoadingModifiers:{}}),emits:["update:isLoading"],setup(o){const n=e.useModel(o,"isLoading"),t=w(),a=e.useSlots(),i=new Map,u=()=>{if(!a.default)return;const c=a.default({}).find(s=>s.key==="_menu");c&&r(c.children)},r=c=>{c.forEach(s=>{var M,$,N,T;if(s.type.__name&&s.type.__name!==v.__name)return;if(!s.type.__name&&typeof s.children=="object"){r(s.children);return}if(!((M=s.props)!=null&&M.name)||($=s.props)!=null&&$.disabled)return;const I={title:((T=(N=s.children).default)==null?void 0:T.call(N)[0].children).trim(),icon:s.props.icon,component:s.props.component?e.markRaw(s.props.component):v.props.component.default,scrollable:s.props.scrollable??v.props.scrollable.default};i.set(s.props.name,I)})},l=e.ref(null);let d=0;e.watch(()=>t.activeItemName,async()=>{const c=++d;if(i.size===0&&u(),i.size===0){t.activeItemName="";return}if(l.value=i.get(t.activeItemName)??null,!l.value&&t.$id){const s=f.getHash(t.$id);if(l.value=i.get(s)??null,l.value){t.activeItemName=s;return}}if(!l.value){t.activeItemName=i.keys().next().value;return}if(l.value.component===t.component){n.value=!1;return}t.$id&&f.setHash(t.$id,t.activeItemName,!1),n.value=!0,await E(l.value.component,()=>c===d),c===d&&(t.scrollable=l.value.scrollable,t.component=l.value.component,l.value&&!t.component&&console.warn(`Компонент вкладки ${t.activeItemName} не найден. Добавьте props.component для пункта меню ${t.activeItemName}.`))},{immediate:!0});const p=e.ref();let b;return e.onMounted(()=>{b=new ResizeObserver(()=>{p.value.parentElement.style.setProperty("--top-tabsView-contents-offset-top",p.value.offsetHeight+"px")}),b.observe(p.value)}),e.onUnmounted(()=>{b.disconnect()}),(c,s)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"elRef",ref:p,class:e.normalizeClass({"top-tabsView_menu":!0,"top-tabsView_menu-inPopup_0":!e.unref(t).showMenuInPopup,"top-tabsView_menu-inPopup_1":e.unref(t).showMenuInPopup,"top-tabsView_menu-short":e.unref(t).isShort&&!e.unref(t).showMenuInPopup})},[e.unref(t).showMenuInPopup?(e.openBlock(),e.createBlock(e.unref(S.TopPopup),{key:0},{opener:e.withCtx(()=>[e.createElementVNode("div",z,[l.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-tabsView_menuOpenerActiveItem","data-top-icon":l.value.icon},[e.createElementVNode("span",O,e.toDisplayString(l.value.title),1)],8,R)):e.createCommentVNode("",!0),s[1]||(s[1]=e.createElementVNode("div",{class:"top-tabsView_menuOpenerIcon","data-top-icon":""},null,-1))])]),contentList:e.withCtx(()=>[e.renderSlot(c.$slots,"default")]),_:3})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",D,[e.renderSlot(c.$slots,"default")]),c.isShortable?(e.openBlock(),e.createElementBlock("div",H,[c.isShortable?(e.openBlock(),e.createBlock(v,{key:0,icon:e.unref(t).isShort?"":"",onClick:s[0]||(s[0]=I=>e.unref(t).isShort=!e.unref(t).isShort)},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(t).isShort?"":"Свернуть"),1)]),_:1},8,["icon"])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],64))],2))}}),j=e.defineComponent({__name:"tabsView",props:e.mergeModels({modelValue:{},pageMod:{type:Boolean},showMenuInPopup:{type:Boolean,default:void 0},isShortable:{type:Boolean,default:!1},idState:{}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(o){const n=o,t=e.useModel(o,"modelValue"),a=C(n,t),i=Math.random();n.pageMod&&m.Core.state.documentClassModificators.set(i,"top-hasTabsViewPageMod"),e.onUnmounted(()=>{n.pageMod&&m.Core.state.documentClassModificators.delete(i),a.$id&&f.delHash(a.$id,a.activeItemName,!0)});const u=e.ref(),r=e.ref(!1);return e.watch([u,()=>a.component],()=>{r.value=B(a.component)},{immediate:!0}),(l,d)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-tabsView":!0,"top-tabsView-pageMod":n.pageMod,"top-tabsView-inPopup":e.unref(a).showMenuInPopup})},[e.createVNode(K,{isShortable:l.isShortable,isLoading:r.value,"onUpdate:isLoading":d[0]||(d[0]=p=>r.value=p)},{default:e.withCtx(()=>[e.renderSlot(l.$slots,"menu")]),_:3},8,["isShortable","isLoading"]),e.createElementVNode("div",{class:e.normalizeClass({"top-tabsView_contents":!0,"top-tabsView_contents-isLoading":r.value,"top-tabsView_contents-noScrollable":!e.unref(a).scrollable})},[r.value?(e.openBlock(),e.createBlock(m.TopLoadbar$1,{key:0})):e.createCommentVNode("",!0),(e.openBlock(),e.createBlock(e.KeepAlive,null,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(a).component),{ref_key:"componentRef",ref:u},null,512))],1024))],2)],2))}}),A={},q={class:"top-tabsView_menuDelimeter"};function F(o,n){return e.openBlock(),e.createElementBlock("div",q)}const U=m._export_sfc(A,[["render",F]]),W=e.defineComponent({__name:"menuTitle",props:{isSubtitle:{type:Boolean}},setup(o){const n=w();return(t,a)=>e.unref(n).showMenuInPopup?(e.openBlock(),e.createBlock(e.unref(S.TopPopupListItem),{key:0,type:"title"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3})):e.unref(n).isShort?(e.openBlock(),e.createBlock(U,{key:1})):(e.openBlock(),e.createElementBlock("div",{key:2,class:e.normalizeClass({"top-tabsView_menuTitle":!0,"top-tabsView_menuTitle-subtitle":t.isSubtitle})},[e.renderSlot(t.$slots,"default")],2))}}),J=j,G=v,Q=W;h.TopTabsView=J,h.TopTabsViewMenuItem=G,h.TopTabsViewMenuTitle=Q,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
2
- //# sourceMappingURL=tabsView.amd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tabsView.amd.js","sources":["../../src/core/utils/store/localStorage.ts","../../src/components/tabsView/tabsView/store.ts","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/utils.ts","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/menuDelimeter.vue","../../src/components/tabsView/tabsView/menuTitle.vue","../../src/components/tabsView/tabsView.ts"],"sourcesContent":["import { watch } from 'vue';\nimport type { Store } from './store';\n\n/**\n * Сгенерировать имя для сохранения данных в localStorage\n * @param stateName - имя свойства состояния\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\n */\nconst genStorageKey = <T extends Store>(stateName: keyof T, stateKey: string): string => {\n\tconst stateNameString = String(stateName);\n\n\treturn `top:${stateNameString}:${stateKey}`;\n};\n\n/**\n * Загрузить состояние\n * @param stateName - имя свойства состояния\n * @param store\n */\nconst loadLocalStorge = <T extends Store>(stateName: keyof T, store: T) => {\n\t// если Store.key не знадан, значит сохранение состояния в компоненте отключено\n\tif (!store.$id) return;\n\n\tconst localStorageKey = genStorageKey(stateName, store.$id);\n\n\ttry {\n\t\tconst localStorageValue: typeof store[keyof typeof store] = JSON.parse(localStorage.getItem(localStorageKey) as string);\n\n\t\tif (typeof localStorageValue === typeof store[stateName]) {\n\t\t\tstore[stateName] = localStorageValue;\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn(new Error(`В localStorage[${localStorageKey}] не корректный json`));\n\t}\n};\n\n/**\n * Добавить автосохранение состояние при его изменении\n * @param stateName - имя свойства состояния\n * @param store\n */\nconst addSaverLocalStorge = <T extends Store>(stateName: keyof T, store: T) => {\n\t// если store.$id не знадан, значит сохранение состояния в компоненте отключено\n\tif (!store.$id) return;\n\n\tconst localStorageKey = genStorageKey(stateName, store.$id);\n\n\twatch(() => store[stateName], () => {\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(store[stateName]));\n\t}, { immediate: true });\n};\n\nexport default {\n\tloadLocalStorge,\n\taddSaverLocalStorge,\n};","import type { InjectionKey, ModelRef, UnwrapNestedRefs } from 'vue';\nimport { computed, ref } from 'vue';\nimport Core from '@/core/core/core';\nimport { defineStore, useStore, type Store as DefineStore } from '@/core/utils/store';\nimport StoreLocalStorage from '@/core/utils/store/localStorage';\nimport type { Props, Store } from './types';\nimport { getHash } from '@/core/utils/route';\n\nconst popstateCallbacks = new Set<(e: PopStateEvent) => void>();\n\naddEventListener('popstate', (e) => {\n\tpopstateCallbacks.forEach(popstateCallback => popstateCallback(e));\n});\n\nexport const injectionKey = Symbol() as InjectionKey<Store>;\n\n/**\n * Инициировать Store компонента\n */\nexport const defineTabsStore = (props: Props, model: ModelRef<string | undefined>): UnwrapNestedRefs<Store> & DefineStore => {\n\tconst store = defineStore(injectionKey, () => {\n\t\tconst showMenuInPopup = computed(() => props.showMenuInPopup ?? Core.state.isMobile);\n\t\tconst pageMod = computed(() => props.pageMod);\n\t\tconst isShort = ref(false);\n\n\t\tconst component = ref(undefined);\n\t\tconst scrollable = ref(true);\n\n\t\treturn {\n\t\t\tshowMenuInPopup,\n\t\t\tpageMod,\n\t\t\tisShort,\n\t\t\tactiveItemName: model,\n\t\t\tcomponent,\n\t\t\tscrollable,\n\t\t};\n\t}, props.idState);\n\n\tif (props.isShortable) {\n\t\tconst stateName = 'isShort';\n\n\t\tStoreLocalStorage.loadLocalStorge(stateName, store);\n\t\tStoreLocalStorage.addSaverLocalStorge(stateName, store);\n\t}\n\n\tif (store.$id) {\n\t\tconst popstateCallback = (_e: PopStateEvent) => {\n\t\t\tmodel.value = getHash(store.$id!);\n\t\t};\n\n\t\tpopstateCallbacks.add(popstateCallback);\n\t}\n\n\treturn store;\n};\n\n/**\n * Получить Store компонента\n */\nexport const useTabsStore = () => useStore(injectionKey);\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { genHash } from '@/core/utils/route';\nimport { TopPopupListItem } from '@/components/popup/popup';\nimport { useTabsStore } from './store';\nimport type { PropsMenuItem } from './types';\n\nconst props = withDefaults(defineProps<PropsMenuItem>(), {\n\tscrollable: true,\n\tcomponent: undefined,\n});\n\nconst store = useTabsStore();\n\nconst href = computed(() => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (props.name && store.$id) {\n\t\treturn genHash(store.$id, props.name);\n\t}\n\n\treturn props.href;\n});\n\nconst tagName = computed(() => {\n\tif (store.showMenuInPopup) {\n\t\treturn TopPopupListItem;\n\t}\n\n\treturn href ? 'a' : 'button';\n});\n\n/**\n * Клик по элементу меню\n */\nconst onClick = (e: MouseEvent) => {\n\t// это внутренняя хеш навигация, ссылка на вкладку\n\tif (!props.href && href.value) {\n\t\te.preventDefault();\n\t}\n\n\tif (props.name) {\n\t\tstore.activeItemName = props.name;\n\t}\n};\n</script>\n\n<template>\n\t<component\n\t\t:is=\"tagName\"\n\t\ttarget=\"_self\"\n\t\t:class=\"{\n\t\t\t['top-tabsView_menuItem']: !store.showMenuInPopup,\n\t\t\t['top-active']: name && store.activeItemName === name,\n\t\t\t['top-disabled']: disabled,\n\t\t\t['top-spa-disabled']: true,\n\t\t}\"\n\t\t:href=\"href\"\n\t\t:data-top-icon=\"icon || undefined\"\n\t\t:disabled=\"disabled || undefined\"\n\t\t@click=\"onClick\"\n\t>\n\t\t<slot name=\"default\" v-if=\"store.showMenuInPopup\"></slot>\n\n\t\t<span\n\t\t\tv-else-if=\"$slots.default && !store.isShort\"\n\t\t\tclass=\"top-ellipsis\"\n\t\t>\n\t\t\t<slot name=\"default\"></slot>\n\t\t</span>\n\t</component>\n</template>\n\n<style>\n.top-tabsView_menuItem {\n\t--top-icon-color: var(--color-text-2);\n\t--top-icon-width: calc(var(--top-icon-size));\n\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\n\tborder: none;\n\tborder-radius: var(--top-radius-2);\n\tpadding: var(--top-padding-2);\n\tbackground: transparent;\n\theight: 40px;\n\n\tcolor: var(--color-text-1);\n\ttext-decoration: none;\n\twhite-space: nowrap;\n\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n\talign-items: center;\n\tjustify-content: flex-start;\n\ttransition: background var(--transition);\n}\n\n.top-tabsView_menuItem:hover {\n\t--top-icon-color: var(--color-text-1);\n\n\tbackground: var(--color-bg-shading-1);\n\ttext-decoration: none;\n}\n\n.top-tabsView_menuItem.top-active {\n\t--top-icon-color: inherit;\n\n\tbackground: var(--color-layout-front-1);\n\tcolor: inherit;\n}\n\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\n\topacity: unset;\n\tfilter: unset;\n}\n\n.top-tabsView_menuItem.top-disabled {\n\t--top-icon-color: var(--color-text-4);\n\n\tcolor: var(--color-text-4);\n}\n</style>\n","// TODO: Эту функцию можно вынести в глобальный utils\n\nimport { sleepWhile } from '@/core/utils/system';\n\n/**\n * Проверка нахождения компонента в состояние загрузки\n * @param component\n */\nexport const checkComponentIsLoading = (component: any) => {\n\treturn component?.name === 'AsyncComponentWrapper' && !component?.__asyncResolved;\n};\n\n/**\n * Презагрузить компонент\n *\n * Некоторое время ожидает загрузку компонента, прежде чем завершит работу\n */\nexport const preResolveComponent = async (component: any, condition: Function) => {\n\tif (component?.name !== 'AsyncComponentWrapper') return;\n\tif (component?.__asyncResolved) return;\n\n\tcomponent.__asyncLoader();\n\n\tawait sleepWhile(() => {\n\t\treturn condition() && checkComponentIsLoading(component);\n\t}, 200);\n};\n","<script setup lang=\"ts\">\nimport type { Ref, VNode } from 'vue';\nimport { markRaw, onMounted, onUnmounted, ref, useSlots, watch } from 'vue';\nimport { TopPopup } from '../../popup/popup';\nimport { getHash, setHash } from '@/core/utils/route';\n\nimport type { MenuItem, PropsMenu, PropsMenuItem } from './types';\nimport { useTabsStore } from './store';\nimport TabsViewMenuItem from './menuItem.vue';\nimport { preResolveComponent } from './utils';\n\ndefineProps<PropsMenu>();\n\nconst isLoading = defineModel('isLoading');\n\nconst store = useTabsStore();\n\nconst slots = useSlots();\n\n// словарь используется для оптимизации получения нужного menuItem\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\n\n// заполнить словарь с menuItem, по элементам в slot default\nconst setMenuItemByName = () => {\n\tif (!slots.default) return;\n\n\tconst component: any = slots.default({}).find(item => item.key === '_menu');\n\tif (!component) return;\n\n\tsetMenuItemByNameFromItems(component.children);\n};\n\n// заполнить словарь с menuItem, по элементам\nconst setMenuItemByNameFromItems = (menuItems: VNode[]) => {\n\tmenuItems.forEach((subComponent: any) => {\n\t\t// это не компонент элемента меню\n\t\tif (subComponent.type.__name && subComponent.type.__name !== TabsViewMenuItem.__name) return;\n\n\t\t// это не компонент, например template\n\t\tif (!subComponent.type.__name && typeof subComponent.children === 'object') {\n\t\t\tsetMenuItemByNameFromItems(subComponent.children);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!subComponent.props?.name || subComponent.props?.disabled) return;\n\n\t\tconst menuItem: MenuItem = {\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\n\t\t\ticon: subComponent.props.icon,\n\t\t\tcomponent: subComponent.props.component ? markRaw(subComponent.props.component) : TabsViewMenuItem.props.component.default,\n\t\t\tscrollable: subComponent.props.scrollable ?? TabsViewMenuItem.props.scrollable.default,\n\t\t};\n\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\n\t});\n};\n\n/**\n * activeMenuItem нужен:\n * - для вывода текста активной вкладки в меню с popup\n * - для вывода компонента активной вкладки (store.component)\n * - для установки store.scrollable\n */\nconst activeMenuItem: Ref<MenuItem | null> = ref(null);\n\n/**\n * Кол-во изменений активной вкладки\n */\nlet countChanged = 0;\n\n/**\n * Смена активной вкладки\n *\n * TODO: смена slot, например смена языка, требует повторного выполнения setMenuItemByName()\n */\nwatch(\n\t() => store.activeItemName,\n\tasync () => {\n\t\tconst numberChanged = ++countChanged; // порядковый номер текущего изменения\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tsetMenuItemByName();\n\t\t}\n\n\t\tif (menuItemByName.size === 0) {\n\t\t\tstore.activeItemName = '';\n\n\t\t\treturn;\n\t\t}\n\n\t\tactiveMenuItem.value = menuItemByName.get(store.activeItemName) ?? null;\n\n\t\t// элемент не найден, установить из хеша страницы\n\t\tif (!activeMenuItem.value && store.$id) {\n\t\t\tconst activeItemName = getHash(store.$id);\n\n\t\t\tactiveMenuItem.value = menuItemByName.get(activeItemName) ?? null;\n\n\t\t\tif (activeMenuItem.value) {\n\t\t\t\tstore.activeItemName = activeItemName;\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// элемент не найден, установить первый доступный\n\t\tif (!activeMenuItem.value) {\n\t\t\tstore.activeItemName = menuItemByName.keys().next().value!;\n\n\t\t\treturn;\n\t\t}\n\n\t\t// запрошена смена на уже активный элемент\n\t\tif (activeMenuItem.value.component === store.component) {\n\t\t\tisLoading.value = false;\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (store.$id) setHash(store.$id, store.activeItemName, false);\n\n\t\t// флаг загрузки будет сброшен при инициализации компонента\n\t\tisLoading.value = true;\n\n\t\t/**\n\t\t * Презагрузить компонент\n\t\t *\n\t\t * Нужно для того, чтобы минимизировать скачки интерфейса при ожидании загрузки асинхронного компонента\n\t\t */\n\t\tawait preResolveComponent(activeMenuItem.value.component, () => numberChanged === countChanged);\n\n\t\t// влкадка была сменена еще раз во время sleepWhile\n\t\tif (numberChanged !== countChanged) {\n\t\t\treturn;\n\t\t}\n\n\t\tstore.scrollable = activeMenuItem.value.scrollable;\n\t\tstore.component = activeMenuItem.value.component;\n\n\t\tif (activeMenuItem.value && !store.component) {\n\t\t\tconsole.warn(`Компонент вкладки ${store.activeItemName} не найден. Добавьте props.component для пункта меню ${store.activeItemName}.`);\n\t\t}\n\t},\n\t{ immediate: true },\n);\n\nconst elRef = ref();\nlet resizeObserver: ResizeObserver;\n\nonMounted(() => {\n\tresizeObserver = new ResizeObserver(() => {\n\t\telRef.value.parentElement.style.setProperty('--top-tabsView-contents-offset-top', elRef.value.offsetHeight + 'px');\n\t});\n\n\tresizeObserver.observe(elRef.value);\n});\n\nonUnmounted(() => {\n\tresizeObserver.disconnect();\n});\n</script>\n\n<template>\n\t<div\n\t\tref=\"elRef\"\n\t\t:class=\"{\n\t\t\t'top-tabsView_menu': true,\n\t\t\t'top-tabsView_menu-inPopup_0': !store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-inPopup_1': store.showMenuInPopup,\n\t\t\t'top-tabsView_menu-short': store.isShort && !store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<!-- Спрятать меню под кнопку в popup -->\n\t\t<TopPopup v-if=\"store.showMenuInPopup\">\n\t\t\t<template #opener>\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #contentList>\n\t\t\t\t<slot></slot>\n\t\t\t</template>\n\t\t</TopPopup>\n\n\t\t<!-- Отобразить меню на странице -->\n\t\t<template v-else>\n\t\t\t<div class=\"top-tabsView_menuList\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-if=\"isShortable\"\n\t\t\t\tclass=\"top-tabsView_menuFooter\"\n\t\t\t>\n\t\t\t\t<TabsViewMenuItem\n\t\t\t\t\tv-if=\"isShortable\"\n\t\t\t\t\t:icon=\"store.isShort ? '' : ''\"\n\t\t\t\t\t@click=\"store.isShort = !store.isShort\"\n\t\t\t\t>\n\t\t\t\t\t{{ store.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\n\t\t\t\t</TabsViewMenuItem>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<style>\n/* режим отображение табов в основной области документа */\n.top-tabsView-pageMod .top-tabsView_menu {\n\tbox-sizing: border-box;\n\tposition: sticky;\n\ttop: var(--top-tabsView-top);\n\tz-index: 10;\n}\n\n/* режим отображение табов в основной области документа без popup */\n.top-tabsView-pageMod .top-tabsView_menu-inPopup_0 {\n\theight: calc(var(--100vh) - var(--top-tabsView-top));\n}\n\n/* стантартный режим */\n.top-tabsView_menu-inPopup_0 {\n\tbox-sizing: border-box;\n\twidth: var(--top-tabsView-menu-width);\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\tflex-shrink: 0;\n}\n\n/* режим вывода в popup */\n.top-tabsView_menu-inPopup_1 {\n\tborder-bottom: 1px solid var(--color-line-2-opacity);\n}\n\n.top-tabsView_menu-short {\n\twidth: auto;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\n\tbackground: var(--color-layer-1);\n}\n\n.top-tabsView_menuOpenerIcon { display: flex; }\n\n.top-tabsView_menuOpenerActiveItem {\n\t--top-forms-padding: 0px;\n\n\tbox-sizing: border-box;\n\tpadding: var(--top-padding-2);\n\tmax-width: calc(100% - var(--top-forms-base-height));\n\twhite-space: nowrap;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--top-padding-2);\n}\n\n.top-tabsView_menuList,\n.top-tabsView_menuFooter {\n\tpadding: var(--top-padding-2);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-2);\n}\n\n.top-tabsView_menuList {\n\toverflow-y: auto;\n}\n\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem {\n\t--top-icon-width: 100%;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { defineModel, onUnmounted, ref, watch } from 'vue';\nimport Core from '@/core/core/core';\nimport { delHash } from '@/core/utils/route';\nimport type { Props } from './types';\nimport { defineTabsStore } from './store';\nimport TabsViewMenu from './menu.vue';\nimport TopLoadbar from '@/components/forms/loadbar/loadbar.vue';\nimport { checkComponentIsLoading } from './utils';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tshowMenuInPopup: undefined,\n\tisShortable: false,\n});\n\nconst model = defineModel<string>();\n\nconst store = defineTabsStore(props, model);\n\nconst uid = Math.random();\n\nif (props.pageMod) Core.state.documentClassModificators.set(uid, 'top-hasTabsViewPageMod');\n\nonUnmounted(() => {\n\tif (props.pageMod) Core.state.documentClassModificators.delete(uid);\n\n\tif (store.$id) delHash(store.$id, store.activeItemName, true);\n});\n\nconst componentRef = ref();\nconst isLoading = ref(false);\n\nwatch([componentRef, () => store.component], () => {\n\tisLoading.value = checkComponentIsLoading(store.component);\n}, { immediate: true });\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView': true,\n\t\t\t'top-tabsView-pageMod': props.pageMod,\n\t\t\t'top-tabsView-inPopup': store.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<TabsViewMenu\n\t\t\t:isShortable=\"isShortable\"\n\t\t\tv-model:isLoading=\"isLoading\"\n\t\t>\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\n\t\t\t<slot name=\"menu\"></slot>\n\t\t</TabsViewMenu>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-tabsView_contents': true,\n\t\t\t\t'top-tabsView_contents-isLoading': isLoading,\n\t\t\t\t'top-tabsView_contents-noScrollable': !store.scrollable,\n\t\t\t}\"\n\t\t>\n\t\t\t<TopLoadbar v-if=\"isLoading\"/>\n\n\t\t\t<keep-alive>\n\t\t\t\t<component\n\t\t\t\t\tref=\"componentRef\"\n\t\t\t\t\t:is=\"store.component\"\n\t\t\t\t/>\n\t\t\t</keep-alive>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n:root {\n\t--top-tabsView-top: 0px;\n\t--top-tabsView-menu-width: 220px;\n\t--top-tabsView-contents-offset-top: 0px;\n}\n\n.top-tabsView {\n\tbackground: var(--color-layout-middle);\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.top-tabsView_contents {\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-layout-front-1);\n\tpadding: var(--top-padding-4);\n\tflex-grow: 1;\n\toverflow: auto;\n\tposition: relative;\n}\n\n.top-tabsView_contents-isLoading {\n\tpointer-events: none;\n}\n\n.top-tabsView_contents-noScrollable {\n\twidth: calc(100% - var(--top-tabsView-menu-width));\n\tpadding: 0;\n\toverflow: visible;\n}\n\n/* top-tabsView-inPopup */\n.top-tabsView-inPopup {\n\tbackground: var(--color-layout-front-1);\n\tflex-direction: column;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents {\n\tborder-radius: 0;\n}\n\n.top-tabsView-inPopup > .top-tabsView_contents-noScrollable {\n\twidth: auto;\n}\n</style>\n","<script setup lang=\"ts\">\n\n</script>\n\n<template>\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\n</template>\n\n<style>\n.top-tabsView_menuDelimeter {\n\tpadding: var(--top-padding-1) 0;\n\tdisplay: flex;\n}\n\n.top-tabsView_menuDelimeter:before {\n\tcontent: \"\";\n\theight: 2px;\n\tbackground: var(--color-line-2);\n\tflex-grow: 1;\n}\n\n.top-tabsView_menuDelimeter:first-child,\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\n\tdisplay: none;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useTabsStore } from './store';\nimport type { PropsMenuTitle } from './types';\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\nimport { TopPopupListItem } from '../../popup/popup';\n\ndefineProps<PropsMenuTitle>();\n\nconst store = useTabsStore();\n</script>\n\n<template>\n\t<TopPopupListItem\n\t\tv-if=\"store.showMenuInPopup\"\n\t\ttype=\"title\"\n\t>\n\t\t<slot></slot>\n\t</TopPopupListItem>\n\n\t<TabsViewMenuDelimeter v-else-if=\"store.isShort\"/>\n\n\t<div\n\t\tv-else\n\t\t:class=\"{\n\t\t\t'top-tabsView_menuTitle': true,\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\n\t\t}\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-tabsView_menuTitle {\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\n\tfont-weight: 600;\n\tcolor: var(--color-text-1);\n}\n\n.top-tabsView_menuTitle-subtitle {\n\tpadding-top: var(--top-padding-1);\n\tfont-size: 12px;\n\tfont-weight: 400;\n\tcolor: var(--color-text-2);\n}\n</style>\n","import type { ComponentCustomProps } from 'vue';\n\nimport TabsView from './tabsView/tabsView.vue';\nimport TabsViewMenuItem from './tabsView/menuItem.vue';\nimport TabsViewMenuTitle from './tabsView/menuTitle.vue';\n\nexport const TopTabsView = TabsView as typeof TabsView & ComponentCustomProps;\nexport const TopTabsViewMenuItem = TabsViewMenuItem as typeof TabsViewMenuItem & ComponentCustomProps;\nexport const TopTabsViewMenuTitle = TabsViewMenuTitle as typeof TabsViewMenuTitle & ComponentCustomProps;\n"],"names":["genStorageKey","stateName","stateKey","StoreLocalStorage","store","localStorageValue","localStorageKey","popstateCallbacks","e","defineTabsStore","props","model","store$1","injectionKey","showMenuInPopup","vue","forms","isShort","component","scrollable","pageMod","popstateCallback","_e","useTabsStore","href","tagName","popup_popup","onClick","checkComponentIsLoading","preResolveComponent","condition","slots","menuItemByName","setMenuItemByNameFromItems","menuItems","subComponent","_sfc_main$4","_a","_b","_d","_c","activeMenuItem","numberChanged","countChanged","setMenuItemByName","activeItemName","isLoading","utils_route","elRef","resizeObserver","uid","componentRef","_hoisted_1","TopTabsView","_sfc_main$2","TopTabsViewMenuItem","TopTabsViewMenuTitle","_sfc_main"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export * from '../components/tabsView/tabsView'
2
- export {}