{
expect(wrapper.element).toMatchSnapshot();
expect(wrapper.findAllByDataTest('ec-navigation__block').length).toBe(5);
});
+
+ it('should render mobile header if "isResponsive" prop is true', () => {
+ const wrapper = mountNavigation({
+ isResponsive: true,
+ });
+
+ expect(wrapper.element).toMatchSnapshot();
+ });
});
diff --git a/src/components/ec-navigation/ec-navigation.story.ts b/src/components/ec-navigation/ec-navigation.story.ts
index 6aba9f2c8..f0ce7a64e 100644
--- a/src/components/ec-navigation/ec-navigation.story.ts
+++ b/src/components/ec-navigation/ec-navigation.story.ts
@@ -1,4 +1,5 @@
import type { Meta, StoryFn } from '@storybook/vue3';
+import { useMediaQuery } from '@vueuse/core';
import { ref, watchEffect } from 'vue';
import { fixedContainerDecorator } from '../../../.storybook/utils';
@@ -83,3 +84,79 @@ basic.args = {
showBrandingLogo: true,
showCopyright: true,
};
+
+export const responsive: StoryFn
= storyArgs => ({
+ components: { EcNavigation },
+ setup() {
+ const showCopyright = ref(false);
+ const isCollapsable = ref(false);
+ const isCollapsed = ref(false);
+ const isResponsive = ref(false);
+ const args = ref({});
+
+ watchEffect(() => {
+ const {
+ showCopyright: showCopyrightFromArgs,
+ isCollapsable: isCollapsableFromArgs,
+ isCollapsed: isCollapsedFromArgs,
+ isResponsive: isResponsiveFromArgs,
+ ...rest
+ } = storyArgs;
+ showCopyright.value = showCopyrightFromArgs;
+ isCollapsable.value = isCollapsableFromArgs;
+ isCollapsed.value = isCollapsedFromArgs;
+ isResponsive.value = isResponsiveFromArgs || useMediaQuery('(max-width: 1279px)').value;
+ args.value = rest;
+ });
+
+ return {
+ showCopyright,
+ isCollapsable,
+ isCollapsed,
+ isResponsive,
+ args,
+ styles: ref({
+ placeholder: {
+ backgroundColor: 'hsla(var(--ec-gray-color-level-8), .1)',
+ },
+ }),
+ };
+ },
+ template: `
+
+
+ User Info placeholder
+
+
+ CTA placeholder
+
+
+ Menu placeholder
+
+
+ Footer Menu placeholder
+
+
+ Copyright placeholder
+
+
+ `,
+});
+
+responsive.args = {
+ branding: {
+ name: 'My Branding',
+ logo: '/ebury-logo-sm.png',
+ },
+ isCollapsable: false,
+ isCollapsed: false,
+ showBrandingLogo: true,
+ showCopyright: true,
+};
diff --git a/src/components/ec-navigation/ec-navigation.vue b/src/components/ec-navigation/ec-navigation.vue
index 8666b295f..f779a5739 100644
--- a/src/components/ec-navigation/ec-navigation.vue
+++ b/src/components/ec-navigation/ec-navigation.vue
@@ -1,5 +1,16 @@
+
+
+
+
+
+import EcMobileHeader from '../ec-mobile-header/ec-mobile-header.vue';
import type { NavigationProps } from './types';
defineOptions({
@@ -98,6 +110,12 @@ withDefaults(defineProps(), {
width: var(--ec-navigation-is-collapsed-width);
}
+ &__mobile-header {
+ &__logo {
+ @apply tw-h-32;
+ }
+ }
+
&__branding {
@apply tw-py-0 tw-px-24;
@apply tw-mt-24 tw-mb-8 tw-mx-0;
diff --git a/src/components/ec-navigation/types.ts b/src/components/ec-navigation/types.ts
index 721439b0b..76612b018 100644
--- a/src/components/ec-navigation/types.ts
+++ b/src/components/ec-navigation/types.ts
@@ -8,4 +8,5 @@ export interface NavigationProps {
isCollapsable: boolean,
branding: NavigationBranding,
showBrandingLogo?: boolean,
+ isResponsive?: boolean,
}
diff --git a/src/main.ts b/src/main.ts
index 3663dd64f..a9b8f18e9 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -62,6 +62,7 @@ export { default as EcMetrolineItem } from './components/ec-metroline/components
export * from './components/ec-metroline/components/ec-metroline-item/types';
export { METROLINE_PROVIDE_KEY } from './components/ec-metroline/provide';
export * from './components/ec-metroline/types';
+export { default as EcMobileHeader } from './components/ec-mobile-header';
export { default as EcModal } from './components/ec-modal';
export * from './components/ec-modal/types';
export { default as EcMultipleValuesSelection } from './components/ec-multiple-values-selection';
diff --git a/tests/integration/snapshots/visual-regression.spec.js/layout-navigation--responsive__chrome.snap.png b/tests/integration/snapshots/visual-regression.spec.js/layout-navigation--responsive__chrome.snap.png
new file mode 100644
index 000000000..aa8955eda
Binary files /dev/null and b/tests/integration/snapshots/visual-regression.spec.js/layout-navigation--responsive__chrome.snap.png differ
diff --git a/tests/integration/snapshots/visual-regression.spec.js/layout-navigation--responsive__firefox.snap.png b/tests/integration/snapshots/visual-regression.spec.js/layout-navigation--responsive__firefox.snap.png
new file mode 100644
index 000000000..e9123f7c5
Binary files /dev/null and b/tests/integration/snapshots/visual-regression.spec.js/layout-navigation--responsive__firefox.snap.png differ
diff --git a/tests/integration/snapshots/visual-regression.spec.js/mobile-header--basic__chrome.snap.png b/tests/integration/snapshots/visual-regression.spec.js/mobile-header--basic__chrome.snap.png
new file mode 100644
index 000000000..293f069e0
Binary files /dev/null and b/tests/integration/snapshots/visual-regression.spec.js/mobile-header--basic__chrome.snap.png differ
diff --git a/tests/integration/snapshots/visual-regression.spec.js/mobile-header--basic__firefox.snap.png b/tests/integration/snapshots/visual-regression.spec.js/mobile-header--basic__firefox.snap.png
new file mode 100644
index 000000000..9b2b0e849
Binary files /dev/null and b/tests/integration/snapshots/visual-regression.spec.js/mobile-header--basic__firefox.snap.png differ