@inpageedit/core 0.14.5 → 0.16.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.
Files changed (104) hide show
  1. package/dist/{ActionButton-CRjo_l3y.js → ActionButton-B6OUgtHx.js} +2 -2
  2. package/dist/{ActionButton-CRjo_l3y.js.map → ActionButton-B6OUgtHx.js.map} +1 -1
  3. package/dist/CheckBox-Dx3r3LQz.js +13 -0
  4. package/dist/CheckBox-Dx3r3LQz.js.map +1 -0
  5. package/dist/IconQuickDiff-BkbxyY-d.js +29 -0
  6. package/dist/IconQuickDiff-BkbxyY-d.js.map +1 -0
  7. package/dist/IconQuickEdit-BiRYADU_.js +68 -0
  8. package/dist/IconQuickEdit-BiRYADU_.js.map +1 -0
  9. package/dist/IconUpload-Bz4BW_nc.js +27 -0
  10. package/dist/IconUpload-Bz4BW_nc.js.map +1 -0
  11. package/dist/InPageEdit.js +20 -0
  12. package/dist/InPageEdit.js.map +1 -0
  13. package/dist/InputBox-D2ZRTMFP.js +42 -0
  14. package/dist/InputBox-D2ZRTMFP.js.map +1 -0
  15. package/dist/PluginImagesUsed-BVyvFA1_.js +90 -0
  16. package/dist/PluginImagesUsed-BVyvFA1_.js.map +1 -0
  17. package/dist/{PluginPrefSync-CbFuuC19.js → PluginPrefSync-CUKkx4Qk.js} +11 -11
  18. package/dist/{PluginPrefSync-CbFuuC19.js.map → PluginPrefSync-CUKkx4Qk.js.map} +1 -1
  19. package/dist/{PluginStoreApp-MbC3G9tu.js → PluginStoreApp-CoOAw1fr.js} +4 -4
  20. package/dist/{PluginStoreApp-MbC3G9tu.js.map → PluginStoreApp-CoOAw1fr.js.map} +1 -1
  21. package/dist/PluginTemplatesUsed-CdjT1wR4.js +76 -0
  22. package/dist/PluginTemplatesUsed-CdjT1wR4.js.map +1 -0
  23. package/dist/{index-CM_6yF2v.js → Promise.withResolvers-C4chhLB1.js} +17 -11
  24. package/dist/Promise.withResolvers-C4chhLB1.js.map +1 -0
  25. package/dist/{RadioBox-0UuxlcWZ.js → RadioBox-B0z9YHQg.js} +2 -2
  26. package/dist/{RadioBox-0UuxlcWZ.js.map → RadioBox-B0z9YHQg.js.map} +1 -1
  27. package/dist/components/index.js +75 -46
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/{BasePlugin-DD7l-5Xw.js → core.js} +28 -10
  30. package/dist/core.js.map +1 -0
  31. package/dist/{index-De25v1_Q.js → index-1tsXE6ax.js} +11 -10
  32. package/dist/index-1tsXE6ax.js.map +1 -0
  33. package/dist/{index-WfXtYVMt.js → index-B32tFyLB.js} +132 -100
  34. package/dist/index-B32tFyLB.js.map +1 -0
  35. package/dist/index-BPTMltVf.js +170 -0
  36. package/dist/index-BPTMltVf.js.map +1 -0
  37. package/dist/{index-DKCZDN-Q.js → index-BYlcHc-O.js} +23 -25
  38. package/dist/index-BYlcHc-O.js.map +1 -0
  39. package/dist/{index-CnR6CqkM.js → index-C4qm_X_A.js} +11 -11
  40. package/dist/{index-CnR6CqkM.js.map → index-C4qm_X_A.js.map} +1 -1
  41. package/dist/index-CAtPo7xJ.js +793 -0
  42. package/dist/index-CAtPo7xJ.js.map +1 -0
  43. package/dist/{index-DensW9qt.js → index-CVCy0wPP.js} +9 -8
  44. package/dist/index-CVCy0wPP.js.map +1 -0
  45. package/dist/index-CYfkwXRf.js +1631 -0
  46. package/dist/index-CYfkwXRf.js.map +1 -0
  47. package/dist/index-DZa9mxN4.js +168 -0
  48. package/dist/index-DZa9mxN4.js.map +1 -0
  49. package/dist/{index-BpQ6VGMz.js → index-Dm2vgYkZ.js} +89 -67
  50. package/dist/index-Dm2vgYkZ.js.map +1 -0
  51. package/dist/{index-BanevHQ2.js → index-NWWeW3tX.js} +87 -84
  52. package/dist/index-NWWeW3tX.js.map +1 -0
  53. package/dist/index-QnWieXQc.js +4932 -0
  54. package/dist/index-QnWieXQc.js.map +1 -0
  55. package/dist/{index-B3jld2sl.js → index-bQ0CVu3l.js} +13 -17
  56. package/dist/{index-B3jld2sl.js.map → index-bQ0CVu3l.js.map} +1 -1
  57. package/dist/index-ygc4AMy4.js +44 -0
  58. package/dist/index-ygc4AMy4.js.map +1 -0
  59. package/dist/{index-DD5CVCfD.js → index-z_qDGCMT.js} +2 -2
  60. package/dist/{index-DD5CVCfD.js.map → index-z_qDGCMT.js.map} +1 -1
  61. package/dist/index.d.ts +411 -163
  62. package/dist/index.js +24 -26
  63. package/dist/index.js.map +1 -1
  64. package/dist/{makeCallable-LDU0xZMJ.js → makeCallable-Cg4zUG4c.js} +2 -2
  65. package/dist/{makeCallable-LDU0xZMJ.js.map → makeCallable-Cg4zUG4c.js.map} +1 -1
  66. package/dist/models/index.js +7 -7
  67. package/dist/models/index.js.map +1 -1
  68. package/dist/plugins/index.js +18 -14
  69. package/dist/plugins/index.js.map +1 -1
  70. package/dist/services/index.js +11 -9
  71. package/dist/style.css +1 -1
  72. package/dist/{vueHooks-l04s8cIl.js → vueHooks-Bs93iP61.js} +1519 -1492
  73. package/dist/vueHooks-Bs93iP61.js.map +1 -0
  74. package/lib/index.umd.js +19 -13
  75. package/lib/index.umd.js.map +1 -1
  76. package/lib/style.css +1 -1
  77. package/package.json +38 -27
  78. package/dist/BasePlugin-DD7l-5Xw.js.map +0 -1
  79. package/dist/IconQuickEdit-CMCQncyj.js +0 -27
  80. package/dist/IconQuickEdit-CMCQncyj.js.map +0 -1
  81. package/dist/InputBox-nQKtiWtZ.js +0 -30
  82. package/dist/InputBox-nQKtiWtZ.js.map +0 -1
  83. package/dist/Preferences-C10tZMl1.js +0 -2701
  84. package/dist/Preferences-C10tZMl1.js.map +0 -1
  85. package/dist/WatchlistAction-BbNAyryN.js +0 -5
  86. package/dist/WatchlistAction-BbNAyryN.js.map +0 -1
  87. package/dist/index-7R2LfhNn.js +0 -220
  88. package/dist/index-7R2LfhNn.js.map +0 -1
  89. package/dist/index-BXNyXvre.js +0 -116
  90. package/dist/index-BXNyXvre.js.map +0 -1
  91. package/dist/index-BanevHQ2.js.map +0 -1
  92. package/dist/index-BjDTD66_.js +0 -491
  93. package/dist/index-BjDTD66_.js.map +0 -1
  94. package/dist/index-BpQ6VGMz.js.map +0 -1
  95. package/dist/index-CG38LlAh.js +0 -46
  96. package/dist/index-CG38LlAh.js.map +0 -1
  97. package/dist/index-CM_6yF2v.js.map +0 -1
  98. package/dist/index-DKCZDN-Q.js.map +0 -1
  99. package/dist/index-De25v1_Q.js.map +0 -1
  100. package/dist/index-DensW9qt.js.map +0 -1
  101. package/dist/index-DxaqNWv4.js +0 -3090
  102. package/dist/index-DxaqNWv4.js.map +0 -1
  103. package/dist/index-WfXtYVMt.js.map +0 -1
  104. package/dist/vueHooks-l04s8cIl.js.map +0 -1
