@financial-times/cp-content-pipeline-ui 7.11.0 → 8.0.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 (97) hide show
  1. package/.storybook/preview-body.html +1 -0
  2. package/.toolkitrc.yml +1 -7
  3. package/CHANGELOG.md +51 -0
  4. package/lib/components/ArticleInfo/index.d.ts +3 -3
  5. package/lib/components/ArticleInfo/index.js +7 -7
  6. package/lib/components/ArticleInfo/index.js.map +1 -1
  7. package/lib/components/BackToTopButton/client/index.js +1 -1
  8. package/lib/components/BackToTopButton/client/index.js.map +1 -1
  9. package/lib/components/Byline/index.js +2 -2
  10. package/lib/components/Byline/index.js.map +1 -1
  11. package/lib/components/LiveBlogPost/ShareLinkButton.js +2 -2
  12. package/lib/components/LiveBlogPost/ShareLinkButton.js.map +1 -1
  13. package/lib/components/LiveBlogPost/Timestamp.js +2 -2
  14. package/lib/components/LiveBlogPost/Timestamp.js.map +1 -1
  15. package/lib/components/LiveBlogPost/index.d.ts +0 -7
  16. package/lib/components/LiveBlogPost/index.js +6 -9
  17. package/lib/components/LiveBlogPost/index.js.map +1 -1
  18. package/lib/components/LiveBlogWrapper/test/index.spec.js +0 -2
  19. package/lib/components/LiveBlogWrapper/test/index.spec.js.map +1 -1
  20. package/lib/components/RichText/BasicComponents.js +4 -4
  21. package/lib/components/RichText/BasicComponents.js.map +1 -1
  22. package/lib/components/Topper/LiveBlogIndicator.js +1 -1
  23. package/lib/components/Topper/LiveBlogIndicator.js.map +1 -1
  24. package/lib/components/body-components/ArticleBody/index.js +1 -1
  25. package/lib/components/body-components/ArticleBody/index.js.map +1 -1
  26. package/lib/components/body-components/ContentPackageBody/index.js +2 -2
  27. package/lib/components/body-components/ContentPackageBody/index.js.map +1 -1
  28. package/lib/components/body-components/PodcastBody/index.js +2 -2
  29. package/lib/components/body-components/PodcastBody/index.js.map +1 -1
  30. package/lib/components/content-tree/BigNumber/index.js +3 -3
  31. package/lib/components/content-tree/BigNumber/index.js.map +1 -1
  32. package/lib/components/content-tree/Clip/client/index.js +4 -2
  33. package/lib/components/content-tree/Clip/client/index.js.map +1 -1
  34. package/lib/components/content-tree/Clip/components/Caption.js +1 -1
  35. package/lib/components/content-tree/Clip/components/Caption.js.map +1 -1
  36. package/lib/components/content-tree/Clip/components/VideoDescription.js +7 -8
  37. package/lib/components/content-tree/Clip/components/VideoDescription.js.map +1 -1
  38. package/lib/components/content-tree/Clip/components/VideoInfoBox.js +1 -1
  39. package/lib/components/content-tree/Clip/components/VideoInfoBox.js.map +1 -1
  40. package/lib/components/content-tree/Heading/index.js +3 -3
  41. package/lib/components/content-tree/Heading/index.js.map +1 -1
  42. package/lib/components/content-tree/ImageSet/index.js +1 -1
  43. package/lib/components/content-tree/ImageSet/index.js.map +1 -1
  44. package/lib/components/content-tree/Pullquote/index.js +3 -4
  45. package/lib/components/content-tree/Pullquote/index.js.map +1 -1
  46. package/lib/components/content-tree/Recommended/index.js +1 -1
  47. package/lib/components/content-tree/Recommended/index.js.map +1 -1
  48. package/lib/components/content-tree/Table/TableCell.js +3 -1
  49. package/lib/components/content-tree/Table/TableCell.js.map +1 -1
  50. package/lib/stories/BackToTop.stories.js +1 -1
  51. package/lib/stories/BackToTop.stories.js.map +1 -1
  52. package/lib/stories/Clip.stories.js +2 -2
  53. package/lib/stories/Clip.stories.js.map +1 -1
  54. package/lib/stories/Expander.stories.js +2 -2
  55. package/lib/stories/Expander.stories.js.map +1 -1
  56. package/lib/stories/LiveBlogPost.stories.js +0 -1
  57. package/lib/stories/LiveBlogPost.stories.js.map +1 -1
  58. package/package.json +12 -12
  59. package/src/components/ArticleInfo/index.tsx +13 -13
  60. package/src/components/BackToTopButton/client/index.tsx +2 -1
  61. package/src/components/BackToTopButton/client/main.scss +5 -23
  62. package/src/components/Body/__snapshots__/index.test.tsx.snap +10 -10
  63. package/src/components/Byline/index.tsx +2 -2
  64. package/src/components/Expander/client/main.scss +18 -11
  65. package/src/components/LiveBlogPost/ShareLinkButton.tsx +5 -2
  66. package/src/components/LiveBlogPost/Timestamp.tsx +2 -2
  67. package/src/components/LiveBlogPost/index.tsx +10 -20
  68. package/src/components/LiveBlogWrapper/test/index.spec.tsx +0 -2
  69. package/src/components/RichText/BasicComponents.tsx +14 -4
  70. package/src/components/Topper/LiveBlogIndicator.tsx +1 -1
  71. package/src/components/Topper/__snapshots__/LiveBlogIndicator.spec.tsx.snap +2 -2
  72. package/src/components/body-components/ArticleBody/index.tsx +1 -1
  73. package/src/components/body-components/ContentPackageBody/index.tsx +2 -2
  74. package/src/components/body-components/PodcastBody/index.tsx +2 -2
  75. package/src/components/content-tree/BigNumber/index.tsx +5 -3
  76. package/src/components/content-tree/Clip/client/index.ts +4 -2
  77. package/src/components/content-tree/Clip/client/main.scss +94 -47
  78. package/src/components/content-tree/Clip/client/progressBar.scss +6 -5
  79. package/src/components/content-tree/Clip/components/Caption.tsx +4 -1
  80. package/src/components/content-tree/Clip/components/VideoDescription.tsx +21 -19
  81. package/src/components/content-tree/Clip/components/VideoInfoBox.tsx +3 -1
  82. package/src/components/content-tree/Clip/components/_caption.scss +2 -3
  83. package/src/components/content-tree/Clip/components/_clip-tag.scss +2 -1
  84. package/src/components/content-tree/Clip/components/_video-description.scss +42 -39
  85. package/src/components/content-tree/Clip/components/_video-info-box.scss +30 -35
  86. package/src/components/content-tree/Clip/test/__snapshots__/snapshot.spec.tsx.snap +62 -23
  87. package/src/components/content-tree/Heading/index.tsx +15 -3
  88. package/src/components/content-tree/ImageSet/index.tsx +1 -1
  89. package/src/components/content-tree/Pullquote/index.tsx +12 -8
  90. package/src/components/content-tree/Recommended/index.tsx +3 -1
  91. package/src/components/content-tree/Table/TableCell.tsx +3 -1
  92. package/src/stories/BackToTop.stories.tsx +1 -1
  93. package/src/stories/Clip.stories.tsx +2 -2
  94. package/src/stories/Expander.stories.tsx +2 -2
  95. package/src/stories/LiveBlogPost.stories.tsx +0 -1
  96. package/src/stories/article-page.scss +9 -32
  97. package/tsconfig.tsbuildinfo +1 -1
