@ember-eui/core 5.0.0-alpha.5 → 5.0.1
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/addon/components/eui-notification-event/index.hbs +25 -9
- package/addon/components/eui-notification-event-meta/index.hbs +82 -74
- package/addon/components/eui-notification-event-read-icon/index.hbs +1 -1
- package/addon/components/eui-page/index.hbs +13 -18
- package/addon/components/eui-page-body/index.hbs +19 -36
- package/addon/components/eui-page-content/index.hbs +20 -17
- package/addon/components/eui-page-content-body/index.hbs +16 -15
- package/addon/components/eui-page-content-header/index.hbs +1 -13
- package/addon/components/eui-page-header/index.hbs +91 -33
- package/addon/components/eui-page-header-content/index.hbs +247 -182
- package/addon/components/eui-page-template/index.hbs +723 -395
- package/addon/components/eui-page-template/index.ts +44 -16
- package/addon/components/eui-split-panel/outer/index.hbs +5 -4
- package/addon/helpers/eui-page-restrict-width.ts +37 -0
- package/addon/{components/eui-split-panel/outer/index.ts → modifiers/use-is-within-breakpoints.ts} +2 -11
- package/addon/styles/ember-eui.css +4 -0
- package/addon/utils/css-mappings/eui-page.ts +19 -1
- package/addon/utils/css-mappings/eui-tabs.ts +1 -1
- package/app/helpers/eui-page-restrict-width.js +4 -0
- package/app/modifiers/use-is-within-breakpoints.js +1 -0
- package/docs/layout/page-header/demo/demo1.md +23 -0
- package/docs/layout/page-header/demo/demo2.md +23 -0
- package/docs/layout/page-header/demo/demo3.md +14 -0
- package/docs/layout/page-header/demo/demo4.md +52 -0
- package/docs/layout/page-header/demo/demo5.md +64 -0
- package/docs/layout/page-header/demo/demo6.md +21 -0
- package/docs/layout/page-header/index.md +11 -0
- package/docs/layout/{page-demo → page-template/demo}/demo1.md +36 -14
- package/docs/layout/page-template/demo/demo10.md +58 -0
- package/docs/layout/{page-demo → page-template/demo}/demo2.md +14 -4
- package/docs/layout/{page-demo → page-template/demo}/demo3.md +19 -8
- package/docs/layout/page-template/demo/demo4.md +43 -0
- package/docs/layout/page-template/demo/demo5.md +54 -0
- package/docs/layout/{page-demo → page-template/demo}/demo6.md +10 -2
- package/docs/layout/{page-demo → page-template/demo}/demo7.md +0 -0
- package/docs/layout/page-template/demo/demo8.md +46 -0
- package/docs/layout/page-template/demo/demo9.md +43 -0
- package/docs/layout/page-template/index.md +11 -0
- package/package.json +2 -2
- package/docs/layout/page-demo/demo10.md +0 -42
- package/docs/layout/page-demo/demo4.md +0 -38
- package/docs/layout/page-demo/demo5.md +0 -30
- package/docs/layout/page-demo/demo8.md +0 -19
- package/docs/layout/page-demo/demo9.md +0 -29
- package/docs/layout/page.md +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Component from '@glimmer/component';
|
|
2
2
|
import { EuiButtomBarArgs } from '../eui-bottom-bar';
|
|
3
|
+
import { tracked } from '@glimmer/tracking';
|
|
3
4
|
// import { action } from '@ember/object';
|
|
4
5
|
// import { tracked } from '@glimmer/tracking';
|
|
5
6
|
// import {
|
|
@@ -28,8 +29,16 @@ export const TEMPLATES = [
|
|
|
28
29
|
'empty'
|
|
29
30
|
] as const;
|
|
30
31
|
|
|
32
|
+
interface NormalProps {
|
|
33
|
+
className?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
31
36
|
export type EuiPageTemplateProps = {
|
|
32
37
|
template?: typeof TEMPLATES[number];
|
|
38
|
+
|
|
39
|
+
pageBodyProps: NormalProps;
|
|
40
|
+
pageContentProps: NormalProps;
|
|
41
|
+
pageContentBodyProps: NormalProps;
|
|
33
42
|
/**
|
|
34
43
|
// * Gets passed along to the #EuiBottomBar component if `bottomBar` has contents
|
|
35
44
|
// */
|
|
@@ -44,17 +53,39 @@ export type EuiPageTemplateProps = {
|
|
|
44
53
|
* Minimum height in which to enforce scrolling
|
|
45
54
|
*/
|
|
46
55
|
minHeight?: number;
|
|
56
|
+
|
|
57
|
+
restrictWidth?: boolean | number | string;
|
|
47
58
|
};
|
|
48
59
|
|
|
49
60
|
export default class EuiPageTemplate extends Component<EuiPageTemplateProps> {
|
|
50
61
|
// Defaults
|
|
51
|
-
@argOrDefault(460) minHeight!: number;
|
|
52
62
|
@argOrDefault(false) fullHeight!: boolean;
|
|
53
|
-
@argOrDefault('l') paddingSize!: string;
|
|
54
63
|
@argOrDefault('default') template!: typeof TEMPLATES[number];
|
|
55
64
|
|
|
65
|
+
@tracked isWithinBreakpoints = false;
|
|
66
|
+
|
|
67
|
+
setIsWithinBreakpoints = (value: boolean) => {
|
|
68
|
+
this.isWithinBreakpoints = value;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
get minHeight() {
|
|
72
|
+
const minHeight = this.args.minHeight ?? 460;
|
|
73
|
+
if (typeof this.args.minHeight === 'number') {
|
|
74
|
+
return `${minHeight}px`;
|
|
75
|
+
}
|
|
76
|
+
return minHeight;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
get restrictWidth() {
|
|
80
|
+
const width = this.args.restrictWidth ?? true;
|
|
81
|
+
if (typeof this.args.restrictWidth === 'number') {
|
|
82
|
+
return `${width}px`;
|
|
83
|
+
}
|
|
84
|
+
return width;
|
|
85
|
+
}
|
|
86
|
+
|
|
56
87
|
get classes() {
|
|
57
|
-
return
|
|
88
|
+
return `euiPageTemplate ${this.fullHeightClass}`;
|
|
58
89
|
}
|
|
59
90
|
|
|
60
91
|
get fullHeightClass() {
|
|
@@ -66,24 +97,21 @@ export default class EuiPageTemplate extends Component<EuiPageTemplateProps> {
|
|
|
66
97
|
}
|
|
67
98
|
|
|
68
99
|
get canFullHeight() {
|
|
69
|
-
return
|
|
100
|
+
return (
|
|
101
|
+
this.isWithinBreakpoints &&
|
|
102
|
+
(this.template === 'default' || this.template === 'empty')
|
|
103
|
+
);
|
|
70
104
|
}
|
|
71
105
|
|
|
72
|
-
get
|
|
73
|
-
return this.fullHeightClass
|
|
74
|
-
// ...pageBodyProps,
|
|
75
|
-
// className: classNames(fullHeightClass, pageBodyProps?.className),
|
|
106
|
+
get pageBodyPropsClass() {
|
|
107
|
+
return `${this.fullHeightClass} ${this.args.pageBodyProps?.className}`;
|
|
76
108
|
}
|
|
77
109
|
|
|
78
|
-
get
|
|
79
|
-
return this.yScrollClass
|
|
80
|
-
// ...pageContentProps,
|
|
81
|
-
// className: classNames(yScrollClass, pageContentProps?.className),
|
|
110
|
+
get pageContentPropsClass() {
|
|
111
|
+
return `${this.yScrollClass} ${this.args.pageContentProps?.className}`;
|
|
82
112
|
}
|
|
83
113
|
|
|
84
|
-
get
|
|
85
|
-
return this.fullHeightClass
|
|
86
|
-
// ...pageContentBodyProps,
|
|
87
|
-
//className: classNames(fullHeightClass, pageContentBodyProps?.className),
|
|
114
|
+
get pageContentBodyPropsClass() {
|
|
115
|
+
return `${this.fullHeightClass} ${this.args.pageContentBodyProps?.className}`;
|
|
88
116
|
}
|
|
89
117
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{{#let
|
|
2
2
|
(arg-or-default @direction "column")
|
|
3
3
|
(arg-or-default @responsive (array "xs" "s"))
|
|
4
|
-
|
|
4
|
+
(use-state false)
|
|
5
|
+
as |direction responsive isResponsive|
|
|
5
6
|
}}
|
|
6
7
|
<EuiPanel
|
|
7
8
|
class={{class-names
|
|
8
9
|
"euiSplitPanel"
|
|
9
10
|
(if (eq direction "row") "euiSplitPanel--row")
|
|
10
|
-
(if
|
|
11
|
+
(if isResponsive.value "euiSplitPanel-isResponsive")
|
|
11
12
|
}}
|
|
12
13
|
@grow={{arg-or-default @grow false}}
|
|
13
14
|
@paddingSize={{arg-or-default @paddingSize "none"}}
|
|
@@ -15,10 +16,10 @@
|
|
|
15
16
|
@color={{@color}}
|
|
16
17
|
@borderRadius={{@borderRadius}}
|
|
17
18
|
@hasBorder={{@hasBorder}}
|
|
18
|
-
{{
|
|
19
|
+
{{use-is-within-breakpoints
|
|
19
20
|
sizes=responsive
|
|
20
21
|
isActive=(not (not responsive))
|
|
21
|
-
setIsWithinBreakpointsValue=
|
|
22
|
+
setIsWithinBreakpointsValue=isResponsive.setState
|
|
22
23
|
}}
|
|
23
24
|
...attributes
|
|
24
25
|
>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { helper } from '@ember/component/helper';
|
|
2
|
+
export type _EuiPageRestrictWidth = {
|
|
3
|
+
/**
|
|
4
|
+
* Sets the max-width of the page,
|
|
5
|
+
* set to `true` to use the default size of `1000px (1200 for Amsterdam)`,
|
|
6
|
+
* set to `false` to not restrict the width,
|
|
7
|
+
* set to a number for a custom width in px,
|
|
8
|
+
* set to a string for a custom width in custom measurement.
|
|
9
|
+
*/
|
|
10
|
+
restrictWidth?: boolean | number | string;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export function restrictWidth(
|
|
14
|
+
restrictWidth: _EuiPageRestrictWidth['restrictWidth'],
|
|
15
|
+
style?: Record<string, unknown>
|
|
16
|
+
) {
|
|
17
|
+
let widthClassName;
|
|
18
|
+
let newStyle = {
|
|
19
|
+
...(style || {})
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
if (restrictWidth === true) {
|
|
23
|
+
widthClassName = 'restrictWidth-default';
|
|
24
|
+
} else if (restrictWidth !== false) {
|
|
25
|
+
widthClassName = 'restrictWidth-custom';
|
|
26
|
+
newStyle = { ...newStyle, maxWidth: restrictWidth };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return { widthClassName, newStyle };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export default helper(function ([restrict, style]: [
|
|
33
|
+
_EuiPageRestrictWidth['restrictWidth'],
|
|
34
|
+
Record<string, unknown> | undefined
|
|
35
|
+
]) {
|
|
36
|
+
return restrictWidth(restrict, style);
|
|
37
|
+
});
|
package/addon/{components/eui-split-panel/outer/index.ts → modifiers/use-is-within-breakpoints.ts}
RENAMED
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
EuiBreakpointSize,
|
|
4
|
-
isWithinBreakpoints
|
|
5
|
-
} from '../../../utils/breakpoint';
|
|
1
|
+
import { EuiBreakpointSize, isWithinBreakpoints } from '../utils/breakpoint';
|
|
6
2
|
import { modifier } from 'ember-modifier';
|
|
7
|
-
import { tracked } from '@glimmer/tracking';
|
|
8
3
|
|
|
9
|
-
|
|
4
|
+
export default modifier(function (
|
|
10
5
|
_element: Element,
|
|
11
6
|
_pos: unknown[],
|
|
12
7
|
{
|
|
@@ -31,7 +26,3 @@ const isWithinBreakpointsModifier = modifier(function (
|
|
|
31
26
|
|
|
32
27
|
return () => window.removeEventListener('resize', handleResize);
|
|
33
28
|
});
|
|
34
|
-
export default class EuiSplitPanelOuterComponent extends Component {
|
|
35
|
-
isWithinBreakpointsModifier = isWithinBreakpointsModifier;
|
|
36
|
-
@tracked isResponsive = false;
|
|
37
|
-
}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
export const baseClass = 'euiPage';
|
|
2
2
|
|
|
3
|
+
export const sizeMapping = {
|
|
4
|
+
s: `${baseClass}--s`,
|
|
5
|
+
m: `${baseClass}--m`,
|
|
6
|
+
l: `${baseClass}--l`,
|
|
7
|
+
xl: `${baseClass}--xl`
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export const typeMapping = {
|
|
11
|
+
space: `${baseClass}--space`,
|
|
12
|
+
user: `${baseClass}--user`
|
|
13
|
+
};
|
|
14
|
+
|
|
3
15
|
export const paddingSizeMapping = {
|
|
4
16
|
none: '',
|
|
5
17
|
s: `${baseClass}--paddingSmall`,
|
|
@@ -7,10 +19,16 @@ export const paddingSizeMapping = {
|
|
|
7
19
|
l: `${baseClass}--paddingLarge`
|
|
8
20
|
};
|
|
9
21
|
|
|
22
|
+
export const directionMapping = {
|
|
23
|
+
row: '',
|
|
24
|
+
column: `${baseClass}--column`
|
|
25
|
+
};
|
|
26
|
+
|
|
10
27
|
const mapping: ComponentMapping = {
|
|
11
28
|
base: baseClass,
|
|
12
29
|
properties: {
|
|
13
|
-
paddingSize: paddingSizeMapping
|
|
30
|
+
paddingSize: paddingSizeMapping,
|
|
31
|
+
direction: directionMapping
|
|
14
32
|
}
|
|
15
33
|
};
|
|
16
34
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from '@ember-eui/core/modifiers/use-is-within-breakpoints';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 1
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Basic
|
|
6
|
+
|
|
7
|
+
```hbs template
|
|
8
|
+
<EuiPageHeader
|
|
9
|
+
@bottomBorder={{true}}
|
|
10
|
+
@pageTitle="Page Title"
|
|
11
|
+
@iconType='logoKibana'
|
|
12
|
+
@description='This description should be describing the current page as depicted by the page title. It will never extend beneath the right side content.'
|
|
13
|
+
>
|
|
14
|
+
<:rightSideItems>
|
|
15
|
+
<EuiFlexItem>
|
|
16
|
+
<EuiButton @fill={{true}}>Add something</EuiButton>
|
|
17
|
+
</EuiFlexItem>
|
|
18
|
+
<EuiFlexItem>
|
|
19
|
+
<EuiButton>Do something</EuiButton>
|
|
20
|
+
</EuiFlexItem>
|
|
21
|
+
</:rightSideItems>
|
|
22
|
+
</EuiPageHeader>
|
|
23
|
+
```
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 2
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Tabs
|
|
6
|
+
|
|
7
|
+
```hbs template
|
|
8
|
+
<EuiPageHeader
|
|
9
|
+
@bottomBorder={{true}}
|
|
10
|
+
@pageTitle="Page title"
|
|
11
|
+
@description='This description should be describing the current page as depicted by the page title. It will never extend beneath the right side content.'
|
|
12
|
+
@tabs={{array (hash label="Tab 1" isSelected=true) (hash label="Tab 2")}}
|
|
13
|
+
>
|
|
14
|
+
<:rightSideItems>
|
|
15
|
+
<EuiFlexItem>
|
|
16
|
+
<EuiButton @fill={{true}}>Add something</EuiButton>
|
|
17
|
+
</EuiFlexItem>
|
|
18
|
+
<EuiFlexItem>
|
|
19
|
+
<EuiButton>Do something</EuiButton>
|
|
20
|
+
</EuiFlexItem>
|
|
21
|
+
</:rightSideItems>
|
|
22
|
+
</EuiPageHeader>
|
|
23
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 3
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Tabs
|
|
6
|
+
|
|
7
|
+
```hbs template
|
|
8
|
+
<EuiPageHeader
|
|
9
|
+
@bottomBorder={{true}}
|
|
10
|
+
@description='This description should be describing the current page as depicted by the page title. It will never extend beneath the right side content.'
|
|
11
|
+
@dumb={{true}}
|
|
12
|
+
@tabs={{array (hash label="Tab 1" isSelected=true) (hash label="Tab 2")}}
|
|
13
|
+
/>
|
|
14
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 4
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Breadcrumbs in the page header
|
|
6
|
+
|
|
7
|
+
<EuiText>
|
|
8
|
+
<a href="#">Breadcrumbs</a> are useful for tracking in-page flows that <strong>are not part of the entire application architecture</strong>. To make this easy <strong>EuiPageHeader</strong> provides a <EuiCode>breadcrumbs</EuiCode> prop that accepts the same configuration as <EuiCode>EuiBreadrumbs.breadcrumbs</EuiCode>.
|
|
9
|
+
</EuiText>
|
|
10
|
+
|
|
11
|
+
```hbs template
|
|
12
|
+
<EuiPageHeader
|
|
13
|
+
@bottomBorder={{true}}
|
|
14
|
+
@pageTitle='Page title'
|
|
15
|
+
@description='Example of a description.'
|
|
16
|
+
@breadcrumbs={{this.breadcrumbs}}
|
|
17
|
+
>
|
|
18
|
+
<:rightSideItems>
|
|
19
|
+
<EuiFlexItem>
|
|
20
|
+
<EuiButton @fill={{true}}>Add something</EuiButton>
|
|
21
|
+
</EuiFlexItem>
|
|
22
|
+
<EuiFlexItem>
|
|
23
|
+
<EuiButton>Do something</EuiButton>
|
|
24
|
+
</EuiFlexItem>
|
|
25
|
+
</:rightSideItems>
|
|
26
|
+
</EuiPageHeader>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```js component
|
|
30
|
+
import Component from '@glimmer/component';
|
|
31
|
+
import { tracked } from '@glimmer/tracking';
|
|
32
|
+
|
|
33
|
+
export default class AccordionDemo1Component extends Component {
|
|
34
|
+
breadcrumbs = [
|
|
35
|
+
{
|
|
36
|
+
text: 'Breadcrumb 1',
|
|
37
|
+
href: '#',
|
|
38
|
+
onClick: (e) => e.preventDefault()
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
text: 'Breadcrumb 2',
|
|
42
|
+
href: '#',
|
|
43
|
+
onClick: (e) => e.preventDefault()
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
text: 'Current',
|
|
47
|
+
href: '#',
|
|
48
|
+
onClick: (e) => e.preventDefault()
|
|
49
|
+
}
|
|
50
|
+
];
|
|
51
|
+
}
|
|
52
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 5
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Common pattern
|
|
6
|
+
|
|
7
|
+
<EuiText>
|
|
8
|
+
A common pattern is to use a single breadcrumb to return the user to a listing page from which the current page was navigated to
|
|
9
|
+
</EuiText>
|
|
10
|
+
|
|
11
|
+
```hbs template
|
|
12
|
+
<EuiPageHeader
|
|
13
|
+
@bottomBorder={{true}}
|
|
14
|
+
@pageTitle='Page title'
|
|
15
|
+
@description='Example of a description.'
|
|
16
|
+
@breadcrumbs={{array
|
|
17
|
+
(hash
|
|
18
|
+
text=(component
|
|
19
|
+
'eui-button-title'
|
|
20
|
+
title='Return'
|
|
21
|
+
iconType='arrowLeft'
|
|
22
|
+
color='primary'
|
|
23
|
+
size='s'
|
|
24
|
+
buttonEmpty=true
|
|
25
|
+
)
|
|
26
|
+
href='http://www.elastic.co'
|
|
27
|
+
)
|
|
28
|
+
}}
|
|
29
|
+
>
|
|
30
|
+
<:rightSideItems>
|
|
31
|
+
<EuiFlexItem>
|
|
32
|
+
<EuiButton @fill={{true}}>Add something</EuiButton>
|
|
33
|
+
</EuiFlexItem>
|
|
34
|
+
<EuiFlexItem>
|
|
35
|
+
<EuiButton>Do something</EuiButton>
|
|
36
|
+
</EuiFlexItem>
|
|
37
|
+
</:rightSideItems>
|
|
38
|
+
</EuiPageHeader>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
```js component
|
|
42
|
+
import Component from '@glimmer/component';
|
|
43
|
+
import { tracked } from '@glimmer/tracking';
|
|
44
|
+
|
|
45
|
+
export default class AccordionDemo1Component extends Component {
|
|
46
|
+
breadcrumbs = [
|
|
47
|
+
{
|
|
48
|
+
text: 'Breadcrumb 1',
|
|
49
|
+
href: '#',
|
|
50
|
+
onClick: (e) => e.preventDefault()
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
text: 'Breadcrumb 2',
|
|
54
|
+
href: '#',
|
|
55
|
+
onClick: (e) => e.preventDefault()
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
text: 'Current',
|
|
59
|
+
href: '#',
|
|
60
|
+
onClick: (e) => e.preventDefault()
|
|
61
|
+
}
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
```
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 6
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Customizing the page header
|
|
6
|
+
|
|
7
|
+
<EuiText>
|
|
8
|
+
The page header content props are helpful props to push content into established Elastic page layout patterns. They are completely optional and by design, inflexible. If you need a layout that does not match these patterns you can pass in your own <EuiCode>{{"<:default>"}}</EuiCode> block utilizing the <strong>EuiPageHeaderSection</strong> components.
|
|
9
|
+
|
|
10
|
+
</EuiText>
|
|
11
|
+
|
|
12
|
+
```hbs template
|
|
13
|
+
<EuiPageHeader @alignItems='center' @bottomBorder={{true}}>
|
|
14
|
+
<EuiPageHeaderSection>
|
|
15
|
+
<EuiTitle @size='l'>
|
|
16
|
+
Page title
|
|
17
|
+
</EuiTitle>
|
|
18
|
+
</EuiPageHeaderSection>
|
|
19
|
+
<EuiPageHeaderSection>Page abilities</EuiPageHeaderSection>
|
|
20
|
+
</EuiPageHeader>
|
|
21
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 1
|
|
3
|
+
title: Page Header
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<EuiPageHeader @pageTitle="Page Header" @bottomBorder={{true}}>
|
|
7
|
+
<:description>
|
|
8
|
+
<EuiText>While the <strong>EuiPageHeader</strong> component can be placed anywhere within your page layout, we recommend using it within the <a href="#"><strong>EuiPageTemplate</strong></a> component by passing the configuration props as its <EuiCode>pageHeader</EuiCode>.</EuiText>
|
|
9
|
+
</:description>
|
|
10
|
+
|
|
11
|
+
</EuiPageHeader>
|
|
@@ -66,33 +66,55 @@ order: 1
|
|
|
66
66
|
@pageHeader={{hash
|
|
67
67
|
iconType='logoElastic'
|
|
68
68
|
pageTitle='Page Title'
|
|
69
|
-
rightSideItems=(array (component 'eui-button-title' title='Go full screen'))
|
|
70
69
|
tabs=this.tabs
|
|
71
70
|
}}
|
|
72
|
-
@
|
|
71
|
+
@hasBottomBarBlock={{this.showing}}
|
|
73
72
|
>
|
|
74
|
-
|
|
73
|
+
<:pageSideBar>
|
|
74
|
+
<EuiLoadingContent @lines={{8}} />
|
|
75
|
+
</:pageSideBar>
|
|
76
|
+
<:pageHeaderRightSideItems as |Item|>
|
|
77
|
+
<Item>
|
|
78
|
+
<EuiButton>
|
|
79
|
+
Go Full Screen
|
|
80
|
+
</EuiButton>
|
|
81
|
+
</Item>
|
|
82
|
+
</:pageHeaderRightSideItems>
|
|
83
|
+
<:default>
|
|
84
|
+
<EuiLoadingContent @lines={{16}} />
|
|
85
|
+
</:default>
|
|
86
|
+
<:bottomBar>
|
|
87
|
+
Bottom bar
|
|
88
|
+
</:bottomBar>
|
|
75
89
|
</EuiPageTemplate>
|
|
76
90
|
```
|
|
77
91
|
|
|
78
92
|
```js component
|
|
79
93
|
import Component from '@glimmer/component';
|
|
80
94
|
import { tracked } from '@glimmer/tracking';
|
|
81
|
-
import { action } from '@ember/object';
|
|
82
95
|
|
|
83
96
|
export default class DemoIconComponent extends Component {
|
|
84
|
-
|
|
85
|
-
{ label: 'Tab 1', isSelected: true },
|
|
86
|
-
{
|
|
87
|
-
label: 'Tab 2',
|
|
88
|
-
onClick: this.setShowBottomBar
|
|
89
|
-
}
|
|
90
|
-
];
|
|
97
|
+
@tracked selectedTab = true;
|
|
91
98
|
@tracked showing = false;
|
|
92
99
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
get tabs() {
|
|
101
|
+
return [
|
|
102
|
+
{
|
|
103
|
+
label: 'Tab 1',
|
|
104
|
+
isSelected: this.selectedTab,
|
|
105
|
+
onClick: this.setShowBottomBar.bind(this, true)
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
label: 'Tab 2',
|
|
109
|
+
isSelected: !this.selectedTab,
|
|
110
|
+
onClick: this.setShowBottomBar.bind(this, false)
|
|
111
|
+
}
|
|
112
|
+
];
|
|
96
113
|
}
|
|
114
|
+
|
|
115
|
+
setShowBottomBar = (val) => {
|
|
116
|
+
this.selectedTab = val;
|
|
117
|
+
this.showing = !val;
|
|
118
|
+
};
|
|
97
119
|
}
|
|
98
120
|
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
order: 10
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# A simple page layout with custom content
|
|
6
|
+
|
|
7
|
+
<EuiText>
|
|
8
|
+
You can replace the inner parts of <strong>EuiPageBody</strong> with your own content, with or without a page header. This allows you to create dashboard style layouts with lots of panels. It is not recommended, however, to use this setup when you also have side bar.
|
|
9
|
+
</EuiText>
|
|
10
|
+
<EuiSpacer />
|
|
11
|
+
<EuiCallOut>
|
|
12
|
+
<:body>
|
|
13
|
+
This layout can be achieved in <strong>EuiPageTemplate</strong> by setting <EuiCode>template="empty"</EuiCode>.
|
|
14
|
+
</:body>
|
|
15
|
+
</EuiCallOut>
|
|
16
|
+
|
|
17
|
+
```hbs template
|
|
18
|
+
<EuiPageTemplate
|
|
19
|
+
@grow={{true}}
|
|
20
|
+
@restrictWidth={{false}}
|
|
21
|
+
@template='empty'
|
|
22
|
+
@pageHeader={{hash
|
|
23
|
+
iconType='logoElastic'
|
|
24
|
+
pageTitle='Page Title'
|
|
25
|
+
bottomBorder=true
|
|
26
|
+
}}
|
|
27
|
+
>
|
|
28
|
+
<:pageHeaderRightSideItems as |Item|>
|
|
29
|
+
<Item>
|
|
30
|
+
<EuiButton @color='warning'>
|
|
31
|
+
Go to full screen
|
|
32
|
+
</EuiButton>
|
|
33
|
+
</Item>
|
|
34
|
+
<Item>
|
|
35
|
+
<EuiButton>
|
|
36
|
+
Do something
|
|
37
|
+
</EuiButton>
|
|
38
|
+
</Item>
|
|
39
|
+
</:pageHeaderRightSideItems>
|
|
40
|
+
<:default>
|
|
41
|
+
<EuiFlexGrid @columns={{2}}>
|
|
42
|
+
<EuiFlexItem>
|
|
43
|
+
<EuiPanel style='height: 200px' />
|
|
44
|
+
</EuiFlexItem>
|
|
45
|
+
<EuiFlexItem>
|
|
46
|
+
<EuiPanel style='height: 200px' />
|
|
47
|
+
</EuiFlexItem>
|
|
48
|
+
<EuiFlexItem>
|
|
49
|
+
<EuiPanel style='height: 200px' />
|
|
50
|
+
</EuiFlexItem>
|
|
51
|
+
<EuiFlexItem>
|
|
52
|
+
<EuiPanel style='height: 200px' />
|
|
53
|
+
</EuiFlexItem>
|
|
54
|
+
</EuiFlexGrid>
|
|
55
|
+
</:default>
|
|
56
|
+
|
|
57
|
+
</EuiPageTemplate>
|
|
58
|
+
```
|
|
@@ -35,12 +35,22 @@ order: 2
|
|
|
35
35
|
@pageHeader={{hash
|
|
36
36
|
iconType='logoElastic'
|
|
37
37
|
pageTitle='Page Title'
|
|
38
|
-
rightSideItems=(array (component 'eui-button-title' title='Go full screen'))
|
|
39
38
|
tabs=this.tabs
|
|
40
|
-
description=
|
|
39
|
+
description='Restricting the width to 75%.'
|
|
41
40
|
}}
|
|
42
|
-
@pageSideBar={{component 'eui-loading-content' lines=8}}
|
|
43
41
|
>
|
|
44
|
-
|
|
42
|
+
<:pageSideBar>
|
|
43
|
+
<EuiLoadingContent @lines={{8}} />
|
|
44
|
+
</:pageSideBar>
|
|
45
|
+
<:pageHeaderRightSideItems as |Item|>
|
|
46
|
+
<Item>
|
|
47
|
+
<EuiButton>
|
|
48
|
+
Go to full screen
|
|
49
|
+
</EuiButton>
|
|
50
|
+
</Item>
|
|
51
|
+
</:pageHeaderRightSideItems>
|
|
52
|
+
<:default>
|
|
53
|
+
<EuiLoadingContent @lines={{16}} />
|
|
54
|
+
</:default>
|
|
45
55
|
</EuiPageTemplate>
|
|
46
56
|
```
|
|
@@ -37,14 +37,25 @@ order: 3
|
|
|
37
37
|
```hbs template
|
|
38
38
|
<EuiPageTemplate
|
|
39
39
|
@grow={{true}}
|
|
40
|
-
@pageHeader={{hash
|
|
41
|
-
iconType='logoElastic'
|
|
42
|
-
pageTitle='Page Title'
|
|
43
|
-
rightSideItems=(array (component 'eui-button-title' title='Go full screen'))
|
|
44
|
-
}}
|
|
45
|
-
@pageSideBar={{component 'eui-loading-content' lines=8}}
|
|
46
|
-
@bottomBar={{component "eui-button-title" title="Save"}}
|
|
40
|
+
@pageHeader={{hash iconType='logoElastic' pageTitle='Page Title'}}
|
|
47
41
|
>
|
|
48
|
-
|
|
42
|
+
<:pageSideBar>
|
|
43
|
+
<EuiLoadingContent @lines={{8}} />
|
|
44
|
+
</:pageSideBar>
|
|
45
|
+
<:pageHeaderRightSideItems as |Item|>
|
|
46
|
+
<Item>
|
|
47
|
+
<EuiButton>
|
|
48
|
+
Go to full screen
|
|
49
|
+
</EuiButton>
|
|
50
|
+
</Item>
|
|
51
|
+
</:pageHeaderRightSideItems>
|
|
52
|
+
<:default>
|
|
53
|
+
<EuiLoadingContent @lines={{16}} />
|
|
54
|
+
</:default>
|
|
55
|
+
<:bottomBar>
|
|
56
|
+
<EuiButton>
|
|
57
|
+
Save
|
|
58
|
+
</EuiButton>
|
|
59
|
+
</:bottomBar>
|
|
49
60
|
</EuiPageTemplate>
|
|
50
61
|
```
|