@mobilon-dev/chotto 0.3.32 → 0.3.33

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.
@@ -0,0 +1,340 @@
1
+ import { ref as c, inject as Pe, computed as y, watch as V, onMounted as Le, onUnmounted as Ee, createElementBlock as o, openBlock as i, Fragment as j, createCommentVNode as M, createVNode as S, unref as w, normalizeClass as J, createElementVNode as P, Transition as Q, withCtx as Z, withDirectives as Ce, renderList as x, toDisplayString as ee, vShow as Ue, normalizeStyle as $e } from "vue";
2
+ import { useMessageDraft as De } from "../../../hooks/useMessageDraft.js";
3
+ import "../../../hooks/useSearchModel.js";
4
+ import "../../../hooks/useTheme.js";
5
+ /* empty css */
6
+ import Ae from "../../../_virtual/_plugin-vue_export-helper.js";
7
+ /* empty css */
8
+ import "../../../node_modules/linkifyjs/dist/linkify.js";
9
+ import "../../../functions/parseMarkdown.js";
10
+ import te from "./icons/StickerIcon.vue.js";
11
+ import { isAnimatedSticker as L } from "../../2_feed_elements/StickerMessage/utils/stickerUtils.js";
12
+ import "../../2_feed_elements/StickerMessage/utils/suppress-lit-warning.js";
13
+ /* empty css */
14
+ const Fe = { class: "sticker-picker__container" }, Oe = ["onClick", "onMouseenter", "onMouseleave"], Be = ["src"], Re = ["src", "alt"], We = {
15
+ key: 2,
16
+ class: "sticker-picker__tab-icon-placeholder"
17
+ }, Ve = { class: "sticker-picker__content" }, je = {
18
+ key: 0,
19
+ class: "sticker-picker__empty"
20
+ }, ze = {
21
+ key: 1,
22
+ class: "sticker-picker__grid"
23
+ }, Ne = ["onClick", "onMousedown", "onMouseenter", "onTouchstart"], Ge = ["src"], Ie = ["src", "alt"], Xe = ["src"], Ye = ["src", "alt"], Ke = {
24
+ key: 2,
25
+ class: "sticker-picker__preview-label"
26
+ }, qe = 500, He = {
27
+ __name: "StickerPicker",
28
+ props: {
29
+ state: {
30
+ type: String,
31
+ default: "active"
32
+ },
33
+ mode: {
34
+ type: String,
35
+ default: "click",
36
+ // или 'hover'
37
+ validator: (h) => ["click", "hover"].includes(h)
38
+ },
39
+ stickers: {
40
+ type: Array,
41
+ default: () => []
42
+ // Поддерживаем два формата:
43
+ // 1. Массив стикеров: [{ url, alt? }, ...]
44
+ // 2. Массив наборов (вкладок): [[{ url, alt? }, ...], ...] или [{ stickers: [...], label?, iconUrl? }, ...]
45
+ },
46
+ emptyText: {
47
+ type: String,
48
+ default: "Нет доступных стикеров"
49
+ }
50
+ },
51
+ setup(h) {
52
+ const a = h, E = c(null), C = c(null), U = c(null), $ = c(null), v = c(!1), d = c(0), se = Pe("chatAppId"), { getMessage: re, setMessageFile: le, setForceSendMessage: ae } = De(se), n = c(null), D = c({}), m = c(null), u = c(!1), oe = c(null), f = c(/* @__PURE__ */ new Map()), p = c(/* @__PURE__ */ new Map());
53
+ let T = !1, b = !1;
54
+ const k = c(!1), A = c(!1);
55
+ async function z() {
56
+ if (!(k.value || A.value)) {
57
+ A.value = !0;
58
+ try {
59
+ await import("../../2_feed_elements/StickerMessage/libs/tgs-player/lottie-player.esm.js"), await import("../../2_feed_elements/StickerMessage/libs/tgs-player/tgs-player.esm.js"), k.value = !0;
60
+ } catch (e) {
61
+ console.error("Failed to load TGS libraries:", e);
62
+ } finally {
63
+ A.value = !1;
64
+ }
65
+ }
66
+ }
67
+ const ie = () => {
68
+ if (!a.stickers || a.stickers.length === 0)
69
+ return { hasTabs: !1, tabs: [] };
70
+ const e = a.stickers[0], t = Array.isArray(e), s = e && typeof e == "object" && e.stickers;
71
+ return t ? {
72
+ hasTabs: !0,
73
+ tabs: a.stickers.map((r, l) => ({
74
+ id: `tab-${l}`,
75
+ label: `Set ${l + 1}`,
76
+ stickers: r,
77
+ iconUrl: r && r.length > 0 ? r[0].url : null
78
+ }))
79
+ } : s && e.stickers ? {
80
+ hasTabs: !0,
81
+ tabs: a.stickers.map((r, l) => ({
82
+ id: r.id || `tab-${l}`,
83
+ label: r.label || `Set ${l + 1}`,
84
+ stickers: r.stickers || [],
85
+ iconUrl: r.iconUrl || (r.stickers && r.stickers.length > 0 ? r.stickers[0].url : null)
86
+ }))
87
+ } : {
88
+ hasTabs: !0,
89
+ tabs: [{
90
+ id: "default",
91
+ label: "Stickers",
92
+ stickers: a.stickers,
93
+ iconUrl: a.stickers.length > 0 ? a.stickers[0].url : null
94
+ }]
95
+ };
96
+ }, F = y(() => ie()), ce = y(() => F.value.hasTabs && F.value.tabs.length > 0), _ = y(() => F.value.tabs), O = y(() => {
97
+ var e;
98
+ return _.value.length === 0 ? [] : ((e = _.value[d.value]) == null ? void 0 : e.stickers) || [];
99
+ }), N = y(() => {
100
+ const e = O.value.some((s) => L(s.url)), t = _.value.some((s) => s.iconUrl && L(s.iconUrl));
101
+ return e || t;
102
+ });
103
+ V(N, (e) => {
104
+ e && !k.value && z();
105
+ }, { immediate: !0 });
106
+ const B = (e) => L(e.url), ne = (e, t) => {
107
+ t ? f.value.set(e, t) : f.value.delete(e);
108
+ }, ue = (e, t) => {
109
+ t ? p.value.set(e, t) : p.value.delete(e);
110
+ }, ve = (e) => {
111
+ const t = p.value.get(e);
112
+ t && typeof t.play == "function" && t.play();
113
+ }, fe = (e) => {
114
+ const t = p.value.get(e);
115
+ t && typeof t.pause == "function" && t.pause();
116
+ };
117
+ V(d, () => {
118
+ f.value.clear();
119
+ }), V(() => a.stickers, () => {
120
+ d.value >= _.value.length && (d.value = 0);
121
+ }, { deep: !0 });
122
+ const ke = (e) => {
123
+ if (!e) return "image";
124
+ const t = e.toLowerCase();
125
+ return t.endsWith(".tgs") || t.endsWith(".webp") ? "sticker" : "image";
126
+ }, G = (e) => {
127
+ if (a.state === "disabled") return;
128
+ const t = ke(e.url);
129
+ le({
130
+ url: e.url,
131
+ name: e.alt || `sticker.${t === "sticker" ? e.url.toLowerCase().endsWith(".tgs") ? "tgs" : "webp" : "png"}`,
132
+ type: t
133
+ }), ae(!0), a.mode === "click" && (v.value = !1);
134
+ }, I = (e, t) => {
135
+ oe.value = t.currentTarget, u.value = !1, m.value && clearTimeout(m.value), m.value = setTimeout(() => {
136
+ u.value = !0, _e(e);
137
+ }, qe);
138
+ }, X = () => {
139
+ if (R(), u.value) {
140
+ u.value = !1;
141
+ return;
142
+ }
143
+ }, pe = (e, t) => {
144
+ if (B(e) && k.value) {
145
+ const s = f.value.get(t);
146
+ s && typeof s.play == "function" && s.play();
147
+ }
148
+ }, de = () => {
149
+ f.value.forEach((e) => {
150
+ e && typeof e.pause == "function" && e.pause();
151
+ }), !(u.value && n.value) && (R(), g());
152
+ }, me = (e, t) => {
153
+ I(e, t);
154
+ }, Y = () => {
155
+ X();
156
+ }, he = (e, t) => {
157
+ if (u.value) {
158
+ t.preventDefault(), t.stopPropagation(), u.value = !1, g();
159
+ return;
160
+ }
161
+ G(e);
162
+ }, R = () => {
163
+ m.value && (clearTimeout(m.value), m.value = null);
164
+ }, _e = (e) => {
165
+ n.value = e, D.value = {
166
+ left: "50%",
167
+ top: "50%",
168
+ transform: "translate(-50%, -50%)"
169
+ };
170
+ }, g = () => {
171
+ n.value = null, D.value = {};
172
+ }, ge = () => {
173
+ n.value && (G(n.value), g());
174
+ }, K = () => {
175
+ a.state === "active" && (v.value = !0);
176
+ }, W = () => {
177
+ f.value.forEach((e) => {
178
+ e && typeof e.pause == "function" && e.pause();
179
+ }), p.value.forEach((e) => {
180
+ e && typeof e.pause == "function" && e.pause();
181
+ }), v.value = !1;
182
+ }, ye = () => {
183
+ a.mode === "click" && (v.value = !v.value, v.value && K());
184
+ }, Te = () => {
185
+ a.mode === "hover" && (T = !0, K());
186
+ }, be = () => {
187
+ a.mode === "hover" && (T = !1, setTimeout(() => {
188
+ !b && !T && W();
189
+ }, 150));
190
+ }, Me = () => {
191
+ a.mode === "hover" && (b = !0);
192
+ }, Se = () => {
193
+ a.mode === "hover" && (b = !1, setTimeout(() => {
194
+ !T && !b && W();
195
+ }, 150));
196
+ }, we = (e) => {
197
+ if (!U.value) return;
198
+ const t = e.shiftKey || Math.abs(e.deltaX) > Math.abs(e.deltaY) ? e.deltaX : e.deltaY;
199
+ U.value.scrollLeft += t, e.preventDefault();
200
+ }, q = (e) => {
201
+ a.mode === "click" && v.value && C.value && E.value && !C.value.contains(e.target) && !E.value.contains(e.target) && W(), n.value && $.value && !$.value.contains(e.target) && g();
202
+ }, H = () => {
203
+ u.value && (u.value = !1);
204
+ };
205
+ return Le(() => {
206
+ document.addEventListener("click", q), document.addEventListener("mouseup", H), N.value && !k.value && z();
207
+ }), Ee(() => {
208
+ document.removeEventListener("click", q), document.removeEventListener("mouseup", H), R(), g(), f.value.forEach((e) => {
209
+ e && typeof e.pause == "function" && e.pause();
210
+ }), f.value.clear(), p.value.forEach((e) => {
211
+ e && typeof e.pause == "function" && e.pause();
212
+ }), p.value.clear();
213
+ }), (e, t) => (i(), o(j, null, [
214
+ w(re)().isRecording ? M("", !0) : (i(), o("button", {
215
+ key: 0,
216
+ ref_key: "stickerButton",
217
+ ref: C,
218
+ class: J(["button", { "button-disabled": h.state === "disabled" }]),
219
+ onClick: ye,
220
+ onMouseenter: Te,
221
+ onMouseleave: be
222
+ }, [
223
+ P("span", null, [
224
+ S(w(te))
225
+ ])
226
+ ], 34)),
227
+ S(Q, null, {
228
+ default: Z(() => [
229
+ Ce(P("div", {
230
+ ref_key: "stickerPicker",
231
+ ref: E,
232
+ class: "sticker-picker",
233
+ onMouseenter: Me,
234
+ onMouseleave: Se
235
+ }, [
236
+ P("div", Fe, [
237
+ ce.value ? (i(), o("div", {
238
+ key: 0,
239
+ ref_key: "tabsContainer",
240
+ ref: U,
241
+ class: "sticker-picker__tabs",
242
+ onWheel: we
243
+ }, [
244
+ (i(!0), o(j, null, x(_.value, (s, r) => (i(), o("button", {
245
+ key: r,
246
+ class: J(["sticker-picker__tab", { "sticker-picker__tab--active": d.value === r }]),
247
+ onClick: (l) => d.value = r,
248
+ onMouseenter: (l) => ve(r),
249
+ onMouseleave: (l) => fe(r)
250
+ }, [
251
+ s.iconUrl && w(L)(s.iconUrl) && k.value ? (i(), o("tgs-player", {
252
+ key: 0,
253
+ ref_for: !0,
254
+ ref: (l) => ue(r, l),
255
+ src: s.iconUrl,
256
+ class: "sticker-picker__tab-icon sticker-picker__tab-icon-animated",
257
+ loop: "",
258
+ mode: "normal"
259
+ }, null, 8, Be)) : s.iconUrl ? (i(), o("img", {
260
+ key: 1,
261
+ src: s.iconUrl,
262
+ alt: s.label || `Tab ${r + 1}`,
263
+ class: "sticker-picker__tab-icon"
264
+ }, null, 8, Re)) : (i(), o("span", We, [
265
+ S(w(te))
266
+ ]))
267
+ ], 42, Oe))), 128))
268
+ ], 544)) : M("", !0),
269
+ P("div", Ve, [
270
+ O.value.length === 0 ? (i(), o("div", je, ee(h.emptyText), 1)) : (i(), o("div", ze, [
271
+ (i(!0), o(j, null, x(O.value, (s, r) => (i(), o("button", {
272
+ key: r,
273
+ class: "sticker-picker__item",
274
+ onClick: (l) => he(s, l),
275
+ onMousedown: (l) => I(s, l),
276
+ onMouseup: X,
277
+ onMouseenter: (l) => pe(s, r),
278
+ onMouseleave: de,
279
+ onTouchstart: (l) => me(s, l),
280
+ onTouchend: Y,
281
+ onTouchcancel: Y
282
+ }, [
283
+ B(s) && k.value ? (i(), o("tgs-player", {
284
+ key: 0,
285
+ ref_for: !0,
286
+ ref: (l) => ne(r, l),
287
+ src: s.url,
288
+ class: "sticker-picker__image sticker-picker__image-animated",
289
+ loop: "",
290
+ mode: "normal"
291
+ }, null, 8, Ge)) : (i(), o("img", {
292
+ key: 1,
293
+ src: s.url,
294
+ alt: s.alt || `Sticker ${r + 1}`,
295
+ class: "sticker-picker__image"
296
+ }, null, 8, Ie))
297
+ ], 40, Ne))), 128))
298
+ ]))
299
+ ])
300
+ ])
301
+ ], 544), [
302
+ [Ue, v.value]
303
+ ])
304
+ ]),
305
+ _: 1
306
+ }),
307
+ S(Q, { name: "preview" }, {
308
+ default: Z(() => [
309
+ n.value ? (i(), o("div", {
310
+ key: 0,
311
+ ref_key: "previewElement",
312
+ ref: $,
313
+ class: "sticker-picker__preview",
314
+ style: $e(D.value),
315
+ onClick: ge
316
+ }, [
317
+ B(n.value) && k.value ? (i(), o("tgs-player", {
318
+ key: 0,
319
+ src: n.value.url,
320
+ class: "sticker-picker__preview-image sticker-picker__preview-image-animated",
321
+ autoplay: "",
322
+ loop: "",
323
+ mode: "normal"
324
+ }, null, 8, Xe)) : (i(), o("img", {
325
+ key: 1,
326
+ src: n.value.url,
327
+ alt: n.value.alt || "Preview",
328
+ class: "sticker-picker__preview-image"
329
+ }, null, 8, Ye)),
330
+ n.value.alt ? (i(), o("div", Ke, ee(n.value.alt), 1)) : M("", !0)
331
+ ], 4)) : M("", !0)
332
+ ]),
333
+ _: 1
334
+ })
335
+ ], 64));
336
+ }
337
+ }, nt = /* @__PURE__ */ Ae(He, [["__scopeId", "data-v-16a91ee6"]]);
338
+ export {
339
+ nt as default
340
+ };
@@ -0,0 +1,20 @@
1
+ import { createElementBlock as t, openBlock as o, createStaticVNode as c } from "vue";
2
+ import l from "../../../../_virtual/_plugin-vue_export-helper.js";
3
+ const r = {}, n = {
4
+ version: "1.1",
5
+ xmlns: "http://www.w3.org/2000/svg",
6
+ "xmlns:xlink": "http://www.w3.org/1999/xlink",
7
+ width: "23px",
8
+ height: "23px",
9
+ viewBox: "42.67 42.67 170.66 170.66",
10
+ overflow: "visible"
11
+ };
12
+ function i(f, e) {
13
+ return o(), t("svg", n, [...e[0] || (e[0] = [
14
+ c('<g fill="none" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode:normal;"><g transform="scale(5.33333,5.33333)"><path d="M28.921,42.016l-14.366,-0.016c-4.717,0 -8.555,-3.838 -8.555,-8.556v-18.888c0,-4.718 3.838,-8.556 8.556,-8.556h18.889c4.717,0 8.555,3.838 8.555,8.556v14.554zM14.556,8c-3.615,0 -6.556,2.94 -6.556,6.556v18.889c0,3.615 2.941,6.555 6.556,6.555l13.546,0.016l11.898,-11.742v-13.718c0,-3.616 -2.941,-6.556 -6.556,-6.556z" fill="#5f5f5f"></path><circle cx="16.047" cy="19.023" r="2" fill="#5f5f5f"></circle><circle cx="31.938" cy="19.023" r="2" fill="#5f5f5f"></circle><path d="M23.984,33.016c-3.042,0 -5.872,-1.326 -7.387,-3.461c-0.32,-0.451 -0.214,-1.075 0.237,-1.395c0.452,-0.32 1.074,-0.213 1.394,0.236c1.146,1.615 3.352,2.619 5.756,2.619c2.428,0 4.643,-1.018 5.781,-2.655c0.316,-0.453 0.939,-0.564 1.392,-0.25c0.454,0.315 0.565,0.938 0.25,1.393c-1.506,2.167 -4.35,3.513 -7.423,3.513z" fill="#5f5f5f"></path><path d="M41.972,26.004h-6.839c-5.034,0 -9.13,4.111 -9.13,9.164l0.013,6.832h3.023l12.933,-12.867z" fill="#5f5f5f"></path></g></g>', 1)
15
+ ])]);
16
+ }
17
+ const h = /* @__PURE__ */ l(r, [["render", i]]);
18
+ export {
19
+ h as default
20
+ };