@topvisor/ui 0.9.34-utils-components-3 → 0.9.34-utils-components-5

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 (282) hide show
  1. package/.chunks/{datepicker-CtnkRS5e.es.js → datepicker-Bh_DAFqD.es.js} +2 -2
  2. package/.chunks/{datepicker-CtnkRS5e.es.js.map → datepicker-Bh_DAFqD.es.js.map} +1 -1
  3. package/.chunks/{datepicker-DquD9mIq.amd.js → datepicker-CIbLjf_3.amd.js} +2 -2
  4. package/.chunks/{datepicker-DquD9mIq.amd.js.map → datepicker-CIbLjf_3.amd.js.map} +1 -1
  5. package/.chunks/forms-BfIXIMY_.es.js +1089 -0
  6. package/.chunks/forms-BfIXIMY_.es.js.map +1 -0
  7. package/.chunks/forms-C__H1yL_.amd.js +3 -0
  8. package/.chunks/forms-C__H1yL_.amd.js.map +1 -0
  9. package/.chunks/i18n-BNGjUFTp.amd.js +2 -0
  10. package/.chunks/i18n-BNGjUFTp.amd.js.map +1 -0
  11. package/.chunks/i18n-DCbk4MSK.es.js +20 -0
  12. package/.chunks/i18n-DCbk4MSK.es.js.map +1 -0
  13. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CaBP5R7L.amd.js +2 -0
  14. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CaBP5R7L.amd.js.map +1 -0
  15. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DJZS6vRL.es.js +161 -0
  16. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-DJZS6vRL.es.js.map +1 -0
  17. package/.chunks/{menu-DFQAjecc.es.js → menu-24EpQtdy.es.js} +37 -37
  18. package/.chunks/menu-24EpQtdy.es.js.map +1 -0
  19. package/.chunks/menu-DV1iSTyB.amd.js +2 -0
  20. package/.chunks/menu-DV1iSTyB.amd.js.map +1 -0
  21. package/.chunks/popup-BKd_kjT8.amd.js +440 -0
  22. package/.chunks/popup-BKd_kjT8.amd.js.map +1 -0
  23. package/.chunks/{popup-BoqfTf-1.es.js → popup-DwpeWN20.es.js} +57 -53
  24. package/.chunks/popup-DwpeWN20.es.js.map +1 -0
  25. package/assets/forms.css +1 -1
  26. package/assets/formsExt.css +1 -1
  27. package/common/common.d.ts +1 -1
  28. package/{src/components → components}/formsExt/editInput/editInput.vue.d.ts +1 -10
  29. package/{src/components → components}/formsExt/formsExt.d.ts +2 -0
  30. package/components/formsExt/selector2/itemMulti.vue.d.ts +18 -0
  31. package/components/formsExt/selector2/selector2.vue.d.ts +132 -0
  32. package/{src/components → components}/popup/lib/popup.d.ts +0 -3
  33. package/{src/components → components}/popup/lib/worker.d.ts +0 -4
  34. package/core/app.amd.js +2 -0
  35. package/core/app.amd.js.map +1 -0
  36. package/core/app.d.ts +7 -0
  37. package/core/app.js +307 -0
  38. package/core/app.js.map +1 -0
  39. package/{src/core → core}/core/core.d.ts +17 -24
  40. package/core/core/options.d.ts +24 -0
  41. package/{src/core → core}/core/state.d.ts +3 -2
  42. package/core/core.amd.js +1 -1
  43. package/core/core.d.ts +2 -2
  44. package/core/core.js +1 -1
  45. package/core/directives/focus.d.ts +9 -3
  46. package/core/directives/sticky.d.ts +11 -3
  47. package/core/directives/swimUp.d.ts +10 -3
  48. package/core/directives/tooltip.d.ts +11 -3
  49. package/{src/core/plugin/plugin.d.ts → core/plugins/core.d.ts} +14 -17
  50. package/core/plugins/i18n.d.ts +98 -0
  51. package/core/plugins/piniaTPA.d.ts +18 -0
  52. package/core/utils/clipboard.d.ts +1 -0
  53. package/{src/core → core}/utils/price.d.ts +3 -1
  54. package/{src/core → core}/utils/system.d.ts +0 -1
  55. package/forms/forms.amd.js +1 -1
  56. package/forms/forms.d.ts +1 -1
  57. package/forms/forms.js +7 -7
  58. package/forms/helpers.d.ts +1 -1
  59. package/formsExt/formsExt.amd.js +1 -1
  60. package/formsExt/formsExt.amd.js.map +1 -1
  61. package/formsExt/formsExt.d.ts +1 -1
  62. package/formsExt/formsExt.js +357 -122
  63. package/formsExt/formsExt.js.map +1 -1
  64. package/package.json +5 -1
  65. package/popup/popup.amd.js +1 -1
  66. package/popup/popup.amd.js.map +1 -1
  67. package/popup/popup.d.ts +1 -1
  68. package/popup/popup.js +6 -6
  69. package/popup/worker.amd.js +1 -1
  70. package/popup/worker.amd.js.map +1 -1
  71. package/popup/worker.d.ts +2 -2
  72. package/popup/worker.js +5 -7
  73. package/popup/worker.js.map +1 -1
  74. package/project/project.amd.js +1 -1
  75. package/project/project.amd.js.map +1 -1
  76. package/project/project.d.ts +1 -1
  77. package/project/project.js +7 -7
  78. package/project/project.js.map +1 -1
  79. package/tabs/tabs.amd.js +1 -1
  80. package/tabs/tabs.d.ts +1 -1
  81. package/tabs/tabs.js +5 -5
  82. package/tabsView/tabsView.amd.js +1 -1
  83. package/tabsView/tabsView.amd.js.map +1 -1
  84. package/tabsView/tabsView.d.ts +1 -1
  85. package/tabsView/tabsView.js +8 -8
  86. package/tabsView/tabsView.js.map +1 -1
  87. package/utils/check.d.ts +1 -1
  88. package/utils/clipboard.amd.js +2 -0
  89. package/utils/clipboard.amd.js.map +1 -0
  90. package/utils/clipboard.d.ts +1 -0
  91. package/utils/clipboard.js +10 -0
  92. package/utils/clipboard.js.map +1 -0
  93. package/utils/css.d.ts +1 -1
  94. package/utils/date.amd.js +1 -1
  95. package/utils/date.d.ts +1 -1
  96. package/utils/date.js +4 -4
  97. package/utils/device.amd.js +1 -1
  98. package/utils/device.d.ts +1 -1
  99. package/utils/device.js +5 -5
  100. package/utils/dom.d.ts +2 -2
  101. package/utils/image.d.ts +1 -1
  102. package/utils/keyboard.d.ts +1 -1
  103. package/utils/number.d.ts +1 -1
  104. package/utils/price.amd.js +1 -1
  105. package/utils/price.amd.js.map +1 -1
  106. package/utils/price.d.ts +1 -1
  107. package/utils/price.js +8 -5
  108. package/utils/price.js.map +1 -1
  109. package/utils/route.d.ts +1 -1
  110. package/utils/scroll.amd.js +1 -1
  111. package/utils/scroll.d.ts +1 -1
  112. package/utils/scroll.js +1 -1
  113. package/utils/store.d.ts +1 -1
  114. package/utils/string.amd.js +1 -1
  115. package/utils/string.amd.js.map +1 -1
  116. package/utils/string.d.ts +1 -1
  117. package/utils/string.js +38 -35
  118. package/utils/string.js.map +1 -1
  119. package/utils/system.amd.js +1 -1
  120. package/utils/system.amd.js.map +1 -1
  121. package/utils/system.d.ts +1 -1
  122. package/utils/system.js +16 -17
  123. package/utils/system.js.map +1 -1
  124. package/utils/url.d.ts +1 -1
  125. package/utils/window.amd.js +1 -1
  126. package/utils/window.d.ts +1 -1
  127. package/utils/window.js +1 -1
  128. package/web-types.json +62 -62
  129. package/.chunks/forms-CvUw0pdr.amd.js +0 -3
  130. package/.chunks/forms-CvUw0pdr.amd.js.map +0 -1
  131. package/.chunks/forms-zlyhVXZ9.es.js +0 -1186
  132. package/.chunks/forms-zlyhVXZ9.es.js.map +0 -1
  133. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C0vCVRTn.amd.js +0 -2
  134. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C0vCVRTn.amd.js.map +0 -1
  135. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C1JdWeQq.es.js +0 -164
  136. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C1JdWeQq.es.js.map +0 -1
  137. package/.chunks/menu-D8OY3zle.amd.js +0 -2
  138. package/.chunks/menu-D8OY3zle.amd.js.map +0 -1
  139. package/.chunks/menu-DFQAjecc.es.js.map +0 -1
  140. package/.chunks/popup-31lyEYe3.amd.js +0 -440
  141. package/.chunks/popup-31lyEYe3.amd.js.map +0 -1
  142. package/.chunks/popup-BoqfTf-1.es.js.map +0 -1
  143. package/core/directives/focus.amd.js +0 -2
  144. package/core/directives/focus.amd.js.map +0 -1
  145. package/core/directives/focus.js +0 -5
  146. package/core/directives/focus.js.map +0 -1
  147. package/core/directives/sticky.amd.js +0 -2
  148. package/core/directives/sticky.amd.js.map +0 -1
  149. package/core/directives/sticky.js +0 -5
  150. package/core/directives/sticky.js.map +0 -1
  151. package/core/directives/swimUp.amd.js +0 -2
  152. package/core/directives/swimUp.amd.js.map +0 -1
  153. package/core/directives/swimUp.js +0 -5
  154. package/core/directives/swimUp.js.map +0 -1
  155. package/core/directives/tooltip.amd.js +0 -2
  156. package/core/directives/tooltip.amd.js.map +0 -1
  157. package/core/directives/tooltip.js +0 -5
  158. package/core/directives/tooltip.js.map +0 -1
  159. package/core/plugin/plugin.amd.js +0 -2
  160. package/core/plugin/plugin.amd.js.map +0 -1
  161. package/core/plugin/plugin.d.ts +0 -3
  162. package/core/plugin/plugin.js +0 -23
  163. package/core/plugin/plugin.js.map +0 -1
  164. package/src/components/forms/avatar/avatar.stories.d.ts +0 -85
  165. package/src/components/forms/button/button.stories.d.ts +0 -278
  166. package/src/components/forms/checkbox/checkbox.stories.d.ts +0 -116
  167. package/src/components/forms/controlLabel/controlLabel.stories.d.ts +0 -65
  168. package/src/components/forms/hint/hint.stories.d.ts +0 -75
  169. package/src/components/forms/input/input.stories.d.ts +0 -226
  170. package/src/components/forms/inputDate/inputDate.stories.d.ts +0 -117
  171. package/src/components/forms/inputRange/inputRange.stories.d.ts +0 -285
  172. package/src/components/forms/loadbar/loadbar.stories.d.ts +0 -10
  173. package/src/components/forms/radio/radio.stories.d.ts +0 -132
  174. package/src/components/forms/select/select.stories.d.ts +0 -108
  175. package/src/components/forms/switcher/switcher.stories.d.ts +0 -127
  176. package/src/components/forms/textarea/textarea.stories.d.ts +0 -90
  177. package/src/components/formsExt/editArea/editArea.stories.d.ts +0 -158
  178. package/src/components/formsExt/editInput/editInput.stories.d.ts +0 -98
  179. package/src/components/formsExt/menu/menu.stories.d.ts +0 -82
  180. package/src/components/formsExt/radioGroup/radioGroup.stories.d.ts +0 -67
  181. package/src/components/formsExt/selector2/selector2.stories.d.ts +0 -277
  182. package/src/components/popup/popup/popup.stories.d.ts +0 -701
  183. package/src/components/project/selectorCompetitors/selectorCompetitors.stories.d.ts +0 -43
  184. package/src/components/tabs/tabs/tabs.stories.d.ts +0 -539
  185. package/src/components/tabsView/tabsView/tabsView.stories.d.ts +0 -352
  186. package/src/components/tabsView/tabsView//320/255/320/273/320/265/320/274/320/265/320/275/321/202/321/213/MenuItem.stories.d.ts +0 -333
  187. package/src/components/tabsView/tabsView//320/255/320/273/320/265/320/274/320/265/320/275/321/202/321/213/MenuTitle.stories.d.ts +0 -175
  188. package/src/core/core/options.d.ts +0 -13
  189. package/src/core/core/page.d.ts +0 -7
  190. package/src/core/directives/focus.d.ts +0 -9
  191. package/src/core/directives/sticky.d.ts +0 -11
  192. package/src/core/directives/swimUp.d.ts +0 -10
  193. package/src/core/directives/tooltip.d.ts +0 -11
  194. /package/{src/components → components}/common/common.d.ts +0 -0
  195. /package/{src/components → components}/common/icon/icon.d.ts +0 -0
  196. /package/{src/components → components}/forms/avatar/avatar.d.ts +0 -0
  197. /package/{src/components → components}/forms/avatar/avatar.vue.d.ts +0 -0
  198. /package/{src/components → components}/forms/button/button.d.ts +0 -0
  199. /package/{src/components → components}/forms/button/button.vue.d.ts +0 -0
  200. /package/{src/components → components}/forms/checkbox/checkbox.d.ts +0 -0
  201. /package/{src/components → components}/forms/checkbox/checkbox.vue.d.ts +0 -0
  202. /package/{src/components → components}/forms/controlLabel/controlLabel.d.ts +0 -0
  203. /package/{src/components → components}/forms/controlLabel/controlLabel.vue.d.ts +0 -0
  204. /package/{src/components → components}/forms/forms.d.ts +0 -0
  205. /package/{src/components → components}/forms/helpers.d.ts +0 -0
  206. /package/{src/components → components}/forms/hint/hint.d.ts +0 -0
  207. /package/{src/components → components}/forms/hint/hint.vue.d.ts +0 -0
  208. /package/{src/components → components}/forms/input/input.d.ts +0 -0
  209. /package/{src/components → components}/forms/input/input.vue.d.ts +0 -0
  210. /package/{src/components → components}/forms/inputDate/datepicker.d.ts +0 -0
  211. /package/{src/components → components}/forms/inputDate/inputDate.d.ts +0 -0
  212. /package/{src/components → components}/forms/inputDate/inputDate.vue.d.ts +0 -0
  213. /package/{src/components → components}/forms/inputRange/inputRange.d.ts +0 -0
  214. /package/{src/components → components}/forms/inputRange/inputRange.vue.d.ts +0 -0
  215. /package/{src/components → components}/forms/loadbar/loadbar.vue.d.ts +0 -0
  216. /package/{src/components → components}/forms/radio/radio.d.ts +0 -0
  217. /package/{src/components → components}/forms/radio/radio.vue.d.ts +0 -0
  218. /package/{src/components → components}/forms/select/select.d.ts +0 -0
  219. /package/{src/components → components}/forms/select/select.vue.d.ts +0 -0
  220. /package/{src/components → components}/forms/select/stories/exampleOptions.d.ts +0 -0
  221. /package/{src/components → components}/forms/switcher/switcher.d.ts +0 -0
  222. /package/{src/components → components}/forms/switcher/switcher.vue.d.ts +0 -0
  223. /package/{src/components → components}/forms/textarea/textarea.d.ts +0 -0
  224. /package/{src/components → components}/forms/textarea/textarea.vue.d.ts +0 -0
  225. /package/{src/components → components}/formsExt/editArea/editArea.d.ts +0 -0
  226. /package/{src/components → components}/formsExt/editArea/editArea.vue.d.ts +0 -0
  227. /package/{src/components → components}/formsExt/editInput/editInput.d.ts +0 -0
  228. /package/{src/components → components}/formsExt/menu/menu.d.ts +0 -0
  229. /package/{src/components → components}/formsExt/menu/menu.vue.d.ts +0 -0
  230. /package/{src/components → components}/formsExt/menu/stories/items.d.ts +0 -0
  231. /package/{src/components → components}/formsExt/radioGroup/radioGroup.d.ts +0 -0
  232. /package/{src/components → components}/formsExt/radioGroup/radioGroup.vue.d.ts +0 -0
  233. /package/{src/components → components}/formsExt/selector2/api.d.ts +0 -0
  234. /package/{src/components → components}/formsExt/selector2/selector2.d.ts +0 -0
  235. /package/{src/components → components}/formsExt/selector2/stories/dummyAPIRequest.d.ts +0 -0
  236. /package/{src/components → components}/popup/lib/popup.globalEvents.d.ts +0 -0
  237. /package/{src/components → components}/popup/lib/worker.globalEvents.d.ts +0 -0
  238. /package/{src/components → components}/popup/popup/listItem.vue.d.ts +0 -0
  239. /package/{src/components → components}/popup/popup/opener.vue.d.ts +0 -0
  240. /package/{src/components → components}/popup/popup/popup.d.ts +0 -0
  241. /package/{src/components → components}/popup/popup/popup.vue.d.ts +0 -0
  242. /package/{src/components → components}/popup/popup/widgetInput.vue.d.ts +0 -0
  243. /package/{src/components → components}/popup/popup.d.ts +0 -0
  244. /package/{src/components → components}/popup/worker.d.ts +0 -0
  245. /package/{src/components → components}/project/project.d.ts +0 -0
  246. /package/{src/components → components}/project/selectorCompetitors/composables.d.ts +0 -0
  247. /package/{src/components → components}/project/selectorCompetitors/selectorCompetitors.d.ts +0 -0
  248. /package/{src/components → components}/project/selectorCompetitors/selectorCompetitors.vue.d.ts +0 -0
  249. /package/{src/components → components}/project/selectorCompetitors/stories/items.d.ts +0 -0
  250. /package/{src/components → components}/project/selectorCompetitors/types/competitor.d.ts +0 -0
  251. /package/{src/components → components}/tabs/tabs/content.vue.d.ts +0 -0
  252. /package/{src/components → components}/tabs/tabs/tab.vue.d.ts +0 -0
  253. /package/{src/components → components}/tabs/tabs/tabs.d.ts +0 -0
  254. /package/{src/components → components}/tabs/tabs/tabs.vue.d.ts +0 -0
  255. /package/{src/components → components}/tabs/tabs.d.ts +0 -0
  256. /package/{src/components → components}/tabsView/tabsView/menu.vue.d.ts +0 -0
  257. /package/{src/components → components}/tabsView/tabsView/menuDelimeter.vue.d.ts +0 -0
  258. /package/{src/components → components}/tabsView/tabsView/menuItem.vue.d.ts +0 -0
  259. /package/{src/components → components}/tabsView/tabsView/menuTitle.vue.d.ts +0 -0
  260. /package/{src/components → components}/tabsView/tabsView/store.d.ts +0 -0
  261. /package/{src/components → components}/tabsView/tabsView/tabsView.d.ts +0 -0
  262. /package/{src/components → components}/tabsView/tabsView/tabsView.vue.d.ts +0 -0
  263. /package/{src/components → components}/tabsView/tabsView/utils.d.ts +0 -0
  264. /package/{src/components → components}/tabsView/tabsView.d.ts +0 -0
  265. /package/{src/core → core}/core/events.d.ts +0 -0
  266. /package/{src/core → core}/utils/check.d.ts +0 -0
  267. /package/{src/core → core}/utils/css.d.ts +0 -0
  268. /package/{src/core → core}/utils/date.d.ts +0 -0
  269. /package/{src/core → core}/utils/device.d.ts +0 -0
  270. /package/{src/core → core}/utils/dom.d.ts +0 -0
  271. /package/{src/core → core}/utils/image.d.ts +0 -0
  272. /package/{src/core → core}/utils/keyboard.d.ts +0 -0
  273. /package/{src/core → core}/utils/number.d.ts +0 -0
  274. /package/{src/core → core}/utils/route.d.ts +0 -0
  275. /package/{src/core → core}/utils/scroll.d.ts +0 -0
  276. /package/{src/core → core}/utils/store/localStorage.d.ts +0 -0
  277. /package/{src/core → core}/utils/store/plugin.d.ts +0 -0
  278. /package/{src/core → core}/utils/store/store.d.ts +0 -0
  279. /package/{src/core → core}/utils/store.d.ts +0 -0
  280. /package/{src/core → core}/utils/string.d.ts +0 -0
  281. /package/{src/core → core}/utils/url.d.ts +0 -0
  282. /package/{src/core → core}/utils/window.d.ts +0 -0
