inplan 0.1.2 → 0.1.3

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/app/main/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { app, BrowserWindow, ipcMain, dialog, shell } from "electron";
1
+ import { app, nativeImage, BrowserWindow, ipcMain, dialog, shell } from "electron";
2
2
  import { execFile } from "node:child_process";
3
3
  import { mkdirSync as mkdirSync$1, readdirSync, unlinkSync, readFileSync as readFileSync$1, existsSync as existsSync$1, writeFileSync as writeFileSync$1 } from "node:fs";
4
4
  import { fileURLToPath } from "node:url";
@@ -12,6 +12,7 @@ import __cjs_mod__ from "node:module";
12
12
  const __filename = import.meta.filename;
13
13
  const __dirname = import.meta.dirname;
14
14
  const require2 = __cjs_mod__.createRequire(import.meta.url);
15
+ const APP_ICON_DATA_URL = "data:image/png;base64,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AQIECBAgQCClhg2aqrkXbgDcduzgnjq3z6tvPggQIECAAAECBAgQIECAwOgFWgD4vIu190JDL9wAOHe+OrZQBA4mQIAAAQIECBAgQIAAAQLlCLSSSRO198INgLSUjraSnUEJECBAgAABAgQIECBAgEB2Ai0F3EDtvVADYM/ROz7Hm/+1tLiGJUCAAAECBAgQIDwYUgIAABAASURBVECAAIH8BNqKON4MMGrwBcZfqAGQJpPXLzC3QwkQIECAAAECBAgQIECAQFECrSazYA0+dwPgWUeOXFdVSQOg1dU1OAECBAgQIECAAAECBAhkJNBqqFGDRy0+7yRzNwCu2v3A59eTXlPffBAgQIAAAQIECBAgQIAAAQKpdYJrLtbic000dwPgfKqiATDXpA4iQIAAAQIECBAgQIAAAQLFCXSQ0CK1+FwNgFtf/+rlKqVXdJCbKQgQIECAAAECBAgQIECAQBYCXQQZtXjU5PPMNVcD4Pyuq+6cZzLHECBAgAABAgQIECBAgACBQgU6S2vemnyuBkCaTDQAOltaExEgQIAAAQIECBAgQIDA8AU6jHBy/sg8s83cAFg+9prn1hO9uL75IECAAAECBAgQIECAAAECBEKg01t14GJtPtOsMzcA0vmlz51pBjsTIECAAAECBAgQIECAAIHCBTpPb47afPYGQJVe23liJiRAgAABAgQIECBAgAABAsMV6D6yOWrzmRoAF19i8MLuMzMjAQIECBAgQIAAAQIECBAYqkAvcb3wYo0+9eQzNQCq89XhqUe2IwECBAgQIECAAAECBAgQGINATznOWqPP1ACYVEuHesrLtAQIECBAgAABAgQIECBAYJACfQU1a40+dQPg1te/ejmlyUv6Ssy8BAgQIECAAAECBAgQIEBggAI9hjR5yYVafboQpm4AnK92vWa6Ie1FgAABAgQIECBAgAABAgTGItBvnrPU6lM3AFI1eXW/aZmdAAECBAgQIECAAAECBAgMTKDvcGao1adqADzryJHrUqo0AJI/BAgQIECAAAECBAgQIEDgcYH+v6pefaFm3zmSqRoAu65+6FX1UFV980GAAAECBAgQIECAAAECBAhcEBjC39XFmn3HWKZqAFRLk1fuOJIdCBAgQIAAAQIECBAgQIDAqASGkey0NftUDYDJJL1iGGmJggABAgQIECBAgAABAgQIDERgIGFM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";
15
16
  var CONTROL_LOG_VERSION = 1;
