@topvisor/ui 1.5.8-7 → 1.5.8-dialogShadow.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/.chunks/{api-BlIxMRlW.amd.js → api-BD74aA98.amd.js} +2 -2
  2. package/.chunks/{api-BlIxMRlW.amd.js.map → api-BD74aA98.amd.js.map} +1 -1
  3. package/.chunks/{api-BlIxMRlW.esm.js → api-BD74aA98.esm.js} +2 -2
  4. package/.chunks/{api-BlIxMRlW.esm.js.map → api-BD74aA98.esm.js.map} +1 -1
  5. package/.chunks/{app-CyODeY0D.amd.js → app-DGsWGbDX.amd.js} +2 -2
  6. package/.chunks/{app-CyODeY0D.amd.js.map → app-DGsWGbDX.amd.js.map} +1 -1
  7. package/.chunks/{app-CyODeY0D.esm.js → app-DGsWGbDX.esm.js} +5 -5
  8. package/.chunks/{app-CyODeY0D.esm.js.map → app-DGsWGbDX.esm.js.map} +1 -1
  9. package/.chunks/{datepicker-CBAwfPPW.amd.js → datepicker-C7FNogyy.amd.js} +2 -2
  10. package/.chunks/{datepicker-CBAwfPPW.amd.js.map → datepicker-C7FNogyy.amd.js.map} +1 -1
  11. package/.chunks/{datepicker-CBAwfPPW.esm.js → datepicker-C7FNogyy.esm.js} +2 -2
  12. package/.chunks/{datepicker-CBAwfPPW.esm.js.map → datepicker-C7FNogyy.esm.js.map} +1 -1
  13. package/.chunks/dialog-DKGzAD_z.amd.js +2 -0
  14. package/.chunks/dialog-DKGzAD_z.amd.js.map +1 -0
  15. package/.chunks/{dialog-C8fss11q.esm.js → dialog-DKGzAD_z.esm.js} +18 -18
  16. package/.chunks/dialog-DKGzAD_z.esm.js.map +1 -0
  17. package/.chunks/{dialog_regionSelectorRegions-zJShjr2f.amd.js → dialog_regionSelectorRegions-BIjtdwxa.amd.js} +2 -2
  18. package/.chunks/{dialog_regionSelectorRegions-zJShjr2f.amd.js.map → dialog_regionSelectorRegions-BIjtdwxa.amd.js.map} +1 -1
  19. package/.chunks/{dialog_regionSelectorRegions-zJShjr2f.esm.js → dialog_regionSelectorRegions-BIjtdwxa.esm.js} +4 -4
  20. package/.chunks/dialog_regionSelectorRegions-BIjtdwxa.esm.js.map +1 -0
  21. package/.chunks/{forms-LywqKN9I.amd.js → forms-_4U0sLFk.amd.js} +2 -2
  22. package/.chunks/forms-_4U0sLFk.amd.js.map +1 -0
  23. package/.chunks/{forms-LywqKN9I.esm.js → forms-_4U0sLFk.esm.js} +116 -116
  24. package/.chunks/forms-_4U0sLFk.esm.js.map +1 -0
  25. package/.chunks/formsExt-BZZEpY-a.amd.js +2 -0
  26. package/.chunks/formsExt-BZZEpY-a.amd.js.map +1 -0
  27. package/.chunks/{formsExt-Iw04hpHr.esm.js → formsExt-BZZEpY-a.esm.js} +183 -183
  28. package/.chunks/formsExt-BZZEpY-a.esm.js.map +1 -0
  29. package/.chunks/{notice-Dw5ZUJxW.amd.js → notice-FzLgMsrr.amd.js} +2 -2
  30. package/.chunks/{notice-Dw5ZUJxW.amd.js.map → notice-FzLgMsrr.amd.js.map} +1 -1
  31. package/.chunks/{notice-Dw5ZUJxW.esm.js → notice-FzLgMsrr.esm.js} +2 -2
  32. package/.chunks/notice-FzLgMsrr.esm.js.map +1 -0
  33. package/.chunks/{popup-BqacuTuJ.amd.js → popup-CS0IahOr.amd.js} +2 -2
  34. package/.chunks/{popup-BqacuTuJ.amd.js.map → popup-CS0IahOr.amd.js.map} +1 -1
  35. package/.chunks/{popup-BqacuTuJ.esm.js → popup-CS0IahOr.esm.js} +3 -3
  36. package/.chunks/{popup-BqacuTuJ.esm.js.map → popup-CS0IahOr.esm.js.map} +1 -1
  37. package/.chunks/popup-DViuKwOc.amd.js +2 -0
  38. package/.chunks/popup-DViuKwOc.amd.js.map +1 -0
  39. package/.chunks/{popup-ClpsGU2P.esm.js → popup-DViuKwOc.esm.js} +104 -104
  40. package/.chunks/popup-DViuKwOc.esm.js.map +1 -0
  41. package/.chunks/{utils-CZnFOkS6.amd.js → utils-BtqYaMHp.amd.js} +2 -2
  42. package/.chunks/{utils-CZnFOkS6.amd.js.map → utils-BtqYaMHp.amd.js.map} +1 -1
  43. package/.chunks/{utils-CZnFOkS6.esm.js → utils-BtqYaMHp.esm.js} +3 -3
  44. package/.chunks/{utils-CZnFOkS6.esm.js.map → utils-BtqYaMHp.esm.js.map} +1 -1
  45. package/.chunks/{utils-ZgQqVN0T.amd.js → utils-Cou0pGI4.amd.js} +2 -2
  46. package/.chunks/utils-Cou0pGI4.amd.js.map +1 -0
  47. package/.chunks/{utils-ZgQqVN0T.esm.js → utils-Cou0pGI4.esm.js} +8 -6
  48. package/.chunks/{utils-ZgQqVN0T.esm.js.map → utils-Cou0pGI4.esm.js.map} +1 -1
  49. package/.chunks/{worker-a6MSM1uV.amd.js → worker-D28QqQ45.amd.js} +2 -2
  50. package/.chunks/{worker-a6MSM1uV.amd.js.map → worker-D28QqQ45.amd.js.map} +1 -1
  51. package/.chunks/{worker-a6MSM1uV.esm.js → worker-D28QqQ45.esm.js} +3 -3
  52. package/.chunks/{worker-a6MSM1uV.esm.js.map → worker-D28QqQ45.esm.js.map} +1 -1
  53. package/api/index.amd.js +1 -1
  54. package/api/index.amd.js.map +1 -1
  55. package/api/index.js +1 -1
  56. package/autoload-css-manifest.amd.json +4 -4
  57. package/autoload-css-manifest.json +4 -4
  58. package/charts/charts.amd.js +1 -1
  59. package/charts/charts.amd.js.map +1 -1
  60. package/charts/charts.js +1 -1
  61. package/core/app.amd.js +1 -1
  62. package/core/app.amd.js.map +1 -1
  63. package/core/app.js +3 -3
  64. package/dialog/dialog.amd.js +1 -1
  65. package/dialog/dialog.amd.js.map +1 -1
  66. package/dialog/dialog.js +2 -2
  67. package/forms/forms.amd.js +1 -1
  68. package/forms/forms.amd.js.map +1 -1
  69. package/forms/forms.js +1 -1
  70. package/formsExt/formsExt.amd.js +1 -1
  71. package/formsExt/formsExt.amd.js.map +1 -1
  72. package/formsExt/formsExt.js +1 -1
  73. package/layout/layout.amd.js +1 -1
  74. package/layout/layout.amd.js.map +1 -1
  75. package/layout/layout.js +3 -3
  76. package/layout/layout.js.map +1 -1
  77. package/package.json +8 -2
  78. package/popup/popup.amd.js +1 -1
  79. package/popup/popup.amd.js.map +1 -1
  80. package/popup/popup.js +1 -1
  81. package/popup/worker.amd.js +1 -1
  82. package/popup/worker.amd.js.map +1 -1
  83. package/popup/worker.js +1 -1
  84. package/project/project.amd.js +1 -1
  85. package/project/project.amd.js.map +1 -1
  86. package/project/project.js +32 -32
  87. package/project/project.js.map +1 -1
  88. package/schedule/schedule.amd.js +1 -1
  89. package/schedule/schedule.amd.js.map +1 -1
  90. package/schedule/schedule.js +90 -90
  91. package/schedule/schedule.js.map +1 -1
  92. package/tabs/tabs.amd.js +1 -1
  93. package/tabs/tabs.amd.js.map +1 -1
  94. package/tabs/tabs.js +3 -3
  95. package/tabs/tabs.js.map +1 -1
  96. package/tabsView/tabsView.amd.js +1 -1
  97. package/tabsView/tabsView.amd.js.map +1 -1
  98. package/tabsView/tabsView.js +11 -11
  99. package/tabsView/tabsView.js.map +1 -1
  100. package/utils/clipboard.amd.js +1 -1
  101. package/utils/clipboard.amd.js.map +1 -1
  102. package/utils/clipboard.js +1 -1
  103. package/utils/date.amd.js +1 -1
  104. package/utils/date.amd.js.map +1 -1
  105. package/utils/date.js +1 -1
  106. package/utils/device.amd.js +1 -1
  107. package/utils/device.amd.js.map +1 -1
  108. package/utils/device.js +1 -1
  109. package/utils/lodash.amd.js +1 -1
  110. package/utils/lodash.amd.js.map +1 -1
  111. package/utils/lodash.js +1 -1
  112. package/utils/price.amd.js +1 -1
  113. package/utils/price.amd.js.map +1 -1
  114. package/utils/price.js +1 -1
  115. package/utils/string.amd.js +1 -1
  116. package/utils/string.amd.js.map +1 -1
  117. package/utils/string.js +1 -1
  118. package/.chunks/dialog-C8fss11q.amd.js +0 -2
  119. package/.chunks/dialog-C8fss11q.amd.js.map +0 -1
  120. package/.chunks/dialog-C8fss11q.esm.js.map +0 -1
  121. package/.chunks/dialog_regionSelectorRegions-zJShjr2f.esm.js.map +0 -1
  122. package/.chunks/forms-LywqKN9I.amd.js.map +0 -1
  123. package/.chunks/forms-LywqKN9I.esm.js.map +0 -1
  124. package/.chunks/formsExt-Iw04hpHr.amd.js +0 -2
  125. package/.chunks/formsExt-Iw04hpHr.amd.js.map +0 -1
  126. package/.chunks/formsExt-Iw04hpHr.esm.js.map +0 -1
  127. package/.chunks/notice-Dw5ZUJxW.esm.js.map +0 -1
  128. package/.chunks/popup-ClpsGU2P.amd.js +0 -2
  129. package/.chunks/popup-ClpsGU2P.amd.js.map +0 -1
  130. package/.chunks/popup-ClpsGU2P.esm.js.map +0 -1
  131. package/.chunks/utils-ZgQqVN0T.amd.js.map +0 -1
