@storybook/react-native 6.5.3 → 6.5.4
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/dist/constants.js +4 -1
- package/dist/hooks.js +75 -36
- package/dist/index.js +40 -18
- package/dist/preview/View.js +165 -88
- package/dist/preview/components/OnDeviceUI/OnDeviceUI.js +127 -81
- package/dist/preview/components/OnDeviceUI/Panel.js +24 -15
- package/dist/preview/components/OnDeviceUI/absolute-positioned-keyboard-aware-view.js +17 -10
- package/dist/preview/components/OnDeviceUI/addons/Addons.js +32 -23
- package/dist/preview/components/OnDeviceUI/addons/AddonsSkeleton.js +69 -41
- package/dist/preview/components/OnDeviceUI/addons/List.js +15 -9
- package/dist/preview/components/OnDeviceUI/addons/Wrapper.js +27 -18
- package/dist/preview/components/OnDeviceUI/addons/index.js +8 -1
- package/dist/preview/components/OnDeviceUI/animation.js +37 -29
- package/dist/preview/components/OnDeviceUI/index.js +8 -1
- package/dist/preview/components/OnDeviceUI/navigation/Navigation.js +31 -24
- package/dist/preview/components/OnDeviceUI/navigation/NavigationBar.js +26 -14
- package/dist/preview/components/OnDeviceUI/navigation/NavigationButton.js +26 -17
- package/dist/preview/components/OnDeviceUI/navigation/constants.js +6 -3
- package/dist/preview/components/OnDeviceUI/navigation/index.js +8 -1
- package/dist/preview/components/Shared/icons.js +28 -10
- package/dist/preview/components/Shared/layout.js +21 -4
- package/dist/preview/components/Shared/tabs.js +41 -27
- package/dist/preview/components/Shared/theme.js +11 -8
- package/dist/preview/components/StoryListView/StoryListView.js +161 -97
- package/dist/preview/components/StoryListView/index.js +8 -1
- package/dist/preview/components/StoryView/StoryView.js +30 -14
- package/dist/preview/components/StoryView/index.js +8 -1
- package/dist/preview/executeLoadable.d.ts +4 -1
- package/dist/preview/executeLoadable.js +43 -23
- package/dist/preview/rn-host-detect.js +3 -1
- package/dist/preview/start.js +81 -56
- package/dist/types/types-6.0.js +2 -1
- package/dist/types/types.js +2 -1
- package/package.json +3 -3
- package/readme.md +97 -55
|
@@ -1,83 +1,129 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
|
+
};
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.IS_EXPO = void 0;
|
|
41
|
+
var native_1 = __importDefault(require("@emotion/native"));
|
|
42
|
+
var react_1 = __importStar(require("react"));
|
|
43
|
+
var react_native_1 = require("react-native");
|
|
44
|
+
var hooks_1 = require("../../../hooks");
|
|
45
|
+
var constants_1 = require("../../../constants");
|
|
46
|
+
var StoryListView_1 = __importDefault(require("../StoryListView"));
|
|
47
|
+
var StoryView_1 = __importDefault(require("../StoryView"));
|
|
48
|
+
var absolute_positioned_keyboard_aware_view_1 = __importDefault(require("./absolute-positioned-keyboard-aware-view"));
|
|
49
|
+
var Addons_1 = __importDefault(require("./addons/Addons"));
|
|
50
|
+
var AddonsSkeleton_1 = require("./addons/AddonsSkeleton");
|
|
51
|
+
var animation_1 = require("./animation");
|
|
52
|
+
var navigation_1 = __importDefault(require("./navigation"));
|
|
53
|
+
var constants_2 = require("./navigation/constants");
|
|
54
|
+
var Panel_1 = __importDefault(require("./Panel"));
|
|
55
|
+
var react_native_2 = require("react-native");
|
|
56
|
+
var react_native_safe_area_context_1 = require("react-native-safe-area-context");
|
|
57
|
+
var IS_IOS = react_native_1.Platform.OS === 'ios';
|
|
18
58
|
// @ts-ignore: Property 'Expo' does not exist on type 'Global'
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
59
|
+
var getExpoRoot = function () { return global.Expo || global.__expo || global.__exponent; };
|
|
60
|
+
exports.IS_EXPO = getExpoRoot() !== undefined;
|
|
61
|
+
var IS_ANDROID = react_native_1.Platform.OS === 'android';
|
|
62
|
+
var BREAKPOINT = 1024;
|
|
63
|
+
var flex = { flex: 1 };
|
|
24
64
|
/**
|
|
25
65
|
* Story preview container.
|
|
26
66
|
*/
|
|
27
|
-
function Preview(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
67
|
+
function Preview(_a) {
|
|
68
|
+
var animatedValue = _a.animatedValue, style = _a.style, children = _a.children;
|
|
69
|
+
var theme = (0, hooks_1.useTheme)();
|
|
70
|
+
var containerStyle = __assign({ backgroundColor: theme.preview.backgroundColor }, (0, animation_1.getPreviewShadowStyle)(animatedValue));
|
|
71
|
+
return (react_1.default.createElement(react_native_1.Animated.View, { style: [flex, containerStyle] },
|
|
72
|
+
react_1.default.createElement(react_native_1.View, { style: [flex, style] }, children)));
|
|
32
73
|
}
|
|
33
|
-
|
|
34
|
-
expoAndroidContainer: { paddingTop: StatusBar.currentHeight },
|
|
74
|
+
var styles = react_native_1.StyleSheet.create({
|
|
75
|
+
expoAndroidContainer: { paddingTop: react_native_1.StatusBar.currentHeight },
|
|
76
|
+
});
|
|
77
|
+
var Container = native_1.default.View(function (_a) {
|
|
78
|
+
var theme = _a.theme;
|
|
79
|
+
return (__assign(__assign({ flex: 1, backgroundColor: theme.preview.containerBackgroundColor }, (IS_ANDROID && exports.IS_EXPO ? styles.expoAndroidContainer : undefined)), react_native_1.Platform.select({ web: { overflow: 'hidden' } })));
|
|
35
80
|
});
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
width: Dimensions.get('window').width,
|
|
42
|
-
height: Dimensions.get('window').height,
|
|
43
|
-
}));
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
81
|
+
var OnDeviceUI = function (_a) {
|
|
82
|
+
var storyIndex = _a.storyIndex, shouldDisableKeyboardAvoidingView = _a.shouldDisableKeyboardAvoidingView, keyboardAvoidingViewVerticalOffset = _a.keyboardAvoidingViewVerticalOffset, initialTabOpen = _a.tabOpen;
|
|
83
|
+
var _b = (0, react_1.useState)(initialTabOpen || constants_2.CANVAS), tabOpen = _b[0], setTabOpen = _b[1];
|
|
84
|
+
var lastTabOpen = react_1.default.useRef(tabOpen);
|
|
85
|
+
var _c = (0, react_1.useState)(function () { return ({
|
|
86
|
+
width: react_native_1.Dimensions.get('window').width,
|
|
87
|
+
height: react_native_1.Dimensions.get('window').height,
|
|
88
|
+
}); }), previewDimensions = _c[0], setPreviewDimensions = _c[1];
|
|
89
|
+
var animatedValue = (0, react_1.useRef)(new react_native_1.Animated.Value(tabOpen));
|
|
90
|
+
var wide = (0, react_native_2.useWindowDimensions)().width >= BREAKPOINT;
|
|
91
|
+
var insets = (0, react_native_safe_area_context_1.useSafeAreaInsets)();
|
|
92
|
+
var handleToggleTab = react_1.default.useCallback(function (newTabOpen) {
|
|
48
93
|
if (newTabOpen === tabOpen) {
|
|
49
94
|
return;
|
|
50
95
|
}
|
|
51
96
|
lastTabOpen.current = tabOpen;
|
|
52
|
-
Animated.timing(animatedValue.current, {
|
|
97
|
+
react_native_1.Animated.timing(animatedValue.current, {
|
|
53
98
|
toValue: newTabOpen,
|
|
54
|
-
duration: ANIMATION_DURATION_TRANSITION,
|
|
55
|
-
easing: Easing.inOut(Easing.cubic),
|
|
99
|
+
duration: constants_1.ANIMATION_DURATION_TRANSITION,
|
|
100
|
+
easing: react_native_1.Easing.inOut(react_native_1.Easing.cubic),
|
|
56
101
|
useNativeDriver: true,
|
|
57
102
|
}).start();
|
|
58
103
|
setTabOpen(newTabOpen);
|
|
59
104
|
// close the keyboard opened from a TextInput from story list or knobs
|
|
60
|
-
if (newTabOpen === CANVAS) {
|
|
61
|
-
Keyboard.dismiss();
|
|
105
|
+
if (newTabOpen === constants_2.CANVAS) {
|
|
106
|
+
react_native_1.Keyboard.dismiss();
|
|
62
107
|
}
|
|
63
108
|
}, [tabOpen]);
|
|
64
|
-
|
|
65
|
-
|
|
109
|
+
var noSafeArea = (0, hooks_1.useStoryContextParam)('noSafeArea', false);
|
|
110
|
+
var previewWrapperStyles = [
|
|
66
111
|
flex,
|
|
67
|
-
getPreviewStyle({
|
|
112
|
+
(0, animation_1.getPreviewStyle)({
|
|
68
113
|
animatedValue: animatedValue.current,
|
|
69
|
-
previewDimensions,
|
|
70
|
-
wide,
|
|
71
|
-
insets,
|
|
72
|
-
tabOpen,
|
|
114
|
+
previewDimensions: previewDimensions,
|
|
115
|
+
wide: wide,
|
|
116
|
+
insets: insets,
|
|
117
|
+
tabOpen: tabOpen,
|
|
73
118
|
lastTabOpen: lastTabOpen.current,
|
|
74
119
|
}),
|
|
75
120
|
];
|
|
76
|
-
|
|
121
|
+
var isUIVisible = (0, hooks_1.useIsUIVisible)()[0];
|
|
77
122
|
// The initial value is just a guess until the layout calculation has been done.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
123
|
+
var _d = react_1.default.useState(insets.bottom + 40), navBarHeight = _d[0], setNavBarHeight = _d[1];
|
|
124
|
+
var measureNavigation = react_1.default.useCallback(function (_a) {
|
|
125
|
+
var nativeEvent = _a.nativeEvent;
|
|
126
|
+
var inset = insets.bottom;
|
|
81
127
|
setNavBarHeight(isUIVisible ? nativeEvent.layout.height - inset : 0);
|
|
82
128
|
}, [isUIVisible, insets]);
|
|
83
129
|
// There are 4 cases for the additional UI margin:
|
|
@@ -91,42 +137,42 @@ const OnDeviceUI = ({ storyIndex, shouldDisableKeyboardAvoidingView, keyboardAvo
|
|
|
91
137
|
// bottom safe area inset and the navigation bar height.
|
|
92
138
|
//
|
|
93
139
|
// 4. Storybook UI is not visible, and `noSafeArea` is true: No margin.
|
|
94
|
-
|
|
140
|
+
var safeAreaMargins = {
|
|
95
141
|
paddingBottom: isUIVisible ? insets.bottom + navBarHeight : noSafeArea ? 0 : insets.bottom,
|
|
96
142
|
paddingTop: !noSafeArea ? insets.top : 0,
|
|
97
143
|
overflow: 'hidden',
|
|
98
144
|
};
|
|
99
145
|
// The panels always apply the safe area, regardless of the story parameters.
|
|
100
|
-
|
|
146
|
+
var panelSafeAreaMargins = {
|
|
101
147
|
paddingBottom: insets.bottom + navBarHeight,
|
|
102
148
|
paddingTop: insets.top,
|
|
103
149
|
};
|
|
104
150
|
// Adjust the keyboard offset (possibly in a negative direction) to account
|
|
105
151
|
// for the safe area and navigation bar.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
return (
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
isSplitPanelVisible ? (
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
isPreviewInactive ? (
|
|
120
|
-
|
|
121
|
-
getSidebarPanelPosition(animatedValue.current, previewDimensions.width, wide),
|
|
152
|
+
var keyboardVerticalOffset = -panelSafeAreaMargins.paddingBottom + (keyboardAvoidingViewVerticalOffset !== null && keyboardAvoidingViewVerticalOffset !== void 0 ? keyboardAvoidingViewVerticalOffset : 0);
|
|
153
|
+
var isSplitPanelVisible = (0, hooks_1.useIsSplitPanelVisible)()[0];
|
|
154
|
+
var isPreviewInactive = tabOpen !== constants_2.CANVAS;
|
|
155
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
156
|
+
react_1.default.createElement(Container, null,
|
|
157
|
+
react_1.default.createElement(react_native_1.KeyboardAvoidingView, { enabled: !shouldDisableKeyboardAvoidingView || isPreviewInactive, behavior: IS_IOS ? 'padding' : null, keyboardVerticalOffset: keyboardVerticalOffset, style: flex },
|
|
158
|
+
react_1.default.createElement(absolute_positioned_keyboard_aware_view_1.default, { onLayout: setPreviewDimensions, previewDimensions: previewDimensions },
|
|
159
|
+
react_1.default.createElement(react_native_1.Animated.View, { style: previewWrapperStyles },
|
|
160
|
+
react_1.default.createElement(Preview, { style: safeAreaMargins, animatedValue: animatedValue.current },
|
|
161
|
+
react_1.default.createElement(StoryView_1.default, null),
|
|
162
|
+
isSplitPanelVisible ? (react_1.default.createElement(Panel_1.default, { edge: "top", style: { flex: 1 } },
|
|
163
|
+
react_1.default.createElement(Addons_1.default, { active: true }),
|
|
164
|
+
react_1.default.createElement(AddonsSkeleton_1.AddonsSkeleton, { visible: isPreviewInactive }))) : null),
|
|
165
|
+
isPreviewInactive ? (react_1.default.createElement(react_native_1.TouchableOpacity, { style: react_native_1.StyleSheet.absoluteFillObject, onPress: function () { return handleToggleTab(constants_2.CANVAS); } })) : null),
|
|
166
|
+
react_1.default.createElement(Panel_1.default, { edge: "right", style: [
|
|
167
|
+
(0, animation_1.getSidebarPanelPosition)(animatedValue.current, previewDimensions.width, wide),
|
|
122
168
|
panelSafeAreaMargins,
|
|
123
169
|
] },
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
getAddonPanelPosition(animatedValue.current, previewDimensions.width, wide),
|
|
170
|
+
react_1.default.createElement(StoryListView_1.default, { storyIndex: storyIndex })),
|
|
171
|
+
react_1.default.createElement(Panel_1.default, { edge: "left", style: [
|
|
172
|
+
(0, animation_1.getAddonPanelPosition)(animatedValue.current, previewDimensions.width, wide),
|
|
127
173
|
panelSafeAreaMargins,
|
|
128
174
|
] },
|
|
129
|
-
|
|
130
|
-
|
|
175
|
+
react_1.default.createElement(Addons_1.default, { active: tabOpen === constants_2.ADDONS })))),
|
|
176
|
+
react_1.default.createElement(navigation_1.default, { onLayout: measureNavigation, tabOpen: tabOpen, onChangeTab: handleToggleTab }))));
|
|
131
177
|
};
|
|
132
|
-
|
|
178
|
+
exports.default = react_1.default.memo(OnDeviceUI);
|
|
@@ -1,18 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
edge === 'top' ?
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var react_native_1 = require("react-native");
|
|
8
|
+
var native_1 = __importDefault(require("@emotion/native"));
|
|
9
|
+
var Container = (0, native_1.default)(react_native_1.Animated.View)(function (_a) {
|
|
10
|
+
var theme = _a.theme, edge = _a.edge;
|
|
11
|
+
return ({
|
|
12
|
+
backgroundColor: theme.panel.backgroundColor,
|
|
13
|
+
borderTopWidth: edge === 'top' ? theme.panel.borderWidth : undefined,
|
|
14
|
+
borderStartWidth: edge === 'left' ? theme.panel.borderWidth : undefined,
|
|
15
|
+
borderEndWidth: edge === 'right' ? theme.panel.borderWidth : undefined,
|
|
16
|
+
borderColor: theme.panel.borderColor,
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
var Panel = function (_a) {
|
|
20
|
+
var edge = _a.edge, children = _a.children, style = _a.style;
|
|
21
|
+
var containerStyle = react_native_1.StyleSheet.flatten([
|
|
22
|
+
edge === 'top' ? undefined : react_native_1.StyleSheet.absoluteFillObject,
|
|
14
23
|
style,
|
|
15
24
|
]);
|
|
16
|
-
return (
|
|
25
|
+
return (react_1.default.createElement(Container, { edge: edge, style: containerStyle }, children));
|
|
17
26
|
};
|
|
18
|
-
|
|
27
|
+
exports.default = react_1.default.memo(Panel);
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var react_native_1 = require("react-native");
|
|
3
8
|
// Android changes screen size when keyboard opens.
|
|
4
9
|
// To avoid issues we use absolute positioned element with predefined screen size
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
10
|
+
var AbsolutePositionedKeyboardAwareView = function (_a) {
|
|
11
|
+
var onLayout = _a.onLayout, _b = _a.previewDimensions, width = _b.width, height = _b.height, children = _a.children;
|
|
12
|
+
var onLayoutHandler = function (_a) {
|
|
13
|
+
var nativeEvent = _a.nativeEvent;
|
|
14
|
+
var _b = nativeEvent.layout, layoutHeight = _b.height, layoutWidth = _b.width;
|
|
8
15
|
if (layoutHeight !== height || layoutWidth !== width) {
|
|
9
16
|
onLayout({
|
|
10
17
|
height: layoutHeight,
|
|
@@ -12,13 +19,13 @@ const AbsolutePositionedKeyboardAwareView = ({ onLayout, previewDimensions: { wi
|
|
|
12
19
|
});
|
|
13
20
|
}
|
|
14
21
|
};
|
|
15
|
-
return (
|
|
16
|
-
|
|
22
|
+
return (react_1.default.createElement(react_native_1.View, { style: styles.container, onLayout: onLayoutHandler },
|
|
23
|
+
react_1.default.createElement(react_native_1.View, { style: width === 0
|
|
17
24
|
? styles.container
|
|
18
|
-
: [styles.absolute, { position: 'absolute', width, height }] }, children)));
|
|
25
|
+
: [styles.absolute, { position: 'absolute', width: width, height: height }] }, children)));
|
|
19
26
|
};
|
|
20
|
-
|
|
27
|
+
var styles = react_native_1.StyleSheet.create({
|
|
21
28
|
absolute: { position: 'absolute' },
|
|
22
29
|
container: { flex: 1 },
|
|
23
30
|
});
|
|
24
|
-
|
|
31
|
+
exports.default = react_1.default.memo(AbsolutePositionedKeyboardAwareView);
|
|
@@ -1,28 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var addons_1 = require("@storybook/addons");
|
|
8
|
+
var hooks_1 = require("../../../../hooks");
|
|
9
|
+
var List_1 = __importDefault(require("./List"));
|
|
10
|
+
var Wrapper_1 = __importDefault(require("./Wrapper"));
|
|
11
|
+
var layout_1 = require("../../Shared/layout");
|
|
12
|
+
var native_1 = __importDefault(require("@emotion/native"));
|
|
13
|
+
var Text = native_1.default.Text(function (_a) {
|
|
14
|
+
var theme = _a.theme;
|
|
15
|
+
return ({
|
|
16
|
+
marginTop: theme.tokens.spacing4,
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
var Addons = function (_a) {
|
|
20
|
+
var active = _a.active;
|
|
21
|
+
var panels = addons_1.addons.getElements('panel');
|
|
22
|
+
var _b = (0, hooks_1.useSelectedAddon)(Object.keys(panels)[0]), addonSelected = _b[0], setAddonSelected = _b[1];
|
|
23
|
+
var context = (0, hooks_1.useStoryContext)();
|
|
24
|
+
var id = context === null || context === void 0 ? void 0 : context.id;
|
|
16
25
|
if (!id) {
|
|
17
|
-
return (
|
|
18
|
-
|
|
26
|
+
return (react_1.default.createElement(layout_1.Box, { alignItems: "center", justifyContent: "center" },
|
|
27
|
+
react_1.default.createElement(Text, null, "No Story Selected")));
|
|
19
28
|
}
|
|
20
29
|
if (Object.keys(panels).length === 0) {
|
|
21
|
-
return (
|
|
22
|
-
|
|
30
|
+
return (react_1.default.createElement(layout_1.Box, { alignItems: "center", justifyContent: "center" },
|
|
31
|
+
react_1.default.createElement(Text, null, "No addons loaded.")));
|
|
23
32
|
}
|
|
24
|
-
return (
|
|
25
|
-
|
|
26
|
-
|
|
33
|
+
return (react_1.default.createElement(layout_1.Box, { flex: true },
|
|
34
|
+
react_1.default.createElement(List_1.default, { onPressAddon: setAddonSelected, panels: panels, addonSelected: active ? addonSelected : null }),
|
|
35
|
+
react_1.default.createElement(Wrapper_1.default, { addonSelected: active ? addonSelected : null, panels: panels })));
|
|
27
36
|
};
|
|
28
|
-
|
|
37
|
+
exports.default = react_1.default.memo(Addons);
|
|
@@ -1,7 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.AddonsSkeleton = void 0;
|
|
18
|
+
var react_1 = __importDefault(require("react"));
|
|
19
|
+
var native_1 = __importDefault(require("@emotion/native"));
|
|
20
|
+
var react_native_1 = require("react-native");
|
|
21
|
+
var constants_1 = require("../../../../constants");
|
|
5
22
|
/**
|
|
6
23
|
* Component that mimics the addons panel.
|
|
7
24
|
*
|
|
@@ -10,50 +27,61 @@ import { ANIMATION_DURATION_TRANSITION } from '../../../../constants';
|
|
|
10
27
|
* on the story content rather than become distracted by the addons UI in an
|
|
11
28
|
* already small view.
|
|
12
29
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
30
|
+
exports.AddonsSkeleton = react_1.default.memo(function AddonsSkeleton(_a) {
|
|
31
|
+
var visible = _a.visible;
|
|
32
|
+
var progress = react_1.default.useRef(new react_native_1.Animated.Value(visible ? 1 : 0));
|
|
33
|
+
react_1.default.useEffect(function () {
|
|
34
|
+
react_native_1.Animated.timing(progress.current, {
|
|
17
35
|
toValue: visible ? 1 : 0,
|
|
18
|
-
duration: ANIMATION_DURATION_TRANSITION,
|
|
36
|
+
duration: constants_1.ANIMATION_DURATION_TRANSITION,
|
|
19
37
|
useNativeDriver: true,
|
|
20
|
-
easing: Easing.inOut(Easing.cubic),
|
|
38
|
+
easing: react_native_1.Easing.inOut(react_native_1.Easing.cubic),
|
|
21
39
|
}).start();
|
|
22
40
|
}, [visible]);
|
|
23
|
-
return (
|
|
24
|
-
|
|
25
|
-
|
|
41
|
+
return (react_1.default.createElement(AddonsSkeletonContainer, { pointerEvents: "none", opacity: progress.current },
|
|
42
|
+
react_1.default.createElement(TabsSkeleton, null),
|
|
43
|
+
react_1.default.createElement(AddonsContentSkeleton, null)));
|
|
26
44
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
width,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
var TabSkeleton = native_1.default.View(function (_a) {
|
|
46
|
+
var theme = _a.theme, active = _a.active;
|
|
47
|
+
return ({
|
|
48
|
+
opacity: active ? 1 : 0.5,
|
|
49
|
+
backgroundColor: active ? theme.tabs.activeBackgroundColor : theme.tokens.color.grey200,
|
|
50
|
+
borderRadius: theme.tokens.borderRadius.round,
|
|
51
|
+
width: active ? 100 : 70,
|
|
52
|
+
height: 30,
|
|
53
|
+
marginRight: 12,
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
var BoxSkeleton = native_1.default.View(function (_a) {
|
|
57
|
+
var theme = _a.theme, width = _a.width, height = _a.height;
|
|
58
|
+
return ({
|
|
59
|
+
backgroundColor: theme.tokens.color.blue200,
|
|
60
|
+
borderRadius: theme.tokens.borderRadius.large,
|
|
61
|
+
height: height,
|
|
62
|
+
width: width,
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
function AddonsFieldSkeleton(_a) {
|
|
66
|
+
var _b = _a.long, long = _b === void 0 ? false : _b;
|
|
67
|
+
return (react_1.default.createElement(react_native_1.View, { style: { marginBottom: 32 } },
|
|
68
|
+
react_1.default.createElement(BoxSkeleton, { width: 75, height: 10, marginBottom: 12 }),
|
|
69
|
+
react_1.default.createElement(BoxSkeleton, { width: long ? 200 : 120, height: 15 })));
|
|
45
70
|
}
|
|
46
71
|
function AddonsContentSkeleton() {
|
|
47
|
-
return (
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
72
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
73
|
+
react_1.default.createElement(AddonsFieldSkeleton, { long: true }),
|
|
74
|
+
react_1.default.createElement(AddonsFieldSkeleton, { long: true }),
|
|
75
|
+
react_1.default.createElement(AddonsFieldSkeleton, null),
|
|
76
|
+
react_1.default.createElement(AddonsFieldSkeleton, null)));
|
|
52
77
|
}
|
|
53
78
|
function TabsSkeleton() {
|
|
54
|
-
return (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
79
|
+
return (react_1.default.createElement(react_native_1.View, { style: { flexDirection: 'row', marginBottom: 16 } },
|
|
80
|
+
react_1.default.createElement(TabSkeleton, null),
|
|
81
|
+
react_1.default.createElement(TabSkeleton, { active: true }),
|
|
82
|
+
react_1.default.createElement(TabSkeleton, null)));
|
|
58
83
|
}
|
|
59
|
-
|
|
84
|
+
var AddonsSkeletonContainer = (0, native_1.default)(react_native_1.Animated.View)(function (_a) {
|
|
85
|
+
var theme = _a.theme;
|
|
86
|
+
return (__assign(__assign({}, react_native_1.StyleSheet.absoluteFillObject), { flex: 1, backgroundColor: theme.panel.backgroundColor, borderTopWidth: theme.panel.borderWidth, borderColor: theme.panel.borderColor, padding: theme.panel.paddingHorizontal, overflow: 'hidden' }));
|
|
87
|
+
});
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var tabs_1 = require("../../Shared/tabs");
|
|
8
|
+
var AddonList = function (_a) {
|
|
9
|
+
var panels = _a.panels, addonSelected = _a.addonSelected, onPressAddon = _a.onPressAddon;
|
|
10
|
+
var addonKeys = Object.keys(panels);
|
|
11
|
+
return (react_1.default.createElement(tabs_1.TabBar, { scrollable: true }, addonKeys.map(function (id) {
|
|
12
|
+
var title = panels[id].title;
|
|
13
|
+
var resolvedTitle = typeof title === 'function' ? title() : title;
|
|
14
|
+
return (react_1.default.createElement(tabs_1.TabButton, { active: id === addonSelected, key: id, id: id, onPress: function () { return onPressAddon(id); } }, resolvedTitle.toUpperCase()));
|
|
9
15
|
})));
|
|
10
16
|
};
|
|
11
|
-
|
|
17
|
+
exports.default = react_1.default.memo(AddonList);
|
|
@@ -1,22 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var react_1 = __importDefault(require("react"));
|
|
7
|
+
var react_native_1 = require("react-native");
|
|
8
|
+
var native_1 = __importDefault(require("@emotion/native"));
|
|
9
|
+
var hooks_1 = require("../../../../hooks");
|
|
10
|
+
var Container = native_1.default.View(function (_a) {
|
|
11
|
+
var selected = _a.selected;
|
|
12
|
+
return ({
|
|
13
|
+
display: selected ? 'flex' : 'none',
|
|
14
|
+
flex: 1,
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var Wrapper = function (_a) {
|
|
18
|
+
var panels = _a.panels, addonSelected = _a.addonSelected;
|
|
10
19
|
// Force a re-render when the current story changes, to ensure that the addon
|
|
11
20
|
// panels state is not desynced.
|
|
12
|
-
useUpdateOnStoryChanged();
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return (
|
|
18
|
-
|
|
21
|
+
(0, hooks_1.useUpdateOnStoryChanged)();
|
|
22
|
+
var theme = (0, hooks_1.useTheme)();
|
|
23
|
+
var addonKeys = Object.keys(panels);
|
|
24
|
+
var content = addonKeys.map(function (id) {
|
|
25
|
+
var selected = addonSelected === id;
|
|
26
|
+
return (react_1.default.createElement(Container, { key: id, selected: selected },
|
|
27
|
+
react_1.default.createElement(react_native_1.ScrollView, { contentContainerStyle: { padding: theme.panel.paddingHorizontal } }, panels[id].render({ active: selected, key: id }))));
|
|
19
28
|
});
|
|
20
|
-
return
|
|
29
|
+
return react_1.default.createElement(react_1.default.Fragment, null, content);
|
|
21
30
|
};
|
|
22
|
-
|
|
31
|
+
exports.default = react_1.default.memo(Wrapper);
|