whipped 0.9.0 → 0.9.1

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.
Files changed (59) hide show
  1. package/dist/cli.js +51 -101
  2. package/dist/web-ui/assets/{abnfDiagram-VRR7QNED-RwOyl_Kz.js → abnfDiagram-VRR7QNED-CMDqE9Fd.js} +5 -5
  3. package/dist/web-ui/assets/{arc-DmDBHE0H.js → arc-Dbpy-AQ8.js} +1 -1
  4. package/dist/web-ui/assets/{architectureDiagram-ZJ3FMSHR-RTwadm6J.js → architectureDiagram-ZJ3FMSHR-BKEqdC5c.js} +4 -4
  5. package/dist/web-ui/assets/{blockDiagram-677ZJIJ3-Dvv5uMUE.js → blockDiagram-677ZJIJ3-CTsEohS4.js} +4 -4
  6. package/dist/web-ui/assets/{c4Diagram-LMCZKHZV-bvr9R9cD.js → c4Diagram-LMCZKHZV-Dn6mvxwq.js} +3 -3
  7. package/dist/web-ui/assets/{channel-BGhlETgZ.js → channel-CGIzRjBJ.js} +1 -1
  8. package/dist/web-ui/assets/{chunk-2Q5K7J3B-BRq-Qbau.js → chunk-2Q5K7J3B-DYVO9tIE.js} +1 -1
  9. package/dist/web-ui/assets/{chunk-32BRIVSS-Dy1BUZGx.js → chunk-32BRIVSS-CqBj7LwD.js} +1 -1
  10. package/dist/web-ui/assets/{chunk-5VM5RSS4-DCUiIwIc.js → chunk-5VM5RSS4-D6as2qUK.js} +1 -1
  11. package/dist/web-ui/assets/{chunk-EX3LRPZG-Cg_Vtzwz.js → chunk-EX3LRPZG-Daf_kmKB.js} +4 -4
  12. package/dist/web-ui/assets/{chunk-JWPE2WC7-BW4n_ZhH.js → chunk-JWPE2WC7-Ab-zf2K1.js} +1 -1
  13. package/dist/web-ui/assets/{chunk-MOJQB5TN-BykRa615.js → chunk-MOJQB5TN-DnYfTlwW.js} +1 -1
  14. package/dist/web-ui/assets/{chunk-RYQCIY6F-D4F7oV1d.js → chunk-RYQCIY6F-BkiNDZ_4.js} +1 -1
  15. package/dist/web-ui/assets/{chunk-V7JOEXUC-DD4mm30h.js → chunk-V7JOEXUC-DCb_30mT.js} +5 -5
  16. package/dist/web-ui/assets/{chunk-VR4S4FIN-Fgvcluvk.js → chunk-VR4S4FIN-CO86AkST.js} +1 -1
  17. package/dist/web-ui/assets/{chunk-XXDRQBXY-C4FVmO5r.js → chunk-XXDRQBXY--g2YuB3U.js} +1 -1
  18. package/dist/web-ui/assets/{classDiagram-OUVF2IWQ-DD4KIYF1.js → classDiagram-OUVF2IWQ-C25Jck2H.js} +7 -7
  19. package/dist/web-ui/assets/{classDiagram-v2-EOCWNBFH-DD4KIYF1.js → classDiagram-v2-EOCWNBFH-C25Jck2H.js} +7 -7
  20. package/dist/web-ui/assets/{cose-bilkent-JH36ORCC-ekFwvYt9.js → cose-bilkent-JH36ORCC-DhhXza2J.js} +2 -2
  21. package/dist/web-ui/assets/{cynefin-VYW2F7L2-DTNV7gvQ.js → cynefin-VYW2F7L2-CaR1DgV9.js} +1 -1
  22. package/dist/web-ui/assets/{cynefinDiagram-TSTJHNR4-koYialeC.js → cynefinDiagram-TSTJHNR4-CLGnTJf1.js} +4 -4
  23. package/dist/web-ui/assets/{dagre-VKFMJZFB-Do43FV3o.js → dagre-VKFMJZFB-DitV5zjf.js} +3 -3
  24. package/dist/web-ui/assets/{diagram-FQU43EPY-D0STdny6.js → diagram-FQU43EPY-C1rGhyyl.js} +4 -4
  25. package/dist/web-ui/assets/{diagram-G47NLZAW-D9g6BdZT.js → diagram-G47NLZAW-CTQhjAQX.js} +5 -5
  26. package/dist/web-ui/assets/{diagram-NH7WQ7WH-zLW6CAmi.js → diagram-NH7WQ7WH-DI8N7xbl.js} +4 -4
  27. package/dist/web-ui/assets/{diagram-OA4YK3LP-CA5tvsYw.js → diagram-OA4YK3LP-WcmQFHPD.js} +5 -5
  28. package/dist/web-ui/assets/{diagram-WEI45ONY-CLmYUHR0.js → diagram-WEI45ONY-P5J7jo04.js} +4 -4
  29. package/dist/web-ui/assets/{ebnfDiagram-CCIWWBDH-KkHubBI6.js → ebnfDiagram-CCIWWBDH-VgG6WhIs.js} +5 -5
  30. package/dist/web-ui/assets/{erDiagram-Q63AITRT-BJna2u1n.js → erDiagram-Q63AITRT-aQJn3J15.js} +5 -5
  31. package/dist/web-ui/assets/{flowDiagram-23GEKE2U-DVJKalah.js → flowDiagram-23GEKE2U-mdFXB92B.js} +6 -6
  32. package/dist/web-ui/assets/{ganttDiagram-NO4QXBWP-D9HwNV4u.js → ganttDiagram-NO4QXBWP-CqDgijmY.js} +3 -3
  33. package/dist/web-ui/assets/{gitGraphDiagram-IHSO6WYX-B7wnoO0J.js → gitGraphDiagram-IHSO6WYX-8juiaoTk.js} +5 -5
  34. package/dist/web-ui/assets/{index-DZ7I8r_C.js → index-DddtVpjm.js} +191 -150
  35. package/dist/web-ui/assets/{infoDiagram-FWYZ7A6U-BY6XoiF8.js → infoDiagram-FWYZ7A6U-C2g8E3ea.js} +3 -3
  36. package/dist/web-ui/assets/{ishikawaDiagram-FXEZZL3T-BaZVnO8j.js → ishikawaDiagram-FXEZZL3T-cBRjKZAE.js} +2 -2
  37. package/dist/web-ui/assets/{journeyDiagram-5HDEW3XC-CUA6DUAQ.js → journeyDiagram-5HDEW3XC-BvGisWzY.js} +5 -5
  38. package/dist/web-ui/assets/{kanban-definition-HUTT4EX6-5W5tiWrd.js → kanban-definition-HUTT4EX6-xCU5FVAS.js} +3 -3
  39. package/dist/web-ui/assets/{linear-CfvGIyDE.js → linear-uVfTbk22.js} +1 -1
  40. package/dist/web-ui/assets/{mermaid.core-BRk3IzY2.js → mermaid.core-D-SdXkuv.js} +43 -43
  41. package/dist/web-ui/assets/{mindmap-definition-LN4V7U3C-2GmLg6ou.js → mindmap-definition-LN4V7U3C-BXMrLpcc.js} +4 -4
  42. package/dist/web-ui/assets/{pegDiagram-2B236MQR-gTEdrkJg.js → pegDiagram-2B236MQR-4QY6zfTY.js} +5 -5
  43. package/dist/web-ui/assets/{pieDiagram-ENE6RG2P-CYXjIhqC.js → pieDiagram-ENE6RG2P-CvA8hnwZ.js} +5 -5
  44. package/dist/web-ui/assets/{quadrantDiagram-ABIIQ3AL-BStRZxwf.js → quadrantDiagram-ABIIQ3AL-b9LyRoDu.js} +3 -3
  45. package/dist/web-ui/assets/{railroadDiagram-RFXS5EU6-btveDRG2.js → railroadDiagram-RFXS5EU6-xnbYx8zt.js} +5 -5
  46. package/dist/web-ui/assets/{requirementDiagram-TGXJPOKE-Cy_155rE.js → requirementDiagram-TGXJPOKE-DXgeFZvD.js} +4 -4
  47. package/dist/web-ui/assets/{sankeyDiagram-HTMAVEWB-Chtvw3_G.js → sankeyDiagram-HTMAVEWB-N3WPRpVR.js} +2 -2
  48. package/dist/web-ui/assets/{sequenceDiagram-DBY2YBRQ-DDuMVEX1.js → sequenceDiagram-DBY2YBRQ-CasLOrw_.js} +4 -4
  49. package/dist/web-ui/assets/{sizeCapture-X5ZJPWSS-Bylf0o6J.js → sizeCapture-X5ZJPWSS-DlBvxVbP.js} +2 -2
  50. package/dist/web-ui/assets/{stateDiagram-2N3HPSRC-DIzLeR5G.js → stateDiagram-2N3HPSRC-fp4Rfa7y.js} +6 -6
  51. package/dist/web-ui/assets/{stateDiagram-v2-6OUMAXLB-zG_WjT1-.js → stateDiagram-v2-6OUMAXLB-B1Sbo4u9.js} +6 -6
  52. package/dist/web-ui/assets/{swimlanes-5IMT3BWC-TKaCmVta.js → swimlanes-5IMT3BWC-D8woP0NL.js} +5 -5
  53. package/dist/web-ui/assets/{swimlanesDiagram-G3AALYLV-C5eB3qqS.js → swimlanesDiagram-G3AALYLV-BkAvTJ1E.js} +8 -8
  54. package/dist/web-ui/assets/{timeline-definition-FHXFAJF6-CC5Ujpcu.js → timeline-definition-FHXFAJF6-Bri3dfoP.js} +3 -3
  55. package/dist/web-ui/assets/{vennDiagram-L72KCM5P-DUSVXSYT.js → vennDiagram-L72KCM5P-DTZlIjiw.js} +2 -2
  56. package/dist/web-ui/assets/{wardleyDiagram-EHGQE667-CoP9xn89.js → wardleyDiagram-EHGQE667-CCyt_RTI.js} +4 -4
  57. package/dist/web-ui/assets/{xychartDiagram-FW5EYKEG-B9FqP_kk.js → xychartDiagram-FW5EYKEG-DtQR47sr.js} +3 -3
  58. package/dist/web-ui/index.html +1 -1
  59. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
