@topvisor/ui 0.9.30 → 0.9.32

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 (175) hide show
  1. package/.chunks/datepicker-5QMJRJn-.amd.js +247 -0
  2. package/.chunks/datepicker-5QMJRJn-.amd.js.map +1 -0
  3. package/.chunks/datepicker-D1JLNEmV.es.js +289 -0
  4. package/.chunks/datepicker-D1JLNEmV.es.js.map +1 -0
  5. package/.chunks/{forms-0MQ_zU80.amd.js → forms-B2NcBl7S.amd.js} +3 -3
  6. package/.chunks/forms-B2NcBl7S.amd.js.map +1 -0
  7. package/.chunks/{forms-BkBLBZBn.es.js → forms-S36M7cBH.es.js} +68 -69
  8. package/.chunks/forms-S36M7cBH.es.js.map +1 -0
  9. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-CmrUY2go.es.js → listItem.vue_vue_type_script_setup_true_lang-BfCj7kQR.es.js} +20 -20
  10. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-BfCj7kQR.es.js.map +1 -0
  11. package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-Cr9e1nzK.amd.js → listItem.vue_vue_type_script_setup_true_lang-C7tg-67i.amd.js} +2 -2
  12. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C7tg-67i.amd.js.map +1 -0
  13. package/.chunks/{menu-BGUYnOx6.amd.js → menu-S1Hk7D3W.amd.js} +2 -2
  14. package/.chunks/menu-S1Hk7D3W.amd.js.map +1 -0
  15. package/.chunks/{menu-DMBqYUnZ.es.js → menu-v5knQbeF.es.js} +9 -9
  16. package/.chunks/menu-v5knQbeF.es.js.map +1 -0
  17. package/.chunks/{popup-CTCFSYwA.es.js → popup-BK3xlBZm.es.js} +485 -431
  18. package/.chunks/popup-BK3xlBZm.es.js.map +1 -0
  19. package/.chunks/{popup-CcxDRowY.amd.js → popup-DncRq57t.amd.js} +440 -386
  20. package/.chunks/popup-DncRq57t.amd.js.map +1 -0
  21. package/.chunks/store-Bl79G7T_.amd.js.map +1 -1
  22. package/.chunks/store-PoMCiuBr.es.js.map +1 -1
  23. package/.chunks/{widgetInput-Crf7T-Na.es.js → widgetInput-Br5COpvG.es.js} +3 -3
  24. package/.chunks/widgetInput-Br5COpvG.es.js.map +1 -0
  25. package/.chunks/{widgetInput-DfOBj0qz.amd.js → widgetInput-CrrUoVPc.amd.js} +2 -2
  26. package/.chunks/widgetInput-CrrUoVPc.amd.js.map +1 -0
  27. package/README.md +86 -86
  28. package/assets/core.css +1 -1
  29. package/assets/dark.css +1 -1
  30. package/assets/forms.css +1 -1
  31. package/assets/formsExt.css +1 -1
  32. package/assets/light.css +1 -1
  33. package/assets/menu.css +1 -1
  34. package/assets/tabs.css +1 -1
  35. package/assets/tabsView.css +1 -1
  36. package/assets/widgetInput.css +1 -1
  37. package/core/core.amd.js +1 -1
  38. package/core/core.js +1 -1
  39. package/forms/forms.amd.js +1 -1
  40. package/forms/forms.js +1 -1
  41. package/forms/helpers.amd.js.map +1 -1
  42. package/forms/helpers.js.map +1 -1
  43. package/formsExt/formsExt.amd.js +1 -1
  44. package/formsExt/formsExt.amd.js.map +1 -1
  45. package/formsExt/formsExt.js +6 -5
  46. package/formsExt/formsExt.js.map +1 -1
  47. package/icomoon/Read Me.txt +7 -7
  48. package/icomoon/demo-files/demo.css +161 -161
  49. package/icomoon/demo-files/demo.js +30 -30
  50. package/icomoon/demo.html +3379 -3239
  51. package/icomoon/fonts/Topvisor-2.svg +263 -253
  52. package/icomoon/fonts/Topvisor-2.ttf +0 -0
  53. package/icomoon/fonts/Topvisor-2.woff +0 -0
  54. package/icomoon/selection.json +1 -1
  55. package/icomoon/style.css +740 -710
  56. package/package.json +24 -24
  57. package/popup/popup.amd.js +1 -1
  58. package/popup/popup.js +2 -2
  59. package/popup/worker.amd.js +1 -1
  60. package/popup/worker.amd.js.map +1 -1
  61. package/popup/worker.js +2 -2
  62. package/popup/worker.js.map +1 -1
  63. package/project/project.amd.js +1 -1
  64. package/project/project.amd.js.map +1 -1
  65. package/project/project.js +38 -40
  66. package/project/project.js.map +1 -1
  67. package/require/css.amd.js +11 -17
  68. package/src/components/forms/button/button.stories.d.ts +3 -3
  69. package/src/components/forms/button/button.vue.d.ts +7 -5
  70. package/src/components/forms/checkbox/checkbox.stories.d.ts +8 -7
  71. package/src/components/forms/checkbox/checkbox.vue.d.ts +10 -6
  72. package/src/components/forms/controlLabel/controlLabel.stories.d.ts +3 -3
  73. package/src/components/forms/controlLabel/controlLabel.vue.d.ts +4 -2
  74. package/src/components/forms/hint/hint.stories.d.ts +12 -76
  75. package/src/components/forms/input/input.stories.d.ts +3 -3
  76. package/src/components/forms/input/input.vue.d.ts +6 -4
  77. package/src/components/forms/inputDate/datepicker.d.ts +0 -2
  78. package/src/components/forms/inputRange/inputRange.stories.d.ts +15 -47
  79. package/src/components/forms/inputRange/inputRange.vue.d.ts +4 -2
  80. package/src/components/forms/radio/radio.stories.d.ts +3 -3
  81. package/src/components/forms/radio/radio.vue.d.ts +6 -4
  82. package/src/components/forms/select/select.stories.d.ts +2 -2
  83. package/src/components/forms/select/select.vue.d.ts +4 -2
  84. package/src/components/forms/switcher/switcher.stories.d.ts +3 -3
  85. package/src/components/forms/switcher/switcher.vue.d.ts +6 -4
  86. package/src/components/formsExt/editInput/editInput.stories.d.ts +3 -3
  87. package/src/components/formsExt/editInput/editInput.vue.d.ts +6 -4
  88. package/src/components/formsExt/menu/menu.stories.d.ts +1 -1
  89. package/src/components/formsExt/menu/menu.vue.d.ts +1 -1
  90. package/src/components/formsExt/selector2/api.d.ts +3 -3
  91. package/src/components/formsExt/selector2/selector2.stories.d.ts +36 -35
  92. package/src/components/formsExt/selector2/selector2.vue.d.ts +19 -17
  93. package/src/components/popup/popup/listItem.vue.d.ts +7 -5
  94. package/src/components/popup/popup/opener.vue.d.ts +6 -4
  95. package/src/components/popup/popup/popup.stories.d.ts +21 -85
  96. package/src/components/popup/popup/popup.vue.d.ts +11 -9
  97. package/src/components/project/selectorCompetitors/composables.d.ts +5 -0
  98. package/src/components/project/selectorCompetitors/selectorCompetitors.d.ts +4 -2
  99. package/src/components/project/selectorCompetitors/selectorCompetitors.stories.d.ts +2 -2
  100. package/src/components/project/selectorCompetitors/selectorCompetitors.vue.d.ts +4 -2
  101. package/src/components/project/selectorCompetitors/stories/items.d.ts +2 -4
  102. package/src/components/project/selectorCompetitors/types/competitor.d.ts +7 -0
  103. package/src/components/tabs/tabs/content.vue.d.ts +4 -2
  104. package/src/components/tabs/tabs/tab.vue.d.ts +4 -2
  105. package/src/components/tabs/tabs/tabs.stories.d.ts +27 -91
  106. package/src/components/tabs/tabs/tabs.vue.d.ts +4 -2
  107. package/src/components/tabsView/tabsView/menu.vue.d.ts +6 -4
  108. package/src/components/tabsView/tabsView/menuItem.vue.d.ts +6 -4
  109. package/src/components/tabsView/tabsView/menuTitle.vue.d.ts +4 -2
  110. package/src/components/tabsView/tabsView/store.d.ts +18 -18
  111. package/src/components/tabsView/tabsView/tabsView.stories.d.ts +12 -12
  112. package/src/components/tabsView/tabsView/tabsView.vue.d.ts +6 -4
  113. 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 +9 -9
  114. 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 +9 -9
  115. package/src/core/core/core.d.ts +1 -1
  116. package/src/core/utils/common.d.ts +1 -1
  117. package/src/core/utils/css.d.ts +2 -3
  118. package/src/core/utils/device.d.ts +0 -3
  119. package/src/core/utils/dom.d.ts +1 -1
  120. package/src/core/utils/price.d.ts +1 -1
  121. package/src/core/utils/store/localStorage.d.ts +1 -1
  122. package/src/core/utils/store/store.d.ts +2 -2
  123. package/src/core/utils/string.d.ts +1 -1
  124. package/tabs/tabs.amd.js +1 -1
  125. package/tabs/tabs.js +2 -2
  126. package/tabsView/tabsView.amd.js +1 -1
  127. package/tabsView/tabsView.amd.js.map +1 -1
  128. package/tabsView/tabsView.js +3 -3
  129. package/tabsView/tabsView.js.map +1 -1
  130. package/utils/check.amd.js.map +1 -1
  131. package/utils/check.js.map +1 -1
  132. package/utils/common.amd.js.map +1 -1
  133. package/utils/common.js.map +1 -1
  134. package/utils/css.amd.js +1 -1
  135. package/utils/css.amd.js.map +1 -1
  136. package/utils/css.js +33 -24
  137. package/utils/css.js.map +1 -1
  138. package/utils/date.amd.js +1 -1
  139. package/utils/date.js +1 -1
  140. package/utils/device.amd.js +1 -1
  141. package/utils/device.js +1 -1
  142. package/utils/dom.amd.js.map +1 -1
  143. package/utils/dom.js.map +1 -1
  144. package/utils/keyboard.amd.js.map +1 -1
  145. package/utils/keyboard.js.map +1 -1
  146. package/utils/price.amd.js.map +1 -1
  147. package/utils/price.js.map +1 -1
  148. package/utils/route.amd.js.map +1 -1
  149. package/utils/route.js.map +1 -1
  150. package/utils/scroll.amd.js +1 -1
  151. package/utils/scroll.amd.js.map +1 -1
  152. package/utils/scroll.js +1 -1
  153. package/utils/scroll.js.map +1 -1
  154. package/utils/string.amd.js.map +1 -1
  155. package/utils/string.js.map +1 -1
  156. package/utils/system.amd.js.map +1 -1
  157. package/utils/system.js.map +1 -1
  158. package/utils/url.amd.js.map +1 -1
  159. package/utils/url.js.map +1 -1
  160. package/utils/window.amd.js +1 -1
  161. package/utils/window.js +1 -1
  162. package/.chunks/datepicker-C5qdwKuQ.es.js +0 -276
  163. package/.chunks/datepicker-C5qdwKuQ.es.js.map +0 -1
  164. package/.chunks/datepicker-CCrqadMd.amd.js +0 -234
  165. package/.chunks/datepicker-CCrqadMd.amd.js.map +0 -1
  166. package/.chunks/forms-0MQ_zU80.amd.js.map +0 -1
  167. package/.chunks/forms-BkBLBZBn.es.js.map +0 -1
  168. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CmrUY2go.es.js.map +0 -1
  169. package/.chunks/listItem.vue_vue_type_script_setup_true_lang-Cr9e1nzK.amd.js.map +0 -1
  170. package/.chunks/menu-BGUYnOx6.amd.js.map +0 -1
  171. package/.chunks/menu-DMBqYUnZ.es.js.map +0 -1
  172. package/.chunks/popup-CTCFSYwA.es.js.map +0 -1
  173. package/.chunks/popup-CcxDRowY.amd.js.map +0 -1
  174. package/.chunks/widgetInput-Crf7T-Na.es.js.map +0 -1
  175. package/.chunks/widgetInput-DfOBj0qz.amd.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { insertToPage as ae } from "../utils/css.js";
2
- import { reactive as Y, defineComponent as y, useCssVars as te, computed as b, openBlock as u, createElementBlock as m, createElementVNode as _, createCommentVNode as g, createBlock as M, resolveDynamicComponent as re, normalizeClass as w, withCtx as D, renderSlot as k, createTextVNode as le, toDisplayString as W, mergeModels as H, useModel as oe, withDirectives as T, vModelCheckbox as se, onUnmounted as de, ref as pe, unref as B, mergeProps as A, vModelRadio as ue, resolveDirective as ce, vModelText as ne, watch as me, Fragment as O, renderList as X, vModelSelect as fe, withKeys as he, withModifiers as be } from "vue";
2
+ import { reactive as Y, defineComponent as y, useCssVars as te, computed as h, openBlock as u, createElementBlock as m, createElementVNode as _, createCommentVNode as g, createBlock as M, resolveDynamicComponent as re, normalizeClass as w, withCtx as D, renderSlot as k, createTextVNode as le, toDisplayString as W, mergeModels as H, useModel as oe, withDirectives as T, vModelCheckbox as se, onUnmounted as de, ref as pe, unref as B, mergeProps as A, vModelRadio as ue, resolveDirective as ce, vModelText as ne, watch as me, Fragment as O, renderList as X, vModelSelect as fe, withKeys as be, withModifiers as he } from "vue";
3
3
  const ie = ["../assets/forms.css"].map((t) => import.meta.resolve(t));
4
- ae(ie);
4
+ ae(ie, !0);
5
5
  function ge() {
6
6
  return "devicePixelRatio" in window && window.devicePixelRatio > 1;
7
7
  }
