UNPKG

9.43 kBJavaScriptView Raw
1"use strict";
2
3require("core-js/modules/es.symbol.js");
4
5require("core-js/modules/es.array.slice.js");
6
7require("core-js/modules/es.object.freeze.js");
8
9Object.defineProperty(exports, "__esModule", {
10 value: true
11});
12exports.init = exports.focusableUIElements = exports.ActiveTabs = void 0;
13
14require("core-js/modules/es.object.assign.js");
15
16require("core-js/modules/es.object.keys.js");
17
18var _global = _interopRequireDefault(require("global"));
19
20var _pick = _interopRequireDefault(require("lodash/pick"));
21
22var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
23
24var _theming = require("@storybook/theming");
25
26var _clientLogger = require("@storybook/client-logger");
27
28var _tsDedent = _interopRequireDefault(require("ts-dedent"));
29
30var _merge = _interopRequireDefault(require("../lib/merge"));
31
32var _templateObject;
33
34var _excluded = ["theme", "selectedPanel"];
35
36function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
38function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
39
40function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
41
42function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
43
44var DOCS_MODE = _global.default.DOCS_MODE,
45 document = _global.default.document;
46var ActiveTabs = {
47 SIDEBAR: 'sidebar',
48 CANVAS: 'canvas',
49 ADDONS: 'addons'
50};
51exports.ActiveTabs = ActiveTabs;
52var defaultState = {
53 ui: {
54 enableShortcuts: true,
55 docsMode: false
56 },
57 layout: {
58 initialActive: ActiveTabs.CANVAS,
59 showToolbar: !DOCS_MODE,
60 isFullscreen: false,
61 showPanel: true,
62 showNav: true,
63 panelPosition: 'bottom',
64 showTabs: true
65 },
66 selectedPanel: undefined,
67 theme: _theming.themes.light
68};
69var focusableUIElements = {
70 storySearchField: 'storybook-explorer-searchfield',
71 storyListMenu: 'storybook-explorer-menu',
72 storyPanelRoot: 'storybook-panel-root'
73};
74exports.focusableUIElements = focusableUIElements;
75
76var init = function init(_ref) {
77 var store = _ref.store,
78 provider = _ref.provider,
79 singleStory = _ref.singleStory;
80 var api = {
81 toggleFullscreen: function toggleFullscreen(toggled) {
82 return store.setState(function (state) {
83 var showNav = state.layout.showNav;
84 var value = typeof toggled === 'boolean' ? toggled : !state.layout.isFullscreen;
85 var shouldShowNav = showNav === false && value === false;
86 return {
87 layout: Object.assign({}, state.layout, {
88 isFullscreen: value,
89 showNav: !singleStory && shouldShowNav ? true : showNav
90 })
91 };
92 }, {
93 persistence: 'session'
94 });
95 },
96 togglePanel: function togglePanel(toggled) {
97 return store.setState(function (state) {
98 var _state$layout = state.layout,
99 showNav = _state$layout.showNav,
100 isFullscreen = _state$layout.isFullscreen;
101 var value = typeof toggled !== 'undefined' ? toggled : !state.layout.showPanel;
102 var shouldToggleFullScreen = showNav === false && value === false;
103 return {
104 layout: Object.assign({}, state.layout, {
105 showPanel: value,
106 isFullscreen: shouldToggleFullScreen ? true : isFullscreen
107 })
108 };
109 }, {
110 persistence: 'session'
111 });
112 },
113 togglePanelPosition: function togglePanelPosition(position) {
114 if (typeof position !== 'undefined') {
115 return store.setState(function (state) {
116 return {
117 layout: Object.assign({}, state.layout, {
118 panelPosition: position
119 })
120 };
121 }, {
122 persistence: 'permanent'
123 });
124 }
125
126 return store.setState(function (state) {
127 return {
128 layout: Object.assign({}, state.layout, {
129 panelPosition: state.layout.panelPosition === 'right' ? 'bottom' : 'right'
130 })
131 };
132 }, {
133 persistence: 'permanent'
134 });
135 },
136 toggleNav: function toggleNav(toggled) {
137 return store.setState(function (state) {
138 if (singleStory) return {
139 layout: state.layout
140 };
141 var _state$layout2 = state.layout,
142 showPanel = _state$layout2.showPanel,
143 isFullscreen = _state$layout2.isFullscreen;
144 var showNav = typeof toggled !== 'undefined' ? toggled : !state.layout.showNav;
145 var shouldToggleFullScreen = showPanel === false && showNav === false;
146 return {
147 layout: Object.assign({}, state.layout, {
148 showNav: showNav,
149 isFullscreen: shouldToggleFullScreen ? true : !showNav && isFullscreen
150 })
151 };
152 }, {
153 persistence: 'session'
154 });
155 },
156 toggleToolbar: function toggleToolbar(toggled) {
157 return store.setState(function (state) {
158 var value = typeof toggled !== 'undefined' ? toggled : !state.layout.showToolbar;
159 return {
160 layout: Object.assign({}, state.layout, {
161 showToolbar: value
162 })
163 };
164 }, {
165 persistence: 'session'
166 });
167 },
168 resetLayout: function resetLayout() {
169 return store.setState(function (state) {
170 return {
171 layout: Object.assign({}, state.layout, {
172 showNav: false,
173 showPanel: false,
174 isFullscreen: false
175 })
176 };
177 }, {
178 persistence: 'session'
179 });
180 },
181 focusOnUIElement: function focusOnUIElement(elementId, select) {
182 if (!elementId) {
183 return;
184 }
185
186 var element = document.getElementById(elementId);
187
188 if (element) {
189 element.focus();
190 if (select) element.select();
191 }
192 },
193 getInitialOptions: function getInitialOptions() {
194 var _options$layout;
195
196 var _provider$getConfig = provider.getConfig(),
197 theme = _provider$getConfig.theme,
198 selectedPanel = _provider$getConfig.selectedPanel,
199 options = _objectWithoutProperties(_provider$getConfig, _excluded);
200
201 if ((options === null || options === void 0 ? void 0 : (_options$layout = options.layout) === null || _options$layout === void 0 ? void 0 : _options$layout.isToolshown) !== undefined) {
202 _clientLogger.once.warn((0, _tsDedent.default)(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n The \"isToolshown\" option is deprecated. Please use \"showToolbar\" instead.\n\n See https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#renamed-istoolshown-to-showtoolbar\n "]))));
203
204 options.layout.showToolbar = options.layout.isToolshown;
205 }
206
207 return Object.assign({}, defaultState, {
208 layout: Object.assign({}, defaultState.layout, (0, _pick.default)(options, Object.keys(defaultState.layout)), singleStory && {
209 showNav: false
210 }),
211 ui: Object.assign({}, defaultState.ui, (0, _pick.default)(options, Object.keys(defaultState.ui))),
212 selectedPanel: selectedPanel || defaultState.selectedPanel,
213 theme: theme || defaultState.theme
214 });
215 },
216 setOptions: function setOptions(options) {
217 var _store$getState = store.getState(),
218 layout = _store$getState.layout,
219 ui = _store$getState.ui,
220 selectedPanel = _store$getState.selectedPanel,
221 theme = _store$getState.theme;
222
223 if (options) {
224 var updatedLayout = Object.assign({}, layout, (0, _pick.default)(options, Object.keys(layout)), singleStory && {
225 showNav: false
226 });
227 var updatedUi = Object.assign({}, ui, (0, _pick.default)(options, Object.keys(ui)));
228 var updatedTheme = Object.assign({}, theme, options.theme);
229 var modification = {};
230
231 if (!(0, _fastDeepEqual.default)(ui, updatedUi)) {
232 modification.ui = updatedUi;
233 }
234
235 if (!(0, _fastDeepEqual.default)(layout, updatedLayout)) {
236 modification.layout = updatedLayout;
237 }
238
239 if (options.selectedPanel && !(0, _fastDeepEqual.default)(selectedPanel, options.selectedPanel)) {
240 modification.selectedPanel = options.selectedPanel;
241 }
242
243 if (Object.keys(modification).length) {
244 store.setState(modification, {
245 persistence: 'permanent'
246 });
247 }
248
249 if (!(0, _fastDeepEqual.default)(theme, updatedTheme)) {
250 store.setState({
251 theme: updatedTheme
252 });
253 }
254 }
255 }
256 };
257 var persisted = (0, _pick.default)(store.getState(), 'layout', 'ui', 'selectedPanel');
258 return {
259 api: api,
260 state: (0, _merge.default)(api.getInitialOptions(), persisted)
261 };
262};
263
264exports.init = init;
\No newline at end of file