- import { bg as Rgb, bh as rgbConvert, bi as define, bj as extend, bk as Color, bl as nogamma, bm as hue, g as getAccDescription, s as setAccDescription, o as getDiagramTitle, n as setDiagramTitle, a as getAccTitle, b as setAccTitle, _ as __name, c as getConfig2, d as select, e as configureSvgSize, bn as dayjs2, l as log, k as common_default, j as distExports, p as clear, x as utils_default } from "./mermaid.core-BRk3IzY2.js";
2
- import { g as getDefaultExportFromCjs } from "./index-DZ7I8r_C.js";
3
- import { b as bisector, t as tickStep, c as continuous, a as copy, l as linear } from "./linear-CfvGIyDE.js";
1
+ import { bg as Rgb, bh as rgbConvert, bi as define, bj as extend, bk as Color, bl as nogamma, bm as hue, g as getAccDescription, s as setAccDescription, o as getDiagramTitle, n as setDiagramTitle, a as getAccTitle, b as setAccTitle, _ as __name, c as getConfig2, d as select, e as configureSvgSize, bn as dayjs2, l as log, k as common_default, j as distExports, p as clear, x as utils_default } from "./mermaid.core-D-SdXkuv.js";
2
+ import { g as getDefaultExportFromCjs } from "./index-DddtVpjm.js";
3
+ import { b as bisector, t as tickStep, c as continuous, a as copy, l as linear } from "./linear-uVfTbk22.js";
4
4
  import { i as initRange } from "./init-ZxktEp_H.js";
