diff --git a/examples/sites/demos/pc/app/numeric/dynamic-disabled-composition-api.vue b/examples/sites/demos/pc/app/numeric/dynamic-disabled-composition-api.vue index 0b99aff7b6..07eaeb03e7 100644 --- a/examples/sites/demos/pc/app/numeric/dynamic-disabled-composition-api.vue +++ b/examples/sites/demos/pc/app/numeric/dynamic-disabled-composition-api.vue @@ -2,6 +2,9 @@
全部禁用: + + + 部分禁用:
@@ -17,3 +20,9 @@ const disabled = ref(true) const min = ref(0) const max = ref(10) + + diff --git a/examples/sites/demos/pc/app/numeric/dynamic-disabled.vue b/examples/sites/demos/pc/app/numeric/dynamic-disabled.vue index 9f04c69dae..097f36312c 100644 --- a/examples/sites/demos/pc/app/numeric/dynamic-disabled.vue +++ b/examples/sites/demos/pc/app/numeric/dynamic-disabled.vue @@ -2,6 +2,9 @@
全部禁用: + + + 部分禁用:
@@ -25,3 +28,9 @@ export default { } } + + diff --git a/examples/sites/demos/pc/app/numeric/numeric-size-composition-api.vue b/examples/sites/demos/pc/app/numeric/numeric-size-composition-api.vue index 51253d6ff5..e966410f40 100644 --- a/examples/sites/demos/pc/app/numeric/numeric-size-composition-api.vue +++ b/examples/sites/demos/pc/app/numeric/numeric-size-composition-api.vue @@ -2,11 +2,11 @@


+ +



-

