From 06116f033ef131feda60f145aa63dfd8f0f87834 Mon Sep 17 00:00:00 2001 From: Zuza Date: Fri, 31 Jul 2020 14:09:14 +0200 Subject: [PATCH 1/7] update image --- src/atoms/image/Image.css | 5 +++ src/atoms/image/Image.html | 7 ++++ src/atoms/image/Image.js | 12 ++++++ src/atoms/image/Image.spec.js | 27 ++++++++++++++ src/atoms/image/Image.stories.js | 64 ++++++++++++++++++++++++++++++++ src/atoms/image/Image.vue | 12 ++++++ 6 files changed, 127 insertions(+) create mode 100644 src/atoms/image/Image.css create mode 100644 src/atoms/image/Image.html create mode 100644 src/atoms/image/Image.js create mode 100644 src/atoms/image/Image.spec.js create mode 100644 src/atoms/image/Image.stories.js create mode 100644 src/atoms/image/Image.vue diff --git a/src/atoms/image/Image.css b/src/atoms/image/Image.css new file mode 100644 index 000000000..bfac73e5b --- /dev/null +++ b/src/atoms/image/Image.css @@ -0,0 +1,5 @@ +.a-image { + @apply block; + @apply w-full max-w-full; + @apply transition-opacity duration-300 ease-linear; +} diff --git a/src/atoms/image/Image.html b/src/atoms/image/Image.html new file mode 100644 index 000000000..da56c59aa --- /dev/null +++ b/src/atoms/image/Image.html @@ -0,0 +1,7 @@ + + + + diff --git a/src/atoms/image/Image.js b/src/atoms/image/Image.js new file mode 100644 index 000000000..caf41eff4 --- /dev/null +++ b/src/atoms/image/Image.js @@ -0,0 +1,12 @@ +// @vue/component +export default { + props: { + /** + * To use another tag instead of `img`, e.g. `picture` + */ + tag: { + type: String, + default: 'img' + } + } +} diff --git a/src/atoms/image/Image.spec.js b/src/atoms/image/Image.spec.js new file mode 100644 index 000000000..d5c793658 --- /dev/null +++ b/src/atoms/image/Image.spec.js @@ -0,0 +1,27 @@ +import { mount } from '@vue/test-utils' +import AImage from './Image.vue' + +describe('Image', () => { + it('has default structure', () => { + const wrapper = mount(AImage, { + propsData: { + src: '/sample/link/to/image.jpg' + } + }) + + expect(wrapper.is('img')).toBe(true) + expect(wrapper.classes()).toContain('a-image') + expect(wrapper.classes().length).toBe(1) + }) + + it('should be generated with the `alt` passed as attributes', () => { + const wrapper = mount(AImage, { + attrs: { + alt: 'Sample Image' + } + }) + + expect(wrapper.attributes().alt).toBeDefined() + expect(wrapper.attributes().alt).toEqual('Sample Image') + }) +}) diff --git a/src/atoms/image/Image.stories.js b/src/atoms/image/Image.stories.js new file mode 100644 index 000000000..5f4b9f2b9 --- /dev/null +++ b/src/atoms/image/Image.stories.js @@ -0,0 +1,64 @@ +import { text } from '@storybook/addon-knobs' + +import AImage from './Image.vue' + +export default { + title: 'Atoms/Image', + components: AImage +} + +export const Default = () => ({ + components: { AImage }, + props: { + srcKnob: { + default: text('Image src', 'images/image/banner-480_480.png') + } + }, + template: ` + + ` +}) + +export const Picture = () => ({ + components: { AImage }, + props: { + srcKnob: { + default: text('Default src', 'images/image/banner-480_480.png') + }, + srcKnob1: { + default: text('Image src 1', 'images/image/banner-480_480.png') + }, + srcKnob2: { + default: text('Image src 2', 'images/image/banner-768_402.png') + }, + srcKnob3: { + default: text('Image src 3', 'images/image/banner-992_254.png') + }, + tagKnob: { + default: text('Html tag', 'picture') + } + }, + template: ` + + + + + alt text + + ` +}) diff --git a/src/atoms/image/Image.vue b/src/atoms/image/Image.vue new file mode 100644 index 000000000..a8c603cd5 --- /dev/null +++ b/src/atoms/image/Image.vue @@ -0,0 +1,12 @@ +