@topvisor/ui 1.5.0-updates.0 → 1.5.0-updates.1

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 (298) hide show
  1. package/.chunks/api-CawzY1Cw.amd.js +2 -0
  2. package/.chunks/api-CawzY1Cw.amd.js.map +1 -0
  3. package/.chunks/api-CawzY1Cw.esm.js +208 -0
  4. package/.chunks/api-CawzY1Cw.esm.js.map +1 -0
  5. package/.chunks/app-CCX-gNqz.amd.js +2 -0
  6. package/.chunks/app-CCX-gNqz.amd.js.map +1 -0
  7. package/.chunks/app-CCX-gNqz.esm.js +396 -0
  8. package/.chunks/app-CCX-gNqz.esm.js.map +1 -0
  9. package/.chunks/datepicker-BTkZOq7d.amd.js +2 -0
  10. package/.chunks/datepicker-BTkZOq7d.amd.js.map +1 -0
  11. package/.chunks/datepicker-BTkZOq7d.esm.js +38 -0
  12. package/.chunks/datepicker-BTkZOq7d.esm.js.map +1 -0
  13. package/.chunks/dialog-DeM4SApg.amd.js +2 -0
  14. package/.chunks/dialog-DeM4SApg.amd.js.map +1 -0
  15. package/.chunks/dialog-DeM4SApg.esm.js +117 -0
  16. package/.chunks/dialog-DeM4SApg.esm.js.map +1 -0
  17. package/.chunks/dialog_regionSelectorRegions-CYrmaDt3.amd.js +2 -0
  18. package/.chunks/dialog_regionSelectorRegions-CYrmaDt3.amd.js.map +1 -0
  19. package/.chunks/dialog_regionSelectorRegions-CYrmaDt3.esm.js +169 -0
  20. package/.chunks/dialog_regionSelectorRegions-CYrmaDt3.esm.js.map +1 -0
  21. package/.chunks/dialogs-CMrERMI7.amd.js +2 -0
  22. package/.chunks/dialogs-CMrERMI7.amd.js.map +1 -0
  23. package/.chunks/dialogs-CMrERMI7.esm.js +237 -0
  24. package/.chunks/dialogs-CMrERMI7.esm.js.map +1 -0
  25. package/.chunks/field-CjkpGeA7.amd.js +2 -0
  26. package/.chunks/field-CjkpGeA7.amd.js.map +1 -0
  27. package/.chunks/field-CjkpGeA7.esm.js +16 -0
  28. package/.chunks/field-CjkpGeA7.esm.js.map +1 -0
  29. package/.chunks/forms-CbUt-6Ff.amd.js +2 -0
  30. package/.chunks/forms-CbUt-6Ff.amd.js.map +1 -0
  31. package/.chunks/forms-CbUt-6Ff.esm.js +1991 -0
  32. package/.chunks/forms-CbUt-6Ff.esm.js.map +1 -0
  33. package/.chunks/formsExt-CrTmBhja.amd.js +2 -0
  34. package/.chunks/formsExt-CrTmBhja.amd.js.map +1 -0
  35. package/.chunks/formsExt-CrTmBhja.esm.js +807 -0
  36. package/.chunks/formsExt-CrTmBhja.esm.js.map +1 -0
  37. package/.chunks/lazy-CGswTOPj.amd.js +2 -0
  38. package/.chunks/lazy-CGswTOPj.amd.js.map +1 -0
  39. package/.chunks/lazy-CGswTOPj.esm.js +68 -0
  40. package/.chunks/lazy-CGswTOPj.esm.js.map +1 -0
  41. package/.chunks/mocker-CwZe-g4N.amd.js +2 -0
  42. package/.chunks/mocker-CwZe-g4N.amd.js.map +1 -0
  43. package/.chunks/mocker-CwZe-g4N.esm.js +45 -0
  44. package/.chunks/mocker-CwZe-g4N.esm.js.map +1 -0
  45. package/.chunks/notice-CslVdVNm.amd.js +4 -0
  46. package/.chunks/notice-CslVdVNm.amd.js.map +1 -0
  47. package/.chunks/notice-CslVdVNm.esm.js +191 -0
  48. package/.chunks/notice-CslVdVNm.esm.js.map +1 -0
  49. package/.chunks/popup-DrByVU-k.amd.js +2 -0
  50. package/.chunks/popup-DrByVU-k.amd.js.map +1 -0
  51. package/.chunks/popup-DrByVU-k.esm.js +444 -0
  52. package/.chunks/popup-DrByVU-k.esm.js.map +1 -0
  53. package/.chunks/popup-dNrN-eKi.amd.js +2 -0
  54. package/.chunks/popup-dNrN-eKi.amd.js.map +1 -0
  55. package/.chunks/popup-dNrN-eKi.esm.js +323 -0
  56. package/.chunks/popup-dNrN-eKi.esm.js.map +1 -0
  57. package/.chunks/punycode.es6-B-5kB2YI.amd.js +2 -0
  58. package/.chunks/{punycode.es6-CgGegfA_.es.js.map → punycode.es6-B-5kB2YI.amd.js.map} +1 -1
  59. package/.chunks/punycode.es6-B-5kB2YI.esm.js +105 -0
  60. package/.chunks/punycode.es6-B-5kB2YI.esm.js.map +1 -0
  61. package/.chunks/store-DuQpSSLL.amd.js +2 -0
  62. package/.chunks/{store-CX_6ZXhO.es.js.map → store-DuQpSSLL.amd.js.map} +1 -1
  63. package/.chunks/store-DuQpSSLL.esm.js +27 -0
  64. package/.chunks/store-DuQpSSLL.esm.js.map +1 -0
  65. package/.chunks/utils-BwiXsV0S.amd.js +2 -0
  66. package/.chunks/utils-BwiXsV0S.amd.js.map +1 -0
  67. package/.chunks/utils-BwiXsV0S.esm.js +43 -0
  68. package/.chunks/utils-BwiXsV0S.esm.js.map +1 -0
  69. package/.chunks/utils-Dd0MZgyw.amd.js +2 -0
  70. package/.chunks/utils-Dd0MZgyw.amd.js.map +1 -0
  71. package/.chunks/utils-Dd0MZgyw.esm.js +287 -0
  72. package/.chunks/utils-Dd0MZgyw.esm.js.map +1 -0
  73. package/.chunks/worker-Db8YrEHo.amd.js +2 -0
  74. package/.chunks/worker-Db8YrEHo.amd.js.map +1 -0
  75. package/.chunks/worker-Db8YrEHo.esm.js +100 -0
  76. package/.chunks/worker-Db8YrEHo.esm.js.map +1 -0
  77. package/api/additional.amd.js +2 -2
  78. package/api/additional.amd.js.map +1 -1
  79. package/api/additional.js +70 -66
  80. package/api/additional.js.map +1 -1
  81. package/api/index.amd.js +2 -2
  82. package/api/index.amd.js.map +1 -1
  83. package/api/index.js +3 -285
  84. package/assets/charts.css +1 -1
  85. package/assets/core.css +1 -1
  86. package/assets/dialog_regionSelectorRegions.css +1 -1
  87. package/assets/extra.css +1 -1
  88. package/assets/forms.css +1 -1
  89. package/assets/formsExt.css +1 -0
  90. package/assets/layout.css +1 -1
  91. package/assets/notice.css +1 -1
  92. package/assets/popup.css +1 -0
  93. package/assets/project.css +1 -1
  94. package/assets/tabs.css +1 -1
  95. package/assets/tabsView.css +1 -1
  96. package/assets/themes/dark-th.css +1 -1
  97. package/assets/themes/dark.css +1 -1
  98. package/assets/themes/light.css +1 -1
  99. package/autoload-css-manifest.amd.json +79 -0
  100. package/autoload-css-manifest.json +90 -0
  101. package/charts/charts.amd.js +2 -2
  102. package/charts/charts.amd.js.map +1 -1
  103. package/charts/charts.js +146 -174
  104. package/charts/charts.js.map +1 -1
  105. package/core/app.amd.js +2 -2
  106. package/core/app.amd.js.map +1 -1
  107. package/core/app.js +5 -213
  108. package/dialog/dialog.amd.js +2 -2
  109. package/dialog/dialog.amd.js.map +1 -1
  110. package/dialog/dialog.js +4 -60
  111. package/extra/extra.amd.js +2 -2
  112. package/extra/extra.amd.js.map +1 -1
  113. package/extra/extra.js +73 -69
  114. package/extra/extra.js.map +1 -1
  115. package/forms/forms.amd.js +2 -2
  116. package/forms/forms.amd.js.map +1 -1
  117. package/forms/forms.js +2 -19
  118. package/forms/helpers.amd.js +2 -2
  119. package/forms/helpers.amd.js.map +1 -1
  120. package/forms/helpers.js +0 -2
  121. package/formsExt/formsExt.amd.js +2 -2
  122. package/formsExt/formsExt.amd.js.map +1 -1
  123. package/formsExt/formsExt.js +2 -373
  124. package/icomoon/demo-files/demo.amd.js +2 -0
  125. package/icomoon/demo-files/demo.amd.js.map +1 -0
  126. package/icomoon/demo.amd.js +2 -0
  127. package/icomoon/demo.amd.js.map +1 -0
  128. package/layout/layout.amd.js +2 -2
  129. package/layout/layout.amd.js.map +1 -1
  130. package/layout/layout.js +41 -57
  131. package/layout/layout.js.map +1 -1
  132. package/package.json +1 -1
  133. package/popup/popup.amd.js +2 -2
  134. package/popup/popup.amd.js.map +1 -1
  135. package/popup/popup.js +2 -282
  136. package/popup/worker.amd.js +2 -2
  137. package/popup/worker.amd.js.map +1 -1
  138. package/popup/worker.js +2 -144
  139. package/project/project.amd.js +2 -2
  140. package/project/project.amd.js.map +1 -1
  141. package/project/project.js +1684 -1642
  142. package/project/project.js.map +1 -1
  143. package/tabs/tabs.amd.js +2 -2
  144. package/tabs/tabs.amd.js.map +1 -1
  145. package/tabs/tabs.js +63 -77
  146. package/tabs/tabs.js.map +1 -1
  147. package/tabsView/tabsView.amd.js +2 -2
  148. package/tabsView/tabsView.amd.js.map +1 -1
  149. package/tabsView/tabsView.js +245 -288
  150. package/tabsView/tabsView.js.map +1 -1
  151. package/utils/check.amd.js +2 -2
  152. package/utils/check.amd.js.map +1 -1
  153. package/utils/check.js +15 -19
  154. package/utils/check.js.map +1 -1
  155. package/utils/clipboard.amd.js +6 -6
  156. package/utils/clipboard.amd.js.map +1 -1
  157. package/utils/clipboard.js +26 -31
  158. package/utils/clipboard.js.map +1 -1
  159. package/utils/date.amd.js +2 -2
  160. package/utils/date.amd.js.map +1 -1
  161. package/utils/date.js +2 -12
  162. package/utils/device.amd.js +2 -2
  163. package/utils/device.amd.js.map +1 -1
  164. package/utils/device.js +2 -15
  165. package/utils/dom.amd.js +2 -2
  166. package/utils/dom.amd.js.map +1 -1
  167. package/utils/dom.js +53 -67
  168. package/utils/dom.js.map +1 -1
  169. package/utils/image.amd.js +3 -3
  170. package/utils/image.amd.js.map +1 -1
  171. package/utils/image.js +12 -22
  172. package/utils/image.js.map +1 -1
  173. package/utils/keyboard.amd.js +2 -2
  174. package/utils/keyboard.amd.js.map +1 -1
  175. package/utils/keyboard.js +10 -11
  176. package/utils/keyboard.js.map +1 -1
  177. package/utils/lodash.amd.js +2 -2
  178. package/utils/lodash.amd.js.map +1 -1
  179. package/utils/lodash.js +2 -9
  180. package/utils/number.amd.js +2 -2
  181. package/utils/number.amd.js.map +1 -1
  182. package/utils/number.js +12 -12
  183. package/utils/number.js.map +1 -1
  184. package/utils/price.amd.js +2 -2
  185. package/utils/price.amd.js.map +1 -1
  186. package/utils/price.js +14 -9
  187. package/utils/price.js.map +1 -1
  188. package/utils/route.amd.js +2 -2
  189. package/utils/route.amd.js.map +1 -1
  190. package/utils/route.js +33 -37
  191. package/utils/route.js.map +1 -1
  192. package/utils/scroll.amd.js +2 -2
  193. package/utils/scroll.amd.js.map +1 -1
  194. package/utils/scroll.js +39 -43
  195. package/utils/scroll.js.map +1 -1
  196. package/utils/searchers.amd.js +2 -2
  197. package/utils/searchers.amd.js.map +1 -1
  198. package/utils/searchers.js +128 -133
  199. package/utils/searchers.js.map +1 -1
  200. package/utils/store.amd.js +2 -2
  201. package/utils/store.amd.js.map +1 -1
  202. package/utils/store.js +2 -7
  203. package/utils/string.amd.js +2 -2
  204. package/utils/string.amd.js.map +1 -1
  205. package/utils/string.js +120 -147
  206. package/utils/string.js.map +1 -1
  207. package/utils/system.amd.js +2 -2
  208. package/utils/system.amd.js.map +1 -1
  209. package/utils/system.js +25 -28
  210. package/utils/system.js.map +1 -1
  211. package/utils/url.amd.js +3 -3
  212. package/utils/url.amd.js.map +1 -1
  213. package/utils/url.js +36 -47
  214. package/utils/url.js.map +1 -1
  215. package/.chunks/core-Dgj_YGWh.es.js +0 -268
  216. package/.chunks/core-Dgj_YGWh.es.js.map +0 -1
  217. package/.chunks/core-DzDFXOdI.amd.js +0 -2
  218. package/.chunks/core-DzDFXOdI.amd.js.map +0 -1
  219. package/.chunks/datepicker-oa8ZwRhq.amd.js +0 -2
  220. package/.chunks/datepicker-oa8ZwRhq.amd.js.map +0 -1
  221. package/.chunks/datepicker-qToxk2nN.es.js +0 -41
  222. package/.chunks/datepicker-qToxk2nN.es.js.map +0 -1
  223. package/.chunks/dialog_regionSelectorRegions-CZ0tMVSq.amd.js +0 -2
  224. package/.chunks/dialog_regionSelectorRegions-CZ0tMVSq.amd.js.map +0 -1
  225. package/.chunks/dialog_regionSelectorRegions-qDW2Ejsv.es.js +0 -180
  226. package/.chunks/dialog_regionSelectorRegions-qDW2Ejsv.es.js.map +0 -1
  227. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-BBix_8WK.amd.js +0 -2
  228. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-BBix_8WK.amd.js.map +0 -1
  229. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-CJ97l1ST.es.js +0 -323
  230. package/.chunks/dialogs.vue_vue_type_script_setup_true_lang-CJ97l1ST.es.js.map +0 -1
  231. package/.chunks/field-Cvv0SRcJ.amd.js +0 -2
  232. package/.chunks/field-Cvv0SRcJ.amd.js.map +0 -1
  233. package/.chunks/field-CyyFzM-Y.es.js +0 -16
  234. package/.chunks/field-CyyFzM-Y.es.js.map +0 -1
  235. package/.chunks/forms-DDNzqU6o.amd.js +0 -3
  236. package/.chunks/forms-DDNzqU6o.amd.js.map +0 -1
  237. package/.chunks/forms-DtC-EKJL.es.js +0 -2053
  238. package/.chunks/forms-DtC-EKJL.es.js.map +0 -1
  239. package/.chunks/index-DLUtoTUg.amd.js +0 -2
  240. package/.chunks/index-DLUtoTUg.amd.js.map +0 -1
  241. package/.chunks/index-DkQWJkMc.es.js +0 -54
  242. package/.chunks/index-DkQWJkMc.es.js.map +0 -1
  243. package/.chunks/lazy-DDNqYkXn.amd.js +0 -2
  244. package/.chunks/lazy-DDNqYkXn.amd.js.map +0 -1
  245. package/.chunks/lazy-HKSyLh72.es.js +0 -75
  246. package/.chunks/lazy-HKSyLh72.es.js.map +0 -1
  247. package/.chunks/notice-BvQl911b.es.js +0 -191
  248. package/.chunks/notice-BvQl911b.es.js.map +0 -1
  249. package/.chunks/notice-CJ3WOTCM.amd.js +0 -4
  250. package/.chunks/notice-CJ3WOTCM.amd.js.map +0 -1
  251. package/.chunks/page.vue_vue_type_script_setup_true_lang-Dd5-B4Ss.es.js +0 -139
  252. package/.chunks/page.vue_vue_type_script_setup_true_lang-Dd5-B4Ss.es.js.map +0 -1
  253. package/.chunks/page.vue_vue_type_script_setup_true_lang-fl6-Ql4d.amd.js +0 -2
  254. package/.chunks/page.vue_vue_type_script_setup_true_lang-fl6-Ql4d.amd.js.map +0 -1
  255. package/.chunks/policy.vue_vue_type_style_index_0_lang-Bv3LwNDC.es.js +0 -519
  256. package/.chunks/policy.vue_vue_type_style_index_0_lang-Bv3LwNDC.es.js.map +0 -1
  257. package/.chunks/policy.vue_vue_type_style_index_0_lang-Da7rztT5.amd.js +0 -2
  258. package/.chunks/policy.vue_vue_type_style_index_0_lang-Da7rztT5.amd.js.map +0 -1
  259. package/.chunks/popup-OuDglAOF.es.js +0 -470
  260. package/.chunks/popup-OuDglAOF.es.js.map +0 -1
  261. package/.chunks/popup-yXIpyok3.amd.js +0 -2
  262. package/.chunks/popup-yXIpyok3.amd.js.map +0 -1
  263. package/.chunks/popupHint.vue_vue_type_style_index_0_lang-Bu_HvFoW.amd.js +0 -2
  264. package/.chunks/popupHint.vue_vue_type_style_index_0_lang-Bu_HvFoW.amd.js.map +0 -1
  265. package/.chunks/popupHint.vue_vue_type_style_index_0_lang-DAQIAxvu.es.js +0 -209
  266. package/.chunks/popupHint.vue_vue_type_style_index_0_lang-DAQIAxvu.es.js.map +0 -1
  267. package/.chunks/punycode.es6-CNOnFR2-.amd.js +0 -2
  268. package/.chunks/punycode.es6-CNOnFR2-.amd.js.map +0 -1
  269. package/.chunks/punycode.es6-CgGegfA_.es.js +0 -134
  270. package/.chunks/store-CX_6ZXhO.es.js +0 -29
  271. package/.chunks/store-YRW59xEF.amd.js +0 -2
  272. package/.chunks/store-YRW59xEF.amd.js.map +0 -1
  273. package/.chunks/utils-BNzP9anP.es.js +0 -78
  274. package/.chunks/utils-BNzP9anP.es.js.map +0 -1
  275. package/.chunks/utils-CWn_G7OO.amd.js +0 -2
  276. package/.chunks/utils-CWn_G7OO.amd.js.map +0 -1
  277. package/.chunks/utils-DIviuVEw.amd.js +0 -2
  278. package/.chunks/utils-DIviuVEw.amd.js.map +0 -1
  279. package/.chunks/utils-Dma85ehT.es.js +0 -288
  280. package/.chunks/utils-Dma85ehT.es.js.map +0 -1
  281. package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-CX_BOcVY.es.js +0 -39
  282. package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-CX_BOcVY.es.js.map +0 -1
  283. package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-CkOmb3VD.amd.js +0 -2
  284. package/.chunks/widgetInput.vue_vue_type_script_setup_true_lang-CkOmb3VD.amd.js.map +0 -1
  285. package/api/index.js.map +0 -1
  286. package/assets/policy.css +0 -1
  287. package/assets/popupHint.css +0 -1
  288. package/core/app.js.map +0 -1
  289. package/dialog/dialog.js.map +0 -1
  290. package/forms/forms.js.map +0 -1
  291. package/forms/helpers.js.map +0 -1
  292. package/formsExt/formsExt.js.map +0 -1
  293. package/popup/popup.js.map +0 -1
  294. package/popup/worker.js.map +0 -1
  295. package/utils/date.js.map +0 -1
  296. package/utils/device.js.map +0 -1
  297. package/utils/lodash.js.map +0 -1
  298. package/utils/store.js.map +0 -1
