@mrsf/markdown-it-mrsf 0.1.0 → 0.3.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.
- package/README.md +14 -4
- package/dist/browser.d.ts +1 -1
- package/dist/browser.js +366 -35
- package/dist/browser.js.map +7 -0
- package/dist/controller.d.ts +31 -11
- package/dist/controller.js +320 -38
- package/dist/controller.js.map +7 -0
- package/dist/index.d.ts +1 -2
- package/dist/index.js +392 -75
- package/dist/index.js.map +7 -0
- package/dist/shared.d.ts +2 -16
- package/dist/style.css +85 -0
- package/dist/types.d.ts +6 -2
- package/package.json +14 -7
- package/dist/rules/core.js +0 -149
- package/dist/rules/renderer.js +0 -159
- package/dist/shared.js +0 -86
- package/dist/types.js +0 -5
package/dist/controller.js
CHANGED
|
@@ -1,40 +1,322 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
// src/controller.ts
|
|
2
|
+
var floatingAddButton = null;
|
|
3
|
+
var lastSelectionText = null;
|
|
4
|
+
var overlayEl = null;
|
|
5
|
+
var styleInjected = false;
|
|
6
|
+
function injectStyles() {
|
|
7
|
+
if (styleInjected) return;
|
|
8
|
+
const css = `
|
|
9
|
+
.mrsf-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.45); z-index: 2000; display: flex; align-items: center; justify-content: center; }
|
|
10
|
+
.mrsf-dialog { background: var(--mrsf-dialog-bg, var(--vp-c-bg, #1e1e1e)); color: var(--mrsf-dialog-fg, var(--vp-c-text-1, #f3f3f3)); border: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #444)); border-radius: 8px; width: min(520px, 90vw); box-shadow: 0 10px 40px rgba(0,0,0,0.35); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; }
|
|
11
|
+
.mrsf-dialog header { padding: 12px 16px; font-weight: 600; border-bottom: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #333)); }
|
|
12
|
+
.mrsf-dialog form { padding: 16px; display: flex; flex-direction: column; gap: 12px; }
|
|
13
|
+
.mrsf-field { display: flex; flex-direction: column; gap: 6px; }
|
|
14
|
+
.mrsf-field label { font-size: 13px; color: var(--mrsf-dialog-muted, var(--vp-c-text-2, #ccc)); }
|
|
15
|
+
.mrsf-field input, .mrsf-field select, .mrsf-field textarea { background: var(--mrsf-field-bg, var(--vp-c-bg-soft, #252526)); color: var(--mrsf-dialog-fg, var(--vp-c-text-1, #f3f3f3)); border: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #3c3c3c)); border-radius: 4px; padding: 6px 8px; font-size: 13px; }
|
|
16
|
+
.mrsf-field textarea { min-height: 100px; resize: vertical; }
|
|
17
|
+
.mrsf-actions-row { display: flex; justify-content: flex-end; gap: 8px; margin-top: 0; padding: 12px 16px 16px; border-top: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #333)); }
|
|
18
|
+
.mrsf-btn { padding: 6px 12px; border-radius: 4px; border: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #3c3c3c)); background: var(--mrsf-button-bg, var(--vp-c-bg-soft, #2d2d30)); color: var(--mrsf-dialog-fg, var(--vp-c-text-1, #f3f3f3)); cursor: pointer; }
|
|
19
|
+
.mrsf-btn-primary { background: var(--mrsf-button-primary-bg, #0e639c); border-color: var(--mrsf-button-primary-bg, #0e639c); color: #fff; }
|
|
20
|
+
.mrsf-helper { font-size: 12px; color: var(--mrsf-dialog-muted, var(--vp-c-text-2, #aaa)); }
|
|
21
|
+
`;
|
|
22
|
+
const style = document.createElement("style");
|
|
23
|
+
style.textContent = css;
|
|
24
|
+
document.head.appendChild(style);
|
|
25
|
+
styleInjected = true;
|
|
26
|
+
}
|
|
27
|
+
function ensureFloatingAddButton() {
|
|
28
|
+
if (floatingAddButton) return floatingAddButton;
|
|
29
|
+
const btn = document.createElement("button");
|
|
30
|
+
btn.textContent = "Add comment";
|
|
31
|
+
btn.className = "mrsf-add-inline-button";
|
|
32
|
+
btn.dataset.mrsfAction = "add";
|
|
33
|
+
btn.style.display = "none";
|
|
34
|
+
btn.style.position = "absolute";
|
|
35
|
+
btn.style.zIndex = "1200";
|
|
36
|
+
document.body.appendChild(btn);
|
|
37
|
+
floatingAddButton = btn;
|
|
38
|
+
return btn;
|
|
39
|
+
}
|
|
40
|
+
function hideFloatingAddButton() {
|
|
41
|
+
if (!floatingAddButton) return;
|
|
42
|
+
floatingAddButton.style.display = "none";
|
|
43
|
+
floatingAddButton.dataset.mrsfLine = "";
|
|
44
|
+
floatingAddButton.dataset.mrsfStartLine = "";
|
|
45
|
+
floatingAddButton.dataset.mrsfEndLine = "";
|
|
46
|
+
lastSelectionText = null;
|
|
47
|
+
}
|
|
48
|
+
function showFloatingAddButton(startLine, endLine, startColumn, endColumn, rect, selectionText) {
|
|
49
|
+
const btn = ensureFloatingAddButton();
|
|
50
|
+
if (startLine != null) {
|
|
51
|
+
btn.dataset.mrsfLine = String(startLine);
|
|
52
|
+
btn.dataset.mrsfStartLine = String(startLine);
|
|
53
|
+
btn.dataset.mrsfEndLine = String(endLine ?? startLine);
|
|
54
|
+
} else {
|
|
55
|
+
delete btn.dataset.mrsfLine;
|
|
56
|
+
delete btn.dataset.mrsfStartLine;
|
|
57
|
+
delete btn.dataset.mrsfEndLine;
|
|
58
|
+
}
|
|
59
|
+
if (startColumn != null) {
|
|
60
|
+
btn.dataset.mrsfStartColumn = String(startColumn);
|
|
61
|
+
} else {
|
|
62
|
+
delete btn.dataset.mrsfStartColumn;
|
|
63
|
+
}
|
|
64
|
+
if (endColumn != null) {
|
|
65
|
+
btn.dataset.mrsfEndColumn = String(endColumn);
|
|
66
|
+
} else {
|
|
67
|
+
delete btn.dataset.mrsfEndColumn;
|
|
68
|
+
}
|
|
69
|
+
lastSelectionText = selectionText;
|
|
70
|
+
const margin = 6;
|
|
71
|
+
btn.style.visibility = "hidden";
|
|
72
|
+
btn.style.display = "block";
|
|
73
|
+
const height = btn.offsetHeight || 0;
|
|
74
|
+
const top = window.scrollY + rect.top - height - margin;
|
|
75
|
+
const left = window.scrollX + rect.left;
|
|
76
|
+
btn.style.top = `${Math.max(0, top)}px`;
|
|
77
|
+
btn.style.left = `${Math.max(0, left)}px`;
|
|
78
|
+
btn.style.visibility = "visible";
|
|
79
|
+
}
|
|
80
|
+
function handleSelectionChange() {
|
|
81
|
+
const sel = document.getSelection();
|
|
82
|
+
if (!sel || sel.isCollapsed || sel.rangeCount === 0) {
|
|
83
|
+
hideFloatingAddButton();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const text = sel.toString().trim();
|
|
87
|
+
if (!text) {
|
|
88
|
+
hideFloatingAddButton();
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const range = sel.getRangeAt(0);
|
|
92
|
+
const rect = range.getBoundingClientRect();
|
|
93
|
+
if (!rect || rect.width === 0 && rect.height === 0) {
|
|
94
|
+
hideFloatingAddButton();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const startAnchor = range.startContainer.parentElement?.closest(
|
|
98
|
+
"[data-mrsf-line]"
|
|
99
|
+
);
|
|
100
|
+
const endAnchor = range.endContainer.parentElement?.closest(
|
|
101
|
+
"[data-mrsf-line]"
|
|
102
|
+
);
|
|
103
|
+
const startLineStr = startAnchor?.dataset.mrsfLine;
|
|
104
|
+
const endLineStr = endAnchor?.dataset.mrsfLine ?? startLineStr;
|
|
105
|
+
const startLine = startLineStr ? parseInt(startLineStr, 10) : null;
|
|
106
|
+
const endLine = endLineStr ? parseInt(endLineStr, 10) : startLine;
|
|
107
|
+
const startColumn = startAnchor?.dataset.mrsfStartColumn ? parseInt(startAnchor.dataset.mrsfStartColumn, 10) : range.startContainer.nodeType === Node.TEXT_NODE ? range.startOffset : null;
|
|
108
|
+
const endColumn = endAnchor?.dataset.mrsfEndColumn ? parseInt(endAnchor.dataset.mrsfEndColumn, 10) : range.endContainer.nodeType === Node.TEXT_NODE ? range.endOffset : null;
|
|
109
|
+
showFloatingAddButton(startLine, endLine, startColumn, endColumn, rect, text);
|
|
110
|
+
}
|
|
111
|
+
function closeOverlay() {
|
|
112
|
+
if (overlayEl && overlayEl.parentElement) {
|
|
113
|
+
overlayEl.parentElement.removeChild(overlayEl);
|
|
114
|
+
}
|
|
115
|
+
overlayEl = null;
|
|
116
|
+
}
|
|
117
|
+
function openForm(action, detail) {
|
|
118
|
+
if (window.mrsfDisableBuiltinUi) return;
|
|
119
|
+
injectStyles();
|
|
120
|
+
closeOverlay();
|
|
121
|
+
const selText = detail.selectionText ?? "";
|
|
122
|
+
const line = detail.line ?? detail.start_line ?? null;
|
|
123
|
+
const endLine = detail.end_line ?? detail.line ?? null;
|
|
124
|
+
const startCol = detail.start_column ?? null;
|
|
125
|
+
const endCol = detail.end_column ?? null;
|
|
126
|
+
const overlay = document.createElement("div");
|
|
127
|
+
overlay.className = "mrsf-overlay";
|
|
128
|
+
const dialog = document.createElement("div");
|
|
129
|
+
dialog.className = "mrsf-dialog";
|
|
130
|
+
const header = document.createElement("header");
|
|
131
|
+
header.textContent = action === "add" ? "Add comment" : action === "edit" ? "Edit comment" : "Reply";
|
|
132
|
+
dialog.appendChild(header);
|
|
133
|
+
const form = document.createElement("form");
|
|
134
|
+
const field = (labelText, inputEl, helper) => {
|
|
135
|
+
const wrap = document.createElement("div");
|
|
136
|
+
wrap.className = "mrsf-field";
|
|
137
|
+
const label = document.createElement("label");
|
|
138
|
+
label.textContent = labelText;
|
|
139
|
+
wrap.appendChild(label);
|
|
140
|
+
wrap.appendChild(inputEl);
|
|
141
|
+
if (helper) {
|
|
142
|
+
const h = document.createElement("div");
|
|
143
|
+
h.className = "mrsf-helper";
|
|
144
|
+
h.textContent = helper;
|
|
145
|
+
wrap.appendChild(h);
|
|
146
|
+
}
|
|
147
|
+
form.appendChild(wrap);
|
|
148
|
+
};
|
|
149
|
+
const textArea = document.createElement("textarea");
|
|
150
|
+
textArea.name = "text";
|
|
151
|
+
textArea.required = true;
|
|
152
|
+
field("Comment text", textArea);
|
|
153
|
+
const typeSelect = document.createElement("select");
|
|
154
|
+
typeSelect.name = "type";
|
|
155
|
+
["", "suggestion", "issue", "question", "accuracy", "style", "clarity"].forEach((t) => {
|
|
156
|
+
const opt = document.createElement("option");
|
|
157
|
+
opt.value = t;
|
|
158
|
+
opt.textContent = t || "(none)";
|
|
159
|
+
typeSelect.appendChild(opt);
|
|
160
|
+
});
|
|
161
|
+
field("Type", typeSelect, "Optional");
|
|
162
|
+
const severitySelect = document.createElement("select");
|
|
163
|
+
severitySelect.name = "severity";
|
|
164
|
+
["", "low", "medium", "high"].forEach((s) => {
|
|
165
|
+
const opt = document.createElement("option");
|
|
166
|
+
opt.value = s;
|
|
167
|
+
opt.textContent = s || "(none)";
|
|
168
|
+
severitySelect.appendChild(opt);
|
|
169
|
+
});
|
|
170
|
+
field("Severity", severitySelect, "Optional");
|
|
171
|
+
if (selText) {
|
|
172
|
+
const pre = document.createElement("pre");
|
|
173
|
+
pre.textContent = selText;
|
|
174
|
+
pre.style.margin = "0";
|
|
175
|
+
pre.style.whiteSpace = "pre-wrap";
|
|
176
|
+
field("Selected text", pre, "Captured automatically");
|
|
177
|
+
}
|
|
178
|
+
const actions = document.createElement("div");
|
|
179
|
+
actions.className = "mrsf-actions-row";
|
|
180
|
+
const cancelBtn = document.createElement("button");
|
|
181
|
+
cancelBtn.type = "button";
|
|
182
|
+
cancelBtn.className = "mrsf-btn";
|
|
183
|
+
cancelBtn.textContent = "Cancel";
|
|
184
|
+
cancelBtn.addEventListener("click", () => closeOverlay());
|
|
185
|
+
actions.appendChild(cancelBtn);
|
|
186
|
+
const submitBtn = document.createElement("button");
|
|
187
|
+
submitBtn.type = "submit";
|
|
188
|
+
submitBtn.className = "mrsf-btn mrsf-btn-primary";
|
|
189
|
+
submitBtn.textContent = action === "add" ? "Add" : action === "reply" ? "Reply" : "Save";
|
|
190
|
+
actions.appendChild(submitBtn);
|
|
191
|
+
form.appendChild(actions);
|
|
192
|
+
form.addEventListener("submit", (ev) => {
|
|
193
|
+
ev.preventDefault();
|
|
194
|
+
const detailOut = {
|
|
195
|
+
action,
|
|
196
|
+
commentId: detail.commentId,
|
|
197
|
+
text: textArea.value.trim(),
|
|
198
|
+
type: typeSelect.value || null,
|
|
199
|
+
severity: severitySelect.value || null,
|
|
200
|
+
line,
|
|
201
|
+
end_line: endLine,
|
|
202
|
+
start_column: startCol,
|
|
203
|
+
end_column: endCol,
|
|
204
|
+
selection_text: selText || null
|
|
205
|
+
};
|
|
206
|
+
document.dispatchEvent(new CustomEvent("mrsf:submit", { detail: detailOut, bubbles: true }));
|
|
207
|
+
closeOverlay();
|
|
208
|
+
});
|
|
209
|
+
dialog.appendChild(form);
|
|
210
|
+
overlay.appendChild(dialog);
|
|
211
|
+
overlay.addEventListener("click", (e) => {
|
|
212
|
+
if (e.target === overlay) closeOverlay();
|
|
213
|
+
});
|
|
214
|
+
document.body.appendChild(overlay);
|
|
215
|
+
overlayEl = overlay;
|
|
216
|
+
}
|
|
217
|
+
function openConfirm(action, detail) {
|
|
218
|
+
if (window.mrsfDisableBuiltinUi) return;
|
|
219
|
+
injectStyles();
|
|
220
|
+
closeOverlay();
|
|
221
|
+
const overlay = document.createElement("div");
|
|
222
|
+
overlay.className = "mrsf-overlay";
|
|
223
|
+
const dialog = document.createElement("div");
|
|
224
|
+
dialog.className = "mrsf-dialog";
|
|
225
|
+
const header = document.createElement("header");
|
|
226
|
+
header.textContent = action === "delete" ? "Delete comment" : "Change status";
|
|
227
|
+
dialog.appendChild(header);
|
|
228
|
+
const body = document.createElement("div");
|
|
229
|
+
body.style.padding = "16px";
|
|
230
|
+
body.textContent = action === "delete" ? "Delete this comment?" : action === "resolve" ? "Mark this comment as resolved?" : "Mark this comment as unresolved?";
|
|
231
|
+
dialog.appendChild(body);
|
|
232
|
+
const actions = document.createElement("div");
|
|
233
|
+
actions.className = "mrsf-actions-row";
|
|
234
|
+
const cancelBtn = document.createElement("button");
|
|
235
|
+
cancelBtn.type = "button";
|
|
236
|
+
cancelBtn.className = "mrsf-btn";
|
|
237
|
+
cancelBtn.textContent = "Cancel";
|
|
238
|
+
cancelBtn.addEventListener("click", () => closeOverlay());
|
|
239
|
+
actions.appendChild(cancelBtn);
|
|
240
|
+
const confirmBtn = document.createElement("button");
|
|
241
|
+
confirmBtn.type = "button";
|
|
242
|
+
confirmBtn.className = "mrsf-btn mrsf-btn-primary";
|
|
243
|
+
confirmBtn.textContent = action === "delete" ? "Delete" : "Confirm";
|
|
244
|
+
confirmBtn.addEventListener("click", () => {
|
|
245
|
+
const detailOut = {
|
|
246
|
+
action,
|
|
247
|
+
commentId: detail.commentId,
|
|
248
|
+
text: "",
|
|
249
|
+
type: null,
|
|
250
|
+
severity: null,
|
|
251
|
+
line: detail.line,
|
|
252
|
+
end_line: detail.end_line ?? detail.line ?? null,
|
|
253
|
+
start_column: detail.start_column ?? null,
|
|
254
|
+
end_column: detail.end_column ?? null,
|
|
255
|
+
selection_text: detail.selectionText ?? null
|
|
256
|
+
};
|
|
257
|
+
document.dispatchEvent(new CustomEvent("mrsf:submit", { detail: detailOut, bubbles: true }));
|
|
258
|
+
closeOverlay();
|
|
259
|
+
});
|
|
260
|
+
actions.appendChild(confirmBtn);
|
|
261
|
+
dialog.appendChild(actions);
|
|
262
|
+
overlay.appendChild(dialog);
|
|
263
|
+
overlay.addEventListener("click", (e) => {
|
|
264
|
+
if (e.target === overlay) closeOverlay();
|
|
265
|
+
});
|
|
266
|
+
document.body.appendChild(overlay);
|
|
267
|
+
overlayEl = overlay;
|
|
268
|
+
}
|
|
20
269
|
function init() {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
270
|
+
const globalAny = window;
|
|
271
|
+
if (globalAny.__mrsfControllerReady) return;
|
|
272
|
+
globalAny.__mrsfControllerReady = true;
|
|
273
|
+
document.addEventListener("selectionchange", handleSelectionChange);
|
|
274
|
+
document.addEventListener("click", (e) => {
|
|
275
|
+
const target = e.target.closest(
|
|
276
|
+
"[data-mrsf-action]"
|
|
277
|
+
);
|
|
278
|
+
if (!target) return;
|
|
279
|
+
const action = target.dataset.mrsfAction;
|
|
280
|
+
const commentId = target.dataset.mrsfCommentId ?? null;
|
|
281
|
+
if (!action) return;
|
|
282
|
+
const lineStr = target.dataset.mrsfLine;
|
|
283
|
+
const line = lineStr ? parseInt(lineStr, 10) : null;
|
|
284
|
+
const selectionText = target.dataset.mrsfSelection ?? lastSelectionText ?? null;
|
|
285
|
+
const startLineStr = target.dataset.mrsfStartLine;
|
|
286
|
+
const endLineStr = target.dataset.mrsfEndLine;
|
|
287
|
+
const startColStr = target.dataset.mrsfStartColumn;
|
|
288
|
+
const endColStr = target.dataset.mrsfEndColumn;
|
|
289
|
+
const startLine = startLineStr ? parseInt(startLineStr, 10) : line ?? null;
|
|
290
|
+
const endLine = endLineStr ? parseInt(endLineStr, 10) : line ?? null;
|
|
291
|
+
const startColumn = startColStr ? parseInt(startColStr, 10) : null;
|
|
292
|
+
const endColumn = endColStr ? parseInt(endColStr, 10) : null;
|
|
293
|
+
e.preventDefault();
|
|
294
|
+
e.stopPropagation();
|
|
295
|
+
const detail = {
|
|
296
|
+
commentId,
|
|
297
|
+
line,
|
|
298
|
+
action,
|
|
299
|
+
selectionText,
|
|
300
|
+
start_line: startLine,
|
|
301
|
+
end_line: endLine,
|
|
302
|
+
start_column: startColumn,
|
|
303
|
+
end_column: endColumn
|
|
304
|
+
};
|
|
305
|
+
if (action === "add" || action === "edit" || action === "reply") {
|
|
306
|
+
if (action === "add") {
|
|
307
|
+
hideFloatingAddButton();
|
|
308
|
+
}
|
|
309
|
+
openForm(action, detail);
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (action === "resolve" || action === "unresolve" || action === "delete") {
|
|
313
|
+
openConfirm(action, detail);
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
document.dispatchEvent(
|
|
317
|
+
new CustomEvent(`mrsf:${action}`, { detail, bubbles: true })
|
|
318
|
+
);
|
|
319
|
+
});
|
|
320
|
+
}
|
|
38
321
|
init();
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=controller.js.map
|
|
322
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/controller.ts"],
|
|
4
|
+
"sourcesContent": ["/* ---------------------------------------------------------------\n * AUTO-GENERATED \u2014 DO NOT EDIT\n *\n * Source: plugins/shared/src/controller.ts\n * Run `node plugins/sync-types.mjs` to regenerate.\n * --------------------------------------------------------------- */\n\n/**\n * Sidemark \u2014 Client-side event controller for interactive mode.\n *\n * Optional module that listens for clicks on `[data-mrsf-action]` elements\n * and dispatches CustomEvents on the document for host applications.\n *\n * Usage (ESM):\n * import \"@mrsf/plugin-shared/controller\";\n *\n * Events dispatched (host listens on document):\n * - mrsf:resolve { commentId, line, ... }\n * - mrsf:unresolve { commentId, line, ... }\n * - mrsf:reply { commentId, line, ... }\n * - mrsf:edit { commentId, line, ... }\n * - mrsf:delete { commentId, line, ... }\n * - mrsf:navigate { commentId, line, ... }\n * - mrsf:add { commentId: null, line, selectionText?, ... }\n * - mrsf:submit { action, commentId, text?, line?, end_line?, start_column?, end_column?, selection_text? }\n *\n * For actions that open built-in UI (add/edit/reply/resolve/unresolve/delete), the\n * mrsf:<action> event is fired with the same payload as mrsf:submit after the user confirms.\n */\n\nexport type MrsfAction = \"resolve\" | \"unresolve\" | \"reply\" | \"edit\" | \"delete\" | \"navigate\" | \"add\";\n\nexport interface MrsfActionDetail {\n commentId: string | null;\n line: number | null;\n action: MrsfAction;\n selectionText?: string | null;\n start_line?: number | null;\n end_line?: number | null;\n start_column?: number | null;\n end_column?: number | null;\n}\n\nexport interface MrsfSubmitDetail {\n action: \"add\" | \"edit\" | \"reply\" | \"resolve\" | \"unresolve\" | \"delete\";\n commentId: string | null;\n text: string;\n type?: string | null;\n severity?: \"low\" | \"medium\" | \"high\" | null;\n line?: number | null;\n end_line?: number | null;\n start_column?: number | null;\n end_column?: number | null;\n selection_text?: string | null;\n}\n\nlet floatingAddButton: HTMLButtonElement | null = null;\nlet lastSelectionText: string | null = null;\nlet overlayEl: HTMLDivElement | null = null;\nlet styleInjected = false;\n\nfunction injectStyles(): void {\n if (styleInjected) return;\n const css = `\n.mrsf-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.45); z-index: 2000; display: flex; align-items: center; justify-content: center; }\n.mrsf-dialog { background: var(--mrsf-dialog-bg, var(--vp-c-bg, #1e1e1e)); color: var(--mrsf-dialog-fg, var(--vp-c-text-1, #f3f3f3)); border: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #444)); border-radius: 8px; width: min(520px, 90vw); box-shadow: 0 10px 40px rgba(0,0,0,0.35); font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif; }\n.mrsf-dialog header { padding: 12px 16px; font-weight: 600; border-bottom: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #333)); }\n.mrsf-dialog form { padding: 16px; display: flex; flex-direction: column; gap: 12px; }\n.mrsf-field { display: flex; flex-direction: column; gap: 6px; }\n.mrsf-field label { font-size: 13px; color: var(--mrsf-dialog-muted, var(--vp-c-text-2, #ccc)); }\n.mrsf-field input, .mrsf-field select, .mrsf-field textarea { background: var(--mrsf-field-bg, var(--vp-c-bg-soft, #252526)); color: var(--mrsf-dialog-fg, var(--vp-c-text-1, #f3f3f3)); border: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #3c3c3c)); border-radius: 4px; padding: 6px 8px; font-size: 13px; }\n.mrsf-field textarea { min-height: 100px; resize: vertical; }\n.mrsf-actions-row { display: flex; justify-content: flex-end; gap: 8px; margin-top: 0; padding: 12px 16px 16px; border-top: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #333)); }\n.mrsf-btn { padding: 6px 12px; border-radius: 4px; border: 1px solid var(--mrsf-dialog-border, var(--vp-c-divider, #3c3c3c)); background: var(--mrsf-button-bg, var(--vp-c-bg-soft, #2d2d30)); color: var(--mrsf-dialog-fg, var(--vp-c-text-1, #f3f3f3)); cursor: pointer; }\n.mrsf-btn-primary { background: var(--mrsf-button-primary-bg, #0e639c); border-color: var(--mrsf-button-primary-bg, #0e639c); color: #fff; }\n.mrsf-helper { font-size: 12px; color: var(--mrsf-dialog-muted, var(--vp-c-text-2, #aaa)); }\n`; \n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n styleInjected = true;\n}\n\nfunction ensureFloatingAddButton(): HTMLButtonElement {\n if (floatingAddButton) return floatingAddButton;\n const btn = document.createElement(\"button\");\n btn.textContent = \"Add comment\";\n btn.className = \"mrsf-add-inline-button\";\n btn.dataset.mrsfAction = \"add\";\n btn.style.display = \"none\";\n btn.style.position = \"absolute\";\n btn.style.zIndex = \"1200\";\n document.body.appendChild(btn);\n floatingAddButton = btn;\n return btn;\n}\n\nfunction hideFloatingAddButton(): void {\n if (!floatingAddButton) return;\n floatingAddButton.style.display = \"none\";\n floatingAddButton.dataset.mrsfLine = \"\";\n floatingAddButton.dataset.mrsfStartLine = \"\";\n floatingAddButton.dataset.mrsfEndLine = \"\";\n lastSelectionText = null;\n}\n\nfunction showFloatingAddButton(\n startLine: number | null,\n endLine: number | null,\n startColumn: number | null,\n endColumn: number | null,\n rect: DOMRect,\n selectionText: string,\n): void {\n const btn = ensureFloatingAddButton();\n if (startLine != null) {\n btn.dataset.mrsfLine = String(startLine);\n btn.dataset.mrsfStartLine = String(startLine);\n btn.dataset.mrsfEndLine = String(endLine ?? startLine);\n } else {\n delete btn.dataset.mrsfLine;\n delete btn.dataset.mrsfStartLine;\n delete btn.dataset.mrsfEndLine;\n }\n if (startColumn != null) {\n btn.dataset.mrsfStartColumn = String(startColumn);\n } else {\n delete btn.dataset.mrsfStartColumn;\n }\n if (endColumn != null) {\n btn.dataset.mrsfEndColumn = String(endColumn);\n } else {\n delete btn.dataset.mrsfEndColumn;\n }\n lastSelectionText = selectionText;\n\n const margin = 6;\n btn.style.visibility = \"hidden\";\n btn.style.display = \"block\";\n const height = btn.offsetHeight || 0;\n const top = window.scrollY + rect.top - height - margin;\n const left = window.scrollX + rect.left;\n btn.style.top = `${Math.max(0, top)}px`;\n btn.style.left = `${Math.max(0, left)}px`;\n btn.style.visibility = \"visible\";\n}\n\nfunction handleSelectionChange(): void {\n const sel = document.getSelection();\n if (!sel || sel.isCollapsed || sel.rangeCount === 0) {\n hideFloatingAddButton();\n return;\n }\n\n const text = sel.toString().trim();\n if (!text) {\n hideFloatingAddButton();\n return;\n }\n\n const range = sel.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n if (!rect || (rect.width === 0 && rect.height === 0)) {\n hideFloatingAddButton();\n return;\n }\n\n const startAnchor = (range.startContainer as Node).parentElement?.closest<HTMLElement>(\n '[data-mrsf-line]',\n );\n const endAnchor = (range.endContainer as Node).parentElement?.closest<HTMLElement>(\n '[data-mrsf-line]',\n );\n const startLineStr = startAnchor?.dataset.mrsfLine;\n const endLineStr = endAnchor?.dataset.mrsfLine ?? startLineStr;\n const startLine = startLineStr ? parseInt(startLineStr, 10) : null;\n const endLine = endLineStr ? parseInt(endLineStr, 10) : startLine;\n\n const startColumn = startAnchor?.dataset.mrsfStartColumn\n ? parseInt(startAnchor.dataset.mrsfStartColumn, 10)\n : range.startContainer.nodeType === Node.TEXT_NODE\n ? range.startOffset\n : null;\n const endColumn = endAnchor?.dataset.mrsfEndColumn\n ? parseInt(endAnchor.dataset.mrsfEndColumn, 10)\n : range.endContainer.nodeType === Node.TEXT_NODE\n ? range.endOffset\n : null;\n\n showFloatingAddButton(startLine, endLine, startColumn, endColumn, rect, text);\n}\n\nfunction closeOverlay(): void {\n if (overlayEl && overlayEl.parentElement) {\n overlayEl.parentElement.removeChild(overlayEl);\n }\n overlayEl = null;\n}\n\nfunction openForm(action: \"add\" | \"edit\" | \"reply\", detail: MrsfActionDetail): void {\n if ((window as any).mrsfDisableBuiltinUi) return;\n injectStyles();\n closeOverlay();\n\n const selText = detail.selectionText ?? \"\";\n const line = detail.line ?? detail.start_line ?? null;\n const endLine = detail.end_line ?? detail.line ?? null;\n const startCol = detail.start_column ?? null;\n const endCol = detail.end_column ?? null;\n\n const overlay = document.createElement(\"div\");\n overlay.className = \"mrsf-overlay\";\n\n const dialog = document.createElement(\"div\");\n dialog.className = \"mrsf-dialog\";\n\n const header = document.createElement(\"header\");\n header.textContent =\n action === \"add\" ? \"Add comment\" : action === \"edit\" ? \"Edit comment\" : \"Reply\";\n dialog.appendChild(header);\n\n const form = document.createElement(\"form\");\n\n const field = (labelText: string, inputEl: HTMLElement, helper?: string) => {\n const wrap = document.createElement(\"div\");\n wrap.className = \"mrsf-field\";\n const label = document.createElement(\"label\");\n label.textContent = labelText;\n wrap.appendChild(label);\n wrap.appendChild(inputEl);\n if (helper) {\n const h = document.createElement(\"div\");\n h.className = \"mrsf-helper\";\n h.textContent = helper;\n wrap.appendChild(h);\n }\n form.appendChild(wrap);\n };\n\n const textArea = document.createElement(\"textarea\");\n textArea.name = \"text\";\n textArea.required = true;\n field(\"Comment text\", textArea);\n\n const typeSelect = document.createElement(\"select\");\n typeSelect.name = \"type\";\n [\"\", \"suggestion\", \"issue\", \"question\", \"accuracy\", \"style\", \"clarity\"].forEach((t) => {\n const opt = document.createElement(\"option\");\n opt.value = t;\n opt.textContent = t || \"(none)\";\n typeSelect.appendChild(opt);\n });\n field(\"Type\", typeSelect, \"Optional\");\n\n const severitySelect = document.createElement(\"select\");\n severitySelect.name = \"severity\";\n [\"\", \"low\", \"medium\", \"high\"].forEach((s) => {\n const opt = document.createElement(\"option\");\n opt.value = s;\n opt.textContent = s || \"(none)\";\n severitySelect.appendChild(opt);\n });\n field(\"Severity\", severitySelect, \"Optional\");\n\n if (selText) {\n const pre = document.createElement(\"pre\");\n pre.textContent = selText;\n pre.style.margin = \"0\";\n pre.style.whiteSpace = \"pre-wrap\";\n field(\"Selected text\", pre as unknown as HTMLElement, \"Captured automatically\");\n }\n\n const actions = document.createElement(\"div\");\n actions.className = \"mrsf-actions-row\";\n\n const cancelBtn = document.createElement(\"button\");\n cancelBtn.type = \"button\";\n cancelBtn.className = \"mrsf-btn\";\n cancelBtn.textContent = \"Cancel\";\n cancelBtn.addEventListener(\"click\", () => closeOverlay());\n actions.appendChild(cancelBtn);\n\n const submitBtn = document.createElement(\"button\");\n submitBtn.type = \"submit\";\n submitBtn.className = \"mrsf-btn mrsf-btn-primary\";\n submitBtn.textContent = action === \"add\" ? \"Add\" : action === \"reply\" ? \"Reply\" : \"Save\";\n actions.appendChild(submitBtn);\n\n form.appendChild(actions);\n\n form.addEventListener(\"submit\", (ev) => {\n ev.preventDefault();\n const detailOut: MrsfSubmitDetail = {\n action,\n commentId: detail.commentId,\n text: textArea.value.trim(),\n type: typeSelect.value || null,\n severity: (severitySelect.value as MrsfSubmitDetail[\"severity\"]) || null,\n line,\n end_line: endLine,\n start_column: startCol,\n end_column: endCol,\n selection_text: selText || null,\n };\n document.dispatchEvent(new CustomEvent(\"mrsf:submit\", { detail: detailOut, bubbles: true }));\n closeOverlay();\n });\n\n dialog.appendChild(form);\n overlay.appendChild(dialog);\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) closeOverlay();\n });\n\n document.body.appendChild(overlay);\n overlayEl = overlay;\n}\n\nfunction openConfirm(action: \"resolve\" | \"unresolve\" | \"delete\", detail: MrsfActionDetail): void {\n if ((window as any).mrsfDisableBuiltinUi) return;\n injectStyles();\n closeOverlay();\n\n const overlay = document.createElement(\"div\");\n overlay.className = \"mrsf-overlay\";\n\n const dialog = document.createElement(\"div\");\n dialog.className = \"mrsf-dialog\";\n\n const header = document.createElement(\"header\");\n header.textContent = action === \"delete\" ? \"Delete comment\" : \"Change status\";\n dialog.appendChild(header);\n\n const body = document.createElement(\"div\");\n body.style.padding = \"16px\";\n body.textContent =\n action === \"delete\"\n ? \"Delete this comment?\"\n : action === \"resolve\"\n ? \"Mark this comment as resolved?\"\n : \"Mark this comment as unresolved?\";\n dialog.appendChild(body);\n\n const actions = document.createElement(\"div\");\n actions.className = \"mrsf-actions-row\";\n\n const cancelBtn = document.createElement(\"button\");\n cancelBtn.type = \"button\";\n cancelBtn.className = \"mrsf-btn\";\n cancelBtn.textContent = \"Cancel\";\n cancelBtn.addEventListener(\"click\", () => closeOverlay());\n actions.appendChild(cancelBtn);\n\n const confirmBtn = document.createElement(\"button\");\n confirmBtn.type = \"button\";\n confirmBtn.className = \"mrsf-btn mrsf-btn-primary\";\n confirmBtn.textContent = action === \"delete\" ? \"Delete\" : \"Confirm\";\n confirmBtn.addEventListener(\"click\", () => {\n const detailOut: MrsfSubmitDetail = {\n action,\n commentId: detail.commentId,\n text: \"\",\n type: null,\n severity: null,\n line: detail.line,\n end_line: detail.end_line ?? detail.line ?? null,\n start_column: detail.start_column ?? null,\n end_column: detail.end_column ?? null,\n selection_text: detail.selectionText ?? null,\n };\n document.dispatchEvent(new CustomEvent(\"mrsf:submit\", { detail: detailOut, bubbles: true }));\n closeOverlay();\n });\n actions.appendChild(confirmBtn);\n\n dialog.appendChild(actions);\n\n overlay.appendChild(dialog);\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) closeOverlay();\n });\n\n document.body.appendChild(overlay);\n overlayEl = overlay;\n}\n\nfunction init(): void {\n const globalAny = window as any;\n if (globalAny.__mrsfControllerReady) return;\n globalAny.__mrsfControllerReady = true;\n\n document.addEventListener(\"selectionchange\", handleSelectionChange);\n\n document.addEventListener(\"click\", (e) => {\n const target = (e.target as HTMLElement).closest<HTMLElement>(\n \"[data-mrsf-action]\",\n );\n if (!target) return;\n\n const action = target.dataset.mrsfAction as MrsfAction | undefined;\n const commentId = target.dataset.mrsfCommentId ?? null;\n if (!action) return;\n\n const lineStr = target.dataset.mrsfLine;\n const line = lineStr ? parseInt(lineStr, 10) : null;\n\n const selectionText = target.dataset.mrsfSelection ?? lastSelectionText ?? null;\n\n const startLineStr = target.dataset.mrsfStartLine;\n const endLineStr = target.dataset.mrsfEndLine;\n const startColStr = target.dataset.mrsfStartColumn;\n const endColStr = target.dataset.mrsfEndColumn;\n const startLine = startLineStr ? parseInt(startLineStr, 10) : (line ?? null);\n const endLine = endLineStr ? parseInt(endLineStr, 10) : (line ?? null);\n const startColumn = startColStr ? parseInt(startColStr, 10) : null;\n const endColumn = endColStr ? parseInt(endColStr, 10) : null;\n\n e.preventDefault();\n e.stopPropagation();\n\n const detail: MrsfActionDetail = {\n commentId,\n line,\n action,\n selectionText,\n start_line: startLine,\n end_line: endLine,\n start_column: startColumn,\n end_column: endColumn,\n };\n if (action === \"add\" || action === \"edit\" || action === \"reply\") {\n if (action === \"add\") {\n hideFloatingAddButton();\n }\n openForm(action, detail);\n return;\n }\n\n if (action === \"resolve\" || action === \"unresolve\" || action === \"delete\") {\n openConfirm(action, detail);\n return;\n }\n\n document.dispatchEvent(\n new CustomEvent(`mrsf:${action}`, { detail, bubbles: true }),\n );\n });\n}\n\n// Auto-initialize\ninit();\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,8 +20,7 @@
|
|
|
20
20
|
* ```
|
|
21
21
|
*/
|
|
22
22
|
import type { MrsfPluginOptions } from "./types.js";
|
|
23
|
-
export type { MrsfPluginOptions, SlimComment, CommentThread, LineMap } from "./types.js";
|
|
24
|
-
export type { MrsfAction, MrsfActionDetail } from "./controller.js";
|
|
23
|
+
export type { MrsfPluginOptions, SlimComment, CommentThread, LineMap, CommentLoader } from "./types.js";
|
|
25
24
|
/**
|
|
26
25
|
* The markdown-it plugin function (Node.js — full feature set).
|
|
27
26
|
*/
|