UNPKG

21.2 kBJavaScriptView Raw
1"use strict";
2
3function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
5require("core-js/modules/es.array.slice.js");
6
7require("core-js/modules/es.object.freeze.js");
8
9require("core-js/modules/es.symbol.js");
10
11require("core-js/modules/es.symbol.description.js");
12
13require("core-js/modules/es.object.to-string.js");
14
15require("core-js/modules/es.symbol.iterator.js");
16
17require("core-js/modules/es.string.iterator.js");
18
19require("core-js/modules/es.array.iterator.js");
20
21require("core-js/modules/web.dom-collections.iterator.js");
22
23require("core-js/modules/es.function.name.js");
24
25require("core-js/modules/es.array.from.js");
26
27require("core-js/modules/es.object.get-prototype-of.js");
28
29require("core-js/modules/es.reflect.construct.js");
30
31require("core-js/modules/es.promise.js");
32
33require("core-js/modules/es.weak-map.js");
34
35require("core-js/modules/es.object.get-own-property-descriptor.js");
36
37Object.defineProperty(exports, "__esModule", {
38 value: true
39});
40exports.ShortcutsScreen = exports.SuccessIcon = exports.Fade = exports.TextInput = exports.Description = exports.GridWrapper = exports.Row = exports.GridHeaderRow = exports.HeaderItem = void 0;
41
42require("regenerator-runtime/runtime.js");
43
44require("core-js/modules/es.string.bold.js");
45
46require("core-js/modules/es.object.entries.js");
47
48require("core-js/modules/es.array.includes.js");
49
50require("core-js/modules/es.object.assign.js");
51
52require("core-js/modules/es.array.find.js");
53
54require("core-js/modules/es.array.map.js");
55
56var _react = _interopRequireWildcard(require("react"));
57
58var _theming = require("@storybook/theming");
59
60var _shortcut = require("@storybook/api/shortcut");
61
62var _components = require("@storybook/components");
63
64var _SettingsFooter = _interopRequireDefault(require("./SettingsFooter"));
65
66var _templateObject;
67
68function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
69
70function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
71
72function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
73
74function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
75
76function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
77
78function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
79
80function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
81
82function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
83
84function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
85
86function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
87
88function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
89
90function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
91
92function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
93
94function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
95
96function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
97
98function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
99
100function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
101
102function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
103
104function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
105
106function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
107
108function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
109
110function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
111
112function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
113
114var Button = _components.Form.Button,
115 Input = _components.Form.Input;
116
117var Header = _theming.styled.header(function (_ref) {
118 var theme = _ref.theme;
119 return {
120 marginBottom: 20,
121 fontSize: theme.typography.size.m3,
122 fontWeight: theme.typography.weight.black,
123 alignItems: 'center',
124 display: 'flex'
125 };
126}); // Grid
127
128
129var HeaderItem = _theming.styled.div(function (_ref2) {
130 var theme = _ref2.theme;
131 return {
132 fontWeight: theme.typography.weight.bold
133 };
134});
135
136exports.HeaderItem = HeaderItem;
137
138var GridHeaderRow = _theming.styled.div({
139 alignSelf: 'flex-end',
140 display: 'grid',
141 margin: '10px 0',
142 gridTemplateColumns: '1fr 1fr 12px',
143 '& > *:last-of-type': {
144 gridColumn: '2 / 2',
145 justifySelf: 'flex-end',
146 gridRow: '1'
147 }
148});
149
150exports.GridHeaderRow = GridHeaderRow;
151
152var Row = _theming.styled.div(function (_ref3) {
153 var theme = _ref3.theme;
154 return {
155 padding: '6px 0',
156 borderTop: "1px solid ".concat(theme.appBorderColor),
157 display: 'grid',
158 gridTemplateColumns: '1fr 1fr 0px'
159 };
160});
161
162exports.Row = Row;
163
164var GridWrapper = _theming.styled.div({
165 display: 'grid',
166 gridTemplateColumns: '1fr',
167 gridAutoRows: 'minmax(auto, auto)',
168 marginBottom: 20
169}); // Form
170
171
172exports.GridWrapper = GridWrapper;
173
174var Description = _theming.styled.div({
175 alignSelf: 'center'
176});
177
178exports.Description = Description;
179var TextInput = (0, _theming.styled)(Input)(function (_ref4) {
180 var valid = _ref4.valid,
181 theme = _ref4.theme;
182 return valid === 'error' ? {
183 animation: "".concat(theme.animation.jiggle, " 700ms ease-out")
184 } : {};
185}, {
186 display: 'flex',
187 width: 80,
188 flexDirection: 'column',
189 justifySelf: 'flex-end',
190 paddingLeft: 4,
191 paddingRight: 4,
192 textAlign: 'center'
193});
194exports.TextInput = TextInput;
195var Fade = (0, _theming.keyframes)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n0%,100% { opacity: 0; }\n 50% { opacity: 1; }\n"])));
196exports.Fade = Fade;
197var SuccessIcon = (0, _theming.styled)(_components.Icons)(function (_ref5) {
198 var valid = _ref5.valid,
199 theme = _ref5.theme;
200 return valid === 'valid' ? {
201 color: theme.color.positive,
202 animation: "".concat(Fade, " 2s ease forwards")
203 } : {
204 opacity: 0
205 };
206}, {
207 alignSelf: 'center',
208 display: 'flex',
209 marginLeft: 10,
210 height: 14,
211 width: 14
212});
213exports.SuccessIcon = SuccessIcon;
214
215var Container = _theming.styled.div(function (_ref6) {
216 var theme = _ref6.theme;
217 return {
218 fontSize: theme.typography.size.s2,
219 padding: "3rem 20px",
220 maxWidth: 600,
221 margin: '0 auto'
222 };
223});
224
225var shortcutLabels = {
226 fullScreen: 'Go full screen',
227 togglePanel: 'Toggle addons',
228 panelPosition: 'Toggle addons orientation',
229 toggleNav: 'Toggle sidebar',
230 toolbar: 'Toggle canvas toolbar',
231 search: 'Focus search',
232 focusNav: 'Focus sidebar',
233 focusIframe: 'Focus canvas',
234 focusPanel: 'Focus addons',
235 prevComponent: 'Previous component',
236 nextComponent: 'Next component',
237 prevStory: 'Previous story',
238 nextStory: 'Next story',
239 shortcutsPage: 'Go to shortcuts page',
240 aboutPage: 'Go to about page',
241 collapseAll: 'Collapse all items on sidebar',
242 expandAll: 'Expand all items on sidebar'
243};
244// Shortcuts that cannot be configured
245var fixedShortcuts = ['escape'];
246
247function toShortcutState(shortcutKeys) {
248 return Object.entries(shortcutKeys).reduce(function (acc, _ref7) {
249 var _ref8 = _slicedToArray(_ref7, 2),
250 feature = _ref8[0],
251 shortcut = _ref8[1];
252
253 return fixedShortcuts.includes(feature) ? acc : Object.assign({}, acc, _defineProperty({}, feature, {
254 shortcut: shortcut,
255 error: false
256 }));
257 }, {});
258}
259
260var ShortcutsScreen = /*#__PURE__*/function (_Component) {
261 _inherits(ShortcutsScreen, _Component);
262
263 var _super = _createSuper(ShortcutsScreen);
264
265 function ShortcutsScreen(props) {
266 var _this;
267
268 _classCallCheck(this, ShortcutsScreen);
269
270 _this = _super.call(this, props);
271
272 _this.onKeyDown = function (e) {
273 var _this$state = _this.state,
274 activeFeature = _this$state.activeFeature,
275 shortcutKeys = _this$state.shortcutKeys;
276
277 if (e.key === 'Backspace') {
278 return _this.restoreDefault();
279 }
280
281 var shortcut = (0, _shortcut.eventToShortcut)(e); // Keypress is not a potential shortcut
282
283 if (!shortcut) {
284 return false;
285 } // Check we don't match any other shortcuts
286
287
288 var error = !!Object.entries(shortcutKeys).find(function (_ref9) {
289 var _ref10 = _slicedToArray(_ref9, 2),
290 feature = _ref10[0],
291 existingShortcut = _ref10[1].shortcut;
292
293 return feature !== activeFeature && existingShortcut && (0, _shortcut.shortcutMatchesShortcut)(shortcut, existingShortcut);
294 });
295 return _this.setState({
296 shortcutKeys: Object.assign({}, shortcutKeys, _defineProperty({}, activeFeature, {
297 shortcut: shortcut,
298 error: error
299 }))
300 });
301 };
302
303 _this.onFocus = function (focusedInput) {
304 return function () {
305 var shortcutKeys = _this.state.shortcutKeys;
306
307 _this.setState({
308 activeFeature: focusedInput,
309 shortcutKeys: Object.assign({}, shortcutKeys, _defineProperty({}, focusedInput, {
310 shortcut: null,
311 error: false
312 }))
313 });
314 };
315 };
316
317 _this.onBlur = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
318 var _this$state2, shortcutKeys, activeFeature, _shortcutKeys$activeF, shortcut, error;
319
320 return regeneratorRuntime.wrap(function _callee$(_context) {
321 while (1) {
322 switch (_context.prev = _context.next) {
323 case 0:
324 _this$state2 = _this.state, shortcutKeys = _this$state2.shortcutKeys, activeFeature = _this$state2.activeFeature;
325
326 if (!shortcutKeys[activeFeature]) {
327 _context.next = 6;
328 break;
329 }
330
331 _shortcutKeys$activeF = shortcutKeys[activeFeature], shortcut = _shortcutKeys$activeF.shortcut, error = _shortcutKeys$activeF.error;
332
333 if (!(!shortcut || error)) {
334 _context.next = 5;
335 break;
336 }
337
338 return _context.abrupt("return", _this.restoreDefault());
339
340 case 5:
341 return _context.abrupt("return", _this.saveShortcut());
342
343 case 6:
344 return _context.abrupt("return", false);
345
346 case 7:
347 case "end":
348 return _context.stop();
349 }
350 }
351 }, _callee);
352 }));
353 _this.saveShortcut = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
354 var _this$state3, activeFeature, shortcutKeys, setShortcut;
355
356 return regeneratorRuntime.wrap(function _callee2$(_context2) {
357 while (1) {
358 switch (_context2.prev = _context2.next) {
359 case 0:
360 _this$state3 = _this.state, activeFeature = _this$state3.activeFeature, shortcutKeys = _this$state3.shortcutKeys;
361 setShortcut = _this.props.setShortcut;
362 _context2.next = 4;
363 return setShortcut(activeFeature, shortcutKeys[activeFeature].shortcut);
364
365 case 4:
366 _this.setState({
367 successField: activeFeature
368 });
369
370 case 5:
371 case "end":
372 return _context2.stop();
373 }
374 }
375 }, _callee2);
376 }));
377 _this.restoreDefaults = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
378 var restoreAllDefaultShortcuts, defaultShortcuts;
379 return regeneratorRuntime.wrap(function _callee3$(_context3) {
380 while (1) {
381 switch (_context3.prev = _context3.next) {
382 case 0:
383 restoreAllDefaultShortcuts = _this.props.restoreAllDefaultShortcuts;
384 _context3.next = 3;
385 return restoreAllDefaultShortcuts();
386
387 case 3:
388 defaultShortcuts = _context3.sent;
389 return _context3.abrupt("return", _this.setState({
390 shortcutKeys: toShortcutState(defaultShortcuts)
391 }));
392
393 case 5:
394 case "end":
395 return _context3.stop();
396 }
397 }
398 }, _callee3);
399 }));
400 _this.restoreDefault = /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
401 var _this$state4, activeFeature, shortcutKeys, restoreDefaultShortcut, defaultShortcut;
402
403 return regeneratorRuntime.wrap(function _callee4$(_context4) {
404 while (1) {
405 switch (_context4.prev = _context4.next) {
406 case 0:
407 _this$state4 = _this.state, activeFeature = _this$state4.activeFeature, shortcutKeys = _this$state4.shortcutKeys;
408 restoreDefaultShortcut = _this.props.restoreDefaultShortcut;
409 _context4.next = 4;
410 return restoreDefaultShortcut(activeFeature);
411
412 case 4:
413 defaultShortcut = _context4.sent;
414 return _context4.abrupt("return", _this.setState({
415 shortcutKeys: Object.assign({}, shortcutKeys, toShortcutState(_defineProperty({}, activeFeature, defaultShortcut)))
416 }));
417
418 case 6:
419 case "end":
420 return _context4.stop();
421 }
422 }
423 }, _callee4);
424 }));
425
426 _this.displaySuccessMessage = function (activeElement) {
427 var _this$state5 = _this.state,
428 successField = _this$state5.successField,
429 shortcutKeys = _this$state5.shortcutKeys;
430 return activeElement === successField && shortcutKeys[activeElement].error === false ? 'valid' : undefined;
431 };
432
433 _this.displayError = function (activeElement) {
434 var _this$state6 = _this.state,
435 activeFeature = _this$state6.activeFeature,
436 shortcutKeys = _this$state6.shortcutKeys;
437 return activeElement === activeFeature && shortcutKeys[activeElement].error === true ? 'error' : undefined;
438 };
439
440 _this.renderKeyInput = function () {
441 var _this$state7 = _this.state,
442 shortcutKeys = _this$state7.shortcutKeys,
443 addonsShortcutLabels = _this$state7.addonsShortcutLabels;
444 var arr = Object.entries(shortcutKeys).map(function (_ref15) {
445 var _ref16 = _slicedToArray(_ref15, 2),
446 feature = _ref16[0],
447 shortcut = _ref16[1].shortcut;
448
449 return /*#__PURE__*/_react.default.createElement(Row, {
450 key: feature
451 }, /*#__PURE__*/_react.default.createElement(Description, null, shortcutLabels[feature] || addonsShortcutLabels[feature]), /*#__PURE__*/_react.default.createElement(TextInput, {
452 spellCheck: "false",
453 valid: _this.displayError(feature),
454 className: "modalInput",
455 onBlur: _this.onBlur,
456 onFocus: _this.onFocus(feature) // @ts-ignore
457 ,
458 onKeyDown: _this.onKeyDown,
459 value: shortcut ? (0, _shortcut.shortcutToHumanString)(shortcut) : '',
460 placeholder: "Type keys",
461 readOnly: true
462 }), /*#__PURE__*/_react.default.createElement(SuccessIcon, {
463 valid: _this.displaySuccessMessage(feature),
464 icon: "check"
465 }));
466 });
467 return arr;
468 };
469
470 _this.renderKeyForm = function () {
471 return /*#__PURE__*/_react.default.createElement(GridWrapper, null, /*#__PURE__*/_react.default.createElement(GridHeaderRow, null, /*#__PURE__*/_react.default.createElement(HeaderItem, null, "Commands"), /*#__PURE__*/_react.default.createElement(HeaderItem, null, "Shortcut")), _this.renderKeyInput());
472 };
473
474 _this.state = {
475 activeFeature: undefined,
476 successField: undefined,
477 // The initial shortcutKeys that come from props are the defaults/what was saved
478 // As the user interacts with the page, the state stores the temporary, unsaved shortcuts
479 // This object also includes the error attached to each shortcut
480 shortcutKeys: toShortcutState(props.shortcutKeys),
481 addonsShortcutLabels: props.addonsShortcutLabels
482 };
483 return _this;
484 }
485
486 _createClass(ShortcutsScreen, [{
487 key: "render",
488 value: function render() {
489 var layout = this.renderKeyForm();
490 return /*#__PURE__*/_react.default.createElement(Container, null, /*#__PURE__*/_react.default.createElement(Header, null, "Keyboard shortcuts"), layout, /*#__PURE__*/_react.default.createElement(Button, {
491 tertiary: true,
492 small: true,
493 id: "restoreDefaultsHotkeys",
494 onClick: this.restoreDefaults
495 }, "Restore defaults"), /*#__PURE__*/_react.default.createElement(_SettingsFooter.default, null));
496 }
497 }]);
498
499 return ShortcutsScreen;
500}(_react.Component);
501
502exports.ShortcutsScreen = ShortcutsScreen;
503ShortcutsScreen.displayName = "ShortcutsScreen";
\No newline at end of file