package/tabs/tabs.amd.js CHANGED
@@ -1,2 +1,2 @@
1
- define(["require","exports","vue","../require/css.amd!../assets/tabs.css"],(function(p,n,e){"use strict";if(typeof e>"u")var e=window.Vue;const o={class:e.normalizeClass({"top-tabs":!0})},l={key:0,class:"top-tabs_header"},d={class:"top-tabs_contents"},c=e.defineComponent({__name:"tabs",props:{id:{}},setup(t){return(a,s)=>(e.openBlock(),e.createElementBlock("div",o,[e.renderSlot(a.$slots,"buttons"),a.$slots.header?(e.openBlock(),e.createElementBlock("div",l,[e.renderSlot(a.$slots,"header")])):e.createCommentVNode("",!0),e.createElementVNode("div",d,[e.renderSlot(a.$slots,"contents")])]))}}),r=["id","name","value","checked","disabled"],i=["for"],u=e.defineComponent({__name:"tab",props:{tabsId:{},name:{},title:{},active:{type:Boolean},disabled:{type:Boolean}},setup(t){return(a,s)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("input",{type:"radio",class:"top-tabs_tabInput top-unvisible",id:t.tabsId+t.name,name:t.tabsId,value:t.name,checked:t.active,disabled:t.disabled},null,8,r),e.createElementVNode("label",{class:e.normalizeClass({"top-tabs_tabLabel":!0,"top-forms-focusable":!0,"top-disabled":t.disabled}),for:t.tabsId+t.name},[e.renderSlot(a.$slots,"default")],10,i)],64))}}),m=["data-tabs-name"],b=e.defineComponent({__name:"content",props:{name:{}},setup(t){return(a,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass({"top-tabs_content":!0}),"data-tabs-name":t.name},[e.renderSlot(a.$slots,"default")],8,m))}});n.TopTabs=c,n.TopTabsContent=b,n.TopTabsTab=u,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})}));
2
- //# sourceMappingURL=tabs.amd.js.map
1
+ define([`require`,`exports`,`vue`,`../require/css.amd!../assets/tabs.css`],function(e,t,n){"use strict";Object.defineProperty(t,`__esModule`,{value:!0}),t.TopTabsTab=t.TopTabsContent=t.TopTabs=void 0;var r={class:(0,n.normalizeClass)({"top-tabs":!0})},i={key:0,class:`top-tabs_header`},a={class:`top-tabs_contents`},o=(0,n.defineComponent)({__name:`tabs`,props:{id:{}},setup(e){return(e,t)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,r,[(0,n.renderSlot)(e.$slots,`buttons`),e.$slots.header?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,i,[(0,n.renderSlot)(e.$slots,`header`)])):(0,n.createCommentVNode)(``,!0),(0,n.createElementVNode)(`div`,a,[(0,n.renderSlot)(e.$slots,`contents`)])]))}}),s=[`id`,`name`,`value`,`checked`,`disabled`],c=[`for`],l=(0,n.defineComponent)({__name:`tab`,props:{tabsId:{},name:{},title:{},active:{type:Boolean},disabled:{type:Boolean}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(n.Fragment,null,[(0,n.createElementVNode)(`input`,{type:`radio`,class:`top-tabs_tabInput top-unvisible`,id:e.tabsId+e.name,name:e.tabsId,value:e.name,checked:e.active,disabled:e.disabled},null,8,s),(0,n.createElementVNode)(`label`,{class:(0,n.normalizeClass)({"top-tabs_tabLabel":!0,"top-forms-focusable":!0,"top-disabled":e.disabled}),for:e.tabsId+e.name},[(0,n.renderSlot)(t.$slots,`default`)],10,c)],64))}}),u=[`data-tabs-name`],d=(0,n.defineComponent)({__name:`content`,props:{name:{}},setup(e){return(t,r)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,{class:(0,n.normalizeClass)({"top-tabs_content":!0}),"data-tabs-name":e.name},[(0,n.renderSlot)(t.$slots,`default`)],8,u))}});t.TopTabs=o,t.TopTabsTab=l,t.TopTabsContent=d});
2
+ //# sourceMappingURL=tabs.amd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.amd.js","sources":["../../src/components/tabs/tabs/tabs.vue","../../src/components/tabs/tabs/tab.vue","../../src/components/tabs/tabs/content.vue"],"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":["vue","_ctx","_hoisted_2$1","__props","_hoisted_1$1","_hoisted_1"],"mappings":"gXAwBOA,EAAA,WAAAC,EAAA,OAAA,SAAA,EAXuBA,EAAA,OAAA,QAAAD,EAAA,UAAA,EAAAA,EAAA,mBAAA,MAAAE,EAAA,CAKtBF,EAAA,WAAAC,EAAA,OAAA,QAAA,CADsB,CAAA,GAAAD,EAAA,mBAAA,GAAA,EAAA,gCAMtBA,EAAA,WAAAC,EAAA,OAAA,UAAA,qWCbQ,KAAAE,EAAA,OACP,MAAAA,EAAA,KACC,QAAAA,EAAA,0BAEG,EAAA,KAAA,EAAAC,CAAA,iIAIgF,CAAA,qBAK5E,EAAA,sNCfP,mBAAA,4BAGS,EAAA,iCAEJ,EAAA,EAAAC,CAAA"}
1
+ {"version":3,"sources":["tabs/tabs.js","../../src/components/tabs/tabs/tabs.vue","../../src/components/tabs/tabs/tab.vue","../../src/components/tabs/tabs/content.vue"],"names":["exports","c","vue_1","l","u","d","$slots","f","p","m","t","i","h","g"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,MAAK,wCAAC,CAAE,SAAU,EAAS,EAAS,EAAO,CACrE,aACA,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,GAAM,CAAC,CAC7D,EAAQ,WAAa,EAAQ,eAAiB,EAAQ,QAAU,IAAK,GAErE,IAAIC,EAAI,CAAE,OAAwB,EAAGC,EAAM,gBAAgB,CAAE,WAAY,CAAC,EAAG,CAAC,CAAE,CAAEC,EAAI,CAClF,IAAK,EACL,MAAO,kBACV,CAAEC,EAAI,CAAE,MAAO,oBAAqB,CAAEC,GAAqB,EAAGH,EAAM,iBAAiB,CAClF,OAAQ,OCIc,MAAA,CAAA,GAAA,EAAA,CAAA,CAEjBI,MAAO,EAAA,CAKlB,OAE8B,EAAA,MAAA,EAAAJ,EAAA,YAAA,EAAA,EAAAA,EAAA,oBAAA,MAAAD,EAAA,EDTf,EAAGC,EAAM,YAAY,EAAE,OAAQ,UAAU,CAC1C,EAAE,OAAO,SAAW,EAAGA,EAAM,YAAY,EAAG,EAAGA,EAAM,oBAAoB,MAAOC,EAAG,EAAE,EAAGD,EAAM,YAAY,EAAE,OAAQ,SAAS,CAAC,CAAC,GAAK,EAAGA,EAAM,oBAAoB,GAAI,CAAC,EAAE,EACvK,EAAGA,EAAM,oBAAoB,MAAOE,EAAG,EAAE,EAAGF,EAAM,YAAY,EAAE,OAAQ,WAAW,CAAC,CAAA,CACxF,CAAC,GAET,CAAC,CAAEK,EAAI,CACJ,KACA,OACA,QACA,UACA,WACH,CAAEC,EAAI,CAAC,MAAM,CAAEC,GAAqB,EAAGP,EAAM,iBAAiB,CAC3D,OAAQ,MACR,MAAO,CACH,OAAQ,EAAE,CACV,KAAM,EAAE,CACR,MAAO,EAAE,CACT,OAAQ,CAAE,KAAM,QAAS,CACzB,SAAU,CAAE,KAAM,QExB7B,CACM,CACL,MAAM,EAAA,CACD,OAAS,EAAA,MAAA,EAAAA,EAAA,YAAA,EAAA,EAAAA,EAAA,oBAAAA,EAAA,SAAA,KAAA,EAAA,EAAAA,EAAA,oBAAA,QAAA,CACP,KAAA,QACC,MAAA,kCACE,GAAAQ,EAAA,OAAAA,EAAA,KACC,KAAAA,EAAA,OAYJ,MAAAA,EAAA,KARD,QAAAA,EAAA,OFuBY,SAAUA,EAAE,SACf,CAAE,KAAM,EAAGH,EAAE,EAAG,EAAGL,EAAM,oBAAoB,QAAS,CExBsB,OAAA,EAAAA,EAAA,gBAAA,CF0BrE,oBAAqB,CAAC,EErB7B,sBAAA,CAAA,EAEF,eAAAQ,EAAA,SFsBM,CAAC,CACF,IAAKA,EAAE,OAASA,EAAE,KACrB,CAAE,EAAE,EAAGR,EAAM,YAAYS,EAAE,OAAQ,UAAU,CAAC,CAAE,GAAIH,EAAE,CAAC,CAAE,GAAG,GAExE,CAAC,CAAEI,EAAI,CAAC,iBAAiB,CAAEC,GAAqB,EAAGX,EAAM,iBAAiB,CACvE,OAAQ,UG5Cb,MAAO,CAAA,KAAA,EAAA,CAAA,CAGP,MAAA,EAAA,CAEY,OAAA,EAAA,MAAA,EAAAA,EAAA,YAAA,EAAA,EAAAA,EAAA,oBAAA,MAAA,CH2CC,OAAQ,EAAGA,EAAM,gBAAgB,CAAE,mBAAoB,CAAC,EAAG,CAAC,CAC5D,iBAAkB,EAAE,KACvB,CAAE,EAAE,EAAGA,EAAM,YAAY,EAAE,OAAQ,UAAU,CAAC,CAAE,EAAGU,EAAE,GAE7D,CAAC,CACF,EAAQ,QAAUP,EAClB,EAAQ,WAAaI,EACrB,EAAQ,eAAiBI,GAC3B","sourcesContent":["define([\"require\", \"exports\", \"vue\"], function (require, exports, vue_1) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.TopTabsTab = exports.TopTabsContent = exports.TopTabs = void 0;\n //#region src/components/tabs/tabs/tabs.vue?vue&type=script&setup=true&lang.ts\n var c = { class: /* @__PURE__ */ (0, vue_1.normalizeClass)({ \"top-tabs\": !0 }) }, l = {\n key: 0,\n class: \"top-tabs_header\"\n }, u = { class: \"top-tabs_contents\" }, d = /* @__PURE__ */ (0, vue_1.defineComponent)({\n __name: \"tabs\",\n props: { id: {} },\n setup(e) {\n return (e, i) => ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", c, [\n (0, vue_1.renderSlot)(e.$slots, \"buttons\"),\n e.$slots.header ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", l, [(0, vue_1.renderSlot)(e.$slots, \"header\")])) : (0, vue_1.createCommentVNode)(\"\", !0),\n (0, vue_1.createElementVNode)(\"div\", u, [(0, vue_1.renderSlot)(e.$slots, \"contents\")])\n ]));\n }\n }), f = [\n \"id\",\n \"name\",\n \"value\",\n \"checked\",\n \"disabled\"\n ], p = [\"for\"], m = /* @__PURE__ */ (0, vue_1.defineComponent)({\n __name: \"tab\",\n props: {\n tabsId: {},\n name: {},\n title: {},\n active: { type: Boolean },\n disabled: { type: Boolean }\n },\n setup(t) {\n return (i, c) => ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, null, [(0, vue_1.createElementVNode)(\"input\", {\n type: \"radio\",\n class: \"top-tabs_tabInput top-unvisible\",\n id: t.tabsId + t.name,\n name: t.tabsId,\n value: t.name,\n checked: t.active,\n disabled: t.disabled\n }, null, 8, f), (0, vue_1.createElementVNode)(\"label\", {\n class: (0, vue_1.normalizeClass)({\n \"top-tabs_tabLabel\": !0,\n \"top-forms-focusable\": !0,\n \"top-disabled\": t.disabled\n }),\n for: t.tabsId + t.name\n }, [(0, vue_1.renderSlot)(i.$slots, \"default\")], 10, p)], 64));\n }\n }), h = [\"data-tabs-name\"], g = /* @__PURE__ */ (0, vue_1.defineComponent)({\n __name: \"content\",\n props: { name: {} },\n setup(e) {\n return (t, r) => ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", {\n class: (0, vue_1.normalizeClass)({ \"top-tabs_content\": !0 }),\n \"data-tabs-name\": e.name\n }, [(0, vue_1.renderSlot)(t.$slots, \"default\")], 8, h));\n }\n });\n exports.TopTabs = d;\n exports.TopTabsTab = m;\n exports.TopTabsContent = g;\n});\n//# sourceMappingURL=tabs.js.map\n","<script setup lang=\"ts\">\nimport type { Props } from './types';\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-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"]}
package/tabs/tabs.js CHANGED
@@ -1,83 +1,69 @@
1
1
 
2
+ /* start import css */
2
3
  import { Core as _autoloadCSSCore } from '../core/app.js';
3
4
  const fileNames = ['../assets/tabs.css'].map(fileName => import.meta.resolve(fileName));
4
5
  _autoloadCSSCore.insertCSSLinkToPage(fileNames, true);
6
+ /* end import css */
5
7
 
6
- import { defineComponent as d, openBlock as s, createElementBlock as n, renderSlot as a, createCommentVNode as i, createElementVNode as o, normalizeClass as l, Fragment as b } from "vue";
7
- const r = {
8
- class: /* @__PURE__ */ l({
9
- "top-tabs": !0
10
- })
11
- }, m = {
12
- key: 0,
13
- class: "top-tabs_header"
14
- }, u = { class: "top-tabs_contents" }, $ = /* @__PURE__ */ d({
15
- __name: "tabs",
16
- props: {
17
- id: {}
18
- },
19
- setup(e) {
20
- return (t, c) => (s(), n("div", r, [
21
- a(t.$slots, "buttons"),
22
- t.$slots.header ? (s(), n("div", m, [
23
- a(t.$slots, "header")
24
- ])) : i("", !0),
25
- o("div", u, [
26
- a(t.$slots, "contents")
27
- ])
28
- ]));
29
- }
30
- }), p = ["id", "name", "value", "checked", "disabled"], _ = ["for"], v = /* @__PURE__ */ d({
31
- __name: "tab",
32
- props: {
33
- tabsId: {},
34
- name: {},
35
- title: {},
36
- active: { type: Boolean },
37
- disabled: { type: Boolean }
38
- },
39
- setup(e) {
40
- return (t, c) => (s(), n(b, null, [
41
- o("input", {
42
- type: "radio",
43
- class: "top-tabs_tabInput top-unvisible",
44
- id: e.tabsId + e.name,
45
- name: e.tabsId,
46
- value: e.name,
47
- checked: e.active,
48
- disabled: e.disabled
49
- }, null, 8, p),
50
- o("label", {
51
- class: l({
52
- "top-tabs_tabLabel": !0,
53
- "top-forms-focusable": !0,
54
- "top-disabled": e.disabled
55
- }),
56
- for: e.tabsId + e.name
57
- }, [
58
- a(t.$slots, "default")
59
- ], 10, _)
60
- ], 64));
61
- }
62
- }), h = ["data-tabs-name"], T = /* @__PURE__ */ d({
63
- __name: "content",
64
- props: {
65
- name: {}
66
- },
67
- setup(e) {
68
- return (t, c) => (s(), n("div", {
69
- class: l({
70
- "top-tabs_content": !0
71
- }),
72
- "data-tabs-name": e.name
73
- }, [
74
- a(t.$slots, "default")
75
- ], 8, h));
76
- }
8
+ import { Fragment as e, createCommentVNode as t, createElementBlock as n, createElementVNode as r, defineComponent as i, normalizeClass as a, openBlock as o, renderSlot as s } from "vue";
9
+ //#region src/components/tabs/tabs/tabs.vue?vue&type=script&setup=true&lang.ts
10
+ var c = { class: /* @__PURE__ */ a({ "top-tabs": !0 }) }, l = {
11
+ key: 0,
12
+ class: "top-tabs_header"
13
+ }, u = { class: "top-tabs_contents" }, d = /* @__PURE__ */ i({
14
+ __name: "tabs",
15
+ props: { id: {} },
16
+ setup(e) {
17
+ return (e, i) => (o(), n("div", c, [
18
+ s(e.$slots, "buttons"),
19
+ e.$slots.header ? (o(), n("div", l, [s(e.$slots, "header")])) : t("", !0),
20
+ r("div", u, [s(e.$slots, "contents")])
21
+ ]));
22
+ }
23
+ }), f = [
24
+ "id",
25
+ "name",
26
+ "value",
27
+ "checked",
28
+ "disabled"
29
+ ], p = ["for"], m = /* @__PURE__ */ i({
30
+ __name: "tab",
31
+ props: {
32
+ tabsId: {},
33
+ name: {},
34
+ title: {},
35
+ active: { type: Boolean },
36
+ disabled: { type: Boolean }
37
+ },
38
+ setup(t) {
39
+ return (i, c) => (o(), n(e, null, [r("input", {
40
+ type: "radio",
41
+ class: "top-tabs_tabInput top-unvisible",
42
+ id: t.tabsId + t.name,
43
+ name: t.tabsId,
44
+ value: t.name,
45
+ checked: t.active,
46
+ disabled: t.disabled
47
+ }, null, 8, f), r("label", {
48
+ class: a({
49
+ "top-tabs_tabLabel": !0,
50
+ "top-forms-focusable": !0,
51
+ "top-disabled": t.disabled
52
+ }),
53
+ for: t.tabsId + t.name
54
+ }, [s(i.$slots, "default")], 10, p)], 64));
55
+ }
56
+ }), h = ["data-tabs-name"], g = /* @__PURE__ */ i({
57
+ __name: "content",
58
+ props: { name: {} },
59
+ setup(e) {
60
+ return (t, r) => (o(), n("div", {
61
+ class: a({ "top-tabs_content": !0 }),
62
+ "data-tabs-name": e.name
63
+ }, [s(t.$slots, "default")], 8, h));
64
+ }
77
65
  });
78
- export {
79
- $ as TopTabs,
80
- T as TopTabsContent,
81
- v as TopTabsTab
82
- };
83
- //# sourceMappingURL=tabs.js.map
66
+ //#endregion
67
+ export { d as TopTabs, g as TopTabsContent, m as TopTabsTab };
68
+
69
+ //# sourceMappingURL=tabs.js.map
package/tabs/tabs.js.map CHANGED
@@ -1 +1 @@
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","_renderSlot","_ctx","$slots","_hoisted_2","_createElementVNode","_hoisted_3","__props","_normalizeClass"],"mappings":";;;;;;;;;;;;;;sBAOCA,EAAA,GAAAC,EAiBM,OAjBNC,GAiBM;AAAA,MAXLC,EAA4BC,EAAA,QAAA,SAAA;AAAA,MAEjBC,EAAAA,OAAO,UAAlBL,KAAAC,EAGM,OAHNK,GAGM;AAAA,QADLH,EAA2BC,EAAA,QAAA,QAAA;AAAA,MAAA;MAG5BG,EAGM,OAHNC,GAGM;AAAA,QADLL,EAA6BC,EAAA,QAAA,UAAA;AAAA,MAAA;;;;;;;;;;;;;;MCf/BG,EAQE,SAAA;AAAA,QAPD,MAAK;AAAA,QACL,OAAM;AAAA,QACL,IAAIE,EAAA,SAASA,EAAA;AAAA,QACb,MAAMA,EAAA;AAAA,QACN,OAAOA,EAAA;AAAA,QACP,SAASA,EAAA;AAAA,QACT,UAAUA,EAAA;AAAA,MAAA;MAGZF,EASQ,SAAA;AAAA,QARN,OAAKG,EAAA;AAAA;;0BAAqFD,EAAA;AAAA,QAAA;QAK1F,KAAKA,EAAA,SAASA,EAAA;AAAA,MAAA;QAEfN,EAAaC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;2BClBdH,EAOM,OAAA;AAAA,MANJ,OAAKS,EAAE;AAAA;OAEP;AAAA,MACA,kBAAgBD,EAAA;AAAA,IAAA;MAEjBN,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;"}
1
+ {"version":3,"file":"tabs.js","names":["$slots"],"sources":["../../src/components/tabs/tabs/tabs.vue","../../src/components/tabs/tabs/tabs.vue","../../src/components/tabs/tabs/tab.vue","../../src/components/tabs/tabs/tab.vue","../../src/components/tabs/tabs/content.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 { 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 { 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","<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"],"mappings":";;;;;;;;;yBAOC,EAiBM,OAjBN,GAiBM;GAXL,EAA4B,EAAA,QAAA,UAAA;GAEjBA,EAAAA,OAAO,UAAA,GAAA,EAAlB,EAGM,OAHN,GAGM,CADL,EAA2B,EAAA,QAAA,SAAA,CAAA,CAAA,IAAA,EAAA,IAAA,GAAA;GAG5B,EAGM,OAHN,GAGM,CADL,EAA6B,EAAA,QAAA,WAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;qCEf/B,EAQE,SAAA;GAPD,MAAK;GACL,OAAM;GACL,IAAI,EAAA,SAAS,EAAA;GACb,MAAM,EAAA;GACN,OAAO,EAAA;GACP,SAAS,EAAA;GACT,UAAU,EAAA;kBAGZ,EASQ,SAAA;GARN,OAAK,EAAA;;;oBAAqF,EAAA;;GAK1F,KAAK,EAAA,SAAS,EAAA;MAEf,EAAa,EAAA,QAAA,UAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,GAAA;;;;;;yBElBd,EAOM,OAAA;GANJ,OAAK,EAAE,EAAA,oBAAA,IAEP,CAAA;GACA,kBAAgB,EAAA;MAEjB,EAAa,EAAA,QAAA,UAAA,CAAA,EAAA,GAAA,EAAA"}
@@ -1,2 +1,2 @@
1
- define(["require","exports","vue","../.chunks/forms-DDNzqU6o.amd","../utils/route.amd","../.chunks/store-YRW59xEF.amd","../.chunks/popupHint.vue_vue_type_style_index_0_lang-Bu_HvFoW.amd","../utils/system.amd","../require/css.amd!../assets/tabsView.css"],(function(A,h,e,m,p,w,v,B){"use strict";if(typeof e>"u")var e=window.Vue;const g=(o,n)=>`top:${String(o)}:${n}`,k={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})}},b=new Set;addEventListener("popstate",o=>{b.forEach(n=>n(o))});const y=Symbol(),I=(o,n)=>{const t=w.defineStore(y,()=>{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";k.loadLocalStorge(a,t),k.addSaverLocalStorge(a,t)}if(t.$id){const a=i=>{n.value=p.getHash(t.$id)};b.add(a)}return t},S=()=>w.useStore(y),M={key:1,class:"top-ellipsis"},f=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?p.genHash(t.$id,n.name):n.href),i=e.computed(()=>t.showMenuInPopup?v._sfc_main$1: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":o.name&&e.unref(t).activeItemName===o.name,"top-disabled":o.disabled,"top-spa-disabled":!0}),href:a.value,"data-top-icon":o.icon||void 0,disabled:o.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",M,[e.renderSlot(r.$slots,"default")])):e.createCommentVNode("",!0)]),_:3},8,["class","href","data-top-icon","disabled"]))}}),_=o=>o?.name==="AsyncComponentWrapper"&&!o?.__asyncResolved,$=async(o,n)=>{o?.name==="AsyncComponentWrapper"&&(o?.__asyncResolved||(o.__asyncLoader(),await B.sleepWhile(()=>n()&&_(o),200)))},N={class:"top-tabsView_menuOpener"},C=["data-top-icon"],L={class:"top-ellipsis"},E={class:"top-tabsView_menuList"},P={key:0,class:"top-tabsView_menuFooter"},T=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=>{if(s.type.__name&&s.type.__name!==f.__name)return;if(!s.type.__name&&typeof s.children=="object"){r(s.children);return}if(!s.props?.name||s.props?.disabled)return;const V={title:(s.children.default?.()[0].children).trim(),icon:s.props.icon,component:s.props.component?e.markRaw(s.props.component):f.props.component.default,scrollable:s.props.scrollable??f.props.scrollable.default};i.set(s.props.name,V)})},l=e.ref(null);let d=0;return 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=p.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&&p.setHash(t.$id,t.activeItemName,!1),n.value=!0,await $(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}),(c,s)=>(e.openBlock(),e.createElementBlock("div",{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(v._sfc_main),{key:0},{opener:e.withCtx(()=>[e.createElementVNode("div",N,[l.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"top-tabsView_menuOpenerActiveItem","data-top-icon":l.value.icon},[e.createElementVNode("span",L,e.toDisplayString(l.value.title),1)],8,C)):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",E,[e.renderSlot(c.$slots,"default")]),o.isShortable?(e.openBlock(),e.createElementBlock("div",P,[o.isShortable?(e.openBlock(),e.createBlock(f,{key:0,icon:e.unref(t).isShort?"":"",onClick:s[0]||(s[0]=V=>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))}}),z=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=I(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&&p.delHash(a.$id,a.activeItemName,!0)});const u=e.ref(),r=e.ref(!1);return e.watch([u,()=>a.component],()=>{r.value=_(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(T,{isShortable:o.isShortable,isLoading:r.value,"onUpdate:isLoading":d[0]||(d[0]=c=>r.value=c)},{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))}}),D={},O={class:"top-tabsView_menuDelimeter"};function R(o,n){return e.openBlock(),e.createElementBlock("div",O)}const K=m._export_sfc(D,[["render",R]]),j=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(v._sfc_main$1),{key:0,type:"title"},{default:e.withCtx(()=>[e.renderSlot(t.$slots,"default")]),_:3})):e.unref(n).isShort?(e.openBlock(),e.createBlock(K,{key:1})):(e.openBlock(),e.createElementBlock("div",{key:2,class:e.normalizeClass({"top-tabsView_menuTitle":!0,"top-tabsView_menuTitle-subtitle":o.isSubtitle})},[e.renderSlot(t.$slots,"default")],2))}});h.TopTabsView=z,h.TopTabsViewMenuItem=f,h.TopTabsViewMenuTitle=j,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})}));
2
- //# sourceMappingURL=tabsView.amd.js.map
1
+ define([`require`,`exports`,`../.chunks/forms-CbUt-6Ff.amd.js`,`../utils/system.amd.js`,`../utils/route.amd.js`,`../.chunks/store-DuQpSSLL.amd.js`,`../.chunks/popup-DrByVU-k.amd.js`,`vue`,`../require/css.amd!../assets/tabsView.css`],function(e,t,n,r,i,a,o,s){"use strict";Object.defineProperty(t,`__esModule`,{value:!0}),t.TopTabsViewMenuTitle=t.TopTabsViewMenuItem=t.TopTabsView=void 0;var c=(e,t)=>`top:${String(e)}:${t}`,l={loadLocalStorge:(e,t)=>{if(!t.$id)return;let n=c(e,t.$id);try{let r=JSON.parse(localStorage.getItem(n));typeof r==typeof t[e]&&(t[e]=r)}catch{console.warn(Error(`В localStorage[${n}] не корректный json`))}},addSaverLocalStorge:(e,t)=>{if(!t.$id)return;let n=c(e,t.$id);(0,s.watch)(()=>t[e],()=>{localStorage.setItem(n,JSON.stringify(t[e]))},{immediate:!0})}},u=new Set;addEventListener(`popstate`,e=>{u.forEach(t=>t(e))});var d=Symbol(),f=(e,t)=>{let r=(0,a.t)(d,()=>({showMenuInPopup:(0,s.computed)(()=>e.showMenuInPopup??n.O.state.isMobile),pageMod:(0,s.computed)(()=>e.pageMod),isShort:(0,s.ref)(!1),activeItemName:t,component:(0,s.ref)(void 0),scrollable:(0,s.ref)(!0)}),e.idState);if(e.isShortable){let e=`isShort`;l.loadLocalStorge(e,r),l.addSaverLocalStorge(e,r)}return r.$id&&u.add(e=>{t.value=(0,i.getHash)(r.$id)}),r},p=()=>(0,a.r)(d),m={key:1,class:`top-ellipsis`},h=(0,s.defineComponent)({__name:`menuItem`,props:{name:{},href:{},icon:{},disabled:{type:Boolean},component:{default:void 0},scrollable:{type:Boolean,default:!0}},setup(e){let t=e,n=p(),r=(0,s.computed)(()=>t.name&&n.$id?(0,i.genHash)(n.$id,t.name):t.href),a=(0,s.computed)(()=>n.showMenuInPopup?o.o:r?`a`:`button`),c=e=>{!t.href&&r.value&&e.preventDefault(),t.name&&(n.activeItemName=t.name)};return(t,i)=>((0,s.openBlock)(),(0,s.createBlock)((0,s.resolveDynamicComponent)(a.value),{target:`_self`,class:(0,s.normalizeClass)({"top-tabsView_menuItem":!(0,s.unref)(n).showMenuInPopup,"top-active":e.name&&(0,s.unref)(n).activeItemName===e.name,"top-disabled":e.disabled,"top-spa-disabled":!0}),href:r.value,"data-top-icon":e.icon||void 0,disabled:e.disabled||void 0,onClick:c},{default:(0,s.withCtx)(()=>[(0,s.unref)(n).showMenuInPopup?(0,s.renderSlot)(t.$slots,`default`,{key:0}):t.$slots.default&&!(0,s.unref)(n).isShort?((0,s.openBlock)(),(0,s.createElementBlock)(`span`,m,[(0,s.renderSlot)(t.$slots,`default`)])):(0,s.createCommentVNode)(``,!0)]),_:3},8,[`class`,`href`,`data-top-icon`,`disabled`]))}}),g=e=>e?.name===`AsyncComponentWrapper`&&!e?.__asyncResolved,_=async(e,t)=>{e?.name===`AsyncComponentWrapper`&&(e?.__asyncResolved||(e.__asyncLoader(),await(0,r.sleepWhile)(()=>t()&&g(e),200)))},v={class:`top-tabsView_menuOpener`},y=[`data-top-icon`],b={class:`top-ellipsis`},x={class:`top-tabsView_menuList`},S={key:0,class:`top-tabsView_menuFooter`},C=(0,s.defineComponent)({__name:`menu`,props:(0,s.mergeModels)({isShortable:{type:Boolean},isLoading:{type:Boolean}},{isLoading:{},isLoadingModifiers:{}}),emits:[`update:isLoading`],setup(e){let t=(0,s.useModel)(e,`isLoading`),n=p(),r=(0,s.useSlots)(),a=new Map,c=()=>{if(!r.default)return;let e=r.default({}).find(e=>e.key===`_menu`);e&&l(e.children)},l=e=>{e.forEach(e=>{if(e.type.__name&&e.type.__name!==h.__name)return;if(!e.type.__name&&typeof e.children==`object`){l(e.children);return}if(!e.props?.name||e.props?.disabled)return;let t={title:(e.children.default?.()[0].children).trim(),icon:e.props.icon,component:e.props.component?(0,s.markRaw)(e.props.component):h.props.component.default,scrollable:e.props.scrollable??h.props.scrollable.default};a.set(e.props.name,t)})},u=(0,s.ref)(null),d=0;return(0,s.watch)(()=>n.activeItemName,async()=>{let e=++d;if(a.size===0&&c(),a.size===0){n.activeItemName=``;return}if(u.value=a.get(n.activeItemName)??null,!u.value&&n.$id){let e=(0,i.getHash)(n.$id);if(u.value=a.get(e)??null,u.value){n.activeItemName=e;return}}if(!u.value){n.activeItemName=a.keys().next().value;return}if(u.value.component===n.component){t.value=!1;return}n.$id&&(0,i.setHash)(n.$id,n.activeItemName,!1),t.value=!0,await _(u.value.component,()=>e===d),e===d&&(n.scrollable=u.value.scrollable,n.component=u.value.component,u.value&&!n.component&&console.warn(`Компонент вкладки ${n.activeItemName} не найден. Добавьте props.component для пункта меню ${n.activeItemName}.`))},{immediate:!0}),(t,r)=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{class:(0,s.normalizeClass)({"top-tabsView_menu":!0,"top-tabsView_menu-inPopup_0":!(0,s.unref)(n).showMenuInPopup,"top-tabsView_menu-inPopup_1":(0,s.unref)(n).showMenuInPopup,"top-tabsView_menu-short":(0,s.unref)(n).isShort&&!(0,s.unref)(n).showMenuInPopup})},[(0,s.unref)(n).showMenuInPopup?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(o.s),{key:0},{opener:(0,s.withCtx)(()=>[(0,s.createElementVNode)(`div`,v,[u.value?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:0,class:`top-tabsView_menuOpenerActiveItem`,"data-top-icon":u.value.icon},[(0,s.createElementVNode)(`span`,b,(0,s.toDisplayString)(u.value.title),1)],8,y)):(0,s.createCommentVNode)(``,!0),r[1]||=(0,s.createElementVNode)(`div`,{class:`top-tabsView_menuOpenerIcon`,"data-top-icon":``},null,-1)])]),contentList:(0,s.withCtx)(()=>[(0,s.renderSlot)(t.$slots,`default`)]),_:3})):((0,s.openBlock)(),(0,s.createElementBlock)(s.Fragment,{key:1},[(0,s.createElementVNode)(`div`,x,[(0,s.renderSlot)(t.$slots,`default`)]),e.isShortable?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,S,[e.isShortable?((0,s.openBlock)(),(0,s.createBlock)(h,{key:0,icon:(0,s.unref)(n).isShort?``:``,onClick:r[0]||=e=>(0,s.unref)(n).isShort=!(0,s.unref)(n).isShort},{default:(0,s.withCtx)(()=>[(0,s.createTextVNode)((0,s.toDisplayString)((0,s.unref)(n).isShort?``:`Свернуть`),1)]),_:1},8,[`icon`])):(0,s.createCommentVNode)(``,!0)])):(0,s.createCommentVNode)(``,!0)],64))],2))}}),w=(0,s.defineComponent)({__name:`tabsView`,props:(0,s.mergeModels)({modelValue:{},pageMod:{type:Boolean},showMenuInPopup:{type:Boolean,default:void 0},isShortable:{type:Boolean,default:!1},idState:{}},{modelValue:{},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let t=e,r=f(t,(0,s.useModel)(e,`modelValue`)),a=Math.random();t.pageMod&&n.O.state.documentClassModificators.set(a,`top-hasTabsViewPageMod`),(0,s.onUnmounted)(()=>{t.pageMod&&n.O.state.documentClassModificators.delete(a),r.$id&&(0,i.delHash)(r.$id,r.activeItemName,!0)});let o=(0,s.ref)(),c=(0,s.ref)(!1);return(0,s.watch)([o,()=>r.component],()=>{c.value=g(r.component)},{immediate:!0}),(i,a)=>((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{class:(0,s.normalizeClass)({"top-tabsView":!0,"top-tabsView-pageMod":t.pageMod,"top-tabsView-inPopup":(0,s.unref)(r).showMenuInPopup})},[(0,s.createVNode)(C,{isShortable:e.isShortable,isLoading:c.value,"onUpdate:isLoading":a[0]||=e=>c.value=e},{default:(0,s.withCtx)(()=>[(0,s.renderSlot)(i.$slots,`menu`)]),_:3},8,[`isShortable`,`isLoading`]),(0,s.createElementVNode)(`div`,{class:(0,s.normalizeClass)({"top-tabsView_contents":!0,"top-tabsView_contents-isLoading":c.value,"top-tabsView_contents-noScrollable":!(0,s.unref)(r).scrollable})},[c.value?((0,s.openBlock)(),(0,s.createBlock)(n.l,{key:0})):(0,s.createCommentVNode)(``,!0),((0,s.openBlock)(),(0,s.createBlock)(s.KeepAlive,null,[((0,s.openBlock)(),(0,s.createBlock)((0,s.resolveDynamicComponent)((0,s.unref)(r).component),{ref_key:`componentRef`,ref:o},null,512))],1024))],2)],2))}}),T={},E={class:`top-tabsView_menuDelimeter`};t.TopTabsViewMenuItem=h,t.TopTabsView=w;function D(e,t){return(0,s.openBlock)(),(0,s.createElementBlock)(`div`,E)}var O=(0,n.u)(T,[[`render`,D]]);t.TopTabsViewMenuTitle=(0,s.defineComponent)({__name:`menuTitle`,props:{isSubtitle:{type:Boolean}},setup(e){let t=p();return(n,r)=>(0,s.unref)(t).showMenuInPopup?((0,s.openBlock)(),(0,s.createBlock)((0,s.unref)(o.o),{key:0,type:`title`},{default:(0,s.withCtx)(()=>[(0,s.renderSlot)(n.$slots,`default`)]),_:3})):(0,s.unref)(t).isShort?((0,s.openBlock)(),(0,s.createBlock)(O,{key:1})):((0,s.openBlock)(),(0,s.createElementBlock)(`div`,{key:2,class:(0,s.normalizeClass)({"top-tabsView_menuTitle":!0,"top-tabsView_menuTitle-subtitle":e.isSubtitle})},[(0,s.renderSlot)(n.$slots,`default`)],2))}})});
2
+ //# 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"],"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, 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\n</script>\n\n<template>\n\t<div\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: var(--top-tabsView-menu-border-bottom-width) 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-tabsView-menu-opener-padding);\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\t--top-tabsView-menu-border-bottom-width: 1px;\n\t--top-tabsView-menu-opener-padding: var(--top-padding-2);\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\n@media only screen and (max-width: 900px) {\n\t:root {\n\t\t/* Суммарно должна быть высота элемента \".top-tabsView_menu\" */\n\t\t--top-tabsView-contents-offset-top: calc(var(--top-icon-size) + var(--top-tabsView-menu-opener-padding) * 2 + var(--top-tabsView-menu-border-bottom-width));\n\t}\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","popupHint_vue_vue_type_style_index_0_lang","onClick","__props","_ctx","checkComponentIsLoading","preResolveComponent","condition","slots","menuItemByName","setMenuItemByNameFromItems","menuItems","subComponent","_sfc_main$4","activeMenuItem","numberChanged","countChanged","setMenuItemByName","activeItemName","isLoading","utils_route","_hoisted_1$1","_hoisted_4","_cache","$event","uid","componentRef","_hoisted_1"],"mappings":"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"}
1
+ {"version":3,"sources":["tabsView/tabsView.js","../../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"],"names":["exports","I","L","vue_1","R","z","B","store_DuQpSSLL_esm_js_1","t","forms_CbUt_6Ff_esm_js_1","n","route_js_1","V","H","U","i","popup_DrByVU_k_esm_js_1","o","W","G","system_js_1","K","q","J","Y","X","Z","a","c","l","u","Q","r","s","e","$","ee","te","ne"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,mCAAoC,yBAAsB,wBAAqB,mCAAoC,mCAAoC,MAAK,4CAAC,CAAE,SAAU,EAAS,EAAS,EAAyB,EAAa,EAAY,EAAyB,EAAyB,EAAO,CAChU,aACA,OAAO,eAAeA,EAAS,aAAc,CAAE,MAAO,GAAM,CAAC,CAC7D,EAAQ,qBAAuB,EAAQ,oBAAsB,EAAQ,YAAc,IAAK,GAExF,IAAIC,GAAK,EAAG,IAAM,OAAO,OAAO,EAAE,CAAC,GAAG,IAAKC,EAAI,CAC3C,iBAAkB,EAAG,IAAM,CCEyB,GAAA,CAAA,EAGpD,IA0CP,OAhCW,IAAK,EAAAD,EAAA,EAAA,EAAA,IAAA,CAEsB,GAAW,CAE7C,IAAA,EAAA,KAAA,MAAA,aAAA,QAAA,EAAA,CAAA,CAC8D,OAAM,GAAA,OAAa,EAAA,KAAQ,EAA2B,GAAA,QAK5G,CACE,QAAA,KAAU,MAAA,kBAAkC,EAAA,sBAAuB,CAAA,GAsBjF,qBAbiE,EAAa,IAAA,CAEnE,GAAK,CAAA,EAAA,IAEiC,OAE/B,IAAA,EAAAA,EAAkB,EAAA,EAAA,IAAA,EACnC,EAAaE,EAAA,WAA8B,EAAA,OAA2B,CAClE,aAAkB,QAAA,EAAA,KAAA,UAAA,EAAA,GAAA,CAAA,EDzBT,CAAE,UAAW,CAAC,EAAG,CAAC,EEdjC,CAAAC,EAAiB,IAAa,IACX,iBAA6C,WAAG,GAAA,CACjEA,EAAA,QAAA,GAAA,EAAA,EAAA,CAAA,EAEW,CAMZ,IAAMC,EAAoB,QAAA,CAQlBC,GAAA,EAAA,IAAA,CACN,IAAA,GAAA,EARuBC,EAAqB,GAAAF,OAA8B,CAC3D,iBAA6B,EAAAF,EAAA,cAAAK,EAAA,iBAAAC,EAAA,EAAA,MAAA,SAAA,CAC7B,SAAU,EAAAN,EAAA,cAAAK,EAAA,QAAA,CASzB,SAAgB,EAAAL,EAAA,KAAA,CAAA,EAAA,CAChB,eAR+BO,EAS/B,WAR2B,EAAAP,EAAA,KAAA,IAAA,GAAA,CAUpB,YAAQ,EAAAA,EAAA,KAAA,CAAA,EAAA,CAEP,EAAAK,EAAA,QAAa,CAChB,GAAYA,EAAA,YAAA,CAEA,IAAA,EAAgB,UFAxBN,EAAE,gBAAgB,EAAG,EAAE,CAAEA,EAAE,oBAAoB,EAAG,EAAE,CEMvD,OAAgB,EAAM,KAAKE,EAAA,IAAA,GAAA,CAM5B,EAAA,OAAA,EAAAO,EAAA,SAAA,EAAA,IAAA,EAMK,CAAA,GFbNC,OAAW,EAAGL,EAAwB,GAAGF,EAAE,CAAEQ,EAAI,CAChD,IAAK,EACL,MAAO,eACV,CAAEC,GAAqB,EAAGX,EAAM,iBAAiB,CAC9C,OAAQ,WACR,MAAO,CACH,KAAM,EAAE,CACR,KAAM,EAAE,CACR,KAAM,EAAE,CACR,SAAU,CAAE,KAAM,QAAS,CAC3B,UAAW,CAAE,QAAS,IAAK,GAAG,CAC9B,WAAY,CACR,KAAM,QACN,QAAS,CAAC,EACd,CACH,CGtDH,MAKA,EAAQ,CAwBF,IAAa,EAAA,EAAA,EACrBS,GAAA,CAAA,GAAA,EAAAT,EAGC,cACG,EAAA,MAAA,EAAA,KAAuB,EAAAQ,EAAA,SAAA,EAAA,IAAA,EAAA,KAAA,CAAA,EAAA,KAAA,CAAAI,GAAA,EAAAZ,EAAA,cAAA,EAAA,gBAAAa,EAAA,EAAA,EAAA,IAAA,SAAA,CAAAC,EAAA,GAAA,CHuBf,CAAC,EAAE,MAAQ,EAAE,OAAS,EAAE,gBAAgB,CAAE,EAAE,OAAS,EAAE,eAAiB,EAAE,OGfjF,OAAA,EAAA,MAAA,EAAAd,EAAA,YAAA,EAAA,EAAAA,EAAA,cAAA,EAAAA,EAAA,yBAAAY,EAAA,MAAA,CAAA,CACD,OAAA,QHkBQ,OAAQ,EAAGZ,EGlBgB,gBAAM,CAAoC,wBAAc,EAAA,EAAAA,EAAmB,OAAA,EAAA,CAAA,gBAA2B,aAAA,EAAA,OAAA,EAAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,KHqB7H,eAAgB,EAAE,SAClB,mBAAoB,CAAC,EGhBhC,CAAA,CACN,KAAe,EAAA,MACL,gBAAY,EAAA,MAAA,IAAA,GACf,SAAA,EAAA,UAAA,IAAA,GHkBM,QAASc,EACZ,CAAE,CACC,SAAU,EAAGd,EAAM,aAAe,EAAE,EAAGA,EAAM,OAAO,EAAE,CAAC,iBAAmB,EAAGA,EAAM,YAAY,EAAE,OAAQ,UAAW,CAAE,IAAK,EAAG,CAAC,CAAG,EAAE,OAAO,SAAW,EAAE,EAAGA,EAAM,OAAO,EAAE,CAAC,UAAY,EAAGA,EAAM,YAAY,EAAG,EAAGA,EAAM,oBAAoB,OAAQU,EAAG,EAAE,EAAGV,EAAM,YAAY,EAAE,OAAQ,UAAU,CAAC,CAAC,GAAK,EAAGA,EAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,CAAC,CAC/U,EAAG,EACN,CAAE,EAAG,CACF,QACA,OACA,gBACA,WACH,CAAC,GIpEE,CAAA,CAAAe,EAAS,GAAA,GAAA,OAAA,yBACT,CAAA,GAAA,gBAELC,EAEV,MAAM,EAAA,IACE,CJiED,GAAG,OAAS,0BAA4B,GAAG,kBAAoB,EAAE,eAAe,CAAE,MAAO,EAAGC,EAAY,gBAAkB,GAAG,EAAIF,EAAE,EAAE,CAAE,IAAI,IAC5IG,EAAI,CAAE,MAAO,0BAA2B,CAAEC,EAAI,CAAC,gBAAgB,CAAEC,EAAI,CAAE,MAAO,eAAgB,CAAEC,EAAI,CAAE,MAAO,wBAAyB,CAAEC,EAAI,CAC3I,IAAK,EACL,MAAO,0BACV,CAAEC,GAAqB,EAAGvB,EAAM,iBAAiB,CAC9C,OAAQ,OACR,OAAwB,EAAGA,EAAM,aAAa,CAC1C,YAAa,CAAE,KAAM,QAAS,CAC9B,UAAW,CAAE,KAAM,QAAQ,CAC9B,CAAE,CACC,UAAW,EAAE,CACb,mBAAoB,EAAC,CACxB,CAAC,CACF,MAAO,CAAC,mBAAmB,CKzF7B,MAAuB,EAAC,CAWlB,IAAA,GAAS,EAAAA,EAAA,UAAA,EAAA,YAAA,CAAA,EAAAS,GAAA,CAAA,GAAA,EAAAT,EAAA,WAAA,CAAAY,EAAA,IAAA,IAAAY,MAAA,CAES,GAAA,CAAQ,EAAE,QAGF,OAIqB,IAAA,EAAA,EAAA,QAAA,EAAA,CAAA,CAAA,KAAA,GAAA,EAAA,MAAA,QAAA,CACvC,GAAsBC,EAAA,EAAA,SAAA,EAElBA,EAAA,GAAU,CAGT,EAAA,QAAU,GAAO,CACU,GAAA,EAAA,KAAA,QAAA,EAAA,KAAA,SAAAd,EAAA,OAEjD,OLuEiB,GAAI,CAAC,EAAE,KAAK,QAAU,OAAO,EAAE,UAAY,SAAU,CKpE9Cc,EAAQ,EAAa,SAAO,CAE1B,OAED,GAAA,CAAA,EAAA,OAAA,MAAA,EAAA,OAAA,SACK,OACL,IAAA,EAAM,CAC/B,OAAA,EAAA,SAAA,WAAA,CAAA,GAAA,UAAA,MAAA,CAE2C,KAAS,EAAA,MAAA,KACpD,UAAA,EAAA,MAAA,WAAA,EAAAzB,EAAA,SAAA,EAAA,MAAA,UAAA,CAAAW,EAAA,MAAA,UAAA,QAcgB,WAAA,EAAA,MAAA,YAAAA,EAAA,MAAA,WAAA,QAQN,CAEaC,EAAA,IAAA,EAAA,MAAA,KAAA,EAAA,EAEI,EAKrBc,GAAA,EAAiB1B,EAAA,KAAA,KAAA,CAAA2B,EAAA,EAEvB,OAAA,EAAA3B,EAAA,WAAA,EAAA,eAAA,SAAA,CLyCa,IAAI,EAAI,EAAE2B,EKtCT,GAAuBf,EAAA,OAAU,GAAAY,GAAA,CAAeZ,EAAA,OAG1D,EAAe,CACsB,EAAA,eAAA,GAEH,OAKrC,GAAA,EAAA,MAAAA,EAAA,IAAA,EAAA,eAAA,EAAA,KAAA,CAAAc,EAAA,OAAA,EAAA,IAAA,CLiCgB,IAAI,GAAK,EAAGlB,EAAW,SAAS,EAAE,IAAI,CACtC,GAAI,EAAE,MAAQI,EAAE,IAAI,EAAE,EAAI,KAAMc,EAAE,MAAO,CK7BhC,EAAA,eAAA,EACH,QAMC,GAAA,CAAAA,EAAA,MAAc,CACpB,EAAA,eAAAd,EAAA,MAAA,CAAA,MAAA,CAAA,MAElB,OAG4B,GAAAc,EAAK,MAAM,YAAsB,EAG9D,UAAkB,CAqBN,EAAM,MACnB,CAAA,ELEmB,OAEJ,EAAE,MAAQ,EAAGlB,EKE+G,SAAA,EAAA,IAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,MAAA,CAAA,EAAA,MAAAQ,EAAAU,EAAA,MAAA,cAAA,IAAAC,EAAA,CAAA,IAAAA,IAAA,EAAA,WAAAD,EAAA,MAAA,WAAA,EAAA,UAAAA,EAAA,MAAA,UAAAA,EAAA,OAAA,CAAA,EAAA,WAAA,QAAA,KAAA,qBAAA,EAAA,eAAA,uDAAA,EAAA,eAAA,GAAA,GLD7H,CAAE,UAAW,CAAC,EKC8J,CAAA,EAAM,EAAA,MAAY,EAAA1B,EAAM,YAAA,EAAA,EAAAA,EAAA,oBAAA,MAAA,CAAA,OAAA,EAAAA,EAAA,gBAAA,CAQ3L,oBAoBX,CAAA,EAlBT,8BASO,EAAA,EAAAA,EAAA,OAAA,EAAA,CAAA,gBLjBS,+BAAgC,EAAGA,EAAM,OAAO,EAAE,CAAC,gBKW3D,2BAAA,EAAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,EAAAA,EAAA,OAAA,EAAA,CAAA,gBACL,CAAA,CAAA,CAAe,EAAA,EAAAA,EAAe,OAAA,EAAA,CAAA,kBAAA,EAAAA,EAAA,YAAA,EAAA,EAAAA,EAAA,cAAA,EAAAA,EAAA,OAAAa,EAAA,EAAA,CAAA,CAAA,IAAA,EAAA,CAAA,CAIxB,QADH,EAAeb,EAAK,aAAA,EAAA,EAAAA,EAAA,oBAIwC,MAAAkB,EAAA,CAAAQ,EAAA,QAAA,EAAA1B,EAAA,YAAA,EAAA,EAAAA,EAAA,oBAAA,MAAA,CAAtD,IAAA,EAA4C,MAAA,oCLb5B,gBAAiB0B,EAAE,MAAM,KKkBxC,CAAA,EAAA,EAAA1B,EAAA,oBAAA,OAAAoB,GAAA,EAAApB,EAAA,iBAAA0B,EAAA,MAAA,MAAA,CAAA,EAAA,CAAA,CAAA,EAAAP,EAAA,GAAA,EAAAnB,EAAA,oBAAA,GAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAAA,EAAA,oBAAA,MAAA,CLhBe,MAAO,8BKsBpC,gBACc,ILrBY,CAAE,KAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CK8B1B,aAAO,EAAAA,EAAA,aAAA,EAAA,EAAAA,EAAA,YAAA,EAAA,OAAA,UAAA,CAAA,CAAA,CACd,EAAA,EL5BM,CAAC,IAAM,EAAGA,EAAM,YAAY,EAAG,EAAGA,EAAM,oBAAoBA,EAAM,SAAU,CAAE,IAAK,EAAG,CAAE,EAAE,EAAGA,EAAM,oBAAoB,MAAOqB,EAAG,EAAE,EAAGrB,EAAM,YAAY,EAAE,OAAQ,UAAU,CAAC,CAAC,CAAE,EAAE,cAAgB,EAAGA,EAAM,YAAY,EAAG,EAAGA,EAAM,oBAAoB,MAAOsB,EAAG,CAAC,EAAE,cAAgB,EAAGtB,EAAM,YAAY,EAAG,EAAGA,EAAM,aAAaW,EAAG,CK8B9U,IAAM,EL5Bc,MAAO,EAAGX,EAAM,OAAO,EAAE,CAAC,QAAU,IAAM,IAC1C,QAAS,EAAE,KAAQ,GAAM,CAAC,EAAGA,EAAM,OAAO,EAAE,CAAC,QAAU,EAAE,EAAGA,EAAM,OAAO,EAAE,CAAC,QAC/E,CAAE,CACC,SAAU,EAAGA,EAAM,aAAe,EAAE,EAAGA,EAAM,kBAAkB,EAAGA,EAAM,kBAAkB,EAAGA,EAAM,OAAO,EAAE,CAAC,QAAU,GAAK,WAAW,CAAE,EAAE,CAAC,CAAC,CAC7I,EAAG,EACN,CAAE,EAAG,CAAC,OAAO,CAAC,GAAK,EAAGA,EAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,CAAC,GAAK,EAAGA,EAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,CAAE,GAAG,EAAE,CAAE,EAAE,GAElI,CAAC,CAAE4B,GAAqB,EAAG5B,EAAM,iBAAiB,CAC/C,OAAQ,WACR,OAAwB,EAAGA,EAAM,aAAa,CAC1C,WAAY,EAAE,CACd,QAAS,CAAE,KAAM,QAAS,CAC1B,gBAAiB,CACb,KAAM,QACN,QAAS,IAAK,GACjB,CACD,YAAa,CACT,KAAM,QACN,QAAS,CAAC,EACb,CACD,QAAS,EAAC,CACb,CAAE,CACC,WAAY,EAAE,CMpLZ,eAKmB,EAAA,CAMvB,CAAA,CAGC,MAAA,CAAS,oBAAW,CAG7B,MAAA,EAAA,CAEmB,IACf6B,EAAYtB,EAAIiB,EAAMrB,EAAA0B,GAAA,EAAA7B,EAAA,UAAAO,EAAA,aAAA,CAAA,CAAAO,EAAA,KAAA,QAAA,CAErBe,EAAA,SAA0BvB,EAAkB,EAAA,MAAA,0BAAA,IAAAQ,EAAA,yBAAA,EAAA,EAAAd,EAAA,iBAAA,CACR6B,EAAM,SAAUvB,EAAA,EAAA,MAAA,0BAAA,OAAAQ,EAAA,CAAAU,EAAA,MAAA,EAAAhB,EAAA,SAAAgB,EAAA,IAAAA,EAAA,eAAA,CAAA,EAAA,EACtD,CNqKO,IAAIM,GAAK,EAAG9B,EAAM,MAAM,CAAE,GAAK,EAAGA,EAAM,KAAK,CAAC,EAAE,CAChD,OAAQ,EAAGA,EMjK+C,OAAA,CAAA8B,MAAAN,EAAA,UAAA,KAAA,CNkKtD,EAAE,MAAQT,EMlKgFS,EAAA,UAAM,EAY/F,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,EAAA,MAAA,EAAAxB,EAAA,YAAA,EAAA,EAAAA,EAAA,oBAAA,MAAA,CAAA,OAAA,EAAAA,EAAA,gBAAA,CALA,eAAA,CAAA,EACK,uBAAA6B,EAAA,QN8JF,wBM9JW,EAAA7B,EAAA,OAAAwB,EAAA,CAAA,gBN+Jd,CAAC,CAAE,CAAE,EAAE,EAAGxB,EAAM,aAAauB,EAAG,CM5JrB,YAAAhB,EAAA,YN8JR,UAAW,EAAE,MACb,qBM7IZ,EAAA,KAdJ,GAAK,EAAA,MAAA,EN4JQ,CAAE,CACC,SAAU,EAAGP,EM7JsD,aAAA,EAAA,EAAAA,EAAA,YAAA+B,EAAA,OAAA,OAAA,CAAA,CAAA,CN8JnE,EAAG,EMxJF,CAAA,EAAA,CAAA,cAAY,YAAA,CAAA,EAAA,EAAA/B,EAE9B,oBAIG,MADU,CAAA,OAAS,EAAAA,EAAA,gBAAA,CADhB,wBAAA,CAAA,EAAA,kCAAA,EAAA,MNwJe,qCAAsC,EAAE,EAAGA,EAAM,OAAOwB,EAAE,CAAC,WAC9D,CAAC,CAAE,CAAE,CAAC,EAAE,QAAU,EAAGxB,EAAM,YAAY,EAAG,EAAGA,EAAM,aAAaM,EAAwB,EAAG,CAAE,IAAK,EAAG,CAAC,GAAK,EAAGN,EAAM,oBAAoB,GAAI,CAAC,EAAE,GAAI,EAAGA,EAAM,YAAY,EAAG,EAAGA,EAAM,aAAaA,EAAM,UAAW,KAAM,GAAG,EAAGA,EAAM,YAAY,EAAG,EAAGA,EAAM,cAAc,EAAGA,EAAM,0BAA0B,EAAGA,EAAM,OAAOwB,EAAE,CAAC,UAAU,CAAE,COpNrV,QAAA,ePsNgB,IAAKM,EOtNc,CAAA,KAAA,IAAA,EAAA,CAAA,KAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,GPyN1C,CAAC,CAAEE,EAAI,EAAE,CAAEC,EAAK,CAAE,MAAO,6BAA8B,CACxD,EAAQ,oBAAsBtB,EAC9B,EAAQ,YAAciB,EACtB,SAASM,EAAG,EAAG,EAAG,CQzNhB,OAAsB,EAAAlC,EAAA,YAAA,EAAA,EAAAA,EAAA,oBAAA,MAAAiC,EAAA,CR4NxB,IAAIE,GAAsB,EAAG7B,EAAwB,GAAG0B,EAAG,CAAC,CAAC,SAAUE,EAAG,CAAC,CAAC,CAoB5E,EAAQ,sBApB4F,EAAGlC,EAAM,iBAAiB,CQtNhI,OAAK,YRwNC,MAAO,CAAE,WAAY,CAAE,KAAM,QAAS,CAAE,CACxC,MAAM,EAAG,CACL,IAAI,EAAIS,GAAG,CQrNiB,OAAC,EAAA,KAAxC,EAAkDT,EAAA,OAAA,EAAA,CAAA,kBAU5C,EAAAA,EAAA,YAAA,EAAA,EAAAA,EAAA,cAAA,EAAAA,EAAA,OAAAa,EAAA,EAAA,CAAA,CR6MS,IAAK,EQnNb,KAAA,QRqNK,CAAE,CACC,SAAU,EAAGb,EAAM,aQtNkD,EAAA,EAAAA,EAAA,YAAA,EAAA,OAAA,UAAA,CAAA,CAAA,CRuNrE,EAAG,EQlNJ,CAAA,GAAA,EAAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAAA,EAAA,YAAA,EAAA,EAAAA,EAAA,aAAAmC,EAAA,CAAA,IAAA,EAAA,CAAA,IAAA,EAAAnC,EAAA,YAAA,EAAA,EAAAA,EAAA,oBAAA,MAAA,CRoNC,IAAK,EACL,OAAQ,EAAGA,EAAM,gBAAgB,CAC7B,yBAA0B,CAAC,EAC3B,kCAAmC,EAAE,WACxC,CAAA,CACJ,CAAE,EAAE,EAAGA,EAAM,YAAY,EAAE,OAAQ,UAAU,CAAC,CAAE,EAAE,GAE1D,CAAC,EAEJ","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/forms-CbUt-6Ff.esm.js\", \"../utils/system.js\", \"../utils/route.js\", \"../.chunks/store-DuQpSSLL.esm.js\", \"../.chunks/popup-DrByVU-k.esm.js\", \"vue\"], function (require, exports, forms_CbUt_6Ff_esm_js_1, system_js_1, route_js_1, store_DuQpSSLL_esm_js_1, popup_DrByVU_k_esm_js_1, vue_1) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.TopTabsViewMenuTitle = exports.TopTabsViewMenuItem = exports.TopTabsView = void 0;\n //#region src/core/utils/store/localStorage.ts\n var I = (e, t) => `top:${String(e)}:${t}`, L = {\n loadLocalStorge: (e, t) => {\n if (!t.$id)\n return;\n let n = I(e, t.$id);\n try {\n let r = JSON.parse(localStorage.getItem(n));\n typeof r == typeof t[e] && (t[e] = r);\n }\n catch {\n console.warn(/* @__PURE__ */ Error(`В localStorage[${n}] не корректный json`));\n }\n },\n addSaverLocalStorge: (e, t) => {\n if (!t.$id)\n return;\n let n = I(e, t.$id);\n (0, vue_1.watch)(() => t[e], () => {\n localStorage.setItem(n, JSON.stringify(t[e]));\n }, { immediate: !0 });\n }\n }, R = /* @__PURE__ */ new Set();\n addEventListener(\"popstate\", (e) => {\n R.forEach((t) => t(e));\n });\n var z = Symbol(), B = (t, n) => {\n let r = (0, store_DuQpSSLL_esm_js_1.t)(z, () => ({\n showMenuInPopup: (0, vue_1.computed)(() => t.showMenuInPopup ?? forms_CbUt_6Ff_esm_js_1.O.state.isMobile),\n pageMod: (0, vue_1.computed)(() => t.pageMod),\n isShort: (0, vue_1.ref)(!1),\n activeItemName: n,\n component: (0, vue_1.ref)(void 0),\n scrollable: (0, vue_1.ref)(!0)\n }), t.idState);\n if (t.isShortable) {\n let e = \"isShort\";\n L.loadLocalStorge(e, r), L.addSaverLocalStorge(e, r);\n }\n return r.$id && R.add((e) => {\n n.value = (0, route_js_1.getHash)(r.$id);\n }), r;\n }, V = () => (0, store_DuQpSSLL_esm_js_1.r)(z), H = {\n key: 1,\n class: \"top-ellipsis\"\n }, U = /* @__PURE__ */ (0, vue_1.defineComponent)({\n __name: \"menuItem\",\n props: {\n name: {},\n href: {},\n icon: {},\n disabled: { type: Boolean },\n component: { default: void 0 },\n scrollable: {\n type: Boolean,\n default: !0\n }\n },\n setup(e) {\n let t = e, n = V(), r = (0, vue_1.computed)(() => t.name && n.$id ? (0, route_js_1.genHash)(n.$id, t.name) : t.href), i = (0, vue_1.computed)(() => n.showMenuInPopup ? popup_DrByVU_k_esm_js_1.o : r ? \"a\" : \"button\"), o = (e) => {\n !t.href && r.value && e.preventDefault(), t.name && (n.activeItemName = t.name);\n };\n return (t, a) => ((0, vue_1.openBlock)(), (0, vue_1.createBlock)((0, vue_1.resolveDynamicComponent)(i.value), {\n target: \"_self\",\n class: (0, vue_1.normalizeClass)({\n \"top-tabsView_menuItem\": !(0, vue_1.unref)(n).showMenuInPopup,\n \"top-active\": e.name && (0, vue_1.unref)(n).activeItemName === e.name,\n \"top-disabled\": e.disabled,\n \"top-spa-disabled\": !0\n }),\n href: r.value,\n \"data-top-icon\": e.icon || void 0,\n disabled: e.disabled || void 0,\n onClick: o\n }, {\n default: (0, vue_1.withCtx)(() => [(0, vue_1.unref)(n).showMenuInPopup ? (0, vue_1.renderSlot)(t.$slots, \"default\", { key: 0 }) : t.$slots.default && !(0, vue_1.unref)(n).isShort ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"span\", H, [(0, vue_1.renderSlot)(t.$slots, \"default\")])) : (0, vue_1.createCommentVNode)(\"\", !0)]),\n _: 3\n }, 8, [\n \"class\",\n \"href\",\n \"data-top-icon\",\n \"disabled\"\n ]));\n }\n }), W = (e) => e?.name === \"AsyncComponentWrapper\" && !e?.__asyncResolved, G = async (e, t) => {\n e?.name === \"AsyncComponentWrapper\" && (e?.__asyncResolved || (e.__asyncLoader(), await (0, system_js_1.sleepWhile)(() => t() && W(e), 200)));\n }, K = { class: \"top-tabsView_menuOpener\" }, q = [\"data-top-icon\"], J = { class: \"top-ellipsis\" }, Y = { class: \"top-tabsView_menuList\" }, X = {\n key: 0,\n class: \"top-tabsView_menuFooter\"\n }, Z = /* @__PURE__ */ (0, vue_1.defineComponent)({\n __name: \"menu\",\n props: /* @__PURE__ */ (0, vue_1.mergeModels)({\n isShortable: { type: Boolean },\n isLoading: { type: Boolean }\n }, {\n isLoading: {},\n isLoadingModifiers: {}\n }),\n emits: [\"update:isLoading\"],\n setup(e) {\n let t = (0, vue_1.useModel)(e, \"isLoading\"), n = V(), r = (0, vue_1.useSlots)(), i = /* @__PURE__ */ new Map(), a = () => {\n if (!r.default)\n return;\n let e = r.default({}).find((e) => e.key === \"_menu\");\n e && c(e.children);\n }, c = (e) => {\n e.forEach((e) => {\n if (e.type.__name && e.type.__name !== U.__name)\n return;\n if (!e.type.__name && typeof e.children == \"object\") {\n c(e.children);\n return;\n }\n if (!e.props?.name || e.props?.disabled)\n return;\n let t = {\n title: (e.children.default?.()[0].children).trim(),\n icon: e.props.icon,\n component: e.props.component ? (0, vue_1.markRaw)(e.props.component) : U.props.component.default,\n scrollable: e.props.scrollable ?? U.props.scrollable.default\n };\n i.set(e.props.name, t);\n });\n }, l = (0, vue_1.ref)(null), u = 0;\n return (0, vue_1.watch)(() => n.activeItemName, async () => {\n let e = ++u;\n if (i.size === 0 && a(), i.size === 0) {\n n.activeItemName = \"\";\n return;\n }\n if (l.value = i.get(n.activeItemName) ?? null, !l.value && n.$id) {\n let e = (0, route_js_1.getHash)(n.$id);\n if (l.value = i.get(e) ?? null, l.value) {\n n.activeItemName = e;\n return;\n }\n }\n if (!l.value) {\n n.activeItemName = i.keys().next().value;\n return;\n }\n if (l.value.component === n.component) {\n t.value = !1;\n return;\n }\n n.$id && (0, route_js_1.setHash)(n.$id, n.activeItemName, !1), t.value = !0, await G(l.value.component, () => e === u), e === u && (n.scrollable = l.value.scrollable, n.component = l.value.component, l.value && !n.component && console.warn(`Компонент вкладки ${n.activeItemName} не найден. Добавьте props.component для пункта меню ${n.activeItemName}.`));\n }, { immediate: !0 }), (t, r) => ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", { class: (0, vue_1.normalizeClass)({\n \"top-tabsView_menu\": !0,\n \"top-tabsView_menu-inPopup_0\": !(0, vue_1.unref)(n).showMenuInPopup,\n \"top-tabsView_menu-inPopup_1\": (0, vue_1.unref)(n).showMenuInPopup,\n \"top-tabsView_menu-short\": (0, vue_1.unref)(n).isShort && !(0, vue_1.unref)(n).showMenuInPopup\n }) }, [(0, vue_1.unref)(n).showMenuInPopup ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)((0, vue_1.unref)(popup_DrByVU_k_esm_js_1.s), { key: 0 }, {\n opener: (0, vue_1.withCtx)(() => [(0, vue_1.createElementVNode)(\"div\", K, [l.value ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", {\n key: 0,\n class: \"top-tabsView_menuOpenerActiveItem\",\n \"data-top-icon\": l.value.icon\n }, [(0, vue_1.createElementVNode)(\"span\", J, (0, vue_1.toDisplayString)(l.value.title), 1)], 8, q)) : (0, vue_1.createCommentVNode)(\"\", !0), r[1] ||= (0, vue_1.createElementVNode)(\"div\", {\n class: \"top-tabsView_menuOpenerIcon\",\n \"data-top-icon\": \"\"\n }, null, -1)])]),\n contentList: (0, vue_1.withCtx)(() => [(0, vue_1.renderSlot)(t.$slots, \"default\")]),\n _: 3\n })) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(vue_1.Fragment, { key: 1 }, [(0, vue_1.createElementVNode)(\"div\", Y, [(0, vue_1.renderSlot)(t.$slots, \"default\")]), e.isShortable ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", X, [e.isShortable ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(U, {\n key: 0,\n icon: (0, vue_1.unref)(n).isShort ? \"\" : \"\",\n onClick: r[0] ||= (e) => (0, vue_1.unref)(n).isShort = !(0, vue_1.unref)(n).isShort\n }, {\n default: (0, vue_1.withCtx)(() => [(0, vue_1.createTextVNode)((0, vue_1.toDisplayString)((0, vue_1.unref)(n).isShort ? \"\" : \"Свернуть\"), 1)]),\n _: 1\n }, 8, [\"icon\"])) : (0, vue_1.createCommentVNode)(\"\", !0)])) : (0, vue_1.createCommentVNode)(\"\", !0)], 64))], 2));\n }\n }), Q = /* @__PURE__ */ (0, vue_1.defineComponent)({\n __name: \"tabsView\",\n props: /* @__PURE__ */ (0, vue_1.mergeModels)({\n modelValue: {},\n pageMod: { type: Boolean },\n showMenuInPopup: {\n type: Boolean,\n default: void 0\n },\n isShortable: {\n type: Boolean,\n default: !1\n },\n idState: {}\n }, {\n modelValue: {},\n modelModifiers: {}\n }),\n emits: [\"update:modelValue\"],\n setup(n) {\n let r = n, a = B(r, (0, vue_1.useModel)(n, \"modelValue\")), o = Math.random();\n r.pageMod && forms_CbUt_6Ff_esm_js_1.O.state.documentClassModificators.set(o, \"top-hasTabsViewPageMod\"), (0, vue_1.onUnmounted)(() => {\n r.pageMod && forms_CbUt_6Ff_esm_js_1.O.state.documentClassModificators.delete(o), a.$id && (0, route_js_1.delHash)(a.$id, a.activeItemName, !0);\n });\n let s = (0, vue_1.ref)(), c = (0, vue_1.ref)(!1);\n return (0, vue_1.watch)([s, () => a.component], () => {\n c.value = W(a.component);\n }, { immediate: !0 }), (e, i) => ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", { class: (0, vue_1.normalizeClass)({\n \"top-tabsView\": !0,\n \"top-tabsView-pageMod\": r.pageMod,\n \"top-tabsView-inPopup\": (0, vue_1.unref)(a).showMenuInPopup\n }) }, [(0, vue_1.createVNode)(Z, {\n isShortable: n.isShortable,\n isLoading: c.value,\n \"onUpdate:isLoading\": i[0] ||= (e) => c.value = e\n }, {\n default: (0, vue_1.withCtx)(() => [(0, vue_1.renderSlot)(e.$slots, \"menu\")]),\n _: 3\n }, 8, [\"isShortable\", \"isLoading\"]), (0, vue_1.createElementVNode)(\"div\", { class: (0, vue_1.normalizeClass)({\n \"top-tabsView_contents\": !0,\n \"top-tabsView_contents-isLoading\": c.value,\n \"top-tabsView_contents-noScrollable\": !(0, vue_1.unref)(a).scrollable\n }) }, [c.value ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(forms_CbUt_6Ff_esm_js_1.l, { key: 0 })) : (0, vue_1.createCommentVNode)(\"\", !0), ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(vue_1.KeepAlive, null, [((0, vue_1.openBlock)(), (0, vue_1.createBlock)((0, vue_1.resolveDynamicComponent)((0, vue_1.unref)(a).component), {\n ref_key: \"componentRef\",\n ref: s\n }, null, 512))], 1024))], 2)], 2));\n }\n }), $ = {}, ee = { class: \"top-tabsView_menuDelimeter\" };\n exports.TopTabsViewMenuItem = U;\n exports.TopTabsView = Q;\n function te(e, t) {\n return (0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", ee);\n }\n var ne = /* @__PURE__ */ (0, forms_CbUt_6Ff_esm_js_1.u)($, [[\"render\", te]]), re = /* @__PURE__ */ (0, vue_1.defineComponent)({\n __name: \"menuTitle\",\n props: { isSubtitle: { type: Boolean } },\n setup(e) {\n let t = V();\n return (n, r) => (0, vue_1.unref)(t).showMenuInPopup ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)((0, vue_1.unref)(popup_DrByVU_k_esm_js_1.o), {\n key: 0,\n type: \"title\"\n }, {\n default: (0, vue_1.withCtx)(() => [(0, vue_1.renderSlot)(n.$slots, \"default\")]),\n _: 3\n })) : (0, vue_1.unref)(t).isShort ? ((0, vue_1.openBlock)(), (0, vue_1.createBlock)(ne, { key: 1 })) : ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", {\n key: 2,\n class: (0, vue_1.normalizeClass)({\n \"top-tabsView_menuTitle\": !0,\n \"top-tabsView_menuTitle-subtitle\": e.isSubtitle\n })\n }, [(0, vue_1.renderSlot)(n.$slots, \"default\")], 2));\n }\n });\n exports.TopTabsViewMenuTitle = re;\n});\n//# sourceMappingURL=tabsView.js.map\n","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, 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\n</script>\n\n<template>\n\t<div\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: var(--top-tabsView-menu-border-bottom-width) 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-tabsView-menu-opener-padding);\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\t--top-tabsView-menu-border-bottom-width: 1px;\n\t--top-tabsView-menu-opener-padding: var(--top-padding-2);\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\n@media only screen and (max-width: 900px) {\n\t:root {\n\t\t/* Суммарно должна быть высота элемента \".top-tabsView_menu\" */\n\t\t--top-tabsView-contents-offset-top: calc(var(--top-icon-size) + var(--top-tabsView-menu-opener-padding) * 2 + var(--top-tabsView-menu-border-bottom-width));\n\t}\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"]}