@topvisor/ui 1.1.0 → 1.3.0

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 (536) hide show
  1. package/.chunks/core-CXqQSo9c.amd.js +2 -0
  2. package/.chunks/core-CXqQSo9c.amd.js.map +1 -0
  3. package/.chunks/{core-Dsl28h7N.es.js → core-CY6RkZz2.es.js} +47 -46
  4. package/.chunks/core-CY6RkZz2.es.js.map +1 -0
  5. package/.chunks/{datepicker-BTiE5Grw.es.js → datepicker-BiaXdEIn.es.js} +2 -2
  6. package/.chunks/datepicker-BiaXdEIn.es.js.map +1 -0
  7. package/.chunks/datepicker-DUoArkDy.amd.js +2 -0
  8. package/.chunks/datepicker-DUoArkDy.amd.js.map +1 -0
  9. package/.chunks/dialog_selectorRegions-CPRVbPAk.amd.js +2 -0
  10. package/.chunks/dialog_selectorRegions-CPRVbPAk.amd.js.map +1 -0
  11. package/.chunks/dialog_selectorRegions-Zlm6K2mk.es.js +188 -0
  12. package/.chunks/dialog_selectorRegions-Zlm6K2mk.es.js.map +1 -0
  13. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-CLahwA6M.es.js +322 -0
  14. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-CLahwA6M.es.js.map +1 -0
  15. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-D8NggYHD.amd.js +2 -0
  16. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-D8NggYHD.amd.js.map +1 -0
  17. package/.chunks/field-Cvv0SRcJ.amd.js +2 -0
  18. package/.chunks/field-Cvv0SRcJ.amd.js.map +1 -0
  19. package/.chunks/field-CyyFzM-Y.es.js +16 -0
  20. package/.chunks/field-CyyFzM-Y.es.js.map +1 -0
  21. package/.chunks/forms-CgtkdwgA.amd.js +3 -0
  22. package/.chunks/forms-CgtkdwgA.amd.js.map +1 -0
  23. package/.chunks/forms-DarRVke_.es.js +2045 -0
  24. package/.chunks/forms-DarRVke_.es.js.map +1 -0
  25. package/.chunks/index-BEI7XZmU.amd.js +2 -0
  26. package/.chunks/index-BEI7XZmU.amd.js.map +1 -0
  27. package/.chunks/index-igPkes8X.es.js +48 -0
  28. package/.chunks/index-igPkes8X.es.js.map +1 -0
  29. package/.chunks/lazy-40pjr8cZ.es.js +71 -0
  30. package/.chunks/lazy-40pjr8cZ.es.js.map +1 -0
  31. package/.chunks/lazy-DSFLxvj4.amd.js +2 -0
  32. package/.chunks/lazy-DSFLxvj4.amd.js.map +1 -0
  33. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CT-EXxJj.amd.js +2 -0
  34. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CT-EXxJj.amd.js.map +1 -0
  35. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DzJ_pc-d.es.js +184 -0
  36. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DzJ_pc-d.es.js.map +1 -0
  37. package/.chunks/menu.vue_vue_type_style_index_0_lang-BLMYjYLV.amd.js +2 -0
  38. package/.chunks/menu.vue_vue_type_style_index_0_lang-BLMYjYLV.amd.js.map +1 -0
  39. package/.chunks/{menu.vue_vue_type_style_index_0_lang-DmY5w4yr.es.js → menu.vue_vue_type_style_index_0_lang-COD_4iTy.es.js} +35 -34
  40. package/.chunks/menu.vue_vue_type_style_index_0_lang-COD_4iTy.es.js.map +1 -0
  41. package/.chunks/{notice-CJdCc72d.amd.js → notice-CPtAnc7p.amd.js} +3 -3
  42. package/.chunks/notice-CPtAnc7p.amd.js.map +1 -0
  43. package/.chunks/{notice-Cqs1dKt8.es.js → notice-fno9saBY.es.js} +2 -2
  44. package/.chunks/notice-fno9saBY.es.js.map +1 -0
  45. package/.chunks/{page.vue_vue_type_script_setup_true_lang-BCfksgg3.es.js → page.vue_vue_type_script_setup_true_lang-BS0aEP4i.es.js} +4 -4
  46. package/.chunks/page.vue_vue_type_script_setup_true_lang-BS0aEP4i.es.js.map +1 -0
  47. package/.chunks/page.vue_vue_type_script_setup_true_lang-DLebrPmi.amd.js +2 -0
  48. package/.chunks/page.vue_vue_type_script_setup_true_lang-DLebrPmi.amd.js.map +1 -0
  49. package/.chunks/popup-AG94kehM.es.js +459 -0
  50. package/.chunks/popup-AG94kehM.es.js.map +1 -0
  51. package/.chunks/popup-CtvJLWn3.amd.js +2 -0
  52. package/.chunks/popup-CtvJLWn3.amd.js.map +1 -0
  53. package/.chunks/punycode.es6-CNOnFR2-.amd.js +2 -0
  54. package/.chunks/{punycode.es6-C2yitnNb.amd.js.map → punycode.es6-CNOnFR2-.amd.js.map} +1 -1
  55. package/.chunks/punycode.es6-CgGegfA_.es.js +134 -0
  56. package/.chunks/{punycode.es6-CNI-zL6U.es.js.map → punycode.es6-CgGegfA_.es.js.map} +1 -1
  57. package/.chunks/store-CX_6ZXhO.es.js.map +1 -1
  58. package/.chunks/store-YRW59xEF.amd.js +2 -0
  59. package/.chunks/store-YRW59xEF.amd.js.map +1 -0
  60. package/.chunks/{utils-B1H3EGkg.es.js → utils-3M9LC_L_.es.js} +2 -2
  61. package/.chunks/utils-3M9LC_L_.es.js.map +1 -0
  62. package/.chunks/utils-BitKP31L.es.js +302 -0
  63. package/.chunks/utils-BitKP31L.es.js.map +1 -0
  64. package/.chunks/utils-D9D3zzjc.amd.js +2 -0
  65. package/.chunks/utils-D9D3zzjc.amd.js.map +1 -0
  66. package/.chunks/utils-DcP4RFmH.amd.js +2 -0
  67. package/.chunks/utils-DcP4RFmH.amd.js.map +1 -0
  68. package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-BK-pTu3V.amd.js +2 -0
  69. package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-BK-pTu3V.amd.js.map +1 -0
  70. package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-xwjgBq1L.es.js +39 -0
  71. package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-xwjgBq1L.es.js.map +1 -0
  72. package/.chunks/widgetInput.vue_vue_type_style_index_0_lang-Cce9ZdtW.amd.js +2 -0
  73. package/.chunks/widgetInput.vue_vue_type_style_index_0_lang-Cce9ZdtW.amd.js.map +1 -0
  74. package/README.md +82 -82
  75. package/api/additional.amd.js +2 -0
  76. package/api/additional.amd.js.map +1 -0
  77. package/api/additional.d.ts +2 -0
  78. package/api/additional.js +66 -0
  79. package/api/additional.js.map +1 -0
  80. package/api/index.amd.js +2 -0
  81. package/api/index.amd.js.map +1 -0
  82. package/api/index.d.ts +2 -0
  83. package/api/index.js +280 -0
  84. package/api/index.js.map +1 -0
  85. package/assets/core.css +1 -1
  86. package/assets/extra.css +1 -0
  87. package/assets/forms.css +1 -1
  88. package/assets/formsExt.css +1 -1
  89. package/assets/layout.css +1 -1
  90. package/assets/notice.css +1 -1
  91. package/assets/project.css +1 -1
  92. package/assets/themes/dark-th.css +1 -1
  93. package/assets/themes/dark.css +1 -1
  94. package/assets/themes/light.css +1 -1
  95. package/charts/charts.amd.js +1 -1
  96. package/charts/charts.amd.js.map +1 -1
  97. package/charts/charts.d.ts +1 -1
  98. package/charts/charts.js +11 -11
  99. package/charts/charts.js.map +1 -1
  100. package/core/app.amd.js +1 -1
  101. package/core/app.amd.js.map +1 -1
  102. package/core/app.d.ts +2 -8
  103. package/core/app.js +36 -34
  104. package/core/app.js.map +1 -1
  105. package/dialog/dialog.amd.js +1 -1
  106. package/dialog/dialog.amd.js.map +1 -1
  107. package/dialog/dialog.d.ts +1 -1
  108. package/dialog/dialog.js +2 -2
  109. package/dialog/dialog.js.map +1 -1
  110. package/extra/extra.amd.js +2 -0
  111. package/extra/extra.amd.js.map +1 -0
  112. package/extra/extra.d.ts +2 -0
  113. package/extra/extra.js +72 -0
  114. package/extra/extra.js.map +1 -0
  115. package/forms/forms.amd.js +1 -1
  116. package/forms/forms.d.ts +1 -1
  117. package/forms/forms.js +11 -9
  118. package/forms/helpers.amd.js +1 -1
  119. package/forms/helpers.amd.js.map +1 -1
  120. package/forms/helpers.d.ts +0 -1
  121. package/forms/helpers.js +1 -9
  122. package/forms/helpers.js.map +1 -1
  123. package/formsExt/formsExt.amd.js +1 -1
  124. package/formsExt/formsExt.amd.js.map +1 -1
  125. package/formsExt/formsExt.d.ts +1 -1
  126. package/formsExt/formsExt.js +524 -320
  127. package/formsExt/formsExt.js.map +1 -1
  128. package/icomoon/Read Me.txt +7 -7
  129. package/icomoon/demo-files/demo.css +158 -158
  130. package/icomoon/demo-files/demo.js +30 -30
  131. package/icomoon/demo.css +158 -0
  132. package/icomoon/demo.html +3782 -3558
  133. package/icomoon/demo.js +30 -0
  134. package/icomoon/fonts/Topvisor-2.eot +0 -0
  135. package/icomoon/fonts/Topvisor-2.svg +292 -276
  136. package/icomoon/fonts/Topvisor-2.ttf +0 -0
  137. package/icomoon/fonts/Topvisor-2.woff +0 -0
  138. package/icomoon/selection.json +1 -1
  139. package/icomoon/style.css +828 -780
  140. package/jquery-ui.min.css +5 -5
  141. package/layout/layout.amd.js +1 -1
  142. package/layout/layout.amd.js.map +1 -1
  143. package/layout/layout.d.ts +1 -1
  144. package/layout/layout.js +29 -29
  145. package/layout/layout.js.map +1 -1
  146. package/package.json +36 -33
  147. package/popup/popup.amd.js +1 -1
  148. package/popup/popup.amd.js.map +1 -1
  149. package/popup/popup.d.ts +1 -1
  150. package/popup/popup.js +120 -136
  151. package/popup/popup.js.map +1 -1
  152. package/popup/worker.amd.js +1 -1
  153. package/popup/worker.amd.js.map +1 -1
  154. package/popup/worker.d.ts +1 -1
  155. package/popup/worker.js +31 -22
  156. package/popup/worker.js.map +1 -1
  157. package/project/project.amd.js +1 -1
  158. package/project/project.amd.js.map +1 -1
  159. package/project/project.d.ts +1 -1
  160. package/project/project.js +396 -386
  161. package/project/project.js.map +1 -1
  162. package/require/css.amd.js +12 -12
  163. package/src/api/api/additional.d.ts +1 -0
  164. package/src/api/api/client/client.d.ts +55 -0
  165. package/src/api/api/client/request-options.d.ts +1 -0
  166. package/src/api/api/client/request.d.ts +2 -0
  167. package/src/api/api/index.d.ts +12 -0
  168. package/src/api/api/mocker/index.d.ts +9 -0
  169. package/src/api/api/tests/types.test-d.d.ts +1 -0
  170. package/src/api/api/types/api.d.ts +144 -0
  171. package/src/api/api/types/client/client.d.ts +8 -0
  172. package/src/api/api/types/client/middleware.d.ts +65 -0
  173. package/src/api/api/types/client/options.d.ts +60 -0
  174. package/src/api/api/types/client/request-context.d.ts +35 -0
  175. package/src/api/api/types/client/request-options.d.ts +73 -0
  176. package/src/api/api/types/client/request.d.ts +91 -0
  177. package/src/api/api/types/ext.d.ts +51 -0
  178. package/src/api/api/types/field.d.ts +33 -0
  179. package/src/api/api/types/index.d.ts +13 -0
  180. package/src/api/api/types/mocker.d.ts +106 -0
  181. package/src/api/api/types/schema.d.ts +50 -0
  182. package/src/api/api/types/tv.d.ts +59 -0
  183. package/src/api/api/types/utils.d.ts +51 -0
  184. package/src/api/api/utils/common.d.ts +16 -0
  185. package/src/api/api/utils/field.d.ts +8 -0
  186. package/src/api/api/utils/filters.d.ts +48 -0
  187. package/src/api/api/utils/lazy.d.ts +26 -0
  188. package/src/components/charts/charts.d.ts +2 -0
  189. package/{components → src/components}/charts/miniChart/miniChart.vue.d.ts +1 -1
  190. package/{components → src/components}/charts/miniCharts/miniCharts.d.ts +1 -1
  191. package/{components → src/components}/charts/miniCharts/miniCharts.vue.d.ts +1 -1
  192. package/{components → src/components}/core/notice/item/types.d.ts +2 -0
  193. package/{components → src/components}/dialog/dialog/dialogs/dialogs.vue.d.ts +3 -0
  194. package/{components → src/components}/dialog/dialog/page/types.d.ts +2 -2
  195. package/{components → src/components}/dialog/lib/types.d.ts +23 -0
  196. package/src/components/dialog/lib/utils.d.ts +14 -0
  197. package/{components → src/components}/dialog/lib/utils.globalEvents.d.ts +2 -2
  198. package/{components → src/components}/dialog/lib/worker.d.ts +27 -11
  199. package/src/components/extra/extra.d.ts +1 -0
  200. package/src/components/extra/rive/rive.vue.d.ts +11 -0
  201. package/src/components/extra/rive/types.d.ts +7 -0
  202. package/{components → src/components}/forms/avatar/avatar.vue.d.ts +2 -2
  203. package/{components/forms/avatar/avatar.d.ts → src/components/forms/avatar/types.d.ts} +4 -10
  204. package/{components → src/components}/forms/button/button.vue.d.ts +3 -7
  205. package/{components → src/components}/forms/button/types.d.ts +15 -19
  206. package/src/components/forms/caption/caption.vue.d.ts +17 -0
  207. package/src/components/forms/caption/types.d.ts +9 -0
  208. package/{components → src/components}/forms/checkbox/checkbox.vue.d.ts +3 -3
  209. package/{components → src/components}/forms/controlLabel/controlLabel.vue.d.ts +1 -1
  210. package/src/components/forms/forms.d.ts +15 -0
  211. package/src/components/forms/helpers.d.ts +1 -0
  212. package/{components → src/components}/forms/hint/hint.vue.d.ts +1 -1
  213. package/{components → src/components}/forms/input/input.vue.d.ts +2 -3
  214. package/src/components/forms/input/types.d.ts +23 -0
  215. package/{components → src/components}/forms/inputDate/inputDate.vue.d.ts +1 -1
  216. package/src/components/forms/inputDate/types.d.ts +1 -0
  217. package/src/components/forms/preloader/types.d.ts +3 -0
  218. package/{components → src/components}/forms/radio/radio.vue.d.ts +1 -1
  219. package/src/components/forms/select/select.vue.d.ts +17 -0
  220. package/{components/forms/select/select.d.ts → src/components/forms/select/types.d.ts} +3 -3
  221. package/{components → src/components}/forms/switcher/switcher.vue.d.ts +1 -1
  222. package/{components → src/components}/forms/textarea/textarea.vue.d.ts +1 -1
  223. package/{components/forms/textarea/textarea.d.ts → src/components/forms/textarea/types.d.ts} +4 -0
  224. package/{components/formsExt/radioGroup/radioGroup.vue.d.ts → src/components/formsExt/checkboxGroup/checkboxGroup.vue.d.ts} +7 -10
  225. package/src/components/formsExt/checkboxGroup/types.d.ts +19 -0
  226. package/{components → src/components}/formsExt/editArea/editArea.vue.d.ts +1 -1
  227. package/{components/formsExt/editArea/editArea.d.ts → src/components/formsExt/editArea/types.d.ts} +1 -1
  228. package/{components → src/components}/formsExt/editInput/editInput.vue.d.ts +1 -1
  229. package/{components/formsExt/editInput/editInput.d.ts → src/components/formsExt/editInput/types.d.ts} +1 -1
  230. package/src/components/formsExt/formsExt.d.ts +8 -0
  231. package/{components → src/components}/formsExt/info/types.d.ts +1 -1
  232. package/{components → src/components}/formsExt/menu/menu.vue.d.ts +1 -1
  233. package/src/components/formsExt/policy/policy.vue.d.ts +8 -0
  234. package/src/components/formsExt/policy/types.d.ts +20 -0
  235. package/{components/forms/select/select.vue.d.ts → src/components/formsExt/radioGroup/radioGroup.vue.d.ts} +4 -6
  236. package/{components/formsExt/radioGroup/radioGroup.d.ts → src/components/formsExt/radioGroup/types.d.ts} +3 -3
  237. package/src/components/formsExt/selector2/composables/useAPI.d.ts +18 -0
  238. package/src/components/formsExt/selector2/composables/useMenu.d.ts +16 -0
  239. package/{components → src/components}/formsExt/selector2/itemMulti.vue.d.ts +1 -1
  240. package/src/components/formsExt/selector2/selector2.vue.d.ts +43 -0
  241. package/{components/formsExt/selector2/selector2.d.ts → src/components/formsExt/selector2/types.d.ts} +66 -34
  242. package/src/components/formsExt/selector2/utils.d.ts +6 -0
  243. package/{components → src/components}/layout/islandRows/types.d.ts +1 -1
  244. package/src/components/layout/layout.d.ts +4 -0
  245. package/src/components/popup/alert/alert.vue.d.ts +25 -0
  246. package/src/components/popup/alert/types.d.ts +8 -0
  247. package/src/components/popup/confirm/confirm.vue.d.ts +26 -0
  248. package/{components/popup/confirm/confirm.d.ts → src/components/popup/confirm/types.d.ts} +3 -3
  249. package/{components → src/components}/popup/lib/popup.d.ts +6 -2
  250. package/{components → src/components}/popup/lib/popup.globalEvents.d.ts +6 -0
  251. package/{components → src/components}/popup/lib/worker.d.ts +8 -6
  252. package/{components → src/components}/popup/popup/listItem.vue.d.ts +1 -1
  253. package/src/components/popup/popup/opener.vue.d.ts +17 -0
  254. package/src/components/popup/popup/popup.vue.d.ts +38 -0
  255. package/{components/popup/popup/popup.d.ts → src/components/popup/popup/types.d.ts} +20 -11
  256. package/{components → src/components}/popup/popup/widgetInput.vue.d.ts +1 -1
  257. package/src/components/popup/popup.d.ts +7 -0
  258. package/src/components/popup/prompt/prompt.vue.d.ts +26 -0
  259. package/{components/popup/prompt/prompt.d.ts → src/components/popup/prompt/types.d.ts} +3 -3
  260. package/src/components/project/project.d.ts +9 -0
  261. package/{components → src/components}/project/selectorCompetitors/composables.d.ts +1 -2
  262. package/{components → src/components}/project/selectorCompetitors/selectorCompetitors.vue.d.ts +1 -1
  263. package/{components/project/selectorCompetitors/selectorCompetitors.d.ts → src/components/project/selectorCompetitors/types.d.ts} +7 -0
  264. package/{components → src/components}/project/selectorRegion/composables/compare.d.ts +1 -1
  265. package/{components → src/components}/project/selectorRegion/composables/selectRegion.d.ts +2 -3
  266. package/{components → src/components}/project/selectorRegion/composables/selectSearcher.d.ts +2 -2
  267. package/{components → src/components}/project/selectorRegion/composables/selectorRegion.d.ts +2 -2
  268. package/{components → src/components}/project/selectorRegion/dialog_selectorRegions/dialog_selectorRegions.vue.d.ts +3 -1
  269. package/{components → src/components}/project/selectorRegion/dialog_selectorRegions/types.d.ts +1 -1
  270. package/{components → src/components}/project/selectorRegion/selectorRegion.vue.d.ts +1 -1
  271. package/{components/project/selectorRegion/selectorRegion.d.ts → src/components/project/selectorRegion/types.d.ts} +2 -0
  272. package/src/components/project/selectorRegion/utils/consts.d.ts +31 -0
  273. package/{components → src/components}/project/selectorRegion/utils/utils.d.ts +4 -2
  274. package/{components → src/components}/project/tagSelector/popupOpener/types.d.ts +2 -0
  275. package/src/components/project/tagSelector/tagIcon/tagIcon.vue.d.ts +4 -0
  276. package/{components → src/components}/project/tagSelector/types.d.ts +2 -0
  277. package/{components → src/components}/project/tagSelector/utils/el.d.ts +1 -1
  278. package/{components → src/components}/tabs/tabs/content.vue.d.ts +1 -1
  279. package/{components → src/components}/tabs/tabs/tab.vue.d.ts +1 -1
  280. package/{components → src/components}/tabs/tabs/tabs.vue.d.ts +1 -1
  281. package/src/components/tabs/tabs.d.ts +3 -0
  282. package/{components → src/components}/tabsView/tabsView/menu.vue.d.ts +1 -1
  283. package/{components → src/components}/tabsView/tabsView/menuItem.vue.d.ts +1 -1
  284. package/{components → src/components}/tabsView/tabsView/menuTitle.vue.d.ts +1 -1
  285. package/src/components/tabsView/tabsView/store.d.ts +12 -0
  286. package/{components → src/components}/tabsView/tabsView/tabsView.vue.d.ts +1 -1
  287. package/{components/tabsView/tabsView/tabsView.d.ts → src/components/tabsView/tabsView/types.d.ts} +2 -2
  288. package/src/components/tabsView/tabsView.d.ts +3 -0
  289. package/src/core/app.d.ts +8 -0
  290. package/{core → src/core}/core/core.d.ts +1 -1
  291. package/{core → src/core}/core/options.d.ts +7 -6
  292. package/{core → src/core}/core/state.d.ts +1 -1
  293. package/src/core/directives/preloader.d.ts +8 -0
  294. package/{core → src/core}/plugins/core.d.ts +2 -2
  295. package/{core → src/core}/plugins/i18n.d.ts +4 -4
  296. package/{core → src/core}/utils/date.d.ts +30 -12
  297. package/{core → src/core}/utils/dom.d.ts +11 -1
  298. package/{core → src/core}/utils/route.d.ts +1 -1
  299. package/{core → src/core}/utils/searchers.d.ts +1 -1
  300. package/{core → src/core}/utils/store.d.ts +1 -1
  301. package/{core → src/core}/utils/string.d.ts +13 -1
  302. package/tabs/tabs.amd.js +1 -1
  303. package/tabs/tabs.amd.js.map +1 -1
  304. package/tabs/tabs.d.ts +1 -1
  305. package/tabs/tabs.js +14 -14
  306. package/tabs/tabs.js.map +1 -1
  307. package/tabsView/tabsView.amd.js +1 -1
  308. package/tabsView/tabsView.amd.js.map +1 -1
  309. package/tabsView/tabsView.d.ts +1 -1
  310. package/tabsView/tabsView.js +49 -48
  311. package/tabsView/tabsView.js.map +1 -1
  312. package/utils/check.amd.js +1 -1
  313. package/utils/check.amd.js.map +1 -1
  314. package/utils/check.d.ts +1 -1
  315. package/utils/check.js.map +1 -1
  316. package/utils/clipboard.amd.js +2 -2
  317. package/utils/clipboard.amd.js.map +1 -1
  318. package/utils/clipboard.d.ts +1 -1
  319. package/utils/clipboard.js +1 -1
  320. package/utils/clipboard.js.map +1 -1
  321. package/utils/date.amd.js +1 -1
  322. package/utils/date.d.ts +1 -1
  323. package/utils/date.js +4 -3
  324. package/utils/device.amd.js +1 -1
  325. package/utils/device.d.ts +1 -1
  326. package/utils/device.js +4 -4
  327. package/utils/dom.amd.js +1 -1
  328. package/utils/dom.amd.js.map +1 -1
  329. package/utils/dom.d.ts +3 -3
  330. package/utils/dom.js +27 -22
  331. package/utils/dom.js.map +1 -1
  332. package/utils/image.amd.js +2 -2
  333. package/utils/image.amd.js.map +1 -1
  334. package/utils/image.d.ts +1 -1
  335. package/utils/image.js +1 -1
  336. package/utils/image.js.map +1 -1
  337. package/utils/keyboard.amd.js +1 -1
  338. package/utils/keyboard.amd.js.map +1 -1
  339. package/utils/keyboard.d.ts +1 -1
  340. package/utils/keyboard.js.map +1 -1
  341. package/utils/lodash.amd.js +1 -1
  342. package/utils/lodash.d.ts +1 -1
  343. package/utils/lodash.js +1 -1
  344. package/utils/number.amd.js +1 -1
  345. package/utils/number.amd.js.map +1 -1
  346. package/utils/number.d.ts +1 -1
  347. package/utils/number.js.map +1 -1
  348. package/utils/price.amd.js +1 -1
  349. package/utils/price.amd.js.map +1 -1
  350. package/utils/price.d.ts +1 -1
  351. package/utils/price.js +1 -1
  352. package/utils/price.js.map +1 -1
  353. package/utils/route.amd.js +1 -1
  354. package/utils/route.amd.js.map +1 -1
  355. package/utils/route.d.ts +1 -1
  356. package/utils/route.js +26 -19
  357. package/utils/route.js.map +1 -1
  358. package/utils/scroll.amd.js +1 -1
  359. package/utils/scroll.amd.js.map +1 -1
  360. package/utils/scroll.d.ts +1 -1
  361. package/utils/scroll.js.map +1 -1
  362. package/utils/searchers.amd.js +1 -1
  363. package/utils/searchers.amd.js.map +1 -1
  364. package/utils/searchers.d.ts +1 -1
  365. package/utils/searchers.js +3 -3
  366. package/utils/searchers.js.map +1 -1
  367. package/utils/store.amd.js +1 -1
  368. package/utils/store.d.ts +1 -1
  369. package/utils/string.amd.js +1 -1
  370. package/utils/string.amd.js.map +1 -1
  371. package/utils/string.d.ts +1 -1
  372. package/utils/string.js +41 -28
  373. package/utils/string.js.map +1 -1
  374. package/utils/system.amd.js +1 -1
  375. package/utils/system.amd.js.map +1 -1
  376. package/utils/system.d.ts +1 -1
  377. package/utils/system.js.map +1 -1
  378. package/utils/url.amd.js +2 -2
  379. package/utils/url.amd.js.map +1 -1
  380. package/utils/url.d.ts +1 -1
  381. package/utils/url.js +1 -1
  382. package/utils/url.js.map +1 -1
  383. package/web-types.json +130 -130
  384. package/.chunks/core-CcWs0qYw.amd.js +0 -2
  385. package/.chunks/core-CcWs0qYw.amd.js.map +0 -1
  386. package/.chunks/core-Dsl28h7N.es.js.map +0 -1
  387. package/.chunks/datepicker-B6kIyIcw.amd.js +0 -2
  388. package/.chunks/datepicker-B6kIyIcw.amd.js.map +0 -1
  389. package/.chunks/datepicker-BTiE5Grw.es.js.map +0 -1
  390. package/.chunks/dialog_selectorRegions-BZcnnvJM.es.js +0 -140
  391. package/.chunks/dialog_selectorRegions-BZcnnvJM.es.js.map +0 -1
  392. package/.chunks/dialog_selectorRegions-CePGUsCo.amd.js +0 -2
  393. package/.chunks/dialog_selectorRegions-CePGUsCo.amd.js.map +0 -1
  394. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-B5hK613K.es.js +0 -266
  395. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-B5hK613K.es.js.map +0 -1
  396. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-izSFcRLb.amd.js +0 -2
  397. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-izSFcRLb.amd.js.map +0 -1
  398. package/.chunks/forms-BsuCen2-.es.js +0 -1999
  399. package/.chunks/forms-BsuCen2-.es.js.map +0 -1
  400. package/.chunks/forms-BwGakScF.amd.js +0 -3
  401. package/.chunks/forms-BwGakScF.amd.js.map +0 -1
  402. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CfM8kOV1.amd.js +0 -2
  403. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CfM8kOV1.amd.js.map +0 -1
  404. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CszHDnB0.es.js +0 -181
  405. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CszHDnB0.es.js.map +0 -1
  406. package/.chunks/menu.vue_vue_type_style_index_0_lang-DQTVNJGq.amd.js +0 -2
  407. package/.chunks/menu.vue_vue_type_style_index_0_lang-DQTVNJGq.amd.js.map +0 -1
  408. package/.chunks/menu.vue_vue_type_style_index_0_lang-DmY5w4yr.es.js.map +0 -1
  409. package/.chunks/notice-CJdCc72d.amd.js.map +0 -1
  410. package/.chunks/notice-Cqs1dKt8.es.js.map +0 -1
  411. package/.chunks/page.vue_vue_type_script_setup_true_lang-1JWduCTr.amd.js +0 -2
  412. package/.chunks/page.vue_vue_type_script_setup_true_lang-1JWduCTr.amd.js.map +0 -1
  413. package/.chunks/page.vue_vue_type_script_setup_true_lang-BCfksgg3.es.js.map +0 -1
  414. package/.chunks/popup-CLhWWJDe.amd.js +0 -2
  415. package/.chunks/popup-CLhWWJDe.amd.js.map +0 -1
  416. package/.chunks/popup-N10MDafw.es.js +0 -416
  417. package/.chunks/popup-N10MDafw.es.js.map +0 -1
  418. package/.chunks/punycode.es6-C2yitnNb.amd.js +0 -2
  419. package/.chunks/punycode.es6-CNI-zL6U.es.js +0 -134
  420. package/.chunks/store-esTid5oI.amd.js +0 -2
  421. package/.chunks/store-esTid5oI.amd.js.map +0 -1
  422. package/.chunks/utils-B1H3EGkg.es.js.map +0 -1
  423. package/.chunks/utils-B7GVqGBH.amd.js +0 -2
  424. package/.chunks/utils-B7GVqGBH.amd.js.map +0 -1
  425. package/.chunks/utils-DIy2mbYd.amd.js +0 -2
  426. package/.chunks/utils-DIy2mbYd.amd.js.map +0 -1
  427. package/.chunks/utils-bjr7c5my.es.js +0 -225
  428. package/.chunks/utils-bjr7c5my.es.js.map +0 -1
  429. package/CHANGELOG.md +0 -14
  430. package/components/charts/charts.d.ts +0 -5
  431. package/components/charts/miniChart/stories/dummy.d.ts +0 -13
  432. package/components/charts/miniCharts/stories/dummy.d.ts +0 -6
  433. package/components/dialog/dialog/stories/autoload.d.ts +0 -2
  434. package/components/dialog/lib/utils.d.ts +0 -14
  435. package/components/forms/forms.d.ts +0 -27
  436. package/components/forms/helpers.d.ts +0 -10
  437. package/components/forms/input/input.d.ts +0 -34
  438. package/components/forms/inputDate/inputDate.d.ts +0 -3
  439. package/components/forms/select/stories/exampleOptions.d.ts +0 -5
  440. package/components/formsExt/formsExt.d.ts +0 -13
  441. package/components/formsExt/menu/stories/items.d.ts +0 -3
  442. package/components/formsExt/navigationMenu/navigationMenu.d.ts +0 -24
  443. package/components/formsExt/navigationMenu/stories/items.d.ts +0 -3
  444. package/components/formsExt/selector2/api.d.ts +0 -8
  445. package/components/formsExt/selector2/selector2.vue.d.ts +0 -210
  446. package/components/formsExt/selector2/stories/dummyAPIRequest.d.ts +0 -10
  447. package/components/layout/layout.d.ts +0 -9
  448. package/components/popup/alert/alert.d.ts +0 -8
  449. package/components/popup/alert/alert.vue.d.ts +0 -31
  450. package/components/popup/confirm/confirm.vue.d.ts +0 -33
  451. package/components/popup/popup/opener.vue.d.ts +0 -23
  452. package/components/popup/popup/popup.vue.d.ts +0 -40
  453. package/components/popup/popup.d.ts +0 -15
  454. package/components/popup/prompt/prompt.vue.d.ts +0 -33
  455. package/components/project/project.d.ts +0 -15
  456. package/components/project/selectorCompetitors/stories/items.d.ts +0 -3
  457. package/components/project/selectorCompetitors/types/competitor.d.ts +0 -7
  458. package/components/project/selectorRegion/stories/searchers.d.ts +0 -3
  459. package/components/project/selectorRegion/utils/consts.d.ts +0 -18
  460. package/components/tabs/tabs.d.ts +0 -7
  461. package/components/tabsView/tabsView/store.d.ts +0 -192
  462. package/components/tabsView/tabsView.d.ts +0 -7
  463. package/icomoon/Topvisor icons.json +0 -6260
  464. /package/assets/{popup.css → widgetInput.css} +0 -0
  465. /package/{components/charts/miniChart/miniChart.d.ts → src/components/charts/miniChart/types.d.ts} +0 -0
  466. /package/{components → src/components}/charts/miniChart/utils/consts.d.ts +0 -0
  467. /package/{components → src/components}/core/notice/item/item.vue.d.ts +0 -0
  468. /package/{components → src/components}/core/notice/notice.vue.d.ts +0 -0
  469. /package/{components → src/components}/core/notice/types.d.ts +0 -0
  470. /package/{components → src/components}/core/notice/utils.d.ts +0 -0
  471. /package/{components → src/components}/dialog/dialog/composables/asyncDialogHandle.d.ts +0 -0
  472. /package/{components → src/components}/dialog/dialog/composables/dialogHandle.d.ts +0 -0
  473. /package/{components → src/components}/dialog/dialog/composables/types.d.ts +0 -0
  474. /package/{components → src/components}/dialog/dialog/composables/utils.d.ts +0 -0
  475. /package/{components → src/components}/dialog/dialog/dialog.vue.d.ts +0 -0
  476. /package/{components → src/components}/dialog/dialog/page/page.vue.d.ts +0 -0
  477. /package/{components → src/components}/dialog/dialog/pageComponent/pageComponent.vue.d.ts +0 -0
  478. /package/{components → src/components}/dialog/dialog/pageComponent/types.d.ts +0 -0
  479. /package/{components → src/components}/dialog/dialog/stories/dialog_example/pages/utils.d.ts +0 -0
  480. /package/{components → src/components}/dialog/dialog/types.d.ts +0 -0
  481. /package/{components → src/components}/dialog/dialog.d.ts +0 -0
  482. /package/{components/forms/checkbox/checkbox.d.ts → src/components/forms/checkbox/types.d.ts} +0 -0
  483. /package/{components/forms/controlLabel/controlLabel.d.ts → src/components/forms/controlLabel/types.d.ts} +0 -0
  484. /package/{components/forms/hint/hint.d.ts → src/components/forms/hint/types.d.ts} +0 -0
  485. /package/{components → src/components}/forms/inputDate/datepicker.d.ts +0 -0
  486. /package/{components → src/components}/forms/inputRange/inputRange.vue.d.ts +0 -0
  487. /package/{components/layout/islandRows/islandRowsRow → src/components/forms/inputRange}/types.d.ts +0 -0
  488. /package/{components → src/components}/forms/loadbar/loadbar.vue.d.ts +0 -0
  489. /package/{components/project/tagSelector/tagIcon/tagIcon.vue.d.ts → src/components/forms/preloader/preloader.vue.d.ts} +0 -0
  490. /package/{components/forms/radio/radio.d.ts → src/components/forms/radio/types.d.ts} +0 -0
  491. /package/{components/forms/switcher/switcher.d.ts → src/components/forms/switcher/types.d.ts} +0 -0
  492. /package/{components → src/components}/formsExt/info/info.vue.d.ts +0 -0
  493. /package/{components/formsExt/menu/menu.d.ts → src/components/formsExt/menu/types.d.ts} +0 -0
  494. /package/{components → src/components}/layout/islandRows/islandRows.vue.d.ts +0 -0
  495. /package/{components → src/components}/layout/islandRows/islandRowsRow/islandRowsRow.vue.d.ts +0 -0
  496. /package/{components/forms/inputRange/inputRange.d.ts → src/components/layout/islandRows/islandRowsRow/types.d.ts} +0 -0
  497. /package/{components → src/components}/layout/islandRows/islandRowsSubTitle/islandRowsSubTitle.vue.d.ts +0 -0
  498. /package/{components → src/components}/layout/rows/rows.vue.d.ts +0 -0
  499. /package/{components → src/components}/layout/rows/types.d.ts +0 -0
  500. /package/{components → src/components}/popup/lib/worker.globalEvents.d.ts +0 -0
  501. /package/{components → src/components}/popup/worker.d.ts +0 -0
  502. /package/{components → src/components}/project/tagSelector/popupListItem/tagPopupListItem.vue.d.ts +0 -0
  503. /package/{components → src/components}/project/tagSelector/popupListItem/types.d.ts +0 -0
  504. /package/{components → src/components}/project/tagSelector/popupOpener/popupOpener.vue.d.ts +0 -0
  505. /package/{components → src/components}/project/tagSelector/tagIcon/types.d.ts +0 -0
  506. /package/{components → src/components}/project/tagSelector/tagSelector.vue.d.ts +0 -0
  507. /package/{components → src/components}/project/tagSelector/tagsDefaults.d.ts +0 -0
  508. /package/{components → src/components}/project/tagSelector/utils/utils.d.ts +0 -0
  509. /package/{components/tabs/tabs/tabs.d.ts → src/components/tabs/tabs/types.d.ts} +0 -0
  510. /package/{components → src/components}/tabsView/tabsView/menuDelimeter.vue.d.ts +0 -0
  511. /package/{components → src/components}/tabsView/tabsView/utils.d.ts +0 -0
  512. /package/{core → src/core}/core/events/resize.d.ts +0 -0
  513. /package/{core → src/core}/core/events.d.ts +0 -0
  514. /package/{core → src/core}/core/preloaders.d.ts +0 -0
  515. /package/{core → src/core}/directives/data.d.ts +0 -0
  516. /package/{core → src/core}/directives/focus.d.ts +0 -0
  517. /package/{core → src/core}/directives/scrollIntoView.d.ts +0 -0
  518. /package/{core → src/core}/directives/scrollShadow.d.ts +0 -0
  519. /package/{core → src/core}/directives/sticky.d.ts +0 -0
  520. /package/{core → src/core}/directives/swimUp.d.ts +0 -0
  521. /package/{core → src/core}/directives/tooltip.d.ts +0 -0
  522. /package/{core → src/core}/plugins/piniaTPA.d.ts +0 -0
  523. /package/{core → src/core}/utils/check.d.ts +0 -0
  524. /package/{core → src/core}/utils/clipboard.d.ts +0 -0
  525. /package/{core → src/core}/utils/device.d.ts +0 -0
  526. /package/{core → src/core}/utils/image.d.ts +0 -0
  527. /package/{core → src/core}/utils/keyboard.d.ts +0 -0
  528. /package/{core → src/core}/utils/lodash.d.ts +0 -0
  529. /package/{core → src/core}/utils/number.d.ts +0 -0
  530. /package/{core → src/core}/utils/price.d.ts +0 -0
  531. /package/{core → src/core}/utils/scroll.d.ts +0 -0
  532. /package/{core → src/core}/utils/store/localStorage.d.ts +0 -0
  533. /package/{core → src/core}/utils/store/plugin.d.ts +0 -0
  534. /package/{core → src/core}/utils/store/store.d.ts +0 -0
  535. /package/{core → src/core}/utils/system.d.ts +0 -0
  536. /package/{core → src/core}/utils/url.d.ts +0 -0