5
5
  import "./defaultLocale-B2RvLBDe.js";
6
6
  function max(values, valueof) {
@@ -1,8 +1,8 @@
1
- import { I as ImperativeState } from "./chunk-2Q5K7J3B-BRq-Qbau.js";
2
- import { p as populateCommonDb } from "./chunk-JWPE2WC7-BW4n_ZhH.js";
3
- import { o as getDiagramTitle, n as setDiagramTitle, s as setAccDescription, g as getAccDescription, a as getAccTitle, b as setAccTitle, _ as __name, y as getConfig, l as log, d as select, c as getConfig2, x as utils_default, z as setupGraphViewbox2, p as clear, k as common_default, A as cleanAndMerge, B as defaultConfig_default, C as random } from "./mermaid.core-BRk3IzY2.js";
4
- import { p as parse } from "./cynefin-VYW2F7L2-DTNV7gvQ.js";
5
- import "./index-DZ7I8r_C.js";
1
+ import { I as ImperativeState } from "./chunk-2Q5K7J3B-DYVO9tIE.js";
2
+ import { p as populateCommonDb } from "./chunk-JWPE2WC7-Ab-zf2K1.js";
3
+ import { o as getDiagramTitle, n as setDiagramTitle, s as setAccDescription, g as getAccDescription, a as getAccTitle, b as setAccTitle, _ as __name, y as getConfig, l as log, d as select, c as getConfig2, x as utils_default, z as setupGraphViewbox2, p as clear, k as common_default, A as cleanAndMerge, B as defaultConfig_default, C as random } from "./mermaid.core-D-SdXkuv.js";
4
+ import { p as parse } from "./cynefin-VYW2F7L2-CaR1DgV9.js";
5
+ import "./index-DddtVpjm.js";
6
6
  var commitType = {
7
7
  NORMAL: 0,
8
8
  REVERSE: 1,
@@ -53908,7 +53908,7 @@ function MermaidBlock({ id, source, caption }) {
53908
53908
  const render = async () => {
53909
53909
  try {
53910
53910
  const { default: mermaid } = await __vitePreload(async () => {
53911
- const { default: mermaid2 } = await import("./mermaid.core-BRk3IzY2.js").then((n2) => n2.bp);
53911
+ const { default: mermaid2 } = await import("./mermaid.core-D-SdXkuv.js").then((n2) => n2.bp);
53912
53912
  return { default: mermaid2 };
53913
53913
  }, true ? [] : void 0);
53914
53914
  if (!mermaidInitialized) {
@@ -74311,6 +74311,103 @@ function InlineCommentBox({
74311
74311
  ] })
74312
74312
  ] }) });
74313
74313
  }
