blob: 4b91ee9b53182b868b783656736449282c565d4d [file] [log] [blame]
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @unrestricted
*/
export default class ShortcutsScreen {
constructor() {
/** @type {!Object.<string, !ShortcutsSection>} */
this._sections = {};
}
static registerShortcuts() {
// Elements panel
const elementsSection = UI.shortcutsScreen.section(Common.UIString('Elements Panel'));
const navigate = ElementsPanelShortcuts.NavigateUp.concat(ElementsPanelShortcuts.NavigateDown);
elementsSection.addRelatedKeys(navigate, Common.UIString('Navigate elements'));
const expandCollapse = ElementsPanelShortcuts.Expand.concat(ElementsPanelShortcuts.Collapse);
elementsSection.addRelatedKeys(expandCollapse, Common.UIString('Expand/collapse'));
elementsSection.addAlternateKeys(ElementsPanelShortcuts.EditAttribute, Common.UIString('Edit attribute'));
elementsSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('elements.hide-element'), Common.UIString('Hide element'));
elementsSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('elements.edit-as-html'),
Common.UIString('Toggle edit as HTML'));
// Styles pane
const stylesPaneSection = UI.shortcutsScreen.section(Common.UIString('Styles Pane'));
const nextPreviousProperty = ElementsPanelShortcuts.NextProperty.concat(ElementsPanelShortcuts.PreviousProperty);
stylesPaneSection.addRelatedKeys(nextPreviousProperty, Common.UIString('Next/previous property'));
stylesPaneSection.addRelatedKeys(ElementsPanelShortcuts.IncrementValue, Common.UIString('Increment value'));
stylesPaneSection.addRelatedKeys(ElementsPanelShortcuts.DecrementValue, Common.UIString('Decrement value'));
stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.IncrementBy10, Common.UIString('Increment by %f', 10));
stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.DecrementBy10, Common.UIString('Decrement by %f', 10));
stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.IncrementBy100, Common.UIString('Increment by %f', 100));
stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.DecrementBy100, Common.UIString('Decrement by %f', 100));
stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.IncrementBy01, Common.UIString('Increment by %f', 0.1));
stylesPaneSection.addAlternateKeys(ElementsPanelShortcuts.DecrementBy01, Common.UIString('Decrement by %f', 0.1));
// Console
const consoleSection = UI.shortcutsScreen.section(Common.UIString('Console'));
consoleSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('console.clear'), Common.UIString('Clear console'));
consoleSection.addRelatedKeys(ConsolePanelShortcuts.AcceptSuggestion, Common.UIString('Accept suggestion'));
consoleSection.addAlternateKeys(ConsolePanelShortcuts.ClearConsolePrompt, Common.UIString('Clear console prompt'));
consoleSection.addRelatedKeys(ConsolePanelShortcuts.NextPreviousLine, Common.UIString('Next/previous line'));
if (Host.isMac()) {
consoleSection.addRelatedKeys(
ConsolePanelShortcuts.NextPreviousCommand, Common.UIString('Next/previous command'));
}
consoleSection.addKey(ConsolePanelShortcuts.ExecuteCommand, Common.UIString('Execute command'));
// Debugger
const debuggerSection = UI.shortcutsScreen.section(Common.UIString('Debugger'));
debuggerSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.toggle-pause'), Common.UIString('Pause/ Continue'));
debuggerSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.step-over'), Common.UIString('Step over'));
debuggerSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.step-into'), Common.UIString('Step into'));
debuggerSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.step-out'), Common.UIString('Step out'));
const nextAndPrevFrameKeys =
UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.next-call-frame')
.concat(UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.previous-call-frame'));
debuggerSection.addRelatedKeys(nextAndPrevFrameKeys, Common.UIString('Next/previous call frame'));
debuggerSection.addAlternateKeys(
SourcesPanelShortcuts.EvaluateSelectionInConsole, Common.UIString('Evaluate selection in console'));
debuggerSection.addAlternateKeys(
SourcesPanelShortcuts.AddSelectionToWatch, Common.UIString('Add selection to watch'));
debuggerSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.toggle-breakpoint'),
Common.UIString('Toggle breakpoint'));
debuggerSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.toggle-breakpoint-enabled'),
Common.UIString('Toggle breakpoint enabled'));
debuggerSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.toggle-breakpoints-active'),
Common.UIString('Toggle all breakpoints'));
debuggerSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('debugger.breakpoint-input-window'),
ls`Open breakpoint editor`);
// Editing
const editingSection = UI.shortcutsScreen.section(Common.UIString('Text Editor'));
editingSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('sources.go-to-member'), Common.UIString('Go to member'));
editingSection.addAlternateKeys(SourcesPanelShortcuts.ToggleAutocompletion, Common.UIString('Autocompletion'));
editingSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('sources.go-to-line'), Common.UIString('Go to line'));
editingSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('sources.jump-to-previous-location'),
Common.UIString('Jump to previous editing location'));
editingSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('sources.jump-to-next-location'),
Common.UIString('Jump to next editing location'));
editingSection.addAlternateKeys(SourcesPanelShortcuts.ToggleComment, Common.UIString('Toggle comment'));
editingSection.addAlternateKeys(
SourcesPanelShortcuts.IncreaseCSSUnitByOne, Common.UIString('Increment CSS unit by 1'));
editingSection.addAlternateKeys(
SourcesPanelShortcuts.DecreaseCSSUnitByOne, Common.UIString('Decrement CSS unit by 1'));
editingSection.addAlternateKeys(
SourcesPanelShortcuts.IncreaseCSSUnitByTen, Common.UIString('Increment CSS unit by 10'));
editingSection.addAlternateKeys(
SourcesPanelShortcuts.DecreaseCSSUnitByTen, Common.UIString('Decrement CSS unit by 10'));
editingSection.addAlternateKeys(
SourcesPanelShortcuts.SelectNextOccurrence, Common.UIString('Select next occurrence'));
editingSection.addAlternateKeys(SourcesPanelShortcuts.SoftUndo, Common.UIString('Soft undo'));
editingSection.addAlternateKeys(
SourcesPanelShortcuts.GotoMatchingBracket, Common.UIString('Go to matching bracket'));
editingSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('sources.close-editor-tab'),
Common.UIString('Close editor tab'));
editingSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('sources.switch-file'),
Common.UIString('Switch between files with the same name and different extensions.'));
// Performance panel
const performanceSection = UI.shortcutsScreen.section(Common.UIString('Performance Panel'));
performanceSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.toggle-recording'),
Common.UIString('Start/stop recording'));
performanceSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.record-reload'),
Common.UIString('Record page reload'));
performanceSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.save-to-file'), Common.UIString('Save profile'));
performanceSection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.load-from-file'), Common.UIString('Load profile'));
performanceSection.addRelatedKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.jump-to-previous-frame')
.concat(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.jump-to-next-frame')),
Common.UIString('Jump to previous/next frame'));
performanceSection.addRelatedKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.show-history'),
Common.UIString('Pick a recording from history'));
performanceSection.addRelatedKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.previous-recording')
.concat(UI.shortcutRegistry.shortcutDescriptorsForAction('timeline.next-recording')),
Common.UIString('Show previous/next recording'));
// Memory panel
const memorySection = UI.shortcutsScreen.section(Common.UIString('Memory Panel'));
memorySection.addAlternateKeys(
UI.shortcutRegistry.shortcutDescriptorsForAction('profiler.heap-toggle-recording'),
Common.UIString('Start/stop recording'));
// Layers panel
const layersSection = UI.shortcutsScreen.section(Common.UIString('Layers Panel'));
layersSection.addAlternateKeys(LayersPanelShortcuts.ResetView, Common.UIString('Reset view'));
layersSection.addAlternateKeys(LayersPanelShortcuts.PanMode, Common.UIString('Switch to pan mode'));
layersSection.addAlternateKeys(LayersPanelShortcuts.RotateMode, Common.UIString('Switch to rotate mode'));
layersSection.addAlternateKeys(
LayersPanelShortcuts.TogglePanRotate, Common.UIString('Temporarily toggle pan/rotate mode while held'));
layersSection.addAlternateKeys(LayersPanelShortcuts.ZoomIn, Common.UIString('Zoom in'));
layersSection.addAlternateKeys(LayersPanelShortcuts.ZoomOut, Common.UIString('Zoom out'));
layersSection.addRelatedKeys(
LayersPanelShortcuts.Up.concat(LayersPanelShortcuts.Down), Common.UIString('Pan or rotate up/down'));
layersSection.addRelatedKeys(
LayersPanelShortcuts.Left.concat(LayersPanelShortcuts.Right), Common.UIString('Pan or rotate left/right'));
}
/**
* @param {string} name
* @return {!ShortcutsSection}
*/
section(name) {
let section = this._sections[name];
if (!section) {
this._sections[name] = section = new ShortcutsSection(name);
}
return section;
}
/**
* @return {!UI.Widget}
*/
createShortcutsTabView() {
const orderedSections = [];
for (const section in this._sections) {
orderedSections.push(this._sections[section]);
}
function compareSections(a, b) {
return a.order - b.order;
}
orderedSections.sort(compareSections);
const widget = new UI.Widget();
widget.element.className = 'settings-tab-container'; // Override
widget.element.createChild('header').createChild('h1').createTextChild(ls`Shortcuts`);
const scrollPane = widget.element.createChild('div', 'settings-container-wrapper');
const container = scrollPane.createChild('div');
container.className = 'settings-content settings-container';
for (let i = 0; i < orderedSections.length; ++i) {
orderedSections[i].renderSection(container);
}
const note = scrollPane.createChild('p', 'settings-footnote');
note.appendChild(UI.createDocumentationLink(
'iterate/inspect-styles/shortcuts', Common.UIString('Full list of DevTools keyboard shortcuts and gestures')));
return widget;
}
}
/**
* We cannot initialize it here as localized strings are not loaded yet.
* @type {!ShortcutsScreen}
*/
UI.shortcutsScreen;
/**
* @unrestricted
*/
class ShortcutsSection {
/**
* @param {string} name
*/
constructor(name) {
this.name = name;
this._lines = /** @type {!Array.<!{key: !Node, text: string}>} */ ([]);
this.order = ++ShortcutsSection._sequenceNumber;
}
/**
* @param {!UI.KeyboardShortcut.Descriptor} key
* @param {string} description
*/
addKey(key, description) {
this._addLine(this._renderKey(key), description);
}
/**
* @param {!Array.<!UI.KeyboardShortcut.Descriptor>} keys
* @param {string} description
*/
addRelatedKeys(keys, description) {
this._addLine(this._renderSequence(keys, '/'), description);
}
/**
* @param {!Array.<!UI.KeyboardShortcut.Descriptor>} keys
* @param {string} description
*/
addAlternateKeys(keys, description) {
this._addLine(this._renderSequence(keys, Common.UIString('or')), description);
}
/**
* @param {!Node} keyElement
* @param {string} description
*/
_addLine(keyElement, description) {
this._lines.push({key: keyElement, text: description});
}
/**
* @param {!Element} container
*/
renderSection(container) {
const parent = container.createChild('div', 'settings-block');
const headLine = parent.createChild('div', 'settings-line');
headLine.createChild('div', 'settings-key-cell');
headLine.createChild('div', 'settings-section-title settings-cell').textContent = this.name;
UI.ARIAUtils.markAsHeading(headLine, /* level */ 2);
for (let i = 0; i < this._lines.length; ++i) {
const line = parent.createChild('div', 'settings-line');
const keyCell = line.createChild('div', 'settings-key-cell');
keyCell.appendChild(this._lines[i].key);
keyCell.appendChild(this._createSpan('settings-key-delimiter', ':'));
line.createChild('div', 'settings-cell').textContent = this._lines[i].text;
}
}
/**
* @param {!Array.<!UI.KeyboardShortcut.Descriptor>} sequence
* @param {string} delimiter
* @return {!Node}
*/
_renderSequence(sequence, delimiter) {
const delimiterSpan = this._createSpan('settings-key-delimiter', delimiter);
return this._joinNodes(sequence.map(this._renderKey.bind(this)), delimiterSpan);
}
/**
* @param {!UI.KeyboardShortcut.Descriptor} key
* @return {!Node}
*/
_renderKey(key) {
const keyName = key.name;
const plus = this._createSpan('settings-combine-keys', '+');
return this._joinNodes(keyName.split(' + ').map(this._createSpan.bind(this, 'settings-key')), plus);
}
/**
* @param {string} className
* @param {string} textContent
* @return {!Element}
*/
_createSpan(className, textContent) {
const node = createElement('span');
node.className = className;
node.textContent = textContent;
return node;
}
/**
* @param {!Array.<!Element>} nodes
* @param {!Element} delimiter
* @return {!Node}
*/
_joinNodes(nodes, delimiter) {
const result = createDocumentFragment();
for (let i = 0; i < nodes.length; ++i) {
if (i > 0) {
result.appendChild(delimiter.cloneNode(true));
}
result.appendChild(nodes[i]);
}
return result;
}
}
ShortcutsSection._sequenceNumber = 0;
const ElementsPanelShortcuts = {
NavigateUp: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up)],
NavigateDown: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down)],
Expand: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Right)],
Collapse: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Left)],
EditAttribute: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Enter)],
NextProperty: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Tab)],
PreviousProperty:
[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Tab, UI.KeyboardShortcut.Modifiers.Shift)],
IncrementValue: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up)],
DecrementValue: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down)],
IncrementBy10: [
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageUp),
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up, UI.KeyboardShortcut.Modifiers.Shift)
],
DecrementBy10: [
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageDown),
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down, UI.KeyboardShortcut.Modifiers.Shift)
],
IncrementBy100:
[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageUp, UI.KeyboardShortcut.Modifiers.Shift)],
DecrementBy100:
[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageDown, UI.KeyboardShortcut.Modifiers.Shift)],
IncrementBy01: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up, UI.KeyboardShortcut.Modifiers.Alt)],
DecrementBy01: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down, UI.KeyboardShortcut.Modifiers.Alt)]
};
const ConsolePanelShortcuts = {
AcceptSuggestion: [
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Tab),
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Right)
],
ClearConsolePrompt: [UI.KeyboardShortcut.makeDescriptor('u', UI.KeyboardShortcut.Modifiers.Ctrl)],
ExecuteCommand: UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Enter),
NextPreviousLine: [
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down),
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up)
],
NextPreviousCommand: [
UI.KeyboardShortcut.makeDescriptor('N', UI.KeyboardShortcut.Modifiers.Alt),
UI.KeyboardShortcut.makeDescriptor('P', UI.KeyboardShortcut.Modifiers.Alt)
],
};
export const SourcesPanelShortcuts = {
SelectNextOccurrence: [UI.KeyboardShortcut.makeDescriptor('d', UI.KeyboardShortcut.Modifiers.CtrlOrMeta)],
SoftUndo: [UI.KeyboardShortcut.makeDescriptor('u', UI.KeyboardShortcut.Modifiers.CtrlOrMeta)],
GotoMatchingBracket: [UI.KeyboardShortcut.makeDescriptor('m', UI.KeyboardShortcut.Modifiers.Ctrl)],
ToggleAutocompletion:
[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Space, UI.KeyboardShortcut.Modifiers.Ctrl)],
IncreaseCSSUnitByOne:
[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up, UI.KeyboardShortcut.Modifiers.Alt)],
DecreaseCSSUnitByOne:
[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down, UI.KeyboardShortcut.Modifiers.Alt)],
IncreaseCSSUnitByTen:
[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageUp, UI.KeyboardShortcut.Modifiers.Alt)],
DecreaseCSSUnitByTen:
[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.PageDown, UI.KeyboardShortcut.Modifiers.Alt)],
EvaluateSelectionInConsole: [UI.KeyboardShortcut.makeDescriptor(
'e', UI.KeyboardShortcut.Modifiers.Shift | UI.KeyboardShortcut.Modifiers.Ctrl)],
AddSelectionToWatch: [UI.KeyboardShortcut.makeDescriptor(
'a', UI.KeyboardShortcut.Modifiers.Shift | UI.KeyboardShortcut.Modifiers.Ctrl)],
ToggleComment:
[UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Slash, UI.KeyboardShortcut.Modifiers.CtrlOrMeta)],
};
export const LayersPanelShortcuts = {
ResetView: [UI.KeyboardShortcut.makeDescriptor('0')],
PanMode: [UI.KeyboardShortcut.makeDescriptor('x')],
RotateMode: [UI.KeyboardShortcut.makeDescriptor('v')],
TogglePanRotate: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Shift)],
ZoomIn: [
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Plus, UI.KeyboardShortcut.Modifiers.Shift),
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.NumpadPlus)
],
ZoomOut: [
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Minus, UI.KeyboardShortcut.Modifiers.Shift),
UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.NumpadMinus)
],
Up: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Up), UI.KeyboardShortcut.makeDescriptor('w')],
Down: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Down), UI.KeyboardShortcut.makeDescriptor('s')],
Left: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Left), UI.KeyboardShortcut.makeDescriptor('a')],
Right: [UI.KeyboardShortcut.makeDescriptor(UI.KeyboardShortcut.Keys.Right), UI.KeyboardShortcut.makeDescriptor('d')]
};
/* Legacy exported object*/
self.UI = self.UI || {};
/* Legacy exported object*/
UI = UI || {};
/** @constructor */
UI.ShortcutsScreen = ShortcutsScreen;
UI.ShortcutsScreen.SourcesPanelShortcuts = SourcesPanelShortcuts;
UI.ShortcutsScreen.LayersPanelShortcuts = LayersPanelShortcuts;