diff --git a/components/button/style/compact.ts b/components/button/style/compact.ts index 3d891897e0..e2c65a7d28 100644 --- a/components/button/style/compact.ts +++ b/components/button/style/compact.ts @@ -5,38 +5,67 @@ import { genCompactItemStyle } from '../../style/compact-item'; import { genCompactItemVerticalStyle } from '../../style/compact-item-vertical'; import type { GenerateStyle } from '../../theme/internal'; import { genSubStyleComponent } from '../../theme/internal'; +import { genCssVar } from '../../theme/util/genStyleUtils'; import type { ButtonToken } from './token'; import { prepareComponentToken, prepareToken } from './token'; const genButtonCompactStyle: GenerateStyle = (token) => { - const { componentCls, colorPrimaryHover, lineWidth, calc } = token; + const { antCls, componentCls, lineWidth, calc, colorBgContainer } = token; + + const solidSelector = `${componentCls}-variant-solid:not([disabled])`; const insetOffset = calc(lineWidth).mul(-1).equal(); - const getCompactBorderStyle = (vertical?: boolean) => { + + const [varName, varRef] = genCssVar(antCls, 'btn'); + + const getCompactBorderStyle = (vertical?: boolean): CSSObject => { const itemCls = `${componentCls}-compact${vertical ? '-vertical' : ''}-item`; - const selector = `${itemCls}${componentCls}-primary:not([disabled])`; return { // TODO: Border color transition should be not cover when has color. [itemCls]: { - transition: `none`, - }, + [varName('compact-connect-border-color')]: varRef('bg-color-hover'), - [`${selector} + ${selector}::before`]: { - position: 'absolute', - top: vertical ? insetOffset : 0, - insetInlineStart: vertical ? 0 : insetOffset, - backgroundColor: colorPrimaryHover, - content: '""', - width: vertical ? '100%' : lineWidth, - height: vertical ? lineWidth : '100%', - } as CSSObject, + [`&${solidSelector}`]: { + transition: `none`, + + [`& + ${solidSelector}:before`]: [ + { + position: 'absolute', + backgroundColor: varRef('compact-connect-border-color'), + content: '""', + }, + vertical + ? { + top: insetOffset, + insetInline: insetOffset, + height: lineWidth, + } + : { + insetBlock: insetOffset, + insetInlineStart: insetOffset, + width: lineWidth, + }, + ], + + '&:hover:before': { + display: 'none', + }, + }, + }, }; }; - // Special styles for Primary Button - return { - ...getCompactBorderStyle(), - ...getCompactBorderStyle(true), - }; + + // Special styles for solid Button + return [ + getCompactBorderStyle(), + getCompactBorderStyle(true), + { + [`${solidSelector}${componentCls}-color-default`]: { + [varName('compact-connect-border-color')]: + `color-mix(in srgb, ${varRef('bg-color-hover')} 75%, ${colorBgContainer})`, + }, + }, + ]; }; // ============================== Export ============================== diff --git a/components/space/__tests__/__snapshots__/demo-extend.test.ts.snap b/components/space/__tests__/__snapshots__/demo-extend.test.ts.snap index 6e1d7919cc..ff621167b4 100644 --- a/components/space/__tests__/__snapshots__/demo-extend.test.ts.snap +++ b/components/space/__tests__/__snapshots__/demo-extend.test.ts.snap @@ -9278,6 +9278,38 @@ exports[`renders components/space/demo/compact-button-vertical.tsx extend contex +
+
+ + + +
+
`; @@ -13956,7 +13988,9 @@ exports[`renders components/space/demo/compact-debug.tsx extend context correctl `; exports[`renders components/space/demo/compact-nested.tsx extend context correctly 1`] = ` -Array [ +
@@ -14305,8 +14339,7 @@ Array [
- , -
, +
@@ -15879,6 +15912,22 @@ Array [
+ +
@@ -16028,8 +16077,44 @@ Array [
- , -] + +
+ + + + +
+ `; exports[`renders components/space/demo/compact-nested.tsx extend context correctly 2`] = `[]`; diff --git a/components/space/__tests__/__snapshots__/demo.test.tsx.snap b/components/space/__tests__/__snapshots__/demo.test.tsx.snap index 361c9be4a9..2ee878f80d 100644 --- a/components/space/__tests__/__snapshots__/demo.test.tsx.snap +++ b/components/space/__tests__/__snapshots__/demo.test.tsx.snap @@ -1974,6 +1974,38 @@ exports[`renders components/space/demo/compact-button-vertical.tsx correctly 1`] +
+
+ + + +
+
`; @@ -3673,7 +3705,9 @@ exports[`renders components/space/demo/compact-debug.tsx correctly 1`] = ` `; exports[`renders components/space/demo/compact-nested.tsx correctly 1`] = ` -Array [ +
@@ -3944,8 +3978,7 @@ Array [
- , -
, +
@@ -4002,6 +4035,22 @@ Array [
+ +
@@ -4063,8 +4112,44 @@ Array [
- , -] + +
+ + + + +
+ `; exports[`renders components/space/demo/debug.tsx correctly 1`] = ` diff --git a/components/space/demo/compact-button-vertical.tsx b/components/space/demo/compact-button-vertical.tsx index a2c27f05f1..7e1288f2f3 100644 --- a/components/space/demo/compact-button-vertical.tsx +++ b/components/space/demo/compact-button-vertical.tsx @@ -18,6 +18,11 @@ const App: React.FC = () => ( + + + + + ); diff --git a/components/space/demo/compact-nested.tsx b/components/space/demo/compact-nested.tsx index 754182c040..c6bf4a5ed1 100644 --- a/components/space/demo/compact-nested.tsx +++ b/components/space/demo/compact-nested.tsx @@ -1,9 +1,9 @@ import React from 'react'; import { CopyOutlined, SearchOutlined } from '@ant-design/icons'; -import { Button, Cascader, Input, InputNumber, Select, Space, TimePicker } from 'antd'; +import { Button, Cascader, Flex, Input, InputNumber, Select, Space, TimePicker } from 'antd'; const App: React.FC = () => ( - <> + @@ -33,12 +33,14 @@ const App: React.FC = () => ( -
+ + + ( - + + + + + + + +
); export default App;