@@ -1 +1 @@
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":["vue","exports","c","vue_1","l","u","d","$slots","f","p","m","t","i","h","g"],"mappings":"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","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"]}
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":["vue","exports","c","vue_1","l","u","d","i","f","p","m","t","h","g"],"mappings":"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","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, { slots: i }) {\n return (e, a) => ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"div\", c, [\n (0, vue_1.renderSlot)(e.$slots, \"buttons\"),\n i.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
@@ -13,10 +13,10 @@ var c = { class: /*@__PURE__*/ a({ "top-tabs": !0 }) }, l = {
13
13
  }, u = { class: "top-tabs_contents" }, d = /* @__PURE__ */ i({
14
14
  __name: "tabs",
15
15
  props: { id: {} },
16
- setup(e) {
17
- return (e, i) => (o(), n("div", c, [
16
+ setup(e, { slots: i }) {
17
+ return (e, a) => (o(), n("div", c, [
18
18
  s(e.$slots, "buttons"),
19
- e.$slots.header ? (o(), n("div", l, [s(e.$slots, "header")])) : t("", !0),
19
+ i.header ? (o(), n("div", l, [s(e.$slots, "header")])) : t("", !0),
20
20
  r("div", u, [s(e.$slots, "contents")])
21
21
  ]));
22
22
  }
package/tabs/tabs.js.map CHANGED
@@ -1 +1 @@
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,SAAA;GAEjBA,EAAAA,OAAO,UAAA,EAAA,GAAlB,EAGM,OAHN,GAGM,CADL,EAA2B,EAAA,QAAA,QAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;GAG5B,EAGM,OAHN,GAGM,CADL,EAA6B,EAAA,QAAA,UAAA,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,SAAA,CAAA,GAAA,IAAA,CAAA,CAAA,GAAA,EAAA;;;;;;yBElBd,EAOM,OAAA;GANJ,OAAK,EAAE,EAAA,oBAAA,GAAA,CAEP;GACA,kBAAgB,EAAA;MAEjB,EAAa,EAAA,QAAA,SAAA,CAAA,GAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"tabs.js","names":[],"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,SAAA;GAEjB,EAAO,UAAA,EAAA,GAAlB,EAGM,OAHN,GAGM,CADL,EAA2B,EAAA,QAAA,QAAA,CAAA,CAAA,KAAA,EAAA,IAAA,EAAA;GAG5B,EAGM,OAHN,GAGM,CADL,EAA6B,EAAA,QAAA,UAAA,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,SAAA,CAAA,GAAA,IAAA,CAAA,CAAA,GAAA,EAAA;;;;;;yBElBd,EAOM,OAAA;GANJ,OAAK,EAAE,EAAA,oBAAA,GAAA,CAEP;GACA,kBAAgB,EAAA;MAEjB,EAAa,EAAA,QAAA,SAAA,CAAA,GAAA,GAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- define([`require`,`exports`,`../.chunks/forms-LywqKN9I.amd`,`../utils/system.amd`,`../utils/route.amd`,`../.chunks/store-DjQAOnrn.amd`,`../.chunks/popup-ClpsGU2P.amd`,`vue`,`../require/css.amd!../assets/tabsView.css`],function(e,t,n,r,i,a,o,s){"use strict";if(c===void 0)var c=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.TopTabsViewMenuTitle=t.TopTabsViewMenuItem=t.TopTabsView=void 0;var l=(e,t)=>`top:${String(e)}:${t}`,u={loadLocalStorge:(e,t)=>{if(!t.$id)return;let n=l(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=l(e,t.$id);(0,s.watch)(()=>t[e],()=>{localStorage.setItem(n,JSON.stringify(t[e]))},{immediate:!0})}},d=new Set;addEventListener(`popstate`,e=>{d.forEach(t=>t(e))});var f=Symbol(),p=(e,t)=>{let r=(0,a.t)(f,()=>({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`;u.loadLocalStorge(e,r),u.addSaverLocalStorge(e,r)}return r.$id&&d.add(e=>{t.value=(0,i.getHash)(r.$id)}),r},m=()=>(0,a.r)(f),h={key:1,class:`top-ellipsis`},g=(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=m(),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.value?`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`,{},void 0,void 0,0):t.$slots.default&&!(0,s.unref)(n).isShort?((0,s.openBlock)(),(0,s.createElementBlock)(`span`,h,[(0,s.renderSlot)(t.$slots,`default`)])):(0,s.createCommentVNode)(``,!0)]),_:3},8,[`class`,`href`,`data-top-icon`,`disabled`]))}}),_=e=>e?.name===`AsyncComponentWrapper`&&!e?.__asyncResolved,v=async(e,t)=>{e?.name===`AsyncComponentWrapper`&&(e?.__asyncResolved||(e.__asyncLoader(),await(0,r.sleepWhile)(()=>t()&&_(e),200)))},y={class:`top-tabsView_menuOpener`},b=[`data-top-icon`],x={class:`top-ellipsis`},S={class:`top-tabsView_menuList`},C={key:0,class:`top-tabsView_menuFooter`},w=(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=m(),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!==g.__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):g.props.component.default,scrollable:e.props.scrollable??g.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 v(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`,y,[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`,x,(0,s.toDisplayString)(u.value.title),1)],8,b)):(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`,S,[(0,s.renderSlot)(t.$slots,`default`)]),e.isShortable?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,C,[e.isShortable?((0,s.openBlock)(),(0,s.createBlock)(g,{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))}}),T=(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=p(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,!0)});let o=(0,s.ref)(),c=(0,s.ref)(!1);return(0,s.watch)([o,()=>r.component],()=>{c.value=_(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)(w,{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))}}),E={},D={class:`top-tabsView_menuDelimeter`};t.TopTabsViewMenuItem=g,t.TopTabsView=T;function O(e,t){return(0,s.openBlock)(),(0,s.createElementBlock)(`div`,D)}var k=(0,n.u)(E,[[`render`,O]]);t.TopTabsViewMenuTitle=(0,s.defineComponent)({__name:`menuTitle`,props:{isSubtitle:{type:Boolean}},setup(e){let t=m();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)(k,{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))}})});
1
+ define([`require`,`exports`,`../.chunks/forms-_4U0sLFk.amd`,`../utils/system.amd`,`../utils/route.amd`,`../.chunks/store-DjQAOnrn.amd`,`../.chunks/popup-DViuKwOc.amd`,`vue`,`../require/css.amd!../assets/tabsView.css`],function(e,t,n,r,i,a,o,s){"use strict";if(c===void 0)var c=window.Vue;Object.defineProperty(t,"__esModule",{value:!0}),t.TopTabsViewMenuTitle=t.TopTabsViewMenuItem=t.TopTabsView=void 0;var l=(e,t)=>`top:${String(e)}:${t}`,u={loadLocalStorge:(e,t)=>{if(!t.$id)return;let n=l(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=l(e,t.$id);(0,s.watch)(()=>t[e],()=>{localStorage.setItem(n,JSON.stringify(t[e]))},{immediate:!0})}},d=new Set;addEventListener(`popstate`,e=>{d.forEach(t=>t(e))});var f=Symbol(),p=(e,t)=>{let r=(0,a.t)(f,()=>({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`;u.loadLocalStorge(e,r),u.addSaverLocalStorge(e,r)}return r.$id&&d.add(e=>{t.value=(0,i.getHash)(r.$id)}),r},m=()=>(0,a.r)(f),h={key:1,class:`top-ellipsis`},g=(0,s.defineComponent)({__name:`menuItem`,props:{name:{},href:{},icon:{},disabled:{type:Boolean},component:{default:void 0},scrollable:{type:Boolean,default:!0}},setup(e,{slots:t}){let n=e,r=m(),a=(0,s.computed)(()=>n.name&&r.$id?(0,i.genHash)(r.$id,n.name):n.href),c=(0,s.computed)(()=>r.showMenuInPopup?o.o:a.value?`a`:`button`),l=e=>{!n.href&&a.value&&e.preventDefault(),n.name&&(r.activeItemName=n.name)};return(n,i)=>((0,s.openBlock)(),(0,s.createBlock)((0,s.resolveDynamicComponent)(c.value),{target:`_self`,class:(0,s.normalizeClass)({"top-tabsView_menuItem":!(0,s.unref)(r).showMenuInPopup,"top-active":e.name&&(0,s.unref)(r).activeItemName===e.name,"top-disabled":e.disabled,"top-spa-disabled":!0}),href:a.value,"data-top-icon":e.icon||void 0,disabled:e.disabled||void 0,onClick:l},{default:(0,s.withCtx)(()=>[(0,s.unref)(r).showMenuInPopup?(0,s.renderSlot)(n.$slots,`default`,{},void 0,void 0,0):t.default&&!(0,s.unref)(r).isShort?((0,s.openBlock)(),(0,s.createElementBlock)(`span`,h,[(0,s.renderSlot)(n.$slots,`default`)])):(0,s.createCommentVNode)(``,!0)]),_:3},8,[`class`,`href`,`data-top-icon`,`disabled`]))}}),_=e=>e?.name===`AsyncComponentWrapper`&&!e?.__asyncResolved,v=async(e,t)=>{e?.name===`AsyncComponentWrapper`&&(e?.__asyncResolved||(e.__asyncLoader(),await(0,r.sleepWhile)(()=>t()&&_(e),200)))},y={class:`top-tabsView_menuOpener`},b=[`data-top-icon`],x={class:`top-ellipsis`},S={class:`top-tabsView_menuList`},C={key:0,class:`top-tabsView_menuFooter`},w=(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=m(),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!==g.__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):g.props.component.default,scrollable:e.props.scrollable??g.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 v(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`,y,[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`,x,(0,s.toDisplayString)(u.value.title),1)],8,b)):(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`,S,[(0,s.renderSlot)(t.$slots,`default`)]),e.isShortable?((0,s.openBlock)(),(0,s.createElementBlock)(`div`,C,[e.isShortable?((0,s.openBlock)(),(0,s.createBlock)(g,{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))}}),T=(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=p(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,!0)});let o=(0,s.ref)(),c=(0,s.ref)(!1);return(0,s.watch)([o,()=>r.component],()=>{c.value=_(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)(w,{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))}}),E={},D={class:`top-tabsView_menuDelimeter`};t.TopTabsViewMenuItem=g,t.TopTabsView=T;function O(e,t){return(0,s.openBlock)(),(0,s.createElementBlock)(`div`,D)}var k=(0,n.u)(E,[[`render`,O]]);t.TopTabsViewMenuTitle=(0,s.defineComponent)({__name:`menuTitle`,props:{isSubtitle:{type:Boolean}},setup(e){let t=m();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)(k,{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
2
  //# sourceMappingURL=tabsView.amd.js.map
@@ -1 +1 @@
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":["vue","exports","I","L","vue_1","R","z","B","store_DjQAOnrn_esm_js_1","t","forms_LywqKN9I_esm_js_1","n","route_js_1","V","H","U","i","popup_ClpsGU2P_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":"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","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/forms-LywqKN9I.esm.js\", \"../utils/system.js\", \"../utils/route.js\", \"../.chunks/store-DjQAOnrn.esm.js\", \"../.chunks/popup-ClpsGU2P.esm.js\", \"vue\"], function (require, exports, forms_LywqKN9I_esm_js_1, system_js_1, route_js_1, store_DjQAOnrn_esm_js_1, popup_ClpsGU2P_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_DjQAOnrn_esm_js_1.t)(z, () => ({\n showMenuInPopup: (0, vue_1.computed)(() => t.showMenuInPopup ?? forms_LywqKN9I_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_DjQAOnrn_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_ClpsGU2P_esm_js_1.o : r.value ? \"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\", {}, void 0, void 0, 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_ClpsGU2P_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_LywqKN9I_esm_js_1.O.state.documentClassModificators.set(o, \"top-hasTabsViewPageMod\"), (0, vue_1.onUnmounted)(() => {\n r.pageMod && forms_LywqKN9I_esm_js_1.O.state.documentClassModificators.delete(o), a.$id && (0, route_js_1.delHash)(a.$id, !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_LywqKN9I_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_LywqKN9I_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_ClpsGU2P_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};\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.value ? '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: () => boolean) => {\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, 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"]}
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":["vue","exports","I","L","vue_1","R","z","B","store_DjQAOnrn_esm_js_1","t","forms__4U0sLFk_esm_js_1","n","route_js_1","V","H","U","i","o","popup_DViuKwOc_esm_js_1","s","W","G","system_js_1","K","q","J","Y","X","Z","a","c","l","u","Q","r","e","$","ee","te","ne"],"mappings":"AAAA,OAAO,CAAC,UAAW,UAAW,gCAAoC,sBAAsB,qBAAqB,gCAAoC,gCAAoC,MAAK,2CAAA,EAAA,SAAa,EAAS,EAAS,EAAyB,EAAa,EAAY,EAAyB,EAAyB,EAAO,CAChU,aAAA,GAAAA,IAAA,OAAA,IAAAA,EAAA,OAAA,IACA,OAAO,eAAeC,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,EAAQ,qBAAuB,EAAQ,oBAAsB,EAAQ,YAAc,IAAK,GAExF,IAAIC,GAAK,EAAG,IAAM,OAAO,OAAO,CAAC,EAAE,GAAG,IAAKC,EAAI,CAC3C,iBAAkB,EAAG,IAAM,CCEyB,GAAA,CAAA,EAGpD,IA0CP,OAhCW,IAAK,EAAAD,EAAA,EAAA,EAAA,GAAA,EAEsB,GAAW,CAE7C,IAAA,EAAA,KAAA,MAAA,aAAA,QAAA,CAAA,CAAA,EAC8D,OAAM,GAAA,OAAa,EAAA,KAAuB,EAAW,GAAA,EAE3G,MAGC,CACC,QAAA,KAAU,MAAA,kBAAkC,EAAA,qBAAsB,CAAA,CAChF,CACD,EAoBC,qBAbiE,EAAa,IAAA,CAEnE,GAAK,CAAA,EAAA,IAEiC,OAE/B,IAAA,EAAAA,EAAkB,EAAA,EAAA,GAAA,GACnC,EAAaE,EAAA,MAAyB,KAAK,EAAA,OAA2B,CAClE,aAAiB,QAAA,EAAA,KAAA,UAAA,EAAA,EAAA,CAAA,CACvB,EAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CC1CM,CAEN,EAAAC,EAAiB,IAAa,IACX,iBAA8C,WAAC,GAAA,CACjEA,EAAA,QAAA,GAAA,EAAA,CAAA,CAAA,CAEY,CAAA,EAMZ,IAAMC,EAAoB,OAAA,EAQlBC,GAAA,EAAA,IAAA,CACN,IAAA,GAAA,EARuBC,EAAqB,EAAA,CAAAF,OAA8B,CAC3D,iBAQf,EAAAF,EAAA,SAAA,KAAAK,EAAA,iBAAAC,EAAA,EAAA,MAAA,QAAA,EAPe,SAQf,EAAAN,EAAA,SAAA,KAAAK,EAAA,OAAA,EACA,SAAgB,EAAAL,EAAA,IAAA,CAAA,CAAA,CAAA,EAChB,eAAAO,EACA,WAAA,EAAAP,EAAA,IAAA,CAAA,IAAA,EAAA,EAEO,YAAO,EAAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAEN,GAAAK,EAAA,OAAa,EAChB,GAAYA,EAAA,YAAA,CAEA,IAAA,EAAgB,UAEnCN,EAAA,gBAAA,EAAA,CAAA,EAAAA,EAAA,oBAAA,EAAA,CAAA,CAEI,CAEI,OAAgB,EAAM,KAAIE,EAAA,IAAA,GAAA,CAM3B,EAAA,OAAA,EAAAO,EAAA,QAAA,CAAA,EAAA,GAAA,CAMK,CAAA,EAAA,CFbT,EAAGC,OAAW,EAAGL,EAAwB,EAAC,CAAEF,CAAC,EAAGQ,EAAI,CAChD,IAAK,EACL,MAAO,cACX,EAAGC,GAAqB,EAAGX,EAAM,gBAAe,CAAE,CAC9C,OAAQ,WACR,MAAO,CACH,KAAM,CAAC,EACP,KAAM,CAAC,EACP,KAAM,CAAC,EACP,SAAU,CAAE,KAAM,OAAQ,EAC1B,UAAW,CAAE,QAAS,IAAK,EAAE,EAC7B,WAAY,CACR,KAAM,QACN,QAAS,CAAC,CACd,CACJ,EGtDF,MAKA,EAAQ,CAAa,MAEd,GAAA,CAsBD,IAAa,EAAA,EAAA,EACrBS,EAAA,EAAAG,GAAA,EAAAZ,EAGC,SAAM,KACH,EAAA,MAAA,EAAA,KAAuB,EAAAQ,EAAA,QAAA,CAAA,EAAA,IAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAAK,GAAA,EAAAb,EAAA,SAAA,KAAA,EAAA,gBAAAc,EAAA,EAAAF,EAAA,MAAA,IAAA,QAAA,EAAAG,EAAA,GAAA,CAE/B,CAAA,EAAA,MAAAH,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,KHsBY,EGhBH,OAAA,EAAA,MAAA,EAAAZ,EAAA,UAAA,CAAA,GAAA,EAAAA,EAAA,YAAA,EAAA,EAAAA,EAAA,wBAAA,CAAAa,EAAA,KAAA,EAAA,CACD,OAAA,QHkBQ,OAAQ,EAAGb,EGlBgB,eAAM,CAAA,CAAoC,wBAAc,EAAA,EAAAA,EAAmB,MAAA,CAAA,CAAA,CAAA,CAAA,gBAA2B,aAAA,EAAA,OAAA,EAAAA,EAAA,MAAA,CAAA,CAAA,CAAA,CAAA,iBAAA,EAAA,KHqB7H,eAAgB,EAAE,SAClB,mBAAoB,CAAC,CGhBhC,CAAA,EACN,KAAeY,EAAA,MACL,gBAAY,EAAA,MAAA,IAAA,GACf,SAAA,EAAA,UAAA,IAAA,GHkBM,QAASG,CACb,EAAG,CACC,SAAU,EAAGf,EAAM,QAAO,KAAQ,EAAE,EAAGA,EAAM,MAAK,CAAE,CAAC,CAAC,CAAC,iBAAmB,EAAGA,EAAM,WAAU,CAAE,EAAE,OAAQ,UAAW,CAAC,EAAG,IAAK,GAAG,IAAK,GAAG,CAAC,EAAI,EAAE,SAAW,EAAE,EAAGA,EAAM,MAAK,CAAE,CAAC,CAAC,CAAC,UAAY,EAAGA,EAAM,UAAS,CAAE,GAAI,EAAGA,EAAM,mBAAkB,CAAE,OAAQU,EAAG,EAAE,EAAGV,EAAM,WAAU,CAAE,EAAE,OAAQ,SAAS,CAAC,CAAC,IAAM,EAAGA,EAAM,mBAAkB,CAAE,GAAI,CAAC,CAAC,CAAC,CAAC,EAClV,EAAG,CACP,EAAG,EAAG,CACF,QACA,OACA,gBACA,UACJ,CAAC,EI9EA,CAUG,CAAA,EAAAgB,EAAS,GAAA,GAAA,OAAA,yBACT,CAAA,GAAA,gBAELC,EAEV,MAAM,EAAA,IACY,CAEnB,GAAA,OAAA,0BAAA,GAAA,kBAAA,EAAA,cAAA,EAAA,MAAA,EAAAC,EAAA,WAAA,KAAA,EAAA,GAAAF,EAAA,CAAA,EAAA,GAAA,GJgEI,EAAGG,EAAI,CAAE,MAAO,yBAA0B,EAAGC,EAAI,CAAC,eAAe,EAAGC,EAAI,CAAE,MAAO,cAAe,EAAGC,EAAI,CAAE,MAAO,uBAAwB,EAAGC,EAAI,CAC3I,IAAK,EACL,MAAO,yBACX,EAAGC,GAAqB,EAAGxB,EAAM,gBAAe,CAAE,CAC9C,OAAQ,OACR,OAAsB,EAAGA,EAAM,YAAW,CAAE,CACxC,YAAa,CAAE,KAAM,OAAQ,EAC7B,UAAW,CAAE,KAAM,OAAQ,CAC/B,EAAG,CACC,UAAW,CAAC,EACZ,mBAAoB,CAAC,CACzB,CAAC,EACD,MAAO,CAAC,kBAAkB,EKzF5B,MAAuB,EAAC,CAWlB,IAAA,GAAS,EAAAA,EAAA,SAAA,CAAA,EAAA,WAAA,EAAA,EAAAS,EAAA,EAAA,GAAA,EAAAT,EAAA,SAAA,CAAA,EAAAY,EAAA,IAAA,IAAAa,MAAA,CAES,GAAA,CAAQ,EAAE,QAGM,OAIa,IAAA,EAAA,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA,KAAA,GAAA,EAAA,MAAA,OAAA,EACvC,GAAsBC,EAAA,EAAA,QAAA,CAEvB,EAAKA,EAAA,GAAU,CAGT,EAAA,QAAU,GAAO,CACS,GAAA,EAAA,KAAA,QAAA,EAAA,KAAA,SAAAf,EAAA,OAEhD,OACD,GAAA,CAAA,EAAA,KAAA,QAAA,OAAA,EAAA,UAAA,SAAA,CAEyBe,EAAQ,EAAa,QAAO,EAE1B,MACL,CACI,GAAA,CAAA,EAAA,OAAA,MAAA,EAAA,OAAA,SACK,OACL,IAAA,EAAM,CAChC,OAAA,EAAA,SAAA,UAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,KAAA,EAE4C,KAAQ,EAAA,MAAA,KACpD,UAAA,EAAA,MAAA,WAAA,EAAA1B,EAAA,QAAA,CAAA,EAAA,MAAA,SAAA,EAAAW,EAAA,MAAA,UAAA,QAciB,WAAA,EAAA,MAAA,YAAAA,EAAA,MAAA,WAAA,OAQN,EAEaC,EAAA,IAAA,EAAA,MAAA,KAAA,CAAA,CAEL,CAAA,CAKZ,EAAAe,GAAA,EAAiB3B,EAAA,IAAA,CAAA,IAAA,EAAA4B,EAAA,EAEvB,OAAA,EAAA5B,EAAA,MAAA,KAAA,EAAA,eAAA,SAAA,CACD,IAAA,EAAA,EAAA4B,EAEe,GAAuBhB,EAAA,OAAU,GAAAa,EAAA,EAAcb,EAAA,OAGzD,EAAe,CACqB,EAAA,eAAA,GAEF,MAG/B,CAEN,GAAA,EAAA,MAAAA,EAAA,IAAA,EAAA,cAAA,GAAA,KAAA,CAAAe,EAAA,OAAA,EAAA,IAAA,CACD,IAAA,GAAA,EAAAnB,EAAA,QAAA,CAAA,EAAA,GAAA,EACD,GAAA,EAAA,MAAAI,EAAA,IAAA,CAAA,GAAA,KAAAe,EAAA,MAAA,CAG2B,EAAA,eAAA,EACH,MAEvB,CACD,CAGyB,GAAA,CAAAA,EAAA,MAAc,CACpB,EAAA,eAAAf,EAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA,MAElB,MACD,CAE6B,GAAAe,EAAK,MAAM,YAAqB,EAG7D,UAAkB,CAqBN,EACd,MAAA,CAAA,ELEoB,MACJ,CACA,EAAE,MAAQ,EAAGnB,EKE+G,QAAA,CAAA,EAAA,IAAA,EAAA,eAAA,CAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAAA,MAAAS,EAAAU,EAAA,MAAA,cAAA,IAAAC,CAAA,EAAA,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,EAAA,ELDhI,EAAG,CAAE,UAAW,CAAC,CKC8J,CAAA,GAAM,EAAA,MAAY,EAAA3B,EAAM,UAAA,CAAA,GAAA,EAAAA,EAAA,mBAAA,CAAA,MAAA,CAAA,OAAA,EAAAA,EAAA,eAAA,CAAA,CAQ3L,oBAoBX,CAAA,EAlBT,8BASO,EAAA,EAAAA,EAAA,MAAA,CAAA,CAAA,CAAA,CAAA,gBLjBS,+BAAgC,EAAGA,EAAM,MAAK,CAAE,CAAC,CAAC,CAAC,gBKW3D,2BAAA,EAAAA,EAAA,MAAA,CAAA,CAAA,CAAA,CAAA,SAAA,EAAA,EAAAA,EAAA,MAAA,CAAA,CAAA,CAAA,CAAA,eACL,CAAA,CAAA,EAAe,EAAA,EAAAA,EAAe,MAAA,CAAA,CAAA,CAAA,CAAA,kBAAA,EAAAA,EAAA,UAAA,CAAA,GAAA,EAAAA,EAAA,YAAA,EAAA,EAAAA,EAAA,MAAA,CAAAc,EAAA,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAIxB,QADH,EAAed,EAAK,QAAA,KAAA,EAAA,EAAAA,EAAA,mBAIwC,CAAA,MAAAmB,EAAA,CAAAQ,EAAA,QAAA,EAAA3B,EAAA,UAAA,CAAA,GAAA,EAAAA,EAAA,mBAAA,CAAA,MAAA,CAAtD,IAAA,EAA4C,MAAA,oCLb5B,gBAAiB2B,EAAE,MAAM,IKkBxC,EAAA,EAAA,EAAA3B,EAAA,mBAAA,CAAA,OAAAqB,GAAA,EAAArB,EAAA,gBAAA,CAAA2B,EAAA,MAAA,KAAA,EAAA,CAAA,CAAA,EAAA,EAAAP,CAAA,IAAA,EAAApB,EAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,EAAA,EAAA,MAAA,EAAAA,EAAA,mBAAA,CAAA,MAAA,CLhBe,MAAO,8BKsBpC,gBACc,GLrBW,EAAG,KAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EK8BzB,aAAO,EAAAA,EAAA,QAAA,KAAA,EAAA,EAAAA,EAAA,WAAA,CAAA,EAAA,OAAA,SAAA,CAAA,CAAA,EACd,EAAA,CL5BK,CAAC,KAAO,EAAGA,EAAM,UAAS,CAAE,GAAI,EAAGA,EAAM,mBAAkB,CAAEA,EAAM,SAAU,CAAE,IAAK,CAAE,EAAG,EAAE,EAAGA,EAAM,mBAAkB,CAAE,MAAOsB,EAAG,EAAE,EAAGtB,EAAM,WAAU,CAAE,EAAE,OAAQ,SAAS,CAAC,CAAC,EAAG,EAAE,cAAgB,EAAGA,EAAM,UAAS,CAAE,GAAI,EAAGA,EAAM,mBAAkB,CAAE,MAAOuB,EAAG,CAAC,EAAE,cAAgB,EAAGvB,EAAM,UAAS,CAAE,GAAI,EAAGA,EAAM,YAAW,CAAEW,EAAG,CK8B9U,IAAM,EL5Bc,MAAO,EAAGX,EAAM,MAAK,CAAE,CAAC,CAAC,CAAC,QAAU,IAAM,IAC1C,QAAS,EAAE,KAAQ,GAAM,CAAC,EAAGA,EAAM,MAAK,CAAE,CAAC,CAAC,CAAC,QAAU,EAAE,EAAGA,EAAM,MAAK,CAAE,CAAC,CAAC,CAAC,OAChF,EAAG,CACC,SAAU,EAAGA,EAAM,QAAO,KAAQ,EAAE,EAAGA,EAAM,gBAAe,EAAG,EAAGA,EAAM,gBAAe,EAAG,EAAGA,EAAM,MAAK,CAAE,CAAC,CAAC,CAAC,QAAU,GAAK,UAAU,EAAG,CAAC,CAAC,CAAC,EAC5I,EAAG,CACP,EAAG,EAAG,CAAC,MAAM,CAAC,IAAM,EAAGA,EAAM,mBAAkB,CAAE,GAAI,CAAC,CAAC,CAAC,CAAC,IAAM,EAAGA,EAAM,mBAAkB,CAAE,GAAI,CAAC,CAAC,CAAC,EAAG,EAAE,EAAE,EAAG,CAAC,EAC9H,CACJ,CAAC,EAAG6B,GAAqB,EAAG7B,EAAM,gBAAe,CAAE,CAC/C,OAAQ,WACR,OAAsB,EAAGA,EAAM,YAAW,CAAE,CACxC,WAAY,CAAC,EACb,QAAS,CAAE,KAAM,OAAQ,EACzB,gBAAiB,CACb,KAAM,QACN,QAAS,IAAK,EAClB,EACA,YAAa,CACT,KAAM,QACN,QAAS,CAAC,CACd,EACA,QAAS,CAAC,CACd,EAAG,CACC,WAAY,CAAC,EMpLX,eAKmB,CAAA,CAMvB,CAAA,EAGC,MAAA,CAAS,mBAAW,EAG9B,MAAA,EAAA,CAEwB,IACnB8B,EAAYvB,EAASkB,EAAAtB,EAAA2B,GAAA,EAAA9B,EAAA,SAAA,CAAAO,EAAA,YAAA,CAAA,EAAAM,EAAA,KAAA,OAAA,EAEpBiB,EAAA,SAA0BxB,EAAkB,EAAA,MAAA,0BAAA,IAAAO,EAAA,wBAAA,GAAA,EAAAb,EAAA,YAAA,KAAA,CACR8B,EAAM,SAASxB,EAAA,EAAA,MAAA,0BAAA,OAAAO,CAAA,EAAAY,EAAA,MAAA,EAAAjB,EAAA,QAAA,CAAAiB,EAAA,IAAA,CAAA,CAAA,CACrD,CAAA,ENqKO,IAAIV,GAAK,EAAGf,EAAM,IAAG,CAAE,EAAG,GAAK,EAAGA,EAAM,IAAG,CAAE,CAAC,CAAC,EAC/C,OAAQ,EAAGA,EMjK+C,MAAA,CAAA,CAAAe,MAAAU,EAAA,SAAA,MAAA,CNkKtD,EAAE,MAAQT,EMlKgFS,EAAA,SAAM,CAY/F,EAAA,CAAA,UAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAAzB,EAAA,UAAA,CAAA,GAAA,EAAAA,EAAA,mBAAA,CAAA,MAAA,CAAA,OAAA,EAAAA,EAAA,eAAA,CAAA,CALA,eAAA,CAAA,EACK,uBAAA8B,EAAA,QN8JF,wBM9JW,EAAA9B,EAAA,MAAA,CAAAyB,CAAA,CAAA,CAAA,eN+Jf,CAAC,CAAE,EAAG,EAAE,EAAGzB,EAAM,YAAW,CAAEwB,EAAG,CM5JrB,YAAAjB,EAAA,YN8JR,UAAW,EAAE,MACb,qBM7IZ,EAAA,KAdJ,GAAK,EAAA,MAAA,CN4JO,EAAG,CACC,SAAU,EAAGP,EM7JsD,QAAA,KAAA,EAAA,EAAAA,EAAA,WAAA,CAAA+B,EAAA,OAAA,MAAA,CAAA,CAAA,EN8JnE,EAAG,CMxJF,EAAA,EAAA,CAAA,cAAY,WAAA,CAAA,GAAA,EAAA/B,EAE9B,mBACC,CAGE,MADU,CAAA,OAAS,EAAAA,EAAA,eAAA,CAAA,CADhB,wBAAA,CAAA,EAAA,kCAAA,EAAA,MNwJe,qCAAsC,EAAE,EAAGA,EAAM,MAAK,CAAEyB,CAAC,CAAC,CAAC,UAC/D,CAAC,CAAE,EAAG,CAAC,EAAE,QAAU,EAAGzB,EAAM,UAAS,CAAE,GAAI,EAAGA,EAAM,YAAW,CAAEM,EAAwB,EAAG,CAAE,IAAK,CAAE,CAAC,IAAM,EAAGN,EAAM,mBAAkB,CAAE,GAAI,CAAC,CAAC,IAAK,EAAGA,EAAM,UAAS,CAAE,GAAI,EAAGA,EAAM,YAAW,CAAEA,EAAM,UAAW,KAAM,GAAG,EAAGA,EAAM,UAAS,CAAE,GAAI,EAAGA,EAAM,YAAW,EAAG,EAAGA,EAAM,wBAAuB,EAAG,EAAGA,EAAM,MAAK,CAAEyB,CAAC,CAAC,CAAC,SAAS,EAAG,COpNrV,QAAA,ePsNgB,IAAKV,COtNc,EAAA,KAAA,GAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,CAAA,EAAA,CAAA,EPwNvC,CACJ,CAAC,EAAGiB,EAAI,CAAC,EAAGC,EAAK,CAAE,MAAO,4BAA6B,EACvD,EAAQ,oBAAsBtB,EAC9B,EAAQ,YAAckB,EACtB,SAASK,EAAG,EAAG,EAAG,CQzNhB,OAAqB,EAAAlC,EAAA,UAAA,CAAA,GAAA,EAAAA,EAAA,mBAAA,CAAA,MAAAiC,CAAA,CR2NvB,CACA,IAAIE,GAAoB,EAAG7B,EAAwB,EAAC,CAAE0B,EAAG,CAAC,CAAC,SAAUE,CAAE,CAAC,CAAC,EAoBzE,EAAQ,sBApB0F,EAAGlC,EAAM,gBAAe,CAAE,CQtN9H,OAAK,YRwNC,MAAO,CAAE,WAAY,CAAE,KAAM,OAAQ,CAAE,EACvC,MAAM,EAAG,CACL,IAAI,EAAIS,EAAE,EQrNkB,OAAC,EAAA,KAAxC,EAAkDT,EAAA,MAAA,CAAA,CAAA,CAAA,CAAA,kBAU5C,EAAAA,EAAA,UAAA,CAAA,GAAA,EAAAA,EAAA,YAAA,EAAA,EAAAA,EAAA,MAAA,CAAAc,EAAA,CAAA,EAAA,CR6MS,IAAK,EQnNb,KAAA,ORqNI,EAAG,CACC,SAAU,EAAGd,EAAM,QQtNkD,KAAA,EAAA,EAAAA,EAAA,WAAA,CAAA,EAAA,OAAA,SAAA,CAAA,CAAA,ERuNrE,EAAG,CQlNJ,CAAA,IAAA,EAAAA,EAAA,MAAA,CAAA,CAAA,CAAA,CAAA,UAAA,EAAAA,EAAA,UAAA,CAAA,GAAA,EAAAA,EAAA,YAAA,CAAAmC,EAAA,CAAA,IAAA,CAAA,CAAA,KAAA,EAAAnC,EAAA,UAAA,CAAA,GAAA,EAAAA,EAAA,mBAAA,CAAA,MAAA,CRoNC,IAAK,EACL,OAAQ,EAAGA,EAAM,eAAc,CAAE,CAC7B,yBAA0B,CAAC,EAC3B,kCAAmC,EAAE,UACzC,CAAC,CACL,EAAG,EAAE,EAAGA,EAAM,WAAU,CAAE,EAAE,OAAQ,SAAS,CAAC,EAAG,CAAC,EACtD,CACJ,CACgC,CACpC,CAAC","sourcesContent":["define([\"require\", \"exports\", \"../.chunks/forms-_4U0sLFk.esm.js\", \"../utils/system.js\", \"../utils/route.js\", \"../.chunks/store-DjQAOnrn.esm.js\", \"../.chunks/popup-DViuKwOc.esm.js\", \"vue\"], function (require, exports, forms__4U0sLFk_esm_js_1, system_js_1, route_js_1, store_DjQAOnrn_esm_js_1, popup_DViuKwOc_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_DjQAOnrn_esm_js_1.t)(z, () => ({\n showMenuInPopup: (0, vue_1.computed)(() => t.showMenuInPopup ?? forms__4U0sLFk_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_DjQAOnrn_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, { slots: t }) {\n let n = e, r = V(), i = (0, vue_1.computed)(() => n.name && r.$id ? (0, route_js_1.genHash)(r.$id, n.name) : n.href), o = (0, vue_1.computed)(() => r.showMenuInPopup ? popup_DViuKwOc_esm_js_1.o : i.value ? \"a\" : \"button\"), s = (e) => {\n !n.href && i.value && e.preventDefault(), n.name && (r.activeItemName = n.name);\n };\n return (n, a) => ((0, vue_1.openBlock)(), (0, vue_1.createBlock)((0, vue_1.resolveDynamicComponent)(o.value), {\n target: \"_self\",\n class: (0, vue_1.normalizeClass)({\n \"top-tabsView_menuItem\": !(0, vue_1.unref)(r).showMenuInPopup,\n \"top-active\": e.name && (0, vue_1.unref)(r).activeItemName === e.name,\n \"top-disabled\": e.disabled,\n \"top-spa-disabled\": !0\n }),\n href: i.value,\n \"data-top-icon\": e.icon || void 0,\n disabled: e.disabled || void 0,\n onClick: s\n }, {\n default: (0, vue_1.withCtx)(() => [(0, vue_1.unref)(r).showMenuInPopup ? (0, vue_1.renderSlot)(n.$slots, \"default\", {}, void 0, void 0, 0) : t.default && !(0, vue_1.unref)(r).isShort ? ((0, vue_1.openBlock)(), (0, vue_1.createElementBlock)(\"span\", H, [(0, vue_1.renderSlot)(n.$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_DViuKwOc_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__4U0sLFk_esm_js_1.O.state.documentClassModificators.set(o, \"top-hasTabsViewPageMod\"), (0, vue_1.onUnmounted)(() => {\n r.pageMod && forms__4U0sLFk_esm_js_1.O.state.documentClassModificators.delete(o), a.$id && (0, route_js_1.delHash)(a.$id, !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__4U0sLFk_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__4U0sLFk_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_DViuKwOc_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};\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.value ? '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: () => boolean) => {\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, 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"]}
@@ -5,11 +5,11 @@
5
5
  _autoloadCSSCore.insertCSSLinkToPage(fileNames, true);
6
6
  /* end import css */
7
7
 
8
- import { O as e, l as t, u as n } from "../.chunks/forms-LywqKN9I.esm.js";
8
+ import { O as e, l as t, u as n } from "../.chunks/forms-_4U0sLFk.esm.js";
9
9
  import { sleepWhile as r } from "../utils/system.js";
10
10
  import { delHash as i, genHash as a, getHash as o, setHash as s } from "../utils/route.js";
11
11
  import { r as c, t as l } from "../.chunks/store-DjQAOnrn.esm.js";
12
- import { o as u, s as d } from "../.chunks/popup-ClpsGU2P.esm.js";
12
+ import { o as u, s as d } from "../.chunks/popup-DViuKwOc.esm.js";
13
13
  import { Fragment as f, KeepAlive as p, computed as m, createBlock as h, createCommentVNode as g, createElementBlock as _, createElementVNode as v, createTextVNode as y, createVNode as b, defineComponent as x, markRaw as S, mergeModels as C, normalizeClass as w, onUnmounted as T, openBlock as E, ref as D, renderSlot as O, resolveDynamicComponent as k, toDisplayString as A, unref as j, useModel as M, useSlots as N, watch as P, withCtx as F } from "vue";
14
14
  //#region src/core/utils/store/localStorage.ts
15
15
  var I = (e, t) => `top:${String(e)}:${t}`, L = {
@@ -66,24 +66,24 @@ var z = Symbol(), B = (t, n) => {
66
66
  default: !0
67
67
  }
68
68
  },
69
- setup(e) {
70
- let t = e, n = V(), r = m(() => t.name && n.$id ? a(n.$id, t.name) : t.href), i = m(() => n.showMenuInPopup ? u : r.value ? "a" : "button"), o = (e) => {
71
- !t.href && r.value && e.preventDefault(), t.name && (n.activeItemName = t.name);
69
+ setup(e, { slots: t }) {
70
+ let n = e, r = V(), i = m(() => n.name && r.$id ? a(r.$id, n.name) : n.href), o = m(() => r.showMenuInPopup ? u : i.value ? "a" : "button"), s = (e) => {
71
+ !n.href && i.value && e.preventDefault(), n.name && (r.activeItemName = n.name);
72
72
  };
73
- return (t, a) => (E(), h(k(i.value), {
73
+ return (n, a) => (E(), h(k(o.value), {
74
74
  target: "_self",
75
75
  class: w({
76
- "top-tabsView_menuItem": !j(n).showMenuInPopup,
77
- "top-active": e.name && j(n).activeItemName === e.name,
76
+ "top-tabsView_menuItem": !j(r).showMenuInPopup,
77
+ "top-active": e.name && j(r).activeItemName === e.name,
78
78
  "top-disabled": e.disabled,
79
79
  "top-spa-disabled": !0
80
80
  }),
81
- href: r.value,
81
+ href: i.value,
82
82
  "data-top-icon": e.icon || void 0,
83
83
  disabled: e.disabled || void 0,
84
- onClick: o
84
+ onClick: s
85
85
  }, {
86
- default: F(() => [j(n).showMenuInPopup ? O(t.$slots, "default", {}, void 0, void 0, 0) : t.$slots.default && !j(n).isShort ? (E(), _("span", H, [O(t.$slots, "default")])) : g("", !0)]),
86
+ default: F(() => [j(r).showMenuInPopup ? O(n.$slots, "default", {}, void 0, void 0, 0) : t.default && !j(r).isShort ? (E(), _("span", H, [O(n.$slots, "default")])) : g("", !0)]),
87
87
  _: 3
88
88
  }, 8, [
89
89
  "class",