@gjsify/adwaita-storybook 0.11.0
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/README.md +61 -0
- package/lib/types/app.d.ts +67 -0
- package/lib/types/controls.d.ts +7 -0
- package/lib/types/index.d.ts +7 -0
- package/lib/types/registry.d.ts +1 -0
- package/lib/types/story-element.d.ts +30 -0
- package/lib/types/styles.d.ts +3 -0
- package/lib/types/types.d.ts +24 -0
- package/package.json +59 -0
- package/src/_virtual/_rolldown/runtime.js +1 -0
- package/src/_virtual/_rolldown/runtime2.js +1 -0
- package/src/app.js +1 -0
- package/src/app.ts +312 -0
- package/src/app2.js +1 -0
- package/src/controls.js +1 -0
- package/src/controls.ts +190 -0
- package/src/controls2.js +1 -0
- package/src/index.js +1 -0
- package/src/index.ts +35 -0
- package/src/registry.js +1 -0
- package/src/registry.ts +8 -0
- package/src/registry2.js +1 -0
- package/src/story-element.js +1 -0
- package/src/story-element.ts +100 -0
- package/src/story-element2.js +1 -0
- package/src/styles.js +198 -0
- package/src/styles.ts +219 -0
- package/src/styles2.js +198 -0
- package/src/types.js +1 -0
- package/src/types.ts +33 -0
- package/src/types2.js +1 -0
package/src/styles.ts
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
// Built-in storybook-web chrome styles, shipped as a string and injected once on
|
|
2
|
+
// mount (mirrors @gjsify/adwaita-web's self-applied stylesheet and the native
|
|
3
|
+
// renderer's STORYBOOK_CSS). Everything is driven by the adwaita-web CSS custom
|
|
4
|
+
// properties so it follows the active light/dark theme.
|
|
5
|
+
|
|
6
|
+
export const STORYBOOK_WEB_CSS = `
|
|
7
|
+
.sb-window {
|
|
8
|
+
width: 100%;
|
|
9
|
+
height: 100%;
|
|
10
|
+
min-width: 0;
|
|
11
|
+
min-height: 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Each pane in the outer split view is a flex column that fills its height. */
|
|
15
|
+
.sb-sidebar-pane,
|
|
16
|
+
.sb-content-pane {
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
min-height: 0;
|
|
20
|
+
min-width: 0;
|
|
21
|
+
flex: 1 1 auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* The toolbar-view content holds either a scroller (sidebar) or the split view
|
|
25
|
+
(content); the inner panes own the scrolling, so this level never scrolls. */
|
|
26
|
+
.sb-sidebar-pane adw-toolbar-view > .adw-toolbar-view-content,
|
|
27
|
+
.sb-content-pane adw-toolbar-view > .adw-toolbar-view-content {
|
|
28
|
+
overflow: hidden;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/* Background scheme: the content header + preview + controls all sit on the
|
|
32
|
+
window (story) background as one surface; only the left story-list column
|
|
33
|
+
(its header + list) keeps the distinct sidebar shade. Matches the native
|
|
34
|
+
renderer. The default adw-header-bar background is its own headerbar shade,
|
|
35
|
+
so override it per pane here. */
|
|
36
|
+
.sb-content-pane adw-header-bar {
|
|
37
|
+
background-color: var(--window-bg-color);
|
|
38
|
+
}
|
|
39
|
+
.sb-sidebar-pane adw-header-bar {
|
|
40
|
+
background-color: var(--sidebar-bg-color);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.sb-sidebar-scroll {
|
|
44
|
+
flex: 1 1 auto;
|
|
45
|
+
min-height: 0;
|
|
46
|
+
overflow-y: auto;
|
|
47
|
+
background-color: var(--sidebar-bg-color);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* --- Story list (mirrors GTK .navigation-sidebar) --- */
|
|
51
|
+
.sb-sidebar-list {
|
|
52
|
+
padding: var(--spacing-xs);
|
|
53
|
+
display: flex;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
gap: 1px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.sb-category {
|
|
59
|
+
font-size: var(--font-size-small);
|
|
60
|
+
font-weight: 700;
|
|
61
|
+
opacity: var(--dim-opacity);
|
|
62
|
+
padding: 10px var(--spacing-m) 4px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.sb-story-row {
|
|
66
|
+
padding: var(--spacing-xs) var(--spacing-m);
|
|
67
|
+
margin: 0 var(--spacing-xs);
|
|
68
|
+
border-radius: var(--button-radius);
|
|
69
|
+
cursor: pointer;
|
|
70
|
+
color: var(--window-fg-color);
|
|
71
|
+
font-size: var(--font-size-base);
|
|
72
|
+
white-space: nowrap;
|
|
73
|
+
overflow: hidden;
|
|
74
|
+
text-overflow: ellipsis;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.sb-story-row:hover {
|
|
78
|
+
background-color: var(--button-bg-color);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.sb-story-row.selected {
|
|
82
|
+
background-color: var(--accent-bg-color);
|
|
83
|
+
color: var(--accent-fg-color);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* --- Preview area --- */
|
|
87
|
+
.sb-preview-scroll {
|
|
88
|
+
flex: 1 1 auto;
|
|
89
|
+
min-height: 0;
|
|
90
|
+
min-width: 0;
|
|
91
|
+
overflow: auto;
|
|
92
|
+
background-color: var(--window-bg-color);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.sb-story-page {
|
|
96
|
+
display: flex;
|
|
97
|
+
justify-content: center;
|
|
98
|
+
padding: var(--spacing-xl) var(--spacing-m);
|
|
99
|
+
min-height: 100%;
|
|
100
|
+
box-sizing: border-box;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.sb-story-clamp {
|
|
104
|
+
width: 100%;
|
|
105
|
+
max-width: 600px;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.sb-story-group-header {
|
|
109
|
+
padding: var(--spacing-xs) 2px;
|
|
110
|
+
display: flex;
|
|
111
|
+
flex-direction: column;
|
|
112
|
+
gap: 2px;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.sb-story-group-title {
|
|
116
|
+
font-size: var(--font-size-heading);
|
|
117
|
+
font-weight: 700;
|
|
118
|
+
color: var(--window-fg-color);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.sb-story-group-description {
|
|
122
|
+
font-size: var(--font-size-base);
|
|
123
|
+
opacity: var(--dim-opacity);
|
|
124
|
+
color: var(--window-fg-color);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* Centered, dashed-framed preview stage (mirrors the native .story-stage). */
|
|
128
|
+
.story-stage {
|
|
129
|
+
display: flex;
|
|
130
|
+
flex-direction: column;
|
|
131
|
+
align-items: center;
|
|
132
|
+
justify-content: center;
|
|
133
|
+
gap: var(--spacing-m);
|
|
134
|
+
padding: var(--spacing-l);
|
|
135
|
+
margin-top: var(--spacing-s);
|
|
136
|
+
border: 1px dashed rgba(127, 127, 127, 0.28);
|
|
137
|
+
border-radius: var(--card-radius);
|
|
138
|
+
min-height: 80px;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/* --- Controls panel --- */
|
|
142
|
+
.sb-controls-scroll {
|
|
143
|
+
height: 100%;
|
|
144
|
+
overflow-y: auto;
|
|
145
|
+
background-color: var(--window-bg-color);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.sb-controls-page {
|
|
149
|
+
padding: var(--spacing-l);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* Range-control card (mirrors the native .story-range-row). */
|
|
153
|
+
.sb-range-row {
|
|
154
|
+
display: flex;
|
|
155
|
+
flex-direction: column;
|
|
156
|
+
gap: var(--spacing-xs);
|
|
157
|
+
padding: var(--spacing-m);
|
|
158
|
+
border-bottom: 1px solid var(--card-shade-color);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
.sb-range-row:last-child {
|
|
162
|
+
border-bottom: none;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.sb-range-header {
|
|
166
|
+
display: flex;
|
|
167
|
+
justify-content: space-between;
|
|
168
|
+
align-items: baseline;
|
|
169
|
+
gap: var(--spacing-m);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.sb-range-title {
|
|
173
|
+
font-size: var(--font-size-base);
|
|
174
|
+
font-weight: 700;
|
|
175
|
+
color: var(--card-fg-color);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.sb-range-value {
|
|
179
|
+
font-size: var(--font-size-base);
|
|
180
|
+
font-variant-numeric: tabular-nums;
|
|
181
|
+
opacity: var(--dim-opacity);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.sb-range-description {
|
|
185
|
+
font-size: var(--font-size-small);
|
|
186
|
+
opacity: var(--dim-opacity);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.sb-range-input {
|
|
190
|
+
width: 100%;
|
|
191
|
+
accent-color: var(--accent-bg-color);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.sb-color-input {
|
|
195
|
+
width: 42px;
|
|
196
|
+
height: 28px;
|
|
197
|
+
padding: 0;
|
|
198
|
+
border: 1px solid var(--card-shade-color);
|
|
199
|
+
border-radius: var(--button-radius);
|
|
200
|
+
background: none;
|
|
201
|
+
cursor: pointer;
|
|
202
|
+
}
|
|
203
|
+
`;
|
|
204
|
+
|
|
205
|
+
let injected = false;
|
|
206
|
+
|
|
207
|
+
/** Inject the chrome stylesheet once (idempotent, browser-only). */
|
|
208
|
+
export function injectStorybookStyles(): void {
|
|
209
|
+
if (injected || typeof document === 'undefined') return;
|
|
210
|
+
if (document.getElementById('adwaita-storybook-style')) {
|
|
211
|
+
injected = true;
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const style = document.createElement('style');
|
|
215
|
+
style.id = 'adwaita-storybook-style';
|
|
216
|
+
style.textContent = STORYBOOK_WEB_CSS;
|
|
217
|
+
document.head.appendChild(style);
|
|
218
|
+
injected = true;
|
|
219
|
+
}
|
package/src/styles2.js
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import"./_virtual/_rolldown/runtime2.js";const e=`
|
|
2
|
+
.sb-window {
|
|
3
|
+
width: 100%;
|
|
4
|
+
height: 100%;
|
|
5
|
+
min-width: 0;
|
|
6
|
+
min-height: 0;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/* Each pane in the outer split view is a flex column that fills its height. */
|
|
10
|
+
.sb-sidebar-pane,
|
|
11
|
+
.sb-content-pane {
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
min-height: 0;
|
|
15
|
+
min-width: 0;
|
|
16
|
+
flex: 1 1 auto;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* The toolbar-view content holds either a scroller (sidebar) or the split view
|
|
20
|
+
(content); the inner panes own the scrolling, so this level never scrolls. */
|
|
21
|
+
.sb-sidebar-pane adw-toolbar-view > .adw-toolbar-view-content,
|
|
22
|
+
.sb-content-pane adw-toolbar-view > .adw-toolbar-view-content {
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* Background scheme: the content header + preview + controls all sit on the
|
|
27
|
+
window (story) background as one surface; only the left story-list column
|
|
28
|
+
(its header + list) keeps the distinct sidebar shade. Matches the native
|
|
29
|
+
renderer. The default adw-header-bar background is its own headerbar shade,
|
|
30
|
+
so override it per pane here. */
|
|
31
|
+
.sb-content-pane adw-header-bar {
|
|
32
|
+
background-color: var(--window-bg-color);
|
|
33
|
+
}
|
|
34
|
+
.sb-sidebar-pane adw-header-bar {
|
|
35
|
+
background-color: var(--sidebar-bg-color);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sb-sidebar-scroll {
|
|
39
|
+
flex: 1 1 auto;
|
|
40
|
+
min-height: 0;
|
|
41
|
+
overflow-y: auto;
|
|
42
|
+
background-color: var(--sidebar-bg-color);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* --- Story list (mirrors GTK .navigation-sidebar) --- */
|
|
46
|
+
.sb-sidebar-list {
|
|
47
|
+
padding: var(--spacing-xs);
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-direction: column;
|
|
50
|
+
gap: 1px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.sb-category {
|
|
54
|
+
font-size: var(--font-size-small);
|
|
55
|
+
font-weight: 700;
|
|
56
|
+
opacity: var(--dim-opacity);
|
|
57
|
+
padding: 10px var(--spacing-m) 4px;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.sb-story-row {
|
|
61
|
+
padding: var(--spacing-xs) var(--spacing-m);
|
|
62
|
+
margin: 0 var(--spacing-xs);
|
|
63
|
+
border-radius: var(--button-radius);
|
|
64
|
+
cursor: pointer;
|
|
65
|
+
color: var(--window-fg-color);
|
|
66
|
+
font-size: var(--font-size-base);
|
|
67
|
+
white-space: nowrap;
|
|
68
|
+
overflow: hidden;
|
|
69
|
+
text-overflow: ellipsis;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.sb-story-row:hover {
|
|
73
|
+
background-color: var(--button-bg-color);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.sb-story-row.selected {
|
|
77
|
+
background-color: var(--accent-bg-color);
|
|
78
|
+
color: var(--accent-fg-color);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* --- Preview area --- */
|
|
82
|
+
.sb-preview-scroll {
|
|
83
|
+
flex: 1 1 auto;
|
|
84
|
+
min-height: 0;
|
|
85
|
+
min-width: 0;
|
|
86
|
+
overflow: auto;
|
|
87
|
+
background-color: var(--window-bg-color);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.sb-story-page {
|
|
91
|
+
display: flex;
|
|
92
|
+
justify-content: center;
|
|
93
|
+
padding: var(--spacing-xl) var(--spacing-m);
|
|
94
|
+
min-height: 100%;
|
|
95
|
+
box-sizing: border-box;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.sb-story-clamp {
|
|
99
|
+
width: 100%;
|
|
100
|
+
max-width: 600px;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.sb-story-group-header {
|
|
104
|
+
padding: var(--spacing-xs) 2px;
|
|
105
|
+
display: flex;
|
|
106
|
+
flex-direction: column;
|
|
107
|
+
gap: 2px;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.sb-story-group-title {
|
|
111
|
+
font-size: var(--font-size-heading);
|
|
112
|
+
font-weight: 700;
|
|
113
|
+
color: var(--window-fg-color);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.sb-story-group-description {
|
|
117
|
+
font-size: var(--font-size-base);
|
|
118
|
+
opacity: var(--dim-opacity);
|
|
119
|
+
color: var(--window-fg-color);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* Centered, dashed-framed preview stage (mirrors the native .story-stage). */
|
|
123
|
+
.story-stage {
|
|
124
|
+
display: flex;
|
|
125
|
+
flex-direction: column;
|
|
126
|
+
align-items: center;
|
|
127
|
+
justify-content: center;
|
|
128
|
+
gap: var(--spacing-m);
|
|
129
|
+
padding: var(--spacing-l);
|
|
130
|
+
margin-top: var(--spacing-s);
|
|
131
|
+
border: 1px dashed rgba(127, 127, 127, 0.28);
|
|
132
|
+
border-radius: var(--card-radius);
|
|
133
|
+
min-height: 80px;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* --- Controls panel --- */
|
|
137
|
+
.sb-controls-scroll {
|
|
138
|
+
height: 100%;
|
|
139
|
+
overflow-y: auto;
|
|
140
|
+
background-color: var(--window-bg-color);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.sb-controls-page {
|
|
144
|
+
padding: var(--spacing-l);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/* Range-control card (mirrors the native .story-range-row). */
|
|
148
|
+
.sb-range-row {
|
|
149
|
+
display: flex;
|
|
150
|
+
flex-direction: column;
|
|
151
|
+
gap: var(--spacing-xs);
|
|
152
|
+
padding: var(--spacing-m);
|
|
153
|
+
border-bottom: 1px solid var(--card-shade-color);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.sb-range-row:last-child {
|
|
157
|
+
border-bottom: none;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.sb-range-header {
|
|
161
|
+
display: flex;
|
|
162
|
+
justify-content: space-between;
|
|
163
|
+
align-items: baseline;
|
|
164
|
+
gap: var(--spacing-m);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.sb-range-title {
|
|
168
|
+
font-size: var(--font-size-base);
|
|
169
|
+
font-weight: 700;
|
|
170
|
+
color: var(--card-fg-color);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.sb-range-value {
|
|
174
|
+
font-size: var(--font-size-base);
|
|
175
|
+
font-variant-numeric: tabular-nums;
|
|
176
|
+
opacity: var(--dim-opacity);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.sb-range-description {
|
|
180
|
+
font-size: var(--font-size-small);
|
|
181
|
+
opacity: var(--dim-opacity);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.sb-range-input {
|
|
185
|
+
width: 100%;
|
|
186
|
+
accent-color: var(--accent-bg-color);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.sb-color-input {
|
|
190
|
+
width: 42px;
|
|
191
|
+
height: 28px;
|
|
192
|
+
padding: 0;
|
|
193
|
+
border: 1px solid var(--card-shade-color);
|
|
194
|
+
border-radius: var(--button-radius);
|
|
195
|
+
background: none;
|
|
196
|
+
cursor: pointer;
|
|
197
|
+
}
|
|
198
|
+
`;let t=!1;function injectStorybookStyles(){if(t||typeof document>`u`)return;if(document.getElementById(`adwaita-storybook-style`)){t=!0;return}let n=document.createElement(`style`);n.id=`adwaita-storybook-style`,n.textContent=e,document.head.appendChild(n),t=!0}export{e,injectStorybookStyles};
|
package/src/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";function isWebStoryModule(e){return typeof e==`object`&&!!e&&Array.isArray(e.stories)}export{isWebStoryModule};
|
package/src/types.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// Web story-module contract — the DOM specialisation of @gjsify/storybook-core's
|
|
2
|
+
// generic StoryModuleLike, bound to the DOM StoryElement base.
|
|
3
|
+
|
|
4
|
+
import type { StoryMeta } from '@gjsify/stories';
|
|
5
|
+
import type { StoryModuleLike } from '@gjsify/storybook-core';
|
|
6
|
+
import type { StoryElement } from './story-element.js';
|
|
7
|
+
|
|
8
|
+
/** Constructor contract for a web story class: zero-arg `new`, static metadata. */
|
|
9
|
+
export interface WebStoryConstructor {
|
|
10
|
+
new (): StoryElement;
|
|
11
|
+
getMetadata(): StoryMeta;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Wraps a story's content-build step (e.g. to install a shared environment). */
|
|
15
|
+
export type WebStoryDecorator = (build: () => void, story: StoryElement) => void;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A group of related web stories, optionally wrapped by module-level decorators.
|
|
19
|
+
* The DOM binding of {@link StoryModuleLike} over {@link StoryElement} +
|
|
20
|
+
* {@link WebStoryConstructor}.
|
|
21
|
+
*/
|
|
22
|
+
export interface WebStoryModule extends StoryModuleLike<StoryElement, WebStoryConstructor> {
|
|
23
|
+
stories: WebStoryConstructor[];
|
|
24
|
+
/** Populated by {@link StoryRegistry.createStoryInstances}. */
|
|
25
|
+
instances?: StoryElement[];
|
|
26
|
+
/** Decorators applied around every story's `initialize()` in this module. */
|
|
27
|
+
decorators?: WebStoryDecorator[];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Narrowing guard — `true` when `value` is a {@link WebStoryModule}. */
|
|
31
|
+
export function isWebStoryModule(value: unknown): value is WebStoryModule {
|
|
32
|
+
return typeof value === 'object' && value !== null && Array.isArray((value as { stories?: unknown }).stories);
|
|
33
|
+
}
|
package/src/types2.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import"./_virtual/_rolldown/runtime2.js";function isWebStoryModule(e){return typeof e==`object`&&!!e&&Array.isArray(e.stories)}export{isWebStoryModule};
|