package/tabs/tabs.js CHANGED
@@ -1,21 +1,21 @@
1
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";
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 m } from "vue";
3
3
  const i = ["../assets/tabs.css"].map((t) => import.meta.resolve(t));
4
4
  p.insertCSSLinkToPage(i, !0);
5
- const m = {
5
+ const c = {
6
6
  class: /* @__PURE__ */ d({
7
7
  "top-tabs": !0
8
8
  })
9
9
  }, u = {
10
10
  key: 0,
11
11
  class: "top-tabs_header"
12
- }, _ = { class: "top-tabs_contents" }, h = /* @__PURE__ */ r({
12
+ }, _ = { class: "top-tabs_contents" }, T = /* @__PURE__ */ r({
13
13
  __name: "tabs",
14
14
  props: {
15
15
  id: {}
16
16
  },
17
17
  setup(t) {
18
- return (e, l) => (o(), a("div", m, [
18
+ return (e, l) => (o(), a("div", c, [
19
19
  s(e.$slots, "buttons"),
20
20
  e.$slots.header ? (o(), a("div", u, [
21
21
  s(e.$slots, "header")
@@ -25,7 +25,7 @@ const m = {
25
25
  ])
26
26
  ]));
27
27
  }
28
- }), f = ["id", "name", "value", "checked", "disabled"], $ = ["for"], v = /* @__PURE__ */ r({
28
+ }), h = ["id", "name", "value", "checked", "disabled"], f = ["for"], k = /* @__PURE__ */ r({
29
29
  __name: "tab",
30
30
  props: {
31
31
  tabsId: {},
@@ -35,7 +35,7 @@ const m = {
35
35
  disabled: { type: Boolean }
36
36
  },
37
37
  setup(t) {
38
- return (e, l) => (o(), a(c, null, [
38
+ return (e, l) => (o(), a(m, null, [
39
39
  n("input", {
40
40
  type: "radio",
41
41
  class: "top-tabs_tabInput top-unvisible",
@@ -44,7 +44,7 @@ const m = {
44
44
  value: e.name,
45
45
  checked: e.active,
46
46
  disabled: e.disabled
47
- }, null, 8, f),
47
+ }, null, 8, h),
48
48
  n("label", {
49
49
  class: d({
50
50
  "top-tabs_tabLabel": !0,
@@ -54,10 +54,10 @@ const m = {
54
54
  for: e.tabsId + e.name
55
55
  }, [
56
56
  s(e.$slots, "default")
57
- ], 10, $)
57
+ ], 10, f)
58
58
  ], 64));
59
59
  }
60
- }), C = ["data-tabs-name"], T = /* @__PURE__ */ r({
60
+ }), $ = ["data-tabs-name"], I = /* @__PURE__ */ r({
61
61
  __name: "content",
62
62
  props: {
63
63
  name: {}
@@ -70,12 +70,12 @@ const m = {
70
70
  "data-tabs-name": e.name
71
71
  }, [
72
72
  s(e.$slots, "default")
73
- ], 8, C));
73
+ ], 8, $));
74
74
  }
75
- }), S = h, y = v, B = T;
75
+ });
76
76
  export {
77
- S as TopTabs,
78
- B as TopTabsContent,
79
- y as TopTabsTab
77
+ T as TopTabs,
78
+ I as TopTabsContent,
79
+ k as TopTabsTab
80
80
  };
81
81
  //# sourceMappingURL=tabs.js.map
package/tabs/tabs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.js","sources":["../../src/components/tabs/tabs.ts"],"sourcesContent":["import type { ComponentCustomProps } from 'vue';\r\n\r\nimport Tabs from './tabs/tabs.vue';\r\nimport TabsTab from './tabs/tab.vue';\r\nimport TabsContent from './tabs/content.vue';\r\n\r\nexport const TopTabs = Tabs as typeof Tabs & ComponentCustomProps;\r\nexport const TopTabsTab = TabsTab as typeof TabsTab & ComponentCustomProps;\r\nexport const TopTabsContent = TabsContent as typeof TabsContent & ComponentCustomProps;\r\n"],"names":["TopTabs","_sfc_main$2","TopTabsTab","_sfc_main$1","TopTabsContent","_sfc_main"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMOA,IAAAC,GACAC,IAAAC,GACAC,IAAAC;"}
1
+ {"version":3,"file":"tabs.js","sources":["../../src/components/tabs/tabs/tabs.vue","../../src/components/tabs/tabs/tab.vue","../../src/components/tabs/tabs/content.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Props } from './types';\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabs': true,\n\t\t}\"\n\t>\n\t\t<!-- @slot Кнопки вкладок, ожидает передачу компонентов TabTitle -->\n\t\t<slot name=\"buttons\"></slot>\n\n\t\t<div v-if=\"$slots.header\" class=\"top-tabs_header\">\n\t\t\t<!-- @slot Слот с проивзольным содержимым, которое будет добавлено справа от вкладок -->\n\t\t\t<slot name=\"header\"></slot>\n\t\t</div>\n\n\t\t<div class=\"top-tabs_contents\">\n\t\t\t<!-- @slot Контент вкладок, ожидает передачу компонентов TabContent -->\n\t\t\t<slot name=\"contents\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-tabs {\n\tbackground: var(--color-layout-front-1);\n\tborder-radius: 8px;\n\tborder: 1px solid var(--color-line-2-opacity);\n\tpadding: 0;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: stretch;\n}\n\n.top-tabs_header {\n\tpadding: 6px;\n\tmargin-left: auto;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tflex-wrap: wrap;\n}\n\n/* Содержимое вкладок */\n.top-tabs_contents {\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\twidth: 100%;\n\tmargin-top: -1px;\n}\n\n/* Состояние открытости вкладок */\n.top-tabs_tabInput:checked:nth-child(1) ~ .top-tabs_contents > .top-tabs_content:nth-child(1),\n.top-tabs_tabInput:checked:nth-child(3) ~ .top-tabs_contents > .top-tabs_content:nth-child(2),\n.top-tabs_tabInput:checked:nth-child(5) ~ .top-tabs_contents > .top-tabs_content:nth-child(3),\n.top-tabs_tabInput:checked:nth-child(7) ~ .top-tabs_contents > .top-tabs_content:nth-child(4),\n.top-tabs_tabInput:checked:nth-child(9) ~ .top-tabs_contents > .top-tabs_content:nth-child(5),\n.top-tabs_tabInput:checked:nth-child(11) ~ .top-tabs_contents > .top-tabs_content:nth-child(6) {\n\tdisplay: block;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { PropsTab } from './types';\n\ndefineProps<PropsTab>();\n</script>\n\n<template>\n\t<input\n\t\ttype=\"radio\"\n\t\tclass=\"top-tabs_tabInput top-unvisible\"\n\t\t:id=\"tabsId + name\"\n\t\t:name=\"tabsId\"\n\t\t:value=\"name\"\n\t\t:checked=\"active\"\n\t\t:disabled=\"disabled\"\n\t/>\n\n\t<label\n\t\t:class=\"{\n\t\t\t'top-tabs_tabLabel': true,\n\t\t\t'top-forms-focusable': true,\n\t\t\t'top-disabled': disabled,\n\t\t}\"\n\t\t:for=\"tabsId + name\"\n\t>\n\t\t<slot></slot>\n\t</label>\n</template>\n\n<style>\n.top-tabs_tabLabel {\n\tcolor: var(--color-text-1);\n\tcursor: pointer;\n\tborder-bottom: 2px solid transparent;\n\tpadding: 14px 20px;\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.top-tabs_tabLabel:hover {\n\tborder-color: var(--color-line-2);\n}\n\n.top-tabs_tabInput:checked + .top-tabs_tabLabel {\n\tborder-color: var(--color-line-primary-1);\n\tcolor: var(--color-text-primary);\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { PropsContent } from './types';\n\ndefineProps<PropsContent>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabs_content': true,\n\t\t}\"\n\t\t:data-tabs-name=\"name\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style>\n.top-tabs_content {\n\tpadding: 14px;\n\toverflow: auto;\n\tdisplay: none;\n}\n</style>\n"],"names":["openBlock","createElementBlock","_hoisted_1$2","renderSlot","_ctx","_hoisted_2$1","createCommentVNode","name","tabsId","active","disabled","normalizeClass","_hoisted_2","_hoisted_1"],"mappings":";;;;;;;;;;;;;;;;;sBAOCA,EAAA,GAAAC,EAAA,OAAAC,GAAA;AAAA,MAiBMC,EAAAC,EAAA,QAAA,SAAA;AAAA,MAXuBA,EAAA,OAAA,UAAAJ,EAAA,GAAAC,EAAA,OAAAI,GAAA;AAAA,QAKtBF,EAAAC,EAAA,QAAA,QAAA;AAAA,MADsB,CAAA,KAAAE,EAAA,IAAA,EAAA;AAAA;QAMtBH,EAAAC,EAAA,QAAA,UAAA;AAAA,MADwB,CAAA;AAAA;;;;;;;;;;;;;;QCP7B,MAAA;AAAA,QAPI,OAAA;AAAA,QACC,IAAAA,EAAA,SAAAA,EAAA;AAAA,QACQG,MAAAA,EAAAA;AAAAA,QACPC,OAAAA,EAAAA;AAAAA,QACCD,SAAAA,EAAAA;AAAAA,QACEE,UAAAA,EAAAA;AAAAA,MACCC,GAAAA,MAAAA,GAAAA,CAAAA;AAAAA;QAYJ,OAAAC,EAAA;AAAA,UARD,qBAAA;AAAA;;QAAqFD,CAAAA;AAAAA;MAK5EH,GAAAA;AAAAA;MAEF,GAAA,IAAAK,CAAA;AAAA;;;;;;;;;MCXR,OAAAD,EAAA;AAAA,QANG,oBAAA;AAAA;MAEP,kBAAAP,EAAA;AAAA,IACgBG,GAAAA;AAAAA;IAEJ,GAAA,GAAAM,CAAA;AAAA;;"}
@@ -1,2 +1,2 @@
1
- define(["require","exports","vue","../.chunks/forms-BwGakScF.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"})});
1
+ define(["require","exports","vue","../.chunks/forms-CgtkdwgA.amd","../utils/route.amd","../.chunks/store-YRW59xEF.amd","../.chunks/listItem.vue_vue_type_script_setup_true_lang-CT-EXxJj.amd","../.chunks/widgetInput.vue_vue_type_style_index_0_lang-Cce9ZdtW.amd","../utils/system.amd","../require/css.amd!../assets/tabsView.css"],(function(J,h,e,m,f,g,_,G,L){"use strict";if(typeof e>"u")var e=window.Vue;const y=(o,n)=>`top:${String(o)}:${n}`,b={loadLocalStorge:(o,n)=>{if(!n.$id)return;const t=y(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=y(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(),E=(o,n)=>{const t=g.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";b.loadLocalStorge(a,t),b.addSaverLocalStorge(a,t)}if(t.$id){const a=i=>{n.value=f.getHash(t.$id)};k.add(a)}return t},S=()=>g.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=S(),a=e.computed(()=>n.name&&t.$id?f.genHash(t.$id,n.name):n.href),i=e.computed(()=>t.showMenuInPopup?_._sfc_main$2: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),T=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=S(),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,C;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:((C=(N=s.children).default)==null?void 0:C.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 T(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 w;return e.onMounted(()=>{w=new ResizeObserver(()=>{p.value.parentElement.style.setProperty("--top-tabsView-contents-offset-top",p.value.offsetHeight+"px")}),w.observe(p.value)}),e.onUnmounted(()=>{w.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(_._sfc_main),{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=E(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,{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=S();return(t,a)=>e.unref(n).showMenuInPopup?(e.openBlock(),e.createBlock(e.unref(_._sfc_main$2),{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))}});h.TopTabsView=j,h.TopTabsViewMenuItem=v,h.TopTabsViewMenuTitle=W,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})}));
2
2
  //# sourceMappingURL=tabsView.amd.js.map
@@ -1 +1 @@
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';\r\nimport type { Store } from './store';\r\n\r\n/**\r\n * Сгенерировать имя для сохранения данных в localStorage\r\n * @param stateName - имя свойства состояния\r\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\r\n */\r\nconst genStorageKey = <T extends Store>(stateName: keyof T, stateKey: string): string => {\r\n\tconst stateNameString = String(stateName);\r\n\r\n\treturn `top:${stateNameString}:${stateKey}`;\r\n};\r\n\r\n/**\r\n * Загрузить состояние\r\n * @param stateName - имя свойства состояния\r\n * @param store\r\n */\r\nconst loadLocalStorge = <T extends Store>(stateName: keyof T, store: T) => {\r\n\t// если Store.key не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!store.$id) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, store.$id);\r\n\r\n\ttry {\r\n\t\tconst localStorageValue: typeof store[keyof typeof store] = JSON.parse(localStorage.getItem(localStorageKey) as string);\r\n\r\n\t\tif (typeof localStorageValue === typeof store[stateName]) {\r\n\t\t\tstore[stateName] = localStorageValue;\r\n\t\t}\r\n\t} catch (e) {\r\n\t\tconsole.warn(new Error(`В localStorage[${localStorageKey}] не корректный json`));\r\n\t}\r\n};\r\n\r\n/**\r\n * Добавить автосохранение состояние при его изменении\r\n * @param stateName - имя свойства состояния\r\n * @param store\r\n */\r\nconst addSaverLocalStorge = <T extends Store>(stateName: keyof T, store: T) => {\r\n\t// если store.$id не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!store.$id) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, store.$id);\r\n\r\n\twatch(() => store[stateName], () => {\r\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(store[stateName]));\r\n\t}, { immediate: true });\r\n};\r\n\r\nexport default {\r\n\tloadLocalStorge,\r\n\taddSaverLocalStorge,\r\n};","import type { InjectionKey, ModelRef } from 'vue';\r\nimport { computed, ref } from 'vue';\r\nimport Core from '@/core/core/core';\r\nimport { defineStore, useStore } from '@/core/utils/store';\r\nimport StoreLocalStorage from '@/core/utils/store/localStorage';\r\nimport type { Props, Store } from './tabsView';\r\nimport { getHash } from '@/core/utils/route';\r\n\r\nconst popstateCallbacks = new Set<(e: PopStateEvent) => void>();\r\n\r\naddEventListener('popstate', (e) => {\r\n\tpopstateCallbacks.forEach(popstateCallback => popstateCallback(e));\r\n});\r\n\r\nexport const injectionKey = Symbol() as InjectionKey<Store>;\r\n\r\n/**\r\n * Инициировать Store компонента\r\n */\r\nexport const defineTabsStore = (props: Props, model: ModelRef<string | undefined>) => {\r\n\tconst store = defineStore(injectionKey, () => {\r\n\t\tconst showMenuInPopup = computed(() => props.showMenuInPopup ?? Core.state.isMobile);\r\n\t\tconst pageMod = computed(() => props.pageMod);\r\n\t\tconst isShort = ref(false);\r\n\r\n\t\tconst component = ref(undefined);\r\n\t\tconst scrollable = ref(true);\r\n\r\n\t\treturn {\r\n\t\t\tshowMenuInPopup,\r\n\t\t\tpageMod,\r\n\t\t\tisShort,\r\n\t\t\tactiveItemName: model,\r\n\t\t\tcomponent,\r\n\t\t\tscrollable,\r\n\t\t};\r\n\t}, props.idState);\r\n\r\n\tif (props.isShortable) {\r\n\t\tconst stateName = 'isShort';\r\n\r\n\t\tStoreLocalStorage.loadLocalStorge(stateName, store);\r\n\t\tStoreLocalStorage.addSaverLocalStorge(stateName, store);\r\n\t}\r\n\r\n\tif (store.$id) {\r\n\t\tconst popstateCallback = (e: PopStateEvent) => {\r\n\t\t\tmodel.value = getHash(store.$id!);\r\n\t\t};\r\n\r\n\t\tpopstateCallbacks.add(popstateCallback);\r\n\t}\r\n\r\n\treturn store;\r\n};\r\n\r\n/**\r\n * Получить Store компонента\r\n */\r\nexport const useTabsStore = () => useStore(injectionKey);\r\n","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport { genHash } from '@/core/utils/route';\r\nimport { TopPopupListItem } from '@/components/popup/popup';\r\nimport { useTabsStore } from './store';\r\nimport type { PropsMenuItem } from './tabsView';\r\n\r\nconst props = withDefaults(defineProps<PropsMenuItem>(), {\r\n\tscrollable: true,\r\n\tcomponent: undefined,\r\n});\r\n\r\nconst store = useTabsStore();\r\n\r\nconst href = computed(() => {\r\n\t// это внутренняя хеш навигация, ссылка на вкладку\r\n\tif (props.name && store.$id) {\r\n\t\treturn genHash(store.$id, props.name);\r\n\t}\r\n\r\n\treturn props.href;\r\n});\r\n\r\nconst tagName = computed(() => {\r\n\tif (store.showMenuInPopup) {\r\n\t\treturn TopPopupListItem;\r\n\t}\r\n\r\n\treturn href ? 'a' : 'button';\r\n});\r\n\r\n/**\r\n * Клик по элементу меню\r\n */\r\nconst onClick = (e: MouseEvent) => {\r\n\t// это внутренняя хеш навигация, ссылка на вкладку\r\n\tif (!props.href && href.value) {\r\n\t\te.preventDefault();\r\n\t}\r\n\r\n\tif (props.name) {\r\n\t\tstore.activeItemName = props.name;\r\n\t}\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<component\r\n\t\t:is=\"tagName\"\r\n\t\ttarget=\"_self\"\r\n\t\t:class=\"{\r\n\t\t\t['top-tabsView_menuItem']: !store.showMenuInPopup,\r\n\t\t\t['top-active']: name && store.activeItemName === name,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t\t['top-spa-disabled']: true,\r\n\t\t}\"\r\n\t\t:href=\"href\"\r\n\t\t:data-top-icon=\"icon || undefined\"\r\n\t\t:disabled=\"disabled || undefined\"\r\n\t\t@click=\"onClick\"\r\n\t>\r\n\t\t<slot v-if=\"store.showMenuInPopup\"></slot>\r\n\r\n\t\t<span\r\n\t\t\tv-else-if=\"$slots.default && !store.isShort\"\r\n\t\t\tclass=\"top-ellipsis\"\r\n\t\t>\r\n\t\t\t<slot></slot>\r\n\t\t</span>\r\n\t</component>\r\n</template>\r\n\r\n<style>\r\n.top-tabsView_menuItem {\r\n\t--top-icon-color: var(--color-text-2);\r\n\t--top-icon-width: calc(var(--top-icon-size));\r\n\r\n\tcursor: pointer;\r\n\tbox-sizing: border-box;\r\n\r\n\tborder: none;\r\n\tborder-radius: var(--top-radius-2);\r\n\tpadding: var(--top-padding-2);\r\n\tbackground: transparent;\r\n\theight: 40px;\r\n\r\n\tcolor: var(--color-text-1);\r\n\ttext-decoration: none;\r\n\twhite-space: nowrap;\r\n\r\n\tdisplay: flex;\r\n\tgap: var(--top-gap-2);\r\n\talign-items: center;\r\n\tjustify-content: flex-start;\r\n\ttransition: background var(--transition);\r\n}\r\n\r\n.top-tabsView_menuItem:hover {\r\n\t--top-icon-color: var(--color-text-1);\r\n\r\n\tbackground: var(--color-bg-shading-1);\r\n\ttext-decoration: none;\r\n}\r\n\r\n.top-tabsView_menuItem.top-active {\r\n\t--top-icon-color: inherit;\r\n\r\n\tbackground: var(--color-layout-front-1);\r\n\tcolor: inherit;\r\n}\r\n\r\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\r\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\r\n\topacity: unset;\r\n\tfilter: unset;\r\n}\r\n\r\n.top-tabsView_menuItem.top-disabled {\r\n\t--top-icon-color: var(--color-text-4);\r\n\r\n\tcolor: var(--color-text-4);\r\n}\r\n</style>\r\n","// TODO: Эту функцию можно вынести в глобальный utils\r\n\r\nimport { sleepWhile } from '@/core/utils/system';\r\n\r\n/**\r\n * Проверка нахождения компонента в состояние загрузки\r\n * @param component\r\n */\r\nexport const checkComponentIsLoading = (component: any) => {\r\n\treturn component?.name === 'AsyncComponentWrapper' && !component?.__asyncResolved;\r\n};\r\n\r\n/**\r\n * Презагрузить компонент\r\n *\r\n * Некоторое время ожидает загрузку компонента, прежде чем завершит работу\r\n */\r\nexport const preResolveComponent = async (component: any, condition: Function) => {\r\n\tif (component?.name !== 'AsyncComponentWrapper') return;\r\n\tif (component?.__asyncResolved) return;\r\n\r\n\tcomponent.__asyncLoader();\r\n\r\n\tawait sleepWhile(() => {\r\n\t\treturn condition() && checkComponentIsLoading(component);\r\n\t}, 200);\r\n};\r\n","<script setup lang=\"ts\">\r\nimport type { Ref, VNode } from 'vue';\r\nimport { markRaw, onMounted, onUnmounted, ref, useSlots, watch } from 'vue';\r\nimport { TopPopup } from '../../popup/popup';\r\nimport { getHash, setHash } from '@/core/utils/route';\r\n\r\nimport type { MenuItem, PropsMenu, PropsMenuItem } from './tabsView';\r\nimport { useTabsStore } from './store';\r\nimport TabsViewMenuItem from './menuItem.vue';\r\nimport { preResolveComponent } from './utils';\r\n\r\ndefineProps<PropsMenu>();\r\n\r\nconst isLoading = defineModel('isLoading');\r\n\r\nconst store = useTabsStore();\r\n\r\nconst slots = useSlots();\r\n\r\n// словарь используется для оптимизации получения нужного menuItem\r\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\r\n\r\n// заполнить словарь с menuItem, по элементам в slot default\r\nconst setMenuItemByName = () => {\r\n\tif (!slots.default) return;\r\n\r\n\tconst component: any = slots.default().find(item => item.key === '_menu');\r\n\tif (!component) return;\r\n\r\n\tsetMenuItemByNameFromItems(component.children);\r\n};\r\n\r\n// заполнить словарь с menuItem, по элементам\r\nconst setMenuItemByNameFromItems = (menuItems: VNode[]) => {\r\n\tmenuItems.forEach((subComponent: any) => {\r\n\t\t// это не компонент элемента меню\r\n\t\tif (subComponent.type.__name && subComponent.type.__name !== TabsViewMenuItem.__name) return;\r\n\r\n\t\t// это не компонент, например template\r\n\t\tif (!subComponent.type.__name && typeof subComponent.children === 'object') {\r\n\t\t\tsetMenuItemByNameFromItems(subComponent.children);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!subComponent.props?.name || subComponent.props?.disabled) return;\r\n\r\n\t\tconst menuItem: MenuItem = {\r\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\r\n\t\t\ticon: subComponent.props.icon,\r\n\t\t\tcomponent: subComponent.props.component ? markRaw(subComponent.props.component) : TabsViewMenuItem.props.component.default,\r\n\t\t\tscrollable: subComponent.props.scrollable ?? TabsViewMenuItem.props.scrollable.default,\r\n\t\t};\r\n\r\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\r\n\t});\r\n};\r\n\r\n/**\r\n * activeMenuItem нужен:\r\n * - для вывода текста активной вкладки в меню с popup\r\n * - для вывода компонента активной вкладки (store.component)\r\n * - для установки store.scrollable\r\n */\r\nconst activeMenuItem: Ref<MenuItem | null> = ref(null);\r\n\r\n/**\r\n * Кол-во изменений активной вкладки\r\n */\r\nlet countChanged = 0;\r\n\r\n/**\r\n * Смена активной вкладки\r\n *\r\n * TODO: смена slot, например смена языка, требует повторного выполнения setMenuItemByName()\r\n */\r\nwatch(\r\n\t() => store.activeItemName,\r\n\tasync () => {\r\n\t\tconst numberChanged = ++countChanged; // порядковый номер текущего изменения\r\n\r\n\t\tif (menuItemByName.size === 0) {\r\n\t\t\tsetMenuItemByName();\r\n\t\t}\r\n\r\n\t\tif (menuItemByName.size === 0) {\r\n\t\t\tstore.activeItemName = '';\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tactiveMenuItem.value = menuItemByName.get(store.activeItemName) ?? null;\r\n\r\n\t\t// элемент не найден, установить из хеша страницы\r\n\t\tif (!activeMenuItem.value && store.$id) {\r\n\t\t\tconst activeItemName = getHash(store.$id);\r\n\r\n\t\t\tactiveMenuItem.value = menuItemByName.get(activeItemName) ?? null;\r\n\r\n\t\t\tif (activeMenuItem.value) {\r\n\t\t\t\tstore.activeItemName = activeItemName;\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// элемент не найден, установить первый доступный\r\n\t\tif (!activeMenuItem.value) {\r\n\t\t\tstore.activeItemName = menuItemByName.keys().next().value!;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// запрошена смена на уже активный элемент\r\n\t\tif (activeMenuItem.value.component === store.component) {\r\n\t\t\tisLoading.value = false;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (store.$id) setHash(store.$id, store.activeItemName, false);\r\n\r\n\t\t// флаг загрузки будет сброшен при инициализации компонента\r\n\t\tisLoading.value = true;\r\n\r\n\t\t/**\r\n\t\t * Презагрузить компонент\r\n\t\t *\r\n\t\t * Нужно для того, чтобы минимизировать скачки интерфейса при ожидании загрузки асинхронного компонента\r\n\t\t */\r\n\t\tawait preResolveComponent(activeMenuItem.value.component, () => numberChanged === countChanged);\r\n\r\n\t\t// влкадка была сменена еще раз во время sleepWhile\r\n\t\tif (numberChanged !== countChanged) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstore.scrollable = activeMenuItem.value.scrollable;\r\n\t\tstore.component = activeMenuItem.value.component;\r\n\r\n\t\tif (activeMenuItem.value && !store.component) {\r\n\t\t\tconsole.warn(`Компонент вкладки ${store.activeItemName} не найден. Добавьте props.component для пункта меню ${store.activeItemName}.`);\r\n\t\t}\r\n\t},\r\n\t{ immediate: true },\r\n);\r\n\r\nconst elRef = ref();\r\nlet resizeObserver: ResizeObserver;\r\n\r\nonMounted(() => {\r\n\tresizeObserver = new ResizeObserver(() => {\r\n\t\telRef.value.parentElement.style.setProperty('--top-tabsView-contents-offset-top', elRef.value.offsetHeight + 'px');\r\n\t});\r\n\r\n\tresizeObserver.observe(elRef.value);\r\n});\r\n\r\nonUnmounted(() => {\r\n\tresizeObserver.disconnect();\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\tref=\"elRef\"\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menu': true,\r\n\t\t\t'top-tabsView_menu-inPopup_0': !store.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-inPopup_1': store.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-short': store.isShort && !store.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<!-- Спрятать меню под кнопку в popup -->\r\n\t\t<TopPopup v-if=\"store.showMenuInPopup\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\r\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\r\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\r\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\r\n\t\t\t\t</div>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</template>\r\n\t\t</TopPopup>\r\n\r\n\t\t<!-- Отобразить меню на странице -->\r\n\t\t<template v-else>\r\n\t\t\t<div class=\"top-tabsView_menuList\">\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div\r\n\t\t\t\tv-if=\"isShortable\"\r\n\t\t\t\tclass=\"top-tabsView_menuFooter\"\r\n\t\t\t>\r\n\t\t\t\t<TabsViewMenuItem\r\n\t\t\t\t\tv-if=\"isShortable\"\r\n\t\t\t\t\t:icon=\"store.isShort ? '' : ''\"\r\n\t\t\t\t\t@click=\"store.isShort = !store.isShort\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ store.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\r\n\t\t\t\t</TabsViewMenuItem>\r\n\t\t\t</div>\r\n\t\t</template>\r\n\t</div>\r\n</template>\r\n\r\n<style>\r\n/* режим отображение табов в основной области документа */\r\n.top-tabsView-pageMod .top-tabsView_menu {\r\n\tbox-sizing: border-box;\r\n\tposition: sticky;\r\n\ttop: var(--top-tabsView-top);\r\n\tz-index: 10;\r\n}\r\n\r\n/* режим отображение табов в основной области документа без popup */\r\n.top-tabsView-pageMod .top-tabsView_menu-inPopup_0 {\r\n\theight: calc(var(--100vh) - var(--top-tabsView-top));\r\n}\r\n\r\n/* стантартный режим */\r\n.top-tabsView_menu-inPopup_0 {\r\n\tbox-sizing: border-box;\r\n\twidth: var(--top-tabsView-menu-width);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: space-between;\r\n\tflex-shrink: 0;\r\n}\r\n\r\n/* режим вывода в popup */\r\n.top-tabsView_menu-inPopup_1 {\r\n\tborder-bottom: 1px solid var(--color-line-2-opacity);\r\n}\r\n\r\n.top-tabsView_menu-short {\r\n\twidth: auto;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener {\r\n\tdisplay: flex;\r\n\tjustify-content: flex-end;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\r\n\tbackground: var(--color-layer-1);\r\n}\r\n\r\n.top-tabsView_menuOpenerIcon { display: flex; }\r\n\r\n.top-tabsView_menuOpenerActiveItem {\r\n\t--top-forms-padding: 0px;\r\n\r\n\tbox-sizing: border-box;\r\n\tpadding: var(--top-padding-2);\r\n\tmax-width: calc(100% - var(--top-forms-base-height));\r\n\twhite-space: nowrap;\r\n\tflex-grow: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: var(--top-padding-2);\r\n}\r\n\r\n.top-tabsView_menuList,\r\n.top-tabsView_menuFooter {\r\n\tpadding: var(--top-padding-2);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tgap: var(--top-gap-2);\r\n}\r\n\r\n.top-tabsView_menuList {\r\n\toverflow-y: auto;\r\n}\r\n\r\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem {\r\n\t--top-icon-width: 100%;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { defineModel, onMounted, onUnmounted, ref, watch } from 'vue';\r\nimport Core from '@/core/core/core';\r\nimport { delHash } from '@/core/utils/route';\r\nimport type { Props } from './tabsView';\r\nimport { defineTabsStore } from './store';\r\nimport TabsViewMenu from './menu.vue';\r\nimport TopLoadbar from '@/components/forms/loadbar/loadbar.vue';\r\nimport { checkComponentIsLoading } from './utils';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tshowMenuInPopup: undefined,\r\n\tisShortable: false,\r\n});\r\n\r\nconst model = defineModel<string>();\r\n\r\nconst store = defineTabsStore(props, model);\r\n\r\nconst uid = Math.random();\r\n\r\nif (props.pageMod) Core.state.documentClassModificators.set(uid, 'top-hasTabsViewPageMod');\r\n\r\nonUnmounted(() => {\r\n\tif (props.pageMod) Core.state.documentClassModificators.delete(uid);\r\n\r\n\tif (store.$id) delHash(store.$id, store.activeItemName, true);\r\n});\r\n\r\nconst componentRef = ref();\r\nconst isLoading = ref(false);\r\n\r\nwatch([componentRef, () => store.component], () => {\r\n\tisLoading.value = checkComponentIsLoading(store.component);\r\n}, { immediate: true });\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView': true,\r\n\t\t\t'top-tabsView-pageMod': props.pageMod,\r\n\t\t\t'top-tabsView-inPopup': store.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<TabsViewMenu\r\n\t\t\t:isShortable=\"isShortable\"\r\n\t\t\tv-model:isLoading=\"isLoading\"\r\n\t\t>\r\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\r\n\t\t\t<slot name=\"menu\"></slot>\r\n\t\t</TabsViewMenu>\r\n\r\n\t\t<div\r\n\t\t\t:class=\"{\r\n\t\t\t\t'top-tabsView_contents': true,\r\n\t\t\t\t'top-tabsView_contents-isLoading': isLoading,\r\n\t\t\t\t'top-tabsView_contents-noScrollable': !store.scrollable,\r\n\t\t\t}\"\r\n\t\t>\r\n\t\t\t<TopLoadbar v-if=\"isLoading\"/>\r\n\r\n\t\t\t<keep-alive>\r\n\t\t\t\t<component\r\n\t\t\t\t\tref=\"componentRef\"\r\n\t\t\t\t\t:is=\"store.component\"\r\n\t\t\t\t/>\r\n\t\t\t</keep-alive>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style>\r\n:root {\r\n\t--top-tabsView-top: 0px;\r\n\t--top-tabsView-menu-width: 220px;\r\n\t--top-tabsView-contents-offset-top: 0px;\r\n}\r\n\r\n.top-tabsView {\r\n\tbackground: var(--color-layout-middle);\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n}\r\n\r\n.top-tabsView_contents {\r\n\tborder-radius: var(--top-radius-4);\r\n\tbackground: var(--color-layout-front-1);\r\n\tpadding: var(--top-padding-4);\r\n\tflex-grow: 1;\r\n\toverflow: auto;\r\n\tposition: relative;\r\n}\r\n\r\n.top-tabsView_contents-isLoading {\r\n\tpointer-events: none;\r\n}\r\n\r\n.top-tabsView_contents-noScrollable {\r\n\twidth: calc(100% - var(--top-tabsView-menu-width));\r\n\tpadding: 0;\r\n\toverflow: visible;\r\n}\r\n\r\n/* top-tabsView-inPopup */\r\n.top-tabsView-inPopup {\r\n\tbackground: var(--color-layout-front-1);\r\n\tflex-direction: column;\r\n}\r\n\r\n.top-tabsView-inPopup > .top-tabsView_contents {\r\n\tborder-radius: 0;\r\n}\r\n\r\n.top-tabsView-inPopup > .top-tabsView_contents-noScrollable {\r\n\twidth: auto;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\r\n</template>\r\n\r\n<style>\r\n.top-tabsView_menuDelimeter {\r\n\tpadding: var(--top-padding-1) 0;\r\n\tdisplay: flex;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:before {\r\n\tcontent: \"\";\r\n\theight: 2px;\r\n\tbackground: var(--color-line-2);\r\n\tflex-grow: 1;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:first-child,\r\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\r\n\tdisplay: none;\r\n}\r\n</style>\r\n","<script setup lang=\"ts\">\r\nimport { useTabsStore } from './store';\r\nimport type { PropsMenuTitle } from './tabsView';\r\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\r\nimport { TopPopupListItem } from '../../popup/popup';\r\n\r\ndefineProps<PropsMenuTitle>();\r\n\r\nconst store = useTabsStore();\r\n</script>\r\n\r\n<template>\r\n\t<TopPopupListItem\r\n\t\tv-if=\"store.showMenuInPopup\"\r\n\t\ttype=\"title\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</TopPopupListItem>\r\n\r\n\t<TabsViewMenuDelimeter v-else-if=\"store.isShort\"/>\r\n\r\n\t<div\r\n\t\tv-else\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menuTitle': true,\r\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\r\n\t\t}\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</div>\r\n</template>\r\n\r\n<style>\r\n.top-tabsView_menuTitle {\r\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\r\n\tfont-weight: 600;\r\n\tcolor: var(--color-text-1);\r\n}\r\n\r\n.top-tabsView_menuTitle-subtitle {\r\n\tpadding-top: var(--top-padding-1);\r\n\tfont-size: 12px;\r\n\tfont-weight: 400;\r\n\tcolor: var(--color-text-2);\r\n}\r\n</style>\r\n","import type { ComponentCustomProps } from 'vue';\r\n\r\nimport TabsView from './tabsView/tabsView.vue';\r\nimport TabsViewMenuItem from './tabsView/menuItem.vue';\r\nimport TabsViewMenuTitle from './tabsView/menuTitle.vue';\r\n\r\nexport const TopTabsView = TabsView as typeof TabsView & ComponentCustomProps;\r\nexport const TopTabsViewMenuItem = TabsViewMenuItem as typeof TabsViewMenuItem & ComponentCustomProps;\r\nexport const TopTabsViewMenuTitle = TabsViewMenuTitle as typeof TabsViewMenuTitle & ComponentCustomProps;\r\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","useTabsStore","href","tagName","popup_popup","onClick","checkComponentIsLoading","preResolveComponent","condition","slots","menuItemByName","item","setMenuItemByNameFromItems","menuItems","subComponent","_sfc_main$4","_a","_b","_d","_c","activeMenuItem","numberChanged","countChanged","setMenuItemByName","activeItemName","isLoading","utils_route","elRef","resizeObserver","uid","componentRef","_sfc_render","_ctx","_cache","TopTabsView","_sfc_main$2","TopTabsViewMenuItem","TopTabsViewMenuTitle","_sfc_main"],"mappings":"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"}
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"],"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"],"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","listItem_vue_vue_type_script_setup_true_lang","onClick","_ctx","name","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","_hoisted_1$1","_hoisted_4","_cache","$event","uid","componentRef","isShortable","_hoisted_1"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export * from '../components/tabsView/tabsView'
1
+ export * from '../src/components/tabsView/tabsView'
2
2
  export {}
@@ -1,9 +1,10 @@
1
1
  import { Core as U } from "../core/app.js";
2
- import { watch as k, computed as I, ref as f, defineComponent as M, createBlock as m, openBlock as l, resolveDynamicComponent as O, normalizeClass as w, unref as i, withCtx as b, renderSlot as v, createElementBlock as d, createCommentVNode as y, mergeModels as z, useModel as D, useSlots as G, onMounted as Q, onUnmounted as H, createElementVNode as S, toDisplayString as R, Fragment as X, createTextVNode as Y, markRaw as Z, createVNode as x, KeepAlive as ee } from "vue";
3
- import { C as $, v as te, t as oe } from "../.chunks/forms-BsuCen2-.es.js";
2
+ import { watch as k, computed as I, ref as f, defineComponent as M, createBlock as m, openBlock as l, resolveDynamicComponent as O, normalizeClass as y, unref as i, withCtx as b, renderSlot as v, createElementBlock as p, createCommentVNode as g, mergeModels as z, useModel as D, useSlots as G, onMounted as Q, onUnmounted as H, createElementVNode as S, toDisplayString as R, Fragment as X, createTextVNode as Y, markRaw as Z, createVNode as x, KeepAlive as ee } from "vue";
3
+ import { C as $, T as te, g as oe } from "../.chunks/forms-DarRVke_.es.js";
4
4
  import { getHash as K, genHash as ae, setHash as se, delHash as ne } from "../utils/route.js";
5
5
  import { u as ie, d as re } from "../.chunks/store-CX_6ZXhO.es.js";
6
- import { TopPopupListItem as A, TopPopup as le } from "../popup/popup.js";
6
+ import { b as A, _ as le } from "../.chunks/listItem.vue_vue_type_script_setup_true_lang-DzJ_pc-d.es.js";
7
+ /* empty css */
7
8
  import { sleepWhile as ue } from "../utils/system.js";
8
9
  const q = ["../assets/tabsView.css"].map((t) => import.meta.resolve(t));
9
10
  U.insertCSSLinkToPage(q, !0);
@@ -16,7 +17,7 @@ const j = (t, o) => `top:${String(t)}:${o}`, ce = (t, o) => {
16
17
  } catch {
17
18
  console.warn(new Error(`В localStorage[${e}] не корректный json`));
18
19
  }
19
- }, pe = (t, o) => {
20
+ }, de = (t, o) => {
20
21
  if (!o.$id) return;
21
22
  const e = j(t, o.$id);
22
23
  k(() => o[t], () => {
@@ -24,18 +25,18 @@ const j = (t, o) => `top:${String(t)}:${o}`, ce = (t, o) => {
24
25
  }, { immediate: !0 });
25
26
  }, E = {
26
27
  loadLocalStorge: ce,
27
- addSaverLocalStorge: pe
28
+ addSaverLocalStorge: de
28
29
  }, F = /* @__PURE__ */ new Set();
29
30
  addEventListener("popstate", (t) => {
30
31
  F.forEach((o) => o(t));
31
32
  });
32
- const W = Symbol(), de = (t, o) => {
33
+ const W = Symbol(), pe = (t, o) => {
33
34
  const e = re(W, () => {
34
- const a = I(() => t.showMenuInPopup ?? $.state.isMobile), u = I(() => t.pageMod), p = f(!1), n = f(void 0), r = f(!0);
35
+ const a = I(() => t.showMenuInPopup ?? $.state.isMobile), u = I(() => t.pageMod), d = f(!1), n = f(void 0), r = f(!0);
35
36
  return {
36
37
  showMenuInPopup: a,
37
38
  pageMod: u,
38
- isShort: p,
39
+ isShort: d,
39
40
  activeItemName: o,
40
41
  component: n,
41
42
  scrollable: r
@@ -55,7 +56,7 @@ const W = Symbol(), de = (t, o) => {
55
56
  }, L = () => ie(W), me = {
56
57
  key: 1,
57
58
  class: "top-ellipsis"
58
- }, g = /* @__PURE__ */ M({
59
+ }, w = /* @__PURE__ */ M({
59
60
  __name: "menuItem",
60
61
  props: {
61
62
  name: {},
@@ -66,12 +67,12 @@ const W = Symbol(), de = (t, o) => {
66
67
  scrollable: { type: Boolean, default: !0 }
67
68
  },
68
69
  setup(t) {
69
- const o = t, e = L(), a = I(() => o.name && e.$id ? ae(e.$id, o.name) : o.href), u = I(() => e.showMenuInPopup ? A : a ? "a" : "button"), p = (n) => {
70
+ const o = t, e = L(), a = I(() => o.name && e.$id ? ae(e.$id, o.name) : o.href), u = I(() => e.showMenuInPopup ? A : a ? "a" : "button"), d = (n) => {
70
71
  !o.href && a.value && n.preventDefault(), o.name && (e.activeItemName = o.name);
71
72
  };
72
73
  return (n, r) => (l(), m(O(u.value), {
73
74
  target: "_self",
74
- class: w({
75
+ class: y({
75
76
  "top-tabsView_menuItem": !i(e).showMenuInPopup,
76
77
  "top-active": n.name && i(e).activeItemName === n.name,
77
78
  "top-disabled": n.disabled,
@@ -80,12 +81,12 @@ const W = Symbol(), de = (t, o) => {
80
81
  href: a.value,
81
82
  "data-top-icon": n.icon || void 0,
82
83
  disabled: n.disabled || void 0,
83
- onClick: p
84
+ onClick: d
84
85
  }, {
85
86
  default: b(() => [
86
- i(e).showMenuInPopup ? v(n.$slots, "default", { key: 0 }) : n.$slots.default && !i(e).isShort ? (l(), d("span", me, [
87
+ i(e).showMenuInPopup ? v(n.$slots, "default", { key: 0 }) : n.$slots.default && !i(e).isShort ? (l(), p("span", me, [
87
88
  v(n.$slots, "default")
88
- ])) : y("", !0)
89
+ ])) : g("", !0)
89
90
  ]),
90
91
  _: 3
91
92
  }, 8, ["class", "href", "data-top-icon", "disabled"]));
@@ -106,14 +107,14 @@ const W = Symbol(), de = (t, o) => {
106
107
  }),
107
108
  emits: ["update:isLoading"],
108
109
  setup(t) {
109
- const o = D(t, "isLoading"), e = L(), a = G(), u = /* @__PURE__ */ new Map(), p = () => {
110
+ const o = D(t, "isLoading"), e = L(), a = G(), u = /* @__PURE__ */ new Map(), d = () => {
110
111
  if (!a.default) return;
111
- const c = a.default().find((s) => s.key === "_menu");
112
+ const c = a.default({}).find((s) => s.key === "_menu");
112
113
  c && n(c.children);
113
114
  }, n = (c) => {
114
115
  c.forEach((s) => {
115
116
  var P, T, B, C;
116
- if (s.type.__name && s.type.__name !== g.__name) return;
117
+ if (s.type.__name && s.type.__name !== w.__name) return;
117
118
  if (!s.type.__name && typeof s.children == "object") {
118
119
  n(s.children);
119
120
  return;
@@ -122,8 +123,8 @@ const W = Symbol(), de = (t, o) => {
122
123
  const N = {
123
124
  title: ((C = (B = s.children).default) == null ? void 0 : C.call(B)[0].children).trim(),
124
125
  icon: s.props.icon,
125
- component: s.props.component ? Z(s.props.component) : g.props.component.default,
126
- scrollable: s.props.scrollable ?? g.props.scrollable.default
126
+ component: s.props.component ? Z(s.props.component) : w.props.component.default,
127
+ scrollable: s.props.scrollable ?? w.props.scrollable.default
127
128
  };
128
129
  u.set(s.props.name, N);
129
130
  });
@@ -133,7 +134,7 @@ const W = Symbol(), de = (t, o) => {
133
134
  () => e.activeItemName,
134
135
  async () => {
135
136
  const c = ++_;
136
- if (u.size === 0 && p(), u.size === 0) {
137
+ if (u.size === 0 && d(), u.size === 0) {
137
138
  e.activeItemName = "";
138
139
  return;
139
140
  }
@@ -164,10 +165,10 @@ const W = Symbol(), de = (t, o) => {
164
165
  }), V.observe(h.value);
165
166
  }), H(() => {
166
167
  V.disconnect();
167
- }), (c, s) => (l(), d("div", {
168
+ }), (c, s) => (l(), p("div", {
168
169
  ref_key: "elRef",
169
170
  ref: h,
170
- class: w({
171
+ class: y({
171
172
  "top-tabsView_menu": !0,
172
173
  "top-tabsView_menu-inPopup_0": !i(e).showMenuInPopup,
173
174
  "top-tabsView_menu-inPopup_1": i(e).showMenuInPopup,
@@ -177,13 +178,13 @@ const W = Symbol(), de = (t, o) => {
177
178
  i(e).showMenuInPopup ? (l(), m(i(le), { key: 0 }, {
178
179
  opener: b(() => [
179
180
  S("div", ve, [
180
- r.value ? (l(), d("div", {
181
+ r.value ? (l(), p("div", {
181
182
  key: 0,
182
183
  class: "top-tabsView_menuOpenerActiveItem",
183
184
  "data-top-icon": r.value.icon
184
185
  }, [
185
186
  S("span", he, R(r.value.title), 1)
186
- ], 8, _e)) : y("", !0),
187
+ ], 8, _e)) : g("", !0),
187
188
  s[1] || (s[1] = S("div", {
188
189
  class: "top-tabsView_menuOpenerIcon",
189
190
  "data-top-icon": ""
@@ -194,12 +195,12 @@ const W = Symbol(), de = (t, o) => {
194
195
  v(c.$slots, "default")
195
196
  ]),
196
197
  _: 3
197
- })) : (l(), d(X, { key: 1 }, [
198
+ })) : (l(), p(X, { key: 1 }, [
198
199
  S("div", be, [
199
200
  v(c.$slots, "default")
200
201
  ]),
201
- c.isShortable ? (l(), d("div", Se, [
202
- c.isShortable ? (l(), m(g, {
202
+ c.isShortable ? (l(), p("div", Se, [
203
+ c.isShortable ? (l(), m(w, {
203
204
  key: 0,
204
205
  icon: i(e).isShort ? "" : "",
205
206
  onClick: s[0] || (s[0] = (N) => i(e).isShort = !i(e).isShort)
@@ -208,12 +209,12 @@ const W = Symbol(), de = (t, o) => {
208
209
  Y(R(i(e).isShort ? "" : "Свернуть"), 1)
209
210
  ]),
210
211
  _: 1
211
- }, 8, ["icon"])) : y("", !0)
212
- ])) : y("", !0)
212
+ }, 8, ["icon"])) : g("", !0)
213
+ ])) : g("", !0)
213
214
  ], 64))
214
215
  ], 2));
215
216
  }
216
- }), ye = /* @__PURE__ */ M({
217
+ }), Ce = /* @__PURE__ */ M({
217
218
  __name: "tabsView",
218
219
  props: /* @__PURE__ */ z({
219
220
  modelValue: {},
@@ -227,15 +228,15 @@ const W = Symbol(), de = (t, o) => {
227
228
  }),
228
229
  emits: ["update:modelValue"],
229
230
  setup(t) {
230
- const o = t, e = D(t, "modelValue"), a = de(o, e), u = Math.random();
231
+ const o = t, e = D(t, "modelValue"), a = pe(o, e), u = Math.random();
231
232
  o.pageMod && $.state.documentClassModificators.set(u, "top-hasTabsViewPageMod"), H(() => {
232
233
  o.pageMod && $.state.documentClassModificators.delete(u), a.$id && ne(a.$id, a.activeItemName, !0);
233
234
  });
234
- const p = f(), n = f(!1);
235
- return k([p, () => a.component], () => {
235
+ const d = f(), n = f(!1);
236
+ return k([d, () => a.component], () => {
236
237
  n.value = J(a.component);
237
- }, { immediate: !0 }), (r, _) => (l(), d("div", {
238
- class: w({
238
+ }, { immediate: !0 }), (r, _) => (l(), p("div", {
239
+ class: y({
239
240
  "top-tabsView": !0,
240
241
  "top-tabsView-pageMod": o.pageMod,
241
242
  "top-tabsView-inPopup": i(a).showMenuInPopup
@@ -252,27 +253,27 @@ const W = Symbol(), de = (t, o) => {
252
253
  _: 3
253
254
  }, 8, ["isShortable", "isLoading"]),
254
255
  S("div", {
255
- class: w({
256
+ class: y({
256
257
  "top-tabsView_contents": !0,
257
258
  "top-tabsView_contents-isLoading": n.value,
258
259
  "top-tabsView_contents-noScrollable": !i(a).scrollable
259
260
  })
260
261
  }, [
261
- n.value ? (l(), m(te, { key: 0 })) : y("", !0),
262
+ n.value ? (l(), m(te, { key: 0 })) : g("", !0),
262
263
  (l(), m(ee, null, [
263
264
  (l(), m(O(i(a).component), {
264
265
  ref_key: "componentRef",
265
- ref: p
266
+ ref: d
266
267
  }, null, 512))
267
268
  ], 1024))
268
269
  ], 2)
269
270
  ], 2));
270
271
  }
271
- }), we = {}, Ie = { class: "top-tabsView_menuDelimeter" };
272
- function Me(t, o) {
273
- return l(), d("div", Ie);
272
+ }), ye = {}, we = { class: "top-tabsView_menuDelimeter" };
273
+ function Ie(t, o) {
274
+ return l(), p("div", we);
274
275
  }
275
- const Ve = /* @__PURE__ */ oe(we, [["render", Me]]), $e = /* @__PURE__ */ M({
276
+ const Me = /* @__PURE__ */ oe(ye, [["render", Ie]]), Re = /* @__PURE__ */ M({
276
277
  __name: "menuTitle",
277
278
  props: {
278
279
  isSubtitle: { type: Boolean }
@@ -287,9 +288,9 @@ const Ve = /* @__PURE__ */ oe(we, [["render", Me]]), $e = /* @__PURE__ */ M({
287
288
  v(e.$slots, "default")
288
289
  ]),
289
290
  _: 3
290
- })) : i(o).isShort ? (l(), m(Ve, { key: 1 })) : (l(), d("div", {
291
+ })) : i(o).isShort ? (l(), m(Me, { key: 1 })) : (l(), p("div", {
291
292
  key: 2,
292
- class: w({
293
+ class: y({
293
294
  "top-tabsView_menuTitle": !0,
294
295
  "top-tabsView_menuTitle-subtitle": e.isSubtitle
295
296
  })
@@ -297,10 +298,10 @@ const Ve = /* @__PURE__ */ oe(we, [["render", Me]]), $e = /* @__PURE__ */ M({
297
298
  v(e.$slots, "default")
298
299
  ], 2));
299
300
  }
300
- }), Re = ye, Ee = g, Oe = $e;
301
+ });
301
302
  export {
302
- Re as TopTabsView,
303
- Ee as TopTabsViewMenuItem,
304
- Oe as TopTabsViewMenuTitle
303
+ Ce as TopTabsView,
304
+ w as TopTabsViewMenuItem,
305
+ Re as TopTabsViewMenuTitle
305
306
  };
306
307
  //# sourceMappingURL=tabsView.js.map