diff --git a/packages/x-design-system/demo/src/app.vue b/packages/x-design-system/demo/src/app.vue index db94f0e417..dcef79d0a0 100644 --- a/packages/x-design-system/demo/src/app.vue +++ b/packages/x-design-system/demo/src/app.vue @@ -1,9 +1,11 @@ diff --git a/packages/x-design-system/demo/src/components/button.vue b/packages/x-design-system/demo/src/components/button.vue new file mode 100644 index 0000000000..7986fddc53 --- /dev/null +++ b/packages/x-design-system/demo/src/components/button.vue @@ -0,0 +1,189 @@ + + + diff --git a/packages/x-design-system/lib/components/button.css b/packages/x-design-system/lib/components/button.css new file mode 100644 index 0000000000..a16c1d1ec8 --- /dev/null +++ b/packages/x-design-system/lib/components/button.css @@ -0,0 +1,287 @@ +/* Base */ +@utility button { + @apply xds:flex xds:justify-center xds:items-center xds:content-center xds:flex-row xds:flex-nowrap; + @apply xds:border-1 xds:border-solid xds:cursor-pointer; + @apply xds:font-family-main xds:font-bold; + @apply xds:text-neutral-0 xds:bg-neutral-90 xds:border-neutral-90; + + /* `@apply xds:button-md;` can not be use here because cause circular dependency. */ + @apply xds:min-h-40 xds:gap-8 xds:ps-16 xds:pe-16 xds:text-sm; + + &:hover, + &:active { + @apply xds:bg-neutral-100 xds:border-neutral-100; + } + + &.xds\:selected { + @apply xds:bg-neutral-100 xds:border-neutral-100; + + &:hover, + &:active { + @apply xds:bg-neutral-90 xds:border-neutral-90; + } + } + + &:disabled { + @apply xds:border-neutral-10 xds:bg-neutral-10 xds:text-neutral-25 xds:cursor-not-allowed; + + &:hover, + &:active { + @apply xds:border-neutral-10 xds:bg-neutral-10 xds:text-neutral-25 xds:cursor-not-allowed; + } + } +} + +/* Sizes */ +@utility button-sm { + @apply xds:min-h-32 xds:gap-8 xds:ps-12 xds:pe-12 xds:text-sm; +} +@utility button-md { + @apply xds:min-h-40 xds:gap-8 xds:ps-16 xds:pe-16 xds:text-sm; +} +@utility button-lg { + @apply xds:min-h-48 xds:gap-8 xds:ps-20 xds:pe-20 xds:text-sm; +} +@utility button-xl { + @apply xds:min-h-56 xds:gap-8 xds:ps-24 xds:pe-24 xds:text-lg; +} + +/* Layouts */ +@utility button-circle { + @apply xds:aspect-square xds:ps-0 xds:pe-0 xds:rounded-full; +} +@utility button-square { + @apply xds:aspect-square xds:ps-0 xds:pe-0; +} + +/* Outlined */ +@utility button-outlined { + @apply xds:text-neutral-90 xds:bg-transparent; + @apply xds:border-1 xds:border-neutral-90; + + &:hover, + &:active { + @apply xds:bg-neutral-90 xds:border-neutral-90 xds:text-neutral-0; + } + + &.xds\:selected { + @apply xds:bg-neutral-90 xds:border-neutral-90 xds:text-neutral-0; + + &:hover, + &:active { + @apply xds:bg-transparent xds:border-neutral-90 xds:text-neutral-90; + } + } + + &:disabled { + @apply xds:border-neutral-25 xds:bg-neutral-10 xds:text-neutral-25 xds:cursor-not-allowed; + + &:hover, + &:active { + @apply xds:border-neutral-25 xds:bg-neutral-10 xds:text-neutral-25 xds:cursor-not-allowed; + } + } +} + +/* Ghost */ +@utility button-ghost { + @apply xds:text-neutral-90 xds:bg-transparent; + @apply xds:border-0; + + &:hover, + &:active { + @apply xds:bg-neutral-10 xds:border-neutral-10 xds:text-neutral-90; + } + + &.xds\:selected { + @apply xds:bg-neutral-10 xds:border-neutral-10 xds:text-neutral-90; + + &:hover, + &:active { + @apply xds:bg-neutral-25 xds:border-neutral-25 xds:text-neutral-90; + } + } + + &:disabled { + @apply xds:bg-transparent xds:border-0 xds:text-neutral-25 xds:cursor-not-allowed; + + &:hover, + &:active { + @apply xds:border-0 xds:bg-transparent xds:text-neutral-25 xds:cursor-not-allowed; + } + } +} + +/* Tight */ +@utility button-tight { + @apply xds:text-neutral-75 xds:bg-transparent; + @apply xds:border-0; + + &:hover, + &:active { + @apply xds:bg-transparent xds:border-0 xds:text-neutral-90; + } + + &.xds\:selected { + @apply xds:bg-transparent xds:border-0 xds:text-neutral-90; + + &:hover, + &:active { + @apply xds:bg-transparent xds:border-0 xds:text-neutral-75; + } + } + + &:disabled { + @apply xds:bg-transparent xds:border-0 xds:text-neutral-25 xds:cursor-not-allowed; + + &:hover, + &:active { + @apply xds:border-0 xds:bg-transparent xds:text-neutral-25 xds:cursor-not-allowed; + } + } +} + +/* Link */ +@utility button-link { + @apply xds:min-h-0 xds:ps-0 xds:pe-0; + @apply xds:border-0 xds:underline xds:font-normal; + @apply xds:text-neutral-75 xds:bg-transparent; + + &:hover, + &:active { + @apply xds:bg-transparent xds:border-0 xds:text-neutral-90; + } + + &.xds\:selected { + @apply xds:bg-transparent xds:border-0 xds:text-neutral-100; + + &:hover, + &:active { + @apply xds:bg-transparent xds:border-0 xds:text-neutral-90; + } + } + + &:disabled { + @apply xds:bg-transparent xds:border-0 xds:text-neutral-25 xds:cursor-not-allowed; + + &:hover, + &:active { + @apply xds:border-0 xds:bg-transparent xds:text-neutral-25 xds:cursor-not-allowed; + } + } +} + +/* Colors */ +@utility button-* { + background-color: --value(--color- * -50); + border-color: --value(--color- * -50); + + &:hover, + &:active { + background-color: --value(--color- * -75); + border-color: --value(--color- * -75); + } + + &.xds\:selected { + background-color: --value(--color- * -75); + border-color: --value(--color- * -75); + + &:hover, + &:active { + background-color: --value(--color- * -50); + border-color: --value(--color- * -50); + } + } + + &.xds\:button-outlined { + @apply xds:bg-transparent; + border-color: --value(--color- * -50); + color: --value(--color- * -50); + + &:hover, + &:active { + @apply xds:text-neutral-0; + background-color: --value(--color- * -50); + border-color: --value(--color- * -50); + } + + &.xds\:selected { + @apply xds:text-neutral-0; + background-color: --value(--color- * -50); + border-color: --value(--color- * -50); + + &:hover, + &:active { + @apply xds:bg-transparent; + border-color: --value(--color- * -50); + color: --value(--color- * -50); + } + } + } + + &.xds\:button-ghost { + @apply xds:border-0 xds:bg-transparent; + color: --value(--color- * -50); + + &:hover, + &:active { + @apply xds:bg-neutral-10 xds:border-neutral-10; + color: --value(--color- * -75); + } + + &.xds\:selected { + @apply xds:bg-neutral-10 xds:border-neutral-10; + color: --value(--color- * -75); + + &:hover, + &:active { + @apply xds:bg-neutral-25 xds:border-neutral-25; + color: --value(--color- * -75); + } + } + } + + &.xds\:button-tight { + @apply xds:border-0 xds:bg-transparent; + color: --value(--color- * -50); + + &:hover, + &:active { + @apply xds:bg-transparent xds:border-0; + color: --value(--color- * -75); + } + + &.xds\:selected { + @apply xds:bg-transparent xds:border-0; + color: --value(--color- * -75); + + &:hover, + &:active { + @apply xds:bg-transparent xds:border-0; + color: --value(--color- * -50); + } + } + } + + &.xds\:button-link { + @apply xds:border-0 xds:bg-transparent; + color: --value(--color- * -50); + + &:hover, + &:active { + @apply xds:bg-transparent xds:border-0; + color: --value(--color- * -75); + } + + &.xds\:selected { + @apply xds:bg-transparent xds:border-0; + color: --value(--color- * -75); + + &:hover, + &:active { + @apply xds:bg-transparent xds:border-0; + color: --value(--color- * -50); + } + } + } +} diff --git a/packages/x-design-system/lib/components/index.css b/packages/x-design-system/lib/components/index.css index 27c70becb9..4e38413133 100644 --- a/packages/x-design-system/lib/components/index.css +++ b/packages/x-design-system/lib/components/index.css @@ -1 +1,2 @@ @import './badge.css'; +@import './button.css';