@ai-matrx/office 0.8.21 → 0.8.22
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/CHANGELOG.md +2 -1
- package/dist/collab-sheets-transform.cjs +118 -2
- package/dist/collab-sheets-transform.cjs.map +1 -1
- package/dist/collab-sheets-transform.d.cts +1 -1
- package/dist/collab-sheets-transform.d.ts +1 -1
- package/dist/collab-sheets-transform.js +118 -2
- package/dist/collab-sheets-transform.js.map +1 -1
- package/dist/univer-collab.cjs +123 -2
- package/dist/univer-collab.cjs.map +1 -1
- package/dist/univer-collab.js +123 -2
- package/dist/univer-collab.js.map +1 -1
- package/package.json +4 -4
package/dist/univer-collab.cjs
CHANGED
|
@@ -1766,6 +1766,7 @@ var SHEET_MUTATIONS = {
|
|
|
1766
1766
|
"sheet.mutation.insert-sheet": covered("sheet", "index", "sheet"),
|
|
1767
1767
|
"sheet.mutation.remove-sheet": covered("sheet", "sheetIndex", "sheetsLeft"),
|
|
1768
1768
|
"sheet.mutation.set-worksheet-order": covered("sheet", "fromOrder", "toOrder"),
|
|
1769
|
+
"sheet.mutation.reorder-range": covered("sort", "range", "order"),
|
|
1769
1770
|
// ── never travels ────────────────────────────────────────────────────────────────────────────────
|
|
1770
1771
|
"formula.mutation.set-formula-calculation-start": never(FORMULA_RESULT),
|
|
1771
1772
|
"formula.mutation.set-trigger-formula-calculation-start": never(FORMULA_RESULT),
|
|
@@ -1799,7 +1800,6 @@ var SHEET_MUTATIONS = {
|
|
|
1799
1800
|
"thread-comment.mutation.resolve-comment": never(UNIVER_COMMENTS),
|
|
1800
1801
|
"thread-comment.mutation.delete-comment": never(UNIVER_COMMENTS),
|
|
1801
1802
|
// ── barriers: X (no transform yet, design §10) ───────────────────────────────────────────────────
|
|
1802
|
-
"sheet.mutation.reorder-range": barrier("X", "sort: a permutation, not transformed yet"),
|
|
1803
1803
|
"sheet.mutation.move-range": barrier("X", "cut-paste carries the sender's cell matrices"),
|
|
1804
1804
|
"sheet.mutation.set-worksheet-hidden": barrier("X", "sheet-level setting: not in C5a"),
|
|
1805
1805
|
"sheet.mutation.set-tab-color": barrier("X", "sheet-level setting: not in C5a"),
|
|
@@ -2233,7 +2233,8 @@ var ID = {
|
|
|
2233
2233
|
colCount: "sheet.mutation.set-worksheet-column-count",
|
|
2234
2234
|
insertSheet: "sheet.mutation.insert-sheet",
|
|
2235
2235
|
removeSheet: "sheet.mutation.remove-sheet",
|
|
2236
|
-
sheetOrder: "sheet.mutation.set-worksheet-order"
|
|
2236
|
+
sheetOrder: "sheet.mutation.set-worksheet-order",
|
|
2237
|
+
sort: "sheet.mutation.reorder-range"
|
|
2237
2238
|
};
|
|
2238
2239
|
var PAIR_BARRIERS = {};
|
|
2239
2240
|
var pairKey = (a, b) => a < b ? `${a}|${b}` : `${b}|${a}`;
|
|
@@ -3030,6 +3031,119 @@ function inlineSheetStyles(sheet, styleOf) {
|
|
|
3030
3031
|
}
|
|
3031
3032
|
return out;
|
|
3032
3033
|
}
|
|
3034
|
+
var isSort = (m) => m.id === ID.sort;
|
|
3035
|
+
function sortOf(m) {
|
|
3036
|
+
const P = /* @__PURE__ */ new Map();
|
|
3037
|
+
for (const [t, src] of Object.entries(m.params.order ?? {})) P.set(Number(t), Number(src));
|
|
3038
|
+
return { range: { ...m.params.range }, P };
|
|
3039
|
+
}
|
|
3040
|
+
var sortQ = (o) => new Map([...o.P].map(([t, s0]) => [s0, t]));
|
|
3041
|
+
function buildSort(template, o) {
|
|
3042
|
+
const order = {};
|
|
3043
|
+
for (const [t, s0] of [...o.P].sort((a, b) => a[0] - b[0])) if (t !== s0) order[t] = s0;
|
|
3044
|
+
if (!Object.keys(order).length || o.range.startRow > o.range.endRow || o.range.startColumn > o.range.endColumn) return [];
|
|
3045
|
+
return [{ id: template.id, params: { ...template.params, range: o.range, order } }];
|
|
3046
|
+
}
|
|
3047
|
+
var inSortCols = (o, c) => c >= o.range.startColumn && c <= o.range.endColumn;
|
|
3048
|
+
function sortThrough(o, st) {
|
|
3049
|
+
const r = o.range;
|
|
3050
|
+
if (st.axis === "col") {
|
|
3051
|
+
if (st.op.kind === "move") {
|
|
3052
|
+
const { from, count, to } = st.op;
|
|
3053
|
+
const touches = !(from + count - 1 < r.startColumn || from > r.endColumn) || to > r.startColumn && to <= r.endColumn;
|
|
3054
|
+
if (touches) return null;
|
|
3055
|
+
const spans3 = spanThrough(st.op, r.startColumn, r.endColumn);
|
|
3056
|
+
return spans3.length === 1 ? { range: { ...r, startColumn: spans3[0][0], endColumn: spans3[0][1] }, P: o.P } : null;
|
|
3057
|
+
}
|
|
3058
|
+
const spans2 = spanThrough(st.op, r.startColumn, r.endColumn);
|
|
3059
|
+
if (!spans2.length) return { range: { ...r, startColumn: 1, endColumn: 0 }, P: /* @__PURE__ */ new Map() };
|
|
3060
|
+
return { range: { ...r, startColumn: spans2[0][0], endColumn: spans2[spans2.length - 1][1] }, P: o.P };
|
|
3061
|
+
}
|
|
3062
|
+
const op = st.op;
|
|
3063
|
+
if (op.kind === "move") {
|
|
3064
|
+
const touches = !(op.from + op.count - 1 < r.startRow || op.from > r.endRow) || op.to > r.startRow && op.to <= r.endRow;
|
|
3065
|
+
if (touches) return null;
|
|
3066
|
+
}
|
|
3067
|
+
if (op.kind === "insert" || op.kind === "move") {
|
|
3068
|
+
const P2 = /* @__PURE__ */ new Map();
|
|
3069
|
+
for (const [t, s0] of o.P) P2.set(mapIndex(op, t), mapIndex(op, s0));
|
|
3070
|
+
const spans2 = spanThrough(op, r.startRow, r.endRow);
|
|
3071
|
+
return { range: { ...r, startRow: spans2[0][0], endRow: spans2[spans2.length - 1][1] }, P: P2 };
|
|
3072
|
+
}
|
|
3073
|
+
const removed = (i) => i >= op.start && i < op.start + op.count;
|
|
3074
|
+
const Q = sortQ(o);
|
|
3075
|
+
const goneTargets = [];
|
|
3076
|
+
for (let i = op.start; i < op.start + op.count; i++) goneTargets.push(Q.get(i) ?? i);
|
|
3077
|
+
goneTargets.sort((a, b) => a - b);
|
|
3078
|
+
const compact = (t) => t - goneTargets.filter((g) => g < t).length;
|
|
3079
|
+
const P = /* @__PURE__ */ new Map();
|
|
3080
|
+
for (const [t, s0] of o.P) if (!removed(s0)) P.set(compact(t), mapIndex(op, s0));
|
|
3081
|
+
const spans = spanThrough(op, r.startRow, r.endRow);
|
|
3082
|
+
if (!spans.length) return { range: { ...r, startRow: 1, endRow: 0 }, P: /* @__PURE__ */ new Map() };
|
|
3083
|
+
return { range: { ...r, startRow: spans[0][0], endRow: spans[spans.length - 1][1] }, P };
|
|
3084
|
+
}
|
|
3085
|
+
function sortPair(x, y, sx, sy) {
|
|
3086
|
+
const xs = isSort(x);
|
|
3087
|
+
const ys = isSort(y);
|
|
3088
|
+
if (!xs && !ys) return null;
|
|
3089
|
+
if (xs && ys) {
|
|
3090
|
+
const a = sortOf(x).range;
|
|
3091
|
+
const b = sortOf(y).range;
|
|
3092
|
+
const overlap = a.startRow <= b.endRow && b.startRow <= a.endRow && a.startColumn <= b.endColumn && b.startColumn <= a.endColumn;
|
|
3093
|
+
return overlap ? barrier2("two sorts of overlapping ranges at once") : ok([x]);
|
|
3094
|
+
}
|
|
3095
|
+
if (xs) {
|
|
3096
|
+
if (sy) {
|
|
3097
|
+
const t = sortThrough(sortOf(x), sy);
|
|
3098
|
+
return t ? ok(buildSort(x, t)) : barrier2("a row or column move through a sorted range");
|
|
3099
|
+
}
|
|
3100
|
+
return ok([x]);
|
|
3101
|
+
}
|
|
3102
|
+
const o = sortOf(y);
|
|
3103
|
+
const Q = sortQ(o);
|
|
3104
|
+
const moved = (r) => r >= o.range.startRow && r <= o.range.endRow && Q.has(r);
|
|
3105
|
+
if (sx) {
|
|
3106
|
+
if (sx.axis === "col") return sx.op.kind === "move" && !sortThrough(o, sx) ? barrier2("a column move through a sorted range") : ok([x]);
|
|
3107
|
+
if (sx.op.kind === "insert") return ok([x]);
|
|
3108
|
+
if (sx.op.kind === "move") return sortThrough(o, sx) ? ok([x]) : barrier2("a row move through a sorted range");
|
|
3109
|
+
const rows = [];
|
|
3110
|
+
let partial = false;
|
|
3111
|
+
for (let i = sx.op.start; i < sx.op.start + sx.op.count; i++) {
|
|
3112
|
+
if (moved(i)) partial = true;
|
|
3113
|
+
rows.push(Q.get(i) ?? i);
|
|
3114
|
+
}
|
|
3115
|
+
if (partial) return barrier2("a row remove against a concurrent sort of those rows");
|
|
3116
|
+
return ok([x]);
|
|
3117
|
+
}
|
|
3118
|
+
if (x.id === ID.values) {
|
|
3119
|
+
const out = {};
|
|
3120
|
+
let changed = false;
|
|
3121
|
+
forEachCell(cellsOf(x), (r, c, v) => {
|
|
3122
|
+
if (inSortCols(o, c) && moved(r)) {
|
|
3123
|
+
putCell(out, Q.get(r), c, v);
|
|
3124
|
+
changed = true;
|
|
3125
|
+
} else putCell(out, r, c, v);
|
|
3126
|
+
});
|
|
3127
|
+
return changed ? ok([cellsMutation(x, out)]) : ok([x]);
|
|
3128
|
+
}
|
|
3129
|
+
if (isNumfmt(x)) {
|
|
3130
|
+
const parts = nfParts(x).map((p) => {
|
|
3131
|
+
const ranges = [];
|
|
3132
|
+
for (const rc of p.ranges) {
|
|
3133
|
+
const inner = { ...rc, startRow: Math.max(rc.startRow, o.range.startRow), endRow: Math.min(rc.endRow, o.range.endRow), startColumn: Math.max(rc.startColumn, o.range.startColumn), endColumn: Math.min(rc.endColumn, o.range.endColumn) };
|
|
3134
|
+
if (inner.startRow > inner.endRow || inner.startColumn > inner.endColumn) {
|
|
3135
|
+
ranges.push(rc);
|
|
3136
|
+
continue;
|
|
3137
|
+
}
|
|
3138
|
+
ranges.push(...rectMinus(rc, inner));
|
|
3139
|
+
for (let r = inner.startRow; r <= inner.endRow; r++) ranges.push({ ...inner, startRow: Q.get(r) ?? r, endRow: Q.get(r) ?? r });
|
|
3140
|
+
}
|
|
3141
|
+
return { ...p, ranges };
|
|
3142
|
+
});
|
|
3143
|
+
return ok(nfBuild(x, parts));
|
|
3144
|
+
}
|
|
3145
|
+
return ok([x]);
|
|
3146
|
+
}
|
|
3033
3147
|
function familyOf(id) {
|
|
3034
3148
|
const e = SHEET_MUTATIONS[id];
|
|
3035
3149
|
return e && e.kind === "covered" ? e.family : "";
|
|
@@ -3055,6 +3169,8 @@ function transformMutation(x, y, side) {
|
|
|
3055
3169
|
const fy = familyOf(y.id);
|
|
3056
3170
|
const sy = structuralOf(y);
|
|
3057
3171
|
const sx = structuralOf(x);
|
|
3172
|
+
const sortp = sortPair(x, y, sx, sy);
|
|
3173
|
+
if (sortp) return sortp;
|
|
3058
3174
|
const cp = countPair(x, y, sy);
|
|
3059
3175
|
if (cp) return cp;
|
|
3060
3176
|
const np = numfmtPair(x, y, side, sx, sy);
|
|
@@ -3761,6 +3877,11 @@ function univerSheetsOtPort(o) {
|
|
|
3761
3877
|
return { m, inverse: [{ id: "sheet.mutation.remove-col", params: { subUnitId: sheet, range: json(params.range) } }] };
|
|
3762
3878
|
case ADD_MERGE:
|
|
3763
3879
|
return { m, inverse: [{ id: REMOVE_MERGE, params: { subUnitId: sheet, ranges: json(params.ranges) } }] };
|
|
3880
|
+
case "sheet.mutation.reorder-range": {
|
|
3881
|
+
const order = {};
|
|
3882
|
+
for (const [t, src] of Object.entries(params.order ?? {})) order[String(src)] = Number(t);
|
|
3883
|
+
return { m, inverse: [{ id: info.id, params: { subUnitId: sheet, range: json(params.range), order } }] };
|
|
3884
|
+
}
|
|
3764
3885
|
case SHEET_NAME:
|
|
3765
3886
|
return { m, inverse: before2.name !== void 0 ? [{ id: SHEET_NAME, params: { subUnitId: sheet, name: before2.name } }] : void 0 };
|
|
3766
3887
|
default:
|