@ai-matrx/office 0.8.17 → 0.8.19
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 +17 -3
- package/dist/{chunk-HX5TXQIX.cjs → chunk-JMVPAJJA.cjs} +6 -5
- package/dist/chunk-JMVPAJJA.cjs.map +1 -0
- package/dist/{chunk-2X3KR6Y4.js → chunk-TRA2BTPL.js} +6 -5
- package/dist/{chunk-2X3KR6Y4.js.map → chunk-TRA2BTPL.js.map} +1 -1
- package/dist/docs-io.cjs +6 -6
- package/dist/docs-io.js +1 -1
- package/dist/docs.cjs +2 -2
- package/dist/docs.d.cts +5 -1
- package/dist/docs.d.ts +5 -1
- package/dist/docs.js +1 -1
- package/dist/univer-collab.cjs +165 -34
- package/dist/univer-collab.cjs.map +1 -1
- package/dist/univer-collab.d.cts +7 -12
- package/dist/univer-collab.d.ts +7 -12
- package/dist/univer-collab.js +147 -15
- package/dist/univer-collab.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-HX5TXQIX.cjs.map +0 -1
package/dist/univer-collab.cjs
CHANGED
|
@@ -41,6 +41,7 @@ __export(collab_exports, {
|
|
|
41
41
|
SHEETS_EDIT_GROUP: () => SHEETS_EDIT_GROUP,
|
|
42
42
|
WorkbookCollabSession: () => WorkbookCollabSession,
|
|
43
43
|
applyDocsOp: () => applyDocsOp,
|
|
44
|
+
asLoadedDocsSnapshot: () => asLoadedDocsSnapshot,
|
|
44
45
|
canonicalDocsSnapshot: () => canonicalDocsSnapshot,
|
|
45
46
|
canonicalDocsString: () => canonicalDocsString,
|
|
46
47
|
canonicalKeys: () => canonicalKeys,
|
|
@@ -949,6 +950,104 @@ function invertDocsOp(op, preDoc) {
|
|
|
949
950
|
}
|
|
950
951
|
var DOCS_TRANSFORM_VERSION = "univer-1.0.4+docs-ot-r6";
|
|
951
952
|
|
|
953
|
+
// src/univer/collab/docs-ot/state-hash.ts
|
|
954
|
+
var import_core4 = require("@univerjs/core");
|
|
955
|
+
|
|
956
|
+
// src/docs/sanitize-univer-doc-snapshot.ts
|
|
957
|
+
var import_core2 = require("@univerjs/core");
|
|
958
|
+
|
|
959
|
+
// src/core/document-page-style.ts
|
|
960
|
+
var TRADITIONAL = 1;
|
|
961
|
+
var PORTRAIT = 0;
|
|
962
|
+
var PX_PER_INCH = 96;
|
|
963
|
+
var DEFAULT_DOCUMENT_PAGE_STYLE = {
|
|
964
|
+
pageSize: { width: 816, height: 1056 },
|
|
965
|
+
documentFlavor: TRADITIONAL,
|
|
966
|
+
pageOrient: PORTRAIT,
|
|
967
|
+
marginTop: PX_PER_INCH,
|
|
968
|
+
marginBottom: PX_PER_INCH,
|
|
969
|
+
marginLeft: PX_PER_INCH,
|
|
970
|
+
marginRight: PX_PER_INCH,
|
|
971
|
+
// Univer applies no paragraph spacing to a paginated page by itself; without this every paragraph
|
|
972
|
+
// runs into the next (Google Docs' own default: 1.15 lines, 10px after).
|
|
973
|
+
defaultParagraphStyle: { spaceAbove: { v: 0 }, spaceBelow: { v: 10 }, lineSpacing: 1.15 }
|
|
974
|
+
};
|
|
975
|
+
function defaultDocumentPageStyle() {
|
|
976
|
+
return {
|
|
977
|
+
...DEFAULT_DOCUMENT_PAGE_STYLE,
|
|
978
|
+
pageSize: { ...DEFAULT_DOCUMENT_PAGE_STYLE.pageSize },
|
|
979
|
+
defaultParagraphStyle: { ...DEFAULT_DOCUMENT_PAGE_STYLE.defaultParagraphStyle }
|
|
980
|
+
};
|
|
981
|
+
}
|
|
982
|
+
function isLegacySqueezedPageStyle(style) {
|
|
983
|
+
const size = style?.pageSize;
|
|
984
|
+
return !!size && size.width === 595 && size.height === 842 && style?.marginLeft === 90 && style?.marginRight === 90 && style?.marginTop === 72 && style?.marginBottom === 72;
|
|
985
|
+
}
|
|
986
|
+
var PAGE_COLORS = ["#ffffff", "#fff8e7", "#f3f3f3", "#e8f0fe", "#e6f4ea", "#fef7e0"];
|
|
987
|
+
var DEFAULT_PAGE_COLOR = PAGE_COLORS[0];
|
|
988
|
+
|
|
989
|
+
// src/docs/sanitize-univer-doc-snapshot.ts
|
|
990
|
+
var NAMED_STYLE_STRING_TO_NUMBER = Object.fromEntries(
|
|
991
|
+
Object.entries(import_core2.NamedStyleType).filter(([key, val]) => typeof val === "number" && isNaN(Number(key))).map(([key, val]) => [key, val])
|
|
992
|
+
);
|
|
993
|
+
function sanitizeUniverDocSnapshot(snapshot, docId, opts = {}) {
|
|
994
|
+
restorePageStyle(snapshot, docId, opts.quiet === true);
|
|
995
|
+
ensureTextRuns(snapshot);
|
|
996
|
+
const paragraphs = snapshot?.body?.paragraphs;
|
|
997
|
+
if (!Array.isArray(paragraphs)) return snapshot;
|
|
998
|
+
let fixed = 0;
|
|
999
|
+
for (const paragraph of paragraphs) {
|
|
1000
|
+
const style = paragraph?.paragraphStyle;
|
|
1001
|
+
const value = style?.namedStyleType;
|
|
1002
|
+
if (typeof value === "string") {
|
|
1003
|
+
const numeric = NAMED_STYLE_STRING_TO_NUMBER[value];
|
|
1004
|
+
if (numeric !== void 0) {
|
|
1005
|
+
style.namedStyleType = numeric;
|
|
1006
|
+
fixed += 1;
|
|
1007
|
+
} else {
|
|
1008
|
+
delete style.namedStyleType;
|
|
1009
|
+
fixed += 1;
|
|
1010
|
+
}
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
if (fixed > 0 && opts.quiet !== true) {
|
|
1014
|
+
console.warn(
|
|
1015
|
+
`[data-tables] RECOVERY: sanitized ${fixed} string namedStyleType value(s) to numeric NamedStyleType in document snapshot${docId ? ` ${docId}` : ""}. The snapshot was written with the wrong enum encoding (string instead of number) and would have crashed Univer's <ParagraphMenu>. Fix the snapshot writer to emit numeric NamedStyleType values.`
|
|
1016
|
+
);
|
|
1017
|
+
}
|
|
1018
|
+
return snapshot;
|
|
1019
|
+
}
|
|
1020
|
+
function restorePageStyle(snapshot, docId, quiet = false) {
|
|
1021
|
+
if (!snapshot || typeof snapshot !== "object") return;
|
|
1022
|
+
const style = snapshot.documentStyle;
|
|
1023
|
+
if (style?.pageSize?.width && isLegacySqueezedPageStyle(style)) {
|
|
1024
|
+
const page = defaultDocumentPageStyle();
|
|
1025
|
+
snapshot.documentStyle = { ...style, ...page, defaultParagraphStyle: style.defaultParagraphStyle ?? page.defaultParagraphStyle };
|
|
1026
|
+
return;
|
|
1027
|
+
}
|
|
1028
|
+
if (style?.pageSize?.width) {
|
|
1029
|
+
if (!style.documentFlavor) {
|
|
1030
|
+
const page = defaultDocumentPageStyle();
|
|
1031
|
+
Object.assign(style, { documentFlavor: page.documentFlavor });
|
|
1032
|
+
if (page.defaultParagraphStyle) style.defaultParagraphStyle ??= page.defaultParagraphStyle;
|
|
1033
|
+
}
|
|
1034
|
+
return;
|
|
1035
|
+
}
|
|
1036
|
+
snapshot.documentStyle = {
|
|
1037
|
+
...defaultDocumentPageStyle(),
|
|
1038
|
+
...snapshot.documentStyle ?? {},
|
|
1039
|
+
pageSize: defaultDocumentPageStyle().pageSize
|
|
1040
|
+
};
|
|
1041
|
+
if (quiet) return;
|
|
1042
|
+
console.warn(
|
|
1043
|
+
`[data-tables] RECOVERY: document snapshot${docId ? ` ${docId}` : ""} had no documentStyle.pageSize \u2014 restored the default Letter page geometry. Without a page box Univer lays the body out unbounded: text does not wrap and the viewport has no scrollable extent, so the document appears frozen. Fix the snapshot writer (agent/markdown converters must stamp DEFAULT_DOCUMENT_PAGE_STYLE).`
|
|
1044
|
+
);
|
|
1045
|
+
}
|
|
1046
|
+
function ensureTextRuns(snapshot) {
|
|
1047
|
+
const body = snapshot?.body;
|
|
1048
|
+
if (body && typeof body === "object" && !Array.isArray(body.textRuns)) body.textRuns = [];
|
|
1049
|
+
}
|
|
1050
|
+
|
|
952
1051
|
// src/univer/collab/docs-ot/state-hash.ts
|
|
953
1052
|
var DOC_LOCAL_KEYS = ["rev", "__matrxCollabCovered", "__collab", "disabled", "layoutState", "textRanges", "selections"];
|
|
954
1053
|
function sortDeep(v) {
|
|
@@ -1008,6 +1107,7 @@ function canonicalBody(body) {
|
|
|
1008
1107
|
const b = { ...body };
|
|
1009
1108
|
b.textRuns = canonicalRuns(b.textRuns);
|
|
1010
1109
|
if (Array.isArray(b.paragraphs)) b.paragraphs = b.paragraphs.map(({ paragraphId: _p, ...p }) => p);
|
|
1110
|
+
if (Array.isArray(b.sectionBreaks)) b.sectionBreaks = b.sectionBreaks.map(({ sectionId: _s, ...x }) => x);
|
|
1011
1111
|
b.customRanges = foldPieces(b.customRanges, (r) => JSON.stringify([rootId(r.rangeId), r.rangeType, sortDeep(r.properties ?? {})])).map((r) => ({
|
|
1012
1112
|
...r,
|
|
1013
1113
|
rangeId: rootId(r.rangeId)
|
|
@@ -1022,9 +1122,44 @@ function canonicalBody(body) {
|
|
|
1022
1122
|
}
|
|
1023
1123
|
return b;
|
|
1024
1124
|
}
|
|
1125
|
+
function asLoadedDocsSnapshot(snapshot) {
|
|
1126
|
+
const s = stampDeterministicIds(structuredClone(snapshot ?? {}));
|
|
1127
|
+
delete s.id;
|
|
1128
|
+
for (const k of DOC_LOCAL_KEYS) delete s[k];
|
|
1129
|
+
sanitizeUniverDocSnapshot(s, void 0, { quiet: true });
|
|
1130
|
+
const model = new import_core4.DocumentDataModel(s);
|
|
1131
|
+
try {
|
|
1132
|
+
return structuredClone(model.getSnapshot());
|
|
1133
|
+
} finally {
|
|
1134
|
+
model.dispose();
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
var isEmptyDeep = (v) => v == null || v === "" || (Array.isArray(v) ? v.every(isEmptyDeep) : typeof v === "object" ? Object.values(v).every(isEmptyDeep) : false);
|
|
1138
|
+
function canonicalResources(resources) {
|
|
1139
|
+
if (!Array.isArray(resources)) return [];
|
|
1140
|
+
const out = [];
|
|
1141
|
+
for (const r of resources) {
|
|
1142
|
+
if (!r || typeof r.name !== "string") continue;
|
|
1143
|
+
let data = r.data;
|
|
1144
|
+
if (typeof data === "string" && data !== "") {
|
|
1145
|
+
try {
|
|
1146
|
+
data = JSON.parse(data);
|
|
1147
|
+
} catch {
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
if (isEmptyDeep(data)) continue;
|
|
1151
|
+
out.push({ name: r.name, data: sortDeep(data) });
|
|
1152
|
+
}
|
|
1153
|
+
return out.sort((a, b) => a.name.localeCompare(b.name));
|
|
1154
|
+
}
|
|
1025
1155
|
function canonicalDocsSnapshot(snapshot) {
|
|
1026
|
-
const s =
|
|
1156
|
+
const s = asLoadedDocsSnapshot(snapshot);
|
|
1027
1157
|
delete s.id;
|
|
1158
|
+
s.resources = canonicalResources(s.resources);
|
|
1159
|
+
if (s.settings && typeof s.settings === "object") {
|
|
1160
|
+
s.settings = { ...s.settings };
|
|
1161
|
+
delete s.settings.zoomRatio;
|
|
1162
|
+
}
|
|
1028
1163
|
for (const k of DOC_LOCAL_KEYS) delete s[k];
|
|
1029
1164
|
s.body = canonicalBody(s.body);
|
|
1030
1165
|
for (const seg of ["headers", "footers", "notes"]) {
|
|
@@ -1232,7 +1367,10 @@ function openDocsOtRoom(o) {
|
|
|
1232
1367
|
queue = next.filter((q) => !isNoopDocsOp(q));
|
|
1233
1368
|
if (isNoopDocsOp(op)) return;
|
|
1234
1369
|
}
|
|
1235
|
-
if (!session.local(op, { ...inverse !== void 0 ? { inverse } : {}, label: m.cmd ?? RICH_TEXT_EDITING }))
|
|
1370
|
+
if (!session.local(op, { ...inverse !== void 0 ? { inverse } : {}, label: m.cmd ?? RICH_TEXT_EDITING })) {
|
|
1371
|
+
notice({ kind: "not_live" });
|
|
1372
|
+
session.rebuild("not_live");
|
|
1373
|
+
}
|
|
1236
1374
|
};
|
|
1237
1375
|
const unsubLocal = port.onLocal(onLocal);
|
|
1238
1376
|
const target = o.compositionTarget === void 0 ? typeof document !== "undefined" ? document : null : o.compositionTarget;
|
|
@@ -1294,7 +1432,7 @@ var import_awareness2 = require("y-protocols/awareness");
|
|
|
1294
1432
|
var import_collab3 = require("@ai-matrx/data/realtime/collab");
|
|
1295
1433
|
|
|
1296
1434
|
// src/docs/remote-carets.ts
|
|
1297
|
-
var
|
|
1435
|
+
var import_core5 = require("@univerjs/core");
|
|
1298
1436
|
var CARET_HEARTBEAT_MS = 2e3;
|
|
1299
1437
|
var CARET_STALE_MS = 12e3;
|
|
1300
1438
|
var CARET_MAX_RANGES = 4;
|
|
@@ -1312,8 +1450,8 @@ function movePeerRangesThroughBodyEdit(ranges, actions) {
|
|
|
1312
1450
|
const e = sub.e;
|
|
1313
1451
|
return ranges.map((r) => {
|
|
1314
1452
|
const collapsed = r.start === r.end;
|
|
1315
|
-
const start =
|
|
1316
|
-
return { start, end: collapsed ? start :
|
|
1453
|
+
const start = import_core5.TextX.transformPosition(e, r.start, false);
|
|
1454
|
+
return { start, end: collapsed ? start : import_core5.TextX.transformPosition(e, r.end, true) };
|
|
1317
1455
|
});
|
|
1318
1456
|
}
|
|
1319
1457
|
var sameRanges = (a, b) => a.length === b.length && a.every((r, i) => r.start === b[i].start && r.end === b[i].end);
|
|
@@ -1451,15 +1589,6 @@ async function documentUsesOrderedRoom(documentId, knob, isNewDocument) {
|
|
|
1451
1589
|
if (knob === "new") return isNewDocument();
|
|
1452
1590
|
return false;
|
|
1453
1591
|
}
|
|
1454
|
-
function pickColor2(uid) {
|
|
1455
|
-
const palette = ["#ef4444", "#f59e0b", "#10b981", "#3b82f6", "#8b5cf6", "#ec4899", "#14b8a6", "#f97316"];
|
|
1456
|
-
let h = 2166136261;
|
|
1457
|
-
for (let i = 0; i < uid.length; i++) {
|
|
1458
|
-
h ^= uid.charCodeAt(i);
|
|
1459
|
-
h = Math.imul(h, 16777619);
|
|
1460
|
-
}
|
|
1461
|
-
return palette[Math.abs(h) % palette.length] ?? "#ec4899";
|
|
1462
|
-
}
|
|
1463
1592
|
function documentOtFactory(o) {
|
|
1464
1593
|
return async (basePort, onAwareness) => {
|
|
1465
1594
|
const latest = await getLatestDocumentSnapshot(o.documentId);
|
|
@@ -1473,7 +1602,8 @@ function documentOtFactory(o) {
|
|
|
1473
1602
|
}
|
|
1474
1603
|
const doc = new Y2.Doc();
|
|
1475
1604
|
const awareness = new import_awareness2.Awareness(doc);
|
|
1476
|
-
awareness.setLocalState({ uid: o.uid, clientId: o.clientId, name: o.displayName ?? o.uid.slice(0, 8),
|
|
1605
|
+
awareness.setLocalState({ uid: o.uid, clientId: o.clientId, name: o.displayName ?? o.uid.slice(0, 8), ts: Date.now() });
|
|
1606
|
+
const stopColor = (0, import_collab3.claimCollaboratorColor)(awareness, { uid: o.uid, clientId: o.clientId });
|
|
1477
1607
|
const carets = new RemoteCaretBook(awareness.clientID);
|
|
1478
1608
|
const emit = () => onAwareness({ states: new Map(awareness.getStates()), selfUid: o.uid, carets: carets.list() });
|
|
1479
1609
|
const publishAwareness = () => {
|
|
@@ -1559,6 +1689,7 @@ function documentOtFactory(o) {
|
|
|
1559
1689
|
replace: (snapshot) => room.replace(snapshot),
|
|
1560
1690
|
stop: () => {
|
|
1561
1691
|
clearInterval(caretTimer);
|
|
1692
|
+
stopColor();
|
|
1562
1693
|
room.stop();
|
|
1563
1694
|
awareness.off("change", publishAwareness);
|
|
1564
1695
|
provider.disconnect();
|
|
@@ -1880,7 +2011,7 @@ function transformAxis(x, y, side) {
|
|
|
1880
2011
|
}
|
|
1881
2012
|
|
|
1882
2013
|
// src/collab/sheets/transform/formula.ts
|
|
1883
|
-
var
|
|
2014
|
+
var import_core6 = require("@univerjs/core");
|
|
1884
2015
|
var import_engine_formula = require("@univerjs/engine-formula");
|
|
1885
2016
|
var import_sheets = require("@univerjs/sheets");
|
|
1886
2017
|
var REF_ERROR = "#REF!";
|
|
@@ -1932,8 +2063,8 @@ function referencedSheetNames(text) {
|
|
|
1932
2063
|
}
|
|
1933
2064
|
return [...out];
|
|
1934
2065
|
}
|
|
1935
|
-
var fullRowsRange = (start, count) => ({ startRow: start, endRow: start + count - 1, startColumn: 0, endColumn: FULL, rangeType:
|
|
1936
|
-
var fullColsRange = (start, count) => ({ startRow: 0, endRow: FULL, startColumn: start, endColumn: start + count - 1, rangeType:
|
|
2066
|
+
var fullRowsRange = (start, count) => ({ startRow: start, endRow: start + count - 1, startColumn: 0, endColumn: FULL, rangeType: import_core6.RANGE_TYPE.ROW });
|
|
2067
|
+
var fullColsRange = (start, count) => ({ startRow: 0, endRow: FULL, startColumn: start, endColumn: start + count - 1, rangeType: import_core6.RANGE_TYPE.COLUMN });
|
|
1937
2068
|
var startV = (v) => Number.isNaN(v) || v == null ? -Infinity : v;
|
|
1938
2069
|
var endV = (v) => Number.isNaN(v) || v == null ? Infinity : v;
|
|
1939
2070
|
function startEnd(r) {
|
|
@@ -1942,9 +2073,9 @@ function startEnd(r) {
|
|
|
1942
2073
|
function checkMoveEdge(origin, from) {
|
|
1943
2074
|
const startRow = startV(origin.startRow), endRow = endV(origin.endRow), startColumn = startV(origin.startColumn), endColumn = endV(origin.endColumn);
|
|
1944
2075
|
const fromStartRow = startV(from.startRow), fromEndRow = endV(from.endRow), fromStartColumn = startV(from.startColumn), fromEndColumn = endV(from.endColumn);
|
|
1945
|
-
const rowsCover = () => origin.rangeType ===
|
|
1946
|
-
const columnsCover = () => origin.rangeType ===
|
|
1947
|
-
const allCover = () => origin.rangeType ===
|
|
2076
|
+
const rowsCover = () => origin.rangeType === import_core6.RANGE_TYPE.COLUMN && from.rangeType === import_core6.RANGE_TYPE.COLUMN || startRow >= fromStartRow && endRow <= fromEndRow;
|
|
2077
|
+
const columnsCover = () => origin.rangeType === import_core6.RANGE_TYPE.ROW && from.rangeType === import_core6.RANGE_TYPE.ROW || startColumn >= fromStartColumn && endColumn <= fromEndColumn;
|
|
2078
|
+
const allCover = () => origin.rangeType === import_core6.RANGE_TYPE.ALL && from.rangeType === import_core6.RANGE_TYPE.ALL;
|
|
1948
2079
|
if (rowsCover() && columnsCover() || allCover()) return 4;
|
|
1949
2080
|
if (columnsCover() && startRow >= fromStartRow && startRow <= fromEndRow && endRow > fromEndRow) return 0;
|
|
1950
2081
|
if (columnsCover() && endRow >= fromStartRow && endRow <= fromEndRow && startRow < fromStartRow) return 1;
|
|
@@ -1955,14 +2086,14 @@ function checkMoveEdge(origin, from) {
|
|
|
1955
2086
|
function getMoveNewRange(moveEdge, result, from, to, origin, remain) {
|
|
1956
2087
|
const { startRow, endRow, startColumn, endColumn, rangeType } = startEnd(result);
|
|
1957
2088
|
const f = startEnd(from);
|
|
1958
|
-
const fromRangeType = from.rangeType ??
|
|
2089
|
+
const fromRangeType = from.rangeType ?? import_core6.RANGE_TYPE.NORMAL;
|
|
1959
2090
|
const t = startEnd(to);
|
|
1960
2091
|
const rm = startEnd(remain);
|
|
1961
2092
|
const o = startEnd(origin);
|
|
1962
|
-
const originRangeType = origin.rangeType ??
|
|
2093
|
+
const originRangeType = origin.rangeType ?? import_core6.RANGE_TYPE.NORMAL;
|
|
1963
2094
|
const newRange = { ...origin };
|
|
1964
|
-
const rowsCover = () => rangeType ===
|
|
1965
|
-
const columnsCover = () => rangeType ===
|
|
2095
|
+
const rowsCover = () => rangeType === import_core6.RANGE_TYPE.COLUMN && originRangeType === import_core6.RANGE_TYPE.COLUMN || startColumn >= o.startColumn && endColumn <= o.endColumn;
|
|
2096
|
+
const columnsCover = () => rangeType === import_core6.RANGE_TYPE.ROW && originRangeType === import_core6.RANGE_TYPE.ROW || startRow >= o.startRow && endRow <= o.endRow;
|
|
1966
2097
|
if (moveEdge === 0) {
|
|
1967
2098
|
if (!rowsCover()) return void 0;
|
|
1968
2099
|
if (startRow < o.startRow) newRange.startRow = startRow;
|
|
@@ -1985,7 +2116,7 @@ function getMoveNewRange(moveEdge, result, from, to, origin, remain) {
|
|
|
1985
2116
|
else return void 0;
|
|
1986
2117
|
} else if (moveEdge === 4) {
|
|
1987
2118
|
Object.assign(newRange, { startRow, startColumn, endRow, endColumn });
|
|
1988
|
-
} else if (f.startColumn <= o.startColumn && f.endColumn >= o.endColumn || fromRangeType ===
|
|
2119
|
+
} else if (f.startColumn <= o.startColumn && f.endColumn >= o.endColumn || fromRangeType === import_core6.RANGE_TYPE.ROW && originRangeType === import_core6.RANGE_TYPE.ROW) {
|
|
1989
2120
|
const n = f.endRow - f.startRow + 1;
|
|
1990
2121
|
if (from.endRow < o.startRow) {
|
|
1991
2122
|
if (t.startRow >= o.startRow) newRange.startRow -= n;
|
|
@@ -1997,7 +2128,7 @@ function getMoveNewRange(moveEdge, result, from, to, origin, remain) {
|
|
|
1997
2128
|
if (t.startRow <= o.startRow) newRange.startRow += n;
|
|
1998
2129
|
else if (t.startRow >= o.endRow) newRange.endRow -= n;
|
|
1999
2130
|
}
|
|
2000
|
-
} else if (f.startRow <= o.startRow && f.endRow >= o.endRow || fromRangeType ===
|
|
2131
|
+
} else if (f.startRow <= o.startRow && f.endRow >= o.endRow || fromRangeType === import_core6.RANGE_TYPE.COLUMN && originRangeType === import_core6.RANGE_TYPE.COLUMN) {
|
|
2001
2132
|
const n = f.endColumn - f.startColumn + 1;
|
|
2002
2133
|
if (from.endColumn < o.startColumn) {
|
|
2003
2134
|
if (t.startColumn >= o.startColumn) newRange.startColumn -= n;
|
|
@@ -2019,7 +2150,7 @@ function moveRange(range, axis, op) {
|
|
|
2019
2150
|
const isRow = axis === "row";
|
|
2020
2151
|
if (op.kind === "insert") {
|
|
2021
2152
|
const r = isRow ? fullRowsRange(op.at, op.count) : fullColsRange(op.at, op.count);
|
|
2022
|
-
const ops2 = isRow ? (0, import_sheets.handleInsertRow)({ id: import_sheets.EffectRefRangId.InsertRowCommandId, params: { range: r, unitId: "", subUnitId: "", direction:
|
|
2153
|
+
const ops2 = isRow ? (0, import_sheets.handleInsertRow)({ id: import_sheets.EffectRefRangId.InsertRowCommandId, params: { range: r, unitId: "", subUnitId: "", direction: import_core6.Direction.DOWN } }, range) : (0, import_sheets.handleInsertCol)({ id: import_sheets.EffectRefRangId.InsertColCommandId, params: { range: r, unitId: "", subUnitId: "", direction: import_core6.Direction.RIGHT } }, range);
|
|
2023
2154
|
const res2 = (0, import_sheets.runRefRangeMutations)(ops2, range);
|
|
2024
2155
|
return res2 == null ? void 0 : { ...range, ...res2 };
|
|
2025
2156
|
}
|
|
@@ -2032,11 +2163,11 @@ function moveRange(range, axis, op) {
|
|
|
2032
2163
|
const from = isRow ? fullRowsRange(op.from, op.count) : fullColsRange(op.from, op.count);
|
|
2033
2164
|
const to = isRow ? fullRowsRange(op.to, op.count) : fullColsRange(op.to, op.count);
|
|
2034
2165
|
const moveEdge = checkMoveEdge(range, from);
|
|
2035
|
-
let remain = (0,
|
|
2166
|
+
let remain = (0, import_core6.getIntersectRange)(range, from);
|
|
2036
2167
|
if (isRow) {
|
|
2037
2168
|
if (remain == null && (from.endRow < range.startRow && to.endRow <= range.startRow || from.startRow > range.endRow && to.startRow > range.endRow)) return void 0;
|
|
2038
2169
|
} else if (remain == null && (from.endColumn < range.startColumn && to.endColumn <= range.startColumn || from.startColumn > range.endColumn && to.startColumn > range.endColumn)) return void 0;
|
|
2039
|
-
remain ??= { startRow: range.startRow, endRow: range.endRow, startColumn: range.startColumn, endColumn: range.endColumn, rangeType:
|
|
2170
|
+
remain ??= { startRow: range.startRow, endRow: range.endRow, startColumn: range.startColumn, endColumn: range.endColumn, rangeType: import_core6.RANGE_TYPE.NORMAL };
|
|
2040
2171
|
const ops = isRow ? (0, import_sheets.handleMoveRows)({ id: import_sheets.EffectRefRangId.MoveRowsCommandId, params: { toRange: to, fromRange: from } }, remain) : (0, import_sheets.handleMoveCols)({ id: import_sheets.EffectRefRangId.MoveColsCommandId, params: { toRange: to, fromRange: from } }, remain);
|
|
2041
2172
|
const res = (0, import_sheets.runRefRangeMutations)(ops, remain);
|
|
2042
2173
|
if (res == null) return REF_ERROR;
|
|
@@ -2067,7 +2198,7 @@ function rewriteFormula(text, ctx, change) {
|
|
|
2067
2198
|
if (!sheetName) continue;
|
|
2068
2199
|
token = (0, import_engine_formula.serializeRangeToRefString)({ range, sheetName: change.name, unitId });
|
|
2069
2200
|
} else {
|
|
2070
|
-
const moved = moveRange(
|
|
2201
|
+
const moved = moveRange(import_core6.Rectangle.moveOffset(range, 0, 0), change.axis, change.op);
|
|
2071
2202
|
if (moved === void 0) continue;
|
|
2072
2203
|
token = moved === REF_ERROR ? REF_ERROR : (0, import_engine_formula.serializeRangeToRefString)({ range: moved, sheetName: target === ctx.ownSheet && !ctx.keepQualifier ? "" : sheetName, unitId });
|
|
2073
2204
|
}
|
|
@@ -3338,7 +3469,7 @@ function univerSheetsOtPort(o) {
|
|
|
3338
3469
|
const a = forApply(m);
|
|
3339
3470
|
applying = true;
|
|
3340
3471
|
try {
|
|
3341
|
-
const ok2 = cs.syncExecuteCommand(a.id, { ...json(a.params), unitId: u }, {
|
|
3472
|
+
const ok2 = cs.syncExecuteCommand(a.id, { ...json(a.params), unitId: u }, { fromCollab: true });
|
|
3342
3473
|
if (ok2 === false) throw new Error(`"${m.id}" was refused by the editor`);
|
|
3343
3474
|
} finally {
|
|
3344
3475
|
applying = false;
|
|
@@ -3512,7 +3643,7 @@ async function workbookUsesOrderedRoom(workbookId, knob, isNewWorkbook) {
|
|
|
3512
3643
|
if (knob === "new") return isNewWorkbook();
|
|
3513
3644
|
return false;
|
|
3514
3645
|
}
|
|
3515
|
-
function
|
|
3646
|
+
function pickColor2(uid) {
|
|
3516
3647
|
const palette = ["#ef4444", "#f59e0b", "#10b981", "#3b82f6", "#8b5cf6", "#ec4899", "#14b8a6", "#f97316"];
|
|
3517
3648
|
let h = 2166136261;
|
|
3518
3649
|
for (let i = 0; i < uid.length; i++) {
|
|
@@ -3537,7 +3668,7 @@ async function startWorkbookOtRoom(port, o) {
|
|
|
3537
3668
|
uid: o.uid,
|
|
3538
3669
|
clientId: o.clientId,
|
|
3539
3670
|
name: o.displayName ?? o.uid.slice(0, 8),
|
|
3540
|
-
color:
|
|
3671
|
+
color: pickColor2(o.uid),
|
|
3541
3672
|
sheetId: null,
|
|
3542
3673
|
row: null,
|
|
3543
3674
|
col: null,
|