@@ -84,6 +84,26 @@ const stretchLines = css`
8484 }
8585` ;
8686
87+ const spanCentreToRightColumnFromDesktop = css `
88+ ${ from . desktop } {
89+ ${ grid . between ( 'centre-column-start' , 'right-column-start' ) } ;
90+ }
91+ ` ;
92+
93+ const rightColumnCss = ( isMedia : boolean ) => css `
94+ dis play: none;
95+
96+ ${ from . desktop } {
97+ dis play: block;
98+ padding- to p: 6px;
99+ grid- row: ${ isMedia ? 3 : 1 } / span 999;
100+ }
101+
102+ ${ from . leftCol } {
103+ grid- row: ${ isMedia ? 2 : 1 } / span 999;
104+ }
105+ ` ;
106+
87107interface GridItemProps {
88108 area : Area ;
89109 layoutType : LayoutType ;
@@ -92,45 +112,43 @@ interface GridItemProps {
92112 desktop ?: 'left' | 'centre' | 'right' ;
93113 leftCol ?: 'left' | 'centre' | 'right' ;
94114 } ;
95- element ?: 'div' | 'article' | 'main' | ' aside' | 'section ';
115+ element ?: 'div' | 'aside' ;
96116 customCss ?: SerializedStyles ;
97117 children : React . ReactNode ;
98118}
99119
120+ const columnCss = ( columnsConfig ?: GridItemProps [ 'columns' ] ) => [
121+ grid . column . centre ,
122+ Object . entries ( {
123+ tablet : columnsConfig ?. tablet ,
124+ desktop : columnsConfig ?. desktop ,
125+ leftCol : columnsConfig ?. leftCol ,
126+ } )
127+ . filter ( ( [ , value ] ) => value != null )
128+ . map (
129+ ( [ bp , col ] ) => css `
130+ ${ from [ bp as keyof typeof from ] } {
131+ ${ grid . column [ col ! ] } ;
132+ }
133+ ` ,
134+ ) ,
135+ ] ;
136+
100137const GridItem = ( {
101138 area,
102139 layoutType,
103140 columns,
104141 element : Element = 'div' ,
105142 customCss,
106143 children,
107- } : GridItemProps ) => {
108- const columnCss = ( columnsConfig ?: GridItemProps [ 'columns' ] ) => [
109- grid . column . centre ,
110- Object . entries ( {
111- tablet : columnsConfig ?. tablet ,
112- desktop : columnsConfig ?. desktop ,
113- leftCol : columnsConfig ?. leftCol ,
114- } )
115- . filter ( ( [ , value ] ) => value != null )
116- . map (
117- ( [ bp , col ] ) => css `
118- ${ from [ bp as keyof typeof from ] } {
119- ${ grid . column [ col ! ] } ;
120- }
121- ` ,
122- ) ,
123- ] ;
124-
125- return (
126- < Element
127- data-gu-name = { area }
128- css = { css ( [ columnCss ( columns ) , rowCss ( area , layoutType ) , customCss ] ) }
129- >
130- { children }
131- </ Element >
132- ) ;
133- } ;
144+ } : GridItemProps ) => (
145+ < Element
146+ data-gu-name = { area }
147+ css = { css ( [ columnCss ( columns ) , rowCss ( area , layoutType ) , customCss ] ) }
148+ >
149+ { children }
150+ </ Element >
151+ ) ;
134152
135153interface Props {
136154 article : ArticleDeprecated ;
@@ -336,6 +354,11 @@ export const StandardLayout = (props: WebProps | AppProps) => {
336354 area = "main-media"
337355 layoutType = { layoutType }
338356 element = "div"
357+ customCss = {
358+ isMedia
359+ ? spanCentreToRightColumnFromDesktop
360+ : undefined
361+ }
339362 >
340363 < div css = { ! isMedia && maxWidth } >
341364 < MainMedia
@@ -404,6 +427,11 @@ export const StandardLayout = (props: WebProps | AppProps) => {
404427 area = "standfirst"
405428 layoutType = { layoutType }
406429 element = "div"
430+ customCss = {
431+ isMedia
432+ ? spanCentreToRightColumnFromDesktop
433+ : undefined
434+ }
407435 >
408436 < Standfirst
409437 format = { format }
@@ -532,6 +560,11 @@ export const StandardLayout = (props: WebProps | AppProps) => {
532560 area = "body"
533561 layoutType = { layoutType }
534562 element = "div"
563+ customCss = {
564+ isMedia
565+ ? spanCentreToRightColumnFromDesktop
566+ : undefined
567+ }
535568 >
536569 { /* Only show Listen to Article button on App landscape views */ }
537570 { isApps && (
@@ -675,14 +708,7 @@ export const StandardLayout = (props: WebProps | AppProps) => {
675708 area = "right-column"
676709 layoutType = { layoutType }
677710 columns = { { desktop : 'right' } }
678- customCss = { css `
679- display : none;
680- ${ from . desktop } {
681- display : block;
682- padding-top : 6px ;
683- grid-row : 1 / span 999 ;
684- }
685- ` }
711+ customCss = { rightColumnCss ( isMedia ) }
686712 element = "aside"
687713 >
688714 < Island
0 commit comments