74314
+ function PendingCommentBubble({
74315
+ comment: comment2,
74316
+ onSave,
74317
+ onRemove
74318
+ }) {
74319
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-4 my-1.5 border border-[#eab308]/30 rounded-md bg-[#eab308]/10 p-2.5 font-sans", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between gap-2", children: [
74320
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-[#eab308]/90 leading-relaxed flex-1", children: comment2.text }),
74321
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 shrink-0", children: [
74322
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
74323
+ "button",
74324
+ {
74325
+ onClick: () => onSave(comment2.id),
74326
+ className: "text-[10px] text-whip-muted hover:text-whip-text transition-colors px-1.5 py-0.5 rounded border border-whip-border hover:border-white/40",
74327
+ title: "Save to Comments tab",
74328
+ children: "Save"
74329
+ }
74330
+ ),
74331
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
74332
+ "button",
74333
+ {
74334
+ onClick: () => onRemove(comment2.id),
74335
+ className: "text-whip-faint hover:text-[#ff3b4d] transition-colors",
74336
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(X$1, { size: 11 })
74337
+ }
74338
+ )
74339
+ ] })
74340
+ ] }) });
74341
+ }
74342
+ function DiffHunk({ hunk, path: path2, comments }) {
74343
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
74344
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-2 py-0.5 bg-whip-panel-2 text-whip-muted border-y border-whip-border whitespace-pre-wrap break-words font-mono text-[11px]", children: hunk.header }),
74345
+ hunk.lines.map((line, li2) => {
74346
+ const lineNum = line.newNum ?? line.oldNum;
74347
+ const lineKey = `${path2}:${line.oldNum ?? "-"}:${line.newNum ?? "-"}`;
74348
+ const linePending = (comments == null ? void 0 : comments.pendingComments.filter((c) => c.lineKey === lineKey)) ?? [];
74349
+ const rowBg = line.type === "added" ? "bg-[#22c55e]/10" : line.type === "removed" ? "bg-[#ff3b4d]/10" : "";
74350
+ const numBg = line.type === "added" ? "bg-[#22c55e]/20" : line.type === "removed" ? "bg-[#ff3b4d]/20" : "bg-transparent";
74351
+ const numColor = line.type === "added" ? "text-[#22c55e]" : line.type === "removed" ? "text-[#ff3b4d]" : "text-whip-faint";
74352
+ const sign = line.type === "added" ? "+" : line.type === "removed" ? "-" : " ";
74353
+ const signColor = line.type === "added" ? "text-[#22c55e]" : line.type === "removed" ? "text-[#ff3b4d]" : "text-transparent";
74354
+ const textColor = line.type === "added" ? "text-[#86efac]" : line.type === "removed" ? "text-[#fca5a5]" : "text-whip-muted";
74355
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
74356
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: classNames("group relative flex hover:brightness-110 transition-[filter]", rowBg), children: [
74357
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
74358
+ "div",
74359
+ {
74360
+ className: classNames(
74361
+ "w-10 shrink-0 text-right pr-2 py-0.5 select-none border-r border-whip-border-soft font-mono text-[11px]",
74362
+ numBg,
74363
+ numColor
74364
+ ),
74365
+ children: line.newNum ?? line.oldNum ?? ""
74366
+ }
74367
+ ),
74368
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-5 shrink-0 text-center py-0.5 select-none", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: classNames("font-mono", signColor), children: sign }) }),
74369
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
74370
+ "div",
74371
+ {
74372
+ className: classNames(
74373
+ "flex-1 min-w-0 py-0.5 pr-7 whitespace-pre-wrap break-words font-mono text-[12px]",
74374
+ textColor
74375
+ ),
74376
+ children: line.content
74377
+ }
74378
+ ),
74379
+ comments && /* @__PURE__ */ jsxRuntimeExports.jsx(
74380
+ "button",
74381
+ {
74382
+ onClick: () => comments.openCommentKey === lineKey ? comments.onCloseComment() : comments.onOpenComment(lineKey),
74383
+ className: "absolute right-1 top-0.5 opacity-0 group-hover:opacity-100 transition-opacity text-whip-text hover:text-white p-0.5 rounded bg-whip-panel-2",
74384
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Plus, { size: 11 })
74385
+ }
74386
+ )
74387
+ ] }),
74388
+ comments && comments.openCommentKey === lineKey && /* @__PURE__ */ jsxRuntimeExports.jsx(
74389
+ InlineCommentBox,
74390
+ {
74391
+ draftRef: comments.draftRef,
74392
+ value: comments.commentDraft,
74393
+ onChange: comments.onCommentDraftChange,
74394
+ onAdd: () => comments.onCommitPending(path2, lineKey, lineNum),
74395
+ onCancel: comments.onCloseComment
74396
+ }
74397
+ ),
74398
+ comments && linePending.map((c) => /* @__PURE__ */ jsxRuntimeExports.jsx(
74399
+ PendingCommentBubble,
74400
+ {
74401
+ comment: c,
74402
+ onSave: comments.onSaveComment,
74403
+ onRemove: comments.onRemoveComment
74404
+ },
74405
+ c.id
74406
+ ))
74407
+ ] }, li2);
74408
+ })
74409
+ ] });
74410
+ }
74314
74411
  function parseDiff(raw2) {
74315
74412
  const files = [];
74316
74413
  let file = null;
@@ -74422,167 +74519,111 @@ function sortTree(node2) {
74422
74519
  if (!child.isFile) sortTree(child);
74423
74520
  }
74424
74521
  }
