chrome-devtools-frontend 1.0.962581 → 1.0.963415
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/AUTHORS +1 -0
- package/front_end/core/common/ParsedURL.ts +12 -10
- package/front_end/core/host/UserMetrics.ts +2 -1
- package/front_end/core/root/Runtime.ts +2 -0
- package/front_end/core/sdk/DebuggerModel.ts +1 -1
- package/front_end/entrypoints/main/MainImpl.ts +7 -2
- package/front_end/models/persistence/IsolatedFileSystem.ts +3 -2
- package/front_end/models/persistence/PersistenceActions.ts +2 -2
- package/front_end/panels/application/AppManifestView.ts +7 -1
- package/front_end/panels/application/components/FrameDetailsView.ts +1 -0
- package/front_end/panels/elements/StylePropertyTreeElement.ts +13 -0
- package/front_end/panels/elements/StylesSidebarPane.ts +67 -0
- package/front_end/panels/elements/stylesSectionTree.css +28 -0
- package/front_end/panels/media/PlayerListView.ts +2 -0
- package/front_end/panels/media/playerListView.css +3 -0
- package/front_end/panels/sensors/sensors-meta.ts +2 -2
- package/front_end/panels/sources/NavigatorView.ts +1 -1
- package/front_end/ui/components/diff_view/DiffView.ts +2 -2
- package/front_end/ui/components/docs/icon_button/basic.ts +1 -1
- package/front_end/ui/components/icon_button/IconButton.ts +1 -1
- package/front_end/ui/legacy/GlassPane.ts +2 -0
- package/front_end/ui/legacy/softDropDownButton.css +2 -0
- package/front_end/ui/legacy/themeColors.css +2 -0
- package/front_end/ui/legacy/toolbar.css +6 -0
- package/package.json +1 -1
package/AUTHORS
CHANGED
@@ -39,6 +39,7 @@ Luke Swiderski <luke.swiderski@gmail.com>
|
|
39
39
|
Marijn Haverbeke <marijnh@gmail.com>
|
40
40
|
Michael Brüning <michael.bruning@qt.io>
|
41
41
|
Michael Rienstra <mrienstra@gmail.com>
|
42
|
+
Paul Fisher <paul@pfish.zone>
|
42
43
|
Per-Olov Jernberg <possan@possan.se>
|
43
44
|
PhistucK <phistuck@gmail.com>
|
44
45
|
Pradhuman Singh Baid <pradhumansinghbaid@gmail.com>
|
@@ -168,16 +168,17 @@ export class ParsedURL {
|
|
168
168
|
}
|
169
169
|
|
170
170
|
static rawPathToUrlString(fileSystemPath: Platform.DevToolsPath.RawPathString): Platform.DevToolsPath.UrlString {
|
171
|
-
let
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
171
|
+
let preEncodedPath: string = ParsedURL.preEncodeSpecialCharactersInPath(
|
172
|
+
fileSystemPath.replace(/\\/g, '/') as Platform.DevToolsPath.RawPathString);
|
173
|
+
preEncodedPath = preEncodedPath.replace(/\\/g, '/');
|
174
|
+
if (!preEncodedPath.startsWith('file://')) {
|
175
|
+
if (preEncodedPath.startsWith('/')) {
|
176
|
+
preEncodedPath = 'file://' + preEncodedPath;
|
176
177
|
} else {
|
177
|
-
|
178
|
+
preEncodedPath = 'file:///' + preEncodedPath;
|
178
179
|
}
|
179
180
|
}
|
180
|
-
return
|
181
|
+
return new URL(preEncodedPath).toString() as Platform.DevToolsPath.UrlString;
|
181
182
|
}
|
182
183
|
|
183
184
|
static relativePathToUrlString(relativePath: string, baseURL: Platform.DevToolsPath.UrlString):
|
@@ -187,13 +188,14 @@ export class ParsedURL {
|
|
187
188
|
return new URL(preEncodedPath, baseURL).toString() as Platform.DevToolsPath.UrlString;
|
188
189
|
}
|
189
190
|
|
190
|
-
static
|
191
|
+
static urlToRawPathString(fileURL: Platform.DevToolsPath.UrlString, isWindows?: boolean):
|
191
192
|
Platform.DevToolsPath.RawPathString {
|
192
193
|
console.assert(fileURL.startsWith('file://'), 'This must be a file URL.');
|
194
|
+
const decodedFileURL = decodeURIComponent(fileURL);
|
193
195
|
if (isWindows) {
|
194
|
-
return
|
196
|
+
return decodedFileURL.substr('file:///'.length).replace(/\//g, '\\') as Platform.DevToolsPath.RawPathString;
|
195
197
|
}
|
196
|
-
return
|
198
|
+
return decodedFileURL.substr('file://'.length) as Platform.DevToolsPath.RawPathString;
|
197
199
|
}
|
198
200
|
|
199
201
|
static urlWithoutHash(url: string): string {
|
@@ -584,7 +584,8 @@ export enum DevtoolsExperiments {
|
|
584
584
|
'cssTypeComponentLength' = 52,
|
585
585
|
'preciseChanges' = 53,
|
586
586
|
'bfcacheDisplayTree' = 54,
|
587
|
-
'
|
587
|
+
'stylesPaneCSSChanges' = 55,
|
588
|
+
'MaxValue' = 56,
|
588
589
|
}
|
589
590
|
/* eslint-enable @typescript-eslint/naming-convention */
|
590
591
|
|
@@ -272,6 +272,8 @@ export enum ExperimentName {
|
|
272
272
|
WEBAUTHN_PANE = 'webauthnPane',
|
273
273
|
SYNC_SETTINGS = 'syncSettings',
|
274
274
|
FULL_ACCESSIBILITY_TREE = 'fullAccessibilityTree',
|
275
|
+
PRECISE_CHANGES = 'preciseChanges',
|
276
|
+
STYLES_PANE_CSS_CHANGES = 'stylesPaneCSSChanges',
|
275
277
|
}
|
276
278
|
|
277
279
|
// TODO(crbug.com/1167717): Make this a const enum again
|
@@ -425,7 +425,7 @@ export class DebuggerModel extends SDKModel<EventTypes> {
|
|
425
425
|
if (this.target().type() === Type.Node && url.startsWith('file://')) {
|
426
426
|
// TODO(crbug.com/1253323): Cast to UrlString will be removed when migration to branded types is complete.
|
427
427
|
const platformPath =
|
428
|
-
Common.ParsedURL.ParsedURL.
|
428
|
+
Common.ParsedURL.ParsedURL.urlToRawPathString(url as Platform.DevToolsPath.UrlString, Host.Platform.isWin());
|
429
429
|
urlRegex =
|
430
430
|
`${Platform.StringUtilities.escapeForRegExp(platformPath)}|${Platform.StringUtilities.escapeForRegExp(url)}`;
|
431
431
|
}
|
@@ -365,13 +365,18 @@ export class MainImpl {
|
|
365
365
|
'https://developer.chrome.com/blog/new-in-devtools-96/#length');
|
366
366
|
|
367
367
|
// Display precise changes in the Changes tab.
|
368
|
-
Root.Runtime.experiments.register(
|
368
|
+
Root.Runtime.experiments.register(
|
369
|
+
Root.Runtime.ExperimentName.PRECISE_CHANGES, 'Display more precise changes in the Changes tab');
|
370
|
+
|
371
|
+
// Integrate CSS changes in the Styles pane.
|
372
|
+
Root.Runtime.experiments.register(
|
373
|
+
Root.Runtime.ExperimentName.STYLES_PANE_CSS_CHANGES, 'Sync CSS changes in the Styles pane');
|
369
374
|
|
370
375
|
Root.Runtime.experiments.enableExperimentsByDefault([
|
371
376
|
'sourceOrderViewer',
|
372
377
|
'hideIssuesFeature',
|
373
378
|
'cssTypeComponentLength',
|
374
|
-
|
379
|
+
Root.Runtime.ExperimentName.PRECISE_CHANGES,
|
375
380
|
'reportingApiDebugging',
|
376
381
|
Root.Runtime.ExperimentName.SYNC_SETTINGS,
|
377
382
|
]);
|
@@ -176,7 +176,7 @@ export class IsolatedFileSystem extends PlatformFileSystem {
|
|
176
176
|
this.initialGitFoldersInternal.add(parentFolder);
|
177
177
|
}
|
178
178
|
if (this.isFileExcluded(entry.fullPath + '/')) {
|
179
|
-
this.excludedEmbedderFolders.push(Common.ParsedURL.ParsedURL.
|
179
|
+
this.excludedEmbedderFolders.push(Common.ParsedURL.ParsedURL.urlToRawPathString(
|
180
180
|
this.path() + entry.fullPath as Platform.DevToolsPath.UrlString, Host.Platform.isWin()));
|
181
181
|
continue;
|
182
182
|
}
|
@@ -555,7 +555,8 @@ export class IsolatedFileSystem extends PlatformFileSystem {
|
|
555
555
|
|
556
556
|
tooltipForURL(url: string): string {
|
557
557
|
const path = Platform.StringUtilities.trimMiddle(
|
558
|
-
Common.ParsedURL.ParsedURL.
|
558
|
+
Common.ParsedURL.ParsedURL.urlToRawPathString(url as Platform.DevToolsPath.UrlString, Host.Platform.isWin()),
|
559
|
+
150);
|
559
560
|
return i18nString(UIStrings.linkedToS, {PH1: path});
|
560
561
|
}
|
561
562
|
|
@@ -94,8 +94,8 @@ export class ContextMenuProvider implements UI.ContextMenu.Provider {
|
|
94
94
|
const fileURL = binding ? binding.fileSystem.contentURL() : contentProvider.contentURL();
|
95
95
|
if (fileURL.startsWith('file://')) {
|
96
96
|
// TODO(crbug.com/1253323): Cast to UrlString will be removed when migration to branded types is complete.
|
97
|
-
const path =
|
98
|
-
|
97
|
+
const path = Common.ParsedURL.ParsedURL.urlToRawPathString(
|
98
|
+
fileURL as Platform.DevToolsPath.UrlString, Host.Platform.isWin());
|
99
99
|
contextMenu.revealSection().appendItem(
|
100
100
|
i18nString(UIStrings.openInContainingFolder),
|
101
101
|
() => Host.InspectorFrontendHost.InspectorFrontendHostInstance.showItemInFolder(path));
|
@@ -617,7 +617,13 @@ export class AppManifestView extends UI.Widget.VBox implements SDK.TargetManager
|
|
617
617
|
const copyButton = new IconButton.IconButton.IconButton();
|
618
618
|
copyButton.title = i18nString(UIStrings.copyToClipboard);
|
619
619
|
copyButton.data = {
|
620
|
-
groups: [{
|
620
|
+
groups: [{
|
621
|
+
iconName: 'copy_icon',
|
622
|
+
iconHeight: '12px',
|
623
|
+
iconWidth: '12px',
|
624
|
+
text: '',
|
625
|
+
iconColor: 'var(--color-text-primary)',
|
626
|
+
}],
|
621
627
|
clickHandler: (): void => {
|
622
628
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(recommendedId);
|
623
629
|
},
|
@@ -342,6 +342,7 @@ export class FrameDetailsReportView extends HTMLElement {
|
|
342
342
|
{
|
343
343
|
iconName: 'refresh_12x12_icon',
|
344
344
|
text: i18nString(UIStrings.refresh),
|
345
|
+
iconColor: 'var(--color-text-primary)',
|
345
346
|
} as IconButton.IconButton.IconWithTextData,
|
346
347
|
],
|
347
348
|
} as IconButton.IconButton.IconButtonData}>
|
@@ -477,6 +477,8 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
477
477
|
} else {
|
478
478
|
this.listItemElement.classList.remove('disabled');
|
479
479
|
}
|
480
|
+
|
481
|
+
this.listItemElement.classList.toggle('changed', this.parentPane().isPropertyChanged(this.property));
|
480
482
|
}
|
481
483
|
|
482
484
|
node(): SDK.DOMModel.DOMNode|null {
|
@@ -714,6 +716,14 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
714
716
|
UI.ARIAUtils.setAccessibleName(
|
715
717
|
enabledCheckboxElement, `${this.nameElement.textContent} ${this.valueElement.textContent}`);
|
716
718
|
}
|
719
|
+
|
720
|
+
const copyIcon = UI.Icon.Icon.create('largeicon-copy', 'copy');
|
721
|
+
UI.Tooltip.Tooltip.install(copyIcon, i18nString(UIStrings.copyDeclaration));
|
722
|
+
copyIcon.addEventListener('click', () => {
|
723
|
+
const propertyText = `${this.property.name}: ${this.property.value};`;
|
724
|
+
Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(propertyText);
|
725
|
+
});
|
726
|
+
this.listItemElement.append(copyIcon);
|
717
727
|
this.listItemElement.insertBefore(enabledCheckboxElement, this.listItemElement.firstChild);
|
718
728
|
}
|
719
729
|
}
|
@@ -1470,6 +1480,9 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
1470
1480
|
this.styleTextAppliedForTest();
|
1471
1481
|
return;
|
1472
1482
|
}
|
1483
|
+
if (updatedProperty) {
|
1484
|
+
this.listItemElement.classList.toggle('changed', this.parentPane().isPropertyChanged(updatedProperty));
|
1485
|
+
}
|
1473
1486
|
|
1474
1487
|
this.matchedStylesInternal.resetActiveProperties();
|
1475
1488
|
this.hasBeenEditedIncrementally = true;
|
@@ -40,6 +40,9 @@ import * as SDK from '../../core/sdk/sdk.js';
|
|
40
40
|
import * as Protocol from '../../generated/protocol.js';
|
41
41
|
import * as Bindings from '../../models/bindings/bindings.js';
|
42
42
|
import * as TextUtils from '../../models/text_utils/text_utils.js';
|
43
|
+
import * as Workspace from '../../models/workspace/workspace.js';
|
44
|
+
import * as WorkspaceDiff from '../../models/workspace_diff/workspace_diff.js';
|
45
|
+
import * as DiffView from '../../ui/components/diff_view/diff_view.js';
|
43
46
|
import * as IconButton from '../../ui/components/icon_button/icon_button.js';
|
44
47
|
import * as InlineEditor from '../../ui/legacy/components/inline_editor/inline_editor.js';
|
45
48
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
@@ -231,6 +234,8 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
231
234
|
private readonly resizeThrottler: Common.Throttler.Throttler;
|
232
235
|
private readonly imagePreviewPopover: ImagePreviewPopover;
|
233
236
|
activeCSSAngle: InlineEditor.CSSAngle.CSSAngle|null;
|
237
|
+
#changedLinesByURLs: Map<string, Set<number>> = new Map();
|
238
|
+
#uiSourceCodeToDiffCallbacks: Map<Workspace.UISourceCode.UISourceCode, () => void> = new Map();
|
234
239
|
|
235
240
|
static instance(): StylesSidebarPane {
|
236
241
|
if (!_stylesSidebarPaneInstance) {
|
@@ -834,7 +839,14 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
834
839
|
const blocks = [new SectionBlock(null)];
|
835
840
|
let sectionIdx = 0;
|
836
841
|
let lastParentNode: SDK.DOMModel.DOMNode|null = null;
|
842
|
+
if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.STYLES_PANE_CSS_CHANGES)) {
|
843
|
+
this.resetChangedLinesTracking();
|
844
|
+
}
|
837
845
|
for (const style of matchedStyles.nodeStyles()) {
|
846
|
+
if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.STYLES_PANE_CSS_CHANGES) && style.parentRule) {
|
847
|
+
await this.trackChangedLines(style.parentRule.resourceURL());
|
848
|
+
}
|
849
|
+
|
838
850
|
const parentNode = matchedStyles.isInherited(style) ? matchedStyles.nodeForStyle(style) : null;
|
839
851
|
if (parentNode && parentNode !== lastParentNode) {
|
840
852
|
lastParentNode = parentNode;
|
@@ -987,6 +999,61 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
987
999
|
return sections;
|
988
1000
|
}
|
989
1001
|
|
1002
|
+
resetChangedLinesTracking(): void {
|
1003
|
+
this.#changedLinesByURLs.clear();
|
1004
|
+
for (const [uiSourceCode, callback] of this.#uiSourceCodeToDiffCallbacks) {
|
1005
|
+
WorkspaceDiff.WorkspaceDiff.workspaceDiff().unsubscribeFromDiffChange(uiSourceCode, callback);
|
1006
|
+
}
|
1007
|
+
this.#uiSourceCodeToDiffCallbacks.clear();
|
1008
|
+
}
|
1009
|
+
|
1010
|
+
async trackChangedLines(url: string): Promise<void> {
|
1011
|
+
if (!url || this.#changedLinesByURLs.has(url)) {
|
1012
|
+
return;
|
1013
|
+
}
|
1014
|
+
const uiSourceCode = Workspace.Workspace.WorkspaceImpl.instance().uiSourceCodeForURL(url);
|
1015
|
+
if (uiSourceCode) {
|
1016
|
+
await this.refreshChangedLines(uiSourceCode);
|
1017
|
+
const callback = this.refreshChangedLines.bind(this, uiSourceCode);
|
1018
|
+
WorkspaceDiff.WorkspaceDiff.workspaceDiff().subscribeToDiffChange(uiSourceCode, callback);
|
1019
|
+
this.#uiSourceCodeToDiffCallbacks.set(uiSourceCode, callback);
|
1020
|
+
}
|
1021
|
+
}
|
1022
|
+
|
1023
|
+
isPropertyChanged(property: SDK.CSSProperty.CSSProperty): boolean {
|
1024
|
+
if (!Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.STYLES_PANE_CSS_CHANGES)) {
|
1025
|
+
return false;
|
1026
|
+
}
|
1027
|
+
const url = property.ownerStyle.parentRule?.resourceURL();
|
1028
|
+
if (!url) {
|
1029
|
+
return false;
|
1030
|
+
}
|
1031
|
+
const changedLines = this.#changedLinesByURLs.get(url);
|
1032
|
+
if (!changedLines) {
|
1033
|
+
return false;
|
1034
|
+
}
|
1035
|
+
const uiLocation = Bindings.CSSWorkspaceBinding.CSSWorkspaceBinding.instance().propertyUILocation(property, true);
|
1036
|
+
if (!uiLocation) {
|
1037
|
+
return false;
|
1038
|
+
}
|
1039
|
+
// UILocation's lineNumber starts at 0, but changedLines start at 1.
|
1040
|
+
return changedLines.has(uiLocation.lineNumber + 1);
|
1041
|
+
}
|
1042
|
+
|
1043
|
+
private async refreshChangedLines(uiSourceCode: Workspace.UISourceCode.UISourceCode): Promise<void> {
|
1044
|
+
const diff = await WorkspaceDiff.WorkspaceDiff.workspaceDiff().requestDiff(uiSourceCode, {shouldFormatDiff: true});
|
1045
|
+
const changedLines = new Set<number>();
|
1046
|
+
if (diff && diff.length > 0) {
|
1047
|
+
const {rows} = DiffView.DiffView.buildDiffRows(diff);
|
1048
|
+
for (const row of rows) {
|
1049
|
+
if (row.type === DiffView.DiffView.RowType.Addition) {
|
1050
|
+
changedLines.add(row.currentLineNumber);
|
1051
|
+
}
|
1052
|
+
}
|
1053
|
+
}
|
1054
|
+
this.#changedLinesByURLs.set(uiSourceCode.url(), changedLines);
|
1055
|
+
}
|
1056
|
+
|
990
1057
|
private clipboardCopy(_event: Event): void {
|
991
1058
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.StyleRuleCopied);
|
992
1059
|
}
|
@@ -126,6 +126,34 @@ ol.expanded {
|
|
126
126
|
opacity: 50%;
|
127
127
|
}
|
128
128
|
|
129
|
+
.changed::after {
|
130
|
+
content: "";
|
131
|
+
position: absolute;
|
132
|
+
left: -4px;
|
133
|
+
width: 2px;
|
134
|
+
height: 100%;
|
135
|
+
background-color: var(--color-accent-green);
|
136
|
+
}
|
137
|
+
|
138
|
+
.copy {
|
139
|
+
display: none;
|
140
|
+
}
|
141
|
+
|
142
|
+
.changed:hover {
|
143
|
+
background-color: var(--color-accent-green-background);
|
144
|
+
}
|
145
|
+
|
146
|
+
.changed:hover .copy {
|
147
|
+
position: absolute;
|
148
|
+
right: -4px;
|
149
|
+
top: 0;
|
150
|
+
bottom: 0;
|
151
|
+
margin: auto;
|
152
|
+
display: inline-block;
|
153
|
+
cursor: pointer;
|
154
|
+
transform: scale(0.9);
|
155
|
+
}
|
156
|
+
|
129
157
|
.has-ignorable-error {
|
130
158
|
color: var(--color-text-disabled);
|
131
159
|
}
|
@@ -87,8 +87,10 @@ export class PlayerListView extends UI.Widget.VBox implements TriggerDispatcher
|
|
87
87
|
this.mainContainer.renderMainPanel(playerID);
|
88
88
|
if (this.currentlySelectedEntry !== null) {
|
89
89
|
this.currentlySelectedEntry.classList.remove('selected');
|
90
|
+
this.currentlySelectedEntry.classList.remove('force-white-icons');
|
90
91
|
}
|
91
92
|
element.classList.add('selected');
|
93
|
+
element.classList.add('force-white-icons');
|
92
94
|
this.currentlySelectedEntry = element;
|
93
95
|
}
|
94
96
|
|
@@ -184,7 +184,7 @@ Common.Settings.registerSettingExtension({
|
|
184
184
|
title: 'Mountain View',
|
185
185
|
lat: 37.386052,
|
186
186
|
long: -122.083851,
|
187
|
-
timezoneId: '
|
187
|
+
timezoneId: 'America/Los_Angeles',
|
188
188
|
locale: 'en-US',
|
189
189
|
},
|
190
190
|
{
|
@@ -198,7 +198,7 @@ Common.Settings.registerSettingExtension({
|
|
198
198
|
title: 'San Francisco',
|
199
199
|
lat: 37.774929,
|
200
200
|
long: -122.419416,
|
201
|
-
timezoneId: '
|
201
|
+
timezoneId: 'America/Los_Angeles',
|
202
202
|
locale: 'en-US',
|
203
203
|
},
|
204
204
|
{
|
@@ -849,7 +849,7 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
|
|
849
849
|
|
850
850
|
if (project.type() === Workspace.Workspace.projectTypes.FileSystem) {
|
851
851
|
// TODO(crbug.com/1253323): Cast to RawPathString will be removed when migration to branded types is complete.
|
852
|
-
const folderPath = Common.ParsedURL.ParsedURL.
|
852
|
+
const folderPath = Common.ParsedURL.ParsedURL.urlToRawPathString(
|
853
853
|
Persistence.FileSystemWorkspaceBinding.FileSystemWorkspaceBinding.completeURL(project, path) as
|
854
854
|
Platform.DevToolsPath.UrlString,
|
855
855
|
Host.Platform.isWin());
|
@@ -44,14 +44,14 @@ interface Row {
|
|
44
44
|
type: RowType;
|
45
45
|
}
|
46
46
|
|
47
|
-
const enum RowType {
|
47
|
+
export const enum RowType {
|
48
48
|
Deletion = 'deletion',
|
49
49
|
Addition = 'addition',
|
50
50
|
Equal = 'equal',
|
51
51
|
Spacer = 'spacer',
|
52
52
|
}
|
53
53
|
|
54
|
-
function buildDiffRows(diff: Diff.Diff.DiffArray): {
|
54
|
+
export function buildDiffRows(diff: Diff.Diff.DiffArray): {
|
55
55
|
originalLines: readonly string[],
|
56
56
|
currentLines: readonly string[],
|
57
57
|
rows: readonly Row[],
|
@@ -12,7 +12,7 @@ function appendComponent(data: IconButton.IconButton.IconButtonData) {
|
|
12
12
|
|
13
13
|
appendComponent({
|
14
14
|
clickHandler: (): void => {},
|
15
|
-
groups: [{iconName: 'survey_feedback_icon', text: '1 item'}],
|
15
|
+
groups: [{iconName: 'survey_feedback_icon', iconColor: 'var(--color-text-primary)', text: '1 item'}],
|
16
16
|
});
|
17
17
|
|
18
18
|
appendComponent({
|
@@ -85,7 +85,7 @@ export class IconButton extends HTMLElement {
|
|
85
85
|
${filteredGroups.map(counter =>
|
86
86
|
LitHtml.html`
|
87
87
|
<${Icon.litTagName} class="status-icon"
|
88
|
-
.data=${{iconName: counter.iconName, color: counter.iconColor
|
88
|
+
.data=${{iconName: counter.iconName, color: counter.iconColor, width: counter.iconWidth || '1.5ex', height: counter.iconHeight || '1.5ex'} as IconData}>
|
89
89
|
</${Icon.litTagName}>
|
90
90
|
${this.#compact ? LitHtml.html`<!-- Force line-height for this element --><span>​</span>` : LitHtml.nothing}
|
91
91
|
<span class="icon-button-title">${counter.text}</span>
|
@@ -120,6 +120,7 @@ export class GlassPane {
|
|
120
120
|
// Deliberately starts with 3000 to hide other z-indexed elements below.
|
121
121
|
this.element.style.zIndex = `${3000 + 1000 * _panes.size}`;
|
122
122
|
document.body.addEventListener('mousedown', this.onMouseDownBound, true);
|
123
|
+
document.body.addEventListener('pointerdown', this.onMouseDownBound, true);
|
123
124
|
this.widgetInternal.show(document.body);
|
124
125
|
_panes.add(this);
|
125
126
|
this.positionContent();
|
@@ -131,6 +132,7 @@ export class GlassPane {
|
|
131
132
|
}
|
132
133
|
_panes.delete(this);
|
133
134
|
this.element.ownerDocument.body.removeEventListener('mousedown', this.onMouseDownBound, true);
|
135
|
+
this.element.ownerDocument.body.removeEventListener('pointerdown', this.onMouseDownBound, true);
|
134
136
|
this.widgetInternal.detach();
|
135
137
|
}
|
136
138
|
|
@@ -57,6 +57,7 @@
|
|
57
57
|
--color-accent-red: rgb(217 48 37);
|
58
58
|
--color-red: rgb(238 68 47);
|
59
59
|
--color-accent-green: rgb(24 128 56);
|
60
|
+
--color-accent-green-background: rgb(24 128 56 / 10%);
|
60
61
|
--color-green: rgb(99 172 190);
|
61
62
|
--color-link: var(--color-primary);
|
62
63
|
--color-syntax-1: rgb(200 0 0);
|
@@ -219,6 +220,7 @@
|
|
219
220
|
--color-accent-red: rgb(242 139 130);
|
220
221
|
--color-red: rgb(237 78 76);
|
221
222
|
--color-accent-green: rgb(129 201 149);
|
223
|
+
--color-accent-green-background: rgb(129 201 149 / 20%);
|
222
224
|
--color-link: var(--color-primary);
|
223
225
|
--color-syntax-1: rgb(53 212 199);
|
224
226
|
--color-syntax-2: rgb(93 176 215);
|
package/package.json
CHANGED