From 3ec2ba5c66276f980f21b08d73afa16709c7eb3c Mon Sep 17 00:00:00 2001 From: Warsono Date: Thu, 15 Jun 2023 15:10:59 +0700 Subject: [PATCH] feat(Button): add new `soft` variant --- packages/button/src/VBtn.stories.ts | 38 +++++++- packages/button/src/VBtn.vue | 2 + .../themes/src/morpheme/_button.dark.scss | 24 ++++- packages/themes/src/morpheme/_button.scss | 88 +++++++++++++++++++ 4 files changed, 149 insertions(+), 3 deletions(-) diff --git a/packages/button/src/VBtn.stories.ts b/packages/button/src/VBtn.stories.ts index 2ba3cc1c0..c3a941358 100644 --- a/packages/button/src/VBtn.stories.ts +++ b/packages/button/src/VBtn.stories.ts @@ -83,6 +83,16 @@ Text.parameters = { }, }; +export const Soft = Template.bind({}); +Soft.args = {color: 'primary', soft: true}; +Soft.parameters = { + docs: { + source: { + code: 'Button', + }, + }, +}; + export const Rounded = Template.bind({}); Rounded.args = {color: 'primary', rounded: true}; Rounded.parameters = { @@ -394,9 +404,35 @@ export const ButtonGroup: Story = () => ({ export const DarkMode: Story = () => ({ components: {VBtnGroup, VBtnToolbar, VBtn}, + setup() { + return { + colors, + variants: ['default', 'outlined', 'text', 'soft'], + }; + }, template: `
-

Default

+

Colors

+
+ + {{ color }} + +
+

Variants

+
+

{{ variant }}

+
+ + {{ color }} + +
+
+

Default

Button Button diff --git a/packages/button/src/VBtn.vue b/packages/button/src/VBtn.vue index d91a36cbc..eb76a1e30 100644 --- a/packages/button/src/VBtn.vue +++ b/packages/button/src/VBtn.vue @@ -13,6 +13,7 @@ export interface Props { href?: string; text?: boolean; outlined?: boolean; + soft?: boolean; rounded?: boolean; disabled?: boolean; noRing?: boolean; @@ -100,6 +101,7 @@ const classes = computed(() => { 'btn--block': props.block, 'btn--loading': props.loading, 'btn--text': props.text, + 'btn--soft': props.soft, 'btn--flush': props.flush, shadow: props.shadow, }, diff --git a/packages/themes/src/morpheme/_button.dark.scss b/packages/themes/src/morpheme/_button.dark.scss index 43c1134ea..ec32f4b6d 100644 --- a/packages/themes/src/morpheme/_button.dark.scss +++ b/packages/themes/src/morpheme/_button.dark.scss @@ -1,5 +1,3 @@ - - .dark { .btn { // disabled @@ -53,6 +51,17 @@ --btn-text-color: var(--color-gray-true-300); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-gray-true-50); + --btn-border-color: var(--color-gray-true-50); + --btn-text-color: var(--color-gray-true-600); + + &:hover { + --btn-text-color: var(--color-gray-true-700); + } + } } &-dark { @@ -88,6 +97,17 @@ --btn-text-color: var(--color-gray-300); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-gray-true-50); + --btn-border-color: var(--color-gray-true-50); + --btn-text-color: var(--color-gray-true-600); + + &:hover { + --btn-text-color: var(--color-gray-true-700); + } + } } } } diff --git a/packages/themes/src/morpheme/_button.scss b/packages/themes/src/morpheme/_button.scss index b08e1cbcf..5db3e96d2 100644 --- a/packages/themes/src/morpheme/_button.scss +++ b/packages/themes/src/morpheme/_button.scss @@ -102,6 +102,17 @@ --btn-text-color: var(--color-primary-700); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-primary-50); + --btn-border-color: var(--color-primary-50); + --btn-text-color: var(--color-primary-600); + + &:hover { + --btn-text-color: var(--color-primary-700); + } + } } &-secondary { @@ -137,6 +148,17 @@ --btn-text-color: var(--color-secondary-700); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-secondary-50); + --btn-border-color: var(--color-secondary-50); + --btn-text-color: var(--color-secondary-600); + + &:hover { + --btn-text-color: var(--color-secondary-700); + } + } } &-default { @@ -171,6 +193,17 @@ --btn-text-color: var(--color-gray-900); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-gray-50); + --btn-border-color: var(--color-gray-50); + --btn-text-color: var(--color-gray-600); + + &:hover { + --btn-text-color: var(--color-gray-700); + } + } } &-info { @@ -206,6 +239,17 @@ --btn-text-color: var(--color-info-700); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-info-50); + --btn-border-color: var(--color-info-50); + --btn-text-color: var(--color-info-600); + + &:hover { + --btn-text-color: var(--color-info-700); + } + } } &-warning { @@ -241,6 +285,17 @@ --btn-text-color: var(--color-warning-700); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-warning-50); + --btn-border-color: var(--color-warning-50); + --btn-text-color: var(--color-warning-600); + + &:hover { + --btn-text-color: var(--color-warning-700); + } + } } &-success { @@ -276,6 +331,17 @@ --btn-text-color: var(--color-success-700); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-success-50); + --btn-border-color: var(--color-success-50); + --btn-text-color: var(--color-success-600); + + &:hover { + --btn-text-color: var(--color-success-700); + } + } } &-error { @@ -311,6 +377,17 @@ --btn-text-color: var(--color-error-700); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-error-50); + --btn-border-color: var(--color-error-50); + --btn-text-color: var(--color-error-600); + + &:hover { + --btn-text-color: var(--color-error-700); + } + } } &-dark { @@ -346,6 +423,17 @@ --btn-text-color: var(--color-gray-900); } } + + // soft + &.btn--soft { + --btn-bg-color: var(--color-gray-true-50); + --btn-border-color: var(--color-gray-true-50); + --btn-text-color: var(--color-gray-true-600); + + &:hover { + --btn-text-color: var(--color-gray-true-700); + } + } } &:not(.btn--flush) {