-
diff --git a/examples/sites/demos/pc/app/numeric/numeric-size.spec.ts b/examples/sites/demos/pc/app/numeric/numeric-size.spec.ts index 49536ab6be..4ec7560a01 100644 --- a/examples/sites/demos/pc/app/numeric/numeric-size.spec.ts +++ b/examples/sites/demos/pc/app/numeric/numeric-size.spec.ts @@ -12,14 +12,14 @@ test('尺寸', async ({ page }) => { await largeNumeric.locator('.tiny-numeric__increase').click() // small尺寸 - const smallNumeric = page.locator('.tiny-numeric').nth(1) + const smallNumeric = page.locator('.tiny-numeric').nth(2) await expect(smallNumeric).toHaveClass(/tiny-numeric--small/) await smallNumeric.getByRole('spinbutton').fill('111') await smallNumeric.locator('.tiny-numeric__decrease').click() await smallNumeric.locator('.tiny-numeric__increase').click() // mini尺寸 - const miniNumeric = page.locator('.tiny-numeric').nth(2) + const miniNumeric = page.locator('.tiny-numeric').nth(3) await expect(miniNumeric).toHaveClass(/tiny-numeric--mini/) await miniNumeric.getByRole('spinbutton').fill('100') await miniNumeric.locator('.tiny-numeric__decrease').click() diff --git a/examples/sites/demos/pc/app/numeric/numeric-size.vue b/examples/sites/demos/pc/app/numeric/numeric-size.vue index d37db0be8b..758bc07094 100644 --- a/examples/sites/demos/pc/app/numeric/numeric-size.vue +++ b/examples/sites/demos/pc/app/numeric/numeric-size.vue @@ -2,11 +2,11 @@


+ +



-

-
diff --git a/packages/theme/src/numeric/index.less b/packages/theme/src/numeric/index.less index d769e4bf41..0ec79cf92e 100644 --- a/packages/theme/src/numeric/index.less +++ b/packages/theme/src/numeric/index.less @@ -19,11 +19,11 @@ @input-prefix-cls: ~'@{css-prefix}input'; .@{numeric-prefix-cls} { - .component-css-vars-numeric(); + .inject-Numeric-vars(); position: relative; display: inline-block; - width: var(--ti-numeric-input-width); + width: var(--tv-Numeric-input-width); overflow: hidden; &__input { @@ -33,11 +33,11 @@ &.is-disabled &-inner { cursor: not-allowed; pointer-events: none; - border: 1px solid var(--ti-numeric-input-border-color-disabled); - color: var(--ti-numeric-input-disabled-text-color); - background: var(--ti-numeric-input-disabled-bg-color); + border: 1px solid var(--tv-Numeric-input-border-color-disabled); + color: var(--tv-Numeric-input-disabled-text-color); + background: var(--tv-Numeric-input-disabled-bg-color); - .placeholder(@color: var(-ti-numeric-input-placeholder-text-color)); + .placeholder(@color: var(--tv-Numeric-input-placeholder-text-color)); } &.is-disabled .@{input-prefix-cls}__icon { @@ -59,34 +59,34 @@ &__input-inner { width: 100%; - height: var(--ti-numeric-input-normal-height); - line-height: 3; // 保证文本居中 - border: 1px solid var(--ti-numeric-input-normal-border-color); - border-radius: var(--ti-numeric-input-border-radius); - color: var(--ti-numeric-input-normal-text-color); - background: var(--ti-numeric-input-normal-bg-color); - font-size: var(--ti-numeric-input-normal-font-size); - padding: 0 calc(var(--ti-numeric-input-icon-width) + 8px); + height: var(--tv-Numeric-input-normal-height); + line-height: 1.5; // 保证文本居中 + border: 1px solid var(--tv-Numeric-input-normal-border-color); + border-radius: var(--tv-Numeric-input-border-radius); + color: var(--tv-Numeric-input-normal-text-color); + background: var(--tv-Numeric-input-normal-bg-color); + font-size: var(--tv-Numeric-input-normal-font-size); + padding: 0 calc(var(--tv-Numeric-input-icon-width) + 8px); outline: 0; display: inline-block; box-sizing: border-box; appearance: none; text-align: center; transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1); - .placeholder(@color: var(--ti-numeric-input-placeholder-text-color)); + .placeholder(@color: var(--tv-Numeric-input-placeholder-text-color)); &:hover { - border: 1px solid var(--ti-numeric-input-normal-active-border-color); + border: 1px solid var(--tv-Numeric-input-normal-active-border-color); } &:focus, &:active { - border: 1px solid var(--ti-numeric-input-border-color-active); + border: 1px solid var(--tv-Numeric-input-border-color-active); } &:focus { outline: 0; - .placeholder(@color: var(--ti-numeric-input-placeholder-text-color)); + .placeholder(@color: var(--tv-Numeric-input-placeholder-text-color)); } &::-ms-clear { @@ -105,43 +105,43 @@ position: absolute; z-index: 1; top: 1px; - width: var(--ti-numeric-input-icon-width); + width: var(--tv-Numeric-input-icon-width); height: calc(100% - 2px); - line-height: calc(var(--ti-numeric-input-normal-height)); + line-height: calc(var(--tv-Numeric-input-normal-height)); display: flex; align-items: center; justify-content: center; - font-size: var(--ti-numeric-input-icon-size); + font-size: var(--tv-Numeric-input-icon-size); text-align: center; cursor: pointer; + user-select: none; svg { - fill: var(--ti-numeric-input-icon-color); + fill: var(--tv-Numeric-input-icon-color); } &:hover { &:not(.is-disabled) { & ~ .@{numeric-prefix-cls}__input .@{numeric-prefix-cls}__input-inner:not(.is-disabled) { - border-color: var(--ti-numeric-input-icon-color-hover); + border-color: var(--tv-Numeric-input-icon-color-hover); } & ~ .@{numeric-prefix-cls}__input.is-disabled .@{numeric-prefix-cls}__input-inner:not(.is-disabled) { - border-color: var(--ti-numeric-input-border-color-disabled); + border-color: var(--tv-Numeric-input-border-color-disabled); } } svg { - fill: var(--ti-numeric-input-icon-color-hover); + fill: var(--tv-Numeric-input-icon-color-hover); } } &.is-disabled { cursor: not-allowed; - border-color: var(--ti-numeric-input-btn-border-color-disabled); - background-color: var(--ti-numeric-input-btn-disabled-bg-color); + background-color: var(--tv-Numeric-input-btn-disabled-bg-color); svg { - fill: var(--ti-numeric-input-icon-color-disabled); + fill: var(--tv-Numeric-input-icon-color-disabled); } } } @@ -150,21 +150,19 @@ right: 1px; border-radius: 0 4px 4px 0; - &::before { + &:before { content: ''; display: inline-block; position: absolute; top: 50%; left: 0; transform: translateY(-50%); - height: var(--ti-numeric-input-dividing-border-height); - border-left: 1px solid var(--ti-numeric-input-dividing-border-color); + height: var(--tv-Numeric-input-dividing-border-height); + border-left: 1px solid var(--tv-Numeric-input-dividing-border-color); } - &.is-disabled { - &::before { - display: var(--ti-numeric-input-dividing-border-display); - } + &.is-disabled:before { + border-color: var(--tv-Numeric-input-border-color-disabled); } } @@ -172,60 +170,71 @@ left: 1px; border-radius: 4px 0 0 4px; - &::after { + &:after { content: ''; display: inline-block; position: absolute; top: 50%; right: 0; transform: translateY(-50%); - height: var(--ti-numeric-input-dividing-border-height); - border-left: 1px solid var(--ti-numeric-input-dividing-border-color); + height: var(--tv-Numeric-input-dividing-border-height); + border-left: 1px solid var(--tv-Numeric-input-dividing-border-color); } - &.is-disabled { - &::after { - display: var(--ti-numeric-input-dividing-border-display); - } + &.is-disabled:after { + border-color: var(--tv-Numeric-input-border-color-disabled); } } &__unit { - right: 0; + right: 1px; position: absolute; z-index: 1; top: 1px; - width: var(--ti-numeric-input-unit-width); + width: var(--tv-Numeric-input-unit-width); height: calc(100% - 2px); - color: var(--ti-numeric-input-unit-text-color); - font-size: var(--ti-numeric-input-unit-font-size); + color: var(--tv-Numeric-input-unit-text-color); + font-size: var(--tv-Numeric-input-unit-font-size); display: flex; justify-content: center; align-items: center; - border-left: 1px solid var(--ti-numeric-input-unit-border-left-color); - margin: 0 1px 0 0; - background: var(--ti-numeric-input-unit-bg-color); - border-radius: var(--ti-numeric-input-border-radius); + border-left: 1px solid var(--tv-Numeric-input-unit-border-left-color); + background: var(--tv-Numeric-input-unit-bg-color); + border-top-right-radius: var(--tv-Numeric-input-border-radius); + border-bottom-right-radius: var(--tv-Numeric-input-border-radius); + } + + &.is-disabled &__unit { + background: var(--tv-Numeric-input-disabled-bg-color); + border-color: var(--tv-Numeric-input-border-color-disabled); } &.is-disabled &__decrease, &.is-disabled &__increase { - border-color: var(--ti-numeric-input-border-color-disabled); + border-color: var(--tv-Numeric-input-border-color-disabled); svg { - fill: var(--ti-numeric-input-icon-color-disabled); - color: var(--ti-numeric-input-icon-color-disabled); + fill: var(--tv-Numeric-input-icon-color-disabled); + color: var(--tv-Numeric-input-icon-color-disabled); } &:hover { cursor: not-allowed; svg { - fill: var(--ti-numeric-input-icon-color-disabled); + fill: var(--tv-Numeric-input-icon-color-disabled); } } } + &.is-disabled &__decrease:after { + border-color: var(--tv-Numeric-input-border-color-disabled); + } + + &.is-disabled &__increase:before { + border-color: var(--tv-Numeric-input-border-color-disabled); + } + &.is-disabled.is-display-only { display: flex; background: none; @@ -237,7 +246,6 @@ position: absolute; top: 50%; left: 0; - -webkit-transform: translateY(-50%); transform: translateY(-50%); max-width: 100%; text-overflow: ellipsis; @@ -266,70 +274,70 @@ } &--medium { - width: var(--ti-numeric-input-width-medium); + width: var(--tv-Numeric-input-width-medium); .@{numeric-prefix-cls}__decrease, .@{numeric-prefix-cls}__increase { - width: var(--ti-numeric-input-icon-width-medium); - line-height: calc(var(--ti-numeric-input-height-medium) - 2); - font-size: var(--ti-numeric-input-icon-size-medium); + width: var(--tv-Numeric-input-icon-width-medium); + line-height: calc(var(--tv-Numeric-input-height-medium) - 2); + font-size: var(--tv-Numeric-input-icon-size-medium); - &::before, - &::after { - height: var(--ti-numeric-input-divider-height-medium); + &:before, + &:after { + height: var(--tv-Numeric-input-divider-height-medium); } } .@{numeric-prefix-cls}__input-inner { - height: var(--ti-numeric-input-height-medium); - line-height: var(--ti-numeric-input-height-medium); + height: var(--tv-Numeric-input-height-medium); + line-height: var(--tv-Numeric-input-height-medium); padding-left: 43px; padding-right: 43px; } } &--small { - width: var(--ti-numeric-input-width-small); + width: var(--tv-Numeric-input-width-small); .@{numeric-prefix-cls}__decrease, .@{numeric-prefix-cls}__increase { - width: var(--ti-numeric-input-icon-width-small); - line-height: calc(var(--ti-numeric-input-icon-width-small) - 2); - font-size: var(--ti-numeric-input-icon-size-small); + width: var(--tv-Numeric-input-icon-width-small); + line-height: calc(var(--tv-Numeric-input-icon-width-small) - 2); + font-size: var(--tv-Numeric-input-icon-size-small); - &::before, - &::after { - height: var(--ti-numeric-input-divider-height-small); + &:before, + &:after { + height: var(--tv-Numeric-input-divider-height-small); } } .@{numeric-prefix-cls}__input-inner { - height: var(--ti-numeric-input-height-small); - line-height: var(--ti-numeric-input-height-small); + height: var(--tv-Numeric-input-height-small); + line-height: var(--tv-Numeric-input-height-small); padding-left: 37px; padding-right: 37px; } } &--mini { - width: var(--ti-numeric-input-width-mini); + width: var(--tv-Numeric-input-width-mini); font-size: 0; // 消除父子元素间多出来的空白 .@{numeric-prefix-cls}__decrease, .@{numeric-prefix-cls}__increase { - width: var(--ti-numeric-input-icon-width-mini); - line-height: calc(var(--ti-numeric-input-icon-width-mini) - 4); - font-size: var(--ti-numeric-input-icon-size-mini); + width: var(--tv-Numeric-input-icon-width-mini); + line-height: calc(var(--tv-Numeric-input-icon-width-mini) - 4); + font-size: var(--tv-Numeric-input-icon-size-mini); - &::before, - &::after { - height: var(--ti-numeric-input-divider-height-mini); + &:before, + &:after { + height: var(--tv-Numeric-input-divider-height-mini); } } .@{numeric-prefix-cls}__input-inner { - height: var(--ti-numeric-input-height-mini); - line-height: var(--ti-numeric-input-height-mini); + height: var(--tv-Numeric-input-height-mini); + line-height: var(--tv-Numeric-input-height-mini); padding-left: 35px; padding-right: 35px; } @@ -377,10 +385,10 @@ .@{numeric-prefix-cls}__increase { border-radius: 0 4px 0 0; - border-bottom: 1px solid var(--ti-numeric-input-normal-border-color); - border-left: 1px solid var(--ti-numeric-input-normal-border-color); + border-bottom: 1px solid var(--tv-Numeric-input-normal-border-color); + border-left: 1px solid var(--tv-Numeric-input-normal-border-color); - &::before { + &:before { height: 100%; display: none; } @@ -392,14 +400,14 @@ top: auto; left: auto; border-right: none; - border-left: 1px solid var(--ti-numeric-input-normal-border-color); + border-left: 1px solid var(--tv-Numeric-input-normal-border-color); border-radius: 0 0 4px; svg { transform: scale(0.8) translateY(3px); } - &::after { + &:after { display: none; } } diff --git a/packages/theme/src/numeric/vars.less b/packages/theme/src/numeric/vars.less index 341460e488..e8410e5161 100644 --- a/packages/theme/src/numeric/vars.less +++ b/packages/theme/src/numeric/vars.less @@ -10,96 +10,92 @@ * */ -.component-css-vars-numeric() { +.inject-Numeric-vars() { // 默认宽度 - --ti-numeric-input-width: calc(var(--ti-common-size-width-medium, 120px) + 6px); + --tv-Numeric-input-width: 126px; // 默认高度 - --ti-numeric-input-normal-height: var(--ti-common-size-height-normal, 32px); + --tv-Numeric-input-normal-height: var(--tv-size-height-md); // 边框圆角 - --ti-numeric-input-border-radius: var(--ti-common-border-radius-normal, 6px); + --tv-Numeric-input-border-radius: var(--tv-border-radius-md); // 边框默认色 - --ti-numeric-input-normal-border-color: var(--ti-common-color-line-normal, #c2c2c2); + --tv-Numeric-input-normal-border-color: var(--tv-color-border); // 分隔线颜色 - --ti-numeric-input-dividing-border-color: var(--ti-common-border-color-transparent-8, var(--ti-base-bg-color-transparent-8)); + --tv-Numeric-input-dividing-border-color: var(--tv-color-border-divider); // 分割线高度 - --ti-numeric-input-dividing-border-height: var(--ti-common-space-5x, 20px); - // 禁用时分割线display(hide) - --ti-numeric-input-dividing-border-display: none; + --tv-Numeric-input-dividing-border-height: 20px; // 输入框字号 - --ti-numeric-input-normal-font-size: var(--ti-common-font-size-base, 14px); + --tv-Numeric-input-normal-font-size: var(--tv-font-size-md); // 输入框字体色 - --ti-numeric-input-normal-text-color: var(--ti-common-color-text-primary, #191919); + --tv-Numeric-input-normal-text-color: var(--tv-color-text); // 默认背景色 - --ti-numeric-input-normal-bg-color: var(--ti-common-color-bg-white-normal, #ffffff); + --tv-Numeric-input-normal-bg-color: var(--tv-color-bg-secondary); // 按钮默认宽度 - --ti-numeric-input-icon-width: calc(var(--ti-numeric-input-normal-height) - 1px); + --tv-Numeric-input-icon-width: calc(var(--tv-Numeric-input-normal-height) - 1px); // 悬浮边框色 - --ti-numeric-input-normal-active-border-color: var(--ti-common-color-border-hover, #191919); + --tv-Numeric-input-normal-active-border-color: var(--tv-color-border-hover); // 按钮图标色 - --ti-numeric-input-icon-color: var(--ti-common-color-icon-normal, #808080); + --tv-Numeric-input-icon-color: var(--tv-color-icon); // 提示占位符文本色 - --ti-numeric-input-placeholder-text-color: var(--ti-common-color-placeholder, #808080); + --tv-Numeric-input-placeholder-text-color: var(--tv-color-text-placeholder); // 按钮悬浮图标色 - --ti-numeric-input-icon-color-hover: var(--ti-common-color-line-hover, #191919); + --tv-Numeric-input-icon-color-hover: var(--tv-color-icon-hover); // 按钮禁用图标色 - --ti-numeric-input-icon-color-disabled: var(--ti-common-color-icon-disabled, #c2c2c2); + --tv-Numeric-input-icon-color-disabled: var(--tv-color-icon-disabled); // 聚焦时边框色 - --ti-numeric-input-border-color-active: var(--ti-common-color-line-active, #191919); + --tv-Numeric-input-border-color-active: var(--tv-color-border-active); // 图标大小 - --ti-numeric-input-icon-size: calc(var(--ti-common-font-size-base, 14px) + 2px); + --tv-Numeric-input-icon-size: var(--tv-icon-size); // 禁用文本色 - --ti-numeric-input-disabled-text-color: var(--ti-common-color-primary-disabled-text, #c2c2c2); + --tv-Numeric-input-disabled-text-color: var(--tv-color-text-disabled); // 禁用背景色 - --ti-numeric-input-disabled-bg-color: var(--ti-common-color-bg-disabled, #f0f0f0); + --tv-Numeric-input-disabled-bg-color: var(--tv-color-bg-disabled); // 禁用时边框色 - --ti-numeric-input-border-color-disabled: var(--ti-common-color-line-disabled, #dbdbdb); + --tv-Numeric-input-border-color-disabled: var(--tv-color-border-disabled); // 按钮禁用时背景色 - --ti-numeric-input-btn-disabled-bg-color: var(--ti-common-color-bg-disabled, #f0f0f0); - // 按钮禁用时分隔线颜色 - --ti-numeric-input-btn-border-color-disabled: var(--ti-common-color-transparent, transparent); + --tv-Numeric-input-btn-disabled-bg-color: var(--tv-color-bg-disabled); // medium尺寸宽度 - --ti-numeric-input-width-medium: calc(var(--ti-common-size-width-large, 152px) + 6px); + --tv-Numeric-input-width-medium: 158px; // medium尺寸高度 - --ti-numeric-input-height-medium: var(--ti-common-size-height-medium, 40px); + --tv-Numeric-input-height-medium: var(--tv-size-height-lg); // medium尺寸按钮宽度 - --ti-numeric-input-icon-width-medium: var(--ti-numeric-input-height-medium); + --tv-Numeric-input-icon-width-medium: var(--tv-Numeric-input-height-medium); // medium尺寸图标大小 - --ti-numeric-input-icon-size-medium: var(--ti-common-font-size-2, 16px); + --tv-Numeric-input-icon-size-medium: var(--tv-icon-size); // medium尺寸分割线高度 - --ti-numeric-input-divider-height-medium: var(--ti-common-space-6x, 24px); + --tv-Numeric-input-divider-height-medium: 24px; // small尺寸宽度 - --ti-numeric-input-width-small: calc(var(--ti-common-size-34x, 136px) + 6px); + --tv-Numeric-input-width-small: 112px; // small尺寸高度 - --ti-numeric-input-height-small: var(--ti-common-size-9x, 36px); + --tv-Numeric-input-height-small: var(--tv-size-height-sm); // small尺寸按钮宽度 - --ti-numeric-input-icon-width-small: var(--ti-numeric-input-height-small); + --tv-Numeric-input-icon-width-small: var(--tv-Numeric-input-height-small); // small尺寸图标大小 - --ti-numeric-input-icon-size-small: var(--ti-common-font-size-1, 14px); + --tv-Numeric-input-icon-size-small: 14px; // small尺寸分割线高度 - --ti-numeric-input-divider-height-small: calc(var(--ti-common-space-5x, 20px) - 2px); + --tv-Numeric-input-divider-height-small: 18px; // mini尺寸宽度 - --ti-numeric-input-width-mini: calc(var(--ti-common-space-10, 10px) * 13); + --tv-Numeric-input-width-mini: 102px; // mini尺寸高度 - --ti-numeric-input-height-mini: var(--ti-common-size-height-mini, 24px); + --tv-Numeric-input-height-mini: var(--tv-size-height-xs); // mini尺寸按钮宽度 - --ti-numeric-input-icon-width-mini: var(--ti-numeric-input-height-mini); + --tv-Numeric-input-icon-width-mini: var(--tv-Numeric-input-height-mini); // mini尺寸图标大小 - --ti-numeric-input-icon-size-mini: var(--ti-common-font-size-base, 14px); + --tv-Numeric-input-icon-size-mini: 14px; // mini尺寸分割线高度 - --ti-numeric-input-divider-height-mini: calc(var(--ti-common-space-4x, 16px) - 1px); + --tv-Numeric-input-divider-height-mini: 15px; // 单位内容宽度 - --ti-numeric-input-unit-width: calc(var(--ti-common-space-10, 10px) * 5); + --tv-Numeric-input-unit-width: 50px; // 单位字体色 - --ti-numeric-input-unit-text-color: var(--ti-common-color-text-secondary, #595959); + --tv-Numeric-input-unit-text-color: var(--tv-color-text-secondary); // 单位字号 - --ti-numeric-input-unit-font-size: var(--ti-common-font-size-base, 14px); + --tv-Numeric-input-unit-font-size: var(--tv-font-size-md); // 单位左边框颜色 - --ti-numeric-input-unit-border-left-color: var(--ti-common-color-line-dividing, #f0f0f0); + --tv-Numeric-input-unit-border-left-color: var(--tv-color-border); // 单位背景色 - --ti-numeric-input-unit-bg-color: var(--ti-common-color-bg-gray, #fafafa); + --tv-Numeric-input-unit-bg-color: var(--tv-color-bg-gray-1); }