@brett_lamy/docstream 1.22.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/replay/ReplayDevtools.d.ts +6 -3
- package/dist/replay/ReplayDevtools.d.ts.map +1 -1
- package/dist/replay/ReplayDevtools.js +44 -22
- package/dist/replay/ReplayDevtools.js.map +1 -1
- package/dist/replay/ReplayPlayer.d.ts +12 -3
- package/dist/replay/ReplayPlayer.d.ts.map +1 -1
- package/dist/replay/ReplayPlayer.js +48 -9
- package/dist/replay/ReplayPlayer.js.map +1 -1
- package/dist/replay/devtools.d.ts +5 -0
- package/dist/replay/devtools.d.ts.map +1 -1
- package/dist/replay/devtools.js +3 -2
- package/dist/replay/devtools.js.map +1 -1
- package/dist/replay/index.d.ts +2 -0
- package/dist/replay/index.d.ts.map +1 -1
- package/dist/replay/index.js +1 -0
- package/dist/replay/index.js.map +1 -1
- package/dist/replay/inspections.d.ts +36 -0
- package/dist/replay/inspections.d.ts.map +1 -0
- package/dist/replay/inspections.js +64 -0
- package/dist/replay/inspections.js.map +1 -0
- package/dist/styles.css +62 -21
- package/package.json +1 -1
- package/src/replay/ReplayDevtools.tsx +53 -26
- package/src/replay/ReplayPlayer.tsx +60 -11
- package/src/replay/devtools.ts +8 -2
- package/src/replay/index.ts +2 -0
- package/src/replay/inspections.ts +105 -0
- package/src/styles.css +62 -21
package/dist/replay/devtools.js
CHANGED
|
@@ -96,6 +96,7 @@ export function getReplayDevtools(events) {
|
|
|
96
96
|
// request was sent that far before it (its own duration, for a lone request).
|
|
97
97
|
const sent = Math.max(0, startTime !== undefined && batchEnd !== undefined ? at - (batchEnd - startTime) : at - (duration ?? 0));
|
|
98
98
|
requests.push({
|
|
99
|
+
key: str(raw.requestId) ?? str(raw.id),
|
|
99
100
|
time: sent,
|
|
100
101
|
duration,
|
|
101
102
|
method: (str(raw.method) ?? 'GET').toUpperCase(),
|
|
@@ -144,11 +145,11 @@ export function getReplayDevtools(events) {
|
|
|
144
145
|
const detail = str(payload.message) ?? str(payload.detail);
|
|
145
146
|
const message = detail ? `Uncaught ${label}: ${detail}` : `Uncaught ${label}`;
|
|
146
147
|
const trace = Array.isArray(payload.stack) ? payload.stack.map(String) : str(payload.stack)?.split('\n').map((l) => l.trim()).filter(Boolean);
|
|
147
|
-
consoleEntries.push({ time, level: 'error', message, args: [message], trace: trace?.length ? trace : undefined, source: 'exception' });
|
|
148
|
+
consoleEntries.push({ key: str(payload.id), time, level: 'error', message, args: [message], trace: trace?.length ? trace : undefined, source: 'exception' });
|
|
148
149
|
}
|
|
149
150
|
else if (CONSOLE_TAGS.has(tag)) {
|
|
150
151
|
const args = Array.isArray(payload.args) ? payload.args.map((a) => asText(a) ?? '') : [str(payload.message) ?? str(payload.label) ?? asText(payload.detail) ?? ''];
|
|
151
|
-
consoleEntries.push({ time, level: levelOf(payload.level ?? tag), message: args.join(' '), args, source: 'custom' });
|
|
152
|
+
consoleEntries.push({ key: str(payload.id), time, level: levelOf(payload.level ?? tag), message: args.join(' '), args, source: 'custom' });
|
|
152
153
|
}
|
|
153
154
|
}
|
|
154
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/replay/devtools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"devtools.js","sourceRoot":"","sources":["../../src/replay/devtools.ts"],"names":[],"mappings":"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"}
|
package/dist/replay/index.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export type { ReplayMarker, ReplayMarkerKind, ReplayMeta, ReplayPointerPoint, Re
|
|
|
7
7
|
export { getReplayDevtools, replayDevtoolsAt, requestName } from './devtools.js';
|
|
8
8
|
export type { ReplayConsoleEntry, ReplayConsoleLevel, ReplayDevtools, ReplayDevtoolsState, ReplayRequest } from './devtools.js';
|
|
9
9
|
export type { ReplayDevtoolsTab } from './ReplayDevtools.js';
|
|
10
|
+
export { getReplayInspections, replayInspectionAt, resolveReplayInspections } from './inspections.js';
|
|
11
|
+
export type { ReplayInspection, ReplayInspectionTab, ResolvedReplayInspection } from './inspections.js';
|
|
10
12
|
export { ReplayEventType, ReplayIncrementalSource, ReplayMouseInteraction } from './types.js';
|
|
11
13
|
export type { ReplayEvent } from './types.js';
|
|
12
14
|
export { isReplayQaUrl, normalizeReplayEmbedUrl } from './url.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACpG,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7H,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC3F,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACpG,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9E,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7H,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACnG,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC3F,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/replay/index.js
CHANGED
|
@@ -2,6 +2,7 @@ export { ReplayEmbed, ReplayPreview, formatReplayTime } from './ReplayPreview.js
|
|
|
2
2
|
export { ReplayStage, preloadReplayStage } from './ReplayStage.js';
|
|
3
3
|
export { getReplayMarkers, getReplayMeta, getReplayPointerTrack, replayPointerAt } from './markers.js';
|
|
4
4
|
export { getReplayDevtools, replayDevtoolsAt, requestName } from './devtools.js';
|
|
5
|
+
export { getReplayInspections, replayInspectionAt, resolveReplayInspections } from './inspections.js';
|
|
5
6
|
export { ReplayEventType, ReplayIncrementalSource, ReplayMouseInteraction } from './types.js';
|
|
6
7
|
export { isReplayQaUrl, normalizeReplayEmbedUrl } from './url.js';
|
|
7
8
|
export { ReplayFile, isRrwebUrl } from './ReplayFile.js';
|
package/dist/replay/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAa/E,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEpG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/replay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAa/E,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEpG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEnG,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ReplayDevtools } from './devtools.js';
|
|
2
|
+
import { type ReplayEvent } from './types.js';
|
|
3
|
+
export type ReplayInspectionTab = 'network' | 'console';
|
|
4
|
+
export interface ReplayInspection {
|
|
5
|
+
/** Stable id; defaults to `inspect-<n>`. */
|
|
6
|
+
id?: string;
|
|
7
|
+
/** Milliseconds from the start of the recording. */
|
|
8
|
+
time: number;
|
|
9
|
+
/** The DevTools tab to open (default: `network` when `request` is set, else `console`). */
|
|
10
|
+
tab?: ReplayInspectionTab;
|
|
11
|
+
/** The request to select: the recording's id for it (`key`), or its URL. */
|
|
12
|
+
request?: string;
|
|
13
|
+
/** The console message to select: the recording's id for it (`key`), or text it contains. */
|
|
14
|
+
message?: string;
|
|
15
|
+
/** What was found, shown above the panel while the inspection is current. */
|
|
16
|
+
label?: string;
|
|
17
|
+
}
|
|
18
|
+
/** An inspection with its defaults filled in and its target resolved against the recording's DevTools. */
|
|
19
|
+
export interface ResolvedReplayInspection {
|
|
20
|
+
id: string;
|
|
21
|
+
time: number;
|
|
22
|
+
tab: ReplayInspectionTab;
|
|
23
|
+
label?: string;
|
|
24
|
+
/** The `ReplayRequest.id` to select, when the target was found. */
|
|
25
|
+
requestId?: string;
|
|
26
|
+
/** The `ReplayConsoleEntry.id` to select, when the target was found. */
|
|
27
|
+
messageId?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare const INSPECT_TAG = "inspect";
|
|
30
|
+
/** The `inspect` custom events in a recording, as inspections (times in ms from its first event). */
|
|
31
|
+
export declare function getReplayInspections(events: readonly ReplayEvent[]): ReplayInspection[];
|
|
32
|
+
/** Fills in each inspection's id and tab and finds its request or message; sorted by time. */
|
|
33
|
+
export declare function resolveReplayInspections(inspections: readonly ReplayInspection[], tools: ReplayDevtools): ResolvedReplayInspection[];
|
|
34
|
+
/** The inspection current at `time`: the latest at or before it. */
|
|
35
|
+
export declare function replayInspectionAt(inspections: readonly ResolvedReplayInspection[], time: number): ResolvedReplayInspection | undefined;
|
|
36
|
+
//# sourceMappingURL=inspections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspections.d.ts","sourceRoot":"","sources":["../../src/replay/inspections.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAsB,cAAc,EAAiB,MAAM,YAAY,CAAA;AACnF,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAE3D,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,CAAA;AAEvD,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAA;IACZ,2FAA2F;IAC3F,GAAG,CAAC,EAAE,mBAAmB,CAAA;IACzB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,0GAA0G;AAC1G,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,mBAAmB,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,WAAW,YAAY,CAAA;AAIpC,qGAAqG;AACrG,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAavF;AAkBD,8FAA8F;AAC9F,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,EAAE,KAAK,EAAE,cAAc,GAAG,wBAAwB,EAAE,CAepI;AAED,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,SAAS,wBAAwB,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAOvI"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ReplayEventType } from './types.js';
|
|
2
|
+
export const INSPECT_TAG = 'inspect';
|
|
3
|
+
const str = (value) => (typeof value === 'string' && value ? value : undefined);
|
|
4
|
+
/** The `inspect` custom events in a recording, as inspections (times in ms from its first event). */
|
|
5
|
+
export function getReplayInspections(events) {
|
|
6
|
+
const list = [...events].sort((a, b) => a.timestamp - b.timestamp);
|
|
7
|
+
const start = list[0]?.timestamp ?? 0;
|
|
8
|
+
const out = [];
|
|
9
|
+
for (const event of list) {
|
|
10
|
+
if (event.type !== ReplayEventType.Custom)
|
|
11
|
+
continue;
|
|
12
|
+
const data = (event.data ?? {});
|
|
13
|
+
if (data.tag !== INSPECT_TAG)
|
|
14
|
+
continue;
|
|
15
|
+
const p = data.payload ?? {};
|
|
16
|
+
const tab = p.tab === 'network' || p.tab === 'console' ? p.tab : undefined;
|
|
17
|
+
out.push({ id: str(p.id), time: event.timestamp - start, tab, request: str(p.request), message: str(p.message), label: str(p.label) });
|
|
18
|
+
}
|
|
19
|
+
return out;
|
|
20
|
+
}
|
|
21
|
+
function findRequest(network, target, time) {
|
|
22
|
+
const byKey = network.find((r) => r.key === target);
|
|
23
|
+
if (byKey)
|
|
24
|
+
return byKey;
|
|
25
|
+
// By URL (exact, else the address without its origin): the one sent nearest the inspection.
|
|
26
|
+
const matches = network.filter((r) => r.url === target || r.url.replace(/^\w+:\/\/[^/]+/, '') === target);
|
|
27
|
+
return matches.sort((a, b) => Math.abs(a.time - time) - Math.abs(b.time - time))[0];
|
|
28
|
+
}
|
|
29
|
+
function findMessage(messages, target, time) {
|
|
30
|
+
const byKey = messages.find((m) => m.key === target);
|
|
31
|
+
if (byKey)
|
|
32
|
+
return byKey;
|
|
33
|
+
const matches = messages.filter((m) => m.message.includes(target));
|
|
34
|
+
// The last one logged by the inspection, else the first after it.
|
|
35
|
+
return matches.filter((m) => m.time <= time).at(-1) ?? matches[0];
|
|
36
|
+
}
|
|
37
|
+
/** Fills in each inspection's id and tab and finds its request or message; sorted by time. */
|
|
38
|
+
export function resolveReplayInspections(inspections, tools) {
|
|
39
|
+
return inspections
|
|
40
|
+
.map((inspection, i) => {
|
|
41
|
+
const request = inspection.request ? findRequest(tools.network, inspection.request, inspection.time) : undefined;
|
|
42
|
+
const message = inspection.message ? findMessage(tools.console, inspection.message, inspection.time) : undefined;
|
|
43
|
+
return {
|
|
44
|
+
id: inspection.id ?? `inspect-${i}`,
|
|
45
|
+
time: Math.max(0, inspection.time),
|
|
46
|
+
tab: inspection.tab ?? (inspection.request ? 'network' : 'console'),
|
|
47
|
+
label: inspection.label,
|
|
48
|
+
requestId: request?.id,
|
|
49
|
+
messageId: message?.id,
|
|
50
|
+
};
|
|
51
|
+
})
|
|
52
|
+
.sort((a, b) => a.time - b.time);
|
|
53
|
+
}
|
|
54
|
+
/** The inspection current at `time`: the latest at or before it. */
|
|
55
|
+
export function replayInspectionAt(inspections, time) {
|
|
56
|
+
let current;
|
|
57
|
+
for (const inspection of inspections) {
|
|
58
|
+
if (inspection.time > time)
|
|
59
|
+
break;
|
|
60
|
+
current = inspection;
|
|
61
|
+
}
|
|
62
|
+
return current;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=inspections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inspections.js","sourceRoot":"","sources":["../../src/replay/inspections.ts"],"names":[],"mappings":"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"}
|
package/dist/styles.css
CHANGED
|
@@ -4440,6 +4440,14 @@
|
|
|
4440
4440
|
/* ── Replay DevTools: the Console / Network buttons in the top bar and the panel over the page ──
|
|
4441
4441
|
Chrome's DevTools, in the player's tokens. Failed requests and errors read --destructive, warnings --warning. */
|
|
4442
4442
|
@layer docstream.replay {
|
|
4443
|
+
/* Text tones that keep 4.5:1 on the card in light and dark: the theme's muted, red and amber, pulled toward the
|
|
4444
|
+
foreground (a theme's own --muted-foreground or --destructive is often tuned for larger text). */
|
|
4445
|
+
:where([data-slot="replay-preview"]) {
|
|
4446
|
+
--replay-devtools-dim: color-mix(in srgb, var(--foreground, #18181b) 68%, var(--card, #ffffff));
|
|
4447
|
+
--replay-devtools-red: color-mix(in srgb, var(--destructive, #dc2626) 74%, var(--foreground, #18181b));
|
|
4448
|
+
--replay-devtools-amber: color-mix(in srgb, var(--warning, #b45309) 56%, var(--foreground, #18181b));
|
|
4449
|
+
}
|
|
4450
|
+
|
|
4443
4451
|
:where([data-slot="replay-preview-actions"]) {
|
|
4444
4452
|
display: flex;
|
|
4445
4453
|
flex-shrink: 0;
|
|
@@ -4465,7 +4473,7 @@
|
|
|
4465
4473
|
outline: none;
|
|
4466
4474
|
cursor: pointer;
|
|
4467
4475
|
appearance: none;
|
|
4468
|
-
color: var(--
|
|
4476
|
+
color: var(--replay-devtools-dim);
|
|
4469
4477
|
background: transparent;
|
|
4470
4478
|
font: inherit;
|
|
4471
4479
|
font-size: 11.5px;
|
|
@@ -4489,12 +4497,12 @@
|
|
|
4489
4497
|
}
|
|
4490
4498
|
|
|
4491
4499
|
:where([data-slot="replay-preview"] [data-part="failed"]) {
|
|
4492
|
-
color: var(--
|
|
4500
|
+
color: var(--replay-devtools-red);
|
|
4493
4501
|
font-weight: 600;
|
|
4494
4502
|
}
|
|
4495
4503
|
|
|
4496
4504
|
:where([data-slot="replay-preview"] [data-part="warn"]) {
|
|
4497
|
-
color: var(--
|
|
4505
|
+
color: var(--replay-devtools-amber);
|
|
4498
4506
|
font-weight: 600;
|
|
4499
4507
|
}
|
|
4500
4508
|
|
|
@@ -4549,7 +4557,7 @@
|
|
|
4549
4557
|
outline: none;
|
|
4550
4558
|
cursor: pointer;
|
|
4551
4559
|
appearance: none;
|
|
4552
|
-
color: var(--
|
|
4560
|
+
color: var(--replay-devtools-dim);
|
|
4553
4561
|
background: transparent;
|
|
4554
4562
|
font: inherit;
|
|
4555
4563
|
}
|
|
@@ -4563,19 +4571,47 @@
|
|
|
4563
4571
|
box-shadow: inset 0 0 0 2px var(--ring, #6366f1);
|
|
4564
4572
|
}
|
|
4565
4573
|
|
|
4566
|
-
:where([data-slot="replay-devtools-
|
|
4574
|
+
:where([data-slot="replay-devtools-tablist"]) {
|
|
4575
|
+
display: flex;
|
|
4576
|
+
align-items: stretch;
|
|
4577
|
+
}
|
|
4578
|
+
|
|
4579
|
+
:where([data-slot="replay-devtools-tablist"] > button) {
|
|
4567
4580
|
display: inline-flex;
|
|
4568
4581
|
align-items: center;
|
|
4569
|
-
|
|
4570
|
-
|
|
4571
|
-
|
|
4572
|
-
|
|
4582
|
+
gap: 5px;
|
|
4583
|
+
margin: 0;
|
|
4584
|
+
padding: 0 10px;
|
|
4585
|
+
border: 0;
|
|
4586
|
+
border-bottom: 2px solid transparent;
|
|
4587
|
+
outline: none;
|
|
4588
|
+
cursor: pointer;
|
|
4589
|
+
appearance: none;
|
|
4590
|
+
color: var(--replay-devtools-dim);
|
|
4591
|
+
background: transparent;
|
|
4592
|
+
font: inherit;
|
|
4573
4593
|
}
|
|
4574
4594
|
|
|
4595
|
+
:where([data-slot="replay-devtools-tablist"] > button[aria-selected="true"]) {
|
|
4596
|
+
color: var(--foreground, #18181b);
|
|
4597
|
+
border-bottom-color: var(--primary, #2563eb);
|
|
4598
|
+
}
|
|
4599
|
+
|
|
4600
|
+
:where([data-slot="replay-devtools-tablist"] > button:focus-visible) {
|
|
4601
|
+
box-shadow: inset 0 0 0 2px var(--ring, #6366f1);
|
|
4602
|
+
}
|
|
4603
|
+
|
|
4604
|
+
|
|
4605
|
+
|
|
4606
|
+
|
|
4575
4607
|
:where([data-slot="replay-devtools-tabs"] > [data-slot="replay-devtools-close"], [data-slot="replay-devtools-detail-tabs"] > [data-slot="replay-devtools-close"]) {
|
|
4576
4608
|
padding: 0 8px;
|
|
4577
4609
|
}
|
|
4578
4610
|
|
|
4611
|
+
:where([data-slot="replay-devtools-tabs"] > [data-slot="replay-devtools-close"]) {
|
|
4612
|
+
margin-inline-start: auto;
|
|
4613
|
+
}
|
|
4614
|
+
|
|
4579
4615
|
:where([data-slot="replay-devtools-pane"]) {
|
|
4580
4616
|
display: flex;
|
|
4581
4617
|
flex: 1 1 0%;
|
|
@@ -4635,7 +4671,7 @@
|
|
|
4635
4671
|
outline: none;
|
|
4636
4672
|
cursor: pointer;
|
|
4637
4673
|
appearance: none;
|
|
4638
|
-
color: var(--
|
|
4674
|
+
color: var(--replay-devtools-dim);
|
|
4639
4675
|
background: transparent;
|
|
4640
4676
|
font: inherit;
|
|
4641
4677
|
}
|
|
@@ -4669,19 +4705,19 @@
|
|
|
4669
4705
|
}
|
|
4670
4706
|
|
|
4671
4707
|
:where([data-slot="replay-devtools-message"][data-level="warn"]) {
|
|
4672
|
-
color:
|
|
4708
|
+
color: var(--replay-devtools-amber);
|
|
4673
4709
|
background: color-mix(in srgb, var(--warning, #f59e0b) 10%, transparent);
|
|
4674
4710
|
border-bottom-color: color-mix(in srgb, var(--warning, #f59e0b) 25%, transparent);
|
|
4675
4711
|
}
|
|
4676
4712
|
|
|
4677
4713
|
:where([data-slot="replay-devtools-message"][data-level="error"]) {
|
|
4678
|
-
color: var(--
|
|
4714
|
+
color: var(--replay-devtools-red);
|
|
4679
4715
|
background: color-mix(in srgb, var(--destructive, #dc2626) 8%, transparent);
|
|
4680
4716
|
border-bottom-color: color-mix(in srgb, var(--destructive, #dc2626) 22%, transparent);
|
|
4681
4717
|
}
|
|
4682
4718
|
|
|
4683
4719
|
:where([data-slot="replay-devtools-message"][data-level="debug"]) {
|
|
4684
|
-
color: var(--
|
|
4720
|
+
color: var(--replay-devtools-dim);
|
|
4685
4721
|
}
|
|
4686
4722
|
|
|
4687
4723
|
:where([data-slot="replay-devtools-message"] > details, [data-slot="replay-devtools-message"] > [data-part="line"]) {
|
|
@@ -4737,7 +4773,7 @@
|
|
|
4737
4773
|
outline: none;
|
|
4738
4774
|
cursor: pointer;
|
|
4739
4775
|
appearance: none;
|
|
4740
|
-
color: var(--
|
|
4776
|
+
color: var(--replay-devtools-dim);
|
|
4741
4777
|
background: transparent;
|
|
4742
4778
|
font: inherit;
|
|
4743
4779
|
font-variant-numeric: tabular-nums;
|
|
@@ -4756,7 +4792,7 @@
|
|
|
4756
4792
|
:where([data-slot="replay-devtools-empty"], [data-slot="replay-devtools-later"]) {
|
|
4757
4793
|
margin: 0;
|
|
4758
4794
|
padding: 10px 12px;
|
|
4759
|
-
color: var(--
|
|
4795
|
+
color: var(--replay-devtools-dim);
|
|
4760
4796
|
}
|
|
4761
4797
|
|
|
4762
4798
|
:where([data-slot="replay-devtools-later"]) {
|
|
@@ -4796,7 +4832,7 @@
|
|
|
4796
4832
|
height: 22px;
|
|
4797
4833
|
padding: 0 8px;
|
|
4798
4834
|
border-bottom: 1px solid var(--border, #e4e4e7);
|
|
4799
|
-
color: var(--
|
|
4835
|
+
color: var(--replay-devtools-dim);
|
|
4800
4836
|
background: var(--card, #ffffff);
|
|
4801
4837
|
font-weight: 500;
|
|
4802
4838
|
text-align: start;
|
|
@@ -4844,13 +4880,18 @@
|
|
|
4844
4880
|
:where([data-slot="replay-devtools-table"] tbody tr:focus-visible) {
|
|
4845
4881
|
box-shadow: inset 0 0 0 2px var(--ring, #6366f1);
|
|
4846
4882
|
}
|
|
4883
|
+
/* The inspected request or message: a bar down its leading edge (the selection tint shows it's open). */
|
|
4884
|
+
:where([data-slot="replay-devtools-table"] tbody tr[data-inspected], [data-slot="replay-devtools-message"][data-inspected]) {
|
|
4885
|
+
box-shadow: inset 3px 0 0 var(--primary, #2563eb);
|
|
4886
|
+
}
|
|
4887
|
+
|
|
4847
4888
|
|
|
4848
4889
|
:where([data-slot="replay-devtools-table"] tr[data-failed]) {
|
|
4849
|
-
color: var(--
|
|
4890
|
+
color: var(--replay-devtools-red);
|
|
4850
4891
|
}
|
|
4851
4892
|
|
|
4852
4893
|
:where([data-slot="replay-devtools-table"] tr[data-pending]) {
|
|
4853
|
-
color: var(--
|
|
4894
|
+
color: var(--replay-devtools-dim);
|
|
4854
4895
|
}
|
|
4855
4896
|
|
|
4856
4897
|
:where([data-slot="replay-devtools-table"] td[data-col="waterfall"]) {
|
|
@@ -4871,7 +4912,7 @@
|
|
|
4871
4912
|
}
|
|
4872
4913
|
|
|
4873
4914
|
:where([data-slot="replay-devtools-table"] tr[data-pending] [data-part="bar"]) {
|
|
4874
|
-
background: color-mix(in srgb, var(--
|
|
4915
|
+
background: color-mix(in srgb, var(--replay-devtools-dim) 50%, transparent);
|
|
4875
4916
|
}
|
|
4876
4917
|
|
|
4877
4918
|
:where([data-slot="replay-devtools-status"]) {
|
|
@@ -4882,7 +4923,7 @@
|
|
|
4882
4923
|
height: 22px;
|
|
4883
4924
|
padding: 0 8px;
|
|
4884
4925
|
border-top: 1px solid var(--border, #e4e4e7);
|
|
4885
|
-
color: var(--
|
|
4926
|
+
color: var(--replay-devtools-dim);
|
|
4886
4927
|
font-variant-numeric: tabular-nums;
|
|
4887
4928
|
}
|
|
4888
4929
|
|
|
@@ -4939,7 +4980,7 @@
|
|
|
4939
4980
|
:where([data-slot="replay-devtools-section"] dt) {
|
|
4940
4981
|
flex-shrink: 0;
|
|
4941
4982
|
min-width: 130px;
|
|
4942
|
-
color: var(--
|
|
4983
|
+
color: var(--replay-devtools-dim);
|
|
4943
4984
|
}
|
|
4944
4985
|
|
|
4945
4986
|
:where([data-slot="replay-devtools-section"] dd) {
|
package/package.json
CHANGED
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
waiting at the playhead shows as pending), and a request's row opens its headers, payload and response.
|
|
6
6
|
|
|
7
7
|
Everything is a function of the playhead: scrub back and the lists shrink to what DevTools showed then. A row's
|
|
8
|
-
time jumps the player there. Esc closes the panel.
|
|
8
|
+
time jumps the player there. Esc closes the panel. An inspection (inspections.ts) selects its request or
|
|
9
|
+
message and marks it. Plain React + plain CSS, like the player. */
|
|
9
10
|
import { useEffect, useMemo, useRef, useState, type KeyboardEvent as ReactKeyboardEvent, type PointerEvent as ReactPointerEvent } from 'react'
|
|
10
11
|
import { ChevronRight, CircleX, Info, Network, SquareTerminal, TriangleAlert, X } from 'lucide-react'
|
|
11
12
|
import type { ReplayConsoleEntry, ReplayDevtoolsState, ReplayRequest } from './devtools'
|
|
13
|
+
import type { ResolvedReplayInspection } from './inspections'
|
|
12
14
|
|
|
13
15
|
export type ReplayDevtoolsTab = 'console' | 'network'
|
|
14
16
|
|
|
@@ -55,14 +57,16 @@ export function DevtoolsButtons({ state, open, onOpen }: {
|
|
|
55
57
|
)
|
|
56
58
|
}
|
|
57
59
|
|
|
58
|
-
/** The panel over the page: Console and Network, cut at the playhead.
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
/** The panel over the page: Console and Network, cut at the playhead. `inspection` selects and marks its target;
|
|
61
|
+
* `autoFocus` (default true) moves focus into the panel as it opens — off when an inspection opened it mid-play. */
|
|
62
|
+
export function DevtoolsPanel({ state, tab, onTab, onClose, onSeek, inspection, autoFocus = true }: {
|
|
63
|
+
state: ReplayDevtoolsState; tab: ReplayDevtoolsTab; onTab: (tab: ReplayDevtoolsTab) => void
|
|
64
|
+
onClose: () => void; onSeek: (ms: number) => void; inspection?: ResolvedReplayInspection | null; autoFocus?: boolean
|
|
62
65
|
}) {
|
|
63
66
|
const panel = useRef<HTMLDivElement>(null)
|
|
64
|
-
|
|
65
|
-
|
|
67
|
+
// Opened by an inspection, the panel starts taller: its point is the request's details.
|
|
68
|
+
const [height, setHeight] = useState(inspection ? 72 : 58)
|
|
69
|
+
useEffect(() => { if (autoFocus) panel.current?.focus({ preventScroll: true }) }, [autoFocus])
|
|
66
70
|
|
|
67
71
|
// Drag the top edge to resize, as a fraction of the stage.
|
|
68
72
|
const resize = (e: ReactPointerEvent<HTMLDivElement>) => {
|
|
@@ -96,7 +100,8 @@ export function DevtoolsPanel({ state, at, tab, onTab, onClose, onSeek }: {
|
|
|
96
100
|
style={{ height: `${height}%` }}
|
|
97
101
|
>
|
|
98
102
|
<div data-slot="replay-devtools-resize" aria-hidden="true" onPointerDown={resize} />
|
|
99
|
-
<div data-slot="replay-devtools-tabs"
|
|
103
|
+
<div data-slot="replay-devtools-tabs">
|
|
104
|
+
<div data-slot="replay-devtools-tablist" role="tablist" aria-label="DevTools panels">
|
|
100
105
|
{tabs.map((t) => (
|
|
101
106
|
<button
|
|
102
107
|
key={t.id}
|
|
@@ -114,10 +119,12 @@ export function DevtoolsPanel({ state, at, tab, onTab, onClose, onSeek }: {
|
|
|
114
119
|
{t.id === 'network' && state.counts.failed ? <span data-part="failed">{state.counts.failed}</span> : null}
|
|
115
120
|
</button>
|
|
116
121
|
))}
|
|
117
|
-
|
|
122
|
+
</div>
|
|
118
123
|
<button type="button" data-slot="replay-devtools-close" aria-label="Close DevTools" onClick={onClose}><X size={14} /></button>
|
|
119
124
|
</div>
|
|
120
|
-
{tab === 'console'
|
|
125
|
+
{tab === 'console'
|
|
126
|
+
? <ConsolePane state={state} onSeek={onSeek} inspected={inspection?.tab === 'console' ? inspection : null} />
|
|
127
|
+
: <NetworkPane state={state} onSeek={onSeek} inspected={inspection?.tab === 'network' ? inspection : null} />}
|
|
121
128
|
</div>
|
|
122
129
|
)
|
|
123
130
|
}
|
|
@@ -127,7 +134,9 @@ export function DevtoolsPanel({ state, at, tab, onTab, onClose, onSeek }: {
|
|
|
127
134
|
type LevelFilter = 'all' | 'error' | 'warn' | 'info'
|
|
128
135
|
const LEVEL_ICON = { error: CircleX, warn: TriangleAlert, info: Info } as const
|
|
129
136
|
|
|
130
|
-
function ConsolePane({ state, onSeek }: {
|
|
137
|
+
function ConsolePane({ state, onSeek, inspected }: {
|
|
138
|
+
state: ReplayDevtoolsState; onSeek: (ms: number) => void; inspected: ResolvedReplayInspection | null
|
|
139
|
+
}) {
|
|
131
140
|
const [query, setQuery] = useState('')
|
|
132
141
|
const [level, setLevel] = useState<LevelFilter>('all')
|
|
133
142
|
const list = useRef<HTMLDivElement>(null)
|
|
@@ -137,12 +146,17 @@ function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
|
|
|
137
146
|
(level === 'all' || (level === 'info' ? e.level === 'info' || e.level === 'log' || e.level === 'debug' : e.level === level)) &&
|
|
138
147
|
(!q || e.message.toLowerCase().includes(q)))
|
|
139
148
|
}, [state.console, query, level])
|
|
140
|
-
// Follow new messages as they're logged, unless you've scrolled up to read.
|
|
149
|
+
// Follow new messages as they're logged, unless you've scrolled up to read (or an inspection is showing one).
|
|
141
150
|
const pinned = useRef(true)
|
|
151
|
+
const inspectedId = inspected?.messageId
|
|
152
|
+
const shown = inspectedId !== undefined && rows.some((r) => r.id === inspectedId)
|
|
142
153
|
useEffect(() => {
|
|
143
154
|
const el = list.current
|
|
144
|
-
if (el && pinned.current) el.scrollTop = el.scrollHeight
|
|
145
|
-
}, [rows.length])
|
|
155
|
+
if (el && pinned.current && !shown) el.scrollTop = el.scrollHeight
|
|
156
|
+
}, [rows.length, shown])
|
|
157
|
+
useEffect(() => {
|
|
158
|
+
if (shown) list.current?.querySelector('[data-inspected]')?.scrollIntoView?.({ block: 'nearest' })
|
|
159
|
+
}, [shown, inspected?.id])
|
|
146
160
|
return (
|
|
147
161
|
<div data-slot="replay-devtools-pane" data-pane="console">
|
|
148
162
|
<div data-slot="replay-devtools-toolbar">
|
|
@@ -165,7 +179,7 @@ function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
|
|
|
165
179
|
aria-label="Console messages"
|
|
166
180
|
onScroll={(e) => { const el = e.currentTarget; pinned.current = el.scrollHeight - el.scrollTop - el.clientHeight < 8 }}
|
|
167
181
|
>
|
|
168
|
-
{rows.map((entry) => <ConsoleRow key={entry.id} entry={entry} onSeek={onSeek} />)}
|
|
182
|
+
{rows.map((entry) => <ConsoleRow key={entry.id} entry={entry} onSeek={onSeek} inspected={entry.id === inspectedId} />)}
|
|
169
183
|
{!rows.length ? <p data-slot="replay-devtools-empty">{state.console.length ? 'No messages match the filter' : 'Nothing logged yet'}</p> : null}
|
|
170
184
|
{state.counts.laterMessages ? <p data-slot="replay-devtools-later">{state.counts.laterMessages} more later in the recording</p> : null}
|
|
171
185
|
</div>
|
|
@@ -173,7 +187,7 @@ function ConsolePane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
|
|
|
173
187
|
)
|
|
174
188
|
}
|
|
175
189
|
|
|
176
|
-
function ConsoleRow({ entry, onSeek }: { entry: ReplayConsoleEntry; onSeek: (ms: number) => void }) {
|
|
190
|
+
function ConsoleRow({ entry, onSeek, inspected }: { entry: ReplayConsoleEntry; onSeek: (ms: number) => void; inspected: boolean }) {
|
|
177
191
|
const Glyph = entry.level === 'error' || entry.level === 'warn' || entry.level === 'info' ? LEVEL_ICON[entry.level] : null
|
|
178
192
|
const body = (
|
|
179
193
|
<>
|
|
@@ -182,7 +196,7 @@ function ConsoleRow({ entry, onSeek }: { entry: ReplayConsoleEntry; onSeek: (ms:
|
|
|
182
196
|
</>
|
|
183
197
|
)
|
|
184
198
|
return (
|
|
185
|
-
<div data-slot="replay-devtools-message" data-level={entry.level}>
|
|
199
|
+
<div data-slot="replay-devtools-message" data-level={entry.level} data-inspected={inspected || undefined}>
|
|
186
200
|
{entry.trace?.length ? (
|
|
187
201
|
<details>
|
|
188
202
|
<summary>{body}</summary>
|
|
@@ -201,10 +215,20 @@ type Row = ReplayRequest & { pending: boolean }
|
|
|
201
215
|
|
|
202
216
|
const statusText = (r: Row) => (r.pending ? '(pending)' : r.status === undefined ? (r.failed ? '(failed)' : '—') : r.status === 0 ? '(failed)' : String(r.status))
|
|
203
217
|
|
|
204
|
-
function NetworkPane({ state, onSeek }: {
|
|
218
|
+
function NetworkPane({ state, onSeek, inspected }: {
|
|
219
|
+
state: ReplayDevtoolsState; onSeek: (ms: number) => void; inspected: ResolvedReplayInspection | null
|
|
220
|
+
}) {
|
|
205
221
|
const [query, setQuery] = useState('')
|
|
206
222
|
const [filter, setFilter] = useState<RequestFilter>('all')
|
|
207
|
-
const
|
|
223
|
+
const inspectedId = inspected?.requestId
|
|
224
|
+
const [selectedId, setSelectedId] = useState<string | null>(inspectedId ?? null)
|
|
225
|
+
const table = useRef<HTMLDivElement>(null)
|
|
226
|
+
// A new inspection selects its request (once it has been sent) and brings its row into view.
|
|
227
|
+
useEffect(() => { if (inspectedId) setSelectedId(inspectedId) }, [inspected?.id, inspectedId])
|
|
228
|
+
const sent = inspectedId !== undefined && state.network.some((r) => r.id === inspectedId)
|
|
229
|
+
useEffect(() => {
|
|
230
|
+
if (sent) table.current?.querySelector('[data-inspected]')?.scrollIntoView?.({ block: 'nearest' })
|
|
231
|
+
}, [sent, inspected?.id])
|
|
208
232
|
const rows = useMemo(() => {
|
|
209
233
|
const q = query.trim().toLowerCase()
|
|
210
234
|
return state.network.filter((r) =>
|
|
@@ -233,7 +257,7 @@ function NetworkPane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
|
|
|
233
257
|
</div>
|
|
234
258
|
</div>
|
|
235
259
|
<div data-slot="replay-devtools-network">
|
|
236
|
-
<div data-slot="replay-devtools-table-wrap">
|
|
260
|
+
<div ref={table} data-slot="replay-devtools-table-wrap">
|
|
237
261
|
<table data-slot="replay-devtools-table">
|
|
238
262
|
<thead>
|
|
239
263
|
<tr>
|
|
@@ -249,6 +273,7 @@ function NetworkPane({ state, onSeek }: { state: ReplayDevtoolsState; onSeek: (m
|
|
|
249
273
|
data-failed={(r.failed && !r.pending) || undefined}
|
|
250
274
|
data-pending={r.pending || undefined}
|
|
251
275
|
aria-selected={r.id === selectedId}
|
|
276
|
+
data-inspected={r.id === inspectedId || undefined}
|
|
252
277
|
tabIndex={0}
|
|
253
278
|
onClick={() => setSelectedId(r.id === selectedId ? null : r.id)}
|
|
254
279
|
onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); setSelectedId(r.id === selectedId ? null : r.id) } }}
|
|
@@ -306,13 +331,15 @@ function RequestDetail({ request, onClose, onSeek }: { request: Row; onClose: ()
|
|
|
306
331
|
]
|
|
307
332
|
return (
|
|
308
333
|
<div data-slot="replay-devtools-detail">
|
|
309
|
-
<div data-slot="replay-devtools-detail-tabs"
|
|
334
|
+
<div data-slot="replay-devtools-detail-tabs">
|
|
310
335
|
<button type="button" aria-label="Close request details" data-slot="replay-devtools-close" onClick={onClose}><X size={13} /></button>
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
{t
|
|
314
|
-
|
|
315
|
-
|
|
336
|
+
<div data-slot="replay-devtools-tablist" role="tablist" aria-label={`${request.name} details`}>
|
|
337
|
+
{(['headers', 'payload', 'response'] as const).map((t) => (
|
|
338
|
+
<button key={t} type="button" role="tab" aria-selected={tab === t} onClick={() => setTab(t)}>
|
|
339
|
+
{t[0]!.toUpperCase() + t.slice(1)}
|
|
340
|
+
</button>
|
|
341
|
+
))}
|
|
342
|
+
</div>
|
|
316
343
|
</div>
|
|
317
344
|
<div data-slot="replay-devtools-detail-body">
|
|
318
345
|
{tab === 'headers' ? (
|