@mobilon-dev/chotto 0.3.89 → 0.3.91

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 (57) hide show
  1. package/dist/chotto.css +1 -1
  2. package/dist/components/2_chatinput_elements/ButtonEmojiPicker/ButtonEmojiPicker.vue.js +2 -2
  3. package/dist/components/2_chatinput_elements/ButtonEmojiPicker/ButtonEmojiPicker.vue2.js +41 -33
  4. package/dist/components/2_chatinput_elements/FileUploader/FileUploader.vue.js +3 -3
  5. package/dist/components/2_chatinput_elements/FileUploader/FileUploader.vue2.js +87 -103
  6. package/dist/components/2_chatlist_elements/ChatItem/ChatItem.vue.js +1 -1
  7. package/dist/components/2_chatlist_elements/ChatItem/ChatItem.vue2.js +171 -152
  8. package/dist/components/2_elements/AudioRecorder/AudioRecorder.vue.js +2 -2
  9. package/dist/components/2_elements/AudioRecorder/AudioRecorder.vue2.js +52 -79
  10. package/dist/components/2_elements/VideoRecorder/VideoRecorder.vue.js +2 -2
  11. package/dist/components/2_elements/VideoRecorder/VideoRecorder.vue2.js +35 -64
  12. package/dist/components/2_feed_elements/AudioMessage/AudioMessage.vue.js +2 -2
  13. package/dist/components/2_feed_elements/AudioMessage/AudioMessage.vue2.js +4 -0
  14. package/dist/components/2_feed_elements/CallMessage/CallMessage.vue.js +3 -3
  15. package/dist/components/2_feed_elements/CallMessage/CallMessage.vue2.js +4 -0
  16. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue.js +3 -3
  17. package/dist/components/2_feed_elements/FileMessage/FileMessage.vue2.js +33 -29
  18. package/dist/components/2_feed_elements/ImageMessage/ImageMessage.vue.js +2 -2
  19. package/dist/components/2_feed_elements/ImageMessage/ImageMessage.vue2.js +62 -58
  20. package/dist/components/2_feed_elements/MissedCallMessage/MissedCallMessage.vue.js +1 -1
  21. package/dist/components/2_feed_elements/MissedCallMessage/MissedCallMessage.vue2.js +27 -23
  22. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue.js +2 -2
  23. package/dist/components/2_feed_elements/TextMessage/TextMessage.vue2.js +49 -41
  24. package/dist/components/2_feed_elements/VideoMessage/VideoMessage.vue.js +1 -1
  25. package/dist/components/2_feed_elements/VideoMessage/VideoMessage.vue2.js +105 -101
  26. package/dist/components/3_compounds/ChatInput/ChatInput.vue.js +2 -2
  27. package/dist/components/3_compounds/ChatInput/ChatInput.vue2.js +223 -149
  28. package/dist/components/3_compounds/ChatList/composables/useChatListFilter.js +18 -13
  29. package/dist/functions/renderAppleEmojis.js +127 -70
  30. package/dist/hooks/uploadFile/generatePreview.js +23 -11
  31. package/dist/hooks/useMessageDraft.js +61 -32
  32. package/dist/index.js +113 -112
  33. package/dist/themes/dark.css +1 -1
  34. package/dist/themes/default.css +1 -1
  35. package/dist/themes/glass.css +1 -1
  36. package/dist/themes/green.css +1 -1
  37. package/dist/themes/mobilon1.css +1 -1
  38. package/dist/types/apps/data/messages.d.ts +52 -0
  39. package/dist/types/components/2_blocks/CommunicationPanel/CommunicationPanel.vue.d.ts +2 -2
  40. package/dist/types/components/2_blocks/CommunicationPanel/stories/CommunicationPanel.stories.d.ts +2 -2
  41. package/dist/types/components/2_chatinput_elements/ButtonEmojiPicker/ButtonEmojiPicker.vue.d.ts +15 -0
  42. package/dist/types/components/2_feed_elements/AudioMessage/styles/types.d.ts +34 -0
  43. package/dist/types/components/2_feed_elements/CallMessage/styles/types.d.ts +26 -0
  44. package/dist/types/components/2_feed_elements/FileMessage/styles/types.d.ts +30 -0
  45. package/dist/types/components/2_feed_elements/ImageMessage/styles/types.d.ts +34 -0
  46. package/dist/types/components/2_feed_elements/StickerMessage/styles/types.d.ts +4 -0
  47. package/dist/types/components/2_feed_elements/TextMessage/styles/types.d.ts +38 -2
  48. package/dist/types/components/2_feed_elements/TypingMessage/styles/types.d.ts +2 -0
  49. package/dist/types/components/2_feed_elements/VideoMessage/styles/types.d.ts +34 -0
  50. package/dist/types/components/3_compounds/ChatInput/ChatInput.vue.d.ts +3 -3
  51. package/dist/types/components/3_compounds/ChatInput/styles/types.d.ts +2 -0
  52. package/dist/types/components/3_compounds/Feed/composables/useFeedReply.d.ts +1 -27
  53. package/dist/types/functions/renderAppleEmojis.d.ts +17 -2
  54. package/dist/types/hooks/uploadFile/generatePreview.d.ts +2 -0
  55. package/dist/types/hooks/uploadFile/uploadFile.d.ts +9 -17
  56. package/dist/types/hooks/useMessageDraft.d.ts +27 -29
  57. package/package.json +1 -1
