chrome-devtools-frontend 1.0.1654411 → 1.0.1656897
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/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +116 -0
- package/.agents/skills/ui-eng-vision-logic-consolidator/SKILL.md +82 -0
- package/.agents/skills/ui-eng-vision-orchestrator/SKILL.md +123 -0
- package/.agents/skills/ui-eng-vision-test-scaffolder/SKILL.md +125 -0
- package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +75 -0
- package/AUTHORS +1 -0
- package/config/owner/COMMON_OWNERS +0 -4
- package/docs/playbook.md +1 -1
- package/front_end/Tests.js +1 -0
- package/front_end/core/common/Settings.ts +47 -30
- package/front_end/core/sdk/CPUThrottlingManager.ts +10 -159
- package/front_end/core/sdk/ConsoleModel.ts +13 -11
- package/front_end/core/sdk/DOMDebuggerModel.ts +11 -5
- package/front_end/core/sdk/DOMModel.ts +7 -5
- package/front_end/core/sdk/EventBreakpointsModel.ts +9 -5
- package/front_end/core/sdk/IsolateManager.ts +6 -6
- package/front_end/core/sdk/ResourceTreeModel.ts +5 -3
- package/front_end/core/sdk/SourceMapCache.ts +2 -4
- package/front_end/core/sdk/SourceMapManager.ts +8 -7
- package/front_end/core/sdk/TargetManager.ts +17 -0
- package/front_end/entrypoints/devtools_app/devtools_app.ts +0 -1
- package/front_end/entrypoints/main/MainImpl.ts +12 -36
- package/front_end/entrypoints/main/SimpleApp.ts +0 -13
- package/front_end/entrypoints/main/main-meta.ts +1 -1
- package/front_end/foundation/Universe.ts +110 -3
- package/front_end/generated/InspectorBackendCommands.ts +5 -1
- package/front_end/generated/SupportedCSSProperties.js +2 -6
- package/front_end/generated/protocol-mapping.d.ts +8 -0
- package/front_end/generated/protocol-proxy-api.d.ts +15 -0
- package/front_end/generated/protocol.ts +36 -1
- package/front_end/models/ai_assistance/AiConversation.ts +0 -6
- package/front_end/models/ai_assistance/agents/NetworkAgent.snapshot.txt +1 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -156
- package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +0 -24
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +2 -358
- package/front_end/models/ai_assistance/ai_assistance.ts +0 -6
- package/front_end/models/ai_assistance/contexts/RequestContext.snapshot.txt +0 -1
- package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +0 -2
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +1 -14
- package/front_end/models/autofill_manager/AutofillManager.ts +1 -2
- package/front_end/models/crux-manager/CrUXManager.ts +16 -11
- package/front_end/models/javascript_metadata/NativeFunctions.js +1 -1
- package/front_end/models/persistence/AutomaticFileSystemManager.ts +14 -13
- package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +12 -9
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +18 -9
- package/front_end/models/project_settings/ProjectSettingsModel.ts +12 -11
- package/front_end/models/trace/handlers/ScreenshotsHandler.ts +14 -59
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +3 -29
- package/front_end/panels/application/DeviceBoundSessionsView.ts +15 -3
- package/front_end/panels/application/FrameDetailsView.ts +2 -1
- package/front_end/panels/application/ServiceWorkersView.ts +193 -161
- package/front_end/panels/application/serviceWorkersView.css +8 -0
- package/front_end/panels/common/CPUThrottlingOption.ts +142 -0
- package/front_end/panels/common/ThrottlingUtils.ts +9 -4
- package/front_end/panels/common/common.ts +1 -1
- package/front_end/panels/console/ConsoleViewMessage.ts +45 -0
- package/front_end/panels/elements/ElementsPanel.ts +35 -102
- package/front_end/panels/elements/ElementsTreeOutline.ts +0 -4
- package/front_end/panels/elements/elements-meta.ts +3 -2
- package/front_end/panels/emulation/DeviceModeToolbar.ts +46 -45
- package/front_end/panels/mobile_throttling/CalibrationController.ts +6 -5
- package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +1 -1
- package/front_end/panels/mobile_throttling/ThrottlingManager.ts +40 -13
- package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +13 -17
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +15 -13
- package/front_end/panels/network/NetworkLogView.ts +0 -9
- package/front_end/panels/network/NetworkPanel.ts +1 -63
- package/front_end/panels/network/RequestInitiatorView.ts +29 -4
- package/front_end/panels/network/components/HeaderSectionRow.css +9 -7
- package/front_end/panels/network/components/HeaderSectionRow.ts +20 -1
- package/front_end/panels/network/components/RequestHeaderSection.css +5 -3
- package/front_end/panels/network/components/RequestHeaderSection.ts +1 -2
- package/front_end/panels/network/components/RequestHeadersView.css +1 -1
- package/front_end/panels/security/SecurityPanel.ts +36 -23
- package/front_end/panels/settings/SettingsScreen.ts +18 -103
- package/front_end/panels/settings/settings-meta.ts +0 -24
- package/front_end/panels/timeline/TimelineController.ts +3 -2
- package/front_end/panels/timeline/TimelinePanel.ts +20 -3
- package/front_end/panels/timeline/components/CPUThrottlingSelector.ts +15 -14
- package/front_end/panels/timeline/timelineFlamechartPopover.css +2 -0
- package/front_end/panels/utils/utils.ts +25 -24
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +34 -55
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +96 -83
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/CDPSession.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/CDPSession.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPResponse.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Target.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Target.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Realm.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Realm.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +5 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/FrameManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/FrameManager.js +23 -13
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPResponse.js +4 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Input.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/LifecycleWatcher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/LifecycleWatcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts +3 -41
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/WebMCP.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js +4 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/LaunchOptions.d.ts +5 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/httpUtils.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/httpUtils.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/httpUtils.js +5 -5
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/httpUtils.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +34 -55
- package/front_end/third_party/puppeteer/package/package.json +4 -4
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +13 -1
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +2 -3
- package/front_end/third_party/puppeteer/package/src/api/CDPSession.ts +3 -1
- package/front_end/third_party/puppeteer/package/src/api/HTTPResponse.ts +3 -2
- package/front_end/third_party/puppeteer/package/src/api/Realm.ts +1 -2
- package/front_end/third_party/puppeteer/package/src/api/Target.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +1 -2
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +3 -1
- package/front_end/third_party/puppeteer/package/src/bidi/core/Realm.ts +1 -3
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +13 -3
- package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/cdp/FrameManager.ts +24 -13
- package/front_end/third_party/puppeteer/package/src/cdp/HTTPResponse.ts +4 -1
- package/front_end/third_party/puppeteer/package/src/cdp/Input.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/cdp/LifecycleWatcher.ts +1 -4
- package/front_end/third_party/puppeteer/package/src/cdp/Target.ts +2 -4
- package/front_end/third_party/puppeteer/package/src/cdp/WebMCP.ts +7 -76
- package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +1 -4
- package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +4 -1
- package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +5 -0
- package/front_end/third_party/puppeteer/package/src/revisions.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/util/httpUtils.ts +5 -5
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/third_party/puppeteer/third_party/parsel/README.chromium +1 -1
- package/front_end/ui/components/dialogs/Dialog.ts +3 -0
- package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +0 -7
- package/front_end/ui/helpers/OpenInNewTab.ts +15 -7
- package/front_end/ui/legacy/TabbedPane.ts +1 -108
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +9 -0
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +172 -123
- package/front_end/ui/legacy/components/data_grid/DataGridExporter.ts +89 -0
- package/front_end/ui/legacy/components/data_grid/dataGrid.css +10 -0
- package/front_end/ui/legacy/components/data_grid/data_grid.ts +3 -1
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +89 -40
- package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
- package/package.json +1 -1
- package/front_end/Images/navigationControls.png +0 -0
- package/front_end/Images/navigationControls_2x.png +0 -0
- package/front_end/Images/popoverArrows.png +0 -0
- package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +0 -746
- package/front_end/entrypoints/greendev_floaty/floaty.css +0 -301
- package/front_end/entrypoints/greendev_floaty/floaty.html +0 -38
- package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +0 -415
- package/front_end/models/ai_assistance/agents/GreenDevAgent.ts +0 -834
- package/front_end/models/ai_assistance/agents/GreenDevAgentAntigravityCliSocketClient.ts +0 -53
- package/front_end/models/ai_assistance/agents/GreenDevAgentGeminiCliSocketClient.ts +0 -117
- package/front_end/models/annotations/AnnotationRepository.ts +0 -238
- package/front_end/models/annotations/AnnotationType.ts +0 -10
- package/front_end/models/annotations/README.md +0 -7
- package/front_end/models/annotations/annotations.ts +0 -6
- package/front_end/models/greendev/Prototypes.ts +0 -68
- package/front_end/models/greendev/README.md +0 -5
- package/front_end/models/greendev/greendev.ts +0 -5
- package/front_end/panels/common/Annotation.ts +0 -184
- package/front_end/panels/common/AnnotationManager.ts +0 -208
- package/front_end/panels/common/annotation.css +0 -40
- package/front_end/panels/greendev/GreenDevPanel.css +0 -282
- package/front_end/panels/greendev/GreenDevPanel.ts +0 -364
- package/front_end/panels/greendev/GreenDevShared.ts +0 -13
- package/front_end/panels/greendev/greendev-meta.ts +0 -52
- package/front_end/panels/greendev/greendev.ts +0 -9
|
@@ -947,7 +947,6 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
947
947
|
mouseX = coordinate?.x ? coordinate.x - canvasViewportOffsetX : mouseX;
|
|
948
948
|
mouseY = coordinate?.y ? coordinate.y - canvasViewportOffsetY : mouseY;
|
|
949
949
|
}
|
|
950
|
-
// The parent dimensions are the maximum the popover can use.
|
|
951
950
|
const parentWidth = this.popoverElement.parentElement ? this.popoverElement.parentElement.clientWidth : 0;
|
|
952
951
|
const parentHeight = this.popoverElement.parentElement ? this.popoverElement.parentElement.clientHeight : 0;
|
|
953
952
|
const infoWidth = this.popoverElement.clientWidth;
|
|
@@ -957,40 +956,18 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
957
956
|
const offsetX = 10;
|
|
958
957
|
// Incorporate any network flamechart height into dynamic positioning
|
|
959
958
|
const offsetY = 6 + this.#tooltipPopoverYAdjustment;
|
|
960
|
-
let x;
|
|
961
|
-
let y;
|
|
962
959
|
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
for (let pass = 0; pass < 2; ++pass) {
|
|
975
|
-
for (let quadrant = 0; quadrant < 4; ++quadrant) {
|
|
976
|
-
// The bitwise AND operator is used to generate the 4 unique combinations of two booleans. (true+false, true+true, etc)
|
|
977
|
-
const dx = quadrant & 2 ? -offsetX - infoWidth : offsetX;
|
|
978
|
-
const dy = quadrant & 1 ? -offsetY - infoHeight : offsetY;
|
|
979
|
-
// mouseX+dx is ideal, but clamp against the available space (It will be adapted to fit)
|
|
980
|
-
x = Platform.NumberUtilities.clamp(mouseX + dx, 0, parentWidth - infoWidth);
|
|
981
|
-
y = Platform.NumberUtilities.clamp(mouseY + dy, 0, parentHeight - infoHeight);
|
|
982
|
-
|
|
983
|
-
const popoverFits = pass === 0 ?
|
|
984
|
-
// Will the whole popover be visible?
|
|
985
|
-
(x >= mouseX || mouseX >= x + infoWidth) && (y >= mouseY || mouseY >= y + infoHeight) :
|
|
986
|
-
// Will the popover fit well in 1 dimension? (Though we typically see it fit in both, here. Shrug.)
|
|
987
|
-
x >= mouseX || mouseX >= x + infoWidth || y >= mouseY || mouseY >= y + infoHeight;
|
|
988
|
-
|
|
989
|
-
if (popoverFits) {
|
|
990
|
-
break;
|
|
991
|
-
}
|
|
992
|
-
}
|
|
993
|
-
}
|
|
960
|
+
const {x, y} = calculatePopoverOffset({
|
|
961
|
+
mouseX,
|
|
962
|
+
mouseY,
|
|
963
|
+
parentWidth,
|
|
964
|
+
parentHeight,
|
|
965
|
+
infoWidth,
|
|
966
|
+
infoHeight,
|
|
967
|
+
offsetX,
|
|
968
|
+
offsetY,
|
|
969
|
+
});
|
|
970
|
+
|
|
994
971
|
this.popoverElement.style.left = x + 'px';
|
|
995
972
|
this.popoverElement.style.top = y + 'px';
|
|
996
973
|
}
|
|
@@ -1187,6 +1164,10 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
1187
1164
|
this.expandGroup(groupIndex, !this.rawTimelineData.groups[groupIndex].expanded /* setExpanded */);
|
|
1188
1165
|
}
|
|
1189
1166
|
|
|
1167
|
+
blurCanvasForTesting(): void {
|
|
1168
|
+
this.canvas.blur();
|
|
1169
|
+
}
|
|
1170
|
+
|
|
1190
1171
|
bulkExpandGroups(indexes: number[]): void {
|
|
1191
1172
|
if (indexes.length === 0) {
|
|
1192
1173
|
return;
|
|
@@ -2136,12 +2117,8 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
2136
2117
|
if (y >= this.groupOffsets[groupIndex] && y < this.groupOffsets[nextIndex]) {
|
|
2137
2118
|
// This section is used to calculate the position of current group's header
|
|
2138
2119
|
// If we are in edit mode, the track label is pushed right to make room for the icons.
|
|
2139
|
-
const context = this.context;
|
|
2140
|
-
context.save();
|
|
2141
|
-
context.font = this.#font;
|
|
2142
2120
|
const headerRight = HEADER_LEFT_PADDING + (this.#inTrackConfigEditMode ? EDIT_MODE_TOTAL_ICON_WIDTH : 0) +
|
|
2143
|
-
this.labelWidthForGroup(context, groups[groupIndex]);
|
|
2144
|
-
context.restore();
|
|
2121
|
+
this.labelWidthForGroup(this.context, groups[groupIndex]);
|
|
2145
2122
|
|
|
2146
2123
|
const mouseInHeaderRow =
|
|
2147
2124
|
y >= this.groupOffsets[groupIndex] && y < this.groupOffsets[groupIndex] + groups[groupIndex].style.height;
|
|
@@ -3143,8 +3120,12 @@ export class FlameChart extends Common.ObjectWrapper.eventMixin<EventTypes, type
|
|
|
3143
3120
|
* @returns the width of the label of the group.
|
|
3144
3121
|
*/
|
|
3145
3122
|
labelWidthForGroup(context: CanvasRenderingContext2D, group: Group): number {
|
|
3146
|
-
|
|
3123
|
+
context.save();
|
|
3124
|
+
context.font = this.#font;
|
|
3125
|
+
const width = EXPANSION_ARROW_INDENT * (group.style.nestingLevel + 1) + ARROW_SIDE / 2 + HEADER_LABEL_X_PADDING +
|
|
3147
3126
|
UI.UIUtils.measureTextWidth(context, group.name) + HEADER_LABEL_X_PADDING - HEADER_LEFT_PADDING;
|
|
3127
|
+
context.restore();
|
|
3128
|
+
return width;
|
|
3148
3129
|
}
|
|
3149
3130
|
|
|
3150
3131
|
private drawCollapsedOverviewForGroup(group: Group, y: number, endLevel: number): void {
|
|
@@ -4502,3 +4483,71 @@ export interface PersistedGroupConfig {
|
|
|
4502
4483
|
originalIndex: number;
|
|
4503
4484
|
visualIndex: number;
|
|
4504
4485
|
}
|
|
4486
|
+
|
|
4487
|
+
export interface PopoverOffsetOptions {
|
|
4488
|
+
/** The horizontal offset of the mouse relative to the flame chart. */
|
|
4489
|
+
mouseX: number;
|
|
4490
|
+
/** The vertical offset of the mouse relative to the flame chart. */
|
|
4491
|
+
mouseY: number;
|
|
4492
|
+
/** The width of the parent container holding the popover. */
|
|
4493
|
+
parentWidth: number;
|
|
4494
|
+
/** The height of the parent container holding the popover. */
|
|
4495
|
+
parentHeight: number;
|
|
4496
|
+
/** The measured width of the popover element itself. */
|
|
4497
|
+
infoWidth: number;
|
|
4498
|
+
/** The measured height of the popover element itself. */
|
|
4499
|
+
infoHeight: number;
|
|
4500
|
+
/** The horizontal offset spacing to keep between the popover and the mouse position. */
|
|
4501
|
+
offsetX: number;
|
|
4502
|
+
/** The vertical offset spacing to keep between the popover and the mouse position. */
|
|
4503
|
+
offsetY: number;
|
|
4504
|
+
}
|
|
4505
|
+
|
|
4506
|
+
/**
|
|
4507
|
+
* Calculates the positioning coordinates (x, y) for a popover window relative to the mouse.
|
|
4508
|
+
*
|
|
4509
|
+
* It uses a two-pass quadrant placement algorithm:
|
|
4510
|
+
* - Pass 0: Tries to find a quadrant where the popover fits fully on screen without overlapping the mouse.
|
|
4511
|
+
* - Pass 1: Relaxed fit; allows overlapping the mouse if the popover is too large for the available space,
|
|
4512
|
+
* clamping it strictly to remain within the parent bounds [0, parentWidth - infoWidth].
|
|
4513
|
+
*
|
|
4514
|
+
* Quadrants:
|
|
4515
|
+
* 0: bottom-right (x + offsetX, y + offsetY)
|
|
4516
|
+
* 1: top-right (x + offsetX, y - offsetY - height)
|
|
4517
|
+
* 2: bottom-left (x - offsetX - width, y + offsetY)
|
|
4518
|
+
* 3: top-left (x - offsetX - width, y - offsetY - height)
|
|
4519
|
+
*/
|
|
4520
|
+
export function calculatePopoverOffset(options: PopoverOffsetOptions): {x: number, y: number} {
|
|
4521
|
+
const {mouseX, mouseY, parentWidth, parentHeight, infoWidth, infoHeight, offsetX, offsetY} = options;
|
|
4522
|
+
|
|
4523
|
+
const quadrants = [
|
|
4524
|
+
{left: false, top: false}, // 0: Bottom-Right
|
|
4525
|
+
{left: false, top: true}, // 1: Top-Right
|
|
4526
|
+
{left: true, top: false}, // 2: Bottom-Left
|
|
4527
|
+
{left: true, top: true}, // 3: Top-Left
|
|
4528
|
+
];
|
|
4529
|
+
|
|
4530
|
+
let x = 0;
|
|
4531
|
+
let y = 0;
|
|
4532
|
+
|
|
4533
|
+
for (let pass = 0; pass < 2; ++pass) {
|
|
4534
|
+
for (const {left, top} of quadrants) {
|
|
4535
|
+
const dx = left ? -offsetX - infoWidth : offsetX;
|
|
4536
|
+
const dy = top ? -offsetY - infoHeight : offsetY;
|
|
4537
|
+
|
|
4538
|
+
// Ensure upper bound of clamp is never negative (minimum of 0) to avoid errors when infoWidth/infoHeight > parent container bounds
|
|
4539
|
+
x = Platform.NumberUtilities.clamp(mouseX + dx, 0, Math.max(0, parentWidth - infoWidth));
|
|
4540
|
+
y = Platform.NumberUtilities.clamp(mouseY + dy, 0, Math.max(0, parentHeight - infoHeight));
|
|
4541
|
+
|
|
4542
|
+
const mouseOverlapsX = mouseX > x && mouseX < x + infoWidth;
|
|
4543
|
+
const mouseOverlapsY = mouseY > y && mouseY < y + infoHeight;
|
|
4544
|
+
|
|
4545
|
+
const popoverFits = pass === 0 ? (!mouseOverlapsX && !mouseOverlapsY) : !(mouseOverlapsX && mouseOverlapsY);
|
|
4546
|
+
|
|
4547
|
+
if (popoverFits) {
|
|
4548
|
+
return {x, y};
|
|
4549
|
+
}
|
|
4550
|
+
}
|
|
4551
|
+
}
|
|
4552
|
+
return {x, y};
|
|
4553
|
+
}
|
|
@@ -1031,11 +1031,13 @@ export const knownContextValues = new Set([
|
|
|
1031
1031
|
'copy-all-declarations',
|
|
1032
1032
|
'copy-all-urls',
|
|
1033
1033
|
'copy-as-base',
|
|
1034
|
+
'copy-as-csv',
|
|
1034
1035
|
'copy-as-curl',
|
|
1035
1036
|
'copy-as-curl-bash',
|
|
1036
1037
|
'copy-as-curl-cmd',
|
|
1037
1038
|
'copy-as-fetch',
|
|
1038
1039
|
'copy-as-hex',
|
|
1040
|
+
'copy-as-markdown',
|
|
1039
1041
|
'copy-as-nodejs-fetch',
|
|
1040
1042
|
'copy-as-powershell',
|
|
1041
1043
|
'copy-as-preload',
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|