74425
- function PendingCommentBubble({
74426
- comment: comment2,
74427
- onSave,
74428
- onRemove
74429
- }) {
74430
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-4 my-1.5 border border-[#eab308]/30 rounded-md bg-[#eab308]/10 p-2.5 font-sans", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between gap-2", children: [
74431
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-[#eab308]/90 leading-relaxed flex-1", children: comment2.text }),
74432
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1 shrink-0", children: [
74522
+ const LINE_ROW_HEIGHT = 22;
74523
+ const HUNK_HEADER_HEIGHT = 23;
74524
+ function estimateBodyHeight(file) {
74525
+ return file.hunks.reduce((sum, hunk) => sum + HUNK_HEADER_HEIGHT + hunk.lines.length * LINE_ROW_HEIGHT, 0);
74526
+ }
74527
+ function DiffFileSection({ file, scrollRef, isCollapsed, onToggleCollapse, comments }) {
74528
+ var _a3;
74529
+ const path2 = displayPath(file);
74530
+ const sectionRef = reactExports.useRef(null);
74531
+ const bodyRef = reactExports.useRef(null);
74532
+ const measuredHeight = reactExports.useRef(null);
74533
+ const [nearViewport, setNearViewport] = reactExports.useState(false);
74534
+ reactExports.useEffect(() => {
74535
+ const el2 = sectionRef.current;
74536
+ if (!el2) return;
74537
+ const observer = new IntersectionObserver(
74538
+ (entries) => {
74539
+ const entry = entries[entries.length - 1];
74540
+ if (!entry) return;
74541
+ if (!entry.isIntersecting && bodyRef.current) {
74542
+ measuredHeight.current = bodyRef.current.offsetHeight;
74543
+ }
74544
+ setNearViewport(entry.isIntersecting);
74545
+ },
74546
+ { root: scrollRef.current, rootMargin: "1200px 0px" }
74547
+ );
74548
+ observer.observe(el2);
74549
+ return () => observer.disconnect();
74550
+ }, [scrollRef]);
74551
+ const fileCommentKey = `${path2}:header`;
74552
+ const filePendingComments = (comments == null ? void 0 : comments.pendingComments.filter((c) => c.file === path2)) ?? [];
74553
+ const showBody = nearViewport || !!((_a3 = comments == null ? void 0 : comments.openCommentKey) == null ? void 0 : _a3.startsWith(`${path2}:`));
74554
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { ref: sectionRef, id: fileElemId(path2), className: "border-b border-whip-border-soft", children: [
74555
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 px-3 py-2 bg-whip-panel border-b border-whip-border-soft sticky top-0 z-10", children: [
74433
74556
  /* @__PURE__ */ jsxRuntimeExports.jsx(
74434
74557
  "button",
74435
74558
  {
74436
- onClick: () => onSave(comment2.id),
74437
- className: "text-[10px] text-whip-muted hover:text-whip-text transition-colors px-1.5 py-0.5 rounded border border-whip-border hover:border-white/40",
74438
- title: "Save to Comments tab",
74439
- children: "Save"
74559
+ onClick: () => onToggleCollapse(path2),
74560
+ className: "text-whip-faint hover:text-whip-muted shrink-0 transition-colors",
74561
+ children: isCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { size: 13 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { size: 13 })
74440
74562
  }
74441
74563
  ),
74442
- /* @__PURE__ */ jsxRuntimeExports.jsx(
74564
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex-1 text-whip-text text-[11px] truncate font-sans", children: [
74565
+ path2,
74566
+ file.isNew && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-2 text-[10px] text-[#22c55e] bg-[#22c55e]/10 px-1.5 py-0.5 rounded", children: "new file" }),
74567
+ file.isDeleted && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-2 text-[10px] text-[#ff3b4d] bg-[#ff3b4d]/10 px-1.5 py-0.5 rounded", children: "deleted" })
74568
+ ] }),
74569
+ !file.isBinary && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "shrink-0 text-[11px] font-sans", children: [
74570
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[#22c55e]", children: [
74571
+ "+",
74572
+ file.additions
74573
+ ] }),
74574
+ " ",
74575
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[#ff3b4d]", children: [
74576
+ "-",
74577
+ file.deletions
74578
+ ] })
74579
+ ] }),
74580
+ comments && /* @__PURE__ */ jsxRuntimeExports.jsx(
74443
74581
  "button",
74444
74582
  {
74445
- onClick: () => onRemove(comment2.id),
74446
- className: "text-whip-faint hover:text-[#ff3b4d] transition-colors",
74447
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(X$1, { size: 11 })
74583
+ onClick: () => comments.openCommentKey === fileCommentKey ? comments.onCloseComment() : comments.onOpenComment(fileCommentKey),
74584
+ className: "shrink-0 text-whip-faint hover:text-whip-text transition-colors p-0.5 rounded",
74585
+ title: "Comment on file",
74586
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageSquare, { size: 12 })
74448
74587
  }