@@ -67,7 +67,7 @@ const oo = () => $(document).scrollTop(), so = () => $(document), no = () => [do
67
67
  class $e {
68
68
  }
69
69
  const Se = 100;
70
- let q;
70
+ let G;
71
71
  const I = /* @__PURE__ */ new Map(), R = {
72
72
  width: window.innerWidth,
73
73
  height: window.innerHeight
@@ -79,7 +79,7 @@ function Me(t) {
79
79
  I.delete(t);
80
80
  }
81
81
  function Ve(t) {
82
- clearTimeout(q), q = setTimeout(function() {
82
+ clearTimeout(G), G = setTimeout(function() {
83
83
  t.topEvent = {
84
84
  widthDiff: R.width - window.innerWidth,
85
85
  hightDiff: R.height - window.innerHeight
@@ -139,7 +139,7 @@ const Be = {
139
139
  return;
140
140
  }
141
141
  return p.$(t);
142
- }, G = (t, e) => {
142
+ }, K = (t, e) => {
143
143
  var n;
144
144
  const s = t.value ?? {};
145
145
  return s.content ??= (n = e.props) == null ? void 0 : n.title, s.content = String(s.content).replace(/\r\n|\r|\n/g, "<br>"), s.position ??= {
@@ -149,11 +149,11 @@ const Be = {
149
149
  }, Le = {
150
150
  mounted(t, e, s) {
151
151
  var n;
152
- (n = C(t)) == null || n.tooltip(G(e, s));
152
+ (n = C(t)) == null || n.tooltip(K(e, s));
153
153
  },
154
154
  updated(t, e, s, n) {
155
155
  var i;
156
- const a = G(e, s), o = (i = C(t)) == null ? void 0 : i.tooltip("instance");
156
+ const a = K(e, s), o = (i = C(t)) == null ? void 0 : i.tooltip("instance");
157
157
  o && (o.options = {
158
158
  ...o.options,
159
159
  ...a
@@ -183,7 +183,7 @@ const ze = {
183
183
  E == null || E.disconnect();
184
184
  }
185
185
  };
186
- let K = !1, z, F;
186
+ let Q = !1, z, F;
187
187
  const P = /* @__PURE__ */ new Map(), De = (t, e) => {
188
188
  const { distance: s, percent: n } = F, a = t.getBoundingClientRect().top, o = e * n / 100 / s, i = (e - a) / o;
189
189
  i <= s ? t.style.transform = `translateY(${s - i}px)` : t.style.transform = "translateY(0px)";
@@ -211,12 +211,12 @@ const P = /* @__PURE__ */ new Map(), De = (t, e) => {
211
211
  F = {
212
212
  distance: a,
213
213
  percent: o
214
- }, K || (Ne(), K = !0), z.observe(t);
214
+ }, Q || (Ne(), Q = !0), z.observe(t);
215
215
  },
216
216
  unmounted(t, e, s) {
217
217
  P.delete(t), z == null || z.unobserve(t);
218
218
  }
219
- }, Pe = () => typeof window > "u" ? {} : window, Q = Pe();
219
+ }, Pe = () => typeof window > "u" ? {} : window, q = Pe();
220
220
  class p {
221
221
  /**
222
222
  * Настройки словаря
@@ -224,12 +224,12 @@ class p {
224
224
  static L = Y({
225
225
  Not_date: "Not date"
226
226
  });
227
- static page = Q.page ?? {};
227
+ static page = q.page ?? {};
228
228
  static Page = $e;
229
229
  static options = Te;
230
230
  static state = Y({ ...Be });
231
231
  static matchMediaIsMobile;
232
- static $ = Q.$;
232
+ static $ = q.$;
233
233
  /**
234
234
  * Добавить на страницу стили, используется для загрузки стилей из js
235
235
  *
@@ -324,12 +324,11 @@ function po(t, e = !0) {
324
324
  const n = (/* @__PURE__ */ new Date()).getTimezoneOffset() / 60 * -1 * 60 * 60 * 1e3, a = 3 * 60 * 60 * 1e3;
325
325
  let o;
326
326
  t !== void 0 ? o = new Date(t) : o = /* @__PURE__ */ new Date(), o.setTime(o.getTime() - n + a);
327
- let i = String(o.getFullYear()), l = String(o.getDate()).padStart(2, "0"), f = String(o.getMonth() + 1).padStart(2, "0"), r = String(o.getHours()).padStart(2, "0"), d = String(o.getMinutes()).padStart(2, "0"), c = String(o.getSeconds()).padStart(2, "0"), h = i + "-" + f + "-" + l + " " + r + ":" + d + ":" + c;
328
- return e && (h = L(h)), h;
327
+ let i = String(o.getFullYear()), l = String(o.getDate()).padStart(2, "0"), f = String(o.getMonth() + 1).padStart(2, "0"), r = String(o.getHours()).padStart(2, "0"), d = String(o.getMinutes()).padStart(2, "0"), c = String(o.getSeconds()).padStart(2, "0"), b = i + "-" + f + "-" + l + " " + r + ":" + d + ":" + c;
328
+ return e && (b = L(b)), b;
329
329
  }
330
330
  function L(t, e = 2, s, n = p.L.Not_date) {
331
- if (typeof t == "string" && (!t || t.substring(0, 10) === "0000-00-00") && n && n !== "0000-00-00")
332
- return n;
331
+ if (typeof t == "string" && (!t || t.substring(0, 10) === "0000-00-00") && n && n !== "0000-00-00" || !t) return n;
333
332
  s || (s = p.state.dateFormat.toLowerCase().toLowerCase().replace("m", "mm").replace("y", "yy").replace("d", "dd"));
334
333
  let a;
335
334
  if (t instanceof Date)
@@ -402,15 +401,15 @@ const Oe = { class: "top-avatar" }, Ce = ["src", "title"], He = ["title"], Ie =
402
401
  },
403
402
  setup(t) {
404
403
  te((a) => ({
405
- "5365dc30": a.size + "px"
404
+ "15bd2dfc": a.size + "px"
406
405
  }));
407
- const e = t, s = b(() => {
406
+ const e = t, s = h(() => {
408
407
  var a, o;
409
408
  if (e.isOnline)
410
409
  return (a = e.i18n) == null ? void 0 : a.Online;
411
410
  if (e.lastActiveTime)
412
411
  return ((o = e.i18n) == null ? void 0 : o.LastSeen) + ": " + L(e.lastActiveTime, 2);
413
- }), n = b(() => e.nickname ? e.nickname + (s.value ? `
412
+ }), n = h(() => e.nickname ? e.nickname + (s.value ? `
414
413
  ${s.value}` : "") : s.value);
415
414
  return (a, o) => (u(), m("div", Oe, [
416
415
  _("img", {
@@ -457,7 +456,7 @@ ${s.value}` : "") : s.value);
457
456
  isProgress: { type: Boolean }
458
457
  },
459
458
  setup(t) {
460
- const e = t, s = b(() => e.href ? "a" : "button"), n = b(() => e.isSubmit ? "submit" : void 0);
459
+ const e = t, s = h(() => e.href ? "a" : "button"), n = h(() => e.isSubmit ? "submit" : void 0);
461
460
  return (a, o) => (u(), M(re(s.value), {
462
461
  class: w({
463
462
  "top-active": a.isActive,
@@ -490,11 +489,11 @@ ${s.value}` : "") : s.value);
490
489
  _: 3
491
490
  }, 8, ["class", "name", "title", "href", "type", "data-top-icon", "data-top-icon2", "disabled", "inProgress"]));
492
491
  }
493
- }), qe = "_progress_1hqxk_1", Ge = {
492
+ }), Ge = "_progress_1f1nw_1", Ke = {
494
493
  "top-button": "top-button",
495
494
  "top-active": "top-active",
496
495
  "top-button-progress": "top-button-progress",
497
- progress: qe,
496
+ progress: Ge,
498
497
  "top-button-withoutText": "top-button-withoutText",
499
498
  "top-color_blue": "top-color_blue",
500
499
  "top-color_green": "top-color_green",
@@ -507,16 +506,16 @@ ${s.value}` : "") : s.value);
507
506
  "top-style_transparent": "top-style_transparent",
508
507
  "top-size_l": "top-size_l",
509
508
  "top-size_xl": "top-size_xl"
510
- }, Ke = {
511
- $style: Ge
512
- }, co = /* @__PURE__ */ v(Xe, [["__cssModules", Ke]]), Qe = { class: "top-forms-optionLabel" }, Je = /* @__PURE__ */ y({
509
+ }, Qe = {
510
+ $style: Ke
511
+ }, co = /* @__PURE__ */ v(Xe, [["__cssModules", Qe]]), qe = { class: "top-forms-optionLabel" }, Je = /* @__PURE__ */ y({
513
512
  __name: "controlLabel",
514
513
  props: {
515
514
  description: {},
516
515
  disabled: { type: Boolean }
517
516
  },
518
517
  setup(t) {
519
- return (e, s) => (u(), m("div", Qe, [
518
+ return (e, s) => (u(), m("div", qe, [
520
519
  _("div", {
521
520
  class: w({
522
521
  "top-forms-optionLabel_title": !0,
@@ -643,7 +642,7 @@ const pt = /* @__PURE__ */ y({
643
642
  });
644
643
  const a = pe();
645
644
  let o;
646
- const i = b({
645
+ const i = h({
647
646
  get() {
648
647
  return L(s.modelValue, 2, void 0, "0000-00-00");
649
648
  },
@@ -654,15 +653,15 @@ const pt = /* @__PURE__ */ y({
654
653
  let l = (d) => {
655
654
  Z(d);
656
655
  }, f = (d) => {
657
- const c = J(d.target.value), h = L(c);
658
- if (!h || h === p.L.Not_date || d.target.value !== h) {
656
+ const c = J(d.target.value), b = L(c);
657
+ if (!b || b === p.L.Not_date || d.target.value !== b) {
659
658
  d.target.value = i.value;
660
659
  return;
661
660
  }
662
661
  i.value = d.target.value;
663
662
  };
664
663
  async function r(d) {
665
- const c = await import("./datepicker-C5qdwKuQ.es.js");
664
+ const c = await import("./datepicker-D1JLNEmV.es.js");
666
665
  Z = c.oninput, o = c.connectDatepicker(d.target, {
667
666
  onSelect: () => f(d)
668
667
  }), o && o.datepicker("show");
@@ -670,7 +669,7 @@ const pt = /* @__PURE__ */ y({
670
669
  return (d, c) => B(dt) ? (u(), M(B(j), A({ key: 0 }, d.$props, {
671
670
  modelValue: i.value,
672
671
  readonly: "",
673
- onClick: c[1] || (c[1] = (h) => a.value.showPicker())
672
+ onClick: c[1] || (c[1] = (b) => a.value.showPicker())
674
673
  }), {
675
674
  default: D(() => [
676
675
  _("input", {
@@ -679,14 +678,14 @@ const pt = /* @__PURE__ */ y({
679
678
  type: "date",
680
679
  class: "top-input_input-date",
681
680
  modelValue: d.modelValue,
682
- onChange: c[0] || (c[0] = (h) => i.value = h.target.value),
681
+ onChange: c[0] || (c[0] = (b) => i.value = b.target.value),
683
682
  tabindex: "-1"
684
683
  }, null, 40, lt)
685
684
  ]),
686
685
  _: 1
687
686
  }, 16, ["modelValue"])) : (u(), M(B(j), A({ key: 1 }, d.$props, {
688
687
  modelValue: i.value,
689
- "onUpdate:modelValue": c[2] || (c[2] = (h) => h === "" ? i.value = "" : ""),
688
+ "onUpdate:modelValue": c[2] || (c[2] = (b) => b === "" ? i.value = "" : ""),
690
689
  onInput: B(l),
691
690
  onFocusOnce: r,
692
691
  onChange: B(f),
@@ -698,7 +697,7 @@ const pt = /* @__PURE__ */ y({
698
697
  "top-input_input-date": "top-input_input-date"
699
698
  }, ct = {
700
699
  $style: ut
701
- }, fo = /* @__PURE__ */ v(pt, [["__cssModules", ct]]), mt = { class: "top-inputRange" }, ft = /* @__PURE__ */ _("span", { class: "top-inputRange_dash" }, " — ", -1), ht = /* @__PURE__ */ y({
700
+ }, fo = /* @__PURE__ */ v(pt, [["__cssModules", ct]]), mt = { class: "top-inputRange" }, ft = /* @__PURE__ */ _("span", { class: "top-inputRange_dash" }, " — ", -1), bt = /* @__PURE__ */ y({
702
701
  __name: "inputRange",
703
702
  setup(t) {
704
703
  return (e, s) => (u(), m("div", mt, [
@@ -707,13 +706,13 @@ const pt = /* @__PURE__ */ y({
707
706
  k(e.$slots, "to")
708
707
  ]));
709
708
  }
710
- }), bt = {
709
+ }), ht = {
711
710
  "top-inputRange": "top-inputRange",
712
711
  "top-inputRange_dash": "top-inputRange_dash",
713
712
  "top-input": "top-input"
714
713
  }, gt = {
715
- $style: bt
716
- }, ho = /* @__PURE__ */ v(ht, [["__cssModules", gt]]), wt = ["name", "value", "disabled"], vt = /* @__PURE__ */ y({
714
+ $style: ht
715
+ }, bo = /* @__PURE__ */ v(bt, [["__cssModules", gt]]), wt = ["name", "value", "disabled"], vt = /* @__PURE__ */ y({
717
716
  __name: "radio",
718
717
  props: {
719
718
  modelValue: {},
@@ -725,7 +724,7 @@ const pt = /* @__PURE__ */ y({
725
724
  },
726
725
  emits: ["update:modelValue"],
727
726
  setup(t, { emit: e }) {
728
- const s = t, n = e, a = b({
727
+ const s = t, n = e, a = h({
729
728
  get() {
730
729
  return s.modelValue;
731
730
  },
@@ -775,7 +774,7 @@ const pt = /* @__PURE__ */ y({
775
774
  "top-error": "top-error"
776
775
  }, _t = {
777
776
  $style: yt
778
- }, bo = /* @__PURE__ */ v(vt, [["__cssModules", _t]]), $t = ["name", "value", "disabled"], St = /* @__PURE__ */ y({
777
+ }, ho = /* @__PURE__ */ v(vt, [["__cssModules", _t]]), $t = ["name", "value", "disabled"], St = /* @__PURE__ */ y({
779
778
  __name: "switcher",
780
779
  props: {
781
780
  modelValue: { type: [Boolean, Array, Set] },
@@ -787,7 +786,7 @@ const pt = /* @__PURE__ */ y({
787
786
  },
788
787
  emits: ["update:modelValue"],
789
788
  setup(t, { emit: e }) {
790
- const s = t, n = e, a = b({
789
+ const s = t, n = e, a = h({
791
790
  get() {
792
791
  return s.modelValue;
793
792
  },
@@ -857,9 +856,9 @@ const pt = /* @__PURE__ */ y({
857
856
  emits: ["update:modelValue"],
858
857
  setup(t, { emit: e }) {
859
858
  te((o) => ({
860
- c35baa86: o.minHeight + "px"
859
+ "6e3fbb58": o.minHeight + "px"
861
860
  }));
862
- const s = t, n = e, a = b({
861
+ const s = t, n = e, a = h({
863
862
  get() {
864
863
  return s.modelValue;
865
864
  },
@@ -937,18 +936,18 @@ const pt = /* @__PURE__ */ y({
937
936
  }),
938
937
  emits: /* @__PURE__ */ H(["update:modelValue"], ["update:modelValue"]),
939
938
  setup(t, { emit: e }) {
940
- const s = t, n = oe(t, "modelValue"), a = b(() => {
939
+ const s = t, n = oe(t, "modelValue"), a = h(() => {
941
940
  const r = /* @__PURE__ */ new Map();
942
941
  return s.options.forEach((d, c) => {
943
942
  if (typeof d == "string" && (d = i(c, d)), d.children) {
944
- const h = /* @__PURE__ */ new Map();
943
+ const b = /* @__PURE__ */ new Map();
945
944
  d.children.forEach((S, N) => {
946
- typeof S == "string" && (S = i(N, S)), h.set(S.value, S);
947
- }), d = { ...d }, d.children = h, r.set(d.value, d);
945
+ typeof S == "string" && (S = i(N, S)), b.set(S.value, S);
946
+ }), d = { ...d }, d.children = b, r.set(d.value, d);
948
947
  } else
949
948
  r.set(d.value, d);
950
949
  }), r;
951
- }), o = b(() => {
950
+ }), o = h(() => {
952
951
  const r = /* @__PURE__ */ new Map();
953
952
  return a.value.forEach((d) => {
954
953
  if (!d.disabled) {
@@ -971,7 +970,7 @@ const pt = /* @__PURE__ */ y({
971
970
  ], () => {
972
971
  (n.value === null || n.value === void 0) && o.value.size && (console.warn("Пожалуйста, не передавайте в компонент Select значения null и undefined"), n.value = o.value.keys().next().value);
973
972
  }, { immediate: !0 });
974
- const l = b(() => {
973
+ const l = h(() => {
975
974
  var r;
976
975
  return (r = o.value.get(n.value)) == null ? void 0 : r.icon;
977
976
  }), f = () => {
@@ -1002,13 +1001,13 @@ const pt = /* @__PURE__ */ y({
1002
1001
  disabled: r.disabled,
1003
1002
  "onUpdate:modelValue": d[0] || (d[0] = (c) => n.value = c)
1004
1003
  }, [
1005
- (u(!0), m(O, null, X(a.value, ([c, h]) => (u(), m(O, null, [
1006
- h.children ? (u(), m("optgroup", {
1004
+ (u(!0), m(O, null, X(a.value, ([c, b]) => (u(), m(O, null, [
1005
+ b.children ? (u(), m("optgroup", {
1007
1006
  key: "group_" + c,
1008
- label: h.title,
1009
- disabled: h.disabled
1007
+ label: b.title,
1008
+ disabled: b.disabled
1010
1009
  }, [
1011
- (u(!0), m(O, null, X(h.children, ([S, N]) => (u(), m("option", {
1010
+ (u(!0), m(O, null, X(b.children, ([S, N]) => (u(), m("option", {
1012
1011
  key: S,
1013
1012
  value: S,
1014
1013
  selected: S === n.value,
@@ -1018,8 +1017,8 @@ const pt = /* @__PURE__ */ y({
1018
1017
  key: c ?? void 0,
1019
1018
  value: c,
1020
1019
  selected: c === n.value,
1021
- disabled: h.disabled
1022
- }, W(h.title), 9, Rt))
1020
+ disabled: b.disabled
1021
+ }, W(b.title), 9, Rt))
1023
1022
  ], 64))), 256))
1024
1023
  ], 10, zt), [
1025
1024
  [fe, n.value]
@@ -1047,10 +1046,10 @@ function Ut(t, e) {
1047
1046
  }
1048
1047
  const Yt = {
1049
1048
  $style: Ht
1050
- }, Xt = /* @__PURE__ */ v(It, [["render", Ut], ["__cssModules", Yt]]), qt = ["data-top-icon", "data-top-icon2"], Gt = ["name", "title", "placeholder", "disabled", "readonly"], Kt = {
1049
+ }, Xt = /* @__PURE__ */ v(It, [["render", Ut], ["__cssModules", Yt]]), Gt = ["data-top-icon", "data-top-icon2"], Kt = ["name", "title", "placeholder", "disabled", "readonly"], Qt = {
1051
1050
  key: 2,
1052
1051
  class: "top-formsCaption"
1053
- }, Qt = /* @__PURE__ */ y({
1052
+ }, qt = /* @__PURE__ */ y({
1054
1053
  inheritAttrs: !1,
1055
1054
  __name: "input",
1056
1055
  props: {
@@ -1070,14 +1069,14 @@ const Yt = {
1070
1069
  },
1071
1070
  emits: ["update:modelValue"],
1072
1071
  setup(t, { emit: e }) {
1073
- const s = t, n = e, a = b({
1072
+ const s = t, n = e, a = h({
1074
1073
  get() {
1075
1074
  return s.modelValue;
1076
1075
  },
1077
1076
  set(l) {
1078
1077
  n("update:modelValue", l);
1079
1078
  }
1080
- }), o = b(() => s.addCleaner && !s.title || s.captionType !== "" ? "" : s.title), i = (l) => {
1079
+ }), o = h(() => s.addCleaner && !s.title || s.captionType !== "" ? "" : s.title), i = (l) => {
1081
1080
  s.modelValue && l.stopPropagation(), n("update:modelValue", "");
1082
1081
  };
1083
1082
  return (l, f) => (u(), m("label", {
@@ -1109,19 +1108,19 @@ const Yt = {
1109
1108
  placeholder: o.value,
1110
1109
  disabled: l.disabled,
1111
1110
  readonly: l.readonly,
1112
- onKeydown: f[1] || (f[1] = he((r) => (l.addCleaner || !!l.$slots.btn) && i(r), ["esc"]))
1113
- }, l.$attrs), null, 16, Gt), [
1111
+ onKeydown: f[1] || (f[1] = be((r) => (l.addCleaner || !!l.$slots.btn) && i(r), ["esc"]))
1112
+ }, l.$attrs), null, 16, Kt), [
1114
1113
  [ne, a.value]
1115
1114
  ]),
1116
1115
  l.addCleaner && a.value && a.value !== "0000-00-00" ? (u(), m("span", {
1117
1116
  key: 1,
1118
1117
  class: "top-input_cleaner",
1119
1118
  "data-top-icon": "",
1120
- onClick: be(i, ["prevent"])
1119
+ onClick: he(i, ["prevent"])
1121
1120
  })) : g("", !0),
1122
- l.captionType !== "" ? (u(), m("span", Kt, W(l.title), 1)) : g("", !0),
1121
+ l.captionType !== "" ? (u(), m("span", Qt, W(l.title), 1)) : g("", !0),
1123
1122
  k(l.$slots, "default")
1124
- ], 10, qt));
1123
+ ], 10, Gt));
1125
1124
  }
1126
1125
  }), Jt = {
1127
1126
  "top-input": "top-input",
@@ -1131,7 +1130,7 @@ const Yt = {
1131
1130
  "top-loadbar": "top-loadbar"
1132
1131
  }, Zt = {
1133
1132
  $style: Jt
1134
- }, j = /* @__PURE__ */ v(Qt, [["__cssModules", Zt]]);
1133
+ }, j = /* @__PURE__ */ v(qt, [["__cssModules", Zt]]);
1135
1134
  export {
1136
1135
  co as B,
1137
1136
  p as C,
@@ -1140,7 +1139,7 @@ export {
1140
1139
  j as I,
1141
1140
  Xt as L,
1142
1141
  wo as T,
1143
- Q as _,
1142
+ q as _,
1144
1143
  v as a,
1145
1144
  ge as b,
1146
1145
  we as c,
@@ -1163,9 +1162,9 @@ export {
1163
1162
  mo as t,
1164
1163
  U as u,
1165
1164
  fo as v,
1166
- ho as w,
1167
- bo as x,
1165
+ bo as w,
1166
+ ho as x,
1168
1167
  go as y,
1169
1168
  vo as z
1170
1169
  };
1171
- //# sourceMappingURL=forms-BkBLBZBn.es.js.map
1170
+ //# sourceMappingURL=forms-S36M7cBH.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-S36M7cBH.es.js","sources":["../../src/core/utils/device.ts","../../src/core/core/page.ts","../../src/core/core/events.ts","../../src/core/core/options.ts","../../src/core/core/state.ts","../../src/core/directives/tooltip.ts","../../src/core/directives/focus.ts","../../src/core/directives/sticky.ts","../../src/core/directives/swimUp.ts","../../src/core/utils/window.ts","../../src/core/core/core.ts","../../src/core/utils/date.ts","../../src/components/forms/avatar/avatar.vue","../../src/components/forms/button/button.vue","../../src/components/forms/checkbox/checkbox.vue","../../src/components/forms/inputDate/inputDate.vue","../../src/components/forms/radio/radio.vue","../../src/components/forms/switcher/switcher.vue","../../src/components/forms/textarea/textarea.vue","../../src/components/forms/select/select.vue","../../src/components/forms/loadbar/loadbar.vue","../../src/components/forms/input/input.vue"],"sourcesContent":["/**\r\n * Определить, увеличинная ли плотность пикселей у экрана (DPR > 1)\r\n */\r\nexport function isRetina(): boolean {\r\n\treturn ('devicePixelRatio' in window && window.devicePixelRatio > 1);\r\n}\r\n\r\n/**\r\n * Определить, является ли устройство мобильным\r\n */\r\nexport function isMobile(): boolean {\r\n\treturn !!navigator.userAgent.match(/Android|BlackBerry|iPhone|iPad|iPod|IEMobile|Opera Mini/i);\r\n}\r\n\r\n/**\r\n * Определить, открыт ли сайт в приложении\r\n */\r\nexport function isApp(): boolean {\r\n\treturn (navigator.userAgent.indexOf('Topvisor_App') != -1);\r\n}\r\n\r\n/**\r\n * Определить, является ли OS пользователя macOS\r\n */\r\nexport function isMacOS(): boolean {\r\n\treturn navigator.userAgent.indexOf('Mac OS X') !== -1;\r\n}\r\n\r\n/**\r\n * Определить, является ли текущий браузер пользователя Safari\r\n */\r\nexport function isSafari(): boolean {\r\n\tconst isChrome = /Chrome|Android/.test(navigator.userAgent);\r\n\r\n\tlet isSafari = /Safari/.test(navigator.userAgent);\r\n\tif (isChrome && isSafari) {\r\n\t\tisSafari = false;\r\n\t}\r\n\r\n\treturn isSafari;\r\n};\r\n\r\n/**\r\n * Вернуть текст для обозначения клавиши Ctrl / Command в зависимости от OS\r\n */\r\nexport function getCommandKeyLabel(): 'Ctrl' | '⌘' {\r\n\tif (isMacOS()) {\r\n\t\treturn '⌘';\r\n\t} else {\r\n\t\treturn 'Ctrl';\r\n\t}\r\n}\r\n\r\n/**\r\n * Вернуть скролл с учетом устройства\r\n */\r\nexport const getScrollTop = (): number | undefined => {\r\n\treturn $(document).scrollTop();\r\n};\r\n\r\n/**\r\n * Вернуть контейнеры со скроллом (требует jquery)\r\n */\r\nexport const get$scroll = (): JQuery<Document> => {\r\n\treturn $(document);\r\n};\r\n\r\n/**\r\n * Вернуть контейнеры со скроллом (без jquery)\r\n */\r\nexport const getElsScroll = (): Document[] => {\r\n\treturn [document];\r\n};\r\n\r\n/**\r\n * Получить операционную систему пользователя\r\n *\r\n * Не определяет Windows 11, см. getOSAsync()\r\n */\r\nconst getOS = (): string => {\r\n\tconst os: [string, RegExp][] = [\r\n\t\t['iOS', /(iPhone|iPad)/i],\r\n\t\t['Android', /(Android)/i],\r\n\t\t['Windows Phone', /(IEMobile)/i],\r\n\t\t['Windows 3.11', /Win16/i],\r\n\t\t['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/i],\r\n\t\t['Windows 98', /(Windows 98)|(Win98)/i],\r\n\t\t['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/i],\r\n\t\t['Windows XP', /(Windows NT 5.1)|(Windows XP)/i],\r\n\t\t['Windows Server 2003', /(Windows NT 5.2)/i],\r\n\t\t['Windows Vista', /(Windows NT 6.0)/i],\r\n\t\t['Windows 7', /(Windows NT 6.1)/i],\r\n\t\t['Windows 8', /(Windows NT 6.[23])|(Windows 8)/i],\r\n\t\t['Windows 10', /(Windows NT 10)/i],\r\n\t\t['Windows NT 4.0', /(Windows NT 4.0)|(WinNT4.0)|(WinNT)|(Windows NT)/i],\r\n\t\t['Windows ME', /Windows ME/i],\r\n\t\t['Windows', /Windows/i],\r\n\t\t['Open BSD', /OpenBSD/i],\r\n\t\t['Sun OS', /SunOS/i],\r\n\t\t['Linux', /(Linux)|(X11)/i],\r\n\t\t['Macintosh', /(Mac_PowerPC)|(Macintosh)|(Mac OS X 10.4)|(Mac OS X 10.5)|(Mac OS X 10.6)/i],\r\n\t\t['QNX', /QNX/i],\r\n\t\t['BeOS', /BeOS/i],\r\n\t\t['OS/2', /OS\\/2/i],\r\n\t];\r\n\r\n\tlet res = '';\r\n\tfor (let i = 0; i < os.length; i++) {\r\n\t\tif (os[i][1].test(navigator.userAgent)) {\r\n\t\t\tres = os[i][0];\r\n\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn res;\r\n};\r\n\r\n/**\r\n * Получить операционную систему пользователя, в том числе Windows 11\r\n */\r\nexport const getOSAsync = async (): Promise<string> => {\r\n\tlet os = getOS();\r\n\r\n\tif (os === 'Windows 10') {\r\n\t\t// @ts-ignore - experimental technology\r\n\t\tconst platformVersion = await navigator?.userAgentData?.getHighEntropyValues(['platformVersion']);\r\n\t\tif (platformVersion && platformVersion.platformVersion >= '13') {\r\n\t\t\tos = 'Windows 11';\r\n\t\t}\r\n\t}\r\n\r\n\treturn os;\r\n};","class Page {\r\n\r\n}\r\n\r\nexport default Page;","const onResizeDelay = 100;\r\n\r\nlet onResizeTimer: NodeJS.Timeout;\r\n\r\ntype TopEvent = Event & { topEvent: { widthDiff: number, hightDiff: number } }\r\n\r\n/**\r\n * Установленные обрабочики на событие изменения размеров окна\r\n */\r\nconst onResizeListeners: Map<(ev: TopEvent) => any, (ev: TopEvent) => any> = new Map();\r\n\r\n// зафиксированное состояние размеров окна\r\nconst windowSize = {\r\n\twidth: window.innerWidth,\r\n\theight: window.innerHeight,\r\n};\r\n\r\n/**\r\n * Добавить обработчик на событие изменения размеров экрана\r\n * вызов таких обработчиков будет опмизирован и объединен в одно событие\r\n */\r\nfunction addOnReize (listener: (this: Element, ev: TopEvent) => any) {\r\n\tonResizeListeners.set(listener, listener);\r\n}\r\n\r\n/**\r\n * Удаление обработчика на событие изменений размеров экрана\r\n */\r\nfunction removeOnResize (listener: (this: Element, ev: TopEvent) => any) {\r\n\tonResizeListeners.delete(listener);\r\n}\r\n\r\nfunction onResize (e: any) {\r\n\tclearTimeout(onResizeTimer);\r\n\r\n\tonResizeTimer = setTimeout(function () {\r\n\t\te.topEvent = {\r\n\t\t\twidthDiff: windowSize.width - window.innerWidth,\r\n\t\t\thightDiff: windowSize.height - window.innerHeight,\r\n\t\t};\r\n\r\n\t\twindowSize.width = window.innerWidth;\r\n\t\twindowSize.height = window.innerHeight;\r\n\r\n\t\tonResizeListeners.forEach((callback) => callback(e));\r\n\t}, onResizeDelay);\r\n}\r\n\r\nwindow.addEventListener('resize', onResize);\r\n\r\nexport default {\r\n\taddOnReize,\r\n\tremoveOnResize,\r\n};\r\n","/**\r\n * Конфигурация UI\r\n * Можно переопределить при подклчюении UI во Vue приложение через app.use(Core, options)\r\n */\r\nconst options = {\r\n\twidthForMobile: 900,\r\n\tdateFormat: 'Y-m-d',\r\n\r\n\t/**\r\n\t * Для Москвы: +0300\r\n\t */\r\n\tgmt: new Date().toString().match(/GMT(\\S+)/)?.[1],\r\n};\r\n\r\nexport default options;","/**\r\n * State UI для взаимодейсвтиями с приложениями Vue\r\n */\r\nconst state = {\r\n\t/**\r\n\t * Device by size\r\n\t * @see widthForMobile\r\n\t */\r\n\tisMobile: false,\r\n\r\n\t/**\r\n\t * Device by user agent\r\n\t */\r\n\tisMobileUA: false,\r\n\r\n\t/**\r\n\t * true, если плотность пикселей экрана больше 1\r\n\t */\r\n\tisRetina: false,\r\n\r\n\t/**\r\n\t * true, елси это приложение\r\n\t */\r\n\tisApp: false,\r\n\r\n\t/**\r\n\t * true при горизонтальном расположении устройства\r\n\t */\r\n\tisLandscape: true,\r\n\r\n\t/**\r\n\t * true при вертикальном расположении устройства\r\n\t */\r\n\tisPortrait: false,\r\n\tsize: 0,\r\n\r\n\t// См. core.options\r\n\tdateFormat: 'Y-m-d',\r\n\r\n\t// См. core.options\r\n\tgmt: new Date().toString().match(/GMT(\\S+)/)?.[1],\r\n};\r\n\r\nexport default state;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\r\nimport Core from '@/core/core/core';\r\n\r\nconst $ = (el: VNode) => {\r\n\tif (!Core.$?.ui?.tooltip) {\r\n\t\tconsole.info('Для работы v-top-tooltip требуется глобальная загрузка jQuery UI Tooltip');\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\treturn Core.$(el);\r\n};\r\n\r\nconst tvTooltipGenOptions = (binding: DirectiveBinding, vnode: VNode) => {\r\n\tconst options = binding.value ?? {};\r\n\r\n\toptions.content ??= vnode.props?.title;\r\n\toptions.content = String(options.content).replace(/\\r\\n|\\r|\\n/g, '<br>');\r\n\r\n\toptions.position ??= {\r\n\t\tmy: 'bottom-18px',\r\n\t\tat: 'top center',\r\n\t};\r\n\r\n\treturn options;\r\n};\r\n\r\n/**\r\n * Добавление всплывающей подсказки к элементу.\r\n */\r\nconst tooltip = {\r\n\tmounted(el: VNode, binding: DirectiveBinding, vnode: VNode) {\r\n\t\t$(el)?.tooltip(tvTooltipGenOptions(binding, vnode));\r\n\t},\r\n\r\n\tupdated(el: VNode, binding: DirectiveBinding, vnode: VNode, _prevVnode: VNode) {\r\n\t\t/**\r\n\t\t * В результате обновления может быть открыто несколько тултипов поэтому изменить опции, без перерисовки тултипа\r\n\t\t */\r\n\t\tconst options = tvTooltipGenOptions(binding, vnode);\r\n\t\tconst instance = $(el)?.tooltip('instance') as { options: JQueryUI.TooltipOptions } | undefined;\r\n\t\tif (!instance) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tinstance.options = {\r\n\t\t\t...instance.options,\r\n\t\t\t...options,\r\n\t\t};\r\n\t},\r\n\r\n\tunmounted(el: VNode, _binding: DirectiveBinding, _vnode: VNode) {\r\n\t\t$(el)?.tooltip('destroy');\r\n\t},\r\n} satisfies ObjectDirective;\r\n\r\nexport default tooltip;","import type { DirectiveBinding, ObjectDirective } from 'vue';\r\n\r\n/**\r\n * Фокусировка на элементе сразу после его отображения\r\n */\r\nconst focus = {\r\n\tmounted: function (el: HTMLElement, binding: DirectiveBinding) {\r\n\t\tif (binding.value || binding.value === undefined) el.focus();\r\n\t}\r\n} satisfies ObjectDirective;\r\n\r\nexport default focus;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\r\n\r\nlet appStickyObserver: IntersectionObserver;\r\n\r\n/**\r\n * Добавление sticky\r\n * К элементу добляется класс переданный как значение диррективы либо **'top-sticky'** по умолчанию\r\n */\r\nconst sticky = {\r\n\tmounted(el: HTMLElement, binding: DirectiveBinding, _vnode: VNode){\r\n\t\tconst className = binding.value || 'top-sticky';\r\n\r\n\t\tappStickyObserver = new IntersectionObserver(entries => {\r\n\t\t\tlet condition = entries[0].intersectionRatio < 1;\r\n\t\t\tif(condition){\r\n\t\t\t\tif(binding.arg === 'bottom' && entries[0].intersectionRect.y === 0) condition = false;\r\n\t\t\t}\r\n\r\n\t\t\tel.classList.toggle(className, condition);\r\n\t\t}, {\r\n\t\t\tthreshold:[1]\r\n\t\t});\r\n\r\n\t\tappStickyObserver.observe(el);\r\n\t},\r\n\r\n\tunmounted(_el: HTMLElement, _binding: DirectiveBinding, _vnode: VNode){\r\n\t\tappStickyObserver?.disconnect();\r\n\t},\r\n} satisfies ObjectDirective;\r\n\r\nexport default sticky;","import type { DirectiveBinding, ObjectDirective, VNode } from 'vue';\r\nimport Core from '@/core/core/core';\r\n\r\ninterface SwipUpOptions {\r\n\tdistance: number,\r\n\tpercent: number,\r\n}\r\n\r\nlet appSwimUpInited = false;\r\nlet appSwimUpObserver: IntersectionObserver;\r\nlet directiveSwipUpOptions: SwipUpOptions;\r\nconst appSwimUpEls = new Map();\r\n\r\n\r\n/**\r\n * Отодвинуть блок в зависимости от скролла старинцы\r\n * @param el\r\n * @param windowHeight\r\n */\r\nconst swimUpElTransform = (el: HTMLElement, windowHeight: number): void => {\r\n\tconst { distance, percent } = directiveSwipUpOptions;\r\n\r\n\tconst elTop = el.getBoundingClientRect().top;\r\n\r\n\t// во столько раз triggerHeight должен быть меньше, чтобы закончить подплытие к нужной высоте экрана\r\n\tconst triggerHeightReducer = windowHeight * percent / 100 / distance;\r\n\tconst triggerHeight = (windowHeight - elTop) / triggerHeightReducer;\r\n\r\n\tif (triggerHeight <= distance) {\r\n\t\tel.style.transform = `translateY(${distance - triggerHeight}px)`;\r\n\t} else {\r\n\t\tel.style.transform = 'translateY(0px)';\r\n\t}\r\n}\r\n\r\nconst swimUpInit = (el: HTMLElement): void => {\r\n\tlet windowHeight = window.innerHeight;\r\n\r\n\twindow.addEventListener('scroll', () => {\r\n\t\tappSwimUpEls.forEach((el) => swimUpElTransform(el, windowHeight));\r\n\t}, { passive: true });\r\n\r\n\t// проверка того, что элемент в зоне видимости\r\n\tappSwimUpObserver = new IntersectionObserver(entries => {\r\n\t\twindowHeight = window.innerHeight;\r\n\r\n\t\tentries.forEach((entry) => {\r\n\t\t\tconst el = entry.target as HTMLElement;\r\n\r\n\t\t\tif (entry.intersectionRatio < 0.1) {\r\n\t\t\t\t// элемент за областью видимости\r\n\t\t\t\tappSwimUpEls.delete(el);\r\n\t\t\t} else {\r\n\t\t\t\t// элемент на экране\r\n\t\t\t\tappSwimUpEls.set(el, el);\r\n\t\t\t}\r\n\r\n\t\t\tif (entry.intersectionRatio === 0) {\r\n\t\t\t\tconst { distance, percent } = directiveSwipUpOptions;\r\n\t\t\t\tel.style.transform = `translateY(${distance}px)`;\r\n\t\t\t}\r\n\t\t});\r\n\t}, {\r\n\t\tthreshold: 0.1,\r\n\t});\r\n}\r\n\r\n/**\r\n * Добавление анимации подплытия вверх для блока\r\n */\r\nconst swimUp = {\r\n\tmounted(el: HTMLElement, binding: DirectiveBinding, _vnode: VNode): void {\r\n\t\tif (Core.state.isMobileUA) return;\r\n\r\n\t\tconst args = binding.arg?.split(':');\r\n\r\n\t\tlet distance = Number(args?.[0] ?? 100); // количество px на которые блок изначально смещен вниз\r\n\t\tlet percent = Number(args?.[1] ?? 30); // процент высоты экрана поднявшись на который блок закончит подплытие\r\n\r\n\t\tdirectiveSwipUpOptions = {\r\n\t\t\tdistance,\r\n\t\t\tpercent\r\n\t\t}\r\n\r\n\t\tif (!appSwimUpInited) {\r\n\t\t\tswimUpInit(el);\r\n\r\n\t\t\tappSwimUpInited = true;\r\n\t\t}\r\n\r\n\t\tappSwimUpObserver.observe(el);\r\n\t},\r\n\r\n\tunmounted(el: HTMLElement, _binding: DirectiveBinding, _vnode: VNode) {\r\n\t\tappSwimUpEls.delete(el);\r\n\t\tappSwimUpObserver?.unobserve(el);\r\n\t}\r\n} satisfies ObjectDirective;\r\n\r\nexport default swimUp;","/**\r\n * Генерация объекта window\r\n *\r\n * На backend объекта window не существует\r\n */\r\nconst genWindow = (): any => {\r\n\tif (typeof window === 'undefined') {\r\n\t\treturn {};\r\n\t}\r\n\r\n\treturn window;\r\n};\r\n\r\nexport const _window = genWindow();","import { reactive } from 'vue';\r\nimport { isMobile, isRetina, isApp } from '@/core/utils/device';\r\nimport Page from '@/core/core/page';\r\nimport Events from '@/core/core/events';\r\nimport options from '@/core/core/options';\r\nimport state from '@/core/core/state';\r\nimport directiveTooltip from '@/core/directives/tooltip';\r\nimport directiveFocus from '@/core/directives/focus';\r\nimport directiveSticky from '@/core/directives/sticky';\r\nimport directiveSwimUp from '@/core/directives/swimUp';\r\nimport { _window } from '@/core/utils/window';\r\n\r\nclass Core {\r\n\r\n\t/**\r\n\t * Настройки словаря\r\n\t */\r\n\tstatic L = reactive({\r\n\t\tNot_date: 'Not date',\r\n\t});\r\n\r\n\tstatic page = _window.page ?? {};\r\n\r\n\tstatic Page = Page;\r\n\r\n\tstatic options = options;\r\n\r\n\tstatic state = reactive({ ...state });\r\n\r\n\tstatic matchMediaIsMobile?: MediaQueryList;\r\n\r\n\tstatic $ = _window.$ as typeof $ | undefined;\r\n\r\n\t/**\r\n\t * Добавить на страницу стили, используется для загрузки стилей из js\r\n\t *\r\n\t * Условная загрузка стилей m и pc отключена в пользу производительсности, стили грузятся всегда, но применяются по условию\r\n\t * @param style - css стили в строке\r\n\t * @param type - если указать 'm' или 'pc', то стили будут применяться по условию в зависимости от настройки this.options.widthForMobile\r\n\t */\r\n\tstatic appendStyle(style: string, type: '' | 'm' | 'pc' = ''): void {\r\n\t\tlet media = 'all';\r\n\r\n\t\tif (type === 'm') {\r\n\t\t\tmedia = '(max-width: ' + this.options.widthForMobile + 'px)';\r\n\t\t}\r\n\r\n\t\tif (type === 'pc') {\r\n\t\t\tmedia = '(min-width: ' + this.options.widthForMobile + 'px)';\r\n\t\t}\r\n\r\n\t\tconst elStyle = document.createElement('style');\r\n\t\telStyle.innerHTML = style;\r\n\t\telStyle.media = media;\r\n\r\n\t\tdocument.head.append(elStyle);\r\n\t}\r\n\r\n\t/**\r\n\t * Установить как плагин в прилоежнии Vue\r\n\t * Core.state является общим для всех приложений Vue на странице\r\n\t * Core.options является общим для всех приложений Vue на странице\r\n\t * @param app - Vue App\r\n\t * @param {typeof options} options - параметры UI\r\n\t */\r\n\tstatic install(app: any, options: typeof this.options) {\r\n\t\tCore.defineOptions(options);\r\n\r\n\t\tapp.provide('top-core', Core);\r\n\r\n\t\tthis.installDirectives(app);\r\n\t}\r\n\r\n\tstatic installDirectives(app: any) {\r\n\t\tapp.directive('top-tooltip', directiveTooltip);\r\n\t\tapp.directive('top-focus', directiveFocus);\r\n\t\tapp.directive('top-sticky', directiveSticky);\r\n\t\tapp.directive('top-swim-up', directiveSwimUp);\r\n\t}\r\n\r\n\t/**\r\n\t * Установить конфигурацию UI\r\n\t * @param {typeof options} options\r\n\t */\r\n\tstatic defineOptions(options: typeof this.options) {\r\n\t\tif (options?.widthForMobile) {\r\n\t\t\tthis.options.widthForMobile = options.widthForMobile;\r\n\t\t}\r\n\r\n\t\tif (options?.dateFormat) {\r\n\t\t\tthis.options.dateFormat = options.dateFormat;\r\n\t\t}\r\n\r\n\t\tif (options?.gmt) {\r\n\t\t\tthis.options.gmt = options.gmt;\r\n\t\t}\r\n\r\n\t\tCore.setState();\r\n\t}\r\n\r\n\tstatic setState() {\r\n\t\tCore.matchMediaIsMobile = window.matchMedia(`(max-width: ${Core.options.widthForMobile}px)`);\r\n\r\n\t\tCore.state.isMobileUA = isMobile();\r\n\t\tCore.state.isRetina = isRetina();\r\n\t\tCore.state.isApp = isApp();\r\n\t\tCore.state.dateFormat = this.options.dateFormat;\r\n\t\tCore.state.gmt = this.options.gmt;\r\n\r\n\t\tCore.setStateByWindowSize();\r\n\r\n\t\t// пересчет значений, зависящих от рамзеров окна\r\n\t\tEvents.addOnReize(Core.onResize);\r\n\r\n\t\tCore.onResize();\r\n\r\n\t\tCore.saveToCookie();\r\n\t}\r\n\r\n\tstatic onResize() {\r\n\t\tCore.setStateByWindowSize();\r\n\r\n\t\t// честный vh\r\n\t\tdocument.documentElement.style.setProperty('--100vh', window.innerHeight + 'px');\r\n\t}\r\n\r\n\tstatic setStateByWindowSize() {\r\n\t\tCore.state.isMobile = !!Core.matchMediaIsMobile?.matches;\r\n\t\tCore.state.isLandscape = (window.innerWidth > window.innerHeight);\r\n\t\tCore.state.isPortrait = !Core.state.isLandscape;\r\n\t\tCore.state.size = (window.innerWidth > window.innerHeight) ? window.innerWidth : window.innerHeight;\r\n\r\n\t\tCore.saveToCookie();\r\n\t}\r\n\r\n\t/**\r\n\t * Сохранить информацию об устройстве в cookie\r\n\t */\r\n\tstatic saveToCookie() {\r\n\t\tconst device = [\r\n\t\t\t1,\r\n\t\t\twindow.innerWidth,\r\n\t\t\twindow.innerHeight,\r\n\t\t\twindow.devicePixelRatio,\r\n\t\t\tNumber(Core.state.isMobile),\r\n\t\t\tNumber(Core.state.isRetina),\r\n\t\t];\r\n\r\n\t\tdocument.cookie = 'device=' + device.join(',') + '; path=/;';\r\n\t}\r\n\r\n}\r\n\r\nexport default Core;","import Core from '@/core/core/core';\r\n\r\nconst L = (window as any).L ?? {};\r\n\r\n/**\r\n * Получить день недели\r\n */\r\nexport const getDayOfWeek = (y: number, m: number, d: number): string => {\r\n\tswitch ((new Date(y, m, d)).getDay()) {\r\n\t\tcase 0:\r\n\t\t\treturn L.Vs + '.';\r\n\t\tcase 1:\r\n\t\t\treturn L.Pn + '.';\r\n\t\tcase 2:\r\n\t\t\treturn L.Vt + '.';\r\n\t\tcase 3:\r\n\t\t\treturn L.Sr + '.';\r\n\t\tcase 4:\r\n\t\t\treturn L.Ct + '.';\r\n\t\tcase 5:\r\n\t\t\treturn L.Pt + '.';\r\n\t\tcase 6:\r\n\t\t\treturn L.Sb + '.';\r\n\t\tdefault:\r\n\t\t\treturn '';\r\n\t}\r\n};\r\n\r\n/**\r\n * Преобразовать дату в строку формата Y-m-d H:i:s\r\n * @param dateObject - объект Date\r\n * @param langFormat - если true, формат даты будет взят из Core.state.dateFormat\r\n * @param timeFormat - 0-только дата | 1-дата и часы | 2-дата и часы с минутами | 3-дата и часы с минутами и секундами\r\n */\r\nexport const dateToString = (dateObject: Date, langFormat: boolean = true, timeFormat: 0 | 1 | 2 | 3 = 2): string => {\r\n\tlet Y = String(dateObject.getFullYear());\r\n\tlet d = String(dateObject.getDate()).padStart(2, '0');\r\n\tlet m = String(dateObject.getMonth() + 1).padStart(2, '0');\r\n\tlet H = String(dateObject.getHours()).padStart(2, '0');\r\n\tlet i = String(dateObject.getMinutes()).padStart(2, '0');\r\n\tlet s = String(dateObject.getSeconds()).padStart(2, '0');\r\n\r\n\tlet date = Y + '-' + m + '-' + d;\r\n\tif (timeFormat >= 1) date += ' ' + H;\r\n\tif (timeFormat >= 2) date += ':' + i;\r\n\tif (timeFormat === 3) date += ':' + s;\r\n\tif (langFormat) date = dateFormat(date, timeFormat);\r\n\r\n\treturn date;\r\n};\r\n\r\n/**\r\n * Получить объект Date из строки\r\n * @param date - строка с датой\r\n */\r\nexport function stringToDate(date: string): Date {\r\n\tif (date.indexOf('T') === -1) {\r\n\t\tif (date.length == 10) {\r\n\t\t\tdate += ' 00:00:00';\r\n\t\t}\r\n\r\n\t\tdate = date.replace(' ', 'T') + Core.state.gmt;\r\n\t}\r\n\r\n\treturn new Date(date);\r\n}\r\n\r\n/**\r\n * Генерация даты-строки из миллисекунд (UTC), в формате Y-m-d H:i:s\r\n * @param timestamp - дата в мс, если не передана, берется дата на момент вызова функции\r\n * @param useFormat - если true, формат даты будет взят из Core.state.dateFormat\r\n * @param time - 0-только дата | 1-дата и часы | 2-дата и часы с минутами | 3-дата и часы с минутами и секундами\r\n */\r\nexport function genDate(timestamp: number | undefined, useFormat: boolean = true, time: 0 | 1 | 2 | 3 = 0): string {\r\n\tlet date;\r\n\tif (timestamp != undefined) {\r\n\t\tdate = new Date(timestamp);\r\n\t} else {\r\n\t\tdate = new Date();\r\n\t}\r\n\r\n\tconst Y = date.getFullYear();\r\n\tconst m = String(date.getMonth() + 1).padStart(2, '0');\r\n\tconst d = date.getDate().toString().padStart(2, '0');\r\n\r\n\tconst H = date.getHours().toString().padStart(2, '0');\r\n\tconst i = date.getMinutes().toString().padStart(2, '0');\r\n\tconst s = date.getSeconds().toString().padStart(2, '0');\r\n\r\n\tdate = Y + '-' + m + '-' + d;\r\n\r\n\tif (time) date += ' ';\r\n\tif (time >= 1) date += H;\r\n\tif (time >= 2) date += ':' + i;\r\n\tif (time >= 3) date += ':' + s;\r\n\r\n\tif (useFormat) {\r\n\t\tdate = dateFormat(date, time);\r\n\t}\r\n\r\n\treturn date;\r\n}\r\n\r\n/**\r\n * Генерация даты-строки (время московское) из миллисекунд (UTC), в формате Y-m-d H:i:s\r\n * @param ms - дата в мс, если не передана, берется дата на момент вызова функции\r\n * @param langFormat - если true, формат даты будет взят из Core.state.dateFormat\r\n */\r\nexport function genDateMoscow(ms: number | undefined, langFormat: boolean = true): string {\r\n\tconst time_zone = (new Date().getTimezoneOffset() / 60) * (-1);\r\n\tconst dateoffset = time_zone * 60 * 60 * 1000;\r\n\tconst moscow_dateoffset = 3 * 60 * 60 * 1000;\r\n\r\n\tlet date: Date;\r\n\tif (ms !== undefined) {\r\n\t\tdate = new Date(ms);\r\n\t} else {\r\n\t\tdate = new Date();\r\n\t}\r\n\r\n\tdate.setTime(date.getTime() - dateoffset + moscow_dateoffset);\r\n\r\n\tlet Y = String(date.getFullYear());\r\n\tlet d = String(date.getDate()).padStart(2, '0');\r\n\tlet m = String(date.getMonth() + 1).padStart(2, '0');\r\n\tlet H = String(date.getHours()).padStart(2, '0');\r\n\tlet i = String(date.getMinutes()).padStart(2, '0');\r\n\tlet s = String(date.getSeconds()).padStart(2, '0');\r\n\r\n\tlet dateStr = Y + '-' + m + '-' + d + ' ' + H + ':' + i + ':' + s;\r\n\tif (langFormat) {\r\n\t\tdateStr = dateFormat(dateStr);\r\n\t}\r\n\r\n\treturn dateStr;\r\n}\r\n\r\n/**\r\n * Перевод даты в формат пользователя\r\n * @param date - объект даты или строка в формате Y-m-d H:i:s\r\n * @param time - 0-только дата | 1-дата и часы | 2-дата и часы с минутами | 3-дата и часы с минутами и секундами\r\n * @param dateformat -\r\n * @param emptyValue - значение, которое надо вернуть, если дата не указана\r\n */\r\nexport function dateFormat(dateMixed: string | Date, time: 0 | 1 | 2 | 3 = 2, dateFormat?: string, emptyValue: string = Core.L.Not_date): string {\r\n\tif (typeof dateMixed === 'string') {\r\n\t\tif (!dateMixed || dateMixed.substring(0, 10) === '0000-00-00') {\r\n\t\t\tif (emptyValue && emptyValue !== '0000-00-00') {\r\n\t\t\t\treturn emptyValue;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (!dateMixed) return emptyValue;\r\n\r\n\tif (!dateFormat) {\r\n\t\tdateFormat = Core.state.dateFormat.toLowerCase().toLowerCase().replace('m', 'mm').replace('y', 'yy').replace('d', 'dd');\r\n\t}\r\n\r\n\tlet date: Date;\r\n\tif (dateMixed instanceof Date) {\r\n\t\tdate = dateMixed;\r\n\t} else {\r\n\t\tlet dateForObj = dateMixed.substring(0, 10);\r\n\t\tif (dateForObj.length === 7) dateForObj += '-01';\r\n\t\tdateForObj += ' 00:00';\r\n\t\tdateForObj = dateForObj.replace(/-/g, '/'); // safari fix\r\n\r\n\t\tdate = new Date(dateForObj);\r\n\t\tif (isNaN(Number(date))) return emptyValue;\r\n\t}\r\n\r\n\tlet result = '';\r\n\r\n\tif (dateFormat && window['$']) {\r\n\t\tresult = $.datepicker.formatDate(dateFormat, date);\r\n\t}\r\n\r\n\tif (time && typeof dateMixed === 'string' && dateMixed.length > 10 || time && dateMixed instanceof Date) {\r\n\t\tlet timeStr: string = '';\r\n\t\tif (dateMixed instanceof Date) {\r\n\t\t\ttimeStr = new Date().toLocaleTimeString('en-US', {\r\n\t\t\t\thour12: false,\r\n\t\t\t\thour: 'numeric',\r\n\t\t\t\tminute: time >= 2 ? 'numeric' : undefined,\r\n\t\t\t\tsecond: time >= 3 ? 'numeric' : undefined,\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tswitch (time) {\r\n\t\t\t\t// часы\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\ttimeStr = dateMixed.substring(11, 13);\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// часы и минуты\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\ttimeStr = dateMixed.substring(11, 16);\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t// часы, минуты и секунды\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\ttimeStr = dateMixed.substring(11, 19);\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult += ' ' + timeStr;\r\n\t}\r\n\r\n\tresult = result.trim();\r\n\r\n\treturn result;\r\n}\r\n\r\n/**\r\n * Перевод даты из формата пользователя в системный формат Y-m-d H:i:s\r\n * @param date - строка с датой\r\n * @param emptyValue - значение, которое надо вернуть, если дата не указана\r\n */\r\nexport function dateUnformat(date: string, emptyValue: string = Core.L.Not_date): string {\r\n\tif (!date) {\r\n\t\treturn emptyValue;\r\n\t}\r\n\r\n\tif (date.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\r\n\t\treturn date;\r\n\t}\r\n\r\n\tconst dateFormat = Core.state.dateFormat.toLowerCase();\r\n\r\n\tconst dateChunks = date.split(/\\W/);\r\n\tconst dateFormatChunks = dateFormat.split(/\\W/);\r\n\r\n\tlet d = '';\r\n\tlet m = '';\r\n\tlet y = '';\r\n\r\n\tdateFormatChunks.forEach((type, index) => {\r\n\t\tswitch (type) {\r\n\t\t\tcase 'd':\r\n\t\t\t\td = dateChunks[index];\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'm':\r\n\t\t\t\tm = dateChunks[index];\r\n\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'y':\r\n\t\t\t\ty = dateChunks[index];\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tlet result = y + '-' + m + '-' + d;\r\n\r\n\tif (!result.match(/\\d\\d\\d\\d-\\d\\d-\\d\\d/)) {\r\n\t\tconsole.info('Неверный формат даты, будет возращена текущая дата, ' + result);\r\n\r\n\t\tresult = genDate((new Date()).getTime(), false).substring(0, 10);\r\n\t}\r\n\r\n\treturn result;\r\n}","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue';\r\nimport type { Props } from './avatar';\r\nimport { dateFormat } from '@/core/utils/date';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tsize: 64,\r\n\ti18n: () => ({\r\n\t\tOnline: 'Online',\r\n\t\tLastSeen: 'Last seen',\r\n\t}),\r\n});\r\n\r\nconst titleStatus = computed(() => {\r\n\tif (props.isOnline) {\r\n\t\treturn props.i18n?.Online;\r\n\t}\r\n\r\n\tif (props.lastActiveTime) {\r\n\t\treturn props.i18n?.LastSeen + ': ' + dateFormat(props.lastActiveTime, 2);\r\n\t}\r\n});\r\n\r\nconst titleImage = computed(() => {\r\n\tif (!props.nickname) return titleStatus.value;\r\n\r\n\treturn props.nickname + (titleStatus.value ? `\\n${titleStatus.value}` : '');\r\n})\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-avatar\">\r\n\t\t<img\r\n\t\t\tclass=\"top-avatar_image\"\r\n\t\t\t:src=\"image\"\r\n\t\t\t:title=\"titleImage\"\r\n\t\t\talt=\"\"\r\n\t\t>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"isOnline\"\r\n\t\t\tclass=\"top-avatar_status\"\r\n\t\t\t:title=\"titleStatus\"\r\n\t\t>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-avatar {\r\n\twidth: v-bind(size+ \"px\");\r\n\theight: v-bind(size+ \"px\");\r\n\tdisplay: flex;\r\n\tflex-grow: 0;\r\n\tflex-shrink: 0;\r\n\tposition: relative;\r\n\ttop: 0;\r\n\tleft: 0;\r\n}\r\n\r\n.top-avatar_image {\r\n\tborder-radius: 50%;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n}\r\n\r\n.top-avatar_status {\r\n\tborder-radius: 50%;\r\n\tborder: 2px solid var(--content-background-color);\r\n\tbackground-color: var(--color-bg-positive-2);\r\n\twidth: 25%;\r\n\theight: 25%;\r\n\tposition: absolute;\r\n\tright: 0;\r\n\tbottom: 0;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props } from './button';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tcolor: 'blue',\r\n\tstyling: '',\r\n\tsize: 's',\r\n});\r\n\r\nconst tagName = computed(() => props.href ? 'a' : 'button');\r\n\r\nconst type = computed(() => props.isSubmit ? 'submit' : undefined);\r\n</script>\r\n\r\n<template>\r\n\t<component\r\n\t\t:is=\"tagName\"\r\n\t\t:class=\"{\r\n\t\t\t['top-active']: isActive,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t['top-button']: true,\r\n\t\t\t['top-button-progress']: isProgress,\r\n\t\t\t[`top-size_${size}`]: !!size,\r\n\t\t\t[`top-color_${color}`]: true,\r\n\t\t\t[`top-style_${styling}`]: !!styling,\r\n\t\t\t['top-button-withoutText']: !$slots.default,\r\n\t\t}\"\r\n\t\t:name=\"name\"\r\n\t\t:title=\"title\"\r\n\t\t:href=\"href\"\r\n\t\t:type=\"type\"\r\n\t\t:data-top-icon=\"icon || undefined\"\r\n\t\t:data-top-icon2=\"icon2 || undefined\"\r\n\t\t:disabled=\"disabled || undefined\"\r\n\t\t:inProgress=\"isProgress\"\r\n\t>\r\n\t\t<span\r\n\t\t\tv-if=\"$slots.default\"\r\n\t\t\tclass=\"top-ellipsis\"\r\n\t\t>\r\n\t\t\t<!-- @slot Текст в кнопке -->\r\n\t\t\t<slot>\r\n\t\t\t\t{{ !icon ? 'Button' : '' }}\r\n\t\t\t</slot>\r\n\t\t</span>\r\n\r\n\t\t<!-- @slot HTML в кнопке -->\r\n\t\t<slot name=\"html\"></slot>\r\n\t</component>\r\n</template>\r\n\r\n<style module>\r\n@import \"./style/button.css\";\r\n@import \"./style/style-outline.css\";\r\n@import \"./style/style-soft.css\";\r\n@import \"./style/style-transparent.css\";\r\n\r\n.top-button {\r\n\t--top-button-color: var(--color-white);\r\n\t--top-button-background-color: transparent;\r\n\t--top-button-background-color-hover: var(--top-button-background-color);\r\n\t--top-button-background-color-active: var(--top-button-background-color-hover);\r\n\t--top-button-background-color-selected: var(--top-button-background-color-hover);\r\n\t--top-button-box-shadow: none;\r\n\t--top-button-box-shadow-hover: var(--top-shadow-darken-2);\r\n\t--top-button-box-shadow-active: var(--top-shadow-darken-3);\r\n\t--top-button-box-shadow-selected: var(--top-shadow-darken-3);\r\n\t--top-forms-border-width: 0px;\r\n\t--top-icon-width: calc(var(--top-icon-size) + var(--top-forms-padding));\r\n\t--top-icon2-width: calc(var(--top-icon2-size) + var(--top-forms-padding));\r\n}\r\n\r\n.top-button.top-size_l {\r\n\t--top-forms-padding: var(--top-forms-padding_l);\r\n\t--top-forms-base-height: var(--top-forms-base-height_l);\r\n}\r\n\r\n.top-button.top-size_xl {\r\n\t--top-forms-padding: var(--top-forms-padding_xl);\r\n\t--top-forms-base-height: var(--top-forms-base-height_xl);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport type { Props } from './checkbox';\r\nimport ControlLabel from '../controlLabel/controlLabel.vue';\r\n\r\ndefineProps<Props>();\r\n\r\nconst model = defineModel<Props['modelValue']>();\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t\t['top-forms-optionWrapper']: true,\r\n\t\t\t['top-checkbox']: true,\r\n\t\t\t['top-checkbox_' + name]: !!name,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t\t['top-error']: isError && !disabled,\r\n\t\t}\"\r\n\t>\r\n\t\t<input\r\n\t\t\ttype=\"checkbox\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-forms-option']: true,\r\n\t\t\t\t['top-checkbox_input']: true,\r\n\t\t\t\t['top-error']: isError && !disabled,\r\n\t\t\t}\"\r\n\t\t\t:name=\"name\"\r\n\t\t\tv-model=\"model\"\r\n\t\t\t:value=\"value\"\r\n\t\t\t:indeterminate=\"indeterminate\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\r\n\t\t<ControlLabel\r\n\t\t\tv-if=\"$slots.default\"\r\n\t\t\t:description=\"description\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\t\t\t<!-- @slot Слот с заголовком -->\r\n\t\t\t<slot></slot>\r\n\t\t</ControlLabel>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n.top-checkbox {\r\n\tcursor: pointer;\r\n\tdisplay: inline-flex;\r\n}\r\n\r\n.top-checkbox_input {\r\n\tcursor: inherit;\r\n\tborder-radius: 4px;\r\n\tbackground: var(--content-background-color);\r\n\tborder: 1px solid var(--top-forms-border-color);\r\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\r\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\r\n}\r\n\r\n.top-checkbox_input:before {\r\n\tcontent: \" \";\r\n\tcolor: #FFF;\r\n\tfont-family: \"Topvisor-2\";\r\n\tfont-size: 16px;\r\n}\r\n\r\n.top-checkbox_input:hover {\r\n\tborder-color: var(--top-forms-border-color-hover);\r\n\tbackground: var(--color-theme-100);\r\n}\r\n\r\n/* checked / indeterminate */\r\n.top-checkbox_input:checked,\r\n.top-checkbox_input:indeterminate {\r\n\tborder-color: var(--color-bg-primary-2);\r\n\tbackground: var(--color-bg-primary-2);\r\n}\r\n\r\n.top-checkbox_input:checked:before {\r\n\tcontent: \"\";\r\n}\r\n\r\n.top-checkbox_input:indeterminate:before {\r\n\tcontent: \"\";\r\n}\r\n\r\n.top-checkbox_input:checked:hover,\r\n.top-checkbox_input:indeterminate:hover {\r\n\tborder-color: var(--color-bg-primary-1);\r\n\tbackground: var(--color-bg-primary-1);\r\n}\r\n\r\n/* disabled selected */\r\n.top-checkbox_input:disabled {\r\n\tborder-color: var(--color-line-1);\r\n\tbackground: var(--color-theme-100);\r\n}\r\n\r\n.top-checkbox_input:checked:disabled,\r\n.top-checkbox_input:indeterminate:disabled {\r\n\tborder-color: transparent;\r\n\tbackground: var(--color-theme-400);\r\n}\r\n\r\n/* isError */\r\n.top-checkbox_input.top-error {\r\n\tborder-color: var(--color-bg-negative-2);\r\n}\r\n\r\n.top-checkbox_input.top-error:hover {\r\n\tborder-color: var(--color-bg-negative-1);\r\n}\r\n\r\n/* isError selected */\r\n.top-checkbox_input:checked.top-error,\r\n.top-checkbox_input:indeterminate.top-error {\r\n\tbackground: var(--color-bg-negative-2);\r\n}\r\n\r\n.top-checkbox_input:checked.top-error:hover,\r\n.top-checkbox_input:indeterminate.top-error:hover {\r\n\tbackground: var(--color-bg-negative-1);\r\n}\r\n</style> ","<script lang=\"ts\">\r\nconst useNativeDatepicker = !!document.documentElement.ontouchstart && !!document.createElement('input').showPicker;\r\n\r\nlet onInputLazy = (_e: any) => { };\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, onUnmounted } from 'vue';\r\nimport { dateFormat, dateUnformat } from '@/core/utils/date';\r\nimport type { Props, Emits } from './inputDate';\r\nimport { Input } from '@/components/forms/forms';\r\nimport Core from '@/core/core/core';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\ticon2: '',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nonUnmounted(() => {\r\n\tif ($el) {\r\n\t\t$el.datepicker('destroy');\r\n\t}\r\n});\r\n\r\nconst el = ref();\r\nlet $el: any;\r\n\r\nconst localValue = computed({\r\n\tget() {\r\n\t\treturn dateFormat(props.modelValue, 2, undefined, '0000-00-00');\r\n\t},\r\n\r\n\tset(value) {\r\n\t\tvalue = dateUnformat(value, '0000-00-00');\r\n\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n\r\nlet oninput = (e: any) => {\r\n\tonInputLazy(e);\r\n};\r\n\r\nlet onchange = (e: any) => {\r\n\tconst date = dateUnformat(e.target.value);\r\n\tconst dateFormatted = dateFormat(date);\r\n\r\n\tif (!dateFormatted || dateFormatted === Core.L.Not_date || e.target.value !== dateFormatted) {\r\n\t\te.target.value = localValue.value;\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tlocalValue.value = e.target.value;\r\n};\r\n\r\n/**\r\n * Инициализпация функций выбора дат\r\n *\r\n * Для не нативного datepicker\r\n */\r\nasync function init(e: any) {\r\n\tconst datepicker = await import('./datepicker');\r\n\r\n\t// формат ввода\r\n\tonInputLazy = datepicker.oninput;\r\n\r\n\t// datepicker\r\n\t$el = datepicker.connectDatepicker(e.target, {\r\n\t\tonSelect: () => onchange(e),\r\n\t});\r\n\r\n\tif ($el) {\r\n\t\t$el.datepicker('show');\r\n\t}\r\n}\r\n</script>\r\n\r\n<template>\r\n\t<Input\r\n\t\tv-if=\"useNativeDatepicker\"\r\n\t\t:=\"$props\"\r\n\t\t:modelValue=\"localValue\"\r\n\t\treadonly\r\n\t\t@click=\"el.showPicker()\"\r\n\t>\r\n\t\t<input\r\n\t\t\tref=\"el\"\r\n\t\t\ttype=\"date\"\r\n\t\t\tclass=\"top-input_input-date\"\r\n\t\t\t:modelValue=\"modelValue\"\r\n\t\t\t@change=\"(e: any) => localValue = e.target.value\"\r\n\t\t\ttabindex=\"-1\"\r\n\t\t/>\r\n\t</Input>\r\n\r\n\t<Input\r\n\t\tv-else\r\n\t\t:=\"$props\"\r\n\t\t:modelValue=\"localValue\"\r\n\t\t@update:modelValue=\"(newValue) => (newValue === '') ? localValue = '' : ''\"\r\n\t\t@input.date=\"oninput\"\r\n\t\t@focus.once.date=\"init\"\r\n\t\t@change.date=\"onchange\"\r\n\t\tmodificator=\"datepicker\"\r\n\t/>\r\n</template>\r\n\r\n<style module>\r\n.top-input-datepicker {\r\n\twidth: calc(105px + var(--top-icon-width) + var(--top-icon2-width));\r\n}\r\n\r\n.top-input_input-date {\r\n\topacity: 0;\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\tleft: 0;\r\n\tz-index: -1;\r\n}\r\n\r\n.top-input_input-date::-webkit-inner-spin-button {\r\n\tdisplay: none;\r\n}\r\n\r\n.top-input_input-date::-webkit-calendar-picker-indicator {\r\n\topacity: 0;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props, Emits } from './radio';\r\nimport ControlLabel from '../controlLabel/controlLabel.vue';\r\n\r\nconst props = defineProps<Props>();\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst localValue = computed({\r\n\tget() {\r\n\t\treturn props.modelValue;\r\n\t},\r\n\tset(value) {\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t\t['top-forms-optionWrapper']: true,\r\n\t\t\t['top-radio']: true,\r\n\t\t\t['top-radio_' + name]: name !== '',\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t\t['top-error']: isError && !disabled,\r\n\t\t}\"\r\n\t>\r\n\t\t<input\r\n\t\t\ttype=\"radio\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-forms-option']: true,\r\n\t\t\t\t['top-radio_input']: true,\r\n\t\t\t\t['top-error']: isError && !disabled,\r\n\t\t\t}\"\r\n\t\t\tv-model=\"localValue\"\r\n\t\t\t:name=\"name\"\r\n\t\t\t:value=\"value\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\r\n\t\t<ControlLabel\r\n\t\t\tv-if=\"$slots.default\"\r\n\t\t\t:description=\"description\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\t\t\t<!-- @slot Слот с заголовком -->\r\n\t\t\t<slot></slot>\r\n\t\t</ControlLabel>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n:root {\r\n\t--top-radio-background-color: var(--content-background-color);\r\n\t--top-radio-background-color-hover: var(--top-radio-background-color);\r\n\t--top-radio-background-color-active: var(--top-radio-background-color);\r\n}\r\n\r\n.top-radio {\r\n\tcursor: pointer;\r\n}\r\n\r\n.top-radio_input {\r\n\tborder-radius: 50%;\r\n\tbackground: var(--content-background-color);\r\n\tborder: 1px solid var(--color-line-3);\r\n\twidth: calc(var(--top-forms-option-height) - 3px * 2);\r\n\theight: calc(var(--top-forms-option-height) - 3px * 2);\r\n}\r\n\r\n.top-radio_input:hover {\r\n\tborder-color: var(--color-line-3);\r\n\tbackground: var(--color-layer-secondary-1);\r\n}\r\n\r\n.top-radio_input:checked {\r\n\tborder-color: var(--color-line-primary-1);\r\n\tborder-width: 5px;\r\n}\r\n\r\n.top-radio_input:checked:hover {\r\n\tborder-color: var(--color-line-primary-2);\r\n}\r\n\r\n/* disabled */\r\n.top-radio_input:disabled {\r\n\tborder-color: var(--color-line-1-opacity);\r\n\tbackground: var(--color-theme-100);\r\n}\r\n\r\n/* disabled selected */\r\n.top-radio_input:checked:disabled {\r\n\tborder-color: var(--color-theme-400);\r\n}\r\n\r\n/* isError */\r\n.top-radio_input.top-error {\r\n\tborder-color: var(--color-line-negative-1);\r\n}\r\n\r\n.top-radio_input.top-error:hover {\r\n\tborder-color: var(--color-line-negative-2);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props, Emits } from './switcher';\r\nimport ControlLabel from '../controlLabel/controlLabel.vue';\r\n\r\nconst props = defineProps<Props>();\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst localValue = computed({\r\n\tget() {\r\n\t\treturn props.modelValue;\r\n\t},\r\n\tset(value) {\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t['top-forms-optionWrapper']: true,\r\n\t\t['top-checkboxSwitcher']: true,\r\n\t\t['top-disabled']: disabled,\r\n\t\t['top-error']: isError && !disabled,\r\n\t}\"\r\n\t>\r\n\t\t<input\r\n\t\t\ttype=\"checkbox\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-forms-option']: true,\r\n\t\t\t\t['top-checkboxSwitcher_input']: true,\r\n\t\t\t\t['top-error']: isError && !disabled,\r\n\t\t\t}\"\r\n\t\t\tv-model=\"localValue\"\r\n\t\t\t:name=\"name\"\r\n\t\t\t:value=\"value\" \r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\r\n\t\t<ControlLabel\r\n\t\t\tv-if=\"$slots.default\"\r\n\t\t\t:description=\"description\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t>\r\n\t\t\t<!-- @slot Слот с заголовком -->\r\n\t\t\t<slot></slot>\r\n\t\t</ControlLabel>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n.top-checkboxSwitcher {\r\n\tcursor: pointer;\r\n\tdisplay: inline-flex;\r\n\tgap: 4px;\r\n}\r\n\r\n.top-checkboxSwitcher_input {\r\n\tborder-radius: 9px;\r\n\tborder: none;\r\n\tbackground: var(--color-layer-secondary-2);\r\n\twidth: 36px;\r\n\theight: 18px;\r\n\tposition: relative;\r\n}\r\n\r\n.top-checkboxSwitcher_input:before {\r\n\tcontent: '';\r\n\tborder-radius: 50%;\r\n\tbackground: var(--color-white);\r\n\twidth: 12px;\r\n\theight: 12px;\r\n\tmargin: 3px;\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\r\n\ttransition: left 0.1s;\r\n}\r\n\r\n.top-checkboxSwitcher_input:hover {\r\n\tbackground: var(--color-layer-secondary-4);\r\n}\r\n\r\n/* checked */\r\n.top-checkboxSwitcher_input:checked {\r\n\tbackground: var(--color-bg-primary-2);\r\n}\r\n\r\n.top-checkboxSwitcher_input:checked:hover {\r\n\tbackground: var(--color-bg-primary-1);\r\n}\r\n\r\n.top-checkboxSwitcher_input:checked:before {\r\n\tleft: 50%;\r\n}\r\n\r\n/* disabled */\r\n.top-checkboxSwitcher_input:disabled {\r\n\tbackground: var(--color-theme-400);\r\n}\r\n\r\n/* isError */\r\n.top-checkboxSwitcher_input.top-error {\r\n\tbackground: var(--color-layer-negative-3);\r\n}\r\n\r\n.top-checkboxSwitcher_input.top-error:hover {\r\n\tbackground: var(--color-layer-negative-4);\r\n}\r\n\r\n.top-checkboxSwitcher_input.top-error:checked {\r\n\tbackground: var(--color-bg-negative-2);\r\n}\r\n\r\n.top-checkboxSwitcher_input.top-error:checked:hover {\r\n\tbackground: var(--color-bg-negative-1);\r\n}\r\n\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport Hint from '@/components/forms/hint/hint.vue';\r\nimport type { Props, Emits } from './textarea';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\trows: 5,\r\n\tminHeight: 120,\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst value = computed({\r\n\tget () {\r\n\t\treturn props.modelValue;\r\n\t},\r\n\tset (value) {\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t\t['top-textarea']: true,\r\n\t\t\t['top-textarea-' + name]: name,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t}\"\r\n\t>\r\n\t\t<textarea\r\n\t\t\ttype=\"text\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-textarea_textarea']: true,\r\n\t\t\t\t['top-textarea_textarea-expandable']: expandable,\r\n\t\t\t\t['top-error']: isError,\r\n\t\t\t}\"\r\n\t\t\tautocomplete=\"off_always\"\r\n\t\t\t:name=\"name\"\r\n\t\t\t:placeholder=\"placeholder\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t\t:readonly=\"readonly\"\r\n\t\t\t:rows=\"!expandable ? rows : undefined\"\r\n\t\t\t:=\"$attrs\"\r\n\t\t\tv-model=\"value\"\r\n\t\t/>\r\n\r\n\t\t<div\r\n\t\t\tv-if=\"expandable\"\r\n\t\t\tclass=\"top-textarea_pseudoContent\"\r\n\t\t>\r\n\t\t\t{{ value + ' ' }}\r\n\t\t</div>\r\n\r\n\t\t<Hint\r\n\t\t\tv-if=\"hint\"\r\n\t\t\tclass=\"top-textarea_hint\"\r\n\t\t\t:hint=\"hint\"\r\n\t\t\tv-top-tooltip\r\n\t\t/>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n.top-textarea {\r\n\twidth: 180px;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tposition: relative;\r\n}\r\n\r\n.top-textarea_textarea {\r\n\tcolor: var(--color-text-1);\r\n\tbackground: var(--top-forms-background-color);\r\n\twidth: 100%;\r\n\tpadding: var(--top-forms-padding);\r\n\tresize: none;\r\n}\r\n\r\n.top-textarea_textarea:hover {\r\n\tbackground: var(--top-forms-background-color-hover);\r\n}\r\n\r\n.top-textarea_textarea:focus {\r\n\tborder-color: var(--color-line-primary-1);\r\n\toutline: none;\r\n}\r\n\r\n.top-textarea_textarea.top-textarea_textarea-expandable {\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\toverflow: hidden;\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tleft: 0;\r\n}\r\n\r\n.top-textarea_pseudoContent {\r\n\tbox-sizing: border-box;\r\n\tmin-height: v-bind(minHeight + 'px');\r\n\tpadding: var(--top-forms-padding);\r\n\tfont-size: 14px;\r\n\twhite-space: pre-wrap;\r\n\toverflow-wrap: anywhere;\r\n\tpointer-events: none;\r\n\topacity: 0;\r\n\tz-index: -1;\r\n}\r\n\r\n.top-textarea_hint {\r\n\tposition: absolute;\r\n\ttop: 2px;\r\n\tright: 2px;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed, watch } from 'vue';\r\nimport type { ComputedRef } from 'vue';\r\nimport type { Props, Emits, Option, LocalOptions } from './select';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tsize: 's',\r\n});\r\n\r\nconst model = defineModel<Props['modelValue']>({\r\n\trequired: true,\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\n/**\r\n * Словарь с учетом вложенных Props['options']\r\n *\r\n * Этот словарь должен использовать в логике компонента, чтобы она не зависила от типа входных данных\r\n */\r\nconst optionByValue: ComputedRef<LocalOptions> = computed(() => {\r\n\t/**\r\n\t * Преобразование:\r\n\t * - Array => Map\r\n\t * - string => Option\r\n\t */\r\n\tconst res = new Map();\r\n\r\n\tprops.options.forEach((option, index) => {\r\n\t\t// базовый Options со строками\r\n\t\tif (typeof option === 'string') option = genOption(index, option);\r\n\r\n\t\tif (option.children) {\r\n\t\t\t// вложенные элементы Option для <optgroup>\r\n\t\t\tconst children = new Map();\r\n\r\n\t\t\toption.children.forEach((subOption, subIndex) => {\r\n\t\t\t\t// базовый Options со строками\r\n\t\t\t\tif (typeof subOption === 'string') subOption = genOption(subIndex, subOption);\r\n\r\n\t\t\t\tchildren.set(subOption.value, subOption);\r\n\t\t\t});\r\n\r\n\t\t\toption = { ...option };\r\n\t\t\toption.children = children;\r\n\r\n\t\t\tres.set(option.value, option);\r\n\t\t} else {\r\n\t\t\t// самостоятельный элемент Option\r\n\t\t\tres.set(option.value, option);\r\n\t\t}\r\n\t});\r\n\r\n\treturn res;\r\n});\r\n\r\n/**\r\n * Словарь со всеми не disabled значениями Props['options'] в порядке следования с учетом вложенных Props['options']\r\n */\r\nconst flatOptionByValue: ComputedRef<Map<Props['modelValue'], Option>> = computed(() => {\r\n\tconst res = new Map();\r\n\r\n\toptionByValue.value.forEach(option => {\r\n\t\tif (option.disabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// вложенные элементы Option для <optgroup>\r\n\t\tif (option.children) {\r\n\t\t\toption.children.forEach(subOption => {\r\n\t\t\t\tif (subOption.disabled) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tres.set(subOption.value, subOption);\r\n\t\t\t});\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tres.set(option.value, option);\r\n\t});\r\n\r\n\treturn res;\r\n});\r\n\r\n/**\r\n * Генерация Объекта option из строки\r\n *\r\n * Для базового способа указания props\r\n */\r\nconst genOption = (value: Props['modelValue'], title: string): Option => {\r\n\treturn {\r\n\t\tvalue,\r\n\t\ttitle,\r\n\t};\r\n};\r\n\r\n/**\r\n * Логика для обртаной своместимости:\r\n * - null - заменить на первое доступное значение\r\n * - undefined - заменить на первое доступное значение\r\n */\r\nwatch([\r\n\t() => props.modelValue,\r\n\tflatOptionByValue,\r\n], () => {\r\n\tif ((model.value === null || model.value === undefined) && flatOptionByValue.value.size) {\r\n\t\tconsole.warn('Пожалуйста, не передавайте в компонент Select значения null и undefined');\r\n\r\n\t\tmodel.value = flatOptionByValue.value.keys().next().value;\r\n\t}\r\n}, { immediate: true });\r\n\r\n/**\r\n * Иконка выбранного option\r\n */\r\nconst optionIcon = computed(() => {\r\n\treturn flatOptionByValue.value.get(model.value)?.icon;\r\n});\r\n\r\n/**\r\n * Выбрать следующее доступное значение\r\n */\r\nconst selectNextValue = () => {\r\n\tconst listEnabledValues = [...flatOptionByValue.value.keys()];\r\n\tconst currentIndex = listEnabledValues.indexOf(model.value);\r\n\tconst nextIndex = (currentIndex + 1) % listEnabledValues.length;\r\n\r\n\tmodel.value = listEnabledValues[nextIndex];\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t\t['top-select']:true,\r\n\t\t\t['top-select-' + name]:name,\r\n\t\t\t['top-size_' + size]: true,\r\n\t\t\t['top-formsCaptionWrapper']: !!title,\r\n\t\t\t['top-select-error']: isError,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t}\"\r\n\t\t:data-value=\"model\"\r\n\t\t:data-top-icon=\"icon\"\r\n\t\t:data-top-icon2=\"optionIcon\"\r\n\t>\r\n\t\t<select\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-select_select']: true,\r\n\t\t\t\t['top-select_arrow']: true,\r\n\t\t\t\t['top-error']: isError,\r\n\t\t\t}\"\r\n\t\t\t:name=\"name\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t\tv-model=\"model\"\r\n\t\t>\r\n\t\t\t<template v-for=\"[value, option] of optionByValue\">\r\n\t\t\t\t<optgroup\r\n\t\t\t\t\tv-if=\"option.children\"\r\n\t\t\t\t\t:key=\"'group_' + value\"\r\n\t\t\t\t\t:label=\"option.title\"\r\n\t\t\t\t\t:disabled=\"option.disabled\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<option\r\n\t\t\t\t\t\tv-for=\"[subValue, subOption] of option.children\"\r\n\t\t\t\t\t\t:key=\"subValue\"\r\n\t\t\t\t\t\t:value=\"subValue\"\r\n\t\t\t\t\t\t:selected=\"subValue === model\"\r\n\t\t\t\t\t\t:disabled=\"subOption.disabled\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{{ subOption.title }}\r\n\t\t\t\t\t</option>\r\n\t\t\t\t</optgroup>\r\n\r\n\t\t\t\t<option\r\n\t\t\t\t\tv-else\r\n\t\t\t\t\t:key=\"value ?? undefined\"\r\n\t\t\t\t\t:value=\"value\"\r\n\t\t\t\t\t:selected=\"value === model\"\r\n\t\t\t\t\t:disabled=\"option.disabled\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ option.title }}\r\n\t\t\t\t</option>\r\n\t\t\t</template>\r\n\t\t</select>\r\n\r\n\t\t<span\r\n\t\t\tv-if=\"addChanger && flatOptionByValue.size && !disabled\"\r\n\t\t\tclass=\"top-changer\"\r\n\t\t\t@click=\"selectNextValue\"\r\n\t\t></span>\r\n\r\n\t\t<span\r\n\t\t\tv-if=\"title\"\r\n\t\t\tclass=\"top-formsCaption\"\r\n\t\t>\r\n\t\t\t{{ title }}\r\n\t\t</span>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n.top-select {\r\n\tcolor: var(--color-text-1);\r\n\t--top-icon-color: var(--color-icon-2);\r\n\t--top-icon2-color: var(--color-icon-2);\r\n\r\n\talign-items: center;\r\n\twidth: 180px;\r\n\tmax-width: 100%;\r\n\tdisplay: inline-flex;\r\n}\r\n\r\n.top-select-error {\r\n\t--top-icon-color: var(--color-icon-negative-1);\r\n\t--top-icon2-color: var(--color-icon-negative-1);\r\n}\r\n\r\n.top-select_select {\r\n\tbackground-color: var(--top-forms-background-color);\r\n\t/* для select вместо padding нужно использовать text-indent */\r\n\tpadding-left: var(--top-forms-padding);\r\n\r\n\t/* если есть значки, добавить отступ на их ширину с учетом уже добавленного padding */\r\n\ttext-indent: calc(clamp(0px, calc(var(--top-icon-both-width) - var(--top-forms-padding)), calc(var(--top-icon-both-width) - var(--top-forms-padding))));\r\n\r\n\twidth: 100%;\r\n\theight: var(--top-forms-base-height);\r\n\ttext-overflow: ellipsis;\r\n\twhite-space: nowrap;\r\n\tflex-grow: 1;\r\n\toverflow: hidden;\r\n}\r\n\r\n.top-select_select:disabled {\r\n\tcolor: var(--color-text-3);\r\n}\r\n\r\n.top-select optgroup {\r\n\tcolor: var(--color-text-1);\r\n\tfont-style: normal;\r\n}\r\n\r\n.top-select option:not(:disabled) {\r\n\tbackground: var(--content-background-color);\r\n\tcolor: var(--color-text-1);\r\n}\r\n\r\n.top-select option:disabled {\r\n\tbackground: unset;\r\n\tcolor: unset;\r\n}\r\n\r\n/* хром не мерняет цвет для optgroup option, стили оставлены по умолчанию */\r\n/*\r\n.top-select optgroup:disabled,\r\n.top-select optgroup option,\r\n.top-select option:disabled {\r\n\r\n}\r\n*/\r\n\r\n/* https://bugzilla.mozilla.org/show_bug.cgi?id=1743066 */\r\n@-moz-document url-prefix() {\r\n\t.top-select_select {\r\n\t\ttext-indent: calc(clamp(0px, calc(var(--top-icon-both-width) - var(--top-forms-padding)), calc(var(--top-icon-both-width) - var(--top-forms-padding))) / 2);\r\n\t}\r\n}\r\n\r\n@media only screen and (min-width: 900px) {\r\n\t/* changer */\r\n\t.top-changer {\r\n\t\tcursor: pointer;\r\n\t\tborder-radius: 100%;\r\n\t\twidth: 0;\r\n\t\ttransform: translateX(-44px);\r\n\t\tcolor: var(--color-text-2);\r\n\t\tfont-size: 16px;\r\n\t\tline-height: 1;\r\n\t\tdisplay: none;\r\n\t\tz-index: 2;\r\n\t\torder: 4;\r\n\t}\r\n\r\n\t.top-changer:hover {\r\n\t\tcolor: var(--color-primary);\r\n\t}\r\n\r\n\t.top-changer:after {\r\n\t\tcontent: \"\";\r\n\t\tbackground-color: var(--top-forms-background-color);\r\n\t\tfont-family: \"Topvisor-2\";\r\n\t}\r\n\r\n\t*:hover > .top-changer {\r\n\t\tdisplay: block;\r\n\t}\r\n}\r\n</style>","<template>\r\n\t<div class=\"top-loadbar\"></div>\r\n</template>\r\n\r\n<style module>\r\n:root {\r\n\t--top-loadbar-duration: 10s;\r\n\t--top-loadbar-color: var(--color-line-primary-2);\r\n}\r\n \r\n.top-loadbar {\r\n\tbackground: var(--top-loadbar-color);\r\n\twidth: 0;\r\n\theight: 4px;\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\r\n\tanimation: top-loadbar var(--top-loadbar-duration) forwards;\r\n}\r\n\r\n@keyframes top-loadbar {\r\n\tfrom {\r\n\t\t/* fix render pixels */\r\n\t\twidth: 4px;\r\n\t}\r\n\t4% {\r\n\t\twidth: calc(4%);\r\n\t}\r\n\t5% {\r\n\t\twidth: 5%;\r\n\t}\r\n\tto {\r\n\t\twidth: 95%;\r\n\t}\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport type { Props, Emits } from './input';\r\nimport { Loadbar } from '@/components/forms/forms';\r\n\r\ndefineOptions({\r\n\tinheritAttrs: false,\r\n});\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tsize: 's',\r\n\tcaptionType: '',\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst localValue = computed({\r\n\tget() {\r\n\t\treturn props.modelValue;\r\n\t},\r\n\tset(value) {\r\n\t\temit('update:modelValue', value);\r\n\t},\r\n});\r\n\r\nconst placeholder = computed(() => {\r\n\tif (props.addCleaner && !props.title) {\r\n\t\treturn '';\r\n\t}\r\n\tif (props.captionType !== '') {\r\n\t\treturn '';\r\n\t}\r\n\r\n\treturn props.title;\r\n});\r\n\r\nconst clean = (event: Event) => {\r\n\tif(props.modelValue){\r\n\t\tevent.stopPropagation();\r\n\t}\r\n\r\n\temit('update:modelValue', '');\r\n};\r\n</script>\r\n\r\n<template>\r\n\t<label\r\n\t\t:class=\"{\r\n\t\t\t['top-input']: true,\r\n\t\t\t['top-size_' + size]: true,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t\t['top-input-' + modificator]: !!modificator,\r\n\t\t\t['top-input-withCleaner']: addCleaner && localValue && localValue !== '0000-00-00',\r\n\t\t\t['top-formsCaptionWrapper']: captionType !== '',\r\n\t\t\t['top-formsCaptionWrapper-always']: captionType === 'top',\r\n\t\t}\"\r\n\t\t:data-top-icon=\"icon\"\r\n\t\t:data-top-icon2=\"icon2\"\r\n\t>\r\n\t\t<Loadbar v-if=\"isLoading\"/>\r\n\r\n\t\t<input\r\n\t\t\ttype=\"text\"\r\n\t\t\t:class=\"{\r\n\t\t\t\t['top-input_input']: true,\r\n\t\t\t\t['top-input_input-' + modificator]: !!modificator,\r\n\t\t\t\t['top-forms-focusable']: !disabled,\r\n\t\t\t\t['top-error']: isError,\r\n\t\t\t}\"\r\n\t\t\tautocomplete=\"off_always\"\r\n\t\t\t:name=\"name\"\r\n\t\t\tv-model=\"localValue\"\r\n\t\t\t:title=\"title\"\r\n\t\t\t:placeholder=\"placeholder\"\r\n\t\t\t:disabled=\"disabled\"\r\n\t\t\t:readonly=\"readonly\"\r\n\t\t\t@keydown.esc=\"(event) => (addCleaner || !!$slots.btn) && clean(event)\"\r\n\t\t\t:=\"$attrs\"\r\n\t\t>\r\n\r\n\t\t<span\r\n\t\t\tv-if=\"addCleaner && localValue && localValue !== '0000-00-00'\"\r\n\t\t\tclass=\"top-input_cleaner\"\r\n\t\t\tdata-top-icon=\"\"\r\n\t\t\t@click.prevent=\"clean\"\r\n\t\t></span>\r\n\r\n\t\t<span\r\n\t\t\tv-if=\"captionType !== ''\"\r\n\t\t\tclass=\"top-formsCaption\"\r\n\t\t>\r\n\t\t\t{{ title }}\r\n\t\t</span>\r\n\r\n\t\t<!-- @slot Слот для вставки произвольного кода в label -->\r\n\t\t<slot></slot>\r\n\t</label>\r\n</template>\r\n\r\n<style module>\r\n.top-input {\r\n\t--top-forms_clear-width: 0px;\r\n\r\n\tborder-radius: var(--top-forms-radius);\r\n\twidth: 180px;\r\n\tposition: relative;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tgap: var(--top-gap-1);\r\n}\r\n\r\n.top-input_input {\r\n\tcolor: var(--color-text-2);\r\n\tbackground: var(--top-forms-background-color);\r\n\theight: var(--top-forms-base-height);\r\n\tpadding: 0;\r\n\tpadding-right: calc(max(var(--top-forms-padding), calc(var(--top-icon2-width) + var(--top-forms_clear-width))));\r\n\tpadding-left: calc(max(var(--top-forms-padding), var(--top-icon-width)));\r\n}\r\n\r\n.top-input_input:hover {\r\n\tbackground: var(--top-forms-background-color-hover);\r\n}\r\n\r\n.top-input_input:focus {\r\n\tcolor: var(--color-text-1);\r\n\tborder-color: var(--color-line-primary-1);\r\n\toutline: none;\r\n}\r\n\r\n/* значки */\r\n.top-input[data-top-icon]:before,\r\n.top-input[data-top-icon2]:after {\r\n\t--top-icon-color: var(--color-icon-2);\r\n\t--top-icon2-color: var(--color-icon-2);\r\n\r\n\tposition: absolute;\r\n\tz-index: 3;\r\n\tfont-size: 20px;\r\n}\r\n\r\n.top-input[data-top-icon]:before {\r\n\tleft: 0;\r\n}\r\n\r\n.top-input[data-top-icon2]:after {\r\n\tright: 0;\r\n}\r\n\r\n/* cleaner */\r\n.top-input-withCleaner {\r\n\t--top-forms_clear-width: 24px;\r\n}\r\n\r\n.top-input_cleaner {\r\n\t--top-icon-size: 16px;\r\n\t--top-icon-width: 20px;\r\n\t--top-icon-color: var(--color-icon-3);\r\n\r\n\tcursor: pointer;\r\n\tborder-radius: 50%;\r\n\twidth: 20px;\r\n\theight: 16px;\r\n\tposition: absolute;\r\n\tright: calc(var(--top-forms-border-width) + max(var(--top-icon2-width), var(--top-forms-padding) / 2));\r\n\tz-index: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.top-input_cleaner:hover {\r\n\t--top-icon-color: var(--color-icon-2);\r\n}\r\n\r\n/* TODO: перенести в inputsRange */\r\n.top-input_input {\r\n\twidth: 50%;\r\n\tflex-grow: 1;\r\n}\r\n\r\n/* top-loadbar */\r\n.top-input .top-loadbar{\r\n\tborder-radius: var(--top-forms-radius) 0 0 0;\r\n}\r\n</style>"],"names":["isRetina","isMobile","isApp","isMacOS","isSafari","isChrome","isSafari2","getCommandKeyLabel","getScrollTop","get$scroll","getElsScroll","getOS","os","res","i","getOSAsync","platformVersion","_a","Page","onResizeDelay","onResizeTimer","onResizeListeners","windowSize","addOnReize","listener","removeOnResize","onResize","e","callback","Events","options","state","$$1","el","_b","Core","tvTooltipGenOptions","binding","vnode","tooltip","_prevVnode","instance","_binding","_vnode","focus","appStickyObserver","sticky","className","entries","condition","_el","appSwimUpInited","appSwimUpObserver","directiveSwipUpOptions","appSwimUpEls","swimUpElTransform","windowHeight","distance","percent","elTop","triggerHeightReducer","triggerHeight","swimUpInit","el2","entry","swimUp","args","genWindow","_window","reactive","style","type","media","elStyle","app","options2","device","L","getDayOfWeek","y","m","d","dateToString","dateObject","langFormat","timeFormat","Y","H","s","date","dateFormat","stringToDate","genDate","timestamp","useFormat","time","genDateMoscow","ms","dateoffset","moscow_dateoffset","dateStr","dateMixed","dateFormat2","emptyValue","dateForObj","result","timeStr","dateUnformat","dateChunks","dateFormatChunks","index","props","__props","titleStatus","computed","titleImage","tagName","model","useModel","useNativeDatepicker","onInputLazy","_e","emit","__emit","onUnmounted","$el","ref","localValue","value","oninput","onchange","dateFormatted","init","datepicker","value2","optionByValue","option","genOption","children","subOption","subIndex","flatOptionByValue","title","watch","optionIcon","selectNextValue","listEnabledValues","nextIndex","_sfc_render","_ctx","_cache","placeholder","clean","event"],"mappings":"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"}