@topvisor/ui 0.9.37 → 1.0.0-rc-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/.chunks/datepicker-C-d1Do_N.amd.js +248 -0
  2. package/.chunks/datepicker-C-d1Do_N.amd.js.map +1 -0
  3. package/.chunks/datepicker-DTNYG8Iy.es.js +290 -0
  4. package/.chunks/datepicker-DTNYG8Iy.es.js.map +1 -0
  5. package/.chunks/debounce-4ipCj607.amd.js +2 -0
  6. package/.chunks/debounce-4ipCj607.amd.js.map +1 -0
  7. package/.chunks/debounce-BISRz08p.es.js +116 -0
  8. package/.chunks/debounce-BISRz08p.es.js.map +1 -0
  9. package/.chunks/forms--Ye61xQ5.amd.js +3 -0
  10. package/.chunks/forms--Ye61xQ5.amd.js.map +1 -0
  11. package/.chunks/{forms-BZoPbSQt.es.js → forms-NfVxcPud.es.js} +241 -227
  12. package/.chunks/forms-NfVxcPud.es.js.map +1 -0
  13. package/.chunks/i18n-C_OH9IT3.amd.js +2 -0
  14. package/.chunks/i18n-C_OH9IT3.amd.js.map +1 -0
  15. package/.chunks/i18n-DuTvft1T.es.js +26 -0
  16. package/.chunks/i18n-DuTvft1T.es.js.map +1 -0
  17. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-BToGplRR.es.js +174 -0
  18. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-BToGplRR.es.js.map +1 -0
  19. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-BsrusTUW.amd.js +2 -0
  20. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-BsrusTUW.amd.js.map +1 -0
  21. package/.chunks/{menu-DDYYS64d.es.js → menu-ChmT8cWp.es.js} +30 -32
  22. package/.chunks/menu-ChmT8cWp.es.js.map +1 -0
  23. package/.chunks/menu-Gnm18ZCc.amd.js +2 -0
  24. package/.chunks/menu-Gnm18ZCc.amd.js.map +1 -0
  25. package/.chunks/{popup-BFJ2eTTB.amd.js → popup-Dwf3PJQf.amd.js} +447 -441
  26. package/.chunks/popup-Dwf3PJQf.amd.js.map +1 -0
  27. package/.chunks/{popup-Bc6YggdE.es.js → popup-_a1ivPRI.es.js} +491 -485
  28. package/.chunks/popup-_a1ivPRI.es.js.map +1 -0
  29. package/.chunks/store-CX_6ZXhO.es.js.map +1 -1
  30. package/.chunks/store-esTid5oI.amd.js.map +1 -1
  31. package/README.md +86 -86
  32. package/assets/core.css +1 -1
  33. package/assets/forms.css +1 -1
  34. package/assets/listItem.css +1 -1
  35. package/assets/menu.css +1 -1
  36. package/common/common.d.ts +1 -1
  37. package/components/forms/avatar/avatar.vue.d.ts +12 -12
  38. package/components/forms/button/button.d.ts +14 -2
  39. package/components/forms/button/button.vue.d.ts +11 -12
  40. package/components/forms/checkbox/checkbox.vue.d.ts +19 -43
  41. package/components/forms/controlLabel/controlLabel.vue.d.ts +7 -8
  42. package/components/forms/forms.d.ts +0 -1
  43. package/components/forms/hint/hint.vue.d.ts +2 -3
  44. package/components/forms/input/input.d.ts +0 -1
  45. package/components/forms/input/input.vue.d.ts +11 -12
  46. package/components/forms/inputDate/inputDate.d.ts +0 -1
  47. package/components/forms/inputDate/inputDate.vue.d.ts +11 -12
  48. package/components/forms/radio/radio.vue.d.ts +8 -9
  49. package/components/forms/select/select.d.ts +0 -1
  50. package/components/forms/select/select.vue.d.ts +31 -69
  51. package/components/forms/select/stories/exampleOptions.d.ts +0 -1
  52. package/components/forms/switcher/switcher.vue.d.ts +8 -9
  53. package/components/forms/textarea/textarea.vue.d.ts +11 -12
  54. package/components/formsExt/editArea/editArea.d.ts +0 -1
  55. package/components/formsExt/editArea/editArea.vue.d.ts +13 -14
  56. package/components/formsExt/editInput/editInput.d.ts +0 -1
  57. package/components/formsExt/editInput/editInput.vue.d.ts +3 -4
  58. package/components/formsExt/formsExt.d.ts +0 -1
  59. package/components/formsExt/menu/menu.d.ts +0 -1
  60. package/components/formsExt/menu/menu.vue.d.ts +32 -48
  61. package/components/formsExt/menu/stories/items.d.ts +0 -1
  62. package/components/formsExt/radioGroup/radioGroup.d.ts +0 -1
  63. package/components/formsExt/radioGroup/radioGroup.vue.d.ts +31 -42
  64. package/components/formsExt/selector2/api.d.ts +0 -1
  65. package/components/formsExt/selector2/itemMulti.vue.d.ts +3 -4
  66. package/components/formsExt/selector2/selector2.d.ts +0 -1
  67. package/components/formsExt/selector2/selector2.vue.d.ts +37 -117
  68. package/components/popup/alert/alert.d.ts +8 -0
  69. package/components/popup/alert/alert.vue.d.ts +33 -0
  70. package/components/popup/confirm/confirm.d.ts +21 -0
  71. package/components/popup/confirm/confirm.vue.d.ts +35 -0
  72. package/components/popup/lib/popup.d.ts +0 -1
  73. package/components/popup/lib/worker.d.ts +4 -5
  74. package/components/popup/popup/listItem.vue.d.ts +11 -12
  75. package/components/popup/popup/opener.vue.d.ts +13 -14
  76. package/components/popup/popup/popup.d.ts +8 -2
  77. package/components/popup/popup/popup.vue.d.ts +13 -14
  78. package/components/popup/popup/widgetInput.vue.d.ts +32 -82
  79. package/components/popup/popup.d.ts +6 -1
  80. package/components/popup/prompt/prompt.d.ts +21 -0
  81. package/components/popup/prompt/prompt.vue.d.ts +35 -0
  82. package/components/project/project.d.ts +0 -1
  83. package/components/project/selectorCompetitors/composables.d.ts +0 -1
  84. package/components/project/selectorCompetitors/selectorCompetitors.d.ts +0 -1
  85. package/components/project/selectorCompetitors/selectorCompetitors.vue.d.ts +32 -24
  86. package/components/tabs/tabs/content.vue.d.ts +7 -8
  87. package/components/tabs/tabs/tab.vue.d.ts +7 -8
  88. package/components/tabs/tabs/tabs.vue.d.ts +7 -8
  89. package/components/tabs/tabs.d.ts +0 -1
  90. package/components/tabsView/tabsView/menu.vue.d.ts +22 -14
  91. package/components/tabsView/tabsView/menuItem.vue.d.ts +12 -12
  92. package/components/tabsView/tabsView/menuTitle.vue.d.ts +8 -8
  93. package/components/tabsView/tabsView/store.d.ts +1 -2
  94. package/components/tabsView/tabsView/tabsView.d.ts +0 -1
  95. package/components/tabsView/tabsView/tabsView.vue.d.ts +34 -34
  96. package/components/tabsView/tabsView.d.ts +0 -1
  97. package/core/app.amd.js +1 -1
  98. package/core/app.amd.js.map +1 -1
  99. package/core/app.d.ts +0 -1
  100. package/core/app.js +23 -21
  101. package/core/app.js.map +1 -1
  102. package/core/core/core.d.ts +14 -0
  103. package/core/core.amd.js +1 -1
  104. package/core/core.d.ts +2 -1
  105. package/core/core.js +1 -1
  106. package/core/directives/focus.d.ts +0 -1
  107. package/core/directives/sticky.d.ts +0 -1
  108. package/core/directives/swimUp.d.ts +0 -1
  109. package/core/directives/tooltip.d.ts +0 -1
  110. package/core/plugins/core.d.ts +0 -1
  111. package/core/plugins/i18n.d.ts +0 -1
  112. package/core/plugins/piniaTPA.d.ts +0 -1
  113. package/core/utils/lodash.d.ts +6 -0
  114. package/core/utils/price.d.ts +0 -1
  115. package/core/utils/store/localStorage.d.ts +0 -1
  116. package/core/utils/store/plugin.d.ts +0 -1
  117. package/core/utils/store/store.d.ts +0 -1
  118. package/forms/forms.amd.js +1 -1
  119. package/forms/forms.d.ts +1 -0
  120. package/forms/forms.js +1 -1
  121. package/forms/helpers.amd.js.map +1 -1
  122. package/forms/helpers.d.ts +1 -0
  123. package/forms/helpers.js.map +1 -1
  124. package/formsExt/formsExt.amd.js +1 -1
  125. package/formsExt/formsExt.amd.js.map +1 -1
  126. package/formsExt/formsExt.d.ts +1 -0
  127. package/formsExt/formsExt.js +3 -3
  128. package/formsExt/formsExt.js.map +1 -1
  129. package/icomoon/Read Me.txt +7 -7
  130. package/icomoon/demo-files/demo.css +161 -161
  131. package/icomoon/demo-files/demo.js +30 -30
  132. package/icomoon/demo.html +3379 -3379
  133. package/icomoon/fonts/Topvisor-2.svg +263 -263
  134. package/icomoon/style.css +740 -740
  135. package/package.json +36 -37
  136. package/popup/popup.amd.js +1 -1
  137. package/popup/popup.amd.js.map +1 -1
  138. package/popup/popup.d.ts +1 -0
  139. package/popup/popup.js +219 -21
  140. package/popup/popup.js.map +1 -1
  141. package/popup/worker.amd.js +1 -1
  142. package/popup/worker.amd.js.map +1 -1
  143. package/popup/worker.d.ts +3 -0
  144. package/popup/worker.js +2 -2
  145. package/popup/worker.js.map +1 -1
  146. package/project/project.amd.js +1 -1
  147. package/project/project.amd.js.map +1 -1
  148. package/project/project.d.ts +1 -0
  149. package/project/project.js +20 -20
  150. package/project/project.js.map +1 -1
  151. package/require/css.amd.js +12 -12
  152. package/tabs/tabs.amd.js +1 -1
  153. package/tabs/tabs.amd.js.map +1 -1
  154. package/tabs/tabs.d.ts +1 -0
  155. package/tabs/tabs.js +1 -1
  156. package/tabs/tabs.js.map +1 -1
  157. package/tabsView/tabsView.amd.js +1 -1
  158. package/tabsView/tabsView.amd.js.map +1 -1
  159. package/tabsView/tabsView.d.ts +1 -0
  160. package/tabsView/tabsView.js +1 -1
  161. package/tabsView/tabsView.js.map +1 -1
  162. package/utils/check.amd.js.map +1 -1
  163. package/utils/check.d.ts +1 -0
  164. package/utils/check.js.map +1 -1
  165. package/utils/clipboard.amd.js.map +1 -1
  166. package/utils/clipboard.d.ts +1 -0
  167. package/utils/clipboard.js.map +1 -1
  168. package/utils/date.amd.js +1 -1
  169. package/utils/date.d.ts +1 -0
  170. package/utils/date.js +2 -2
  171. package/utils/device.amd.js +1 -1
  172. package/utils/device.d.ts +1 -0
  173. package/utils/device.js +1 -1
  174. package/utils/dom.amd.js.map +1 -1
  175. package/utils/dom.d.ts +3 -0
  176. package/utils/dom.js.map +1 -1
  177. package/utils/image.amd.js.map +1 -1
  178. package/utils/image.d.ts +1 -0
  179. package/utils/image.js.map +1 -1
  180. package/utils/keyboard.amd.js.map +1 -1
  181. package/utils/keyboard.d.ts +1 -0
  182. package/utils/keyboard.js.map +1 -1
  183. package/utils/lodash.amd.js +2 -0
  184. package/utils/lodash.amd.js.map +1 -0
  185. package/utils/lodash.d.ts +2 -0
  186. package/utils/lodash.js +706 -0
  187. package/utils/lodash.js.map +1 -0
  188. package/utils/number.amd.js.map +1 -1
  189. package/utils/number.d.ts +1 -0
  190. package/utils/number.js.map +1 -1
  191. package/utils/price.amd.js +1 -1
  192. package/utils/price.amd.js.map +1 -1
  193. package/utils/price.d.ts +1 -0
  194. package/utils/price.js +2 -2
  195. package/utils/price.js.map +1 -1
  196. package/utils/route.amd.js.map +1 -1
  197. package/utils/route.d.ts +1 -0
  198. package/utils/route.js.map +1 -1
  199. package/utils/scroll.amd.js.map +1 -1
  200. package/utils/scroll.d.ts +1 -0
  201. package/utils/scroll.js.map +1 -1
  202. package/utils/store.d.ts +1 -0
  203. package/utils/string.amd.js +1 -1
  204. package/utils/string.amd.js.map +1 -1
  205. package/utils/string.d.ts +1 -0
  206. package/utils/string.js +1 -1
  207. package/utils/string.js.map +1 -1
  208. package/utils/system.amd.js.map +1 -1
  209. package/utils/system.d.ts +1 -0
  210. package/utils/system.js.map +1 -1
  211. package/utils/url.amd.js.map +1 -1
  212. package/utils/url.d.ts +1 -0
  213. package/utils/url.js.map +1 -1
  214. package/web-types.json +72 -72
  215. package/.chunks/datepicker-CcRVcC5P.es.js +0 -290
  216. package/.chunks/datepicker-CcRVcC5P.es.js.map +0 -1
  217. package/.chunks/datepicker-D_95vv2c.amd.js +0 -248
  218. package/.chunks/datepicker-D_95vv2c.amd.js.map +0 -1
  219. package/.chunks/forms-BZoPbSQt.es.js.map +0 -1
  220. package/.chunks/forms-KR6uVX5Z.amd.js +0 -3
  221. package/.chunks/forms-KR6uVX5Z.amd.js.map +0 -1
  222. package/.chunks/i18n-eDh3Aaw9.amd.js +0 -2
  223. package/.chunks/i18n-eDh3Aaw9.amd.js.map +0 -1
  224. package/.chunks/i18n-qpB8zyhD.es.js +0 -20
  225. package/.chunks/i18n-qpB8zyhD.es.js.map +0 -1
  226. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-4m2ZOlaP.amd.js +0 -2
  227. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-4m2ZOlaP.amd.js.map +0 -1
  228. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C2uuAtpx.es.js +0 -161
  229. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C2uuAtpx.es.js.map +0 -1
  230. package/.chunks/menu-CNIQ9vFJ.amd.js +0 -2
  231. package/.chunks/menu-CNIQ9vFJ.amd.js.map +0 -1
  232. package/.chunks/menu-DDYYS64d.es.js.map +0 -1
  233. package/.chunks/popup-BFJ2eTTB.amd.js.map +0 -1
  234. package/.chunks/popup-Bc6YggdE.es.js.map +0 -1