@@ -0,0 +1,161 @@
1
+ import { insertToPage as g } from "../utils/css.js";
2
+ import { defineComponent as B, onUpdated as b, openBlock as s, createElementBlock as r, Fragment as _, createElementVNode as H, renderSlot as a, ref as S, toRef as h, onUnmounted as T, createBlock as y, unref as f, withCtx as P, createCommentVNode as l, Teleport as D, toDisplayString as N, normalizeClass as w, resolveDynamicComponent as L, mergeProps as M } from "vue";
3
+ import { C } from "./forms-BfIXIMY_.es.js";
4
+ import { TopPopupWorker as $ } from "../popup/worker.js";
5
+ const I = ["../assets/listItem.css"].map((i) => import.meta.resolve(i));
6
+ g(I, !0);
7
+ const R = /* @__PURE__ */ B({
8
+ __name: "opener",
9
+ props: {
10
+ id: {},
11
+ pos: { default: "3" },
12
+ notch: { type: Boolean, default: !0 },
13
+ openByHover: { type: Boolean },
14
+ posBy: { default: "fixed" }
15
+ },
16
+ setup(i) {
17
+ const t = i, n = t.id || Math.random() + "";
18
+ let p;
19
+ function m(o) {
20
+ setTimeout(() => {
21
+ p = o.nextElementSibling, p && u(p);
22
+ });
23
+ }
24
+ b(() => {
25
+ p && u(p);
26
+ });
27
+ function u(o) {
28
+ o.dataset.topPopup = "vue-" + n, o.dataset.topPopupId = n, o.dataset.topPopupP = t.pos, o.dataset.topPopupPosBy = t.posBy, o.dataset.topPopupNotch = t.notch ? "true" : "", o.dataset.topPopupOpenByHover = t.openByHover ? "true" : "";
29
+ }
30
+ return (o, d) => (s(), r(_, null, [
31
+ H("template", { ref: m }),
32
+ a(o.$slots, "default")
33
+ ], 64));
34
+ }
35
+ }), V = {
36
+ key: 0,
37
+ class: "top-popup_header"
38
+ }, E = {
39
+ key: 0,
40
+ class: "top-as-a closer"
41
+ }, U = {
42
+ key: 1,
43
+ class: "top-popup_widget"
44
+ }, W = {
45
+ key: 2,
46
+ class: "top-popup_content"
47
+ }, z = {
48
+ key: 4,
49
+ class: "top-popup_footer"
50
+ }, K = /* @__PURE__ */ B({
51
+ __name: "popup",
52
+ props: {
53
+ id: { default: "" },
54
+ class: {},
55
+ transitionDuration: {},
56
+ pos: { default: "3" },
57
+ notch: { type: Boolean, default: !0 },
58
+ openByHover: { type: Boolean },
59
+ posBy: { default: "fixed" }
60
+ },
61
+ emits: ["open", "close", "scrollContentList"],
62
+ setup(i, { expose: t, emit: n }) {
63
+ const p = i, m = n, u = {
64
+ popup: void 0
65
+ };
66
+ t(u);
67
+ const o = p.id || Math.random() + "", d = S(null), c = {
68
+ onOpen: async (e) => {
69
+ e.elPopupInner && (e.elPopupInner.innerText = "", d.value = e.elPopupInner), c.opened = !0, c.popup = e, u.popup = e, m("open");
70
+ },
71
+ onClose: (e) => {
72
+ d.value = null, c.opened = !1, c.popup = void 0, m("close");
73
+ },
74
+ classRef: h(p, "class"),
75
+ opened: !1,
76
+ popup: void 0,
77
+ transitionDurationRef: h(p, "transitionDuration")
78
+ };
79
+ return $.regVueComponent(o, c), T(() => {
80
+ $.unregVueComponent(o);
81
+ }), (e, v) => (s(), r(_, null, [
82
+ e.$slots.opener ? (s(), y(R, {
83
+ key: 0,
84
+ id: f(o),
85
+ pos: e.pos,
86
+ posBy: e.posBy,
87
+ notch: e.notch,
88
+ openByHover: e.openByHover
89
+ }, {
90
+ default: P(() => [
91
+ a(e.$slots, "opener")
92
+ ]),
93
+ _: 3
94
+ }, 8, ["id", "pos", "posBy", "notch", "openByHover"])) : l("", !0),
95
+ d.value ? (s(), y(D, {
96
+ key: 1,
97
+ to: d.value
98
+ }, [
99
+ e.$slots.header || f(C).state.isMobile ? (s(), r("div", V, [
100
+ f(C).state.isMobile ? (s(), r("span", E, N(e.$i18n.Common.Close), 1)) : l("", !0),
101
+ a(e.$slots, "header")
102
+ ])) : l("", !0),
103
+ e.$slots.widget ? (s(), r("div", U, [
104
+ a(e.$slots, "widget")
105
+ ])) : l("", !0),
106
+ e.$slots.content ? (s(), r("div", W, [
107
+ a(e.$slots, "content")
108
+ ])) : l("", !0),
109
+ e.$slots.contentList ? (s(), r("ul", {
110
+ key: 3,
111
+ class: "top-popup_content",
112
+ onScroll: v[0] || (v[0] = (k) => e.$emit("scrollContentList", k))
113
+ }, [
114
+ a(e.$slots, "contentList")
115
+ ], 32)) : l("", !0),
116
+ e.$slots.footer ? (s(), r("div", z, [
117
+ a(e.$slots, "footer")
118
+ ])) : l("", !0)
119
+ ], 8, ["to"])) : l("", !0)
120
+ ], 64));
121
+ }
122
+ }), O = /* @__PURE__ */ B({
123
+ inheritAttrs: !1,
124
+ __name: "listItem",
125
+ props: {
126
+ type: { default: "button" },
127
+ closeByClick: { type: Boolean, default: !0 }
128
+ },
129
+ setup(i) {
130
+ const t = i;
131
+ return (n, p) => (s(), r("li", {
132
+ class: w({
133
+ "top-popup_liNoSelectable": t.type !== "button"
134
+ })
135
+ }, [
136
+ (s(), y(L(n.$attrs.href ? "a" : "div"), M({
137
+ class: {
138
+ "top-popup_listItem": !0,
139
+ "top-popup_listItem-button": t.type === "button",
140
+ // оформления кнопки
141
+ a: t.type === "button",
142
+ // оформления кнопки, deprecated
143
+ "top-popup_listItem-title": t.type === "title",
144
+ "top-popup_listItem-delimiter": t.type === "delimiter",
145
+ "top-popup-noCloser": !n.closeByClick
146
+ }
147
+ }, n.$attrs), {
148
+ default: P(() => [
149
+ a(n.$slots, "default")
150
+ ]),
151
+ _: 3
152
+ }, 16, ["class"]))
153
+ ], 2));
154
+ }
155
+ });
156
+ export {
157
+ K as _,
158
+ O as a,
159
+ R as b
160
+ };
161
+ //# sourceMappingURL=listItem.vue_vue_type_script_setup_true_lang-DJZS6vRL.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listItem.vue_vue_type_script_setup_true_lang-DJZS6vRL.es.js","sources":["../../src/components/popup/popup/opener.vue","../../src/components/popup/popup/popup.vue","../../src/components/popup/popup/listItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { onUpdated, ref } from 'vue';\r\nimport type { OpenerProps } from './popup';\r\n\r\nconst props = withDefaults(defineProps<OpenerProps>(), {\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst id = props.id || Math.random() + '';\r\n\r\nlet elOpener: Element;\r\n\r\n/**\r\n * Необычная функция для проброски props внтурь элемента слота\r\n *\r\n * @param el - вспомогательрный элемент для доступа к элементам слота\r\n */\r\nfunction render(el: any) {\r\n\tsetTimeout(() => {\r\n\t\telOpener = el.nextElementSibling;\r\n\r\n\t\tif (elOpener) {\r\n\t\t\trenderOpener(elOpener);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nonUpdated(() => {\r\n\tif (elOpener) {\r\n\t\trenderOpener(elOpener);\r\n\t}\r\n});\r\n\r\nfunction renderOpener (elOpener: any) {\r\n\telOpener.dataset.topPopup = 'vue-' + id;\r\n\telOpener.dataset.topPopupId = id;\r\n\telOpener.dataset.topPopupP = props.pos;\r\n\telOpener.dataset.topPopupPosBy = props.posBy;\r\n\telOpener.dataset.topPopupNotch = props.notch ? 'true' : '';\r\n\telOpener.dataset.topPopupOpenByHover = props.openByHover ? 'true' : '';\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<template :ref=\"render\"></template>\r\n\r\n\t<!-- @slot элемент для открытия Popup -->\r\n\t<slot></slot>\r\n</template>\r\n\r\n<!-- Использует общий deprecated класс .btn -->\r\n<style>\r\nh3[data-top-popup],\r\ndiv[data-top-popup],\r\ni[data-top-popup]:not(.btn),\r\nb[data-top-popup]:not(.btn) {\r\n\tcursor: pointer;\r\n\tuser-select: none;\r\n\tfont-style: normal;\r\n\ttext-decoration: none;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n}\r\n\r\n[data-top-popup][data-top-popup-disabled] {\r\n\tpointer-events: none;\r\n\tcursor: auto !important;\r\n}\r\n\r\ni[contenteditable] {\r\n\tcursor: text !important;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { ref, toRef, onUnmounted } from 'vue';\r\nimport type { Ref } from 'vue';\r\nimport Core from '@/core/core/core';\r\nimport type { Props, Emits } from './popup';\r\nimport Opener from './opener.vue';\r\nimport Worker from '@/components/popup/lib/worker';\r\nimport type PopupClass from '@/components/popup/lib/popup';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tid: '',\r\n\tpos: '3',\r\n\tnotch: true,\r\n\tposBy: 'fixed',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst expose = {\r\n\tpopup: undefined as PopupClass | undefined,\r\n};\r\ndefineExpose(expose);\r\n\r\nconst id = props.id || Math.random() + '';\r\nconst elPopupRef: Ref<null | Element> = ref(null);\r\n\r\n// см. lib/popup\r\nconst onOpen = async (popup: PopupClass) => {\r\n\tif (popup.elPopupInner) {\r\n\t\tpopup.elPopupInner.innerText = '';\r\n\r\n\t\telPopupRef.value = popup.elPopupInner;\r\n\t}\r\n\r\n\tvueConnector.opened = true;\r\n\tvueConnector.popup = popup;\r\n\r\n\texpose.popup = popup;\r\n\r\n\temit('open');\r\n};\r\n\r\n// см. lib/popup\r\nconst onClose = (_popup: PopupClass) => {\r\n\telPopupRef.value = null;\r\n\r\n\tvueConnector.opened = false;\r\n\tvueConnector.popup = undefined;\r\n\r\n\temit('close');\r\n};\r\n\r\nconst vueConnector = {\r\n\tonOpen,\r\n\tonClose,\r\n\tclassRef: toRef(props, 'class'),\r\n\topened: false,\r\n\tpopup: undefined as PopupClass | undefined,\r\n\ttransitionDurationRef: toRef(props, 'transitionDuration'),\r\n};\r\n\r\nWorker.regVueComponent(id, vueConnector);\r\n\r\nonUnmounted(() => {\r\n\tWorker.unregVueComponent(id);\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<Opener\r\n\t\tv-if=\"$slots.opener\"\r\n\t\t:id=\"id\"\r\n\t\t:pos=\"pos\"\r\n\t\t:posBy=\"posBy\"\r\n\t\t:notch=\"notch\"\r\n\t\t:openByHover=\"openByHover\"\r\n\t>\r\n\t\t<!-- @slot элемент для открытия Popup -->\r\n\t\t<slot name=\"opener\"></slot>\r\n\t</Opener>\r\n\r\n\t<!-- Это шаблон для компонента Popup, сам Popup генерируется в js и может находиться где угодно -->\r\n\t<!-- elPopupRef будет установлен только после открытия и будет сброшен сразу после закрытия Popup -->\r\n\t<teleport\r\n\t\tv-if=\"elPopupRef\"\r\n\t\t:to=\"elPopupRef\"\r\n\t>\r\n\t\t<div v-if=\"$slots.header || Core.state.isMobile\" class=\"top-popup_header\">\r\n\t\t\t<span\r\n\t\t\t\tv-if=\"Core.state.isMobile\"\r\n\t\t\t\tclass=\"top-as-a closer\"\r\n\t\t\t>\r\n\t\t\t\t{{ $i18n.Common.Close }}\r\n\t\t\t</span>\r\n\r\n\t\t\t<!-- @slot Шапка -->\r\n\t\t\t<slot name=\"header\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div v-if=\"$slots.widget\" class=\"top-popup_widget\">\r\n\t\t\t<!-- @slot Виджет -->\r\n\t\t\t<slot name=\"widget\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<div v-if=\"$slots.content\" class=\"top-popup_content\">\r\n\t\t\t<!-- @slot Контент в свободной форме -->\r\n\t\t\t<slot name=\"content\"></slot>\r\n\t\t</div>\r\n\r\n\t\t<ul\r\n\t\t\tv-if=\"$slots.contentList\"\r\n\t\t\tclass=\"top-popup_content\"\r\n\t\t\t@scroll=\"$emit('scrollContentList', $event)\"\r\n\t\t>\r\n\t\t\t<!-- @slot Контент в виде списка, для вставки элементов списка используйте компонент popup/listItem -->\r\n\t\t\t<slot name=\"contentList\"></slot>\r\n\t\t</ul>\r\n\r\n\t\t<div v-if=\"$slots.footer\" class=\"top-popup_footer\">\r\n\t\t\t<!-- @slot Футер -->\r\n\t\t\t<slot name=\"footer\"></slot>\r\n\t\t</div>\r\n\t</teleport>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport type { ListItemProps } from './popup';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<ListItemProps>(), {\r\n\ttype: 'button',\r\n\tcloseByClick: true,\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<li :class=\"{\r\n\t\t'top-popup_liNoSelectable': props.type !== 'button'\r\n\t}\">\r\n\t\t<component\r\n\t\t\t:is=\"$attrs.href ? 'a' : 'div'\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t'top-popup_listItem': true,\r\n\t\t\t\t'top-popup_listItem-button': props.type === 'button', // оформления кнопки\r\n\t\t\t\t'a': props.type === 'button', // оформления кнопки, deprecated\r\n\t\t\t\t'top-popup_listItem-title': props.type === 'title',\r\n\t\t\t\t'top-popup_listItem-delimiter': props.type === 'delimiter',\r\n\t\t\t\t'top-popup-noCloser': !closeByClick\r\n\t\t\t}\"\r\n\t\t\t:=$attrs\r\n\t\t>\r\n\t\t\t<slot></slot>\r\n\t\t</component>\r\n\t</li>\r\n</template>"],"names":["props","__props","id","elOpener","render","el","renderOpener","onUpdated","elOpener2","emit","__emit","expose","__expose","elPopupRef","ref","vueConnector","popup","_popup","toRef","Worker","onUnmounted"],"mappings":";;;;;;;;;;;;;;;;AAIA,UAAAA,IAAAC,GAMAC,IAAAF,EAAA,MAAA,KAAA,OAAA,IAAA;AAEA,QAAAG;AAOA,aAAAC,EAAAC,GAAA;AACC,iBAAA,MAAA;AACC,QAAAF,IAAAE,EAAA,oBAEAF,KACCG,EAAAH,CAAA;AAAA,MACD,CAAA;AAAA,IACA;AAGF,IAAAI,EAAA,MAAA;AACC,MAAAJ,KACCG,EAAAH,CAAA;AAAA,IACD,CAAA;AAGD,aAAAG,EAAAE,GAAA;AACC,MAAAA,EAAA,QAAA,WAAA,SAAAN,GACAM,EAAA,QAAA,aAAAN,GACAM,EAAA,QAAA,YAAAR,EAAA,KACAQ,EAAA,QAAA,gBAAAR,EAAA,OACAQ,EAAA,QAAA,gBAAAR,EAAA,QAAA,SAAA,IACAQ,EAAA,QAAA,sBAAAR,EAAA,cAAA,SAAA;AAAA,IAAoE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChCrE,UAAAA,IAAAC,GAOAQ,IAAAC,GAEAC,IAAA;AAAA,MAAe,OAAA;AAAA,IACP;AAER,IAAAC,EAAAD,CAAA;AAEA,UAAAT,IAAAF,EAAA,MAAA,KAAA,OAAA,IAAA,IACAa,IAAAC,EAAA,IAAA,GA4BAC,IAAA;AAAA,MAAqB,QAzBrB,OAAAC,MAAA;AACC,QAAAA,EAAA,iBACCA,EAAA,aAAA,YAAA,IAEAH,EAAA,QAAAG,EAAA,eAGDD,EAAA,SAAA,IACAA,EAAA,QAAAC,GAEAL,EAAA,QAAAK,GAEAP,EAAA,MAAA;AAAA,MAAW;AAAA,MAcX,SAVD,CAAAQ,MAAA;AACC,QAAAJ,EAAA,QAAA,MAEAE,EAAA,SAAA,IACAA,EAAA,QAAA,QAEAN,EAAA,OAAA;AAAA,MAAY;AAAA,MAKZ,UAAAS,EAAAlB,GAAA,OAAA;AAAA,MAC8B,QAAA;AAAA,MACtB,OAAA;AAAA,MACD,uBAAAkB,EAAAlB,GAAA,oBAAA;AAAA,IACiD;AAGzD,WAAAmB,EAAA,gBAAAjB,GAAAa,CAAA,GAEAK,EAAA,MAAA;AACC,MAAAD,EAAA,kBAAAjB,CAAA;AAAA,IAA2B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzD5B,UAAAF,IAAAC;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,14 +1,14 @@
1
- import { insertToPage as I } from "../utils/css.js";
2
- import { defineComponent as T, mergeModels as E, useModel as W, ref as b, onMounted as N, onUpdated as P, openBlock as c, createElementBlock as f, normalizeClass as x, Fragment as q, renderList as $, createBlock as D, unref as d, mergeProps as y, createSlots as g, withCtx as h, createTextVNode as A, toDisplayString as M, createVNode as K, createCommentVNode as U } from "vue";
3
- import { b as _, p as Y, C as z, q as F } from "./forms-zlyhVXZ9.es.js";
4
- const S = ["../assets/menu.css"].map((u) => import.meta.resolve(u));
5
- I(S, !0);
6
- const O = {
1
+ import { insertToPage as w } from "../utils/css.js";
2
+ import { defineComponent as T, mergeModels as S, useModel as E, ref as W, onMounted as N, onUpdated as P, openBlock as c, createElementBlock as f, normalizeClass as b, Fragment as x, renderList as $, createBlock as q, mergeProps as d, createSlots as y, withCtx as g, createTextVNode as h, toDisplayString as A, createVNode as D, createCommentVNode as K } from "vue";
3
+ import { T as M, i as U, C as Y, a as z } from "./forms-BfIXIMY_.es.js";
4
+ const I = ["../assets/menu.css"].map((i) => import.meta.resolve(i));
5
+ w(I, !0);
6
+ const F = {
7
7
  key: 0,
8
8
  class: "top-menu_selectAll"
9
- }, j = /* @__PURE__ */ T({
9
+ }, O = /* @__PURE__ */ T({
10
10
  __name: "menu",
11
- props: /* @__PURE__ */ E({
11
+ props: /* @__PURE__ */ S({
12
12
  modelValue: {},
13
13
  items: {},
14
14
  isMultiple: { type: Boolean },
@@ -22,14 +22,14 @@ const O = {
22
22
  modelModifiers: {}
23
23
  }),
24
24
  emits: ["update:modelValue"],
25
- setup(u) {
26
- const s = u, l = W(u, "modelValue"), a = b();
25
+ setup(i) {
26
+ const s = i, l = E(i, "modelValue"), a = W();
27
27
  !s.isMultiple && !(typeof l.value == "string" || l.value instanceof String) && console.warn('Type check failed for prop "modelValue". Expected String: ' + typeof l.value), s.isMultiple && !Array.isArray(l.value) && console.warn('Type check failed for prop "modelValue". Expected Array: ' + typeof l.value), s.isMultiple && !s.canBeEmptyMultiple && Array.isArray(l.value) && !l.value.length && (l.value = [s.items[0].href ?? s.items[0].value]);
28
- const k = (e) => Array.isArray(l.value) ? l.value.includes(e.value) : e.value === l.value, B = (e, o = !1) => {
28
+ const _ = (e) => Array.isArray(l.value) ? l.value.includes(e.value) : e.value === l.value, k = (e, o = !1) => {
29
29
  if (Array.isArray(l.value)) {
30
30
  let t = l.value.slice();
31
31
  if (o) {
32
- t.length || (t = s.items.map((i) => i.value));
32
+ t.length || (t = s.items.map((u) => u.value));
33
33
  const r = t.indexOf(e.value);
34
34
  r === -1 ? t.push(e.value) : t.splice(r, 1);
35
35
  } else
@@ -38,7 +38,7 @@ const O = {
38
38
  return;
39
39
  }
40
40
  l.value = e.value;
41
- }, C = (e) => {
41
+ }, B = (e) => {
42
42
  if (a.value.scrollWidth <= a.value.offsetWidth || e.shiftKey || Math.abs(e.deltaY) < 50) return;
43
43
  e.preventDefault();
44
44
  const o = e.deltaY > 0 ? 30 : -30;
@@ -47,10 +47,10 @@ const O = {
47
47
  var m, v;
48
48
  const o = a.value.querySelector(".top-active");
49
49
  if (!o) return;
50
- const t = 24, r = o.offsetLeft - a.value.offsetLeft - t, i = o.offsetLeft - a.value.offsetLeft + o.clientWidth + t, V = a.value.scrollLeft, w = a.value.clientWidth + a.value.scrollLeft;
50
+ const t = 24, r = o.offsetLeft - a.value.offsetLeft - t, u = o.offsetLeft - a.value.offsetLeft + o.clientWidth + t, L = a.value.scrollLeft, V = a.value.clientWidth + a.value.scrollLeft;
51
51
  let n;
52
- r < V && (n = r), i > w && (n = i - a.value.clientWidth), n !== void 0 && (Y() ? (v = (m = z).$) == null || v.call(m, a.value).animate({ scrollLeft: n }, e ? 200 : 0) : a.value.scrollTo({ left: n, behavior: e ? "smooth" : "auto" }));
53
- }, L = () => {
52
+ r < L && (n = r), u > V && (n = u - a.value.clientWidth), n !== void 0 && (U() ? (v = (m = Y).$) == null || v.call(m, a.value).animate({ scrollLeft: n }, e ? 200 : 0) : a.value.scrollTo({ left: n, behavior: e ? "smooth" : "auto" }));
53
+ }, C = () => {
54
54
  if (Array.isArray(l.value)) {
55
55
  if (l.value.length === s.items.length) {
56
56
  l.value = [s.items[0].href ?? s.items[0].value];
@@ -62,48 +62,48 @@ const O = {
62
62
  return N(() => p(!1)), P(() => p(!0)), (e, o) => (c(), f("div", {
63
63
  ref_key: "el",
64
64
  ref: a,
65
- class: x({
65
+ class: b({
66
66
  "top-menu": !0,
67
67
  ["top-style_" + e.styling]: !0,
68
68
  "top-unwrap-x": e.styling === "default"
69
69
  }),
70
- onWheel: C
70
+ onWheel: B
71
71
  }, [
72
- (c(!0), f(q, null, $(e.items, (t) => (c(), D(d(_), y({ ref_for: !0 }, t, {
72
+ (c(!0), f(x, null, $(e.items, (t) => (c(), q(M, d({ ref_for: !0 }, t, {
73
73
  class: "top-menu_item",
74
74
  color: "theme",
75
75
  styling: "",
76
- onClick: (r) => B(t, r.ctrlKey),
77
- isActive: k(t)
78
- }), g({ _: 2 }, [
76
+ onClick: (r) => k(t, r.ctrlKey),
77
+ isActive: _(t)
78
+ }), y({ _: 2 }, [
79
79
  t.content ? {
80
80
  name: "default",
81
- fn: h(() => [
82
- A(M(t.content), 1)
81
+ fn: g(() => [
82
+ h(A(t.content), 1)
83
83
  ]),
84
84
  key: "0"
85
85
  } : void 0
86
86
  ]), 1040, ["onClick", "isActive"]))), 256)),
87
- Array.isArray(l.value) && e.selectAllItem ? (c(), f("div", O, [
88
- K(d(_), y(e.selectAllItem, {
87
+ Array.isArray(l.value) && e.selectAllItem ? (c(), f("div", F, [
88
+ D(M, d(e.selectAllItem, {
89
89
  class: "top-menu_item",
90
90
  color: "theme",
91
91
  styling: "",
92
- onClick: o[0] || (o[0] = (t) => L()),
92
+ onClick: o[0] || (o[0] = (t) => C()),
93
93
  isActive: l.value.length === e.items.length
94
- }), g({ _: 2 }, [
94
+ }), y({ _: 2 }, [
95
95
  e.selectAllItem.content ? {
96
96
  name: "default",
97
- fn: h(() => [
98
- A(M(e.selectAllItem.content), 1)
97
+ fn: g(() => [
98
+ h(A(e.selectAllItem.content), 1)
99
99
  ]),
100
100
  key: "0"
101
101
  } : void 0
102
102
  ]), 1040, ["isActive"])
103
- ])) : U("", !0)
103
+ ])) : K("", !0)
104
104
  ], 34));
105
105
  }
106
- }), G = {
106
+ }), j = {
107
107
  "top-menu": "top-menu",
108
108
  "top-menu_item": "top-menu_item",
109
109
  "top-menu_selectAll": "top-menu_selectAll",
@@ -111,10 +111,10 @@ const O = {
111
111
  "top-active": "top-active",
112
112
  "top-style_bar": "top-style_bar",
113
113
  "top-unwrap-x": "top-unwrap-x"
114
- }, H = {
115
- $style: G
116
- }, X = /* @__PURE__ */ F(j, [["__cssModules", H]]);
114
+ }, G = {
115
+ $style: j
116
+ }, R = /* @__PURE__ */ z(O, [["__cssModules", G]]);
117
117
  export {
118
- X as M
118
+ R as M
119
119
  };
120
- //# sourceMappingURL=menu-DFQAjecc.es.js.map
120
+ //# sourceMappingURL=menu-24EpQtdy.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-24EpQtdy.es.js","sources":["../../src/components/formsExt/menu/menu.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { ref, onMounted, onUpdated } from 'vue';\r\nimport type { Props, Item } from './menu';\r\nimport Core from '@/core/core/core';\r\nimport { isSafari } from '@/core/utils/device';\r\nimport TopButton from '@/components/forms/button/button.vue';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tstyling: 'default',\r\n});\r\n\r\nconst model = defineModel({\r\n\trequired: true,\r\n});\r\n\r\nconst el = ref();\r\n\r\n// валидация типа modelValue без возможности выбора нескольких значений (ожидается строка)\r\nif (!props.isMultiple && !(typeof (model.value) === 'string' || model.value instanceof String)) {\r\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected String: ' + typeof (model.value));\r\n}\r\n\r\n// валидация типа modelValue с возможностью выбора нескольких значений (ожидается массив)\r\nif (props.isMultiple && !Array.isArray(model.value)) {\r\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected Array: ' + typeof (model.value));\r\n}\r\n\r\n// для множественного выбора без пустого множества\r\n// если ничего не выбрано, присваиваем 1-ое значение\r\nif (props.isMultiple && !props.canBeEmptyMultiple && Array.isArray(model.value) && !model.value.length) {\r\n\tmodel.value = [props.items[0].href ?? props.items[0].value];\r\n}\r\n\r\nconst itemIsActive = (item: Item) => {\r\n\tif (!Array.isArray(model.value)) {\r\n\t\treturn item.value === model.value;\r\n\t}\r\n\r\n\treturn model.value.includes(item.value);\r\n};\r\n\r\n/**\r\n * Выбрать элемент\r\n * @param item\r\n * @param toggle - добавить или исключить элемент, для isMultiple\r\n */\r\nconst select = (item: Item, toggle = false) => {\r\n\tif (Array.isArray(model.value)) {\r\n\t\tlet modelNew = model.value.slice();\r\n\r\n\t\tif (toggle) {\r\n\t\t\tif (!modelNew.length) modelNew = props.items.map(item => item.value);\r\n\r\n\t\t\tconst index = modelNew.indexOf(item.value);\r\n\t\t\tif (index === -1) {\r\n\t\t\t\tmodelNew.push(item.value);\r\n\t\t\t} else {\r\n\t\t\t\tmodelNew.splice(index, 1);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (modelNew.length === 1 && modelNew[0] === item.value) {\r\n\t\t\t\tmodelNew = [];\r\n\t\t\t} else {\r\n\t\t\t\tmodelNew = [item.value];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!props.canBeEmptyMultiple && !modelNew.length) modelNew = [item.value];\r\n\r\n\t\tmodel.value = modelNew;\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tmodel.value = item.value;\r\n};\r\n\r\n// вертикальный скролл в горизонтальный скролл\r\nconst onWheel = (event: WheelEvent) => {\r\n\tif (el.value.scrollWidth <= el.value.offsetWidth) return;\r\n\tif (event.shiftKey) return;\r\n\tif (Math.abs(event.deltaY) < 50) return; // устройство с высокой точностью, например тачпад\r\n\r\n\tevent.preventDefault();\r\n\r\n\tconst delta = event.deltaY > 0 ? 30 : -30;\r\n\tel.value.scrollLeft = el.value.scrollLeft + delta;\r\n};\r\n\r\n/**\r\n * Замена стандартному scrollIntoView, который меняет скролл документа\r\n *\r\n * Выравнивание по ближнему краю элемента\r\n *\r\n * Выравнивается таким образом, чтобы был виден соседний элемент\r\n */\r\nconst scrollIntoView = (isSmooth = true) => {\r\n\tconst elBtn = el.value.querySelector('.top-active');\r\n\tif (!elBtn) return;\r\n\r\n\tconst gap = 24;\r\n\r\n\t// левая и правая координаты элемента\r\n\tconst leftMargin = elBtn.offsetLeft - el.value.offsetLeft - gap;\r\n\tconst rightMargin = elBtn.offsetLeft - el.value.offsetLeft + elBtn.clientWidth + gap;\r\n\r\n\t// левая и правая границы видимой части меню\r\n\tconst leftMarginParent = el.value.scrollLeft;\r\n\tconst rightMarginParent = el.value.clientWidth + el.value.scrollLeft;\r\n\r\n\tlet scrollLeft: number | undefined = undefined;\r\n\r\n\t// левую границу элемента к левой границе меню\r\n\tif (leftMargin < leftMarginParent) scrollLeft = leftMargin;\r\n\r\n\t// правую границу элемента к правой границе меню\r\n\tif (rightMargin > rightMarginParent) scrollLeft = rightMargin - el.value.clientWidth;\r\n\r\n\tif (scrollLeft !== undefined) {\r\n\t\tif (isSafari()) {\r\n\t\t\tCore.$?.(el.value).animate({ scrollLeft: scrollLeft }, isSmooth ? 200 : 0);\r\n\t\t} else {\r\n\t\t\tel.value.scrollTo({ left: scrollLeft, behavior: isSmooth ? 'smooth' : 'auto' });\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/**\r\n * Выбрать все элементы в меню\r\n */\r\nconst selectAll = () => {\r\n\tif (!Array.isArray(model.value)) return;\r\n\r\n\tif (model.value.length === props.items.length) {\r\n\t\tmodel.value = [props.items[0].href ?? props.items[0].value];\r\n\t\treturn;\r\n\t}\r\n\r\n\tmodel.value = props.items.map(item => item.href ?? item.value);\r\n};\r\n\r\nonMounted(() => scrollIntoView(false));\r\nonUpdated(() => scrollIntoView(true));\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\tref=\"el\"\r\n\t\t:class=\"{\r\n\t\t\t'top-menu': true,\r\n\t\t\t['top-style_' + styling]: true,\r\n\t\t\t['top-unwrap-x']: styling === 'default',\r\n\t\t}\"\r\n\t\t@wheel=\"onWheel\"\r\n\t>\r\n\t\t<TopButton\r\n\t\t\tv-for=\"item in items\"\r\n\t\t\t:=\"item\"\r\n\t\t\tclass=\"top-menu_item\"\r\n\t\t\tcolor=\"theme\"\r\n\t\t\tstyling=\"\"\r\n\t\t\t@click=\"select(item, $event.ctrlKey)\"\r\n\t\t\t:isActive=\"itemIsActive(item)\"\r\n\t\t>\r\n\t\t\t<template #default v-if=\"item.content\">\r\n\t\t\t\t{{ item.content }}\r\n\t\t\t</template>\r\n\t\t</TopButton>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"Array.isArray(model) && selectAllItem\"\r\n\t\t\tclass=\"top-menu_selectAll\"\r\n\t\t>\r\n\t\t\t<TopButton\r\n\t\t\t\t:=\"selectAllItem\"\r\n\t\t\t\tclass=\"top-menu_item\"\r\n\t\t\t\tcolor=\"theme\"\r\n\t\t\t\tstyling=\"\"\r\n\t\t\t\t@click=\"selectAll()\"\r\n\t\t\t\t:isActive=\"model.length === items.length\"\r\n\t\t\t>\r\n\t\t\t\t<template #default v-if=\"selectAllItem.content\">\r\n\t\t\t\t\t{{ selectAllItem.content }}\r\n\t\t\t\t</template>\r\n\t\t\t</TopButton>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-menu {\r\n\t--scroll-thumb-color: var(--color-line-1);\r\n\t--scroll-thumb-color-hover: var(--color-line-2);\r\n\t--scroll-thumb-color-active: var(--color-line-3);\r\n\r\n\tmax-width: 100%;\r\n\tdisplay: flex;\r\n\talign-items: flex-start;\r\n\tgap: var(--top-gap-2);\r\n\toverflow-x: auto;\r\n\tscrollbar-width: none; /* firefox */\r\n\r\n\t/* предотвратить натинвые события браузера (назад / вперед) */\r\n\toverscroll-behavior-x: contain;\r\n}\r\n\r\n.top-menu::-webkit-scrollbar { display: none; }\r\n\r\n.top-menu .top-menu_item {\r\n\t--top-button-color: var(--color-text-2);\r\n\r\n\toutline-offset: -2px !important;\r\n\tmin-width: 0;\r\n\tmargin: 0;\r\n\tflex-shrink: 0;\r\n}\r\n\r\n.top-menu .top-menu_item[data-top-icon] {\r\n\t--top-icon-color: var(--color-text-2);\r\n}\r\n\r\n.top-menu_selectAll {\r\n\tposition: sticky;\r\n\tright: 0;\r\n\tbackground: var(--content-background-color);\r\n\tborder-left: 1px solid var(--color-line-1-opacity);\r\n\tpadding-left: var(--top-padding-1);\r\n\tbox-shadow: var(--content-background-color) var(--top-padding-2) 0px;\r\n}\r\n\r\n/* style default */\r\n.top-menu.top-style_default .top-menu_item {\r\n\t--top-forms-radius: 0;\r\n\t--top-forms-border-color: transparent;\r\n\t--top-forms-border-width: 2px;\r\n\r\n\tfilter: none;\r\n\tbox-shadow: none;\r\n\tborder: none;\r\n\tborder-bottom: var(--top-forms-border-width) solid var(--top-forms-border-color);\r\n\tbackground: none;\r\n}\r\n\r\n.top-menu.top-style_default .top-menu_item:hover {\r\n\t--top-icon-color: var(--color-text-1);\r\n\t--top-button-color: var(--color-text-1);\r\n\t--top-forms-border-color: var(--color-line-2-opacity);\r\n}\r\n\r\n.top-menu.top-style_default .top-menu_item:active,\r\n.top-menu.top-style_default .top-menu_item.top-active {\r\n\t--top-icon-color: var(--color-icon-primary-2);\r\n\t--top-button-color: var(--color-text-1);\r\n\t--top-forms-border-color: var(--color-line-primary-1);\r\n}\r\n\r\n.top-menu.top-style_default .top-menu_selectAll {\r\n\tpadding-left: var(--top-padding-2);\r\n}\r\n\r\n/* style bar */\r\n.top-menu.top-style_bar {\r\n\tborder-radius: var(--top-radius-3);\r\n\tborder: 1px solid var(--color-line-2-opacity);\r\n\tpadding: var(--top-padding-1);\r\n\tgap: 3px;\r\n}\r\n.top-menu.top-style_bar .top-menu_item {\r\n\t--top-button-background-color-hover: var(--color-layer-secondary-1);\r\n\t--top-button-background-color-active: var(--color-layer-secondary-2);\r\n\t--top-button-background-color-selected: var(--color-layer-primary-1);\r\n\r\n\tposition: relative;\r\n}\r\n\r\n.top-menu.top-style_bar .top-menu_item:hover {\r\n\t--top-icon-color: var(--color-icon-1);\r\n\t--top-button-color: var(--color-text-1);\r\n}\r\n\r\n.top-menu.top-style_bar .top-menu_item.top-active {\r\n\t--top-icon-color: var(--color-icon-primary-2);\r\n\t--top-button-color: var(--color-text-primary-1);\r\n}\r\n\r\n/* разделители кнопок в баре */\r\n.top-menu.top-style_bar .top-menu_item:not(:first-child):not(.top-active):not(:hover):after {\r\n\tcontent: \"\";\r\n\tbackground: var(--color-line-1-opacity);\r\n\twidth: 1px;\r\n\theight: 60%;\r\n\tdisplay: block;\r\n\tposition: absolute;\r\n\tleft: -2px;\r\n}\r\n.top-menu.top-style_bar .top-menu_item.top-active + .top-menu_item:after,\r\n.top-menu.top-style_bar .top-menu_item:hover + .top-menu_item:after {\r\n\tcontent: none !important;\r\n}\r\n\r\n/** TODO: .top-unwrap-x надо вынести глобально в UI или добавить в стили для storybook */\r\n.top-menu.top-unwrap-x {\r\n\tpadding-right: var(--top-unwrap-x);\r\n\tpadding-left: var(--top-unwrap-x);\r\n\tmargin-right: calc(0px - var(--top-unwrap-x));\r\n\tmargin-left: calc(0px - var(--top-unwrap-x));\r\n}\r\n</style>\r\n"],"names":["props","__props","model","useModel","el","ref","itemIsActive","item","select","toggle","modelNew","item2","index","onWheel","event","delta","scrollIntoView","isSmooth","elBtn","gap","leftMargin","rightMargin","leftMarginParent","rightMarginParent","scrollLeft","isSafari","_b","_a","Core","selectAll","onMounted","onUpdated"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAOA,UAAAA,IAAAC,GAIAC,IAAAC,EAAAF,GAAA,YAAA,GAIAG,IAAAC,EAAA;AAGA,IAAA,CAAAL,EAAA,cAAA,EAAA,OAAAE,EAAA,SAAA,YAAAA,EAAA,iBAAA,WACC,QAAA,KAAA,+DAAA,OAAAA,EAAA,KAAA,GAIDF,EAAA,cAAA,CAAA,MAAA,QAAAE,EAAA,KAAA,KACC,QAAA,KAAA,8DAAA,OAAAA,EAAA,KAAA,GAKDF,EAAA,cAAA,CAAAA,EAAA,sBAAA,MAAA,QAAAE,EAAA,KAAA,KAAA,CAAAA,EAAA,MAAA,WACCA,EAAA,QAAA,CAAAF,EAAA,MAAA,CAAA,EAAA,QAAAA,EAAA,MAAA,CAAA,EAAA,KAAA;AAGD,UAAAM,IAAA,CAAAC,MACC,MAAA,QAAAL,EAAA,KAAA,IAIAA,EAAA,MAAA,SAAAK,EAAA,KAAA,IAHCA,EAAA,UAAAL,EAAA,OAWFM,IAAA,CAAAD,GAAAE,IAAA,OAAA;AACC,UAAA,MAAA,QAAAP,EAAA,KAAA,GAAA;AACC,YAAAQ,IAAAR,EAAA,MAAA,MAAA;AAEA,YAAAO,GAAA;AACC,UAAAC,EAAA,WAAAA,IAAAV,EAAA,MAAA,IAAA,CAAAW,MAAAA,EAAA,KAAA;AAEA,gBAAAC,IAAAF,EAAA,QAAAH,EAAA,KAAA;AACA,UAAAK,MAAA,KACCF,EAAA,KAAAH,EAAA,KAAA,IAEAG,EAAA,OAAAE,GAAA,CAAA;AAAA,QACD;AAEA,UAAAF,EAAA,WAAA,KAAAA,EAAA,CAAA,MAAAH,EAAA,QACCG,IAAA,CAAA,IAEAA,IAAA,CAAAH,EAAA,KAAA;AAIF,QAAA,CAAAP,EAAA,sBAAA,CAAAU,EAAA,WAAAA,IAAA,CAAAH,EAAA,KAAA,IAEAL,EAAA,QAAAQ;AAEA;AAAA,MAAA;AAGD,MAAAR,EAAA,QAAAK,EAAA;AAAA,IAAmB,GAIpBM,IAAA,CAAAC,MAAA;AAGC,UAFAV,EAAA,MAAA,eAAAA,EAAA,MAAA,eACAU,EAAA,YACA,KAAA,IAAAA,EAAA,MAAA,IAAA,GAAA;AAEA,MAAAA,EAAA,eAAA;AAEA,YAAAC,IAAAD,EAAA,SAAA,IAAA,KAAA;AACA,MAAAV,EAAA,MAAA,aAAAA,EAAA,MAAA,aAAAW;AAAA,IAA4C,GAU7CC,IAAA,CAAAC,IAAA,OAAA;;AACC,YAAAC,IAAAd,EAAA,MAAA,cAAA,aAAA;AACA,UAAA,CAAAc,EAAA;AAEA,YAAAC,IAAA,IAGAC,IAAAF,EAAA,aAAAd,EAAA,MAAA,aAAAe,GACAE,IAAAH,EAAA,aAAAd,EAAA,MAAA,aAAAc,EAAA,cAAAC,GAGAG,IAAAlB,EAAA,MAAA,YACAmB,IAAAnB,EAAA,MAAA,cAAAA,EAAA,MAAA;AAEA,UAAAoB;AAGA,MAAAJ,IAAAE,MAAAE,IAAAJ,IAGAC,IAAAE,MAAAC,IAAAH,IAAAjB,EAAA,MAAA,cAEAoB,MAAA,WACCC,EAAA,KACCC,KAAAC,IAAAC,GAAA,MAAA,QAAAF,EAAA,KAAAC,GAAAvB,EAAA,OAAA,QAAA,EAAA,YAAAoB,EAAA,GAAAP,IAAA,MAAA,KAEAb,EAAA,MAAA,SAAA,EAAA,MAAAoB,GAAA,UAAAP,IAAA,WAAA,OAAA,CAAA;AAAA,IAEF,GAMDY,IAAA,MAAA;AACC,UAAA,MAAA,QAAA3B,EAAA,KAAA,GAEA;AAAA,YAAAA,EAAA,MAAA,WAAAF,EAAA,MAAA,QAAA;AACC,UAAAE,EAAA,QAAA,CAAAF,EAAA,MAAA,CAAA,EAAA,QAAAA,EAAA,MAAA,CAAA,EAAA,KAAA;AACA;AAAA,QAAA;AAGD,QAAAE,EAAA,QAAAF,EAAA,MAAA,IAAA,CAAAO,MAAAA,EAAA,QAAAA,EAAA,KAAA;AAAA;AAAA,IAA6D;AAG9D,WAAAuB,EAAA,MAAAd,EAAA,EAAA,CAAA,GACAe,EAAA,MAAAf,EAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ define(["require","exports","vue","./forms-C__H1yL_.amd","../require/css.amd!../assets/menu.css"],function(L,m,e,u){"use strict";if(typeof e>"u")var e=window.Vue;const y={key:0,class:"top-menu_selectAll"},g=e.defineComponent({__name:"menu",props:e.mergeModels({modelValue:{},items:{},isMultiple:{type:Boolean},canBeEmptyMultiple:{type:Boolean},styling:{default:"default"},selectAllItem:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:["update:modelValue"],setup(f){const s=f,o=e.useModel(f,"modelValue"),a=e.ref();!s.isMultiple&&!(typeof o.value=="string"||o.value instanceof String)&&console.warn('Type check failed for prop "modelValue". Expected String: '+typeof o.value),s.isMultiple&&!Array.isArray(o.value)&&console.warn('Type check failed for prop "modelValue". Expected Array: '+typeof o.value),s.isMultiple&&!s.canBeEmptyMultiple&&Array.isArray(o.value)&&!o.value.length&&(o.value=[s.items[0].href??s.items[0].value]);const M=t=>Array.isArray(o.value)?o.value.includes(t.value):t.value===o.value,k=(t,n=!1)=>{if(Array.isArray(o.value)){let l=o.value.slice();if(n){l.length||(l=s.items.map(c=>c.value));const r=l.indexOf(t.value);r===-1?l.push(t.value):l.splice(r,1)}else l.length===1&&l[0]===t.value?l=[]:l=[t.value];!s.canBeEmptyMultiple&&!l.length&&(l=[t.value]),o.value=l;return}o.value=t.value},B=t=>{if(a.value.scrollWidth<=a.value.offsetWidth||t.shiftKey||Math.abs(t.deltaY)<50)return;t.preventDefault();const n=t.deltaY>0?30:-30;a.value.scrollLeft=a.value.scrollLeft+n},p=(t=!0)=>{var v,d;const n=a.value.querySelector(".top-active");if(!n)return;const l=24,r=n.offsetLeft-a.value.offsetLeft-l,c=n.offsetLeft-a.value.offsetLeft+n.clientWidth+l,V=a.value.scrollLeft,w=a.value.clientWidth+a.value.scrollLeft;let i;r<V&&(i=r),c>w&&(i=c-a.value.clientWidth),i!==void 0&&(u.isSafari()?(d=(v=u.Core).$)==null||d.call(v,a.value).animate({scrollLeft:i},t?200:0):a.value.scrollTo({left:i,behavior:t?"smooth":"auto"}))},_=()=>{if(Array.isArray(o.value)){if(o.value.length===s.items.length){o.value=[s.items[0].href??s.items[0].value];return}o.value=s.items.map(t=>t.href??t.value)}};return e.onMounted(()=>p(!1)),e.onUpdated(()=>p(!0)),(t,n)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:a,class:e.normalizeClass({"top-menu":!0,["top-style_"+t.styling]:!0,"top-unwrap-x":t.styling==="default"}),onWheel:B},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,l=>(e.openBlock(),e.createBlock(u.TopButton,e.mergeProps({ref_for:!0},l,{class:"top-menu_item",color:"theme",styling:"",onClick:r=>k(l,r.ctrlKey),isActive:M(l)}),e.createSlots({_:2},[l.content?{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(l.content),1)]),key:"0"}:void 0]),1040,["onClick","isActive"]))),256)),Array.isArray(o.value)&&t.selectAllItem?(e.openBlock(),e.createElementBlock("div",y,[e.createVNode(u.TopButton,e.mergeProps(t.selectAllItem,{class:"top-menu_item",color:"theme",styling:"",onClick:n[0]||(n[0]=l=>_()),isActive:o.value.length===t.items.length}),e.createSlots({_:2},[t.selectAllItem.content?{name:"default",fn:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.selectAllItem.content),1)]),key:"0"}:void 0]),1040,["isActive"])])):e.createCommentVNode("",!0)],34))}}),h={$style:{"top-menu":"top-menu","top-menu_item":"top-menu_item","top-menu_selectAll":"top-menu_selectAll","top-style_default":"top-style_default","top-active":"top-active","top-style_bar":"top-style_bar","top-unwrap-x":"top-unwrap-x"}},A=u._export_sfc(g,[["__cssModules",h]]);m.Menu=A});
2
+ //# sourceMappingURL=menu-DV1iSTyB.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-DV1iSTyB.amd.js","sources":["../../src/components/formsExt/menu/menu.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { ref, onMounted, onUpdated } from 'vue';\r\nimport type { Props, Item } from './menu';\r\nimport Core from '@/core/core/core';\r\nimport { isSafari } from '@/core/utils/device';\r\nimport TopButton from '@/components/forms/button/button.vue';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tstyling: 'default',\r\n});\r\n\r\nconst model = defineModel({\r\n\trequired: true,\r\n});\r\n\r\nconst el = ref();\r\n\r\n// валидация типа modelValue без возможности выбора нескольких значений (ожидается строка)\r\nif (!props.isMultiple && !(typeof (model.value) === 'string' || model.value instanceof String)) {\r\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected String: ' + typeof (model.value));\r\n}\r\n\r\n// валидация типа modelValue с возможностью выбора нескольких значений (ожидается массив)\r\nif (props.isMultiple && !Array.isArray(model.value)) {\r\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected Array: ' + typeof (model.value));\r\n}\r\n\r\n// для множественного выбора без пустого множества\r\n// если ничего не выбрано, присваиваем 1-ое значение\r\nif (props.isMultiple && !props.canBeEmptyMultiple && Array.isArray(model.value) && !model.value.length) {\r\n\tmodel.value = [props.items[0].href ?? props.items[0].value];\r\n}\r\n\r\nconst itemIsActive = (item: Item) => {\r\n\tif (!Array.isArray(model.value)) {\r\n\t\treturn item.value === model.value;\r\n\t}\r\n\r\n\treturn model.value.includes(item.value);\r\n};\r\n\r\n/**\r\n * Выбрать элемент\r\n * @param item\r\n * @param toggle - добавить или исключить элемент, для isMultiple\r\n */\r\nconst select = (item: Item, toggle = false) => {\r\n\tif (Array.isArray(model.value)) {\r\n\t\tlet modelNew = model.value.slice();\r\n\r\n\t\tif (toggle) {\r\n\t\t\tif (!modelNew.length) modelNew = props.items.map(item => item.value);\r\n\r\n\t\t\tconst index = modelNew.indexOf(item.value);\r\n\t\t\tif (index === -1) {\r\n\t\t\t\tmodelNew.push(item.value);\r\n\t\t\t} else {\r\n\t\t\t\tmodelNew.splice(index, 1);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (modelNew.length === 1 && modelNew[0] === item.value) {\r\n\t\t\t\tmodelNew = [];\r\n\t\t\t} else {\r\n\t\t\t\tmodelNew = [item.value];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!props.canBeEmptyMultiple && !modelNew.length) modelNew = [item.value];\r\n\r\n\t\tmodel.value = modelNew;\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tmodel.value = item.value;\r\n};\r\n\r\n// вертикальный скролл в горизонтальный скролл\r\nconst onWheel = (event: WheelEvent) => {\r\n\tif (el.value.scrollWidth <= el.value.offsetWidth) return;\r\n\tif (event.shiftKey) return;\r\n\tif (Math.abs(event.deltaY) < 50) return; // устройство с высокой точностью, например тачпад\r\n\r\n\tevent.preventDefault();\r\n\r\n\tconst delta = event.deltaY > 0 ? 30 : -30;\r\n\tel.value.scrollLeft = el.value.scrollLeft + delta;\r\n};\r\n\r\n/**\r\n * Замена стандартному scrollIntoView, который меняет скролл документа\r\n *\r\n * Выравнивание по ближнему краю элемента\r\n *\r\n * Выравнивается таким образом, чтобы был виден соседний элемент\r\n */\r\nconst scrollIntoView = (isSmooth = true) => {\r\n\tconst elBtn = el.value.querySelector('.top-active');\r\n\tif (!elBtn) return;\r\n\r\n\tconst gap = 24;\r\n\r\n\t// левая и правая координаты элемента\r\n\tconst leftMargin = elBtn.offsetLeft - el.value.offsetLeft - gap;\r\n\tconst rightMargin = elBtn.offsetLeft - el.value.offsetLeft + elBtn.clientWidth + gap;\r\n\r\n\t// левая и правая границы видимой части меню\r\n\tconst leftMarginParent = el.value.scrollLeft;\r\n\tconst rightMarginParent = el.value.clientWidth + el.value.scrollLeft;\r\n\r\n\tlet scrollLeft: number | undefined = undefined;\r\n\r\n\t// левую границу элемента к левой границе меню\r\n\tif (leftMargin < leftMarginParent) scrollLeft = leftMargin;\r\n\r\n\t// правую границу элемента к правой границе меню\r\n\tif (rightMargin > rightMarginParent) scrollLeft = rightMargin - el.value.clientWidth;\r\n\r\n\tif (scrollLeft !== undefined) {\r\n\t\tif (isSafari()) {\r\n\t\t\tCore.$?.(el.value).animate({ scrollLeft: scrollLeft }, isSmooth ? 200 : 0);\r\n\t\t} else {\r\n\t\t\tel.value.scrollTo({ left: scrollLeft, behavior: isSmooth ? 'smooth' : 'auto' });\r\n\t\t}\r\n\t}\r\n};\r\n\r\n/**\r\n * Выбрать все элементы в меню\r\n */\r\nconst selectAll = () => {\r\n\tif (!Array.isArray(model.value)) return;\r\n\r\n\tif (model.value.length === props.items.length) {\r\n\t\tmodel.value = [props.items[0].href ?? props.items[0].value];\r\n\t\treturn;\r\n\t}\r\n\r\n\tmodel.value = props.items.map(item => item.href ?? item.value);\r\n};\r\n\r\nonMounted(() => scrollIntoView(false));\r\nonUpdated(() => scrollIntoView(true));\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\tref=\"el\"\r\n\t\t:class=\"{\r\n\t\t\t'top-menu': true,\r\n\t\t\t['top-style_' + styling]: true,\r\n\t\t\t['top-unwrap-x']: styling === 'default',\r\n\t\t}\"\r\n\t\t@wheel=\"onWheel\"\r\n\t>\r\n\t\t<TopButton\r\n\t\t\tv-for=\"item in items\"\r\n\t\t\t:=\"item\"\r\n\t\t\tclass=\"top-menu_item\"\r\n\t\t\tcolor=\"theme\"\r\n\t\t\tstyling=\"\"\r\n\t\t\t@click=\"select(item, $event.ctrlKey)\"\r\n\t\t\t:isActive=\"itemIsActive(item)\"\r\n\t\t>\r\n\t\t\t<template #default v-if=\"item.content\">\r\n\t\t\t\t{{ item.content }}\r\n\t\t\t</template>\r\n\t\t</TopButton>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"Array.isArray(model) && selectAllItem\"\r\n\t\t\tclass=\"top-menu_selectAll\"\r\n\t\t>\r\n\t\t\t<TopButton\r\n\t\t\t\t:=\"selectAllItem\"\r\n\t\t\t\tclass=\"top-menu_item\"\r\n\t\t\t\tcolor=\"theme\"\r\n\t\t\t\tstyling=\"\"\r\n\t\t\t\t@click=\"selectAll()\"\r\n\t\t\t\t:isActive=\"model.length === items.length\"\r\n\t\t\t>\r\n\t\t\t\t<template #default v-if=\"selectAllItem.content\">\r\n\t\t\t\t\t{{ selectAllItem.content }}\r\n\t\t\t\t</template>\r\n\t\t\t</TopButton>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-menu {\r\n\t--scroll-thumb-color: var(--color-line-1);\r\n\t--scroll-thumb-color-hover: var(--color-line-2);\r\n\t--scroll-thumb-color-active: var(--color-line-3);\r\n\r\n\tmax-width: 100%;\r\n\tdisplay: flex;\r\n\talign-items: flex-start;\r\n\tgap: var(--top-gap-2);\r\n\toverflow-x: auto;\r\n\tscrollbar-width: none; /* firefox */\r\n\r\n\t/* предотвратить натинвые события браузера (назад / вперед) */\r\n\toverscroll-behavior-x: contain;\r\n}\r\n\r\n.top-menu::-webkit-scrollbar { display: none; }\r\n\r\n.top-menu .top-menu_item {\r\n\t--top-button-color: var(--color-text-2);\r\n\r\n\toutline-offset: -2px !important;\r\n\tmin-width: 0;\r\n\tmargin: 0;\r\n\tflex-shrink: 0;\r\n}\r\n\r\n.top-menu .top-menu_item[data-top-icon] {\r\n\t--top-icon-color: var(--color-text-2);\r\n}\r\n\r\n.top-menu_selectAll {\r\n\tposition: sticky;\r\n\tright: 0;\r\n\tbackground: var(--content-background-color);\r\n\tborder-left: 1px solid var(--color-line-1-opacity);\r\n\tpadding-left: var(--top-padding-1);\r\n\tbox-shadow: var(--content-background-color) var(--top-padding-2) 0px;\r\n}\r\n\r\n/* style default */\r\n.top-menu.top-style_default .top-menu_item {\r\n\t--top-forms-radius: 0;\r\n\t--top-forms-border-color: transparent;\r\n\t--top-forms-border-width: 2px;\r\n\r\n\tfilter: none;\r\n\tbox-shadow: none;\r\n\tborder: none;\r\n\tborder-bottom: var(--top-forms-border-width) solid var(--top-forms-border-color);\r\n\tbackground: none;\r\n}\r\n\r\n.top-menu.top-style_default .top-menu_item:hover {\r\n\t--top-icon-color: var(--color-text-1);\r\n\t--top-button-color: var(--color-text-1);\r\n\t--top-forms-border-color: var(--color-line-2-opacity);\r\n}\r\n\r\n.top-menu.top-style_default .top-menu_item:active,\r\n.top-menu.top-style_default .top-menu_item.top-active {\r\n\t--top-icon-color: var(--color-icon-primary-2);\r\n\t--top-button-color: var(--color-text-1);\r\n\t--top-forms-border-color: var(--color-line-primary-1);\r\n}\r\n\r\n.top-menu.top-style_default .top-menu_selectAll {\r\n\tpadding-left: var(--top-padding-2);\r\n}\r\n\r\n/* style bar */\r\n.top-menu.top-style_bar {\r\n\tborder-radius: var(--top-radius-3);\r\n\tborder: 1px solid var(--color-line-2-opacity);\r\n\tpadding: var(--top-padding-1);\r\n\tgap: 3px;\r\n}\r\n.top-menu.top-style_bar .top-menu_item {\r\n\t--top-button-background-color-hover: var(--color-layer-secondary-1);\r\n\t--top-button-background-color-active: var(--color-layer-secondary-2);\r\n\t--top-button-background-color-selected: var(--color-layer-primary-1);\r\n\r\n\tposition: relative;\r\n}\r\n\r\n.top-menu.top-style_bar .top-menu_item:hover {\r\n\t--top-icon-color: var(--color-icon-1);\r\n\t--top-button-color: var(--color-text-1);\r\n}\r\n\r\n.top-menu.top-style_bar .top-menu_item.top-active {\r\n\t--top-icon-color: var(--color-icon-primary-2);\r\n\t--top-button-color: var(--color-text-primary-1);\r\n}\r\n\r\n/* разделители кнопок в баре */\r\n.top-menu.top-style_bar .top-menu_item:not(:first-child):not(.top-active):not(:hover):after {\r\n\tcontent: \"\";\r\n\tbackground: var(--color-line-1-opacity);\r\n\twidth: 1px;\r\n\theight: 60%;\r\n\tdisplay: block;\r\n\tposition: absolute;\r\n\tleft: -2px;\r\n}\r\n.top-menu.top-style_bar .top-menu_item.top-active + .top-menu_item:after,\r\n.top-menu.top-style_bar .top-menu_item:hover + .top-menu_item:after {\r\n\tcontent: none !important;\r\n}\r\n\r\n/** TODO: .top-unwrap-x надо вынести глобально в UI или добавить в стили для storybook */\r\n.top-menu.top-unwrap-x {\r\n\tpadding-right: var(--top-unwrap-x);\r\n\tpadding-left: var(--top-unwrap-x);\r\n\tmargin-right: calc(0px - var(--top-unwrap-x));\r\n\tmargin-left: calc(0px - var(--top-unwrap-x));\r\n}\r\n</style>\r\n"],"names":["props","__props","el","vue","model","itemIsActive","item","index","modelNew","onWheel","event","delta","scrollIntoView","isSmooth","elBtn","gap","leftMargin","rightMargin","rightMarginParent","scrollLeft"],"mappings":"ydAOA,MAAAA,EAAAC,+BAQAC,EAAAC,EAAA,IAAA,mKAQAH,EAAA,YAAA,CAAA,MAAA,QAAAI,EAAA,KAAA,wNAUA,MAAAC,EAAAC,2MAqBGC,IAAA,gCAIA,MAEAC,EAAA,SAAA,GAAAA,EAAA,CAAA,IAAAF,EAAA,WAGCE,EAAA,CAAAF,EAAA,KAAA,EAIF,CAAAN,EAAA,oBAAA,CAAAQ,EAAA,SAAAA,EAAA,CAAAF,EAAA,KAAA,GAEAF,EAAA,MAAAI,EAEA,OAGDJ,EAAA,MAAAE,EAAA,KAAmB,EAIpBG,EAAAC,GAAA,CAGC,GAFAR,EAAA,MAAA,aAAAA,EAAA,MAAA,aACAQ,EAAA,UACA,KAAA,IAAAA,EAAA,MAAA,EAAA,GAAA,OAEAA,EAAA,eAAA,EAEA,MAAAC,EAAAD,EAAA,OAAA,EAAA,GAAA,IACAR,EAAA,MAAA,WAAAA,EAAA,MAAA,WAAAS,CAA4C,EAU7CC,EAAA,CAAAC,EAAA,KAAA,sDAEC,GAAA,CAAAC,EAAA,OAEA,MAAAC,EAAA,GAGAC,EAAAF,EAAA,WAAAZ,EAAA,MAAA,WAAAa,EACAE,EAAAH,EAAA,WAAAZ,EAAA,MAAA,WAAAY,EAAA,YAAAC,uBAIAG,EAAAhB,EAAA,MAAA,YAAAA,EAAA,MAAA,WAEA,IAAAiB,aAMAF,EAAAC,IAAAC,EAAAF,EAAAf,EAAA,MAAA,aAEAiB,IAAA,sJAMA,mCASA,IAAAf,EAAA,MAAA,SAAAJ,EAAA,MAAA,OAAA,6CAEC,+CAG4D"}