74449
74588
  )
74450
- ] })
74451
- ] }) });
74589
+ ] }),
74590
+ comments && comments.openCommentKey === fileCommentKey && /* @__PURE__ */ jsxRuntimeExports.jsx(
74591
+ InlineCommentBox,
74592
+ {
74593
+ draftRef: comments.draftRef,
74594
+ value: comments.commentDraft,
74595
+ onChange: comments.onCommentDraftChange,
74596
+ onAdd: () => comments.onCommitPending(path2, fileCommentKey, null),
74597
+ onCancel: comments.onCloseComment
74598
+ }
74599
+ ),
74600
+ comments && filePendingComments.filter((c) => c.lineKey === fileCommentKey).map((c) => /* @__PURE__ */ jsxRuntimeExports.jsx(
74601
+ PendingCommentBubble,
74602
+ {
74603
+ comment: c,
74604
+ onSave: comments.onSaveComment,
74605
+ onRemove: comments.onRemoveComment
74606
+ },
74607
+ c.id
74608
+ )),
74609
+ !isCollapsed && !file.isBinary && (showBody ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: bodyRef, children: file.hunks.map((hunk, hi2) => /* @__PURE__ */ jsxRuntimeExports.jsx(DiffHunk, { hunk, path: path2, comments }, hi2)) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: { height: measuredHeight.current ?? estimateBodyHeight(file) } })),
74610
+ !isCollapsed && file.isBinary && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-4 py-3 text-whip-muted italic font-sans text-xs", children: "Binary file changed" })
74611
+ ] });
74452
74612
  }
