diff --git a/CHANGELOG.md b/CHANGELOG.md index f8e67b12212..d508caedadb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ - Gave `EuiFlyout` close button a data-test-subj ([#1000](https://github.com/elastic/eui/pull/1000/files)) - Add typings for `EuiFlyout`, `EuiFlyoutBody`, `EuiFlyoutHeader`, and `EuiFlyoutFooter` ([#1001](https://github.com/elastic/eui/pull/1001)) +**Breaking changes** + +- Altered `EuiPage` and sub-component layout ([#998](https://github.com/elastic/eui/pull/998)) + - `EuiPageHeader` must now be contained within `EuiPageBody` + - `EuiPageSideBar` must now be **outside** of `EuiPageBody` + ## [`1.2.1`](https://github.com/elastic/eui/tree/v1.2.1) **Bug fixes** @@ -11,7 +17,7 @@ ## [`1.2.0`](https://github.com/elastic/eui/tree/v1.2.0) -**Note: this release creates a minor regression to the sizing of `EuiTitle`s. This is fixed in `master`.** +**Note: this release creates a minor regression to the sizing of `EuiTitle`s. This is fixed in `1.2.1`.** - Added typings for keyCodes ([#988](https://github.com/elastic/eui/pull/988)) - Changed `EuiXYChart` components exports to `/experimental` subfolder ([#975](https://github.com/elastic/eui/pull/975)) diff --git a/src-docs/src/components/guide_components.scss b/src-docs/src/components/guide_components.scss index 201a02fc61b..87aa190e396 100644 --- a/src-docs/src/components/guide_components.scss +++ b/src-docs/src/components/guide_components.scss @@ -9,6 +9,10 @@ $guideZLevelHighest: $euiZLevel9 + 1000; .guidePage { padding: 0; + + @include euiBreakpoint('xs', 's') { + display: block; // Fixes IE + } } .guideSideNav { @@ -39,7 +43,7 @@ $guideZLevelHighest: $euiZLevel9 + 1000; } .guidePageContent { - flex: 1 1 0%; + flex: 1 1 auto; padding: $euiSize $euiSizeXL; min-height: 100vh; background-color: $euiColorEmptyShade; @@ -49,6 +53,10 @@ $guideZLevelHighest: $euiZLevel9 + 1000; } .guideDemo__highlightLayout { + .euiPageBody { + min-height: 460px; + } + div { background: transparentize(#0096CC, .9); } diff --git a/src-docs/src/views/page/page.js b/src-docs/src/views/page/page.js index b5c2c406832..0989c21657a 100644 --- a/src-docs/src/views/page/page.js +++ b/src-docs/src/views/page/page.js @@ -15,20 +15,20 @@ import { export default () => ( - - - -

Page title

-
-
- - Page abilities - -
+ + SideBar nav + - - SideBar nav - + + + +

Page title

+
+
+ + Page abilities + +
diff --git a/src-docs/src/views/page/page_content_center_with_side_bar.js b/src-docs/src/views/page/page_content_center_with_side_bar.js index f2315ae1278..3273c1fd211 100644 --- a/src-docs/src/views/page/page_content_center_with_side_bar.js +++ b/src-docs/src/views/page/page_content_center_with_side_bar.js @@ -14,22 +14,21 @@ import { } from '../../../../src/components'; export default () => ( - - - - -

Page title

-
-
- - Page abilities - -
+ + SideBar nav + - - SideBar nav - + + + +

Page title

+
+
+ + Page abilities + +
diff --git a/src-docs/src/views/page/page_simple.js b/src-docs/src/views/page/page_simple.js index 17dd677e4ce..b0b89e3f0f4 100644 --- a/src-docs/src/views/page/page_simple.js +++ b/src-docs/src/views/page/page_simple.js @@ -14,14 +14,14 @@ import { export default () => ( - - - -

Page title

-
-
-
+ + + +

Page title

+
+
+
diff --git a/src/components/page/_page.scss b/src/components/page/_page.scss index 28ff7926aeb..9c4fe055a3c 100644 --- a/src/components/page/_page.scss +++ b/src/components/page/_page.scss @@ -1,4 +1,5 @@ .euiPage { + display: flex; padding: $euiSize; background-color: $euiColorLightestShade; @@ -11,4 +12,9 @@ &--restrictWidth-default { max-width: 1000px; } + + @include euiBreakpoint('xs', 's') { + flex-direction: column; + padding: 0; + } } diff --git a/src/components/page/page_body/_page_body.scss b/src/components/page/page_body/_page_body.scss index 1ad87fdd38e..71db92a5858 100644 --- a/src/components/page/page_body/_page_body.scss +++ b/src/components/page/page_body/_page_body.scss @@ -1,13 +1,7 @@ .euiPageBody { display: flex; - flex-direction: row; + flex-direction: column; align-items: stretch; - min-height: 400px; // Temporary till we have a better doc system. -} - -@include euiBreakpoint('xs','s') { - .euiPageBody { - flex-direction: column; - } + flex: 1 1 0%; } diff --git a/src/components/page/page_content/__snapshots__/page_content_header.test.js.snap b/src/components/page/page_content/__snapshots__/page_content_header.test.js.snap index 07ff39473f3..432892b6405 100644 --- a/src/components/page/page_content/__snapshots__/page_content_header.test.js.snap +++ b/src/components/page/page_content/__snapshots__/page_content_header.test.js.snap @@ -3,7 +3,7 @@ exports[`EuiPageContentHeader is rendered 1`] = `
`; diff --git a/src/components/page/page_content/_page_content.scss b/src/components/page/page_content/_page_content.scss index 72758807415..3c58633630e 100644 --- a/src/components/page/page_content/_page_content.scss +++ b/src/components/page/page_content/_page_content.scss @@ -7,15 +7,18 @@ &.euiPageContent--horizontalCenter { width: auto; + max-width: 100%; // Fixes IE margin: auto; flex-grow: 0; // Offsets the properties of .euiPanel within flexboxes } -} - -@include euiBreakpoint('xs','s') { - .euiPageContent { - border-radius: 0; - border: none; + // At small screens, the content extends edge to edge, so remove the side borders and shadow + @include euiBreakpoint('xs', 's') { + &.euiPanel:not(.euiPageContent--horizontalCenter) { // Override panel styles without the need for !important + border-radius: 0; + border-left: none; + border-right: none; + box-shadow: none; + } } } diff --git a/src/components/page/page_content/_page_content_header.scss b/src/components/page/page_content/_page_content_header.scss index 756205ff562..1b9f1fbcbb0 100644 --- a/src/components/page/page_content/_page_content_header.scss +++ b/src/components/page/page_content/_page_content_header.scss @@ -1,13 +1,22 @@ +@import '../../panel/variables'; + .euiPageContentHeader { - margin-bottom: $euiSizeL; display: flex; flex-direction: row; justify-content: space-between; align-items: center; + + // Adjust vertical spacing based on content padding prop + @each $modifier, $amount in $euiPanelPaddingModifiers { + .euiPageContent[class*="#{$modifier}"] & { + margin-bottom: $amount; + } + } } @include euiBreakpoint('xs','s') { - .euiPageContentHeader { + .euiPageContentHeader--responsive { flex-direction: column; + align-items: flex-start; } } diff --git a/src/components/page/page_content/_page_content_header_section.scss b/src/components/page/page_content/_page_content_header_section.scss index 218dbdb1583..bd11820fad7 100644 --- a/src/components/page/page_content/_page_content_header_section.scss +++ b/src/components/page/page_content/_page_content_header_section.scss @@ -1,18 +1,19 @@ -.euiPageContentHeaderSection { +@import '../../panel/variables'; +.euiPageContentHeaderSection { & + & { margin-left: $euiSizeXL; } } +// Adjust vertical spacing based on content padding prop @include euiBreakpoint('xs','s') { - - .euiPageContentHeaderSection { - width: 100%; - - & + & { - margin-left: 0; - margin-top: $euiSize; + @each $modifier, $amount in $euiPanelPaddingModifiers { + .euiPageContent[class*="#{$modifier}"] .euiPageContentHeader--responsive { + .euiPageContentHeaderSection + .euiPageContentHeaderSection { + margin-left: 0; + margin-top: $amount/2; + } } } } diff --git a/src/components/page/page_content/page_content_header.js b/src/components/page/page_content/page_content_header.js index 21ba2d39e53..de65e3c4991 100644 --- a/src/components/page/page_content/page_content_header.js +++ b/src/components/page/page_content/page_content_header.js @@ -2,8 +2,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; -export const EuiPageContentHeader = ({ children, className, ...rest }) => { - const classes = classNames('euiPageContentHeader', className); +export const EuiPageContentHeader = ({ children, className, responsive, ...rest }) => { + const classes = classNames( + 'euiPageContentHeader', + { + 'euiPageContentHeader--responsive': responsive, + }, + className, + ); return (
{ EuiPageContentHeader.propTypes = { children: PropTypes.node, className: PropTypes.string, + /** + * Set to false if you don't want the children to stack + * at small screen sizes. + */ + responsive: PropTypes.bool, +}; + +EuiPageContentHeader.defaultProps = { + responsive: true, }; diff --git a/src/components/page/page_header/__snapshots__/page_header.test.js.snap b/src/components/page/page_header/__snapshots__/page_header.test.js.snap index 78f2120a4a2..44bb0884549 100644 --- a/src/components/page/page_header/__snapshots__/page_header.test.js.snap +++ b/src/components/page/page_header/__snapshots__/page_header.test.js.snap @@ -3,7 +3,7 @@ exports[`EuiPageHeader is rendered 1`] = `
`; diff --git a/src/components/page/page_header/_page_header.scss b/src/components/page/page_header/_page_header.scss index 2b475b7a6ed..5e505268b4d 100644 --- a/src/components/page/page_header/_page_header.scss +++ b/src/components/page/page_header/_page_header.scss @@ -8,8 +8,11 @@ @include euiBreakpoint('xs','s') { .euiPageHeader { - flex-direction: column; - padding: 0 $euiSize; + padding: $euiSize; margin-bottom: 0; } + + .euiPageHeader--responsive { + flex-direction: column; + } } diff --git a/src/components/page/page_header/_page_header_section.scss b/src/components/page/page_header/_page_header_section.scss index dddf6e0b550..beeecda97ee 100644 --- a/src/components/page/page_header/_page_header_section.scss +++ b/src/components/page/page_header/_page_header_section.scss @@ -1,15 +1,14 @@ .euiPageHeaderSection { - & + & { margin-left: $euiSizeXL; } } -@include euiBreakpoint('xs','s') { - .euiPageHeaderSection { +@include euiBreakpoint('xs','s') { + .euiPageHeader--responsive .euiPageHeaderSection { width: 100%; - & + & { + + .euiPageHeaderSection { margin-left: 0; margin-top: $euiSize; } diff --git a/src/components/page/page_header/page_header.js b/src/components/page/page_header/page_header.js index e0665b6d0e4..db4e265a8e1 100644 --- a/src/components/page/page_header/page_header.js +++ b/src/components/page/page_header/page_header.js @@ -2,8 +2,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; -export const EuiPageHeader = ({ children, className, ...rest }) => { - const classes = classNames('euiPageHeader', className); +export const EuiPageHeader = ({ children, className, responsive, ...rest }) => { + const classes = classNames( + 'euiPageHeader', + { + 'euiPageHeader--responsive': responsive, + }, + className, + ); return (
{ EuiPageHeader.propTypes = { children: PropTypes.node, className: PropTypes.string, + /** + * Set to false if you don't want the children to stack + * at small screen sizes. + */ + responsive: PropTypes.bool, +}; + +EuiPageHeader.defaultProps = { + responsive: true, }; diff --git a/src/components/page/page_side_bar/_page_side_bar.scss b/src/components/page/page_side_bar/_page_side_bar.scss index 74f0a3d387a..6de5c052304 100644 --- a/src/components/page/page_side_bar/_page_side_bar.scss +++ b/src/components/page/page_side_bar/_page_side_bar.scss @@ -3,7 +3,7 @@ */ .euiPageSideBar { min-width: $euiSize * 12; /* 1 */ - flex: 0 0 0; /* 1 */ + flex: 0 1 0%; /* 1 */ margin-right: $euiSizeL; } diff --git a/src/components/panel/_mixins.scss b/src/components/panel/_mixins.scss index fd3e0d5f035..ac5cafcf2e1 100644 --- a/src/components/panel/_mixins.scss +++ b/src/components/panel/_mixins.scss @@ -1,6 +1,7 @@ /** * Mixin for use in: * - EuiCard + * - EuiPageContent */ @mixin euiPanel($selector){ @if variable-exists(selector) == false { diff --git a/src/components/panel/_variables.scss b/src/components/panel/_variables.scss index 798d39231fc..42234f80f45 100644 --- a/src/components/panel/_variables.scss +++ b/src/components/panel/_variables.scss @@ -1,6 +1,8 @@ /** * Padding map referenced in: * - Popover + * - PageContentHeader + * - PageContentHeaderSection */ $euiPanelPaddingModifiers: ( "paddingSmall": $euiSizeS,