@opentiny/tiny-robot 0.3.0-alpha.9 → 0.3.0-rc.0

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.
@@ -1,284 +1,234 @@
1
- import { ref as E, watch as Z, reactive as et, computed as D, nextTick as q, defineComponent as ge, createElementBlock as R, openBlock as m, createCommentVNode as K, normalizeStyle as De, createBlock as X, unref as k, withCtx as pe, createElementVNode as A, createVNode as j, normalizeClass as ee, toDisplayString as le, useAttrs as tt, resolveComponent as nt, mergeProps as fe, Fragment as ce, renderList as he, mergeModels as st, useModel as ot, Transition as Ee, withModifiers as at, useSlots as lt, renderSlot as ae, isRef as it, createTextVNode as Ne } from "vue";
2
- import { I as rt } from "../index6.js";
3
- import { T as Me } from "../index5.js";
4
- import { I as ut, L as ct, v as dt, t as ft, w as pt, P as ht, _ as gt } from "../tiny-robot-svgs.js";
5
- import { _ as be } from "../_plugin-vue_export-helper.js";
6
- import { t as vt } from "../utils.js";
7
- function yt(i, r) {
8
- const a = E(i.modelValue || i.defaultValue || ""), c = E(null);
9
- Z(
10
- () => i.modelValue,
1
+ import { ref as M, watch as ne, reactive as ot, computed as B, defineComponent as Se, createElementBlock as I, openBlock as b, createCommentVNode as N, normalizeStyle as Ve, createBlock as Y, unref as C, withCtx as he, createElementVNode as U, createVNode as Z, normalizeClass as oe, toDisplayString as ue, useAttrs as st, resolveComponent as at, mergeProps as _e, Fragment as ye, renderList as we, mergeModels as lt, useModel as rt, onMounted as it, onUnmounted as ut, nextTick as te, Transition as We, withModifiers as ct, useSlots as dt, renderSlot as ie, isRef as ft, createTextVNode as je } from "vue";
2
+ import { TinyTooltip as Fe, TinyInput as pt } from "@opentiny/vue";
3
+ import { d as ht } from "../index2.js";
4
+ import { IconUpload as yt, IconVoice as vt, IconLoadingSpeech as gt, IconClose as mt, IconSend as bt, IconStop as _t, IconAssociate as wt } from "@opentiny/tiny-robot-svgs";
5
+ import { _ as Ce } from "../_plugin-vue_export-helper.js";
6
+ import { t as St } from "../utils.js";
7
+ function Ct(l, c) {
8
+ const s = M(l.modelValue || l.defaultValue || ""), i = M(null);
9
+ ne(
10
+ () => l.modelValue,
11
11
  (h) => {
12
- h !== void 0 && h !== a.value && (a.value = h);
12
+ h !== void 0 && h !== s.value && (s.value = h);
13
13
  }
14
- ), Z(
15
- () => a.value,
14
+ ), ne(
15
+ () => s.value,
16
16
  (h) => {
17
- r("update:modelValue", h);
17
+ c("update:modelValue", h);
18
18
  }
19
19
  );
20
- const y = (h) => {
21
- a.value = h, r("update:modelValue", h);
22
- }, w = (h) => {
20
+ const v = (h) => {
21
+ s.value = h, c("update:modelValue", h);
22
+ }, S = (h) => {
23
23
  h == null || h.preventDefault();
24
- const _ = a.value;
25
- !i.disabled && !i.loading && _.trim() && r("submit", _);
26
- }, n = () => {
27
- a.value = "", r("update:modelValue", ""), r("clear");
28
- }, p = E(!1);
24
+ const w = s.value;
25
+ !l.disabled && !l.loading && w.trim() && c("submit", w);
26
+ }, a = () => {
27
+ s.value = "", c("update:modelValue", ""), c("clear");
28
+ }, d = M(!1);
29
29
  return {
30
- inputValue: a,
31
- inputWrapper: c,
32
- isComposing: p,
33
- handleChange: y,
34
- handleSubmit: w,
35
- handleClear: n,
30
+ inputValue: s,
31
+ inputWrapper: i,
32
+ isComposing: d,
33
+ handleChange: v,
34
+ handleSubmit: S,
35
+ handleClear: a,
36
36
  clearInput: () => {
37
- n();
37
+ a();
38
38
  }
39
39
  };
40
40
  }
41
- function mt(i, r, a, c, y, w, n, p, C, h, _, g, I, d, L, U) {
42
- const $ = () => {
43
- g.value && (L != null && L.value && (U == null || U()), r("submit", a.value.trim()));
44
- }, z = (v, F) => {
45
- if (!(v.key === "Enter")) return !1;
46
- switch (F) {
41
+ function xt(l, c, s, i, v, S, a, d, x, h, w, y, K, W, F, P) {
42
+ const T = () => {
43
+ y.value && (F != null && F.value && (P == null || P()), c("submit", s.value.trim()));
44
+ }, g = (p, Q) => {
45
+ if (!(p.key === "Enter")) return !1;
46
+ switch (Q) {
47
47
  case "enter":
48
- return !v.shiftKey && !v.ctrlKey && !v.metaKey;
48
+ return !p.shiftKey && !p.ctrlKey && !p.metaKey;
49
49
  case "ctrlEnter":
50
- return (v.ctrlKey || v.metaKey) && !v.shiftKey;
50
+ return (p.ctrlKey || p.metaKey) && !p.shiftKey;
51
51
  case "shiftEnter":
52
- return v.shiftKey && !v.ctrlKey && !v.metaKey;
52
+ return p.shiftKey && !p.ctrlKey && !p.metaKey;
53
53
  default:
54
54
  return !1;
55
55
  }
56
56
  };
57
57
  return {
58
- handleKeyPress: (v) => {
59
- if (c.value) return;
60
- if (v.key === "Enter" && v.shiftKey && (I == null ? void 0 : I.value) === "single" && d) {
61
- v.preventDefault(), d();
62
- const V = v.target, W = V.selectionStart, G = a.value;
63
- a.value = G.substring(0, W) + `
64
- ` + G.substring(W), setTimeout(() => {
65
- V.selectionStart = V.selectionEnd = W + 1;
58
+ handleKeyPress: (p) => {
59
+ if (i.value) return;
60
+ if (p.key === "Enter" && p.shiftKey && (K == null ? void 0 : K.value) === "single" && W) {
61
+ p.preventDefault(), W();
62
+ const E = p.target, q = E.selectionStart, ee = s.value;
63
+ s.value = ee.substring(0, q) + `
64
+ ` + ee.substring(q), setTimeout(() => {
65
+ E.selectionStart = E.selectionEnd = q + 1;
66
66
  }, 0);
67
67
  return;
68
68
  }
69
- if (v.key === "Tab" && w.value && n.value) {
70
- v.preventDefault(), p();
69
+ if (p.key === "Tab" && S.value && a.value) {
70
+ p.preventDefault(), d();
71
71
  return;
72
72
  }
73
- if (w.value) {
74
- if (v.key === "ArrowDown") {
75
- v.preventDefault(), h("down");
73
+ if (S.value) {
74
+ if (p.key === "ArrowDown") {
75
+ p.preventDefault(), h("down");
76
76
  return;
77
77
  }
78
- if (v.key === "ArrowUp") {
79
- v.preventDefault(), h("up");
78
+ if (p.key === "ArrowUp") {
79
+ p.preventDefault(), h("up");
80
80
  return;
81
81
  }
82
- if (v.key === "Enter" && n.value) {
83
- v.preventDefault(), p();
82
+ if (p.key === "Enter" && a.value) {
83
+ p.preventDefault(), d();
84
84
  return;
85
85
  }
86
86
  }
87
- if (v.key === "Escape") {
88
- w.value ? (C(), v.preventDefault()) : y.isRecording && (_(), v.preventDefault()), r("escape-press");
87
+ if (p.key === "Escape") {
88
+ S.value ? (x(), p.preventDefault()) : v.isRecording && (w(), p.preventDefault()), c("escape-press");
89
89
  return;
90
90
  }
91
- z(v, i.submitType) && (v.preventDefault(), g.value && $());
91
+ g(p, l.submitType) && (p.preventDefault(), y.value && T());
92
92
  },
93
- triggerSubmit: $
93
+ triggerSubmit: T
94
94
  };
95
95
  }
96
- function wt(i) {
97
- const r = et({
96
+ function kt(l) {
97
+ const c = ot({
98
98
  isRecording: !1,
99
99
  isSupported: typeof window < "u" && "webkitSpeechRecognition" in window || "SpeechRecognition" in window,
100
100
  error: void 0
101
- }), a = r.isSupported ? new (window.webkitSpeechRecognition || window.SpeechRecognition)() : void 0;
102
- a !== void 0 && (a.continuous = i.continuous ?? !1, a.interimResults = i.interimResults ?? !0, a.lang = i.lang ?? navigator.language, a.onstart = () => {
103
- var n;
104
- r.isRecording = !0, r.error = void 0, (n = i.onStart) == null || n.call(i);
105
- }, a.onend = () => {
106
- var n;
107
- r.isRecording = !1, (n = i.onEnd) == null || n.call(i);
108
- }, a.onresult = (n) => {
109
- var C, h;
110
- const p = Array.from(n.results).map((_) => _[0].transcript).join("");
111
- n.results[0].isFinal ? (C = i.onFinal) == null || C.call(i, p) : (h = i.onInterim) == null || h.call(i, p);
112
- }, a.onerror = (n) => {
113
- var p;
114
- r.error = new Error(n.error), r.isRecording = !1, (p = i.onError) == null || p.call(i, r.error);
101
+ }), s = c.isSupported ? new (window.webkitSpeechRecognition || window.SpeechRecognition)() : void 0;
102
+ s !== void 0 && (s.continuous = l.continuous ?? !1, s.interimResults = l.interimResults ?? !0, s.lang = l.lang ?? navigator.language, s.onstart = () => {
103
+ var a;
104
+ c.isRecording = !0, c.error = void 0, (a = l.onStart) == null || a.call(l);
105
+ }, s.onend = () => {
106
+ var a;
107
+ c.isRecording = !1, (a = l.onEnd) == null || a.call(l);
108
+ }, s.onresult = (a) => {
109
+ var x, h;
110
+ const d = Array.from(a.results).map((w) => w[0].transcript).join("");
111
+ a.results[0].isFinal ? (x = l.onFinal) == null || x.call(l, d) : (h = l.onInterim) == null || h.call(l, d);
112
+ }, s.onerror = (a) => {
113
+ var d;
114
+ c.error = new Error(a.error), c.isRecording = !1, (d = l.onError) == null || d.call(l, c.error);
115
115
  });
116
- const c = () => {
117
- var n;
118
- if (!a) {
119
- const p = new Error("浏览器不支持语音识别");
120
- r.error = p, (n = i.onError) == null || n.call(i, p);
116
+ const i = () => {
117
+ var a;
118
+ if (!s) {
119
+ const d = new Error("浏览器不支持语音识别");
120
+ c.error = d, (a = l.onError) == null || a.call(l, d);
121
121
  return;
122
122
  }
123
- if (r.isRecording) {
123
+ if (c.isRecording) {
124
124
  try {
125
- a.stop(), setTimeout(() => {
125
+ s.stop(), setTimeout(() => {
126
126
  try {
127
- a.start();
128
- } catch (p) {
129
- w(p);
127
+ s.start();
128
+ } catch (d) {
129
+ S(d);
130
130
  }
131
131
  }, 100);
132
- } catch (p) {
133
- w(p);
132
+ } catch (d) {
133
+ S(d);
134
134
  }
135
135
  return;
136
136
  }
137
137
  try {
138
- a.start();
139
- } catch (p) {
140
- w(p);
138
+ s.start();
139
+ } catch (d) {
140
+ S(d);
141
141
  }
142
- }, y = () => {
143
- if (a && r.isRecording)
142
+ }, v = () => {
143
+ if (s && c.isRecording)
144
144
  try {
145
- a.stop();
146
- } catch (n) {
147
- w(n);
145
+ s.stop();
146
+ } catch (a) {
147
+ S(a);
148
148
  }
149
- }, w = (n) => {
150
- var p;
151
- r.error = n instanceof Error ? n : new Error("语音识别操作失败"), r.isRecording = !1, (p = i.onError) == null || p.call(i, r.error);
149
+ }, S = (a) => {
150
+ var d;
151
+ c.error = a instanceof Error ? a : new Error("语音识别操作失败"), c.isRecording = !1, (d = l.onError) == null || d.call(l, c.error);
152
152
  };
153
153
  return {
154
- speechState: r,
155
- start: c,
156
- stop: y
154
+ speechState: c,
155
+ start: i,
156
+ stop: v
157
157
  };
158
158
  }
159
- const St = (i, r) => {
160
- if (!r || !i)
161
- return [{ text: i, isMatch: !1 }];
162
- const a = i.toLowerCase(), c = r.toLowerCase(), y = [];
163
- let w = 0;
164
- for (; w < a.length; ) {
165
- const h = a.indexOf(c, w);
166
- if (h === -1) break;
167
- y.push({
168
- start: h,
169
- end: h + r.length
170
- }), w = h + 1;
171
- }
172
- if (y.length === 0)
173
- return [{ text: i, isMatch: !1 }];
174
- const n = [];
175
- for (const h of y)
176
- if (n.length === 0)
177
- n.push(h);
178
- else {
179
- const _ = n[n.length - 1];
180
- h.start <= _.end ? _.end = Math.max(_.end, h.end) : n.push(h);
181
- }
182
- const p = [];
183
- let C = 0;
184
- for (const h of n)
185
- C < h.start && p.push({
186
- text: i.substring(C, h.start),
187
- isMatch: !1
188
- }), p.push({
189
- text: i.substring(h.start, h.end),
190
- isMatch: !0
191
- }), C = h.end;
192
- return C < i.length && p.push({
193
- text: i.substring(C),
194
- isMatch: !1
195
- }), p;
196
- };
197
- function _t(i, r, a, c, y) {
198
- const w = E(!1), n = E(-1), p = E(-1), C = E(""), h = E(!1), _ = E(null), g = E(!1), I = E(null), d = D(() => {
199
- if (!i.suggestions || !a.value || y.value) return [];
200
- const x = a.value.toLowerCase();
201
- return i.suggestions.filter((N) => N.toLowerCase().includes(x));
202
- }), L = D(() => {
203
- let x = -1;
204
- return I.value === "mouse" && p.value !== -1 ? x = p.value : I.value === "keyboard" && n.value !== -1 && (x = n.value), d.value[x] || null;
205
- }), U = (x) => x === n.value || x === p.value, $ = (x) => {
206
- if (I.value === null) {
207
- C.value = "", h.value = !1;
159
+ function It(l, c, s, i, v, S) {
160
+ const a = M(!1), d = M(-1), x = M(-1), h = M(null), w = M(""), y = M(!1), K = B(() => {
161
+ var j, J;
162
+ if (!((j = l.value) != null && j.length)) return "";
163
+ const k = h.value === "mouse" ? x.value : d.value;
164
+ return ((J = l.value[k]) == null ? void 0 : J.content) || "";
165
+ }), W = (k) => {
166
+ w.value = k, y.value = !0;
167
+ }, F = () => {
168
+ w.value = "", y.value = !1;
169
+ }, P = (k) => {
170
+ const j = k || K.value;
171
+ if (!j || !c.value) {
172
+ F();
208
173
  return;
209
174
  }
210
- const N = x || L.value;
211
- N && a.value && N.toLowerCase().startsWith(a.value.toLowerCase()) ? (C.value = N.substring(a.value.length), h.value = !0) : (C.value = "", h.value = !1);
212
- }, z = () => {
213
- w.value = !1, n.value = -1, p.value = -1, I.value = null, C.value = "", h.value = !1;
214
- }, te = () => {
215
- w.value = !0, n.value = -1, p.value = -1, I.value = null, $();
216
- }, v = () => {
217
- c.value || g.value || q(() => {
218
- a.value && i.suggestions && i.suggestions.length > 0 && !y.value && d.value.length > 0 ? te() : z();
219
- });
220
- };
221
- Z(a, v), Z(() => i.suggestions, v);
222
- const F = (x) => {
223
- g.value = !0, a.value = x, r("update:modelValue", x), r("suggestion-select", x), W(), q(() => {
224
- g.value = !1;
225
- });
226
- }, V = () => {
227
- L.value && F(L.value);
228
- }, W = () => {
229
- z();
175
+ const J = j.substring(c.value.length);
176
+ j.toLowerCase().startsWith(c.value.toLowerCase()) && J ? W(J) : F();
177
+ }, T = () => {
178
+ d.value = -1, x.value = -1, h.value = null;
179
+ }, g = () => {
180
+ a.value = !0, P();
181
+ }, O = () => {
182
+ a.value = !1, T(), F();
183
+ }, p = B(() => {
184
+ var k;
185
+ return s.value ? !0 : !!(c.value && ((k = l.value) == null ? void 0 : k.length) > 0 && !i.value);
186
+ }), Q = (k) => {
187
+ O(), c.value = k, v(k), S(k);
188
+ }, E = () => {
189
+ K.value && Q(K.value);
190
+ }, q = (k) => {
191
+ !a.value || !l.value || (h.value = "keyboard", d.value === -1 ? d.value = k === "down" ? 0 : l.value.length - 1 : k === "down" ? d.value = (d.value + 1) % l.value.length : d.value = (d.value - 1 + l.value.length) % l.value.length, P());
192
+ }, ee = (k) => {
193
+ l.value && (h.value = "mouse", x.value = k, P());
194
+ }, H = () => {
195
+ l.value && (x.value = -1, d.value !== -1 ? h.value = "keyboard" : h.value = null, P());
230
196
  };
231
- return {
232
- showSuggestionsPopup: w,
233
- completionPlaceholder: C,
234
- showTabHint: h,
235
- suggestionsListRef: _,
236
- filteredSuggestions: d,
237
- activeSuggestion: L,
238
- isItemHighlighted: U,
239
- updateCompletionPlaceholder: $,
240
- updateSuggestionsState: v,
241
- selectSuggestion: F,
242
- acceptCurrentSuggestion: V,
243
- closeSuggestionsPopup: W,
244
- navigateSuggestions: (x) => {
245
- if (!w.value || d.value.length === 0) return;
246
- I.value = "keyboard", n.value === -1 ? n.value = x === "down" ? 0 : d.value.length - 1 : x === "down" ? n.value = (n.value + 1) % d.value.length : n.value = (n.value - 1 + d.value.length) % d.value.length;
247
- const N = d.value[n.value];
248
- N && $(N);
249
- const M = _.value;
250
- if (M) {
251
- const ne = M.children[n.value];
252
- ne && ne.scrollIntoView({ block: "nearest" });
253
- }
254
- },
255
- handleSuggestionItemHover: (x) => {
256
- I.value = "mouse", p.value = x, $(d.value[x]);
257
- },
258
- handleSuggestionItemLeave: () => {
259
- if (p.value = -1, n.value !== -1) {
260
- I.value = "keyboard";
261
- const x = d.value[n.value];
262
- x && $(x);
263
- } else
264
- I.value = null, $();
265
- },
266
- handleClickOutside: () => {
267
- W();
268
- },
269
- highlightSuggestionText: St
197
+ return ne(p, (k) => {
198
+ k ? a.value || g() : a.value && O();
199
+ }), {
200
+ // 弹窗控制
201
+ isPopupVisible: a,
202
+ openPopup: g,
203
+ closePopup: O,
204
+ // 自动完成占位符
205
+ autoCompleteText: w,
206
+ showTabIndicator: y,
207
+ syncAutoComplete: P,
208
+ // 选中控制层
209
+ activeSuggestion: K,
210
+ activeKeyboardIndex: d,
211
+ activeMouseIndex: x,
212
+ // 交互处理
213
+ navigateWithKeyboard: q,
214
+ handleMouseEnter: ee,
215
+ handleMouseLeave: H,
216
+ // 业务操作
217
+ applySuggestion: Q,
218
+ confirmSelection: E
270
219
  };
271
220
  }
272
- const bt = { class: "action-buttons" }, Ct = { class: "action-buttons__button" }, kt = { class: "action-buttons__submit-content" }, xt = {
221
+ const Tt = { class: "action-buttons" }, Rt = { class: "action-buttons__submit-content" }, Ot = {
273
222
  key: 0,
274
223
  class: "action-buttons__cancel-text"
275
- }, It = /* @__PURE__ */ ge({
224
+ }, Et = /* @__PURE__ */ Se({
276
225
  __name: "ActionButtons",
277
226
  props: {
278
227
  loading: { type: Boolean, default: !1 },
279
228
  disabled: { type: Boolean, default: !1 },
280
229
  showClear: { type: Boolean, default: !0 },
281
230
  hasContent: { type: Boolean, default: !1 },
231
+ buttonGroup: {},
282
232
  allowSpeech: { type: Boolean, default: !1 },
283
233
  speechStatus: { default: () => ({
284
234
  isRecording: !1,
@@ -290,97 +240,145 @@ const bt = { class: "action-buttons" }, Ct = { class: "action-buttons__button" }
290
240
  isOverLimit: { type: Boolean, default: !1 },
291
241
  stopText: { default: void 0 }
292
242
  },
293
- emits: ["clear", "toggle-speech", "submit", "cancel"],
294
- setup(i, { emit: r }) {
295
- const a = i, c = r, y = D(() => a.allowSpeech), w = D(() => a.speechStatus.isRecording), n = D(() => a.disabled), p = D(() => n.value || a.isOverLimit), C = D(() => a.allowFiles || a.allowSpeech || a.showClear), h = () => {
296
- n.value || c("clear");
297
- }, _ = () => {
298
- if (!n.value) {
299
- const d = !a.speechStatus.isRecording;
300
- c("toggle-speech", d);
243
+ emits: ["clear", "toggle-speech", "submit", "cancel", "trigger-select"],
244
+ setup(l, { emit: c }) {
245
+ const s = l, i = c, v = B(() => {
246
+ var O, p;
247
+ const g = (p = (O = s.buttonGroup) == null ? void 0 : O.file) == null ? void 0 : p.tooltips;
248
+ if (typeof g == "string" && g)
249
+ return () => g;
250
+ if (typeof g == "function")
251
+ return g;
252
+ }), S = B(() => {
253
+ var O, p;
254
+ const g = (p = (O = s.buttonGroup) == null ? void 0 : O.submit) == null ? void 0 : p.tooltips;
255
+ if (typeof g == "string" && g)
256
+ return () => g;
257
+ if (typeof g == "function")
258
+ return g;
259
+ }), a = B(() => s.allowSpeech), d = B(() => s.speechStatus.isRecording), x = B(() => s.disabled), h = B(() => {
260
+ var g, O;
261
+ return x.value || s.isOverLimit || ((O = (g = s.buttonGroup) == null ? void 0 : g.submit) == null ? void 0 : O.disabled);
262
+ }), w = B(() => s.allowFiles || s.allowSpeech || s.showClear), y = () => {
263
+ x.value || i("clear");
264
+ }, K = () => {
265
+ if (!x.value) {
266
+ const g = !s.speechStatus.isRecording;
267
+ i("toggle-speech", g);
301
268
  }
302
- }, g = () => {
303
- p.value || c("submit");
304
- }, I = () => {
305
- n.value || c("cancel");
269
+ }, W = () => {
270
+ h.value || i("submit");
271
+ }, F = () => {
272
+ x.value || i("cancel");
273
+ }, P = B(() => {
274
+ var g, O;
275
+ return x.value || ((O = (g = s.buttonGroup) == null ? void 0 : g.file) == null ? void 0 : O.disabled);
276
+ }), T = () => {
277
+ P.value || i("trigger-select");
306
278
  };
307
- return (d, L) => (m(), R("div", bt, [
308
- C.value ? (m(), R("div", {
279
+ return (g, O) => (b(), I("div", Tt, [
280
+ w.value ? (b(), I("div", {
309
281
  key: 0,
310
282
  class: "action-buttons__utility",
311
- style: De({ "padding-right": d.hasContent || d.loading ? "0" : "6px" })
283
+ style: Ve({ "padding-right": g.hasContent || g.loading ? "0" : "6px" })
312
284
  }, [
313
- d.allowFiles && !d.loading ? (m(), X(k(Me), {
285
+ g.allowFiles && !g.loading ? (b(), Y(C(Fe), {
314
286
  key: 0,
315
- content: "上传文件",
316
- placement: "top"
287
+ effect: "light",
288
+ placement: "top",
289
+ "render-content": v.value,
290
+ "visible-arrow": !1
317
291
  }, {
318
- default: pe(() => [
319
- A("div", Ct, [
320
- j(k(ut), {
321
- class: "action-buttons__icon",
292
+ default: he(() => [
293
+ U("div", {
294
+ class: "action-buttons__button",
295
+ onClick: T
296
+ }, [
297
+ Z(C(yt), {
298
+ class: oe(["action-buttons__icon", "action-buttons__icon--upload", { "is-disabled": P.value }]),
322
299
  alt: "上传文件"
323
- })
300
+ }, null, 8, ["class"])
324
301
  ])
325
302
  ]),
326
303
  _: 1
327
- })) : K("", !0),
328
- y.value && !d.loading ? (m(), R("div", {
304
+ }, 8, ["render-content"])) : N("", !0),
305
+ a.value && !g.loading ? (b(), I("div", {
329
306
  key: 1,
330
- class: ee(["action-buttons__button", { "is-recording": w.value }]),
331
- onClick: _
307
+ class: oe(["action-buttons__button", { "is-recording": d.value }]),
308
+ onClick: K
332
309
  }, [
333
- w.value ? (m(), X(k(dt), {
310
+ d.value ? (b(), Y(C(gt), {
334
311
  key: 1,
335
312
  class: "action-buttons__icon action-buttons__icon--recording",
336
313
  alt: "语音中"
337
- })) : (m(), X(k(ct), {
314
+ })) : (b(), Y(C(vt), {
338
315
  key: 0,
339
316
  class: "action-buttons__icon",
340
317
  alt: "录音"
341
318
  }))
342
- ], 2)) : K("", !0),
343
- d.showClear ? (m(), X(k(Me), {
319
+ ], 2)) : N("", !0),
320
+ g.showClear ? (b(), Y(C(Fe), {
344
321
  key: 2,
345
322
  content: "清空内容",
346
323
  placement: "top"
347
324
  }, {
348
- default: pe(() => [
349
- A("div", {
325
+ default: he(() => [
326
+ U("div", {
350
327
  class: "action-buttons__button",
351
- onClick: h
328
+ onClick: y
352
329
  }, [
353
- j(k(ft), { class: "action-buttons__icon action-buttons__icon--clear" })
330
+ Z(C(mt), { class: "action-buttons__icon action-buttons__icon--clear" })
354
331
  ])
355
332
  ]),
356
333
  _: 1
357
- })) : K("", !0)
358
- ], 4)) : K("", !0),
359
- d.hasContent || d.loading ? (m(), R("div", {
334
+ })) : N("", !0)
335
+ ], 4)) : N("", !0),
336
+ g.hasContent || g.loading ? (b(), I("div", {
360
337
  key: 1,
361
338
  class: "action-buttons__button action-buttons__submit",
362
- onClick: L[0] || (L[0] = (U) => d.loading ? I() : g())
339
+ onClick: O[0] || (O[0] = (p) => g.loading ? F() : W())
363
340
  }, [
364
- A("div", kt, [
365
- d.loading ? (m(), R("div", {
341
+ U("div", Rt, [
342
+ g.loading ? (b(), I("div", {
366
343
  key: 1,
367
- class: ee(["action-buttons__cancel", { "action-buttons__cancel--icon-only": !d.stopText }])
344
+ class: oe(["action-buttons__cancel", { "action-buttons__cancel--icon-only": !g.stopText }])
368
345
  }, [
369
- j(k(ht), {
346
+ Z(C(_t), {
370
347
  class: "action-buttons__icon action-buttons__icon--cancel",
371
348
  alt: "停止"
372
349
  }),
373
- d.stopText ? (m(), R("span", xt, le(d.stopText), 1)) : K("", !0)
374
- ], 2)) : (m(), X(k(pt), {
350
+ g.stopText ? (b(), I("span", Ot, ue(g.stopText), 1)) : N("", !0)
351
+ ], 2)) : (b(), Y(C(Fe), {
375
352
  key: 0,
376
- class: ee(["action-buttons__icon", "action-buttons__icon--send", { "is-disabled": p.value }]),
377
- alt: "发送"
378
- }, null, 8, ["class"]))
353
+ effect: "light",
354
+ placement: "top",
355
+ "render-content": S.value,
356
+ "visible-arrow": !1
357
+ }, {
358
+ default: he(() => [
359
+ Z(C(bt), {
360
+ class: oe(["action-buttons__icon", "action-buttons__icon--send", { "is-disabled": h.value }]),
361
+ alt: "发送"
362
+ }, null, 8, ["class"])
363
+ ]),
364
+ _: 1
365
+ }, 8, ["render-content"]))
379
366
  ])
380
- ])) : K("", !0)
367
+ ])) : N("", !0)
381
368
  ]));
382
369
  }
383
- }), qe = /* @__PURE__ */ be(It, [["__scopeId", "data-v-f811794c"]]), Rt = ["data-id", "data-type"], Ot = ["data-id", "data-type"], Tt = /* @__PURE__ */ ge({
370
+ }), Je = /* @__PURE__ */ Ce(Et, [["__scopeId", "data-v-ee42294d"]]);
371
+ function $t(l, c = {}) {
372
+ let s = [], i = [], v = l;
373
+ return { commit: (w) => {
374
+ var y;
375
+ s.push(v), v = w, i.length && ((y = c.onRemoveHistory) == null || y.call(c, i)), i = [];
376
+ }, undo: () => s.length ? (i.push(v), v = s.pop(), v) : null, redo: () => i.length ? (s.push(v), v = i.pop(), v) : null, clear: () => {
377
+ var w, y;
378
+ s.length && ((w = c.onRemoveHistory) == null || w.call(c, s)), i.length && ((y = c.onRemoveHistory) == null || y.call(c, i)), s = [], i = [];
379
+ }, get: () => v };
380
+ }
381
+ const Lt = ["data-id", "data-type"], Bt = ["data-id", "data-type"], Dt = /* @__PURE__ */ Se({
384
382
  inheritAttrs: !1,
385
383
  __name: "Block",
386
384
  props: {
@@ -390,61 +388,63 @@ const bt = { class: "action-buttons" }, Ct = { class: "action-buttons__button" }
390
388
  readonly: { type: Boolean },
391
389
  asChild: { type: Boolean }
392
390
  },
393
- setup(i) {
394
- const r = i, a = tt();
395
- return (c, y) => {
396
- const w = nt("Block", !0);
397
- return r.type !== "block" ? (m(), R("span", fe({
391
+ setup(l) {
392
+ const c = l, s = st();
393
+ return (i, v) => {
394
+ const S = at("Block", !0);
395
+ return c.type !== "block" ? (b(), I("span", _e({
398
396
  key: 0,
399
- "data-id": r.id,
400
- "data-type": r.type
401
- }, k(a)), le(r.content), 17, Rt)) : (m(), R(ce, { key: 1 }, [
402
- r.asChild ? (m(!0), R(ce, { key: 0 }, he(r.content, (n) => (m(), X(w, fe({
403
- key: `${n.id}-${n.type}`
404
- }, { ref_for: !0 }, n), null, 16))), 128)) : (m(), R("span", fe({
397
+ "data-id": c.id,
398
+ "data-type": c.type
399
+ }, C(s)), ue(c.content), 17, Lt)) : (b(), I(ye, { key: 1 }, [
400
+ c.asChild ? (b(!0), I(ye, { key: 0 }, we(c.content, (a) => (b(), Y(S, _e({
401
+ key: `${a.id}-${a.type}`
402
+ }, { ref_for: !0 }, a), null, 16))), 128)) : (b(), I("span", _e({
405
403
  key: 1,
406
- "data-id": r.id,
407
- "data-type": r.type
408
- }, k(a)), [
409
- (m(!0), R(ce, null, he(r.content, (n) => (m(), X(w, fe({
410
- key: `${n.id}-${n.type}`
411
- }, { ref_for: !0 }, n), null, 16))), 128))
412
- ], 16, Ot))
404
+ "data-id": c.id,
405
+ "data-type": c.type
406
+ }, C(s)), [
407
+ (b(!0), I(ye, null, we(c.content, (a) => (b(), Y(S, _e({
408
+ key: `${a.id}-${a.type}`
409
+ }, { ref_for: !0 }, a), null, 16))), 128))
410
+ ], 16, Bt))
413
411
  ], 64));
414
412
  };
415
413
  }
416
- }), $t = /* @__PURE__ */ be(Tt, [["__scopeId", "data-v-13862606"]]);
417
- function Lt(i, r = {}) {
418
- let a = [], c = [], y = i;
419
- return { commit: (_) => {
420
- var g;
421
- a.push(y), y = _, c.length && ((g = r.onRemoveHistory) == null || g.call(r, c)), c = [];
422
- }, undo: () => a.length ? (c.push(y), y = a.pop(), y) : null, redo: () => c.length ? (a.push(y), y = c.pop(), y) : null, clear: () => {
423
- var _, g;
424
- a.length && ((_ = r.onRemoveHistory) == null || _.call(r, a)), c.length && ((g = r.onRemoveHistory) == null || g.call(r, c)), a = [], c = [];
425
- }, get: () => y };
426
- }
427
- const Bt = { class: "editor-container" }, Le = "​", Be = "​", Et = /* @__PURE__ */ ge({
414
+ }), At = /* @__PURE__ */ Ce(Dt, [["__scopeId", "data-v-13862606"]]), Kt = { class: "editor-container" }, Pe = "​", Mt = /* @__PURE__ */ Se({
428
415
  __name: "TemplateEditor",
429
416
  props: {
430
417
  modelValue: { default: () => [] },
431
418
  modelModifiers: {}
432
419
  },
433
- emits: /* @__PURE__ */ st(["submit"], ["update:modelValue"]),
434
- setup(i, { expose: r, emit: a }) {
435
- const c = typeof window.ShadowRoot.prototype.getSelection == "function", y = typeof window.Selection.prototype.getComposedRanges == "function";
436
- function w() {
420
+ emits: /* @__PURE__ */ lt(["submit"], ["update:modelValue"]),
421
+ setup(l, { expose: c, emit: s }) {
422
+ const i = typeof window.ShadowRoot.prototype.getSelection == "function", v = typeof window.Selection.prototype.getComposedRanges == "function";
423
+ function S() {
437
424
  const e = navigator.userAgent;
438
425
  return e.includes("Safari") && !e.includes("Chrome") && !e.includes("Chromium") && !e.includes("CriOS");
439
426
  }
440
- const n = w(), p = () => Math.random().toString(36).substring(2, 15), C = ot(i, "modelValue"), h = a, _ = E(0), g = (e) => e.map((t, o) => ({
441
- id: `id-${o}`,
442
- ...t.type === "template" ? { ...t, prefix: Le, suffix: Be } : t
443
- })), I = (e) => e.map((t) => ({ type: t.type, content: t.content })), d = E(g(C.value || [])), L = D(() => d.value.map((e) => e.type === "template" ? [
427
+ const a = S(), d = () => Math.random().toString(36).substring(2, 15), x = Pe, h = Pe, w = Pe, y = rt(l, "modelValue"), K = s, W = M(0), F = (e) => e.map((t) => ({
428
+ id: t.id || d(),
429
+ ...t.type === "template" ? { ...t, prefix: h, suffix: w } : t
430
+ })), P = (e) => e.map((t) => ({ id: t.id, type: t.type, content: t.content })), T = M(F(y.value || [])), g = (e) => {
431
+ T.value = e;
432
+ }, O = B(() => {
433
+ const e = [], t = [], n = T.value;
434
+ if (n.length >= 2) {
435
+ const r = n[0], f = n[1];
436
+ r.type === "text" && r.content.length === 0 && f.type === "template" && e.push({ ...r, content: x });
437
+ const _ = n[n.length - 1], $ = n[n.length - 2];
438
+ _.type === "text" && _.content.length === 0 && $.type === "template" && t.push({ ..._, content: x });
439
+ }
440
+ n.length > 0 && n[0].type === "template" && e.push({ type: "text", content: x, id: d() }), n.length > 0 && n[n.length - 1].type === "template" && t.push({ type: "text", content: x, id: d() });
441
+ const u = new RegExp(x, "g");
442
+ return n.length > 0 && (n[0].content !== x && (n[0].content = n[0].content.replace(u, "")), n[n.length - 1].content !== x && (n[n.length - 1].content = n[n.length - 1].content.replace(u, ""))), e.concat(n).concat(t);
443
+ }), p = B(() => T.value.map((e) => e.type === "template" ? [
444
444
  { id: e.id, type: "prefix", content: e.prefix },
445
445
  { id: e.id, type: "template", content: e.content },
446
446
  { id: e.id, type: "suffix", content: e.suffix }
447
- ] : [e]).flat()), U = D(() => d.value.map((e) => e.type === "text" ? e : n ? {
447
+ ] : [e]).flat()), Q = B(() => O.value.map((e) => e.type === "text" ? e : a ? {
448
448
  id: e.id,
449
449
  type: "block",
450
450
  asChild: !0,
@@ -474,83 +474,92 @@ const Bt = { class: "editor-container" }, Le = "​", Be = "​", Et = /* @__PUR
474
474
  },
475
475
  { id: e.id, type: "suffix", content: e.suffix }
476
476
  ]
477
- })), $ = E(null), z = (e) => {
478
- const t = Date.now(), o = JSON.stringify(e);
479
- return `${t}:${o}`;
480
- }, te = (e) => {
481
- const t = parseInt(e.slice(0, 13)), o = JSON.parse(e.slice(14));
477
+ })), E = M(null), q = (e) => {
478
+ const t = Date.now(), n = JSON.stringify(e);
479
+ return `${t}:${n}`;
480
+ }, ee = (e) => {
481
+ const t = parseInt(e.slice(0, 13)), n = JSON.parse(e.slice(14));
482
482
  return {
483
483
  timestamp: t,
484
- data: o
484
+ data: n
485
485
  };
486
- }, v = /* @__PURE__ */ new Map(), F = Lt(z(d.value), {
486
+ }, H = /* @__PURE__ */ new Map(), k = $t(q(T.value), {
487
487
  onRemoveHistory: (e) => {
488
488
  for (const t of e)
489
- v.delete(t);
489
+ H.delete(t);
490
490
  }
491
491
  });
492
- Z(
493
- () => C.value,
492
+ ne(
493
+ () => y.value,
494
494
  (e) => {
495
- d.value = g(e || []), F.commit(z(d.value));
495
+ const t = F(e || []);
496
+ if (JSON.stringify(t) !== JSON.stringify(T.value)) {
497
+ if (E.value) {
498
+ const u = le(E.value);
499
+ u && H.set(k.get(), X(u));
500
+ }
501
+ g(t), k.commit(q(T.value));
502
+ }
496
503
  },
497
504
  { deep: !0 }
498
505
  );
499
- const V = (e, t = document.body) => t.contains(e) ? e instanceof HTMLElement && e.dataset.id ? e : e.parentElement ? V(e.parentElement, t) : null : null, W = (e) => e === $.value, G = (e) => {
506
+ const j = (e, t = document.body) => t.contains(e) ? e instanceof HTMLElement && e.dataset.id ? e : e.parentElement ? j(e.parentElement, t) : null : null, J = (e) => e === E.value, le = (e) => {
500
507
  const t = window.getSelection();
501
508
  if (!t)
502
509
  return null;
503
- const o = t.rangeCount > 0 ? t.getRangeAt(0) : null, u = e.getRootNode();
510
+ const n = t.rangeCount > 0 ? t.getRangeAt(0) : null, u = e.getRootNode();
504
511
  if (!(u instanceof ShadowRoot))
505
- return o;
506
- if (y) {
507
- const l = t.getComposedRanges(n ? u : { shadowRoots: [u] });
508
- return (l == null ? void 0 : l[0]) ?? null;
512
+ return n;
513
+ if (v) {
514
+ const r = t.getComposedRanges(a ? u : { shadowRoots: [u] });
515
+ return (r == null ? void 0 : r[0]) ?? null;
509
516
  }
510
- if (c) {
511
- const l = u.getSelection();
512
- return l.rangeCount > 0 ? l.getRangeAt(0) : null;
517
+ if (i) {
518
+ const r = u.getSelection();
519
+ return r.rangeCount > 0 ? r.getRangeAt(0) : null;
513
520
  }
514
- return o;
515
- }, de = (e, t) => {
521
+ return n;
522
+ }, V = (e, t) => {
516
523
  var u;
517
524
  if (!e.firstChild || e.firstChild.nodeType !== Node.TEXT_NODE)
518
- return console.warn("el.firstChild is not a text node. set anchor and focus to the element with offset 0", e), { node: e, offset: 0 };
519
- const o = ((u = e.firstChild.textContent) == null ? void 0 : u.length) ?? 0;
520
- return t > o && console.warn("offset is too large", { offset: t, el: e }), { node: e.firstChild, offset: Math.min(t, o) };
521
- }, Q = (e, t, o, u) => {
522
- const l = window.getSelection();
523
- if (!l)
525
+ return { node: e, offset: 0 };
526
+ const n = ((u = e.firstChild.textContent) == null ? void 0 : u.length) ?? 0;
527
+ return { node: e.firstChild, offset: Math.min(t, n) };
528
+ }, z = (e, t, n, u) => {
529
+ const r = window.getSelection();
530
+ if (!r)
524
531
  return;
525
- const { node: f, offset: b } = de(e, t);
526
- if (!o) {
527
- l.setBaseAndExtent(f, b, f, b);
532
+ const { node: f, offset: _ } = V(e, t);
533
+ if (!n) {
534
+ r.setBaseAndExtent(f, _, f, _);
528
535
  return;
529
536
  }
530
- const { node: S, offset: O } = de(o, u ?? 0);
531
- l.setBaseAndExtent(f, b, S, O);
532
- }, J = (e, t) => {
533
- const o = p(), u = { id: o, type: "text", content: e };
537
+ const { node: $, offset: G } = V(n, u ?? 0);
538
+ r.setBaseAndExtent(f, _, $, G);
539
+ }, ve = (e, t) => {
540
+ const n = d(), u = { id: n, type: "text", content: e };
534
541
  if (t) {
535
- const l = d.value.findIndex((f) => f.id === t);
536
- l !== -1 ? d.value = d.value.slice(0, l + 1).concat(u).concat(d.value.slice(l + 1)) : console.warn(`can not find item with id: ${t}`);
542
+ const r = T.value.findIndex((f) => f.id === t);
543
+ r !== -1 ? (g(
544
+ T.value.slice(0, r + 1).concat(u).concat(T.value.slice(r + 1))
545
+ ), k.commit(q(T.value))) : console.warn(`can not find item with id: ${t}`);
537
546
  } else
538
- d.value.unshift(u);
539
- q(() => {
547
+ g([u].concat(T.value)), k.commit(q(T.value));
548
+ te(() => {
540
549
  var f;
541
- const l = (f = $.value) == null ? void 0 : f.querySelector(`[data-id="${o}"][data-type="text"]`);
542
- l && Q(l, e.length);
543
- }), C.value = I(d.value);
544
- }, x = E({
550
+ const r = (f = E.value) == null ? void 0 : f.querySelector(`[data-id="${n}"][data-type="text"]`);
551
+ r && z(r, e.length);
552
+ }), y.value = P(T.value);
553
+ }, se = M({
545
554
  hasStarted: !1,
546
555
  range: null
547
- }), N = (e) => {
548
- var S;
556
+ }), xe = (e) => {
557
+ var $;
549
558
  const t = e;
550
559
  e.preventDefault();
551
- const { inputType: o } = t, u = (t.data || ((S = t.dataTransfer) == null ? void 0 : S.getData("text/plain")) || "").replace(Le, "").replace(Be, ""), l = t.getTargetRanges()[0];
552
- if (!l) {
553
- console.warn("range is null", l);
560
+ const { inputType: n } = t, u = (t.data || (($ = t.dataTransfer) == null ? void 0 : $.getData("text/plain")) || "").replace(h, "").replace(w, ""), r = t.getTargetRanges()[0];
561
+ if (!r) {
562
+ console.warn("range is null", r);
554
563
  return;
555
564
  }
556
565
  const f = [
@@ -564,71 +573,90 @@ const Bt = { class: "editor-container" }, Le = "​", Be = "​", Et = /* @__PUR
564
573
  "deleteSoftLineBackward",
565
574
  "deleteSoftLineForward",
566
575
  "deleteByCut"
567
- ], b = G($.value);
568
- if (f.includes(o)) {
569
- if (u && W(l.startContainer) && W(l.endContainer)) {
570
- J(u), b && v.set(F.get(), M(b));
576
+ ], _ = le(E.value);
577
+ if (f.includes(n)) {
578
+ if (u && J(r.startContainer) && J(r.endContainer)) {
579
+ _ && H.set(k.get(), X(_)), ve(u);
571
580
  return;
572
581
  }
573
- const O = M(l);
574
- O.startId && O.endId ? (P(O, o, u), b && v.set(F.get(), M(b))) : console.warn("range is not valid, range:", O);
575
- } else o === "insertCompositionText" && x.value.hasStarted && (x.value = { hasStarted: !1, range: M(l) });
576
- }, M = (e) => {
577
- const t = V(e.startContainer, $.value), o = V(e.endContainer, $.value);
582
+ const G = X(r);
583
+ G.startId && G.endId ? (_ && H.set(k.get(), X(_)), ce(G, n, u)) : console.warn("range is not valid, range:", G);
584
+ } else n === "insertCompositionText" && se.value.hasStarted && (se.value = { hasStarted: !1, range: X(r) });
585
+ }, X = (e) => {
586
+ const t = j(e.startContainer, E.value), n = j(e.endContainer, E.value);
578
587
  return {
579
588
  collapsed: e.collapsed,
580
589
  endContainer: e.endContainer,
581
- endId: o == null ? void 0 : o.dataset.id,
590
+ endId: n == null ? void 0 : n.dataset.id,
591
+ endEl: n,
582
592
  endOffset: e.endOffset,
583
- endType: o == null ? void 0 : o.dataset.type,
593
+ endType: n == null ? void 0 : n.dataset.type,
584
594
  startContainer: e.startContainer,
585
595
  startId: t == null ? void 0 : t.dataset.id,
596
+ startEl: t,
586
597
  startOffset: e.startOffset,
587
598
  startType: t == null ? void 0 : t.dataset.type
588
599
  };
589
- }, ne = (e, t, o, u) => e.slice(0, o) + t + e.slice(u), P = (e, t, o) => {
590
- const u = Ce(e);
600
+ }, ke = (e, t, n, u) => e.slice(0, n) + t + e.slice(u), ce = (e, t, n) => {
601
+ const u = Be(e);
591
602
  if (!Array.isArray(u) || u.length === 0)
592
603
  return;
593
- const l = ke(u, e, t, o);
594
- if (l.some((S) => S.tag === "new")) {
595
- const { afterId: S, content: O } = l[0];
596
- J(O, S);
604
+ const r = De(u, e, t, n);
605
+ if (r.some((R) => R.tag === "new")) {
606
+ const { afterId: R, content: L } = r[0];
607
+ ve(L, R);
597
608
  return;
598
609
  }
599
- const f = l, b = [];
600
- for (const [S, O] of f.entries()) {
601
- const H = d.value.find((Te) => Te.id === O.id), Y = S === 0 ? o : "";
602
- H ? H.type === "text" ? H.content = ne(H.content, Y, O.startOffset, O.endOffset) : H.type === "template" ? O.type === "prefix" || O.type === "suffix" ? O.startOffset === 0 && O.endOffset === 1 && Y.length === 0 ? H[O.type] = "" : console.warn(`${O.type} can not be inserted text. it only can be deleted`, O) : O.startOffset < 0 || O.endOffset > H.content.length ? b.push(H.id) : H.content = ne(H.content, Y, O.startOffset, O.endOffset) : console.warn("dataItem.type is not text or template", H) : console.warn("can not find dataItem", O);
610
+ const f = r, _ = [];
611
+ for (const [R, L] of f.entries()) {
612
+ const D = T.value.find((m) => m.id === L.id), o = R === 0 ? n : "";
613
+ D ? D.type === "text" ? D.content = ke(D.content, o, L.startOffset, L.endOffset) : D.type === "template" ? L.type === "prefix" || L.type === "suffix" ? L.startOffset === 0 && L.endOffset === 1 && o.length === 0 ? D[L.type] = "" : console.warn(`${L.type} can not be inserted text. it only can be deleted`, L) : L.startOffset < 0 || L.endOffset > D.content.length ? _.push(D.id) : D.content = ke(D.content, o, L.startOffset, L.endOffset) : console.warn("dataItem.type is not text or template", D) : console.warn("can not find dataItem", L);
603
614
  }
604
- d.value = d.value.filter((S) => !b.includes(S.id)), d.value = d.value.filter((S) => S.type === "text" ? S.content.length > 0 : [S.prefix, S.suffix, S.content].join("").length > 0);
605
- for (const S of d.value.filter((O) => O.type === "template"))
606
- S.prefix.length === 0 && (S.prefix = Le), S.suffix.length === 0 && (S.suffix = Be);
607
- f.length > 0 && se(f, o), C.value = I(d.value);
608
- }, se = (e, t) => {
609
- const o = e[0], u = `[data-id="${o.id}"][data-type="${o.type}"]`, l = e.slice(1).map((f) => `[data-id="${f.id}"][data-type="${f.type}"]`);
610
- q(() => {
611
- var b, S;
612
- const f = (b = $.value) == null ? void 0 : b.querySelector(u);
615
+ let $ = T.value.filter((R) => !_.includes(R.id));
616
+ $ = $.filter((R) => !(R.type === "template" && [R.prefix, R.suffix, R.content].join("").length === 0));
617
+ const G = /* @__PURE__ */ new Set();
618
+ $.forEach((R, L, D) => {
619
+ if (D.length >= 2) {
620
+ if (L === 0 || L === 1) {
621
+ const o = D[0], m = D[1];
622
+ if (o.type === "text" && o.content.length === 0 && m.type === "template")
623
+ return;
624
+ }
625
+ if (L === D.length - 2 || L === D.length - 1) {
626
+ const o = D[D.length - 1], m = D[D.length - 2];
627
+ if (o.type === "text" && o.content.length === 0 && m.type === "template")
628
+ return;
629
+ }
630
+ }
631
+ R.type === "text" && R.content.length === 0 && G.add(R.id);
632
+ }), $ = $.filter((R) => !G.has(R.id));
633
+ for (const R of $.filter((L) => L.type === "template"))
634
+ R.prefix.length === 0 && (R.prefix = h), R.suffix.length === 0 && (R.suffix = w);
635
+ g($), k.commit(q(T.value)), f.length > 0 && ge(f, n), y.value = P(T.value);
636
+ }, ge = (e, t) => {
637
+ const n = e[0], u = `[data-id="${n.id}"][data-type="${n.type}"]`, r = e.slice(1).map((f) => `[data-id="${f.id}"][data-type="${f.type}"]`);
638
+ te(() => {
639
+ var _, $;
640
+ const f = (_ = E.value) == null ? void 0 : _.querySelector(u);
613
641
  if (f)
614
- Q(f, o.startOffset + t.length);
642
+ z(f, n.startOffset + t.length);
615
643
  else if (t.length === 0)
616
- for (const O of l) {
617
- const H = (S = $.value) == null ? void 0 : S.querySelector(O);
618
- if (H) {
619
- Q(H, 0);
644
+ for (const G of r) {
645
+ const R = ($ = E.value) == null ? void 0 : $.querySelector(G);
646
+ if (R) {
647
+ z(R, 0);
620
648
  break;
621
649
  }
622
650
  }
623
651
  else
624
652
  console.warn(`can not find el with selector: ${u}`);
625
653
  });
626
- }, Ce = (e) => {
627
- const t = L.value.findIndex((b) => b.id === e.startId && b.type === e.startType), o = L.value.findIndex((b) => b.id === e.endId && b.type === e.endType);
628
- if (t === -1 || o === -1 || t > o)
654
+ }, Be = (e) => {
655
+ const t = p.value.findIndex((_) => _.id === e.startId && _.type === e.startType), n = p.value.findIndex((_) => _.id === e.endId && _.type === e.endType);
656
+ if (t === -1 || n === -1 || t > n)
629
657
  return console.warn("startIndex or endIndex is -1, or startIndex > endIndex. ", { range: e }), null;
630
- const u = L.value[t], l = L.value[o];
631
- if (t === o)
658
+ const u = p.value[t], r = p.value[n];
659
+ if (t === n)
632
660
  return [
633
661
  {
634
662
  id: u.id,
@@ -645,236 +673,309 @@ const Bt = { class: "editor-container" }, Le = "​", Be = "​", Et = /* @__PUR
645
673
  endOffset: u.content.length
646
674
  }
647
675
  ];
648
- for (let b = t + 1; b < o; b++) {
649
- const S = L.value[b];
676
+ for (let _ = t + 1; _ < n; _++) {
677
+ const $ = p.value[_];
650
678
  f.push({
651
- id: S.id,
652
- type: S.type,
679
+ id: $.id,
680
+ type: $.type,
653
681
  startOffset: 0,
654
- endOffset: S.content.length
682
+ endOffset: $.content.length
655
683
  });
656
684
  }
657
685
  return f.push({
658
- id: l.id,
659
- type: l.type,
686
+ id: r.id,
687
+ type: r.type,
660
688
  startOffset: 0,
661
689
  endOffset: e.endOffset
662
690
  }), f;
663
- }, ke = (e, t, o, u) => {
664
- const l = e[0];
665
- if (l.type !== "prefix" && l.type !== "suffix")
691
+ }, De = (e, t, n, u) => {
692
+ const r = e[0];
693
+ if (r.type !== "prefix" && r.type !== "suffix")
666
694
  return e;
667
695
  if (e.length === 1) {
668
696
  if (t.collapsed)
669
697
  if (t.startOffset === 0) {
670
- const f = ie(l, u);
698
+ const f = ae(r, u);
671
699
  return f ? [f] : [];
672
700
  } else {
673
- const f = re(l, u);
701
+ const f = de(r, u);
674
702
  return f ? [f] : [];
675
703
  }
676
- if (o.startsWith("insert"))
677
- if (n) {
678
- const f = ie(l, u);
704
+ if (n.startsWith("insert"))
705
+ if (a) {
706
+ const f = ae(r, u);
679
707
  return f ? [f] : [];
680
708
  } else {
681
- const f = re(l, u);
709
+ const f = de(r, u);
682
710
  return f ? [f] : [];
683
711
  }
684
- if (o.startsWith("delete")) {
685
- if (o.includes("Backward")) {
686
- const f = ie(l, u, 1);
712
+ if (n.startsWith("delete")) {
713
+ if (n.includes("Backward")) {
714
+ const f = ae(r, u, 1);
687
715
  return f ? [f] : [];
688
- } else if (o.includes("Forward")) {
689
- const f = re(l, u, 1);
716
+ } else if (n.includes("Forward")) {
717
+ const f = de(r, u, 1);
690
718
  return f ? [f] : [];
691
719
  }
692
720
  }
693
721
  }
694
722
  return u.length > 0 ? e.slice(1) : e;
695
- }, ie = (e, t, o = 0) => {
696
- const u = L.value.findIndex((l) => l.id === e.id && l.type === e.type);
723
+ }, ae = (e, t, n = 0) => {
724
+ const u = p.value.findIndex((r) => r.id === e.id && r.type === e.type);
697
725
  if (u > 0) {
698
- const l = L.value[u - 1], { id: f, type: b, content: S } = l;
699
- if (b === "text" || b === "template")
726
+ const r = p.value[u - 1], { id: f, type: _, content: $ } = r;
727
+ if (_ === "text" || _ === "template")
700
728
  return {
701
729
  id: f,
702
- type: b,
703
- startOffset: S.length - o,
704
- endOffset: S.length
730
+ type: _,
731
+ startOffset: $.length - n,
732
+ endOffset: $.length
705
733
  };
706
734
  if (t.length > 0)
707
735
  return { tag: "new", afterId: f, type: "text", content: t };
708
- if (console.warn("the previous item is not text or template", { current: e, previous: l }), o === 1)
736
+ if (console.warn("the previous item is not text or template", { current: e, previous: r }), n === 1)
709
737
  return { ...e, endOffset: e.startOffset };
710
738
  } else return t.length > 0 ? { tag: "new", type: "text", content: t } : (console.warn("the previous item of current is not found", { current: e }), null);
711
739
  return e;
712
- }, re = (e, t, o = 0) => {
713
- const u = L.value.findIndex((l) => l.id === e.id && l.type === e.type);
714
- if (u < L.value.length - 1) {
715
- const l = L.value[u + 1], { id: f, type: b } = l;
716
- if (b === "text" || b === "template")
740
+ }, de = (e, t, n = 0) => {
741
+ const u = p.value.findIndex((r) => r.id === e.id && r.type === e.type);
742
+ if (u < p.value.length - 1) {
743
+ const r = p.value[u + 1], { id: f, type: _ } = r;
744
+ if (_ === "text" || _ === "template")
717
745
  return {
718
746
  id: f,
719
- type: b,
747
+ type: _,
720
748
  startOffset: 0,
721
- endOffset: 0 + o
749
+ endOffset: 0 + n
722
750
  };
723
751
  if (t.length > 0)
724
752
  return { tag: "new", afterId: e.id, type: "text", content: t };
725
- if (console.warn("the next item is not text or template", { current: e, next: l }), o === 1)
753
+ if (console.warn("the next item is not text or template", { current: e, next: r }), n === 1)
726
754
  return { ...e, startOffset: e.endOffset };
727
755
  } else return t.length > 0 ? { tag: "new", afterId: e.id, type: "text", content: t } : (console.warn("the next item of current is not found", { current: e }), null);
728
756
  return e;
729
- }, xe = () => {
730
- x.value = { hasStarted: !0, range: null };
731
- }, ve = (e) => {
732
- const t = x.value.range;
733
- t ? (e.data && W(t.startContainer) && W(t.endContainer) ? (J(e.data), v.set(F.get(), M(t))) : t.startId && t.endId ? (P(t, "insertCompositionText", e.data), v.set(F.get(), M(t))) : console.warn("range is not valid, range:", t), _.value++) : console.warn("range is null, compositionEnd:", e), x.value = { hasStarted: !1, range: null };
734
- }, ue = (() => {
757
+ }, Ie = () => {
758
+ se.value = { hasStarted: !0, range: null };
759
+ }, me = (e) => {
760
+ const t = se.value.range;
761
+ t ? (e.data && J(t.startContainer) && J(t.endContainer) ? (H.set(k.get(), X(t)), ve(e.data)) : t.startId && t.endId ? (H.set(k.get(), X(t)), ce(t, "insertCompositionText", e.data)) : console.warn("range is not valid, range:", t), W.value++) : console.warn("range is null, compositionEnd:", e), se.value = { hasStarted: !1, range: null };
762
+ }, fe = (() => {
735
763
  const e = navigator.userAgent.toLowerCase();
736
764
  return /macintosh|mac os x|iphone|ipad|ipod/.test(e);
737
- })(), Ie = (e) => {
738
- const t = ue && e.metaKey && !e.shiftKey && e.key.toLowerCase() === "z" || // Cmd+Z
739
- !ue && e.ctrlKey && !e.shiftKey && e.key.toLowerCase() === "z", o = ue && e.metaKey && e.shiftKey && e.key.toLowerCase() === "z" || // Cmd+Shift+z
740
- !ue && e.ctrlKey && (e.key.toLowerCase() === "y" || e.shiftKey && e.key.toLowerCase() === "z"), u = e.key.toLowerCase() === "enter";
765
+ })(), pe = (e) => {
766
+ const t = fe && e.metaKey && !e.shiftKey && e.key.toLowerCase() === "z" || // Cmd+Z
767
+ !fe && e.ctrlKey && !e.shiftKey && e.key.toLowerCase() === "z", n = fe && e.metaKey && e.shiftKey && e.key.toLowerCase() === "z" || // Cmd+Shift+z
768
+ !fe && e.ctrlKey && (e.key.toLowerCase() === "y" || e.shiftKey && e.key.toLowerCase() === "z"), u = e.key.toLowerCase() === "enter";
741
769
  if (t) {
742
770
  e.preventDefault();
743
- const l = G($.value);
744
- l && v.set(F.get(), M(l));
745
- const f = F.undo();
746
- f && oe(f);
771
+ const r = le(E.value);
772
+ r && H.set(k.get(), X(r));
773
+ const f = k.undo();
774
+ f && Te(f);
747
775
  }
748
- if (o) {
776
+ if (n) {
749
777
  e.preventDefault();
750
- const l = F.redo();
751
- l && oe(l);
778
+ const r = k.redo();
779
+ r && Te(r);
752
780
  }
753
- u && (e.preventDefault(), h("submit"));
754
- }, oe = (e) => {
755
- const { data: t } = te(e);
756
- if (d.value = t, v.has(e)) {
757
- const o = v.get(e);
758
- q(() => {
759
- const u = $.value.querySelector(`[data-id="${o.startId}"][data-type="${o.startType}"]`), l = $.value.querySelector(`[data-id="${o.endId}"][data-type="${o.endType}"]`);
760
- u && Q(u, o.startOffset, l, o.endOffset);
781
+ u && (e.preventDefault(), K("submit"));
782
+ }, Te = (e) => {
783
+ const { data: t } = ee(e);
784
+ if (g(t), H.has(e)) {
785
+ const n = H.get(e);
786
+ te(() => {
787
+ const u = E.value.querySelector(`[data-id="${n.startId}"][data-type="${n.startType}"]`), r = E.value.querySelector(`[data-id="${n.endId}"][data-type="${n.endType}"]`);
788
+ u && z(u, n.startOffset, r, n.endOffset);
761
789
  });
762
790
  }
763
- };
764
- return r({
765
- clearHistory: () => {
766
- F.clear(), v.clear();
767
- },
768
- activateFirstField: () => {
769
- if (!$.value)
791
+ y.value = P(T.value);
792
+ }, Re = (e, t) => {
793
+ var r, f;
794
+ const n = (r = E.value) == null ? void 0 : r.querySelector(`[data-id="${e}"][data-type="${t}"]`);
795
+ if (!n) return;
796
+ const u = ((f = n.textContent) == null ? void 0 : f.length) || 0;
797
+ z(n, u);
798
+ }, Ae = () => {
799
+ E.value && te(() => {
800
+ const e = T.value, t = e.find((u) => u.type === "template");
801
+ t && Re(t.id, "template"), e.every((u) => u.type === "text") && e.length === 1 && Re(e[0].id, "text");
802
+ });
803
+ }, Ke = () => {
804
+ k.clear(), H.clear();
805
+ }, Oe = () => {
806
+ if (!E.value || se.value.range)
807
+ return;
808
+ const e = le(E.value);
809
+ if (e != null && e.collapsed && O.value.length > 0) {
810
+ const t = X(e), n = O.value[0];
811
+ if (t.startEl && t.startId === n.id && t.startOffset === 0 && n.content === x && n.type === "text") {
812
+ z(t.startEl, 1);
770
813
  return;
771
- const e = d.value.find((t) => t.type === "template");
772
- e && q(() => {
773
- var o, u;
774
- const t = (o = $.value) == null ? void 0 : o.querySelector(`[data-id="${e.id}"][data-type="template"]`);
775
- if (t) {
776
- const l = ((u = t.textContent) == null ? void 0 : u.length) || 0;
777
- Q(t, l);
778
- }
779
- });
814
+ }
815
+ const u = O.value[O.value.length - 1];
816
+ if (t.endEl && t.endId === u.id && t.endOffset === 1 && u.content === x && u.type === "text") {
817
+ z(t.endEl, 0);
818
+ return;
819
+ }
780
820
  }
781
- }), (e, t) => (m(), R("div", Bt, [
782
- (m(), R("div", {
821
+ };
822
+ return it(() => {
823
+ document.addEventListener("selectionchange", Oe);
824
+ }), ut(() => {
825
+ document.removeEventListener("selectionchange", Oe);
826
+ }), c({
827
+ clearHistory: Ke,
828
+ activateFirstField: Ae
829
+ }), (e, t) => (b(), I("div", Kt, [
830
+ (b(), I("div", {
783
831
  contenteditable: "true",
784
832
  ref_key: "editorRef",
785
- ref: $,
786
- key: _.value,
833
+ ref: E,
834
+ key: W.value,
787
835
  class: "editor",
788
- onBeforeinput: N,
789
- onCompositionstart: xe,
790
- onCompositionend: ve,
791
- onKeydown: Ie
836
+ onBeforeinput: xe,
837
+ onCompositionstart: Ie,
838
+ onCompositionend: me,
839
+ onKeydown: pe
792
840
  }, [
793
- (m(!0), R(ce, null, he(U.value, (o) => (m(), X($t, fe({
794
- key: `${o.id}-${o.type}`
795
- }, { ref_for: !0 }, o), null, 16))), 128))
841
+ (b(!0), I(ye, null, we(Q.value, (n) => (b(), Y(At, _e({
842
+ key: `${n.id}-${n.type}`
843
+ }, { ref_for: !0 }, n), null, 16))), 128))
796
844
  ], 32))
797
845
  ]));
798
846
  }
799
- }), Dt = /* @__PURE__ */ be(Et, [["__scopeId", "data-v-b0269a2a"]]), Ft = ["onMouseenter", "onMousedown"], Pt = { class: "suggestion-list__text" }, Ht = /* @__PURE__ */ ge({
847
+ }), Ft = /* @__PURE__ */ Ce(Mt, [["__scopeId", "data-v-5fda773e"]]), Xe = (l, c) => {
848
+ if (!c.length)
849
+ return [{ text: l, isMatch: !1 }];
850
+ const s = [];
851
+ for (const a of c) {
852
+ if (!a) continue;
853
+ let d = 0;
854
+ const x = l.toLowerCase(), h = a.toLowerCase();
855
+ for (; ; ) {
856
+ const w = x.indexOf(h, d);
857
+ if (w === -1) break;
858
+ s.push({
859
+ start: w,
860
+ end: w + a.length
861
+ }), d = w + 1;
862
+ }
863
+ }
864
+ if (s.length === 0)
865
+ return [{ text: l, isMatch: !1 }];
866
+ s.sort((a, d) => a.start - d.start);
867
+ const i = [];
868
+ for (const a of s)
869
+ if (i.length === 0)
870
+ i.push(a);
871
+ else {
872
+ const d = i[i.length - 1];
873
+ a.start <= d.end ? d.end = Math.max(d.end, a.end) : i.push(a);
874
+ }
875
+ const v = [];
876
+ let S = 0;
877
+ for (const a of i)
878
+ S < a.start && v.push({
879
+ text: l.substring(S, a.start),
880
+ isMatch: !1
881
+ }), v.push({
882
+ text: l.substring(a.start, a.end),
883
+ isMatch: !0
884
+ }), S = a.end;
885
+ return S < l.length && v.push({
886
+ text: l.substring(S),
887
+ isMatch: !1
888
+ }), v;
889
+ }, Pt = (l, c) => !c || !l ? [{ text: l, isMatch: !1 }] : Xe(l, [c]), Wt = (l, c) => {
890
+ const { content: s, highlights: i } = l;
891
+ return typeof i == "function" ? i(s, c) : Array.isArray(i) ? Xe(s, i) : Pt(s, c);
892
+ }, Vt = ["onMouseenter", "onMousedown"], Nt = { class: "suggestion-list__text" }, Ht = /* @__PURE__ */ Se({
800
893
  __name: "SuggestionList",
801
894
  props: {
802
895
  show: { type: Boolean },
803
896
  suggestions: {},
804
897
  popupStyle: {},
805
- isItemHighlighted: { type: Function },
806
- highlightSuggestionText: { type: Function },
898
+ activeKeyboardIndex: {},
899
+ activeMouseIndex: {},
807
900
  inputValue: {}
808
901
  },
809
- emits: ["item-hover", "item-leave", "select"],
810
- setup(i, { emit: r }) {
811
- const a = i, c = r, y = E(null), w = (C) => {
812
- c("item-hover", C);
813
- }, n = () => {
814
- c("item-leave");
815
- }, p = (C) => {
816
- c("select", C);
902
+ emits: ["select", "mouse-enter", "mouse-leave"],
903
+ setup(l, { emit: c }) {
904
+ const s = l, i = c, v = M(null), S = (h) => h === s.activeKeyboardIndex || h === s.activeMouseIndex, a = (h) => {
905
+ i("mouse-enter", h);
906
+ }, d = () => {
907
+ i("mouse-leave");
908
+ }, x = (h) => {
909
+ i("select", h);
817
910
  };
818
- return (C, h) => (m(), X(Ee, { name: "tiny-sender-slide-up" }, {
819
- default: pe(() => [
820
- a.show && a.suggestions.length ? (m(), R("div", {
911
+ return ne(
912
+ () => s.activeKeyboardIndex,
913
+ (h) => {
914
+ if (h !== -1 && v.value) {
915
+ const w = v.value.children[h];
916
+ w && w.scrollIntoView({ block: "nearest" });
917
+ }
918
+ }
919
+ ), (h, w) => (b(), Y(We, { name: "tiny-sender-slide-up" }, {
920
+ default: he(() => [
921
+ s.show && s.suggestions.length ? (b(), I("div", {
821
922
  key: 0,
822
923
  ref_key: "suggestionsListRef",
823
- ref: y,
924
+ ref: v,
824
925
  class: "suggestion-list",
825
- style: De(a.popupStyle)
926
+ style: Ve(s.popupStyle)
826
927
  }, [
827
- (m(!0), R(ce, null, he(a.suggestions, (_, g) => (m(), R("div", {
828
- key: g,
829
- class: ee(["suggestion-list__item", { highlighted: a.isItemHighlighted(g) }]),
830
- onMouseenter: (I) => w(g),
831
- onMouseleave: n,
832
- onMousedown: at((I) => p(_), ["prevent"])
928
+ (b(!0), I(ye, null, we(s.suggestions, (y, K) => (b(), I("div", {
929
+ key: K,
930
+ class: oe(["suggestion-list__item", { highlighted: S(K) }]),
931
+ onMouseenter: (W) => a(K),
932
+ onMouseleave: d,
933
+ onMousedown: ct((W) => x(y.content), ["prevent"])
833
934
  }, [
834
- j(k(gt), { class: "suggestion-list__icon" }),
835
- A("span", Pt, [
836
- (m(!0), R(ce, null, he(a.highlightSuggestionText(_, a.inputValue), (I, d) => (m(), R("span", {
837
- key: d,
838
- class: ee({
839
- "suggestion-list__text--match": I.isMatch,
840
- "suggestion-list__text--normal": !I.isMatch
935
+ Z(C(wt), { class: "suggestion-list__icon" }),
936
+ U("span", Nt, [
937
+ (b(!0), I(ye, null, we(C(Wt)(y, s.inputValue), (W, F) => (b(), I("span", {
938
+ key: F,
939
+ class: oe({
940
+ "suggestion-list__text--match": W.isMatch,
941
+ "suggestion-list__text--normal": !W.isMatch
841
942
  })
842
- }, le(I.text), 3))), 128))
943
+ }, ue(W.text), 3))), 128))
843
944
  ])
844
- ], 42, Ft))), 128))
845
- ], 4)) : K("", !0)
945
+ ], 42, Vt))), 128))
946
+ ], 4)) : N("", !0)
846
947
  ]),
847
948
  _: 1
848
949
  }));
849
950
  }
850
- }), Kt = /* @__PURE__ */ be(Ht, [["__scopeId", "data-v-238fcdfd"]]), Wt = ["data-theme"], At = { class: "tiny-sender__container" }, Vt = {
951
+ }), Ut = /* @__PURE__ */ Ce(Ht, [["__scopeId", "data-v-e0ec9fe3"]]), qt = ["data-theme"], zt = { class: "tiny-sender__container" }, Gt = {
851
952
  key: 0,
852
953
  class: "tiny-sender__header-slot"
853
- }, Nt = {
954
+ }, jt = {
854
955
  key: 0,
855
956
  class: "tiny-sender__prefix-slot"
856
- }, Mt = { class: "tiny-sender__content-area" }, qt = {
957
+ }, Jt = { class: "tiny-sender__content-area" }, Xt = {
857
958
  key: 0,
858
959
  class: "tiny-sender__decorative-content"
859
- }, Ut = {
960
+ }, Zt = {
860
961
  key: 2,
861
962
  class: "tiny-sender__input-field-wrapper"
862
- }, zt = {
963
+ }, Qt = {
863
964
  key: 0,
864
965
  class: "tiny-sender__completion-placeholder"
865
- }, jt = { class: "user-input-mirror" }, Xt = {
966
+ }, Yt = { class: "user-input-mirror" }, en = {
866
967
  key: 0,
867
968
  class: "tiny-sender__tab-hint"
868
- }, Jt = {
969
+ }, tn = {
869
970
  key: 1,
870
971
  class: "tiny-sender__actions-slot"
871
- }, Gt = { class: "tiny-sender__footer-left" }, Qt = { class: "tiny-sender__footer-right" }, Yt = { class: "real-word-length" }, Zt = {
972
+ }, nn = { class: "tiny-sender__footer-left" }, on = { class: "tiny-sender__footer-right" }, sn = { class: "real-word-length" }, an = {
872
973
  key: 1,
873
974
  class: "tiny-sender__toolbar"
874
- }, en = { class: "tiny-sender__buttons-container" }, tn = {
975
+ }, ln = { class: "tiny-sender__buttons-container" }, rn = {
875
976
  key: 1,
876
977
  class: "tiny-sender__footer-slot"
877
- }, _e = /* @__PURE__ */ ge({
978
+ }, un = /* @__PURE__ */ Se({
878
979
  __name: "index",
879
980
  props: {
880
981
  autofocus: { type: Boolean, default: !1 },
@@ -888,6 +989,7 @@ const Bt = { class: "editor-container" }, Le = "​", Be = "​", Et = /* @__PUR
888
989
  modelValue: { default: "" },
889
990
  mode: { default: "single" },
890
991
  maxLength: { default: 1 / 0 },
992
+ buttonGroup: {},
891
993
  submitType: { default: "enter" },
892
994
  speech: { type: [Boolean, Object] },
893
995
  placeholder: { default: "请输入内容..." },
@@ -898,344 +1000,360 @@ const Bt = { class: "editor-container" }, Le = "​", Be = "​", Et = /* @__PUR
898
1000
  templateData: { default: () => [] },
899
1001
  stopText: { default: "" }
900
1002
  },
901
- emits: ["update:modelValue", "update:templateData", "submit", "clear", "speech-start", "speech-end", "speech-interim", "speech-error", "suggestion-select", "focus", "blur", "escape-press", "cancel", "reset-template"],
902
- setup(i, { expose: r, emit: a }) {
903
- const c = i, y = a, w = E(null), n = E(null), p = E(null), C = E(null), h = E(null), _ = D(() => c.templateData && c.templateData.length > 0), { inputValue: g, isComposing: I, clearInput: d } = yt(c, y), L = D(() => !!g.value.trim()), U = D(() => !(c.disabled || c.loading || !L.value || t.value)), {
904
- showSuggestionsPopup: $,
905
- completionPlaceholder: z,
906
- showTabHint: te,
907
- suggestionsListRef: v,
908
- filteredSuggestions: F,
909
- activeSuggestion: V,
910
- isItemHighlighted: W,
911
- updateSuggestionsState: G,
912
- selectSuggestion: de,
913
- acceptCurrentSuggestion: Q,
914
- closeSuggestionsPopup: J,
915
- navigateSuggestions: x,
916
- handleSuggestionItemHover: N,
917
- handleSuggestionItemLeave: M,
918
- highlightSuggestionText: ne
919
- } = _t(c, y, g, I, _), P = E(c.mode), se = E(!1), Ce = () => {
920
- P.value === "single" && (P.value = "multiple", q(() => {
1003
+ emits: ["update:modelValue", "update:templateData", "submit", "clear", "speech-start", "speech-end", "speech-interim", "speech-error", "suggestion-select", "focus", "blur", "escape-press", "cancel", "reset-template", "files-selected"],
1004
+ setup(l, { expose: c, emit: s }) {
1005
+ var D;
1006
+ const i = l, v = s, S = M(null), a = M(null), d = M(null), x = M(null), h = M(null), w = B(() => i.templateData && i.templateData.length > 0), { inputValue: y, isComposing: K, clearInput: W } = Ct(i, v), F = B(() => !!y.value.trim()), P = B(() => {
1007
+ var o, m;
1008
+ return !(i.disabled || i.loading || !F.value || be.value || (m = (o = i.buttonGroup) == null ? void 0 : o.submit) != null && m.disabled);
1009
+ }), {
1010
+ isPopupVisible: T,
1011
+ activeSuggestion: g,
1012
+ activeKeyboardIndex: O,
1013
+ activeMouseIndex: p,
1014
+ autoCompleteText: Q,
1015
+ showTabIndicator: E,
1016
+ syncAutoComplete: q,
1017
+ closePopup: ee,
1018
+ applySuggestion: H,
1019
+ confirmSelection: k,
1020
+ navigateWithKeyboard: j,
1021
+ handleMouseEnter: J,
1022
+ handleMouseLeave: le
1023
+ } = It(
1024
+ B(() => i.suggestions),
1025
+ y,
1026
+ K,
1027
+ w,
1028
+ (o) => v("update:modelValue", o),
1029
+ (o) => v("suggestion-select", o)
1030
+ ), V = M(i.mode), z = M(!1), ve = () => {
1031
+ V.value === "single" && (V.value = "multiple", te(() => {
921
1032
  setTimeout(() => {
922
- const s = document.querySelector(".tiny-textarea__inner");
923
- if (s) {
924
- s.style.whiteSpace = "pre-wrap";
925
- const T = g.value.length;
926
- s.focus(), s.setSelectionRange(T, T);
1033
+ const o = document.querySelector(".tiny-textarea__inner");
1034
+ if (o) {
1035
+ o.style.whiteSpace = "pre-wrap";
1036
+ const m = y.value.length;
1037
+ o.focus(), o.setSelectionRange(m, m);
927
1038
  }
928
1039
  }, 50);
929
1040
  }));
930
- }, ke = (s, T) => {
931
- const B = document.createElement("span");
932
- B.style.visibility = "hidden", B.style.position = "absolute", B.style.whiteSpace = "nowrap", B.style.font = T, B.textContent = s, document.body.appendChild(B);
933
- const me = B.offsetWidth;
934
- return document.body.removeChild(B), me;
935
- }, ie = () => {
936
- var we, Ke, We;
937
- if (c.mode !== "single" || !w.value || se.value || !n.value || !C.value) return;
938
- const s = n.value.querySelector(".tiny-sender__content-area");
939
- if (!s) return;
940
- const T = ((Ke = (we = w.value) == null ? void 0 : we.querySelector) == null ? void 0 : Ke.call(we, ".tiny-input__inner")) || s.querySelector(".tiny-input__inner"), B = h.value || n.value.querySelector(".tiny-sender__buttons-container");
941
- if (!T) {
1041
+ }, se = (o, m) => {
1042
+ const A = document.createElement("span");
1043
+ A.style.visibility = "hidden", A.style.position = "absolute", A.style.whiteSpace = "nowrap", A.style.font = m, A.textContent = o, document.body.appendChild(A);
1044
+ const re = A.offsetWidth;
1045
+ return document.body.removeChild(A), re;
1046
+ }, xe = () => {
1047
+ var Ee, Ue, qe;
1048
+ if (i.mode !== "single" || !S.value || z.value || !a.value || !x.value) return;
1049
+ const o = a.value.querySelector(".tiny-sender__content-area");
1050
+ if (!o) return;
1051
+ const m = ((Ue = (Ee = S.value) == null ? void 0 : Ee.querySelector) == null ? void 0 : Ue.call(Ee, ".tiny-input__inner")) || o.querySelector(".tiny-input__inner"), A = h.value || a.value.querySelector(".tiny-sender__buttons-container");
1052
+ if (!m) {
942
1053
  console.warn("Cannot find input element for overflow check");
943
1054
  return;
944
1055
  }
945
- const me = T.getBoundingClientRect(), $e = B == null ? void 0 : B.getBoundingClientRect();
946
- if (me.width === 0) {
947
- setTimeout(() => ie(), 50);
1056
+ const re = m.getBoundingClientRect(), Me = A == null ? void 0 : A.getBoundingClientRect();
1057
+ if (re.width === 0) {
1058
+ setTimeout(() => xe(), 50);
948
1059
  return;
949
1060
  }
950
- const Xe = window.getComputedStyle(T).font, Je = ke(g.value, Xe), Pe = (We = n.value) == null ? void 0 : We.classList.contains("tr-sender-compact"), Ge = Pe ? 12 : 20, Qe = me.width, Ye = ($e == null ? void 0 : $e.width) || 0, He = Qe - Ye - Ge, Ze = Pe ? 50 : 80;
951
- Je > He && He > Ze && P.value === "single" && (se.value = !0, P.value = "multiple", q(() => {
952
- w.value ? setTimeout(() => {
953
- var Ae;
954
- const Se = (Ae = n.value) == null ? void 0 : Ae.querySelector(".tiny-textarea__inner");
955
- if (Se) {
956
- Se.style.whiteSpace = "pre-wrap";
957
- const Ve = g.value.length;
958
- Se.focus(), Se.setSelectionRange(Ve, Ve);
1061
+ const Ze = window.getComputedStyle(m).font, Qe = se(y.value, Ze), Ne = (qe = a.value) == null ? void 0 : qe.classList.contains("tr-sender-compact"), Ye = Ne ? 12 : 20, et = re.width, tt = (Me == null ? void 0 : Me.width) || 0, He = et - tt - Ye, nt = Ne ? 50 : 80;
1062
+ Qe > He && He > nt && V.value === "single" && (z.value = !0, V.value = "multiple", te(() => {
1063
+ S.value ? setTimeout(() => {
1064
+ var ze;
1065
+ const $e = (ze = a.value) == null ? void 0 : ze.querySelector(".tiny-textarea__inner");
1066
+ if ($e) {
1067
+ $e.style.whiteSpace = "pre-wrap";
1068
+ const Ge = y.value.length;
1069
+ $e.focus(), $e.setSelectionRange(Ge, Ge);
959
1070
  }
960
- se.value = !1;
961
- }, 300) : se.value = !1;
1071
+ z.value = !1;
1072
+ }, 300) : z.value = !1;
962
1073
  }));
963
- }, re = () => {
964
- if (_.value && p.value)
965
- Fe();
966
- else if (w.value)
967
- w.value.focus();
1074
+ }, X = () => {
1075
+ if (w.value && d.value)
1076
+ _();
1077
+ else if (S.value)
1078
+ S.value.focus();
968
1079
  else {
969
- const s = document.querySelector(".tiny-input__inner");
970
- s == null || s.focus();
1080
+ const o = document.querySelector(".tiny-input__inner");
1081
+ o == null || o.focus();
971
1082
  }
972
- }, xe = () => {
973
- if (w.value)
974
- w.value.blur();
1083
+ }, ke = () => {
1084
+ if (S.value)
1085
+ S.value.blur();
975
1086
  else {
976
- const s = document.querySelector(".tiny-input__inner");
977
- s == null || s.blur();
1087
+ const o = document.querySelector(".tiny-input__inner");
1088
+ o == null || o.blur();
978
1089
  }
979
- }, ve = () => {
980
- var s;
981
- y("update:templateData", []), (s = p.value) == null || s.clearHistory(), q(() => {
982
- g.value === "" && (P.value = c.mode || "single"), setTimeout(() => {
983
- re();
1090
+ }, ce = () => {
1091
+ var o;
1092
+ v("update:templateData", []), (o = d.value) == null || o.clearHistory(), te(() => {
1093
+ y.value === "" && (V.value = i.mode || "single"), setTimeout(() => {
1094
+ X();
984
1095
  }, 50);
985
- }), J();
986
- }, ye = () => {
987
- var s;
988
- d(), _.value ? ve() : (s = n.value) == null || s.focus(), q(() => {
989
- g.value === "" && (P.value = c.mode || "single");
990
- }), J();
991
- }, ue = (s) => {
992
- y("update:templateData", s);
1096
+ });
1097
+ }, ge = () => {
1098
+ var o;
1099
+ W(), w.value ? ce() : (o = a.value) == null || o.focus(), te(() => {
1100
+ y.value === "" && (V.value = i.mode || "single");
1101
+ });
1102
+ }, Be = (o) => {
1103
+ const m = (re) => re.type === "text" && re.content === "​";
1104
+ if (o.length === 0 || o.every(m)) {
1105
+ ce();
1106
+ return;
1107
+ }
1108
+ v("update:templateData", o);
993
1109
  };
994
- Z(
995
- () => c.templateData,
1110
+ ne(
1111
+ () => i.templateData,
996
1112
  () => {
997
- g.value = c.templateData.map((s) => s.content).join("");
1113
+ y.value = i.templateData.map((o) => o.content).join("");
998
1114
  },
999
1115
  { deep: !0 }
1000
1116
  );
1001
- const Ie = D(() => {
1002
- const s = typeof c.speech == "object" ? c.speech : {};
1117
+ const De = B(() => {
1118
+ const o = typeof i.speech == "object" ? i.speech : {};
1003
1119
  return {
1004
- ...s,
1005
- onStart: () => y("speech-start"),
1006
- onEnd: (T) => y("speech-end", T),
1007
- onInterim: (T) => y("speech-interim", T),
1008
- onFinal: (T) => {
1009
- if (s.autoReplace)
1010
- g.value = T;
1120
+ ...o,
1121
+ onStart: () => v("speech-start"),
1122
+ onEnd: (m) => v("speech-end", m),
1123
+ onInterim: (m) => v("speech-interim", m),
1124
+ onFinal: (m) => {
1125
+ if (o.autoReplace)
1126
+ y.value = m;
1011
1127
  else {
1012
- const B = g.value;
1013
- B && T && !B.endsWith(" ") && !T.startsWith(" ") && B.length > 0 ? g.value = B + " " + T : g.value = B + T;
1128
+ const A = y.value;
1129
+ A && m && !A.endsWith(" ") && !m.startsWith(" ") && A.length > 0 ? y.value = A + " " + m : y.value = A + m;
1014
1130
  }
1015
- y("speech-end", T);
1131
+ v("speech-end", m);
1016
1132
  },
1017
- onError: (T) => {
1018
- y("speech-error", T);
1133
+ onError: (m) => {
1134
+ v("speech-error", m);
1019
1135
  }
1020
1136
  };
1021
- }), { speechState: oe, start: Re, stop: Oe } = wt(Ie.value), e = () => {
1022
- oe.isRecording ? Oe() : Re();
1023
- }, t = D(() => c.maxLength !== 1 / 0 && g.value.length > c.maxLength), { handleKeyPress: o, triggerSubmit: u } = mt(
1024
- c,
1137
+ }), { speechState: ae, start: de, stop: Ie } = kt(De.value), me = () => {
1138
+ ae.isRecording ? Ie() : de();
1139
+ }, be = B(() => i.maxLength !== 1 / 0 && y.value.length > i.maxLength), { handleKeyPress: fe, triggerSubmit: pe } = xt(
1140
+ i,
1141
+ v,
1025
1142
  y,
1143
+ K,
1144
+ ae,
1145
+ T,
1026
1146
  g,
1027
- I,
1028
- oe,
1029
- $,
1030
- V,
1031
- Q,
1032
- J,
1033
- x,
1034
- e,
1035
- U,
1147
+ k,
1148
+ ee,
1149
+ j,
1150
+ me,
1036
1151
  P,
1037
- Ce,
1038
- _,
1039
- ve
1040
- ), l = (s) => {
1041
- y("focus", s), g.value && F.value.length > 0 && !_.value && ($.value = !0, te.value = !0);
1042
- }, f = (s) => {
1043
- y("blur", s), J();
1044
- }, b = D(() => P.value === "multiple" ? "textarea" : "text"), S = D(
1152
+ V,
1153
+ ve,
1154
+ w,
1155
+ ce
1156
+ ), Te = (o) => {
1157
+ v("focus", o), y.value && !w.value && (T.value = !0);
1158
+ }, Re = (o) => {
1159
+ v("blur", o), ee();
1160
+ }, Ae = B(() => V.value === "multiple" ? "textarea" : "text"), Ke = B(
1045
1161
  () => ({
1046
1162
  display: "flex",
1047
- justifyContent: c.showWordLimit && c.maxLength !== 1 / 0 ? "space-between" : "flex-end",
1163
+ justifyContent: i.showWordLimit && i.maxLength !== 1 / 0 ? "space-between" : "flex-end",
1048
1164
  alignItems: "center"
1049
1165
  })
1050
- ), O = lt(), H = D(() => !!O.decorativeContent), Y = D(() => c.disabled || H.value), Te = D(() => c.loading), Ue = D(() => ({
1051
- "is-disabled": Y.value,
1052
- "is-loading": Te.value,
1053
- "is-auto-switching": se.value
1054
- })), ze = D(() => ({
1055
- width: vt(c.suggestionPopupWidth),
1166
+ ), Oe = dt(), e = B(() => !!Oe.decorativeContent), t = B(() => i.disabled || e.value), n = B(() => i.loading), u = B(() => ({
1167
+ "is-disabled": t.value,
1168
+ "is-loading": n.value,
1169
+ "is-auto-switching": z.value
1170
+ })), r = B(() => ({
1171
+ width: St(i.suggestionPopupWidth),
1056
1172
  maxWidth: "100%"
1057
1173
  // 确保不超出父容器宽度
1058
- })), je = () => {
1059
- I.value = !1, setTimeout(() => {
1060
- I.value = !1, G();
1061
- }, 50);
1174
+ })), f = () => {
1175
+ K.value = !1;
1062
1176
  };
1063
- Z(g, () => {
1064
- q(ie), g.value === "" && c.mode === "single" && (P.value = "single");
1065
- }), Z(
1066
- () => _.value,
1067
- (s) => {
1068
- s && (P.value = "multiple");
1177
+ ne(y, () => {
1178
+ te(xe), y.value === "" && i.mode === "single" && (V.value = "single"), q();
1179
+ }), ne(
1180
+ () => w.value,
1181
+ (o) => {
1182
+ o && (V.value = "multiple");
1069
1183
  }
1070
1184
  );
1071
- const Fe = () => {
1072
- p.value && p.value.activateFirstField();
1073
- };
1074
- return r({
1075
- focus: re,
1076
- blur: xe,
1077
- clear: ye,
1078
- submit: u,
1079
- startSpeech: Re,
1080
- stopSpeech: Oe,
1081
- activateTemplateFirstField: Fe
1082
- }), (s, T) => (m(), R("div", {
1185
+ const _ = () => {
1186
+ d.value && d.value.activateFirstField();
1187
+ }, { accept: $ = "*", multiple: G = !0 } = ((D = i.buttonGroup) == null ? void 0 : D.file) || {}, { open: R, files: L } = ht({ accept: $, multiple: G });
1188
+ return ne(L, (o) => {
1189
+ o && o.length > 0 && v("files-selected", Array.from(o));
1190
+ }), c({
1191
+ focus: X,
1192
+ blur: ke,
1193
+ clear: ge,
1194
+ submit: pe,
1195
+ startSpeech: de,
1196
+ stopSpeech: Ie,
1197
+ activateTemplateFirstField: _
1198
+ }), (o, m) => (b(), I("div", {
1083
1199
  ref_key: "senderRef",
1084
- ref: n,
1085
- class: ee(["tiny-sender", [Ue.value, `theme-${s.theme}`, `mode-${P.value}`]]),
1086
- "data-theme": s.theme
1200
+ ref: a,
1201
+ class: oe(["tiny-sender", [u.value, `theme-${o.theme}`, `mode-${V.value}`]]),
1202
+ "data-theme": o.theme
1087
1203
  }, [
1088
- A("div", At, [
1089
- A("div", {
1204
+ U("div", zt, [
1205
+ U("div", {
1090
1206
  class: "tiny-sender__input-wrapper",
1091
1207
  ref_key: "inputWrapperRef",
1092
- ref: C
1208
+ ref: x
1093
1209
  }, [
1094
- j(Ee, { name: "tiny-sender-slide-down" }, {
1095
- default: pe(() => [
1096
- s.$slots.header ? (m(), R("div", Vt, [
1097
- ae(s.$slots, "header")
1098
- ])) : K("", !0)
1210
+ Z(We, { name: "tiny-sender-slide-down" }, {
1211
+ default: he(() => [
1212
+ o.$slots.header ? (b(), I("div", Gt, [
1213
+ ie(o.$slots, "header", {}, void 0, !0)
1214
+ ])) : N("", !0)
1099
1215
  ]),
1100
1216
  _: 3
1101
1217
  }),
1102
- A("div", {
1103
- class: ee(["tiny-sender__input-row", { "has-prefix": s.$slots.prefix, "has-header": s.$slots.header }])
1218
+ U("div", {
1219
+ class: oe(["tiny-sender__input-row", { "has-prefix": o.$slots.prefix, "has-header": o.$slots.header }])
1104
1220
  }, [
1105
- s.$slots.prefix ? (m(), R("div", Nt, [
1106
- ae(s.$slots, "prefix")
1107
- ])) : K("", !0),
1108
- A("div", Mt, [
1109
- s.$slots.decorativeContent ? (m(), R("div", qt, [
1110
- ae(s.$slots, "decorativeContent")
1111
- ])) : K("", !0),
1112
- _.value ? (m(), X(Dt, {
1221
+ o.$slots.prefix ? (b(), I("div", jt, [
1222
+ ie(o.$slots, "prefix", {}, void 0, !0)
1223
+ ])) : N("", !0),
1224
+ U("div", Jt, [
1225
+ o.$slots.decorativeContent ? (b(), I("div", Xt, [
1226
+ ie(o.$slots, "decorativeContent", {}, void 0, !0)
1227
+ ])) : N("", !0),
1228
+ w.value ? (b(), Y(Ft, {
1113
1229
  key: 1,
1114
1230
  ref_key: "templateEditorRef",
1115
- ref: p,
1116
- "model-value": c.templateData,
1117
- "onUpdate:modelValue": ue,
1118
- onSubmit: k(u)
1119
- }, null, 8, ["model-value", "onSubmit"])) : (m(), R("div", Ut, [
1120
- j(k(rt), {
1231
+ ref: d,
1232
+ "model-value": i.templateData,
1233
+ "onUpdate:modelValue": Be,
1234
+ onSubmit: C(pe)
1235
+ }, null, 8, ["model-value", "onSubmit"])) : (b(), I("div", Zt, [
1236
+ Z(C(pt), {
1121
1237
  ref_key: "inputRef",
1122
- ref: w,
1123
- autosize: s.autoSize,
1124
- type: b.value,
1238
+ ref: S,
1239
+ autosize: o.autoSize,
1240
+ type: Ae.value,
1125
1241
  resize: "none",
1126
- modelValue: k(g),
1127
- "onUpdate:modelValue": T[0] || (T[0] = (B) => it(g) ? g.value = B : null),
1128
- disabled: Y.value,
1129
- placeholder: s.placeholder,
1130
- autofocus: s.autofocus,
1131
- onKeydown: k(o),
1132
- onCompositionstart: T[1] || (T[1] = (B) => I.value = !0),
1133
- onCompositionend: je,
1134
- onFocus: l,
1135
- onBlur: f
1242
+ modelValue: C(y),
1243
+ "onUpdate:modelValue": m[0] || (m[0] = (A) => ft(y) ? y.value = A : null),
1244
+ disabled: t.value,
1245
+ placeholder: o.placeholder,
1246
+ autofocus: o.autofocus,
1247
+ onKeydown: C(fe),
1248
+ onCompositionstart: m[1] || (m[1] = (A) => K.value = !0),
1249
+ onCompositionend: f,
1250
+ onFocus: Te,
1251
+ onBlur: Re
1136
1252
  }, null, 8, ["autosize", "type", "modelValue", "disabled", "placeholder", "autofocus", "onKeydown"]),
1137
- k(z) && !k(I) ? (m(), R("div", zt, [
1138
- A("span", jt, le(k(g)), 1),
1139
- Ne(le(k(z)) + " ", 1),
1140
- k(te) ? (m(), R("div", Xt, "TAB")) : K("", !0)
1141
- ])) : K("", !0)
1253
+ C(Q) && !C(K) ? (b(), I("div", Qt, [
1254
+ U("span", Yt, ue(C(y)), 1),
1255
+ je(ue(C(Q)) + " ", 1),
1256
+ C(E) ? (b(), I("div", en, "TAB")) : N("", !0)
1257
+ ])) : N("", !0)
1142
1258
  ]))
1143
1259
  ]),
1144
- P.value === "single" ? (m(), R("div", Jt, [
1145
- A("div", {
1260
+ V.value === "single" ? (b(), I("div", tn, [
1261
+ U("div", {
1146
1262
  class: "tiny-sender__buttons-container",
1147
1263
  ref_key: "buttonsContainerRef",
1148
1264
  ref: h
1149
1265
  }, [
1150
- ae(s.$slots, "actions"),
1151
- j(qe, {
1152
- "allow-speech": s.allowSpeech,
1153
- "allow-files": s.allowFiles,
1154
- loading: s.loading,
1155
- disabled: Y.value,
1156
- "show-clear": s.clearable,
1157
- "has-content": L.value,
1158
- "speech-status": k(oe),
1159
- "submit-type": s.submitType,
1160
- "is-over-limit": t.value,
1161
- "stop-text": s.stopText,
1162
- onClear: ye,
1163
- onToggleSpeech: e,
1164
- onSubmit: k(u),
1165
- onCancel: T[2] || (T[2] = (B) => s.$emit("cancel"))
1166
- }, null, 8, ["allow-speech", "allow-files", "loading", "disabled", "show-clear", "has-content", "speech-status", "submit-type", "is-over-limit", "stop-text", "onSubmit"])
1266
+ ie(o.$slots, "actions", {}, void 0, !0),
1267
+ Z(Je, {
1268
+ "allow-speech": o.allowSpeech,
1269
+ "allow-files": o.allowFiles,
1270
+ loading: o.loading,
1271
+ disabled: t.value,
1272
+ "show-clear": o.clearable,
1273
+ "has-content": F.value,
1274
+ "speech-status": C(ae),
1275
+ "button-group": o.buttonGroup,
1276
+ "submit-type": o.submitType,
1277
+ "is-over-limit": be.value,
1278
+ "stop-text": o.stopText,
1279
+ onClear: ge,
1280
+ onToggleSpeech: me,
1281
+ onSubmit: C(pe),
1282
+ onCancel: m[2] || (m[2] = (A) => o.$emit("cancel")),
1283
+ onTriggerSelect: C(R)
1284
+ }, null, 8, ["allow-speech", "allow-files", "loading", "disabled", "show-clear", "has-content", "speech-status", "button-group", "submit-type", "is-over-limit", "stop-text", "onSubmit", "onTriggerSelect"])
1167
1285
  ], 512)
1168
- ])) : K("", !0)
1286
+ ])) : N("", !0)
1169
1287
  ], 2),
1170
- j(Ee, { name: "tiny-sender-slide-up" }, {
1171
- default: pe(() => [
1172
- P.value === "multiple" ? (m(), R("div", {
1288
+ Z(We, { name: "tiny-sender-slide-up" }, {
1289
+ default: he(() => [
1290
+ V.value === "multiple" ? (b(), I("div", {
1173
1291
  key: 0,
1174
- style: De(S.value),
1292
+ style: Ve(Ke.value),
1175
1293
  class: "tiny-sender__footer-slot tiny-sender__bottom-row"
1176
1294
  }, [
1177
- A("div", Gt, [
1178
- ae(s.$slots, "footer-left")
1295
+ U("div", nn, [
1296
+ ie(o.$slots, "footer-left", {}, void 0, !0)
1179
1297
  ]),
1180
- A("div", Qt, [
1181
- ae(s.$slots, "footer-right"),
1182
- s.showWordLimit && s.maxLength !== 1 / 0 ? (m(), R("div", {
1298
+ U("div", on, [
1299
+ ie(o.$slots, "footer-right", {}, void 0, !0),
1300
+ o.showWordLimit && o.maxLength !== 1 / 0 ? (b(), I("div", {
1183
1301
  key: 0,
1184
- class: ee(["tiny-sender__word-limit", { "is-over-limit": t.value }])
1302
+ class: oe(["tiny-sender__word-limit", { "is-over-limit": be.value }])
1185
1303
  }, [
1186
- A("span", Yt, le(k(g).length), 1),
1187
- Ne("/" + le(s.maxLength), 1)
1188
- ], 2)) : K("", !0),
1189
- P.value === "multiple" ? (m(), R("div", Zt, [
1190
- A("div", en, [
1191
- j(qe, {
1192
- "allow-speech": s.allowSpeech,
1193
- "allow-files": s.allowFiles,
1194
- loading: s.loading,
1195
- disabled: Y.value,
1196
- "show-clear": s.clearable,
1197
- "has-content": L.value,
1198
- "speech-status": k(oe),
1199
- "submit-type": s.submitType,
1200
- "is-over-limit": t.value,
1201
- "stop-text": s.stopText,
1202
- onClear: ye,
1203
- onToggleSpeech: e,
1204
- onSubmit: k(u),
1205
- onCancel: T[3] || (T[3] = (B) => s.$emit("cancel"))
1206
- }, null, 8, ["allow-speech", "allow-files", "loading", "disabled", "show-clear", "has-content", "speech-status", "submit-type", "is-over-limit", "stop-text", "onSubmit"])
1304
+ U("span", sn, ue(C(y).length), 1),
1305
+ je("/" + ue(o.maxLength), 1)
1306
+ ], 2)) : N("", !0),
1307
+ V.value === "multiple" ? (b(), I("div", an, [
1308
+ U("div", ln, [
1309
+ Z(Je, {
1310
+ "allow-speech": o.allowSpeech,
1311
+ "allow-files": o.allowFiles,
1312
+ loading: o.loading,
1313
+ disabled: t.value,
1314
+ "show-clear": o.clearable,
1315
+ "has-content": F.value,
1316
+ "speech-status": C(ae),
1317
+ "button-group": o.buttonGroup,
1318
+ "submit-type": o.submitType,
1319
+ "is-over-limit": be.value,
1320
+ "stop-text": o.stopText,
1321
+ onClear: ge,
1322
+ onToggleSpeech: me,
1323
+ onSubmit: C(pe),
1324
+ onCancel: m[3] || (m[3] = (A) => o.$emit("cancel")),
1325
+ onTriggerSelect: C(R)
1326
+ }, null, 8, ["allow-speech", "allow-files", "loading", "disabled", "show-clear", "has-content", "speech-status", "button-group", "submit-type", "is-over-limit", "stop-text", "onSubmit", "onTriggerSelect"])
1207
1327
  ])
1208
- ])) : K("", !0)
1328
+ ])) : N("", !0)
1209
1329
  ])
1210
- ], 4)) : s.$slots.footer ? (m(), R("div", tn, [
1211
- ae(s.$slots, "footer")
1212
- ])) : K("", !0)
1330
+ ], 4)) : o.$slots.footer ? (b(), I("div", rn, [
1331
+ ie(o.$slots, "footer", {}, void 0, !0)
1332
+ ])) : N("", !0)
1213
1333
  ]),
1214
1334
  _: 3
1215
1335
  })
1216
1336
  ], 512)
1217
1337
  ]),
1218
- j(Kt, {
1219
- ref_key: "suggestionsListRef",
1220
- ref: v,
1221
- show: k($),
1222
- suggestions: k(F),
1223
- "popup-style": ze.value,
1224
- "is-item-highlighted": k(W),
1225
- "highlight-suggestion-text": k(ne),
1226
- "input-value": k(g),
1227
- onItemHover: k(N),
1228
- onItemLeave: k(M),
1229
- onSelect: k(de)
1230
- }, null, 8, ["show", "suggestions", "popup-style", "is-item-highlighted", "highlight-suggestion-text", "input-value", "onItemHover", "onItemLeave", "onSelect"])
1231
- ], 10, Wt));
1338
+ Z(Ut, {
1339
+ show: C(T),
1340
+ suggestions: o.suggestions,
1341
+ "popup-style": r.value,
1342
+ "active-keyboard-index": C(O),
1343
+ "active-mouse-index": C(p),
1344
+ "input-value": C(y),
1345
+ onSelect: C(H),
1346
+ onMouseEnter: C(J),
1347
+ onMouseLeave: C(le)
1348
+ }, null, 8, ["show", "suggestions", "popup-style", "active-keyboard-index", "active-mouse-index", "input-value", "onSelect", "onMouseEnter", "onMouseLeave"])
1349
+ ], 10, qt));
1232
1350
  }
1233
- });
1234
- _e.name = "TrSender";
1235
- const nn = function(i) {
1236
- i.component(_e.name, _e);
1351
+ }), Le = /* @__PURE__ */ Ce(un, [["__scopeId", "data-v-520fdb31"]]);
1352
+ Le.name = "TrSender";
1353
+ const cn = function(l) {
1354
+ l.component(Le.name, Le);
1237
1355
  };
1238
- _e.install = nn;
1356
+ Le.install = cn;
1239
1357
  export {
1240
- _e as default
1358
+ Le as default
1241
1359
  };