74453
74613
  function DiffFileList({ files, scrollRef, collapsed, onToggleCollapse, comments }) {
74454
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto overflow-x-auto", children: files.map((file) => {
74614
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: scrollRef, className: "flex-1 overflow-y-auto", children: files.map((file) => {
74455
74615
  const path2 = displayPath(file);
74456
- const isCollapsed = collapsed.has(path2);
74457
- const fileCommentKey = `${path2}:header`;
74458
- const filePendingComments = (comments == null ? void 0 : comments.pendingComments.filter((c) => c.file === path2)) ?? [];
74459
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { id: fileElemId(path2), className: "border-b border-whip-border-soft", children: [
74460
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 px-3 py-2 bg-whip-panel border-b border-whip-border-soft sticky top-0 z-10", children: [
74461
- /* @__PURE__ */ jsxRuntimeExports.jsx(
74462
- "button",
74463
- {
74464
- onClick: () => onToggleCollapse(path2),
74465
- className: "text-whip-faint hover:text-whip-muted shrink-0 transition-colors",
74466
- children: isCollapsed ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { size: 13 }) : /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { size: 13 })
74467
- }
74468
- ),
74469
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex-1 text-whip-text text-[11px] truncate font-sans", children: [
74470
- path2,
74471
- file.isNew && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-2 text-[10px] text-[#22c55e] bg-[#22c55e]/10 px-1.5 py-0.5 rounded", children: "new file" }),
74472
- file.isDeleted && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-2 text-[10px] text-[#ff3b4d] bg-[#ff3b4d]/10 px-1.5 py-0.5 rounded", children: "deleted" })
74473
- ] }),
74474
- !file.isBinary && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "shrink-0 text-[11px] font-sans", children: [
74475
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[#22c55e]", children: [
74476
- "+",
74477
- file.additions
74478
- ] }),
74479
- " ",
74480
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-[#ff3b4d]", children: [
74481
- "-",
74482
- file.deletions
74483
- ] })
74484
- ] }),
74485
- comments && /* @__PURE__ */ jsxRuntimeExports.jsx(
74486
- "button",
74487
- {
74488
- onClick: () => comments.openCommentKey === fileCommentKey ? comments.onCloseComment() : comments.onOpenComment(fileCommentKey),
74489
- className: "shrink-0 text-whip-faint hover:text-whip-text transition-colors p-0.5 rounded",
74490
- title: "Comment on file",
74491
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageSquare, { size: 12 })
74492
- }
74493
- )
74494
- ] }),
74495
- comments && comments.openCommentKey === fileCommentKey && /* @__PURE__ */ jsxRuntimeExports.jsx(
74496
- InlineCommentBox,
74497
- {
74498
- draftRef: comments.draftRef,
74499
- value: comments.commentDraft,
74500
- onChange: comments.onCommentDraftChange,
74501
- onAdd: () => comments.onCommitPending(path2, fileCommentKey, null),
74502
- onCancel: comments.onCloseComment
74503
- }
74504
- ),
74505
- comments && filePendingComments.filter((c) => c.lineKey === fileCommentKey).map((c) => /* @__PURE__ */ jsxRuntimeExports.jsx(
74506
- PendingCommentBubble,
74507
- {
74508
- comment: c,
74509
- onSave: comments.onSaveComment,
74510
- onRemove: comments.onRemoveComment
74511
- },
74512
- c.id
74513
- )),
74514
- !isCollapsed && !file.isBinary && file.hunks.map((hunk, hi2) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
74515
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-2 py-0.5 bg-whip-panel-2 text-whip-muted border-y border-whip-border whitespace-pre font-mono text-[11px]", children: hunk.header }),
74516
- hunk.lines.map((line, li2) => {
74517
- const lineNum = line.newNum ?? line.oldNum;
74518
- const lineKey = `${path2}:${line.oldNum ?? "-"}:${line.newNum ?? "-"}`;
74519
- const linePending = (comments == null ? void 0 : comments.pendingComments.filter((c) => c.lineKey === lineKey)) ?? [];
74520
- const rowBg = line.type === "added" ? "bg-[#22c55e]/10" : line.type === "removed" ? "bg-[#ff3b4d]/10" : "";
74521
- const numBg = line.type === "added" ? "bg-[#22c55e]/20" : line.type === "removed" ? "bg-[#ff3b4d]/20" : "bg-transparent";
74522
- const numColor = line.type === "added" ? "text-[#22c55e]" : line.type === "removed" ? "text-[#ff3b4d]" : "text-whip-faint";
74523
- const sign = line.type === "added" ? "+" : line.type === "removed" ? "-" : " ";
74524
- const signColor = line.type === "added" ? "text-[#22c55e]" : line.type === "removed" ? "text-[#ff3b4d]" : "text-transparent";
74525
- const textColor = line.type === "added" ? "text-[#86efac]" : line.type === "removed" ? "text-[#fca5a5]" : "text-whip-muted";
74526
- return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
74527
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
74528
- "div",
74529
- {
74530
- className: classNames("group relative flex hover:brightness-110 transition-[filter]", rowBg),
74531
- children: [
74532
- /* @__PURE__ */ jsxRuntimeExports.jsx(
74533
- "div",
74534
- {
74535
- className: classNames(
74536
- "w-10 shrink-0 text-right pr-2 py-0.5 select-none border-r border-whip-border-soft font-mono text-[11px]",
74537
- numBg,
74538
- numColor
74539
- ),
74540
- children: line.newNum ?? line.oldNum ?? ""
74541
- }
74542
- ),
74543
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-5 shrink-0 text-center py-0.5 select-none", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: classNames("font-mono", signColor), children: sign }) }),
74544
- /* @__PURE__ */ jsxRuntimeExports.jsx(
74545
- "div",
74546
- {
74547
- className: classNames("flex-1 py-0.5 pr-7 whitespace-pre font-mono text-[12px]", textColor),
74548
- children: line.content
74549
- }
74550
- ),
74551
- comments && /* @__PURE__ */ jsxRuntimeExports.jsx(
74552
- "button",
74553
- {
74554
- onClick: () => comments.openCommentKey === lineKey ? comments.onCloseComment() : comments.onOpenComment(lineKey),
74555
- className: "absolute right-1 top-0.5 opacity-0 group-hover:opacity-100 transition-opacity text-whip-text hover:text-white p-0.5 rounded bg-whip-panel-2",
74556
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Plus, { size: 11 })
74557
- }
74558
- )
74559
- ]
74560
- }
74561
- ),
74562
- comments && comments.openCommentKey === lineKey && /* @__PURE__ */ jsxRuntimeExports.jsx(
74563
- InlineCommentBox,
74564
- {
74565
- draftRef: comments.draftRef,
74566
- value: comments.commentDraft,
74567
- onChange: comments.onCommentDraftChange,
74568
- onAdd: () => comments.onCommitPending(path2, lineKey, lineNum),
74569
- onCancel: comments.onCloseComment
74570
- }
74571
- ),
74572
- comments && linePending.map((c) => /* @__PURE__ */ jsxRuntimeExports.jsx(
74573
- PendingCommentBubble,
74574
- {
74575
- comment: c,
74576
- onSave: comments.onSaveComment,
74577
- onRemove: comments.onRemoveComment
74578
- },
74579
- c.id
74580
- ))
74581
- ] }, li2);
74582
- })
74583
- ] }, hi2)),
74584
- !isCollapsed && file.isBinary && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-4 py-3 text-whip-muted italic font-sans text-xs", children: "Binary file changed" })
74585
- ] }, path2);
74616
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
74617
+ DiffFileSection,
74618
+ {
74619
+ file,
74620
+ scrollRef,
74621
+ isCollapsed: collapsed.has(path2),
74622
+ onToggleCollapse,
74623
+ comments
74624
+ },
74625
+ path2
74626
+ );
74586
74627
  }) });
74587
74628
  }
