@arbidocs/react 0.4.3 → 0.4.5
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/README.md +33 -0
- package/dist/artifacts/index.cjs +458 -0
- package/dist/artifacts/index.cjs.map +1 -0
- package/dist/artifacts/index.d.cts +276 -0
- package/dist/artifacts/index.d.ts +276 -0
- package/dist/artifacts/index.js +434 -0
- package/dist/artifacts/index.js.map +1 -0
- package/dist/artifacts/redline-core.cjs +20 -0
- package/dist/artifacts/redline-core.cjs.map +1 -0
- package/dist/artifacts/redline-core.d.cts +36 -0
- package/dist/artifacts/redline-core.d.ts +36 -0
- package/dist/artifacts/redline-core.js +3 -0
- package/dist/artifacts/redline-core.js.map +1 -0
- package/dist/chunk-2DXS7L7M.cjs +302 -0
- package/dist/chunk-2DXS7L7M.cjs.map +1 -0
- package/dist/{chunk-ORKGCXG3.cjs → chunk-7BDGLRQX.cjs} +123 -427
- package/dist/chunk-7BDGLRQX.cjs.map +1 -0
- package/dist/chunk-7V7B7OEM.cjs +318 -0
- package/dist/chunk-7V7B7OEM.cjs.map +1 -0
- package/dist/{chunk-MIJRORQL.js → chunk-DVRJFLE7.js} +8 -302
- package/dist/chunk-DVRJFLE7.js.map +1 -0
- package/dist/{chunk-EJ2BMHYK.js → chunk-FSMIN5VX.js} +4 -3
- package/dist/chunk-FSMIN5VX.js.map +1 -0
- package/dist/chunk-H7ZZQ4ZV.js +305 -0
- package/dist/chunk-H7ZZQ4ZV.js.map +1 -0
- package/dist/{chunk-JKO3NR5L.js → chunk-HDCRPPBW.js} +5 -23
- package/dist/chunk-HDCRPPBW.js.map +1 -0
- package/dist/chunk-J4MX2W4H.js +26 -0
- package/dist/chunk-J4MX2W4H.js.map +1 -0
- package/dist/{chunk-6ALMBER7.js → chunk-N5SVBDLC.js} +4 -9
- package/dist/chunk-N5SVBDLC.js.map +1 -0
- package/dist/{chunk-RZQACYNQ.cjs → chunk-OBNTJEEO.cjs} +14 -20
- package/dist/chunk-OBNTJEEO.cjs.map +1 -0
- package/dist/{chunk-BXP6S34V.cjs → chunk-PGLV23SB.cjs} +13 -12
- package/dist/chunk-PGLV23SB.cjs.map +1 -0
- package/dist/chunk-RKWNX32A.js +299 -0
- package/dist/chunk-RKWNX32A.js.map +1 -0
- package/dist/chunk-S6A6FSG7.cjs +13 -0
- package/dist/chunk-S6A6FSG7.cjs.map +1 -0
- package/dist/chunk-SN5YV6FF.js +11 -0
- package/dist/chunk-SN5YV6FF.js.map +1 -0
- package/dist/{chunk-7IOCMCC5.cjs → chunk-TMPDW7J5.cjs} +3 -23
- package/dist/chunk-TMPDW7J5.cjs.map +1 -0
- package/dist/chunk-VJWAP2HJ.cjs +303 -0
- package/dist/chunk-VJWAP2HJ.cjs.map +1 -0
- package/dist/chunk-ZMTLGO3K.cjs +29 -0
- package/dist/chunk-ZMTLGO3K.cjs.map +1 -0
- package/dist/chunk-ZY53R6I4.js +276 -0
- package/dist/chunk-ZY53R6I4.js.map +1 -0
- package/dist/index.cjs +784 -612
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1522 -82
- package/dist/index.d.ts +1522 -82
- package/dist/index.js +327 -250
- package/dist/index.js.map +1 -1
- package/dist/shell/index.cjs +8 -7
- package/dist/shell/index.js +3 -2
- package/dist/ui/index.cjs +156 -154
- package/dist/ui/index.js +4 -2
- package/dist/viewers/index.cjs +9 -8
- package/dist/viewers/index.cjs.map +1 -1
- package/dist/viewers/index.js +3 -2
- package/dist/viewers/index.js.map +1 -1
- package/package.json +19 -3
- package/dist/chunk-6ALMBER7.js.map +0 -1
- package/dist/chunk-7IOCMCC5.cjs.map +0 -1
- package/dist/chunk-BXP6S34V.cjs.map +0 -1
- package/dist/chunk-EJ2BMHYK.js.map +0 -1
- package/dist/chunk-JKO3NR5L.js.map +0 -1
- package/dist/chunk-MIJRORQL.js.map +0 -1
- package/dist/chunk-ORKGCXG3.cjs.map +0 -1
- package/dist/chunk-RZQACYNQ.cjs.map +0 -1
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var diff = require('diff');
|
|
4
|
+
|
|
5
|
+
// src/artifacts/redline-diff.ts
|
|
6
|
+
var UNSAFE_LINE = /^(?:\s*(?:```|~~~).*|\s*\|.*\||\s*(?:[-=*_]\s*){3,})\s*$/;
|
|
7
|
+
var STRUCTURAL_PREFIX = /^(\s*(?:#{1,6}\s+|[-*+]\s+|\d+[.)]\s+|>\s*)+)/;
|
|
8
|
+
function escapeForHtmlTag(text) {
|
|
9
|
+
return text.replace(/</g, "<").replace(/>/g, ">");
|
|
10
|
+
}
|
|
11
|
+
function wrapLineAsRedline(line, tag) {
|
|
12
|
+
if (line === "" || line.trim() === "") return line;
|
|
13
|
+
if (UNSAFE_LINE.test(line)) {
|
|
14
|
+
return `<${tag}>${escapeForHtmlTag(line)}</${tag}>`;
|
|
15
|
+
}
|
|
16
|
+
const m = line.match(STRUCTURAL_PREFIX);
|
|
17
|
+
if (m) {
|
|
18
|
+
const prefix = m[1];
|
|
19
|
+
const rest = line.slice(prefix.length);
|
|
20
|
+
if (rest === "") return line;
|
|
21
|
+
return `${prefix}<${tag}>${escapeForHtmlTag(rest)}</${tag}>`;
|
|
22
|
+
}
|
|
23
|
+
return `<${tag}>${escapeForHtmlTag(line)}</${tag}>`;
|
|
24
|
+
}
|
|
25
|
+
function wrapBlockAsRedline(block, tag) {
|
|
26
|
+
const lines = block.split("\n");
|
|
27
|
+
return lines.map((line, i) => {
|
|
28
|
+
const wrapped = wrapLineAsRedline(line, tag);
|
|
29
|
+
return i < lines.length - 1 ? wrapped + "\n" : wrapped;
|
|
30
|
+
}).join("");
|
|
31
|
+
}
|
|
32
|
+
function pairContainsUnsafeLine(text) {
|
|
33
|
+
for (const line of text.split("\n")) {
|
|
34
|
+
if (UNSAFE_LINE.test(line)) return true;
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
function buildHybridRedlineMarkdown(baseText, compareText) {
|
|
39
|
+
const lineChanges = diff.diffLines(baseText, compareText);
|
|
40
|
+
const out = [];
|
|
41
|
+
for (let i = 0; i < lineChanges.length; i++) {
|
|
42
|
+
const cur = lineChanges[i];
|
|
43
|
+
const next = lineChanges[i + 1];
|
|
44
|
+
if (cur.removed && next?.added) {
|
|
45
|
+
if (pairContainsUnsafeLine(cur.value) || pairContainsUnsafeLine(next.value)) {
|
|
46
|
+
out.push(wrapBlockAsRedline(cur.value, "del"));
|
|
47
|
+
out.push(wrapBlockAsRedline(next.value, "ins"));
|
|
48
|
+
} else {
|
|
49
|
+
const wordChanges = diff.diffWords(cur.value, next.value);
|
|
50
|
+
for (const w of wordChanges) {
|
|
51
|
+
if (w.removed) out.push(`<del>${escapeForHtmlTag(w.value)}</del>`);
|
|
52
|
+
else if (w.added) out.push(`<ins>${escapeForHtmlTag(w.value)}</ins>`);
|
|
53
|
+
else out.push(w.value);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
i++;
|
|
57
|
+
} else if (cur.removed) {
|
|
58
|
+
out.push(wrapBlockAsRedline(cur.value, "del"));
|
|
59
|
+
} else if (cur.added) {
|
|
60
|
+
out.push(wrapBlockAsRedline(cur.value, "ins"));
|
|
61
|
+
} else {
|
|
62
|
+
out.push(cur.value);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out.join("");
|
|
66
|
+
}
|
|
67
|
+
function fnv1aHex(...parts) {
|
|
68
|
+
let h = 2166136261;
|
|
69
|
+
for (const part of parts) {
|
|
70
|
+
h ^= 24415;
|
|
71
|
+
h = Math.imul(h, 16777619) >>> 0;
|
|
72
|
+
for (let i = 0; i < part.length; i++) {
|
|
73
|
+
h ^= part.charCodeAt(i);
|
|
74
|
+
h = Math.imul(h, 16777619) >>> 0;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return ("00000000" + h.toString(16)).slice(-8);
|
|
78
|
+
}
|
|
79
|
+
function makeRegionId(kind, baseText, compareText, seq) {
|
|
80
|
+
const prefix = kind === "replace" ? "p" : kind === "remove" ? "r" : kind === "add" ? "a" : "m";
|
|
81
|
+
return `${prefix}${fnv1aHex(kind, baseText, compareText, String(seq))}`;
|
|
82
|
+
}
|
|
83
|
+
function detectMoves(lineChanges) {
|
|
84
|
+
const moveByIndex = /* @__PURE__ */ new Map();
|
|
85
|
+
const moveRegions = [];
|
|
86
|
+
const removedByText = /* @__PURE__ */ new Map();
|
|
87
|
+
const addedByText = /* @__PURE__ */ new Map();
|
|
88
|
+
for (let i = 0; i < lineChanges.length; i++) {
|
|
89
|
+
const c = lineChanges[i];
|
|
90
|
+
if (c.removed) {
|
|
91
|
+
const arr = removedByText.get(c.value) ?? [];
|
|
92
|
+
arr.push(i);
|
|
93
|
+
removedByText.set(c.value, arr);
|
|
94
|
+
} else if (c.added) {
|
|
95
|
+
const arr = addedByText.get(c.value) ?? [];
|
|
96
|
+
arr.push(i);
|
|
97
|
+
addedByText.set(c.value, arr);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
let seq = 0;
|
|
101
|
+
for (const [text, removedIdx] of removedByText) {
|
|
102
|
+
const addedIdx = addedByText.get(text);
|
|
103
|
+
if (!addedIdx || addedIdx.length === 0) continue;
|
|
104
|
+
if (text.trim().length === 0) continue;
|
|
105
|
+
const n = Math.min(removedIdx.length, addedIdx.length);
|
|
106
|
+
for (let k = 0; k < n; k++) {
|
|
107
|
+
const rI = removedIdx[k];
|
|
108
|
+
const aI = addedIdx[k];
|
|
109
|
+
if (aI === rI + 1 || rI === aI + 1) continue;
|
|
110
|
+
if (moveByIndex.has(rI) || moveByIndex.has(aI)) continue;
|
|
111
|
+
const id = makeRegionId("move", text, text, seq++);
|
|
112
|
+
moveByIndex.set(rI, id);
|
|
113
|
+
moveByIndex.set(aI, id);
|
|
114
|
+
moveRegions.push({ id, kind: "move", baseText: text, compareText: text });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return { moveByIndex, moveRegions };
|
|
118
|
+
}
|
|
119
|
+
function wrapLineWithCid(line, tag, cid) {
|
|
120
|
+
if (line === "" || line.trim() === "") return line;
|
|
121
|
+
if (UNSAFE_LINE.test(line)) {
|
|
122
|
+
return `<${tag} data-cid="${cid}">${escapeForHtmlTag(line)}</${tag}>`;
|
|
123
|
+
}
|
|
124
|
+
const m = line.match(STRUCTURAL_PREFIX);
|
|
125
|
+
if (m) {
|
|
126
|
+
const prefix = m[1];
|
|
127
|
+
const rest = line.slice(prefix.length);
|
|
128
|
+
if (rest === "") return line;
|
|
129
|
+
return `${prefix}<${tag} data-cid="${cid}">${escapeForHtmlTag(rest)}</${tag}>`;
|
|
130
|
+
}
|
|
131
|
+
return `<${tag} data-cid="${cid}">${escapeForHtmlTag(line)}</${tag}>`;
|
|
132
|
+
}
|
|
133
|
+
function wrapBlockWithCid(block, tag, cid) {
|
|
134
|
+
const lines = block.split("\n");
|
|
135
|
+
return lines.map((line, i) => {
|
|
136
|
+
const wrapped = wrapLineWithCid(line, tag, cid);
|
|
137
|
+
return i < lines.length - 1 ? wrapped + "\n" : wrapped;
|
|
138
|
+
}).join("");
|
|
139
|
+
}
|
|
140
|
+
function emitWordLevelRegions(basePara, comparePara, reserveId, regions) {
|
|
141
|
+
const wordChanges = diff.diffWords(basePara, comparePara);
|
|
142
|
+
const out = [];
|
|
143
|
+
let k = 0;
|
|
144
|
+
while (k < wordChanges.length) {
|
|
145
|
+
const w = wordChanges[k];
|
|
146
|
+
const wNext = wordChanges[k + 1];
|
|
147
|
+
if (w.removed && wNext?.added) {
|
|
148
|
+
const id = reserveId("replace", w.value, wNext.value);
|
|
149
|
+
regions.push({ id, kind: "replace", baseText: w.value, compareText: wNext.value });
|
|
150
|
+
out.push(`<del data-cid="${id}">${escapeForHtmlTag(w.value)}</del>`);
|
|
151
|
+
out.push(`<ins data-cid="${id}">${escapeForHtmlTag(wNext.value)}</ins>`);
|
|
152
|
+
k += 2;
|
|
153
|
+
} else if (w.removed) {
|
|
154
|
+
const id = reserveId("remove", w.value, "");
|
|
155
|
+
regions.push({ id, kind: "remove", baseText: w.value, compareText: "" });
|
|
156
|
+
out.push(`<del data-cid="${id}">${escapeForHtmlTag(w.value)}</del>`);
|
|
157
|
+
k++;
|
|
158
|
+
} else if (w.added) {
|
|
159
|
+
const id = reserveId("add", "", w.value);
|
|
160
|
+
regions.push({ id, kind: "add", baseText: "", compareText: w.value });
|
|
161
|
+
out.push(`<ins data-cid="${id}">${escapeForHtmlTag(w.value)}</ins>`);
|
|
162
|
+
k++;
|
|
163
|
+
} else {
|
|
164
|
+
out.push(w.value);
|
|
165
|
+
k++;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return out.join("");
|
|
169
|
+
}
|
|
170
|
+
function buildHybridRedlineWithRegions(baseText, compareText) {
|
|
171
|
+
const lineChanges = diff.diffLines(baseText, compareText);
|
|
172
|
+
const { moveByIndex, moveRegions } = detectMoves(lineChanges);
|
|
173
|
+
const out = [];
|
|
174
|
+
const regions = [...moveRegions];
|
|
175
|
+
const seenIds = /* @__PURE__ */ new Map();
|
|
176
|
+
const reserveId = (kind, baseT, compareT) => {
|
|
177
|
+
const baseHash = fnv1aHex(kind, baseT, compareT);
|
|
178
|
+
const seq = seenIds.get(baseHash) ?? 0;
|
|
179
|
+
seenIds.set(baseHash, seq + 1);
|
|
180
|
+
return makeRegionId(kind, baseT, compareT, seq);
|
|
181
|
+
};
|
|
182
|
+
for (let i = 0; i < lineChanges.length; i++) {
|
|
183
|
+
const cur = lineChanges[i];
|
|
184
|
+
const next = lineChanges[i + 1];
|
|
185
|
+
const moveId = moveByIndex.get(i);
|
|
186
|
+
if (moveId) {
|
|
187
|
+
const tag = cur.removed ? "del" : "ins";
|
|
188
|
+
out.push(wrapBlockWithCid(cur.value, tag, moveId));
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (cur.removed && next?.added) {
|
|
192
|
+
if (pairContainsUnsafeLine(cur.value) || pairContainsUnsafeLine(next.value)) {
|
|
193
|
+
const id = reserveId("replace", cur.value, next.value);
|
|
194
|
+
regions.push({ id, kind: "replace", baseText: cur.value, compareText: next.value });
|
|
195
|
+
out.push(wrapBlockWithCid(cur.value, "del", id));
|
|
196
|
+
out.push(wrapBlockWithCid(next.value, "ins", id));
|
|
197
|
+
} else {
|
|
198
|
+
out.push(emitWordLevelRegions(cur.value, next.value, reserveId, regions));
|
|
199
|
+
}
|
|
200
|
+
i++;
|
|
201
|
+
} else if (cur.removed) {
|
|
202
|
+
const id = reserveId("remove", cur.value, "");
|
|
203
|
+
regions.push({ id, kind: "remove", baseText: cur.value, compareText: "" });
|
|
204
|
+
out.push(wrapBlockWithCid(cur.value, "del", id));
|
|
205
|
+
} else if (cur.added) {
|
|
206
|
+
const id = reserveId("add", "", cur.value);
|
|
207
|
+
regions.push({ id, kind: "add", baseText: "", compareText: cur.value });
|
|
208
|
+
out.push(wrapBlockWithCid(cur.value, "ins", id));
|
|
209
|
+
} else {
|
|
210
|
+
out.push(cur.value);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return { markdown: out.join(""), regions };
|
|
214
|
+
}
|
|
215
|
+
function revertWordRegion(basePara, comparePara, targetId, reserveId) {
|
|
216
|
+
const wordChanges = diff.diffWords(basePara, comparePara);
|
|
217
|
+
const out = [];
|
|
218
|
+
let matched = false;
|
|
219
|
+
let k = 0;
|
|
220
|
+
while (k < wordChanges.length) {
|
|
221
|
+
const w = wordChanges[k];
|
|
222
|
+
const wNext = wordChanges[k + 1];
|
|
223
|
+
if (w.removed && wNext?.added) {
|
|
224
|
+
const id = reserveId("replace", w.value, wNext.value);
|
|
225
|
+
if (id === targetId) {
|
|
226
|
+
out.push(w.value);
|
|
227
|
+
matched = true;
|
|
228
|
+
} else {
|
|
229
|
+
out.push(wNext.value);
|
|
230
|
+
}
|
|
231
|
+
k += 2;
|
|
232
|
+
} else if (w.removed) {
|
|
233
|
+
const id = reserveId("remove", w.value, "");
|
|
234
|
+
if (id === targetId) {
|
|
235
|
+
out.push(w.value);
|
|
236
|
+
matched = true;
|
|
237
|
+
}
|
|
238
|
+
k++;
|
|
239
|
+
} else if (w.added) {
|
|
240
|
+
const id = reserveId("add", "", w.value);
|
|
241
|
+
if (id !== targetId) {
|
|
242
|
+
out.push(w.value);
|
|
243
|
+
} else {
|
|
244
|
+
matched = true;
|
|
245
|
+
}
|
|
246
|
+
k++;
|
|
247
|
+
} else {
|
|
248
|
+
out.push(w.value);
|
|
249
|
+
k++;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return { text: out.join(""), matched };
|
|
253
|
+
}
|
|
254
|
+
function revertRedlineRegion(baseText, compareText, targetId) {
|
|
255
|
+
const lineChanges = diff.diffLines(baseText, compareText);
|
|
256
|
+
const { moveByIndex } = detectMoves(lineChanges);
|
|
257
|
+
const out = [];
|
|
258
|
+
const seenIds = /* @__PURE__ */ new Map();
|
|
259
|
+
const reserveId = (kind, baseT, compareT) => {
|
|
260
|
+
const baseHash = fnv1aHex(kind, baseT, compareT);
|
|
261
|
+
const seq = seenIds.get(baseHash) ?? 0;
|
|
262
|
+
seenIds.set(baseHash, seq + 1);
|
|
263
|
+
return makeRegionId(kind, baseT, compareT, seq);
|
|
264
|
+
};
|
|
265
|
+
for (let i = 0; i < lineChanges.length; i++) {
|
|
266
|
+
const cur = lineChanges[i];
|
|
267
|
+
const next = lineChanges[i + 1];
|
|
268
|
+
const moveId = moveByIndex.get(i);
|
|
269
|
+
if (moveId) {
|
|
270
|
+
if (moveId === targetId) {
|
|
271
|
+
if (cur.removed) out.push(cur.value);
|
|
272
|
+
} else {
|
|
273
|
+
if (cur.added) out.push(cur.value);
|
|
274
|
+
}
|
|
275
|
+
continue;
|
|
276
|
+
}
|
|
277
|
+
if (cur.removed && next?.added) {
|
|
278
|
+
if (pairContainsUnsafeLine(cur.value) || pairContainsUnsafeLine(next.value)) {
|
|
279
|
+
const id = reserveId("replace", cur.value, next.value);
|
|
280
|
+
out.push(id === targetId ? cur.value : next.value);
|
|
281
|
+
} else {
|
|
282
|
+
const { text, matched } = revertWordRegion(cur.value, next.value, targetId, reserveId);
|
|
283
|
+
out.push(matched ? text : next.value);
|
|
284
|
+
}
|
|
285
|
+
i++;
|
|
286
|
+
} else if (cur.removed) {
|
|
287
|
+
const id = reserveId("remove", cur.value, "");
|
|
288
|
+
if (id === targetId) out.push(cur.value);
|
|
289
|
+
} else if (cur.added) {
|
|
290
|
+
const id = reserveId("add", "", cur.value);
|
|
291
|
+
if (id !== targetId) out.push(cur.value);
|
|
292
|
+
} else {
|
|
293
|
+
out.push(cur.value);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return out.join("");
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
exports.buildHybridRedlineMarkdown = buildHybridRedlineMarkdown;
|
|
300
|
+
exports.buildHybridRedlineWithRegions = buildHybridRedlineWithRegions;
|
|
301
|
+
exports.revertRedlineRegion = revertRedlineRegion;
|
|
302
|
+
//# sourceMappingURL=chunk-VJWAP2HJ.cjs.map
|
|
303
|
+
//# sourceMappingURL=chunk-VJWAP2HJ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/artifacts/redline-diff.ts"],"names":["diffLines","diffWords"],"mappings":"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","file":"chunk-VJWAP2HJ.cjs","sourcesContent":["/**\n * Redline diff core\n *\n * Pure (no DOM, no Worker globals) logic for building a Word-style redline\n * markdown string from two flattened document texts. Lives outside the\n * worker file so it's straightforward to unit test.\n *\n * Strategy: hybrid line + word diff with structural safety.\n * 1. `diffLines` splits the texts into add/remove/equal blocks.\n * 2. For an adjacent [removed, added] pair (a modified region):\n * - If either side contains markdown structure that can't safely host\n * inline tags (code fences, table rows, horizontal rules), fall back\n * to block-level wrapping (whole-line del/ins, line by line).\n * - Otherwise run `diffWords`. Markdown leading markers (#, -, *, 1., >)\n * become unchanged word tokens, so when only the heading/list text\n * changes the marker stays *outside* the inline tags and the heading\n * still parses.\n * 3. Pure removed / added blocks (no paired counterpart) are wrapped\n * line-by-line so structural prefixes stay outside the tag.\n */\n\nimport { diffLines, diffWords } from 'diff'\n\n// Lines that can't safely host inline <del>/<ins> tags without breaking\n// markdown parsing. Code fences, table rows, and horizontal rules.\nconst UNSAFE_LINE = /^(?:\\s*(?:```|~~~).*|\\s*\\|.*\\||\\s*(?:[-=*_]\\s*){3,})\\s*$/\n\n// Block-level markdown structural prefix. When present on a line, putting\n// it INSIDE an inline tag stops the heading/list/blockquote from parsing,\n// so we always preserve it outside the wrapping tag.\nconst STRUCTURAL_PREFIX = /^(\\s*(?:#{1,6}\\s+|[-*+]\\s+|\\d+[.)]\\s+|>\\s*)+)/\n\nfunction escapeForHtmlTag(text: string): string {\n return text.replace(/</g, '<').replace(/>/g, '>')\n}\n\nfunction wrapLineAsRedline(line: string, tag: 'del' | 'ins'): string {\n if (line === '' || line.trim() === '') return line\n if (UNSAFE_LINE.test(line)) {\n return `<${tag}>${escapeForHtmlTag(line)}</${tag}>`\n }\n const m = line.match(STRUCTURAL_PREFIX)\n if (m) {\n const prefix = m[1]\n const rest = line.slice(prefix.length)\n if (rest === '') return line\n return `${prefix}<${tag}>${escapeForHtmlTag(rest)}</${tag}>`\n }\n return `<${tag}>${escapeForHtmlTag(line)}</${tag}>`\n}\n\nfunction wrapBlockAsRedline(block: string, tag: 'del' | 'ins'): string {\n const lines = block.split('\\n')\n return lines\n .map((line, i) => {\n const wrapped = wrapLineAsRedline(line, tag)\n return i < lines.length - 1 ? wrapped + '\\n' : wrapped\n })\n .join('')\n}\n\nfunction pairContainsUnsafeLine(text: string): boolean {\n for (const line of text.split('\\n')) {\n if (UNSAFE_LINE.test(line)) return true\n }\n return false\n}\n\nexport function buildHybridRedlineMarkdown(baseText: string, compareText: string): string {\n const lineChanges = diffLines(baseText, compareText)\n const out: string[] = []\n\n for (let i = 0; i < lineChanges.length; i++) {\n const cur = lineChanges[i]\n const next = lineChanges[i + 1]\n\n if (cur.removed && next?.added) {\n if (pairContainsUnsafeLine(cur.value) || pairContainsUnsafeLine(next.value)) {\n out.push(wrapBlockAsRedline(cur.value, 'del'))\n out.push(wrapBlockAsRedline(next.value, 'ins'))\n } else {\n const wordChanges = diffWords(cur.value, next.value)\n for (const w of wordChanges) {\n if (w.removed) out.push(`<del>${escapeForHtmlTag(w.value)}</del>`)\n else if (w.added) out.push(`<ins>${escapeForHtmlTag(w.value)}</ins>`)\n else out.push(w.value)\n }\n }\n i++ // consume the paired added entry\n } else if (cur.removed) {\n out.push(wrapBlockAsRedline(cur.value, 'del'))\n } else if (cur.added) {\n out.push(wrapBlockAsRedline(cur.value, 'ins'))\n } else {\n out.push(cur.value)\n }\n }\n\n return out.join('')\n}\n\n// ─── Regions extension ────────────────────────────────────────────────────────\n//\n// Same redline as above, but every <del>/<ins> tag carries a stable\n// `data-cid` attribute identifying the \"change region\" it belongs to. A\n// region is the smallest independently revertable change:\n//\n// - inside a safe [REM, ADD] pair, each contiguous changed-word run is its\n// own region, so a single button can revert one phrase without touching\n// other edits in the same paragraph;\n// - unsafe pairs (tables, code fences, horizontal rules) are still one\n// region for the whole block, since line-level wrapping can't safely\n// split them;\n// - a non-adjacent [removed text == added text] pair is a *move*: both\n// endpoints share one cid, render green, and one undo reverts the move.\n//\n// `revertRedlineRegion` mirrors the same walk and rebuilds the working-tree text\n// with one region \"as if it never changed\", so cids round-trip identically\n// from build → render → revert.\n\nexport type RegionKind = 'replace' | 'remove' | 'add' | 'move'\n\nexport interface RedlineRegion {\n id: string\n kind: RegionKind\n baseText: string // what the base side has for this slice\n compareText: string // what the compare side has for this slice\n}\n\nexport interface RedlineWithRegions {\n markdown: string\n regions: RedlineRegion[]\n}\n\n// Tiny deterministic hash (FNV-1a 32-bit, hex). Stable across runs and JS\n// runtimes, with no Node-only deps so this stays browser-safe.\nfunction fnv1aHex(...parts: string[]): string {\n let h = 0x811c9dc5\n for (const part of parts) {\n h ^= 0x5f5f\n h = Math.imul(h, 0x01000193) >>> 0\n for (let i = 0; i < part.length; i++) {\n h ^= part.charCodeAt(i)\n h = Math.imul(h, 0x01000193) >>> 0\n }\n }\n return ('00000000' + h.toString(16)).slice(-8)\n}\n\n// First char of the cid encodes the kind so consumers can style without a\n// region-table lookup: p=replace r=remove a=add m=move.\nfunction makeRegionId(\n kind: RegionKind,\n baseText: string,\n compareText: string,\n seq: number\n): string {\n const prefix = kind === 'replace' ? 'p' : kind === 'remove' ? 'r' : kind === 'add' ? 'a' : 'm'\n return `${prefix}${fnv1aHex(kind, baseText, compareText, String(seq))}`\n}\n\n// Move detection: a non-adjacent removed/added pair with identical text is a\n// move. Returns the move endpoints' lineChanges-indices plus a region per\n// distinct move.\nfunction detectMoves(lineChanges: { value: string; removed?: boolean; added?: boolean }[]): {\n moveByIndex: Map<number, string>\n moveRegions: RedlineRegion[]\n} {\n const moveByIndex = new Map<number, string>()\n const moveRegions: RedlineRegion[] = []\n const removedByText = new Map<string, number[]>()\n const addedByText = new Map<string, number[]>()\n\n for (let i = 0; i < lineChanges.length; i++) {\n const c = lineChanges[i]\n if (c.removed) {\n const arr = removedByText.get(c.value) ?? []\n arr.push(i)\n removedByText.set(c.value, arr)\n } else if (c.added) {\n const arr = addedByText.get(c.value) ?? []\n arr.push(i)\n addedByText.set(c.value, arr)\n }\n }\n\n let seq = 0\n for (const [text, removedIdx] of removedByText) {\n const addedIdx = addedByText.get(text)\n if (!addedIdx || addedIdx.length === 0) continue\n if (text.trim().length === 0) continue\n const n = Math.min(removedIdx.length, addedIdx.length)\n for (let k = 0; k < n; k++) {\n const rI = removedIdx[k]\n const aI = addedIdx[k]\n if (aI === rI + 1 || rI === aI + 1) continue // adjacent = replace, not move\n if (moveByIndex.has(rI) || moveByIndex.has(aI)) continue\n const id = makeRegionId('move', text, text, seq++)\n moveByIndex.set(rI, id)\n moveByIndex.set(aI, id)\n moveRegions.push({ id, kind: 'move', baseText: text, compareText: text })\n }\n }\n\n return { moveByIndex, moveRegions }\n}\n\nfunction wrapLineWithCid(line: string, tag: 'del' | 'ins', cid: string): string {\n if (line === '' || line.trim() === '') return line\n if (UNSAFE_LINE.test(line)) {\n return `<${tag} data-cid=\"${cid}\">${escapeForHtmlTag(line)}</${tag}>`\n }\n const m = line.match(STRUCTURAL_PREFIX)\n if (m) {\n const prefix = m[1]\n const rest = line.slice(prefix.length)\n if (rest === '') return line\n return `${prefix}<${tag} data-cid=\"${cid}\">${escapeForHtmlTag(rest)}</${tag}>`\n }\n return `<${tag} data-cid=\"${cid}\">${escapeForHtmlTag(line)}</${tag}>`\n}\n\nfunction wrapBlockWithCid(block: string, tag: 'del' | 'ins', cid: string): string {\n const lines = block.split('\\n')\n return lines\n .map((line, i) => {\n const wrapped = wrapLineWithCid(line, tag, cid)\n return i < lines.length - 1 ? wrapped + '\\n' : wrapped\n })\n .join('')\n}\n\n// Word-level region emission inside a safe [REM, ADD] pair.\nfunction emitWordLevelRegions(\n basePara: string,\n comparePara: string,\n reserveId: (kind: RegionKind, baseT: string, compareT: string) => string,\n regions: RedlineRegion[]\n): string {\n const wordChanges = diffWords(basePara, comparePara)\n const out: string[] = []\n let k = 0\n while (k < wordChanges.length) {\n const w = wordChanges[k]\n const wNext = wordChanges[k + 1]\n if (w.removed && wNext?.added) {\n const id = reserveId('replace', w.value, wNext.value)\n regions.push({ id, kind: 'replace', baseText: w.value, compareText: wNext.value })\n out.push(`<del data-cid=\"${id}\">${escapeForHtmlTag(w.value)}</del>`)\n out.push(`<ins data-cid=\"${id}\">${escapeForHtmlTag(wNext.value)}</ins>`)\n k += 2\n } else if (w.removed) {\n const id = reserveId('remove', w.value, '')\n regions.push({ id, kind: 'remove', baseText: w.value, compareText: '' })\n out.push(`<del data-cid=\"${id}\">${escapeForHtmlTag(w.value)}</del>`)\n k++\n } else if (w.added) {\n const id = reserveId('add', '', w.value)\n regions.push({ id, kind: 'add', baseText: '', compareText: w.value })\n out.push(`<ins data-cid=\"${id}\">${escapeForHtmlTag(w.value)}</ins>`)\n k++\n } else {\n out.push(w.value)\n k++\n }\n }\n return out.join('')\n}\n\nexport function buildHybridRedlineWithRegions(\n baseText: string,\n compareText: string\n): RedlineWithRegions {\n const lineChanges = diffLines(baseText, compareText)\n const { moveByIndex, moveRegions } = detectMoves(lineChanges)\n const out: string[] = []\n const regions: RedlineRegion[] = [...moveRegions]\n const seenIds = new Map<string, number>()\n\n const reserveId = (kind: RegionKind, baseT: string, compareT: string): string => {\n const baseHash = fnv1aHex(kind, baseT, compareT)\n const seq = seenIds.get(baseHash) ?? 0\n seenIds.set(baseHash, seq + 1)\n return makeRegionId(kind, baseT, compareT, seq)\n }\n\n for (let i = 0; i < lineChanges.length; i++) {\n const cur = lineChanges[i]\n const next = lineChanges[i + 1]\n const moveId = moveByIndex.get(i)\n\n if (moveId) {\n const tag = cur.removed ? 'del' : 'ins'\n out.push(wrapBlockWithCid(cur.value, tag, moveId))\n continue\n }\n\n if (cur.removed && next?.added) {\n if (pairContainsUnsafeLine(cur.value) || pairContainsUnsafeLine(next.value)) {\n const id = reserveId('replace', cur.value, next.value)\n regions.push({ id, kind: 'replace', baseText: cur.value, compareText: next.value })\n out.push(wrapBlockWithCid(cur.value, 'del', id))\n out.push(wrapBlockWithCid(next.value, 'ins', id))\n } else {\n out.push(emitWordLevelRegions(cur.value, next.value, reserveId, regions))\n }\n i++\n } else if (cur.removed) {\n const id = reserveId('remove', cur.value, '')\n regions.push({ id, kind: 'remove', baseText: cur.value, compareText: '' })\n out.push(wrapBlockWithCid(cur.value, 'del', id))\n } else if (cur.added) {\n const id = reserveId('add', '', cur.value)\n regions.push({ id, kind: 'add', baseText: '', compareText: cur.value })\n out.push(wrapBlockWithCid(cur.value, 'ins', id))\n } else {\n out.push(cur.value)\n }\n }\n\n return { markdown: out.join(''), regions }\n}\n\n// Word-level partial revert inside a [REM, ADD] pair.\nfunction revertWordRegion(\n basePara: string,\n comparePara: string,\n targetId: string,\n reserveId: (kind: RegionKind, baseT: string, compareT: string) => string\n): { text: string; matched: boolean } {\n const wordChanges = diffWords(basePara, comparePara)\n const out: string[] = []\n let matched = false\n let k = 0\n while (k < wordChanges.length) {\n const w = wordChanges[k]\n const wNext = wordChanges[k + 1]\n if (w.removed && wNext?.added) {\n const id = reserveId('replace', w.value, wNext.value)\n if (id === targetId) {\n out.push(w.value)\n matched = true\n } else {\n out.push(wNext.value)\n }\n k += 2\n } else if (w.removed) {\n const id = reserveId('remove', w.value, '')\n if (id === targetId) {\n out.push(w.value)\n matched = true\n }\n k++\n } else if (w.added) {\n const id = reserveId('add', '', w.value)\n if (id !== targetId) {\n out.push(w.value)\n } else {\n matched = true\n }\n k++\n } else {\n out.push(w.value)\n k++\n }\n }\n return { text: out.join(''), matched }\n}\n\n// Apply a per-region revert: rebuild the working-tree text from scratch by\n// walking the same diff and treating the target region as unchanged from\n// the base. Walking the diff ourselves (rather than string-replacing in the\n// working tree) means we don't have to worry about ambiguous matches.\nexport function revertRedlineRegion(\n baseText: string,\n compareText: string,\n targetId: string\n): string {\n const lineChanges = diffLines(baseText, compareText)\n const { moveByIndex } = detectMoves(lineChanges)\n const out: string[] = []\n const seenIds = new Map<string, number>()\n\n const reserveId = (kind: RegionKind, baseT: string, compareT: string): string => {\n const baseHash = fnv1aHex(kind, baseT, compareT)\n const seq = seenIds.get(baseHash) ?? 0\n seenIds.set(baseHash, seq + 1)\n return makeRegionId(kind, baseT, compareT, seq)\n }\n\n for (let i = 0; i < lineChanges.length; i++) {\n const cur = lineChanges[i]\n const next = lineChanges[i + 1]\n const moveId = moveByIndex.get(i)\n\n if (moveId) {\n if (moveId === targetId) {\n if (cur.removed) out.push(cur.value)\n } else {\n if (cur.added) out.push(cur.value)\n }\n continue\n }\n\n if (cur.removed && next?.added) {\n if (pairContainsUnsafeLine(cur.value) || pairContainsUnsafeLine(next.value)) {\n const id = reserveId('replace', cur.value, next.value)\n out.push(id === targetId ? cur.value : next.value)\n } else {\n const { text, matched } = revertWordRegion(cur.value, next.value, targetId, reserveId)\n out.push(matched ? text : next.value)\n }\n i++\n } else if (cur.removed) {\n const id = reserveId('remove', cur.value, '')\n if (id === targetId) out.push(cur.value)\n } else if (cur.added) {\n const id = reserveId('add', '', cur.value)\n if (id !== targetId) out.push(cur.value)\n } else {\n out.push(cur.value)\n }\n }\n\n return out.join('')\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
var browser = require('@arbidocs/sdk/browser');
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
|
|
7
|
+
// src/ArbiProvider.tsx
|
|
8
|
+
var ArbiContext = react.createContext(null);
|
|
9
|
+
function ArbiProvider({ children, ...options }) {
|
|
10
|
+
const arbi = react.useMemo(
|
|
11
|
+
() => new browser.Arbi(options),
|
|
12
|
+
// Stable on url + deploymentDomain — re-creating the instance on every render would be wrong
|
|
13
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
14
|
+
[options.url, options.deploymentDomain, options.credentials]
|
|
15
|
+
);
|
|
16
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ArbiContext.Provider, { value: arbi, children });
|
|
17
|
+
}
|
|
18
|
+
function useArbi() {
|
|
19
|
+
const arbi = react.useContext(ArbiContext);
|
|
20
|
+
if (!arbi) {
|
|
21
|
+
throw new Error("useArbi() must be used within an <ArbiProvider>");
|
|
22
|
+
}
|
|
23
|
+
return arbi;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
exports.ArbiProvider = ArbiProvider;
|
|
27
|
+
exports.useArbi = useArbi;
|
|
28
|
+
//# sourceMappingURL=chunk-ZMTLGO3K.cjs.map
|
|
29
|
+
//# sourceMappingURL=chunk-ZMTLGO3K.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ArbiProvider.tsx","../src/useArbi.ts"],"names":["createContext","useMemo","Arbi","useContext"],"mappings":";;;;;;;AAYO,IAAM,WAAA,GAAcA,oBAA2B,IAAI,CAAA;AAMnD,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,SAAQ,EAAsB;AACxE,EAAA,MAAM,IAAA,GAAOC,aAAA;AAAA,IACX,MAAM,IAAIC,YAAA,CAAK,OAAO,CAAA;AAAA;AAAA;AAAA,IAGtB,CAAC,OAAA,CAAQ,GAAA,EAAK,OAAA,CAAQ,gBAAA,EAAkB,QAAQ,WAAW;AAAA,GAC7D;AAEA,EAAA,sCAAQ,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,MAAO,QAAA,EAAS,CAAA;AACtD;ACnBO,SAAS,OAAA,GAAgB;AAC9B,EAAA,MAAM,IAAA,GAAOC,iBAAW,WAAW,CAAA;AACnC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,IAAA;AACT","file":"chunk-ZMTLGO3K.cjs","sourcesContent":["/**\n * ArbiProvider — React context that holds an Arbi instance.\n *\n * Usage:\n * <ArbiProvider url=\"https://arbi.mycompany.com\">\n * <App />\n * </ArbiProvider>\n */\n\nimport { createContext, useMemo, type ReactNode } from 'react'\nimport { Arbi, type ArbiOptions } from '@arbidocs/sdk/browser'\n\nexport const ArbiContext = createContext<Arbi | null>(null)\n\nexport interface ArbiProviderProps extends ArbiOptions {\n children: ReactNode\n}\n\nexport function ArbiProvider({ children, ...options }: ArbiProviderProps) {\n const arbi = useMemo(\n () => new Arbi(options),\n // Stable on url + deploymentDomain — re-creating the instance on every render would be wrong\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [options.url, options.deploymentDomain, options.credentials]\n )\n\n return <ArbiContext.Provider value={arbi}>{children}</ArbiContext.Provider>\n}\n","/**\n * Hook to access the Arbi instance from the nearest ArbiProvider.\n */\n\nimport { useContext } from 'react'\nimport type { Arbi } from '@arbidocs/sdk/browser'\nimport { ArbiContext } from './ArbiProvider'\n\nexport function useArbi(): Arbi {\n const arbi = useContext(ArbiContext)\n if (!arbi) {\n throw new Error('useArbi() must be used within an <ArbiProvider>')\n }\n return arbi\n}\n"]}
|