@@ -1,6 +1,4 @@
1
- @import "@financial-times/o-icons/main";
2
- @import "@financial-times/o-colors/main";
3
- @import "@financial-times/o-typography/main";
1
+ @import '@financial-times/o3-foundation/css/core.css';
4
2
  @import "@financial-times/o-grid/main";
5
3
  @import '@financial-times/o-loading/main';
6
4
  @import "./progressBar.scss";
@@ -57,10 +55,10 @@
57
55
  position: absolute;
58
56
  justify-content: space-between;
59
57
  align-items: flex-end;
60
- padding: oSpacingByName('s1') oSpacingByName('s2') oSpacingByName('s6') oSpacingByName('s2');
58
+ padding: var(--o3-spacing-5xs) var(--o3-spacing-4xs) var(--o3-spacing-s) var(--o3-spacing-4xs);
61
59
  box-sizing: border-box;
62
60
  @include oGridRespondTo($from: L) {
63
- padding: oSpacingByName('s1') oSpacingByName('s6') oSpacingByName('s6') oSpacingByName('s6')
61
+ padding: var(--o3-spacing-5xs) var(--o3-spacing-s) var(--o3-spacing-s) var(--o3-spacing-s)
64
62
  }
65
63
  background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.75) 100%);
66
64
  &--fade-out:not(:has(button:focus)) {
@@ -75,21 +73,37 @@
75
73
  top: 50%;
76
74
  left: 50%;
77
75
  transform: translate(-50%,-50%);
78
- color: oColorsByName('white');
76
+ color: var(--o3-color-palette-white);
79
77
  font-family: MetricWeb;
80
78
  line-height: 1;
81
79
  }