@@ -1,96 +1,153 @@
1
- const f = "https://cdn.jsdelivr.net/npm/emoji-datasource-apple@6.0.1/img/apple/64", s = new RegExp("(?:\\p{Regional_Indicator}{2})|(?:[#*0-9]\\uFE0F?\\u20E3)|(?:\\p{Extended_Pictographic}(?:\\uFE0F|\\uFE0E)?(?:\\u200D(?:\\p{Extended_Pictographic}|\\p{Emoji_Modifier_Base})(?:\\uFE0F|\\uFE0E)?)*)", "gu"), g = "height:1.2em;width:1.2em;margin:0 0.05em;vertical-align:-0.2em;display:inline";
2
- function u(e, t) {
3
- const n = [];
4
- for (const c of e) {
5
- const a = c.codePointAt(0);
6
- a !== void 0 && (t != null && t.stripVariationSelectors && (a === 65039 || a === 65038) || n.push(a.toString(16)));
1
+ const g = "https://cdn.jsdelivr.net/npm/emoji-datasource-apple@6.0.1/img/apple/64", l = new RegExp("(?:\\p{Regional_Indicator}{2})|(?:[#*0-9]\\uFE0F?\\u20E3)|(?:\\p{Extended_Pictographic}(?:\\uFE0F|\\uFE0E)?(?:\\p{Emoji_Modifier})?(?:\\u200D(?:\\p{Extended_Pictographic}|\\p{Emoji_Modifier_Base})(?:\\uFE0F|\\uFE0E)?(?:\\p{Emoji_Modifier})?)*)", "gu"), I = "position:relative;display:inline-block;vertical-align:baseline;", T = "visibility:hidden;", _ = "position:absolute;left:0;top:0;width:100%;height:100%;object-fit:contain;pointer-events:none;display:block;margin:0;", b = Intl.Segmenter, p = typeof Intl < "u" && b ? new b(void 0, { granularity: "grapheme" }) : null;
2
+ function v(t, e, r = "nearest") {
3
+ const n = t.length;
4
+ if (e <= 0) return 0;
5
+ if (e >= n) return n;
6
+ if (p) {
7
+ let s = 0;
8
+ for (const { index: a } of p.segment(t)) {
9
+ if (a === e) return e;
10
+ if (a > e)
11
+ return r === "before" ? s : r === "after" ? a : e - s <= a - e ? s : a;
12
+ s = a;
13
+ }
14
+ return n;
15
+ }
16
+ const o = t.charCodeAt(e);
17
+ return o >= 56320 && o <= 57343 ? r === "after" ? Math.min(n, e + 1) : e - 1 : e;
18
+ }
19
+ function C(t, e) {
20
+ if (e >= t.length) return t.length;
21
+ if (p) {
22
+ for (const { index: n } of p.segment(t))
23
+ if (n > e) return n;
24
+ return t.length;
25
+ }
26
+ const r = t.codePointAt(e);
27
+ return e + (r !== void 0 && r > 65535 ? 2 : 1);
28
+ }
29
+ function j(t, e) {
30
+ if (e <= 0) return 0;
31
+ if (p) {
32
+ let n = 0;
33
+ for (const { index: o } of p.segment(t)) {
34
+ if (o >= e) return n;
35
+ n = o;
36
+ }
37
+ return n;
38
+ }
39
+ const r = t.charCodeAt(e - 1);
40
+ return r >= 56320 && r <= 57343 ? e - 2 : e - 1;
41
+ }
42
+ function d(t, e) {
43
+ const r = [];
44
+ for (const n of t) {
45
+ const o = n.codePointAt(0);
46
+ o !== void 0 && (e != null && e.stripVariationSelectors && (o === 65039 || o === 65038) || r.push(o.toString(16)));
7
47
  }
8
- return n.join("-");
48
+ return r.join("-");
9
49
  }
10
- function F(e) {
11
- return `${f}/${u(e)}.png`;
50
+ function $(t) {
51
+ return `${g}/${d(t)}.png`;
12
52
  }
13
- function h(e) {
14
- const t = u(e), n = u(e, { stripVariationSelectors: !0 });
15
- if (t !== n)
16
- return `${f}/${n}.png`;
17
- if (!/[\uFE0E\uFE0F]/.test(e)) {
18
- const c = u(`${e}️`);
19
- if (c !== t)
20
- return `${f}/${c}.png`;
53
+ function A(t) {
54
+ const e = d(t), r = d(t, { stripVariationSelectors: !0 });
55
+ if (e !== r)
56
+ return `${g}/${r}.png`;
57
+ if (!/[\uFE0E\uFE0F]/.test(t)) {
58
+ const n = d(`${t}️`);
59
+ if (n !== e)
60
+ return `${g}/${n}.png`;
21
61
  }
22
62
  return null;
23
63
  }
24
- function x(e, t) {
25
- const n = h(t);
26
- n && e.addEventListener(
64
+ function k(t, e) {
65
+ const r = A(e);
66
+ r && t.addEventListener(
27
67
  "error",
28
68
  () => {
29
- e.src !== n && (e.src = n);
69
+ t.src !== r && (t.src = r);
30
70
  },
31
71
  { once: !0 }
32
72
  );
33
73
  }
34
- function T(e) {
35
- const t = u(e);
36
- if (!t) return e;
37
- const n = `${f}/${t}.png`, c = h(e), a = c ? ` data-fallback="${E(c)}" onerror="if(this.dataset.fallback&&this.src!==this.dataset.fallback){this.onerror=null;this.src=this.dataset.fallback}"` : "";
38
- return `<img class="chotto-emoji" src="${E(n)}" alt="${E(e)}" draggable="false" style="${g}"${a} />`;
74
+ function M(t) {
75
+ const e = d(t);
76
+ if (!e) return E(t);
77
+ const r = `${g}/${e}.png`, n = A(t), o = n ? ` data-fallback="${h(n)}" onerror="if(this.dataset.fallback&&this.src!==this.dataset.fallback){this.onerror=null;this.src=this.dataset.fallback}"` : "";
78
+ return `<span class="chotto-emoji-slot" style="${I}"><span class="chotto-emoji-metric" style="${T}">${E(t)}</span><img class="chotto-emoji" src="${h(r)}" alt="${h(t)}" draggable="false" style="${_}"${o} /></span>`;
79
+ }
80
+ function N(t) {
81
+ const e = document.createElement("span");
82
+ e.className = "chotto-emoji-slot", e.setAttribute("style", I);
83
+ const r = document.createElement("span");
84
+ r.className = "chotto-emoji-metric", r.setAttribute("style", T), r.textContent = t;
85
+ const n = document.createElement("img");
86
+ return n.className = "chotto-emoji", n.src = $(t), n.alt = t, n.draggable = !1, n.setAttribute("style", _), k(n, t), e.append(r, n), e;
87
+ }
88
+ function h(t) {
89
+ return t.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
39
90
  }
40
- function E(e) {
41
- return e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
91
+ function E(t) {
92
+ return t.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
42
93
  }
43
- function I(e) {
44
- return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
94
+ function m(t) {
95
+ return t ? E(t).replace(l, (e) => M(e)) : "";
45
96
  }
46
- function N(e) {
47
- return e ? I(e).replace(s, (n) => T(n)) : "";
97
+ function y(t, e) {
98
+ if (!t) return "";
99
+ const r = e ? Math.max(0, Math.min(e.start, e.end)) : -1, n = e ? Math.min(t.length, Math.max(e.start, e.end)) : -1;
100
+ return r < 0 || r === n ? m(t) : m(t.slice(0, r)) + `<span class="chat-input__emoji-selection" style="background-color: var(--chotto-chatinput-selection-bg, rgba(51, 133, 255, 0.35)); border-radius: 2px; box-decoration-break: clone; -webkit-box-decoration-break: clone;">${m(t.slice(r, n))}</span>` + m(t.slice(n));
48
101
  }
49
- function $(e) {
50
- return e ? (s.lastIndex = 0, s.test(e)) : !1;
102
+ function S(t) {
103
+ return t ? (l.lastIndex = 0, l.test(t)) : !1;
51
104
  }
52
- function A(e) {
53
- var m;
54
- if (!e || typeof document > "u") return e;
55
- const t = document.createElement("div");
56
- t.innerHTML = e;
57
- const n = document.createTreeWalker(t, NodeFilter.SHOW_TEXT, {
58
- acceptNode: (d) => {
59
- let r = d.parentNode;
60
- for (; r && r !== t; ) {
61
- const o = r.nodeName;
62
- if (o === "SCRIPT" || o === "STYLE" || o === "TEXTAREA")
105
+ function L(t) {
106
+ var s;
107
+ if (!t || typeof document > "u") return t;
108
+ const e = document.createElement("div");
109
+ e.innerHTML = t;
110
+ const r = document.createTreeWalker(e, NodeFilter.SHOW_TEXT, {
111
+ acceptNode: (a) => {
112
+ let c = a.parentNode;
113
+ for (; c && c !== e; ) {
114
+ const i = c.nodeName;
115
+ if (i === "SCRIPT" || i === "STYLE" || i === "TEXTAREA")
63
116
  return NodeFilter.FILTER_REJECT;
64
- r = r.parentNode;
117
+ c = c.parentNode;
65
118
  }
66
119
  return NodeFilter.FILTER_ACCEPT;
67
120
  }
68
- }), c = [];
69
- let a;
70
- for (; a = n.nextNode(); )
71
- c.push(a);
72
- for (const d of c.reverse()) {
73
- const r = d.textContent || "";
74
- if (s.lastIndex = 0, !s.test(r)) continue;
75
- s.lastIndex = 0;
76
- const o = document.createDocumentFragment();
77
- let p = 0, i;
78
- for (; i = s.exec(r); ) {
79
- i.index > p && o.appendChild(document.createTextNode(r.slice(p, i.index)));
80
- const l = document.createElement("img");
81
- l.className = "chotto-emoji", l.src = F(i[0]), l.alt = i[0], l.draggable = !1, l.setAttribute("style", g), x(l, i[0]), o.appendChild(l), p = i.index + i[0].length;
121
+ }), n = [];
122
+ let o;
123
+ for (; o = r.nextNode(); )
124
+ n.push(o);
125
+ for (const a of n.reverse()) {
126
+ const c = a.textContent || "";
127
+ if (l.lastIndex = 0, !l.test(c)) continue;
128
+ l.lastIndex = 0;
129
+ const i = document.createDocumentFragment();
130
+ let f = 0, u;
131
+ for (; u = l.exec(c); ) {
132
+ u.index > f && i.appendChild(document.createTextNode(c.slice(f, u.index)));
133
+ const F = N(u[0]);
134
+ i.appendChild(F), f = u.index + u[0].length;
82
135
  }
83
- p < r.length && o.appendChild(document.createTextNode(r.slice(p))), (m = d.parentNode) == null || m.replaceChild(o, d);
136
+ f < c.length && i.appendChild(document.createTextNode(c.slice(f))), (s = a.parentNode) == null || s.replaceChild(i, a);
84
137
  }
85
- return t.innerHTML;
138
+ return e.innerHTML;
86
139
  }
87
140
  export {
88
- f as APPLE_EMOJI_CDN,
89
- T as createAppleEmojiImgHtml,
90
- u as emojiToAppleCode,
91
- h as getAppleEmojiFallbackUrl,
92
- F as getAppleEmojiUrl,
93
- A as replaceEmojisInHtml,
94
- $ as textContainsEmoji,
95
- N as textToAppleEmojiHtml
141
+ g as APPLE_EMOJI_CDN,
142
+ M as createAppleEmojiImgHtml,
143
+ N as createAppleEmojiSlotElement,
144
+ d as emojiToAppleCode,
145
+ A as getAppleEmojiFallbackUrl,
146
+ $ as getAppleEmojiUrl,
147
+ C as nextGraphemeIndex,
148
+ j as previousGraphemeIndex,
149
+ L as replaceEmojisInHtml,
150
+ v as snapIndexToGrapheme,
151
+ S as textContainsEmoji,
152
+ y as textToAppleEmojiHtml
96
153
  };
@@ -1,20 +1,32 @@
1
- import { ref as i } from "vue";
1
+ import { ref as s } from "vue";
2
2
  import { getTypeFileByMime as n } from "./getTypeFileByMime.js";
3
- const m = (l) => {
4
- const s = n(l.type), t = i(!1), a = i(!1), u = i(!1), o = i("");
5
- s === "image" ? t.value = !0 : s === "video" ? a.value = !0 : s === "audio" && (u.value = !0), t.value || a.value || u.value ? o.value = URL.createObjectURL(l) : o.value = "";
6
- const v = ["б", "Кб", "Мб", "Гб"];
7
- let e = l.size, r = 0;
8
- for (; e > 1024; )
9
- e = e / 1024, r++;
3
+ const m = (i) => {
4
+ const e = n(i.type), t = s(!1), u = s(!1), a = s(!1), o = s("");
5
+ e === "image" ? t.value = !0 : e === "video" ? u.value = !0 : e === "audio" && (a.value = !0), t.value || u.value || a.value ? o.value = URL.createObjectURL(i) : o.value = "";
6
+ const f = ["б", "Кб", "Мб", "Гб"];
7
+ let l = i.size, r = 0;
8
+ for (; l > 1024; )
9
+ l = l / 1024, r++;
10
10
  return {
11
11
  isImage: t.value,
12
- isVideo: a.value,
13
- isAudio: u.value,
12
+ isVideo: u.value,
13
+ isAudio: a.value,
14
14
  previewUrl: o.value,
15
- fileSize: e.toFixed(2) + v[r]
15
+ fileSize: l.toFixed(2) + f[r]
16
16
  };
17
17
  };
18
+ function c(i, e) {
19
+ if (e)
20
+ return {
21
+ previewUrl: e.previewUrl,
22
+ isImage: e.isImage,
23
+ isVideo: e.isVideo,
24
+ isAudio: e.isAudio,
25
+ fileName: i,
26
+ fileSize: e.fileSize
27
+ };
28
+ }
18
29
  export {
30
+ c as buildFilePreview,
19
31
  m as generatePreview
20
32
  };
@@ -1,67 +1,96 @@
1
- import { ref as l } from "vue";
2
- const s = l([]), y = (n) => {
3
- const t = l(0), a = s.value.find(({ id: e }) => e == n);
4
- a != null ? t.value = s.value.indexOf(a) : (s.value.push({
1
+ import { ref as h, getCurrentInstance as x, inject as R, computed as S, unref as I, watch as D } from "vue";
2
+ const r = h([]);
3
+ function E(n) {
4
+ return {
5
5
  id: n,
6
6
  text: "",
7
7
  file: void 0,
8
8
  forceSend: !1,
9
9
  isRecording: !1
10
- }), t.value = s.value.length - 1);
11
- const c = () => {
12
- s.value[t.value] = {
13
- id: i().id,
10
+ };
11
+ }
12
+ function f(n) {
13
+ const i = r.value.find((a) => a.id === n);
14
+ if (i) return i;
15
+ const s = E(n);
16
+ return r.value.push(s), s;
17
+ }
18
+ function F(n, i) {
19
+ if (typeof document > "u") return;
20
+ const s = document.getElementById("chat-input-reply-line-" + n);
21
+ s && (s.style.display = i.reply || i.edit ? "inherit" : "none");
22
+ }
23
+ const j = (n) => {
24
+ const i = x() ? R("selectedChat", void 0) : void 0, s = S(() => {
25
+ const e = i ? I(i) : void 0, t = e == null ? void 0 : e.chatId;
26
+ return t == null || t === "" ? n : `${n}:${t}`;
27
+ });
28
+ D(
29
+ s,
30
+ (e, t) => {
31
+ const d = f(e);
32
+ t !== void 0 && t !== e && F(n, d);
33
+ },
34
+ { immediate: !0 }
35
+ );
36
+ const a = () => {
37
+ const e = s.value, t = r.value.findIndex((d) => d.id === e);
38
+ return t !== -1 ? t : (f(e), r.value.findIndex((d) => d.id === e));
39
+ }, u = () => {
40
+ const e = c();
41
+ r.value[a()] = {
42
+ id: e.id,
14
43
  text: "",
15
44
  file: void 0,
16
45
  reply: void 0,
17
46
  edit: void 0,
18
47
  forceSend: !1,
19
- isRecording: i().isRecording
48
+ isRecording: e.isRecording
20
49
  };
21
50
  }, o = (e) => {
22
- const d = i();
23
- s.value[t.value] = {
24
- ...d,
51
+ const t = c();
52
+ r.value[a()] = {
53
+ ...t,
25
54
  forceSend: !1,
26
55
  ...e,
27
- id: d.id
56
+ id: t.id
28
57
  };
29
- }, r = (e) => {
58
+ }, l = (e) => {
30
59
  o({ text: e });
31
- }, v = (e) => {
60
+ }, g = (e) => {
32
61
  o({ file: e });
33
- }, u = () => {
62
+ }, v = () => {
34
63
  o({ file: void 0 });
35
- }, g = (e) => {
64
+ }, p = (e) => {
36
65
  o({ reply: e, edit: void 0 });
37
- }, f = () => {
66
+ }, y = () => {
38
67
  o({ reply: void 0 });
39
68
  }, M = (e) => {
40
69
  o({ edit: e, reply: void 0 });
41
- }, p = () => {
70
+ }, m = () => {
42
71
  o({ edit: void 0 });
43
72
  };
44
- function i() {
45
- return s.value[t.value];
73
+ function c() {
74
+ return f(s.value);
46
75
  }
47
76
  return {
48
- getMessage: i,
49
- resetMessage: c,
50
- setMessageFile: v,
51
- resetMessageFile: u,
52
- setMessageText: r,
53
- setReply: g,
54
- resetReply: f,
77
+ getMessage: c,
78
+ resetMessage: u,
79
+ setMessageFile: g,
80
+ resetMessageFile: v,
81
+ setMessageText: l,
82
+ setReply: p,
83
+ resetReply: y,
55
84
  setEdit: M,
56
- resetEdit: p,
85
+ resetEdit: m,
57
86
  setForceSendMessage: (e) => {
58
- s.value[t.value].forceSend = e;
87
+ c().forceSend = e;
59
88
  },
60
89
  setRecordingMessage: (e) => {
61
- s.value[t.value].isRecording = e;
90
+ c().isRecording = e;
62
91
  }
63
92
  };
64
93
  };
65
94
  export {
66
- y as useMessageDraft
95
+ j as useMessageDraft
67
96
  };