@@ -0,0 +1,793 @@
1
+ import { j as t } from "./Promise.withResolvers-C4chhLB1.js";
2
+ import { R as de, a as ce, S as z } from "./index-QnWieXQc.js";
3
+ import { BasePlugin as pe } from "./core.js";
4
+ import { C as ue } from "./CheckBox-Dx3r3LQz.js";
5
+ import { I as M } from "./IconUpload-Bz4BW_nc.js";
6
+ var fe = Object.create, q = Object.defineProperty, ge = Object.getOwnPropertyDescriptor, L = (d, a) => (a = Symbol[d]) ? a : /* @__PURE__ */ Symbol.for("Symbol." + d), R = (d) => {
7
+ throw TypeError(d);
8
+ }, he = (d, a, s) => a in d ? q(d, a, { enumerable: !0, configurable: !0, writable: !0, value: s }) : d[a] = s, me = (d, a) => q(d, "name", { value: a, configurable: !0 }), ve = (d) => [, , , fe(d?.[L("metadata")] ?? null)], ye = ["class", "method", "getter", "setter", "accessor", "field", "value", "get", "set"], O = (d) => d !== void 0 && typeof d != "function" ? R("Function expected") : d, we = (d, a, s, u, c) => ({ kind: ye[d], name: a, metadata: u, addInitializer: (m) => s._ ? R("Already initialized") : c.push(O(m || null)) }), xe = (d, a) => he(a, L("metadata"), d[3]), be = (d, a, s, u) => {
9
+ for (var c = 0, m = d[a >> 1], g = m && m.length; c < g; c++) m[c].call(s);
10
+ return u;
11
+ }, ke = (d, a, s, u, c, m) => {
12
+ var g, _, F, o = a & 7, w = !1, l = 0, x = d[l] || (d[l] = []), I = o && (c = c.prototype, o < 5 && (o > 3 || !w) && ge(c, s));
13
+ me(c, s);
14
+ for (var U = u.length - 1; U >= 0; U--)
15
+ F = we(o, s, _ = {}, d[3], x), g = (0, u[U])(c, F), _._ = 1, O(g) && (c = g);
16
+ return xe(d, c), I && q(c, s, I), w ? o ^ 4 ? m : I : c;
17
+ }, Q, B, X;
18
+ const _e = ({ $: d }) => /* @__PURE__ */ t("div", { className: "ipe-quickUpload__preview-placeholder is-na", children: /* @__PURE__ */ t("span", { children: [
19
+ /* @__PURE__ */ t(
20
+ "svg",
21
+ {
22
+ xmlns: "http://www.w3.org/2000/svg",
23
+ width: "24",
24
+ height: "24",
25
+ viewBox: "0 0 24 24",
26
+ fill: "currentColor",
27
+ class: "icon icon-tabler icons-tabler-filled icon-tabler-file-unknown",
28
+ children: [
29
+ /* @__PURE__ */ t("path", { stroke: "none", d: "M0 0h24v24H0z", fill: "none" }),
30
+ /* @__PURE__ */ t("path", { d: "M12 2l.117 .007a1 1 0 0 1 .876 .876l.007 .117v4l.005 .15a2 2 0 0 0 1.838 1.844l.157 .006h4l.117 .007a1 1 0 0 1 .876 .876l.007 .117v9a3 3 0 0 1 -2.824 2.995l-.176 .005h-10a3 3 0 0 1 -2.995 -2.824l-.005 -.176v-14a3 3 0 0 1 2.824 -2.995l.176 -.005zm0 15a1 1 0 0 0 -.993 .883l-.007 .127a1 1 0 0 0 1.993 .117l.007 -.127a1 1 0 0 0 -1 -1m1.136 -5.727a2.5 2.5 0 0 0 -3.037 .604a1 1 0 0 0 1.434 1.389l.088 -.09a.5 .5 0 1 1 .379 .824a1 1 0 0 0 -.002 2a2.5 2.5 0 0 0 1.137 -4.727" }),
31
+ /* @__PURE__ */ t("path", { d: "M19 7h-4l-.001 -4.001z" })
32
+ ]
33
+ }
34
+ ),
35
+ /* @__PURE__ */ t("p", { children: d`No preview available` })
36
+ ] }) });
37
+ Q = [de(
38
+ z.object({
39
+ "quickUpload.summary": z.string().description("Default summary of the quick upload").default("[IPE-NEXT] Quick upload")
40
+ })
41
+ ), ce(["modal", "$", "wikiTitle", "wikiFile", "quickPreview", "preferences"])];
42
+ class W extends (X = pe) {
43
+ constructor(a) {
44
+ super(a, {}, "quick-upload"), this.ctx = a;
45
+ }
46
+ async start() {
47
+ this.injectToolbox(), this.ctx.set("quickUpload", this);
48
+ }
49
+ async stop() {
50
+ }
51
+ injectToolbox() {
52
+ const { $: a } = this.ctx;
53
+ this.ctx.inject(["toolbox"], (s) => {
54
+ s.toolbox.addButton({
55
+ id: "quick-upload",
56
+ group: "group2",
57
+ index: 2,
58
+ icon: /* @__PURE__ */ t(M, {}),
59
+ tooltip: () => a`Quick Upload`,
60
+ onClick: (u) => {
61
+ u.preventDefault(), this.showModal();
62
+ }
63
+ }), s.on("dispose", () => {
64
+ s.toolbox.removeButton("quick-upload");
65
+ });
66
+ });
67
+ }
68
+ formatFileSize(a = 0) {
69
+ if (a = Number(a), !Number.isFinite(a) || a < 0) return "0 B";
70
+ const s = ["B", "KB", "MB", "GB", "TB"];
71
+ let u = 0;
72
+ for (; a >= 1024 && u < s.length - 1; )
73
+ a /= 1024, u++;
74
+ return `${new Intl.NumberFormat(void 0, { maximumFractionDigits: 2 }).format(a)} ${s[u]}`;
75
+ }
76
+ isFileAccepted(a, s) {
77
+ if (!s) return !0;
78
+ const u = s.split(",").map((g) => g.trim()).filter(Boolean);
79
+ if (!u.length) return !0;
80
+ const c = a.type || "", m = a.name || "";
81
+ return u.some((g) => {
82
+ if (g.startsWith("."))
83
+ return m.toLowerCase().endsWith(g.toLowerCase());
84
+ if (g.endsWith("/*")) {
85
+ const _ = g.slice(0, -1);
86
+ return c.startsWith(_);
87
+ }
88
+ return c === g;
89
+ });
90
+ }
91
+ getDefaultPreviewPlaceholder() {
92
+ const { $: a } = this.ctx;
93
+ return /* @__PURE__ */ t("div", { className: "ipe-quickUpload__preview-placeholder", children: /* @__PURE__ */ t("span", { children: [
94
+ /* @__PURE__ */ t(M, {}),
95
+ /* @__PURE__ */ t("p", { children: a`You can drag & drop files to this modal` })
96
+ ] }) });
97
+ }
98
+ safeId() {
99
+ return `mu_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`;
100
+ }
101
+ async showModal() {
102
+ const { $: a } = this.ctx;
103
+ let s = !1, u = !1;
104
+ const c = (e, r, i) => {
105
+ this.ctx.modal.notify(e, {
106
+ title: r,
107
+ content: i,
108
+ closeAfter: e === "success" ? 3e3 : 8e3
109
+ });
110
+ }, m = this.ctx.modal.show({
111
+ className: "ipe-quickUpload compact-buttons",
112
+ sizeClass: "mediumToLarge",
113
+ center: !1,
114
+ title: a`Quick Upload`,
115
+ content: a`Quick Upload`,
116
+ outSideClose: !1,
117
+ beforeClose: () => s ? (c("warning", a`Upload in progress`, a`Please pause or wait for it to finish.`), !1) : !0
118
+ }), g = await this.ctx.preferences.get("quickUpload.summary") || "", _ = "image/*,video/*,audio/*,application/pdf", F = 20;
119
+ let o = [], w = null;
120
+ const l = {
121
+ fileInput: null,
122
+ listEl: null,
123
+ previewWrapper: null,
124
+ progressEl: null,
125
+ progressTextEl: null,
126
+ summaryInput: null,
127
+ ignoreWarnings: null
128
+ }, x = (e, r) => {
129
+ o = o.map((i) => i.id === e ? { ...i, ...r } : i);
130
+ }, I = (e) => {
131
+ o = o.filter((r) => r.id !== e), w === e && (w = o[0]?.id ?? null);
132
+ }, U = (e, r) => {
133
+ o = o.map((i) => e.has(i.id) ? r(i) : i);
134
+ }, H = (e) => {
135
+ const r = [], i = (n) => n == null ? "" : String(n);
136
+ if (e instanceof Error) {
137
+ r.push(e.message);
138
+ let n = e;
139
+ for (; n?.cause && (n = n.cause, n instanceof Error); )
140
+ r.push(n.message);
141
+ } else e?.data?.error?.info ? r.push(i(e.data.error.info)) : e?.error?.info ? r.push(i(e.error.info)) : e?.message && r.push(i(e.message));
142
+ return r.filter(Boolean);
143
+ }, D = (e) => {
144
+ let r = H(e);
145
+ r.length === 0 && (r = ["Upload failed with unknown error."]);
146
+ const i = r.join(`
147
+ `), n = i.toLowerCase();
148
+ return n.includes("file is larger") || n.includes("files larger than") || n.includes("maximum upload size") ? { message: `File too large
149
+ ${i}`, retryable: !1 } : n.includes("network") || n.includes("timeout") || n.includes("timed out") ? { message: `Network issue
150
+ ${i}`, retryable: !0 } : { message: i, retryable: !0 };
151
+ }, Y = (e) => e.status === "warning" ? !0 : e.status === "error" ? e.retryable !== !1 : !1, $ = (e, r) => e === "retry" ? r.filter((i) => Y(i)) : e === "resume" ? r.filter(
152
+ (i) => (i.status === "queued" || i.status === "paused") && i.retryable !== !1
153
+ ) : r.filter((i) => i.status === "queued" || i.status === "paused"), G = (e) => {
154
+ const r = new Set(e.map((i) => i.id));
155
+ U(
156
+ r,
157
+ (i) => i.retryable === !1 ? i : { ...i, status: "queued", message: void 0 }
158
+ );
159
+ }, K = () => o.find((e) => e.id === w) || null, J = (e) => {
160
+ w = e, h(), v();
161
+ }, A = () => {
162
+ const e = { ok: 0, warn: 0, err: 0, paused: 0 };
163
+ for (const r of o)
164
+ r.status === "success" ? e.ok++ : r.status === "warning" ? e.warn++ : r.status === "error" ? e.err++ : r.status === "paused" && e.paused++;
165
+ return e;
166
+ }, E = (e, r) => {
167
+ const i = r > 0 ? Math.floor(e / r * 100) : 0;
168
+ l.progressTextEl && (l.progressTextEl.textContent = `${e}/${r} (${i}%)`), l.progressEl && (l.progressEl.style.width = `${Math.max(0, Math.min(100, i))}%`);
169
+ }, V = (e) => (e || "").replace(/\s+/g, " ").trim(), Z = () => {
170
+ o = [], w = null, E(0, 0), l.summaryInput && (l.summaryInput.value = String(g || "")), l.ignoreWarnings && (l.ignoreWarnings.checked = !1), h(), v();
171
+ }, j = (e) => {
172
+ const r = e.filter((n) => this.isFileAccepted(n, String(_)));
173
+ if (!r.length) return;
174
+ const i = r.map((n) => ({
175
+ id: this.safeId(),
176
+ file: n,
177
+ filename: n.name,
178
+ text: "",
179
+ status: "queued",
180
+ retryable: !0
181
+ }));
182
+ o = [...o, ...i], !w && o.length && (w = o[0].id), h(), v();
183
+ }, ee = (e) => {
184
+ const r = {};
185
+ r.filename = V(e.filename || e.file.name), r.file = e.file;
186
+ const i = (l.summaryInput?.value || "").trim() || "";
187
+ return r.comment = i, r.text = e.text || "", l.ignoreWarnings?.checked && (r.ignorewarnings = "1"), r;
188
+ }, te = (e) => {
189
+ switch (e) {
190
+ case "queued":
191
+ return "Queued";
192
+ case "uploading":
193
+ return "Uploading";
194
+ case "success":
195
+ return "Uploaded";
196
+ case "warning":
197
+ return "Warning";
198
+ case "error":
199
+ return "Failed";
200
+ case "paused":
201
+ return "Paused";
202
+ default:
203
+ return e;
204
+ }
205
+ }, h = () => {
206
+ if (l.listEl) {
207
+ if (l.listEl.innerHTML = "", s || E(0, o.length), o.length) {
208
+ const e = /* @__PURE__ */ t(
209
+ "ul",
210
+ {
211
+ style: {
212
+ listStyle: "none",
213
+ padding: 0,
214
+ margin: 0,
215
+ display: "grid",
216
+ gap: "6px"
217
+ }
218
+ }
219
+ );
220
+ o.forEach((r) => {
221
+ const i = r.id === w, n = /* @__PURE__ */ t(
222
+ "li",
223
+ {
224
+ style: {
225
+ border: "1px solid var(--ipe-border-color, rgba(0,0,0,.12))",
226
+ borderRadius: "8px",
227
+ padding: "8px",
228
+ cursor: "pointer",
229
+ background: i ? "rgba(59,130,246,.08)" : "transparent",
230
+ minWidth: 0
231
+ },
232
+ onClick: () => J(r.id),
233
+ children: [
234
+ /* @__PURE__ */ t("div", { style: { display: "flex", alignItems: "center", gap: "10px" }, children: [
235
+ /* @__PURE__ */ t("div", { style: { flex: 1, minWidth: 0, overflow: "hidden" }, children: [
236
+ /* @__PURE__ */ t(
237
+ "div",
238
+ {
239
+ style: {
240
+ textOverflow: "ellipsis",
241
+ overflow: "hidden",
242
+ whiteSpace: "nowrap",
243
+ wordBreak: "break-word",
244
+ fontSize: "13px"
245
+ },
246
+ children: /* @__PURE__ */ t("strong", { style: { fontWeight: 600 }, children: r.filename })
247
+ }
248
+ ),
249
+ /* @__PURE__ */ t("div", { style: { fontSize: "12px", opacity: 0.75 }, children: te(r.status) })
250
+ ] }),
251
+ /* @__PURE__ */ t("div", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: /* @__PURE__ */ t(
252
+ "button",
253
+ {
254
+ type: "button",
255
+ className: "ipe-btn is-text",
256
+ title: "Remove",
257
+ onClick: (y) => {
258
+ y.preventDefault(), y.stopPropagation(), I(r.id), h(), v();
259
+ },
260
+ children: "×"
261
+ }
262
+ ) })
263
+ ] }),
264
+ r.message ? /* @__PURE__ */ t(
265
+ "div",
266
+ {
267
+ style: {
268
+ fontSize: "12px",
269
+ opacity: 0.8,
270
+ marginTop: "4px",
271
+ whiteSpace: "pre-wrap"
272
+ },
273
+ children: r.message
274
+ }
275
+ ) : null
276
+ ]
277
+ }
278
+ );
279
+ e.appendChild(n);
280
+ }), l.listEl.appendChild(e);
281
+ } else {
282
+ l.listEl.appendChild(
283
+ /* @__PURE__ */ t("div", { style: { opacity: 0.75, padding: "8px 0" }, children: /* @__PURE__ */ t("p", { children: "No files selected." }) })
284
+ ), C();
285
+ return;
286
+ }
287
+ C();
288
+ }
289
+ }, v = async () => {
290
+ if (!l.previewWrapper) return;
291
+ l.previewWrapper.innerHTML = "";
292
+ const e = K();
293
+ if (!e) {
294
+ l.previewWrapper.appendChild(this.getDefaultPreviewPlaceholder());
295
+ return;
296
+ }
297
+ const r = e.file, i = /* @__PURE__ */ t("section", { style: { display: "grid", gap: "6px" }, children: [
298
+ /* @__PURE__ */ t(
299
+ "div",
300
+ {
301
+ style: {
302
+ display: "flex",
303
+ alignItems: "baseline",
304
+ justifyContent: "space-between",
305
+ gap: "12px"
306
+ },
307
+ children: [
308
+ /* @__PURE__ */ t("strong", { style: { wordBreak: "break-word" }, children: r.name }),
309
+ /* @__PURE__ */ t("span", { style: { fontSize: "12px", opacity: 0.8 }, children: this.formatFileSize(r.size) })
310
+ ]
311
+ }
312
+ ),
313
+ /* @__PURE__ */ t("div", { style: { display: "flex", gap: "10px", alignItems: "center", flexWrap: "wrap" }, children: [
314
+ /* @__PURE__ */ t("span", { style: { fontSize: "12px", opacity: 0.8 }, children: r.type || a`Unknown type` }),
315
+ e.fileUrl ? /* @__PURE__ */ t(
316
+ "a",
317
+ {
318
+ href: e.fileUrl,
319
+ target: "_blank",
320
+ rel: "noopener noreferrer",
321
+ style: { fontSize: "12px" },
322
+ children: a`Open file page`
323
+ }
324
+ ) : null
325
+ ] })
326
+ ] }), n = await this.ctx.quickPreview.getPreviewElement(r) || /* @__PURE__ */ t(_e, { $: a }), y = /* @__PURE__ */ t("div", { className: "ipe-quickUpload__preview-content", style: { marginTop: "10px" }, children: n }), f = e.status === "success", p = /* @__PURE__ */ t(
327
+ "div",
328
+ {
329
+ className: "ipe-input-box",
330
+ style: {
331
+ marginTop: "8px",
332
+ opacity: f ? 0.55 : 1,
333
+ filter: f ? "grayscale(1)" : void 0,
334
+ pointerEvents: f ? "none" : void 0
335
+ },
336
+ children: [
337
+ /* @__PURE__ */ t("label", { htmlFor: "mu_filename", children: a`Target filename` }),
338
+ /* @__PURE__ */ t(
339
+ "input",
340
+ {
341
+ id: "mu_filename",
342
+ name: "mu_filename",
343
+ type: "text",
344
+ value: e.filename,
345
+ disabled: s || f,
346
+ onInput: (S) => {
347
+ const k = S.target.value;
348
+ x(e.id, { filename: k }), h();
349
+ }
350
+ }
351
+ )
352
+ ]
353
+ }
354
+ ), b = /* @__PURE__ */ t(
355
+ "div",
356
+ {
357
+ className: "ipe-input-box",
358
+ style: {
359
+ marginTop: "8px",
360
+ opacity: f ? 0.55 : 1,
361
+ filter: f ? "grayscale(1)" : void 0,
362
+ pointerEvents: f ? "none" : void 0
363
+ },
364
+ children: [
365
+ /* @__PURE__ */ t("label", { htmlFor: "mu_text", children: "File description" }),
366
+ /* @__PURE__ */ t(
367
+ "textarea",
368
+ {
369
+ id: "mu_text",
370
+ placeholder: `This file is for...
371
+ [[Category:XXX]]`,
372
+ disabled: s || f,
373
+ value: e.text || "",
374
+ onInput: (S) => {
375
+ const k = S.target.value;
376
+ x(e.id, { text: k }), h();
377
+ }
378
+ }
379
+ )
380
+ ]
381
+ }
382
+ );
383
+ l.previewWrapper.appendChild(i), l.previewWrapper.appendChild(y), l.previewWrapper.appendChild(p), l.previewWrapper.appendChild(b);
384
+ }, re = async (e) => {
385
+ x(e.id, { status: "uploading", message: void 0 }), h(), await v();
386
+ const r = ee(e);
387
+ this.ctx.emit("analytics/event", {
388
+ feature: "quick-upload",
389
+ page: r.filename?.toString() || void 0
390
+ });
391
+ try {
392
+ const i = await this.ctx.wikiFile.upload(r);
393
+ if (i.data?.upload?.result === "Success") {
394
+ const n = this.ctx.wikiFile.getFileUrl(`File:${i.data.upload.filename}`);
395
+ x(e.id, {
396
+ status: "success",
397
+ fileUrl: n,
398
+ result: i.data.upload,
399
+ retryable: !0
400
+ }), h(), await v();
401
+ return;
402
+ }
403
+ throw i;
404
+ } catch (i) {
405
+ let n = [];
406
+ if (i?.data?.upload) {
407
+ const p = i.data.upload;
408
+ if (p.result === "Success") {
409
+ const k = p.filename || r.filename, T = this.ctx.wikiFile.getFileUrl(`File:${k}`);
410
+ x(e.id, {
411
+ status: "success",
412
+ fileUrl: T,
413
+ result: p,
414
+ retryable: !0
415
+ }), h(), await v();
416
+ return;
417
+ }
418
+ if (Array.isArray(p.warnings?.duplicate) && p.warnings.duplicate.length > 0) {
419
+ n.push(`Duplicate of: ${p.warnings.duplicate.join(", ")}`), x(e.id, {
420
+ status: "warning",
421
+ message: n.join(`
422
+ `),
423
+ result: p,
424
+ retryable: !0
425
+ }), h(), await v();
426
+ return;
427
+ }
428
+ if (p.warnings?.exists) {
429
+ n.push("A file with the same name already exists."), x(e.id, {
430
+ status: "warning",
431
+ message: n.join(`
432
+ `),
433
+ result: p,
434
+ retryable: !0
435
+ }), h(), await v();
436
+ return;
437
+ }
438
+ const { message: b, retryable: S } = D(i);
439
+ x(e.id, { status: "error", message: b, retryable: S }), h(), await v();
440
+ return;
441
+ }
442
+ const { message: y, retryable: f } = D(i);
443
+ x(e.id, { status: "error", message: y, retryable: f }), h(), await v();
444
+ }
445
+ }, N = async (e = "all") => {
446
+ if (s) return;
447
+ let r = $(e, o);
448
+ if (e === "retry") {
449
+ if (r.length === 0) {
450
+ c(
451
+ "warning",
452
+ "Nothing to retry",
453
+ /* @__PURE__ */ t("div", { children: "There are no retryable failed/warning items." })
454
+ );
455
+ return;
456
+ }
457
+ } else if (e === "resume") {
458
+ if (r.length === 0) {
459
+ c(
460
+ "warning",
461
+ "Nothing to resume",
462
+ /* @__PURE__ */ t("div", { children: "There are no queued paused items to continue." })
463
+ );
464
+ return;
465
+ }
466
+ } else {
467
+ if (o.length === 0) {
468
+ c(
469
+ "warning",
470
+ a`No files selected`,
471
+ /* @__PURE__ */ t("div", { children: a`Please select one or more files.` })
472
+ );
473
+ return;
474
+ }
475
+ if (o.length > F) {
476
+ this.ctx.modal.confirm(
477
+ {
478
+ title: a`Confirm bulk upload`,
479
+ content: /* @__PURE__ */ t("div", { children: [
480
+ a`You are about to upload`,
481
+ " ",
482
+ /* @__PURE__ */ t("strong", { children: o.length }),
483
+ " ",
484
+ a`files at once. Are you sure?`
485
+ ] }),
486
+ center: !0,
487
+ okBtn: { label: a`Upload`, className: "is-primary is-ghost" },
488
+ cancelBtn: { label: a`Cancel`, className: "is-danger is-ghost" }
489
+ },
490
+ (i) => (i && N("all"), !0)
491
+ );
492
+ return;
493
+ }
494
+ }
495
+ e === "retry" && (G(r), h(), await v(), r = $("retry", o)), s = !0, u = !1, C();
496
+ try {
497
+ const i = r.length;
498
+ let n = 0;
499
+ E(0, i);
500
+ for (const S of r) {
501
+ if (u) {
502
+ const T = new Set(r.slice(n).map((P) => P.id));
503
+ U(
504
+ T,
505
+ (P) => P.status === "queued" || P.status === "uploading" ? { ...P, status: "paused", message: "Paused by user", retryable: !0 } : P
506
+ ), h(), await v();
507
+ break;
508
+ }
509
+ const k = o.find((T) => T.id === S.id);
510
+ if (!k) {
511
+ n++, E(n, i);
512
+ continue;
513
+ }
514
+ await re(k), n++, E(n, i);
515
+ }
516
+ const { ok: y, warn: f, err: p, paused: b } = A();
517
+ b > 0 ? c(
518
+ "warning",
519
+ "Upload paused",
520
+ /* @__PURE__ */ t("div", { children: [
521
+ /* @__PURE__ */ t("div", { children: [
522
+ "Uploaded: ",
523
+ /* @__PURE__ */ t("strong", { children: y })
524
+ ] }),
525
+ /* @__PURE__ */ t("div", { children: [
526
+ "Warnings: ",
527
+ /* @__PURE__ */ t("strong", { children: f })
528
+ ] }),
529
+ /* @__PURE__ */ t("div", { children: [
530
+ "Errors: ",
531
+ /* @__PURE__ */ t("strong", { children: p })
532
+ ] }),
533
+ /* @__PURE__ */ t("div", { children: [
534
+ "Paused: ",
535
+ /* @__PURE__ */ t("strong", { children: b })
536
+ ] })
537
+ ] })
538
+ ) : p === 0 && f === 0 ? c(
539
+ "success",
540
+ "Upload completed",
541
+ /* @__PURE__ */ t("div", { children: [
542
+ /* @__PURE__ */ t("strong", { children: "All files uploaded successfully." }),
543
+ /* @__PURE__ */ t("div", { children: [
544
+ "Uploaded: ",
545
+ /* @__PURE__ */ t("strong", { children: y })
546
+ ] })
547
+ ] })
548
+ ) : c(
549
+ "warning",
550
+ "Upload completed with issues",
551
+ /* @__PURE__ */ t("div", { children: [
552
+ /* @__PURE__ */ t("div", { children: [
553
+ "Uploaded: ",
554
+ /* @__PURE__ */ t("strong", { children: y })
555
+ ] }),
556
+ f ? /* @__PURE__ */ t("div", { children: [
557
+ "Warnings: ",
558
+ /* @__PURE__ */ t("strong", { children: f })
559
+ ] }) : null,
560
+ p ? /* @__PURE__ */ t("div", { children: [
561
+ "Errors: ",
562
+ /* @__PURE__ */ t("strong", { children: p })
563
+ ] }) : null
564
+ ] })
565
+ );
566
+ } finally {
567
+ s = !1, C();
568
+ }
569
+ }, ie = (e) => {
570
+ e.preventDefault(), e.stopPropagation(), e.currentTarget?.classList.remove("is-dragover");
571
+ const i = Array.from(e.dataTransfer?.files || []);
572
+ i.length && j(i);
573
+ }, ae = (e) => {
574
+ e.preventDefault(), e.stopPropagation();
575
+ const r = e.currentTarget;
576
+ e.dataTransfer && (e.dataTransfer.dropEffect = "copy"), r?.classList.add("is-dragover");
577
+ }, ne = (e) => {
578
+ e.preventDefault(), e.stopPropagation(), e.currentTarget?.classList.remove("is-dragover");
579
+ }, se = /* @__PURE__ */ t("div", { style: { marginBottom: "10px" }, children: [
580
+ /* @__PURE__ */ t(
581
+ "div",
582
+ {
583
+ style: {
584
+ height: "8px",
585
+ borderRadius: "999px",
586
+ background: "rgba(0,0,0,.08)",
587
+ overflow: "hidden"
588
+ },
589
+ children: /* @__PURE__ */ t(
590
+ "div",
591
+ {
592
+ ref: (e) => {
593
+ l.progressEl = e;
594
+ },
595
+ style: {
596
+ height: "100%",
597
+ width: "0%",
598
+ background: "var(--ipe-primary, #3b82f6)",
599
+ transition: "width .2s ease"
600
+ }
601
+ }
602
+ )
603
+ }
604
+ ),
605
+ /* @__PURE__ */ t(
606
+ "div",
607
+ {
608
+ style: {
609
+ marginTop: "6px",
610
+ display: "flex",
611
+ alignItems: "center",
612
+ justifyContent: "space-between",
613
+ gap: "10px"
614
+ },
615
+ children: /* @__PURE__ */ t(
616
+ "div",
617
+ {
618
+ ref: (e) => {
619
+ l.progressTextEl = e;
620
+ },
621
+ style: { fontSize: "12px", opacity: 0.8 },
622
+ children: "0/0 (0%)"
623
+ }
624
+ )
625
+ }
626
+ )
627
+ ] }), le = /* @__PURE__ */ t("section", { style: { display: "grid", gap: "10px", minWidth: 0 }, children: [
628
+ /* @__PURE__ */ t("div", { className: "ipe-input-box", children: [
629
+ /* @__PURE__ */ t("label", { htmlFor: "mu_files", children: [
630
+ "Files",
631
+ " ",
632
+ o.length > 0 ? /* @__PURE__ */ t("span", { style: { opacity: 0.85 }, children: [
633
+ "(",
634
+ o.length,
635
+ " selected)"
636
+ ] }) : null
637
+ ] }),
638
+ /* @__PURE__ */ t(
639
+ "input",
640
+ {
641
+ id: "mu_files",
642
+ type: "file",
643
+ multiple: !0,
644
+ accept: String(_),
645
+ disabled: s,
646
+ ref: (e) => {
647
+ l.fileInput = e;
648
+ },
649
+ onChange: (e) => {
650
+ const r = Array.from(e.target.files || []);
651
+ j(r), e.target.value = "";
652
+ }
653
+ }
654
+ )
655
+ ] }),
656
+ /* @__PURE__ */ t(
657
+ "div",
658
+ {
659
+ ref: (e) => {
660
+ l.listEl = e;
661
+ }
662
+ }
663
+ )
664
+ ] }), oe = /* @__PURE__ */ t(
665
+ "section",
666
+ {
667
+ className: "ipe-quickUpload__container",
668
+ onDrop: ie,
669
+ onDragOver: ae,
670
+ onDragLeave: ne,
671
+ style: { display: "grid", gap: "12px" },
672
+ children: [
673
+ se,
674
+ /* @__PURE__ */ t(
675
+ "div",
676
+ {
677
+ style: {
678
+ display: "grid",
679
+ gridTemplateColumns: "minmax(0, 40%) minmax(0, 1fr)",
680
+ gap: "12px",
681
+ alignItems: "start",
682
+ minWidth: 0
683
+ },
684
+ children: [
685
+ le,
686
+ /* @__PURE__ */ t("section", { style: { display: "grid", gap: "10px" }, children: /* @__PURE__ */ t(
687
+ "div",
688
+ {
689
+ className: "ipe-quickUpload__preview",
690
+ ref: (e) => {
691
+ l.previewWrapper = e;
692
+ },
693
+ onClick: (e) => {
694
+ const r = e.target;
695
+ r && r.closest("img, .ipe-quickUpload__preview-placeholder") && (e.preventDefault(), l.fileInput?.click());
696
+ },
697
+ style: {
698
+ border: "1px solid var(--ipe-border-color, rgba(0,0,0,.12))",
699
+ borderRadius: "8px",
700
+ padding: "10px",
701
+ minWidth: 0
702
+ }
703
+ }
704
+ ) })
705
+ ]
706
+ }
707
+ ),
708
+ /* @__PURE__ */ t(
709
+ "div",
710
+ {
711
+ style: {
712
+ borderTop: "1px solid var(--ipe-border-color, rgba(0,0,0,.12))",
713
+ paddingTop: "10px",
714
+ display: "grid",
715
+ gap: "10px"
716
+ },
717
+ children: [
718
+ /* @__PURE__ */ t("div", { className: "ipe-input-box", children: [
719
+ /* @__PURE__ */ t("label", { htmlFor: "mu_summary", children: "Summary (applies to all files)" }),
720
+ /* @__PURE__ */ t(
721
+ "textarea",
722
+ {
723
+ id: "mu_summary",
724
+ disabled: s,
725
+ ref: (e) => {
726
+ l.summaryInput = e;
727
+ },
728
+ onInput: () => {
729
+ }
730
+ }
731
+ )
732
+ ] }),
733
+ /* @__PURE__ */ t(
734
+ ue,
735
+ {
736
+ name: "ignorewarnings",
737
+ label: a`Ignore warnings and upload anyway`,
738
+ inputProps: {
739
+ disabled: s,
740
+ ref: (e) => {
741
+ l.ignoreWarnings = e;
742
+ }
743
+ }
744
+ }
745
+ )
746
+ ]
747
+ }
748
+ )
749
+ ]
750
+ }
751
+ );
752
+ m.setContent(oe), l.summaryInput && (l.summaryInput.value = String(g || ""));
753
+ const C = () => {
754
+ const { warn: e, err: r, paused: i } = A(), n = r > 0 || e > 0, y = i > 0;
755
+ let f = a`Upload`, p = () => {
756
+ N("all");
757
+ }, b = "is-primary is-text";
758
+ s ? (f = u ? "Pausing..." : "Pause after current", p = () => {
759
+ u = !0, C();
760
+ }) : y ? (f = "Resume", p = () => {
761
+ N("resume");
762
+ }) : n && (f = "Retry failed/warnings", p = () => {
763
+ N("retry");
764
+ }), m.setButtons([
765
+ {
766
+ label: a`Cancel`,
767
+ className: "is-danger is-text",
768
+ method: () => m.close()
769
+ },
770
+ {
771
+ label: "Reset",
772
+ className: "is-text",
773
+ method: () => {
774
+ s || Z();
775
+ }
776
+ },
777
+ {
778
+ label: f,
779
+ className: b,
780
+ method: p
781
+ }
782
+ ]);
783
+ };
784
+ return h(), await v(), m;
785
+ }
786
+ }
787
+ B = ve(X);
788
+ W = ke(B, 0, "PluginQuickUpload", Q, W);
789
+ be(B, 1, W);
790
+ export {
791
+ W as PluginQuickUpload
792
+ };
793
+ //# sourceMappingURL=index-CAtPo7xJ.js.map