vlite3 1.5.1 → 1.5.4
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.
- package/components/CategoryManager/CategoryManager.vue2.js +3 -3
- package/components/Chart/GanttChart.vue.d.ts +92 -2
- package/components/Chart/GanttChart.vue.js +2 -2
- package/components/Chart/GanttChart.vue2.js +1028 -878
- package/components/Chart/GanttChartDateUtils.js +28 -24
- package/components/Chart/index.d.ts +1 -1
- package/components/Chart/types.d.ts +88 -1
- package/components/ColorPicker/ColorIro.vue3.js +2 -2
- package/components/ColorPicker/ColorPicker.vue.js +2 -2
- package/components/CommandPalette/CommandPaletteContent.vue2.js +1 -1
- package/components/CommandPalette/{CommandPaletteItem.vue.js → CommandPaletteItem.vue2.js} +1 -1
- package/components/DataTable/DataTable.vue.js +1 -1
- package/components/Dropdown/DropdownMenu.vue.js +1 -1
- package/components/Kanban/Kanban.vue.d.ts +6 -5
- package/components/Kanban/Kanban.vue.js +1 -1
- package/components/Kanban/Kanban.vue2.js +139 -118
- package/components/Kanban/groupKanbanData.d.ts +36 -0
- package/components/Kanban/groupKanbanData.js +72 -0
- package/components/Kanban/index.d.ts +1 -0
- package/components/Kanban/types.d.ts +17 -0
- package/components/NavbarCommandPalette.vue.js +1 -1
- package/components/PanZoomViewport/PanZoomViewport.vue.d.ts +1 -1
- package/components/RichTextEditor/RichTextEditor.vue.js +4 -4
- package/components/RichTextEditor/RichTextLinkPopover.vue3.js +2 -2
- package/components/RichTextEditor/RichTextToolbar.vue3.js +2 -2
- package/components/Screen/Screen.vue.js +80 -82
- package/components/Screen/ScreenFilter.vue.js +3 -3
- package/components/Screen/components/ScreenAddAction.vue.js +31 -31
- package/components/Screen/components/ScreenHeaderTitle.vue.js +1 -1
- package/components/Screen/components/ScreenToolbar.vue.d.ts +9 -0
- package/components/Screen/components/ScreenToolbar.vue.js +85 -52
- package/index.js +426 -421
- package/package.json +1 -1
- package/style.css +1 -7
- /package/components/ColorPicker/{ColorIro.vue2.js → ColorIro.vue.js} +0 -0
- /package/components/Dropdown/{DropdownMenu.vue3.js → DropdownMenu.vue2.js} +0 -0
- /package/components/RichTextEditor/{RichTextLinkPopover.vue2.js → RichTextLinkPopover.vue.js} +0 -0
- /package/components/RichTextEditor/{RichTextToolbar.vue2.js → RichTextToolbar.vue.js} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { defineComponent as G, ref as
|
|
2
|
-
import
|
|
3
|
-
|
|
1
|
+
import { defineComponent as G, ref as p, watch as S, openBlock as D, createElementBlock as B, normalizeClass as U, Fragment as V, renderList as q, createBlock as z, withCtx as g, renderSlot as C, mergeProps as h } from "vue";
|
|
2
|
+
import E from "./KanbanBoard.vue.js";
|
|
3
|
+
import { groupKanbanRawData as R } from "./groupKanbanData.js";
|
|
4
|
+
const Q = /* @__PURE__ */ G({
|
|
4
5
|
__name: "Kanban",
|
|
5
6
|
props: {
|
|
6
7
|
columns: {},
|
|
@@ -11,6 +12,11 @@ const T = /* @__PURE__ */ G({
|
|
|
11
12
|
rawData: {},
|
|
12
13
|
groupKey: { default: "status" },
|
|
13
14
|
positionKey: { default: "position" },
|
|
15
|
+
emptyColumnId: {},
|
|
16
|
+
unmappedColumnId: {},
|
|
17
|
+
includeOrphanColumns: { type: Boolean, default: !0 },
|
|
18
|
+
emptyColumnTitle: {},
|
|
19
|
+
unmappedColumnTitle: {},
|
|
14
20
|
boardClass: {},
|
|
15
21
|
headerClass: {},
|
|
16
22
|
bodyClass: {},
|
|
@@ -21,108 +27,123 @@ const T = /* @__PURE__ */ G({
|
|
|
21
27
|
onItemMoved: {}
|
|
22
28
|
},
|
|
23
29
|
emits: ["change", "move", "update:data", "item-move-failed"],
|
|
24
|
-
setup(
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
setup(i, { emit: T }) {
|
|
31
|
+
const t = i, c = T, r = p({}), d = p({}), f = p([]), y = p(!1), A = (e) => {
|
|
32
|
+
const o = R(
|
|
33
|
+
e,
|
|
34
|
+
t.columns,
|
|
35
|
+
t.groupKey,
|
|
36
|
+
t.positionKey,
|
|
37
|
+
{
|
|
38
|
+
emptyColumnId: t.emptyColumnId,
|
|
39
|
+
unmappedColumnId: t.unmappedColumnId,
|
|
40
|
+
includeOrphanColumns: t.includeOrphanColumns,
|
|
41
|
+
emptyColumnTitle: t.emptyColumnTitle,
|
|
42
|
+
unmappedColumnTitle: t.unmappedColumnTitle
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
d.value = o.grouped, f.value = o.columns;
|
|
46
|
+
};
|
|
47
|
+
S(
|
|
48
|
+
[
|
|
49
|
+
() => t.data,
|
|
50
|
+
() => t.rawData,
|
|
51
|
+
() => t.columns,
|
|
52
|
+
() => t.groupKey,
|
|
53
|
+
() => t.positionKey,
|
|
54
|
+
() => t.emptyColumnId,
|
|
55
|
+
() => t.unmappedColumnId,
|
|
56
|
+
() => t.includeOrphanColumns
|
|
57
|
+
],
|
|
58
|
+
([e, o]) => {
|
|
59
|
+
y.value || (o && Array.isArray(o) ? A(o) : e ? (d.value = { ...e }, f.value = [...t.columns || []]) : (d.value = {}, f.value = [...t.columns || []]));
|
|
39
60
|
},
|
|
40
61
|
{ immediate: !0, deep: !0 }
|
|
41
62
|
);
|
|
42
|
-
const
|
|
43
|
-
let
|
|
44
|
-
return
|
|
45
|
-
},
|
|
46
|
-
|
|
63
|
+
const O = (e, o) => {
|
|
64
|
+
let n = 0, a = 0;
|
|
65
|
+
return o > 0 && (n = Number(e[o - 1]?.[t.positionKey]) || 0), o < e.length - 1 && (a = Number(e[o + 1]?.[t.positionKey]) || 0), n === 0 && a === 0 ? 1024 : n === 0 ? a / 2 : a === 0 ? n + 1024 : (n + a) / 2;
|
|
66
|
+
}, $ = (e) => {
|
|
67
|
+
y.value = !0;
|
|
47
68
|
try {
|
|
48
|
-
const
|
|
49
|
-
let
|
|
50
|
-
const
|
|
51
|
-
if (
|
|
52
|
-
|
|
69
|
+
const o = t.itemKey, n = { ...d.value }, a = [...n[e.toColumnId] || []];
|
|
70
|
+
let u = a.find((l) => l?.[o] === e.itemId) || e.item;
|
|
71
|
+
const s = a.findIndex((l) => l?.[o] === e.itemId);
|
|
72
|
+
if (s >= 0)
|
|
73
|
+
u = a.splice(s, 1)[0];
|
|
53
74
|
else if (e.fromColumnId === e.toColumnId) {
|
|
54
|
-
const
|
|
55
|
-
|
|
75
|
+
const l = a.findIndex((m) => m?.[o] === e.itemId);
|
|
76
|
+
l >= 0 && (u = a.splice(l, 1)[0]);
|
|
56
77
|
}
|
|
57
|
-
if (!
|
|
58
|
-
if (
|
|
59
|
-
const
|
|
60
|
-
|
|
78
|
+
if (!u) return;
|
|
79
|
+
if (u[t.positionKey] = e.previousPosition, u[t.groupKey] = e.previousGroupValue, e.fromColumnId === e.toColumnId) {
|
|
80
|
+
const l = Math.min(Math.max(e.oldIndex, 0), a.length);
|
|
81
|
+
a.splice(l, 0, u), n[e.toColumnId] = a;
|
|
61
82
|
} else {
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
m >= 0 &&
|
|
65
|
-
const
|
|
66
|
-
|
|
83
|
+
n[e.toColumnId] = a;
|
|
84
|
+
const l = [...n[e.fromColumnId] || []], m = l.findIndex((v) => v?.[o] === e.itemId);
|
|
85
|
+
m >= 0 && l.splice(m, 1);
|
|
86
|
+
const b = Math.min(Math.max(e.oldIndex, 0), l.length);
|
|
87
|
+
l.splice(b, 0, u), n[e.fromColumnId] = l;
|
|
67
88
|
}
|
|
68
|
-
d.value =
|
|
89
|
+
d.value = n, t.data && c("update:data", { ...n });
|
|
69
90
|
} finally {
|
|
70
91
|
queueMicrotask(() => {
|
|
71
|
-
|
|
92
|
+
y.value = !1;
|
|
72
93
|
});
|
|
73
94
|
}
|
|
74
|
-
}, k = async (e,
|
|
75
|
-
const
|
|
76
|
-
if (!
|
|
77
|
-
const
|
|
78
|
-
if (!
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
const
|
|
82
|
-
itemId:
|
|
83
|
-
item:
|
|
84
|
-
fromColumnId:
|
|
95
|
+
}, k = async (e, o, n, a) => {
|
|
96
|
+
const u = d.value[e];
|
|
97
|
+
if (!u) return;
|
|
98
|
+
const s = u[o];
|
|
99
|
+
if (!s) return;
|
|
100
|
+
const l = s[t.itemKey], m = s[t.positionKey], b = s[t.groupKey], v = O(u, o);
|
|
101
|
+
s[t.positionKey] = v, s[t.groupKey] = e;
|
|
102
|
+
const K = () => $({
|
|
103
|
+
itemId: l,
|
|
104
|
+
item: s,
|
|
105
|
+
fromColumnId: n,
|
|
85
106
|
toColumnId: e,
|
|
86
|
-
oldIndex:
|
|
107
|
+
oldIndex: a,
|
|
87
108
|
previousPosition: m,
|
|
88
|
-
previousGroupValue:
|
|
89
|
-
}),
|
|
90
|
-
fromColumnId:
|
|
91
|
-
oldIndex:
|
|
92
|
-
newIndex:
|
|
109
|
+
previousGroupValue: b
|
|
110
|
+
}), F = {
|
|
111
|
+
fromColumnId: n,
|
|
112
|
+
oldIndex: a,
|
|
113
|
+
newIndex: o,
|
|
93
114
|
previousPosition: m,
|
|
94
|
-
revert:
|
|
115
|
+
revert: K
|
|
95
116
|
};
|
|
96
117
|
c("move", {
|
|
97
|
-
itemId:
|
|
98
|
-
item:
|
|
99
|
-
fromColumnId:
|
|
118
|
+
itemId: l,
|
|
119
|
+
item: s,
|
|
120
|
+
fromColumnId: n,
|
|
100
121
|
toColumnId: e,
|
|
101
|
-
oldIndex:
|
|
102
|
-
newIndex:
|
|
122
|
+
oldIndex: a,
|
|
123
|
+
newIndex: o
|
|
103
124
|
});
|
|
104
|
-
const
|
|
105
|
-
if (
|
|
125
|
+
const M = t.onItemMoved;
|
|
126
|
+
if (M)
|
|
106
127
|
try {
|
|
107
|
-
await
|
|
108
|
-
} catch (
|
|
109
|
-
|
|
110
|
-
itemId:
|
|
128
|
+
await M(l, e, v, s, F) === !1 && K();
|
|
129
|
+
} catch (P) {
|
|
130
|
+
K(), c("item-move-failed", {
|
|
131
|
+
itemId: l,
|
|
111
132
|
toColumnId: e,
|
|
112
|
-
fromColumnId:
|
|
113
|
-
newPosition:
|
|
114
|
-
item:
|
|
115
|
-
error:
|
|
133
|
+
fromColumnId: n,
|
|
134
|
+
newPosition: v,
|
|
135
|
+
item: s,
|
|
136
|
+
error: P
|
|
116
137
|
});
|
|
117
138
|
}
|
|
118
|
-
},
|
|
139
|
+
}, I = (e) => f.value.find((o) => o.id === e)?.disabled === !0, w = (e) => {
|
|
119
140
|
if (c("change", e), e.type === "remove")
|
|
120
|
-
|
|
141
|
+
r.value.remove = { columnId: e.columnId, event: e.event };
|
|
121
142
|
else if (e.type === "add")
|
|
122
|
-
|
|
143
|
+
r.value.add = { columnId: e.columnId, event: e.event };
|
|
123
144
|
else if (e.type === "update") {
|
|
124
|
-
if (
|
|
125
|
-
|
|
145
|
+
if (I(e.columnId)) {
|
|
146
|
+
r.value = {};
|
|
126
147
|
return;
|
|
127
148
|
}
|
|
128
149
|
k(
|
|
@@ -132,58 +153,58 @@ const T = /* @__PURE__ */ G({
|
|
|
132
153
|
e.event.oldIndex
|
|
133
154
|
);
|
|
134
155
|
}
|
|
135
|
-
if (
|
|
136
|
-
const { remove:
|
|
137
|
-
if (
|
|
138
|
-
|
|
156
|
+
if (r.value.remove && r.value.add) {
|
|
157
|
+
const { remove: o, add: n } = r.value;
|
|
158
|
+
if (I(o.columnId) || I(n.columnId)) {
|
|
159
|
+
r.value = {};
|
|
139
160
|
return;
|
|
140
161
|
}
|
|
141
162
|
k(
|
|
163
|
+
n.columnId,
|
|
164
|
+
n.event.newIndex,
|
|
142
165
|
o.columnId,
|
|
143
|
-
o.event.
|
|
144
|
-
|
|
145
|
-
a.event.oldIndex
|
|
146
|
-
), u.value = {};
|
|
166
|
+
o.event.oldIndex
|
|
167
|
+
), r.value = {};
|
|
147
168
|
}
|
|
148
169
|
setTimeout(() => {
|
|
149
|
-
|
|
170
|
+
r.value = {};
|
|
150
171
|
}, 100);
|
|
151
|
-
}, L = (e,
|
|
152
|
-
d.value[e] =
|
|
153
|
-
}, N = (e) => d.value[e] || [];
|
|
154
|
-
return (e,
|
|
155
|
-
class:
|
|
172
|
+
}, L = (e, o) => {
|
|
173
|
+
d.value[e] = o, t.data && c("update:data", { ...t.data, [e]: o });
|
|
174
|
+
}, N = (e) => d.value[e] || d.value[String(e)] || [];
|
|
175
|
+
return (e, o) => (D(), B("div", {
|
|
176
|
+
class: U([
|
|
156
177
|
"flex gap-4 scrollbar-thin overflow-x-auto p-1 scrollbar-thin-x scrollable-container",
|
|
157
|
-
|
|
178
|
+
t.class
|
|
158
179
|
])
|
|
159
180
|
}, [
|
|
160
|
-
(
|
|
161
|
-
key:
|
|
162
|
-
column:
|
|
163
|
-
group:
|
|
164
|
-
"item-key":
|
|
165
|
-
"load-data":
|
|
166
|
-
"column-data": N(
|
|
167
|
-
"board-class":
|
|
168
|
-
"header-class":
|
|
169
|
-
"body-class":
|
|
170
|
-
"draggable-class":
|
|
171
|
-
"ghost-class":
|
|
172
|
-
"is-item-disabled":
|
|
173
|
-
onChange:
|
|
174
|
-
"onUpdate:columnData": (
|
|
181
|
+
(D(!0), B(V, null, q(f.value, (n) => (D(), z(E, {
|
|
182
|
+
key: n.id,
|
|
183
|
+
column: n,
|
|
184
|
+
group: i.group,
|
|
185
|
+
"item-key": i.itemKey,
|
|
186
|
+
"load-data": i.loadData,
|
|
187
|
+
"column-data": N(n.id),
|
|
188
|
+
"board-class": i.boardClass,
|
|
189
|
+
"header-class": i.headerClass,
|
|
190
|
+
"body-class": i.bodyClass,
|
|
191
|
+
"draggable-class": i.draggableClass,
|
|
192
|
+
"ghost-class": i.ghostClass,
|
|
193
|
+
"is-item-disabled": i.isItemDisabled,
|
|
194
|
+
onChange: w,
|
|
195
|
+
"onUpdate:columnData": (a) => L(n.id, a)
|
|
175
196
|
}, {
|
|
176
|
-
header:
|
|
177
|
-
|
|
197
|
+
header: g((a) => [
|
|
198
|
+
C(e.$slots, "column-header", h({ ref_for: !0 }, a), void 0, !0)
|
|
178
199
|
]),
|
|
179
|
-
"prepend-item":
|
|
180
|
-
|
|
200
|
+
"prepend-item": g((a) => [
|
|
201
|
+
C(e.$slots, "prepend-item", h({ ref_for: !0 }, a), void 0, !0)
|
|
181
202
|
]),
|
|
182
|
-
item:
|
|
183
|
-
|
|
203
|
+
item: g((a) => [
|
|
204
|
+
C(e.$slots, "item", h({ ref_for: !0 }, a), void 0, !0)
|
|
184
205
|
]),
|
|
185
|
-
"append-item":
|
|
186
|
-
|
|
206
|
+
"append-item": g((a) => [
|
|
207
|
+
C(e.$slots, "append-item", h({ ref_for: !0 }, a), void 0, !0)
|
|
187
208
|
]),
|
|
188
209
|
_: 3
|
|
189
210
|
}, 8, ["column", "group", "item-key", "load-data", "column-data", "board-class", "header-class", "body-class", "draggable-class", "ghost-class", "is-item-disabled", "onUpdate:columnData"]))), 128))
|
|
@@ -191,5 +212,5 @@ const T = /* @__PURE__ */ G({
|
|
|
191
212
|
}
|
|
192
213
|
});
|
|
193
214
|
export {
|
|
194
|
-
|
|
215
|
+
Q as default
|
|
195
216
|
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { KanbanColumn } from './types';
|
|
2
|
+
/** Sentinel column id used when a group value is null/blank and no `emptyColumnId` is provided. */
|
|
3
|
+
export declare const KANBAN_EMPTY_GROUP_KEY = "__kanban_empty__";
|
|
4
|
+
/** Sentinel column id used when a group value is unmatched and orphans are collapsed. */
|
|
5
|
+
export declare const KANBAN_UNMAPPED_GROUP_KEY = "__kanban_unmapped__";
|
|
6
|
+
export interface GroupKanbanRawDataOptions {
|
|
7
|
+
/** Column id that receives null / blank group values. */
|
|
8
|
+
emptyColumnId?: string | number;
|
|
9
|
+
/** Column id that receives values that do not match any configured column. */
|
|
10
|
+
unmappedColumnId?: string | number;
|
|
11
|
+
/**
|
|
12
|
+
* When true (default), append columns for orphan group keys so cards never
|
|
13
|
+
* disappear from the board when `unmappedColumnId` is not provided.
|
|
14
|
+
*/
|
|
15
|
+
includeOrphanColumns?: boolean;
|
|
16
|
+
emptyColumnTitle?: string;
|
|
17
|
+
unmappedColumnTitle?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface GroupKanbanRawDataResult {
|
|
20
|
+
grouped: Record<string, any[]>;
|
|
21
|
+
columns: KanbanColumn[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* One consistent resolver for column ids and item group values.
|
|
25
|
+
* Trims strings and maps null/undefined to `''`.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolveKanbanGroupKey(value: unknown): string;
|
|
28
|
+
/**
|
|
29
|
+
* Group a flat `rawData` array into column buckets.
|
|
30
|
+
*
|
|
31
|
+
* - Column ids and item values are matched via {@link resolveKanbanGroupKey}
|
|
32
|
+
* (trim + case-insensitive).
|
|
33
|
+
* - Empty values land in `emptyColumnId` (or an auto empty column).
|
|
34
|
+
* - Unmatched values land in `unmappedColumnId`, or become orphan columns.
|
|
35
|
+
*/
|
|
36
|
+
export declare function groupKanbanRawData(rawData: any[] | null | undefined, columns: KanbanColumn[] | null | undefined, groupKey: string, positionKey: string, options?: GroupKanbanRawDataOptions): GroupKanbanRawDataResult;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
const A = "__kanban_empty__", w = "__kanban_unmapped__";
|
|
2
|
+
function I(s) {
|
|
3
|
+
return s == null ? "" : String(s).trim();
|
|
4
|
+
}
|
|
5
|
+
const i = (s) => I(s).toLowerCase();
|
|
6
|
+
function K(s, _, S, g, u = {}) {
|
|
7
|
+
const m = Array.isArray(_) ? _ : [], p = u.includeOrphanColumns !== !1, o = u.emptyColumnId != null ? u.emptyColumnId : p ? A : void 0, c = u.unmappedColumnId, d = /* @__PURE__ */ new Map();
|
|
8
|
+
for (const e of m) {
|
|
9
|
+
const t = i(e.id);
|
|
10
|
+
d.has(t) || d.set(t, e.id);
|
|
11
|
+
}
|
|
12
|
+
const r = {};
|
|
13
|
+
for (const e of m)
|
|
14
|
+
r[String(e.id)] = [];
|
|
15
|
+
const y = /* @__PURE__ */ new Set();
|
|
16
|
+
let C = !1, h = !1;
|
|
17
|
+
for (const e of s || []) {
|
|
18
|
+
const t = I(e?.[S]);
|
|
19
|
+
let n;
|
|
20
|
+
if (t) {
|
|
21
|
+
const f = d.get(t.toLowerCase());
|
|
22
|
+
if (f !== void 0)
|
|
23
|
+
n = f;
|
|
24
|
+
else if (c != null)
|
|
25
|
+
n = c, d.has(i(n)) || (h = !0);
|
|
26
|
+
else if (p)
|
|
27
|
+
n = t, y.add(n);
|
|
28
|
+
else
|
|
29
|
+
continue;
|
|
30
|
+
} else {
|
|
31
|
+
if (o == null) continue;
|
|
32
|
+
n = o, d.has(i(n)) || (C = !0);
|
|
33
|
+
}
|
|
34
|
+
const a = String(n);
|
|
35
|
+
r[a] || (r[a] = []), r[a].push({ ...e });
|
|
36
|
+
}
|
|
37
|
+
for (const e of Object.keys(r))
|
|
38
|
+
r[e].sort((t, n) => {
|
|
39
|
+
const a = (Number(t?.[g]) || 0) - (Number(n?.[g]) || 0);
|
|
40
|
+
if (a !== 0) return a;
|
|
41
|
+
const f = new Date(n?.createdAt || 0).getTime() - new Date(t?.createdAt || 0).getTime();
|
|
42
|
+
return f !== 0 ? f : String(n?.id || "").localeCompare(String(t?.id || ""));
|
|
43
|
+
});
|
|
44
|
+
const l = [...m];
|
|
45
|
+
if (C && o != null && l.push({
|
|
46
|
+
id: o,
|
|
47
|
+
title: u.emptyColumnTitle || "Unmapped"
|
|
48
|
+
}), h && c != null && l.push({
|
|
49
|
+
id: c,
|
|
50
|
+
title: u.unmappedColumnTitle || "Unmapped"
|
|
51
|
+
}), p && c == null)
|
|
52
|
+
for (const e of y)
|
|
53
|
+
l.some(
|
|
54
|
+
(n) => i(n.id) === i(e)
|
|
55
|
+
) || l.push({
|
|
56
|
+
id: e,
|
|
57
|
+
title: String(e)
|
|
58
|
+
});
|
|
59
|
+
if (o === A && !r[String(o)]?.length && !m.some((e) => i(e.id) === i(o))) {
|
|
60
|
+
const e = l.findIndex(
|
|
61
|
+
(t) => i(t.id) === i(o)
|
|
62
|
+
);
|
|
63
|
+
e >= 0 && l.splice(e, 1), delete r[String(o)];
|
|
64
|
+
}
|
|
65
|
+
return { grouped: r, columns: l };
|
|
66
|
+
}
|
|
67
|
+
export {
|
|
68
|
+
A as KANBAN_EMPTY_GROUP_KEY,
|
|
69
|
+
w as KANBAN_UNMAPPED_GROUP_KEY,
|
|
70
|
+
K as groupKanbanRawData,
|
|
71
|
+
I as resolveKanbanGroupKey
|
|
72
|
+
};
|
|
@@ -77,6 +77,23 @@ export interface KanbanProps {
|
|
|
77
77
|
rawData?: any[];
|
|
78
78
|
groupKey?: string;
|
|
79
79
|
positionKey?: string;
|
|
80
|
+
/**
|
|
81
|
+
* Column id that receives items whose group value is null / blank.
|
|
82
|
+
* When omitted, an auto "Unmapped" empty column is used (if orphans are enabled).
|
|
83
|
+
*/
|
|
84
|
+
emptyColumnId?: string | number;
|
|
85
|
+
/**
|
|
86
|
+
* Column id that receives items whose group value does not match any column.
|
|
87
|
+
* Prefer providing this (plus a matching column) for a single Unmapped lane.
|
|
88
|
+
*/
|
|
89
|
+
unmappedColumnId?: string | number;
|
|
90
|
+
/**
|
|
91
|
+
* When true (default), append columns for unmatched group values so cards
|
|
92
|
+
* never silently disappear after a `groupKey` / `columns` change.
|
|
93
|
+
*/
|
|
94
|
+
includeOrphanColumns?: boolean;
|
|
95
|
+
emptyColumnTitle?: string;
|
|
96
|
+
unmappedColumnTitle?: string;
|
|
80
97
|
boardClass?: string;
|
|
81
98
|
headerClass?: string;
|
|
82
99
|
bodyClass?: string;
|
|
@@ -3,7 +3,7 @@ import L from "./Icon.vue.js";
|
|
|
3
3
|
import v from "./Modal.vue.js";
|
|
4
4
|
import N from "./CommandPalette/CommandPaletteContent.vue.js";
|
|
5
5
|
import { $t as U } from "../utils/i18n.js";
|
|
6
|
-
/* empty css
|
|
6
|
+
/* empty css */
|
|
7
7
|
const V = { class: "block truncate -text-fs-1.5" }, S = { class: "ms-auto inline-flex items-center gap-0.5 px-1.5 py-0.5 rounded text-[10px] font-mono font-medium border border-border/80 bg-background text-muted-foreground ms-1" }, A = /* @__PURE__ */ x({
|
|
8
8
|
__name: "NavbarCommandPalette",
|
|
9
9
|
props: {
|
|
@@ -151,10 +151,10 @@ declare const __VLS_component: import('vue').DefineComponent<PanZoomViewportProp
|
|
|
151
151
|
disabled: boolean;
|
|
152
152
|
modelValue: PanZoomViewportTransform;
|
|
153
153
|
contentClass: string;
|
|
154
|
+
zoomStep: number;
|
|
154
155
|
minScale: number;
|
|
155
156
|
maxScale: number;
|
|
156
157
|
keyboard: boolean;
|
|
157
|
-
zoomStep: number;
|
|
158
158
|
wheelZoomSpeed: number;
|
|
159
159
|
keyboardPanStep: number;
|
|
160
160
|
fitPadding: number;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { defineComponent as te, ref as v, shallowRef as ne, watch as oe, computed as h, onMounted as le, onUnmounted as ae, openBlock as C, createElementBlock as L, normalizeClass as re, toDisplayString as I, createCommentVNode as U, createElementVNode as w, createVNode as q, unref as a, normalizeStyle as ie } from "vue";
|
|
2
2
|
/* empty css */
|
|
3
|
-
import se from "./RichTextToolbar.
|
|
4
|
-
/* empty css
|
|
5
|
-
import de from "./RichTextLinkPopover.
|
|
6
|
-
/* empty css
|
|
3
|
+
import se from "./RichTextToolbar.vue.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
import de from "./RichTextLinkPopover.vue.js";
|
|
6
|
+
/* empty css */
|
|
7
7
|
import { useRichTextImageUpload as ue } from "./composables/useRichTextImageUpload.js";
|
|
8
8
|
import { useRichTextLinks as ce } from "./composables/useRichTextLinks.js";
|
|
9
9
|
const fe = ["aria-labelledby", "aria-describedby"], me = ["id", "for"], ve = { class: "rte-wrapper" }, ye = { class: "rte-body-wrap" }, ge = ["id", "contenteditable", "aria-label", "aria-readonly", "aria-disabled", "aria-invalid"], be = ["id"], Se = /* @__PURE__ */ te({
|