+
+
+
+
+
+
+ Try our sample data
+
+
+ Explore on my own
+
+
+ )}
+ />
+
+
+
+
+ );
+ }
+}
+
+Welcome.propTypes = {
+ urlBasePath: PropTypes.string.isRequired,
+ onSkip: PropTypes.func.isRequired,
+};
diff --git a/src/core_plugins/kibana/public/home/home.less b/src/core_plugins/kibana/public/home/home.less
index b8ce68b98a699..f2c4764a2b58b 100644
--- a/src/core_plugins/kibana/public/home/home.less
+++ b/src/core_plugins/kibana/public/home/home.less
@@ -26,3 +26,83 @@ home-app {
.sampleDataSetCard {
flex-grow: 0;
}
+
+.home-welcome {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 100000;
+ background: inherit;
+ // When sassified, should pull in EUI colors: $euiColorLightestShade, $euiColorEmptyShade
+ background-image: linear-gradient(0deg, @globalColorLightestGray 0%, white 100%);
+ color: inherit;
+ opacity: 0;
+ overflow: auto;
+ animation: homeFadeIn 0.5s ease-in 0s forwards;
+}
+
+.home-welcome::before {
+ content: url(../assets/bg_top_branded.svg);
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 1;
+}
+
+.home-welcome::after {
+ content: url(../assets/bg_bottom_branded.svg);
+ position: fixed;
+ bottom: -2px; // Hides an odd space at the bottom of the svg
+ left: 0;
+ z-index: 1;
+}
+
+.home-welcome-header {
+ position: relative;
+ padding: 32px;
+ z-index: 10;
+}
+
+.home-welcome-logo {
+ display: inline-block;
+ margin-bottom: 24px;
+ background-color: white;
+ border-radius: 100%;
+ padding: 16px;
+ box-shadow: 0 4px 16px -6px rgba(0, 0, 0, 0.75);
+}
+
+.home-welcome-title {
+ color: inherit;
+ font-weight: 400;
+}
+
+.home-welcome-footer-action {
+ margin-right: 8px;
+}
+
+.welcome-subtitle {
+ opacity: 0.75;
+}
+
+.home-welcome-content {
+ position: relative;
+ margin: auto;
+ max-width: 512px;
+ padding-left: 32px;
+ padding-right: 32px;
+ z-index: 10;
+}
+
+@keyframes homeFadeIn {
+ from {
+ opacity: 0;
+ transform: translateY(200px), scale(0.75);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0), scale(1);
+ }
+}
diff --git a/src/core_plugins/kibana/public/management/sections/settings/lib/get_category_name.js b/src/core_plugins/kibana/public/management/sections/settings/lib/get_category_name.js
index cad3f28a5ad16..d41c4bce089ca 100644
--- a/src/core_plugins/kibana/public/management/sections/settings/lib/get_category_name.js
+++ b/src/core_plugins/kibana/public/management/sections/settings/lib/get_category_name.js
@@ -20,14 +20,14 @@
import { StringUtils } from 'ui/utils/string_utils';
const names = {
- 'general': 'General',
- 'timelion': 'Timelion',
- 'notifications': 'Notifications',
- 'visualizations': 'Visualizations',
- 'discover': 'Discover',
- 'dashboard': 'Dashboard',
- 'reporting': 'Reporting',
- 'search': 'Search',
+ general: 'General',
+ timelion: 'Timelion',
+ notifications: 'Notifications',
+ visualizations: 'Visualizations',
+ discover: 'Discover',
+ dashboard: 'Dashboard',
+ reporting: 'Reporting',
+ search: 'Search',
};
export function getCategoryName(category) {
diff --git a/test/functional/page_objects/home_page.js b/test/functional/page_objects/home_page.js
index 9b1c3d6a5c741..77205e7bc3323 100644
--- a/test/functional/page_objects/home_page.js
+++ b/test/functional/page_objects/home_page.js
@@ -63,6 +63,18 @@ export function HomePageProvider({ getService }) {
await testSubjects.click(`launchSampleDataSet${id}`);
}
+ // When logging into a brand new Kibana instance, the welcome screen
+ // may pop up. It may not, depending on the speed of the test, so it
+ // pays to check for the welcome screen and hide it in any test that
+ // hits the Kibana home page.
+ isWelcomeShowing() {
+ return testSubjects.exists('skipWelcomeScreen');
+ }
+
+ async hideWelcomeScreen() {
+ await testSubjects.click('skipWelcomeScreen');
+ }
+
async loadSavedObjects() {
await retry.try(async () => {
await testSubjects.click('loadSavedObjects');
diff --git a/x-pack/test/functional/page_objects/security_page.js b/x-pack/test/functional/page_objects/security_page.js
index c41323f3962ec..96e30e152689f 100644
--- a/x-pack/test/functional/page_objects/security_page.js
+++ b/x-pack/test/functional/page_objects/security_page.js
@@ -16,7 +16,7 @@ export function SecurityPageProvider({ getService, getPageObjects }) {
const testSubjects = getService('testSubjects');
const esArchiver = getService('esArchiver');
const defaultFindTimeout = config.get('timeouts.find');
- const PageObjects = getPageObjects(['common', 'header', 'settings']);
+ const PageObjects = getPageObjects(['common', 'header', 'settings', 'home']);
class LoginPage {
async login(username, password) {
@@ -72,12 +72,24 @@ export function SecurityPageProvider({ getService, getPageObjects }) {
async logout() {
log.debug('SecurityPage.logout');
- const logoutLinkExists = await find.existsByLinkText('Logout');
+ const [isWelcomeShowing, logoutLinkExists] = await Promise.all([
+ PageObjects.home.isWelcomeShowing(),
+ find.existsByLinkText('Logout'),
+ ]);
+
if (!logoutLinkExists) {
log.debug('Logout not found');
return;
}
+ // This sometimes happens when hitting the home screen on a brand new / empty
+ // Kibana instance. It may not *always* happen, depending on how
+ // long it takes the home screen to query Elastic to see if it's a
+ // new Kibana instance.
+ if (isWelcomeShowing) {
+ await PageObjects.home.hideWelcomeScreen();
+ }
+
await find.clickByLinkText('Logout');
await retry.try(async () => {