@financial-times/cp-content-pipeline-ui 6.7.0 → 6.8.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.
Files changed (79) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/lib/components/Clip/client/progressBar.js +2 -10
  3. package/lib/components/Clip/client/progressBar.js.map +1 -1
  4. package/lib/components/Clip/components/Container.js +2 -2
  5. package/lib/components/Clip/components/Container.js.map +1 -1
  6. package/lib/components/Clip/template/index.js +1 -0
  7. package/lib/components/Clip/template/index.js.map +1 -1
  8. package/lib/components/ImageSet/index.js +1 -1
  9. package/lib/components/ImageSet/index.js.map +1 -1
  10. package/lib/components/LiveBlogPost/index.js +21 -9
  11. package/lib/components/LiveBlogPost/index.js.map +1 -1
  12. package/lib/components/LiveBlogWrapper/index.js +1 -1
  13. package/lib/components/LiveBlogWrapper/index.js.map +1 -1
  14. package/lib/components/PartnerContentHeader/index.d.ts +5 -0
  15. package/lib/components/PartnerContentHeader/index.js +14 -0
  16. package/lib/components/PartnerContentHeader/index.js.map +1 -0
  17. package/lib/components/Recommended/index.js +1 -1
  18. package/lib/components/Recommended/index.js.map +1 -1
  19. package/lib/components/RichText/index.d.ts +1 -1
  20. package/lib/components/Table/index.js +1 -1
  21. package/lib/components/Table/index.js.map +1 -1
  22. package/lib/components/Topper/index.js +51 -24
  23. package/lib/components/Topper/index.js.map +1 -1
  24. package/lib/components/Video/index.js +1 -1
  25. package/lib/components/Video/index.js.map +1 -1
  26. package/lib/components/YoutubeVideo/index.js +1 -1
  27. package/lib/components/YoutubeVideo/index.js.map +1 -1
  28. package/lib/stories/Clip.stories.d.ts +1 -2
  29. package/lib/stories/Clip.stories.js +5 -5
  30. package/lib/stories/Clip.stories.js.map +1 -1
  31. package/package.json +5 -2
  32. package/src/components/Clip/client/main.scss +2 -2
  33. package/src/components/Clip/client/progressBar.scss +8 -14
  34. package/src/components/Clip/client/progressBar.ts +2 -8
  35. package/src/components/Clip/components/Container.tsx +3 -10
  36. package/src/components/Clip/template/index.ts +1 -0
  37. package/src/components/Clip/test/__snapshots__/snapshot.spec.tsx.snap +8 -8
  38. package/src/components/ImageSet/index.tsx +0 -1
  39. package/src/components/LiveBlogPost/index.tsx +42 -29
  40. package/src/components/LiveBlogWrapper/index.tsx +0 -1
  41. package/src/components/PartnerContentHeader/index.tsx +15 -0
  42. package/src/components/Recommended/index.tsx +0 -1
  43. package/src/components/Table/index.tsx +0 -1
  44. package/src/components/Topper/index.tsx +97 -91
  45. package/src/components/Video/index.tsx +1 -4
  46. package/src/components/YoutubeVideo/index.tsx +1 -4
  47. package/src/stories/Clip.stories.tsx +2 -3
  48. package/tsconfig.tsbuildinfo +1 -1
  49. package/lib/components/Expander/client/index.d.ts +0 -49
  50. package/lib/components/Expander/client/index.js +0 -124
  51. package/lib/components/Expander/client/index.js.map +0 -1
  52. package/lib/components/Expander/index.d.ts +0 -15
  53. package/lib/components/Expander/index.js +0 -27
  54. package/lib/components/Expander/index.js.map +0 -1
  55. package/lib/components/Expander/test/client/index.spec.d.ts +0 -1
  56. package/lib/components/Expander/test/client/index.spec.js +0 -103
  57. package/lib/components/Expander/test/client/index.spec.js.map +0 -1
  58. package/lib/components/Expander/test/index.spec.d.ts +0 -1
  59. package/lib/components/Expander/test/index.spec.js +0 -57
  60. package/lib/components/Expander/test/index.spec.js.map +0 -1
  61. package/lib/components/Expander/test/snapshot.spec.d.ts +0 -1
  62. package/lib/components/Expander/test/snapshot.spec.js +0 -63
  63. package/lib/components/Expander/test/snapshot.spec.js.map +0 -1
  64. package/lib/components/LiveBlogPost/client/index.d.ts +0 -5
  65. package/lib/components/LiveBlogPost/client/index.js +0 -12
  66. package/lib/components/LiveBlogPost/client/index.js.map +0 -1
  67. package/lib/stories/Expander.stories.d.ts +0 -54
  68. package/lib/stories/Expander.stories.js +0 -142
  69. package/lib/stories/Expander.stories.js.map +0 -1
  70. package/src/components/Expander/client/index.ts +0 -197
  71. package/src/components/Expander/client/main.scss +0 -162
  72. package/src/components/Expander/index.tsx +0 -74
  73. package/src/components/Expander/test/__snapshots__/snapshot.spec.tsx.snap +0 -225
  74. package/src/components/Expander/test/client/index.spec.tsx +0 -129
  75. package/src/components/Expander/test/index.spec.tsx +0 -77
  76. package/src/components/Expander/test/snapshot.spec.tsx +0 -73
  77. package/src/components/LiveBlogPost/client/index.ts +0 -9
  78. package/src/stories/Expander.stories.scss +0 -3
  79. package/src/stories/Expander.stories.tsx +0 -159
