@financial-times/cp-content-pipeline-ui 6.6.2 → 6.7.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/CHANGELOG.md +32 -0
- package/lib/components/Clip/client/index.d.ts +2 -0
- package/lib/components/Clip/client/index.js +27 -1
- package/lib/components/Clip/client/index.js.map +1 -1
- package/lib/components/Clip/components/Container.js +2 -2
- package/lib/components/Clip/components/Container.js.map +1 -1
- package/lib/components/Clip/components/VideoDescription.js +2 -2
- package/lib/components/Clip/components/VideoDescription.js.map +1 -1
- package/lib/components/Clip/components/VideoInfoBox.js +2 -2
- package/lib/components/Clip/components/VideoInfoBox.js.map +1 -1
- package/lib/components/Clip/template/index.js +0 -1
- package/lib/components/Clip/template/index.js.map +1 -1
- package/lib/components/Clip/test/index.spec.js +30 -0
- package/lib/components/Clip/test/index.spec.js.map +1 -1
- package/lib/components/Expander/client/index.d.ts +49 -0
- package/lib/components/Expander/client/index.js +124 -0
- package/lib/components/Expander/client/index.js.map +1 -0
- package/lib/components/Expander/index.d.ts +15 -0
- package/lib/components/Expander/index.js +27 -0
- package/lib/components/Expander/index.js.map +1 -0
- package/lib/components/Expander/test/client/index.spec.d.ts +1 -0
- package/lib/components/Expander/test/client/index.spec.js +103 -0
- package/lib/components/Expander/test/client/index.spec.js.map +1 -0
- package/lib/components/Expander/test/index.spec.d.ts +1 -0
- package/lib/components/Expander/test/index.spec.js +57 -0
- package/lib/components/Expander/test/index.spec.js.map +1 -0
- package/lib/components/Expander/test/snapshot.spec.d.ts +1 -0
- package/lib/components/Expander/test/snapshot.spec.js +63 -0
- package/lib/components/Expander/test/snapshot.spec.js.map +1 -0
- package/lib/components/ImageSet/index.js +1 -1
- package/lib/components/ImageSet/index.js.map +1 -1
- package/lib/components/LiveBlogPost/client/index.d.ts +5 -0
- package/lib/components/LiveBlogPost/client/index.js +12 -0
- package/lib/components/LiveBlogPost/client/index.js.map +1 -0
- package/lib/components/LiveBlogPost/index.js +9 -21
- package/lib/components/LiveBlogPost/index.js.map +1 -1
- package/lib/components/LiveBlogWrapper/index.js +1 -1
- package/lib/components/LiveBlogWrapper/index.js.map +1 -1
- package/lib/components/Recommended/index.js +1 -1
- package/lib/components/Recommended/index.js.map +1 -1
- package/lib/components/RichText/index.d.ts +1 -1
- package/lib/components/Table/index.js +1 -1
- package/lib/components/Table/index.js.map +1 -1
- package/lib/components/Video/index.js +1 -1
- package/lib/components/Video/index.js.map +1 -1
- package/lib/components/YoutubeVideo/index.js +1 -1
- package/lib/components/YoutubeVideo/index.js.map +1 -1
- package/lib/stories/Clip.stories.d.ts +2 -1
- package/lib/stories/Clip.stories.js +5 -5
- package/lib/stories/Clip.stories.js.map +1 -1
- package/lib/stories/Expander.stories.d.ts +54 -0
- package/lib/stories/Expander.stories.js +142 -0
- package/lib/stories/Expander.stories.js.map +1 -0
- package/package.json +3 -5
- package/src/components/Clip/client/index.ts +39 -1
- package/src/components/Clip/client/main.scss +28 -0
- package/src/components/Clip/components/Container.tsx +10 -3
- package/src/components/Clip/components/VideoDescription.tsx +5 -3
- package/src/components/Clip/components/VideoInfoBox.tsx +3 -3
- package/src/components/Clip/components/_video-info-box.scss +0 -4
- package/src/components/Clip/template/index.ts +0 -1
- package/src/components/Clip/test/__snapshots__/snapshot.spec.tsx.snap +57 -47
- package/src/components/Clip/test/index.spec.ts +45 -0
- package/src/components/Expander/client/index.ts +197 -0
- package/src/components/Expander/client/main.scss +162 -0
- package/src/components/Expander/index.tsx +74 -0
- package/src/components/Expander/test/__snapshots__/snapshot.spec.tsx.snap +225 -0
- package/src/components/Expander/test/client/index.spec.tsx +129 -0
- package/src/components/Expander/test/index.spec.tsx +77 -0
- package/src/components/Expander/test/snapshot.spec.tsx +73 -0
- package/src/components/ImageSet/index.tsx +1 -0
- package/src/components/LiveBlogPost/client/index.ts +9 -0
- package/src/components/LiveBlogPost/index.tsx +29 -42
- package/src/components/LiveBlogWrapper/index.tsx +1 -0
- package/src/components/Recommended/index.tsx +1 -0
- package/src/components/Table/index.tsx +1 -0
- package/src/components/Video/index.tsx +4 -1
- package/src/components/YoutubeVideo/index.tsx +4 -1
- package/src/stories/Clip.stories.tsx +3 -2
- package/src/stories/Expander.stories.scss +3 -0
- package/src/stories/Expander.stories.tsx +159 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
2
|
+
// @ts-nocheck
|
|
3
|
+
import React from 'react'
|
|
4
|
+
import renderer from 'react-test-renderer'
|
|
5
|
+
import Expander, { ExpanderProps } from '../index'
|
|
6
|
+
|
|
7
|
+
describe('Expander Snapshot', () => {
|
|
8
|
+
describe('component rendered on server', () => {
|
|
9
|
+
it('default render', () => {
|
|
10
|
+
const props: ExpanderProps = {
|
|
11
|
+
id: 'test-id',
|
|
12
|
+
}
|
|
13
|
+
const tree = renderer
|
|
14
|
+
.create(
|
|
15
|
+
<Expander {...props}>
|
|
16
|
+
<div>Children 1</div>
|
|
17
|
+
<div>Children 2</div>
|
|
18
|
+
</Expander>
|
|
19
|
+
)
|
|
20
|
+
.toJSON()
|
|
21
|
+
expect(tree).toMatchSnapshot()
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
it('only on mobile', () => {
|
|
25
|
+
const props: ExpanderProps = {
|
|
26
|
+
id: 'test-id',
|
|
27
|
+
onlyMobile: true,
|
|
28
|
+
}
|
|
29
|
+
const tree = renderer
|
|
30
|
+
.create(
|
|
31
|
+
<Expander {...props}>
|
|
32
|
+
<div>Children 1</div>
|
|
33
|
+
<div>Children 2</div>
|
|
34
|
+
</Expander>
|
|
35
|
+
)
|
|
36
|
+
.toJSON()
|
|
37
|
+
expect(tree).toMatchSnapshot()
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
it('with different labels', () => {
|
|
41
|
+
const props: ExpanderProps = {
|
|
42
|
+
id: 'test-id',
|
|
43
|
+
collapseLabel: 'Close',
|
|
44
|
+
expandLabel: 'Open',
|
|
45
|
+
}
|
|
46
|
+
const tree = renderer
|
|
47
|
+
.create(
|
|
48
|
+
<Expander {...props}>
|
|
49
|
+
<div>Children 1</div>
|
|
50
|
+
<div>Children 2</div>
|
|
51
|
+
</Expander>
|
|
52
|
+
)
|
|
53
|
+
.toJSON()
|
|
54
|
+
expect(tree).toMatchSnapshot()
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
it('with different state', () => {
|
|
58
|
+
const props: ExpanderProps = {
|
|
59
|
+
id: 'test-id',
|
|
60
|
+
state: 'expanded',
|
|
61
|
+
}
|
|
62
|
+
const tree = renderer
|
|
63
|
+
.create(
|
|
64
|
+
<Expander {...props}>
|
|
65
|
+
<div>Children 1</div>
|
|
66
|
+
<div>Children 2</div>
|
|
67
|
+
</Expander>
|
|
68
|
+
)
|
|
69
|
+
.toJSON()
|
|
70
|
+
expect(tree).toMatchSnapshot()
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
})
|
|
@@ -2,10 +2,13 @@ import React from 'react'
|
|
|
2
2
|
import ShareButtons from './ShareButtons'
|
|
3
3
|
import Timestamp from './Timestamp'
|
|
4
4
|
import RichText from '../RichText'
|
|
5
|
+
import Expander from '../Expander'
|
|
5
6
|
import classnames from 'classnames'
|
|
6
7
|
import Headshot from '../Headshot'
|
|
7
8
|
import Byline from '../Byline'
|
|
8
9
|
import { StructuredTreeFragment } from '@financial-times/cp-content-pipeline-client'
|
|
10
|
+
import parse from 'html-react-parser'
|
|
11
|
+
|
|
9
12
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
10
13
|
//TODO: CI-1975 remove "any" types
|
|
11
14
|
// this has been ported from x-dash, and a lot of what is expected into these arguments will take a lot of digging
|
|
@@ -14,6 +17,26 @@ type indicators = {
|
|
|
14
17
|
isOpinion?: boolean
|
|
15
18
|
}
|
|
16
19
|
|
|
20
|
+
const TruncatedPost = ({ id, children }: { id: string; children: any }) => {
|
|
21
|
+
return (
|
|
22
|
+
<div
|
|
23
|
+
data-trackable="truncated-post"
|
|
24
|
+
data-trackable-context-post={id}
|
|
25
|
+
data-trackable-category="live-blog"
|
|
26
|
+
className="x-live-blog-post__body n-content-body article--body"
|
|
27
|
+
>
|
|
28
|
+
<Expander
|
|
29
|
+
expandLabel="Expand post"
|
|
30
|
+
collapseLabel="Collapse post"
|
|
31
|
+
onlyMobile={true}
|
|
32
|
+
id={`truncated-${id}`}
|
|
33
|
+
>
|
|
34
|
+
{children}
|
|
35
|
+
</Expander>
|
|
36
|
+
</div>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
|
|
17
40
|
export type LiveBlogPostProps = {
|
|
18
41
|
id: string
|
|
19
42
|
postId: string // Remove once wordpress is no longer in use
|
|
@@ -39,23 +62,6 @@ export type LiveBlogPostProps = {
|
|
|
39
62
|
authors: Array<any>
|
|
40
63
|
}
|
|
41
64
|
|
|
42
|
-
const truncatedSelector = () => {
|
|
43
|
-
const prefix = '.x-live-blog-post__body >'
|
|
44
|
-
const selectors = [
|
|
45
|
-
'p',
|
|
46
|
-
'blockquote',
|
|
47
|
-
'ul',
|
|
48
|
-
'.o-table-container',
|
|
49
|
-
'.n-content-recommended--single-story',
|
|
50
|
-
"[data-layout-name='card']",
|
|
51
|
-
'.n-content-big-number',
|
|
52
|
-
'hr',
|
|
53
|
-
'.n-content-tweet',
|
|
54
|
-
"[data-layout-name='timeline']",
|
|
55
|
-
]
|
|
56
|
-
return selectors.map((item) => `${prefix} ${item}`).join(',')
|
|
57
|
-
}
|
|
58
|
-
|
|
59
65
|
const LiveBlogPost = ({
|
|
60
66
|
id,
|
|
61
67
|
postId, // Remove once wordpress is no longer in use
|
|
@@ -82,18 +88,15 @@ const LiveBlogPost = ({
|
|
|
82
88
|
if (body && 'structured' in body) {
|
|
83
89
|
// Content comes from cp-content-pipeline-api
|
|
84
90
|
postBody = (
|
|
85
|
-
<
|
|
91
|
+
<TruncatedPost id={id}>
|
|
86
92
|
<RichText structuredContent={body.structured} />
|
|
87
|
-
</
|
|
93
|
+
</TruncatedPost>
|
|
88
94
|
)
|
|
89
95
|
} else {
|
|
96
|
+
const elements = parse(bodyHTML || content)
|
|
97
|
+
|
|
90
98
|
// Content comes from next-es or wordpress
|
|
91
|
-
postBody =
|
|
92
|
-
<div
|
|
93
|
-
className="x-live-blog-post__body n-content-body article--body"
|
|
94
|
-
dangerouslySetInnerHTML={{ __html: bodyHTML || content }}
|
|
95
|
-
/>
|
|
96
|
-
)
|
|
99
|
+
postBody = <TruncatedPost id={id}>{elements}</TruncatedPost>
|
|
97
100
|
}
|
|
98
101
|
|
|
99
102
|
const author = authors?.[0] ?? null
|
|
@@ -155,23 +158,7 @@ const LiveBlogPost = ({
|
|
|
155
158
|
<div className="x-live-blog-post__breaking-news">Breaking news</div>
|
|
156
159
|
)}
|
|
157
160
|
{title && <h2 className="x-live-blog-post__title">{title}</h2>}
|
|
158
|
-
{
|
|
159
|
-
<div
|
|
160
|
-
data-o-component="o-expander"
|
|
161
|
-
className="o-expander"
|
|
162
|
-
data-o-expander-shrink-to="1"
|
|
163
|
-
data-o-expander-item-selector={truncatedSelector()}
|
|
164
|
-
data-o-expander-collapsed-toggle-text={'Expand post'}
|
|
165
|
-
data-o-expander-expanded-toggle-text={'Collapse post'}
|
|
166
|
-
>
|
|
167
|
-
<div className="o-expander__content">{postBody}</div>
|
|
168
|
-
<a className="o-expander__toggle o-expander__text--custom">
|
|
169
|
-
<span className="o-expander__visually-hidden"> </span>
|
|
170
|
-
</a>
|
|
171
|
-
</div>
|
|
172
|
-
) : (
|
|
173
|
-
postBody
|
|
174
|
-
)}
|
|
161
|
+
{postBody}
|
|
175
162
|
<div className="x-live-blog-post__controls">
|
|
176
163
|
{showShareButtons && (
|
|
177
164
|
<ShareButtons
|
|
@@ -193,6 +193,7 @@ class BaseLiveBlogWrapper extends Component<LiveBlogWrapperTypes, stateTypes> {
|
|
|
193
193
|
className="x-live-blog-wrapper"
|
|
194
194
|
data-live-blog-wrapper-id={id}
|
|
195
195
|
ref={liveBlogWrapperElementRef}
|
|
196
|
+
data-component="live-blog-wrapper"
|
|
196
197
|
>
|
|
197
198
|
{postElements}
|
|
198
199
|
</div>
|
|
@@ -25,6 +25,7 @@ export default function Recommended({
|
|
|
25
25
|
className={classnames('n-content-recommended--single-story', {
|
|
26
26
|
'n-content-recommended--inset': !isInLiveBlog,
|
|
27
27
|
})}
|
|
28
|
+
data-component="recommended"
|
|
28
29
|
>
|
|
29
30
|
{!isInLiveBlog && (
|
|
30
31
|
<p className="n-content-recommended__title">{heading}</p>
|
|
@@ -8,7 +8,10 @@ export default function Video({
|
|
|
8
8
|
title,
|
|
9
9
|
}: VideoFragment & ContentTreeWorkarounds.Video) {
|
|
10
10
|
return (
|
|
11
|
-
<div
|
|
11
|
+
<div
|
|
12
|
+
className="n-content-video n-content-video--internal"
|
|
13
|
+
data-component="video"
|
|
14
|
+
>
|
|
12
15
|
<div
|
|
13
16
|
className="n-content-video__placeholder"
|
|
14
17
|
data-o-component="o-video"
|
|
@@ -13,7 +13,10 @@ export default function YoutubeVideo({
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
return (
|
|
16
|
-
<div
|
|
16
|
+
<div
|
|
17
|
+
className="n-content-video n-content-video--youtube"
|
|
18
|
+
data-component="youtube-video"
|
|
19
|
+
>
|
|
17
20
|
<div className="n-content-video__placeholder">
|
|
18
21
|
<iframe
|
|
19
22
|
className="n-content-video__embedded"
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import ClipServer from '../components/Clip'
|
|
2
|
+
import ClipClient from '../components/Clip/client'
|
|
1
3
|
import React, { useEffect, ReactNode } from 'react'
|
|
2
4
|
import oTracking from '@financial-times/o-tracking/main'
|
|
3
5
|
import './Clip.stories.scss'
|
|
4
|
-
import
|
|
5
|
-
import ClipServer, { ClipProps } from '../components/Clip/template/component'
|
|
6
|
+
import { ClipProps } from '../components/Clip/template/component'
|
|
6
7
|
|
|
7
8
|
// More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction
|
|
8
9
|
export default {
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { ExpanderServer, ExpanderProps } from '../components/Expander'
|
|
2
|
+
import { ExpanderClient } from '../components/Expander/client'
|
|
3
|
+
import React, { useEffect } from 'react'
|
|
4
|
+
import oTracking from '@financial-times/o-tracking/main'
|
|
5
|
+
import './Expander.stories.scss'
|
|
6
|
+
import ClipClient from '../components/Clip/client'
|
|
7
|
+
import './Clip.stories.scss'
|
|
8
|
+
import RichText from '../components/RichText'
|
|
9
|
+
import { ContentTree } from '@financial-times/content-tree'
|
|
10
|
+
import { ClipSet } from '@financial-times/cp-content-pipeline-schema/src/resolvers/content-tree/Workarounds'
|
|
11
|
+
|
|
12
|
+
const structuredContent: ContentTree.Body = {
|
|
13
|
+
type: 'body',
|
|
14
|
+
version: 1,
|
|
15
|
+
children: [
|
|
16
|
+
{
|
|
17
|
+
type: 'paragraph',
|
|
18
|
+
children: [
|
|
19
|
+
{
|
|
20
|
+
type: 'text',
|
|
21
|
+
value:
|
|
22
|
+
'Mike Johnson has survived an attempt to oust him as speaker of the House of Representatives by Marjorie Taylor Greene, a hardline Republican congresswoman from Georgia. ',
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
} as ContentTree.Paragraph,
|
|
26
|
+
{
|
|
27
|
+
type: 'paragraph',
|
|
28
|
+
children: [
|
|
29
|
+
{
|
|
30
|
+
type: 'text',
|
|
31
|
+
value:
|
|
32
|
+
'In a vote on Wednesday night, the lower chamber of Congress rejected Greene’s bid with overwhelming support from Democrats as well as Republicans. ',
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
} as ContentTree.Paragraph,
|
|
36
|
+
,
|
|
37
|
+
{
|
|
38
|
+
type: 'paragraph',
|
|
39
|
+
children: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text',
|
|
42
|
+
value:
|
|
43
|
+
'The vote all but ensures that Johnson will remain in his post until after the November election, and will put a lid on a debate over his political future that has lasted for weeks among Republicans in Congress. ',
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
} as ContentTree.Paragraph,
|
|
47
|
+
{
|
|
48
|
+
type: 'clip-set',
|
|
49
|
+
id: 'http://api.ft.com/content/23a00095-d9fc-4cac-ad7c-477e61e3c159',
|
|
50
|
+
autoplay: false,
|
|
51
|
+
loop: false,
|
|
52
|
+
muted: false,
|
|
53
|
+
dataLayout: 'in-line',
|
|
54
|
+
data: {
|
|
55
|
+
referenceIndex: 3,
|
|
56
|
+
},
|
|
57
|
+
} as ClipSet,
|
|
58
|
+
] as ContentTree.Body['children'],
|
|
59
|
+
}
|
|
60
|
+
const storyArgs: ExpanderProps = {
|
|
61
|
+
expandLabel: 'Open',
|
|
62
|
+
collapseLabel: 'Close',
|
|
63
|
+
onlyMobile: false,
|
|
64
|
+
id: '111232323-12123-2323',
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export default {
|
|
68
|
+
title: 'Expander',
|
|
69
|
+
component: ExpanderServer,
|
|
70
|
+
tags: ['autodocs'],
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const LiveBLogWrapper: React.FC<ExpanderProps & { classNames?: string }> = (
|
|
74
|
+
args
|
|
75
|
+
) => {
|
|
76
|
+
const { classNames } = args
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<div className={classNames}>
|
|
80
|
+
<article
|
|
81
|
+
id="site-content"
|
|
82
|
+
role="main"
|
|
83
|
+
className="article article-grid article-grid--no-full-width-graphics js enhanced"
|
|
84
|
+
data-article-type="no-full-width-graphics"
|
|
85
|
+
>
|
|
86
|
+
<div
|
|
87
|
+
className="article__content"
|
|
88
|
+
data-trackable="article-body"
|
|
89
|
+
data-component="article-body"
|
|
90
|
+
style={{ position: 'relative' }}
|
|
91
|
+
>
|
|
92
|
+
<div
|
|
93
|
+
className="article__content-body n-content-body js-article__content-body"
|
|
94
|
+
data-attribute="article-content-body"
|
|
95
|
+
>
|
|
96
|
+
<LiveBlogPostWrapper {...args} id="111"></LiveBlogPostWrapper>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
<div className="article__right "></div>
|
|
100
|
+
</article>
|
|
101
|
+
</div>
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const LiveBlogPostWrapper = (args: ExpanderProps) => {
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
oTracking.init({
|
|
108
|
+
context: { product: 'next' },
|
|
109
|
+
test: true,
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
const clips = ClipClient.init(null, {})
|
|
113
|
+
|
|
114
|
+
return () => {
|
|
115
|
+
clips.forEach((clip) => clip.unload())
|
|
116
|
+
}
|
|
117
|
+
}, [])
|
|
118
|
+
return (
|
|
119
|
+
<article id={args.id}>
|
|
120
|
+
<div className="n-content-body">
|
|
121
|
+
<div
|
|
122
|
+
data-trackable="truncated-post"
|
|
123
|
+
data-trackable-context-post="1234"
|
|
124
|
+
data-component="example-boundary"
|
|
125
|
+
>
|
|
126
|
+
<ExpanderServer {...args} id={`${args.id}_expander`}>
|
|
127
|
+
<RichText structuredContent={{ tree: structuredContent }} />
|
|
128
|
+
</ExpanderServer>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
</article>
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export const OnlyServer = (args: ExpanderProps) => {
|
|
136
|
+
return <LiveBLogWrapper {...args} />
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
OnlyServer.args = { ...storyArgs }
|
|
140
|
+
|
|
141
|
+
export const WithClient = (args: ExpanderProps) => {
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
const clips = ClipClient.init(null, {})
|
|
144
|
+
const expanders = ExpanderClient.init()
|
|
145
|
+
return () => {
|
|
146
|
+
clips.forEach((clip) => clip.unload())
|
|
147
|
+
expanders.forEach((expander) => expander?.destroy())
|
|
148
|
+
}
|
|
149
|
+
}, [])
|
|
150
|
+
return <LiveBLogWrapper {...args} />
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
WithClient.args = { ...storyArgs }
|
|
154
|
+
|
|
155
|
+
export const OnlyMobileWithClient = WithClient
|
|
156
|
+
OnlyMobileWithClient.args = { ...storyArgs, onlyMobile: true }
|
|
157
|
+
|
|
158
|
+
export const OnlyMobileServer = OnlyServer
|
|
159
|
+
OnlyMobileServer.args = { ...storyArgs, onlyMobile: true }
|