@lvce-editor/chat-debug-view 10.7.0 → 10.9.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/chatDebugViewWorkerMain.js +1108 -191
- package/package.json +1 -1
|
@@ -1446,6 +1446,7 @@ const ImageCouldNotBeLoaded = 'image could not be loaded';
|
|
|
1446
1446
|
const InvalidSessionId = 'Invalid session id';
|
|
1447
1447
|
const InvalidUriEncoding = 'Invalid URI encoding';
|
|
1448
1448
|
const InvalidUriFormat = 'Invalid URI format';
|
|
1449
|
+
const Method$1 = 'Method';
|
|
1449
1450
|
const MissingUri = 'Missing URI';
|
|
1450
1451
|
const Network$1 = 'Network';
|
|
1451
1452
|
const NoChatSessionFound = 'No chat session found for sessionId "{PH1}".';
|
|
@@ -1528,6 +1529,9 @@ const invalidUriFormat = () => {
|
|
|
1528
1529
|
const missingUri = () => {
|
|
1529
1530
|
return i18nString(MissingUri);
|
|
1530
1531
|
};
|
|
1532
|
+
const method = () => {
|
|
1533
|
+
return i18nString(Method$1);
|
|
1534
|
+
};
|
|
1531
1535
|
const network = () => {
|
|
1532
1536
|
return i18nString(Network$1);
|
|
1533
1537
|
};
|
|
@@ -1830,14 +1834,19 @@ const parseFilterValue = filterValue => {
|
|
|
1830
1834
|
};
|
|
1831
1835
|
|
|
1832
1836
|
const Type = 'type';
|
|
1837
|
+
const Method = 'method';
|
|
1833
1838
|
const Duration = 'duration';
|
|
1834
1839
|
const Status$1 = 'status';
|
|
1835
|
-
const tableColumnNames = [Type, Status$1, Duration];
|
|
1840
|
+
const tableColumnNames = [Type, Method, Status$1, Duration];
|
|
1836
1841
|
const createTableColumns = () => {
|
|
1837
1842
|
return [{
|
|
1838
1843
|
isVisible: true,
|
|
1839
1844
|
label: type(),
|
|
1840
1845
|
name: Type
|
|
1846
|
+
}, {
|
|
1847
|
+
isVisible: true,
|
|
1848
|
+
label: method(),
|
|
1849
|
+
name: Method
|
|
1841
1850
|
}, {
|
|
1842
1851
|
isVisible: true,
|
|
1843
1852
|
label: status(),
|
|
@@ -1877,6 +1886,8 @@ const getTableColumnLabel = (tableColumns, name) => {
|
|
|
1877
1886
|
switch (name) {
|
|
1878
1887
|
case Duration:
|
|
1879
1888
|
return duration();
|
|
1889
|
+
case Method:
|
|
1890
|
+
return method();
|
|
1880
1891
|
case Status$1:
|
|
1881
1892
|
return status();
|
|
1882
1893
|
case Type:
|
|
@@ -1888,6 +1899,7 @@ const getTableColumnLabel = (tableColumns, name) => {
|
|
|
1888
1899
|
|
|
1889
1900
|
const defaultTableColumnWidths = {
|
|
1890
1901
|
duration: 110,
|
|
1902
|
+
method: 90,
|
|
1891
1903
|
status: 110,
|
|
1892
1904
|
type: 260
|
|
1893
1905
|
};
|
|
@@ -1921,6 +1933,7 @@ const getTableWidthFromClientX = (viewX, width, clientX) => {
|
|
|
1921
1933
|
|
|
1922
1934
|
const minimumTableColumnWidths = {
|
|
1923
1935
|
[Duration]: 80,
|
|
1936
|
+
[Method]: 56,
|
|
1924
1937
|
[Status$1]: 56,
|
|
1925
1938
|
[Type]: 80
|
|
1926
1939
|
};
|
|
@@ -1989,7 +2002,7 @@ const getResizedTableColumnWidths = (width, tableWidth, visibleTableColumns, tab
|
|
|
1989
2002
|
};
|
|
1990
2003
|
|
|
1991
2004
|
const isSameTableColumnWidths = (first, second) => {
|
|
1992
|
-
return first.type === second.type && first.duration === second.duration && first.status === second.status;
|
|
2005
|
+
return first.type === second.type && first.method === second.method && first.duration === second.duration && first.status === second.status;
|
|
1993
2006
|
};
|
|
1994
2007
|
|
|
1995
2008
|
const isFiniteNumber = value => {
|
|
@@ -2001,7 +2014,7 @@ const isTableColumnWidths = value => {
|
|
|
2001
2014
|
return false;
|
|
2002
2015
|
}
|
|
2003
2016
|
const record = value;
|
|
2004
|
-
return isFiniteNumber(record.type) && isFiniteNumber(record.duration) && isFiniteNumber(record.status);
|
|
2017
|
+
return isFiniteNumber(record.type) && isFiniteNumber(record.method) && isFiniteNumber(record.duration) && isFiniteNumber(record.status);
|
|
2005
2018
|
};
|
|
2006
2019
|
|
|
2007
2020
|
const validEventCategoryFilters = new Set([All, Network, Stream, Tools, Ui]);
|
|
@@ -2210,6 +2223,9 @@ const createDefaultState = () => {
|
|
|
2210
2223
|
databaseName: 'lvce-chat-view-sessions',
|
|
2211
2224
|
dataBaseVersion: 2,
|
|
2212
2225
|
detailTabs: createDetailTabs(),
|
|
2226
|
+
devtoolsRootGap: 4,
|
|
2227
|
+
devtoolsTimelineHeight: 88,
|
|
2228
|
+
devtoolsTopHeight: 28,
|
|
2213
2229
|
errorMessage: '',
|
|
2214
2230
|
events: [],
|
|
2215
2231
|
eventStoreName: 'chat-view-events',
|
|
@@ -2222,6 +2238,9 @@ const createDefaultState = () => {
|
|
|
2222
2238
|
platform: 0,
|
|
2223
2239
|
previewTextCursorColumnIndex: null,
|
|
2224
2240
|
previewTextCursorRowIndex: null,
|
|
2241
|
+
previewTextDeltaY: 0,
|
|
2242
|
+
previewTextScrollBarHandleOffset: 0,
|
|
2243
|
+
previewTextScrollBarPointerActive: false,
|
|
2225
2244
|
sashPointerActive: false,
|
|
2226
2245
|
selectedEvent: null,
|
|
2227
2246
|
selectedEventId: null,
|
|
@@ -2293,7 +2312,7 @@ const RenderFocusContext = 4;
|
|
|
2293
2312
|
const RenderFocus = 5;
|
|
2294
2313
|
|
|
2295
2314
|
const diff = (oldState, newState) => {
|
|
2296
|
-
if (oldState.categoryFilters !== newState.categoryFilters || oldState.detailTabs !== newState.detailTabs || oldState.errorMessage !== newState.errorMessage || oldState.events !== newState.events || oldState.filterValue !== newState.filterValue || oldState.previewTextCursorColumnIndex !== newState.previewTextCursorColumnIndex || oldState.previewTextCursorRowIndex !== newState.previewTextCursorRowIndex || oldState.sessionId !== newState.sessionId || oldState.showEventStreamFinishedEvents !== newState.showEventStreamFinishedEvents || oldState.showInputEvents !== newState.showInputEvents || oldState.showResponsePartEvents !== newState.showResponsePartEvents || oldState.sortColumn !== newState.sortColumn || oldState.sortDescending !== newState.sortDescending || oldState.tableColumnWidths !== newState.tableColumnWidths || oldState.tableDeltaY !== newState.tableDeltaY || oldState.tableMaxLineY !== newState.tableMaxLineY || oldState.tableMinLineY !== newState.tableMinLineY || oldState.tableWidth !== newState.tableWidth || oldState.timelineEndSeconds !== newState.timelineEndSeconds || oldState.timelineHeight !== newState.timelineHeight || oldState.timelineHoverPercent !== newState.timelineHoverPercent || oldState.timelineHoverSeconds !== newState.timelineHoverSeconds || oldState.timelineSelectionActive !== newState.timelineSelectionActive || oldState.timelineSelectionAnchorSeconds !== newState.timelineSelectionAnchorSeconds || oldState.timelineSelectionFocusSeconds !== newState.timelineSelectionFocusSeconds || oldState.timelineStartSeconds !== newState.timelineStartSeconds || oldState.useDevtoolsLayout !== newState.useDevtoolsLayout || oldState.tableColumns !== newState.tableColumns || oldState.selectedEvent !== newState.selectedEvent || oldState.selectedEventIndex !== newState.selectedEventIndex || oldState.focus !== newState.focus || oldState.width !== newState.width || oldState.uid !== newState.uid) {
|
|
2315
|
+
if (oldState.categoryFilters !== newState.categoryFilters || oldState.detailTabs !== newState.detailTabs || oldState.errorMessage !== newState.errorMessage || oldState.events !== newState.events || oldState.filterValue !== newState.filterValue || oldState.previewTextCursorColumnIndex !== newState.previewTextCursorColumnIndex || oldState.previewTextCursorRowIndex !== newState.previewTextCursorRowIndex || oldState.previewTextDeltaY !== newState.previewTextDeltaY || oldState.sessionId !== newState.sessionId || oldState.showEventStreamFinishedEvents !== newState.showEventStreamFinishedEvents || oldState.showInputEvents !== newState.showInputEvents || oldState.showResponsePartEvents !== newState.showResponsePartEvents || oldState.sortColumn !== newState.sortColumn || oldState.sortDescending !== newState.sortDescending || oldState.tableColumnWidths !== newState.tableColumnWidths || oldState.tableDeltaY !== newState.tableDeltaY || oldState.tableMaxLineY !== newState.tableMaxLineY || oldState.tableMinLineY !== newState.tableMinLineY || oldState.tableWidth !== newState.tableWidth || oldState.timelineEndSeconds !== newState.timelineEndSeconds || oldState.timelineHeight !== newState.timelineHeight || oldState.timelineHoverPercent !== newState.timelineHoverPercent || oldState.timelineHoverSeconds !== newState.timelineHoverSeconds || oldState.timelineSelectionActive !== newState.timelineSelectionActive || oldState.timelineSelectionAnchorSeconds !== newState.timelineSelectionAnchorSeconds || oldState.timelineSelectionFocusSeconds !== newState.timelineSelectionFocusSeconds || oldState.timelineStartSeconds !== newState.timelineStartSeconds || oldState.useDevtoolsLayout !== newState.useDevtoolsLayout || oldState.tableColumns !== newState.tableColumns || oldState.selectedEvent !== newState.selectedEvent || oldState.selectedEventIndex !== newState.selectedEventIndex || oldState.focus !== newState.focus || oldState.width !== newState.width || oldState.uid !== newState.uid) {
|
|
2297
2316
|
return [RenderIncremental, RenderCss];
|
|
2298
2317
|
}
|
|
2299
2318
|
return [];
|
|
@@ -2501,7 +2520,7 @@ const getVisibleEvents = (events, showInputEvents, showResponsePartEvents, showE
|
|
|
2501
2520
|
|
|
2502
2521
|
const isNetworkEvent = event => {
|
|
2503
2522
|
const normalizedType = event.type.toLowerCase();
|
|
2504
|
-
return normalizedType === 'request' || normalizedType === 'response' || normalizedType === 'handle-response' || normalizedType.includes('fetch') || normalizedType.includes('xhr');
|
|
2523
|
+
return normalizedType === 'request' || normalizedType === 'ai-request' || normalizedType === 'response' || normalizedType === 'ai-response-success' || normalizedType === 'handle-response' || normalizedType.includes('fetch') || normalizedType.includes('xhr');
|
|
2505
2524
|
};
|
|
2506
2525
|
|
|
2507
2526
|
const isStreamEvent = event => {
|
|
@@ -2574,7 +2593,6 @@ const getEventTableDurationText = event => {
|
|
|
2574
2593
|
return `${durationText.slice(0, -2)} ms`;
|
|
2575
2594
|
};
|
|
2576
2595
|
|
|
2577
|
-
const toolExecutionTypePrefix = 'tool-execution';
|
|
2578
2596
|
const getToolName = event => {
|
|
2579
2597
|
if (typeof event.toolName === 'string' && event.toolName) {
|
|
2580
2598
|
return event.toolName;
|
|
@@ -2596,6 +2614,8 @@ const getToolName = event => {
|
|
|
2596
2614
|
}
|
|
2597
2615
|
return name;
|
|
2598
2616
|
};
|
|
2617
|
+
|
|
2618
|
+
const toolExecutionTypePrefix = 'tool-execution';
|
|
2599
2619
|
const getEventTypeLabel = event => {
|
|
2600
2620
|
if (!event.type.startsWith(toolExecutionTypePrefix)) {
|
|
2601
2621
|
return event.type;
|
|
@@ -2748,11 +2768,11 @@ const devtoolsTableScrollBarWidth = 12;
|
|
|
2748
2768
|
const devtoolsTableSummaryHeight = 24;
|
|
2749
2769
|
const minimumDevtoolsTableScrollBarHeight = 20;
|
|
2750
2770
|
|
|
2751
|
-
const devtoolsRootGap = 4;
|
|
2752
|
-
const devtoolsTopHeight = 28;
|
|
2753
|
-
const devtoolsTimelineHeight = 88;
|
|
2754
2771
|
const getTableBodyY = (state, hasTimeline) => {
|
|
2755
2772
|
const {
|
|
2773
|
+
devtoolsRootGap,
|
|
2774
|
+
devtoolsTimelineHeight,
|
|
2775
|
+
devtoolsTopHeight,
|
|
2756
2776
|
y
|
|
2757
2777
|
} = state;
|
|
2758
2778
|
return y + viewPadding + devtoolsTopHeight + devtoolsRootGap + (hasTimeline ? devtoolsTimelineHeight : 0) + devtoolsTableHeaderHeight;
|
|
@@ -2990,6 +3010,9 @@ const selectEventAtIndex = async (state, selectedEventIndex, dependencies = sele
|
|
|
2990
3010
|
detailTabs: createDetailTabs(selectedDetailTab, resolvedSelectedEvent),
|
|
2991
3011
|
previewTextCursorColumnIndex: null,
|
|
2992
3012
|
previewTextCursorRowIndex: null,
|
|
3013
|
+
previewTextDeltaY: 0,
|
|
3014
|
+
previewTextScrollBarHandleOffset: 0,
|
|
3015
|
+
previewTextScrollBarPointerActive: false,
|
|
2993
3016
|
selectedEvent: resolvedSelectedEvent,
|
|
2994
3017
|
selectedEventId: selectedEvent.eventId,
|
|
2995
3018
|
selectedEventIndex
|
|
@@ -3332,6 +3355,9 @@ const restoreSelectedEvent = async state => {
|
|
|
3332
3355
|
...state,
|
|
3333
3356
|
previewTextCursorColumnIndex: null,
|
|
3334
3357
|
previewTextCursorRowIndex: null,
|
|
3358
|
+
previewTextDeltaY: 0,
|
|
3359
|
+
previewTextScrollBarHandleOffset: 0,
|
|
3360
|
+
previewTextScrollBarPointerActive: false,
|
|
3335
3361
|
selectedEvent: null,
|
|
3336
3362
|
selectedEventIndex: null
|
|
3337
3363
|
};
|
|
@@ -3343,6 +3369,9 @@ const restoreSelectedEvent = async state => {
|
|
|
3343
3369
|
...state,
|
|
3344
3370
|
previewTextCursorColumnIndex: null,
|
|
3345
3371
|
previewTextCursorRowIndex: null,
|
|
3372
|
+
previewTextDeltaY: 0,
|
|
3373
|
+
previewTextScrollBarHandleOffset: 0,
|
|
3374
|
+
previewTextScrollBarPointerActive: false,
|
|
3346
3375
|
selectedEvent: null,
|
|
3347
3376
|
selectedEventId: null,
|
|
3348
3377
|
selectedEventIndex: null
|
|
@@ -3354,6 +3383,9 @@ const restoreSelectedEvent = async state => {
|
|
|
3354
3383
|
...state,
|
|
3355
3384
|
previewTextCursorColumnIndex: null,
|
|
3356
3385
|
previewTextCursorRowIndex: null,
|
|
3386
|
+
previewTextDeltaY: 0,
|
|
3387
|
+
previewTextScrollBarHandleOffset: 0,
|
|
3388
|
+
previewTextScrollBarPointerActive: false,
|
|
3357
3389
|
selectedEvent: null,
|
|
3358
3390
|
selectedEventId: null,
|
|
3359
3391
|
selectedEventIndex: null
|
|
@@ -3365,6 +3397,9 @@ const restoreSelectedEvent = async state => {
|
|
|
3365
3397
|
...state,
|
|
3366
3398
|
previewTextCursorColumnIndex: null,
|
|
3367
3399
|
previewTextCursorRowIndex: null,
|
|
3400
|
+
previewTextDeltaY: 0,
|
|
3401
|
+
previewTextScrollBarHandleOffset: 0,
|
|
3402
|
+
previewTextScrollBarPointerActive: false,
|
|
3368
3403
|
selectedEvent: resolvedSelectedEvent,
|
|
3369
3404
|
selectedEventId: selectedEvent.eventId,
|
|
3370
3405
|
selectedEventIndex
|
|
@@ -3449,6 +3484,9 @@ const handleCloseDetails$1 = state => {
|
|
|
3449
3484
|
...state,
|
|
3450
3485
|
previewTextCursorColumnIndex: null,
|
|
3451
3486
|
previewTextCursorRowIndex: null,
|
|
3487
|
+
previewTextDeltaY: 0,
|
|
3488
|
+
previewTextScrollBarHandleOffset: 0,
|
|
3489
|
+
previewTextScrollBarPointerActive: false,
|
|
3452
3490
|
selectedEvent: null,
|
|
3453
3491
|
selectedEventId: null,
|
|
3454
3492
|
selectedEventIndex: null
|
|
@@ -3880,26 +3918,42 @@ const getResponseContentText = content => {
|
|
|
3880
3918
|
} = content;
|
|
3881
3919
|
return typeof text === 'string' ? text : undefined;
|
|
3882
3920
|
};
|
|
3883
|
-
const
|
|
3884
|
-
if (event.type
|
|
3885
|
-
|
|
3886
|
-
|
|
3887
|
-
|
|
3888
|
-
value
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3921
|
+
const getResponseOutput = event => {
|
|
3922
|
+
if (event.type === 'sse-response-completed') {
|
|
3923
|
+
const {
|
|
3924
|
+
value
|
|
3925
|
+
} = event;
|
|
3926
|
+
if (!value || typeof value !== 'object') {
|
|
3927
|
+
return undefined;
|
|
3928
|
+
}
|
|
3929
|
+
const {
|
|
3930
|
+
response
|
|
3931
|
+
} = value;
|
|
3932
|
+
if (!response || typeof response !== 'object') {
|
|
3933
|
+
return undefined;
|
|
3934
|
+
}
|
|
3935
|
+
const {
|
|
3936
|
+
output
|
|
3937
|
+
} = response;
|
|
3938
|
+
return Array.isArray(output) ? output : undefined;
|
|
3892
3939
|
}
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3940
|
+
if (event.type === 'ai-response') {
|
|
3941
|
+
const {
|
|
3942
|
+
value
|
|
3943
|
+
} = event;
|
|
3944
|
+
if (!value || typeof value !== 'object') {
|
|
3945
|
+
return undefined;
|
|
3946
|
+
}
|
|
3947
|
+
const {
|
|
3948
|
+
output
|
|
3949
|
+
} = value;
|
|
3950
|
+
return Array.isArray(output) ? output : undefined;
|
|
3898
3951
|
}
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3952
|
+
return undefined;
|
|
3953
|
+
};
|
|
3954
|
+
const getResponsePreviewText = event => {
|
|
3955
|
+
const output = getResponseOutput(event);
|
|
3956
|
+
if (!output || output.length === 0) {
|
|
3903
3957
|
return undefined;
|
|
3904
3958
|
}
|
|
3905
3959
|
const [firstOutput] = output;
|
|
@@ -3915,9 +3969,9 @@ const getPreviewMessageText = event => {
|
|
|
3915
3969
|
if (isChatMessageUpdatedEvent(event) && typeof event.text === 'string') {
|
|
3916
3970
|
return event.text;
|
|
3917
3971
|
}
|
|
3918
|
-
const
|
|
3919
|
-
if (
|
|
3920
|
-
return
|
|
3972
|
+
const responsePreviewText = getResponsePreviewText(event);
|
|
3973
|
+
if (responsePreviewText !== undefined) {
|
|
3974
|
+
return responsePreviewText;
|
|
3921
3975
|
}
|
|
3922
3976
|
if (!isChatMessageAddedEvent(event)) {
|
|
3923
3977
|
return undefined;
|
|
@@ -4004,16 +4058,21 @@ const getWriteFilePreviewText = (event, name) => {
|
|
|
4004
4058
|
const {
|
|
4005
4059
|
arguments: toolArguments
|
|
4006
4060
|
} = event;
|
|
4007
|
-
if (typeof toolArguments !== 'object' || toolArguments === null || !Object.hasOwn(toolArguments, 'content')) {
|
|
4061
|
+
if (typeof toolArguments !== 'object' || toolArguments === null || !Object.hasOwn(toolArguments, 'content') || !Object.hasOwn(toolArguments, 'uri')) {
|
|
4008
4062
|
return undefined;
|
|
4009
4063
|
}
|
|
4010
4064
|
const {
|
|
4011
|
-
content
|
|
4065
|
+
content,
|
|
4066
|
+
uri
|
|
4012
4067
|
} = toolArguments;
|
|
4013
|
-
if (typeof content !== 'string') {
|
|
4068
|
+
if (typeof content !== 'string' || typeof uri !== 'string') {
|
|
4014
4069
|
return undefined;
|
|
4015
4070
|
}
|
|
4016
|
-
return
|
|
4071
|
+
return {
|
|
4072
|
+
content,
|
|
4073
|
+
previewType: 'write-file',
|
|
4074
|
+
uri
|
|
4075
|
+
};
|
|
4017
4076
|
};
|
|
4018
4077
|
|
|
4019
4078
|
const getPreviewEvent = event => {
|
|
@@ -4064,6 +4123,77 @@ const getPreviewTextCursorStyle = cursor => {
|
|
|
4064
4123
|
return `height: ${previewTextRowHeight}px; left: ${cursor.columnIndex * defaultPreviewTextColumnWidth}px; top: ${cursor.rowIndex * previewTextRowHeight}px; width: 0px;`;
|
|
4065
4124
|
};
|
|
4066
4125
|
|
|
4126
|
+
const isWriteFilePreview = value => {
|
|
4127
|
+
return typeof value === 'object' && value !== null && value.previewType === 'write-file' && typeof value.content === 'string' && typeof value.uri === 'string';
|
|
4128
|
+
};
|
|
4129
|
+
|
|
4130
|
+
const getPreviewTextValue = selectedEvent => {
|
|
4131
|
+
if (!selectedEvent) {
|
|
4132
|
+
return undefined;
|
|
4133
|
+
}
|
|
4134
|
+
const previewEvent = getPreviewEvent(selectedEvent);
|
|
4135
|
+
if (typeof previewEvent === 'string') {
|
|
4136
|
+
return previewEvent;
|
|
4137
|
+
}
|
|
4138
|
+
if (isWriteFilePreview(previewEvent)) {
|
|
4139
|
+
return previewEvent.content;
|
|
4140
|
+
}
|
|
4141
|
+
return undefined;
|
|
4142
|
+
};
|
|
4143
|
+
const getPreviewTextLineCount = selectedEvent => {
|
|
4144
|
+
const value = getPreviewTextValue(selectedEvent);
|
|
4145
|
+
if (value === undefined) {
|
|
4146
|
+
return 0;
|
|
4147
|
+
}
|
|
4148
|
+
return value.split('\n').length;
|
|
4149
|
+
};
|
|
4150
|
+
const getPreviewTextViewportHeight = state => {
|
|
4151
|
+
if (!state.selectedEvent) {
|
|
4152
|
+
return 0;
|
|
4153
|
+
}
|
|
4154
|
+
return getTableBodyHeight(state, 1);
|
|
4155
|
+
};
|
|
4156
|
+
const getPreviewTextMaxDeltaY = (lineCount, viewportHeight) => {
|
|
4157
|
+
return Math.max(lineCount * previewTextRowHeight - viewportHeight, 0);
|
|
4158
|
+
};
|
|
4159
|
+
const clampPreviewTextDeltaY = (deltaY, lineCount, viewportHeight) => {
|
|
4160
|
+
const maxDeltaY = getPreviewTextMaxDeltaY(lineCount, viewportHeight);
|
|
4161
|
+
if (deltaY < 0) {
|
|
4162
|
+
return 0;
|
|
4163
|
+
}
|
|
4164
|
+
if (deltaY > maxDeltaY) {
|
|
4165
|
+
return maxDeltaY;
|
|
4166
|
+
}
|
|
4167
|
+
return deltaY;
|
|
4168
|
+
};
|
|
4169
|
+
const getPreviewVirtualizationState = (selectedEvent, viewportHeight, deltaY) => {
|
|
4170
|
+
const totalLineCount = getPreviewTextLineCount(selectedEvent);
|
|
4171
|
+
const clampedDeltaY = clampPreviewTextDeltaY(deltaY, totalLineCount, viewportHeight);
|
|
4172
|
+
const startLineY = Math.floor(clampedDeltaY / previewTextRowHeight);
|
|
4173
|
+
const visibleLineCount = viewportHeight <= 0 ? 0 : Math.max(1, Math.ceil(viewportHeight / previewTextRowHeight));
|
|
4174
|
+
const endLineY = Math.min(totalLineCount, startLineY + visibleLineCount);
|
|
4175
|
+
const maxDeltaY = getPreviewTextMaxDeltaY(totalLineCount, viewportHeight);
|
|
4176
|
+
const scrollBarHeight = getScrollBarHeight(totalLineCount, viewportHeight);
|
|
4177
|
+
const scrollBarOffset = getScrollBarOffset(clampedDeltaY, maxDeltaY, viewportHeight, scrollBarHeight);
|
|
4178
|
+
return {
|
|
4179
|
+
deltaY: clampedDeltaY,
|
|
4180
|
+
endLineY,
|
|
4181
|
+
maxDeltaY,
|
|
4182
|
+
scrollBarHeight,
|
|
4183
|
+
scrollBarOffset,
|
|
4184
|
+
showScrollBar: scrollBarHeight > 0,
|
|
4185
|
+
startLineY,
|
|
4186
|
+
totalLineCount,
|
|
4187
|
+
viewportHeight
|
|
4188
|
+
};
|
|
4189
|
+
};
|
|
4190
|
+
const setPreviewTextDeltaY = (state, deltaY) => {
|
|
4191
|
+
return {
|
|
4192
|
+
...state,
|
|
4193
|
+
previewTextDeltaY: clampPreviewTextDeltaY(deltaY, getPreviewTextLineCount(state.selectedEvent), getPreviewTextViewportHeight(state))
|
|
4194
|
+
};
|
|
4195
|
+
};
|
|
4196
|
+
|
|
4067
4197
|
const hasNumberedTextPreview = (state, previewEvent) => {
|
|
4068
4198
|
if (typeof previewEvent !== 'string') {
|
|
4069
4199
|
return false;
|
|
@@ -4081,7 +4211,8 @@ const handlePreviewTextPointerDown = (state, x, y) => {
|
|
|
4081
4211
|
if (!hasNumberedTextPreview(state, previewEvent)) {
|
|
4082
4212
|
return state;
|
|
4083
4213
|
}
|
|
4084
|
-
const
|
|
4214
|
+
const deltaY = clampPreviewTextDeltaY(state.previewTextDeltaY, getPreviewTextLineCount(state.selectedEvent), getPreviewTextViewportHeight(state));
|
|
4215
|
+
const cursor = getPreviewTextCursorFromPoint(previewEvent, x, y + deltaY);
|
|
4085
4216
|
if (state.previewTextCursorColumnIndex === cursor.columnIndex && state.previewTextCursorRowIndex === cursor.rowIndex) {
|
|
4086
4217
|
return state;
|
|
4087
4218
|
}
|
|
@@ -4092,6 +4223,87 @@ const handlePreviewTextPointerDown = (state, x, y) => {
|
|
|
4092
4223
|
};
|
|
4093
4224
|
};
|
|
4094
4225
|
|
|
4226
|
+
const getPreviewTextBodyY = state => {
|
|
4227
|
+
return getTableBodyY(state, true);
|
|
4228
|
+
};
|
|
4229
|
+
|
|
4230
|
+
const getHandleOffsetAndPercent$1 = (viewportHeight, scrollBarHeight, relativeY) => {
|
|
4231
|
+
const halfScrollBarHeight = scrollBarHeight / 2;
|
|
4232
|
+
if (relativeY <= halfScrollBarHeight) {
|
|
4233
|
+
return {
|
|
4234
|
+
handleOffset: relativeY,
|
|
4235
|
+
percent: 0
|
|
4236
|
+
};
|
|
4237
|
+
}
|
|
4238
|
+
if (relativeY <= viewportHeight - halfScrollBarHeight) {
|
|
4239
|
+
return {
|
|
4240
|
+
handleOffset: halfScrollBarHeight,
|
|
4241
|
+
percent: (relativeY - halfScrollBarHeight) / Math.max(1, viewportHeight - scrollBarHeight)
|
|
4242
|
+
};
|
|
4243
|
+
}
|
|
4244
|
+
return {
|
|
4245
|
+
handleOffset: scrollBarHeight - viewportHeight + relativeY,
|
|
4246
|
+
percent: 1
|
|
4247
|
+
};
|
|
4248
|
+
};
|
|
4249
|
+
const handlePreviewTextScrollBarPointerDown = (state, eventY) => {
|
|
4250
|
+
const viewportHeight = getPreviewTextViewportHeight(state);
|
|
4251
|
+
const virtualization = getPreviewVirtualizationState(state.selectedEvent, viewportHeight, state.previewTextDeltaY);
|
|
4252
|
+
const bodyY = getPreviewTextBodyY(state);
|
|
4253
|
+
const relativeY = eventY - bodyY;
|
|
4254
|
+
if (virtualization.viewportHeight === 0 || virtualization.scrollBarHeight === 0) {
|
|
4255
|
+
return state;
|
|
4256
|
+
}
|
|
4257
|
+
const {
|
|
4258
|
+
handleOffset,
|
|
4259
|
+
percent
|
|
4260
|
+
} = getHandleOffsetAndPercent$1(virtualization.viewportHeight, virtualization.scrollBarHeight, relativeY);
|
|
4261
|
+
const nextState = setPreviewTextDeltaY(state, percent * virtualization.maxDeltaY);
|
|
4262
|
+
return {
|
|
4263
|
+
...nextState,
|
|
4264
|
+
previewTextScrollBarHandleOffset: handleOffset,
|
|
4265
|
+
previewTextScrollBarPointerActive: true
|
|
4266
|
+
};
|
|
4267
|
+
};
|
|
4268
|
+
|
|
4269
|
+
const handlePreviewTextScrollBarPointerMove = (state, eventY) => {
|
|
4270
|
+
if (!state.previewTextScrollBarPointerActive) {
|
|
4271
|
+
return state;
|
|
4272
|
+
}
|
|
4273
|
+
const viewportHeight = getPreviewTextViewportHeight(state);
|
|
4274
|
+
const virtualization = getPreviewVirtualizationState(state.selectedEvent, viewportHeight, state.previewTextDeltaY);
|
|
4275
|
+
if (viewportHeight === 0 || virtualization.scrollBarHeight === 0) {
|
|
4276
|
+
return state;
|
|
4277
|
+
}
|
|
4278
|
+
const relativeY = eventY - getPreviewTextBodyY(state);
|
|
4279
|
+
const nextHandleTop = Math.max(0, Math.min(viewportHeight - virtualization.scrollBarHeight, relativeY - state.previewTextScrollBarHandleOffset));
|
|
4280
|
+
const percent = nextHandleTop / Math.max(1, viewportHeight - virtualization.scrollBarHeight);
|
|
4281
|
+
const nextState = setPreviewTextDeltaY(state, percent * virtualization.maxDeltaY);
|
|
4282
|
+
return {
|
|
4283
|
+
...nextState,
|
|
4284
|
+
previewTextScrollBarPointerActive: true
|
|
4285
|
+
};
|
|
4286
|
+
};
|
|
4287
|
+
|
|
4288
|
+
const handlePreviewTextScrollBarPointerUp = state => {
|
|
4289
|
+
if (!state.previewTextScrollBarPointerActive && state.previewTextScrollBarHandleOffset === 0) {
|
|
4290
|
+
return state;
|
|
4291
|
+
}
|
|
4292
|
+
return {
|
|
4293
|
+
...state,
|
|
4294
|
+
previewTextScrollBarHandleOffset: 0,
|
|
4295
|
+
previewTextScrollBarPointerActive: false
|
|
4296
|
+
};
|
|
4297
|
+
};
|
|
4298
|
+
|
|
4299
|
+
const handlePreviewTextWheel = (state, deltaY) => {
|
|
4300
|
+
return setPreviewTextDeltaY(state, state.previewTextDeltaY + deltaY);
|
|
4301
|
+
};
|
|
4302
|
+
|
|
4303
|
+
const handleRootContextMenu = state => {
|
|
4304
|
+
return state;
|
|
4305
|
+
};
|
|
4306
|
+
|
|
4095
4307
|
const handleSashPointerDown = (state, eventX, eventY) => {
|
|
4096
4308
|
if (state.sashPointerActive) {
|
|
4097
4309
|
return state;
|
|
@@ -4152,6 +4364,8 @@ const getTableResizerId = name => {
|
|
|
4152
4364
|
switch (name) {
|
|
4153
4365
|
case 'ResizerOne':
|
|
4154
4366
|
return 1;
|
|
4367
|
+
case 'ResizerThree':
|
|
4368
|
+
return 3;
|
|
4155
4369
|
case 'ResizerTwo':
|
|
4156
4370
|
return 2;
|
|
4157
4371
|
default:
|
|
@@ -4476,6 +4690,9 @@ const setUseDevtoolsLayout = (state, checked) => {
|
|
|
4476
4690
|
...state,
|
|
4477
4691
|
previewTextCursorColumnIndex: useDevtoolsLayout && selectedEventIndex !== null ? state.previewTextCursorColumnIndex : null,
|
|
4478
4692
|
previewTextCursorRowIndex: useDevtoolsLayout && selectedEventIndex !== null ? state.previewTextCursorRowIndex : null,
|
|
4693
|
+
previewTextDeltaY: useDevtoolsLayout && selectedEventIndex !== null ? state.previewTextDeltaY : 0,
|
|
4694
|
+
previewTextScrollBarHandleOffset: 0,
|
|
4695
|
+
previewTextScrollBarPointerActive: false,
|
|
4479
4696
|
selectedEvent: useDevtoolsLayout && selectedEventIndex !== null ? state.selectedEvent : null,
|
|
4480
4697
|
selectedEventId: useDevtoolsLayout && selectedEventIndex !== null ? state.selectedEventId : null,
|
|
4481
4698
|
selectedEventIndex,
|
|
@@ -4625,14 +4842,17 @@ const getCss = state => {
|
|
|
4625
4842
|
const tableContentWidth = Math.max(0, tableWidth - (showScrollBar ? devtoolsTableScrollBarWidth : 0));
|
|
4626
4843
|
const detailsWidth = hasSelectedEvent ? getDetailsWidth(state.width, state.tableWidth) : 0;
|
|
4627
4844
|
const detailsLineNumberWidth = getDetailsLineNumberWidth(state);
|
|
4845
|
+
const previewTextViewportHeight = getPreviewTextViewportHeight(state);
|
|
4846
|
+
const previewVirtualization = getPreviewVirtualizationState(state.selectedEvent, previewTextViewportHeight, state.previewTextDeltaY);
|
|
4628
4847
|
let topSize = 60;
|
|
4629
4848
|
if (state.width >= state.largeBreakpoint) {
|
|
4630
4849
|
topSize = 30;
|
|
4631
4850
|
}
|
|
4632
4851
|
const tableColumnLayout = getTableColumnLayout(tableContentWidth, getVisibleTableColumns(state.tableColumns), state.tableColumnWidths);
|
|
4633
|
-
const [tableColZeroWidth = 0, tableColOneWidth = 0, tableColTwoWidth = 0] = tableColumnLayout.visibleColumnWidths;
|
|
4852
|
+
const [tableColZeroWidth = 0, tableColOneWidth = 0, tableColTwoWidth = 0, tableColThreeWidth = 0] = tableColumnLayout.visibleColumnWidths;
|
|
4634
4853
|
const resizerOneLeft = tableColumnLayout.resizerLefts[0] ?? 0;
|
|
4635
4854
|
const resizerTwoLeft = tableColumnLayout.resizerLefts[1] ?? 0;
|
|
4855
|
+
const resizerThreeLeft = tableColumnLayout.resizerLefts[2] ?? 0;
|
|
4636
4856
|
const {
|
|
4637
4857
|
selectionEndPercent,
|
|
4638
4858
|
selectionStartPercent
|
|
@@ -4644,7 +4864,12 @@ const getCss = state => {
|
|
|
4644
4864
|
--ChatDebugViewTableColZeroWidth: ${tableColZeroWidth}px;
|
|
4645
4865
|
--ChatDebugViewTableColOneWidth: ${tableColOneWidth}px;
|
|
4646
4866
|
--ChatDebugViewTableColTwoWidth: ${tableColTwoWidth}px;
|
|
4867
|
+
--ChatDebugViewTableColThreeWidth: ${tableColThreeWidth}px;
|
|
4647
4868
|
--ChatDebugViewDetailsLineNumberWidth: ${detailsLineNumberWidth}px;
|
|
4869
|
+
--ChatDebugViewPreviewScrollBarHeight: ${previewVirtualization.scrollBarHeight}px;
|
|
4870
|
+
--ChatDebugViewPreviewScrollBarOffset: ${previewVirtualization.scrollBarOffset}px;
|
|
4871
|
+
--ChatDebugViewPreviewScrollBarWidth: ${previewVirtualization.showScrollBar ? devtoolsTableScrollBarWidth : 0}px;
|
|
4872
|
+
--ChatDebugViewPreviewViewportHeight: ${previewVirtualization.viewportHeight}px;
|
|
4648
4873
|
--ChatDebugViewDetailsWidth: ${detailsWidth}px;
|
|
4649
4874
|
--ChatDebugViewDurationColumnWidth: ${state.tableColumnWidths.duration}px;
|
|
4650
4875
|
--ChatDebugViewTableRowHeight: ${devtoolsTableRowHeight}px;
|
|
@@ -4653,6 +4878,7 @@ const getCss = state => {
|
|
|
4653
4878
|
--ChatDebugViewTableScrollBarWidth: ${showScrollBar ? devtoolsTableScrollBarWidth : 0}px;
|
|
4654
4879
|
--ResizerOneLeft: ${resizerOneLeft}px;
|
|
4655
4880
|
--ResizerTwoLeft: ${resizerTwoLeft}px;
|
|
4881
|
+
--ResizerThreeLeft: ${resizerThreeLeft}px;
|
|
4656
4882
|
--ChatDebugViewSashWidth: ${sashWidth}px;
|
|
4657
4883
|
--ChatDebugViewTableWidth: ${tableWidth}px;
|
|
4658
4884
|
--ChatDebugViewTimelineHeight: ${state.timelineHeight}px;
|
|
@@ -4700,6 +4926,36 @@ const getCss = state => {
|
|
|
4700
4926
|
width: var(--ChatDebugViewDetailsLineNumberWidth);
|
|
4701
4927
|
}
|
|
4702
4928
|
|
|
4929
|
+
.PreviewVirtualizedEditor {
|
|
4930
|
+
height: var(--ChatDebugViewPreviewViewportHeight);
|
|
4931
|
+
overflow: hidden;
|
|
4932
|
+
position: relative;
|
|
4933
|
+
}
|
|
4934
|
+
|
|
4935
|
+
.PreviewVirtualizedEditor .Editor {
|
|
4936
|
+
width: calc(100% - var(--ChatDebugViewPreviewScrollBarWidth));
|
|
4937
|
+
}
|
|
4938
|
+
|
|
4939
|
+
.PreviewTextScrollBar {
|
|
4940
|
+
background: rgba(255, 255, 255, 0.06);
|
|
4941
|
+
border-radius: 999px;
|
|
4942
|
+
height: var(--ChatDebugViewPreviewViewportHeight);
|
|
4943
|
+
position: absolute;
|
|
4944
|
+
right: 0;
|
|
4945
|
+
top: 0;
|
|
4946
|
+
width: var(--ChatDebugViewPreviewScrollBarWidth);
|
|
4947
|
+
}
|
|
4948
|
+
|
|
4949
|
+
.PreviewTextScrollBarThumb {
|
|
4950
|
+
background: rgba(255, 255, 255, 0.22);
|
|
4951
|
+
border-radius: 999px;
|
|
4952
|
+
height: var(--ChatDebugViewPreviewScrollBarHeight);
|
|
4953
|
+
left: 2px;
|
|
4954
|
+
position: absolute;
|
|
4955
|
+
top: var(--ChatDebugViewPreviewScrollBarOffset);
|
|
4956
|
+
width: calc(100% - 4px);
|
|
4957
|
+
}
|
|
4958
|
+
|
|
4703
4959
|
.TableScrollBar {
|
|
4704
4960
|
background: rgba(255, 255, 255, 0.06);
|
|
4705
4961
|
border-radius: 999px;
|
|
@@ -4720,6 +4976,38 @@ const getCss = state => {
|
|
|
4720
4976
|
width: calc(100% - 4px);
|
|
4721
4977
|
}
|
|
4722
4978
|
|
|
4979
|
+
.TokenText {
|
|
4980
|
+
color: var(--vscode-editor-foreground);
|
|
4981
|
+
}
|
|
4982
|
+
|
|
4983
|
+
.TokenString {
|
|
4984
|
+
color: var(--vscode-debugTokenExpression-string, #ce9178);
|
|
4985
|
+
}
|
|
4986
|
+
|
|
4987
|
+
.TokenNumeric {
|
|
4988
|
+
color: var(--vscode-debugTokenExpression-number, #b5cea8);
|
|
4989
|
+
}
|
|
4990
|
+
|
|
4991
|
+
.TokenBoolean {
|
|
4992
|
+
color: var(--vscode-debugTokenExpression-boolean, #569cd6);
|
|
4993
|
+
}
|
|
4994
|
+
|
|
4995
|
+
.TokenKey,
|
|
4996
|
+
.TokenAttributeName,
|
|
4997
|
+
.TokenPropertyName {
|
|
4998
|
+
color: var(--vscode-symbolIcon-propertyForeground, #9cdcfe);
|
|
4999
|
+
}
|
|
5000
|
+
|
|
5001
|
+
.TokenKeyword,
|
|
5002
|
+
.TokenTag,
|
|
5003
|
+
.TokenSelector {
|
|
5004
|
+
color: var(--vscode-symbolIcon-keywordForeground, #569cd6);
|
|
5005
|
+
}
|
|
5006
|
+
|
|
5007
|
+
.TokenComment {
|
|
5008
|
+
color: var(--vscode-editorLineNumber-foreground, #6a9955);
|
|
5009
|
+
}
|
|
5010
|
+
|
|
4723
5011
|
`;
|
|
4724
5012
|
};
|
|
4725
5013
|
|
|
@@ -5048,6 +5336,9 @@ const EditorRows = 'EditorRows';
|
|
|
5048
5336
|
const EditorSelection = 'EditorSelection';
|
|
5049
5337
|
const EditorSelections = 'Selections';
|
|
5050
5338
|
const EditorViewlet = 'Viewlet Editor';
|
|
5339
|
+
const PreviewTextScrollBar = 'PreviewTextScrollBar';
|
|
5340
|
+
const PreviewTextScrollBarThumb = 'PreviewTextScrollBarThumb';
|
|
5341
|
+
const PreviewVirtualizedEditor = 'PreviewVirtualizedEditor';
|
|
5051
5342
|
const ChatDebugViewEventLineNumber = 'ChatDebugViewEventLineNumber';
|
|
5052
5343
|
const Gutter = 'Gutter';
|
|
5053
5344
|
const TableRowSelected = 'TableRowSelected';
|
|
@@ -5077,6 +5368,7 @@ const Resizer = 'Resizer';
|
|
|
5077
5368
|
const ResizerInner = 'ResizerInner';
|
|
5078
5369
|
const ResizerOne = 'ResizerOne';
|
|
5079
5370
|
const ResizerTwo = 'ResizerTwo';
|
|
5371
|
+
const ResizerThree = 'ResizerThree';
|
|
5080
5372
|
const TableHead = 'TableHead';
|
|
5081
5373
|
const Resizers = 'Resizers';
|
|
5082
5374
|
const TableCol = 'TableCol';
|
|
@@ -5123,25 +5415,17 @@ const ChatDebugViewCellDuration = 'ChatDebugViewCellDuration';
|
|
|
5123
5415
|
const ChatDebugViewCellStatusError = 'ChatDebugViewCellStatusError';
|
|
5124
5416
|
const InputBox = 'InputBox';
|
|
5125
5417
|
const TokenBoolean = 'Token TokenBoolean';
|
|
5418
|
+
const TokenComment = 'Token TokenComment';
|
|
5126
5419
|
const TokenKey = 'Token TokenKey';
|
|
5420
|
+
const TokenKeyword = 'Token TokenKeyword';
|
|
5127
5421
|
const TokenNumeric = 'Token TokenNumeric';
|
|
5422
|
+
const TokenAttributeName = 'Token TokenAttributeName';
|
|
5423
|
+
const TokenPropertyName = 'Token TokenPropertyName';
|
|
5424
|
+
const TokenSelector = 'Token TokenSelector';
|
|
5128
5425
|
const TokenString = 'Token TokenString';
|
|
5426
|
+
const TokenTag = 'Token TokenTag';
|
|
5129
5427
|
const TokenText = 'Token TokenText';
|
|
5130
5428
|
|
|
5131
|
-
const debugErrorRootNode = {
|
|
5132
|
-
childCount: 1,
|
|
5133
|
-
className: ChatDebugView,
|
|
5134
|
-
type: Div
|
|
5135
|
-
};
|
|
5136
|
-
const debugErrorMessageNode = {
|
|
5137
|
-
childCount: 1,
|
|
5138
|
-
className: ChatDebugViewError,
|
|
5139
|
-
type: Div
|
|
5140
|
-
};
|
|
5141
|
-
const getDebugErrorDom = errorMessage => {
|
|
5142
|
-
return [debugErrorRootNode, debugErrorMessageNode, text(errorMessage)];
|
|
5143
|
-
};
|
|
5144
|
-
|
|
5145
5429
|
const HandleEventCategoryFilter = 4;
|
|
5146
5430
|
const HandleFilterInput = 5;
|
|
5147
5431
|
const SelectDetailTab = 6;
|
|
@@ -5174,6 +5458,25 @@ const HandleTableScrollBarPointerDown = 32;
|
|
|
5174
5458
|
const HandleTableScrollBarPointerMove = 33;
|
|
5175
5459
|
const HandleTableScrollBarPointerUp = 34;
|
|
5176
5460
|
const HandleTableWheel = 35;
|
|
5461
|
+
const HandlePreviewTextWheel = 36;
|
|
5462
|
+
const HandlePreviewTextScrollBarPointerDown = 37;
|
|
5463
|
+
const HandlePreviewTextScrollBarPointerMove = 38;
|
|
5464
|
+
const HandlePreviewTextScrollBarPointerUp = 39;
|
|
5465
|
+
const HandleRootContextMenu = 40;
|
|
5466
|
+
|
|
5467
|
+
const debugErrorRootNode = {
|
|
5468
|
+
childCount: 1,
|
|
5469
|
+
className: ChatDebugView,
|
|
5470
|
+
type: Div
|
|
5471
|
+
};
|
|
5472
|
+
const debugErrorMessageNode = {
|
|
5473
|
+
childCount: 1,
|
|
5474
|
+
className: ChatDebugViewError,
|
|
5475
|
+
type: Div
|
|
5476
|
+
};
|
|
5477
|
+
const getDebugErrorDom = errorMessage => {
|
|
5478
|
+
return [debugErrorRootNode, debugErrorMessageNode, text(errorMessage)];
|
|
5479
|
+
};
|
|
5177
5480
|
|
|
5178
5481
|
const getFilterInputDom = (filterValue, useDevtoolsLayout) => {
|
|
5179
5482
|
return {
|
|
@@ -5238,18 +5541,51 @@ const getDebugViewTopDom = (filterValue, useDevtoolsLayout, categoryFilters) =>
|
|
|
5238
5541
|
return [{
|
|
5239
5542
|
childCount: 2 + (quickFilterNodes.length > 0 ? 1 : 0),
|
|
5240
5543
|
className: mergeClassNames(ChatDebugViewTop, ChatDebugViewTopDevtools),
|
|
5241
|
-
onContextMenu: HandleHeaderContextMenu,
|
|
5242
5544
|
type: Search
|
|
5243
5545
|
}, getFilterInputDom(filterValue, true), ...quickFilterNodes, ...refreshButtonDom];
|
|
5244
5546
|
}
|
|
5245
5547
|
return [{
|
|
5246
5548
|
childCount: 2,
|
|
5247
5549
|
className: ChatDebugViewTop,
|
|
5248
|
-
onContextMenu: HandleHeaderContextMenu,
|
|
5249
5550
|
type: Search
|
|
5250
5551
|
}, getFilterInputDom(filterValue, false), ...refreshButtonDom];
|
|
5251
5552
|
};
|
|
5252
5553
|
|
|
5554
|
+
const getNextSiblingIndex$2 = (nodes, index) => {
|
|
5555
|
+
let nextSiblingIndex = index + 1;
|
|
5556
|
+
const childCount = nodes[index]?.childCount || 0;
|
|
5557
|
+
for (let i = 0; i < childCount; i++) {
|
|
5558
|
+
nextSiblingIndex = getNextSiblingIndex$2(nodes, nextSiblingIndex);
|
|
5559
|
+
}
|
|
5560
|
+
return nextSiblingIndex;
|
|
5561
|
+
};
|
|
5562
|
+
|
|
5563
|
+
const getDirectChildCount$1 = nodes => {
|
|
5564
|
+
let count = 0;
|
|
5565
|
+
let index = 0;
|
|
5566
|
+
while (index < nodes.length) {
|
|
5567
|
+
count++;
|
|
5568
|
+
index = getNextSiblingIndex$2(nodes, index);
|
|
5569
|
+
}
|
|
5570
|
+
return count;
|
|
5571
|
+
};
|
|
5572
|
+
|
|
5573
|
+
const getPanelId = detailTab => {
|
|
5574
|
+
return `ChatDebugViewDetailsPanel-${detailTab}`;
|
|
5575
|
+
};
|
|
5576
|
+
|
|
5577
|
+
const getDetailContentDom = (selectedDetailTab, safeSelectedDetailTab, contentNodes) => {
|
|
5578
|
+
return [{
|
|
5579
|
+
'aria-label': selectedDetailTab.label,
|
|
5580
|
+
childCount: getDirectChildCount$1(contentNodes),
|
|
5581
|
+
className: ChatDebugViewDetailsBottom,
|
|
5582
|
+
id: getPanelId(safeSelectedDetailTab),
|
|
5583
|
+
onContextMenu: HandleDetailsContextMenu,
|
|
5584
|
+
role: 'tabpanel',
|
|
5585
|
+
type: Div
|
|
5586
|
+
}, ...contentNodes];
|
|
5587
|
+
};
|
|
5588
|
+
|
|
5253
5589
|
const detailsCloseButtonDom = [{
|
|
5254
5590
|
'aria-label': closeDetails(),
|
|
5255
5591
|
childCount: 1,
|
|
@@ -5268,6 +5604,29 @@ const getDetailsCloseButtonDom = () => {
|
|
|
5268
5604
|
return detailsCloseButtonDom;
|
|
5269
5605
|
};
|
|
5270
5606
|
|
|
5607
|
+
const getNormalizedDetailTabs = (selectedEvent, detailTabs) => {
|
|
5608
|
+
if (selectedEvent === null) {
|
|
5609
|
+
return detailTabs;
|
|
5610
|
+
}
|
|
5611
|
+
return createDetailTabs(getSelectedDetailTab(detailTabs), selectedEvent);
|
|
5612
|
+
};
|
|
5613
|
+
|
|
5614
|
+
const getEditorRowDom = line => {
|
|
5615
|
+
return [{
|
|
5616
|
+
childCount: line.childCount,
|
|
5617
|
+
className: EditorRow,
|
|
5618
|
+
type: Div
|
|
5619
|
+
}, ...line.nodes];
|
|
5620
|
+
};
|
|
5621
|
+
|
|
5622
|
+
const getEditorRowsDom = lineData => {
|
|
5623
|
+
return [{
|
|
5624
|
+
childCount: lineData.length,
|
|
5625
|
+
className: EditorRows,
|
|
5626
|
+
type: Div
|
|
5627
|
+
}, ...lineData.flatMap(getEditorRowDom)];
|
|
5628
|
+
};
|
|
5629
|
+
|
|
5271
5630
|
const defaultEditorCursor = {
|
|
5272
5631
|
columnIndex: 0,
|
|
5273
5632
|
rowIndex: 1
|
|
@@ -5285,13 +5644,14 @@ const getEditorSelectionDom = (cursor = defaultEditorCursor) => {
|
|
|
5285
5644
|
type: Div
|
|
5286
5645
|
}] : [])];
|
|
5287
5646
|
};
|
|
5288
|
-
|
|
5647
|
+
|
|
5648
|
+
const getGutterDom = (lineData, showLineNumbers, lineNumberStart = 0) => {
|
|
5289
5649
|
const gutterNodes = showLineNumbers ? lineData.flatMap((_, index) => {
|
|
5290
5650
|
return [{
|
|
5291
5651
|
childCount: 1,
|
|
5292
5652
|
className: ChatDebugViewEventLineNumber,
|
|
5293
5653
|
type: Span
|
|
5294
|
-
}, text(String(index + 1))];
|
|
5654
|
+
}, text(String(lineNumberStart + index + 1))];
|
|
5295
5655
|
}) : [];
|
|
5296
5656
|
return [{
|
|
5297
5657
|
childCount: showLineNumbers ? lineData.length : 0,
|
|
@@ -5299,21 +5659,55 @@ const getGutterDom = (lineData, showLineNumbers) => {
|
|
|
5299
5659
|
type: Div
|
|
5300
5660
|
}, ...gutterNodes];
|
|
5301
5661
|
};
|
|
5302
|
-
|
|
5303
|
-
|
|
5304
|
-
|
|
5305
|
-
|
|
5662
|
+
|
|
5663
|
+
const getVirtualizedEditorDom = (lineData, showLineNumbers = true, cursor = null, onPointerDown, options) => {
|
|
5664
|
+
const editorChildren = [{
|
|
5665
|
+
childCount: 2,
|
|
5666
|
+
className: EditorViewlet,
|
|
5667
|
+
role: 'code',
|
|
5306
5668
|
type: Div
|
|
5307
|
-
}, ...
|
|
5308
|
-
|
|
5309
|
-
|
|
5310
|
-
|
|
5311
|
-
childCount: lineData.length,
|
|
5312
|
-
className: EditorRows,
|
|
5669
|
+
}, ...getGutterDom(lineData, showLineNumbers, options.lineNumberStart), {
|
|
5670
|
+
childCount: 2,
|
|
5671
|
+
className: EditorContent,
|
|
5672
|
+
onPointerDown,
|
|
5313
5673
|
type: Div
|
|
5314
|
-
},
|
|
5315
|
-
|
|
5316
|
-
|
|
5674
|
+
}, {
|
|
5675
|
+
'aria-autocomplete': 'list',
|
|
5676
|
+
'aria-multiline': true,
|
|
5677
|
+
'aria-roledescription': 'editor',
|
|
5678
|
+
autocapitalize: 'off',
|
|
5679
|
+
autocomplete: 'off',
|
|
5680
|
+
autocorrect: 'off',
|
|
5681
|
+
childCount: 0,
|
|
5682
|
+
className: EditorInput,
|
|
5683
|
+
name: 'editor',
|
|
5684
|
+
role: 'textbox',
|
|
5685
|
+
spellcheck: false,
|
|
5686
|
+
type: TextArea,
|
|
5687
|
+
wrap: 'off'
|
|
5688
|
+
}, {
|
|
5689
|
+
childCount: 2,
|
|
5690
|
+
className: EditorLayers,
|
|
5691
|
+
type: Div
|
|
5692
|
+
}, ...getEditorSelectionDom(cursor), ...getEditorRowsDom(lineData)];
|
|
5693
|
+
return [{
|
|
5694
|
+
childCount: options.showScrollBar ? 2 : 1,
|
|
5695
|
+
className: mergeClassNames(EditorContainer, PreviewVirtualizedEditor),
|
|
5696
|
+
onWheel: options.onWheel,
|
|
5697
|
+
type: Div
|
|
5698
|
+
}, ...editorChildren, ...(options.showScrollBar ? [{
|
|
5699
|
+
childCount: 1,
|
|
5700
|
+
className: PreviewTextScrollBar,
|
|
5701
|
+
onPointerDown: options.onScrollBarPointerDown,
|
|
5702
|
+
type: Div
|
|
5703
|
+
}, {
|
|
5704
|
+
childCount: 0,
|
|
5705
|
+
className: PreviewTextScrollBarThumb,
|
|
5706
|
+
type: Div
|
|
5707
|
+
}] : [])];
|
|
5708
|
+
};
|
|
5709
|
+
|
|
5710
|
+
const getEditorDom = (lineData, showLineNumbers = true, cursor, onPointerDown) => {
|
|
5317
5711
|
return [{
|
|
5318
5712
|
childCount: 1,
|
|
5319
5713
|
className: EditorContainer,
|
|
@@ -5349,7 +5743,7 @@ const getEditorDom = (lineData, showLineNumbers = true, cursor = defaultEditorCu
|
|
|
5349
5743
|
}, ...getEditorSelectionDom(cursor), ...getEditorRowsDom(lineData)];
|
|
5350
5744
|
};
|
|
5351
5745
|
|
|
5352
|
-
const isDigit = character => {
|
|
5746
|
+
const isDigit$1 = character => {
|
|
5353
5747
|
return character !== undefined && character >= '0' && character <= '9';
|
|
5354
5748
|
};
|
|
5355
5749
|
const isWhitespace = character => {
|
|
@@ -5363,10 +5757,10 @@ const getIntegerEnd = (json, start) => {
|
|
|
5363
5757
|
if (json[i] === '0') {
|
|
5364
5758
|
return i + 1;
|
|
5365
5759
|
}
|
|
5366
|
-
if (!isDigit(json[i])) {
|
|
5760
|
+
if (!isDigit$1(json[i])) {
|
|
5367
5761
|
return start;
|
|
5368
5762
|
}
|
|
5369
|
-
while (isDigit(json[i])) {
|
|
5763
|
+
while (isDigit$1(json[i])) {
|
|
5370
5764
|
i++;
|
|
5371
5765
|
}
|
|
5372
5766
|
return i;
|
|
@@ -5377,10 +5771,10 @@ const getFractionEnd = (json, start) => {
|
|
|
5377
5771
|
}
|
|
5378
5772
|
const decimalStart = start;
|
|
5379
5773
|
let i = start + 1;
|
|
5380
|
-
if (!isDigit(json[i])) {
|
|
5774
|
+
if (!isDigit$1(json[i])) {
|
|
5381
5775
|
return decimalStart;
|
|
5382
5776
|
}
|
|
5383
|
-
while (isDigit(json[i])) {
|
|
5777
|
+
while (isDigit$1(json[i])) {
|
|
5384
5778
|
i++;
|
|
5385
5779
|
}
|
|
5386
5780
|
return i;
|
|
@@ -5394,10 +5788,10 @@ const getExponentEnd = (json, start) => {
|
|
|
5394
5788
|
if (json[i] === '+' || json[i] === '-') {
|
|
5395
5789
|
i++;
|
|
5396
5790
|
}
|
|
5397
|
-
if (!isDigit(json[i])) {
|
|
5791
|
+
if (!isDigit$1(json[i])) {
|
|
5398
5792
|
return exponentStart;
|
|
5399
5793
|
}
|
|
5400
|
-
while (isDigit(json[i])) {
|
|
5794
|
+
while (isDigit$1(json[i])) {
|
|
5401
5795
|
i++;
|
|
5402
5796
|
}
|
|
5403
5797
|
return i;
|
|
@@ -5409,7 +5803,7 @@ const getWhitespaceEnd = (json, start) => {
|
|
|
5409
5803
|
}
|
|
5410
5804
|
return i;
|
|
5411
5805
|
};
|
|
5412
|
-
const getStringEnd = (json, start) => {
|
|
5806
|
+
const getStringEnd$1 = (json, start) => {
|
|
5413
5807
|
let i = start + 1;
|
|
5414
5808
|
while (i < json.length) {
|
|
5415
5809
|
const currentCharacter = json[i];
|
|
@@ -5425,7 +5819,7 @@ const getStringEnd = (json, start) => {
|
|
|
5425
5819
|
return i;
|
|
5426
5820
|
};
|
|
5427
5821
|
const emitStringToken = (json, start, onToken) => {
|
|
5428
|
-
const end = getStringEnd(json, start);
|
|
5822
|
+
const end = getStringEnd$1(json, start);
|
|
5429
5823
|
const lookAheadIndex = getWhitespaceEnd(json, end);
|
|
5430
5824
|
const className = json[lookAheadIndex] === ':' ? TokenKey : TokenString;
|
|
5431
5825
|
onToken(className, json.slice(start, end));
|
|
@@ -5452,7 +5846,7 @@ const getLiteralToken = (json, start) => {
|
|
|
5452
5846
|
}
|
|
5453
5847
|
return undefined;
|
|
5454
5848
|
};
|
|
5455
|
-
const getNumberEnd = (json, start) => {
|
|
5849
|
+
const getNumberEnd$1 = (json, start) => {
|
|
5456
5850
|
let i = getIntegerEnd(json, start);
|
|
5457
5851
|
if (i === start) {
|
|
5458
5852
|
return start;
|
|
@@ -5469,7 +5863,7 @@ const forEachTokenSegment = (json, onToken) => {
|
|
|
5469
5863
|
i = emitStringToken(json, i, onToken);
|
|
5470
5864
|
continue;
|
|
5471
5865
|
}
|
|
5472
|
-
const numberEnd = getNumberEnd(json, i);
|
|
5866
|
+
const numberEnd = getNumberEnd$1(json, i);
|
|
5473
5867
|
if (numberEnd > i) {
|
|
5474
5868
|
onToken(TokenNumeric, json.slice(i, numberEnd));
|
|
5475
5869
|
i = numberEnd;
|
|
@@ -5485,6 +5879,24 @@ const forEachTokenSegment = (json, onToken) => {
|
|
|
5485
5879
|
i++;
|
|
5486
5880
|
}
|
|
5487
5881
|
};
|
|
5882
|
+
const getTokenSegments = json => {
|
|
5883
|
+
const segments = [];
|
|
5884
|
+
forEachTokenSegment(json, (className, value) => {
|
|
5885
|
+
if (!value) {
|
|
5886
|
+
return;
|
|
5887
|
+
}
|
|
5888
|
+
const lastSegment = segments.at(-1);
|
|
5889
|
+
if (lastSegment && lastSegment.className === className) {
|
|
5890
|
+
lastSegment.value += value;
|
|
5891
|
+
return;
|
|
5892
|
+
}
|
|
5893
|
+
segments.push({
|
|
5894
|
+
className,
|
|
5895
|
+
value
|
|
5896
|
+
});
|
|
5897
|
+
});
|
|
5898
|
+
return segments;
|
|
5899
|
+
};
|
|
5488
5900
|
|
|
5489
5901
|
const getJsonLines = value => {
|
|
5490
5902
|
const json = JSON.stringify(value, null, 2);
|
|
@@ -5553,8 +5965,14 @@ const getEventNode = value => {
|
|
|
5553
5965
|
return getEditorDom(lineData);
|
|
5554
5966
|
};
|
|
5555
5967
|
|
|
5556
|
-
const
|
|
5557
|
-
|
|
5968
|
+
const getPayloadContentNodes = (payloadEventNodes, selectedEvent) => {
|
|
5969
|
+
if (payloadEventNodes.length > 0) {
|
|
5970
|
+
return payloadEventNodes;
|
|
5971
|
+
}
|
|
5972
|
+
if (selectedEvent === null) {
|
|
5973
|
+
return [];
|
|
5974
|
+
}
|
|
5975
|
+
return getEventNode(getPayloadEvent(selectedEvent));
|
|
5558
5976
|
};
|
|
5559
5977
|
|
|
5560
5978
|
const getImagePreviewLabelDom = preview => {
|
|
@@ -5595,9 +6013,411 @@ const getImagePreviewDom = preview => {
|
|
|
5595
6013
|
}, ...getImagePreviewLabelDom(preview)];
|
|
5596
6014
|
};
|
|
5597
6015
|
|
|
5598
|
-
const
|
|
6016
|
+
const extensionToLanguage = {
|
|
6017
|
+
css: 'css',
|
|
6018
|
+
html: 'html',
|
|
6019
|
+
js: 'javascript',
|
|
6020
|
+
json: 'json',
|
|
6021
|
+
py: 'python',
|
|
6022
|
+
ts: 'typescript'
|
|
6023
|
+
};
|
|
6024
|
+
const getLanguageFromFileExtension = uri => {
|
|
6025
|
+
try {
|
|
6026
|
+
const url = new URL(uri);
|
|
6027
|
+
const path = url.pathname.toLowerCase();
|
|
6028
|
+
const lastDotIndex = path.lastIndexOf('.');
|
|
6029
|
+
if (lastDotIndex === -1) {
|
|
6030
|
+
return undefined;
|
|
6031
|
+
}
|
|
6032
|
+
const extension = path.slice(lastDotIndex + 1);
|
|
6033
|
+
return extensionToLanguage[extension];
|
|
6034
|
+
} catch {
|
|
6035
|
+
return undefined;
|
|
6036
|
+
}
|
|
6037
|
+
};
|
|
6038
|
+
|
|
6039
|
+
const pushToken = (segments, className, value) => {
|
|
6040
|
+
if (!value) {
|
|
6041
|
+
return segments;
|
|
6042
|
+
}
|
|
6043
|
+
const lastSegment = segments.at(-1);
|
|
6044
|
+
if (lastSegment && lastSegment.className === className) {
|
|
6045
|
+
const merged = {
|
|
6046
|
+
className,
|
|
6047
|
+
value: lastSegment.value + value
|
|
6048
|
+
};
|
|
6049
|
+
return [...segments.slice(0, -1), merged];
|
|
6050
|
+
}
|
|
6051
|
+
return [...segments, {
|
|
6052
|
+
className,
|
|
6053
|
+
value
|
|
6054
|
+
}];
|
|
6055
|
+
};
|
|
6056
|
+
|
|
6057
|
+
/* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
|
|
6058
|
+
|
|
6059
|
+
const jsIdentifierStartRegex = /[A-Za-z_$]/;
|
|
6060
|
+
const jsIdentifierPartRegex = /[\w$]/;
|
|
6061
|
+
const pythonIdentifierStartRegex = /[A-Za-z_]/;
|
|
6062
|
+
const pythonIdentifierPartRegex = /\w/;
|
|
6063
|
+
const cssIdentifierRegex = /[A-Za-z-]/;
|
|
6064
|
+
const htmlTagNameRegex = /[A-Za-z0-9:-]/;
|
|
6065
|
+
const htmlAttributeStartRegex = /[A-Za-z:_-]/;
|
|
6066
|
+
const htmlAttributePartRegex = /[\w:-]/;
|
|
6067
|
+
const leadingWhitespaceRegex = /^\s*/;
|
|
6068
|
+
const trailingWhitespaceRegex = /\s*$/;
|
|
6069
|
+
const jsKeywords = new Set(['async', 'await', 'class', 'const', 'else', 'export', 'extends', 'for', 'from', 'function', 'if', 'import', 'let', 'new', 'return', 'switch', 'try', 'while']);
|
|
6070
|
+
const tsKeywords = new Set([...jsKeywords, 'interface', 'implements', 'number', 'readonly', 'string', 'type']);
|
|
6071
|
+
const pythonKeywords = new Set(['as', 'class', 'def', 'elif', 'else', 'except', 'False', 'for', 'from', 'if', 'import', 'None', 'return', 'True', 'try', 'while', 'with']);
|
|
6072
|
+
const isIdentifierStart = character => {
|
|
6073
|
+
return !!character && jsIdentifierStartRegex.test(character);
|
|
6074
|
+
};
|
|
6075
|
+
const isIdentifierPart = character => {
|
|
6076
|
+
return !!character && jsIdentifierPartRegex.test(character);
|
|
6077
|
+
};
|
|
6078
|
+
const isPythonIdentifierStart = character => {
|
|
6079
|
+
return !!character && pythonIdentifierStartRegex.test(character);
|
|
6080
|
+
};
|
|
6081
|
+
const isPythonIdentifierPart = character => {
|
|
6082
|
+
return !!character && pythonIdentifierPartRegex.test(character);
|
|
6083
|
+
};
|
|
6084
|
+
const isDigit = character => {
|
|
6085
|
+
return !!character && character >= '0' && character <= '9';
|
|
6086
|
+
};
|
|
6087
|
+
const getStringEnd = (value, start, quote) => {
|
|
6088
|
+
let i = start + 1;
|
|
6089
|
+
while (i < value.length) {
|
|
6090
|
+
if (value[i] === '\\') {
|
|
6091
|
+
i += 2;
|
|
6092
|
+
continue;
|
|
6093
|
+
}
|
|
6094
|
+
if (value[i] === quote) {
|
|
6095
|
+
return i + 1;
|
|
6096
|
+
}
|
|
6097
|
+
i++;
|
|
6098
|
+
}
|
|
6099
|
+
return value.length;
|
|
6100
|
+
};
|
|
6101
|
+
const getBlockCommentEnd = (value, start, terminator) => {
|
|
6102
|
+
const endIndex = value.indexOf(terminator, start);
|
|
6103
|
+
if (endIndex === -1) {
|
|
6104
|
+
return value.length;
|
|
6105
|
+
}
|
|
6106
|
+
return endIndex + terminator.length;
|
|
6107
|
+
};
|
|
6108
|
+
const getLineCommentEnd = (value, start) => {
|
|
6109
|
+
const endIndex = value.indexOf('\n', start);
|
|
6110
|
+
if (endIndex === -1) {
|
|
6111
|
+
return value.length;
|
|
6112
|
+
}
|
|
6113
|
+
return endIndex;
|
|
6114
|
+
};
|
|
6115
|
+
const getNumberEnd = (value, start) => {
|
|
6116
|
+
let i = start;
|
|
6117
|
+
while (isDigit(value[i])) {
|
|
6118
|
+
i++;
|
|
6119
|
+
}
|
|
6120
|
+
if (value[i] === '.') {
|
|
6121
|
+
i++;
|
|
6122
|
+
while (isDigit(value[i])) {
|
|
6123
|
+
i++;
|
|
6124
|
+
}
|
|
6125
|
+
}
|
|
6126
|
+
return i;
|
|
6127
|
+
};
|
|
6128
|
+
const appendLineComment = (value, state) => {
|
|
6129
|
+
if (!value.startsWith('//', state.i) && !value.startsWith('#', state.i)) {
|
|
6130
|
+
return false;
|
|
6131
|
+
}
|
|
6132
|
+
const end = getLineCommentEnd(value, state.i);
|
|
6133
|
+
state.segments = pushToken(state.segments, TokenComment, value.slice(state.i, end));
|
|
6134
|
+
state.i = end;
|
|
6135
|
+
return true;
|
|
6136
|
+
};
|
|
6137
|
+
const appendBlockComment = (value, state) => {
|
|
6138
|
+
if (!value.startsWith('/*', state.i)) {
|
|
6139
|
+
return false;
|
|
6140
|
+
}
|
|
6141
|
+
const end = getBlockCommentEnd(value, state.i, '*/');
|
|
6142
|
+
state.segments = pushToken(state.segments, TokenComment, value.slice(state.i, end));
|
|
6143
|
+
state.i = end;
|
|
6144
|
+
return true;
|
|
6145
|
+
};
|
|
6146
|
+
const appendStringToken = (value, state) => {
|
|
6147
|
+
const quote = value[state.i];
|
|
6148
|
+
if (quote !== '"' && quote !== "'" && quote !== '`') {
|
|
6149
|
+
return false;
|
|
6150
|
+
}
|
|
6151
|
+
const end = getStringEnd(value, state.i, quote);
|
|
6152
|
+
state.segments = pushToken(state.segments, TokenString, value.slice(state.i, end));
|
|
6153
|
+
state.i = end;
|
|
6154
|
+
return true;
|
|
6155
|
+
};
|
|
6156
|
+
const appendNumericToken = (value, state) => {
|
|
6157
|
+
if (!isDigit(value[state.i])) {
|
|
6158
|
+
return false;
|
|
6159
|
+
}
|
|
6160
|
+
const end = getNumberEnd(value, state.i);
|
|
6161
|
+
state.segments = pushToken(state.segments, TokenNumeric, value.slice(state.i, end));
|
|
6162
|
+
state.i = end;
|
|
6163
|
+
return true;
|
|
6164
|
+
};
|
|
6165
|
+
const appendIdentifierToken = (value, state, keywords, isIdentifierStartCharacter, isIdentifierPartCharacter) => {
|
|
6166
|
+
if (!isIdentifierStartCharacter(value[state.i])) {
|
|
6167
|
+
return false;
|
|
6168
|
+
}
|
|
6169
|
+
let end = state.i + 1;
|
|
6170
|
+
while (isIdentifierPartCharacter(value[end])) {
|
|
6171
|
+
end++;
|
|
6172
|
+
}
|
|
6173
|
+
const identifier = value.slice(state.i, end);
|
|
6174
|
+
const className = keywords.has(identifier) ? TokenKeyword : TokenText;
|
|
6175
|
+
state.segments = pushToken(state.segments, className, identifier);
|
|
6176
|
+
state.i = end;
|
|
6177
|
+
return true;
|
|
6178
|
+
};
|
|
6179
|
+
const appendTextCharacter = (value, state) => {
|
|
6180
|
+
state.segments = pushToken(state.segments, TokenText, value[state.i]);
|
|
6181
|
+
state.i++;
|
|
6182
|
+
};
|
|
6183
|
+
const tokenizeCode = (value, keywords, isIdentifierStartCharacter, isIdentifierPartCharacter, supportsBlockComments) => {
|
|
6184
|
+
const state = {
|
|
6185
|
+
i: 0,
|
|
6186
|
+
segments: []
|
|
6187
|
+
};
|
|
6188
|
+
while (state.i < value.length) {
|
|
6189
|
+
if (appendLineComment(value, state)) {
|
|
6190
|
+
continue;
|
|
6191
|
+
}
|
|
6192
|
+
if (supportsBlockComments && appendBlockComment(value, state)) {
|
|
6193
|
+
continue;
|
|
6194
|
+
}
|
|
6195
|
+
if (appendStringToken(value, state)) {
|
|
6196
|
+
continue;
|
|
6197
|
+
}
|
|
6198
|
+
if (appendNumericToken(value, state)) {
|
|
6199
|
+
continue;
|
|
6200
|
+
}
|
|
6201
|
+
if (appendIdentifierToken(value, state, keywords, isIdentifierStartCharacter, isIdentifierPartCharacter)) {
|
|
6202
|
+
continue;
|
|
6203
|
+
}
|
|
6204
|
+
appendTextCharacter(value, state);
|
|
6205
|
+
}
|
|
6206
|
+
return state.segments;
|
|
6207
|
+
};
|
|
6208
|
+
const pushTrimmedSelector = (segments, value) => {
|
|
6209
|
+
const leadingWhitespace = value.match(leadingWhitespaceRegex)?.[0] ?? '';
|
|
6210
|
+
const trailingWhitespace = value.match(trailingWhitespaceRegex)?.[0] ?? '';
|
|
6211
|
+
const trimmed = value.slice(leadingWhitespace.length, value.length - trailingWhitespace.length);
|
|
6212
|
+
let result = segments;
|
|
6213
|
+
result = pushToken(result, TokenText, leadingWhitespace);
|
|
6214
|
+
result = pushToken(result, TokenSelector, trimmed);
|
|
6215
|
+
result = pushToken(result, TokenText, trailingWhitespace);
|
|
6216
|
+
return result;
|
|
6217
|
+
};
|
|
6218
|
+
const getCssIdentifierEnd = (value, start) => {
|
|
6219
|
+
let end = start + 1;
|
|
6220
|
+
while (cssIdentifierRegex.test(value[end] ?? '')) {
|
|
6221
|
+
end++;
|
|
6222
|
+
}
|
|
6223
|
+
return end;
|
|
6224
|
+
};
|
|
6225
|
+
const getCssIdentifierClassName = (value, end) => {
|
|
6226
|
+
let lookAhead = end;
|
|
6227
|
+
while (value[lookAhead] === ' ' || value[lookAhead] === '\t') {
|
|
6228
|
+
lookAhead++;
|
|
6229
|
+
}
|
|
6230
|
+
return value[lookAhead] === ':' ? TokenPropertyName : TokenText;
|
|
6231
|
+
};
|
|
6232
|
+
const appendCssIdentifier = (value, state) => {
|
|
6233
|
+
if (!cssIdentifierRegex.test(value[state.i] ?? '')) {
|
|
6234
|
+
return false;
|
|
6235
|
+
}
|
|
6236
|
+
const end = getCssIdentifierEnd(value, state.i);
|
|
6237
|
+
const identifier = value.slice(state.i, end);
|
|
6238
|
+
state.segments = pushToken(state.segments, getCssIdentifierClassName(value, end), identifier);
|
|
6239
|
+
state.i = end;
|
|
6240
|
+
return true;
|
|
6241
|
+
};
|
|
6242
|
+
const appendCssOutsideDeclaration = (value, state) => {
|
|
6243
|
+
const nextBrace = value.indexOf('{', state.i);
|
|
6244
|
+
if (nextBrace === -1) {
|
|
6245
|
+
state.segments = pushToken(state.segments, TokenText, value.slice(state.i));
|
|
6246
|
+
state.i = value.length;
|
|
6247
|
+
return true;
|
|
6248
|
+
}
|
|
6249
|
+
state.segments = pushTrimmedSelector(state.segments, value.slice(state.i, nextBrace));
|
|
6250
|
+
state.segments = pushToken(state.segments, TokenText, '{');
|
|
6251
|
+
state.i = nextBrace + 1;
|
|
6252
|
+
return false;
|
|
6253
|
+
};
|
|
6254
|
+
const handleCssDeclarationToken = (value, state) => {
|
|
6255
|
+
if (value[state.i] === '}') {
|
|
6256
|
+
state.segments = pushToken(state.segments, TokenText, '}');
|
|
6257
|
+
state.i++;
|
|
6258
|
+
return false;
|
|
6259
|
+
}
|
|
6260
|
+
if (appendNumericToken(value, state)) {
|
|
6261
|
+
return true;
|
|
6262
|
+
}
|
|
6263
|
+
if (appendCssIdentifier(value, state)) {
|
|
6264
|
+
return true;
|
|
6265
|
+
}
|
|
6266
|
+
appendTextCharacter(value, state);
|
|
6267
|
+
return true;
|
|
6268
|
+
};
|
|
6269
|
+
const tokenizeCss = value => {
|
|
6270
|
+
const state = {
|
|
6271
|
+
i: 0,
|
|
6272
|
+
segments: []
|
|
6273
|
+
};
|
|
6274
|
+
let inDeclarationBlock = false;
|
|
6275
|
+
while (state.i < value.length) {
|
|
6276
|
+
if (appendBlockComment(value, state)) {
|
|
6277
|
+
continue;
|
|
6278
|
+
}
|
|
6279
|
+
if (appendStringToken(value, state)) {
|
|
6280
|
+
continue;
|
|
6281
|
+
}
|
|
6282
|
+
if (!inDeclarationBlock) {
|
|
6283
|
+
if (appendCssOutsideDeclaration(value, state)) {
|
|
6284
|
+
break;
|
|
6285
|
+
}
|
|
6286
|
+
inDeclarationBlock = true;
|
|
6287
|
+
continue;
|
|
6288
|
+
}
|
|
6289
|
+
inDeclarationBlock = handleCssDeclarationToken(value, state);
|
|
6290
|
+
}
|
|
6291
|
+
return state.segments;
|
|
6292
|
+
};
|
|
6293
|
+
const getHtmlTagNameEnd = (value, start) => {
|
|
6294
|
+
let i = start + 1;
|
|
6295
|
+
while (htmlTagNameRegex.test(value[i] ?? '')) {
|
|
6296
|
+
i++;
|
|
6297
|
+
}
|
|
6298
|
+
return i;
|
|
6299
|
+
};
|
|
6300
|
+
const getHtmlAttributeEnd = (value, start) => {
|
|
6301
|
+
let end = start + 1;
|
|
6302
|
+
while (htmlAttributePartRegex.test(value[end] ?? '')) {
|
|
6303
|
+
end++;
|
|
6304
|
+
}
|
|
6305
|
+
return end;
|
|
6306
|
+
};
|
|
6307
|
+
const appendHtmlAttribute = (value, state) => {
|
|
6308
|
+
if (!htmlAttributeStartRegex.test(value[state.i] ?? '')) {
|
|
6309
|
+
return false;
|
|
6310
|
+
}
|
|
6311
|
+
const end = getHtmlAttributeEnd(value, state.i);
|
|
6312
|
+
state.segments = pushToken(state.segments, TokenAttributeName, value.slice(state.i, end));
|
|
6313
|
+
state.i = end;
|
|
6314
|
+
return true;
|
|
6315
|
+
};
|
|
6316
|
+
const appendHtmlString = (value, state) => {
|
|
6317
|
+
const quote = value[state.i];
|
|
6318
|
+
if (quote !== '"' && quote !== "'") {
|
|
6319
|
+
return false;
|
|
6320
|
+
}
|
|
6321
|
+
const end = getStringEnd(value, state.i, quote);
|
|
6322
|
+
state.segments = pushToken(state.segments, TokenString, value.slice(state.i, end));
|
|
6323
|
+
state.i = end;
|
|
6324
|
+
return true;
|
|
6325
|
+
};
|
|
6326
|
+
const tokenizeHtmlTag = (value, start) => {
|
|
6327
|
+
let segments = [];
|
|
6328
|
+
if (value.startsWith('</', start)) {
|
|
6329
|
+
const end = value.indexOf('>', start);
|
|
6330
|
+
const tagEnd = end === -1 ? value.length : end + 1;
|
|
6331
|
+
segments = pushToken(segments, TokenTag, value.slice(start, tagEnd));
|
|
6332
|
+
return {
|
|
6333
|
+
end: tagEnd,
|
|
6334
|
+
segments
|
|
6335
|
+
};
|
|
6336
|
+
}
|
|
6337
|
+
let i = getHtmlTagNameEnd(value, start);
|
|
6338
|
+
segments = pushToken(segments, TokenTag, value.slice(start, i));
|
|
6339
|
+
while (i < value.length) {
|
|
6340
|
+
if (value[i] === '>') {
|
|
6341
|
+
segments = pushToken(segments, TokenText, '>');
|
|
6342
|
+
return {
|
|
6343
|
+
end: i + 1,
|
|
6344
|
+
segments
|
|
6345
|
+
};
|
|
6346
|
+
}
|
|
6347
|
+
const state = {
|
|
6348
|
+
i,
|
|
6349
|
+
segments
|
|
6350
|
+
};
|
|
6351
|
+
if (appendHtmlString(value, state)) {
|
|
6352
|
+
({
|
|
6353
|
+
i,
|
|
6354
|
+
segments
|
|
6355
|
+
} = state);
|
|
6356
|
+
continue;
|
|
6357
|
+
}
|
|
6358
|
+
if (appendHtmlAttribute(value, state)) {
|
|
6359
|
+
({
|
|
6360
|
+
i,
|
|
6361
|
+
segments
|
|
6362
|
+
} = state);
|
|
6363
|
+
continue;
|
|
6364
|
+
}
|
|
6365
|
+
segments = pushToken(segments, TokenText, value[i]);
|
|
6366
|
+
i++;
|
|
6367
|
+
}
|
|
6368
|
+
return {
|
|
6369
|
+
end: value.length,
|
|
6370
|
+
segments
|
|
6371
|
+
};
|
|
6372
|
+
};
|
|
6373
|
+
const tokenizeHtml = value => {
|
|
6374
|
+
let segments = [];
|
|
6375
|
+
let i = 0;
|
|
6376
|
+
while (i < value.length) {
|
|
6377
|
+
if (value.startsWith('<!--', i)) {
|
|
6378
|
+
const end = getBlockCommentEnd(value, i, '-->');
|
|
6379
|
+
segments = pushToken(segments, TokenComment, value.slice(i, end));
|
|
6380
|
+
i = end;
|
|
6381
|
+
continue;
|
|
6382
|
+
}
|
|
6383
|
+
if (value[i] === '<') {
|
|
6384
|
+
const {
|
|
6385
|
+
end,
|
|
6386
|
+
segments: tagSegments
|
|
6387
|
+
} = tokenizeHtmlTag(value, i);
|
|
6388
|
+
for (const segment of tagSegments) {
|
|
6389
|
+
segments = pushToken(segments, segment.className, segment.value);
|
|
6390
|
+
}
|
|
6391
|
+
i = end;
|
|
6392
|
+
continue;
|
|
6393
|
+
}
|
|
6394
|
+
const nextTag = value.indexOf('<', i);
|
|
6395
|
+
const end = nextTag === -1 ? value.length : nextTag;
|
|
6396
|
+
segments = pushToken(segments, TokenText, value.slice(i, end));
|
|
6397
|
+
i = end;
|
|
6398
|
+
}
|
|
6399
|
+
return segments;
|
|
6400
|
+
};
|
|
6401
|
+
const getSyntaxHighlightTokens = (value, language) => {
|
|
6402
|
+
switch (language) {
|
|
6403
|
+
case 'css':
|
|
6404
|
+
return tokenizeCss(value);
|
|
6405
|
+
case 'html':
|
|
6406
|
+
return tokenizeHtml(value);
|
|
6407
|
+
case 'javascript':
|
|
6408
|
+
return tokenizeCode(value, jsKeywords, isIdentifierStart, isIdentifierPart, true);
|
|
6409
|
+
case 'json':
|
|
6410
|
+
return getTokenSegments(value);
|
|
6411
|
+
case 'python':
|
|
6412
|
+
return tokenizeCode(value, pythonKeywords, isPythonIdentifierStart, isPythonIdentifierPart, false);
|
|
6413
|
+
case 'typescript':
|
|
6414
|
+
return tokenizeCode(value, tsKeywords, isIdentifierStart, isIdentifierPart, true);
|
|
6415
|
+
}
|
|
6416
|
+
};
|
|
6417
|
+
|
|
6418
|
+
const getTextLineData = value => {
|
|
5599
6419
|
const lines = value.split('\n');
|
|
5600
|
-
|
|
6420
|
+
return lines.map(line => {
|
|
5601
6421
|
return {
|
|
5602
6422
|
childCount: 1,
|
|
5603
6423
|
nodes: [{
|
|
@@ -5607,15 +6427,79 @@ const getTextNode = (value, showLineNumbers = true, cursor = null) => {
|
|
|
5607
6427
|
}, text(line)]
|
|
5608
6428
|
};
|
|
5609
6429
|
});
|
|
6430
|
+
};
|
|
6431
|
+
const getTokenLineData = tokenSegments => {
|
|
6432
|
+
const lineData = [];
|
|
6433
|
+
let currentNodes = [];
|
|
6434
|
+
let childCount = 0;
|
|
6435
|
+
const pushLine = () => {
|
|
6436
|
+
lineData.push({
|
|
6437
|
+
childCount,
|
|
6438
|
+
nodes: currentNodes
|
|
6439
|
+
});
|
|
6440
|
+
currentNodes = [];
|
|
6441
|
+
childCount = 0;
|
|
6442
|
+
};
|
|
6443
|
+
const pushSegment = (className, segmentValue) => {
|
|
6444
|
+
if (!segmentValue) {
|
|
6445
|
+
return;
|
|
6446
|
+
}
|
|
6447
|
+
currentNodes.push({
|
|
6448
|
+
childCount: 1,
|
|
6449
|
+
className,
|
|
6450
|
+
type: Span
|
|
6451
|
+
}, text(segmentValue));
|
|
6452
|
+
childCount++;
|
|
6453
|
+
};
|
|
6454
|
+
for (const segment of tokenSegments) {
|
|
6455
|
+
let start = 0;
|
|
6456
|
+
for (let i = 0; i < segment.value.length; i++) {
|
|
6457
|
+
if (segment.value[i] !== '\n') {
|
|
6458
|
+
continue;
|
|
6459
|
+
}
|
|
6460
|
+
pushSegment(segment.className, segment.value.slice(start, i));
|
|
6461
|
+
pushLine();
|
|
6462
|
+
start = i + 1;
|
|
6463
|
+
}
|
|
6464
|
+
pushSegment(segment.className, segment.value.slice(start));
|
|
6465
|
+
}
|
|
6466
|
+
if (lineData.length === 0 || currentNodes.length > 0) {
|
|
6467
|
+
pushLine();
|
|
6468
|
+
}
|
|
6469
|
+
return lineData;
|
|
6470
|
+
};
|
|
6471
|
+
const getLineData = (value, tokenSegments) => {
|
|
6472
|
+
return tokenSegments ? getTokenLineData(tokenSegments) : getTextLineData(value);
|
|
6473
|
+
};
|
|
6474
|
+
const getTextNode = (value, showLineNumbers = true, cursor = null, tokenSegments, virtualization) => {
|
|
6475
|
+
const lineData = getLineData(value, tokenSegments);
|
|
6476
|
+
if (virtualization) {
|
|
6477
|
+
const slicedLineData = lineData.slice(virtualization.startLineY, virtualization.endLineY);
|
|
6478
|
+
const visibleCursor = cursor && cursor.rowIndex >= virtualization.startLineY && cursor.rowIndex < virtualization.endLineY ? {
|
|
6479
|
+
...cursor,
|
|
6480
|
+
rowIndex: cursor.rowIndex - virtualization.startLineY
|
|
6481
|
+
} : null;
|
|
6482
|
+
return getVirtualizedEditorDom(slicedLineData, showLineNumbers, visibleCursor, showLineNumbers ? HandlePreviewTextPointerDown : undefined, {
|
|
6483
|
+
lineNumberStart: virtualization.startLineY,
|
|
6484
|
+
onScrollBarPointerDown: HandlePreviewTextScrollBarPointerDown,
|
|
6485
|
+
onWheel: HandlePreviewTextWheel,
|
|
6486
|
+
showScrollBar: virtualization.showScrollBar
|
|
6487
|
+
});
|
|
6488
|
+
}
|
|
5610
6489
|
return getEditorDom(lineData, showLineNumbers, cursor, showLineNumbers ? HandlePreviewTextPointerDown : undefined);
|
|
5611
6490
|
};
|
|
5612
6491
|
|
|
5613
|
-
const getPreviewEventNodes = (previewEvent, selectedEvent, previewTextCursor) => {
|
|
6492
|
+
const getPreviewEventNodes = (previewEvent, selectedEvent, previewTextCursor, virtualization) => {
|
|
5614
6493
|
if (typeof previewEvent === 'string') {
|
|
5615
6494
|
const isInvalidImageMessage = previewEvent === ImageCouldNotBeLoaded;
|
|
5616
6495
|
const isChatMessageUpdatedPreview = !!selectedEvent && isChatMessageUpdatedEvent(selectedEvent);
|
|
5617
6496
|
const showLineNumbers = !isInvalidImageMessage && !isChatMessageUpdatedPreview;
|
|
5618
|
-
return getTextNode(previewEvent, showLineNumbers, showLineNumbers ? previewTextCursor ?? null : null);
|
|
6497
|
+
return getTextNode(previewEvent, showLineNumbers, showLineNumbers ? previewTextCursor ?? null : null, undefined, virtualization);
|
|
6498
|
+
}
|
|
6499
|
+
if (isWriteFilePreview(previewEvent)) {
|
|
6500
|
+
const language = getLanguageFromFileExtension(previewEvent.uri);
|
|
6501
|
+
const tokenSegments = language ? getSyntaxHighlightTokens(previewEvent.content, language) : undefined;
|
|
6502
|
+
return getTextNode(previewEvent.content, true, previewTextCursor ?? null, tokenSegments, virtualization);
|
|
5619
6503
|
}
|
|
5620
6504
|
if (previewEvent === undefined) {
|
|
5621
6505
|
return [];
|
|
@@ -5626,33 +6510,27 @@ const getPreviewEventNodes = (previewEvent, selectedEvent, previewTextCursor) =>
|
|
|
5626
6510
|
return getEventNode(previewEvent);
|
|
5627
6511
|
};
|
|
5628
6512
|
|
|
5629
|
-
const
|
|
5630
|
-
|
|
5631
|
-
|
|
5632
|
-
}
|
|
5633
|
-
|
|
5634
|
-
|
|
5635
|
-
|
|
5636
|
-
|
|
5637
|
-
|
|
5638
|
-
|
|
5639
|
-
|
|
5640
|
-
onClick: SelectDetailTab,
|
|
5641
|
-
onFocus: HandleDetailTabsFocus,
|
|
5642
|
-
role: Tab,
|
|
5643
|
-
tabIndex: isSelected ? 0 : -1,
|
|
5644
|
-
type: Button$1
|
|
5645
|
-
}, text(detailTab.label)];
|
|
6513
|
+
const getPreviewContentNodes = (previewEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, virtualization) => {
|
|
6514
|
+
if (previewEventNodes.length > 0) {
|
|
6515
|
+
return previewEventNodes;
|
|
6516
|
+
}
|
|
6517
|
+
if (selectedEvent === null) {
|
|
6518
|
+
return [];
|
|
6519
|
+
}
|
|
6520
|
+
return getPreviewEventNodes(getPreviewEvent(selectedEvent), selectedEvent, previewTextCursorRowIndex === null || previewTextCursorColumnIndex === null ? null : {
|
|
6521
|
+
columnIndex: previewTextCursorColumnIndex,
|
|
6522
|
+
rowIndex: previewTextCursorRowIndex
|
|
6523
|
+
}, virtualization);
|
|
5646
6524
|
};
|
|
5647
6525
|
|
|
5648
|
-
const
|
|
5649
|
-
|
|
5650
|
-
|
|
5651
|
-
|
|
5652
|
-
|
|
5653
|
-
|
|
5654
|
-
|
|
5655
|
-
|
|
6526
|
+
const getResponseContentNodes = (responseEventNodes, selectedEvent) => {
|
|
6527
|
+
if (responseEventNodes.length > 0) {
|
|
6528
|
+
return responseEventNodes;
|
|
6529
|
+
}
|
|
6530
|
+
if (selectedEvent === null) {
|
|
6531
|
+
return [];
|
|
6532
|
+
}
|
|
6533
|
+
return getEventNode(selectedEvent);
|
|
5656
6534
|
};
|
|
5657
6535
|
|
|
5658
6536
|
const timestampFormatter = new Intl.DateTimeFormat('en-US', {
|
|
@@ -5768,96 +6646,63 @@ const getTimingDetailsDom = event => {
|
|
|
5768
6646
|
}, ...getTimingPreviewDom(event), ...getTimingRowDom(started(), getStartText(event)), ...getTimingRowDom(ended(), getEndText(event)), ...getTimingRowDom(duration(), getDurationText(event))];
|
|
5769
6647
|
};
|
|
5770
6648
|
|
|
5771
|
-
const getNextSiblingIndex$2 = (nodes, index) => {
|
|
5772
|
-
let nextSiblingIndex = index + 1;
|
|
5773
|
-
const childCount = nodes[index]?.childCount || 0;
|
|
5774
|
-
for (let i = 0; i < childCount; i++) {
|
|
5775
|
-
nextSiblingIndex = getNextSiblingIndex$2(nodes, nextSiblingIndex);
|
|
5776
|
-
}
|
|
5777
|
-
return nextSiblingIndex;
|
|
5778
|
-
};
|
|
5779
|
-
const getDirectChildCount$1 = nodes => {
|
|
5780
|
-
let count = 0;
|
|
5781
|
-
let index = 0;
|
|
5782
|
-
while (index < nodes.length) {
|
|
5783
|
-
count++;
|
|
5784
|
-
index = getNextSiblingIndex$2(nodes, index);
|
|
5785
|
-
}
|
|
5786
|
-
return count;
|
|
5787
|
-
};
|
|
5788
|
-
const getNormalizedDetailTabs = (selectedEvent, detailTabs) => {
|
|
5789
|
-
if (selectedEvent === null) {
|
|
5790
|
-
return detailTabs;
|
|
5791
|
-
}
|
|
5792
|
-
return createDetailTabs(getSelectedDetailTab(detailTabs), selectedEvent);
|
|
5793
|
-
};
|
|
5794
6649
|
const getTimingContentNodes = (responseEventNodes, selectedEvent) => {
|
|
5795
6650
|
if (selectedEvent === null) {
|
|
5796
6651
|
return responseEventNodes;
|
|
5797
6652
|
}
|
|
5798
6653
|
return getTimingDetailsDom(selectedEvent);
|
|
5799
6654
|
};
|
|
5800
|
-
|
|
5801
|
-
|
|
5802
|
-
return previewEventNodes;
|
|
5803
|
-
}
|
|
5804
|
-
if (selectedEvent === null) {
|
|
5805
|
-
return [];
|
|
5806
|
-
}
|
|
5807
|
-
return getPreviewEventNodes(getPreviewEvent(selectedEvent), selectedEvent, previewTextCursorRowIndex === null || previewTextCursorColumnIndex === null ? null : {
|
|
5808
|
-
columnIndex: previewTextCursorColumnIndex,
|
|
5809
|
-
rowIndex: previewTextCursorRowIndex
|
|
5810
|
-
});
|
|
5811
|
-
};
|
|
5812
|
-
const getPayloadContentNodes = (payloadEventNodes, selectedEvent) => {
|
|
5813
|
-
if (payloadEventNodes.length > 0) {
|
|
5814
|
-
return payloadEventNodes;
|
|
5815
|
-
}
|
|
5816
|
-
if (selectedEvent === null) {
|
|
5817
|
-
return [];
|
|
5818
|
-
}
|
|
5819
|
-
return getEventNode(getPayloadEvent(selectedEvent));
|
|
5820
|
-
};
|
|
5821
|
-
const getResponseContentNodes = (responseEventNodes, selectedEvent) => {
|
|
5822
|
-
if (responseEventNodes.length > 0) {
|
|
5823
|
-
return responseEventNodes;
|
|
5824
|
-
}
|
|
5825
|
-
if (selectedEvent === null) {
|
|
5826
|
-
return [];
|
|
5827
|
-
}
|
|
5828
|
-
return getEventNode(selectedEvent);
|
|
5829
|
-
};
|
|
5830
|
-
const getSelectedContentNodes = (safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex) => {
|
|
6655
|
+
|
|
6656
|
+
const getSelectedContentNodes = (safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization) => {
|
|
5831
6657
|
if (safeSelectedDetailTab === Timing) {
|
|
5832
6658
|
return getTimingContentNodes(responseEventNodes, selectedEvent);
|
|
5833
6659
|
}
|
|
5834
6660
|
if (safeSelectedDetailTab === Preview) {
|
|
5835
|
-
return getPreviewContentNodes(previewEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex);
|
|
6661
|
+
return getPreviewContentNodes(previewEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization);
|
|
5836
6662
|
}
|
|
5837
6663
|
if (safeSelectedDetailTab === Payload) {
|
|
5838
6664
|
return getPayloadContentNodes(payloadEventNodes, selectedEvent);
|
|
5839
6665
|
}
|
|
5840
6666
|
return getResponseContentNodes(responseEventNodes, selectedEvent);
|
|
5841
6667
|
};
|
|
5842
|
-
|
|
6668
|
+
|
|
6669
|
+
const getDetailTabDom = detailTab => {
|
|
6670
|
+
const {
|
|
6671
|
+
isSelected
|
|
6672
|
+
} = detailTab;
|
|
6673
|
+
return [{
|
|
6674
|
+
'aria-controls': getPanelId(detailTab.name),
|
|
6675
|
+
ariaSelected: isSelected,
|
|
6676
|
+
childCount: 1,
|
|
6677
|
+
className: mergeClassNames(PanelTab, isSelected ? PanelTabSelected : ''),
|
|
6678
|
+
name: detailTab.name,
|
|
6679
|
+
onChange: SelectDetailTab,
|
|
6680
|
+
onClick: SelectDetailTab,
|
|
6681
|
+
onFocus: HandleDetailTabsFocus,
|
|
6682
|
+
role: Tab,
|
|
6683
|
+
tabIndex: isSelected ? 0 : -1,
|
|
6684
|
+
type: Button$1
|
|
6685
|
+
}, text(detailTab.label)];
|
|
6686
|
+
};
|
|
6687
|
+
|
|
6688
|
+
const getTabNodes = detailTabs => {
|
|
6689
|
+
return [{
|
|
6690
|
+
'aria-label': detailSections(),
|
|
6691
|
+
childCount: detailTabs.length,
|
|
6692
|
+
className: ChatDebugViewDetailsTabs,
|
|
6693
|
+
role: 'tablist',
|
|
6694
|
+
type: Div
|
|
6695
|
+
}, ...detailTabs.flatMap(getDetailTabDom)];
|
|
6696
|
+
};
|
|
6697
|
+
|
|
6698
|
+
const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes, responseEventNodes = payloadEventNodes, selectedEvent = null, detailTabs = createDetailTabs(), previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, previewVirtualization) => {
|
|
5843
6699
|
if (previewEventNodes.length === 0 && payloadEventNodes.length === 0 && responseEventNodes.length === 0) {
|
|
5844
6700
|
return [];
|
|
5845
6701
|
}
|
|
5846
6702
|
const normalizedDetailTabs = getNormalizedDetailTabs(selectedEvent, detailTabs);
|
|
5847
6703
|
const safeSelectedDetailTab = getSelectedDetailTab(normalizedDetailTabs);
|
|
5848
6704
|
const selectedDetailTab = normalizedDetailTabs.find(detailTab => detailTab.name === safeSelectedDetailTab) ?? normalizedDetailTabs[0];
|
|
5849
|
-
const
|
|
5850
|
-
const contentNodes = getSelectedContentNodes(safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex);
|
|
5851
|
-
return [{
|
|
5852
|
-
'aria-label': selectedDetailTab.label,
|
|
5853
|
-
childCount: getDirectChildCount$1(contentNodes),
|
|
5854
|
-
className: ChatDebugViewDetailsBottom,
|
|
5855
|
-
id: getPanelId(safeSelectedDetailTab),
|
|
5856
|
-
onContextMenu: HandleDetailsContextMenu,
|
|
5857
|
-
role: 'tabpanel',
|
|
5858
|
-
type: Div
|
|
5859
|
-
}, ...contentNodes];
|
|
5860
|
-
};
|
|
6705
|
+
const contentNodes = getSelectedContentNodes(safeSelectedDetailTab, previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualization);
|
|
5861
6706
|
return [{
|
|
5862
6707
|
childCount: 2,
|
|
5863
6708
|
className: ChatDebugViewDetails,
|
|
@@ -5867,7 +6712,27 @@ const getDetailsDom = (previewEventNodes, payloadEventNodes = previewEventNodes,
|
|
|
5867
6712
|
className: ChatDebugViewDetailsTop,
|
|
5868
6713
|
onContextMenu: HandleDetailsTopContextMenu,
|
|
5869
6714
|
type: Div
|
|
5870
|
-
}, ...getDetailsCloseButtonDom(), ...getTabNodes(normalizedDetailTabs), ...getDetailContentDom()];
|
|
6715
|
+
}, ...getDetailsCloseButtonDom(), ...getTabNodes(normalizedDetailTabs), ...getDetailContentDom(selectedDetailTab, safeSelectedDetailTab, contentNodes)];
|
|
6716
|
+
};
|
|
6717
|
+
|
|
6718
|
+
const getMethods = new Set(['list_dir', 'list_files', 'read_file']);
|
|
6719
|
+
const postMethods = new Set(['create_directory', 'create_file', 'mkdir', 'write_file']);
|
|
6720
|
+
const deleteMethods = new Set(['delete_directory', 'delete_file', 'delete_folder', 'remove_directory', 'remove_file', 'remove_folder']);
|
|
6721
|
+
const getEventTableMethodLabel = event => {
|
|
6722
|
+
const toolName = getToolName(event);
|
|
6723
|
+
if (!toolName) {
|
|
6724
|
+
return '';
|
|
6725
|
+
}
|
|
6726
|
+
if (getMethods.has(toolName)) {
|
|
6727
|
+
return 'GET';
|
|
6728
|
+
}
|
|
6729
|
+
if (postMethods.has(toolName)) {
|
|
6730
|
+
return 'POST';
|
|
6731
|
+
}
|
|
6732
|
+
if (deleteMethods.has(toolName)) {
|
|
6733
|
+
return 'DELETE';
|
|
6734
|
+
}
|
|
6735
|
+
return '';
|
|
5871
6736
|
};
|
|
5872
6737
|
|
|
5873
6738
|
const getRowCellNodes = (event, isErrorStatus, visibleTableColumns) => {
|
|
@@ -5880,6 +6745,12 @@ const getRowCellNodes = (event, isErrorStatus, visibleTableColumns) => {
|
|
|
5880
6745
|
className: mergeClassNames(TableCell, ChatDebugViewCellDuration),
|
|
5881
6746
|
type: Td
|
|
5882
6747
|
}, text(getEventTableDurationText(event))];
|
|
6748
|
+
case Method:
|
|
6749
|
+
return [{
|
|
6750
|
+
childCount: 1,
|
|
6751
|
+
className: TableCell,
|
|
6752
|
+
type: Td
|
|
6753
|
+
}, text(getEventTableMethodLabel(event))];
|
|
5883
6754
|
case Status$1:
|
|
5884
6755
|
return [{
|
|
5885
6756
|
childCount: 1,
|
|
@@ -6050,7 +6921,7 @@ const getTableBodyDom = (rowNodes, eventCount) => {
|
|
|
6050
6921
|
}, ...rowNodes];
|
|
6051
6922
|
};
|
|
6052
6923
|
|
|
6053
|
-
const tableColClassNames = ['TableColZero', 'TableColOne', 'TableColTwo'];
|
|
6924
|
+
const tableColClassNames = ['TableColZero', 'TableColOne', 'TableColTwo', 'TableColThree'];
|
|
6054
6925
|
const getTableColumnGroupDom = visibleTableColumns => {
|
|
6055
6926
|
const orderedVisibleTableColumns = getOrderedVisibleTableColumns(visibleTableColumns);
|
|
6056
6927
|
return [{
|
|
@@ -6073,6 +6944,7 @@ const getHeaderCellNode = (column, tableColumns) => {
|
|
|
6073
6944
|
type: Th
|
|
6074
6945
|
}, text(getTableColumnLabel(tableColumns, column))];
|
|
6075
6946
|
};
|
|
6947
|
+
|
|
6076
6948
|
const getHeaderCellNodes = (visibleTableColumns, tableColumns = createTableColumns()) => {
|
|
6077
6949
|
const orderedVisibleTableColumns = getOrderedVisibleTableColumns(visibleTableColumns, tableColumns);
|
|
6078
6950
|
return orderedVisibleTableColumns.flatMap(column => getHeaderCellNode(column, tableColumns));
|
|
@@ -6101,8 +6973,8 @@ const getTableDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleT
|
|
|
6101
6973
|
}, ...getTableColumnGroupDom(visibleTableColumns), ...getTableHeaderDom(visibleTableColumns, tableColumns), ...getTableBodyDom(rowNodes, eventCount)];
|
|
6102
6974
|
};
|
|
6103
6975
|
|
|
6104
|
-
const resizerNames = ['ResizerOne', 'ResizerTwo'];
|
|
6105
|
-
const resizerClassNames = [ResizerOne, ResizerTwo];
|
|
6976
|
+
const resizerNames = ['ResizerOne', 'ResizerTwo', 'ResizerThree'];
|
|
6977
|
+
const resizerClassNames = [ResizerOne, ResizerTwo, ResizerThree];
|
|
6106
6978
|
const getTableResizersDom = visibleTableColumns => {
|
|
6107
6979
|
const visibleColumnCount = getOrderedVisibleTableColumns(visibleTableColumns).length;
|
|
6108
6980
|
const resizerCount = Math.max(0, visibleColumnCount - 1);
|
|
@@ -6127,6 +6999,7 @@ const getTableResizersDom = visibleTableColumns => {
|
|
|
6127
6999
|
return [{
|
|
6128
7000
|
childCount: resizerCount,
|
|
6129
7001
|
className: Resizers,
|
|
7002
|
+
role: None,
|
|
6130
7003
|
type: Div
|
|
6131
7004
|
}, ...resizerNodes];
|
|
6132
7005
|
};
|
|
@@ -6147,7 +7020,7 @@ const getTableScrollBarDom = visible => {
|
|
|
6147
7020
|
}];
|
|
6148
7021
|
};
|
|
6149
7022
|
|
|
6150
|
-
const getTableWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summary = '', focus = 0, className = '', role = '', showScrollBar = false) => {
|
|
7023
|
+
const getTableWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summary = '', focus = 0, className = '', role = 'none', showScrollBar = false) => {
|
|
6151
7024
|
const tableWrapperClassName = mergeClassNames(TableWrapper, focus === FocusChatDebugTable ? FocusOutline : '', className);
|
|
6152
7025
|
const tableWrapperNode = {
|
|
6153
7026
|
childCount: showScrollBar ? 3 : 2,
|
|
@@ -6161,7 +7034,7 @@ const getTableWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultV
|
|
|
6161
7034
|
return [tableWrapperNode, ...getTableDom(rowNodes, eventCount, visibleTableColumns, tableColumns, summary, focus), ...getTableResizersDom(visibleTableColumns), ...getTableScrollBarDom(showScrollBar)];
|
|
6162
7035
|
};
|
|
6163
7036
|
|
|
6164
|
-
const getTableWrapperWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summary = '', focus = 0, className = '', role = '', showScrollBar = false) => {
|
|
7037
|
+
const getTableWrapperWrapperDom = (rowNodes, eventCount, visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), summary = '', focus = 0, className = '', role = 'none', showScrollBar = false) => {
|
|
6165
7038
|
const tableSummaryNodes = getTableSummaryDom(summary);
|
|
6166
7039
|
return [{
|
|
6167
7040
|
childCount: tableSummaryNodes.length === 0 ? 1 : 2,
|
|
@@ -6338,25 +7211,31 @@ const getTimelineDom = (timelineInfo, hoverPercent = null) => {
|
|
|
6338
7211
|
}, ...selectionNodes];
|
|
6339
7212
|
};
|
|
6340
7213
|
|
|
6341
|
-
const getDevtoolsDom = (events, selectedEvent, selectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage = noEventsFound(), timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', detailTabs = createDetailTabs(), visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), timelineInfo, timelineHoverPercent = null, focus = 0, previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, minLineY = 0, maxLineY = events.length) => {
|
|
7214
|
+
const getDevtoolsDom = (events, selectedEvent, selectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage = noEventsFound(), timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', detailTabs = createDetailTabs(), visibleTableColumns = defaultVisibleTableColumns, tableColumns = createTableColumns(), timelineInfo, timelineHoverPercent = null, focus = 0, previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, previewTextDeltaY = 0, previewTextViewportHeight = 0, minLineY = 0, maxLineY = events.length) => {
|
|
6342
7215
|
const visibleEvents = events.slice(minLineY, maxLineY);
|
|
6343
7216
|
const rowNodes = getDevtoolsRows(visibleEvents, selectedEventIndex, visibleTableColumns, minLineY);
|
|
6344
7217
|
const effectiveRange = getEffectiveTimelineRange(timelineStartSeconds, timelineEndSeconds, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds);
|
|
6345
7218
|
const resolvedTimelineInfo = timelineInfo || getTimelineInfo(timelineEvents, effectiveRange.startSeconds, effectiveRange.endSeconds);
|
|
6346
7219
|
const timelineNodes = getTimelineDom(resolvedTimelineInfo, timelineHoverPercent);
|
|
6347
7220
|
const previewEvent = selectedEvent ? getPreviewEvent(selectedEvent) : undefined;
|
|
7221
|
+
const previewVirtualization = getPreviewVirtualizationState(selectedEvent, previewTextViewportHeight, previewTextDeltaY);
|
|
7222
|
+
const previewVirtualizationOptions = previewTextViewportHeight <= 0 || previewVirtualization.totalLineCount === 0 ? undefined : {
|
|
7223
|
+
endLineY: previewVirtualization.endLineY,
|
|
7224
|
+
showScrollBar: previewVirtualization.showScrollBar,
|
|
7225
|
+
startLineY: previewVirtualization.startLineY
|
|
7226
|
+
};
|
|
6348
7227
|
const previewEventNodes = getPreviewEventNodes(previewEvent, selectedEvent, previewTextCursorRowIndex === null || previewTextCursorColumnIndex === null ? null : {
|
|
6349
7228
|
columnIndex: previewTextCursorColumnIndex,
|
|
6350
7229
|
rowIndex: previewTextCursorRowIndex
|
|
6351
|
-
});
|
|
7230
|
+
}, previewVirtualizationOptions);
|
|
6352
7231
|
const payloadEventNodes = selectedEvent ? getEventNode(getPayloadEvent(selectedEvent)) : [];
|
|
6353
7232
|
const responseEventNodes = selectedEvent ? getEventNode(getResponseEvent(selectedEvent)) : [];
|
|
6354
|
-
const hasSelectedEvent =
|
|
7233
|
+
const hasSelectedEvent = !!selectedEvent;
|
|
6355
7234
|
const eventsClassName = getEventsClassName(hasSelectedEvent);
|
|
6356
7235
|
const summary = getTableSummary(events);
|
|
6357
7236
|
const showScrollBar = visibleEvents.length < events.length;
|
|
6358
7237
|
const tableNodes = events.length === 0 ? getEmptyStateDom(emptyMessage) : getTableWrapperWrapperDom(rowNodes, visibleEvents.length, visibleTableColumns, tableColumns, summary, focus, '', '', showScrollBar);
|
|
6359
|
-
const detailsNodes = getDetailsDom(previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, detailTabs, previewTextCursorRowIndex, previewTextCursorColumnIndex);
|
|
7238
|
+
const detailsNodes = getDetailsDom(previewEventNodes, payloadEventNodes, responseEventNodes, selectedEvent, detailTabs, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewVirtualizationOptions);
|
|
6360
7239
|
const sashNodes = getSashNodesDom(hasSelectedEvent);
|
|
6361
7240
|
const splitChildCount = hasSelectedEvent ? 3 : 1;
|
|
6362
7241
|
const rootChildCount = 3;
|
|
@@ -6410,7 +7289,7 @@ const getEventCategoryFilterDescription = eventCategoryFilters => {
|
|
|
6410
7289
|
}
|
|
6411
7290
|
return eventCategoryFilters.map(eventCategoryFilter => getEventCategoryFilterLabel(eventCategoryFilter).toLowerCase()).join(', ');
|
|
6412
7291
|
};
|
|
6413
|
-
const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, categoryFilters, _showEventStreamFinishedEvents, _showInputEvents, _showResponsePartEvents, useDevtoolsLayout, selectedEvent, selectedEventIndex, timelineStartSeconds, timelineEndSeconds, timelineFilterDescription, timelineEvents, events, timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', visibleTableColumns = defaultVisibleTableColumns, detailTabs = createDetailTabs(), tableColumns = createTableColumns(), timelineInfo, timelineHoverPercent = null, focus = 0, previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, minLineY = 0, maxLineY = events.length) => {
|
|
7292
|
+
const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, categoryFilters, _showEventStreamFinishedEvents, _showInputEvents, _showResponsePartEvents, useDevtoolsLayout, selectedEvent, selectedEventIndex, timelineStartSeconds, timelineEndSeconds, timelineFilterDescription, timelineEvents, events, timelineSelectionActive = false, timelineSelectionAnchorSeconds = '', timelineSelectionFocusSeconds = '', visibleTableColumns = defaultVisibleTableColumns, detailTabs = createDetailTabs(), tableColumns = createTableColumns(), timelineInfo, timelineHoverPercent = null, focus = 0, previewTextCursorRowIndex = null, previewTextCursorColumnIndex = null, minLineY = 0, maxLineY = events.length, previewTextDeltaY = 0, previewTextViewportHeight = 0) => {
|
|
6414
7293
|
if (errorMessage) {
|
|
6415
7294
|
return getDebugErrorDom(errorMessage);
|
|
6416
7295
|
}
|
|
@@ -6434,13 +7313,14 @@ const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, ca
|
|
|
6434
7313
|
const emptyMessage = getEmptyMessage(events.length, hasFilterValue, useNoToolCallEventsMessage, noFilteredEventsMessage);
|
|
6435
7314
|
const safeSelectedEventIndex = selectedEventIndex === null || selectedEventIndex < 0 || selectedEventIndex >= events.length ? null : selectedEventIndex;
|
|
6436
7315
|
if (useDevtoolsLayout) {
|
|
6437
|
-
const devtoolsDom = getDevtoolsDom(events, selectedEvent, safeSelectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds, detailTabs, visibleTableColumns, tableColumns, timelineInfo, timelineHoverPercent, focus, previewTextCursorRowIndex, previewTextCursorColumnIndex, minLineY, maxLineY);
|
|
7316
|
+
const devtoolsDom = getDevtoolsDom(events, selectedEvent, safeSelectedEventIndex, timelineEvents, timelineStartSeconds, timelineEndSeconds, emptyMessage, timelineSelectionActive, timelineSelectionAnchorSeconds, timelineSelectionFocusSeconds, detailTabs, visibleTableColumns, tableColumns, timelineInfo, timelineHoverPercent, focus, previewTextCursorRowIndex, previewTextCursorColumnIndex, previewTextDeltaY, previewTextViewportHeight, minLineY, maxLineY);
|
|
6438
7317
|
const devtoolsContentNodes = devtoolsDom.slice(1);
|
|
6439
7318
|
const topLevelNodes = [...getDebugViewTopDom(filterValue, useDevtoolsLayout, categoryFilters), ...devtoolsContentNodes];
|
|
6440
7319
|
const rootChildCount = getTopLevelChildCount(topLevelNodes);
|
|
6441
7320
|
return [{
|
|
6442
7321
|
childCount: rootChildCount,
|
|
6443
7322
|
className: mergeClassNames(ChatDebugView, ChatDebugViewDevtools),
|
|
7323
|
+
onContextMenu: HandleRootContextMenu,
|
|
6444
7324
|
type: Div
|
|
6445
7325
|
}, ...topLevelNodes];
|
|
6446
7326
|
}
|
|
@@ -6450,6 +7330,7 @@ const getChatDebugViewDom = (errorMessage, filterValue, eventCategoryFilters, ca
|
|
|
6450
7330
|
return [{
|
|
6451
7331
|
childCount: rootChildCount,
|
|
6452
7332
|
className: mergeClassNames(ChatDebugView, useDevtoolsLayout ? ChatDebugViewDevtools : ''),
|
|
7333
|
+
onContextMenu: HandleRootContextMenu,
|
|
6453
7334
|
type: Div
|
|
6454
7335
|
}, ...debugViewTopDom, ...contentNodes];
|
|
6455
7336
|
};
|
|
@@ -6467,7 +7348,8 @@ const renderItems = (oldState, newState) => {
|
|
|
6467
7348
|
return [SetDom2, newState.uid, []];
|
|
6468
7349
|
}
|
|
6469
7350
|
const filteredEvents = getCurrentEvents$2(newState);
|
|
6470
|
-
const
|
|
7351
|
+
const previewTextViewportHeight = getPreviewTextViewportHeight(newState);
|
|
7352
|
+
const dom = getChatDebugViewDom(newState.errorMessage, newState.filterValue, getSelectedEventCategoryFilters(newState.categoryFilters), newState.categoryFilters, newState.showEventStreamFinishedEvents, newState.showInputEvents, newState.showResponsePartEvents, newState.useDevtoolsLayout, newState.selectedEvent, newState.selectedEventIndex, newState.timelineStartSeconds, newState.timelineEndSeconds, newState.timelineFilterDescription, withSessionEventIds(newState.timelineEvents), withSessionEventIds(filteredEvents), newState.timelineSelectionActive, newState.timelineSelectionAnchorSeconds, newState.timelineSelectionFocusSeconds, getVisibleTableColumns(newState.tableColumns), newState.detailTabs, newState.tableColumns, newState.timelineInfo, newState.timelineHoverPercent, newState.focus, newState.previewTextCursorRowIndex, newState.previewTextCursorColumnIndex, newState.tableMinLineY, newState.tableMaxLineY, newState.previewTextDeltaY, previewTextViewportHeight);
|
|
6471
7353
|
return [SetDom2, newState.uid, dom];
|
|
6472
7354
|
};
|
|
6473
7355
|
|
|
@@ -6539,6 +7421,10 @@ const render2 = (uid, diffResult) => {
|
|
|
6539
7421
|
|
|
6540
7422
|
const renderEventListeners = () => {
|
|
6541
7423
|
return [{
|
|
7424
|
+
name: HandleRootContextMenu,
|
|
7425
|
+
params: ['handleRootContextMenu'],
|
|
7426
|
+
preventDefault: true
|
|
7427
|
+
}, {
|
|
6542
7428
|
name: HandleHeaderContextMenu,
|
|
6543
7429
|
params: ['handleHeaderContextMenu', ClientX, ClientY],
|
|
6544
7430
|
preventDefault: true
|
|
@@ -6626,6 +7512,21 @@ const renderEventListeners = () => {
|
|
|
6626
7512
|
params: ['handleTableWheel', 'event.deltaY'],
|
|
6627
7513
|
passive: true,
|
|
6628
7514
|
preventDefault: true
|
|
7515
|
+
}, {
|
|
7516
|
+
name: HandlePreviewTextWheel,
|
|
7517
|
+
params: ['handlePreviewTextWheel', 'event.deltaY'],
|
|
7518
|
+
passive: true,
|
|
7519
|
+
preventDefault: true
|
|
7520
|
+
}, {
|
|
7521
|
+
name: HandlePreviewTextScrollBarPointerDown,
|
|
7522
|
+
params: ['handlePreviewTextScrollBarPointerDown', ClientY],
|
|
7523
|
+
trackPointerEvents: [HandlePreviewTextScrollBarPointerMove, HandlePreviewTextScrollBarPointerUp]
|
|
7524
|
+
}, {
|
|
7525
|
+
name: HandlePreviewTextScrollBarPointerMove,
|
|
7526
|
+
params: ['handlePreviewTextScrollBarPointerMove', ClientY]
|
|
7527
|
+
}, {
|
|
7528
|
+
name: HandlePreviewTextScrollBarPointerUp,
|
|
7529
|
+
params: ['handlePreviewTextScrollBarPointerUp']
|
|
6629
7530
|
}, {
|
|
6630
7531
|
name: HandleTimelinePointerDown,
|
|
6631
7532
|
params: ['handleTimelinePointerDown', TargetName, ClientX],
|
|
@@ -6653,11 +7554,13 @@ const rerender = state => {
|
|
|
6653
7554
|
};
|
|
6654
7555
|
|
|
6655
7556
|
const resetTableColumns = state => {
|
|
6656
|
-
if (getVisibleTableColumns(state.tableColumns).join(',') === defaultVisibleTableColumns.join(',') && isSameTableColumnWidths(state.tableColumnWidths, defaultTableColumnWidths)) {
|
|
7557
|
+
if (getVisibleTableColumns(state.tableColumns).join(',') === defaultVisibleTableColumns.join(',') && isSameTableColumnWidths(state.tableColumnWidths, defaultTableColumnWidths) && state.sortColumn === '' && state.sortDescending === false) {
|
|
6657
7558
|
return state;
|
|
6658
7559
|
}
|
|
6659
7560
|
return {
|
|
6660
7561
|
...state,
|
|
7562
|
+
sortColumn: '',
|
|
7563
|
+
sortDescending: false,
|
|
6661
7564
|
tableColumns: createTableColumns(),
|
|
6662
7565
|
tableColumnWidths: defaultTableColumnWidths
|
|
6663
7566
|
};
|
|
@@ -6727,6 +7630,9 @@ const setEvents = (state, events) => {
|
|
|
6727
7630
|
initial: false,
|
|
6728
7631
|
previewTextCursorColumnIndex: null,
|
|
6729
7632
|
previewTextCursorRowIndex: null,
|
|
7633
|
+
previewTextDeltaY: 0,
|
|
7634
|
+
previewTextScrollBarHandleOffset: 0,
|
|
7635
|
+
previewTextScrollBarPointerActive: false,
|
|
6730
7636
|
selectedEvent: null,
|
|
6731
7637
|
selectedEventId: null,
|
|
6732
7638
|
selectedEventIndex: null
|
|
@@ -6754,6 +7660,9 @@ const setSessionId = async (state, sessionId) => {
|
|
|
6754
7660
|
initial: false,
|
|
6755
7661
|
previewTextCursorColumnIndex: null,
|
|
6756
7662
|
previewTextCursorRowIndex: null,
|
|
7663
|
+
previewTextDeltaY: 0,
|
|
7664
|
+
previewTextScrollBarHandleOffset: 0,
|
|
7665
|
+
previewTextScrollBarPointerActive: false,
|
|
6757
7666
|
selectedEvent: null,
|
|
6758
7667
|
selectedEventId: null,
|
|
6759
7668
|
selectedEventIndex: null,
|
|
@@ -6770,6 +7679,9 @@ const setSessionId = async (state, sessionId) => {
|
|
|
6770
7679
|
initial: false,
|
|
6771
7680
|
previewTextCursorColumnIndex: null,
|
|
6772
7681
|
previewTextCursorRowIndex: null,
|
|
7682
|
+
previewTextDeltaY: 0,
|
|
7683
|
+
previewTextScrollBarHandleOffset: 0,
|
|
7684
|
+
previewTextScrollBarPointerActive: false,
|
|
6773
7685
|
selectedEvent: null,
|
|
6774
7686
|
selectedEventId: null,
|
|
6775
7687
|
selectedEventIndex: null,
|
|
@@ -6820,6 +7732,11 @@ const commandMap = {
|
|
|
6820
7732
|
'ChatDebug.handleHeaderContextMenu': wrapCommand(handleHeaderContextMenu),
|
|
6821
7733
|
'ChatDebug.handleInput': wrapCommand(handleInput),
|
|
6822
7734
|
'ChatDebug.handlePreviewTextPointerDown': wrapCommand(handlePreviewTextPointerDown),
|
|
7735
|
+
'ChatDebug.handlePreviewTextScrollBarPointerDown': wrapCommand(handlePreviewTextScrollBarPointerDown),
|
|
7736
|
+
'ChatDebug.handlePreviewTextScrollBarPointerMove': wrapCommand(handlePreviewTextScrollBarPointerMove),
|
|
7737
|
+
'ChatDebug.handlePreviewTextScrollBarPointerUp': wrapCommand(handlePreviewTextScrollBarPointerUp),
|
|
7738
|
+
'ChatDebug.handlePreviewTextWheel': wrapCommand(handlePreviewTextWheel),
|
|
7739
|
+
'ChatDebug.handleRootContextMenu': wrapCommand(handleRootContextMenu),
|
|
6823
7740
|
'ChatDebug.handleSashPointerDown': wrapCommand(handleSashPointerDown),
|
|
6824
7741
|
'ChatDebug.handleSashPointerMove': wrapCommand(handleSashPointerMove),
|
|
6825
7742
|
'ChatDebug.handleSashPointerUp': wrapCommand(handleSashPointerUp),
|