@@ -1,4 +1,4 @@
1
- import React, { ReactElement } from 'react'
1
+ import React, { Fragment, ReactElement } from 'react'
2
2
  import Wrapper from './Wrapper'
3
3
  import Tags from './Tags'
4
4
  import Headline from './Headline'
@@ -12,6 +12,7 @@ import Flourish from '../Flourish'
12
12
  import { Layout, LayoutContainer } from '../Layout'
13
13
  import classnames from 'classnames'
14
14
  import type { ArticleQuery } from '@financial-times/cp-content-pipeline-client'
15
+ import PartnerContentHeader from '../PartnerContentHeader'
15
16
 
16
17
  export type TopperProps = {
17
18
  content: ArticleQuery['content']
@@ -42,6 +43,7 @@ export default function Topper({
42
43
  const isFlourish =
43
44
  topper.__typename === 'TopperWithFlourish' && !!topper.leadFlourish
44
45
  const isAudio = content.__typename === 'Audio'
46
+ const isPartnerContent = topper.__typename === 'PartnerContentTopper'
45
47
  const hasLayout = 'layout' in topper && topper.layout
46
48
  const hasDesign = 'design' in topper && topper.design
47
49
  const hasHeadshot = 'headshot' in topper && topper.headshot
@@ -86,104 +88,108 @@ export default function Topper({
86
88
  }
87
89
 
88
90
  return (
89
- <div
90
- className={classnames({
91
- 'article-topper': true,
92
- 'pinned-post__topper--no-image': isLiveBlog,
93
- })}
94
- >
95
- <Wrapper
96
- backgroundColor={topper.backgroundColour ?? undefined}
97
- isBasic={isBasic}
98
- modifiers={modifiers}
91
+ <Fragment>
92
+ {/** TODO: make the name dynamic when upstream is ready */}
93
+ {isPartnerContent && <PartnerContentHeader name="Demo Partner" />}
94
+ <div
95
+ className={classnames({
96
+ 'article-topper': true,
97
+ 'pinned-post__topper--no-image': isLiveBlog,
98
+ })}
99
99
  >
100
- <div
101
- className={classnames('o-topper__content', {
102
- 'o-topper__content--text-shadow': topper.textShadow,
103
- 'o-topper__content--background-box': topper.backgroundBox,
104
- })}
105
- id="o-topper"
100
+ <Wrapper
101
+ backgroundColor={topper.backgroundColour ?? undefined}
102
+ isBasic={isBasic}
103
+ modifiers={modifiers}
106
104
  >
107
- {isLiveBlog ? (
108
- <div className="o-topper__tags">
109
- <LiveBlogIndicator
110
- realtime={content.realtime ?? undefined}
111
- lastUpdatedDateTime={getMostRecentPostPublishedDate()}
105
+ <div
106
+ className={classnames('o-topper__content', {
107
+ 'o-topper__content--text-shadow': topper.textShadow,
108
+ 'o-topper__content--background-box': topper.backgroundBox,
109
+ })}
110
+ id="o-topper"
111
+ >
112
+ {isLiveBlog ? (
113
+ <div className="o-topper__tags">
114
+ <LiveBlogIndicator
115
+ realtime={content.realtime ?? undefined}
116
+ lastUpdatedDateTime={getMostRecentPostPublishedDate()}
117
+ />
118
+ </div>
119
+ ) : (
120
+ <Tags
121
+ __typename={topper.__typename}
122
+ isPackage={isPackage}
123
+ displayConcept={topper.displayConcept ?? undefined}
124
+ brandConcept={
125
+ ('brandConcept' in topper && topper.brandConcept) || undefined
126
+ }
127
+ genreConcept={
128
+ ('genreConcept' in topper && topper.genreConcept) || undefined
129
+ }
130
+ headshot={hasHeadshot || undefined}
131
+ hasColumnist={hasColumnist}
132
+ followButtonVariant={topper.followButtonVariant}
133
+ FollowButtonSlot={followButtonSlot}
112
134
  />
113
- </div>
114
- ) : (
115
- <Tags
116
- __typename={topper.__typename}
117
- isPackage={isPackage}
118
- displayConcept={topper.displayConcept ?? undefined}
119
- brandConcept={
120
- ('brandConcept' in topper && topper.brandConcept) || undefined
135
+ )}
136
+ <Headline
137
+ headline={topper.headline}
138
+ showPremiumLabel={
139
+ showPremiumLabel && content.accessLevel === 'premium'
121
140
  }
122
- genreConcept={
123
- ('genreConcept' in topper && topper.genreConcept) || undefined
141
+ isLargeHeadline={
142
+ ('isLargeHeadline' in topper && topper.isLargeHeadline) ??
143
+ undefined
124
144
  }
125
- headshot={hasHeadshot || undefined}
126
- hasColumnist={hasColumnist}
127
- followButtonVariant={topper.followButtonVariant}
128
- FollowButtonSlot={followButtonSlot}
129
145
  />
130
- )}
131
- <Headline
132
- headline={topper.headline}
133
- showPremiumLabel={
134
- showPremiumLabel && content.accessLevel === 'premium'
135
- }
136
- isLargeHeadline={
137
- ('isLargeHeadline' in topper && topper.isLargeHeadline) ??
138
- undefined
139
- }
140
- />
141
- {isLiveBlog && isFlourish ? (
142
- <Layout layoutWidth="full-grid">
143
- <LayoutContainer>
144
- <Flourish
145
- id={topper.leadFlourish.id || ''}
146
- flourishType={topper.leadFlourish.type || ''}
147
- description={topper.leadFlourish.description || ''}
148
- fallbackImage={topper.leadFlourish.fallbackImage || ''}
149
- iFrame={true}
150
- inArticleBody={false}
146
+ {isLiveBlog && isFlourish ? (
147
+ <Layout layoutWidth="full-grid">
148
+ <LayoutContainer>
149
+ <Flourish
150
+ id={topper.leadFlourish.id || ''}
151
+ flourishType={topper.leadFlourish.type || ''}
152
+ description={topper.leadFlourish.description || ''}
153
+ fallbackImage={topper.leadFlourish.fallbackImage || ''}
154
+ iFrame={true}
155
+ inArticleBody={false}
156
+ />
157
+ </LayoutContainer>
158
+ </Layout>
159
+ ) : (
160
+ ''
161
+ )}
162
+ {topper.intro && (
163
+ <Intro
164
+ structured={topper.intro.structured}
165
+ source={topper.intro.source}
166
+ />
167
+ )}
168
+ {hasHeadshot && !isAudio && isOpinion && topper.columnist && (
169
+ <div className="o-topper__headshot">
170
+ <Headshot
171
+ headshot={topper.headshot}
172
+ prefLabel={topper.columnist.prefLabel}
173
+ className={'o-topper__headshot-image'}
174
+ altText={headshotAltText}
151
175
  />
152
- </LayoutContainer>
153
- </Layout>
154
- ) : (
155
- ''
156
- )}
157
- {topper.intro && (
158
- <Intro
159
- structured={topper.intro.structured}
160
- source={topper.intro.source}
161
- />
162
- )}
163
- {hasHeadshot && !isAudio && isOpinion && topper.columnist && (
164
- <div className="o-topper__headshot">
165
- <Headshot
166
- headshot={topper.headshot}
167
- prefLabel={topper.columnist.prefLabel}
168
- className={'o-topper__headshot-image'}
169
- altText={headshotAltText}
176
+ </div>
177
+ )}
178
+ {isOpinion && topper.columnist && (
179
+ <Columnist
180
+ authorConcept={topper.columnist}
181
+ followButtonVariant={topper.followButtonVariant}
182
+ followButtonSlot={followButtonSlot}
170
183
  />
171
- </div>
172
- )}
173
- {isOpinion && topper.columnist && (
174
- <Columnist
175
- authorConcept={topper.columnist}
176
- followButtonVariant={topper.followButtonVariant}
177
- followButtonSlot={followButtonSlot}
178
- />
184
+ )}
185
+ </div>
186
+ {readNextSlot && (
187
+ <div className="o-topper__read-next">{readNextSlot()}</div>
179
188
  )}
180
- </div>
181
- {readNextSlot && (
182
- <div className="o-topper__read-next">{readNextSlot()}</div>
183
- )}
184
- <div className="o-topper__background" />
185
- {'images' in topper && <Picture topper={topper} />}
186
- </Wrapper>
187
- </div>
189
+ <div className="o-topper__background" />
190
+ {'images' in topper && <Picture topper={topper} />}
191
+ </Wrapper>
192
+ </div>
193
+ </Fragment>
188
194
  )
189
195
  }
@@ -8,10 +8,7 @@ export default function Video({
8
8
  title,
9
9
  }: VideoFragment & ContentTreeWorkarounds.Video) {
10
10
  return (
11
- <div
12
- className="n-content-video n-content-video--internal"
13
- data-component="video"
14
- >
11
+ <div className="n-content-video n-content-video--internal">
15
12
  <div
16
13
  className="n-content-video__placeholder"
17
14
  data-o-component="o-video"
@@ -13,10 +13,7 @@ export default function YoutubeVideo({
13
13
  }
14
14
 
15
15
  return (
16
- <div
17
- className="n-content-video n-content-video--youtube"
18
- data-component="youtube-video"
19
- >
16
+ <div className="n-content-video n-content-video--youtube">
20
17
  <div className="n-content-video__placeholder">
21
18
  <iframe
22
19
  className="n-content-video__embedded"
@@ -1,9 +1,8 @@
1
- import ClipServer from '../components/Clip'
2
- import ClipClient from '../components/Clip/client'
3
1
  import React, { useEffect, ReactNode } from 'react'
4
2
  import oTracking from '@financial-times/o-tracking/main'
5
3
  import './Clip.stories.scss'
6
- import { ClipProps } from '../components/Clip/template/component'
4
+ import ClipClient from '../components/Clip/client'
5
+ import ClipServer, { ClipProps } from '../components/Clip/template/component'
7
6
 
8
7
  // More on how to set up stories at: https://storybook.js.org/docs/react/writing-stories/introduction
9
8
  export default {