@commentray/core 0.2.0 → 0.3.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.
- package/dist/approval-flow-grid.d.ts +25 -0
- package/dist/approval-flow-grid.d.ts.map +1 -0
- package/dist/approval-flow-grid.js +274 -0
- package/dist/approval-flow-grid.js.map +1 -0
- package/dist/block-scroll-pickers.d.ts +42 -0
- package/dist/block-scroll-pickers.d.ts.map +1 -1
- package/dist/block-scroll-pickers.js +183 -14
- package/dist/block-scroll-pickers.js.map +1 -1
- package/dist/browse-contract.d.ts +16 -0
- package/dist/browse-contract.d.ts.map +1 -0
- package/dist/browse-contract.js +8 -0
- package/dist/browse-contract.js.map +1 -0
- package/dist/browse-path-default.d.ts +4 -0
- package/dist/browse-path-default.d.ts.map +1 -0
- package/dist/browse-path-default.js +6 -0
- package/dist/browse-path-default.js.map +1 -0
- package/dist/buffering-flow-synchronizer-approval-printer.d.ts +44 -0
- package/dist/buffering-flow-synchronizer-approval-printer.d.ts.map +1 -0
- package/dist/buffering-flow-synchronizer-approval-printer.js +864 -0
- package/dist/buffering-flow-synchronizer-approval-printer.js.map +1 -0
- package/dist/buffering-flow-synchronizer.d.ts +28 -0
- package/dist/buffering-flow-synchronizer.d.ts.map +1 -0
- package/dist/buffering-flow-synchronizer.js +193 -0
- package/dist/buffering-flow-synchronizer.js.map +1 -0
- package/dist/commentray-static-browse-path.d.ts +9 -0
- package/dist/commentray-static-browse-path.d.ts.map +1 -0
- package/dist/commentray-static-browse-path.js +65 -0
- package/dist/commentray-static-browse-path.js.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -1
- package/dist/height-adjustable.d.ts +25 -0
- package/dist/height-adjustable.d.ts.map +1 -0
- package/dist/height-adjustable.js +2 -0
- package/dist/height-adjustable.js.map +1 -0
- package/dist/index.d.ts +12 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +1 -13
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +2 -24
- package/dist/paths.js.map +1 -1
- package/dist/repo-relative-path.d.ts +18 -0
- package/dist/repo-relative-path.d.ts.map +1 -0
- package/dist/repo-relative-path.js +29 -0
- package/dist/repo-relative-path.js.map +1 -0
- package/dist/scroll-sync.d.ts +2 -2
- package/dist/scroll-sync.d.ts.map +1 -1
- package/dist/scroll-sync.js +26 -5
- package/dist/scroll-sync.js.map +1 -1
- package/package.json +11 -2
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ApprovalFlowSection, type ApprovalGridFormat } from "./buffering-flow-synchronizer-approval-printer.js";
|
|
2
|
+
export declare function splitApprovalLineToCells(line: string, columnCount: number, columnGap?: string): string[];
|
|
3
|
+
export declare function parseApprovalRows(asciiColumns: string, format?: ApprovalGridFormat): Array<string[] | null>;
|
|
4
|
+
/**
|
|
5
|
+
* Joins section pairs when a blank line only separated flows that still belong to one sync story
|
|
6
|
+
* (e.g. `XXXX R1XX` / blank / `R1XX XXXX` must synchronize as one section).
|
|
7
|
+
*/
|
|
8
|
+
export declare function mergeAdjacentApprovalSectionsForContinuedSync(sections: ApprovalFlowSection[]): ApprovalFlowSection[];
|
|
9
|
+
/** A trailing section with items on only one column is folded into the previous section (see `two-columns.second-column-missing-first-region.input.txt`). */
|
|
10
|
+
export declare function mergeOrphanSingleColumnTailSection(sections: ApprovalFlowSection[]): ApprovalFlowSection[];
|
|
11
|
+
/**
|
|
12
|
+
* Parse fixed-width two-column approval **input** grids into flow sections (blank row = section break).
|
|
13
|
+
* A synced region block is one `R{N}XX` row plus continuation rows in that column: `XXXX` body lines
|
|
14
|
+
* and/or empty cells opposite partner content (stagger), up to three rows total height. An anonymous
|
|
15
|
+
* block is consecutive `XXXX` lines in that column (height 1–3); a new `XXXX` row extends the open
|
|
16
|
+
* block unless height is already max, in which case a new `__ANON__*` block opens. Stagger before the
|
|
17
|
+
* next non-region block still adds `pendingStaggerSlackRows` → `bufferAbove` on that column’s next
|
|
18
|
+
* block when the region is closed at max height or by a new `R…XX` / section break.
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseApprovalFlowSectionsWithFormat(asciiColumns: string): {
|
|
21
|
+
sections: ApprovalFlowSection[];
|
|
22
|
+
format: ApprovalGridFormat;
|
|
23
|
+
};
|
|
24
|
+
export declare function parseApprovalFlowSections(asciiColumns: string): ApprovalFlowSection[];
|
|
25
|
+
//# sourceMappingURL=approval-flow-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-flow-grid.d.ts","sourceRoot":"","sources":["../src/approval-flow-grid.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EAExB,MAAM,mDAAmD,CAAC;AAO3D,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAA4B,GACtC,MAAM,EAAE,CAuBV;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAgBxB;AAwLD;;;GAGG;AACH,wBAAgB,6CAA6C,CAC3D,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,mBAAmB,EAAE,CAavB;AAED,6JAA6J;AAC7J,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,mBAAmB,EAAE,GAC9B,mBAAmB,EAAE,CAevB;AAED;;;;;;;;GAQG;AACH,wBAAgB,mCAAmC,CAAC,YAAY,EAAE,MAAM,GAAG;IACzE,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,MAAM,EAAE,kBAAkB,CAAC;CAC5B,CAgDA;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAErF"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { APPROVAL_CELL_WIDTH, APPROVAL_COLUMN_GAP, APPROVAL_FILLED_ROW, APPROVAL_REGION_TOKEN_RE, inferApprovalGridFormatFromAscii, } from "./buffering-flow-synchronizer-approval-printer.js";
|
|
2
|
+
const ANONYMOUS_ID_PREFIX = "__ANON__";
|
|
3
|
+
/** One `R{N}XX` header plus up to two continuation rows per column (see `HeightAdjustable.height`). */
|
|
4
|
+
const MAX_APPROVAL_REGION_HEIGHT = 3;
|
|
5
|
+
export function splitApprovalLineToCells(line, columnCount, columnGap = APPROVAL_COLUMN_GAP) {
|
|
6
|
+
const expectedLength = columnCount * APPROVAL_CELL_WIDTH + (columnCount - 1) * columnGap.length;
|
|
7
|
+
if (line.length !== expectedLength) {
|
|
8
|
+
throw new Error(`Row length ${line.length} does not match expected ${expectedLength}.`);
|
|
9
|
+
}
|
|
10
|
+
const cells = [];
|
|
11
|
+
for (let i = 0; i < columnCount; i++) {
|
|
12
|
+
const start = i * (APPROVAL_CELL_WIDTH + columnGap.length);
|
|
13
|
+
const cell = line.slice(start, start + APPROVAL_CELL_WIDTH);
|
|
14
|
+
cells.push(cell);
|
|
15
|
+
if (i < columnCount - 1) {
|
|
16
|
+
const gap = line.slice(start + APPROVAL_CELL_WIDTH, start + APPROVAL_CELL_WIDTH + columnGap.length);
|
|
17
|
+
if (gap !== columnGap) {
|
|
18
|
+
throw new Error(`Columns must be separated by exactly ${String(columnGap.length)} gap character(s).`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return cells;
|
|
23
|
+
}
|
|
24
|
+
export function parseApprovalRows(asciiColumns, format) {
|
|
25
|
+
const lines = asciiColumns.split("\n").map((line) => line.replace(/\r$/, ""));
|
|
26
|
+
const nonBlankLines = lines.filter((line) => line.trim().length > 0);
|
|
27
|
+
if (nonBlankLines.length === 0)
|
|
28
|
+
return [];
|
|
29
|
+
const fmt = format ?? inferApprovalGridFormatFromAscii(asciiColumns);
|
|
30
|
+
const firstLine = nonBlankLines[0];
|
|
31
|
+
if (firstLine === undefined)
|
|
32
|
+
return [];
|
|
33
|
+
const first = firstLine.trimEnd();
|
|
34
|
+
const hasGap = first.length > APPROVAL_CELL_WIDTH;
|
|
35
|
+
const columnCount = hasGap ? 2 : 1;
|
|
36
|
+
const rowDataLen = fmt.rowDataLen;
|
|
37
|
+
return lines.map((line) => {
|
|
38
|
+
if (line.trim().length === 0)
|
|
39
|
+
return null;
|
|
40
|
+
const padded = line.length < rowDataLen ? line.padEnd(rowDataLen, " ") : line;
|
|
41
|
+
return splitApprovalLineToCells(padded, columnCount, fmt.columnGap);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function emptyColumnState() {
|
|
45
|
+
return {
|
|
46
|
+
currentRegion: null,
|
|
47
|
+
currentHeight: 0,
|
|
48
|
+
anonymousBlockCount: 0,
|
|
49
|
+
bufferAboveForCurrentOpenBlock: 0,
|
|
50
|
+
pendingStaggerSlackRows: 0,
|
|
51
|
+
syncRegionContinuationRows: [],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function pushCurrentRegionIfAny(items, st) {
|
|
55
|
+
if (st.currentRegion === null)
|
|
56
|
+
return;
|
|
57
|
+
const id = st.currentRegion;
|
|
58
|
+
const height = st.currentHeight;
|
|
59
|
+
if (isSyncRegionId(id) && height > 1) {
|
|
60
|
+
if (st.syncRegionContinuationRows.length !== height - 1) {
|
|
61
|
+
throw new Error(`Internal parse error: R region ${id} height ${String(height)} but ${String(st.syncRegionContinuationRows.length)} continuation kind(s).`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const row = {
|
|
65
|
+
id,
|
|
66
|
+
height,
|
|
67
|
+
bufferAbove: st.bufferAboveForCurrentOpenBlock,
|
|
68
|
+
bufferBelow: 0,
|
|
69
|
+
};
|
|
70
|
+
if (isSyncRegionId(id) && height > 1) {
|
|
71
|
+
row.syncRegionContinuationRows = [...st.syncRegionContinuationRows];
|
|
72
|
+
}
|
|
73
|
+
items.push(row);
|
|
74
|
+
st.currentRegion = null;
|
|
75
|
+
st.currentHeight = 0;
|
|
76
|
+
st.bufferAboveForCurrentOpenBlock = 0;
|
|
77
|
+
st.syncRegionContinuationRows = [];
|
|
78
|
+
}
|
|
79
|
+
function openNewBlock(st, id) {
|
|
80
|
+
st.currentRegion = id;
|
|
81
|
+
st.currentHeight = 1;
|
|
82
|
+
st.bufferAboveForCurrentOpenBlock = st.pendingStaggerSlackRows;
|
|
83
|
+
st.pendingStaggerSlackRows = 0;
|
|
84
|
+
st.syncRegionContinuationRows = [];
|
|
85
|
+
}
|
|
86
|
+
function isSyncRegionId(id) {
|
|
87
|
+
return id !== null && APPROVAL_REGION_TOKEN_RE.test(id);
|
|
88
|
+
}
|
|
89
|
+
function consumeEmptyCellOppositeHasInk(items, st) {
|
|
90
|
+
if (st.currentRegion?.startsWith(ANONYMOUS_ID_PREFIX)) {
|
|
91
|
+
pushCurrentRegionIfAny(items, st);
|
|
92
|
+
}
|
|
93
|
+
if (isSyncRegionId(st.currentRegion)) {
|
|
94
|
+
if (st.currentHeight < MAX_APPROVAL_REGION_HEIGHT) {
|
|
95
|
+
st.currentHeight += 1;
|
|
96
|
+
st.syncRegionContinuationRows.push("stagger");
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
pushCurrentRegionIfAny(items, st);
|
|
100
|
+
st.pendingStaggerSlackRows += 1;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
st.pendingStaggerSlackRows += 1;
|
|
104
|
+
}
|
|
105
|
+
function consumeFilledRowToken(items, st) {
|
|
106
|
+
if (st.currentRegion?.startsWith(ANONYMOUS_ID_PREFIX) &&
|
|
107
|
+
st.currentHeight >= MAX_APPROVAL_REGION_HEIGHT) {
|
|
108
|
+
pushCurrentRegionIfAny(items, st);
|
|
109
|
+
}
|
|
110
|
+
if (st.currentRegion === null) {
|
|
111
|
+
st.anonymousBlockCount += 1;
|
|
112
|
+
openNewBlock(st, `${ANONYMOUS_ID_PREFIX}${st.anonymousBlockCount}`);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (isSyncRegionId(st.currentRegion)) {
|
|
116
|
+
if (st.currentHeight < MAX_APPROVAL_REGION_HEIGHT) {
|
|
117
|
+
st.currentHeight += 1;
|
|
118
|
+
st.syncRegionContinuationRows.push("body");
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
pushCurrentRegionIfAny(items, st);
|
|
122
|
+
st.anonymousBlockCount += 1;
|
|
123
|
+
openNewBlock(st, `${ANONYMOUS_ID_PREFIX}${st.anonymousBlockCount}`);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
st.currentHeight += 1;
|
|
127
|
+
}
|
|
128
|
+
function consumeOneColumn(row, columnIndex, items, st, partnerTrimmed) {
|
|
129
|
+
const token = row[columnIndex]?.trim() ?? "";
|
|
130
|
+
if (token === "") {
|
|
131
|
+
if (partnerTrimmed.length > 0) {
|
|
132
|
+
consumeEmptyCellOppositeHasInk(items, st);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
pushCurrentRegionIfAny(items, st);
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
if (token === APPROVAL_FILLED_ROW) {
|
|
139
|
+
consumeFilledRowToken(items, st);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
if (!APPROVAL_REGION_TOKEN_RE.test(token)) {
|
|
143
|
+
throw new Error(`Unsupported token "${token}". Use RnXX markers or ${APPROVAL_FILLED_ROW}.`);
|
|
144
|
+
}
|
|
145
|
+
if (token === st.currentRegion) {
|
|
146
|
+
st.currentHeight += 1;
|
|
147
|
+
if (isSyncRegionId(st.currentRegion)) {
|
|
148
|
+
st.syncRegionContinuationRows.push("body");
|
|
149
|
+
}
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
pushCurrentRegionIfAny(items, st);
|
|
153
|
+
openNewBlock(st, token);
|
|
154
|
+
}
|
|
155
|
+
function finalizeColumn(items, st) {
|
|
156
|
+
pushCurrentRegionIfAny(items, st);
|
|
157
|
+
}
|
|
158
|
+
function isSyncRegionMarkerId(id) {
|
|
159
|
+
return APPROVAL_REGION_TOKEN_RE.test(id);
|
|
160
|
+
}
|
|
161
|
+
function shouldMergeApprovalSectionsAcrossBlank(a, b) {
|
|
162
|
+
const aLastLeft = a.left.at(-1);
|
|
163
|
+
const aLastRight = a.right.at(-1);
|
|
164
|
+
const bFirstLeft = b.left[0];
|
|
165
|
+
const bFirstRight = b.right[0];
|
|
166
|
+
if (aLastRight !== undefined &&
|
|
167
|
+
bFirstLeft !== undefined &&
|
|
168
|
+
isSyncRegionMarkerId(aLastRight.id) &&
|
|
169
|
+
aLastRight.id === bFirstLeft.id) {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
if (aLastLeft !== undefined &&
|
|
173
|
+
bFirstRight !== undefined &&
|
|
174
|
+
isSyncRegionMarkerId(aLastLeft.id) &&
|
|
175
|
+
aLastLeft.id === bFirstRight.id) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Joins section pairs when a blank line only separated flows that still belong to one sync story
|
|
182
|
+
* (e.g. `XXXX R1XX` / blank / `R1XX XXXX` must synchronize as one section).
|
|
183
|
+
*/
|
|
184
|
+
export function mergeAdjacentApprovalSectionsForContinuedSync(sections) {
|
|
185
|
+
const out = [...sections];
|
|
186
|
+
let i = 0;
|
|
187
|
+
while (i < out.length - 1) {
|
|
188
|
+
const a = out[i];
|
|
189
|
+
const b = out[i + 1];
|
|
190
|
+
if (a !== undefined && b !== undefined && shouldMergeApprovalSectionsAcrossBlank(a, b)) {
|
|
191
|
+
out.splice(i, 2, { left: [...a.left, ...b.left], right: [...a.right, ...b.right] });
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
i++;
|
|
195
|
+
}
|
|
196
|
+
return out;
|
|
197
|
+
}
|
|
198
|
+
/** A trailing section with items on only one column is folded into the previous section (see `two-columns.second-column-missing-first-region.input.txt`). */
|
|
199
|
+
export function mergeOrphanSingleColumnTailSection(sections) {
|
|
200
|
+
if (sections.length < 2)
|
|
201
|
+
return sections;
|
|
202
|
+
const last = sections[sections.length - 1];
|
|
203
|
+
const prev = sections[sections.length - 2];
|
|
204
|
+
if (last === undefined || prev === undefined)
|
|
205
|
+
return sections;
|
|
206
|
+
const lastOrphanLeft = last.right.length === 0 && last.left.length > 0;
|
|
207
|
+
const lastOrphanRight = last.left.length === 0 && last.right.length > 0;
|
|
208
|
+
if (!lastOrphanLeft && !lastOrphanRight)
|
|
209
|
+
return sections;
|
|
210
|
+
return [
|
|
211
|
+
...sections.slice(0, -2),
|
|
212
|
+
{
|
|
213
|
+
left: lastOrphanLeft ? [...prev.left, ...last.left] : [...prev.left],
|
|
214
|
+
right: lastOrphanRight ? [...prev.right, ...last.right] : [...prev.right],
|
|
215
|
+
},
|
|
216
|
+
];
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Parse fixed-width two-column approval **input** grids into flow sections (blank row = section break).
|
|
220
|
+
* A synced region block is one `R{N}XX` row plus continuation rows in that column: `XXXX` body lines
|
|
221
|
+
* and/or empty cells opposite partner content (stagger), up to three rows total height. An anonymous
|
|
222
|
+
* block is consecutive `XXXX` lines in that column (height 1–3); a new `XXXX` row extends the open
|
|
223
|
+
* block unless height is already max, in which case a new `__ANON__*` block opens. Stagger before the
|
|
224
|
+
* next non-region block still adds `pendingStaggerSlackRows` → `bufferAbove` on that column’s next
|
|
225
|
+
* block when the region is closed at max height or by a new `R…XX` / section break.
|
|
226
|
+
*/
|
|
227
|
+
export function parseApprovalFlowSectionsWithFormat(asciiColumns) {
|
|
228
|
+
const format = inferApprovalGridFormatFromAscii(asciiColumns);
|
|
229
|
+
const rows = parseApprovalRows(asciiColumns, format);
|
|
230
|
+
if (rows.length === 0)
|
|
231
|
+
return { sections: [], format };
|
|
232
|
+
const firstDataRow = rows.find((row) => row !== null);
|
|
233
|
+
const columnCount = firstDataRow?.length ?? 0;
|
|
234
|
+
if (columnCount !== 2) {
|
|
235
|
+
throw new Error("Approval fixtures must contain exactly 2 columns.");
|
|
236
|
+
}
|
|
237
|
+
const sections = [];
|
|
238
|
+
let leftItems = [];
|
|
239
|
+
let rightItems = [];
|
|
240
|
+
let leftSt = emptyColumnState();
|
|
241
|
+
let rightSt = emptyColumnState();
|
|
242
|
+
const flushSection = () => {
|
|
243
|
+
if (leftItems.length === 0 && rightItems.length === 0)
|
|
244
|
+
return;
|
|
245
|
+
sections.push({ left: leftItems, right: rightItems });
|
|
246
|
+
leftItems = [];
|
|
247
|
+
rightItems = [];
|
|
248
|
+
leftSt = emptyColumnState();
|
|
249
|
+
rightSt = emptyColumnState();
|
|
250
|
+
};
|
|
251
|
+
for (const row of rows) {
|
|
252
|
+
if (row === null) {
|
|
253
|
+
finalizeColumn(leftItems, leftSt);
|
|
254
|
+
finalizeColumn(rightItems, rightSt);
|
|
255
|
+
flushSection();
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
const leftTrim = row[0]?.trim() ?? "";
|
|
259
|
+
const rightTrim = row[1]?.trim() ?? "";
|
|
260
|
+
consumeOneColumn(row, 0, leftItems, leftSt, rightTrim);
|
|
261
|
+
consumeOneColumn(row, 1, rightItems, rightSt, leftTrim);
|
|
262
|
+
}
|
|
263
|
+
finalizeColumn(leftItems, leftSt);
|
|
264
|
+
finalizeColumn(rightItems, rightSt);
|
|
265
|
+
flushSection();
|
|
266
|
+
return {
|
|
267
|
+
sections: mergeOrphanSingleColumnTailSection(mergeAdjacentApprovalSectionsForContinuedSync(sections)),
|
|
268
|
+
format,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
export function parseApprovalFlowSections(asciiColumns) {
|
|
272
|
+
return parseApprovalFlowSectionsWithFormat(asciiColumns).sections;
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=approval-flow-grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-flow-grid.js","sourceRoot":"","sources":["../src/approval-flow-grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,39 @@ export type BlockScrollLink = {
|
|
|
16
16
|
hiExclusive: number;
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* Which index block “owns” the source viewport top line (1-based), without hysteresis.
|
|
21
|
+
* Same geometry as {@link pickCommentrayLineForSourceScroll}.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* The index block whose source viewport span **strictly contains** `topSourceLine1Based`
|
|
25
|
+
* (`[lo, hiExclusive)`). When spans overlap, the earliest block by `lo` wins. Returns `null` in
|
|
26
|
+
* true inter-block **gaps** (including above the first `lo` only when that line is still below
|
|
27
|
+
* `lo` — callers combine with {@link sourceTopLineStrictlyBeforeFirstIndexLine} for “prelude”).
|
|
28
|
+
*/
|
|
29
|
+
export declare function blockStrictlyContainingSourceViewportLine(blocks: BlockScrollLink[], topSourceLine1Based: number): BlockScrollLink | null;
|
|
30
|
+
/** True when the viewport top sits **strictly above** every block’s `[lo, hiExclusive)` span. */
|
|
31
|
+
export declare function sourceTopLineStrictlyBeforeFirstIndexLine(blocks: BlockScrollLink[], topSourceLine1Based: number): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* True when the doc viewport probe sits strictly **between** two block marker lines in companion
|
|
34
|
+
* order (interstitial prose / blanks), not on a marker line and not before the first marker.
|
|
35
|
+
*/
|
|
36
|
+
export declare function commentrayProbeInStrictInterMarkerGap(blocks: BlockScrollLink[], topCommentrayLine0Based: number): boolean;
|
|
37
|
+
export declare function pickBlockScrollLinkForSourceViewportTop(blocks: BlockScrollLink[], topSourceLine1Based: number): BlockScrollLink | null;
|
|
38
|
+
/** Mutable lock for {@link pickBlockScrollLinkForSourceViewportWithHysteresis} / commentray twin. */
|
|
39
|
+
export type BlockScrollStickyState = {
|
|
40
|
+
lockedId: string | null;
|
|
41
|
+
};
|
|
42
|
+
/** Default: require this many **source** lines into the naive winner before leaving the locked block. */
|
|
43
|
+
export declare const DEFAULT_SOURCE_VIEWPORT_HYSTERESIS_LINES = 2;
|
|
44
|
+
/** Default: require this many **commentray markdown** lines into the naive winner before leaving the lock. */
|
|
45
|
+
export declare const DEFAULT_COMMENTRAY_VIEWPORT_HYSTERESIS_LINES = 4;
|
|
46
|
+
/**
|
|
47
|
+
* Schmitt-style block pick for **source→commentray** sync: keeps the active block until the
|
|
48
|
+
* viewport top has moved clearly into another block’s territory, so probe noise at span edges
|
|
49
|
+
* does not flip the partner between unrelated regions.
|
|
50
|
+
*/
|
|
51
|
+
export declare function pickBlockScrollLinkForSourceViewportWithHysteresis(blocks: BlockScrollLink[], topSourceLine1Based: number, state: BlockScrollStickyState, hysteresisSourceLines?: number): BlockScrollLink | null;
|
|
19
52
|
/**
|
|
20
53
|
* Choose which commentray line (0-based) to reveal so the commentary matches
|
|
21
54
|
* the top of the source viewport. Uses each link’s `markerViewportHalfOpen1Based`:
|
|
@@ -24,6 +57,15 @@ export type BlockScrollLink = {
|
|
|
24
57
|
* block by `lo`.
|
|
25
58
|
*/
|
|
26
59
|
export declare function pickCommentrayLineForSourceScroll(blocks: BlockScrollLink[], topSourceLine1Based: number): number | null;
|
|
60
|
+
/**
|
|
61
|
+
* Schmitt twin for **commentray→source**: same idea in markdown line (0-based) space.
|
|
62
|
+
*/
|
|
63
|
+
export declare function pickBlockScrollLinkForCommentrayViewportWithHysteresis(blocks: BlockScrollLink[], topCommentrayLine0Based: number, state: BlockScrollStickyState, hysteresisMdLines?: number): BlockScrollLink | null;
|
|
64
|
+
/**
|
|
65
|
+
* The block whose companion marker is at or above `topCommentrayLine0Based`
|
|
66
|
+
* (same rule as {@link pickSourceLine0ForCommentrayScroll}).
|
|
67
|
+
*/
|
|
68
|
+
export declare function pickBlockScrollLinkForCommentrayScroll(blocks: BlockScrollLink[], topCommentrayLine0Based: number): BlockScrollLink | null;
|
|
27
69
|
/**
|
|
28
70
|
* Choose a 0-based source line to reveal from the top of the commentray
|
|
29
71
|
* viewport: the block whose marker is at or above that line wins; reveal the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-scroll-pickers.d.ts","sourceRoot":"","sources":["../src/block-scroll-pickers.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,MAAM,eAAe,GAAG;IAC5B,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,4BAA4B,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,eAAe,EAAE,EACzB,mBAAmB,EAAE,MAAM,GAC1B,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"block-scroll-pickers.d.ts","sourceRoot":"","sources":["../src/block-scroll-pickers.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,MAAM,MAAM,eAAe,GAAG;IAC5B,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,4BAA4B,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE,CAAC;AAEF;;;GAGG;AACH;;;;;GAKG;AACH,wBAAgB,yCAAyC,CACvD,MAAM,EAAE,eAAe,EAAE,EACzB,mBAAmB,EAAE,MAAM,GAC1B,eAAe,GAAG,IAAI,CAUxB;AAED,iGAAiG;AACjG,wBAAgB,yCAAyC,CACvD,MAAM,EAAE,eAAe,EAAE,EACzB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,eAAe,EAAE,EACzB,uBAAuB,EAAE,MAAM,GAC9B,OAAO,CAqBT;AAED,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,eAAe,EAAE,EACzB,mBAAmB,EAAE,MAAM,GAC1B,eAAe,GAAG,IAAI,CAyBxB;AAED,qGAAqG;AACrG,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,yGAAyG;AACzG,eAAO,MAAM,wCAAwC,IAAI,CAAC;AAE1D,8GAA8G;AAC9G,eAAO,MAAM,4CAA4C,IAAI,CAAC;AAoC9D;;;;GAIG;AACH,wBAAgB,kDAAkD,CAChE,MAAM,EAAE,eAAe,EAAE,EACzB,mBAAmB,EAAE,MAAM,EAC3B,KAAK,EAAE,sBAAsB,EAC7B,qBAAqB,GAAE,MAAiD,GACvE,eAAe,GAAG,IAAI,CA6BxB;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,eAAe,EAAE,EACzB,mBAAmB,EAAE,MAAM,GAC1B,MAAM,GAAG,IAAI,CAGf;AAED;;GAEG;AACH,wBAAgB,sDAAsD,CACpE,MAAM,EAAE,eAAe,EAAE,EACzB,uBAAuB,EAAE,MAAM,EAC/B,KAAK,EAAE,sBAAsB,EAC7B,iBAAiB,GAAE,MAAqD,GACvE,eAAe,GAAG,IAAI,CA2BxB;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,eAAe,EAAE,EACzB,uBAAuB,EAAE,MAAM,GAC9B,eAAe,GAAG,IAAI,CAUxB;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,MAAM,EAAE,eAAe,EAAE,EACzB,uBAAuB,EAAE,MAAM,GAC9B,MAAM,GAAG,IAAI,CAGf"}
|
|
@@ -1,11 +1,63 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* if the top line falls in `[lo, hiExclusive)`, that block wins; in gaps, the block with the
|
|
5
|
-
* greatest `lo` still at or above the top line; if the viewport is above every `lo`, the first
|
|
6
|
-
* block by `lo`.
|
|
2
|
+
* Which index block “owns” the source viewport top line (1-based), without hysteresis.
|
|
3
|
+
* Same geometry as {@link pickCommentrayLineForSourceScroll}.
|
|
7
4
|
*/
|
|
8
|
-
|
|
5
|
+
/**
|
|
6
|
+
* The index block whose source viewport span **strictly contains** `topSourceLine1Based`
|
|
7
|
+
* (`[lo, hiExclusive)`). When spans overlap, the earliest block by `lo` wins. Returns `null` in
|
|
8
|
+
* true inter-block **gaps** (including above the first `lo` only when that line is still below
|
|
9
|
+
* `lo` — callers combine with {@link sourceTopLineStrictlyBeforeFirstIndexLine} for “prelude”).
|
|
10
|
+
*/
|
|
11
|
+
export function blockStrictlyContainingSourceViewportLine(blocks, topSourceLine1Based) {
|
|
12
|
+
if (blocks.length === 0)
|
|
13
|
+
return null;
|
|
14
|
+
const sorted = [...blocks].sort((a, b) => a.markerViewportHalfOpen1Based.lo - b.markerViewportHalfOpen1Based.lo);
|
|
15
|
+
for (const b of sorted) {
|
|
16
|
+
const { lo, hiExclusive } = b.markerViewportHalfOpen1Based;
|
|
17
|
+
if (lo <= topSourceLine1Based && topSourceLine1Based < hiExclusive)
|
|
18
|
+
return b;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
/** True when the viewport top sits **strictly above** every block’s `[lo, hiExclusive)` span. */
|
|
23
|
+
export function sourceTopLineStrictlyBeforeFirstIndexLine(blocks, topSourceLine1Based) {
|
|
24
|
+
if (blocks.length === 0)
|
|
25
|
+
return false;
|
|
26
|
+
let minLo = Infinity;
|
|
27
|
+
for (const b of blocks) {
|
|
28
|
+
minLo = Math.min(minLo, b.markerViewportHalfOpen1Based.lo);
|
|
29
|
+
}
|
|
30
|
+
return topSourceLine1Based < minLo;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* True when the doc viewport probe sits strictly **between** two block marker lines in companion
|
|
34
|
+
* order (interstitial prose / blanks), not on a marker line and not before the first marker.
|
|
35
|
+
*/
|
|
36
|
+
export function commentrayProbeInStrictInterMarkerGap(blocks, topCommentrayLine0Based) {
|
|
37
|
+
if (blocks.length === 0)
|
|
38
|
+
return false;
|
|
39
|
+
const s = [...blocks].sort((a, b) => a.commentrayLine - b.commentrayLine);
|
|
40
|
+
const head = s[0];
|
|
41
|
+
if (head === undefined)
|
|
42
|
+
return false;
|
|
43
|
+
if (topCommentrayLine0Based < head.commentrayLine)
|
|
44
|
+
return false;
|
|
45
|
+
for (let i = 0; i < s.length; i++) {
|
|
46
|
+
const cur = s[i];
|
|
47
|
+
if (!cur)
|
|
48
|
+
continue;
|
|
49
|
+
const next = s[i + 1];
|
|
50
|
+
if (next === undefined) {
|
|
51
|
+
return topCommentrayLine0Based > cur.commentrayLine;
|
|
52
|
+
}
|
|
53
|
+
if (cur.commentrayLine < topCommentrayLine0Based &&
|
|
54
|
+
topCommentrayLine0Based < next.commentrayLine) {
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
export function pickBlockScrollLinkForSourceViewportTop(blocks, topSourceLine1Based) {
|
|
9
61
|
if (blocks.length === 0)
|
|
10
62
|
return null;
|
|
11
63
|
const sorted = [...blocks].sort((a, b) => a.markerViewportHalfOpen1Based.lo - b.markerViewportHalfOpen1Based.lo);
|
|
@@ -16,9 +68,9 @@ export function pickCommentrayLineForSourceScroll(blocks, topSourceLine1Based) {
|
|
|
16
68
|
const inside = sorted.find((b) => b.markerViewportHalfOpen1Based.lo <= topSourceLine1Based &&
|
|
17
69
|
topSourceLine1Based < b.markerViewportHalfOpen1Based.hiExclusive);
|
|
18
70
|
if (inside)
|
|
19
|
-
return inside
|
|
71
|
+
return inside;
|
|
20
72
|
if (topSourceLine1Based < firstLo)
|
|
21
|
-
return first
|
|
73
|
+
return first;
|
|
22
74
|
let best = first;
|
|
23
75
|
let bestLo = -Infinity;
|
|
24
76
|
for (const b of sorted) {
|
|
@@ -28,14 +80,122 @@ export function pickCommentrayLineForSourceScroll(blocks, topSourceLine1Based) {
|
|
|
28
80
|
bestLo = lo;
|
|
29
81
|
}
|
|
30
82
|
}
|
|
31
|
-
return best
|
|
83
|
+
return best;
|
|
32
84
|
}
|
|
85
|
+
/** Default: require this many **source** lines into the naive winner before leaving the locked block. */
|
|
86
|
+
export const DEFAULT_SOURCE_VIEWPORT_HYSTERESIS_LINES = 2;
|
|
87
|
+
/** Default: require this many **commentray markdown** lines into the naive winner before leaving the lock. */
|
|
88
|
+
export const DEFAULT_COMMENTRAY_VIEWPORT_HYSTERESIS_LINES = 4;
|
|
33
89
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
90
|
+
* Shared prelude for Schmitt-style hysteresis after the caller’s naive pick: clear lock when there
|
|
91
|
+
* is no naive block; bootstrap or refresh `lockedId` on first hit / same block / stale lock;
|
|
92
|
+
* otherwise hand off naive + locked for span- or line-based separation math.
|
|
37
93
|
*/
|
|
38
|
-
|
|
94
|
+
function resolveStickyHysteresisLock(naive, blocks, state) {
|
|
95
|
+
if (!naive) {
|
|
96
|
+
state.lockedId = null;
|
|
97
|
+
return { outcome: "clear" };
|
|
98
|
+
}
|
|
99
|
+
if (state.lockedId === null) {
|
|
100
|
+
state.lockedId = naive.id;
|
|
101
|
+
return { outcome: "return", link: naive };
|
|
102
|
+
}
|
|
103
|
+
if (state.lockedId === naive.id) {
|
|
104
|
+
return { outcome: "return", link: naive };
|
|
105
|
+
}
|
|
106
|
+
const locked = blocks.find((b) => b.id === state.lockedId);
|
|
107
|
+
if (!locked) {
|
|
108
|
+
state.lockedId = naive.id;
|
|
109
|
+
return { outcome: "return", link: naive };
|
|
110
|
+
}
|
|
111
|
+
return { outcome: "hysteresis", naive, locked };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Schmitt-style block pick for **source→commentray** sync: keeps the active block until the
|
|
115
|
+
* viewport top has moved clearly into another block’s territory, so probe noise at span edges
|
|
116
|
+
* does not flip the partner between unrelated regions.
|
|
117
|
+
*/
|
|
118
|
+
export function pickBlockScrollLinkForSourceViewportWithHysteresis(blocks, topSourceLine1Based, state, hysteresisSourceLines = DEFAULT_SOURCE_VIEWPORT_HYSTERESIS_LINES) {
|
|
119
|
+
const HYST = Math.max(1, Math.floor(hysteresisSourceLines));
|
|
120
|
+
const naive = pickBlockScrollLinkForSourceViewportTop(blocks, topSourceLine1Based);
|
|
121
|
+
const res = resolveStickyHysteresisLock(naive, blocks, state);
|
|
122
|
+
if (res.outcome === "clear")
|
|
123
|
+
return null;
|
|
124
|
+
if (res.outcome === "return")
|
|
125
|
+
return res.link;
|
|
126
|
+
const { naive: n, locked } = res;
|
|
127
|
+
const loL = locked.markerViewportHalfOpen1Based.lo;
|
|
128
|
+
const hiL = locked.markerViewportHalfOpen1Based.hiExclusive;
|
|
129
|
+
const loC = n.markerViewportHalfOpen1Based.lo;
|
|
130
|
+
const hiC = n.markerViewportHalfOpen1Based.hiExclusive;
|
|
131
|
+
const separatedBelow = loC >= hiL;
|
|
132
|
+
const separatedAbove = hiC <= loL;
|
|
133
|
+
if (!separatedBelow && !separatedAbove) {
|
|
134
|
+
state.lockedId = n.id;
|
|
135
|
+
return n;
|
|
136
|
+
}
|
|
137
|
+
if (separatedBelow) {
|
|
138
|
+
if (topSourceLine1Based >= loC + HYST) {
|
|
139
|
+
state.lockedId = n.id;
|
|
140
|
+
return n;
|
|
141
|
+
}
|
|
142
|
+
return locked;
|
|
143
|
+
}
|
|
144
|
+
if (topSourceLine1Based <= loL - HYST) {
|
|
145
|
+
state.lockedId = n.id;
|
|
146
|
+
return n;
|
|
147
|
+
}
|
|
148
|
+
return locked;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Choose which commentray line (0-based) to reveal so the commentary matches
|
|
152
|
+
* the top of the source viewport. Uses each link’s `markerViewportHalfOpen1Based`:
|
|
153
|
+
* if the top line falls in `[lo, hiExclusive)`, that block wins; in gaps, the block with the
|
|
154
|
+
* greatest `lo` still at or above the top line; if the viewport is above every `lo`, the first
|
|
155
|
+
* block by `lo`.
|
|
156
|
+
*/
|
|
157
|
+
export function pickCommentrayLineForSourceScroll(blocks, topSourceLine1Based) {
|
|
158
|
+
const b = pickBlockScrollLinkForSourceViewportTop(blocks, topSourceLine1Based);
|
|
159
|
+
return b ? b.commentrayLine : null;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Schmitt twin for **commentray→source**: same idea in markdown line (0-based) space.
|
|
163
|
+
*/
|
|
164
|
+
export function pickBlockScrollLinkForCommentrayViewportWithHysteresis(blocks, topCommentrayLine0Based, state, hysteresisMdLines = DEFAULT_COMMENTRAY_VIEWPORT_HYSTERESIS_LINES) {
|
|
165
|
+
const HYST = Math.max(1, Math.floor(hysteresisMdLines));
|
|
166
|
+
const naive = pickBlockScrollLinkForCommentrayScroll(blocks, topCommentrayLine0Based);
|
|
167
|
+
const res = resolveStickyHysteresisLock(naive, blocks, state);
|
|
168
|
+
if (res.outcome === "clear")
|
|
169
|
+
return null;
|
|
170
|
+
if (res.outcome === "return")
|
|
171
|
+
return res.link;
|
|
172
|
+
const { naive: n, locked } = res;
|
|
173
|
+
const lL = locked.commentrayLine;
|
|
174
|
+
const lC = n.commentrayLine;
|
|
175
|
+
const separatedBelow = lC > lL;
|
|
176
|
+
const separatedAbove = lC < lL;
|
|
177
|
+
if (!separatedBelow && !separatedAbove) {
|
|
178
|
+
state.lockedId = n.id;
|
|
179
|
+
return n;
|
|
180
|
+
}
|
|
181
|
+
if (separatedBelow) {
|
|
182
|
+
if (topCommentrayLine0Based >= lC + HYST) {
|
|
183
|
+
state.lockedId = n.id;
|
|
184
|
+
return n;
|
|
185
|
+
}
|
|
186
|
+
return locked;
|
|
187
|
+
}
|
|
188
|
+
if (topCommentrayLine0Based <= lL - HYST) {
|
|
189
|
+
state.lockedId = n.id;
|
|
190
|
+
return n;
|
|
191
|
+
}
|
|
192
|
+
return locked;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* The block whose companion marker is at or above `topCommentrayLine0Based`
|
|
196
|
+
* (same rule as {@link pickSourceLine0ForCommentrayScroll}).
|
|
197
|
+
*/
|
|
198
|
+
export function pickBlockScrollLinkForCommentrayScroll(blocks, topCommentrayLine0Based) {
|
|
39
199
|
if (blocks.length === 0)
|
|
40
200
|
return null;
|
|
41
201
|
const sorted = [...blocks].sort((a, b) => a.commentrayLine - b.commentrayLine);
|
|
@@ -47,6 +207,15 @@ export function pickSourceLine0ForCommentrayScroll(blocks, topCommentrayLine0Bas
|
|
|
47
207
|
if (b.commentrayLine <= topCommentrayLine0Based)
|
|
48
208
|
best = b;
|
|
49
209
|
}
|
|
50
|
-
return best
|
|
210
|
+
return best;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Choose a 0-based source line to reveal from the top of the commentray
|
|
214
|
+
* viewport: the block whose marker is at or above that line wins; reveal the
|
|
215
|
+
* first line of its viewport span (`lo` − 1).
|
|
216
|
+
*/
|
|
217
|
+
export function pickSourceLine0ForCommentrayScroll(blocks, topCommentrayLine0Based) {
|
|
218
|
+
const link = pickBlockScrollLinkForCommentrayScroll(blocks, topCommentrayLine0Based);
|
|
219
|
+
return link ? link.markerViewportHalfOpen1Based.lo - 1 : null;
|
|
51
220
|
}
|
|
52
221
|
//# sourceMappingURL=block-scroll-pickers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-scroll-pickers.js","sourceRoot":"","sources":["../src/block-scroll-pickers.ts"],"names":[],"mappings":"AAgBA
|
|
1
|
+
{"version":3,"file":"block-scroll-pickers.js","sourceRoot":"","sources":["../src/block-scroll-pickers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable contract between index / nav JSON / static HTML and browse URL + on-disk layout.
|
|
3
|
+
* Default resolution mirrors `{storageDir}/source/…` under `_site/browse/…/index.html`
|
|
4
|
+
* ({@link staticBrowseIndexRelPathFromPair}); implement {@link CommentrayStaticBrowsePathResolver}
|
|
5
|
+
* only if a repo needs a different mapping.
|
|
6
|
+
*/
|
|
7
|
+
/** Same shape as index entries and nav `documentedPairs` browse inputs. */
|
|
8
|
+
export type CommentrayStaticBrowsePairPaths = {
|
|
9
|
+
readonly sourcePath: string;
|
|
10
|
+
readonly commentrayPath: string;
|
|
11
|
+
};
|
|
12
|
+
/** Injectable browse path strategy (tests or alternate storage layouts). */
|
|
13
|
+
export interface CommentrayStaticBrowsePathResolver {
|
|
14
|
+
browseIndexRelPathFromPair(pair: CommentrayStaticBrowsePairPaths, storageDir: string): string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=browse-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browse-contract.d.ts","sourceRoot":"","sources":["../src/browse-contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,2EAA2E;AAC3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,4EAA4E;AAC5E,MAAM,WAAW,kCAAkC;IACjD,0BAA0B,CAAC,IAAI,EAAE,+BAA+B,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/F"}
|