From 96b10513f8031794fb6f496025c4da7ec70261cd Mon Sep 17 00:00:00 2001 From: mbecle Date: Mon, 29 Apr 2024 12:13:00 +0200 Subject: [PATCH] feat: accordion --- .storybook/preview.ts | 4 + .../Molecules/Accordion/Accordion.stories.js | 53 +++++++++++++ components/Molecules/Accordion/Accordion.twig | 12 +++ components/Molecules/Accordion/accordion.css | 77 +++++++++++++++++++ .../Filters/FilterList/FilterList.stories.js | 5 +- .../Filters/FilterList/FilterList.twig | 2 +- .../Filters/FilterList/filterList.css | 1 - 7 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 components/Molecules/Accordion/Accordion.stories.js create mode 100644 components/Molecules/Accordion/Accordion.twig create mode 100644 components/Molecules/Accordion/accordion.css diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 2395a5c..67561f8 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -20,6 +20,10 @@ const preview: Preview = { name: 'grey', value: '#F5F5F5' }, + { + name: 'grey-lighter', + value: '#D6D6D6' + }, { name: 'white', value: '#FFFFFF' diff --git a/components/Molecules/Accordion/Accordion.stories.js b/components/Molecules/Accordion/Accordion.stories.js new file mode 100644 index 0000000..f6c69c0 --- /dev/null +++ b/components/Molecules/Accordion/Accordion.stories.js @@ -0,0 +1,53 @@ +import Accordion from './Accordion.twig'; +import FilterList from '../Filters/FilterList/FilterList.twig'; +import FieldInput from '../Fields/FieldInput/FieldInput.twig'; + +export default { + title: 'Design System/Molecules/Accordion' +}; + +const commonProps = { + args: { + title: 'Concertina', + }, + argTypes: { + variant: { + options: ['text', 'bold', 'vermillon'], + control: { type: 'select' }, + }, + }, +}; + +export const Base = { + render: (args) => Accordion(args), + ...commonProps, + args: { + ...commonProps.args, + variant: 'text', + content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', + } +}; + +// TODO: manque input avec bouton à l'intérieur pour le code promo +export const Bold = { + render: (args) => Accordion(args), + args: { + ...commonProps.args, + variant: 'bold', + content: `${FieldInput({ placeholder: 'Code Promo', name: 'promoCode' })}`, + } +}; + +export const Vermillon = { + render: (args) => Accordion(args), + args: { + ...commonProps.args, + variant: 'vermillon', + content: ` + ${FilterList({ label: 'Du - cher au + cher', value: 1 })} + ${FilterList({ label: 'Du + cher au - cher', value: 2 })} + ${FilterList({ label: 'Nouveautés', value: 3 })} + ${FilterList({ label: 'Meilleurs notes', value: 4 })} + ${FilterList({ label: 'Promotions', value: 5 })}`, + } +}; diff --git a/components/Molecules/Accordion/Accordion.twig b/components/Molecules/Accordion/Accordion.twig new file mode 100644 index 0000000..8dbba16 --- /dev/null +++ b/components/Molecules/Accordion/Accordion.twig @@ -0,0 +1,12 @@ +{% set classes = '' %} +{% set classes = classes ~ ' Accordion--' ~ (variant|default('text')) %} + +
+ + {{ title }} + {{ source("/icons/chevron-down.svg") }} + +
+ {{ content }} +
+
diff --git a/components/Molecules/Accordion/accordion.css b/components/Molecules/Accordion/accordion.css new file mode 100644 index 0000000..144e609 --- /dev/null +++ b/components/Molecules/Accordion/accordion.css @@ -0,0 +1,77 @@ +.Accordion { + &-summary { + padding: rem-convert(14px) rem-convert(16px); + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid var(--grey-lighter); + font-size: var(--font-size-paragraph-2); + line-height: var(--line-height-paragraph-2); + font-family: var(--font-family-paragraph-2); + color: var(--black); + + &::marker { + font-size: 0; + } + } + + &-icon { + height: rem-convert(28px); + width: rem-convert(28px); + color: var(--black); + transform: rotate(0); + transition: 0.2s ease all; + } + + &-content { + padding: rem-convert(18px) rem-convert(28px) rem-convert(30px) + rem-convert(16px); + border-bottom: 1px solid var(--grey-lighter); + font-size: var(--font-size-paragraph-5); + line-height: var(--line-height-paragraph-5); + font-family: var(--font-family-paragraph-5); + color: var(--black); + } + + &[open] { + .Accordion-summary { + border-bottom: none; + } + + .Accordion-icon { + transform: rotate(-180deg); + transition: 0.2s ease all; + } + } + + &--bold { + .Accordion-summary { + font-weight: 600; + font-size: var(--font-size-paragraph-4); + line-height: var(--line-height-paragraph-4); + border-bottom: none; + } + + .Accordion-content { + border-bottom: none; + padding: rem-convert(0px) rem-convert(16px) rem-convert(20px) + rem-convert(16px); + } + } + + &--vermillon { + background-color: var(--theme-lightest); + + .Accordion-summary { + font-size: var(--font-size-paragraph-4); + line-height: var(--line-height-paragraph-4); + border-bottom: none; + } + + .Accordion-content { + border-bottom: none; + padding: rem-convert(0px) rem-convert(16px) rem-convert(20px) + rem-convert(16px); + } + } +} diff --git a/components/Molecules/Filters/FilterList/FilterList.stories.js b/components/Molecules/Filters/FilterList/FilterList.stories.js index 779d9b7..be146a2 100644 --- a/components/Molecules/Filters/FilterList/FilterList.stories.js +++ b/components/Molecules/Filters/FilterList/FilterList.stories.js @@ -8,9 +8,10 @@ export const Base = { render: (args) => FilterList(args), args: { label: 'Item filtre et tri', - value: 1 + value: 1, + onClick: {}, }, parameters: { - backgrounds: { default: 'grey' }, + backgrounds: { default: 'grey-lighter' }, }, }; diff --git a/components/Molecules/Filters/FilterList/FilterList.twig b/components/Molecules/Filters/FilterList/FilterList.twig index aa174b0..49b09c6 100644 --- a/components/Molecules/Filters/FilterList/FilterList.twig +++ b/components/Molecules/Filters/FilterList/FilterList.twig @@ -1,4 +1,4 @@
- +
diff --git a/components/Molecules/Filters/FilterList/filterList.css b/components/Molecules/Filters/FilterList/filterList.css index ee5bcca..e3d2299 100644 --- a/components/Molecules/Filters/FilterList/filterList.css +++ b/components/Molecules/Filters/FilterList/filterList.css @@ -20,7 +20,6 @@ font-family: var(--font-family-paragraph-3); line-height: var(--line-height-paragraph-3); color: var(--black); - background-color: #fff; border-radius: 4px; width: 100%; padding: rem-convert(12px) rem-convert(56px) rem-convert(12px)