mirror of
https://github.com/ant-design/ant-design.git
synced 2026-02-09 02:49:18 +08:00
chore: sync master into feature
This commit is contained in:
@@ -227,7 +227,7 @@ const Overview: React.FC = () => {
|
||||
src={
|
||||
isDark && component.coverDark ? component.coverDark : component.cover
|
||||
}
|
||||
alt={component.title}
|
||||
alt=""
|
||||
/>
|
||||
</div>
|
||||
</Card>
|
||||
|
||||
@@ -96,6 +96,33 @@ describe('ConfigProvider.DynamicTheme', () => {
|
||||
).toBeTruthy();
|
||||
});
|
||||
|
||||
it('icon styles should use cssVar key from theme config', () => {
|
||||
render(
|
||||
<ConfigProvider theme={{ cssVar: { key: 'custom-css-var' } }}>
|
||||
<SmileOutlined />
|
||||
</ConfigProvider>,
|
||||
);
|
||||
|
||||
const dynamicStyles = Array.from(document.querySelectorAll('style[data-css-hash]'));
|
||||
|
||||
// Should have styles with the custom cssVar key
|
||||
expect(
|
||||
dynamicStyles.some((style) => {
|
||||
const { innerHTML } = style;
|
||||
return innerHTML.includes('.custom-css-var');
|
||||
}),
|
||||
).toBeTruthy();
|
||||
|
||||
// Should NOT have styles with the default css-var-root key
|
||||
// This ensures icon styles registered inside ConfigProvider use the correct context
|
||||
expect(
|
||||
dynamicStyles.some((style) => {
|
||||
const { innerHTML } = style;
|
||||
return innerHTML.includes('.css-var-root');
|
||||
}),
|
||||
).toBeFalsy();
|
||||
});
|
||||
|
||||
// eslint-disable-next-line jest/no-disabled-tests
|
||||
it.skip('layer should affect icon', () => {
|
||||
render(
|
||||
|
||||
@@ -91,6 +91,18 @@ import type { SizeType } from './SizeContext';
|
||||
import SizeContext, { SizeContextProvider } from './SizeContext';
|
||||
import useStyle from './style';
|
||||
|
||||
/**
|
||||
* This component registers icon styles inside the DesignTokenContext.Provider
|
||||
* so that CSS variables use the correct cssVar key from the theme config.
|
||||
*/
|
||||
const IconStyle: React.FC<{ iconPrefixCls: string; csp?: CSPConfig }> = ({
|
||||
iconPrefixCls,
|
||||
csp,
|
||||
}) => {
|
||||
useStyle(iconPrefixCls, csp);
|
||||
return null;
|
||||
};
|
||||
|
||||
export type { Variant };
|
||||
|
||||
export { Variants };
|
||||
@@ -440,8 +452,6 @@ const ProviderChildren: React.FC<ProviderChildrenProps> = (props) => {
|
||||
const iconPrefixCls = customIconPrefixCls || parentContext.iconPrefixCls || defaultIconPrefixCls;
|
||||
const csp = customCsp || parentContext.csp;
|
||||
|
||||
useStyle(iconPrefixCls, csp);
|
||||
|
||||
const mergedTheme = useTheme(theme, parentContext.theme, { prefixCls: getPrefixCls('') });
|
||||
|
||||
if (process.env.NODE_ENV !== 'production') {
|
||||
@@ -591,6 +601,7 @@ const ProviderChildren: React.FC<ProviderChildrenProps> = (props) => {
|
||||
|
||||
let childNode = (
|
||||
<>
|
||||
<IconStyle iconPrefixCls={iconPrefixCls} csp={csp} />
|
||||
<PropWarning dropdownMatchSelectWidth={dropdownMatchSelectWidth} />
|
||||
{children}
|
||||
</>
|
||||
|
||||
@@ -26,7 +26,7 @@ export default function useItems(
|
||||
|
||||
// convert legacy type
|
||||
return React.useMemo(() => {
|
||||
const mergedItems: TimelineItemType[] = parseItems.map((item, index) => {
|
||||
const mergedItems = parseItems.map<TimelineItemType>((item, index) => {
|
||||
const {
|
||||
label,
|
||||
children,
|
||||
|
||||
@@ -1094,8 +1094,8 @@ describe('immutable data', () => {
|
||||
const [targetKeys, setTargetKeys] = useState<TransferProps['targetKeys']>([]);
|
||||
|
||||
const getMock = () => {
|
||||
const tempTargetKeys = [];
|
||||
const tempMockData = [];
|
||||
const tempTargetKeys: React.Key[] = [];
|
||||
const tempMockData: DefaultRecordType[] = [];
|
||||
for (let i = 0; i < 2; i++) {
|
||||
const data = {
|
||||
key: i.toString(),
|
||||
|
||||
@@ -14,8 +14,8 @@ const App: React.FC = () => {
|
||||
const [targetKeys, setTargetKeys] = useState<TransferProps['targetKeys']>([]);
|
||||
|
||||
const getMock = () => {
|
||||
const tempTargetKeys = [];
|
||||
const tempMockData = [];
|
||||
const tempTargetKeys: React.Key[] = [];
|
||||
const tempMockData: RecordType[] = [];
|
||||
for (let i = 0; i < 20; i++) {
|
||||
const data = {
|
||||
key: i.toString(),
|
||||
|
||||
@@ -14,8 +14,8 @@ const App: React.FC = () => {
|
||||
const [targetKeys, setTargetKeys] = useState<React.Key[]>([]);
|
||||
|
||||
const getMock = () => {
|
||||
const tempTargetKeys = [];
|
||||
const tempMockData = [];
|
||||
const tempTargetKeys: React.Key[] = [];
|
||||
const tempMockData: RecordType[] = [];
|
||||
for (let i = 0; i < 20; i++) {
|
||||
const data = {
|
||||
key: i.toString(),
|
||||
|
||||
@@ -15,8 +15,8 @@ const App: React.FC = () => {
|
||||
const [targetKeys, setTargetKeys] = useState<React.Key[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
const newTargetKeys = [];
|
||||
const newMockData = [];
|
||||
const newTargetKeys: React.Key[] = [];
|
||||
const newMockData: RecordType[] = [];
|
||||
for (let i = 0; i < 2000; i++) {
|
||||
const data = {
|
||||
key: i.toString(),
|
||||
|
||||
@@ -14,8 +14,8 @@ const App: React.FC = () => {
|
||||
const [targetKeys, setTargetKeys] = useState<TransferProps['targetKeys']>([]);
|
||||
|
||||
const getMock = () => {
|
||||
const tempTargetKeys = [];
|
||||
const tempMockData = [];
|
||||
const tempTargetKeys: React.Key[] = [];
|
||||
const tempMockData: RecordType[] = [];
|
||||
for (let i = 0; i < 20; i++) {
|
||||
const data = {
|
||||
key: i.toString(),
|
||||
|
||||
@@ -117,12 +117,12 @@
|
||||
"@babel/runtime": "^7.28.4",
|
||||
"@rc-component/cascader": "~1.11.0",
|
||||
"@rc-component/checkbox": "~1.0.1",
|
||||
"@rc-component/collapse": "~1.1.2",
|
||||
"@rc-component/collapse": "~1.2.0",
|
||||
"@rc-component/color-picker": "~3.0.3",
|
||||
"@rc-component/dialog": "~1.8.0",
|
||||
"@rc-component/drawer": "~1.4.0",
|
||||
"@rc-component/dropdown": "~1.0.2",
|
||||
"@rc-component/form": "~1.6.0",
|
||||
"@rc-component/form": "~1.6.1",
|
||||
"@rc-component/image": "~1.6.0",
|
||||
"@rc-component/input": "~1.1.2",
|
||||
"@rc-component/input-number": "~1.6.2",
|
||||
|
||||
Reference in New Issue
Block a user