16
17
  var LogEventType = {
17
18
  EditorPid: "editor_pid",
@@ -453,6 +454,8 @@ function createI18nController(deps) {
453
454
  return { getSnapshot: () => snap, bootstrap, setLocale };
454
455
  }
455
456
  const __dirname$1 = dirname$1(fileURLToPath(import.meta.url));
457
+ app.setName("inplan");
458
+ app.setAboutPanelOptions({ applicationName: "inplan" });
456
459
  process.on("uncaughtException", (err) => {
457
460
  process.stderr.write(`[inplan] uncaught exception: ${err instanceof Error ? err.stack ?? err.message : String(err)}
458
461
  `);
@@ -609,11 +612,14 @@ function navigateTo(file) {
609
612
  win.webContents.send("doc:navigated", session.load());
610
613
  return true;
611
614
  }
615
+ const appIcon = nativeImage.createFromDataURL(APP_ICON_DATA_URL);
612
616
  function createWindow() {
613
617
  win = new BrowserWindow({
614
618
  width: 1200,
615
619
  height: 800,
616
620
  title: "inplan",
621
+ icon: appIcon,
622
+ // window/taskbar icon on Windows + Linux (macOS uses the dock icon below)
617
623
  webPreferences: {
618
624
  preload: join$1(__dirname$1, "../preload/index.mjs"),
619
625
  sandbox: false
@@ -750,6 +756,7 @@ function registerIpc() {
750
756
  ipcMain.handle("i18n:set-locale", (_e, code) => i18n.setLocale(code));
751
757
  }
752
758
  void app.whenReady().then(() => {
759
+ if (process.platform === "darwin" && !appIcon.isEmpty()) app.dock?.setIcon(appIcon);
753
760
  const target = resolveTargetFile();
754
761
  if (target) {
755
762
  session = new Session(target);
@@ -16,6 +16,11 @@
16
16
  --accent-soft: #e9f0ec; /* pine tint */
17
17
  --danger: #a3331f;
18
18
  --amber: #9a5f23;
19
+ /* Comment highlight + click-flash (override in a theme). The flash animations below
20
+ fade --anchor-flash → --anchor (anchored) and --doc-flash → transparent (doc-level). */
21
+ --anchor: #f6eccb; /* anchored-comment highlight */
22
+ --anchor-flash: #ecd29a; /* darker yellow shown for ~1s when an anchored comment is clicked */
23
+ --doc-flash: rgba(246, 236, 203, 0.6); /* full-document wash when a doc-level comment is clicked */
19
24
  --shadow-sm: 0 1px 2px rgba(28, 26, 23, 0.05);
20
25
  --shadow: 0 1px 2px rgba(28, 26, 23, 0.04), 0 8px 22px -14px rgba(28, 26, 23, 0.30);
21
26
  --serif: "Fraunces", Georgia, "Times New Roman", serif;
@@ -106,6 +111,10 @@ body {
106
111
  .ap-topbar > button.ap-iconbtn--primary { height: 30px; padding: 0 14px; background: var(--accent); border: 1px solid var(--accent); color: #fbfaf6; border-radius: 7px; }
107
112
  .ap-topbar > button.ap-iconbtn--primary:hover:not(:disabled) { background: var(--accent-press); border-color: var(--accent-press); color: #fbfaf6; }
108
113
  .ap-topbar > button.ap-iconbtn--primary svg { width: 15px; height: 15px; }
114
+ /* Rail "show resolved & orphaned" toggle: eye-on-a-closed-box icon; tinted when active. */
115
+ .ap-reveal { width: 26px; height: 26px; }
116
+ .ap-reveal svg { width: 16px; height: 16px; }
117
+ .ap-reveal.on { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); }
109
118
  .ap-update-err { color: var(--danger); }
110
119
 
111
120
  /* banner */
@@ -117,7 +126,14 @@ body {
117
126
  .ap-preview { flex: 1; min-width: 0; overflow: auto; padding: 28px 36px; border-right: 1px solid var(--line); background: var(--bg); }
118
127
  .ap-rendered { max-width: 760px; }
119
128
  .ap-rendered h1, .ap-rendered h2, .ap-rendered h3 { font-family: var(--serif); font-weight: 500; letter-spacing: -0.01em; line-height: 1.15; }
120
- .ap-rendered .ap-anchor { background: #f6eccb; border-bottom: 2px solid var(--amber); color: inherit; text-decoration: none; cursor: pointer; border-radius: 2px; }
129
+ .ap-rendered .ap-anchor { background: var(--anchor); border-bottom: 2px solid var(--amber); color: inherit; text-decoration: none; cursor: pointer; border-radius: 2px; }
130
+ /* Click-to-focus flash: anchored comment pulses darker yellow then fades to normal (1s). */
131
+ @keyframes ap-flash-anchor { from { background-color: var(--anchor-flash); } to { background-color: var(--anchor); } }
132
+ .ap-rendered .ap-anchor.ap-flash-anchor { animation: ap-flash-anchor 1s ease-out; }
133
+ /* Doc-level comment click: the whole rendered document washes the comment tint, then fades out (1s). */
134
+ @keyframes ap-flash-doc { from { background-color: var(--doc-flash); } to { background-color: transparent; } }
135
+ .ap-rendered.ap-flash-doc { animation: ap-flash-doc 1s ease-out; }
136
+ @media (prefers-reduced-motion: reduce) { .ap-flash-anchor, .ap-flash-doc { animation: none; } }
121
137
  .ap-pane { width: 380px; flex: 0 0 auto; display: flex; flex-direction: column; min-height: 0; border-right: 1px solid var(--line); overflow: hidden; }
122
138
  /* draggable vertical splitter between panes */
123
139
  .ap-vsplit { flex: 0 0 6px; cursor: col-resize; background: var(--line); }
@@ -220,6 +236,13 @@ input[type="checkbox"]:focus-visible, input[type="radio"]:focus-visible { outlin
220
236
 
221
237
  /* find matches highlighted in the preview (CSS Custom Highlight API) */
222
238
  ::highlight(ap-find) { background: #f3dba0; color: inherit; }
239
+ /* The span being commented on — kept visible while the composer steals focus (item 4). */
240
+ ::highlight(ap-comment-target) { background: #bcd5cc; color: inherit; }
241
+ /* Preview right-click context menu. */
242
+ .ap-ctxmenu { position: fixed; z-index: 40; display: flex; flex-direction: column; min-width: 168px; padding: 4px; background: var(--bg); border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow); }
243
+ .ap-ctxmenu-item { font: inherit; text-align: left; background: none; border: 0; border-radius: 6px; padding: 6px 10px; cursor: pointer; color: var(--fg); }
244
+ .ap-ctxmenu-item:hover:not(:disabled) { background: var(--accent-soft); color: var(--accent); }
245
+ .ap-ctxmenu-item:disabled { opacity: 0.4; cursor: default; }
223
246
  /* find matches highlighted inside the source editor (Editor find scope) */
224
247
  .cm-ap-find { background: #f3dba0; }
225
248
 
@@ -234,6 +257,8 @@ input[type="checkbox"]:focus-visible, input[type="radio"]:focus-visible { outlin
234
257
  /* inline diff in the PREVIEW pane (rendered markdown, per-hunk accept/reject) */
235
258
  .ap-diffview { max-width: 760px; }
236
259
  .ap-ctx { opacity: 0.72; }
260
+ /* Review "next" top-aligns the focused hunk (block:"start"); keep a little gap from the pane top. */
261
+ .ap-ihunk, .ap-hunk { scroll-margin-top: 12px; }
237
262
  .ap-ihunk { border: 1px solid var(--line); border-radius: 9px; margin: 12px 0; overflow: hidden; }
238
263
  .ap-ihunk-bar { display: flex; align-items: center; gap: 6px; padding: 4px 10px; background: #f3eee1; border-bottom: 1px solid var(--line); font-size: 12px; color: var(--muted); }
239
264
  .ap-ihunk-bar button { font: inherit; border: 1px solid var(--line-strong); background: var(--bg); border-radius: 6px; padding: 2px 10px; cursor: pointer; }
@@ -669,7 +669,7 @@ function ta(a, b, c, d) {
669
669
  var e = z.hasOwnProperty(b) ? z[b] : null;
670
670
  if (null !== e ? 0 !== e.type : d || !(2 < b.length) || "o" !== b[0] && "O" !== b[0] || "n" !== b[1] && "N" !== b[1]) qa(b, c, e, d) && (c = null), d || null === e ? oa(b) && (null === c ? a.removeAttribute(b) : a.setAttribute(b, "" + c)) : e.mustUseProperty ? a[e.propertyName] = null === c ? 3 === e.type ? false : "" : c : (b = e.attributeName, d = e.attributeNamespace, null === c ? a.removeAttribute(b) : (e = e.type, c = 3 === e || 4 === e && true === c ? "" : "" + c, d ? a.setAttributeNS(d, b, c) : a.setAttribute(b, c)));
671
671
  }
672
- var ua = aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, va = Symbol.for("react.element"), wa = Symbol.for("react.portal"), ya = Symbol.for("react.fragment"), za = Symbol.for("react.strict_mode"), Aa = Symbol.for("react.profiler"), Ba = Symbol.for("react.provider"), Ca = Symbol.for("react.context"), Da = Symbol.for("react.forward_ref"), Ea = Symbol.for("react.suspense"), Fa = Symbol.for("react.suspense_list"), Ga = Symbol.for("react.memo"), Ha = Symbol.for("react.lazy");
672
+ var ua$1 = aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, va = Symbol.for("react.element"), wa = Symbol.for("react.portal"), ya = Symbol.for("react.fragment"), za = Symbol.for("react.strict_mode"), Aa = Symbol.for("react.profiler"), Ba = Symbol.for("react.provider"), Ca = Symbol.for("react.context"), Da = Symbol.for("react.forward_ref"), Ea = Symbol.for("react.suspense"), Fa = Symbol.for("react.suspense_list"), Ga = Symbol.for("react.memo"), Ha = Symbol.for("react.lazy");
673
673
  var Ia = Symbol.for("react.offscreen");
674
674
  var Ja = Symbol.iterator;
675
675
  function Ka(a) {
@@ -1641,7 +1641,7 @@ function bd(a) {
1641
1641
  for (c = 0; c < Qc.length; c++) d = Qc[c], d.blockedOn === a && (d.blockedOn = null);
1642
1642
  for (; 0 < Qc.length && (c = Qc[0], null === c.blockedOn); ) Vc(c), null === c.blockedOn && Qc.shift();
1643
1643
  }
1644
- var cd = ua.ReactCurrentBatchConfig, dd = true;
1644
+ var cd = ua$1.ReactCurrentBatchConfig, dd = true;
1645
1645
  function ed(a, b, c, d) {
1646
1646
  var e = C$1, f2 = cd.transition;
1647
1647
  cd.transition = null;
@@ -2802,7 +2802,7 @@ function Ig() {
2802
2802
  function Jg(a) {
2803
2803
  null === zg ? zg = [a] : zg.push(a);
2804
2804
  }
2805
- var Kg = ua.ReactCurrentBatchConfig;
2805
+ var Kg = ua$1.ReactCurrentBatchConfig;
2806
2806
  function Lg(a, b, c) {
2807
2807
  a = c.ref;
2808
2808
  if (null !== a && "function" !== typeof a && "object" !== typeof a) {
@@ -3337,7 +3337,7 @@ function Eh() {
3337
3337
  for (var a = 0; a < Dh.length; a++) Dh[a]._workInProgressVersionPrimary = null;
3338
3338
  Dh.length = 0;
3339
3339
  }
3340
- var Fh = ua.ReactCurrentDispatcher, Gh = ua.ReactCurrentBatchConfig, Hh = 0, M = null, N = null, O = null, Ih = false, Jh = false, Kh = 0, Lh = 0;
3340
+ var Fh = ua$1.ReactCurrentDispatcher, Gh = ua$1.ReactCurrentBatchConfig, Hh = 0, M = null, N = null, O = null, Ih = false, Jh = false, Kh = 0, Lh = 0;
3341
3341
  function P$1() {
3342
3342
  throw Error(p(321));
3343
3343
  }
@@ -3939,7 +3939,7 @@ function Vi(a, b, c, d, e) {
3939
3939
  a.lanes = e;
3940
3940
  return a;
3941
3941
  }
3942
- var Wi = ua.ReactCurrentOwner, dh = false;
3942
+ var Wi = ua$1.ReactCurrentOwner, dh = false;
3943
3943
  function Xi(a, b, c, d) {
3944
3944
  b.child = null === a ? Vg(b, null, c, d) : Ug(b, a.child, c, d);
3945
3945
  }
@@ -5555,7 +5555,7 @@ function jk(a) {
5555
5555
  V = b.return;
5556
5556
  }
5557
5557
  }
5558
- var lk = Math.ceil, mk = ua.ReactCurrentDispatcher, nk = ua.ReactCurrentOwner, ok = ua.ReactCurrentBatchConfig, K = 0, Q = null, Y = null, Z$1 = 0, fj = 0, ej = Uf(0), T = 0, pk = null, rh = 0, qk = 0, rk = 0, sk = null, tk = null, fk = 0, Gj = Infinity, uk = null, Oi = false, Pi = null, Ri = null, vk = false, wk = null, xk = 0, yk = 0, zk = null, Ak = -1, Bk = 0;
5558
+ var lk = Math.ceil, mk = ua$1.ReactCurrentDispatcher, nk = ua$1.ReactCurrentOwner, ok = ua$1.ReactCurrentBatchConfig, K = 0, Q = null, Y = null, Z$1 = 0, fj = 0, ej = Uf(0), T = 0, pk = null, rh = 0, qk = 0, rk = 0, sk = null, tk = null, fk = 0, Gj = Infinity, uk = null, Oi = false, Pi = null, Ri = null, vk = false, wk = null, xk = 0, yk = 0, zk = null, Ak = -1, Bk = 0;
5559
5559
  function R() {
5560
5560
  return 0 !== (K & 6) ? B() : -1 !== Ak ? Ak : Ak = B();
5561
5561
  }
@@ -6866,7 +6866,7 @@ yb = function(a, b, c) {
6866
6866
  Gb = Qk;
6867
6867
  Hb = Rk;
6868
6868
  var sl = { usingClientEntryPoint: false, Events: [Cb, ue, Db, Eb, Fb, Qk] }, tl = { findFiberByHostInstance: Wc, bundleType: 0, version: "18.3.1", rendererPackageName: "react-dom" };
6869
- var ul = { bundleType: tl.bundleType, version: tl.version, rendererPackageName: tl.rendererPackageName, rendererConfig: tl.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, overrideProps: null, overridePropsDeletePath: null, overridePropsRenamePath: null, setErrorHandler: null, setSuspenseHandler: null, scheduleUpdate: null, currentDispatcherRef: ua.ReactCurrentDispatcher, findHostInstanceByFiber: function(a) {
6869
+ var ul = { bundleType: tl.bundleType, version: tl.version, rendererPackageName: tl.rendererPackageName, rendererConfig: tl.rendererConfig, overrideHookState: null, overrideHookStateDeletePath: null, overrideHookStateRenamePath: null, overrideProps: null, overridePropsDeletePath: null, overridePropsRenamePath: null, setErrorHandler: null, setSuspenseHandler: null, scheduleUpdate: null, currentDispatcherRef: ua$1.ReactCurrentDispatcher, findHostInstanceByFiber: function(a) {
6870
6870
  a = Zb(a);
6871
6871
  return null === a ? null : a.stateNode;
6872
6872
  }, findFiberByHostInstance: tl.findFiberByHostInstance || jl, findHostInstancesForRefresh: null, scheduleRefresh: null, scheduleRoot: null, setRefreshHandler: null, getCurrentFiber: null, reconcilerVersion: "18.3.1-next-f1338f8080-20240426" };
@@ -50211,7 +50211,7 @@ function buildNormalized(source) {
50211
50211
  let prevSpace = false;
50212
50212
  for (let i = 0; i < source.length; i++) {
50213
50213
  const ch2 = source[i];
50214
- if (ch2 === "*" || ch2 === "_" || ch2 === "`") {
50214
+ if (ch2 === "*" || ch2 === "_" || ch2 === "`" || ch2 === "~") {
50215
50215
  prevSpace = false;
50216
50216
  continue;
50217
50217
  }
@@ -50228,7 +50228,7 @@ function buildNormalized(source) {
50228
50228
  }
50229
50229
  return { text: text2, map: map2 };
50230
50230
  }
50231
- var normalizeNeedle = (s) => s.replace(/[*_`]/g, "").replace(/\s+/g, " ").trim();
50231
+ var normalizeNeedle = (s) => s.replace(/[*_`~]/g, "").replace(/\s+/g, " ").trim();
50232
50232
  function findSpanRange(body, selected) {
50233
50233
  const direct = findPlainOccurrence(body, selected);
50234
50234
  if (direct >= 0) return { start: direct, end: direct + selected.length };
@@ -50239,12 +50239,91 @@ function findSpanRange(body, selected) {
50239
50239
  if (idx < 0) return null;
50240
50240
  return { start: map2[idx], end: map2[idx + needle.length - 1] + 1 };
50241
50241
  }
50242
+ var PAIRED = ["~~", "**", "__", "*", "_"];
50243
+ function scanOpenMarkers(body, pos) {
50244
+ const stack = [];
50245
+ let i = 0;
50246
+ while (i < pos) {
50247
+ const ch2 = body[i];
50248
+ if (ch2 === "\\") {
50249
+ i += 2;
50250
+ continue;
50251
+ }
50252
+ if (ch2 === "`") {
50253
+ let n2 = 0;
50254
+ while (body[i + n2] === "`") n2++;
50255
+ const close = body.indexOf("`".repeat(n2), i + n2);
50256
+ if (close !== -1) {
50257
+ const codeEnd = close + n2;
50258
+ if (pos <= codeEnd) return stack;
50259
+ i = codeEnd;
50260
+ continue;
50261
+ }
50262
+ i += n2;
50263
+ continue;
50264
+ }
50265
+ if (ch2 === "*" || ch2 === "_" || ch2 === "~") {
50266
+ let n2 = 0;
50267
+ while (body[i + n2] === ch2) n2++;
50268
+ if (ch2 === "~" && n2 < 2) {
50269
+ i += n2;
50270
+ continue;
50271
+ }
50272
+ const t2 = ch2 === "~" ? "~~" : ch2.repeat(n2);
50273
+ if (stack[stack.length - 1] === t2) stack.pop();
50274
+ else stack.push(t2);
50275
+ i += n2;
50276
+ continue;
50277
+ }
50278
+ i++;
50279
+ }
50280
+ return stack;
50281
+ }
50282
+ var closeOf = (st) => [...st].reverse().join("");
50283
+ var openOf = (st) => st.join("");
50284
+ function wrapSpanWithComment(body, start, end, id2) {
50285
+ for (; ; ) {
50286
+ const m2 = scanOpenMarkers(body, start).at(-1);
50287
+ if (m2 && body.slice(start - m2.length, start) === m2) start -= m2.length;
50288
+ else break;
50289
+ }
50290
+ for (; ; ) {
50291
+ const m2 = scanOpenMarkers(body, end).at(-1);
50292
+ if (m2 && body.slice(end, end + m2.length) === m2) end += m2.length;
50293
+ else break;
50294
+ }
50295
+ const openStart = scanOpenMarkers(body, start);
50296
+ const openEnd = scanOpenMarkers(body, end);
50297
+ let c = 0;
50298
+ while (c < openStart.length && c < openEnd.length && openStart[c] === openEnd[c]) c++;
50299
+ const startCross = openStart.slice(c);
50300
+ const endCross = openEnd.slice(c);
50301
+ return body.slice(0, start) + closeOf(startCross) + "[" + openOf(startCross) + body.slice(start, end) + closeOf(endCross) + `](#${id2})` + openOf(endCross) + body.slice(end);
50302
+ }
50303
+ function mergeSeam(s, at) {
50304
+ for (const m2 of [...PAIRED].sort((a, b) => b.length - a.length)) {
50305
+ if (s.slice(at - m2.length, at) === m2 && s.slice(at, at + m2.length) === m2) {
50306
+ return s.slice(0, at - m2.length) + s.slice(at + m2.length);
50307
+ }
50308
+ }
50309
+ return s;
50310
+ }
50311
+ var ANCHOR_RE = /\[[^\]]*\]\(#cmt-[0-9a-z]+\)/gi;
50312
+ function spanCommentBlocker(body, selected) {
50313
+ if (!selected.trim()) return null;
50314
+ const range = findSpanRange(body, selected);
50315
+ if (!range) return "not-found";
50316
+ for (const m2 of body.matchAll(ANCHOR_RE)) {
50317
+ const aStart = m2.index;
50318
+ if (range.start < aStart + m2[0].length && aStart < range.end) return "overlap";
50319
+ }
50320
+ return null;
50321
+ }
50242
50322
  function addSpanComment(doc2, selectedText, fields) {
50243
50323
  const range = findSpanRange(doc2.body, selectedText);
50244
50324
  if (!range) return null;
50245
50325
  const id2 = genId(takenIds(doc2));
50246
- const sourceSpan = doc2.body.slice(range.start, range.end);
50247
- const body = `${doc2.body.slice(0, range.start)}[${sourceSpan}](#${id2})${doc2.body.slice(range.end)}`;
50326
+ const body = wrapSpanWithComment(doc2.body, range.start, range.end, id2);
50248
50327
  const comment2 = { id: id2, author: fields.author, date: nowIso(), resolved: false, text: fields.text, ...fields.question ? { question: fields.question } : {} };
50249
50328
  return { doc: { body, comments: [...doc2.comments, comment2] }, id: id2 };
50250
50329
  }
@@ -50270,8 +50349,16 @@ function editCommentText(doc2, id2, text2) {
50270
50349
  return { ...doc2, comments: doc2.comments.map((c) => c.id === id2 ? { ...c, text: text2 } : c) };
50271
50350
  }
50272
50351
  function deleteComment(doc2, id2) {
50273
- const link2 = new RegExp(`\\[([^\\]]*)\\]\\(#${id2}\\)`, "g");
50274
- const body = doc2.body.replace(link2, "$1");
50352
+ const link2 = new RegExp(`\\[([^\\]]*)\\]\\(#${id2}\\)`);
50353
+ const m2 = link2.exec(doc2.body);
50354
+ let body = doc2.body;
50355
+ if (m2) {
50356
+ const label = m2[1] ?? "";
50357
+ let merged = doc2.body.slice(0, m2.index) + label + doc2.body.slice(m2.index + m2[0].length);
50358
+ merged = mergeSeam(merged, m2.index + label.length);
50359
+ merged = mergeSeam(merged, m2.index);
50360
+ body = merged;
50361
+ }
50275
50362
  const removed = /* @__PURE__ */ new Set([id2]);
50276
50363
  let changed = true;
50277
50364
  while (changed) {
@@ -50308,20 +50395,32 @@ function buildThreads(comments) {
50308
50395
  }
50309
50396
  var md = new MarkdownIt({ html: false, linkify: true });
50310
50397
  var defaultLinkOpen = md.renderer.rules.link_open ?? ((tokens, idx, opts, _env, self) => self.renderToken(tokens, idx, opts));
50398
+ var defaultLinkClose = md.renderer.rules.link_close ?? ((tokens, idx, opts, _env, self) => self.renderToken(tokens, idx, opts));
50311
50399
  md.renderer.rules.link_open = (tokens, idx, opts, env, self) => {
50312
50400
  const href = tokens[idx].attrGet("href") ?? "";
50313
50401
  const m2 = /^#(cmt-[0-9a-z]+)$/i.exec(href);
50402
+ const e = env;
50403
+ let show = true;
50314
50404
  if (m2) {
50315
50405
  const id2 = m2[1].toLowerCase();
50316
- tokens[idx].attrSet("data-cmt", id2);
50317
- const shouldHighlight = env?.shouldHighlight;
50318
- if (!shouldHighlight || shouldHighlight(id2)) {
50406
+ const pred = e?.showAnchor;
50407
+ show = !pred || pred(id2);
50408
+ if (show) {
50409
+ tokens[idx].attrSet("data-cmt", id2);
50319
50410
  tokens[idx].attrSet("class", "ap-anchor");
50320
50411
  }
50321
50412
  }
50413
+ (e._cmtShow ??= []).push(show);
50414
+ if (!show) return "";
50322
50415
  return defaultLinkOpen(tokens, idx, opts, env, self);
50323
50416
  };
50324
- var BLOCK_RULES = ["paragraph_open", "heading_open", "blockquote_open", "bullet_list_open", "ordered_list_open", "list_item_open", "table_open", "hr"];
50417
+ md.renderer.rules.link_close = (tokens, idx, opts, env, self) => {
50418
+ const stack = env._cmtShow;
50419
+ const show = stack && stack.length ? stack.pop() : true;
50420
+ if (!show) return "";
50421
+ return defaultLinkClose(tokens, idx, opts, env, self);
50422
+ };
50423
+ var BLOCK_RULES = ["paragraph_open", "heading_open", "blockquote_open", "bullet_list_open", "ordered_list_open", "list_item_open", "table_open", "tr_open", "hr"];
50325
50424
  for (const name2 of BLOCK_RULES) {
50326
50425
  const orig = md.renderer.rules[name2];
50327
50426
  md.renderer.rules[name2] = (tokens, idx, options, env, self) => {
@@ -50338,8 +50437,8 @@ for (const name2 of ["fence", "code_block"]) {
50338
50437
  return tok.map ? html2.replace(/^<pre/, `<pre data-line="${tok.map[0]}"`) : html2;
50339
50438
  };
50340
50439
  }
50341
- function renderMarkdown(body, shouldHighlight) {
50342
- return md.render(body, { shouldHighlight });
50440
+ function renderMarkdown(body, showAnchor) {
50441
+ return md.render(body, { showAnchor });
50343
50442
  }
50344
50443
  function isInternalDocLink(href) {
50345
50444
  if (!href || /^[a-z][a-z0-9+.-]*:/i.test(href) || href.startsWith("//") || href.startsWith("#")) return false;
@@ -50373,6 +50472,11 @@ var EN = {
50373
50472
  "topbar.addDocComment": "Add Doc Comment",
50374
50473
  "topbar.addCommentTitle": "Add a comment on the selection",
50375
50474
  "topbar.addDocCommentTitle": "Add a document-level comment",
50475
+ "topbar.cantOverlap": "Comments can't overlap",
50476
+ "topbar.cantWhitespace": "Comments can't be added to white space",
50477
+ "topbar.cantSpanBlocks": "Comments can't span multiple blocks",
50478
+ "topbar.cantSpanTable": "Comments can't span table cells",
50479
+ "topbar.cantRendered": "Comments can't be anchored to this text",
50376
50480
  "topbar.save": "Save",
50377
50481
  "topbar.saveUnsaved": "Save — unsaved changes",
50378
50482
  "topbar.finishTurn": "Finish turn",
@@ -50411,7 +50515,7 @@ var EN = {
50411
50515
  "msg.autosaving": "auto-saving…",
50412
50516
  "msg.autosaved": "autosaved (backup)",
50413
50517
  "msg.turnFinished": "turn finished — waiting for agent",
50414
- "msg.cantAnchor": "could not anchor the selected text in the source",
50518
+ "msg.cantAnchor": "Comments can't be anchored to this selection",
50415
50519
  // status bar
50416
50520
  "status.ready": "ready",
50417
50521
  "status.thinking": "Agent is thinking",
@@ -50424,7 +50528,7 @@ var EN = {
50424
50528
  "composer.on": "on “{target}”",
50425
50529
  "composer.docLevel": "document-level comment",
50426
50530
  "composer.dragToMove": "drag to move",
50427
- "composer.placeholder": "Add a comment… (⌘/Ctrl+Enter to submit)",
50531
+ "composer.placeholder": "Add a comment… ({mod}+Enter to submit)",
50428
50532
  "composer.comment": "Comment",
50429
50533
  "composer.cancel": "cancel",
50430
50534
  // agent connection indicator
@@ -50446,7 +50550,14 @@ var EN = {
50446
50550
  "agent.connection": "Agent connection",
50447
50551
  // comment rail
50448
50552
  "rail.comments": "Comments",
50449
- "rail.showResolved": "resolved & orphaned",
50553
+ "rail.showResolved": "Show resolved ({resolved}) & orphaned ({orphaned}) comments",
50554
+ "rail.showResolvedOnly": "Show resolved ({resolved}) comments",
50555
+ "rail.showOrphanedOnly": "Show orphaned ({orphaned}) comments",
50556
+ // preview right-click context menu
50557
+ "menu.findText": "Find Text",
50558
+ "menu.copy": "Copy",
50559
+ "menu.selectLine": "Select Line",
50560
+ "menu.selectAll": "Select All",
50450
50561
  "rail.resolveThread": "Resolve thread",
50451
50562
  "rail.reopenThread": "Reopen thread",
50452
50563
  "rail.reply": "Reply",
@@ -50539,6 +50650,8 @@ function useT() {
50539
50650
  function useI18n() {
50540
50651
  return useI18nState();
50541
50652
  }
50653
+ var ua = typeof navigator !== "undefined" && (navigator.userAgent || navigator.platform) || "";
50654
+ var MOD_KEY = /mac/i.test(ua) ? "⌘" : "Ctrl";
50542
50655
  function ComposerPopover({
50543
50656
  target,
50544
50657
  pos,
@@ -50593,7 +50706,7 @@ function ComposerPopover({
50593
50706
  {
50594
50707
  ref: ta2,
50595
50708
  className: "ap-grow",
50596
- placeholder: t2("composer.placeholder"),
50709
+ placeholder: t2("composer.placeholder", { mod: MOD_KEY }),
50597
50710
  value: text2,
50598
50711
  disabled,
50599
50712
  onChange: (e) => {
@@ -50614,6 +50727,43 @@ function ComposerPopover({
50614
50727
  ] })
50615
50728
  ] });
50616
50729
  }
50730
+ function ContextMenu({
50731
+ pos,
50732
+ items,
50733
+ onClose
50734
+ }) {
50735
+ const ref = reactExports.useRef(null);
50736
+ reactExports.useEffect(() => {
50737
+ const onDown = (e) => {
50738
+ if (ref.current && !ref.current.contains(e.target)) onClose();
50739
+ };
50740
+ const onKey = (e) => {
50741
+ if (e.key === "Escape") onClose();
50742
+ };
50743
+ document.addEventListener("mousedown", onDown);
50744
+ document.addEventListener("keydown", onKey);
50745
+ return () => {
50746
+ document.removeEventListener("mousedown", onDown);
50747
+ document.removeEventListener("keydown", onKey);
50748
+ };
50749
+ }, [onClose]);
50750
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref, className: "ap-ctxmenu", role: "menu", style: { left: pos.x, top: pos.y }, onMouseDown: (e) => e.preventDefault(), children: items.map((it, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(
50751
+ "button",
50752
+ {
50753
+ type: "button",
50754
+ role: "menuitem",
50755
+ className: "ap-ctxmenu-item",
50756
+ disabled: it.disabled,
50757
+ ...it.title ? { title: it.title } : {},
50758
+ onClick: () => {
50759
+ onClose();
50760
+ it.onSelect();
50761
+ },
50762
+ children: it.label
50763
+ },
50764
+ `${it.label}-${i}`
50765
+ )) });
50766
+ }
50617
50767
  function QuestionChips({ question: question2, disabled, onAnswer }) {
50618
50768
  const t2 = useT();
50619
50769
  const [selected, setSelected] = reactExports.useState([]);
@@ -50991,6 +51141,12 @@ var IconFinishTurn = () => /* @__PURE__ */ jsxRuntimeExports.jsxs(Glyph, { child
50991
51141
  /* @__PURE__ */ jsxRuntimeExports.jsx("polygon", { points: "22 2 15 22 11 13 2 9 22 2" })
50992
51142
  ] });
50993
51143
  var IconComplete = () => /* @__PURE__ */ jsxRuntimeExports.jsx(Glyph, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("polyline", { points: "20 6 9 17 4 12" }) });
51144
+ var IconRevealArchive = () => /* @__PURE__ */ jsxRuntimeExports.jsxs(Glyph, { children: [
51145
+ /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M4 7c2.6-3.2 13.4-3.2 16 0c-2.6 3.2-13.4 3.2-16 0Z" }),
51146
+ /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "12", cy: "7", r: "1.6" }),
51147
+ /* @__PURE__ */ jsxRuntimeExports.jsx("rect", { x: "5", y: "13", width: "14", height: "7", rx: "1" }),
51148
+ /* @__PURE__ */ jsxRuntimeExports.jsx("line", { x1: "5", y1: "16", x2: "19", y2: "16" })
51149
+ ] });
50994
51150
  function lineSegments(a, b) {
50995
51151
  const A2 = a.split("\n");
50996
51152
  const B2 = b.split("\n");
@@ -51103,7 +51259,41 @@ function anchorLine(body, id2) {
51103
51259
  if (idx < 0) return null;
51104
51260
  return body.slice(0, idx).split("\n").length - 1;
51105
51261
  }
51106
- var liveSelection = () => window.getSelection()?.toString().trim() ?? "";
51262
+ function flashEl(el2, cls) {
51263
+ if (!el2) return;
51264
+ el2.classList.remove(cls);
51265
+ void el2.offsetWidth;
51266
+ el2.classList.add(cls);
51267
+ }
51268
+ function selectionOverlapsComment(range, root2) {
51269
+ if (!range || !root2 || typeof range.intersectsNode !== "function") return false;
51270
+ for (const a of root2.querySelectorAll("[data-cmt]")) {
51271
+ try {
51272
+ if (range.intersectsNode(a)) return true;
51273
+ } catch {
51274
+ }
51275
+ }
51276
+ return false;
51277
+ }
51278
+ function anchorFailureReason(range) {
51279
+ const elOf = (n2) => n2 ? n2.nodeType === 1 ? n2 : n2.parentElement : null;
51280
+ const s = elOf(range?.startContainer);
51281
+ const e = elOf(range?.endContainer);
51282
+ if (s?.closest("table") || e?.closest("table")) return "table";
51283
+ const sb2 = s?.closest("[data-line]");
51284
+ const eb2 = e?.closest("[data-line]");
51285
+ if (sb2 && eb2 && sb2 !== eb2) return "blocks";
51286
+ return "rendered";
51287
+ }
51288
+ function commentBlockReason(raw, body, range, root2) {
51289
+ if (!raw) return null;
51290
+ if (!raw.trim()) return "whitespace";
51291
+ if (selectionOverlapsComment(range, root2)) return "overlap";
51292
+ const b = spanCommentBlocker(body, raw.trim());
51293
+ if (b === "overlap") return "overlap";
51294
+ if (b === "not-found") return anchorFailureReason(range);
51295
+ return null;
51296
+ }
51107
51297
  function App() {
51108
51298
  const t2 = useT();
51109
51299
  const [loaded, setLoaded] = reactExports.useState(false);
@@ -51128,6 +51318,8 @@ function App() {
51128
51318
  const [showResolvedOrphaned, setShowResolvedOrphaned] = reactExports.useState(false);
51129
51319
  const [selectionText, setSelectionText] = reactExports.useState("");
51130
51320
  const [composer, setComposer] = reactExports.useState(null);
51321
+ const [ctxMenu, setCtxMenu] = reactExports.useState(null);
51322
+ const [findSeed, setFindSeed] = reactExports.useState("");
51131
51323
  const [focused, setFocused] = reactExports.useState(null);
51132
51324
  const [activePreviewLine, setActivePreviewLine] = reactExports.useState(null);
51133
51325
  const [proposal, setProposal] = reactExports.useState(null);
@@ -51137,6 +51329,11 @@ function App() {
51137
51329
  const docRef = reactExports.useRef(doc2);
51138
51330
  docRef.current = doc2;
51139
51331
  const previewRef = reactExports.useRef(null);
51332
+ const ctxBlockRef = reactExports.useRef(null);
51333
+ const ctxSelTextRef = reactExports.useRef("");
51334
+ const tryAddCommentRef = reactExports.useRef(() => {
51335
+ });
51336
+ const commentRangeRef = reactExports.useRef(null);
51140
51337
  const docPathRef = reactExports.useRef("");
51141
51338
  const railRef = reactExports.useRef(null);
51142
51339
  const editorRef = reactExports.useRef(null);
@@ -51213,7 +51410,7 @@ function App() {
51213
51410
  });
51214
51411
  window.api.onNavState?.((s) => setNavState(s));
51215
51412
  window.api.onUpdateAvailable?.((info) => setUpdate(info));
51216
- const onSel = () => setSelectionText(liveSelection());
51413
+ const onSel = () => setSelectionText(window.getSelection()?.toString() ?? "");
51217
51414
  document.addEventListener("selectionchange", onSel);
51218
51415
  return () => document.removeEventListener("selectionchange", onSel);
51219
51416
  }, []);
@@ -51258,7 +51455,14 @@ function App() {
51258
51455
  } else if ((e.metaKey || e.ctrlKey) && !e.altKey && (e.key === "f" || e.key === "F")) {
51259
51456
  e.preventDefault();
51260
51457
  setFindOpen(true);
51261
- requestAnimationFrame(() => document.getElementById("ap-find-input")?.focus());
51458
+ requestAnimationFrame(() => {
51459
+ const el2 = document.getElementById("ap-find-input");
51460
+ el2?.focus();
51461
+ el2?.select();
51462
+ });
51463
+ } else if ((e.metaKey || e.ctrlKey) && !e.altKey && e.key === "/") {
51464
+ e.preventDefault();
51465
+ tryAddCommentRef.current();
51262
51466
  } else if (e.key === "Escape") {
51263
51467
  if (composer) setComposer(null);
51264
51468
  else if (findOpen) setFindOpen(false);
@@ -51380,6 +51584,11 @@ function App() {
51380
51584
  const addComment = reactExports.useCallback(
51381
51585
  (text2, target, question2) => {
51382
51586
  if (target) {
51587
+ const blocker = spanCommentBlocker(docRef.current.body, target);
51588
+ if (blocker) {
51589
+ setStatus(blocker === "overlap" ? t2("topbar.cantOverlap") : t2("msg.cantAnchor"));
51590
+ return;
51591
+ }
51383
51592
  const res = addSpanComment(docRef.current, target, { text: text2, author: USER_AUTHOR, question: question2 });
51384
51593
  if (!res) {
51385
51594
  setStatus(t2("msg.cantAnchor"));
@@ -51400,26 +51609,69 @@ function App() {
51400
51609
  const sel = window.getSelection();
51401
51610
  const txt = sel?.toString().trim() ?? "";
51402
51611
  if (txt && sel && sel.rangeCount > 0) {
51403
- const r2 = sel.getRangeAt(0).getBoundingClientRect();
51612
+ const range = sel.getRangeAt(0);
51613
+ commentRangeRef.current = range.cloneRange();
51614
+ const r2 = range.getBoundingClientRect();
51404
51615
  setComposer({ target: txt, pos: { x: Math.max(8, Math.min(r2.left, window.innerWidth - 360)), y: Math.max(48, Math.min(r2.bottom + 6, window.innerHeight - 220)) } });
51405
51616
  } else {
51617
+ commentRangeRef.current = null;
51406
51618
  previewRef.current?.scrollTo({ top: 0 });
51407
51619
  setComposer({ target: null, pos: { x: 24, y: 56 } });
51408
51620
  }
51409
51621
  }, []);
51622
+ const openComposerFromCapture = reactExports.useCallback(() => {
51623
+ const target = ctxSelTextRef.current;
51624
+ if (target && commentRangeRef.current) {
51625
+ const r2 = commentRangeRef.current.getBoundingClientRect();
51626
+ setComposer({ target, pos: { x: Math.max(8, Math.min(r2.left, window.innerWidth - 360)), y: Math.max(48, Math.min(r2.bottom + 6, window.innerHeight - 220)) } });
51627
+ } else {
51628
+ commentRangeRef.current = null;
51629
+ previewRef.current?.scrollTo({ top: 0 });
51630
+ setComposer({ target: null, pos: { x: 24, y: 56 } });
51631
+ }
51632
+ }, []);
51633
+ const selectNodeContents = reactExports.useCallback((node) => {
51634
+ if (!node) return;
51635
+ const sel = window.getSelection();
51636
+ if (!sel) return;
51637
+ const r2 = document.createRange();
51638
+ r2.selectNodeContents(node);
51639
+ sel.removeAllRanges();
51640
+ sel.addRange(r2);
51641
+ }, []);
51642
+ reactExports.useEffect(() => {
51643
+ const cssApi = CSS;
51644
+ const HighlightCtor = window.Highlight;
51645
+ if (!cssApi.highlights || !HighlightCtor) return;
51646
+ cssApi.highlights.delete("ap-comment-target");
51647
+ if (composer && commentRangeRef.current) {
51648
+ try {
51649
+ cssApi.highlights.set("ap-comment-target", new HighlightCtor(commentRangeRef.current));
51650
+ } catch {
51651
+ }
51652
+ }
51653
+ return () => void cssApi.highlights?.delete("ap-comment-target");
51654
+ }, [composer]);
51655
+ reactExports.useEffect(() => {
51656
+ if (!findOpen) setFindSeed("");
51657
+ }, [findOpen]);
51410
51658
  const syncToLine = reactExports.useCallback((line) => {
51411
51659
  skipPreviewScroll.current = true;
51412
51660
  setActivePreviewLine(line);
51413
51661
  editorRef.current?.scrollToLine(line);
51414
51662
  }, []);
51415
51663
  const focusComment = reactExports.useCallback(
51416
- (id2, fromPreview = false) => {
51664
+ (id2, fromPreview = false, fromRail = false) => {
51417
51665
  setFocused(id2);
51418
51666
  const line = anchorLine(docRef.current.body, id2);
51419
51667
  if (line != null) editorRef.current?.scrollToLine(line);
51420
- if (!fromPreview) previewRef.current?.querySelector(`[data-cmt="${id2}"]`)?.scrollIntoView({ block: "center" });
51421
51668
  const c = docRef.current.comments.find((x2) => x2.id === id2);
51422
51669
  const rootId = c?.parentId ?? id2;
51670
+ const isDoc = docRef.current.comments.find((x2) => x2.id === rootId)?.anchor === "doc";
51671
+ if (!fromPreview && !isDoc) previewRef.current?.querySelector(`[data-cmt="${rootId}"]`)?.scrollIntoView({ block: "center" });
51672
+ if (isDoc) flashEl(previewRef.current?.querySelector(".ap-rendered"), "ap-flash-doc");
51673
+ else flashEl(previewRef.current?.querySelector(`[data-cmt="${rootId}"]`), "ap-flash-anchor");
51674
+ if (fromRail) return;
51423
51675
  const card = railRef.current?.querySelector(`[data-cmt-card="${rootId}"]`);
51424
51676
  if (card) {
51425
51677
  const parts = card.querySelectorAll(".ap-comment, .ap-reply");
@@ -51494,8 +51746,8 @@ function App() {
51494
51746
  setReviewCursor(n2);
51495
51747
  if (panes === 2 && rightTab !== "source") setRightTab("source");
51496
51748
  requestAnimationFrame(() => {
51497
- previewRef.current?.querySelector(`[data-hunk="${n2}"]`)?.scrollIntoView({ block: "center", behavior: "smooth" });
51498
- document.querySelector(`.ap-diffsource [data-hunk="${n2}"]`)?.scrollIntoView({ block: "center" });
51749
+ previewRef.current?.querySelector(`[data-hunk="${n2}"]`)?.scrollIntoView({ block: "start", behavior: "smooth" });
51750
+ document.querySelector(`.ap-diffsource [data-hunk="${n2}"]`)?.scrollIntoView({ block: "start", behavior: "smooth" });
51499
51751
  });
51500
51752
  }, [changeCount, reviewCursor, panes, rightTab]);
51501
51753
  const threads = reactExports.useMemo(() => buildThreads(doc2.comments), [doc2.comments]);
@@ -51508,6 +51760,45 @@ function App() {
51508
51760
  return threads.map(annotate).sort((a, b) => a.group - b.group || a.pos - b.pos);
51509
51761
  }, [threads, doc2.body]);
51510
51762
  const visible = ordered.filter((o) => showResolvedOrphaned || !o.thread.root.resolved && !o.orphaned);
51763
+ const resolvedCount = ordered.filter((o) => o.thread.root.resolved).length;
51764
+ const orphanedCount = ordered.filter((o) => o.orphaned).length;
51765
+ const revealTip = resolvedCount > 0 && orphanedCount > 0 ? t2("rail.showResolved", { resolved: resolvedCount, orphaned: orphanedCount }) : resolvedCount > 0 ? t2("rail.showResolvedOnly", { resolved: resolvedCount }) : t2("rail.showOrphanedOnly", { orphaned: orphanedCount });
51766
+ const selBlocker = reactExports.useMemo(() => {
51767
+ const sel = window.getSelection();
51768
+ const range = sel && sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
51769
+ return commentBlockReason(selectionText, doc2.body, range, previewRef.current);
51770
+ }, [doc2.body, selectionText]);
51771
+ const blockerTip = reactExports.useCallback(
51772
+ (r2) => {
51773
+ switch (r2) {
51774
+ case "whitespace":
51775
+ return t2("topbar.cantWhitespace");
51776
+ case "overlap":
51777
+ return t2("topbar.cantOverlap");
51778
+ case "blocks":
51779
+ return t2("topbar.cantSpanBlocks");
51780
+ case "table":
51781
+ return t2("topbar.cantSpanTable");
51782
+ case "rendered":
51783
+ return t2("topbar.cantRendered");
51784
+ default:
51785
+ return null;
51786
+ }
51787
+ },
51788
+ [t2]
51789
+ );
51790
+ const tryAddComment = reactExports.useCallback(() => {
51791
+ const sel = window.getSelection();
51792
+ const raw = sel?.toString() ?? "";
51793
+ const range = sel && sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
51794
+ const reason = commentBlockReason(raw, docRef.current.body, range, previewRef.current);
51795
+ if (reason) {
51796
+ setStatus(blockerTip(reason) ?? "");
51797
+ return;
51798
+ }
51799
+ openComposer();
51800
+ }, [blockerTip, openComposer]);
51801
+ tryAddCommentRef.current = tryAddComment;
51511
51802
  const resolvedIds = reactExports.useMemo(() => new Set(doc2.comments.filter((c) => c.resolved).map((c) => c.id)), [doc2.comments]);
51512
51803
  const previewHtml = reactExports.useMemo(
51513
51804
  () => renderMarkdown(doc2.body, (id2) => showResolvedOrphaned || !resolvedIds.has(id2)),
@@ -51554,6 +51845,7 @@ function App() {
51554
51845
  panes,
51555
51846
  zoom,
51556
51847
  hasSelection: selectionText.length > 0,
51848
+ commentBlockTip: blockerTip(selBlocker),
51557
51849
  onMode: onModeChange,
51558
51850
  onAutoResolve,
51559
51851
  onPanes: setPanes,
@@ -51572,6 +51864,7 @@ function App() {
51572
51864
  FindReplaceBar,
51573
51865
  {
51574
51866
  doc: doc2,
51867
+ seed: findSeed,
51575
51868
  onApply: apply,
51576
51869
  onClose: () => setFindOpen(false),
51577
51870
  onNavigate: navigateMatch,
@@ -51677,6 +51970,28 @@ function App() {
51677
51970
  onClose: () => setComposer(null)
51678
51971
  }
51679
51972
  ),
51973
+ ctxMenu && /* @__PURE__ */ jsxRuntimeExports.jsx(
51974
+ ContextMenu,
51975
+ {
51976
+ pos: { x: ctxMenu.x, y: ctxMenu.y },
51977
+ onClose: () => setCtxMenu(null),
51978
+ items: [
51979
+ {
51980
+ label: t2("topbar.addComment"),
51981
+ disabled: editingLocked || ctxMenu.block !== null,
51982
+ ...ctxMenu.block ? { title: blockerTip(ctxMenu.block) ?? "" } : {},
51983
+ onSelect: openComposerFromCapture
51984
+ },
51985
+ { label: t2("menu.findText"), disabled: !ctxMenu.hasSel, onSelect: () => {
51986
+ setFindSeed(ctxSelTextRef.current);
51987
+ setFindOpen(true);
51988
+ } },
51989
+ { label: t2("menu.copy"), disabled: !ctxMenu.hasSel, onSelect: () => void navigator.clipboard?.writeText?.(ctxSelTextRef.current) },
51990
+ { label: t2("menu.selectLine"), disabled: !ctxBlockRef.current, onSelect: () => selectNodeContents(ctxBlockRef.current) },
51991
+ { label: t2("menu.selectAll"), onSelect: () => selectNodeContents(previewRef.current) }
51992
+ ]
51993
+ }
51994
+ ),
51680
51995
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ap-main", style: { zoom }, children: [
51681
51996
  /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "ap-preview", ref: previewRef, children: proposal && reviewOpen ? /* @__PURE__ */ jsxRuntimeExports.jsx(DiffPreview, { segs: reviewSegs, accepted, focused: reviewCursor, onToggle: toggleHunk }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
51682
51997
  "div",
@@ -51684,12 +51999,16 @@ function App() {
51684
51999
  className: "ap-rendered",
51685
52000
  dangerouslySetInnerHTML: { __html: previewHtml },
51686
52001
  onContextMenu: (e) => {
51687
- if (editingLocked) return;
51688
- const sel = liveSelection();
51689
- if (sel.length) {
51690
- e.preventDefault();
51691
- setComposer({ target: sel, pos: { x: Math.max(8, Math.min(e.clientX, window.innerWidth - 360)), y: e.clientY + 6 } });
51692
- }
52002
+ e.preventDefault();
52003
+ ctxBlockRef.current = e.target.closest("[data-line]");
52004
+ const sel = window.getSelection();
52005
+ const raw = sel?.toString() ?? "";
52006
+ const trimmed = raw.trim();
52007
+ const range = sel && sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
52008
+ ctxSelTextRef.current = trimmed;
52009
+ commentRangeRef.current = trimmed && range ? range.cloneRange() : null;
52010
+ const block2 = commentBlockReason(raw, docRef.current.body, range, previewRef.current);
52011
+ setCtxMenu({ x: Math.max(8, Math.min(e.clientX, window.innerWidth - 200)), y: Math.max(8, Math.min(e.clientY, window.innerHeight - 220)), hasSel: trimmed.length > 0, block: block2 });
51693
52012
  },
51694
52013
  onClick: (e) => {
51695
52014
  const target = e.target;
@@ -51743,11 +52062,18 @@ function App() {
51743
52062
  panes === 2 && /* @__PURE__ */ jsxRuntimeExports.jsx(PaneTabs, { tab: rightTab, onTab: setRightTab }),
51744
52063
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ap-rail-head", children: [
51745
52064
  /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: t2("rail.comments") }),
51746
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { children: [
51747
- /* @__PURE__ */ jsxRuntimeExports.jsx("input", { type: "checkbox", checked: showResolvedOrphaned, onChange: (e) => setShowResolvedOrphaned(e.target.checked) }),
51748
- " ",
51749
- t2("rail.showResolved")
51750
- ] })
52065
+ (resolvedCount > 0 || orphanedCount > 0) && /* @__PURE__ */ jsxRuntimeExports.jsx(
52066
+ "button",
52067
+ {
52068
+ type: "button",
52069
+ className: `ap-iconbtn ap-reveal${showResolvedOrphaned ? " on" : ""}`,
52070
+ "aria-pressed": showResolvedOrphaned,
52071
+ title: revealTip,
52072
+ "aria-label": revealTip,
52073
+ onClick: () => setShowResolvedOrphaned((v2) => !v2),
52074
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconRevealArchive, {})
52075
+ }
52076
+ )
51751
52077
  ] }),
51752
52078
  visible.map((o, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs(reactExports.Fragment, { children: [
51753
52079
  (i === 0 || visible[i - 1].group !== o.group) && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ap-section-title", children: o.group === 0 ? "Document" : "Anchored" }),
@@ -51760,7 +52086,7 @@ function App() {
51760
52086
  focused: focused === o.thread.root.id,
51761
52087
  synced: syncedCommentId === o.thread.root.id,
51762
52088
  disabled: editingLocked,
51763
- onFocus: () => focusComment(o.thread.root.id),
52089
+ onFocus: () => focusComment(o.thread.root.id, false, true),
51764
52090
  onReply: (text2) => apply(addReply(docRef.current, o.thread.root.id, text2, USER_AUTHOR).doc, { type: "comment_created", payload: { parentId: o.thread.root.id } }),
51765
52091
  onAnswer: (selected, text2) => apply(addAnswer(docRef.current, o.thread.root.id, selected, text2, USER_AUTHOR).doc, { type: "comment_answered", payload: { parentId: o.thread.root.id, selected } }),
51766
52092
  onResolve: (r2) => apply(setResolved(docRef.current, o.thread.root.id, r2), { type: "comment_resolved", payload: { id: o.thread.root.id, resolved: r2 } }),
@@ -51903,14 +52229,14 @@ function TopBar(props) {
51903
52229
  ] }),
51904
52230
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ap-spacer" }),
51905
52231
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "ap-iconrow", role: "group", "aria-label": "document tools", children: [
51906
- /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "ap-iconbtn", onClick: props.onToggleFind, title: `${t2("topbar.find")} (⌘/Ctrl+F)`, "aria-label": t2("topbar.find"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconFind, {}) }),
52232
+ /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "ap-iconbtn", onClick: props.onToggleFind, title: `${t2("topbar.find")} (${MOD_KEY}+F)`, "aria-label": t2("topbar.find"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconFind, {}) }),
51907
52233
  /* @__PURE__ */ jsxRuntimeExports.jsx(
51908
52234
  "button",
51909
52235
  {
51910
52236
  className: "ap-iconbtn",
51911
52237
  onClick: props.onAddComment,
51912
- disabled: props.locked,
51913
- title: props.hasSelection ? t2("topbar.addCommentTitle") : t2("topbar.addDocCommentTitle"),
52238
+ disabled: props.locked || props.hasSelection && props.commentBlockTip !== null,
52239
+ title: props.hasSelection && props.commentBlockTip ? props.commentBlockTip : props.hasSelection ? t2("topbar.addCommentTitle") : t2("topbar.addDocCommentTitle"),
51914
52240
  "aria-label": props.hasSelection ? t2("topbar.addComment") : t2("topbar.addDocComment"),
51915
52241
  children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconComment, {})
51916
52242
  }
@@ -51954,13 +52280,14 @@ function TopBar(props) {
51954
52280
  var escapeRegExp = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
51955
52281
  function FindReplaceBar({
51956
52282
  doc: doc2,
52283
+ seed,
51957
52284
  onApply,
51958
52285
  onClose,
51959
52286
  onNavigate,
51960
52287
  onQuery
51961
52288
  }) {
51962
52289
  const t2 = useT();
51963
- const [find2, setFind2] = reactExports.useState("");
52290
+ const [find2, setFind2] = reactExports.useState(seed ?? "");
51964
52291
  const [replace2, setReplace] = reactExports.useState("");
51965
52292
  const [replaceMode, setReplaceMode] = reactExports.useState(false);
51966
52293
  const [inPreview, setInPreview] = reactExports.useState(true);
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'self' 'unsafe-inline'" />
6
6
  <title>inplan</title>
7
- <script type="module" crossorigin src="./assets/index-BqLfQmz0.js"></script>
8
- <link rel="stylesheet" crossorigin href="./assets/index-C67b7qA1.css">
7
+ <script type="module" crossorigin src="./assets/index-CPcGk8Qm.js"></script>
8
+ <link rel="stylesheet" crossorigin href="./assets/index-C6viz_CE.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
package/bin/cli.js CHANGED
@@ -866,7 +866,7 @@ function waitForActions(opts) {
866
866
  }
867
867
 
868
868
  // src/cli.ts
869
- var VERSION = "0.1.2";
869
+ var VERSION = "0.1.3";
870
870
  function output(obj) {
871
871
  process.stdout.write(JSON.stringify(obj) + "\n");
872
872
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inplan",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "inplan — a Markdown editor for human ⇄ coding-agent planning. CLI + desktop editor.",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "repository": {