@topvisor/ui 0.9.7 → 0.9.8
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.
- package/.chunks/datepicker-7w3ISMUW.amd.js +234 -0
- package/.chunks/datepicker-7w3ISMUW.amd.js.map +1 -0
- package/.chunks/datepicker-KB2i-H67.es.js +275 -0
- package/.chunks/datepicker-KB2i-H67.es.js.map +1 -0
- package/.chunks/forms-AZXCfF-R.amd.js +3 -0
- package/.chunks/forms-AZXCfF-R.amd.js.map +1 -0
- package/.chunks/{forms-dneLtREE.es.js → forms-iL1swNCF.es.js} +367 -369
- package/.chunks/forms-iL1swNCF.es.js.map +1 -0
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-Mk92KW3C.es.js +154 -0
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-Mk92KW3C.es.js.map +1 -0
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-cBt2MlyL.amd.js +2 -0
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-cBt2MlyL.amd.js.map +1 -0
- package/.chunks/{popup-2azH2gGP.amd.js → popup-8sqqRRR_.amd.js} +384 -378
- package/.chunks/popup-8sqqRRR_.amd.js.map +1 -0
- package/.chunks/{popup-GFcVEZf5.es.js → popup-gLJT9tg6.es.js} +429 -423
- package/.chunks/popup-gLJT9tg6.es.js.map +1 -0
- package/README.md +80 -80
- package/assets/forms.css +1 -1
- package/assets/tabsView.css +1 -1
- package/core/core.amd.js +1 -1
- package/core/core.js +1 -1
- package/forms/forms.amd.js +1 -1
- package/forms/forms.js +1 -1
- package/forms/helpers.amd.js.map +1 -1
- package/forms/helpers.js.map +1 -1
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.js +1 -1
- package/formsExt/formsExt.js.map +1 -1
- package/icomoon/demo-files/demo.css +161 -161
- package/icomoon/demo-files/demo.js +30 -30
- package/icomoon/demo.html +2945 -2945
- package/icomoon/fonts/Topvisor-2.svg +232 -232
- package/icomoon/style.css +647 -647
- package/package.json +19 -19
- package/popup/popup.amd.js +1 -1
- package/popup/popup.js +2 -2
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.js +2 -2
- package/popup/worker.js.map +1 -1
- package/require/css.amd.js +11 -11
- package/src/components/forms/checkbox/checkbox.d.ts +1 -4
- package/src/components/forms/checkbox/checkbox.stories.d.ts +8 -32
- package/src/components/forms/checkbox/checkbox.vue.d.ts +41 -15
- package/src/components/popup/popup/popup.stories.d.ts +79 -0
- package/src/components/popup/popup/popup.vue.d.ts +1 -0
- package/src/components/tabsView/tabsView/_MenuItem.stories.d.ts +132 -31
- package/src/components/tabsView/tabsView/_MenuTitle.stories.d.ts +19 -1
- package/src/components/tabsView/tabsView/menuItem.vue.d.ts +18 -1
- package/src/components/tabsView/tabsView/tabsView.d.ts +48 -23
- package/src/components/tabsView/tabsView/tabsView.stories.d.ts +95 -54
- package/src/components/tabsView/tabsView/tabsView.vue.d.ts +3 -1
- package/src/components/tabsView/tabsView.d.ts +0 -1
- package/tabs/tabs.amd.js +1 -1
- package/tabs/tabs.js +1 -1
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/tabsView/tabsView.js +145 -122
- package/tabsView/tabsView.js.map +1 -1
- package/utils/css.amd.js.map +1 -1
- package/utils/css.js.map +1 -1
- package/utils/date.amd.js +1 -1
- package/utils/date.js +1 -1
- package/utils/device.amd.js +1 -1
- package/utils/device.js +1 -1
- package/utils/dom.amd.js.map +1 -1
- package/utils/dom.js.map +1 -1
- package/.chunks/datepicker-0tFN0clU.amd.js +0 -234
- package/.chunks/datepicker-0tFN0clU.amd.js.map +0 -1
- package/.chunks/datepicker-8geHBNBn.es.js +0 -275
- package/.chunks/datepicker-8geHBNBn.es.js.map +0 -1
- package/.chunks/forms-dneLtREE.es.js.map +0 -1
- package/.chunks/forms-hIalWiGK.amd.js +0 -3
- package/.chunks/forms-hIalWiGK.amd.js.map +0 -1
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-bLJ0dcPn.amd.js +0 -2
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-bLJ0dcPn.amd.js.map +0 -1
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-qWOlkuQ3.es.js +0 -148
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-qWOlkuQ3.es.js.map +0 -1
- package/.chunks/popup-2azH2gGP.amd.js.map +0 -1
- package/.chunks/popup-GFcVEZf5.es.js.map +0 -1
- package/src/components/tabsView/tabsView/content.vue.d.ts +0 -19
package/tabsView/tabsView.js
CHANGED
|
@@ -1,73 +1,77 @@
|
|
|
1
|
-
import { insertToPage as
|
|
2
|
-
import { provide as
|
|
3
|
-
import { b as
|
|
4
|
-
import { _ as
|
|
1
|
+
import { insertToPage as O } from "../utils/css.js";
|
|
2
|
+
import { provide as D, inject as E, watch as S, toRef as F, reactive as K, computed as P, defineComponent as h, openBlock as p, createBlock as c, resolveDynamicComponent as k, normalizeClass as b, unref as s, withCtx as _, renderSlot as m, createElementBlock as u, createCommentVNode as v, useSlots as A, ref as C, createElementVNode as d, toDisplayString as $, Fragment as j, createTextVNode as z, markRaw as J, watchEffect as R, onUnmounted as U, createVNode as G, KeepAlive as q } from "vue";
|
|
3
|
+
import { b as N, _ as H } from "../.chunks/listItem.vue_vue_type_script_setup_true_lang-Mk92KW3C.es.js";
|
|
4
|
+
import { _ as w, C as Q } from "../.chunks/forms-iL1swNCF.es.js";
|
|
5
5
|
import "../popup/worker.js";
|
|
6
6
|
import "../utils/dom.js";
|
|
7
|
-
const
|
|
8
|
-
await
|
|
9
|
-
const
|
|
10
|
-
const e =
|
|
7
|
+
const L = ["../assets/tabsView.css"].map((t) => import.meta.resolve(t));
|
|
8
|
+
await O(L);
|
|
9
|
+
const W = (t, e) => (D(t, e), e), X = (t) => {
|
|
10
|
+
const e = E(t);
|
|
11
11
|
if (!e)
|
|
12
12
|
throw Error("Попытка использовать tabsView state до его инициализации");
|
|
13
13
|
return e;
|
|
14
|
-
},
|
|
14
|
+
}, T = (t, e) => `top:tabsView:${String(t)}:${e}`, Y = (t, e) => {
|
|
15
15
|
if (!e.key)
|
|
16
16
|
return;
|
|
17
|
-
const o =
|
|
17
|
+
const o = T(t, e.key);
|
|
18
18
|
try {
|
|
19
19
|
const n = JSON.parse(localStorage.getItem(o));
|
|
20
20
|
typeof n == typeof e[t] && (e[t] = n);
|
|
21
21
|
} catch {
|
|
22
22
|
console.warn(new Error(`В localStorage[${o}] не корректный json`));
|
|
23
23
|
}
|
|
24
|
-
},
|
|
24
|
+
}, Z = (t, e) => {
|
|
25
25
|
if (!e.key)
|
|
26
26
|
return;
|
|
27
|
-
const o =
|
|
28
|
-
|
|
27
|
+
const o = T(t, e.key);
|
|
28
|
+
S(F(e, t), () => {
|
|
29
29
|
localStorage.setItem(o, JSON.stringify(e[t]));
|
|
30
30
|
}, { immediate: !0 });
|
|
31
31
|
}, f = {
|
|
32
|
-
init:
|
|
33
|
-
use:
|
|
34
|
-
loadLocalStorge:
|
|
35
|
-
addSaverLocalStorge:
|
|
36
|
-
},
|
|
37
|
-
const o =
|
|
32
|
+
init: W,
|
|
33
|
+
use: X,
|
|
34
|
+
loadLocalStorge: Y,
|
|
35
|
+
addSaverLocalStorge: Z
|
|
36
|
+
}, B = Symbol(), x = (t, e) => {
|
|
37
|
+
const o = K({
|
|
38
38
|
key: t.keyForSaveState,
|
|
39
39
|
showMenuInPopup: t.showMenuInPopup,
|
|
40
40
|
isShort: !1,
|
|
41
|
-
activeItemName:
|
|
41
|
+
activeItemName: P({
|
|
42
42
|
get() {
|
|
43
43
|
return t.modelValue;
|
|
44
44
|
},
|
|
45
45
|
set(n) {
|
|
46
46
|
e("update:modelValue", n);
|
|
47
47
|
}
|
|
48
|
-
})
|
|
48
|
+
}),
|
|
49
|
+
component: void 0,
|
|
50
|
+
scrollable: !0
|
|
49
51
|
});
|
|
50
|
-
return
|
|
51
|
-
},
|
|
52
|
+
return ee(t, o), f.init(B, o);
|
|
53
|
+
}, y = () => f.use(B), ee = (t, e) => {
|
|
52
54
|
if (t.isShortable) {
|
|
53
55
|
const o = "isShort";
|
|
54
56
|
f.loadLocalStorge(o, e), f.addSaverLocalStorge(o, e);
|
|
55
57
|
}
|
|
56
|
-
},
|
|
58
|
+
}, te = {
|
|
57
59
|
key: 1,
|
|
58
60
|
class: "top-ellipsis"
|
|
59
|
-
},
|
|
61
|
+
}, oe = /* @__PURE__ */ h({
|
|
60
62
|
__name: "menuItem",
|
|
61
63
|
props: {
|
|
62
64
|
name: {},
|
|
63
65
|
href: {},
|
|
64
66
|
icon: {},
|
|
65
|
-
disabled: { type: Boolean }
|
|
67
|
+
disabled: { type: Boolean },
|
|
68
|
+
component: { default: void 0 },
|
|
69
|
+
scrollable: { type: Boolean, default: !0 }
|
|
66
70
|
},
|
|
67
71
|
setup(t) {
|
|
68
|
-
const e = t, o =
|
|
69
|
-
return (a, l) => (
|
|
70
|
-
class:
|
|
72
|
+
const e = t, o = P(() => n.showMenuInPopup ? N : e.href ? "a" : "button"), n = y();
|
|
73
|
+
return (a, l) => (p(), c(k(o.value), {
|
|
74
|
+
class: b({
|
|
71
75
|
"top-tabsView_menuItem": !s(n).showMenuInPopup,
|
|
72
76
|
"top-active": a.name && s(n).activeItemName === a.name,
|
|
73
77
|
"top-disabled": a.disabled
|
|
@@ -78,198 +82,217 @@ const q = (t, e) => (B(t, e), e), G = (t) => {
|
|
|
78
82
|
onClick: l[0] || (l[0] = (r) => a.name ? s(n).activeItemName = a.name : null)
|
|
79
83
|
}, {
|
|
80
84
|
default: _(() => [
|
|
81
|
-
s(n).showMenuInPopup ?
|
|
82
|
-
|
|
83
|
-
])) :
|
|
85
|
+
s(n).showMenuInPopup ? m(a.$slots, "default", { key: 0 }) : a.$slots.default && !s(n).isShort ? (p(), u("span", te, [
|
|
86
|
+
m(a.$slots, "default")
|
|
87
|
+
])) : v("", !0)
|
|
84
88
|
]),
|
|
85
89
|
_: 3
|
|
86
90
|
}, 8, ["class", "href", "data-top-icon", "disabled"]));
|
|
87
91
|
}
|
|
88
|
-
}),
|
|
92
|
+
}), se = {
|
|
89
93
|
"top-tabsView_menuItem": "top-tabsView_menuItem",
|
|
90
94
|
"top-active": "top-active",
|
|
91
95
|
"top-forms-option": "top-forms-option",
|
|
92
96
|
"top-formsCaption": "top-formsCaption",
|
|
93
97
|
"top-disabled": "top-disabled"
|
|
94
|
-
},
|
|
95
|
-
$style:
|
|
96
|
-
},
|
|
98
|
+
}, ne = {
|
|
99
|
+
$style: se
|
|
100
|
+
}, V = /* @__PURE__ */ w(oe, [["__cssModules", ne]]), ae = { class: "top-tabsView_menuOpener" }, ie = ["data-top-icon"], le = { class: "top-ellipsis" }, pe = /* @__PURE__ */ d("div", {
|
|
97
101
|
class: "top-tabsView_menuOpenerIcon",
|
|
98
102
|
"data-top-icon": ""
|
|
99
|
-
}, null, -1),
|
|
103
|
+
}, null, -1), re = { class: "top-tabsView_menuList" }, ue = { class: "top-tabsView_menuFooter" }, ce = /* @__PURE__ */ h({
|
|
100
104
|
__name: "menu",
|
|
101
105
|
props: {
|
|
102
106
|
isShortable: { type: Boolean }
|
|
103
107
|
},
|
|
104
108
|
setup(t) {
|
|
105
|
-
const e =
|
|
106
|
-
let r = n.get(e.activeItemName);
|
|
107
|
-
return r || (l(), n.get(e.activeItemName) || null);
|
|
108
|
-
}), l = () => {
|
|
109
|
+
const e = y(), o = A(), n = /* @__PURE__ */ new Map(), a = () => {
|
|
109
110
|
if (!o.default)
|
|
110
111
|
return;
|
|
111
|
-
const r = o.default().find((
|
|
112
|
-
r && r.children.forEach((
|
|
113
|
-
var
|
|
114
|
-
if (
|
|
112
|
+
const r = o.default().find((i) => i.key === "_menu");
|
|
113
|
+
r && r.children.forEach((i) => {
|
|
114
|
+
var M, g;
|
|
115
|
+
if (i.type.__name !== V.__name || !i.props.name || i.props.disabled)
|
|
115
116
|
return;
|
|
116
117
|
const I = {
|
|
117
|
-
title: ((
|
|
118
|
-
icon:
|
|
118
|
+
title: ((g = (M = i.children).default) == null ? void 0 : g.call(M)[0].children).trim(),
|
|
119
|
+
icon: i.props.icon,
|
|
120
|
+
component: i.props.component ? J(i.props.component) : V.props.component.default,
|
|
121
|
+
scrollable: i.props.scrollable ?? V.props.scrollable.default
|
|
119
122
|
};
|
|
120
|
-
n.set(
|
|
123
|
+
n.set(i.props.name, I);
|
|
121
124
|
});
|
|
122
|
-
};
|
|
123
|
-
return (
|
|
124
|
-
|
|
125
|
+
}, l = C(null);
|
|
126
|
+
return S(
|
|
127
|
+
() => e.activeItemName,
|
|
128
|
+
() => {
|
|
129
|
+
if (n.size === 0 && a(), n.size === 0) {
|
|
130
|
+
e.activeItemName = "";
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (l.value = n.get(e.activeItemName) ?? null, !l.value) {
|
|
134
|
+
e.activeItemName = n.keys().next().value;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
e.scrollable = l.value.scrollable, e.component = l.value.component, l.value && !e.component && console.warn(`Компонент вкладки ${e.activeItemName} не найден. Добавьте props.component для пункта меню ${e.activeItemName}.`);
|
|
138
|
+
},
|
|
139
|
+
{ immediate: !0 }
|
|
140
|
+
), (r, i) => (p(), u("div", {
|
|
141
|
+
class: b({
|
|
125
142
|
"top-tabsView_menu": !0,
|
|
126
143
|
"top-tabsView_menu-inPopup_0": !s(e).showMenuInPopup,
|
|
127
144
|
"top-tabsView_menu-inPopup_1": s(e).showMenuInPopup,
|
|
128
145
|
"top-tabsView_menu-short": s(e).isShort && !s(e).showMenuInPopup
|
|
129
146
|
})
|
|
130
147
|
}, [
|
|
131
|
-
s(e).showMenuInPopup ? (
|
|
148
|
+
s(e).showMenuInPopup ? (p(), c(s(H), { key: 0 }, {
|
|
132
149
|
opener: _(() => [
|
|
133
|
-
|
|
134
|
-
|
|
150
|
+
d("div", ae, [
|
|
151
|
+
l.value ? (p(), u("div", {
|
|
135
152
|
key: 0,
|
|
136
153
|
class: "top-tabsView_menuOpenerActiveItem",
|
|
137
|
-
"data-top-icon":
|
|
154
|
+
"data-top-icon": l.value.icon
|
|
138
155
|
}, [
|
|
139
|
-
|
|
140
|
-
], 8,
|
|
141
|
-
|
|
156
|
+
d("span", le, $(l.value.title), 1)
|
|
157
|
+
], 8, ie)) : v("", !0),
|
|
158
|
+
pe
|
|
142
159
|
])
|
|
143
160
|
]),
|
|
144
161
|
contentList: _(() => [
|
|
145
|
-
|
|
162
|
+
m(r.$slots, "default")
|
|
146
163
|
]),
|
|
147
164
|
_: 3
|
|
148
|
-
})) : (
|
|
149
|
-
|
|
150
|
-
|
|
165
|
+
})) : (p(), u(j, { key: 1 }, [
|
|
166
|
+
d("div", re, [
|
|
167
|
+
m(r.$slots, "default")
|
|
151
168
|
]),
|
|
152
|
-
|
|
153
|
-
r.isShortable ? (
|
|
169
|
+
d("div", ue, [
|
|
170
|
+
r.isShortable ? (p(), c(V, {
|
|
154
171
|
key: 0,
|
|
155
172
|
icon: s(e).isShort ? "" : "",
|
|
156
|
-
onClick:
|
|
173
|
+
onClick: i[0] || (i[0] = (I) => s(e).isShort = !s(e).isShort)
|
|
157
174
|
}, {
|
|
158
175
|
default: _(() => [
|
|
159
|
-
|
|
176
|
+
z($(s(e).isShort ? "" : "Свернуть"), 1)
|
|
160
177
|
]),
|
|
161
178
|
_: 1
|
|
162
|
-
}, 8, ["icon"])) :
|
|
179
|
+
}, 8, ["icon"])) : v("", !0)
|
|
163
180
|
])
|
|
164
181
|
], 64))
|
|
165
182
|
], 2));
|
|
166
183
|
}
|
|
167
|
-
}),
|
|
184
|
+
}), me = {
|
|
185
|
+
"top-tabsView-pageMod": "top-tabsView-pageMod",
|
|
186
|
+
"top-tabsView_menu": "top-tabsView_menu",
|
|
168
187
|
"top-tabsView_menu-inPopup_0": "top-tabsView_menu-inPopup_0",
|
|
169
188
|
"top-tabsView_menu-inPopup_1": "top-tabsView_menu-inPopup_1",
|
|
170
189
|
"top-tabsView_menu-short": "top-tabsView_menu-short",
|
|
171
|
-
"top-tabsView_menu": "top-tabsView_menu",
|
|
172
190
|
"top-tabsView_menuOpener": "top-tabsView_menuOpener",
|
|
173
191
|
"top-tabsView_menuOpenerIcon": "top-tabsView_menuOpenerIcon",
|
|
174
192
|
"top-tabsView_menuOpenerActiveItem": "top-tabsView_menuOpenerActiveItem",
|
|
175
193
|
"top-tabsView_menuList": "top-tabsView_menuList",
|
|
176
194
|
"top-tabsView_menuFooter": "top-tabsView_menuFooter",
|
|
177
195
|
"top-tabsView_menuItem": "top-tabsView_menuItem"
|
|
178
|
-
},
|
|
179
|
-
$style:
|
|
180
|
-
},
|
|
196
|
+
}, de = {
|
|
197
|
+
$style: me
|
|
198
|
+
}, _e = /* @__PURE__ */ w(ce, [["__cssModules", de]]), be = /* @__PURE__ */ h({
|
|
181
199
|
__name: "tabsView",
|
|
182
200
|
props: {
|
|
183
201
|
modelValue: {},
|
|
184
|
-
|
|
202
|
+
pageMod: { type: Boolean },
|
|
203
|
+
showMenuInPopup: { type: Boolean, default: void 0 },
|
|
185
204
|
isShortable: { type: Boolean, default: !1 },
|
|
186
205
|
keyForSaveState: {}
|
|
187
206
|
},
|
|
188
207
|
emits: ["update:modelValue"],
|
|
189
208
|
setup(t, { emit: e }) {
|
|
190
|
-
const o = t, a =
|
|
191
|
-
|
|
192
|
-
a.showMenuInPopup = o.showMenuInPopup ??
|
|
193
|
-
})
|
|
194
|
-
|
|
209
|
+
const o = t, a = x(o, e);
|
|
210
|
+
R(() => {
|
|
211
|
+
a.showMenuInPopup = o.showMenuInPopup ?? Q.state.isMobile;
|
|
212
|
+
});
|
|
213
|
+
const l = (r = !1) => {
|
|
214
|
+
document.documentElement.classList.toggle("top-hasTabsViewPageMod", r);
|
|
215
|
+
};
|
|
216
|
+
return S(
|
|
217
|
+
() => o.pageMod,
|
|
218
|
+
() => l(o.pageMod),
|
|
219
|
+
{ immediate: !0 }
|
|
220
|
+
), U(() => {
|
|
221
|
+
l();
|
|
222
|
+
}), (r, i) => (p(), u("div", {
|
|
223
|
+
class: b({
|
|
195
224
|
"top-tabsView": !0,
|
|
225
|
+
"top-tabsView-pageMod": r.pageMod && !s(a).showMenuInPopup,
|
|
196
226
|
"top-tabsView-inPopup": s(a).showMenuInPopup
|
|
197
227
|
})
|
|
198
228
|
}, [
|
|
199
|
-
|
|
229
|
+
G(_e, { isShortable: r.isShortable }, {
|
|
200
230
|
default: _(() => [
|
|
201
|
-
|
|
231
|
+
m(r.$slots, "menu")
|
|
202
232
|
]),
|
|
203
233
|
_: 3
|
|
204
234
|
}, 8, ["isShortable"]),
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
235
|
+
d("div", {
|
|
236
|
+
class: b({
|
|
237
|
+
"top-tabsView_contents": !0,
|
|
238
|
+
"top-tabsView_contents-noScrollable": !s(a).scrollable
|
|
239
|
+
})
|
|
240
|
+
}, [
|
|
241
|
+
(p(), c(q, null, [
|
|
242
|
+
(p(), c(k(s(a).component)))
|
|
243
|
+
], 1024))
|
|
244
|
+
], 2)
|
|
208
245
|
], 2));
|
|
209
246
|
}
|
|
210
|
-
}),
|
|
247
|
+
}), we = {
|
|
211
248
|
"top-tabsView": "top-tabsView",
|
|
212
249
|
"top-tabsView-inPopup": "top-tabsView-inPopup",
|
|
213
|
-
"top-tabsView_contents": "top-tabsView_contents"
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
250
|
+
"top-tabsView_contents": "top-tabsView_contents",
|
|
251
|
+
"top-tabsView_contents-noScrollable": "top-tabsView_contents-noScrollable"
|
|
252
|
+
}, Ve = {
|
|
253
|
+
$style: we
|
|
254
|
+
}, Le = /* @__PURE__ */ w(be, [["__cssModules", Ve]]), fe = {
|
|
217
255
|
"top-tabsView_menuDelimeter": "top-tabsView_menuDelimeter"
|
|
218
|
-
},
|
|
219
|
-
function
|
|
220
|
-
return
|
|
256
|
+
}, he = {}, ve = { class: "top-tabsView_menuDelimeter" };
|
|
257
|
+
function Se(t, e) {
|
|
258
|
+
return p(), u("div", ve);
|
|
221
259
|
}
|
|
222
|
-
const
|
|
223
|
-
$style:
|
|
224
|
-
},
|
|
260
|
+
const ye = {
|
|
261
|
+
$style: fe
|
|
262
|
+
}, Ie = /* @__PURE__ */ w(he, [["render", Se], ["__cssModules", ye]]), Me = /* @__PURE__ */ h({
|
|
225
263
|
__name: "menuTitle",
|
|
226
264
|
props: {
|
|
227
265
|
isSubtitle: { type: Boolean }
|
|
228
266
|
},
|
|
229
267
|
setup(t) {
|
|
230
|
-
const e =
|
|
231
|
-
return (o, n) => s(e).showMenuInPopup ? (
|
|
268
|
+
const e = y();
|
|
269
|
+
return (o, n) => s(e).showMenuInPopup ? (p(), c(s(N), {
|
|
232
270
|
key: 0,
|
|
233
271
|
type: "title"
|
|
234
272
|
}, {
|
|
235
273
|
default: _(() => [
|
|
236
|
-
|
|
274
|
+
m(o.$slots, "default")
|
|
237
275
|
]),
|
|
238
276
|
_: 3
|
|
239
|
-
})) : s(e).isShort ? (
|
|
277
|
+
})) : s(e).isShort ? (p(), c(Ie, { key: 1 })) : (p(), u("div", {
|
|
240
278
|
key: 2,
|
|
241
|
-
class:
|
|
279
|
+
class: b({
|
|
242
280
|
"top-tabsView_menuTitle": !0,
|
|
243
281
|
"top-tabsView_menuTitle-subtitle": o.isSubtitle
|
|
244
282
|
})
|
|
245
283
|
}, [
|
|
246
|
-
|
|
284
|
+
m(o.$slots, "default")
|
|
247
285
|
], 2));
|
|
248
286
|
}
|
|
249
|
-
}),
|
|
287
|
+
}), ge = {
|
|
250
288
|
"top-tabsView_menuTitle": "top-tabsView_menuTitle",
|
|
251
289
|
"top-tabsView_menuTitle-subtitle": "top-tabsView_menuTitle-subtitle"
|
|
252
|
-
},
|
|
253
|
-
$style:
|
|
254
|
-
},
|
|
255
|
-
key: 0,
|
|
256
|
-
class: "top-tabsView_content"
|
|
257
|
-
}, Ce = /* @__PURE__ */ w({
|
|
258
|
-
__name: "content",
|
|
259
|
-
props: {
|
|
260
|
-
name: {}
|
|
261
|
-
},
|
|
262
|
-
setup(t) {
|
|
263
|
-
const e = S();
|
|
264
|
-
return (o, n) => s(e).activeItemName === o.name ? (i(), c("div", $e, [
|
|
265
|
-
u(o.$slots, "default")
|
|
266
|
-
])) : V("", !0);
|
|
267
|
-
}
|
|
268
|
-
});
|
|
290
|
+
}, $e = {
|
|
291
|
+
$style: ge
|
|
292
|
+
}, De = /* @__PURE__ */ w(Me, [["__cssModules", $e]]);
|
|
269
293
|
export {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
Be as TabsViewMenuTitle
|
|
294
|
+
Le as TabsView,
|
|
295
|
+
V as TabsViewMenuItem,
|
|
296
|
+
De as TabsViewMenuTitle
|
|
274
297
|
};
|
|
275
298
|
//# sourceMappingURL=tabsView.js.map
|
package/tabsView/tabsView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tabsView.js","sources":["../../src/components/stateManager.ts","../../src/components/tabsView/tabsView/state.ts","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/menuDelimeter.vue","../../src/components/tabsView/tabsView/menuTitle.vue","../../src/components/tabsView/tabsView/content.vue"],"sourcesContent":["import { provide, inject, toRef, watch } from 'vue';\nimport type { InjectionKey } from 'vue';\nimport { injectionKey } from '@/components/tabsView/tabsView/state';\n\n/**\n * State - интерфейс с общими параметрами для состояния компоента\n */\nexport interface State {\n\t/**\n\t * Ключ для сохранения состояния\n\t *\n\t * Может быть одинаковый для разных компонентов\n\t *\n\t * Не может быть реактивным\n\t *\n\t * Состояния сохраняются в localStorage с префиксом top\n\t */\n\tkey?: string;\n}\n\n/**\n * Инициировать State компонента\n * @param key - InjectionKey для provide / inject в области компонента\n * @param state\n * @return - State компонента\n */\nconst init = <T>(injectionKey: InjectionKey<T>, state: T): T => {\n\tprovide(injectionKey, state);\n\n\treturn state;\n};\n\n/**\n * Получить State компонента\n * @param key - InjectionKey для provide / inject в области компонента\n * @return - State компонента\n */\nconst use = <T>(injectionKey: InjectionKey<T>): T => {\n\tconst state = inject(injectionKey);\n\n\tif (!state) {\n\t\tthrow Error('Попытка использовать tabsView state до его инициализации');\n\t}\n\n\treturn state;\n};\n\n/**\n * Сгенерировать имя для сохранения данных в localStorage\n * @param stateName - имя свойства состояния\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\n */\nconst genStorageKey = <T extends State>(stateName: keyof T, stateKey: string): string => {\n\tconst stateNameString = String(stateName);\n\n\treturn `top:tabsView:${stateNameString}:${stateKey}`;\n};\n\n/**\n * Загрузить состояние\n * @param stateName - имя свойства состояния\n * @param state\n */\nconst loadLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\n\tif (!state.key) return;\n\n\tconst localStorageKey = genStorageKey(stateName, state.key);\n\n\ttry {\n\t\tconst localStorageValue: typeof state[keyof typeof state] = JSON.parse(localStorage.getItem(localStorageKey) as string);\n\n\t\tif (typeof localStorageValue === typeof state[stateName]) {\n\t\t\tstate[stateName] = localStorageValue;\n\t\t}\n\t} catch (e) {\n\t\tconsole.warn(new Error(`В localStorage[${localStorageKey}] не корректный json`));\n\t}\n};\n\n/**\n * Добавить автосохранение состояние при его изменении\n * @param stateName - имя свойства состояния\n * @param state\n */\nconst addSaverLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\n\tif (!state.key) return;\n\n\tconst localStorageKey = genStorageKey(stateName, state.key);\n\n\twatch(toRef(state, stateName), () => {\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(state[stateName]));\n\t}, { immediate: true });\n};\n\nexport default {\n\tinit,\n\tuse,\n\tloadLocalStorge,\n\taddSaverLocalStorge,\n};","import { reactive, computed } from 'vue';\nimport type { InjectionKey } from 'vue';\nimport type { State } from './tabsView';\nimport type { Emits, Props } from './tabsView';\nimport stateManager from '@/components/stateManager';\n\nexport const injectionKey = Symbol() as InjectionKey<State>;\n\n/**\n * Инициировать State компонента\n * @param props\n * @param emit\n */\nexport const initState = (props: Props, emit: Emits): State => {\n\tconst state: State = reactive({\n\t\tkey: props.keyForSaveState,\n\t\tshowMenuInPopup: props.showMenuInPopup,\n\t\tisShort: false,\n\t\tactiveItemName: computed({\n\t\t\tget() {\n\t\t\t\treturn props.modelValue;\n\t\t\t},\n\t\t\tset(value) {\n\t\t\t\temit('update:modelValue', value);\n\t\t\t},\n\t\t}),\n\t});\n\n\tinitLocalStorge(props, state);\n\n\treturn stateManager.init(injectionKey, state);\n};\n\n/**\n * Получить State компонента\n */\nexport const useState = () => {\n\treturn stateManager.use(injectionKey);\n};\n\n/**\n * Инициировать работу LocalStorge\n * @param props\n * @param state\n */\nconst initLocalStorge = (props: Props, state: State): void => {\n\tif (props.isShortable) {\n\t\tconst stateName = 'isShort';\n\n\t\tstateManager.loadLocalStorge(stateName, state);\n\t\tstateManager.addSaverLocalStorge(stateName, state);\n\t}\n};","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useState } from './state';\nimport type { PropsMenuItem, State } from './tabsView';\nimport { PopupListItem } from '../../popup/popup';\n\nconst props = defineProps<PropsMenuItem>();\n\nconst componentName = computed(() => {\n\tif (state.showMenuInPopup) {\n\t\treturn PopupListItem;\n\t}\n\n\treturn props.href ? 'a' : 'button';\n});\n\nconst state = useState();\n</script>\n\n<template>\n\t<component\n\t\t:is=\"componentName\"\n\t\t:class=\"{\n\t\t\t['top-tabsView_menuItem']: !state.showMenuInPopup,\n\t\t\t['top-active']: name && state.activeItemName === name,\n\t\t\t['top-disabled']: disabled,\n\t\t}\"\n\t\t:href=\"href\"\n\t\t:data-top-icon=\"icon || undefined\"\n\t\t:disabled=\"disabled || undefined\"\n\t\t@click=\"name ? state.activeItemName = name : null\"\n\t>\n\t\t<slot v-if=\"state.showMenuInPopup\"></slot>\n\n\t\t<span\n\t\t\tv-else-if=\"$slots.default && !state.isShort\"\n\t\t\tclass=\"top-ellipsis\"\n\t\t>\n\t\t\t<slot></slot>\n\t\t</span>\n\t</component>\n</template>\n\n<style module>\n.top-tabsView_menuItem {\n\t--top-icon-color: var(--color-text-1);\n\t--top-icon-width: calc(var(--top-icon-size));\n\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\n\tborder: none;\n\tborder-radius: var(--top-radius-2);\n\tpadding: var(--top-padding-2);\n\tbackground: transparent;\n\theight: 40px;\n\n\tcolor: var(--color-text-1);\n\ttext-align: left;\n\ttext-decoration: none;\n\twhite-space: nowrap;\n\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n\talign-items: center;\n\tjustify-content: flex-start;\n\ttransition: background var(--transition);\n}\n\n.top-tabsView_menuItem:hover {\n\tbackground: var(--color-secondary-2-opacity);\n}\n\n.top-tabsView_menuItem.top-active {\n\t--top-icon-color: var(--color-primary);\n\n\tcursor: unset;\n\tbackground: var(--color-bg-3);\n\tcolor: var(--color-primary);\n}\n\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\n\topacity: unset;\n\tfilter: unset;\n}\n\n.top-tabsView_menuItem.top-disabled {\n\t--top-icon-color: var(--color-text-4);\n\n\tcolor: var(--color-text-4);\n}\n</style>","<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue';\nimport type { ComputedRef } from '@vue/reactivity';\nimport { Popup } from '../../popup/popup';\n\nimport type { PropsMenu, PropsMenuItem, MenuItem } from './tabsView';\nimport { useState } from './state';\nimport TabsViewMenuItem from './menuItem.vue';\n\ndefineProps<PropsMenu>();\n\nconst state = useState();\n\nconst slots = useSlots();\n\n// словарь испоьзуется для оптимизации получения нужного menuItem\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\n\n// activeMenuItem нужен для вывода текста активной вкладки в меню с popup\n// смена slot, например смена языка, требует повторного выполнения genMenuItemByName()\nconst activeMenuItem: ComputedRef<MenuItem | null> = computed(() => {\n\tlet menuItem = menuItemByName.get(state.activeItemName);\n\tif (menuItem) return menuItem;\n\n\tgenMenuItemByName();\n\n\treturn menuItemByName.get(state.activeItemName) || null;\n});\n\n// сгенерировать словарь с menuItem, по элементам в slot\nconst genMenuItemByName = () => {\n\tif (!slots.default) return;\n\n\tconst component: any = slots.default().find(item => item.key === '_menu');\n\tif (!component) return;\n\n\tcomponent.children.forEach((subComponent: any) => {\n\t\tif (subComponent.type.__name !== TabsViewMenuItem.__name) return;\n\t\tif (!subComponent.props.name) return;\n\n\t\tconst menuItem = {\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\n\t\t\ticon: subComponent.props.icon,\n\t\t};\n\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\n\t});\n};\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView_menu': true,\n\t\t\t'top-tabsView_menu-inPopup_0': !state.showMenuInPopup,\n\t\t\t'top-tabsView_menu-inPopup_1': state.showMenuInPopup,\n\t\t\t'top-tabsView_menu-short': state.isShort && !state.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<!-- Спрятать меню под кнопку в popup -->\n\t\t<Popup v-if=\"state.showMenuInPopup\">\n\t\t\t<template #opener>\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<template #contentList>\n\t\t\t\t<slot></slot>\n\t\t\t</template>\n\t\t</Popup>\n\n\t\t<!-- Отобразить меню на старнице -->\n\t\t<template v-else>\n\t\t\t<div class=\"top-tabsView_menuList\">\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\n\t\t\t<div class=\"top-tabsView_menuFooter\">\n\t\t\t\t<TabsViewMenuItem\n\t\t\t\t\tv-if=\"isShortable\"\n\t\t\t\t\t:icon=\"state.isShort ? '' : ''\"\n\t\t\t\t\t@click=\"state.isShort = !state.isShort\"\n\t\t\t\t>\n\t\t\t\t\t{{ state.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\n\t\t\t\t</TabsViewMenuItem>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<style module>\n.top-tabsView_menu-inPopup_0 {\n\tbox-sizing: border-box;\n\twidth: var(--top-tabsView-menu-width);\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n}\n\n.top-tabsView_menu-inPopup_1 {\n\tborder-bottom: 1px solid var(--color-line-2-opacity);\n}\n\n.top-tabsView_menu-short {\n\twidth: auto;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\n\tbackground: var(--color-secondary-opacity);\n}\n\n.top-tabsView_menuOpenerIcon { display: flex; }\n\n.top-tabsView_menuOpenerActiveItem {\n\t--top-forms-padding: 0px;\n\n\tbox-sizing: border-box;\n\tpadding: var(--top-padding-2);\n\tmax-width: calc(100% - var(--top-forms-base-height));\n\twhite-space: nowrap;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: var(--top-padding-2);\n}\n\n.top-tabsView_menuList,\n.top-tabsView_menuFooter{\n\tpadding: var(--top-padding-2);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-2);\n}\n\n.top-tabsView_menuList{\n\toverflow-y: auto;\n}\n\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem{\n\t--top-icon-width: 100%;\n}\n</style>","<script setup lang=\"ts\">\nimport { watchEffect } from 'vue';\nimport type { Props, Emits } from './tabsView';\nimport { initState } from './state';\nimport TabsViewMenu from './menu.vue';\nimport Core from '@/core/core/core';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tisShortable: false,\n});\n\nconst emit = defineEmits<Emits>();\n\nconst state = initState(props, emit);\n\nwatchEffect(() => {\n\tstate.showMenuInPopup = props.showMenuInPopup ?? Core.state.isMobile;\n});\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-tabsView': true,\n\t\t\t'top-tabsView-inPopup': state.showMenuInPopup,\n\t\t}\"\n\t>\n\t\t<TabsViewMenu :isShortable=\"isShortable\">\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\n\t\t\t<slot name=\"menu\"></slot>\n\t\t</TabsViewMenu>\n\n\t\t<div class=\"top-tabsView_contents\">\n\t\t\t<!-- @slot Контент вкладок, ожидает передачу компонентов TabsViewContent, в слоте необходимо предусмотреть вывод неободимого компонента в зависимости от активной вкладки -->\n\t\t\t<slot name=\"contents\"></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<style module>\n:root {\n\t--top-tabsView-menu-width: 220px;\n}\n\n.top-tabsView {\n\tbackground: var(--color-bg-2);\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: row;\n}\n\n.top-tabsView-inPopup {\n\tbackground: var(--color-bg-3);\n\tflex-direction: column;\n}\n\n.top-tabsView_contents {\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-bg-3);\n\tpadding: var(--top-padding-4);\n\tflex-grow: 1;\n\toverflow: auto;\n}\n</style>","<script setup lang=\"ts\">\n\n</script>\n\n<template>\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\n</template>\n\n<style module>\n.top-tabsView_menuDelimeter {\n\tpadding: var(--top-padding-1) 0;\n\tdisplay: flex;\n}\n\n.top-tabsView_menuDelimeter:before {\n\tcontent: \"\";\n\theight: 2px;\n\tbackground: var(--color-line-2-opacity);\n\tflex-grow: 1;\n}\n\n.top-tabsView_menuDelimeter:first-child,\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\n\tdisplay: none;\n}\n</style>","<script setup lang=\"ts\">\nimport { useState } from './state';\nimport type { PropsMenuTitle, State } from './tabsView';\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\nimport { PopupListItem } from '../../popup/popup';\n\ndefineProps<PropsMenuTitle>();\n\nconst state = useState();\n</script>\n\n<template>\n\t<PopupListItem\n\t\tv-if=\"state.showMenuInPopup\"\n\t\ttype=\"title\"\n\t>\n\t\t<slot></slot>\n\t</PopupListItem>\n\n\t<TabsViewMenuDelimeter v-else-if=\"state.isShort\"/>\n\n\t<div\n\t\tv-else\n\t\t:class=\"{\n\t\t\t'top-tabsView_menuTitle': true,\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\n\t\t}\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style module>\n.top-tabsView_menuTitle {\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\n\tfont-weight: 600;\n}\n\n.top-tabsView_menuTitle-subtitle {\n\tpadding-top: var(--top-padding-1);\n\tfont-size: 12px;\n\tfont-weight: 400;\n\tcolor: var(--color-text-2);\n}\n</style>","<script setup lang=\"ts\">\nimport { useState } from './state';\nimport type { PropsContent } from './tabsView';\n\ndefineProps<PropsContent>();\n\nconst state = useState();\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"state.activeItemName === name\"\n\t\tclass=\"top-tabsView_content\"\n\t>\n\t\t<slot></slot>\n\t</div>\n</template>\n\n<style module>\n\n</style>"],"names":["init","injectionKey2","state","provide","use","inject","genStorageKey","stateName","stateKey","loadLocalStorge","localStorageKey","localStorageValue","addSaverLocalStorge","watch","toRef","stateManager","injectionKey","initState","props","emit","reactive","computed","value","initLocalStorge","useState","__props","componentName","_sfc_main$6","slots","useSlots","menuItemByName","activeMenuItem","menuItem","genMenuItemByName","component","item","subComponent","TabsViewMenuItem","_b","_a","__emit","watchEffect","Core","_sfc_render","_ctx","_cache"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tabsView.js","sources":["../../src/components/stateManager.ts","../../src/components/tabsView/tabsView/state.ts","../../src/components/tabsView/tabsView/menuItem.vue","../../src/components/tabsView/tabsView/menu.vue","../../src/components/tabsView/tabsView/tabsView.vue","../../src/components/tabsView/tabsView/menuDelimeter.vue","../../src/components/tabsView/tabsView/menuTitle.vue"],"sourcesContent":["import { provide, inject, toRef, watch } from 'vue';\r\nimport type { InjectionKey } from 'vue';\r\n\r\n/**\r\n * State - интерфейс с общими параметрами для состояния компонента\r\n */\r\nexport interface State {\r\n\t/**\r\n\t * Ключ для сохранения состояния\r\n\t *\r\n\t * Может быть одинаковый для разных компонентов\r\n\t *\r\n\t * Не может быть реактивным\r\n\t *\r\n\t * Состояния сохраняются в localStorage с префиксом top\r\n\t */\r\n\tkey?: string;\r\n}\r\n\r\n/**\r\n * Инициировать State компонента\r\n * @param key - InjectionKey для provide / inject в области компонента\r\n * @param state\r\n * @return - State компонента\r\n */\r\nconst init = <T>(injectionKey: InjectionKey<T>, state: T): T => {\r\n\tprovide(injectionKey, state);\r\n\r\n\treturn state;\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n * @param key - InjectionKey для provide / inject в области компонента\r\n * @return - State компонента\r\n */\r\nconst use = <T>(injectionKey: InjectionKey<T>): T => {\r\n\tconst state = inject(injectionKey);\r\n\r\n\tif (!state) {\r\n\t\tthrow Error('Попытка использовать tabsView state до его инициализации');\r\n\t}\r\n\r\n\treturn state;\r\n};\r\n\r\n/**\r\n * Сгенерировать имя для сохранения данных в localStorage\r\n * @param stateName - имя свойства состояния\r\n * @param stateKey - ключ состояния, разные компоненты могут использовать одинаковый ключ\r\n */\r\nconst genStorageKey = <T extends State>(stateName: keyof T, stateKey: string): string => {\r\n\tconst stateNameString = String(stateName);\r\n\r\n\treturn `top:tabsView:${stateNameString}:${stateKey}`;\r\n};\r\n\r\n/**\r\n * Загрузить состояние\r\n * @param stateName - имя свойства состояния\r\n * @param state\r\n */\r\nconst loadLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\r\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!state.key) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, state.key);\r\n\r\n\ttry {\r\n\t\tconst localStorageValue: typeof state[keyof typeof state] = JSON.parse(localStorage.getItem(localStorageKey) as string);\r\n\r\n\t\tif (typeof localStorageValue === typeof state[stateName]) {\r\n\t\t\tstate[stateName] = localStorageValue;\r\n\t\t}\r\n\t} catch (e) {\r\n\t\tconsole.warn(new Error(`В localStorage[${localStorageKey}] не корректный json`));\r\n\t}\r\n};\r\n\r\n/**\r\n * Добавить автосохранение состояние при его изменении\r\n * @param stateName - имя свойства состояния\r\n * @param state\r\n */\r\nconst addSaverLocalStorge = <T extends State>(stateName: keyof T, state: T) => {\r\n\t// если state.key не знадан, значит сохранение состояния в компоненте отключено\r\n\tif (!state.key) return;\r\n\r\n\tconst localStorageKey = genStorageKey(stateName, state.key);\r\n\r\n\twatch(toRef(state, stateName), () => {\r\n\t\tlocalStorage.setItem(localStorageKey, JSON.stringify(state[stateName]));\r\n\t}, { immediate: true });\r\n};\r\n\r\nexport default {\r\n\tinit,\r\n\tuse,\r\n\tloadLocalStorge,\r\n\taddSaverLocalStorge,\r\n};","import { reactive, computed } from 'vue';\r\nimport type { InjectionKey } from 'vue';\r\nimport type { State } from './tabsView';\r\nimport type { Emits, Props } from './tabsView';\r\nimport stateManager from '@/components/stateManager';\r\n\r\nexport const injectionKey = Symbol() as InjectionKey<State>;\r\n\r\n/**\r\n * Инициировать State компонента\r\n * @param props\r\n * @param emit\r\n */\r\nexport const initState = (props: Props, emit: Emits): State => {\r\n\tconst state: State = reactive({\r\n\t\tkey: props.keyForSaveState,\r\n\t\tshowMenuInPopup: props.showMenuInPopup,\r\n\t\tisShort: false,\r\n\t\tactiveItemName: computed({\r\n\t\t\tget() {\r\n\t\t\t\treturn props.modelValue;\r\n\t\t\t},\r\n\t\t\tset(value) {\r\n\t\t\t\temit('update:modelValue', value);\r\n\t\t\t},\r\n\t\t}),\r\n\t\tcomponent: undefined,\r\n\t\tscrollable: true,\r\n\t});\r\n\r\n\tinitLocalStorge(props, state);\r\n\r\n\treturn stateManager.init(injectionKey, state);\r\n};\r\n\r\n/**\r\n * Получить State компонента\r\n */\r\nexport const useState = () => {\r\n\treturn stateManager.use(injectionKey);\r\n};\r\n\r\n/**\r\n * Инициировать работу LocalStorge\r\n * @param props\r\n * @param state\r\n */\r\nconst initLocalStorge = (props: Props, state: State): void => {\r\n\tif (props.isShortable) {\r\n\t\tconst stateName = 'isShort';\r\n\r\n\t\tstateManager.loadLocalStorge(stateName, state);\r\n\t\tstateManager.addSaverLocalStorge(stateName, state);\r\n\t}\r\n};","<script setup lang=\"ts\">\r\nimport { computed } from 'vue';\r\nimport { useState } from './state';\r\nimport type { PropsMenuItem } from './tabsView';\r\nimport { PopupListItem } from '../../popup/popup';\r\n\r\nconst props = withDefaults(defineProps<PropsMenuItem>(), {\r\n\tscrollable: true,\r\n\tcomponent: undefined,\r\n});\r\n\r\nconst componentName = computed(() => {\r\n\tif (state.showMenuInPopup) {\r\n\t\treturn PopupListItem;\r\n\t}\r\n\r\n\treturn props.href ? 'a' : 'button';\r\n});\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<component\r\n\t\t:is=\"componentName\"\r\n\t\t:class=\"{\r\n\t\t\t['top-tabsView_menuItem']: !state.showMenuInPopup,\r\n\t\t\t['top-active']: name && state.activeItemName === name,\r\n\t\t\t['top-disabled']: disabled,\r\n\t\t}\"\r\n\t\t:href=\"href\"\r\n\t\t:data-top-icon=\"icon || undefined\"\r\n\t\t:disabled=\"disabled || undefined\"\r\n\t\t@click=\"name ? state.activeItemName = name : null\"\r\n\t>\r\n\t\t<slot v-if=\"state.showMenuInPopup\"></slot>\r\n\r\n\t\t<span\r\n\t\t\tv-else-if=\"$slots.default && !state.isShort\"\r\n\t\t\tclass=\"top-ellipsis\"\r\n\t\t>\r\n\t\t\t<slot></slot>\r\n\t\t</span>\r\n\t</component>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuItem {\r\n\t--top-icon-color: var(--color-text-1);\r\n\t--top-icon-width: calc(var(--top-icon-size));\r\n\r\n\tcursor: pointer;\r\n\tbox-sizing: border-box;\r\n\r\n\tborder: none;\r\n\tborder-radius: var(--top-radius-2);\r\n\tpadding: var(--top-padding-2);\r\n\tbackground: transparent;\r\n\theight: 40px;\r\n\r\n\tcolor: var(--color-text-1);\r\n\ttext-align: left;\r\n\ttext-decoration: none;\r\n\twhite-space: nowrap;\r\n\r\n\tdisplay: flex;\r\n\tgap: var(--top-gap-2);\r\n\talign-items: center;\r\n\tjustify-content: flex-start;\r\n\ttransition: background var(--transition);\r\n}\r\n\r\n.top-tabsView_menuItem:hover {\r\n\tbackground: var(--color-secondary-2-opacity);\r\n}\r\n\r\n.top-tabsView_menuItem.top-active {\r\n\t--top-icon-color: var(--color-primary);\r\n\r\n\tcursor: unset;\r\n\tbackground: var(--color-bg-3);\r\n\tcolor: var(--color-primary);\r\n}\r\n\r\n.top-tabsView_menuItem:disabled:not(option):not(optgroup):not(.top-forms-option),\r\n.top-tabsView_menuItem:disabled ~ .top-formsCaption,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon]:before,\r\n.top-tabsView_menuItem.top-disabled[data-top-icon2]:after {\r\n\topacity: unset;\r\n\tfilter: unset;\r\n}\r\n\r\n.top-tabsView_menuItem.top-disabled {\r\n\t--top-icon-color: var(--color-text-4);\r\n\r\n\tcolor: var(--color-text-4);\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { type Ref, ref, watch, markRaw, useSlots } from 'vue';\r\nimport { Popup } from '../../popup/popup';\r\n\r\nimport type { PropsMenu, PropsMenuItem, MenuItem } from './tabsView';\r\nimport { useState } from './state';\r\nimport TabsViewMenuItem from './menuItem.vue';\r\n\r\ndefineProps<PropsMenu>();\r\n\r\nconst state = useState();\r\n\r\nconst slots = useSlots();\r\n\r\n// словарь используется для оптимизации получения нужного menuItem\r\nconst menuItemByName: Map<PropsMenuItem['name'], MenuItem> = new Map();\r\n\r\n// сгенерировать словарь с menuItem, по элементам в slot\r\nconst genMenuItemByName = () => {\r\n\tif (!slots.default) return;\r\n\r\n\tconst component: any = slots.default().find(item => item.key === '_menu');\r\n\tif (!component) return;\r\n\r\n\tcomponent.children.forEach((subComponent: any) => {\r\n\t\tif (subComponent.type.__name !== TabsViewMenuItem.__name) return;\r\n\t\tif (!subComponent.props.name || subComponent.props.disabled) return;\r\n\t\tconst menuItem: MenuItem = {\r\n\t\t\ttitle: (subComponent.children.default?.()[0].children as string).trim(),\r\n\t\t\ticon: subComponent.props.icon,\r\n\t\t\tcomponent: subComponent.props.component ? markRaw(subComponent.props.component) : TabsViewMenuItem.props.component.default,\r\n\t\t\tscrollable: subComponent.props.scrollable ?? TabsViewMenuItem.props.scrollable.default,\r\n\t\t};\r\n\r\n\t\tmenuItemByName.set(subComponent.props.name, menuItem);\r\n\t});\r\n};\r\n\r\n/**\r\n * activeMenuItem нужен:\r\n * - для вывода текста активной вкладки в меню с popup\r\n * - для вывода компонента активной вкладки (state.component)\r\n * - для установки state.scrollable\r\n */\r\nconst activeMenuItem: Ref<MenuItem | null> = ref(null);\r\n\r\n/**\r\n * Смена активной вкладки\r\n *\r\n * TODO: смена slot, например смена языка, требует повторного выполнения genMenuItemByName()\r\n */\r\nwatch(\r\n\t() => state.activeItemName,\r\n\t() => {\r\n\t\tif (menuItemByName.size === 0) {\r\n\t\t\tgenMenuItemByName();\r\n\t\t}\r\n\r\n\t\tif (menuItemByName.size === 0) {\r\n\t\t\tstate.activeItemName = '';\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tactiveMenuItem.value = menuItemByName.get(state.activeItemName) ?? null;\r\n\r\n\t\tif (!activeMenuItem.value) {\r\n\t\t\tstate.activeItemName = menuItemByName.keys().next().value;\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tstate.scrollable = activeMenuItem.value.scrollable;\r\n\t\tstate.component = activeMenuItem.value.component;\r\n\r\n\t\tif (activeMenuItem.value && !state.component) {\r\n\t\t\tconsole.warn(`Компонент вкладки ${state.activeItemName} не найден. Добавьте props.component для пункта меню ${state.activeItemName}.`);\r\n\t\t}\r\n\t},\r\n\t{ immediate: true },\r\n);\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menu': true,\r\n\t\t\t'top-tabsView_menu-inPopup_0': !state.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-inPopup_1': state.showMenuInPopup,\r\n\t\t\t'top-tabsView_menu-short': state.isShort && !state.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<!-- Спрятать меню под кнопку в popup -->\r\n\t\t<Popup v-if=\"state.showMenuInPopup\">\r\n\t\t\t<template #opener>\r\n\t\t\t\t<div class=\"top-tabsView_menuOpener\">\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tv-if=\"activeMenuItem\"\r\n\t\t\t\t\t\tclass=\"top-tabsView_menuOpenerActiveItem\"\r\n\t\t\t\t\t\t:data-top-icon=\"activeMenuItem.icon\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span class=\"top-ellipsis\">\r\n\t\t\t\t\t\t\t{{ activeMenuItem.title }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"top-tabsView_menuOpenerIcon\" data-top-icon=\"\"></div>\r\n\t\t\t\t</div>\r\n\t\t\t</template>\r\n\r\n\t\t\t<template #contentList>\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</template>\r\n\t\t</Popup>\r\n\r\n\t\t<!-- Отобразить меню на старнице -->\r\n\t\t<template v-else>\r\n\t\t\t<div class=\"top-tabsView_menuList\">\r\n\t\t\t\t<slot></slot>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div class=\"top-tabsView_menuFooter\">\r\n\t\t\t\t<TabsViewMenuItem\r\n\t\t\t\t\tv-if=\"isShortable\"\r\n\t\t\t\t\t:icon=\"state.isShort ? '' : ''\"\r\n\t\t\t\t\t@click=\"state.isShort = !state.isShort\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{{ state.isShort ? '' : 'Свернуть' }} <!--TODO: translate-->\r\n\t\t\t\t</TabsViewMenuItem>\r\n\t\t\t</div>\r\n\t\t</template>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n/* режим отображение табов в основной области документа */\r\n.top-tabsView-pageMod .top-tabsView_menu {\r\n\theight: calc(var(--100vh) - var(--top-tabsView-top));\r\n\tposition: sticky;\r\n\ttop: var(--top-tabsView-top);\r\n}\r\n\r\n/* стантартный режим */\r\n.top-tabsView_menu-inPopup_0 {\r\n\tbox-sizing: border-box;\r\n\twidth: var(--top-tabsView-menu-width);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tjustify-content: space-between;\r\n}\r\n\r\n/* режим вывода в popup */\r\n.top-tabsView_menu-inPopup_1 {\r\n\tborder-bottom: 1px solid var(--color-line-2-opacity);\r\n}\r\n\r\n.top-tabsView_menu-short {\r\n\twidth: auto;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener {\r\n\tdisplay: flex;\r\n\tjustify-content: flex-end;\r\n}\r\n\r\n.top-tabsView_menu > .top-tabsView_menuOpener:hover {\r\n\tbackground: var(--color-secondary-opacity);\r\n}\r\n\r\n.top-tabsView_menuOpenerIcon { display: flex; }\r\n\r\n.top-tabsView_menuOpenerActiveItem {\r\n\t--top-forms-padding: 0px;\r\n\r\n\tbox-sizing: border-box;\r\n\tpadding: var(--top-padding-2);\r\n\tmax-width: calc(100% - var(--top-forms-base-height));\r\n\twhite-space: nowrap;\r\n\tflex-grow: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: var(--top-padding-2);\r\n}\r\n\r\n.top-tabsView_menuList,\r\n.top-tabsView_menuFooter {\r\n\tpadding: var(--top-padding-2);\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tgap: var(--top-gap-2);\r\n}\r\n\r\n.top-tabsView_menuList {\r\n\toverflow-y: auto;\r\n}\r\n\r\n.top-tabsView_menu-short .top-tabsView_menuFooter > .top-tabsView_menuItem {\r\n\t--top-icon-width: 100%;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { onUnmounted, watch, watchEffect } from 'vue';\r\nimport type { Props, Emits } from './tabsView';\r\nimport { initState } from './state';\r\nimport TabsViewMenu from './menu.vue';\r\nimport Core from '@/core/core/core';\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n\tshowMenuInPopup: undefined,\r\n\tisShortable: false,\r\n});\r\n\r\nconst emit = defineEmits<Emits>();\r\n\r\nconst state = initState(props, emit);\r\n\r\nwatchEffect(() => {\r\n\tstate.showMenuInPopup = props.showMenuInPopup ?? Core.state.isMobile;\r\n});\r\n\r\n/**\r\n * Установка или снятие глобального модификатора\r\n * @see props.pageMod\r\n * @param pageMod\r\n */\r\nconst setDocumentGlobalModificator = (pageMod = false) => {\r\n\tdocument.documentElement.classList.toggle('top-hasTabsViewPageMod', pageMod);\r\n};\r\n\r\nwatch(\r\n\t() => props.pageMod,\r\n\t() => setDocumentGlobalModificator(props.pageMod),\r\n\t{ immediate: true },\r\n);\r\n\r\nonUnmounted(() => {\r\n\tsetDocumentGlobalModificator();\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView': true,\r\n\t\t\t'top-tabsView-pageMod': pageMod && !state.showMenuInPopup,\r\n\t\t\t'top-tabsView-inPopup': state.showMenuInPopup,\r\n\t\t}\"\r\n\t>\r\n\t\t<TabsViewMenu :isShortable=\"isShortable\">\r\n\t\t\t<!-- @slot Меню, ожидает передачу компонентов TabsViewMenuItem и TabsViewMenuTitle -->\r\n\t\t\t<slot name=\"menu\"></slot>\r\n\t\t</TabsViewMenu>\r\n\r\n\t\t<div\r\n\t\t\t:class=\"{\r\n\t\t\t\t'top-tabsView_contents': true,\r\n\t\t\t\t'top-tabsView_contents-noScrollable': !state.scrollable,\r\n\t\t\t}\"\r\n\t\t>\r\n\t\t\t<keep-alive>\r\n\t\t\t\t<component :is=\"state.component\"/>\r\n\t\t\t</keep-alive>\r\n\t\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n:root {\r\n\t--top-tabsView-top: 0px;\r\n\t--top-tabsView-menu-width: 220px;\r\n}\r\n\r\n.top-tabsView {\r\n\tbackground: var(--color-bg-2);\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n}\r\n\r\n.top-tabsView-inPopup {\r\n\tbackground: var(--color-bg-3);\r\n\tflex-direction: column;\r\n}\r\n\r\n.top-tabsView_contents {\r\n\tborder-radius: var(--top-radius-4);\r\n\tbackground: var(--color-bg-3);\r\n\tpadding: var(--top-padding-4);\r\n\tflex-grow: 1;\r\n\toverflow: auto;\r\n}\r\n\r\n.top-tabsView_contents-noScrollable {\r\n\twidth: calc(100% - var(--top-tabsView-menu-width));\r\n\tpadding: 0;\r\n\toverflow: visible;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\n\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-tabsView_menuDelimeter\"></div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuDelimeter {\r\n\tpadding: var(--top-padding-1) 0;\r\n\tdisplay: flex;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:before {\r\n\tcontent: \"\";\r\n\theight: 2px;\r\n\tbackground: var(--color-line-2-opacity);\r\n\tflex-grow: 1;\r\n}\r\n\r\n.top-tabsView_menuDelimeter:first-child,\r\n.top-tabsView_menuDelimeter + .top-tabsView_menuDelimeter {\r\n\tdisplay: none;\r\n}\r\n</style>","<script setup lang=\"ts\">\r\nimport { useState } from './state';\r\nimport type { PropsMenuTitle, State } from './tabsView';\r\nimport TabsViewMenuDelimeter from './menuDelimeter.vue';\r\nimport { PopupListItem } from '../../popup/popup';\r\n\r\ndefineProps<PropsMenuTitle>();\r\n\r\nconst state = useState();\r\n</script>\r\n\r\n<template>\r\n\t<PopupListItem\r\n\t\tv-if=\"state.showMenuInPopup\"\r\n\t\ttype=\"title\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</PopupListItem>\r\n\r\n\t<TabsViewMenuDelimeter v-else-if=\"state.isShort\"/>\r\n\r\n\t<div\r\n\t\tv-else\r\n\t\t:class=\"{\r\n\t\t\t'top-tabsView_menuTitle': true,\r\n\t\t\t'top-tabsView_menuTitle-subtitle': isSubtitle,\r\n\t\t}\"\r\n\t>\r\n\t\t<slot></slot>\r\n\t</div>\r\n</template>\r\n\r\n<style module>\r\n.top-tabsView_menuTitle {\r\n\tpadding: var(--top-padding-4) var(--top-padding-2) var(--top-padding-1);\r\n\tfont-weight: 600;\r\n}\r\n\r\n.top-tabsView_menuTitle-subtitle {\r\n\tpadding-top: var(--top-padding-1);\r\n\tfont-size: 12px;\r\n\tfont-weight: 400;\r\n\tcolor: var(--color-text-2);\r\n}\r\n</style>"],"names":["init","injectionKey","state","provide","use","inject","genStorageKey","stateName","stateKey","loadLocalStorge","localStorageKey","localStorageValue","addSaverLocalStorge","watch","toRef","stateManager","initState","props","emit","reactive","computed","value","initLocalStorge","useState","__props","componentName","_sfc_main$5","slots","useSlots","menuItemByName","genMenuItemByName","component","item","subComponent","TabsViewMenuItem","menuItem","_b","_a","markRaw","activeMenuItem","ref","__emit","watchEffect","Core","setDocumentGlobalModificator","pageMod","onUnmounted","_sfc_render","_ctx","_cache"],"mappings":"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"}
|
package/utils/css.amd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.amd.js","sources":["../../src/core/utils/css.ts"],"sourcesContent":["/**\n * Вставить css стили на страницу с автоматическим определением media\n * @param fileNames - список ссылок на css файлы\n */\nexport const insertToPage = async (fileNames: Array<string>) => {\n\tconst cssFilesByOptions = new Map();\n\tcssFilesByOptions.set('::', []);\n\n\tfileNames.forEach(filename => {\n\t\tlet m = false;\n\t\tlet pc = false;\n\n\t\tif (filename.match(/\\.m\\./)) {\n\t\t\tm = true;\n\t\t}\n\t\tif (filename.match(/\\.pc\\./)) {\n\t\t\tpc = true;\n\t\t}\n\n\t\tconst key = `${m}:${pc}`;\n\t\tif (!cssFilesByOptions.has(key)) {\n\t\t\tcssFilesByOptions.set(`${m}:${pc}`, []);\n\t\t}\n\t\tcssFilesByOptions.get(`${m}:${pc}`).push(filename);\n\t});\n\n\tconst promises = [];\n\n\tcssFilesByOptions.forEach((fileNames, options: string) => {\n\t\tif (!fileNames.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [m, pc] = options.split(':').map(item => item === 'true');\n\n\t\tlet media = 'all';\n\t\tif (m) {\n\t\t\tmedia = '(max-width: 900px)';\n\t\t}\n\t\tif (pc) {\n\t\t\tmedia = '(min-width: 900px)';\n\t\t}\n\n\t\tconst promisesI = _insertToPage(fileNames, media);\n\t\tpromisesI.forEach(promise => promises.push(promise));\n\t});\n\n\treturn await Promise.all(promises);\n};\n\nconst _insertToPage = (fileNames: Array<string>, media: string): Array<Promise<void>> => {\n\tconst promises = [];\n\n\tfileNames.forEach(fileName => {\n\t\tconst id = 'topCSSLink-' + fileName.replace(/\\W/g, '-');\n\n\t\t// стиль уже загружен\n\t\tif (window[id]) return;\n\n\t\tlet resolve: Function;\n\t\tlet reject: Function;\n\t\tconst promise = new Promise((_resolve, _reject) => {\n\t\t\tresolve = _resolve;\n\t\t\treject = _reject;\n\t\t});\n\t\tpromises.push(promise);\n\n\t\tconst elLink = document.createElement('link');\n\t\telLink.id = id;\n\t\telLink.rel = 'stylesheet';\n\t\telLink.media = media;\n\t\telLink.href = fileName;\n\t\telLink.onload = () => resolve();\n\t\telLink.onerror = () => reject();\n\n\t\tdocument.head.append(elLink);\n\t});\n\n\treturn promises;\n};"],"names":["insertToPage","fileNames","cssFilesByOptions","filename","m","pc","key","promises","fileNames2","media","promise","_insertToPage","fileName","id","elLink","resolve","reject"],"mappings":"yFAIa,MAAAA,EAAA,MAAAC,GAAA,CACZ,MAAAC,EAAA,IAAA,mBAGAD,EAAA,QAAAE,GAAA,CACC,IAAAC,EAAA,GACAC,EAAA,GAEAF,EAAA,MAAA,OAAA,UAGAA,EAAA,MAAA,QAAA,UAIA,MAAAG,EAAA,GAAAF,CAAA,IAAAC,CAAA,aAECH,EAAA,IAAA,GAAAE,CAAA,IAAAC,CAAA,GAAA,CAAA,CAAA,EAEDH,EAAA,IAAA,GAAAE,CAAA,IAAAC,CAAA,EAAA,EAAA,KAAAF,CAAA,CAAiD,CAAA,EAGlD,MAAAI,EAAA,CAAA,2BAGC,GAAA,CAAAC,EAAA,OACC,kDAKD,IAAAC,EAAA,qEASA,QAAAC,GAAAH,EAAA,KAAAG,CAAA,CAAA,CAAmD,CAAA,wBAMrDC,EAAA,CAAAV,EAAAQ,IAAA,CACC,MAAAF,EAAA,CAAA,EAEA,OAAAN,EAAA,QAAAW,GAAA,CACC,MAAAC,EAAA,cAAAD,EAAA,QAAA,MAAA,GAAA,EAGA,GAAA,OAAAC,CAAA,EAAgB,kDAMN,CAAA,EAEVN,EAAA,KAAAG,CAAA,yCAGAI,EAAA,GAAAD,EACAC,EAAA,IAAA,aACAA,EAAA,MAAAL,EACAK,EAAA,KAAAF,EACAE,EAAA,OAAA,IAAAC,EAAA,EACAD,EAAA,QAAA,IAAAE,EAAA,yBAE2B,CAAA"}
|
|
1
|
+
{"version":3,"file":"css.amd.js","sources":["../../src/core/utils/css.ts"],"sourcesContent":["/**\r\n * Вставить css стили на страницу с автоматическим определением media\r\n * @param fileNames - список ссылок на css файлы\r\n */\r\nexport const insertToPage = async (fileNames: Array<string>) => {\r\n\tconst cssFilesByOptions = new Map();\r\n\tcssFilesByOptions.set('::', []);\r\n\r\n\tfileNames.forEach(filename => {\r\n\t\tlet m = false;\r\n\t\tlet pc = false;\r\n\r\n\t\tif (filename.match(/\\.m\\./)) {\r\n\t\t\tm = true;\r\n\t\t}\r\n\t\tif (filename.match(/\\.pc\\./)) {\r\n\t\t\tpc = true;\r\n\t\t}\r\n\r\n\t\tconst key = `${m}:${pc}`;\r\n\t\tif (!cssFilesByOptions.has(key)) {\r\n\t\t\tcssFilesByOptions.set(`${m}:${pc}`, []);\r\n\t\t}\r\n\t\tcssFilesByOptions.get(`${m}:${pc}`).push(filename);\r\n\t});\r\n\r\n\tconst promises = [];\r\n\r\n\tcssFilesByOptions.forEach((fileNames, options: string) => {\r\n\t\tif (!fileNames.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst [m, pc] = options.split(':').map(item => item === 'true');\r\n\r\n\t\tlet media = 'all';\r\n\t\tif (m) {\r\n\t\t\tmedia = '(max-width: 900px)';\r\n\t\t}\r\n\t\tif (pc) {\r\n\t\t\tmedia = '(min-width: 900px)';\r\n\t\t}\r\n\r\n\t\tconst promisesI = _insertToPage(fileNames, media);\r\n\t\tpromisesI.forEach(promise => promises.push(promise));\r\n\t});\r\n\r\n\treturn await Promise.all(promises);\r\n};\r\n\r\nconst _insertToPage = (fileNames: Array<string>, media: string): Array<Promise<void>> => {\r\n\tconst promises = [];\r\n\r\n\tfileNames.forEach(fileName => {\r\n\t\tconst id = 'topCSSLink-' + fileName.replace(/\\W/g, '-');\r\n\r\n\t\t// стиль уже загружен\r\n\t\tif (window[id]) return;\r\n\r\n\t\tlet resolve: Function;\r\n\t\tlet reject: Function;\r\n\t\tconst promise = new Promise((_resolve, _reject) => {\r\n\t\t\tresolve = _resolve;\r\n\t\t\treject = _reject;\r\n\t\t});\r\n\t\tpromises.push(promise);\r\n\r\n\t\tconst elLink = document.createElement('link');\r\n\t\telLink.id = id;\r\n\t\telLink.rel = 'stylesheet';\r\n\t\telLink.media = media;\r\n\t\telLink.href = fileName;\r\n\t\telLink.onload = () => resolve();\r\n\t\telLink.onerror = () => reject();\r\n\r\n\t\tdocument.head.append(elLink);\r\n\t});\r\n\r\n\treturn promises;\r\n};"],"names":["insertToPage","fileNames","cssFilesByOptions","filename","m","pc","key","promises","fileNames2","media","promise","_insertToPage","fileName","id","elLink","resolve","reject"],"mappings":"yFAIa,MAAAA,EAAA,MAAAC,GAAA,CACZ,MAAAC,EAAA,IAAA,mBAGAD,EAAA,QAAAE,GAAA,CACC,IAAAC,EAAA,GACAC,EAAA,GAEAF,EAAA,MAAA,OAAA,UAGAA,EAAA,MAAA,QAAA,UAIA,MAAAG,EAAA,GAAAF,CAAA,IAAAC,CAAA,aAECH,EAAA,IAAA,GAAAE,CAAA,IAAAC,CAAA,GAAA,CAAA,CAAA,EAEDH,EAAA,IAAA,GAAAE,CAAA,IAAAC,CAAA,EAAA,EAAA,KAAAF,CAAA,CAAiD,CAAA,EAGlD,MAAAI,EAAA,CAAA,2BAGC,GAAA,CAAAC,EAAA,OACC,kDAKD,IAAAC,EAAA,qEASA,QAAAC,GAAAH,EAAA,KAAAG,CAAA,CAAA,CAAmD,CAAA,wBAMrDC,EAAA,CAAAV,EAAAQ,IAAA,CACC,MAAAF,EAAA,CAAA,EAEA,OAAAN,EAAA,QAAAW,GAAA,CACC,MAAAC,EAAA,cAAAD,EAAA,QAAA,MAAA,GAAA,EAGA,GAAA,OAAAC,CAAA,EAAgB,kDAMN,CAAA,EAEVN,EAAA,KAAAG,CAAA,yCAGAI,EAAA,GAAAD,EACAC,EAAA,IAAA,aACAA,EAAA,MAAAL,EACAK,EAAA,KAAAF,EACAE,EAAA,OAAA,IAAAC,EAAA,EACAD,EAAA,QAAA,IAAAE,EAAA,yBAE2B,CAAA"}
|
package/utils/css.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css.js","sources":["../../src/core/utils/css.ts"],"sourcesContent":["/**\n * Вставить css стили на страницу с автоматическим определением media\n * @param fileNames - список ссылок на css файлы\n */\nexport const insertToPage = async (fileNames: Array<string>) => {\n\tconst cssFilesByOptions = new Map();\n\tcssFilesByOptions.set('::', []);\n\n\tfileNames.forEach(filename => {\n\t\tlet m = false;\n\t\tlet pc = false;\n\n\t\tif (filename.match(/\\.m\\./)) {\n\t\t\tm = true;\n\t\t}\n\t\tif (filename.match(/\\.pc\\./)) {\n\t\t\tpc = true;\n\t\t}\n\n\t\tconst key = `${m}:${pc}`;\n\t\tif (!cssFilesByOptions.has(key)) {\n\t\t\tcssFilesByOptions.set(`${m}:${pc}`, []);\n\t\t}\n\t\tcssFilesByOptions.get(`${m}:${pc}`).push(filename);\n\t});\n\n\tconst promises = [];\n\n\tcssFilesByOptions.forEach((fileNames, options: string) => {\n\t\tif (!fileNames.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst [m, pc] = options.split(':').map(item => item === 'true');\n\n\t\tlet media = 'all';\n\t\tif (m) {\n\t\t\tmedia = '(max-width: 900px)';\n\t\t}\n\t\tif (pc) {\n\t\t\tmedia = '(min-width: 900px)';\n\t\t}\n\n\t\tconst promisesI = _insertToPage(fileNames, media);\n\t\tpromisesI.forEach(promise => promises.push(promise));\n\t});\n\n\treturn await Promise.all(promises);\n};\n\nconst _insertToPage = (fileNames: Array<string>, media: string): Array<Promise<void>> => {\n\tconst promises = [];\n\n\tfileNames.forEach(fileName => {\n\t\tconst id = 'topCSSLink-' + fileName.replace(/\\W/g, '-');\n\n\t\t// стиль уже загружен\n\t\tif (window[id]) return;\n\n\t\tlet resolve: Function;\n\t\tlet reject: Function;\n\t\tconst promise = new Promise((_resolve, _reject) => {\n\t\t\tresolve = _resolve;\n\t\t\treject = _reject;\n\t\t});\n\t\tpromises.push(promise);\n\n\t\tconst elLink = document.createElement('link');\n\t\telLink.id = id;\n\t\telLink.rel = 'stylesheet';\n\t\telLink.media = media;\n\t\telLink.href = fileName;\n\t\telLink.onload = () => resolve();\n\t\telLink.onerror = () => reject();\n\n\t\tdocument.head.append(elLink);\n\t});\n\n\treturn promises;\n};"],"names":["insertToPage","fileNames","cssFilesByOptions","filename","m","pc","key","promises","options","item","media","_insertToPage","promise","fileName","id","resolve","reject","_resolve","_reject","elLink"],"mappings":"AAIa,MAAAA,IAAe,OAAOC,MAA6B;AACzD,QAAAC,wBAAwB;AACZ,EAAAA,EAAA,IAAI,MAAM,CAAA,CAAE,GAE9BD,EAAU,QAAQ,CAAYE,MAAA;AAC7B,QAAIC,IAAI,IACJC,IAAK;AAEL,IAAAF,EAAS,MAAM,OAAO,MACrBC,IAAA,KAEDD,EAAS,MAAM,QAAQ,MACrBE,IAAA;AAGN,UAAMC,IAAM,GAAGF,CAAC,IAAIC,CAAE;AACtB,IAAKH,EAAkB,IAAII,CAAG,KAC7BJ,EAAkB,IAAI,GAAGE,CAAC,IAAIC,CAAE,IAAI,CAAA,CAAE,GAErBH,EAAA,IAAI,GAAGE,CAAC,IAAIC,CAAE,EAAE,EAAE,KAAKF,CAAQ;AAAA,EAAA,CACjD;AAED,QAAMI,IAAW,CAAA;AAEC,SAAAL,EAAA,QAAQ,CAACD,GAAWO,MAAoB;AACrD,QAAA,CAACP,EAAU;AACd;AAGK,UAAA,CAACG,GAAGC,CAAE,IAAIG,EAAQ,MAAM,GAAG,EAAE,IAAI,CAAQC,MAAAA,MAAS,MAAM;AAE9D,QAAIC,IAAQ;AACZ,IAAIN,MACKM,IAAA,uBAELL,MACKK,IAAA,uBAGSC,EAAcV,GAAWS,CAAK,EACtC,QAAQ,CAAAE,MAAWL,EAAS,KAAKK,CAAO,CAAC;AAAA,EAAA,CACnD,GAEM,MAAM,QAAQ,IAAIL,CAAQ;AAClC,GAEMI,IAAgB,CAACV,GAA0BS,MAAwC;AACxF,QAAMH,IAAW,CAAA;AAEjB,SAAAN,EAAU,QAAQ,CAAYY,MAAA;AAC7B,UAAMC,IAAK,gBAAgBD,EAAS,QAAQ,OAAO,GAAG;AAGtD,QAAI,OAAOC,CAAE;AAAG;AAEZ,QAAAC,GACAC;AACJ,UAAMJ,IAAU,IAAI,QAAQ,CAACK,GAAUC,MAAY;AACxC,MAAAH,IAAAE,GACDD,IAAAE;AAAA,IAAA,CACT;AACD,IAAAX,EAAS,KAAKK,CAAO;AAEf,UAAAO,IAAS,SAAS,cAAc,MAAM;AAC5C,IAAAA,EAAO,KAAKL,GACZK,EAAO,MAAM,cACbA,EAAO,QAAQT,GACfS,EAAO,OAAON,GACPM,EAAA,SAAS,MAAMJ,KACfI,EAAA,UAAU,MAAMH,KAEd,SAAA,KAAK,OAAOG,CAAM;AAAA,EAAA,CAC3B,GAEMZ;AACR;"}
|
|
1
|
+
{"version":3,"file":"css.js","sources":["../../src/core/utils/css.ts"],"sourcesContent":["/**\r\n * Вставить css стили на страницу с автоматическим определением media\r\n * @param fileNames - список ссылок на css файлы\r\n */\r\nexport const insertToPage = async (fileNames: Array<string>) => {\r\n\tconst cssFilesByOptions = new Map();\r\n\tcssFilesByOptions.set('::', []);\r\n\r\n\tfileNames.forEach(filename => {\r\n\t\tlet m = false;\r\n\t\tlet pc = false;\r\n\r\n\t\tif (filename.match(/\\.m\\./)) {\r\n\t\t\tm = true;\r\n\t\t}\r\n\t\tif (filename.match(/\\.pc\\./)) {\r\n\t\t\tpc = true;\r\n\t\t}\r\n\r\n\t\tconst key = `${m}:${pc}`;\r\n\t\tif (!cssFilesByOptions.has(key)) {\r\n\t\t\tcssFilesByOptions.set(`${m}:${pc}`, []);\r\n\t\t}\r\n\t\tcssFilesByOptions.get(`${m}:${pc}`).push(filename);\r\n\t});\r\n\r\n\tconst promises = [];\r\n\r\n\tcssFilesByOptions.forEach((fileNames, options: string) => {\r\n\t\tif (!fileNames.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst [m, pc] = options.split(':').map(item => item === 'true');\r\n\r\n\t\tlet media = 'all';\r\n\t\tif (m) {\r\n\t\t\tmedia = '(max-width: 900px)';\r\n\t\t}\r\n\t\tif (pc) {\r\n\t\t\tmedia = '(min-width: 900px)';\r\n\t\t}\r\n\r\n\t\tconst promisesI = _insertToPage(fileNames, media);\r\n\t\tpromisesI.forEach(promise => promises.push(promise));\r\n\t});\r\n\r\n\treturn await Promise.all(promises);\r\n};\r\n\r\nconst _insertToPage = (fileNames: Array<string>, media: string): Array<Promise<void>> => {\r\n\tconst promises = [];\r\n\r\n\tfileNames.forEach(fileName => {\r\n\t\tconst id = 'topCSSLink-' + fileName.replace(/\\W/g, '-');\r\n\r\n\t\t// стиль уже загружен\r\n\t\tif (window[id]) return;\r\n\r\n\t\tlet resolve: Function;\r\n\t\tlet reject: Function;\r\n\t\tconst promise = new Promise((_resolve, _reject) => {\r\n\t\t\tresolve = _resolve;\r\n\t\t\treject = _reject;\r\n\t\t});\r\n\t\tpromises.push(promise);\r\n\r\n\t\tconst elLink = document.createElement('link');\r\n\t\telLink.id = id;\r\n\t\telLink.rel = 'stylesheet';\r\n\t\telLink.media = media;\r\n\t\telLink.href = fileName;\r\n\t\telLink.onload = () => resolve();\r\n\t\telLink.onerror = () => reject();\r\n\r\n\t\tdocument.head.append(elLink);\r\n\t});\r\n\r\n\treturn promises;\r\n};"],"names":["insertToPage","fileNames","cssFilesByOptions","filename","m","pc","key","promises","options","item","media","_insertToPage","promise","fileName","id","resolve","reject","_resolve","_reject","elLink"],"mappings":"AAIa,MAAAA,IAAe,OAAOC,MAA6B;AACzD,QAAAC,wBAAwB;AACZ,EAAAA,EAAA,IAAI,MAAM,CAAA,CAAE,GAE9BD,EAAU,QAAQ,CAAYE,MAAA;AAC7B,QAAIC,IAAI,IACJC,IAAK;AAEL,IAAAF,EAAS,MAAM,OAAO,MACrBC,IAAA,KAEDD,EAAS,MAAM,QAAQ,MACrBE,IAAA;AAGN,UAAMC,IAAM,GAAGF,CAAC,IAAIC,CAAE;AACtB,IAAKH,EAAkB,IAAII,CAAG,KAC7BJ,EAAkB,IAAI,GAAGE,CAAC,IAAIC,CAAE,IAAI,CAAA,CAAE,GAErBH,EAAA,IAAI,GAAGE,CAAC,IAAIC,CAAE,EAAE,EAAE,KAAKF,CAAQ;AAAA,EAAA,CACjD;AAED,QAAMI,IAAW,CAAA;AAEC,SAAAL,EAAA,QAAQ,CAACD,GAAWO,MAAoB;AACrD,QAAA,CAACP,EAAU;AACd;AAGK,UAAA,CAACG,GAAGC,CAAE,IAAIG,EAAQ,MAAM,GAAG,EAAE,IAAI,CAAQC,MAAAA,MAAS,MAAM;AAE9D,QAAIC,IAAQ;AACZ,IAAIN,MACKM,IAAA,uBAELL,MACKK,IAAA,uBAGSC,EAAcV,GAAWS,CAAK,EACtC,QAAQ,CAAAE,MAAWL,EAAS,KAAKK,CAAO,CAAC;AAAA,EAAA,CACnD,GAEM,MAAM,QAAQ,IAAIL,CAAQ;AAClC,GAEMI,IAAgB,CAACV,GAA0BS,MAAwC;AACxF,QAAMH,IAAW,CAAA;AAEjB,SAAAN,EAAU,QAAQ,CAAYY,MAAA;AAC7B,UAAMC,IAAK,gBAAgBD,EAAS,QAAQ,OAAO,GAAG;AAGtD,QAAI,OAAOC,CAAE;AAAG;AAEZ,QAAAC,GACAC;AACJ,UAAMJ,IAAU,IAAI,QAAQ,CAACK,GAAUC,MAAY;AACxC,MAAAH,IAAAE,GACDD,IAAAE;AAAA,IAAA,CACT;AACD,IAAAX,EAAS,KAAKK,CAAO;AAEf,UAAAO,IAAS,SAAS,cAAc,MAAM;AAC5C,IAAAA,EAAO,KAAKL,GACZK,EAAO,MAAM,cACbA,EAAO,QAAQT,GACfS,EAAO,OAAON,GACPM,EAAA,SAAS,MAAMJ,KACfI,EAAA,UAAU,MAAMH,KAEd,SAAA,KAAK,OAAOG,CAAM;AAAA,EAAA,CAC3B,GAEMZ;AACR;"}
|
package/utils/date.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","../.chunks/forms-
|
|
1
|
+
define(["require","exports","../.chunks/forms-AZXCfF-R.amd","vue"],function(n,e,t,a){"use strict";if(typeof a>"u")var a=window.Vue;e.dateFormat=t.dateFormat,e.dateUnformat=t.dateUnformat,e.genDate=t.genDate,e.stringToDate=t.stringToDate,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=date.amd.js.map
|
package/utils/date.js
CHANGED
package/utils/device.amd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
define(["require","exports","../.chunks/forms-
|
|
1
|
+
define(["require","exports","../.chunks/forms-AZXCfF-R.amd","vue"],function(n,i,e,a){"use strict";if(typeof a>"u")var a=window.Vue;i.getCommandKeyLabel=e.getCommandKeyLabel,i.isApp=e.isApp,i.isMacOS=e.isMacOS,i.isMobile=e.isMobile,i.isRetina=e.isRetina,i.isSafari=e.isSafari,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=device.amd.js.map
|
package/utils/device.js
CHANGED