82
80
 
83
- @mixin cp-clip__control-icon {
81
+ @mixin cp-clip__control-circle() {
84
82
  background-color: rgba(0, 0, 0, 0.75);
85
83
  border: 2px solid transparent;
86
84
  border-radius: 50%;
87
85
  margin: auto;
88
- display: block;
86
+ display: flex;
87
+ justify-content: center;
88
+ align-items: center;
89
89
  width: 72px;
90
90
  height: 72px;
91
- background-size: 44px;
92
- margin-bottom: oSpacingByName('s2');
91
+ margin-bottom: var(--o3-spacing-4xs);
92
+ }
93
+
94
+ @mixin cp-clip__control-icon($icon){
95
+ &:hover, &:focus {
96
+ border-color: var(--o3-color-palette-white);
97
+ }
98
+
99
+ &::after {
100
+ content: "";
101
+ mask-image: var($icon);
102
+ height: 44px;
103
+ width: 44px;
104
+
105
+ background-color: var(--o3-color-palette-white);
106
+ }
93
107
  }
94
108
 
95
109
 
@@ -98,33 +112,20 @@
98
112
  }
99
113
 
100
114
  .cp-clip__play-icon {
101
- // The icon will be cached in the FT-App
102
- // See: https://github.com/Financial-Times/ft-app/blob/main/tools/webpack/client/webpack.config.common.js#L218
103
- @include oIconsContent($icon-name: 'play', $size: 20%, $color: oColorsByName('white'));
104
- @include cp-clip__control-icon;
105
- &:hover, &:focus {
106
- border-color: white;
107
- }
108
- background-position: 55%;
115
+ @include cp-clip__control-circle();
116
+ @include cp-clip__control-icon(--o3-icon-play);
109
117
  }
110
118
 
111
119
  .cp-clip__loading-text,
112
120
  .cp-clip__play-text {
113
- @include oTypographySans(-1, $weight: 'semibold');
114
- padding: 0 oSpacingByName('s1');
121
+ padding: 0 var(--o3-spacing-5xs);
115
122
  background-color: rgba(0, 0, 0, 0.75);
116
123
  display: block;
117
124
  }
118
125
 
119
126
  .cp-clip__replay-icon {
120
- // The icon will be cached in the FT-App
121
- // See: https://github.com/Financial-Times/ft-app/blob/main/tools/webpack/client/webpack.config.common.js#L218
122
- @include oIconsContent($icon-name: 'refresh', $size: 20%, $color: oColorsByName('white'));
123
- @include cp-clip__control-icon;
124
- &:hover, &:focus {
125
- border-color: white;
126
- }
127
- background-position: 50%;
127
+ @include cp-clip__control-circle();
128
+ @include cp-clip__control-icon(--o3-icon-refresh);
128
129
  }
129
130
 
130
131
  // fade out the bottom controls only when they are not focussed
@@ -152,15 +153,23 @@
152
153
  }
153
154
 
154
155
  .cp-clip__playpause-icon-pause {
155
- // The icon will be cached in the FT-App
156
- // See: https://github.com/Financial-Times/ft-app/blob/main/tools/webpack/client/webpack.config.common.js#L218
157
- @include oIconsContent($icon-name: 'pause', $size: 32px, $color: oColorsByName('white'));
156
+ display: inline-block;
157
+ width: 32px;
158
+ height: 32px;
159
+ background-color: var(--o3-color-palette-white);
160
+ mask-image: var(--o3-icon-pause);
161
+ mask-repeat: no-repeat;
162
+ mask-size: contain;
158
163
  }
