1 | "use strict";
|
2 |
|
3 | require("core-js/modules/es.symbol.js");
|
4 |
|
5 | require("core-js/modules/es.array.slice.js");
|
6 |
|
7 | require("core-js/modules/es.object.freeze.js");
|
8 |
|
9 | Object.defineProperty(exports, "__esModule", {
|
10 | value: true
|
11 | });
|
12 | exports.init = exports.focusableUIElements = exports.ActiveTabs = void 0;
|
13 |
|
14 | require("core-js/modules/es.object.assign.js");
|
15 |
|
16 | require("core-js/modules/es.object.keys.js");
|
17 |
|
18 | var _global = _interopRequireDefault(require("global"));
|
19 |
|
20 | var _pick = _interopRequireDefault(require("lodash/pick"));
|
21 |
|
22 | var _fastDeepEqual = _interopRequireDefault(require("fast-deep-equal"));
|
23 |
|
24 | var _theming = require("@storybook/theming");
|
25 |
|
26 | var _clientLogger = require("@storybook/client-logger");
|
27 |
|
28 | var _tsDedent = _interopRequireDefault(require("ts-dedent"));
|
29 |
|
30 | var _merge = _interopRequireDefault(require("../lib/merge"));
|
31 |
|
32 | var _templateObject;
|
33 |
|
34 | var _excluded = ["theme", "selectedPanel"];
|
35 |
|
36 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
37 |
|
38 | function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
39 |
|
40 | function _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 |
|
42 | function _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 |
|
44 | var DOCS_MODE = _global.default.DOCS_MODE,
|
45 | document = _global.default.document;
|
46 | var ActiveTabs = {
|
47 | SIDEBAR: 'sidebar',
|
48 | CANVAS: 'canvas',
|
49 | ADDONS: 'addons'
|
50 | };
|
51 | exports.ActiveTabs = ActiveTabs;
|
52 | var 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 | };
|
69 | var focusableUIElements = {
|
70 | storySearchField: 'storybook-explorer-searchfield',
|
71 | storyListMenu: 'storybook-explorer-menu',
|
72 | storyPanelRoot: 'storybook-panel-root'
|
73 | };
|
74 | exports.focusableUIElements = focusableUIElements;
|
75 |
|
76 | var 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 |
|
264 | exports.init = init; |
\ | No newline at end of file |