74588
74629
  function FileTreeNode({
@@ -1,6 +1,6 @@
1
- import { _ as __name, l as log, D as selectSvgElement, e as configureSvgSize } from "./mermaid.core-BRk3IzY2.js";
2
- import { p as parse } from "./cynefin-VYW2F7L2-DTNV7gvQ.js";
3
- import "./index-DZ7I8r_C.js";
1
+ import { _ as __name, l as log, D as selectSvgElement, e as configureSvgSize } from "./mermaid.core-D-SdXkuv.js";
2
+ import { p as parse } from "./cynefin-VYW2F7L2-CaR1DgV9.js";
3
+ import "./index-DddtVpjm.js";
4
4
  var parser = {
5
5
  parse: /* @__PURE__ */ __name(async (input) => {
6
6
  const ast = await parse("info", input);
@@ -1,6 +1,6 @@
1
1
  var _a;
2
- import { _ as __name, c as getConfig2, K as parseFontSize, D as selectSvgElement, al as at, p as clear, k as common_default, n as setDiagramTitle, a as getAccTitle, b as setAccTitle, g as getAccDescription, s as setAccDescription, o as getDiagramTitle, e as configureSvgSize } from "./mermaid.core-BRk3IzY2.js";
3
- import "./index-DZ7I8r_C.js";
2
+ import { _ as __name, c as getConfig2, K as parseFontSize, D as selectSvgElement, al as at, p as clear, k as common_default, n as setDiagramTitle, a as getAccTitle, b as setAccTitle, g as getAccDescription, s as setAccDescription, o as getDiagramTitle, e as configureSvgSize } from "./mermaid.core-D-SdXkuv.js";
3
+ import "./index-DddtVpjm.js";
4
4
  var parser = (function() {
5
5
  var o = /* @__PURE__ */ __name(function(k, v, o2, l) {
6
6
  for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;
@@ -1,8 +1,8 @@
1
- import { g as getIconStyles } from "./chunk-5VM5RSS4-DCUiIwIc.js";
2
- import { a as drawBackgroundRect, g as getNoteRect, h as drawText, d as drawRect } from "./chunk-32BRIVSS-Dy1BUZGx.js";
3
- import { g as getAccDescription, s as setAccDescription, a as getAccTitle, b as setAccTitle, o as getDiagramTitle, n as setDiagramTitle, _ as __name, c as getConfig2, d as select, e as configureSvgSize, p as clear } from "./mermaid.core-BRk3IzY2.js";
4
- import { d as d3arc } from "./arc-DmDBHE0H.js";
5
- import "./index-DZ7I8r_C.js";
1
+ import { g as getIconStyles } from "./chunk-5VM5RSS4-D6as2qUK.js";
2
+ import { a as drawBackgroundRect, g as getNoteRect, h as drawText, d as drawRect } from "./chunk-32BRIVSS-CqBj7LwD.js";
3
+ import { g as getAccDescription, s as setAccDescription, a as getAccTitle, b as setAccTitle, o as getDiagramTitle, n as setDiagramTitle, _ as __name, c as getConfig2, d as select, e as configureSvgSize, p as clear } from "./mermaid.core-D-SdXkuv.js";
4
+ import { d as d3arc } from "./arc-Dbpy-AQ8.js";
5
+ import "./index-DddtVpjm.js";
6
6
  var parser = (function() {
7
7
  var o = /* @__PURE__ */ __name(function(k, v, o2, l) {
8
8
  for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;
@@ -1,6 +1,6 @@
1
- import { _ as __name, l as log, c as getConfig2, D as selectSvgElement, ad as insertCluster, ae as insertNode, af as positionNode, W as setupGraphViewbox, B as defaultConfig_default, i as sanitizeText, G as load, J as JSON_SCHEMA, T as isDark, U as lighten, V as darken } from "./mermaid.core-BRk3IzY2.js";
2
- import { g as getIconStyles } from "./chunk-5VM5RSS4-DCUiIwIc.js";
3
- import "./index-DZ7I8r_C.js";
1
+ import { _ as __name, l as log, c as getConfig2, D as selectSvgElement, ad as insertCluster, ae as insertNode, af as positionNode, W as setupGraphViewbox, B as defaultConfig_default, i as sanitizeText, G as load, J as JSON_SCHEMA, T as isDark, U as lighten, V as darken } from "./mermaid.core-D-SdXkuv.js";
2
+ import { g as getIconStyles } from "./chunk-5VM5RSS4-D6as2qUK.js";
3
+ import "./index-DddtVpjm.js";
4
4
  var parser = (function() {
5
5
  var o = /* @__PURE__ */ __name(function(k, v, o2, l) {
6
6
  for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v) ;
@@ -1,4 +1,4 @@
1
- import { b9 as constant, ba as interpolateNumber, bb as color, bc as interpolateRgb, bd as interpolateString } from "./mermaid.core-BRk3IzY2.js";
1
+ import { b9 as constant, ba as interpolateNumber, bb as color, bc as interpolateRgb, bd as interpolateString } from "./mermaid.core-D-SdXkuv.js";
2
2
  import { i as initRange } from "./init-ZxktEp_H.js";
3
3
  import { e as exponent, f as formatSpecifier, a as formatPrefix, b as format } from "./defaultLocale-B2RvLBDe.js";
4
4
  function ascending(a, b) {