Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add AccordionSkeleton and SkeletonText components #178

Merged
merged 12 commits into from
Feb 13, 2019
Merged
38 changes: 38 additions & 0 deletions src/components/cv-accordion/_cv-accordion-item-skeleton.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<template>
<li
class="bx--accordion__item"
:class="{ 'bx--accordion__item--active': open }"
>
<button type="button" class="bx--accordion__heading">
<svg
class="bx--accordion__arrow"
width="8"
height="12"
viewBox="0 0 8 12"
fill-rule="evenodd"
>
<path d="M0 10.6L4.7 6 0 1.4 1.4 0l6.1 6-6.1 6z"></path>
</svg>
<cv-skeleton-text class="bx--accordion__title"></cv-skeleton-text>
</button>
<div class="bx--accordion__content">
<slot></slot>
</div>
</li>
</template>

<script>
import CvSkeletonText from '../cv-skeleton-text/cv-skeleton-text';

export default {
name: 'CvAccordionItemcSkeleton',
components: {
CvSkeletonText,
},
props: {
open: { type: Boolean, default: false },
},
};
</script>

<style lang="scss"></style>
27 changes: 27 additions & 0 deletions src/components/cv-accordion/cv-accordion-skeleton.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<template>
<ul class="bx--accordion bx--skeleton">
<cv-accordion-item-skeleton :open="true">
<cv-skeleton-text width="90%"></cv-skeleton-text>
<cv-skeleton-text width="80%"></cv-skeleton-text>
<cv-skeleton-text width="95%"></cv-skeleton-text>
</cv-accordion-item-skeleton>
<cv-accordion-item-skeleton></cv-accordion-item-skeleton>
<cv-accordion-item-skeleton></cv-accordion-item-skeleton>
<cv-accordion-item-skeleton></cv-accordion-item-skeleton>
</ul>
</template>

<script>
import CvSkeletonText from '../cv-skeleton-text/cv-skeleton-text';
import CvAccordionItemSkeleton from './_cv-accordion-item-skeleton';

export default {
name: 'CvAccordionSkeleton',
components: {
CvSkeletonText,
CvAccordionItemSkeleton,
},
};
</script>

<style lang="scss"></style>
23 changes: 22 additions & 1 deletion src/components/cv-accordion/cv-accordion-story.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { storiesOf } from '@storybook/vue';
import { withKnobs, text, boolean } from '@storybook/addon-knobs';
import { withKnobs, boolean } from '@storybook/addon-knobs';
import { withNotes } from '@storybook/addon-notes';

import SvTemplateView from '../../_storybook/views/sv-template-view/sv-template-view';
Expand All @@ -9,6 +9,7 @@ import knobsHelper from '../../_storybook/utils/knobs-helper';
import CvAccordionNotesMD from './cv-accordion-notes.md';
import CvAccordion from './cv-accordion';
import CvAccordionItem from './cv-accordion-item';
import CvAccordionSkeleton from './cv-accordion-skeleton';

const stories = storiesOf('CvAccordion', module);
stories.addDecorator(withKnobs).addDecorator(withNotes);
Expand Down Expand Up @@ -117,3 +118,23 @@ for (const story of storySet) {
}
);
}

const templateString = `<cv-accordion-skeleton></cv-accordion-skeleton>`;
stories.add(
'skeleton',
() => ({
components: { SvTemplateView, CvAccordionSkeleton },
template: `
<sv-template-view
sv-margin
sv-position="center"
sv-source='${templateString.trim()}'>
<template slot="component">${templateString}</template>
</sv-template-view>
`,
props: {},
}),
{
notes: { markdown: CvAccordionNotesMD },
}
);
19 changes: 19 additions & 0 deletions src/components/cv-skeleton-text/cv-skeleton-text.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<template>
<p
class="bx--skeleton__text"
:class="{ 'bx--skeleton__heading': heading }"
:style="{ width: width }"
></p>
</template>

<script>
export default {
name: 'CvSkeletonText',
props: {
width: { type: String, default: '100%' },
heading: { type: Boolean, default: false },
},
};
</script>

<style lang="scss"></style>