diff --git a/components/Organisms/SnackBar/SnackBar.stories.js b/components/Organisms/SnackBar/SnackBar.stories.js new file mode 100644 index 0000000..3d52e04 --- /dev/null +++ b/components/Organisms/SnackBar/SnackBar.stories.js @@ -0,0 +1,26 @@ +import SnackBar from './SnackBar.twig'; + +export default { + title: 'Design System/Organisms/SnackBar' +}; + +export const base = { + render: (args) => SnackBar(args), + args: { + size: 'small', + variant: 'error', + button: 'Bouton', + text: 'Ici un message d’erreur pour aider l’utilisateur à corriger son erreur.', + withIcon: true + }, + argTypes: { + size: { + options: ['small', 'large'], + control: { type: 'radio' } + }, + variant: { + options: ['error', 'warning', 'validated', 'informative', 'neutral-light', 'neutral-dark'], + control: { type: 'radio' } + }, + } +}; diff --git a/components/Organisms/SnackBar/SnackBar.twig b/components/Organisms/SnackBar/SnackBar.twig new file mode 100644 index 0000000..0303715 --- /dev/null +++ b/components/Organisms/SnackBar/SnackBar.twig @@ -0,0 +1,20 @@ +{% set icon = '' %} +{% if variant|default('theme-light') == 'error' %}{% set icon = 'error' %}{% endif %} +{% if variant|default('theme-light') == 'warning' %}{% set icon = 'warning' %}{% endif %} +{% if variant|default('theme-light') == 'validated' %}{% set icon = 'check' %}{% endif %} +{% if variant|default('theme-light') == 'informative' %}{% set icon = 'info' %}{% endif %} + +
+
+ {% if withIcon and icon %} +
{{ source("/icons/" ~ icon ~".svg") }}
+ {% endif %} +
{{ text }}
+
+ {% if button %} +
+ {% include '../../Molecules/Button/Button.twig' with + {classes:'', variant:'secondary', text:button} %} +
+ {% endif %} +
diff --git a/components/Organisms/SnackBar/snackbar.css b/components/Organisms/SnackBar/snackbar.css new file mode 100644 index 0000000..3b69138 --- /dev/null +++ b/components/Organisms/SnackBar/snackbar.css @@ -0,0 +1,58 @@ +.SnackBar { + border-radius: 8px; + border: 1px solid var(--black); + padding-bottom: rem-convert(20px); + padding-top: rem-convert(20px); + &-content { + display: flex; + } + &-icon { + width: rem-convert(20px); + height: rem-convert(20px); + margin-right: rem-convert(8px); + flex-shrink: 0; + } + &-small { + width: rem-convert(334px); + padding-right: rem-convert(30px); + padding-left: rem-convert(24px); + + .SnackBar-button { + margin-top: rem-convert(10px); + } + } + &-large { + display: flex; + gap: 10px; + width: rem-convert(661px); + padding-right: rem-convert(24px); + padding-left: rem-convert(24px); + } + + + &--neutral-light { + background: var(--theme-lightest); + border-color: var(--theme-medium); + } + &--neutral-dark { + background: var(--theme-light); + border-color: var(--theme-medium); + } + + &--error { + background: var(--error-lightest); + border-color: var(--error); + } + &--warning { + background: var(--warning-lightest); + border-color: var(--warning); + } + &--validated { + background: var(--validated-lightest); + border-color: var(--validated); + } + &--informative { + background: var(--informative-lightest); + border-color: var(--informative); + } +}