159
164
 
160
165
  .cp-clip__playpause-icon-play {
161
- // The icon will be cached in the FT-App
162
- // See: https://github.com/Financial-Times/ft-app/blob/main/tools/webpack/client/webpack.config.common.js#L218
163
- @include oIconsContent($icon-name: 'play', $size: 32px, $color: oColorsByName('white'));
166
+ display: inline-block;
167
+ width: 32px;
168
+ height: 32px;
169
+ background-color: var(--o3-color-palette-white);
170
+ mask-image: var(--o3-icon-play);
171
+ mask-repeat: no-repeat;
172
+ mask-size: contain;
164
173
  }
165
174
 
166
175
  .cp-clip__playpause-icon {
@@ -169,16 +178,16 @@
169
178
 
170
179
  .cp-clip__playpause-icon-autoplay {
171
180
  border-radius: 50%;
172
- border: 2px solid oColorsByName('ft-grey');
181
+ border: 2px solid var(--o3-color-palette-ft-grey);
173
182
  padding:0px;
174
- margin-left:oSpacingByName('s2');
183
+ margin-left:var(--o3-spacing-4xs);
175
184
  }
176
185
 
177
186
  .cp-clip__playpause-icon-autoplay-progress {
178
187
  width: 100%;
179
188
  height: 100%;
180
189
  border-radius: 50%;
181
- border: solid 2px oColorsByName('white');
190
+ border: solid 2px var(--o3-color-palette-white);
182
191
  display: inline-block;
183
192
  margin: -2px;
184
193
  box-sizing: content-box;
@@ -188,11 +197,24 @@
188
197
  flex: 0 32px
189
198
  }
190
199
  .cp-clip__mute-icon {
191
- @include oIconsContent($icon-name: 'audio', $size: 32px, $color: oColorsByName('white'));
200
+ display: inline-block;
201
+ width: 32px;
202
+ height: 32px;
203
+ background-color: var(--o3-color-palette-white);
204
+ mask-image: var(--o3-icon-volume);
205
+ mask-repeat: no-repeat;
206
+ mask-size: contain;
207
+
192
208
  border: none;
193
209
  }
194
210
  .cp-clip__mute-icon[data-mute="true"] {
195
- @include oIconsContent($icon-name: 'mute', $size: 32px, $color: oColorsByName('white'));
211
+ display: inline-block;
212
+ width: 32px;
213
+ height: 32px;
214
+ background-color: var(--o3-color-palette-white);
215
+ mask-image: var(--o3-icon-volume-mute);
216
+ mask-repeat: no-repeat;
217
+ mask-size: contain;
196
218
  }
197
219
  .cp-clip__video-overlay [data-test-id="cp-clip__mute-icon"] {
198
220
  display: none;
@@ -200,24 +222,52 @@
200
222
 
201
223
  .cp-clip__no-audio {
202
224
  position: absolute;
203
- @include oIconsContent($icon-name: 'mute', $size: 32px, $color: oColorsMix('black', 'white', 40));
225
+
226
+ display: inline-block;
227
+ width: 32px;
228
+ height: 32px;
229
+ background-color: #999999 /* mix: black, white, 40*/;
230
+ mask-image: var(--o3-icon-volume-mute);
231
+ mask-repeat: no-repeat;
232
+ mask-size: contain;
233
+
204
234
  right: 20px;
205
235
  border: none;
206
236
  }
207
237
 
208
238
  .cp-clip__closed-caption {
209
239
  position: absolute;
210
- @include oIconsContent($icon-name: 'closed-captions-off', $size: 32px, $color: oColorsByName('white'));
240
+
241
+ display: inline-block;
242
+ width: 32px;
243
+ height: 32px;
244
+ background-color: var(--o3-color-palette-white);
245
+ mask-image: var(--o3-icon-closed-captions-off);
246
+ mask-repeat: no-repeat;
247
+ mask-size: contain;
248
+
211
249
  right: 50px;
212
250
  border: none;
213
251
  }
214
252
 
215
253
  .cp-clip__closed-caption:hover {
216
- @include oIconsContent($icon-name: 'closed-captions-on', $size: 32px, $color: oColorsByName('white'));
254
+ display: inline-block;
255
+ width: 32px;
256
+ height: 32px;
257
+ background-color: var(--o3-color-palette-white);
258
+ mask-image: var(--o3-icon-closed-captions-on);
259
+ mask-repeat: no-repeat;
260
+ mask-size: contain;
217
261
  }
218
262
 
219
263
  .cp-clip__closed-caption[data-display-closed-captions] {
220
- @include oIconsContent($icon-name: 'closed-captions-on', $size: 32px, $color: oColorsByName('white'));
264
+ display: inline-block;
265
+ width: 32px;
266
+ height: 32px;
267
+ background-color: var(--o3-color-palette-white);
268
+ mask-image: var(--o3-icon-closed-captions-on);
269
+ mask-repeat: no-repeat;
270
+ mask-size: contain;
221
271
  }
222
272
 
223
273
  @keyframes fade-out {
@@ -231,10 +281,7 @@
231
281
  }
232
282
 
233
283
  .cp-clip__loading-icon-bg {
234
- @include cp-clip__control-icon;
235
- display: flex;
236
- align-items: center;
237
- justify-content: center;
284
+ @include cp-clip__control-circle();
238
285
  }
239
286
 
240
287
  .o-loading {
@@ -1,3 +1,4 @@
1
+ @import '@financial-times/o3-foundation/css/core.css';
1
2
  .cp-clip__video-progress-bar {
2
3
  pointer-events: none;
3
4
  position: absolute;
@@ -17,7 +18,7 @@
17
18
  width: 100%;
18
19
  height: 3px;
19
20
  transition: margin 0.1s linear, height 0.1s linear;
20
- background-color: oColorsByName('ft-grey');
21
+ background-color: var(--o3-color-palette-ft-grey);
21
22
 
22
23
  @include oGridRespondTo(L) {
23
24
  height: 4px;
@@ -42,16 +43,16 @@
42
43
  display: block;
43
44
  position: absolute;
44
45
  transform: translate($progress-time-left-offset, calc($progress-time-height-offset - 2px));
45
- color: oColorsByName('white');
46
- font-size: 14px;
47
- font-family: MetricWeb;
46
+ color: var(--o3-color-palette-white);
47
+ font-size: var(--o3-font-size-metric2-negative-1);
48
+ font-family: var(--o3-font-family-metric);
48
49
  @include oGridRespondTo(L) {
49
50
  transform: translate($progress-time-left-offset, $progress-time-height-offset);
50
51
  }
51
52
  }
52
53
  }
53
54
  div {
54
- background-color: oColorsByName('teal-70');
55
+ background-color: var(--o3-color-palette-teal-70);
55
56
  height: 100%;
56
57
  }
57
58
  .cp-clip__progress-ended {
@@ -11,7 +11,10 @@ export const Caption: React.FC<CaptionProps> = ({ caption, credits }) => {
11
11
  const separator = caption && credits ? ' ' : null
12
12
 
13
13
  return (
14
- <div data-cp-clip-caption className="cp-clip__caption">
14
+ <div
15
+ data-cp-clip-caption
16
+ className="cp-clip__caption o3-editorial-typography-caption"
17
+ >
15
18
  {caption}
16
19
  {separator}
17
20
  {credits && <Credit credits={credits} />}
@@ -27,7 +27,7 @@ export const VideoDescription: React.FC<VideoDescriptionProps> = ({
27
27
  data-o-expander-expanded-toggle-text="<span class='o-expander__visually-hidden'>Hide video description</span>"
28
28
  >
29
29
  <button data-trackable="toggle-open-close" className="o-expander__toggle">
30
- <span className="o-expander__visually-hidden">
30
+ <span className="o-expander__visually-hidden o3-type-detail">
31
31
  Show video description
32
32
  </span>
33
33
  </button>
@@ -35,28 +35,28 @@ export const VideoDescription: React.FC<VideoDescriptionProps> = ({
35
35
  {description && accessibility?.transcript && (
36
36
  <div className="o-expander__content">
37
37
  <div className="video-description__tabs">
38
- <span>
39
- <button
40
- id="description-button"
41
- className="video-description__tabs-description active"
42
- >
43
- Video description
44
- </button>
45
- <button
46
- id="transcript-button"
47
- className="video-description__tabs-transcript"
48
- >
49
- Transcript
50
- </button>
51
- </span>
38
+ <button
39
+ id="description-button"
40
+ className="video-description__tabs-description active"
41
+ >
42
+ Video description
43
+ </button>
44
+ <button
45
+ id="transcript-button"
46
+ className="video-description__tabs-transcript"
47
+ >
48
+ Transcript
49
+ </button>
52
50
  </div>
53
51
 
54
52
  <div className="video-description" id="description-tab">
55
- <p className="video-description__text">{description}</p>
53
+ <p className="video-description__text o3-type-detail">
54
+ {description}
55
+ </p>
56
56
  </div>
57
57
 
58
58
  <div className="video-description" id="transcript-tab">
59
- <div className="video-description__text">
59
+ <div className="video-description__text o3-type-detail">
60
60
  <RichTextComponent
61
61
  structuredContent={accessibility.transcript.structured}
62
62
  />
@@ -70,10 +70,12 @@ export const VideoDescription: React.FC<VideoDescriptionProps> = ({
70
70
  <div className="video-description">
71
71
  <h4 className="video-description__title">{title}</h4>
72
72
  {description && (
73
- <p className="video-description__text">{description}</p>
73
+ <p className="video-description__text o3-type-detail">
74
+ {description}
75
+ </p>
74
76
  )}
75
77
  {accessibility?.transcript && (
76
- <div className="video-description__text transcript">
78
+ <div className="video-description__text o3-type-detail transcript">
77
79
  <RichTextComponent
78
80
  structuredContent={accessibility.transcript.structured}
79
81
  />
@@ -14,7 +14,9 @@ export const VideoInfoBox: React.FC = () => {
14
14
  data-trackable="toggle-open-close"
15
15
  className="o-expander__toggle o-expander__toggle-empty"
16
16
  >
17
- <span className="o-expander__visually-hidden">Show video info</span>
17
+ <span className="o-expander__visually-hidden o3-type-detail">
18
+ Show video info
19
+ </span>
18
20
  </button>
19
21
  <div className="o-expander__content video-info"></div>
20
22
  </div>
@@ -1,9 +1,8 @@
1
+ @import '@financial-times/o3-foundation/css/core.css';
1
2
  .cp-clip__caption {
2
- @include oTypographyCaption();
3
3
  margin-top: 0;
4
- color: oColorsByName('black-70');
5
4
  z-index: -1;
6
- margin-top: oSpacingByName('s1');
5
+ margin-top: var(--o3-spacing-5xs);
7
6
  position: relative;
8
7
  }
9
8
  // When caption is present with the button description
@@ -1,3 +1,4 @@
1
+ @import '@financial-times/o3-foundation/css/core.css';
1
2
  .cp-clip__video {
2
3
  object-fit: contain; // this will maintin the video's aspect ratio
3
4
  grid-row-start: 1;
@@ -23,7 +24,7 @@
23
24
  .o-expander__toggle[aria-expanded='false'] {
24
25
  background-image: url('https://www.ft.com/__origami/service/image/v2/images/raw/fticon-v1%3Amedia-description?source=cp-content-pipeline');
25
26
  background-repeat: no-repeat;
26
- background-color: oColorsByName('black-5');
27
+ background-color: var(--o3-color-palette-black-5);
27
28
  background-position: center;
28
29
  display: block;
29
30
  // Icon size is used also in _caption.scss
@@ -1,27 +1,31 @@
1
+ @import '@financial-times/o3-foundation/css/core.css';
1
2
  .video-description {
2
- background: oColorsByName('black-5');
3
+ background: var(--o3-color-palette-black-5);
3
4
  overflow-y: scroll;
4
- min-width: oSpacingByName('s8');
5
+ min-width: var(--o3-spacing-m);
5
6
  width: 100%;
6
7
  box-sizing: border-box;
7
- @include oTypographySans(-1);
8
- color: oColorsByName('ft-grey');
9
- padding: 6px oSpacingByName('s6') oSpacingByName('s2') 15px;
10
- @include oGridRespondTo($from: L) {
11
- @include oTypographySans(1);
12
- }
8
+
9
+ color: var(--o3-color-palette-ft-grey);
10
+ padding: 6px var(--o3-spacing-s) var(--o3-spacing-4xs) 15px;
11
+
13
12
  position: relative;
14
13
 
15
14
  &.o-expander__content--expanded {
16
15
  flex-direction: column;
17
- margin-top: oSpacingByName('s1');
16
+ margin-top: var(--o3-spacing-5xs);
18
17
  }
19
18
 
20
- .video-description__title {
19
+ .video-description__title {
21
20
  margin: 0;
22
21
  line-height: 32px;
23
- font-weight: 600;
24
22
  padding-right: 1ch;
23
+ margin-bottom: var(--o3-spacing-4xs);
24
+
25
+ font-weight: var(--o3-font-weight-semibold);
26
+ line-height: var(--o3-font-lineheight-metric2-negative-1);
27
+ font-size: var(--o3-font-size-metric2-negative-1);
28
+ font-family: var(--o3-font-family-metric);
25
29
  }
26
30
 
27
31
  &#transcript-tab {
@@ -39,57 +43,56 @@
39
43
  background: none;
40
44
  }
41
45
  &::-webkit-scrollbar-thumb {
42
- background-color: oColorsByName('ft-grey');
46
+ background-color: var(--o3-color-palette-ft-grey);
43
47
  border-radius: 5px;
44
48
  }
45
- &.transcript {
46
- @include oTypographySans(0);
47
- }
48
49
  }
49
50
  }
50
51
 
51
52
  .video-description::-webkit-scrollbar-thumb {
52
- background: oColorsByName('black-50');
53
+ background: var(--o3-color-palette-black-50);
53
54
  border-radius: 10px;
54
55
  }
55
56
 
56
57
  .video-description::-webkit-scrollbar {
57
- width: oSpacingByName('s1');
58
+ width: var(--o3-spacing-5xs);
58
59
  }
59
60
 
60
61
  .video-description__tabs {
61
- @include oTypographySans(-1);
62
62
  display: flex;
63
- justify-content: space-between;
64
- margin-top: oSpacingByName('s1');
65
- background: oColorsByName('black-5');
66
- border-bottom: oColorsByName('black-20') solid;
67
- font-size: 14px;
63
+ gap: var(--o3-spacing-s);
64
+
65
+ padding: 0 var(--o3-spacing-2xs);
66
+ margin-top: var(--o3-spacing-5xs);
67
+ background: var(--o3-color-palette-black-5);
68
+ border-bottom: var(--o3-color-palette-black-20) solid;
68
69
  height: 30px;
69
70
 
70
71
  .video-description__tabs-description,
71
72
  .video-description__tabs-transcript {
72
- @include oTypographySans(-1, $weight: 'regular');
73
+ font-weight: var(--o3-type-detail-font-weight);
74
+ line-height: var(--o3-type-detail-line-height);
75
+ font-size: var(--o3-type-detail-font-size);
76
+ font-family: var(--o3-type-detail-font-family);
77
+
73
78
  background-color: transparent;
74
79
  border-width: 0;
75
80
  padding: 0;
76
81
 
77
82
  &.active {
78
- @include oTypographySans(-1, $weight: 'semibold');
79
- border-bottom: black solid 2px;
80
- padding-bottom: 5px;
81
- letter-spacing: -0.25px;
82
- }
83
- }
84
- .video-description__tabs-description {
85
- margin: oSpacingByName('s2') 0px 2px oSpacingByName('s4');
86
- position: absolute;
87
- }
83
+ font-weight: var(--o3-font-weight-semibold);
84
+ position: relative;
88
85
 
89
- .video-description__tabs-transcript {
90
- @include oTypographySans(-1, $weight: 'regular');
91
- left: 140px;
92
- margin-top: oSpacingByName('s2');
93
- position: absolute;
86
+ &::after {
87
+ content: '';
88
+ display: block;
89
+ width: 100%;
90
+ height: 2px;
91
+ background-color: var(--o3-color-palette-black);
92
+ position: absolute;
93
+ bottom: 0;
94
+ left: 0;
95
+ }
96
+ }
94
97
  }
95
98
  }
@@ -1,8 +1,9 @@
1
+ @import '@financial-times/o3-foundation/css/core.css';
1
2
  .o-expander__info-box {
2
- color: oColorsByName('white');
3
+ color: var(--o3-color-palette-white);
3
4
  height: fit-content;
4
5
  width: 100%;
5
- min-width: oSpacingByName('s8');
6
+ min-width: var(--o3-spacing-m);
6
7
  z-index: 1;
7
8
  display: flex;
8
9
  grid-row-start: 1;
@@ -23,43 +24,30 @@
23
24
  }
24
25
 
25
26
  .video-info {
26
- background: rgba(oColorsByName('black'), 0.6);
27
- background: oColorsByName('wheat');
28
- min-width: oSpacingByName('s8');
29
- padding: oSpacingByName('s4');
27
+ background: var(--o3-color-palette-wheat);
28
+ min-width: var(--o3-spacing-m);
29
+ padding: var(--o3-spacing-2xs);
30
30
  width: 100%;
31
31
  box-sizing: border-box;
32
- @include oTypographySans(0);
33
- color: oColorsByName('black');
34
- padding: oSpacingByName('s3') oSpacingByName('s4') oSpacingByName('s4');
35
- @include oGridRespondTo($from: L) {
36
- @include oTypographySans(1);
37
- }
32
+
33
+ color: var(--o3-color-use-case-support-text);
38
34
 
39
- .video-info__title {
40
- margin: 0;
41
- line-height: 32px;
42
- }
35
+ padding: var(--o3-spacing-3xs) var(--o3-spacing-2xs) var(--o3-spacing-2xs);
43
36
 
44
- .video-info__content {
45
- overflow-y: auto;
46
- max-height: 100%;
47
- margin: 0;
48
- &::-webkit-scrollbar {
49
- width: 5px;
50
- }
51
- &::-webkit-scrollbar-track {
52
- background: none;
53
- }
54
- &::-webkit-scrollbar-thumb {
55
- background-color: oColorsByName('white');
56
- border-radius: 5px;
57
- }
37
+ font-family: var(--o3-type-detail-font-family);
38
+ font-weight: var(--o3-type-detail-font-weight);
39
+ font-size: var(--o3-type-detail-font-size);
40
+ line-height: var(--o3-type-detail-line-height);
41
+
42
+ @include oGridRespondTo($from: L) {
43
+ font-family: var(--o3-type-body-base-font-family);
44
+ font-weight: var(--o3-type-body-base-font-weight);
45
+ font-size: var(--o3-type-body-base-font-size);
46
+ line-height: var(--o3-type-body-base-line-height);
58
47
  }
59
48
  }
60
49
 
61
50
  .o-expander__toggle {
62
- @include oTypographySans(0);
63
51
  position: absolute;
64
52
  right: 0;
65
53
  border: none;
@@ -70,18 +58,25 @@
70
58
  }
71
59
 
72
60
  .o-expander__toggle[aria-expanded='true'] {
73
- @include oIconsContent('cross', oColorsByName('black'), 30);
61
+ display: inline-block;
62
+ width: 30px;
63
+ height: 30px;
64
+ background-color: var(--o3-color-palette-black);
65
+ mask-image: var(--o3-icon-cross);
66
+ mask-repeat: no-repeat;
67
+ mask-size: 20px;
68
+ mask-position: center;
69
+
74
70
  z-index: 1;
75
- background-size: 20px;
76
71
  }
77
72
 
78
73
  .o-expander__toggle[aria-expanded='false'] {
79
- margin-top: oSpacingByName('s1');
74
+ margin-top: var(--o3-spacing-5xs);
80
75
  }
81
76
 
82
77
  .cp-clip__offline-message {
83
78
  // Prevent clash with the X button.
84
- margin-right: oSpacingByName('s4');
79
+ margin-right: var(--o3-spacing-2xs);
85
80
  margin-left: -10px;
86
81
  display: flex;
87
82
  align-items: center;