@@ -1,14 +1,14 @@
1
1
  import S from "../core/core.js";
2
- import { defineComponent as I, mergeModels as T, useModel as E, ref as W, onMounted as N, onUpdated as b, openBlock as c, createElementBlock as f, normalizeClass as x, Fragment as P, 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 Y, C as z, _ as F } from "./forms-BZoPbSQt.es.js";
4
- const w = ["../assets/menu.css"].map((u) => import.meta.resolve(u));
5
- S.insertCSSLinkToPage(w, !0);
2
+ import { defineComponent as T, mergeModels as E, useModel as W, ref as w, onMounted as N, onUpdated as b, openBlock as c, createElementBlock as f, normalizeClass as P, Fragment as $, renderList as q, createBlock as x, mergeProps as d, createSlots as y, withCtx as h, createTextVNode as A, toDisplayString as g, createVNode as D, createCommentVNode as K } from "vue";
3
+ import { T as M, i as Y, C as z, _ as F } from "./forms-NfVxcPud.es.js";
4
+ const I = ["../assets/menu.css"].map((i) => import.meta.resolve(i));
5
+ S.insertCSSLinkToPage(I, !0);
6
6
  const O = {
7
7
  key: 0,
8
8
  class: "top-menu_selectAll"
9
- }, U = /* @__PURE__ */ I({
9
+ }, U = /* @__PURE__ */ T({
10
10
  __name: "menu",
11
- props: /* @__PURE__ */ T({
11
+ props: /* @__PURE__ */ E({
12
12
  modelValue: {},
13
13
  items: {},
14
14
  isMultiple: { type: Boolean },
@@ -22,64 +22,63 @@ const O = {
22
22
  modelModifiers: {}
23
23
  }),
24
24
  emits: ["update:modelValue"],
25
- setup(u) {
26
- const o = u, l = E(u, "modelValue"), a = W();
27
- !o.isMultiple && !(typeof l.value == "string" || l.value instanceof String) && console.warn('Type check failed for prop "modelValue". Expected String: ' + typeof l.value), o.isMultiple && !Array.isArray(l.value) && console.warn('Type check failed for prop "modelValue". Expected Array: ' + typeof l.value), o.isMultiple && !o.canBeEmptyMultiple && Array.isArray(l.value) && !l.value.length && (l.value = [o.items[0].href ?? o.items[0].value]);
25
+ setup(i) {
26
+ const a = i, l = W(i, "modelValue"), o = w();
27
+ !a.isMultiple && !(typeof l.value == "string" || l.value instanceof String) && console.warn('Type check failed for prop "modelValue". Expected String: ' + typeof l.value), a.isMultiple && !Array.isArray(l.value) && console.warn('Type check failed for prop "modelValue". Expected Array: ' + typeof l.value), a.isMultiple && !a.canBeEmptyMultiple && Array.isArray(l.value) && !l.value.length && (l.value = [a.items[0].href ?? a.items[0].value]);
28
28
  const _ = (e) => Array.isArray(l.value) ? l.value.includes(e.value) : e.value === l.value, k = (e, s = !1) => {
29
29
  if (Array.isArray(l.value)) {
30
30
  let t = l.value.slice();
31
31
  if (s) {
32
- t.length || (t = o.items.map((i) => i.value));
32
+ t.length || (t = a.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
36
36
  t.length === 1 && t[0] === e.value ? t = [] : t = [e.value];
37
- !o.canBeEmptyMultiple && !t.length && (t = [e.value]), l.value = t;
37
+ !a.canBeEmptyMultiple && !t.length && (t = [e.value]), l.value = t;
38
38
  return;
39
39
  }
40
40
  l.value = e.value;
41
41
  }, C = (e) => {
42
- if (a.value.scrollWidth <= a.value.offsetWidth || e.shiftKey || Math.abs(e.deltaY) < 50) return;
42
+ if (o.value.scrollWidth <= o.value.offsetWidth || e.shiftKey || Math.abs(e.deltaY) < 50) return;
43
43
  e.preventDefault();
44
44
  const s = e.deltaY > 0 ? 30 : -30;
45
- a.value.scrollLeft = a.value.scrollLeft + s;
45
+ o.value.scrollLeft = o.value.scrollLeft + s;
46
46
  }, p = (e = !0) => {
47
47
  var m, v;
48
- const s = a.value.querySelector(".top-active");
48
+ const s = o.value.querySelector(".top-active");
49
49
  if (!s) return;
50
- const t = 24, r = s.offsetLeft - a.value.offsetLeft - t, i = s.offsetLeft - a.value.offsetLeft + s.clientWidth + t, B = a.value.scrollLeft, V = a.value.clientWidth + a.value.scrollLeft;
50
+ const t = 24, r = s.offsetLeft - o.value.offsetLeft - t, u = s.offsetLeft - o.value.offsetLeft + s.clientWidth + t, B = o.value.scrollLeft, V = o.value.clientWidth + o.value.scrollLeft;
51
51
  let n;
52
- r < B && (n = r), i > V && (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" }));
52
+ r < B && (n = r), u > V && (n = u - o.value.clientWidth), n !== void 0 && (Y() ? (v = (m = z).$) == null || v.call(m, o.value).animate({ scrollLeft: n }, e ? 200 : 0) : o.value.scrollTo({ left: n, behavior: e ? "smooth" : "auto" }));
53
53
  }, L = () => {
54
54
  if (Array.isArray(l.value)) {
55
- if (l.value.length === o.items.length) {
56
- l.value = [o.items[0].href ?? o.items[0].value];
55
+ if (l.value.length === a.items.length) {
56
+ l.value = [a.items[0].href ?? a.items[0].value];
57
57
  return;
58
58
  }
59
- l.value = o.items.map((e) => e.href ?? e.value);
59
+ l.value = a.items.map((e) => e.href ?? e.value);
60
60
  }
61
61
  };
62
62
  return N(() => p(!1)), b(() => p(!0)), (e, s) => (c(), f("div", {
63
63
  ref_key: "el",
64
- ref: a,
65
- class: x({
64
+ ref: o,
65
+ class: P({
66
66
  "top-menu": !0,
67
- ["top-style_" + e.styling]: !0,
68
- "top-unwrap-x": e.styling === "default"
67
+ ["top-style_" + e.styling]: !0
68
+ // ['top-unwrap-x']: styling === 'default',
69
69
  }),
70
70
  onWheel: C
71
71
  }, [
72
- (c(!0), f(P, null, $(e.items, (t) => (c(), q(M, d({ ref_for: !0 }, t, {
72
+ (c(!0), f($, null, q(e.items, (t) => (c(), x(M, d({ ref_for: !0 }, t, {
73
73
  class: "top-menu_item",
74
74
  color: "theme",
75
- styling: "",
76
75
  onClick: (r) => k(t, r.ctrlKey),
77
76
  isActive: _(t)
78
77
  }), y({ _: 2 }, [
79
78
  t.content ? {
80
79
  name: "default",
81
- fn: g(() => [
82
- h(A(t.content), 1)
80
+ fn: h(() => [
81
+ A(g(t.content), 1)
83
82
  ]),
84
83
  key: "0"
85
84
  } : void 0
@@ -94,8 +93,8 @@ const O = {
94
93
  }), y({ _: 2 }, [
95
94
  e.selectAllItem.content ? {
96
95
  name: "default",
97
- fn: g(() => [
98
- h(A(e.selectAllItem.content), 1)
96
+ fn: h(() => [
97
+ A(g(e.selectAllItem.content), 1)
99
98
  ]),
100
99
  key: "0"
101
100
  } : void 0
@@ -109,12 +108,11 @@ const O = {
109
108
  "top-menu_selectAll": "top-menu_selectAll",
110
109
  "top-style_default": "top-style_default",
111
110
  "top-active": "top-active",
112
- "top-style_bar": "top-style_bar",
113
- "top-unwrap-x": "top-unwrap-x"
111
+ "top-style_bar": "top-style_bar"
114
112
  }, G = {
115
113
  $style: j
116
114
  }, R = /* @__PURE__ */ F(U, [["__cssModules", G]]);
117
115
  export {
118
116
  R as M
119
117
  };
120
- //# sourceMappingURL=menu-DDYYS64d.es.js.map
118
+ //# sourceMappingURL=menu-ChmT8cWp.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-ChmT8cWp.es.js","sources":["../../src/components/formsExt/menu/menu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, onUpdated, ref } from 'vue';\nimport type { Item, Props } from './menu';\nimport Core from '@/core/core/core';\nimport { isSafari } from '@/core/utils/device';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tstyling: 'default',\n});\n\nconst model = defineModel({\n\trequired: true,\n});\n\nconst el = ref();\n\n// валидация типа modelValue без возможности выбора нескольких значений (ожидается строка)\nif (!props.isMultiple && !(typeof (model.value) === 'string' || model.value instanceof String)) {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected String: ' + typeof (model.value));\n}\n\n// валидация типа modelValue с возможностью выбора нескольких значений (ожидается массив)\nif (props.isMultiple && !Array.isArray(model.value)) {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected Array: ' + typeof (model.value));\n}\n\n// для множественного выбора без пустого множества\n// если ничего не выбрано, присваиваем 1-ое значение\nif (props.isMultiple && !props.canBeEmptyMultiple && Array.isArray(model.value) && !model.value.length) {\n\tmodel.value = [props.items[0].href ?? props.items[0].value];\n}\n\nconst itemIsActive = (item: Item) => {\n\tif (!Array.isArray(model.value)) {\n\t\treturn item.value === model.value;\n\t}\n\n\treturn model.value.includes(item.value);\n};\n\n/**\n * Выбрать элемент\n * @param item\n * @param toggle - добавить или исключить элемент, для isMultiple\n */\nconst select = (item: Item, toggle = false) => {\n\tif (Array.isArray(model.value)) {\n\t\tlet modelNew = model.value.slice();\n\n\t\tif (toggle) {\n\t\t\tif (!modelNew.length) modelNew = props.items.map(item => item.value);\n\n\t\t\tconst index = modelNew.indexOf(item.value);\n\t\t\tif (index === -1) {\n\t\t\t\tmodelNew.push(item.value);\n\t\t\t} else {\n\t\t\t\tmodelNew.splice(index, 1);\n\t\t\t}\n\t\t} else {\n\t\t\tif (modelNew.length === 1 && modelNew[0] === item.value) {\n\t\t\t\tmodelNew = [];\n\t\t\t} else {\n\t\t\t\tmodelNew = [item.value];\n\t\t\t}\n\t\t}\n\n\t\tif (!props.canBeEmptyMultiple && !modelNew.length) modelNew = [item.value];\n\n\t\tmodel.value = modelNew;\n\n\t\treturn;\n\t}\n\n\tmodel.value = item.value;\n};\n\n// вертикальный скролл в горизонтальный скролл\nconst onWheel = (event: WheelEvent) => {\n\tif (el.value.scrollWidth <= el.value.offsetWidth) return;\n\tif (event.shiftKey) return;\n\tif (Math.abs(event.deltaY) < 50) return; // устройство с высокой точностью, например тачпад\n\n\tevent.preventDefault();\n\n\tconst delta = event.deltaY > 0 ? 30 : -30;\n\tel.value.scrollLeft = el.value.scrollLeft + delta;\n};\n\n/**\n * Замена стандартному scrollIntoView, который меняет скролл документа\n *\n * Выравнивание по ближнему краю элемента\n *\n * Выравнивается таким образом, чтобы был виден соседний элемент\n */\nconst scrollIntoView = (isSmooth = true) => {\n\tconst elBtn = el.value.querySelector('.top-active');\n\tif (!elBtn) return;\n\n\tconst gap = 24;\n\n\t// левая и правая координаты элемента\n\tconst leftMargin = elBtn.offsetLeft - el.value.offsetLeft - gap;\n\tconst rightMargin = elBtn.offsetLeft - el.value.offsetLeft + elBtn.clientWidth + gap;\n\n\t// левая и правая границы видимой части меню\n\tconst leftMarginParent = el.value.scrollLeft;\n\tconst rightMarginParent = el.value.clientWidth + el.value.scrollLeft;\n\n\tlet scrollLeft: number | undefined = undefined;\n\n\t// левую границу элемента к левой границе меню\n\tif (leftMargin < leftMarginParent) scrollLeft = leftMargin;\n\n\t// правую границу элемента к правой границе меню\n\tif (rightMargin > rightMarginParent) scrollLeft = rightMargin - el.value.clientWidth;\n\n\tif (scrollLeft !== undefined) {\n\t\tif (isSafari()) {\n\t\t\tCore.$?.(el.value).animate({ scrollLeft: scrollLeft }, isSmooth ? 200 : 0);\n\t\t} else {\n\t\t\tel.value.scrollTo({ left: scrollLeft, behavior: isSmooth ? 'smooth' : 'auto' });\n\t\t}\n\t}\n};\n\n/**\n * Выбрать все элементы в меню\n */\nconst selectAll = () => {\n\tif (!Array.isArray(model.value)) return;\n\n\tif (model.value.length === props.items.length) {\n\t\tmodel.value = [props.items[0].href ?? props.items[0].value];\n\t\treturn;\n\t}\n\n\tmodel.value = props.items.map(item => item.href ?? item.value);\n};\n\nonMounted(() => scrollIntoView(false));\nonUpdated(() => scrollIntoView(true));\n\n</script>\n\n<template>\n\t<div\n\t\tref=\"el\"\n\t\t:class=\"{\n\t\t\t'top-menu': true,\n\t\t\t['top-style_' + styling]: true,\n\t\t\t// ['top-unwrap-x']: styling === 'default',\n\t\t}\"\n\t\t@wheel=\"onWheel\"\n\t>\n\t\t<TopButton\n\t\t\tv-for=\"item in items\"\n\t\t\t:=\"item\"\n\t\t\tclass=\"top-menu_item\"\n\t\t\tcolor=\"theme\"\n\t\t\t@click=\"select(item, $event.ctrlKey)\"\n\t\t\t:isActive=\"itemIsActive(item)\"\n\t\t>\n\t\t\t<template #default v-if=\"item.content\">\n\t\t\t\t{{ item.content }}\n\t\t\t</template>\n\t\t</TopButton>\n\n\t\t<div\n\t\t\tv-if=\"Array.isArray(model) && selectAllItem\"\n\t\t\tclass=\"top-menu_selectAll\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\t:=\"selectAllItem\"\n\t\t\t\tclass=\"top-menu_item\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\tstyling=\"\"\n\t\t\t\t@click=\"selectAll()\"\n\t\t\t\t:isActive=\"model.length === items.length\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"selectAllItem.content\">\n\t\t\t\t\t{{ selectAllItem.content }}\n\t\t\t\t</template>\n\t\t\t</TopButton>\n\t\t</div>\n\t</div>\n</template>\n\n<style module>\n.top-menu {\n\t--scroll-thumb-color: var(--color-line-1);\n\t--scroll-thumb-color-hover: var(--color-line-2);\n\t--scroll-thumb-color-active: var(--color-line-3);\n\n\tmax-width: 100%;\n\tdisplay: flex;\n\talign-items: flex-start;\n\tgap: var(--top-gap-2);\n\toverflow-x: auto;\n\tscrollbar-width: none; /* firefox */\n\n\t/* предотвратить натинвые события браузера (назад / вперед) */\n\toverscroll-behavior-x: contain;\n}\n\n.top-menu::-webkit-scrollbar { display: none; }\n\n.top-menu .top-menu_item {\n\t--top-button-color: var(--color-text-2);\n\n\toutline-offset: -2px !important;\n\tmin-width: 0;\n\tmargin: 0;\n\tflex-shrink: 0;\n}\n\n.top-menu .top-menu_item[data-top-icon] {\n\t--top-icon-color: var(--color-text-2);\n}\n\n.top-menu_selectAll {\n\tposition: sticky;\n\tright: 0;\n\tbackground: var(--content-background-color);\n\tborder-left: 1px solid var(--color-line-1-opacity);\n\tpadding-left: var(--top-padding-1);\n\tbox-shadow: var(--content-background-color) var(--top-padding-2) 0px;\n}\n\n/* style default */\n.top-menu.top-style_default .top-menu_item {\n\t--top-forms-radius: 0;\n\t--top-forms-border-color: transparent;\n\t--top-forms-border-width: 2px;\n\n\tfilter: none;\n\tbox-shadow: none;\n\tborder: none;\n\tborder-bottom: var(--top-forms-border-width) solid var(--top-forms-border-color);\n\tbackground: none;\n}\n\n.top-style_default > .top-menu_item > [data-top-badge] {\n\tmargin-top: 0;\n}\n\n.top-menu.top-style_default .top-menu_item:hover {\n\t--top-icon-color: var(--color-text-1);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-2-opacity);\n}\n\n.top-menu.top-style_default .top-menu_item:active,\n.top-menu.top-style_default .top-menu_item.top-active {\n\t--top-icon-color: var(--color-icon-primary-2);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-primary-1);\n}\n\n.top-menu.top-style_default .top-menu_selectAll {\n\tpadding-left: var(--top-padding-2);\n}\n\n/* style bar */\n.top-menu.top-style_bar {\n\tborder-radius: var(--top-radius-3);\n\tborder: 1px solid var(--color-line-2-opacity);\n\tpadding: var(--top-padding-1);\n\tgap: 3px;\n}\n.top-menu.top-style_bar .top-menu_item {\n\t--top-button-background-color-hover: var(--color-layer-secondary-1);\n\t--top-button-background-color-active: var(--color-layer-secondary-2);\n\t--top-button-background-color-selected: var(--color-layer-primary-1);\n\n\tposition: relative;\n}\n\n.top-menu.top-style_bar .top-menu_item:hover {\n\t--top-icon-color: var(--color-icon-1);\n\t--top-button-color: var(--color-text-1);\n}\n\n.top-menu.top-style_bar .top-menu_item.top-active {\n\t--top-icon-color: var(--color-icon-primary-2);\n\t--top-button-color: var(--color-text-primary-1);\n}\n\n/* разделители кнопок в баре */\n.top-menu.top-style_bar .top-menu_item:not(:first-child):not(.top-active):not(:hover):after {\n\tcontent: \"\";\n\tbackground: var(--color-line-1-opacity);\n\twidth: 1px;\n\theight: 60%;\n\tdisplay: block;\n\tposition: absolute;\n\tleft: -2px;\n}\n.top-menu.top-style_bar .top-menu_item.top-active + .top-menu_item:after,\n.top-menu.top-style_bar .top-menu_item:hover + .top-menu_item:after {\n\tcontent: none !important;\n}\n\n/*\n.top-style_bar > .top-menu_item > [data-top-badge] {\n\tmargin-top: -3px;\n}\n*/\n\n/** TODO: .top-unwrap-x надо вынести глобально в UI или добавить в стили для storybook */\n/*\n.top-menu.top-unwrap-x {\n\tpadding-right: var(--top-unwrap-x);\n\tpadding-left: var(--top-unwrap-x);\n\tmargin-right: calc(0px - var(--top-unwrap-x));\n\tmargin-left: calc(0px - var(--top-unwrap-x));\n}\n*/\n</style>\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":"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"}
@@ -0,0 +1,2 @@
1
+ define(["require","exports","vue","./forms--Ye61xQ5.amd","../require/css.amd!../assets/menu.css"],function(C,m,e,u){"use strict";if(typeof e>"u")var e=window.Vue;const y={key:0,class:"top-menu_selectAll"},h=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,r=!1)=>{if(Array.isArray(o.value)){let l=o.value.slice();if(r){l.length||(l=s.items.map(c=>c.value));const n=l.indexOf(t.value);n===-1?l.push(t.value):l.splice(n,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},_=t=>{if(a.value.scrollWidth<=a.value.offsetWidth||t.shiftKey||Math.abs(t.deltaY)<50)return;t.preventDefault();const r=t.deltaY>0?30:-30;a.value.scrollLeft=a.value.scrollLeft+r},p=(t=!0)=>{var v,d;const r=a.value.querySelector(".top-active");if(!r)return;const l=24,n=r.offsetLeft-a.value.offsetLeft-l,c=r.offsetLeft-a.value.offsetLeft+r.clientWidth+l,V=a.value.scrollLeft,L=a.value.clientWidth+a.value.scrollLeft;let i;n<V&&(i=n),c>L&&(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"}))},B=()=>{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,r)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:a,class:e.normalizeClass({"top-menu":!0,["top-style_"+t.styling]:!0}),onWheel:_},[(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",onClick:n=>k(l,n.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:r[0]||(r[0]=l=>B()),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))}}),g={$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"}},A=u._export_sfc(h,[["__cssModules",g]]);m.Menu=A});
2
+ //# sourceMappingURL=menu-Gnm18ZCc.amd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu-Gnm18ZCc.amd.js","sources":["../../src/components/formsExt/menu/menu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, onUpdated, ref } from 'vue';\nimport type { Item, Props } from './menu';\nimport Core from '@/core/core/core';\nimport { isSafari } from '@/core/utils/device';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tstyling: 'default',\n});\n\nconst model = defineModel({\n\trequired: true,\n});\n\nconst el = ref();\n\n// валидация типа modelValue без возможности выбора нескольких значений (ожидается строка)\nif (!props.isMultiple && !(typeof (model.value) === 'string' || model.value instanceof String)) {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected String: ' + typeof (model.value));\n}\n\n// валидация типа modelValue с возможностью выбора нескольких значений (ожидается массив)\nif (props.isMultiple && !Array.isArray(model.value)) {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected Array: ' + typeof (model.value));\n}\n\n// для множественного выбора без пустого множества\n// если ничего не выбрано, присваиваем 1-ое значение\nif (props.isMultiple && !props.canBeEmptyMultiple && Array.isArray(model.value) && !model.value.length) {\n\tmodel.value = [props.items[0].href ?? props.items[0].value];\n}\n\nconst itemIsActive = (item: Item) => {\n\tif (!Array.isArray(model.value)) {\n\t\treturn item.value === model.value;\n\t}\n\n\treturn model.value.includes(item.value);\n};\n\n/**\n * Выбрать элемент\n * @param item\n * @param toggle - добавить или исключить элемент, для isMultiple\n */\nconst select = (item: Item, toggle = false) => {\n\tif (Array.isArray(model.value)) {\n\t\tlet modelNew = model.value.slice();\n\n\t\tif (toggle) {\n\t\t\tif (!modelNew.length) modelNew = props.items.map(item => item.value);\n\n\t\t\tconst index = modelNew.indexOf(item.value);\n\t\t\tif (index === -1) {\n\t\t\t\tmodelNew.push(item.value);\n\t\t\t} else {\n\t\t\t\tmodelNew.splice(index, 1);\n\t\t\t}\n\t\t} else {\n\t\t\tif (modelNew.length === 1 && modelNew[0] === item.value) {\n\t\t\t\tmodelNew = [];\n\t\t\t} else {\n\t\t\t\tmodelNew = [item.value];\n\t\t\t}\n\t\t}\n\n\t\tif (!props.canBeEmptyMultiple && !modelNew.length) modelNew = [item.value];\n\n\t\tmodel.value = modelNew;\n\n\t\treturn;\n\t}\n\n\tmodel.value = item.value;\n};\n\n// вертикальный скролл в горизонтальный скролл\nconst onWheel = (event: WheelEvent) => {\n\tif (el.value.scrollWidth <= el.value.offsetWidth) return;\n\tif (event.shiftKey) return;\n\tif (Math.abs(event.deltaY) < 50) return; // устройство с высокой точностью, например тачпад\n\n\tevent.preventDefault();\n\n\tconst delta = event.deltaY > 0 ? 30 : -30;\n\tel.value.scrollLeft = el.value.scrollLeft + delta;\n};\n\n/**\n * Замена стандартному scrollIntoView, который меняет скролл документа\n *\n * Выравнивание по ближнему краю элемента\n *\n * Выравнивается таким образом, чтобы был виден соседний элемент\n */\nconst scrollIntoView = (isSmooth = true) => {\n\tconst elBtn = el.value.querySelector('.top-active');\n\tif (!elBtn) return;\n\n\tconst gap = 24;\n\n\t// левая и правая координаты элемента\n\tconst leftMargin = elBtn.offsetLeft - el.value.offsetLeft - gap;\n\tconst rightMargin = elBtn.offsetLeft - el.value.offsetLeft + elBtn.clientWidth + gap;\n\n\t// левая и правая границы видимой части меню\n\tconst leftMarginParent = el.value.scrollLeft;\n\tconst rightMarginParent = el.value.clientWidth + el.value.scrollLeft;\n\n\tlet scrollLeft: number | undefined = undefined;\n\n\t// левую границу элемента к левой границе меню\n\tif (leftMargin < leftMarginParent) scrollLeft = leftMargin;\n\n\t// правую границу элемента к правой границе меню\n\tif (rightMargin > rightMarginParent) scrollLeft = rightMargin - el.value.clientWidth;\n\n\tif (scrollLeft !== undefined) {\n\t\tif (isSafari()) {\n\t\t\tCore.$?.(el.value).animate({ scrollLeft: scrollLeft }, isSmooth ? 200 : 0);\n\t\t} else {\n\t\t\tel.value.scrollTo({ left: scrollLeft, behavior: isSmooth ? 'smooth' : 'auto' });\n\t\t}\n\t}\n};\n\n/**\n * Выбрать все элементы в меню\n */\nconst selectAll = () => {\n\tif (!Array.isArray(model.value)) return;\n\n\tif (model.value.length === props.items.length) {\n\t\tmodel.value = [props.items[0].href ?? props.items[0].value];\n\t\treturn;\n\t}\n\n\tmodel.value = props.items.map(item => item.href ?? item.value);\n};\n\nonMounted(() => scrollIntoView(false));\nonUpdated(() => scrollIntoView(true));\n\n</script>\n\n<template>\n\t<div\n\t\tref=\"el\"\n\t\t:class=\"{\n\t\t\t'top-menu': true,\n\t\t\t['top-style_' + styling]: true,\n\t\t\t// ['top-unwrap-x']: styling === 'default',\n\t\t}\"\n\t\t@wheel=\"onWheel\"\n\t>\n\t\t<TopButton\n\t\t\tv-for=\"item in items\"\n\t\t\t:=\"item\"\n\t\t\tclass=\"top-menu_item\"\n\t\t\tcolor=\"theme\"\n\t\t\t@click=\"select(item, $event.ctrlKey)\"\n\t\t\t:isActive=\"itemIsActive(item)\"\n\t\t>\n\t\t\t<template #default v-if=\"item.content\">\n\t\t\t\t{{ item.content }}\n\t\t\t</template>\n\t\t</TopButton>\n\n\t\t<div\n\t\t\tv-if=\"Array.isArray(model) && selectAllItem\"\n\t\t\tclass=\"top-menu_selectAll\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\t:=\"selectAllItem\"\n\t\t\t\tclass=\"top-menu_item\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\tstyling=\"\"\n\t\t\t\t@click=\"selectAll()\"\n\t\t\t\t:isActive=\"model.length === items.length\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"selectAllItem.content\">\n\t\t\t\t\t{{ selectAllItem.content }}\n\t\t\t\t</template>\n\t\t\t</TopButton>\n\t\t</div>\n\t</div>\n</template>\n\n<style module>\n.top-menu {\n\t--scroll-thumb-color: var(--color-line-1);\n\t--scroll-thumb-color-hover: var(--color-line-2);\n\t--scroll-thumb-color-active: var(--color-line-3);\n\n\tmax-width: 100%;\n\tdisplay: flex;\n\talign-items: flex-start;\n\tgap: var(--top-gap-2);\n\toverflow-x: auto;\n\tscrollbar-width: none; /* firefox */\n\n\t/* предотвратить натинвые события браузера (назад / вперед) */\n\toverscroll-behavior-x: contain;\n}\n\n.top-menu::-webkit-scrollbar { display: none; }\n\n.top-menu .top-menu_item {\n\t--top-button-color: var(--color-text-2);\n\n\toutline-offset: -2px !important;\n\tmin-width: 0;\n\tmargin: 0;\n\tflex-shrink: 0;\n}\n\n.top-menu .top-menu_item[data-top-icon] {\n\t--top-icon-color: var(--color-text-2);\n}\n\n.top-menu_selectAll {\n\tposition: sticky;\n\tright: 0;\n\tbackground: var(--content-background-color);\n\tborder-left: 1px solid var(--color-line-1-opacity);\n\tpadding-left: var(--top-padding-1);\n\tbox-shadow: var(--content-background-color) var(--top-padding-2) 0px;\n}\n\n/* style default */\n.top-menu.top-style_default .top-menu_item {\n\t--top-forms-radius: 0;\n\t--top-forms-border-color: transparent;\n\t--top-forms-border-width: 2px;\n\n\tfilter: none;\n\tbox-shadow: none;\n\tborder: none;\n\tborder-bottom: var(--top-forms-border-width) solid var(--top-forms-border-color);\n\tbackground: none;\n}\n\n.top-style_default > .top-menu_item > [data-top-badge] {\n\tmargin-top: 0;\n}\n\n.top-menu.top-style_default .top-menu_item:hover {\n\t--top-icon-color: var(--color-text-1);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-2-opacity);\n}\n\n.top-menu.top-style_default .top-menu_item:active,\n.top-menu.top-style_default .top-menu_item.top-active {\n\t--top-icon-color: var(--color-icon-primary-2);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-primary-1);\n}\n\n.top-menu.top-style_default .top-menu_selectAll {\n\tpadding-left: var(--top-padding-2);\n}\n\n/* style bar */\n.top-menu.top-style_bar {\n\tborder-radius: var(--top-radius-3);\n\tborder: 1px solid var(--color-line-2-opacity);\n\tpadding: var(--top-padding-1);\n\tgap: 3px;\n}\n.top-menu.top-style_bar .top-menu_item {\n\t--top-button-background-color-hover: var(--color-layer-secondary-1);\n\t--top-button-background-color-active: var(--color-layer-secondary-2);\n\t--top-button-background-color-selected: var(--color-layer-primary-1);\n\n\tposition: relative;\n}\n\n.top-menu.top-style_bar .top-menu_item:hover {\n\t--top-icon-color: var(--color-icon-1);\n\t--top-button-color: var(--color-text-1);\n}\n\n.top-menu.top-style_bar .top-menu_item.top-active {\n\t--top-icon-color: var(--color-icon-primary-2);\n\t--top-button-color: var(--color-text-primary-1);\n}\n\n/* разделители кнопок в баре */\n.top-menu.top-style_bar .top-menu_item:not(:first-child):not(.top-active):not(:hover):after {\n\tcontent: \"\";\n\tbackground: var(--color-line-1-opacity);\n\twidth: 1px;\n\theight: 60%;\n\tdisplay: block;\n\tposition: absolute;\n\tleft: -2px;\n}\n.top-menu.top-style_bar .top-menu_item.top-active + .top-menu_item:after,\n.top-menu.top-style_bar .top-menu_item:hover + .top-menu_item:after {\n\tcontent: none !important;\n}\n\n/*\n.top-style_bar > .top-menu_item > [data-top-badge] {\n\tmargin-top: -3px;\n}\n*/\n\n/** TODO: .top-unwrap-x надо вынести глобально в UI или добавить в стили для storybook */\n/*\n.top-menu.top-unwrap-x {\n\tpadding-right: var(--top-unwrap-x);\n\tpadding-left: var(--top-unwrap-x);\n\tmargin-right: calc(0px - var(--top-unwrap-x));\n\tmargin-left: calc(0px - var(--top-unwrap-x));\n}\n*/\n</style>\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"}