@svar-ui/vue-kanban 2.6.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.
@@ -0,0 +1,1684 @@
1
+ import { computed as C, openBlock as r, createElementBlock as d, normalizeStyle as Y, Fragment as N, renderList as re, normalizeClass as U, createTextVNode as te, toDisplayString as F, createCommentVNode as $, inject as W, unref as o, createElementVNode as R, createBlock as K, resolveDynamicComponent as pe, ref as X, watchEffect as J, onUnmounted as Pe, withDirectives as ke, createVNode as ae, onWatcherCleanup as ve, useSlots as Ke, provide as ce, renderSlot as Me, mergeProps as Re, withCtx as he, reactive as je, useAttrs as He } from "vue";
2
+ import { subscribe as De, writable as Ge, subscribeLater as Te } from "@svar-ui/lib-vue";
3
+ import { EventBusRouter as Ye } from "@svar-ui/lib-state";
4
+ import { getMenuOptions as Xe, KanbanStore as qe, getToolbarItems as Ue } from "@svar-ui/kanban-store";
5
+ import { getMenuOptions as Nn, getToolbarItems as Vn } from "@svar-ui/kanban-store";
6
+ import { setID as fe, locale as Ee, getID as ne, locate as Ne, delegateClick as Je, hotkeys as Qe, locateID as Ze } from "@svar-ui/lib-dom";
7
+ import { Popup as _e, Locale as et, RichSelect as tt, MultiCombo as nt, DatePicker as at, Slider as rt, Willow as Oe, WillowDark as ze } from "@svar-ui/vue-core";
8
+ import { ContextMenu as ot } from "@svar-ui/vue-menu";
9
+ import { en as ge } from "@svar-ui/kanban-locales";
10
+ import { en as ye } from "@svar-ui/core-locales";
11
+ import { registerEditorItem as me, Editor as lt } from "@svar-ui/vue-editor";
12
+ import { registerEditorItem as Wn } from "@svar-ui/vue-editor";
13
+ import { Toolbar as ct } from "@svar-ui/vue-toolbar";
14
+ import { RestDataProvider as jn } from "@svar-ui/kanban-provider";
15
+ const st = "2.6.0", it = {
16
+ version: st
17
+ }, Q = (t, e) => {
18
+ const n = t.__vccOpts || t;
19
+ for (const [s, a] of e)
20
+ n[s] = a;
21
+ return n;
22
+ }, dt = ["title", "aria-label"], ut = ["src"], ft = {
23
+ key: 0,
24
+ class: "wx-avatar wx-more"
25
+ }, mt = /* @__PURE__ */ Object.assign({ name: "KanbanAvatar" }, {
26
+ __name: "Avatar",
27
+ props: {
28
+ value: { default: null },
29
+ size: { default: 24 },
30
+ limit: {}
31
+ },
32
+ setup(t) {
33
+ const e = t, n = C(
34
+ () => Array.isArray(e.value) ? e.value : e.value ? [e.value] : []
35
+ ), s = C(
36
+ () => typeof e.limit == "number" && Number.isFinite(e.limit) ? Math.max(0, Math.floor(e.limit)) : n.value.length
37
+ ), a = C(() => n.value.slice(0, s.value)), p = C(
38
+ () => Math.max(0, n.value.length - a.value.length)
39
+ ), S = C(
40
+ () => Math.max(10, Math.round(e.size * 0.42))
41
+ ), c = C(
42
+ () => `--wx-avatar-size:${e.size}px;--wx-avatar-font-size:${S.value}px;`
43
+ );
44
+ function l(x) {
45
+ return x.label ?? x.name ?? "";
46
+ }
47
+ function b(x) {
48
+ const m = l(x).trim();
49
+ if (!m) return "";
50
+ const u = m.split(/\s+/);
51
+ return (u[0][0] + (u[1]?.[0] ?? "")).toUpperCase().slice(0, 2);
52
+ }
53
+ function M(x) {
54
+ return x.img ?? x.avatar;
55
+ }
56
+ return (x, m) => n.value.length > 0 ? (r(), d("div", {
57
+ key: 0,
58
+ class: "wx-avatars",
59
+ style: Y(c.value)
60
+ }, [
61
+ (r(!0), d(N, null, re(a.value, (u) => (r(), d("span", {
62
+ key: u.id,
63
+ class: U("wx-avatar " + (u.css ?? "")),
64
+ title: l(u) || void 0,
65
+ "aria-label": l(u) || void 0
66
+ }, [
67
+ M(u) ? (r(), d("img", {
68
+ key: 0,
69
+ class: "wx-image",
70
+ src: M(u),
71
+ alt: "",
72
+ loading: "lazy"
73
+ }, null, 8, ut)) : (r(), d(N, { key: 1 }, [
74
+ te(F(b(u)), 1)
75
+ ], 64))
76
+ ], 10, dt))), 128)),
77
+ p.value > 0 ? (r(), d("span", ft, "+" + F(p.value), 1)) : $("", !0)
78
+ ], 4)) : $("", !0);
79
+ }
80
+ }), vt = /* @__PURE__ */ Q(mt, [["__scopeId", "data-v-2884c896"]]);
81
+ function pt() {
82
+ return {
83
+ priority: !0,
84
+ progress: !0,
85
+ description: !0,
86
+ deadline: !0,
87
+ tags: !0
88
+ };
89
+ }
90
+ function Ve() {
91
+ return [
92
+ { id: 1, label: "Low", css: "wx-card-priority-low" },
93
+ { id: 2, label: "Medium", css: "wx-card-priority-medium" },
94
+ { id: 3, label: "High", css: "wx-card-priority-high" }
95
+ ];
96
+ }
97
+ function we(t) {
98
+ return typeof t == "object" && t !== null ? t : void 0;
99
+ }
100
+ function ht(t) {
101
+ const e = t ?? {
102
+ description: !0,
103
+ priority: !0,
104
+ progress: !0,
105
+ deadline: !0,
106
+ tags: !1,
107
+ users: !1
108
+ }, n = [
109
+ { comp: "text", key: "label", label: "Title", required: !0 }
110
+ ];
111
+ if (e.description && n.push({
112
+ comp: "textarea",
113
+ key: "description",
114
+ label: "Description"
115
+ }), e.priority) {
116
+ const p = we(e.priority)?.data;
117
+ n.push({
118
+ comp: "richselect",
119
+ key: "priority",
120
+ label: "Priority",
121
+ options: p ?? Ve()
122
+ });
123
+ }
124
+ e.progress && n.push({
125
+ comp: "slider",
126
+ key: "progress",
127
+ label: "Progress",
128
+ min: 0,
129
+ max: 1,
130
+ step: 0.1
131
+ }), e.deadline && n.push({
132
+ comp: "datepicker",
133
+ key: "deadline",
134
+ label: "Deadline",
135
+ clear: !0
136
+ });
137
+ const s = we(e.tags)?.data;
138
+ s && n.push({
139
+ comp: "multicombo",
140
+ key: "tags",
141
+ label: "Tags",
142
+ options: s
143
+ });
144
+ const a = we(e.users)?.data;
145
+ return a && n.push({
146
+ comp: "multicombo",
147
+ key: "users",
148
+ label: "Users",
149
+ options: a
150
+ }), n;
151
+ }
152
+ const gt = {
153
+ key: 1,
154
+ class: "wx-header"
155
+ }, yt = {
156
+ key: 1,
157
+ class: "wx-deadline"
158
+ }, bt = ["aria-label"], xt = { class: "wx-body" }, Ct = { class: "wx-title-row" }, wt = {
159
+ key: 0,
160
+ class: "wx-title"
161
+ }, kt = ["aria-label"], St = {
162
+ key: 0,
163
+ class: "wx-description"
164
+ }, Mt = {
165
+ key: 1,
166
+ class: "wx-tags"
167
+ }, Dt = {
168
+ key: 2,
169
+ class: "wx-progress-row"
170
+ }, Et = ["aria-label"], Lt = {
171
+ key: 0,
172
+ class: "wx-progress-label"
173
+ }, $t = {
174
+ key: 2,
175
+ class: "wx-footer"
176
+ }, Bt = { class: "wx-counters" }, Ot = ["aria-label"], zt = ["aria-label"], At = /* @__PURE__ */ Object.assign({ name: "KanbanCard" }, {
177
+ __name: "Card",
178
+ props: {
179
+ card: {},
180
+ cardShape: {}
181
+ },
182
+ setup(t) {
183
+ const e = t, n = W("wx-i18n").getGroup("kanban");
184
+ function s(f) {
185
+ return typeof f == "number" ? f : Array.isArray(f) ? f.length : 0;
186
+ }
187
+ function a(f) {
188
+ return typeof f == "object" && f !== null ? f : void 0;
189
+ }
190
+ function p(f) {
191
+ if (typeof f == "string" || typeof f == "number") return f;
192
+ const O = f?.id;
193
+ return typeof O == "string" || typeof O == "number" ? O : null;
194
+ }
195
+ function S(f) {
196
+ const O = p(f);
197
+ return O != null ? String(O) : String(f?.label ?? f?.name ?? "");
198
+ }
199
+ function c(f, O) {
200
+ return f?.find((I) => I.id === O);
201
+ }
202
+ function l(f, O) {
203
+ const I = p(f);
204
+ if (I == null) return null;
205
+ const Z = c(O, I);
206
+ return Z || {
207
+ id: I,
208
+ label: S(f)
209
+ };
210
+ }
211
+ function b(f, O, I) {
212
+ if (!Array.isArray(f)) return [];
213
+ const Z = f.map((H) => l(H, O)).filter((H) => H !== null);
214
+ return typeof I == "number" && Number.isFinite(I) ? Z.slice(0, Math.max(0, I)) : Z;
215
+ }
216
+ function M(f) {
217
+ if (f instanceof Date)
218
+ return Number.isNaN(f.getTime()) ? null : f;
219
+ if (typeof f == "string" || typeof f == "number") {
220
+ const O = new Date(f);
221
+ return Number.isNaN(O.getTime()) ? null : O;
222
+ }
223
+ return null;
224
+ }
225
+ function x(f) {
226
+ return f < 10 ? "0" + f : String(f);
227
+ }
228
+ function m(f, O) {
229
+ const I = M(f);
230
+ return I ? O ? O.replace(/YYYY/g, String(I.getFullYear())).replace(/MM/g, x(I.getMonth() + 1)).replace(/DD/g, x(I.getDate())).replace(/HH/g, x(I.getHours())).replace(/mm/g, x(I.getMinutes())) : I.toLocaleDateString() : null;
231
+ }
232
+ const u = C(
233
+ () => a(e.cardShape.priority)
234
+ ), z = C(() => a(e.cardShape.tags)), k = C(() => a(e.cardShape.users)), h = C(
235
+ () => a(e.cardShape.deadline)
236
+ ), D = C(
237
+ () => a(e.cardShape.progress)
238
+ ), P = C(
239
+ () => Math.round(Math.max(0, Math.min(1, e.card.progress ?? 0)) * 100)
240
+ ), w = C(
241
+ () => e.cardShape.priority ? l(
242
+ e.card.priority,
243
+ u.value?.data ?? Ve()
244
+ ) : null
245
+ ), y = C(
246
+ () => e.cardShape.tags ? b(e.card.tags, z.value?.data, z.value?.max) : []
247
+ ), A = C(
248
+ () => e.cardShape.users ? b(
249
+ e.card.users,
250
+ k.value?.data,
251
+ k.value?.max
252
+ ) : []
253
+ ), V = C(
254
+ () => A.value.map((f) => ({ id: f.id, name: f.label, avatar: f.img }))
255
+ ), j = C(
256
+ () => e.cardShape.deadline ? m(e.card.deadline, h.value?.format) : null
257
+ );
258
+ return (f, O) => (r(), d(N, null, [
259
+ t.card.cover && t.cardShape.cover ? (r(), d("div", {
260
+ key: 0,
261
+ class: "wx-cover",
262
+ style: Y(`background-image: url(${t.card.cover});`)
263
+ }, null, 4)) : $("", !0),
264
+ w.value || j.value ? (r(), d("div", gt, [
265
+ w.value ? (r(), d("span", {
266
+ key: 0,
267
+ class: U("wx-priority " + (w.value.css ?? ""))
268
+ }, F(o(n)(w.value.label)), 3)) : $("", !0),
269
+ j.value ? (r(), d("span", yt, F(j.value), 1)) : $("", !0),
270
+ t.cardShape.menu ? (r(), d("button", {
271
+ key: 2,
272
+ type: "button",
273
+ class: "wx-menu",
274
+ "data-action": "menu",
275
+ "aria-label": o(n)("Card menu")
276
+ }, [...O[0] || (O[0] = [
277
+ R("i", { class: "wx-icon wxi-dots-h" }, null, -1)
278
+ ])], 8, bt)) : $("", !0)
279
+ ])) : $("", !0),
280
+ R("div", xt, [
281
+ R("div", Ct, [
282
+ t.card.label ? (r(), d("div", wt, [
283
+ te(F(t.card.label) + " ", 1),
284
+ t.cardShape.menu && !w.value && !j.value ? (r(), d("button", {
285
+ key: 0,
286
+ type: "button",
287
+ class: "wx-menu",
288
+ "data-action": "menu",
289
+ "aria-label": o(n)("Card menu")
290
+ }, [...O[1] || (O[1] = [
291
+ R("i", { class: "wx-icon wxi-dots-h" }, null, -1)
292
+ ])], 8, kt)) : $("", !0)
293
+ ])) : $("", !0)
294
+ ]),
295
+ t.card.description && t.cardShape.description ? (r(), d("p", St, F(t.card.description), 1)) : $("", !0),
296
+ y.value.length > 0 ? (r(), d("div", Mt, [
297
+ (r(!0), d(N, null, re(y.value, (I) => (r(), d("span", {
298
+ key: I.id,
299
+ class: U("wx-tag " + (I.css ?? ""))
300
+ }, F(I.label), 3))), 128))
301
+ ])) : $("", !0),
302
+ t.card.progress > 0 && t.cardShape.progress ? (r(), d("div", Dt, [
303
+ R("div", {
304
+ class: "wx-progress",
305
+ "aria-label": o(n)("Progress")
306
+ }, [
307
+ R("div", {
308
+ class: "wx-progress-fill",
309
+ style: Y(`width: ${P.value}%;`)
310
+ }, null, 4)
311
+ ], 8, Et),
312
+ D.value?.showLabel ? (r(), d("span", Lt, F(P.value) + "%", 1)) : $("", !0)
313
+ ])) : $("", !0)
314
+ ]),
315
+ A.value.length > 0 || s(t.card.attachments) > 0 && t.cardShape.attachments || s(t.card.comments) > 0 && t.cardShape.comments ? (r(), d("div", $t, [
316
+ V.value.length > 0 ? (r(), K(vt, {
317
+ key: 0,
318
+ value: V.value,
319
+ size: 24
320
+ }, null, 8, ["value"])) : $("", !0),
321
+ R("div", Bt, [
322
+ s(t.card.attachments) > 0 && t.cardShape.attachments ? (r(), d("span", {
323
+ key: 0,
324
+ class: "wx-counter",
325
+ "aria-label": o(n)("Attachments")
326
+ }, [
327
+ O[2] || (O[2] = R("i", { class: "wx-icon wxi-paperclip" }, null, -1)),
328
+ te(" " + F(s(t.card.attachments)), 1)
329
+ ], 8, Ot)) : $("", !0),
330
+ s(t.card.comments) > 0 && t.cardShape.comments ? (r(), d("span", {
331
+ key: 1,
332
+ class: "wx-counter",
333
+ "aria-label": o(n)("Comments")
334
+ }, [
335
+ O[3] || (O[3] = R("i", { class: "wx-icon wxi-message" }, null, -1)),
336
+ te(" " + F(s(t.card.comments)), 1)
337
+ ], 8, zt)) : $("", !0)
338
+ ])
339
+ ])) : $("", !0)
340
+ ], 64));
341
+ }
342
+ }), It = /* @__PURE__ */ Q(At, [["__scopeId", "data-v-52077978"]]), Pt = ["data-id", "aria-label"], Rt = {
343
+ __name: "CardWrapper",
344
+ props: {
345
+ cardContent: {},
346
+ card: {},
347
+ cardShape: {},
348
+ extraCss: { default: "" }
349
+ },
350
+ setup(t) {
351
+ const n = W("wx-i18n").getGroup("kanban");
352
+ return (s, a) => (r(), d("article", {
353
+ class: U("wx-card " + (t.card.css ?? "") + " " + t.extraCss),
354
+ "data-id": t.card.id == null ? void 0 : o(fe)(t.card.id),
355
+ role: "button",
356
+ tabindex: "0",
357
+ "aria-label": t.card.label ?? `${o(n)("Card")} ${t.card.id}`
358
+ }, [
359
+ typeof t.cardContent == "object" ? (r(), K(pe(t.cardContent), {
360
+ key: 0,
361
+ card: t.card,
362
+ cardShape: t.cardShape
363
+ }, null, 8, ["card", "cardShape"])) : (r(), K(It, {
364
+ key: 1,
365
+ card: t.card,
366
+ cardShape: t.cardShape
367
+ }, null, 8, ["card", "cardShape"]))
368
+ ], 10, Pt));
369
+ }
370
+ }, Se = /* @__PURE__ */ Q(Rt, [["__scopeId", "data-v-913e56be"]]), Fe = /* @__PURE__ */ Symbol("wx/kanban-scroll-container"), oe = /* @__PURE__ */ Symbol("kanban-api"), be = /* @__PURE__ */ Symbol("wx/kanban-dnd");
371
+ function Ht(t, e) {
372
+ let n = e;
373
+ function s(a) {
374
+ if (n.readonly || a.target !== t) return;
375
+ const S = We({ label: "New card" }, n.columnAccessor, n.column);
376
+ n.store.exec("add-card", { card: S });
377
+ }
378
+ return t.addEventListener("dblclick", s), {
379
+ update(a) {
380
+ n = a;
381
+ },
382
+ destroy() {
383
+ t.removeEventListener("dblclick", s);
384
+ }
385
+ };
386
+ }
387
+ function We(t, e, n) {
388
+ return typeof e == "string" ? { ...t, [e]: n } : e.set(t, n);
389
+ }
390
+ const Tt = ["data-kanban-column-cards", "data-kanban-render-start", "data-kanban-render-end", "data-kanban-card-count", "data-kanban-after-rendered-before-id"], Nt = ["data-kanban-card-id"], Vt = ["data-kanban-card-id"], Ft = {
391
+ __name: "CardList",
392
+ props: {
393
+ column: {},
394
+ readonly: { type: Boolean, default: !1 },
395
+ cardContent: {},
396
+ cardShape: {},
397
+ contentVisible: { type: Boolean },
398
+ virtualizeCards: { type: Boolean },
399
+ estimatedCardHeight: { type: Number },
400
+ cardOverscan: { type: Number },
401
+ fixedColumnWidth: { type: Boolean },
402
+ cardCss: { type: Function }
403
+ },
404
+ setup(t) {
405
+ const e = t;
406
+ function n(g) {
407
+ return e.cardCss ? e.cardCss(g, e.column) ?? "" : "";
408
+ }
409
+ const s = W(oe), a = W(be), p = W(Fe, void 0), S = C(() => s.getState().columnAccessor), c = X(null), l = X({
410
+ start: 0,
411
+ end: -1,
412
+ top: 0,
413
+ bottom: 0,
414
+ total: 0
415
+ }), b = X(8);
416
+ let M = 0, x = !1;
417
+ const m = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map();
418
+ let z;
419
+ const k = C(
420
+ () => a?.active && a.target?.column === e.column.id
421
+ ), h = C(
422
+ () => e.virtualizeCards ? l.value.start : 0
423
+ ), D = C(
424
+ () => e.virtualizeCards ? l.value.end : e.column.cards.length - 1
425
+ ), P = C(
426
+ () => e.contentVisible ? e.column.cards.slice(
427
+ h.value,
428
+ Math.max(h.value, D.value + 1)
429
+ ) : []
430
+ ), w = C(
431
+ () => l.value.total || f(e.column.cards.length)
432
+ ), y = C(
433
+ () => l.value.start > 0 ? Math.max(0, l.value.top - b.value) : 0
434
+ ), A = C(
435
+ () => l.value.bottom > 0 ? Math.max(0, l.value.bottom - b.value) : 0
436
+ ), V = C(
437
+ () => e.contentVisible && e.virtualizeCards && D.value >= 0 && D.value < e.column.cards.length - 1 ? e.column.cards[D.value + 1]?.id : void 0
438
+ ), j = C(
439
+ () => k.value && (a.target?.beforeId == null || a.target?.beforeId === V.value)
440
+ );
441
+ function f(g) {
442
+ if (!g) return 0;
443
+ const E = Math.max(1, e.estimatedCardHeight || 1);
444
+ return g * E + Math.max(0, g - 1) * b.value;
445
+ }
446
+ function O() {
447
+ if (!c.value) return;
448
+ const g = getComputedStyle(c.value), v = g.getPropertyValue("--wx-card-gap").trim() || g.rowGap || g.gap, T = Number.parseFloat(v);
449
+ b.value = Number.isFinite(T) ? T : 8;
450
+ }
451
+ function I(g) {
452
+ return g.id != null ? m.get(g.id) ?? Math.max(1, e.estimatedCardHeight || 1) : Math.max(1, e.estimatedCardHeight || 1);
453
+ }
454
+ function Z() {
455
+ const g = [0];
456
+ let E = 0;
457
+ for (let v = 0; v < e.column.cards.length; v++)
458
+ E += I(e.column.cards[v]), v < e.column.cards.length - 1 && (E += b.value), g.push(E);
459
+ return { offsets: g, total: E };
460
+ }
461
+ function H(g, E) {
462
+ let v = 0, T = g.length;
463
+ for (; v < T; ) {
464
+ const G = Math.floor((v + T) / 2);
465
+ g[G] <= E ? v = G + 1 : T = G;
466
+ }
467
+ return v;
468
+ }
469
+ function xe() {
470
+ if (!c.value) return;
471
+ if (O(), !e.contentVisible || !e.virtualizeCards) {
472
+ l.value = {
473
+ start: 0,
474
+ end: e.contentVisible ? e.column.cards.length - 1 : -1,
475
+ top: 0,
476
+ bottom: 0,
477
+ total: f(e.column.cards.length)
478
+ };
479
+ return;
480
+ }
481
+ const g = e.column.cards.length;
482
+ if (!g) {
483
+ l.value = { start: 0, end: -1, top: 0, bottom: 0, total: 0 };
484
+ return;
485
+ }
486
+ const { offsets: E, total: v } = Z(), T = p?.() ?? null;
487
+ let G = 0, de = 0;
488
+ if (T) {
489
+ const q = T.getBoundingClientRect(), ue = c.value.getBoundingClientRect();
490
+ G = Math.max(0, q.top - ue.top), de = Math.min(
491
+ v,
492
+ q.bottom - ue.top
493
+ );
494
+ } else
495
+ G = c.value.scrollTop, de = G + c.value.clientHeight;
496
+ const i = Math.max(
497
+ 0,
498
+ Math.floor(e.cardOverscan || 0)
499
+ );
500
+ let L = Math.max(0, H(E, G) - 1), B = Math.max(L, H(E, de) - 1);
501
+ L = Math.max(0, L - i), B = Math.min(g - 1, B + i), l.value = {
502
+ start: L,
503
+ end: B,
504
+ top: E[L],
505
+ bottom: Math.max(0, v - E[B + 1]),
506
+ total: v
507
+ };
508
+ }
509
+ function ee() {
510
+ M || (M = requestAnimationFrame(() => {
511
+ M = 0, xe();
512
+ }));
513
+ }
514
+ function Ce() {
515
+ const g = new Set(e.column.cards.map((E) => E.id));
516
+ for (const E of m.keys())
517
+ g.has(E) || m.delete(E);
518
+ for (; m.size > 1e4; ) {
519
+ const E = m.keys().next().value;
520
+ if (E === void 0) break;
521
+ m.delete(E);
522
+ }
523
+ }
524
+ function se() {
525
+ z || typeof ResizeObserver > "u" || (z = new ResizeObserver((g) => {
526
+ let E = !1;
527
+ for (const v of g) {
528
+ const T = u.get(v.target);
529
+ if (T == null) continue;
530
+ const G = Math.ceil(v.target.offsetHeight);
531
+ G > 0 && m.get(T) !== G && (m.delete(T), m.set(T, G), E = !0);
532
+ }
533
+ E && ee();
534
+ }));
535
+ }
536
+ const le = {
537
+ mounted(g, E) {
538
+ const v = E.value;
539
+ v.id != null && (se(), u.set(g, v.id), z?.observe(g));
540
+ },
541
+ updated(g, E) {
542
+ const v = E.value;
543
+ z?.unobserve(g), v.id != null ? (se(), u.set(g, v.id), z?.observe(g)) : u.delete(g);
544
+ },
545
+ unmounted(g) {
546
+ z?.unobserve(g), u.delete(g);
547
+ }
548
+ }, ie = {
549
+ mounted(g, E) {
550
+ const v = Ht(g, E.value);
551
+ g.__dblclickAction = v;
552
+ },
553
+ updated(g, E) {
554
+ g.__dblclickAction?.update(E.value);
555
+ },
556
+ unmounted(g) {
557
+ g.__dblclickAction?.destroy(), delete g.__dblclickAction;
558
+ }
559
+ };
560
+ return J(() => {
561
+ e.virtualizeCards && !x && m.clear(), x = e.virtualizeCards, Ce(), e.column.cards, e.contentVisible, e.estimatedCardHeight, e.cardOverscan, ee();
562
+ }), J((g) => {
563
+ if (!c.value || !e.contentVisible || !e.virtualizeCards)
564
+ return;
565
+ const E = p?.() ?? c.value, v = () => ee();
566
+ E.addEventListener("scroll", v, { passive: !0 }), window.addEventListener("resize", v), ee(), g(() => {
567
+ E.removeEventListener("scroll", v), window.removeEventListener("resize", v);
568
+ });
569
+ }), J((g) => {
570
+ if (!c.value || !e.contentVisible || !e.virtualizeCards || e.fixedColumnWidth || typeof ResizeObserver > "u")
571
+ return;
572
+ let E = c.value.clientWidth;
573
+ const v = new ResizeObserver(() => {
574
+ const T = c.value?.clientWidth ?? 0;
575
+ T && T !== E && (E = T, m.clear(), ee());
576
+ });
577
+ v.observe(c.value), g(() => v.disconnect());
578
+ }), Pe(() => {
579
+ M && cancelAnimationFrame(M), z?.disconnect();
580
+ }), (g, E) => ke((r(), d("div", {
581
+ class: "wx-column-cards",
582
+ "data-kanban-column-cards": o(fe)(t.column.id),
583
+ "data-kanban-render-start": h.value,
584
+ "data-kanban-render-end": D.value,
585
+ "data-kanban-card-count": t.column.cards.length,
586
+ "data-kanban-after-rendered-before-id": V.value == null ? void 0 : o(fe)(V.value),
587
+ ref_key: "container",
588
+ ref: c
589
+ }, [
590
+ t.contentVisible ? (r(), d(N, { key: 0 }, [
591
+ t.virtualizeCards ? (r(), d(N, { key: 0 }, [
592
+ y.value > 0 ? (r(), d("div", {
593
+ key: 0,
594
+ class: "wx-virtual-spacer",
595
+ style: Y({ height: y.value + "px" })
596
+ }, null, 4)) : $("", !0),
597
+ (r(!0), d(N, null, re(P.value, (v) => (r(), d(N, {
598
+ key: v.id
599
+ }, [
600
+ k.value && o(a).target?.beforeId === v.id ? (r(), d("div", {
601
+ key: 0,
602
+ class: "wx-drop-placeholder",
603
+ style: Y({ height: o(a).height + "px" })
604
+ }, null, 4)) : $("", !0),
605
+ ke((r(), d("div", {
606
+ class: U([
607
+ "wx-card-row",
608
+ v.css ?? "",
609
+ n(v),
610
+ {
611
+ "wx-dragging": o(a)?.active && o(a).cardId === v.id
612
+ }
613
+ ]),
614
+ "data-kanban-card-id": v.id == null ? void 0 : o(fe)(v.id)
615
+ }, [
616
+ ae(Se, {
617
+ card: v,
618
+ cardContent: t.cardContent,
619
+ cardShape: t.cardShape,
620
+ extraCss: n(v)
621
+ }, null, 8, ["card", "cardContent", "cardShape", "extraCss"])
622
+ ], 10, Nt)), [
623
+ [le, v]
624
+ ])
625
+ ], 64))), 128)),
626
+ j.value ? (r(), d("div", {
627
+ key: 1,
628
+ class: "wx-drop-placeholder",
629
+ style: Y({ height: o(a).height + "px" })
630
+ }, null, 4)) : $("", !0),
631
+ A.value > 0 ? (r(), d("div", {
632
+ key: 2,
633
+ class: "wx-virtual-spacer",
634
+ style: Y({ height: A.value + "px" })
635
+ }, null, 4)) : $("", !0)
636
+ ], 64)) : (r(), d(N, { key: 1 }, [
637
+ (r(!0), d(N, null, re(t.column.cards, (v) => (r(), d(N, {
638
+ key: v.id
639
+ }, [
640
+ k.value && o(a).target?.beforeId === v.id ? (r(), d("div", {
641
+ key: 0,
642
+ class: "wx-drop-placeholder",
643
+ style: Y({ height: o(a).height + "px" })
644
+ }, null, 4)) : $("", !0),
645
+ R("div", {
646
+ class: U([
647
+ "wx-card-row",
648
+ v.css ?? "",
649
+ n(v),
650
+ {
651
+ "wx-dragging": o(a)?.active && o(a).cardId === v.id
652
+ }
653
+ ]),
654
+ "data-kanban-card-id": v.id == null ? void 0 : o(fe)(v.id)
655
+ }, [
656
+ ae(Se, {
657
+ card: v,
658
+ cardContent: t.cardContent,
659
+ cardShape: t.cardShape,
660
+ extraCss: n(v)
661
+ }, null, 8, ["card", "cardContent", "cardShape", "extraCss"])
662
+ ], 10, Vt)
663
+ ], 64))), 128)),
664
+ j.value ? (r(), d("div", {
665
+ key: 0,
666
+ class: "wx-drop-placeholder",
667
+ style: Y({ height: o(a).height + "px" })
668
+ }, null, 4)) : $("", !0)
669
+ ], 64))
670
+ ], 64)) : w.value > 0 ? (r(), d("div", {
671
+ key: 1,
672
+ class: "wx-virtual-spacer",
673
+ style: Y({ height: w.value + "px" })
674
+ }, null, 4)) : $("", !0)
675
+ ], 8, Tt)), [
676
+ [ie, {
677
+ store: o(s),
678
+ column: t.column.id,
679
+ columnAccessor: S.value,
680
+ readonly: t.readonly
681
+ }]
682
+ ]);
683
+ }
684
+ }, Wt = /* @__PURE__ */ Q(Ft, [["__scopeId", "data-v-78a4e100"]]), Kt = ["aria-label"], jt = { class: "wx-body" }, Gt = { class: "wx-title" }, Yt = { class: "wx-column-header" }, Xt = ["aria-label"], qt = { class: "wx-title" }, Ut = ["aria-label"], Jt = /* @__PURE__ */ Object.assign({ name: "KanbanColumn" }, {
685
+ __name: "Column",
686
+ props: {
687
+ column: {},
688
+ readonly: { type: Boolean, default: !1 },
689
+ cardContent: {},
690
+ cardShape: {},
691
+ contentVisible: { type: Boolean },
692
+ requestVisible: { type: Boolean },
693
+ virtualizeCards: { type: Boolean },
694
+ estimatedCardHeight: { type: Number },
695
+ cardOverscan: { type: Number },
696
+ fixedColumnWidth: { type: Boolean },
697
+ registerColumn: { type: Function },
698
+ cardCss: { type: Function },
699
+ columnCss: { type: Function }
700
+ },
701
+ setup(t) {
702
+ const e = t, n = C(
703
+ () => e.columnCss ? e.columnCss(e.column.cards, e.column) ?? "" : ""
704
+ ), s = W(oe), a = C(() => s.getState().columnAccessor), p = W("wx-i18n").getGroup("kanban"), S = X(null), c = C(
705
+ () => typeof e.column.cardLimit == "number" || e.column.cardLimit === !0
706
+ ), l = C(
707
+ () => typeof e.column.cardLimit == "number" ? e.column.cardLimit : null
708
+ ), b = C(() => e.column.addCard !== !1 && !e.readonly);
709
+ function M() {
710
+ s.exec("update-column", {
711
+ id: e.column.id,
712
+ column: { collapsed: !e.column.collapsed }
713
+ });
714
+ }
715
+ function x() {
716
+ if (!b.value) return;
717
+ const m = We({}, a.value, e.column.id);
718
+ s.exec("add-card", { card: m, edit: !0 });
719
+ }
720
+ return J(() => {
721
+ if (!e.registerColumn || !S.value) return;
722
+ const m = e.column.id;
723
+ e.registerColumn(m, S.value), ve(() => e.registerColumn(m, null));
724
+ }), (m, u) => (r(), d("section", {
725
+ class: U(["wx-column", t.column.css ?? "", n.value, { "wx-collapsed": t.column.collapsed, "wx-over-limit": t.column.overLimit }]),
726
+ ref_key: "root",
727
+ ref: S
728
+ }, [
729
+ t.column.collapsed ? (r(), d(N, { key: 0 }, [
730
+ R("button", {
731
+ type: "button",
732
+ class: "wx-expand",
733
+ onClick: M,
734
+ "aria-label": o(p)("Expand column")
735
+ }, [...u[0] || (u[0] = [
736
+ R("i", { class: "wx-icon wxi-angle-right" }, null, -1)
737
+ ])], 8, Kt),
738
+ R("div", jt, [
739
+ R("h3", Gt, [
740
+ R("span", null, F(t.column.label), 1),
741
+ c.value ? (r(), d("span", {
742
+ key: 0,
743
+ class: U(["wx-count", { "wx-over": t.column.overLimit }])
744
+ }, [
745
+ te(F(t.column.cards.length), 1),
746
+ l.value != null ? (r(), d(N, { key: 0 }, [
747
+ te("/" + F(l.value), 1)
748
+ ], 64)) : $("", !0)
749
+ ], 2)) : $("", !0)
750
+ ])
751
+ ])
752
+ ], 64)) : (r(), d(N, { key: 1 }, [
753
+ R("header", Yt, [
754
+ R("button", {
755
+ type: "button",
756
+ class: "wx-toggle",
757
+ onClick: M,
758
+ "aria-label": o(p)("Collapse column")
759
+ }, [...u[1] || (u[1] = [
760
+ R("i", { class: "wx-icon wxi-angle-left" }, null, -1)
761
+ ])], 8, Xt),
762
+ R("h3", qt, F(t.column.label), 1),
763
+ c.value ? (r(), d("span", {
764
+ key: 0,
765
+ class: U(["wx-count", { "wx-over": t.column.overLimit }])
766
+ }, [
767
+ te(F(t.column.cards.length), 1),
768
+ l.value != null ? (r(), d(N, { key: 0 }, [
769
+ te("/" + F(l.value), 1)
770
+ ], 64)) : $("", !0)
771
+ ], 2)) : $("", !0),
772
+ b.value ? (r(), d("button", {
773
+ key: 1,
774
+ type: "button",
775
+ class: "wx-add",
776
+ onClick: x,
777
+ "aria-label": o(p)("Add card to") + " " + t.column.label
778
+ }, [...u[2] || (u[2] = [
779
+ R("i", { class: "wx-icon wxi-plus" }, null, -1)
780
+ ])], 8, Ut)) : $("", !0)
781
+ ]),
782
+ ae(Wt, {
783
+ column: t.column,
784
+ readonly: t.readonly,
785
+ cardContent: t.cardContent,
786
+ cardShape: t.cardShape,
787
+ contentVisible: t.contentVisible,
788
+ virtualizeCards: t.virtualizeCards,
789
+ estimatedCardHeight: t.estimatedCardHeight,
790
+ cardOverscan: t.cardOverscan,
791
+ fixedColumnWidth: t.fixedColumnWidth,
792
+ cardCss: t.cardCss
793
+ }, null, 8, ["column", "readonly", "cardContent", "cardShape", "contentVisible", "virtualizeCards", "estimatedCardHeight", "cardOverscan", "fixedColumnWidth", "cardCss"])
794
+ ], 64))
795
+ ], 2));
796
+ }
797
+ }), Qt = /* @__PURE__ */ Q(Jt, [["__scopeId", "data-v-7374cd1e"]]), Zt = ["oncontextmenu"], _t = {
798
+ __name: "ContextMenu",
799
+ props: {
800
+ options: { default: () => [] },
801
+ api: { default: null },
802
+ resolver: { default: null },
803
+ filter: { default: null },
804
+ at: { default: "point" },
805
+ onclick: { type: Function },
806
+ css: {}
807
+ },
808
+ setup(t, { expose: e }) {
809
+ const n = t, s = Ke(), a = W(oe, void 0);
810
+ function p(w) {
811
+ if (typeof w == "string" && w.startsWith(":")) {
812
+ const y = document.createElement("div");
813
+ return y.setAttribute("data-id", w), ne(y);
814
+ }
815
+ return typeof w == "string" || typeof w == "number" ? w : null;
816
+ }
817
+ function S(w) {
818
+ const y = p(w);
819
+ if (y != null)
820
+ return n.api ? n.api.getCards().find((A) => A.id === y) : a?.getState().cards.getById(y);
821
+ }
822
+ function c(w, y) {
823
+ (n.api ?? a)?.exec(w, y);
824
+ }
825
+ let l = null, b = W("wx-i18n", void 0);
826
+ b || (b = Ee({ ...ge, ...ye }), ce("wx-i18n", b));
827
+ const M = b.getGroup("kanban");
828
+ function x(w) {
829
+ return w.map((y) => (y = { ...y }, y.text && (y.text = M(y.text)), y.subtext && (y.subtext = M(y.subtext)), y.data && (y.data = x(y.data)), y));
830
+ }
831
+ function m() {
832
+ const w = n.options.length ? n.options : Xe();
833
+ return x(w);
834
+ }
835
+ function u(w, y) {
836
+ if (w == null) return null;
837
+ const A = S(w);
838
+ return !A || n.resolver && !n.resolver(A, y) ? null : (l = A.id, A);
839
+ }
840
+ function z(w) {
841
+ const y = w?.action;
842
+ if (!y) return;
843
+ const A = typeof l == "object" ? l.id : l;
844
+ y.id === "edit-card" ? c("select-card", { id: A }) : y.id === "duplicate-card" ? c("duplicate-card", { id: A }) : y.id === "delete-card" && c("delete-card", { id: A }), n.onclick?.(w);
845
+ }
846
+ function k(w, y) {
847
+ return n.filter ? n.filter(w, y) : !0;
848
+ }
849
+ const h = C(() => m()), D = X(null);
850
+ function P(w, y) {
851
+ D.value.show(w, y);
852
+ }
853
+ return e({ show: P }), (w, y) => (r(), d(N, null, [
854
+ ae(o(ot), {
855
+ filter: k,
856
+ options: h.value,
857
+ dataKey: "id",
858
+ resolver: u,
859
+ onclick: z,
860
+ css: t.css,
861
+ at: t.at,
862
+ ref_key: "menu",
863
+ ref: D
864
+ }, null, 8, ["options", "css", "at"]),
865
+ o(s).default ? (r(), d("span", {
866
+ key: 0,
867
+ oncontextmenu: D.value?.show,
868
+ "data-menu-ignore": "true"
869
+ }, [
870
+ Me(w.$slots, "default", {}, void 0, !0)
871
+ ], 8, Zt)) : $("", !0)
872
+ ], 64));
873
+ }
874
+ }, en = /* @__PURE__ */ Q(_t, [["__scopeId", "data-v-9bac5571"]]), tn = {
875
+ __name: "DragGhost",
876
+ props: {
877
+ root: {},
878
+ cardContent: {},
879
+ cardShape: {}
880
+ },
881
+ setup(t) {
882
+ const e = t, n = W(be), s = W(oe), a = C(() => !n?.active || n.cardId == null ? null : s.getState().cards.getById(n.cardId) ?? null), p = C(() => {
883
+ if (!n) return { x: 0, y: 0 };
884
+ let S = n.pointer.x - n.offset.x, c = n.pointer.y - n.offset.y;
885
+ if (e.root && n.active) {
886
+ const l = e.root.getBoundingClientRect();
887
+ S = Math.max(l.left, Math.min(S, l.right - n.width)), c = Math.max(l.top, Math.min(c, l.bottom - n.height));
888
+ }
889
+ return { x: S, y: c };
890
+ });
891
+ return (S, c) => o(n)?.active && a.value ? (r(), d("div", {
892
+ key: 0,
893
+ class: "wx-ghost",
894
+ style: Y({
895
+ width: o(n).width + "px",
896
+ height: o(n).height + "px",
897
+ transform: "translate(" + p.value.x + "px, " + p.value.y + "px)"
898
+ })
899
+ }, [
900
+ ae(Se, {
901
+ card: a.value,
902
+ cardContent: t.cardContent,
903
+ cardShape: t.cardShape
904
+ }, null, 8, ["card", "cardContent", "cardShape"])
905
+ ], 4)) : $("", !0);
906
+ }
907
+ }, nn = /* @__PURE__ */ Q(tn, [["__scopeId", "data-v-40eca5a6"]]), Ae = 4;
908
+ function an(t, e) {
909
+ let n = e, s = 0, a = 0, p = !1, S = !1, c = null;
910
+ function l(k) {
911
+ if (k.button !== 0 || n.readonly || !n.dnd || !n.store)
912
+ return;
913
+ const h = k.target, D = h ? h.closest("[data-kanban-card-id]") : null;
914
+ if (!D || !t.contains(D)) return;
915
+ const P = D.closest("[data-kanban-column-cards]");
916
+ if (!P) return;
917
+ const w = ne(D, "data-kanban-card-id"), y = ne(P, "data-kanban-column-cards");
918
+ if (w == null || y == null) return;
919
+ const { viewData: A } = n.store.getState(), V = A.columns.find((f) => f.id === y), j = V?.cards.find((f) => f.id === w);
920
+ !V || !j || j.id == null || (c = {
921
+ dnd: n.dnd,
922
+ store: n.store,
923
+ id: j.id,
924
+ column: V.id,
925
+ cardEl: D
926
+ }, p = !0, S = !1, s = k.clientX, a = k.clientY, window.addEventListener("pointermove", b), window.addEventListener("pointerup", M), window.addEventListener("keydown", x));
927
+ }
928
+ function b(k) {
929
+ if (!(!p || !c)) {
930
+ if (n.readonly) {
931
+ z();
932
+ return;
933
+ }
934
+ if (!S) {
935
+ const h = k.clientX - s, D = k.clientY - a;
936
+ if (h * h + D * D < Ae * Ae) return;
937
+ m(k, c);
938
+ }
939
+ c.dnd.pointer = { x: k.clientX, y: k.clientY }, rn(k.clientX, k.clientY, c);
940
+ }
941
+ }
942
+ function M() {
943
+ u(), S && c && (on(c), c.dnd.reset(), document.body.style.userSelect = "", ln()), p = !1, S = !1, c = null;
944
+ }
945
+ function x(k) {
946
+ k.key !== "Escape" || !S || !c || z();
947
+ }
948
+ function m(k, h) {
949
+ const D = h.cardEl.getBoundingClientRect();
950
+ h.dnd.width = D.width, h.dnd.height = D.height, h.dnd.offset = { x: s - D.left, y: a - D.top }, h.dnd.pointer = { x: k.clientX, y: k.clientY }, h.dnd.cardId = h.id, h.dnd.sourceColumn = h.column, h.dnd.target = { column: h.column, beforeId: null }, h.dnd.active = !0, document.body.style.userSelect = "none", S = !0;
951
+ }
952
+ function u() {
953
+ window.removeEventListener("pointermove", b), window.removeEventListener("pointerup", M), window.removeEventListener("keydown", x);
954
+ }
955
+ function z() {
956
+ u(), S && c && (c.dnd.reset(), document.body.style.userSelect = ""), p = !1, S = !1, c = null;
957
+ }
958
+ return t.addEventListener("pointerdown", l), {
959
+ update(k) {
960
+ n = k, n.readonly && (p || S) && z();
961
+ },
962
+ destroy() {
963
+ t.removeEventListener("pointerdown", l), z();
964
+ }
965
+ };
966
+ }
967
+ function rn(t, e, n) {
968
+ const s = document.elementFromPoint(t, e), a = s ? s.closest("[data-kanban-column-cards]") : null;
969
+ if (!a)
970
+ return;
971
+ const p = ne(a, "data-kanban-column-cards");
972
+ if (p == null) return;
973
+ const c = n.store.getState().viewData.columns.find((m) => m.id === p);
974
+ if (!c) return;
975
+ const l = Array.from(
976
+ a.querySelectorAll("[data-kanban-card-id]")
977
+ ).filter((m) => ne(m, "data-kanban-card-id") !== n.id);
978
+ let b = null;
979
+ for (const m of l) {
980
+ const u = m.getBoundingClientRect();
981
+ if (e < u.top + u.height / 2) {
982
+ b = Ie(
983
+ c,
984
+ ne(m, "data-kanban-card-id")
985
+ );
986
+ break;
987
+ }
988
+ }
989
+ b == null && (b = Ie(
990
+ c,
991
+ ne(a, "data-kanban-after-rendered-before-id")
992
+ ));
993
+ const M = { column: c.id, beforeId: b }, x = n.dnd.target;
994
+ (!x || x.column !== M.column || x.beforeId !== M.beforeId) && (n.dnd.target = M);
995
+ }
996
+ function Ie(t, e) {
997
+ return e == null ? null : t.cards.find((n) => n.id === e)?.id ?? null;
998
+ }
999
+ function on(t) {
1000
+ const e = t.dnd.target;
1001
+ if (!e) return;
1002
+ const n = {
1003
+ id: t.id,
1004
+ column: e.column
1005
+ };
1006
+ e.beforeId != null && (n.before = e.beforeId), t.store.exec("move-card", n);
1007
+ }
1008
+ function ln() {
1009
+ const t = (e) => {
1010
+ e.preventDefault(), e.stopPropagation(), window.removeEventListener("click", t, !0);
1011
+ };
1012
+ window.addEventListener("click", t, !0), setTimeout(() => window.removeEventListener("click", t, !0), 0);
1013
+ }
1014
+ function cn(t, e = "right-start") {
1015
+ let n = null;
1016
+ const s = X(null), a = X({ x: 0, y: 0 }), p = X(null);
1017
+ function S(M) {
1018
+ if (a.value = { x: M.clientX, y: M.clientY }, p.value || !M.target) return;
1019
+ const x = Ne(M.target) ?? null;
1020
+ if (x === n) return;
1021
+ if (n = x, !x) {
1022
+ s.value = null;
1023
+ return;
1024
+ }
1025
+ const m = t(ne(x));
1026
+ s.value = m ? { card: m } : null;
1027
+ }
1028
+ function c() {
1029
+ n = null, s.value = null;
1030
+ }
1031
+ function l(M) {
1032
+ if (s.value = null, n = null, !M) {
1033
+ p.value = null;
1034
+ return;
1035
+ }
1036
+ const x = t(M.cardId);
1037
+ x && (p.value = {
1038
+ card: x,
1039
+ element: M.element,
1040
+ at: e
1041
+ });
1042
+ }
1043
+ function b() {
1044
+ p.value = null;
1045
+ }
1046
+ return {
1047
+ get tooltipState() {
1048
+ return s.value;
1049
+ },
1050
+ get mousePos() {
1051
+ return a.value;
1052
+ },
1053
+ get cardPopupState() {
1054
+ return p.value;
1055
+ },
1056
+ handleTooltipMove: S,
1057
+ handleTooltipLeave: c,
1058
+ handleCardPopup: l,
1059
+ hideCardPopup: b
1060
+ };
1061
+ }
1062
+ const sn = ["aria-label"], dn = { class: "wx-content" }, un = ["href"], fn = /* @__PURE__ */ Object.assign({ name: "KanbanLayout" }, {
1063
+ __name: "Layout",
1064
+ props: {
1065
+ cardShape: {},
1066
+ readonly: { type: Boolean, default: !1 },
1067
+ render: {},
1068
+ cardContent: {},
1069
+ tooltip: {},
1070
+ cardPopup: {},
1071
+ cardCss: { type: Function },
1072
+ columnCss: { type: Function }
1073
+ },
1074
+ setup(t) {
1075
+ const e = t, n = C(() => e.render?.columnScroll ?? !0), s = C(() => e.render?.fixedColumnWidth ?? !0), a = C(() => e.render?.virtualizeCards ?? !1), p = C(
1076
+ () => e.render?.virtualizeColumns ?? !1
1077
+ ), S = C(
1078
+ () => e.render?.estimatedCardHeight ?? 80
1079
+ ), c = C(() => e.render?.cardOverscan ?? 5), l = C(() => e.render?.columnOverscan ?? 1), b = W(oe), M = De(b.getReactiveState().viewData), x = b.getBrandmark(), m = W("wx-i18n").getGroup("kanban"), u = W(be), z = X(null), k = X(null), h = X(/* @__PURE__ */ new Set());
1080
+ let D = 0;
1081
+ const P = /* @__PURE__ */ new Map();
1082
+ ce(
1083
+ Fe,
1084
+ () => n.value ? null : k.value ?? null
1085
+ );
1086
+ function w(i, L) {
1087
+ if (i.size !== L.size) return !1;
1088
+ for (const B of i)
1089
+ if (!L.has(B)) return !1;
1090
+ return !0;
1091
+ }
1092
+ function y(i) {
1093
+ w(h.value, i) || (h.value = i);
1094
+ }
1095
+ function A() {
1096
+ if (!p.value || !k.value) {
1097
+ y(/* @__PURE__ */ new Set());
1098
+ return;
1099
+ }
1100
+ const i = M.value.columns;
1101
+ if (!i.length) {
1102
+ y(/* @__PURE__ */ new Set());
1103
+ return;
1104
+ }
1105
+ const L = k.value.getBoundingClientRect();
1106
+ let B = -1, q = -1;
1107
+ for (let _ = 0; _ < i.length; _++) {
1108
+ const $e = P.get(i[_].id);
1109
+ if (!$e) continue;
1110
+ const Be = $e.getBoundingClientRect();
1111
+ Be.right >= L.left && Be.left <= L.right && (B === -1 && (B = _), q = _);
1112
+ }
1113
+ if (B === -1 || q === -1) {
1114
+ y(/* @__PURE__ */ new Set());
1115
+ return;
1116
+ }
1117
+ const ue = Math.max(0, Math.floor(l.value || 0));
1118
+ B = Math.max(0, B - ue), q = Math.min(i.length - 1, q + ue);
1119
+ const Le = /* @__PURE__ */ new Set();
1120
+ for (let _ = B; _ <= q; _++)
1121
+ Le.add(i[_].id);
1122
+ y(Le);
1123
+ }
1124
+ function V() {
1125
+ D || (D = requestAnimationFrame(() => {
1126
+ D = 0, A();
1127
+ }));
1128
+ }
1129
+ function j(i, L) {
1130
+ L ? P.set(i, L) : P.delete(i), V();
1131
+ }
1132
+ function f() {
1133
+ k.value && k.value.style.setProperty(
1134
+ "--wx-kanban-scroll-height",
1135
+ `${k.value.clientHeight}px`
1136
+ );
1137
+ }
1138
+ function O(i) {
1139
+ return !p.value || h.value.size === 0 || h.value.has(i);
1140
+ }
1141
+ function I(i) {
1142
+ return !p.value || h.value.has(i);
1143
+ }
1144
+ function Z(i) {
1145
+ return b.getState().cards.getById(i);
1146
+ }
1147
+ const H = cn(Z, "right-start"), xe = { trackScroll: !0 };
1148
+ function ee(i) {
1149
+ !e.readonly && i != null && b.exec("select-card", { id: i });
1150
+ }
1151
+ function Ce(i, L) {
1152
+ if (!(e.readonly || u?.active)) {
1153
+ if (e.cardPopup && i != null) {
1154
+ const B = L?.target, q = B ? Ne(B) : null;
1155
+ if (q) {
1156
+ H.handleCardPopup({ cardId: i, element: q });
1157
+ return;
1158
+ }
1159
+ }
1160
+ ee(i);
1161
+ }
1162
+ }
1163
+ function se(i) {
1164
+ if (e.readonly) return;
1165
+ i?.preventDefault();
1166
+ const L = document.activeElement, B = L ? Ze(L) : null;
1167
+ if (e.cardPopup && B != null && L) {
1168
+ H.handleCardPopup({
1169
+ cardId: B,
1170
+ element: L
1171
+ });
1172
+ return;
1173
+ }
1174
+ ee(B);
1175
+ }
1176
+ const le = C(
1177
+ () => e.cardShape?.menu ? typeof e.cardShape.menu == "object" ? e.cardShape.menu : {} : null
1178
+ ), ie = X(null);
1179
+ function g(i, L) {
1180
+ e.readonly || i == null || !ie.value || (L.stopPropagation(), ie.value.show(L, i));
1181
+ }
1182
+ function E(i) {
1183
+ return Je(i, {
1184
+ click: Ce,
1185
+ menu: g
1186
+ });
1187
+ }
1188
+ function v(i) {
1189
+ return { destroy: Qe.subscribe((B) => {
1190
+ B.configure(
1191
+ {
1192
+ enter: se,
1193
+ space: se
1194
+ },
1195
+ i
1196
+ );
1197
+ }) };
1198
+ }
1199
+ const T = {
1200
+ mounted(i, L) {
1201
+ const B = an(i, L.value);
1202
+ i._cardDrag = B;
1203
+ },
1204
+ updated(i, L) {
1205
+ i._cardDrag?.update(L.value);
1206
+ },
1207
+ unmounted(i) {
1208
+ i._cardDrag?.destroy();
1209
+ }
1210
+ }, G = {
1211
+ mounted(i) {
1212
+ const L = E(i);
1213
+ i._delegateCardClick = L;
1214
+ },
1215
+ unmounted(i) {
1216
+ i._delegateCardClick?.destroy();
1217
+ }
1218
+ }, de = {
1219
+ mounted(i) {
1220
+ const L = v(i);
1221
+ i._cardHotkeys = L;
1222
+ },
1223
+ unmounted(i) {
1224
+ i._cardHotkeys?.destroy();
1225
+ }
1226
+ };
1227
+ return J(() => {
1228
+ p.value, l.value, s.value, M.value.columns, V();
1229
+ }), J(() => {
1230
+ if (!k.value || !p.value || typeof ResizeObserver > "u")
1231
+ return;
1232
+ const i = new ResizeObserver(() => V());
1233
+ i.observe(k.value), ve(() => i.disconnect());
1234
+ }), J(() => {
1235
+ if (!k.value) return;
1236
+ if (f(), window.addEventListener("resize", f), typeof ResizeObserver > "u") {
1237
+ ve(
1238
+ () => window.removeEventListener("resize", f)
1239
+ );
1240
+ return;
1241
+ }
1242
+ const i = new ResizeObserver(f);
1243
+ i.observe(k.value), ve(() => {
1244
+ i.disconnect(), window.removeEventListener("resize", f);
1245
+ });
1246
+ }), Pe(() => {
1247
+ D && cancelAnimationFrame(D);
1248
+ }), (i, L) => (r(), d("div", {
1249
+ class: "wx-kanban",
1250
+ role: "region",
1251
+ "aria-label": o(m)("Kanban board"),
1252
+ ref_key: "root",
1253
+ ref: z
1254
+ }, [
1255
+ ke((r(), d("div", {
1256
+ class: U(["wx-board", {
1257
+ "wx-scroll-board": !n.value,
1258
+ "wx-layout-flex": !s.value
1259
+ }]),
1260
+ onMousemove: L[0] || (L[0] = (B) => t.tooltip && o(H).handleTooltipMove(B)),
1261
+ onMouseleave: L[1] || (L[1] = (B) => t.tooltip && o(H).handleTooltipLeave(B))
1262
+ }, [
1263
+ R("div", {
1264
+ class: "wx-scroll",
1265
+ ref_key: "scroll",
1266
+ ref: k,
1267
+ onScroll: V
1268
+ }, [
1269
+ R("div", dn, [
1270
+ (r(!0), d(N, null, re(o(M).columns, (B) => (r(), K(Qt, {
1271
+ key: B.id,
1272
+ column: B,
1273
+ readonly: t.readonly,
1274
+ cardContent: t.cardContent,
1275
+ cardShape: t.cardShape,
1276
+ contentVisible: O(B.id),
1277
+ requestVisible: I(B.id),
1278
+ virtualizeCards: a.value,
1279
+ estimatedCardHeight: S.value,
1280
+ cardOverscan: c.value,
1281
+ fixedColumnWidth: s.value,
1282
+ registerColumn: j,
1283
+ cardCss: t.cardCss,
1284
+ columnCss: t.columnCss
1285
+ }, null, 8, ["column", "readonly", "cardContent", "cardShape", "contentVisible", "requestVisible", "virtualizeCards", "estimatedCardHeight", "cardOverscan", "fixedColumnWidth", "cardCss", "columnCss"]))), 128))
1286
+ ])
1287
+ ], 544)
1288
+ ], 34)), [
1289
+ [T, { dnd: o(u), store: o(b), readonly: t.readonly }],
1290
+ [G],
1291
+ [de]
1292
+ ]),
1293
+ o(x) ? (r(), d("a", {
1294
+ key: 0,
1295
+ style: Y(o(x).style),
1296
+ href: o(x).link,
1297
+ target: "_blank"
1298
+ }, F(o(x).text), 13, un)) : $("", !0),
1299
+ ae(nn, {
1300
+ root: z.value,
1301
+ cardContent: t.cardContent,
1302
+ cardShape: t.cardShape
1303
+ }, null, 8, ["root", "cardContent", "cardShape"]),
1304
+ le.value ? (r(), K(en, {
1305
+ key: 1,
1306
+ options: le.value.options,
1307
+ filter: le.value.filter,
1308
+ onclick: le.value.onclick,
1309
+ ref_key: "cardMenu",
1310
+ ref: ie
1311
+ }, null, 8, ["options", "filter", "onclick"])) : $("", !0),
1312
+ o(H).tooltipState && t.tooltip ? (r(), d("div", {
1313
+ key: 2,
1314
+ class: "wx-tooltip",
1315
+ style: Y(`position:fixed;left:${o(H).mousePos.x + 12}px;top:${o(H).mousePos.y + 16}px;z-index:10000;pointer-events:none`),
1316
+ "aria-hidden": "true"
1317
+ }, [
1318
+ (r(), K(pe(t.tooltip), {
1319
+ card: o(H).tooltipState.card
1320
+ }, null, 8, ["card"]))
1321
+ ], 4)) : $("", !0),
1322
+ o(H).cardPopupState && t.cardPopup ? (r(), K(o(_e), Re({
1323
+ key: 3,
1324
+ at: o(H).cardPopupState.at,
1325
+ parent: o(H).cardPopupState.element,
1326
+ oncancel: o(H).hideCardPopup
1327
+ }, xe), {
1328
+ default: he(() => [
1329
+ (r(), K(pe(t.cardPopup), {
1330
+ card: o(H).cardPopupState.card,
1331
+ close: o(H).hideCardPopup
1332
+ }, null, 8, ["card", "close"]))
1333
+ ]),
1334
+ _: 1
1335
+ }, 16, ["at", "parent", "oncancel"])) : $("", !0)
1336
+ ], 8, sn));
1337
+ }
1338
+ }), mn = /* @__PURE__ */ Q(fn, [["__scopeId", "data-v-7797d7e5"]]), vn = ["data-id"], pn = /* @__PURE__ */ Object.assign({ name: "KanbanExportLayout" }, {
1339
+ __name: "ExportLayout",
1340
+ props: {
1341
+ cardShape: {},
1342
+ cardCss: { type: Function },
1343
+ columnCss: { type: Function },
1344
+ cardContent: {}
1345
+ },
1346
+ setup(t) {
1347
+ const e = t, n = W(oe), s = De(n.getReactiveState().viewData), a = X(null);
1348
+ return J(() => {
1349
+ const p = {};
1350
+ if (e.cardContent) {
1351
+ const l = {};
1352
+ a.value?.querySelectorAll(".wx-ex-cell").forEach((b) => {
1353
+ l[b.dataset.id] = b.innerHTML;
1354
+ }), p.cardContent = l;
1355
+ }
1356
+ const S = {};
1357
+ e.cardCss && (s.value.columns.forEach((l) => {
1358
+ l.cards.forEach((b) => {
1359
+ S[b.id.toString()] = e.cardCss(b, l);
1360
+ });
1361
+ }), p.cardCss = S);
1362
+ const c = {};
1363
+ e.columnCss && (s.value.columns.forEach((l) => {
1364
+ c[l.id.toString()] = e.columnCss(l.cards, l);
1365
+ }), p.columnCss = c), n.exec("export-data", { format: "inner", data: p });
1366
+ }), (p, S) => (r(), d("div", {
1367
+ style: { visibility: "hidden", position: "absolute" },
1368
+ ref_key: "root",
1369
+ ref: a
1370
+ }, [
1371
+ t.cardContent ? (r(!0), d(N, { key: 0 }, re(o(s).columns, (c) => (r(), d(N, {
1372
+ key: c.id
1373
+ }, [
1374
+ (r(!0), d(N, null, re(c.cards, (l) => (r(), d("div", {
1375
+ key: l.id,
1376
+ class: "wx-ex-cell",
1377
+ "data-id": l.id
1378
+ }, [
1379
+ (r(), K(pe(t.cardContent), {
1380
+ card: l,
1381
+ cardShape: t.cardShape
1382
+ }, null, 8, ["card", "cardShape"]))
1383
+ ], 8, vn))), 128))
1384
+ ], 64))), 128)) : $("", !0)
1385
+ ], 512));
1386
+ }
1387
+ });
1388
+ function hn() {
1389
+ const t = je({
1390
+ active: !1,
1391
+ cardId: null,
1392
+ sourceColumn: null,
1393
+ width: 0,
1394
+ height: 0,
1395
+ pointer: { x: 0, y: 0 },
1396
+ offset: { x: 0, y: 0 },
1397
+ target: null,
1398
+ reset() {
1399
+ t.active = !1, t.cardId = null, t.sourceColumn = null, t.target = null;
1400
+ }
1401
+ });
1402
+ return t;
1403
+ }
1404
+ const On = /* @__PURE__ */ Object.assign({ name: "KanbanKanban" }, {
1405
+ __name: "Kanban",
1406
+ props: {
1407
+ cards: { default: () => [] },
1408
+ columns: { default: () => [] },
1409
+ columnAccessor: { default: "column" },
1410
+ filters: { default: () => /* @__PURE__ */ new Map() },
1411
+ sort: { default: null },
1412
+ card: { default: () => pt() },
1413
+ readonly: { type: Boolean, default: !1 },
1414
+ render: {},
1415
+ dynamicData: { type: Boolean, default: !1 },
1416
+ history: { type: Boolean, default: !1 },
1417
+ cardContent: {},
1418
+ init: { type: Function },
1419
+ tooltip: {},
1420
+ cardPopup: {},
1421
+ cardCss: { type: Function },
1422
+ columnCss: { type: Function }
1423
+ },
1424
+ setup(t, { expose: e }) {
1425
+ const n = t, s = He(), a = new qe(Ge, { undo: n.history });
1426
+ let p = a.in;
1427
+ const S = /-/g, c = new Ye((A, V) => {
1428
+ const j = "on" + A.replace(S, ""), f = s[j];
1429
+ typeof f == "function" && f(V);
1430
+ });
1431
+ p.setNext(c);
1432
+ const l = a.getState.bind(a), b = a.getReactive.bind(a), M = () => ({ data: a }), x = a.getCards.bind(a), m = a.in.exec.bind(a.in), u = a.in.on.bind(a.in), z = a.in.detach.bind(a.in), k = a.in.setNext.bind(a.in), h = a.in.intercept.bind(a.in), D = {
1433
+ getState: l,
1434
+ getReactiveState: b,
1435
+ getStores: M,
1436
+ getCards: x,
1437
+ setNext: k,
1438
+ exec: m,
1439
+ on: u,
1440
+ detach: z,
1441
+ intercept: h
1442
+ };
1443
+ ce(oe, {
1444
+ getReactiveState: b,
1445
+ getState: l,
1446
+ exec: m,
1447
+ getBrandmark: a.getBrandmark.bind(a)
1448
+ }), ce(be, hn());
1449
+ const P = () => ({
1450
+ cards: n.cards,
1451
+ columns: n.columns,
1452
+ columnAccessor: n.columnAccessor,
1453
+ filters: n.filters,
1454
+ sort: n.sort,
1455
+ dynamicData: n.dynamicData
1456
+ });
1457
+ a.init({ ...P(), renderMode: "" }), n.init?.(D);
1458
+ let w = !0;
1459
+ J(() => {
1460
+ const A = P();
1461
+ if (w) {
1462
+ w = !1;
1463
+ return;
1464
+ }
1465
+ a.init(A);
1466
+ }), J(() => {
1467
+ a.meta["export-data"] = {
1468
+ card: n.card,
1469
+ cardContent: n.cardContent,
1470
+ cardCss: n.cardCss,
1471
+ columnCss: n.columnCss
1472
+ };
1473
+ });
1474
+ const y = De(a.getReactive().renderMode);
1475
+ return e({
1476
+ getState: l,
1477
+ getReactiveState: b,
1478
+ getStores: M,
1479
+ getCards: x,
1480
+ exec: m,
1481
+ on: u,
1482
+ detach: z,
1483
+ setNext: k,
1484
+ intercept: h
1485
+ }), (A, V) => (r(), K(o(et), {
1486
+ words: { ...o(ye), ...o(ge) },
1487
+ optional: !0
1488
+ }, {
1489
+ default: he(() => [
1490
+ ae(mn, {
1491
+ cardShape: n.card,
1492
+ readonly: t.readonly,
1493
+ render: t.render,
1494
+ cardContent: t.cardContent,
1495
+ tooltip: t.tooltip,
1496
+ cardPopup: t.cardPopup,
1497
+ cardCss: t.cardCss,
1498
+ columnCss: t.columnCss
1499
+ }, null, 8, ["cardShape", "readonly", "render", "cardContent", "tooltip", "cardPopup", "cardCss", "columnCss"]),
1500
+ o(y) === "export" ? (r(), K(pn, {
1501
+ key: 0,
1502
+ cardShape: n.card,
1503
+ cardContent: t.cardContent,
1504
+ cardCss: t.cardCss,
1505
+ columnCss: t.columnCss
1506
+ }, null, 8, ["cardShape", "cardContent", "cardCss", "columnCss"])) : $("", !0)
1507
+ ]),
1508
+ _: 1
1509
+ }, 8, ["words"]));
1510
+ }
1511
+ }), gn = /* @__PURE__ */ Object.assign({ inheritAttrs: !1, name: "KanbanComponentsEditor" }, {
1512
+ __name: "Editor",
1513
+ props: {
1514
+ api: {},
1515
+ values: {},
1516
+ items: { default: () => ht() },
1517
+ placement: { default: "sidebar" },
1518
+ layout: { default: "default" },
1519
+ focus: { type: Boolean, default: !0 },
1520
+ css: { default: "" },
1521
+ topBar: {},
1522
+ autoSave: { type: Boolean, default: !0 },
1523
+ onchange: { type: Function },
1524
+ onsave: { type: Function },
1525
+ onaction: { type: Function }
1526
+ },
1527
+ setup(t) {
1528
+ me("richselect", tt), me("multicombo", nt), me("datepicker", at), me("slider", rt);
1529
+ const e = t, n = He(), s = Te(
1530
+ () => e.api?.getReactiveState()?.editorData
1531
+ );
1532
+ let a = W("wx-i18n", void 0);
1533
+ a || (a = Ee({ ...ge, ...ye }), ce("wx-i18n", a));
1534
+ const p = a.getGroup("kanban");
1535
+ function S(h) {
1536
+ return typeof h == "string" ? p(h) : h;
1537
+ }
1538
+ function c(h) {
1539
+ return h.map((D) => {
1540
+ const P = { ...D };
1541
+ return P.label = S(P.label), Array.isArray(P.options) && (P.options = P.options.map((w) => ({
1542
+ ...w,
1543
+ label: S(w.label)
1544
+ }))), P;
1545
+ });
1546
+ }
1547
+ const l = C(() => c(e.items)), b = {
1548
+ items: [
1549
+ { comp: "icon", icon: "wxi-close", id: "close" },
1550
+ { comp: "spacer" },
1551
+ {
1552
+ comp: "button",
1553
+ id: "delete",
1554
+ text: p("Delete"),
1555
+ type: "primary danger",
1556
+ onclick: z
1557
+ }
1558
+ ]
1559
+ }, M = C(
1560
+ () => e.topBar === void 0 ? b : e.topBar
1561
+ ), x = C(
1562
+ () => ["wx-editor-kanban", e.css].filter(Boolean).join(" ")
1563
+ );
1564
+ function m(h) {
1565
+ e.onsave?.(h);
1566
+ const D = s().value;
1567
+ D && e.api.exec("update-card", { id: D.id, card: { ...h.values } });
1568
+ }
1569
+ function u(h) {
1570
+ e.onchange?.(h);
1571
+ }
1572
+ function z() {
1573
+ const h = s().value;
1574
+ h && (e.api.exec("delete-card", { id: h.id }), e.api.exec("select-card", { id: null }));
1575
+ }
1576
+ function k(h) {
1577
+ e.onaction?.(h);
1578
+ const { item: D } = h;
1579
+ D.id === "close" && D.comp && e.api.exec("select-card", { id: null });
1580
+ }
1581
+ return (h, D) => o(s)().value ? (r(), K(o(lt), Re({ key: 0 }, o(n), {
1582
+ focus: t.focus,
1583
+ items: l.value,
1584
+ topBar: M.value,
1585
+ autoSave: t.autoSave,
1586
+ onchange: u,
1587
+ onaction: k,
1588
+ onsave: m,
1589
+ placement: t.placement,
1590
+ layout: t.layout,
1591
+ values: o(s)().value,
1592
+ css: x.value
1593
+ }), null, 16, ["focus", "items", "topBar", "autoSave", "placement", "layout", "values", "css"])) : $("", !0);
1594
+ }
1595
+ }), zn = /* @__PURE__ */ Q(gn, [["__scopeId", "data-v-238cb105"]]), yn = { class: "wx-root" }, bn = {
1596
+ __name: "Toolbar",
1597
+ props: {
1598
+ api: { default: null },
1599
+ items: { default: () => [] },
1600
+ undo: { type: Boolean, default: !1 },
1601
+ sort: { type: Boolean, default: !1 },
1602
+ add: { type: Boolean, default: !0 }
1603
+ },
1604
+ setup(t) {
1605
+ const e = {
1606
+ "sort-label-asc": { field: "label", dir: "asc" },
1607
+ "sort-label-desc": { field: "label", dir: "desc" },
1608
+ "sort-priority-asc": { field: "priority", dir: "asc" },
1609
+ "sort-priority-desc": { field: "priority", dir: "desc" }
1610
+ }, n = t;
1611
+ let s = W("wx-i18n", null);
1612
+ s || (s = Ee({ ...ge, ...ye }), ce("wx-i18n", s));
1613
+ const a = s.getGroup("kanban"), p = { undo: 0, redo: 0 }, S = Te(
1614
+ () => n.api?.getReactiveState()?.history
1615
+ ), c = ["undo", "redo"], l = C(() => S()?.value ?? p);
1616
+ function b(m) {
1617
+ n.api && (m === "add-card" ? n.api.exec("add-card", { card: {}, edit: !0 }) : m === "undo" || m === "redo" ? n.api.exec(m, {}) : m === "sort-clear" ? n.api.exec("sort-cards", { sort: null }) : m in e && n.api.exec("sort-cards", { sort: e[m] }));
1618
+ }
1619
+ function M(m) {
1620
+ const u = { ...m }, z = typeof u.id == "string" ? u.id : "";
1621
+ return u.items && (u.items = u.items.map(M)), u.text && (u.text = a(u.text)), u.menuText && (u.menuText = a(u.menuText)), u.title && (u.title = a(u.title)), c.includes(z) && (u.disabled = z === "undo" ? !l.value?.undo : !l.value?.redo), !u.handler && z && (u.handler = () => b(z)), u;
1622
+ }
1623
+ const x = C(() => (n.items.length ? n.items : Ue({ undo: n.undo, sort: n.sort, add: n.add })).map(M));
1624
+ return (m, u) => (r(), d("div", yn, [
1625
+ ae(o(ct), { items: x.value }, null, 8, ["items"])
1626
+ ]));
1627
+ }
1628
+ }, An = /* @__PURE__ */ Q(bn, [["__scopeId", "data-v-2de9d466"]]), In = /* @__PURE__ */ Object.assign({ name: "ThemesWillow" }, {
1629
+ __name: "Willow",
1630
+ props: {
1631
+ fonts: { type: Boolean, default: !0 }
1632
+ },
1633
+ setup(t) {
1634
+ const e = t;
1635
+ return (n, s) => n.$slots.default ? (r(), K(o(Oe), {
1636
+ key: 0,
1637
+ fonts: e.fonts
1638
+ }, {
1639
+ default: he(() => [
1640
+ Me(n.$slots, "default")
1641
+ ]),
1642
+ _: 3
1643
+ }, 8, ["fonts"])) : (r(), K(o(Oe), {
1644
+ key: 1,
1645
+ fonts: e.fonts
1646
+ }, null, 8, ["fonts"]));
1647
+ }
1648
+ }), Pn = {
1649
+ __name: "WillowDark",
1650
+ props: {
1651
+ fonts: { type: Boolean, default: !0 }
1652
+ },
1653
+ setup(t) {
1654
+ const e = t;
1655
+ return (n, s) => n.$slots.default ? (r(), K(o(ze), {
1656
+ key: 0,
1657
+ fonts: e.fonts
1658
+ }, {
1659
+ default: he(() => [
1660
+ Me(n.$slots, "default")
1661
+ ]),
1662
+ _: 3
1663
+ }, 8, ["fonts"])) : (r(), K(o(ze), {
1664
+ key: 1,
1665
+ fonts: e.fonts
1666
+ }, null, 8, ["fonts"]));
1667
+ }
1668
+ }, Rn = it.version;
1669
+ export {
1670
+ en as ContextMenu,
1671
+ zn as Editor,
1672
+ On as Kanban,
1673
+ jn as RestDataProvider,
1674
+ An as Toolbar,
1675
+ In as Willow,
1676
+ Pn as WillowDark,
1677
+ pt as getCardShape,
1678
+ ht as getEditorItems,
1679
+ Nn as getMenuOptions,
1680
+ Ve as getPriorityOptions,
1681
+ Vn as getToolbarItems,
1682
+ Wn as registerEditorItem,
1683
+ Rn as version
1684
+ };