UNPKG

tdesign-react

Version:
476 lines (376 loc) 12.6 kB
@import '../../base.less'; @import './_var.less'; @import './_mixin.less'; @import '../../mixins/_reset.less'; .button-attr-color(@theme, @attr, @ghost: false) { &:hover, &:focus-visible { @{attr}: @@theme-hover; } &:active when (@ghost = true) { @{attr}: @@theme-active; } &.@{prefix}-is-loading when (@ghost = true) { @{attr}: @@theme-default; } &.@{prefix}-is-loading when (@ghost = false) { @{attr}: @@theme-disabled; } // ghost disabled 强制统一色 &.@{prefix}-is-disabled when (@ghost = true) { @{attr}: @btn-color-ghost-disabled; background-color: transparent; } &.@{prefix}-is-disabled when (@ghost = false) { @{attr}: @@theme-disabled; } @theme-default: e('btn-color-@{theme}'); @theme-hover: e('btn-color-@{theme}-hover'); @theme-active: e('btn-color-@{theme}-active'); @theme-disabled: e('btn-color-@{theme}-disabled'); @theme-focus: e('btn-color-@{theme}-focus'); @{attr}: @@theme-default; } .@{prefix}-button { .reset; .button; text-decoration: none; .@{prefix}-button__text, .t-icon { position: relative; z-index: 1; display: inline-flex; } .t-icon { font-size: @btn-icon-size-default; } .@{prefix}-loading { font-size: @btn-loading-size; } .t-icon + .@{prefix}-button__text:not(:empty) { margin-left: @btn-icon-text-margin-left; } .@{prefix}-loading + .@{prefix}-button__text:not(:empty) { margin-left: @btn-icon-text-margin-left; } .@{prefix}-button__suffix:not(:empty) { display: inline-flex; margin-left: @btn-icon-text-margin-left; } // 主要按钮 &--variant-base { color: @btn-text-variant-base-color; .button-size(@btn-height-default, @btn-font-default, @btn-icon-size-default, @btn-padding-horizontal-default); .button-attr-color('gray-bg', background-color); .button-attr-color('gray-bg', border-color); .button-attr-color('text-gray', color); &.@{prefix}-button--theme-primary { color: @btn-text-variant-base-color; .button-attr-color('primary', background-color); .button-attr-color('primary', border-color); } &.@{prefix}-button--theme-success { color: @btn-text-variant-base-color; .button-attr-color('success', background-color); .button-attr-color('success', border-color); } &.@{prefix}-button--theme-warning { color: @btn-text-variant-base-color; .button-attr-color('warning', background-color); .button-attr-color('warning', border-color); } &.@{prefix}-button--theme-danger { color: @btn-text-variant-base-color; .button-attr-color('danger', background-color); .button-attr-color('danger', border-color); } &.@{prefix}-button--ghost { .button-attr-color('none', background-color, true); .button-attr-color('white-ghost', color, true); .button-attr-color('white-ghost', border-color, true); &.@{prefix}-button--theme-primary { .button-attr-color('primary', color, true); .button-attr-color('primary', border-color, true); } &.@{prefix}-button--theme-success { .button-attr-color('success', color, true); .button-attr-color('success', border-color, true); } &.@{prefix}-button--theme-warning { .button-attr-color('warning', color, true); .button-attr-color('warning', border-color, true); } &.@{prefix}-button--theme-danger { .button-attr-color('danger', color, true); .button-attr-color('danger', border-color, true); } } &.@{prefix}-is-loading:not(&.@{prefix}-button--ghost) { &.@{prefix}-button--theme-default { color: @btn-color-text; } } } // 次要按钮 &--variant-outline { .button-size(@btn-height-default, @btn-font-default, @btn-icon-size-default, @btn-padding-horizontal-default); .button-attr-color('text', color); .button-attr-color('white-bg', background-color); .button-attr-color('border-gray', border-color); &.@{prefix}-button--theme-primary { .button-attr-color('primary', color); .button-attr-color('primary', border-color); } &.@{prefix}-button--theme-success { .button-attr-color('success', color); .button-attr-color('success', border-color); } &.@{prefix}-button--theme-warning { .button-attr-color('warning', color); .button-attr-color('warning', border-color); } &.@{prefix}-button--theme-danger { .button-attr-color('danger', color); .button-attr-color('danger', border-color); } &.@{prefix}-button--ghost { .button-attr-color('none', background-color, true); .button-attr-color('white-ghost', color, true); .button-attr-color('white-ghost', border-color, true); &.@{prefix}-button--theme-primary { .button-attr-color('primary', color, true); .button-attr-color('primary', border-color, true); } &.@{prefix}-button--theme-success { .button-attr-color('success', color, true); .button-attr-color('success', border-color, true); } &.@{prefix}-button--theme-warning { .button-attr-color('warning', color, true); .button-attr-color('warning', border-color, true); } &.@{prefix}-button--theme-danger { .button-attr-color('danger', color, true); .button-attr-color('danger', border-color, true); } } &.@{prefix}-is-loading:not(&.@{prefix}-button--ghost) { color: @btn-color-text; &.@{prefix}-button--theme-primary { color: @btn-color-primary; background-color: @btn-color-text-bg; } &.@{prefix}-button--theme-success { color: @btn-color-success; background-color: @btn-color-text-bg; } &.@{prefix}-button--theme-warning { color: @btn-color-warning; background-color: @btn-color-text-bg; } &.@{prefix}-button--theme-danger { color: @btn-color-danger; background-color: @btn-color-text-bg; } } } // 虚线按钮 &--variant-dashed { .button-size(@btn-height-default, @btn-font-default, @btn-icon-size-default, @btn-padding-horizontal-default); .button-attr-color('text', color); .button-attr-color('white-bg', background-color); .button-attr-color('border-gray', border-color); border-style: dashed; &.@{prefix}-button--theme-primary { .button-attr-color('primary', color); .button-attr-color('primary', border-color); } &.@{prefix}-button--theme-success { .button-attr-color('success', color); .button-attr-color('success', border-color); } &.@{prefix}-button--theme-warning { .button-attr-color('warning', color); .button-attr-color('warning', border-color); } &.@{prefix}-button--theme-danger { .button-attr-color('danger', color); .button-attr-color('danger', border-color); } &.@{prefix}-button--ghost { .button-attr-color('none', background-color, true); .button-attr-color('white-ghost', color, true); .button-attr-color('white-ghost', border-color, true); &.@{prefix}-button--theme-primary { .button-attr-color('primary', color, true); .button-attr-color('primary', border-color, true); } &.@{prefix}-button--theme-success { .button-attr-color('success', color, true); .button-attr-color('success', border-color, true); } &.@{prefix}-button--theme-warning { .button-attr-color('warning', color, true); .button-attr-color('warning', border-color, true); } &.@{prefix}-button--theme-danger { .button-attr-color('danger', color, true); .button-attr-color('danger', border-color, true); } } &.@{prefix}-is-loading:not(&.@{prefix}-button--ghost) { color: @btn-color-text; &.@{prefix}-button--theme-primary { color: @btn-color-primary; background-color: @btn-color-text-bg; } &.@{prefix}-button--theme-success { color: @btn-color-success; background-color: @btn-color-text-bg; } &.@{prefix}-button--theme-warning { color: @btn-color-warning; background-color: @btn-color-text-bg; } &.@{prefix}-button--theme-danger { color: @btn-color-danger; background-color: @btn-color-text-bg; } } } // 文字按钮 &--variant-text { .button-size(@btn-height-default, @btn-font-default, @btn-icon-size-default, @btn-padding-horizontal-default); .button-attr-color('text-gray', color); .button-attr-color('text-bg', background-color); .button-attr-color('text-bg', border-color); &.@{prefix}-button--theme-primary { .button-attr-color('primary', color); } &.@{prefix}-button--theme-success { .button-attr-color('success', color); } &.@{prefix}-button--theme-warning { .button-attr-color('warning', color); } &.@{prefix}-button--theme-danger { .button-attr-color('danger', color); } &.@{prefix}-button--ghost { background: none; .button-attr-color('white-ghost', color, true); &.@{prefix}-button--theme-primary { .button-attr-color('primary', color, true); } &.@{prefix}-button--theme-success { .button-attr-color('success', color, true); } &.@{prefix}-button--theme-warning { .button-attr-color('warning', color, true); } &.@{prefix}-button--theme-danger { .button-attr-color('danger', color, true); } } &.@{prefix}-is-loading:not(&.@{prefix}-button--ghost) { color: @btn-color-text; &.@{prefix}-button--theme-primary { color: @btn-color-primary; } &.@{prefix}-button--theme-success { color: @btn-color-success; } &.@{prefix}-button--theme-warning { color: @btn-color-warning; } &.@{prefix}-button--theme-danger { color: @btn-color-danger; } } } &.@{prefix}-is-loading, &.@{prefix}-is-disabled { cursor: not-allowed; } &.@{prefix}-size-s { .button-size(@btn-height-s, @btn-font-s, @btn-icon-size-s, @btn-padding-horizontal-s); } &.@{prefix}-size-l { .button-size(@btn-height-l , @btn-font-l, @btn-icon-size-l, @btn-padding-horizontal-l); } &--shape-square { width: @btn-height-default; padding: 0; &.@{prefix}-size-s { width: @btn-height-s; padding: 0; } &.@{prefix}-size-l { width: @btn-height-l; padding: 0; } } &--shape-round { border-radius: @border-radius-round; &.@{prefix}-size-s { border-radius: @btn-shape-border-radius-s; } &.@{prefix}-size-l { border-radius: @btn-shape-border-radius-l; } } &--shape-circle { width: @btn-height-default; padding: 0; text-align: center; border-radius: @btn-shape-border-radius-default; .t-icon { font-size: @btn-icon-size-default; } .@{prefix}-loading { font-size: @btn-loading-size; } &.@{prefix}-size-s { width: @btn-height-s; border-radius: @btn-shape-border-radius-s; } &.@{prefix}-size-l { width: @btn-height-l; padding: 0; border-radius: @btn-shape-border-radius-l; } } &.@{prefix}-size-full-width { display: flex; width: 100%; } } .@{prefix}-button--ghost { --ripple-color: @gray-color-10; // 幽灵按钮相当于按钮深色模式,因此固定为深色模式 token } .@{prefix}-button:not(.@{prefix}-is-disabled):not(.@{prefix}-button--ghost) { --ripple-color: @btn-color-white-bg-active; } .@{prefix}-button--variant-base:not(.@{prefix}-is-disabled):not(.@{prefix}-button--ghost) { --ripple-color: @btn-color-gray-bg-active; } .@{prefix}-button--variant-base.@{prefix}-button--theme-primary:not(.@{prefix}-is-disabled):not( .@{prefix}-button--ghost ) { --ripple-color: @btn-color-primary-active; } .@{prefix}-button--variant-base.@{prefix}-button--theme-success:not(.@{prefix}-is-disabled):not( .@{prefix}-button--ghost ) { --ripple-color: @btn-color-success-active; } .@{prefix}-button--variant-base.@{prefix}-button--theme-warning:not(.@{prefix}-is-disabled):not( .@{prefix}-button--ghost ) { --ripple-color: @btn-color-warning-active; } .@{prefix}-button--variant-base.@{prefix}-button--theme-danger:not(.@{prefix}-is-disabled):not( .@{prefix}-button--ghost ) { --ripple-color: @btn-color-danger-active; }